【发布时间】:2012-03-28 06:23:06
【问题描述】:
我有两个这样的 cuda 内核函数
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
函数a启动后,我想等到a完成,然后再启动函数b。 所以我像这样在 a 和 b 之间插入了 cudaThreadSynchronize(),
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
err=cudaThreadSynchronize();
if( err != cudaSuccess)
printf("cudaThreadSynchronize error: %s\n", cudaGetErrorString(err));
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
但是 cudaThreadSynchronize() 返回错误码:the launch timed out and was terminated cuda error
我该如何解决?
简单的代码说明:
mmap(sequence file);
mmap(reference file);
cudaMemcpy(seq_cuda, sequence);
cudaMemcpy(ref_cuda,reference);
kernel<<<>>>(params); //find short sequence in reference
cudaThreadSynchronize();
kernel<<<>>>(params);
cudaMemcpy(result, result_cuda);
report result
在内核函数中,有一个很大的 for 循环,其中包含一些 if-else 用于模式匹配算法以减少比较次数。
【问题讨论】:
-
在 Nvidia 的 CUDA 论坛(例如,cuda the launch timed out and was terminated)中,人们指出在 GPU 上运行时间过长的内核也用于视频显示。解决方案是缩短内核或使用不同的 GPU(例如集成显卡)来驱动您的显示器。
-
你使用的是什么操作系统?
标签: cuda synchronize