Методичка третья по MATLAB
.pdf31
5.Список литературы
1.The MathWorks. Parallel Computing Toolbox User’s Guide. 2008
2.Parallel MATLAB: Doing it Right Ron Choy, Alan Edelman Massachusetts Institute of Technology, Cambridge, MA 02139
3.Н.Н. Оленев, Р.В. Печенкин, А.М.Чернецов Параллельное про граммирование в MATLAB и его приложения. М.: ВЦ РАН, 2007. 120 с.
4.В.П. Гергель, Р.Г. Стронгин Основы параллельных вычислений для многопроцессорных вычислительных систем. Нижний Новгород, 2003
5.C. Moler. Why there isn’t a parallel matlab. Cleve’s corner , Mathworks Newsletter, 1995.
6.Parallel MATLAB Survey. http://www.interactivesupercomputing.com/reference/parallelMatlabsurvey.php
7.B. Barney. Introduction to Parallel Computing
https://computing.llnl.gov/tutorials/parallel_comp/ , 2009
8.http://www.mathworks.com/
9.http://matlab.exponenta.ru/
10.http://wikimedia.org/
11.http://www.wikiznanie.ru
32
6.Приложение
1.Пример последовательного и параллельного циклов Последовательный цикл:
for i=1:1024
A(i) = sin(i*2*pi/1024); end
plot(A)
Параллельный цикл
matlabpool open local 2 parfor i=1:1024
A(i) = sin(i*2*pi/1024); end
plot(A) matlabpool close
2. Пример цикла с независимыми друг от друга итерациями
Последовательный цикл:
clear A for i = 1:8
A(i) = i;
end A
Параллельный цикл
matlabpool open local 2 clear A
parfor i = 1:8 A(i) = i;
end
matlabpool close
3. Последовательность Фибоначчи. Пример не параллелизуемого цикла.
f = zeros(1,50); f(1) = 1;
f(2) = 2; parfor n = 3:50
33
f(n) = f(n1) + f(n2);
end
4. Работа с Parallel Command Window
pmode start local 2 help magic
x = pi
x = labindex all = numlabs
segment = [1 2; 3 4; 5 6] segment = segment + 10*labindex F = @(x) 4./(1 + x.^2)
a = (labindex 1)/numlabs; b = labindex/numlabs;
[a, b]
myIntegral = quadl(F, a, b) piApprox = gplus(myIntegral) piApprox pi
pmode exit
5. Последовательное и параллельное перемножение матриц
Последовательный цикл:
clear; n = 10; tic;
parfor i = 1:n
M = magic(n); R = rand(n);
A(i) = sum(M(i,:).*R(n+1i,:));
end toc
Параллельный цикл
matlabpool open local 2 clear;
n = 10; tic;
for i = 1:n
M = magic(n); R = rand(n);
A(i) = sum(M(i,:).*R(n+1i,:));
34
end toc
matlabpool close
6.Поиск суммы, произведения и максимального члена ряда в параллельном цикле
matlabpool open local 2 clear;
n = 10;
x = rand(n, 1); total = 0.0; big = Inf; fact = 1;
for i = 1:n
total = total + x(i); big = max(big, x(i)); fact = fact*x(i);
end
matlabpool close
7. Неверное задание индексации параллельного цикла
>> parfor i=1:2:10 |
% не |
последовательная |
индексация |
||
>> |
parfor i=5.1:10.3 |
% |
не |
целые индексы |
|
>> |
parfor i=[5;6;7;8] |
% |
индексы не образуют |
ряд |
35