Ich entwickle eine Anwendung mit CUDA. Ich habe es mit der CPU verglichen und einige variable Laufzeiten bemerkt. Ich entschied mich, meine Anwendung in einer Schleife von der Befehlszeile aus auszuführen, damit ich bessere Statistiken sammeln konnte. Ich habe die Anwendung 50 Mal ausgeführt und die Ergebnisse aufgezeichnet. Ich war sehr überrascht zu sehen, dass die verstrichene Kernel-Zeit als eine Funktion der Startnummer zunahm.Warum steigt die Ausführungszeit meines CUDA-Kernels bei aufeinanderfolgenden Starts?
Hier ist ein Ausschnitt, so dass Sie den Teil des Codes sehen, die zeitlich gesteuert wird:
int nblocks = (int)ceil((float)n/(float)NUM_THREADS);
gpuErrchk(cudaEventRecord(start, 0));
gpuperfkernel << <nblocks, NUM_THREADS >> >(dmetadata, ddatax, ddatay);
gpuErrchk(cudaPeekAtLastError());
gpuErrchk(cudaDeviceSynchronize());
gpuErrchk(cudaEventRecord(stop, 0));
gpuErrchk(cudaEventSynchronize(stop));
gpuErrchk(cudaEventElapsedTime(&milliseconds, start, stop));
printf("GPU kernel took %f milliseconds.\n", milliseconds);
gpuelapsed += milliseconds;
ich gearbeitet habe CUDA recht viel und ich habe nicht gesehen Verhalten vorher. Fragen Sie sich, ob das jemand bemerkt hat? Meine Plattform ist Windows 10, CUDA 7.5, MSI Notebook, GeForce 970m.
Da ich auf einem Laptop bin, dachte ich, es könnte eine Energie bezogene Einstellung oder etwas ähnliches sein, aber ich habe alles auf Hochleistung eingestellt und habe den Bildschirmschoner deaktiviert.
Insgesamt ist dies weniger als 1% Unterschied in der gemessenen Zeit, min bis max. Das Windows-Betriebssystem verwendet auch Ihre GPU und verwaltet tatsächlich alle Ihre CUDA-Zugriffe auf die GPU. Windows ist eine beschäftigte Umgebung. Ich bin nicht überrascht, dass es einige Variationen gibt. –