/ / OpenCL: Anzahl der Recheneinheiten - opencl

OpenCL: Anzahl der Recheneinheiten - opencl

Ich bin ein Anfänger von OpenCL. Ich implementiere einen Algorithmus auf einem AMD 8670M-Gerät (GCN-Architektur). Ich benutze OpenCL lokaler Speicher um häufig aufgerufene globale Daten zu speichern. Je nach Gerätespezifikation gibt es:

a) 5 compute units each having 64 KB of local memory.So device as a whole has 320 KB.
b) Maximum 2560 work-items on a compute unit.

Ich habe einen Kernel mit 8 Arbeitsgruppen gestartet, wobei jede Arbeitsgruppe 256 Arbeitsaufgaben hat. Jede Arbeitsgruppe verwendet 16 KB lokalen Speicher. Der Kernel benutzt also:

a) 2048 work-items
b) 128 KB local memory

2048 Workitems passen auf eine einzelne Recheneinheit, eine Recheneinheit stellt jedoch nur 64 KB lokalen Speicher bereit. Daher sind zwei Recheneinheiten erforderlich, um den erforderlichen lokalen Speicher bereitzustellen.
Nach meinem derzeitigen Verständnis gibt es zwei Möglichkeiten, den Kernel zu starten

1) Work-groups are distributed to two compute units to provide required local memory.
2) Work-groups are assigned to only one compute unit and excess local memory is spilled out to global memory.

Welche der oben genannten Fälle treten wahrscheinlich auf? Gibt es eine Möglichkeit, die Anzahl der aktiven Wellenfronten auf jeder Recheneinheit zu überprüfen? Anregungen sind dankbar. Vielen Dank im Voraus.

Antworten:

2 für die Antwort № 1

Arbeitsgruppen müssen nicht gleichzeitig sein. Sie müssen sich auch nicht auf einer einzelnen Recheneinheit befinden. Da Sie nur 4 Arbeitsgruppen auf eine Recheneinheit aufteilen können, wird garantiert, dass sich nicht alle gleichzeitig auf derselben Recheneinheit befinden.

Jetzt ist das System noch frei, um Ihre 8 WGs zu startenauf den 5 CUs oder sogar auf einer einzelnen CU, aber nacheinander. Die einzige Planungsgarantie besteht darin, dass jeweils 256 Arbeitsaufgabenbündel gleichzeitig geplant werden. Es ist Aufgabe des Systems, etwas auszuwählen, das am effizientesten ist.

Und hier kommt der Kicker. Sie arbeiten auf einem System, auf dem bis zu 12.000 Arbeitsaufgaben gleichzeitig ausgeführt werden können. Sie stellen nur 2.000 Arbeitsaufgaben zur Verfügung. Daher arbeitet das System möglicherweise nicht sehr effizient, da Sie die Maschine noch lange nicht voll haben. Insbesondere möchten Sie in der Regel mehrere WGs pro CU, um die Latenzen beim Starten und Stoppen zu verbergen.