Frage

Pycuda hat bei all seinen Fehlern normalerweise sehr gute Beispiele, die vom Wiki ausgeliefert werden. Aber ich konnte in den Beispielen oder in der Dokumentation (oder einer flüchtigen Google -Suche) nichts finden, das die Pycuda -Art der Dyanmical -Zuweisung von Workloads auf mehrere Geräte zeigt.

Kann mir jemand entweder auf das hinweisen, was ich tun sollte, oder mich auf Beispiele hinweisen?

Eine Idee, die in meinem Kopf aufgetaucht ist, war die Verwendung von Multiprozessierung und generierte einen Pool von N -Prozessen, die jeweils an ein Gerät gebunden sind, und wenn die Klasse aufgerufen wird (ich habe alle meine GPU -Funktionen in einer separaten Klasse; wahrscheinlich nicht die beste Idee, aber es funktioniert) Es ist das Round-Robin die Multiprozesse. Wie gut / verzögert eine Idee?

PS meine Entwicklungsmaschine ist 1 GPU und meine Testmaschine in 4 GPU, daher brauche ich die Lösung, um mit einer dynamischen Anzahl von Geräten umzugehen (es hilft auch nicht, dass sie unterschiedliche Berechnungsfunktionen sind, aber das ist das Leben)

War es hilfreich?

Lösung

Pycuda hatte keine intrinsische Mehrfach-GPU-Unterstützung, da CUDA auch keine intrinsische Mehrfach-GPU-Unterstützung hatte. Dies wird sich in CUDA 4.0 ändern, da die API geändert wurde, um mit Faden sicher und multi-gpu bewusst zu werden. Aber Pycuda hat diese Unterstützung noch nicht. Selbst wenn es geht, muss jedes Gerät explizit verwaltet und die von Ihnen geteilte Arbeitsbelastung geteilt werden. Es gibt keine automatische Arbeitsbelastungsverteilung oder ähnliches.

Für Multi-GPU habe ich normalerweise MPI4Py verwendet. Sie können möglicherweise ein Multithread -Python -Schema verwenden, wobei jeder Faden einen separaten Kontext in Pycuda öffnet. Was am besten funktioniert, hängt wahrscheinlich davon ab, wie viel Kommunikation zwischen Geräten erforderlich ist.

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