gpt4 book ai didi

CUDA 运行时 API 错误 30 : Repeated kernel calls

转载 作者:行者123 更新时间:2023-12-04 16:07:36 26 4
gpt4 key购买 nike

我最近开始学习 CUDA,我偶然发现了一个我无法理解的非常奇怪的行为。

我的代码本质上是计算一个简单的 atomicAdd 内核的平均执行时间。为此,我在循环中调用内核以获得更好的平均值。我在循环中包括设备内存分配和副本,因为我想将其包括在我的执行时间估计中。问题是,如果循环的运行次数太多,程序通常会失败并出现运行时 API 错误 30。

我怀疑我的内存访问可能有问题,所以我在程序上运行 memcheck 但无济于事。显然没有内存错误。此外,如果只运行内核几次,则没有问题,这似乎也表明内核并不是问题所在。只有当我过于频繁地连续调用它时,我才会遇到问题。

我的代码框架如下:

for(int i = 0; i < runs; i++)
{


//////////////////////////////////
// Copy memory from Host to Device
//////////////////////////////////

cutilSafeCallNoSync( cudaMemcpy(dev_waveforms, waveforms, num_wf * wf_length * sizeof(float),
cudaMemcpyHostToDevice) );
cutilSafeCallNoSync( cudaMemcpy(dev_delays, delays, num_wf * sizeof(int),
cudaMemcpyHostToDevice) );




////////////////////////
// Kernel Call
////////////////////////

kernel_wrapper<float>(dev_waveforms, dev_focused, dev_delays,
wf_length, num_wf, threads, blocks, kernel);

//copy back to host memory.
cutilSafeCallNoSync( cudaMemcpy(focused, dev_focused, J * wf_length * sizeof(float),
cudaMemcpyDeviceToHost) );

}

同样,这仅在运行足够大时才会失败。还有其他奇怪的事情正在发生,但我现在先把它留在这里。

哦,我正在使用 Visual Studio 2010 在 Windows 7 上进行开发。我的 GPU 也充当我的视频卡,我担心这可能会产生奇怪的效果。

提前致谢!

最佳答案

Windows 7 驱动程序可以将多个命令批处理到单个提交中,以解决 WDDM 增加的驱动程序开销(与 WDDM 之前的驱动程序相比,例如 Win XP)。由于这个原因,即使单个内核没有超过看门狗,也可能在这样的循环中运行。您可以调用 cudaDeviceSynchronize() 作为 @RogerDahl 建议尝试解决它(可能只有每 N 次迭代)。

或者在 Linux 上运行。

编辑:运行时错误 30 是未知错误。如果这是看门狗定时器超时,我会期待 cudaErrorLaunchTimeout(错误 6)。由于您没有提供完整的代码,所以很难说是什么导致了错误。我怀疑您的内核代码中存在错误。

关于CUDA 运行时 API 错误 30 : Repeated kernel calls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12200994/

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