2010-12-09 4 views
5

Ich werde versuchen, einige in MATLAB geschriebenen Code mit CUDA zu optimieren. Ich habe vor kurzem begonnen, CUDA zu programmieren, aber ich habe eine allgemeine Vorstellung davon, wie es funktioniert.CUDA und MATLAB für die Schleifenoptimierung

Also, sagen wir, ich möchte zwei Matrizen zusammen hinzufügen. In CUDA könnte ich einen Algorithmus schreiben, der einen Thread verwendet, um die Antwort für jedes Element in der Ergebnismatrix zu berechnen. Aber ist diese Technik wahrscheinlich nicht der von MATLAB bereits? Wäre die Effizienz in diesem Fall nicht unabhängig von der Technik und nur dem Hardware-Level zuzuordnen?

+0

Es könnte interessant sein, die Lösung von The MathWorks mit Tools von Drittanbietern und handgefertigten CUDA zu vergleichen. http://developer.nvidia.com/object/matlab_cuda.html – zellus

Antwort

3

Die Technik könnte ähnlich sein, aber denken Sie daran, dass bei CUDA Hunderte von Threads gleichzeitig ausgeführt werden. Wenn MATLAB Threads verwendet und diese Threads auf einem Quad-Core ausgeführt werden, werden nur 4 Threads pro Taktzyklus ausgeführt, während Sie möglicherweise ein paar hundert Threads für die Ausführung mit CUDA mit demselben Taktzyklus erzielen.

Also, um Ihre Frage zu beantworten, JA, die Effizienz in diesem Beispiel ist unabhängig von der Technik und nur auf die Hardware zurückzuführen.

+0

Ich wäre überhaupt nicht überrascht, eine Beschleunigung zu sehen - in der Tat, erwarten, dass es angesichts der Eingabegröße den Overhead wert ist. Aber mein Punkt ist, dass der Algorithmus selbst (d. H. Die Berechnung der Addition für jedes Element parallel) nicht zur Beschleunigung beiträgt, unabhängig von der Hardware. – dnbwise

1

Die Antwort ist eindeutig ja, alle Effizienzen sind Hardware-Ebene. Ich weiß nicht, wie Matlab genau funktioniert, aber der Vorteil von CUDA ist, dass mehrere Threads im Gegensatz zu Matlab gleichzeitig ausgeführt werden können.

Nebenbei, wenn Ihr Problem klein ist, oder viele Lese-Schreibvorgänge erfordert, wird CUDA wahrscheinlich nur ein zusätzlicher Kopfschmerz sein.

+0

Vermutlich verwendet MATLAB mehrere Threads auf der Ebene der virtuellen Maschine. – dnbwise

0

CUDA hat offizielle Unterstützung für Matlab. Verwendung von mex-Dateien machen laufen auf GPU von MATLAB

[Notwendigkeit link]

Sie können.

Der Engpass ist die Geschwindigkeit, mit der Daten von CPU-RAM zu GPU übertragen werden. Wenn also die Übertragung minimiert und in großen Blöcken durchgeführt wird, ist die Beschleunigung groß.

0

Für einfache Dinge ist es besser, die gpuArray-Unterstützung im Matlab PCT zu verwenden. Sie können es hier überprüfen http://www.mathworks.de/de/help/distcomp/using-gpuarray.html

Für Dinge wie das Hinzufügen von gpuArrays, Multiplikationen, Minuten, Maxs, etc., die Implementierung, die sie verwenden, neigt dazu, in Ordnung zu sein. Ich habe herausgefunden, dass es besser ist, kleine Kernel-Matrizen wie abs (y-Hx).^2 zu schreiben, um einen kleinen Kernel zu schreiben, der das für dich erledigt.

Verwandte Themen