我收到一个 CUDA_EXCEPTION_5, Warp Out-of-range Address 错误,我试图找出可能导致这种情况的各种情况。
我正在将一个 C 项目(由其他人编写)移植到 CUDA。C 代码非常多寄存器,在堆栈中实例化了许多数组。我假设寄存器溢出很可能会发生,这可能会触发扭曲超出范围错误。
请注意,我想让它首先运行,然后我将开始优化代码。
我正在使用 Compute Capable 3.0 硬件,根据维基百科,它有 512KB 的“每个线程的本地内存”。我在别处读到它每个 SM 有 512KB 的寄存器空间。每个正在运行的线程是否可以有 512KB 的寄存器空间?
我目前正在执行我的内核如下(是的,我知道它超慢):
dim3 grid(28800,1);
cuPlotLRMap<<<grid,1>>>(...)
一些细节(我不知道这会有多大帮助):
我的硬件有 7 个 SM。有 112 个运行块,这是否意味着每个块获得 512k 的寄存器空间的 1/16?
我也明白如果一个线程超出了寄存器空间,它可能会溢出到全局内存中。发生这种情况时,并发线程是否有可能溢出到同一个全局内存空间中?