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