を返します。コマンドラインで渡される引数に基づいて使用するプロセッサの数。セット2にOMP_SET_NUM_THREADSを使用してスレッドの数()、しかしOMP_GET_NUM_THREADSは()私は、OpenMPを使用して、次のC/C++のコードを持っている1
しかし、私は次の出力を取得しています:なぜ2を返さないomp_get_num_threads()
れ
argv[4]: 2 //OK
nProcessors: 2 //OK
omp_get_num_threads(): 1 //WTF?!
!?
が指摘したように、私はので、関数が1
を返し、シリアル地域でomp_get_num_threads()
を呼んでいます。
#pragma omp parallel for private(i,j,tid,_hash) firstprivate(firstTime) reduction(+:nChunksDetected)
for(i=0;i<fileLen-CHUNKSIZE;i++){
tid=omp_get_thread_num();
printf("%d\n",tid);
int nThreads=omp_get_num_threads();
printf("%d\n",nThreads);
...
出力:
0 //tid
1 //nThreads - this should be 2!
0
1
0
1
0
1
...
プログラムのシリアル部分からこれを呼び出していますか?その洞察力のための多くのおかげで - はい、スレッドの数は、1 – stephan
彼のステファンは実際にある場合。私は別の関連する質問でOPを編集しました。 – Eamorr
OpenMPを有効にしたインテル®IPPライブラリーを使用している場合、それらが衝突する場合があります。 –