c++ - cpp 中的并行 openMP 循环

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

最佳答案

您错过了 pragma 指令中的 omp

尝试:

#pragma omp parallel for num_threads( 4 )

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

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

关于c++ - cpp 中的并行 openMP 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48965978/

相关文章:

c++ - 使用 OpenMP 编译 smallpt 导致运行时死循环

multithreading - 使用OpenMP使用已知种子生成随机数的安全方法是什么?

c++ - 限制 Concurrency::parallel_for 中使用的线程数

c# - 在 Parallel.For 循环内使用 Span

c++ - 从 C++ 中的指针 vector 中删除一个元素

c++ - std::this_thread::get_id() 在 VS2013 中可靠吗?

macos - CMake 支持 macOS High Sierra 上的 OpenMP

c++ - Visual Studio下CMake构建问题

c++ - 如何获取窗口中的显示数量?