parallel-processing - 无法解释的 Xeon-Phi 开销
问题描述
我正在尝试在 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
解决方案
第一次卸载 (n=481) 肯定会很慢,因为这是您卸载所有代码并在 KNC 上初始化进程的地方。如果您不想在开始计时之前看到它进行空卸载。
在高端(> = 481000),事情看起来很正常;每次运行都比以前慢约 10 倍,所以现在唯一的奇怪是较低的缩放。其中一些可能与负载不平衡有关。如果您有 60 核处理器并且运行 4T/C(您没有向我们提供此信息),则 4810 次迭代 => ~20 次迭代/内核,这意味着 SIMD 性能可能很差,因为您有 16 条通道。鉴于未对准,您可能只执行导入和导出,而不是全宽!)
推荐阅读
- android - 可扩展的 ListView,其中包含自定义网格布局
- django - 操作默认的 django 标准输出日志
- excel - 在 Microsoft Excel 中处理 VBA 弹出消息框
- php - 如何在 config.neon 中设置通用 CSP 标头?
- apache-camel - JMS 属性面包屑 ID
- jenkins - 如何在 Computer.waitUntilOnline 上设置超时
- git - VSCode“请在结帐前清理您的存储库工作树”
- kubernetes - 来自 kubernetes 中的服务的偶然 Unknownhost 异常
- python - sqlalchemy关系一对一数据重复
- php - SQLSTATE[42601]:语法错误:7 内部连接错误