由于测试需要,需要在Bundlefusion上修改源码,然后本人在__device__函数上,加入了for循环,由于遍历的次数较大,所以加入这一部分修改的代码就会导致不报错,但是输出的是empty mesh。
找了很久的原因,发现是SM会根据线程数量为每一个线程分配寄存器空间,但是在for循环遍历时,会不断的占用寄存器空间,所以当寄存器空间不足时,就会导致CUDA Kernel不启动,从而不执行GPU代码。
解决方式就是在为Kernel函数分配线程时,需要平衡for训话遍历与线程的数量,因此,通过减小Blocksize的大小,成功解决了内核不启动的问题