Ich habe zwei CUDA Kernel-Funktionen wie dieseWie synchronisiert man die Cuda Kernel Funktion?
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
Nach Funktion eines begann, habe ich bis vor ein beendet warten will und dann Funktion b starten. so eingefügt I cudaThreadSynchronize() zwischen a und b wie diese,
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
err=cudaThreadSynchronize();
if(err != cudaSuccess)
printf("cudaThreadSynchronize error: %s\n", cudaGetErrorString(err));
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
aber cudaThreadSynchronize() gibt Fehlercode: the launch timed out and was terminated cuda error
wie kann ich es beheben?
einen einfachen Code Erläuterung:
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
und in Kernfunktion, gibt es eine große Schleife, die für einige, wenn-sonst für das Muster enthält Algorithmus passende Anzahl von Vergleichen zu reduzieren.
In Nvidias CUDA-Forum (z. B. [cuda der Start war abgelaufen und wurde beendet] (http://forums.nvidia.com/index.php?showtopic=189042)) verweisen die Leute auf Kernel, die zu lange dauern auf der GPU laufen, die auch für Ihre Videoanzeige verwendet wird. Die Lösung besteht darin, den Kernel zu verkürzen oder verschiedene Grafikprozessoren (z. B. integrierte Grafik) zu verwenden, um Ihr Display zu steuern. –
Welches Betriebssystem verwenden Sie? – talonmies
Ich benutze Ubuntu 10.04 – enc