【发布时间】:2015-01-15 11:06:50
【问题描述】:
我正在使用包含 4 个 GeForce GTX Titan 黑卡的工作站进行 CUDA 开发。我正在使用 Ubuntu 12.04.5,这些 GPU 都没有用于显示。我注意到使用 cudaGetDeviceProperties 启用了内核执行超时。当我不在 Windows 上且不使用显示器时,这是否适用?
我将以下代码放在我的一个通常运行良好的内核中进行测试:
__global__ void update1(double *alpha_out, const double *sDotZ, const double *rho, double, *minusAlpha_out, clock_t *global_now)
{
clock_t start = clock();
clock_t now;
for (;;) {
now = clock();
clock_t cycles = now > start ? now - start : now + (0xffffffff - start);
if (cycles >= 50000000000) {
break;
}
}
*global_now = now;
}
内核启动如下:
update1<<<1, 1>>>(d_alpha + idx, d_tmp, d_rho + idx, d_tmp, global_now);
CudaCheckError();
cudaDeviceSynchronize();
对于足够多的周期等待,我看到错误:
CudaCheckError() with sync failed at /home/.../xxx.cu:295:
the launch timed out and was terminated
它在少数几个周期内运行良好。如果我在禁用内核执行超时的 Tesla K20m GPU 上运行相同的代码,我看不到此错误并且程序正常运行。如果我看到这个错误,这是否肯定意味着我达到了似乎已启用的内核时间限制,或者我的代码可能有其他问题?所有提到这个问题的人似乎都在使用 Windows 或使用他们的卡进行显示,所以我怎么可能看到这个错误?
【问题讨论】:
标签: cuda