У меня есть две функции, do_step_one(i)
и do_step_two(i)
, для i
от 0
до N-1
.
В настоящее время у меня есть этот (последовательный) код:
for(unsigned int i=0; i<N; i++) {
do_step_one(i);
}
for(unsigned int i=0; i<N; i++) {
do_step_two(i);
}
Каждый вызов do_step_one()
и do_step2()
может быть выполнен в любом порядке и параллельно, но для любого do_step_two()
необходим конец всех do_step_one()
, чтобы начать (он использует do_step_one()
результаты).
Я попробовал следующее:
#omp parallel for
for(unsigned int i=0; i<N; i++) {
do_step_one(i);
#omp barrier
do_step_two(i);
}
Но GCC жалуется
convolve_slices.c: 21: предупреждение: барьерная область не может быть близко вложена в область разделения работы, критического, упорядоченного, основного или явного задания.
Что я неправильно понимаю? Как решить эту проблему?