使用 hipSYCL / llvm 在 nvidia 上注册使用

register usage on nvidia with hipSYCL / llvm

我正在查看一些 hpc 代码的 sycl 端口的性能,我通过 hipSYCL 在 GV100 卡上运行。

运行 通过探查器的代码告诉我,非常高的寄存器使用率可能是性能的限制因素。

是否有任何方法可以影响 hipSYCL / clang 生成的 gpu 代码的寄存器使用,类似于 nvcc 的 -maxregcount 选项?

hipSYCL 调用 clang CUDA 工具链。据我所知,clang CUDA 和 LLVM nvptx 后端没有 -maxregcount 的直接模拟,但也许 LLVM nvptx 后端选项 --nvptx-sched4reg 可以提供帮助。它告诉优化器安排最小寄存器压力,而不是仅仅跟随源。

如果你使用访问器,你也可以尝试使用SYCL 2020 USM指针来代替。在 hipSYCL[1] 中,访问器将始终使用更多的寄存器,因为它们还需要存储有效的访问范围和偏移量。

[1] 以及任何其他严重依赖仅库语义的 SYCL 实现