我正在尝试在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%串行执行的情况。 如果我测量时间与串行执行相比没有速度增益。我无法弄清楚我做错了什么。
答案 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
这是一个很好的习惯,因为它可以预见许多其他神秘的问题。其他编译器也有类似的选择。