Как предлагается в комментариях, вы можете использовать ключевое слово ordered
, чтобы получить выходные данные в порядке. На практике вы хотите иметь много независимых вычислений, а затем только печатать (или копировать или что-то еще) результат по порядку.
Не эксперт в этом, но вот как я это делаю (работает на g cc и msv c):
#include <stdio.h>
#include <omp.h>
int blah(int argc, char* argv[]) {
// this may or may not be necessary..
omp_set_num_threads(omp_get_max_threads());
int i;
#pragma omp parallel
#pragma omp for ordered schedule(static, 1)
for(i = 0; i < omp_get_num_threads(); i++)
{
// This is where the heavy computations go
#pragma omp ordered
{
// synchronized and in order; keep this short
printf("Hello World... from thread = %d\n", omp_get_thread_num());
}
}
return 0;
}
Не понимаю, почему за ваш вопрос проголосовали. Наличие результата в заказе является допустимым вариантом использования imho.