У меня есть две функции ядра CUDA, как этотКак синхронизировать функцию ядра cuda?
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
После функции стартующий, я хочу, чтобы ждать, пока заканчивается, а затем запустить функцию Ь. поэтому я вставил 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
и в функции ядра, есть большой цикл, который содержит некоторые, если-то еще для соответствия шаблона алгоритма, чтобы уменьшить число сравнений.
В форуме CUDA Nvidia (например, [cuda запуск завершен и завершен] (http://forums.nvidia.com/index.php?showtopic=189042)), люди указывают на ядра, которые слишком долго для запуска на графическом процессоре, который также используется для вашего видеодисплея. Решение состоит в том, чтобы сократить ядро или использовать различные графические процессоры (например, встроенную графику) для управления вашим дисплеем. –
Какую операционную систему вы используете? – talonmies
Я использую ubuntu 10.04 – enc