cpp中的并行openMP循环

时间:2018-02-24 18:03:38

标签: c++ openmp parallel-for

我正在尝试在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个线程;顶部(在unix中)我应该在col%CPU中看到 400%或类似的东西。但我得到100%串行执行的情况。 如果我测量时间与串行执行相比没有速度增益。我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:2)

您错过了pragma指令中的#pragma omp parallel for num_threads( 4 )

尝试:

-Wall

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

使用GCC编译器,可以通过使用-Wunknown pragmas-Wall标志进行编译来捕获此问题。使用stop = False for j in i: if stop: break #Do stuff for k in j: #Do more stuff if (condition): stop = True break #breaks (for k in j) loop 这是一个很好的习惯,因为它可以预见许多其他神秘的问题。其他编译器也有类似的选择。