我们可以使用NVIDIA提供的文档来回答这些问题,而不是维基百科.
每个线程的寄存器在编译时决定,是一个特定的数字,并且在运行时不会变化.同样,在此上下文中使用的"溢出"是在编译时做出的决定.
因此,在启动1024个线程(1024*255 = 255K> 64K)的线程块时,我不能同时为每个线程使用255个寄存器
但是如果我启动一个64个线程的线程块,我当然可以在每个线程中使用多达255个寄存器,合法地使用正确启动的线程块.
因此,像其他一些CUDA约束(例如线程块的各个维度和线程块中的线程总数)一样,每个线程的寄存器的个别约束是一个限制,但每个多处理器的最大寄存器数是另一个(聚合)限制,并且在启动时必须满足两者才能启动内核.如果当前存在其他线程块,则可能会影响占用率.如果当前没有驻留的线程块,并且无法满足限制,则这是在启动时可检测到的条件,并将报告为内核启动错误(启动请求的资源太多).
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |