この古い質問がありますが、オンラインからの回答はありません。コードは次のとおりです。
#include "stdio.h"
#include "omp.h"
main ()
{
omp_set_num_threads(4); //initialise thread count for 4 core cpu
int j;
printf ("%d\n", omp_get_max_threads());
printf ("%d\n", omp_get_num_threads());
#pragma omp parallel for
for (int j=0; j<10; ++j)
{
printf ("%d\n", omp_get_num_threads());
int threadNum;
threadNum = omp_get_thread_num();
printf("This is thread %d\n", threadNum);
}
}
return 0;
}
G++ 4.4.5、linux 2.6.32-5-amd64 では、以下が生成されます。
4
1
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
1
This is thread 0
ICC 12.1.0 に移行すると、次のようになります。
4
1
4
This is thread 0
4
This is thread 0
4
This is thread 0
4
This is thread 1
4
This is thread 1
4
This is thread 1
4
This is thread 2
4
This is thread 2
4
This is thread 3
4
This is thread 3
何か案は?