2016-05-14 6 views
0

In OpenCL ist es möglich, dass ein System, das aus mehreren GPUs besteht, den Job implizit aufteilt, ohne dass der Programmierer die Arbeitsbelastung explizit teilt?
Zum Beispiel sagen, ich habe eine GPU bestehend aus 1 SM 192 Core GPU und führen Sie eine Matrix-Multiplikation, die normalerweise funktioniert. Jetzt füge ich eine andere GPU hinzu, und das OpenCL verwendet sowohl die GPU, um die Matrixmultiplikation zu berechnen, als auch den Programmierer, der die Arbeitslast auf jede GPU aufteilt.Implizites Arbeiten von Multi GPU

Antwort

1

Ich glaube nicht, dass OpenCL dies automatisch tun kann (zumindest in 1.2), aber es gibt einige OpenCL-Wrapper, die automatisch mehrere Rechengeräte verarbeiten können. Ich habe nicht verwendet, aber sie behaupten, dass sie Lastenausgleich mehrerer Rechner haben.

+0

Also in dem wird die zwei GPU-Karte jeweils mit 1 SM, das System identifiziert insgesamt 2 SM im System vorhanden? – pradyot

0

Sie können nur Speicher von Geräten vereinheitlichen und dies nur mit der Version 2.0 von Opencl und aufwärts tun.

Kernel werden in Befehlswarteschlangen eingereiht, und sie werden mit einem einzigen Gerät erstellt (und daran gebunden). Sie können also nur auf einem Gerät arbeiten. Mehrere Befehlswarteschlangen können jedoch in einem gemeinsamen Kontext verwendet werden, der die implizite Puffersynchronisierung nutzen kann.

Das Teilen einer Arbeit kann nicht implizit erfolgen, da in Runtime nicht bekannt sein kann, welches Arbeitselement auf welche Speicheradresse zugreifen soll.

Sobald Sie einen funktionierenden Einzelgerät-Wrapper schreiben, ist das Hinzufügen von Multi-GPU-Unterstützung kein großer Aufwand.