Verwendung mehrerer GPUs in Matlab

9

Dies ist die Ausgabe von ginfo mit Jacket / Matlab:

%Vor%

Das Problem ist:

  1. Kann ich die zwei Teslas gleichzeitig benutzen (parfor)? Wie?
  2. Wie kann ich wissen, wie viele Kerne das Programm gerade ausführen / ausführen?
  3. Nachdem ich den folgenden Code ausgeführt habe und Quadro (in Benutzung) gemacht habe, habe ich weniger Zeit als Tesla gebraucht, obwohl Tesla 240 Cores hat und Quadro nur 64 hat? Vielleicht, weil es das Display-Gerät ist, vielleicht weil es eine einfache Genauigkeit hat und Tesla Double Precision ist?
%Vor%

Jede Hilfe mit dem Code wird geschätzt. Wie Sie sehen können, ist es ein sehr triviales Beispiel, um die Leistung der GPU zu demonstrieren, nicht mehr.

    
pyCuda 04.12.2011, 21:25
quelle

2 Antworten

1

Zwei Tesla gleichzeitig verwenden : Schreibe eine MEX-Datei und rufe cudaChooseDevice(0) auf, starte einen Kernel, rufe cudaChooseDevice(1) auf und führe einen anderen Kernel aus. Kernelaufrufe und Speicherkopien (d. H.% Co_de% und cudaMemcpyAsync ) sind asynchron. Ich habe ein Beispiel dafür gegeben, wie man eine MEX-Datei (dh eine DLL) in eine meiner anderen Antworten . Fügen Sie diesem Beispiel einfach einen zweiten Kernel hinzu. Zu Ihrer Information, Sie brauchen Jacket nicht, wenn Sie C / C ++ programmieren können. Wenn Sie andererseits Ihre Zeit nicht damit verbringen möchten, das Cuda SDK zu lernen Sie haben keinen C / C ++ - Compiler, dann stecken Sie fest mit Jacket oder gp-you oder GPUlib , bis Matlab die Funktionsweise von cudaMemcpyPeerAsync ändert.

Alternativ können Sie OpenCL von Matlab aufrufen (wiederum über eine MEX-Datei). Dann könnten Sie Kernel auf allen GPUs und CPUs starten. Auch dies erfordert einige C / C ++ Programmierung.

    
user244795 23.12.2011, 14:59
quelle
0

Ab Matlab 2012 sind GPU-Array- und GPU-Funktionen vollständig in MATLAB integriert, so dass Sie möglicherweise Jacket nicht benötigen, um das zu erreichen, was Sie erreichen möchten.

Wenn Sie also gpuDevice(deviceID); vor dem Ausführen von GPU-Befehlen eingeben, werden die folgenden Codes auf der deviceID th gpu ausgeführt. Zum Beispiel

%Vor%

Um mehrere Grafikprozessoren auszuführen. setzen Sie einfach

%Vor%

Sie können die GPU-Speicherbelegung anzeigen, indem Sie in der Systembefehlszeile nvidia-smi eingeben.

Diese Art der Einstellung der GPU-ID scheint seltsam, aber es ist die herkömmliche Art, GPU-ID zu setzen. Wenn Sie in CUDA eine bestimmte GPU verwenden möchten, werden cudaSetDevice(gpuId) und die folgenden Codes auf der gpuId ten GPU ausgeführt. (0-Basisindexierung)

---------------------- BEARBEITEN ----------------

Getestet und bestätigt auf MATLAB 2012b, MATLAB 2013b.

Wird mit nvidia-smi überprüft, dass der Code tatsächlich andere GPU-Speicher verwendet. Sie müssen es möglicherweise sehr groß rand(5000) skalieren und sehr schnell überprüfen, da die temporären Variablen a und b verschwinden würden, nachdem die for-Schleife beendet wurde.

    
VforVitamin 14.10.2014 22:56
quelle