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
InformationsquelleAutor enc | 2012-03-28
Schreibe einen Kommentar