提问人:Mono 提问时间:11/16/2023 更新时间:11/16/2023 访问量:41
在没有重生线程团队的情况下打开 MP
Open MP without respawn team of threads
问:
我有以下代码结构,并希望在使用 OpenMP 时并行化循环:function2
// main.cpp
for (int i = 0; i < 1000; ++i) {
function1();
}
// function1 in module1.cpp
float sum = 0;
std::vector<float> numbers = /* a vector of 20000 random floats */
for (int j = 0; j < 20; ++j) {
function2(sum, numbers);
}
// function2 in module2.cpp
for (int z = 0; z < numbers.size(); ++z) {
atomicSum(sum, numbers[z]);
}
我试图用它来并行化循环 in ,但它为 in 的每次迭代创建一个新的线程组,从而导致不必要的开销。#pragma omp parallel for
function2
j
function1
我的目标是在主模块的开头创建一个线程组,并重用这个组来并行化循环。如何使用 OpenMP 有效地实现这一点?function2
此外,当然,重要的是要注意该行必须是原子的,因为变量“sum”将由每个线程共享。atomicSum(sum, numbers[z]);
答: 暂无答案
下一个:双击 For 循环
评论
function1
for ( auto z : numbers)
float &sum