gpt4 book ai didi

c++ - 示例 cuda 程序崩溃

转载 作者:行者123 更新时间:2023-11-28 01:55:58 27 4
gpt4 key购买 nike

我正在使用我们可以在本文中找到的 CUDA 示例进行一些测试 https://devblogs.nvidia.com/parallelforall/separate-compilation-linking-cuda-device-code/

如果我按照文章中的代码执行它,它就可以正常工作。但是,如果我更改主函数中的迭代次数,它就会崩溃。变化如下:

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。此更改的影响是设备崩溃,我需要重置工作站。

那我有一个问题:- 是否有内核启动限制?

如果没有限制,为什么程序会崩溃?

谢谢。

最佳答案

是的,有一个限制,默认是5s左右。这是一个驱动看门狗限制,使得主GPU的驱动(由于内核计算而无响应)终止程序,有时甚至挂起驱动和整个Windows。

更多相关信息,例如这里:How can I override the CUDA kernel execution time limit on Windows with a secondary GPUs?

我以前在做 CUDA 实验的时候也遇到过,当时我的解决方案是把计算拆分成多个内核调用。

或者,您可以尝试增加 Windows 注册表中的超时:Modifying registry to increase GPU timeout, windows 7 (我没有这方面的经验)。

第一个链接中还提到的另一种(但不是很有用)替代方法是使用额外的 GPU 卡,它不会为主显示器提供服务,只会用于计算(那么看门狗定时器不应该申请它)。


在 Linux 中,似乎也有一个限制,参见例如这里:https://askubuntu.com/questions/348756/disable-cuda-run-time-limit-on-kernels

这里:How to disable or change the timeout limit for the GPU under linux?


编辑

似乎根据这个论坛主题:https://devtalk.nvidia.com/default/topic/414479/the-cuda-5-second-execution-time-limit-finding-a-the-way-to-work-around-the-gdi-timeout/

即使是单独的内核调用也可能以某种方式累积(使 GPU 驱动程序保持忙碌)并触发看门狗。

他们推荐的是在每次内核调用之间放置 cudaThreadSynchronize()(请注意,它不同于您在那里的 cudaDeviceSynchronize() - 实际上它们应该工作相同但我发现有关代码使用 cudaThreadSynchronize 而不是使用 cudaDeviceSynchronize 的报告。

如果图形 X Windows 没有运行,看门狗也不应该应用 - 要查看是否是这种情况,您可以尝试重新启动到文本模式(sudo init 3)并运行程序以查看如果它会起作用的话。

关于c++ - 示例 cuda 程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41186537/

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