2013-03-01 5 views

Antwort

21

Ein Aufruf

cudaFree(0); 

ist der üblicher Weg, faul Kontext Einrichtung in der CUDA-Laufzeit zu erzwingen. Sie können den Overhead nicht reduzieren, das ist eine Funktion von Treiber-, Laufzeit- und Betriebssystemlatenzen. Mit dem obigen Aufruf können Sie steuern, wie und wann diese Gemeinkosten während der Programmausführung auftreten.

EDIT 2015 hinzufügen, dass die Heuristik des Kontext der Initialisierung in dem Runtime-API auf subtile Weise im Laufe der Zeit verändert hat, so dass cudaSetDevice jetzt einen Kontext stellt, so dass der cudaFree() Anruf nicht explizit einen Zusammenhang intialise erforderlich ist, können Sie Verwenden Sie stattdessen cudaSetDevice. Beachten Sie auch, dass beim ersten Start des Kernels noch einige Rüstzeiten anfallen, während dies vorher nicht der Fall war. Für das Kernel-Timing ist es am besten, zuerst einen Aufwärmaufruf einzubeziehen, bevor Sie den Kernel starten, um diese Setup-Latenz zu entfernen. Es scheint, dass die verschiedenen Profiling-Tools genügend Granularität eingebaut haben, um dies ohne zusätzliche API-Aufrufe oder Kernel-Aufrufe zu vermeiden.

+0

Genau! Es erfasst alle Initialisierungszeiten! Vielen Dank! – szli