Page 78 - 《软件学报》2024年第6期
P. 78

2654                                                       软件学报  2024  年第  35  卷第  6  期


                 3.1   多级存储层次访存与通信融合的编译优化设计思路
                    申威众核处理器片上存储层次丰富, 特征明显, 合理利用好存储层次特征是一项挑战性工作. 如图                               7  所示, 线
                 程有多种方式访问各种存储空间, 不同方式下开销有较大区别, 分别有以下几种情况: 1) 通过                          ld/st 访问私有  LDM
                 空间, 延迟只有几拍; 2) 通过     rld/rst 访问  SDM  空间, 无冲突情况下延迟数十拍; 3) 通过      gld/gst 访问主存, 无冲突情
                 况下延迟数百拍. 此外, 线程还可将           LDM  作为缓冲, 通过    DMA  将主存数据批量传输到         LDM  空间, 或者通过
                 RMA  将其他核心上的      LDM  空间数据或者    SDM  空间数据批量传输到本核心的           LDM  空间. 核组  DMA  峰值带宽
                 数十  GB/s, 每核心平均约数百     MB/s, RMA  点对点带宽数    GB/s. 在这种存储层次特征下, 应用程序开发人员必须想
                 尽办法将程序核心数据布局进更高层次的存储空间, 对于无法完全布局进                          LDM  的核心数据, 要尽可能利用上
                 DMA  批量数据传输和      RMA  通信机制提高访存效率. 对于普通程序员而言, 这显然是一项很有挑战的工作. 为此,
                 本文从并行语言和编译层面提出优化方案, 以减轻程序员的开发负担, 提高程序的访存性能.

                                  直接访问延迟
                                                  RMA               单核心 RMA 带宽几 GB/s
                                    存储容量
                                                  DMA               单核心 DMA 带宽几百 MB/s
                                                   号线程本地
                                     <数拍                      私有       私有
                                                             LDM       LDM
                                     百KB

                                    数十拍
                                                             线程共享局存 (SDM)
                                     数MB
                                    数百拍
                                                               核组共享主存
                                    十几GB

                                    数百拍
                                                               节点共享主存
                                    几十GB
                                            图 7 多级存储层次间数据传输优化示意图

                    通过对典型科学计算类应用数据访问特征的分析可以发现, 被核心循环访问的可以借助更高层次存储空间进
                 行访存优化的数组访问基本可以分为以下               4  种: 1) 主存数组连续; 2) 主存数组局部离散访问; 3) SDM       数组连续访
                 问; 4) SDM  数组局部离散访问. 其中主存数组可以分段            DMA  缓冲进  LDM  或  SDM, SDM  数组可以通过运行时提
                 供的集合   RMA  消息分段缓冲进      LDM. 图  8  中给出了具有典型优化机会的程序段示例.
                    图  8  给出典型的可优化访存场景代码示意. 1) 在循环           j 中, 主存数组   source 为连续读访问, 主存数组     data 为局
                 部离散访问. 优化机会: 可对循环         j 进行分块, 把  source 对应的数据分段传输进       SPM  缓冲区. 而对于    data, 可以在
                 循环  j 外一次性传输进     data[i] 的一整维, 由于  data 的第一维需要  4 MB  空间, 所以需要用    SDM  空间作为缓冲. 2) 循
                 环  k、l 中, 主存数组  data 为连续访问. 优化机会: 可对循环        l 进行分块, 把  data[k] 对应的数据分段传输进      SPM  缓
                 冲区. 3) 循环  n  中, SDM  空间数组  sdm_sum  为连续读访问. 优化机会: 由    0  号线程以  RMA  方式, 将物理分布在远
                 程  LDM  空间上的  sdm_sum  的数据缓冲进    0         SPM  缓冲空间, 然后再对本地缓冲数据进行累加计算.
                    基于上述优化机会分析, 本文设计了一种             DMA  访存和   RMA  通信融合的访存优化方法, 实现循环中多个不同
                 地址空间中的数组的多访问方式融合访存优化.
                    融合访存优化方法根据被优化数组的源地址空间类型、缓冲地址空间类型可以细分为以下                                3  类: 1) 主存访问
                 DMA  缓冲  LDM  优化  (下文简称  mem2ldm  优化): 利用  DMA  批量数据传输功能将数据缓冲进          LDM  空间; 2) SDM
                 连续访问同源聚合      RMA  缓冲  LDM  优化  (下文简称   sdm2ldm  优化): 将以细粒度方式连续访问或者局部离散访问的
                 SDM  变量的数据按照源地址中的线程号信息进行分类聚合, 利用运行时提供的集合                         RMA  消息功能完成     SDM  到
                 LDM  的数据批量传输; 3) 主存访问      DMA  缓冲  SDM  优化  (下文简称   mem2sdm  优化): 将循环中主存空间连续访问
   73   74   75   76   77   78   79   80   81   82   83