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
.但它也没有效果.
我有一切与在线示例相同,但为什么我不能让它工作?
你的问题在这里:
#pragma omp parallel for num_thread(4) <---
Run Code Online (Sandbox Code Playgroud)
正确的条款num_threads(4)
不是num_thread(4)
.忽略不正确的openmp pragma,因此您最终得到了一个顺序程序.:)
我很惊讶你没有得到编译器警告,因为我做到了.
在调用 omp 并行部分之前使用函数 omp_set_num_threads(4)。
另外,你如何确定线程数?将 printfs 嵌入关键部分只是为了确保所有内容都被打印出来。