Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 如何在OpenMP中的单线程块内声明共享工作区域?_Parallel Processing_Openmp - Fatal编程技术网

Parallel processing 如何在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.

我正在尝试使用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. 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。没有真正的代码,很难更精确。