2012-01-16 21 views
2

我有一個奇怪的問題。我有一個Matlab mexfunction,其中我使用了OpenMP指令/函數。並行段(平行...)開始之前,我用命令來設置和打印創建的線程數量:創建的線程數是12,但仍然只能運行在一個12核心的CPU上 -


nP = omp_get_num_procs(); 
omp_set_num_threads(nP); 
mexPrintf("\n Num of threads= %d\n",nP); 
. 
. 
. 
#pragma omp parallel for shared(...) 

的問題是,在輸出端,它打印'Num of threads = 12',但下面的並行部分不能在我的機器的所有12個內核上運行(但只有1個內核)。我的程序寫得很久了,我之前沒有遇到過這樣的問題(它運行在所有12個內核上)。最近,系統遭到破壞,操作系統(Win 7 Pro)重新安裝了最新版本的Matlab 2011b(2010年初)。我還安裝了Visual Studio 2010 Pro。

有什麼我失蹤或忽略?

+0

您是否將Windows配置爲僅使用一個內核? http://www.sevenforums.com/tutorials/66504-processors-limit-number-used-windows-7-a.html。 Windows Server 2008也有限制,具體取決於您購買了多少核心的編輯程序(http://www.directionsonmicrosoft.com/sample/DOMIS/update/2008/02feb/0208ws2plp_ch.htm)。 – 2012-01-16 21:23:52

+0

@AloisKraus:問題在於Windows 7 Pro,它支持兩個物理處理器插槽(以及許多內核/插槽)。 – 2012-01-16 22:08:00

回答

0

你在調用omp parallel for塊內的mex函數嗎?

我已經有了最好的運氣,首先依次提取指針,然後並行處理,然後在結尾順序加載結果到matlab變量。這種並行代碼是純粹的C++,沒有調用mex函數(可以等待共享鎖)。

當然,請確保您實際上是使用OpenMP啓用編譯的...否則指令會被忽略,並且您會以順序代碼結束。

相關問題