1

在我的項目中,我有很多MATLAB函數。對於每個函數,我會在應用程序啓動時調用Initialize函數。我試着用parallel_invoke來調用這個函數。我嘗試了幾次,總是需要更多時間,沒有這個代碼。有人可以解釋這一點嗎? 在MATLAB或Initialize函數中是否有特定的東西?Matlab函數和parallel_invoke

+0

你的問題不清楚..你在C++中使用英特爾TBB庫嗎?你如何與MATLAB集成? – Amro

+0

其中parallel_invoke?女士? TBB?有些代碼可能會有幫助 – doctorlove

回答

1

Matlab Runtime只有一個單獨的解釋器線程,所以並行調用Matlab函數並不會帶來任何好處:當第一個函數A被調用時,MCR獲取一個鎖並在該函數退出時才釋放它。在此期間調用另一個函數B會導致嘗試獲取該鎖,然後顯然只會阻塞,直到A完成。你看到它佔用更多時間的原因可能是由於lock/parallel_invoke的開銷。

我不知道你的意思每個我所說的初始化函數功能是什麼:除非你正在使用多個MATLAB的DLL(這將AFAIK可比具有單個DLL少高性能的),你只需要調用它的Initalize /終止一次。

+1

+1現在有意義什麼OP意味着「初始化函數」。在這裏,其他人不熟悉MATLAB編譯器的上下文:http://blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/和[評論](http: //blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/#comment-32017)Peter Webb證實了使用信號量進行鎖定的這一事實。 – Amro

+0

我在Visual Studio 2010中使用C++ – user1913557