Page 85 - 《软件学报》2024年第6期
P. 85
方燕飞 等: 申威众核处理器访存与通信融合编译优化 2661
4.3 启发式循环优化方案迭代求解框架
从 region 收益公式 (6) 和循环收益公式 (11) 可以看出, 当 TR 大于 0 时, 优化有正向的收益, 而当 TR 小于 0
时, 优化收益是负的, 即优化产生的缓冲数据传输开销超过了数据访问节省的时间. 这种情况出现的可能原因两
个, 一是用户给出的缓冲区空间过小, 还有一种可能是循环总迭代数太小, 使得最终求出的最大 block_len 过于小,
从而使得某些 region 的每次 DMA 或者 RMA 传输的数据量不足以填满带宽. 极端的如 block_len=1 时, 对于
region 的元素宽度为 4 的数组访问, 每次传输 4 字节, 由于固定的 DMA 启动开销相对较大, DMA 总开销远超过
直接主存访问的开销.
因此, 在利用第 4.2 节中介绍的二分搜索算法求得 block_len 和 region 方案后, 需要将具体优化方案下的 region
数据进一步代入第 4.1 节中的收益公式进行评估, 如果收益值不为正, 则需要舍弃一个或更多个 region 的优化, 以确
保剩下的数组 region 优化可以获得正向收益. 当发生负向收益时, 选择放弃哪个 region 的优化, 以及最终需要选择放
弃多少个 region, 是一个关键问题. 本文利用第 4.1 节构建的时间收益与空间开销比模型 P region (见公式 (7)) 衡量一
个 region 的优先级, 当发生负向收益时, 优先级最低的 region (即收益开销比值 P region 最小的 region) 首先被放弃.
本文设计了一个基于收益模型的启发式迭代求解框架. 为尽量满足编译指示意图, 框架在保证收益为正的情
否
况下尽可能多地实现对用户编译指示中所指出的数组的优化. 算法框架如图 12 所示, 主要思想是先将循环中被编
译指示的所有数组的访问信息作为启发式初值信息, 调用第 4.2 节中的搜索算法求解当前条件下的最优循环分块
方案. 然后根据优化收益函数评估求得的当前最优循环分块方案下的每个 region 的收益和总体收益, 当发生收益
为负的情况, 则舍弃最低优先级 region 的信息, 然后根据剩下的 region 信息重新输入算法 1 进行优化方案求解, 以
此迭代直至剩下的所有 region 收益为正. 从算法流程可以看出, 整个框架调用二分搜索算法的次数最差情况下是
被指示的待优化数组的访问总个数. 而二分搜索算法复杂度为 logN (N 为循环长度), 因此, 整个搜索算法的时间复
杂度是多项式时间的, 经实际测试, 编译阶段的搜索时间开销可忽略.
编译器识别编译指示
分析循环提取待
优化数组信息
二分搜索求解循环优化方案
得到 block_len、region 等信息
利用收益模型计算时间收益
判断 region 收益 是 根据优化方案
是否全为正 开展代码变换
是
输出优化
丢弃一个优先级 后的代码
最低的 region 信息
是否还有需要 否
优化的访问
结束对当前循环
的分析与优化
图 12 基于收益模型的启发式迭代求解算法框架