[论文解读] RegDem: Increasing GPU Performance via Shared Memory Register Spilling
本论文提出 RegDem,一种二进制翻译技术,通过将过多的寄存器溢出到未充分利用的共享内存而非片外本地内存,从而提升 GPU 性能并提高占用率。通过优化寄存器使用并利用运行时性能预测器选择最佳代码变体,RegDem 在九个基准测试上相较 nvcc 编译器实现 9% 的几何平均加速,峰值达到 18%。
GPU utilization, measured as occupancy, is limited by the parallel threads' combined usage of on-chip resources, such as registers and the programmer-managed shared memory. Higher resource demand means lower effective parallel thread count, and therefore lower program performance. Our investigation found that registers are often the occupancy limiters. The de-facto nvcc compiler-based approach spills excessive registers to the off-chip memory, ignoring the shared memory and leaving the on-chip resources underutilized. To mitigate the register demand, this paper presents a binary translation technique, called RegDem, that spills excessive registers to the underutilized shared memory by transforming the GPU assembly code (SASS). Most GPU programs do not fully use shared memory, thus allowing RegDem to use it for register spilling. The higher occupancy achieved by RegDem outweighs the slightly higher cost of accessing shared memory instead of placing data in registers. The paper also presents a compile-time performance predictor that models instructions stalls to choose the best version from a set of program variants. Cumulatively, these techniques outperform the nvcc compiler with a 9% geometric mean, the highest observed being 18%.
研究动机与目标
- 解决寄存器压力导致 GPU 占用率受限的性能瓶颈。
- 克服 nvcc 默认策略将寄存器溢出到片外本地内存的低效性,该策略会增加指令延迟。
- 利用未充分利用的片上共享内存作为寄存器溢出的更快替代方案,以提升性能。
- 开发一个运行时性能预测器,用于在不同寄存器分配策略中选择最优代码变体。
- 通过在 SASS 汇编上进行二进制翻译流程,实现寄存器降级的实用化部署,绕过专有编译器的限制。
提出的方法
- 对 GPU 的 SASS 汇编进行二进制翻译,将过多的寄存器溢出转换为对共享内存的访问。
- 采用三种寄存器降级策略:静态访问计数、带循环加权的控制流图(CFG)遍历,以及操作数冲突分析。
- 将非连续的寄存器空间紧凑化,以最小化最高寄存器编号,从而降低硬件寄存器压力。
- 集成指令调度与存储体冲突避免机制,以在优化过程中保持性能。
- 开发一个性能预测器,通过以下公式估算停顿时间:$\text{stall} = \text{inst}_{\text{stall}} \times \text{occupancy} \times \frac{\text{MAX\textunderscore THROUGHPUT}}{\text{inst}_{\text{throughput}}}$。
- 利用该预测器从多种优化策略中选择最佳变体,与穷举搜索相比准确率达 99%。
实验结果
研究问题
- RQ1将过多的寄存器溢出到共享内存而非本地内存,是否能有效提升 GPU 占用率和性能?
- RQ2相较于寄存器,尽管共享内存访问延迟更高,但其更快的片上访问速度是否足以抵消成本并带来性能增益?
- RQ3当在寄存器压力、指令效率与内存访问成本之间存在权衡时,如何有效估算运行时性能预测器的最佳代码变体?
- RQ4在无法访问编译器源码的情况下,SASS 汇编的二进制翻译在多大程度上能有效实现寄存器降级?
- RQ5共享内存的未充分利用对寄存器降级技术的可行性与性能有何影响?
主要发现
- 在九个多样化的 GPU 基准测试中,RegDem 相较于 nvcc 编译器实现了 9% 的几何平均加速,最高加速比达 18%。
- 性能预测器与穷举搜索相比,能以 99% 的准确率选择最优代码变体,实现高效的变体选择。
- 在所有评估的 GPU 内核中,共享内存均未被充分利用,为寄存器溢出提供了充足的存储空间且无资源争用。
- 尽管访问延迟更高,但将寄存器溢出到共享内存比溢出到本地内存更能有效缓解占用率瓶颈,原因在于共享内存的延迟更低。
- 二进制翻译方法成功实现了寄存器降级,且无需访问专有的 nvcc 编译器基础设施。
- 该方法能有效处理寄存器存储体冲突与多字宽寄存器分配问题,确保正确性与性能。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。