c++ - 为什么 OpenMP 程序只在一个线程中运行

标签 c++ multithreading openmp

我刚刚用一个简单的 c 程序尝试了 OpenMP

test() {
   for(int i=0;i<100000000;i++);
}
main() {
    printf("Num of CPU: %d\n", omp_get_num_procs());
    #pragma omp parallel for num_threads(4)
    for(int i=0;i<100;i++) test();
}

使用 g++ -fopenmp 编译。它可以正确打印出我有 4 个 CPU,但所有测试函数都在 thread 0 上运行。

我试图修改 OMP_NUM_THREADS。但它也没有效果。

我拥有与在线示例相同的所有内容,但为什么我不能让它工作?

最佳答案

你的问题在这里:

#pragma omp parallel for num_thread(4) <---

正确的子句是 num_threads(4),而不是 num_thread(4)。不正确的 openmp pragma 将被忽略,因此您最终得到了一个顺序程序。 :)

我很惊讶你没有收到编译器警告,因为我收到了。

关于c++ - 为什么 OpenMP 程序只在一个线程中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10203902/

相关文章:

c++ - 为什么模板只能在头文件中实现?

c++ - High CSwitch ("context switch") 使用 Boost 进程间代码时(在 Windows、Win32 上)

java - 如何在另一个线程中启动事务?

multithreading - Slick 2.1/3 执行上下文使用的最佳实践

multithreading - Openmp创建许多线程,但似乎只使用一个内核

c++ - 在配置了 g++ 和 gcc 的 netbeans 中使用 -fopenmp 编译

c++ - 持有指向函数返回对象值的引用/指针是否合法?

c++ - 如何将 Intel TSX 与 C++ 内存模型一起使用?

java - 如何保证T线程可以访问n个资源而不死锁?

c - C中二进制表示的基数排序算法