Skip to main content
QUICK REVIEW

[论文解读] Optimization of Tensor-product Operations in Nekbone on GPUs

Martin Karp, Niclas Jansson|arXiv (Cornell University)|May 27, 2020
Parallel Computing and Optimization Techniques参考文献 11被引用 5
一句话总结

本文通过使用基于 CUDA 的二维线程结构优化 Nekbone(Nek5000 计算流体动力学求解器的代理应用)中的张量积运算,改善内存访问模式,实现高效的循环展开、共享内存使用和寄存器优化。该实现针对多项式次数为 9、输入规模为 1024–4096 个元素的情况,在 V100 和 P100 GPU 上均实现了 77–92% 的峰值性能,相较于先前的 GPU 版本提升了 6–10%。

ABSTRACT

In the CFD solver Nek5000, the computation is dominated by the evaluation of small tensor operations. Nekbone is a proxy app for Nek5000 and has previously been ported to GPUs with a mixed OpenACC and CUDA approach. In this work, we continue this effort and optimize the main tensor-product operation in Nekbone further. Our optimization is done in CUDA and uses a different, 2D, thread structure to make the computations layer by layer. This enables us to use loop unrolling as well as utilize registers and shared memory efficiently. Our implementation is then compared on both the Pascal and Volta GPU architectures to previous GPU versions of Nekbone as well as a measured roofline. The results show that our implementation outperforms previous GPU Nekbone implementations by 6-10%. Compared to the measured roofline, we obtain 77 - 92% of the peak performance for both Nvidia P100 and V100 GPUs for inputs with 1024 - 4096 elements and polynomial degree 9.

研究动机与目标

  • 优化 GPU 架构上 Nekbone(Nek5000 计算流体动力学求解器的代理应用)中张量积运算的性能。
  • 克服先前采用 OpenACC 与 CUDA 混合方法的 Nekbone GPU 实现所存在的性能瓶颈。
  • 探索替代性的线程映射策略,以提升内存访问效率,并更好地利用 GPU 资源(如共享内存和寄存器)。
  • 评估优化内核在现代 GPU 架构上的性能表现,与先前的 GPU 版本及实测的屋顶线模型进行对比。

提出的方法

  • 采用基于 CUDA 的实现方式,利用二维线程结构逐层处理张量运算,提升数据局部性与内存访问模式。
  • 通过循环展开减少循环开销,并提升内核中的指令级并行性。
  • 利用共享内存减少全局内存访问次数,并提高线程间的数据重用率。
  • 通过精细的内核设计与数据布局优化寄存器使用,降低寄存器压力。
  • 将计算映射到 GPU 线程块,使其与张量积运算模式相匹配,以最大化线程占用率和内存带宽利用率。

实验结果

研究问题

  • RQ1相较于先前的 1D 或混合方法 GPU 实现,二维线程映射策略在 Nekbone 张量积运算中能多大程度上提升性能?
  • RQ2在光谱元方法的 GPU 加速张量运算中,循环展开与共享内存优化能在多大程度上提升性能?
  • RQ3在现代 GPU 架构(如 Volta 和 Pascal)上,优化内核的可实现性能与理论屋顶线相比如何?
  • RQ4在不同问题规模和多项式次数下,新实现与先前 Nekbone GPU 版本的性能相比如何?

主要发现

  • 针对输入规模为 1024–4096 个元素、多项式次数为 9 的情况,优化后的 CUDA 内核在 NVIDIA V100 和 P100 GPU 上均实现了 77–92% 的理论峰值性能。
  • 在所有测试配置下,该实现相较于先前的 Nekbone GPU 版本性能提升了 6–10%。
  • 二维线程结构有效支持了循环展开,并提升了共享内存与寄存器的利用率,是性能提升的关键因素。
  • 性能提升在 Volta 和 Pascal GPU 架构上均保持一致,表明该实现具有良好的可移植性与可扩展性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。