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

Ein*_* He 4 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();
}
Run Code Online (Sandbox Code Playgroud)

编译g++ -fopenmp.它可以正确打印出我有4个CPU,但所有测试功能都在运行thread 0.

我试着修改了OMP_NUM_THREADS.但它也没有效果.

我有一切与在线示例相同,但为什么我不能让它工作?

Tud*_*dor 6

你的问题在这里:

#pragma omp parallel for num_thread(4) <---
Run Code Online (Sandbox Code Playgroud)

正确的条款num_threads(4)不是num_thread(4).忽略不正确的openmp pragma,因此您最终得到了一个顺序程序.:)

我很惊讶你没有得到编译器警告,因为我做到了.


pra*_*kar 0

在调用 omp 并行部分之前使用函数 omp_set_num_threads(4)。

另外,你如何确定线程数?将 printfs 嵌入关键部分只是为了确保所有内容都被打印出来。