Wie kann ich die Anzahl der GPU-Cores ermitteln, die für einen Prozess verwendet werden?

8135
Vanns

Wie wir wissen, liegt die maximale Auslastung bei vier Kernen in der CPU bei 400%. Wenn die Gesamtauslastung bei 200% liegt, wird sie analysiert, da zwei Kerne zwischen vier Kernen verbraucht wurden.

Im Falle von GPUs beträgt die maximale Auslastung 100%, und wenn die Gesamtauslastung 80% beträgt, wie kann dann analysiert werden, wie viele Kerne verwendet wurden?

Für NVIDIA-Grafiken kann NVIDIA-SMI zur Anzeige der GPU-Nutzung von NVIDIA verwendet werden.

Für Intel-Grafiken kann intel_gpu_time / intel-gpu-top verwendet werden, um die iGPU-Nutzung zu sehen.

Beide zeigen jedoch nicht die Anzahl der verwendeten GPU-Kerne. Gibt es eine Möglichkeit, dies zu tun?

Ich verwende Linux. Sowohl Ubuntu 14.04 als auch Centos 7.2

4
gpu-utlization ist ein verwirrender Begriff. Bei "nvidia-smi" wird der Prozentsatz der Gesamtzeit angegeben, in der ein oder mehrere Multiprozessoren verwendet werden. Es ist nicht der Prozentsatz der gesamten verwendeten Kerne. debonair vor 6 Jahren 0

1 Antwort auf die Frage

3
Bram

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.

eine aktualisierte Einführung zu CUDA https://devblogs.nvidia.com/parallelforall/even-easier-introduction-cuda/ Scott Stensland vor 7 Jahren 0