不明原因的至强皮塔顶

时间:2018-07-06 09:59:25

标签: parallel-processing acceleration xeon-phi offloading

我正在尝试在Xeon Phi KNC上以这些不同的n大小运行此代码。我正在获得表中所示的时间,但是我不知道为什么会遇到这些波动。你能指导我完成吗?预先感谢。

代码:

program prog
  integer, allocatable :: arr1(:), arr2(:)
  integer :: i, n, time_start, time_end
  n=481
  do while (n .le. 481000000)
    allocate(arr1(n),arr2(n))
    call system_clock(time_start)
    !dir$ offload begin target(mic)
    !$omp SIMD 
    do i=1,n
       arr1(i) = arr1(i) + arr2(i)
    end do
    !dir$ end offload 
    call system_clock(time_end)
    write (,) "n=",n," time=",time_end-time_start
    deallocate(arr1,arr2)
    n = n*10
  end do
end program

结果:

 n=         481  time=        8881
 n=        4810  time=          75
 n=       48100  time=          53
 n=      481000  time=         261
 n=     4810000  time=        1991
 n=    48100000  time=       18912
 n=   481000000  time=      188203

1 个答案:

答案 0 :(得分:1)

第一次卸载(n = 481)肯定会很慢,因为这是您卸载所有代码并在KNC上初始化进程的地方。如果您不希望看到那样的内容,请在开始计时之前进行空的卸载。

在高端(> = 481000),事情看起来很理智;每次运行的速度比以前慢10倍左右,因此现在唯一的不足是缩放较小的运行。其中一些可能与负载不平衡有关。如果您有一个60核处理器并且正在运行4T / C(未提供此信息),则4810次迭代=>〜20次迭代/核,这意味着SIMD性能可能很差,因为您有16条通道。如果未对齐,则您可能只执行导入和导出操作,而全宽度时什么也没有执行!)