繁体   English   中英

非for循环的OpenMP并行化

[英]OpenMP parallelization of non-for loop

到目前为止,我仅使用OpenMP来并行化C ++中的循环。 但是我想知道是否可以执行其他代码行,这些代码不是并行的for循环。

void minimization(int *a, int *x) {
 // this part of the code is dependent of other library.
}

void checkForNaN(int *a){
 // check nan points
}

int main() {
  // read data
  minimization (a,b);
  checkForNaN(x);
}

考虑上面的示例代码段,其中minimization(,)checkForNaN()是独立的,这是其中一个的结果不会一次影响另一个。 可以并行化吗?

我在想这样的事情:

  int main() {
      // read data
#pragma omp parallel
    {
      minimization (a,b);
      checkForNaN(x);
     }
}

看起来正确吗?

这就是OMP节的用途:)

int main() {
    #pragma omp parallel sections
    {
        #pragma omp section
        { 
            minimization(a,b);
        }

        #pragma omp section
        { 
            checkForNaN(x);
        }
    }
}

不,它看起来不正确。 它将执行minimization(a,b); checkForNaN(x); 在所有线程中。

相反,这将执行并行化:

int main() {
  // read data
  #pragma omp parallel sections
  {
    #pragma omp section
    {
      minimization (a,b);
    }
    #pragma omp section
    {
      checkForNaN(x);
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM