wie für die Synchronisierung zwischen cuda-kernel-Funktion?
Habe ich zwei cuda-kernel solche Funktionen
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
Nachdem die Funktion gestartet hat, will ich warten, bis a beendet ist und starten Sie dann die Funktion b.
also ich eingefügt 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() zurückgegeben Fehler-code: the launch timed out and was terminated cuda error
wie kann ich es beheben?
Einen einfachen code Erklärung:
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 der kernel-Funktion, es ist ein großer for-Schleife mit if-else für die pattern-matching-Algorithmus zur Verringerung der Anzahl der Vergleiche.
- In der Nvidia-CUDA-forum (eg, cuda die Einführung Zeitlimit überschritten und wurde abgebrochen ), die Menschen zeigen, um Kerne, die zu lange laufen auf der GPU, die auch für Ihre video-display. Die Lösung ist die Verkürzung der kernel oder andere GPU (z.B. integrierte Grafik), fahren Sie Ihr display.
- Welches Betriebssystem verwenden Sie?
- ich bin mit ubuntu 10.04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Start-Fehler bedeutet, dass etwas schief ging, wenn Sie Ihre ersten kernel gestartet wurde oder vielleicht sogar etwas davor. Arbeiten Sie Ihren Weg aus dieser, versuchen Sie die Ausgabe von allen CUDA-runtime-Aufrufe für Fehler. Auch ein cudaThreadSync gefolgt von Fehler-check, nachdem alle kernel-Aufrufe. Dies sollte Ihnen helfen, den ersten Ort, wo der Fehler Auftritt.
Wenn es ist in der Tat ein Fehler beim starten, müssen Sie untersuchen, die Ausführung der Konfiguration und der code des Kernels zu finden, die Ursache des Fehlers.
Schließlich ist zu beachten, dass es sehr unwahrscheinlich ist, dass Ihre Aktion hinzufügen in einem cudaThreadSynchronize diesen Fehler verursacht hat. Ich sage dies, weil, so, wie Sie formuliert verweist die Abfrage an den cudaThreadSynchronize als Täter. Alle diesen Aufruf gemacht hat, war, fangen Ihre vorhandene Fehler früher.