MATLAB’da For döngüleri yavaş çalışırlar, artık bilgigisayarların çoğu çoklu işlemci desteği ile geliyor, bu kadar işlemci varken bunları kullanmamak olmaz. Aşağıda küçük bir kod örneği yaptım. Bu örnek normal bir for döngüsünden yavaş çalışıyor ama genel mantığı açıklıyor. C++’da OpenMP ile yapılanın benzerini MATLAB’da da yapıyorsunuz aslında.
- Gerçekten çok uzun süren bir işlem varsa ve bunlar birbirinden bağımsız çalışıyorsa kullanılabilir.
- Dışarıda oluşturduğunuz bir matrisin parfor içerinde değerini değiştirmek istediğinizde hata alınıyor, eğer böyle bir şey gerekiyorsa çalışacağınız kolonu bir vektöre kopyalayıp o şekilde çalışmakta fayda var.
- MATLAB’da Paralel çalışma konfigürasyonu yapmakta fayda var.
- MATLAB Parallel Processing Toolbox kurulmuş olmalıdır.
Örnekte durum çubuğu ve zaman ölçümü gibi faydalı işlemler içinde bir kaç kod var.
M = 8;
rows = 1000;
cols = 1000;
t_start = tic;
h = waitbar(0, 'bekleyiniz');
result = zeros(rows, cols);
parfor (row = 1:rows, M)
curRowVector = result(row, : );
curRow = row;
for col = 1:cols
curRowVector(col) = curRow + col;
end
result(row, : ) = curRowVector;
waitbar(row/rows);
end
close(h);
t_elapsed = toc(t_start);
fprintf('geçen zaman %.2d \n', t_elapsed);
MATLAB’ın yardım sayfası: http://www.mathworks.com/help/toolbox/distcomp/brb2x2l-1.html
MATLAB’da genel olarak hızlandırma ile ilgili bir sunum: http://people.sc.fsu.edu/~jburkardt/presentations/vt_2010_parfor.pdf