Я создаю несколько задач в OpenMP, но почему-то задачи выполняются одним потоком. Код имеет следующий шаблон:
#pragma omp parallel num_threads(n_threads)
#pragma omp single
while(!found){
/.... operations with k, e, y, dist, u, step
#pragma omp task firstprivate(k, e, y, dist, u, step)
process(k, e, y, dist, u, step, h, out);
}
Есть ли способ заставить систему времени выполнения OpenMP назначать задачи всем потокам, кроме того, который создает задачу?
Спасибо
Редактировать:
void process(int a[]){
printf("Thread %d processing\n", omp_get_thread_num());
/* Heavy Operations (used sleep to simulate them)*/
sleep(10);
}
int main(){
int a[10];
int i, j;
#pragma omp parallel num_threads(4)
{
#pragma omp single
{
for (j = 0; j < 10; j++) {
/* Compute a */
for (i = 0; i < 10; i++) {
a[i] += 1;
}
#pragma omp task firstprivate(a)
process(a);
}
printf("Thread %d finished preprocessing\n", omp_get_thread_num());
}
}
}
Выход:
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 finished preprocessing