Page 331 - 《软件学报》2021年第9期
P. 331

田卓  等:神威太湖之光上分子动力学模拟的性能优化                                                        2955


         当 i 粒子作为 j 粒子的第 2 个、第 3 个或第 4 个邻居粒子时,i 粒子受到 j 对 i 的反作用力为 func4.那么 func3
         和 func4 的值需要从 i 粒子的受力计算中减去.该部分的计算与原计算模式相比为增加的部分.计算模式的改变
         打破了数据依赖,将紧耦合变为松耦合,虽然带来了计算量的增加,但是提高了吞吐.
             本文提出的计算模式的优化策略,适用于类似的时间演化类或高频迭代程序,当问题本身的结构特性为数
         据具有局部相关性和依赖性,由此可产生一定的异步性的性质,可利用本文提出的优化计算模式的方式,将不同
         数据之间紧耦合的依赖关系变为松耦合,将原计算模式中互相写同步的计算模式改为更流水化的独立计算.该
         部分的计算对计算强度影响的主要原因是,由于减少了进程间同步操作而避免了受力计算的同步更新,因此需
         要在本地进程额外替其他进程执行相应的计算,虽然计算强度少量增加,但该算法利用了处理器较强的计算性
         能,掩盖了因计算强度增加而带来的性能损耗,提高了吞吐,优化了性能.
         2.3   高效访存及规则化

         2.3.1    高效访存
             在分子间作用力的计算过程中,从核需要频繁地访问粒子信息,从核访问主存的延迟极大地限制了神威性
         能的发挥.每个从核上提供了 64KB 的高速缓存空间 SPM,在算法实现上,需要频繁访问的粒子信息通过 DMA
         方式批量传送至 SPM,以优化从核访主存效率.
             每个线程负责 N 个粒子的计算,线程 i 将所负责的所有原子和其邻居原子的速度、位移等信息从主存加载
         到 SPM 中,如图 20 所示.迭代计算前,将粒子信息通过同步 DMA 加载到 SPM 中,m_memcpy(MEM_TO_CACHE),
         将所有粒子的邻居粒子信息通过异步 DMA 加载到 SPM 中,m_memcpy_async(MEM_TO_CACHE);迭代计算完
         成后,通过异步 DMA 方式,将本线程所负责粒子的更新信息从 SPM 拷贝回系统内存,m_memcpy_async(CACHE_
         TO_MEM).异步 DMA 方式将计算与主存访问相重叠.虚代码如图 21 所示.

                                                 MEM_TO_CACHE     CPE  CPE  CPE  ...  CPE
                                                  CACHE_TO_MEM
                                                                  CPE  CPE  CPE  ...  CPE
                                            Main memory
                                                 DDR3             CPE  CPE  CPE    CPE
                                                MC
                                                      CPE
                                               PPU   cluster       ...  ...  ...  8x8   ...
                                               MPE                CPE  CPE  CPE     ...  CPE
                                   CG               CG
                                                                                    SPM
                        SI             Network on chip (Noc)

                                   CG               CG
                              Fig.20    SPM and main memory exchange data in DMA mode
                                   图 20  SPM 与主存间以 DMA 方式交互数据

                                   1:   for iter=0 to NITERS do
                                   2:     for i=0 to NASTH do
                                   3:       m_memcpy(i,MEM_TO_CACHE)
                                   4:       for nbi=0 to 4 do
                                   5:         m_memcpy_async(nbi,MEM_TO_CACHE)

                                   6:       end for
                                   7:       computing(⋅)
                                   8:       m_memcpy_async(i,CACHE_TO_MEM)
                                   9:     end for
                                   10: end for
                                  Fig.21    Algorithm for efficient accessing memory
                                            图 21   高效访存算法
   326   327   328   329   330   331   332   333   334   335   336