1

目前我有一個DLL可以訪問MATLAB中的MILP計算,根據我的理解,大多數MILP求解器都是單線程的,我想知道如何在MILP求解器上同時調用多個函數。計算是否排在彼此之後,並且所有的處理都是通過單線程進行的,還是有一些擴散負載的方式?單線程DLL函數的多個調用如何縮放?

我想了解這種組合從一次呼叫到100次附近同時呼叫的縮放程度如何。它是否受到硬件或軟件的限制?

+0

這個問題有點不清楚,你使用的DLL庫調用MATLAB還是使用MATLAB內部的外部庫(如與DLL鏈接的MEX函數)?如果是前者,它是如何與MATLAB通信的(MATLAB Engine或者是使用MATLAB Compiler等編譯的)? – Amro 2014-09-19 18:09:50

+0

實際上我有其他人將程序集放在一起,但據我所知,它是一個「調用MATLAB的DLL庫」,通過MATLAB引擎進行通信。這是我第一次進入這種類型的項目,所以我仍然試圖理解處理給定問題的最佳方法。通常討論的大多數MILP計算都是大規模問題,在這個問題上,我的討論似乎不是那麼頻繁討論更高頻率的問題。從我所能收集的信息看來,似乎需要可能實現並行性。我只是不確定實現的最佳方法 – user3033725 2014-09-20 18:59:22

+0

可以在DLL中實現並行還是有更好的方法? MATLAB Engine是否可以擴展爲並行性,還是需要一個可以在多個線程中打開副本的編譯版本的計算? – user3033725 2014-09-20 19:04:24

回答

0

據我所知,MATLAB Engine是不是線程安全的。如果您的應用程序是多線程的,那麼您必須確保始終只有一個線程訪問Engine API。這並不是說內置的MATLAB函數本身都是單線程的(實際上很多線性代數,FFT等操作都是內部多線程的),我只是在談論與MATLAB通信的引擎接口,它是不是線程安全的...

當然,這不會阻止您使用多進程實現並行。只需啓動程序的多個實例即可解決獨立的線性編程問題。這是Parallel Computing Toolbox依賴的事情(通過運行本地後臺工作人員或者遠程工作人員與Distributed Computing Toolbox)。