Parallel processing 如何在OpenMP中的单线程块内声明共享工作区域?
我正在尝试使用OpenMP为具有以下方案的函数编写并行代码:Parallel processing 如何在OpenMP中的单线程块内声明共享工作区域?,parallel-processing,openmp,Parallel Processing,Openmp,我正在尝试使用OpenMP为具有以下方案的函数编写并行代码: 1. Begin of data-dependent loop 2. Some computation 3. If the result of 2 equals 0 then 3.1. Begin of data-independent loop 3.2. Some computation 3.3. End of data-independent loop 4.
1. Begin of data-dependent loop
2. Some computation
3. If the result of 2 equals 0 then
3.1. Begin of data-independent loop
3.2. Some computation
3.3. End of data-independent loop
4. Some computation by a single thread
5. Begin of data-independent loop
6. Some computation
7. End of data-independent loop
8. End of data-dependent loop
问题是-我想用以下内容将这些区域括起来:
#pragma omp parallel
1. Begin of data-dependent loop
#pragma omp master
2. Some computation by a single thread
3. If the result of 2 equals 0 then
#pragma omp for
3.1. Begin of data-independent loop
3.2. Some computation
3.3. End of data-independent loop
4. Some computation by a single thread
#pragma omp for
5. Begin of data-independent loop
6. Some computation
7. End of data-independent loop
8. End of data-dependent loop
但是,编译器不允许将pragma omp for
嵌套在pragma omp master
中。除了将它们更改为pragma omp parallel for
并放弃主循环外的fork之外,还有什么解决方案吗
如果不够清楚,请告诉我
提前感谢是的,只需像这样并行化内部循环
for(int i=0; i<n; i++) {
cut = foo(i);
if(!cut) {
#pragma omp parallel for
for(int j=0; j<m; j++) {
//
}
}
foo2();
#pragma omp parallel for
for(int j=0; j<k; j++) {
//
}
}
for(int i=0;i将主控变量仅限于2。没有真正的代码,很难更精确。