打开并行计算功能
>> parpool
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 8).
ans =
ProcessPool with properties:
Connected: true
NumWorkers: 8
Cluster: local
AttachedFiles: {}
AutoAddClientPath: true
IdleTimeout: 30 minutes (30 minutes remaining)
SpmdEnabled: true
parfor
单重循环
%采用parfor进行并行计算
n = 200;
A = 500;
a = zeros(1,n);
tic
parfor ii = 1:n
a(ii) = max(abs(eig(rand(A))));
end
toc
Elapsed time is 5.532609 seconds.
双重循环
外层parfor
N1 = 200;
N2 = 500;
a = rand(N1,N2);
b = rand(N1,N2);
tic
parfor ii = 1:N1
for jj= 1:N2
b(ii,jj) = a(ii,jj)+1;
end
end
toc
Elapsed time is 0.444865 seconds.
内层parfor
N1 = 200;
N2 = 500;
a = rand(N1,N2);
b = rand(N1,N2);
tic
for ii = 1:N1
parfor jj= 1:N2
b(ii,jj) = a(ii,jj)+1;
end
end
toc
Elapsed time is 18.886706 seconds.
可见外层parfor执行效率远高于内层parfor的效率。