基于OpenACC的太湖之光硅晶体加速分子动力学模拟    2020

摘要:以SW26010异构多核处理器和扩展的编程模型,使用多体势(Tersoff)执行固体共价晶体的分子动力学(MD)模拟。

  Amdahl定律:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。

  实现两种主要的优化:包括设计软件缓存和在编译器生成的中间版本代码上,设计软件缓存并最小化主内存的访问频率。

  结合SW26010的特点,对传统的Amdahl定律进行了扩展。

  总之,本文做出了以下三点贡献:

(1)本文在扩展的Amdahl定律指导下,首次利用神威OpenACC成功地将硅晶体的MD仿真连接到太湖之光上。

  (2) 为了充分发挥新型异构多核处理器SW26010的优势,本文提出了基于中间代码的手工优化方法,如设计软件缓存等。实验结果表明,该优化方法对提高太湖之光硅晶体MD仿真的性能有显著的效果。

  (3) 为了减少超越数学函数的离散内存访问,我们实现了自定义的超越函数。

第五部分:应用程序的并行移植解决方案

5.1 并行原理

  在第2节和第3节中,我们分别讨论了SW26010的结构和硅晶体应用的特点。针对SW26010的硬件条件,本文主要利用扩展的Amdahl定律的三个指导原则对硅晶体的MD仿真应用进行优化。

  (1)根据扩展的Amdahl定律,可以通过降低T comp来提高性能。TP能量计算模块作为硅晶体MD模拟的热点部分,实际上是一个计算密集型的过程。在SW26010的每个CG中,MPE负责分配、通信和计算任务,而cpe主要执行计算任务。MPE的峰值性能为23.2 GFLOPS, cpe的峰值性能为742.4GFLOPS。为了获得良好的性能,需要充分利用cpe的性能。根据扩展的Amdahl定律的第二指导原则,当负载不平衡时,采用cpe中最长的执行时间进行T comp。因此,为了获得最大的并行加速,我们需要将计算任务尽可能均匀地分配到每个CPE上。

  (2) 根据扩展的Amdahl定律,可以通过降低T mem来进一步提高性能。为了减少内存容量,需要通过数据管理充分利用内存带宽,并尽量减少随机数据访问。

  (3)在力计算过程中,尽量避免原子操作,因为原子操作的开销很大。

5.2 数据结构重建

5.3 数据预排序

一种简单的硅晶体应用并行化方案,通过粒子数将整个工作负载均匀地分配给所有CPE。对于SW26010,由于CG中的MPE和CPE共享相同的内存空间,因此CPE可以通过gload请求直接从主存访问所需的数据。在方便的同时,使用这种简单的方法从主存访问数据的长延迟会严重降低性能。如果我们想充分利用CPE的性能,就需要使用CPE的SPM。然而,每个CPE中的SPM容量只有64KB,因此需要通过DMA请求多次从主存获取数据。如果相邻粒子具有较大的存储跨度,则CPE将增加访问主存的频率并降低操作效率。根据原理2,为了提高数据访问的空间局部性,本文进行了数据预排序。

结合硅晶体的空间结构和分类数据的分析,我们发现有序粒子的相邻粒子具有高度的重合度,可以大大提高相邻粒子的命中率。数据预定后,每个CPE访问的主粒子和邻居粒子数据可以通过DMA方式有效传输。只要能得到主粒子和四个相邻粒子的数据,就可以进行计算。在完成当前粒子的计算后,下一个主粒子的所有邻近粒子都已经在LDM中了。提高了邻居粒子数据的重用性。

取模拟空间中的131,072个粒子,我们发现模拟空间中的粒子分布在128个平面上,每个平面经过数据预定后粒子数为1024个。考虑周期边界,本文发现每个平面上粒子的所有邻域都分散在其前后平面上,如图4所示。

  

最新文章

  1. 利用Node.js的Net模块实现一个命令行多人聊天室
  2. maven clean deploy -Pproduction
  3. Write cv::Mat to a file
  4. iOS-利用AFNetworking(AFN 1.x)-实现文件断点下载
  5. VS2010调试 --指南 Reference from : http://blog.csdn.net/kingzone_2008/article/details/8133048
  6. [转]oracle的ANYDATA数据类型
  7. Ubuntu 13.04 用Sublime Text 2 编译运行 JAVA
  8. HDU_2042——递归反推
  9. qt Graphics View Framework(非重点)
  10. 201521123029《Java程序设计》第十二周学习总结
  11. Java求555 555的约数中最大的三位数。
  12. MySQL DATEDIFF() 函数
  13. Android_Studio_Checkout_Github_Error"Cannot run program "git.exe":CreateProcess error = 2
  14. POJ 2456: Aggressive cows(二分,贪心)
  15. android的特点有哪些
  16. ubuntu中mysql中文乱码及用python3.x调用
  17. 输出tuple和chrono的使用小例子
  18. 创建spring boot项目启动报错遇到的问题
  19. EBS-BG&LE&OU
  20. [线性DP][codeforces-1110D.Jongmah]一道花里胡哨的DP题

热门文章

  1. 时间序列分析 2.X 单位根检验
  2. VUE学习-自定义修饰符
  3. QT 连接SQLIte数据库
  4. 前端实现电子签名(web、移动端)通用组件
  5. PHP二维数组根据某个元素(key)排序
  6. SDN之Openflow+OpenDayLight课程开课通知
  7. RN 报错信息总结
  8. C - Frog Jumps
  9. 002 jmeter入门级写脚本及参数化
  10. 一些sql查询的case