cuda SM寄存器限制

发布于 2024-09-26 01:17:27 字数 100 浏览 4 评论 0原文

我知道在一个 SM 上运行的块数量受到块数量、线程、共享内存和寄存器的限制。有没有什么策略可以避免寄存器过多?我的意思是我只是不想拥有太多,最终它限制了我在一个 SM 上运行的块的数量。

I know number of block running on one SM is limited by block number, threads, shared memory, and register. Is there any strategy to avoiding having too many registers? I mean I just don't want to have too many of them, eventually it limits the number of block I run on one SM.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倚栏听风 2024-10-03 01:17:27

使用nvcc -Xptxas -v编译将打印出Edric提到的诊断信息。此外,您可以使用 __launch_bounds__ 限定符强制编译器保留寄存器。例如,

__global__ void
__launch_bounds__(maxThreadsPerBlock, minBlocksPerMultiprocessor)
MyKernel(...)
{ 
   ...
}

保证至少 minBlocksPerMultiprocessor 个大小为 maxThreadsPerBlock 的块适合单个 SM。请参阅 CUDA 编程指南< 的 B.16 节< /a> 的完整解释 __launch_bounds__

Compiling with nvcc -Xptxas -v will print out the diagnostic information Edric mentioned. Additionally, you can force the compiler to conserve registers using the __launch_bounds__ qualifier. For example

__global__ void
__launch_bounds__(maxThreadsPerBlock, minBlocksPerMultiprocessor)
MyKernel(...)
{ 
   ...
}

guarantees that at least minBlocksPerMultiprocessor blocks of size maxThreadsPerBlock will fit on a single SM. See Section B.16 of the CUDA Programming Guide for a complete explanation of __launch_bounds__.

电影里的梦 2024-10-03 01:17:27

寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。然而,PTX 汇编器在重用寄存器方面可以做得相当好,因此从 PTX 代码中计算出将使用多少寄存器并不总是那么容易 - 您需要运行 ptxas 来获取真正的答案。

One of the main drivers for the number of registers is amount of local data you declare in your kernel. However, the PTX assembler can do quite a good job of re-using registers, so it's not always easy to work out how many will be used from the PTX code - you need to run ptxas to get the real answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文