0

我正在尝试在 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% 的串行执行情况。如果我测量时间,与串行执行相比没有速度增益。我无法弄清楚我做错了什么。

4

1 回答 1

2

你错过了omp指令中的pragma

尝试:

#pragma omp parallel for num_threads( 4 )

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

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

于 2018-02-24T20:25:55.320 回答