gpt4 book ai didi

c++ - 想知道为什么 OpenMP 代码不能并行化

转载 作者:可可西里 更新时间:2023-11-01 18:38:11 25 4
gpt4 key购买 nike

我刚开始学习如何使用 OpenMP .我试图弄清楚为什么以下代码不能与 Visual Studio 2008 并行运行。它编译并运行良好。但是它在我的四核机器上只使用一个内核。这是我试图移植到 MATLAB 的代码的一部分混合功能。任何指针表示赞赏。

#pragma omp parallel for default(shared) private(dz, t, v, ts_count) reduction(+: sum_v)
for(t = 0; t<T; t++)
{
dz = aRNG->randn();
v += mrdt* (tv - v) +
vv_v_sqrt_dt * dz +
vv_vv_v_dt*(dz*dz - 1.);

sum_v += v;
if(t == ts_count-1)
{
int_v->at_w(k++) = sum_v/(double)(t+1);
ts_count += ts;
}
}

最佳答案

v 变量是使用上一次迭代的 v 值计算的

  for(t = 0; t<T; t++) {
...
v += ... ( tv - v ) ....
...
}

你不能那样做,它会破坏并行性。循环必须能够以任何顺序运行,或者一次运行不同的并行 block ​​,没有副作用。乍一看,您似乎无法将这种循环并行化。

关于c++ - 想知道为什么 OpenMP 代码不能并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2113136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com