2012-01-16 10 views
2

私は奇妙な問題があります。私はOpenMP指令/関数を使用したMatlab mexfunctionを持っています。並列セクション(...のための並列)の開始前に、私が作成したスレッドの数を設定して印刷するためのコマンドを使用します。作成されたスレッドの数は12ですが、依然として12コアCPUの1つのコアでのみ実行されます


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

問題は、それは、出力で、あります「スレッド数= 12」と表示されますが、それ以降のパラレルセクションはマシンの12コアすべてでは実行されません(ただし1コアのみ)。私のプログラムは長い時間をかけて書かれていました。私はそのような問題は以前にはありませんでした(これは12コアすべてで実行されました)。最近、システムが壊れてしまい、Matlab 2011bのアップデート版(以前の2010b)でOS(Win 7 Pro)が再インストールされました。私はVisual Studio 2010 Proもインストールしました。

紛失や見落としがありますか?

+0

1つのコアのみを使用するように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)。 –

+0

@AloisKraus:Windows 7 Proは、2つの物理プロセッサソケット(および多くのコア/ソケット)をサポートしています。 –

答えて

0

omp parallel forブロック内でmex関数を呼び出していますか?

私は、まずポインタを最初に順番に抽出し、次に並列処理し、結果を最後に順番にmatlab変数にロードしています。そうすれば、並列コードは純粋なC++であり、(共有ロックを待つことができる)mex関数は呼び出されません。

もちろん、OpenMPを有効にして実際にコンパイルしていることを確認してください。そうしないと、指示が無視され、シーケンシャルコードになります。

関連する問題