Wir nutzen derzeit noch die Matlab/Simulink Version R2007b. Auf Grund der gestiegenen Anforderungen in Bildverarbeitung und Rendering sind wir auf der Suche nach einer Möglichkeit gewesen, die Performance der Algorithmen zu verbessern. Neben der Anschaffung eines neuen Servers mit NVIDIA Quadro 2000 Grafikkarte und dementsprechend auch CUDA Schnittstelle, ist für die Version 2007b eine kostenfreie Erweiterung namens GPUmat verfügbar, welche es ermöglicht auf der wesentlich schnelleren Grafikkarte zu rechnen.
Ein Performancevergleich bei der beispielhaften Multiplikation zweier Matrizen soll mal die Möglichkeiten verdeutlichen:
Je höherdimensional die Multiplikation wird (mehr Speicher), desto effizienter kann hier die Berechnung auf der Grafikkarte arbeiten. Bei der Multiplikation einer 4000×4000 Matrix ist die GPU 6x schneller als der 3.2GHz Intel XEON CPU.
Der Matlab Code zur Performancemessung ist aus der Doku zu GPUmat (S.24) entnommen:
[matlab]
%GPUstart
clear all
close all
clc
N = 100:100:4000;
timecpu = zeros(1,length(N));
timegpu = zeros(1,length(N));
index=1;
for i=N
Ah = single(rand(i)); % CPU
A = GPUsingle(Ah); % GPU
%% Execution on GPU
tic;
A.*A;
GPUsync;
timegpu(index) = toc;
%% Execution on CPU
tic;
Ah.*Ah;
timecpu(index) = toc;
% increase index
index = index +1;
end
%% Plot erzeugen
bar(N,[timecpu‘, timegpu‘])
xlabel(‚Matrixdimension N‘)
xlim([1,i])
ylabel(‚Zeit [s]‘)
legend(‚CPU Intel XEON 6×3.2GHz‘,’GPU NVidia Quadro 2000′,’Verhältnis‘)
title(‚Zeit zur Berechnung einer Matrizenmultiplikation (NxN Matrix)‘,’FontSize‘,12)
grid on
h1 = gca;
h2 = axes(‚Position‘,get(h1,’Position‘));
plot(N,timecpu./timegpu,’LineWidth‘,3)
set(h2,’YAxisLocation‘,’right‘,’Color‘,’none‘,’XTickLabel‘,[])
set(h2,’XLim‘,get(h1,’XLim‘),’Layer‘,’top‘)
set(gcf,’PaperPositionMode‘,’auto‘) [/matlab]