|  | 
 
| 本帖最后由 meatball1982 于 2016-3-9 21:45 编辑 
 实际上,matlab自身的并行已经挺好了.
 许多的函数,不用设置,就可以并行.但有时,有些东西要自己写.
 
 我的机器是四核的.打开两个,剩下一个用来控制,(也可以打开四个,进程里就有5个matlab了.)
 我的matlab
 8.5.0.197613 (R2015a)
 注意,符值那为什么不行.因为floor?
 
 二层for的话,用一个ind代替.
 用parfor来算,再转化.
 
 
 复制代码clear all
clc
poolobj=parpool('local',2)
parfor i=1:8
    i
    i*2-1.5
    floor(i*2-1.5)
    disp('----this should have smothing below ')
    j=floor(i*2-1.5)
    disp('----this should have smothing up')
end
delete(poolobj)
 
 好吧.有学习了一点.下面是一个比较
 01单CPU两层for,
 02.多CPU两层for,先parfor 再for.
 03.多CPU两层for ,先for 再parfor
 
 如果求解的是一个对称matrix,则可以人尝试方法03.
 
 
 复制代码clear all
clc
poolobj=parpool('local',4)
% parfor i=1:8
%     i
%     i*2-1.5
%     floor(i*2-1.5)
%     disp('----this should have smothing below ')
%     j=floor(i*2-1.5)
%     disp('----this should have smothing up')
% 
% end
n=6
%% cpu version
tic 
M1 = magic(n);
for x = 1:n
    for y = 1:n
        M2(x,y) = x*10 + y + M1(x,y)/10000;
    end
end
M2;
toc
%% multi cpu version 2 layer loop
% parfor out
tic 
M3 = magic(n);
M4 = zeros(n);
parfor a = 1:n
    for b = 1:n
        M4(a,b) = a*10 + b + M3(a,b)/10000;
    end
end
M4;
toc
%% multi cpu version 2 layer loop
% for out
tic
M5 = magic(n);
M6 =zeros(n);
for a = 1:n
    parfor b = a:n
        M6(a,b) = a*10 + b + M5(a,b)/10000;
    end
end
M7=M6+M6';
toc
delete(poolobj)
 
 
 
 
 
 
 | 
 |