matlab并行编程SPMD

SPMD(Single Program/Multiple Data)单程序多任务进行任务并行:并行可分为两种,一种是任务并行(parfor),另一种则数据并行(Spmd)。Spmd中的“Single program”方面指的是同一段代码运行在不同的多个lab上。当有大数据量需要同时处理,而单机又无法存储大数据量时,可考虑使用数据并行编程方法。Spmd 结构和分布式数组可实现数据并行处理。

以下总结的SPMD使用的两个场景:
1、The "single program" aspect of spmd means that the identical code runs on multiple labs. 就是说同一段程序应用于不同的样本(数据),所以一般针对随机抽样的并行,如

matlabpool local 4
spmd 
   A = rand(3,2); %generate a matrix A for each lab(worker)
end
for i = 1:length(A)
    figure; imagesc(A{i}); 
end
matlabpool close

结果:

matlab并行编程SPMD_第1张图片

四张图是不一样的,也就是SPMD模块中生产的四个随机数都有保存,然后同一个程序跑出4个结果,即一段程序跑4个数据,如果matlabpool设置为2然后会生产2张结果图,也就是一段程序并行操作两个数据

2、SPMD在不同lab(worker)上对相同或不同的数据执行不同的并行操作。

例子1:

%add different values to same array Data
Data = 1:100;
matlabpool local 4
spmd
    switch labindex
        case 1
            Data = Data+1;%lab 1上面的数字都加1
        case 2
            Data = Data+2;%lab 2上面的数字都加2
        case 3
            Data = Data+3;%lab 3上面的数字都加3
        case 4
            Data = Data+4;%lab 4上面的数字都加4
    end
end
% print Data{1} & Data{2} for checking
fprintf('%d\t',Data{1});%Horizontal tab
fprintf('\n');
fprintf('%d\t',Data{2});
fprintf('\n');
fprintf('%d\t',Data{3});
fprintf('\n');
fprintf('%d\t',Data{4});
matlabpool close  

例子2:

Data = 1:100;
matlabpool local 4
spmd
    if labindex == 1
        Data(1:50) = Data(1:50)+1;%lab 1上局部范围数据的+1操作
    else
        Data(51:100) = Data(51:100)+2;
    end
end
dd1=Data{1};
dd1(1:100)%进行数据测试结果的显示!
dd2=Data{2};
dd2(1:100)%进行数据测试结果的显示!
matlabpool close

3、composite类型
spmd中每个lab返回值以composite存储,可以创建Composite对象并进行初始化赋值。

查看composite数据代码:

Data = 1:10;
matlabpool local 4
spmd
    if labindex == 1
        Data(1:5) = Data(1:5)+1;%lab 1上局部范围数据的+1操作
    else
        Data(6:10) = Data(6:10)+2;
    end
end
Data
dd1=Data{1};
dd1(1:10)%进行数据测试结果的显示!
dd2=Data{2};
dd2(1:10)%进行数据测试结果的显示!
matlabpool close

你可能感兴趣的:(matlab并行编程SPMD)