Frage

Ich lerne gerade OpenCL , und ich an dem Punkt bin, wenn sie versuchen zu starten Sie einen Kernel. Warum ist es, dass die GPU-Threads in einem Raster verwaltet?

Ich werde mehr darüber im Detail lesen, aber es wäre schön, mit einer einfachen Erklärung. Ist es immer so, wenn die Arbeit mit GPGPUs ?

War es hilfreich?

Lösung

Dies ist ein gemeinsamer Ansatz, der in CUDA, OpenCL verwendet wird, und ich denke, ATI Stream.

Die Idee hinter dem Gitter ist ein einfache, aber flexibel, Zuordnung zwischen den Daten verarbeitet werden, und die Fäden der Datenverarbeitung zu tun. In der einfachen Version des GPGPU Ausführungsmodelles wird ein GPU thread „zugeordnet“ für jedes Ausgabeelement in einem 1D-, 2D- oder 3D-Raster von Daten. Um dieses Ausgangselement zu verarbeiten, wird der Thread gelesen ein (oder mehr) Elemente aus der entsprechenden Stelle oder benachbarten Stellen in dem Eingangsdatenraster (s). Durch die Organisation, die Fäden in einem Raster ist, ist es einfacher für die Fäden, um herauszufinden, welche Elemente Eingangsdaten zu lesen und in dem die Ausgangsdatenelemente speichern.

Dies kontrastiert mit dem gemeinsamen mehradrigen, CPU Threading-Modell, wo ein Thread pro CPU-Kern zugeordnet ist, und jeder Thread verarbeitet viele Eingangs- und Ausgangselemente (zB 1/4 der Daten in einem Quad-Core-System).

Andere Tipps

Die einfache Antwort ist, dass GPUs zu Prozessbildern und Texturen entwickelt werden, die 2D-Gitter von Pixeln sind. Wenn Sie ein Dreieck in DirectX oder OpenGL machen, die Hardware rastert es in ein Raster von Pixeln.

Ich werde die klassische Analogie des Setzens einen quadratischen Pflock in ein rundes Loch aufrufen. Nun, in diesem Fall ist die GPU ein sehr quadratisches Loch und nicht so gut wie GP (General Purpose) abgerundet würde vorschlagen.

Die obigen Ausführungen stellen sie darauf, die Ideen von 2D-Texturen usw. Die Architektur der GPU so ist, dass die gesamte Verarbeitung in Strömen mit der Rohrleitung in jedem Strom identisch gemacht wird, so müssen die Daten verarbeitet werden, wie das segmentiert werden .

Ein Grund, warum dies eine schöne API ist, dass Sie normalerweise mit einem Algorithmus arbeiten, die mehrere verschachtelte Schleifen hat. Wenn Sie ein, zwei oder drei Schleifen haben dann ein Gitter von einer, zwei oder drei Dimensionen abbildet schön für das Problem, Ihnen einen Thread für den Wert des einzelnen Indizes geben.

So Werte, die Sie in Ihrem Kernel benötigen (Indexwerte) sind in der API natürlich exprimiert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top