首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

MATALB中SPMD单程序多任务进行任务并行

  • 25-03-03 23:03
  • 4450
  • 7670
blog.csdn.net

SPMD(Single Program/Multiple Data)单程序多任务进行任务并行:

并行可分为两种,一种是任务并行(parfor),另一种则数据并行(Spmd)。Spmd中的“Single program”方面指的是同一段代码运行在不同的多个lab上。你在一个Matlab客户端上运行一个程序,被标志为spmd模块的其他部分运行在其他lab上。当这些块运行完毕后,你的程序继续在客户端运行。 “Multiple data”方面指的是虽然spmd语句在所有的lab上运行相同的代码,但每一个lab可以有不同的,独有的数据。所以多数据集可以在多个lab上同时被容纳。当有大数据量需要同时处理,而单机又无法存储大数据量时,可考虑使用数据并行编程方法。Spmd 结构和分布式数组可实现数据并行处理。

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

  1. %% SPMD
  2. %example 1
  3. matlabpool local 4
  4. spmd
  5. A = rand(3,2); %generate a matrix A for each lab(worker)
  6. end
  7. for i = 1:length(A)
  8. figure; imagesc(A{i});
  9. end
  10. matlabpool close
从下图可以看到,每个lab运行一次

此时的A:

A
 
A =
 
   Lab 1: class = double, size = [3  2]
   Lab 2: class = double, size = [3  2]
   Lab 3: class = double, size = [3  2]
   Lab 4: class = double, size = [3  2]

且当matlabpool close后,A便随着lab的关闭而消失。

A
 
A =
 
    Invalid Composite (the matlabpool in use has been closed)

例子2:

  1. %example 2
  2. a = 3;
  3. b = 4;
  4. matlabpool local 4
  5. spmd
  6. c = labindex();
  7. d = c+a;
  8. end
  9. c{2} = 5;
  10. spmd
  11. f = c*b;
  12. end
  13. for i = 1:length(f)
  14. fprintf('%d\t',f{i});%access the value of each lab
  15. end
  16. matlabpool close


2、另外,SPMD也可以用于可替代parfor的块并行,在不同lab(worker)上对相同或不同的数据执行不同的并行操作,说起来有些拗口,具体看一下例子就明白了,下面我写的example3,4分别针对在不同lab上对相同数据和不同数据执行不同操作。它们都可以用parfor代替。

  1. %example3 - deal with same Data by different parameters
  2. %add different values to same array Data
  3. Data = 1:100;
  4. matlabpool local 4
  5. spmd
  6. switch labindex
  7. case 1
  8. Data = Data+1;%lab 1上面的数字都加1
  9. case 2
  10. Data = Data+2;%lab 2上面的数字都加2
  11. case 3
  12. Data = Data+3;%lab 3上面的数字都加3
  13. case 4
  14. Data = Data+4;%lab 4上面的数字都加4
  15. end
  16. end
  17. % print Data{1} & Data{2} for checking
  18. fprintf('%d\t',Data{1});%Horizontal tab
  19. fprintf('%d\t',Data{4});
  20. matlabpool close

例子4:

  1. matlabpool local 4
  2. spmd
  3.     if labindex == 1
  4.         Data(1:50) = Data(1:50)+1;%lab 1上局部范围数据的+1操作
  5.     else
  6.         Data(51:100) = Data(51:100)+2;
  7.     end
  8. end
  9. dd=Data{1};
  10. dd(1:10);%进行数据测试结果的显示!
  11. matlabpool close
3、composite类型
spmd中每个lab返回值以composite存储,如上面[code]example 1中的f就是以composite的形式展现。f{i}为第i个lab的返回值。最开始我们也可以创建Composite对象并进行初始化赋值。

>>matlabpool local 4

>> f = Composite(4)
 
f =
 
   Lab 1: No data
   Lab 2: No data
   Lab 3: No data
   Lab 4: No data
此时若是按照下面的语句当然是会出错的:


注:本文转载自blog.csdn.net的JasonLiu1919的文章"https://blog.csdn.net/ljp1919/article/details/45363811"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top