【发布时间】:2013-12-13 19:32:13
【问题描述】:
我是 CPGPU 的新手,我有一个小的。我的程序需要大量的计算,所以当达到超时时,Windows TDR 启动,它会停止执行。 遗憾的是,我在运行我的程序的计算机上没有管理员权限,因此无法修改注册表项。我设法通过正在处理的图像行将问题分解为较小的问题,并尝试调用内核在 for 循环中重复。为了确保卡确实有时间响应操作系统,我在调用之间设置了一些睡眠时间,如下所示:
for(int row = 0; row<image.y; row++){
printf("%d/%d\n", row, image.y);
cudaMemset(dev_matrixes, 0, image.x*image.y*sizeof(short));
countEnergyOfRow<<<B,BLOCK_DIM>>>(...);
Sleep(750);
}
起初它似乎工作得很好,但在第 21 次迭代中,驱动程序被压坏了,TDR 再次击中。恢复后,CPU 继续调用内核,接下来的 490 次运行正常。我已经多次运行它,每次第 21 次迭代都是致命的。我还尝试从不同的(第 18 个)索引开始它,但同样,问题发生在第 21 次迭代(第 39 个索引处)。 我做错了什么,有什么我想念的吗?我应该以某种方式让 GPU 停止手动计数,还是只是增加睡眠时间?
【问题讨论】: