2012-03-28 11 views
0

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.

+0

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. –

+0

Welches Betriebssystem verwenden Sie? – talonmies

+0

Ich benutze Ubuntu 10.04 – enc

Antwort

1

Dieser Startfehler bedeutet, dass etwas schief gelaufen ist, als der erste Kernel gestartet wurde, oder vielleicht sogar etwas davor. Versuchen Sie, die Ausgabe aller CUDA-Laufzeitaufrufe für Fehler zu überprüfen, um sich aus diesem Vorgang herauszuarbeiten. Führen Sie auch einen cudaThreadSync-Vorgang aus, gefolgt von einer Fehlerüberprüfung nach allen Kernelaufrufen. Dies sollte Ihnen helfen, den ersten Ort zu finden, an dem der Fehler auftritt.

Wenn es tatsächlich ein Startfehler ist, müssen Sie die Ausführungskonfiguration und den Code des Kernels untersuchen, um die Ursache für Ihren Fehler zu finden.

Schließlich, es ist sehr unwahrscheinlich, dass Ihre Aktion des Hinzufügens in eine cudaThreadSynchronize diesen Fehler verursacht hat. Ich sage das, weil die Art, wie Sie die Abfrage formuliert haben, auf die cudaThreadSynchronize als Täter hinweist. Bei diesem Aufruf wurde Ihr vorhandener Fehler früher abgefangen.

+0

Ich überprüft alle Kernel-Aufrufe vor dem Aufruf einer, aber es gab keinen Fehler. dann "der Start Zeit abgelaufen und wurde Cuda Fehler beendet" könnte während der Funktion auftreten a ?? – enc

+0

Enc: Ja, mit Kernel a muss etwas nicht in Ordnung sein. Entweder seine Ausführungskonfiguration oder was Sie in seinem Kernel tun. –

+0

danke Ashwin. Gibt es eine Vermutung über diese Situation? Ich habe keine Ahnung, welches dieses Problem verursacht. Eine Sache, die ich erkenne ist, dass, wenn ich kleine Daten (~ 10 MB) verwende, es gut funktioniert, aber ich benutze größere Daten (einige hundert MB, aber passen in den Speicher auf der Grafikkarte), es funktioniert nicht. – enc