Das Senden von GPU-Hardwarebefehlen über den WDDM-Stack ist mit ziemlich viel Overhead verbunden.
Wie Sie festgestellt haben, bedeutet dies, dass unter WDDM (nur) GPU-Befehle "gestapelt" werden können, um diesen Overhead zu amortisieren. Der Batching-Prozess kann (wahrscheinlich) zu einer gewissen Latenz führen, die variabel sein kann, je nachdem, was sonst noch vor sich geht.
Unter Windows ist die beste Lösung, den Betriebsmodus der GPU von WDDM auf TCC umzustellen, was über den nvidia-smi
möglich ist Befehl, aber es wird nur auf Tesla-GPUs und bestimmten Mitgliedern der Quadro-GPU-Familie unterstützt – d. h. nicht auf GeForce. (Es hat auch den Nebeneffekt, dass das Gerät nicht als Windows-beschleunigter Anzeigeadapter verwendet werden kann, was für ein Quadro-Gerät oder einige bestimmte ältere Fermi-Tesla-GPUs relevant sein könnte.)
AFAIK gibt es keine offiziell dokumentierte Methode, um den WDDM-Batching-Prozess im Treiber zu umgehen oder zu beeinflussen, aber inoffiziell habe ich gehört, dass laut [email protected] in diesem Link der Befehl, der nach dem Cuda-Kernel-Aufruf ausgegeben werden soll, cudaEventQuery(0);
was dazu führen kann/sollte, dass die WDDM-Batch-Warteschlange auf die GPU „gespült“ wird.
Wie Greg betont, wird die umfassende Nutzung dieses Mechanismus den Amortisationsvorteil zunichte machen und kann mehr schaden als nützen.
BEARBEITEN: Mit Blick auf 2016 wäre eine neuere Empfehlung für ein „Low-Impact“-Flush der WDDM-Befehlswarteschlange cudaStreamQuery(stream);
EDIT2: Wenn Sie aktuelle Treiber unter Windows verwenden, sollten Sie in der Lage sein, GPUs der Titan-Familie in den TCC-Modus zu versetzen, vorausgesetzt, Sie haben eine andere GPU für die primäre Anzeige eingerichtet. Die nvidia-smi
Mit dem Tool können Sie den Modus wechseln (mit nvidia-smi --help
für weitere Informationen).
Zusätzliche Informationen über das TCC-Treibermodell finden Sie im Windows-Installationshandbuch, einschließlich der Tatsache, dass es die Latenz von Kernel-Starts verringern kann.
Die Aussage zur TCC-Unterstützung ist allgemein gehalten. Nicht alle Quadro-GPUs werden unterstützt. Die letzte Determinante für die Unterstützung von TCC (oder nicht) auf einer bestimmten GPU ist nvidia-smi
Werkzeug. Nichts hier sollte als Garantie für die Unterstützung von TCC auf Ihrer speziellen GPU ausgelegt werden.