Bei GPUs bedeutet 100% -ige Auslastung, dass grundsätzlich alle Kerne Anweisungen ausführen. Wenn alle diese Anweisungen Fused-Multiply-Add-Vorgänge sind a = a + b * c
, wird sie mit Höchstleistung ausgeführt. Dies können die meisten aktuellen GPUs nur mit einem einzigen Befehl ausführen .
Wenn Sie ein Programm schreiben, das Berechnungen auf der GPU (unter Verwendung von CUDA oder OpenCL) durchführt, verteilen Sie die Arbeit in sogenannten Grids von Threadblöcken (CUDA-Terminologie). Es liegt an der GPU, alle diese Threads (in "Warps" von 32 Threads) zu planen, um alle GPU-Kerne zu beschäftigen. Ich weiß nicht, wie gut Sie sich mit diesem Thema auskennen, aber diese Einführung könnte eine interessante Lektüre sein.
Ein Beispiel erläutert, wie dies mit der Nutzung zusammenhängt. Angenommen, die GPU befindet sich im Leerlauf, und Sie starten dann eine Anwendung, die einen Kernel nur für einen einzelnen Thread-Block startet, jedoch mit ausreichenden Berechnungen in diesem Block. Die GPU plant den Thread-Block auf einem der Streaming-Multiprozessoren (SMs = Gruppe von 128 Kernen) auf der GPU. Im Fall von beispielsweise der Nvidia GTX 1080, die über 20 SM verfügt, würde dies zu einer Auslastung von nur (1/20 * 100%) = 5% führen.
Aufgrund dieser Grundkenntnisse des GPU-Computing können Sie es über den Nvidia Visual Profiler (für CUDA-Anwendungen) oder über CodeXL für (OpenCL-Anwendungen) ausführen, um die Thread-Konfigurationen für jeden Kernel anzuzeigen, den die Anwendung zur Verwendung der GPU verwendet . Aber das ist noch nicht alles, dieses Tool ist von unschätzbarem Wert, um genau zu sehen, welche Operationen (und wie effizient) die GPU ausführt.