У меня есть следующий код в VS2008:OpenMP для цикла игнорирует положение num_threads
int i,j;
bool pr = false;
#pragma omp parallel for private(pr) num_threads(2)
for(i=0;i<PIC_X;i++)
{
int rank = omp_get_thread_num();
int count = omp_get_num_threads();
if (!pr)
{
printf_s("Hello from thread %d of %d\n", rank, count);
pr = true;
}
for(j=0;j<PIC_Y;j++)
{
// do stuff
}
}
(не пытается сделать вложенный цикл OpenMP, в случае, если вам интересно). Проблема в том, что предложение num_threads не имеет никакого эффекта: я только когда-либо получаю «Hello from thread 0 of 1» на выходе. Я также попытался использовать omp_set_num_threads(2)
, но безрезультатно. Что дает?
Ознакомьтесь с http://software.intel.com/en-us/articles/32-openmp-traps-for-c-developers/ - Это действительно помогло мне –