gpt4 book ai didi

loops - 是否确保更新并行 do 循环中的变量?

转载 作者:行者123 更新时间:2023-12-05 00:21:36 27 4
gpt4 key购买 nike

我已阅读这篇文章:Parallel Programming in Fortran 95 using OpenMP
在第 11 页和第 12 页上写道:

real(8) :: A(1000), B(1000) 
! $OMP PARALLEL DO
do i = 1, 1000
B(i) = 10 * i
A(i) = A(i) + B(i)
enddo
! $OMP END PARALLEL DO

由于矩阵 B 可能不起作用的值直到 ! $OMP END (PARALLEL) DO 才得到保证.对我来说这是至关重要的。我有一些循环,其中有很多语句依赖于 do 循环中的先前语句,我认为这很自然。我明白了 B(j)在迭代中无法确保 i鉴于 i/=j但在同一次迭代中,我认为这是给定的。我是正确的还是我误解了?如果是这种方式,是否有命令确保至少在迭代中为下一个语句之前的每个语句更新变量的值?

我尝试了一些似乎有效的简单循环,就好像它是串行代码一样,但我还有一些其他代码似乎更随机:适用于/O3 但不适用于/O0,代码非常大,并且有点难读,所以我不会在这里发布......)

最佳答案

它看起来很奇怪。如果是这样的话,您将看到的大多数使用 OpenMP 的代码都不符合标准。你会在我的代码库中看到这样的事情,我相信这个说法是假的。不幸的是,那里没有直接引用规范的相关部分,很难搜索到什么。

我什至会说像 atomic 这样的功能和 critical如果像作者声称的那样,部分就会失去意义。

如果没有看到对您来说随机的代码,我们就无话可说,如果您不打算展示它,最好不要提及它。

关于loops - 是否确保更新并行 do 循环中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213760/

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