cuda每个多处理器占用的最大活动块数== 0?

时间:2020-07-27 11:46:10

标签: cuda

我有以下问题:

cudaStatus = cudaSetDevice(gpuNo); //GPU select
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, gpuNo);
int ileWatkow = 512;
int ileSM = prop.multiProcessorCount;
int ileBlokow;
cudaOccupancyMaxActiveBlocksPerMultiprocessor(&ileBlokow, KernelTransformataPET_optymalizacja2, ileWatkow, 0);

在1080Ti中返回ileBlokow=1,,但是如果我在2080Ti中编译并运行,则返回ileBlokow=0

有时,如果我在1080Ti的新项目中复制粘贴内核,则会返回ileBlokow=0。我不知道发生了什么事...

内核有点大...包含很多代码行...

1>  ptxas info    : Compiling entry function '_Z36KernelTransformataPET_optymalizacja2P6float2S0_S0_PfS1_S1_S1_PiS2_S2_' for 'sm_61'
1>  ptxas info    : Function properties for _Z36KernelTransformataPET_optymalizacja2P6float2S0_S0_PfS1_S1_S1_PiS2_S2_
1>      408 bytes stack frame, 490 bytes spill stores, 904 bytes spill loads
1>  ptxas info    : Used 255 registers, 424 bytes cumulative stack size, 16384 bytes smem, 400 bytes cmem[0]
1>  ptxas info    : Function properties for _ZnwyPv
1>      0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
1>  ptxas info    : Function properties for __brev
1>      0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads

这是返回ptxas信息的原因。

如果我使用CC 6.1进行1080或7.5进行2080的编译,两者之间没有什么不同。

cuda工具包9.1或10.1之间没有什么不同,两者都是相同的问题

有人可以帮忙,给我一些提示或建议,我应该在哪里寻找问题?

平台:Windows + VS 2015

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

有两件事:

  1. 我将有关迭代的信息作为INT发送给内核,但我将其复制为SHORT 对于“最新” GPU,这是一个大问题,最高位是随机的……但是对于1080Ti,它为零,因此可以正常工作。

->这是我的错误,也是我从1080i到最新卡的从主机到设备方法的cuda复制问题。

  1. 我将使用的寄存器从255减少为230 ...并在CudaToolkit 12中重新编译后-该寄存器减少到83 :)对我来说真是棒极了:)

所以,我的问题解决了,谢谢大家的帮助:)特别感谢@Robert Crovella

相关问题