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 优化): 将循环中主存空间连续访问