gpt4 book ai didi

每个线程的Cuda寄存器

转载 作者:行者123 更新时间:2023-12-04 05:31:33 25 4
gpt4 key购买 nike

据我对2.x计算能力设备的正确理解,每个线程有63个寄存器限制。您是否知道计算能力为1.3的设备的每个线程的寄存器限制是多少?

我有一个正在GTX260上测试的大内核。我很确定我正在使用很多寄存器,因为内核非常复杂并且我需要很多局部变量。根据Cuda事件探查器,我的寄存器使用量是63(静态Smem是68,尽管我不确定这意味着什么,而动态Smem是0),尽管我确定我有63个以上的局部变量,所以我计算出编译器正在重用寄存器或将其溢出到本地内存中。

现在,我认为计算能力为1.3的设备每个线程的寄存器限制比2.x的设备更高。我的猜测是编译器选择了63个限制,因为我使用的是256个线程的块,在这种情况下256 * 63是16128,而256 * 64是16384,这是此设备的SM寄存器的限制数量。所以我的猜测是,如果我减少每个块的线程数,我可以增加使用中的寄存器数。所以我用196个线程的块运行内核。但是,即使63 * 192为12096,而64 * 192为12288,探查器仍显示63个寄存器,这在SM的16384限制之内。

那么,为什么编译器仍将自身限制为63个寄存器呢?可能是因为寄存器重用还是仍然溢出寄存器?

最佳答案

记录每个线程的最大寄存器here

cc 2.x和3.0为63,cc 1.x为128,cc 3.5为255

编译器可能已经决定使用63个寄存器就足够了,而不必使用其他寄存器。寄存器可以被重用,所以仅仅因为您有很多局部变量,并不一定意味着每个线程的寄存器必须很高。

我的建议是使用nvcc -maxrregcount option指定各种限制,然后使用-Xptxas -v option让编译器告诉您创建PTX时正在使用多少个寄存器。

关于每个线程的Cuda寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com