我面臨着一個巨大的問題。我使用Matlab引擎(engOpen()等)構建了一個帶有嵌入式Matlab函數的複雜C應用程序。會發生以下情況:在同一臺機器上產生matlab的多個副本
- 我產卵這個應用程序的多個實例一臺機器,一個對每個核心
- 但是! ...應用程序然後減速停止。實際上,在我的16核機器上,應用程序的速度大約減慢了16倍。
- 現在我意識到這是因爲每臺機器只有一個sngle matlab引擎,我所有的16個實例共享相同的matlab副本!
- 我試圖複製這與MATLAB的GUI和它的同樣的問題。我在那個需要14秒GUI運行程序,然後我在兩個GUI在同一時間運行它,它需要28秒
這對我來說是一個巨大的問題,因爲我會想念我的最後期限,如果我必須在沒有matlab的情況下重新編程我的整個c應用程序。我知道matlab有並行編程命令,但我的matlab調用嵌入在C應用程序中,我想運行C應用程序的多個實例。再次,我不能重構我的整個c應用程序,因爲我會錯過最後期限。
任何人都可以請讓我知道是否有解決方案(例如真正開始在同一臺機器上的多個matlab進程)。我願意支付額外的許可證。我目前已經完全清除所有機器上安裝的matlab。
非常感謝!
編輯
謝謝奔福格特的幫助。我發現Matlab的單個實例已經在使用多個內核。實際上,運行一個實例顯示我充分利用了4個內核。如果我運行Matlab的兩個副本,則可以充分利用8個內核。因此它實際上並行運行。但是,儘管有兩個實例看起來佔用了兩倍的處理能力,但我仍然得到2 *的放緩。因此,2個實例似乎以4 *計算能力總計得到兩倍的結果。爲什麼會這樣?
你確定所有16個實例共享一個單核?單個實例似乎更有可能使用全部16個內核,然後更多實例運行速度較慢,因爲它們每個都不具有16個內核。你能分別檢查一個實例和N個實例的利用率嗎? –
謝謝,是的,你是對的。當我運行我的程序的單個實例時,它完全使用4個內核。所以,當我運行超過4個實例(16/4)時,我必然會遇到經濟放緩 – megavore