У меня есть две функции ядра cuda, подобные этой
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
После запуска функции a я хочу дождаться завершения функции a, а затем запустить функцию b.
поэтому я вставил cudaThreadSynchronize () между a и b следующим образом,
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 для алгоритма сопоставления с образцом, чтобы уменьшить количество сравнений.