我有两个这样的 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 以减少比较次数。