【发布时间】:2023-03-31 08:30:01
【问题描述】:
我正在使用本文https://devblogs.nvidia.com/parallelforall/separate-compilation-linking-cuda-device-code/中可以找到的 CUDA 示例进行一些测试
如果我按照文章中的代码执行代码,它就可以正常工作。但是,如果我更改主函数中的迭代次数,它就会崩溃。变化如下:
int main(int argc, char ** argv)
{
...
for(int i=0; i<500000; i++) // I have change the number iterations from 100 to 500000
{
float dt = (float)rand()/(float) RAND_MAX; // Random distance each step
advanceParticles<<< 1 + n/256, 256>>>(dt, devPArray, n);
cudaDeviceSynchronize();
}
...
}
我所做的唯一更改是从 100 到 500000 的迭代次数。此更改的影响是设备崩溃,我需要重置工作站。
然后我有一个问题: - 有内核启动限制吗?
如果没有限制,程序为什么会崩溃?
谢谢。
【问题讨论】:
-
由于您使用 cudaDeviceSynchronize(),您总是在等待内核完成后再处理下一次迭代。这样您就不会一次启动多个独特的内核。所以这不是内核启动限制。