我刚刚用一个简单的 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/