cpp 中的并行 openMP 循环

parallel openMP loop in cpp

我正在尝试在 cpp 中使用 openMP 学习并行化。我正在使用以下测试示例

 #pragma parallel for num_threads( 4 )
 for ( int i = 0 ; i < N ; i++ ){
     for ( int j = 0 ; j < 100000 ; j++ ){
         data[ i ]  =  data[ i ] + ( double ) i ;
     } 
 }  

我正在使用 4 个线程;使用 top(在 unix 中)我应该在 col %CPU 中看到 400% 或类似的东西。但是我 100% 知道串行执行的情况。 如果我测量时间,与串行执行相比没有速度增益。我不知道我做错了什么。

您错过了 pragma 指令中的 omp

尝试:

#pragma omp parallel for num_threads( 4 )

here 所述,这是在 C++ 中使用 OpenMP 时最常见的错误之一。

使用 GCC 编译器可以通过使用 -Wall-Wunknown pragmas 标志进行编译来捕获此问题。使用 -Wall 是一个好习惯,因为它可以解决许多其他神秘的问题。其他编译器也有类似的选项。