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
是一个好习惯,因为它可以解决许多其他神秘的问题。其他编译器也有类似的选项。
我正在尝试在 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
是一个好习惯,因为它可以解决许多其他神秘的问题。其他编译器也有类似的选项。