首页 > 解决方案 > OpenMP 目标中的循环顺序执行

问题描述

我正在尝试使用 OpenMP 并行化以下循环target以在 GPU 上运行。我看到的问题是我找不到在kGPU 上按顺序执行循环的方法。在OpenACC将是类似的东西!$acc loop seq。在 OpenMP 卸载模式下是否有类似的方法可以做到这一点?

  do k = 2, nelem
     do j = 1, ny
          do i = 1, nx
             v(i, j, k) = v(i,j,k-1) + kk*(N(i,j,k)-c2)**c3
             N(i, j, k)  = N(i, j, k)*( 1.0D0 - rpm*c(i,j,k)+v(i,j,k) )
          end do
       end do
    end do

我试图做类似的事情

!$omp target
      do k = 2, nelem
!$omp teams distribute parallel do collapse(2)
         do j = 1, ny
              do i = 1, nx
                 v(i, j, k) = v(i,j,k-1) + kk*(N(i,j,k)-c2)**c3
                 N(i, j, k)  = N(i, j, k)*( 1.0D0 - rpm*c(i,j,k)+v(i,j,k) )
              end do
           end do
!$omp end teams distribute parallel do
        end do
!$omp end target

但有些事情是不对的。

标签: openmp

解决方案


推荐阅读