【问题标题】:Heterogeneous OpenMP parallel loop with Intel MIC offloading具有英特尔 MIC 卸载的异构 OpenMP 并行循环
【发布时间】:2014-05-15 23:26:49
【问题描述】:

我正在编写一个代码,其中包含一个包含许多迭代 (~10^6-10^7) 的循环,其中一个数组(比如说,'myresult')是通过对大量贡献的求和来计算的。在带有 OpenMP 的 Fortran 90 中,这看起来像:

!$omp parallel do
!$omp& reduction(+:myresult)
do i=1,N
 myresult[i] = myresult[i] + [contribution]
enddo
!$omp end parallel

代码将在配备英特尔至强协处理器的系统上运行,如果可能的话,当然希望从它们的存在中受益。我曾尝试将 MIC 卸载语句 (!dir$ offload target ...) 与 OpenMP 一起使用,以便循环仅在协处理器上运行,但是当它坐在那里等待协处理器完成时,我正在浪费主机 CPU 时间。理想情况下,可以划分主机和设备之间的循环,所以我想知道以下类似的方法是否可行(或者是否有更好的方法);循环只会在主机上的一个核心上运行(尽管可能使用 OMP_NUM_THREADS=2?):

!$omp parallel sections
!$omp& reduction(+:myresult)

!$omp section ! parallel calculation on device
!dir$ offload target mic
!$omp parallel do
!$omp& reduction(+:myresult)
(do i=N/2+1,N)
!$omp end parallel do

!$omp section ! serial calculation on host
(do i=1,N/2)

!$omp end parallel sections

【问题讨论】:

    标签: openmp heterogeneous xeon-phi offloading


    【解决方案1】:

    一般的想法是使用异步卸载到 MIC 以便 CPU 可以继续。撇开如何分工的细节不谈,就是这样表达的:

    module m
    !dir$ attributes offload:mic :: myresult, micresult
    integer :: myresult(10000)
    integer :: result
    integer :: micresult
    end module
    
    use m
    N = 10000
    result = 0
    micresult = 0
    myresult = 0
    !dir$ omp offload target(mic:0) signal(micresult)
    !$omp parallel do reduction(+:micresult)
    do i=N,N/2
     micresult = myresult(i) + 55
    enddo
    !$omp end parallel do
    
    !$omp parallel do reduction(+:result)
    do i=1,N/2
     result = myresult(i) + 55
    enddo
    !$omp end parallel do
    
    !dir$ offload_wait target(mic:0) wait(micresult)
    result = result + micresult
    end
    

    【讨论】:

    • 很好,谢谢,我认为缺少的部分是我可以为主机和设备创建单独的结果变量。
    【解决方案2】:

    您是否考虑过使用 MPI 对称模式而不是卸载?如果你还没有,MPI 可以做你刚才描述的事情:你启动两个 MPI 等级,一个在主机上,一个在协处理器上。每个 rank 使用 OpenMP 执行一个并行循环。

    【讨论】:

    • 我做到了,谢谢,不幸的是,这需要我 OpenMP 并行化我正在使用的其余代码,我强烈希望避免这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多