小编phy*_*ets的帖子

我什么时候应该使用 DO CONCURRENT,什么时候应该使用 OpenMP?

我知道这个这个,但我再次询问,因为第一个链接现在已经很旧了,第二个链接似乎没有得出结论性的答案。达成共识了吗?

我的问题很简单:

我有一个循环,其中包含可以DO同时运行的元素。我该使用哪种方法?

下面是在简单立方晶格上生成粒子的代码。

  • npart是粒子数
  • npart_edgenpart_face分别是沿边和面的
  • space是晶格间距
  • RxRyRz是位置数组
  • x , y , z是决定晶格位置的临时变量

请注意,x、y 和 z 在 CONCURRENT 情况下必须是数组,但在 OpenMP 情况下则不然,因为它们可以定义为 PRIVATE。

我也使用DO CONCURRENT(据我从上面的链接了解,使用SIMD):

DO CONCURRENT (i = 1, npart)
    x(i) = MODULO(i-1, npart_edge)
    Rx(i) = space*x(i)
    y(i) = MODULO( ( (i-1) / npart_edge ), npart_edge)
    Ry(i) = space*y(i)
    z(i) = (i-1) / npart_face
    Rz(i) = space*z(i)
END DO
Run Code Online (Sandbox Code Playgroud)

或者我使用 …

concurrency fortran simd openmp fortran2008

6
推荐指数
1
解决办法
3318
查看次数

标签 统计

concurrency ×1

fortran ×1

fortran2008 ×1

openmp ×1

simd ×1