我有两个功能,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:警告:屏障区域可能不会紧密嵌套在工作共享、关键、有序、主或显式任务区域内。
我有什么误解?如何解决这个问题?