2013-06-07 15 views
6

Ich bin verwirrt durch die Beziehung zwischen der Anzahl der Kerne in einer NVidia-GPU, Anzahl der SMPs und der maximalen Anzahl der Threads. Die Geräteeigenschaften für den GT650m meines Laptops zeigen 384 Kerne, 2 SMPs mit 1024 Threads pro SMP.CUDA-Kerne vs Thread-Anzahl

Wie hängen diese Zahlen miteinander und der Warpgröße zusammen? Ich nehme an (vielleicht falsch), dass es 192 Kerne pro SMP gibt, aber das ist kein Faktor von 1024. Wenn jeder Kern einen Warp von 32 Threads ausführt, würde ich 32 * 192 Threads pro SMP oder 2^5 * (2^7 + 2^6) oder 4096 + 2048 = 6142.

Was fehlt mir?

Antwort

9

Ich denke, Sie sollten einen tieferen Einblick in die Planung von Kernen in Cuda haben.

Es gibt zwei wichtige Größen: Blöcke und Fäden pro Block

Jeder Block auf einer SM geplant ist und dort dann in Kett- in Scheiben geschnitten. Blöcke haben daher einen gemeinsamen Speicher, der nur innerhalb des Blocks zugänglich ist, , weil er auf dem SM-Speicher liegt. Die Anzahl der Blöcke pro SM hängt von der Gerätelimit- und Belegungsberechnung ab. Maximale Blöcke pro SM sind 8 für CC 1.0-2.x und 16 für CC 3.x.

Jeder Block hat eine bestimmte Anzahl von Threads pro Block. Die Threads werden in Warps unterteilt und die Warps können in einer beliebigen Reihenfolge ausgeführt werden, die nur durch den Warp- und den SM-Verwalter bestimmt wird.

Jetzt hat Ihre Karte eine Gesamtzahl von 384 Kernen auf 2 SMs mit jeweils 192 Kernen. Die CUDA-Kernzählung stellt die Gesamtzahl der Gleitkommaoperationen oder Integer-Threadanweisungen mit einfacher Genauigkeit dar, die pro Zyklus ausgeführt werden können. Betrachten Sie keine CUDA-Kerne in irgendeiner Berechnung.

Die maximale Anzahl der Threads variiert je Rechenleistung. CC2.0-3.x unterstützt maximal 1024 Threads pro Block bei ausreichenden Registern und Warp-Slots. Warps werden Warp-Schedulern statisch zugewiesen. Die Anzahl der Warp-Scheduler pro SM beträgt 1 für CC 1.x, 2 für CC 2.x und 4 für CC 3.x.

Wenn Ihre Anwendung keine gleichzeitigen Kernels ausführt, dann muss zur Verwendung jedes SM die GridDim> = Anzahl der SM-Blöcke haben.

Damit die GTX650m Ihre Rechenleistung voll ausnutzt, sollten Sie mindestens zwei Blöcke haben (sonst könnte man mit einem Block nur einen SM verwenden). Auf der anderen Seite, wenn Sie 10240 Threads planen möchten, können Sie einfach 10 Blöcke von jeweils 1024 Threads planen.

+0

Danke. Die Warp-Planung war, was ich vermisste, denke ich. –

Verwandte Themen