首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个线程的寄存器数

每个线程的寄存器数
EN

Stack Overflow用户
提问于 2013-06-27 16:52:19
回答 2查看 4K关注 0票数 2

对于一个CUDA kenel来说,保持寄存器/线程的低计数有什么好处吗?

我认为没有优势(速度或其他)。3 reg/线程的上下文切换速度与48个regs/线程一样快。不使用所有可用寄存器是没有意义的,除非你只是不想这样做。寄存器在内核之间不共享。这样做不对吗?

编辑: CUDA4.2编程指南中的 (5.2.3):

代码语言:javascript
复制
    The number of registers used by a kernel can have a significant impact on the number 
    of resident warps. For example, for devices of compute capability 1.2, if a kernel uses 16 
registers and each block has 512 threads and requires very little shared memory, then two 
    blocks (i.e. 32 warps) can reside on the multiprocessor since they require 2x512x16 
    registers, which exactly matches the number of registers available on the multiprocessor.
     But as soon as the kernel uses one more register, only one block (i.e. 16 warps) can be 
    resident since two blocks would require 2x512x17 registers, which are more registers than 
    are available on the multiprocessor. Therefore, the compiler attempts to minimize register 
    usage while keeping register spilling (see Section 5.3.2.2) and the number of instructions 
    to a minimum.

“regs/线程”计数似乎不像总reg计数那么重要。

EN

回答 2

Stack Overflow用户

发布于 2013-06-27 17:51:56

使用中的寄存器数量会影响GPU的占用率,因为每个多处理器的寄存器总数是有限的。

库达占用率计算器

您可以输入计算能力、共享内存大小配置值、每个块的线程数、每个线程寄存器和每个块共享内存字节数。

该工作表将提供关于每个多处理器( mp )将运行多少个线程、有多少个翘曲处于活动状态、每个mp中线程块的数量以及每个mp的占用率的信息。

事实上,这取决于您的问题,但您将希望您的占用尽可能高,以避免资源被浪费。另一方面,如果限制寄存器的数量,则可能会减慢代码的速度。

因此,不使用所有寄存器以避免低占用率可能是有意义的,但正如我所说,这是一个权衡的问题。

票数 3
EN

Stack Overflow用户

发布于 2013-06-27 17:58:28

由于许多块可以在单个SM上运行,因此每个线程分配太多寄存器可能会影响性能。您在SM上受到硬件的限制--如果SM“饱和”了10个块(也就是说,它不必等待块完成内存访问,因为它还有其他工作要做),但是每个块在SM中使用1/5的寄存器,您的利用率就会低于标准。

这也适用于共享内存,其限制(IIRC)为每SM ~32k。(+/-取决于您的GPU/体系结构)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17348929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档