Arbeitsgruppendimensionen

8

Warum sind work_groups für einen bestimmten Kernel immer gleich groß? Ich lese irgendwo (für den Fall, dass wir die lokale Arbeitsgröße nicht angeben), dass openCL 3 Arbeitsgruppen (von jeweils 217 Arbeitselementen) für den Kernel mit 651 Arbeitselementen (durch 3 teilbar) erstellt, während es 653 Arbeit erstellt Gruppen von je 1 Arbeitsstück, da 653 eine Primzahl ist.

Angenommen, wir geben die local_work_size (d. h. Anzahl von Workitems in einer Arbeitsgruppe) an, sagen wir 5. Und wir haben die Gesamt-Work-Items (global_work_size) als 9 angegeben. Wie werden die Arbeitsgruppen erstellt? Ist deshalb die global_work_size ein Vielfaches von local_work_size? Wenn die Daten nur 9 Arbeitsaufgaben erfordern, wie erhöhe ich sie auf 10 (Vielfaches von local_work_size, 5)?

Warum kann der Host den Speicher für das Ergebnisarray nicht zuweisen, wenn er nicht weiß, wie viele Arbeitsgruppen den Kernel ausführen?

Bitte helfen Sie. Ich lese das alles zu diesem Thema: Ссылка

    
Remy 13.07.2012, 07:40
quelle

1 Antwort

6

OpenCL-Arbeitsgruppen müssen nicht immer die gleiche Größe haben. Die Größe der globalen Arbeitsgruppe hängt häufig mit der Problemgröße zusammen. Die Größe der lokalen Arbeitsgruppe wird basierend auf der Maximierung des Durchsatzes der Compute Unit und der Anzahl der Threads, die den lokalen Speicher gemeinsam nutzen müssen, ausgewählt.

Betrachten wir ein paar Beispiele;

A) Skaliere ein Bild von N durch M nach X um Y.

B) Summe N Zahlen.

Für A)

Die offensichtliche Größe der globalen Arbeitsgruppe ist X, Y, 1. Warum? Dies ergibt 1 Thread pro Pixel. Die Größe der lokalen Arbeitsgruppe sollte basierend auf der Anzahl der Eingabepixel ausgewählt werden, die verarbeitet werden müssen, um ein Ausgabepixel zu generieren.

z.

A.1) Skaliere ein Bild von 4K um 3,2K auf 64 mal 64. GWG Größe [64,64,1] LWG Größe 256 A.2) Skalieren Sie ein Bild von 4k mal 3.2k auf 800 mal 600.GWG Größe [800,60,1] LWG Größe 256

Für B)

Die offensichtliche globale Arbeitsgruppe Größe ist N / 2,1,1, warum? Jeder Thread beginnt also damit, zwei Werte zu summieren. Die lokale Arbeitsgruppe sollte auf das Gerät max.

eingestellt werden

Es gibt einige Vorbehalte;

1) Die globale Arbeitsgruppengröße wird durch die globale Speichergröße und die maximale globale Speicherzuweisungsgröße eingeschränkt.

2) Jedes Gerät hat eine maximale lokale Arbeitsgruppengröße von 256

    
Tim Child 14.07.2012, 16:30
quelle

Tags und Links