MATLAB多核并行计算使用方法

对于在使用matlab中出现计算速度慢等情况,只有干等它跑出结果吗,可以使用多核进行并行计算加速matlab仿真的速度,好的东西当然有其局限性。

常用个人版CPU都是主打高频率,甚至超频来增加其工作速度,对于核心数不会特别追求,而对于工作站式的CPU,通常频率较低,核心和线程数低,而当这样的CPU来运行matlab程序,会出现如下问题

可以看到CPU的核心利用率很低,且大部分的内核都没有工作,只有少数的CPU在工作,这样的工作站对于matlab的运行速度甚至还没有个人版频率较高的CPU运行速度快,那这不是有力无处使,所以对面多核CPU,一定要使用其并行运算的能力。

matlab并行计算局限性

首先来介绍并行计算的局限性,matlab多核并行计算就是创建多N个启动并行工作池,然后将程序分成N个部分并行执行。下图可以看到我开启了40个并行工作池(前提是CPU的内核数大于40)。

从这上面可以理解,如果程序在运算过程中是前后关联的,这将不能用于并行计算。如何算作前后关联,举个例子:


第一张图是没有前后关联的,但是第二个存在着数组的前后关联,想象以下,如果第二种情况那去并行运算,当前循环结果依赖上一循环的结果,这种肯定无法拆分去做并行计算。

所以能进行并行计算很重要的要求是,循环可拆分,即每次循环的时候初始状态相同。

parpool和parfor

进行matlab并行计算主要依靠parpool和parfor,
parpool即是开启并行工作池,

parpool('Processes',16); %开启16个并行工作池CoreNum=16; %设定机器CPU核心数量
if isempty(gcp('nocreate')) %如果并行未开启parpool(CoreNum); %开启16个并行工作池
enddelete(gcp) % 关闭并行池

parfor的使用方法和普通的for循环不太相同,主要区别是,parfor循环中有5类变量:

  1. loop variable(循环变量)
    在上图中是parfor后面的i,在循环中禁止给i(循环变量)赋值。

  2. Sliced input variable(切片变量)
    一般是数组,被各个处理器分割成一个个slice,首先要在parfor外申明该变量,比如上面的r=rand(1,10); 每次循环只能访问切片变量一个 位置,且固定不能重复,比如r(i)=temp1; 或者 r(i+1)=temp2;
    slice变量的下标一定要连续,例a(2*i)=temp;是不行的。

  3. Broadcast variable(广播变量)
    指外部变量,且在循环内未被重新赋值。如上面在外面定义的c。

  4. Reduction variable
    该变量遍历所有循环,并且跟运行结果无关。Matlab 会自动识别该类变量,并正确输出结果。如下例所示, Matlab 会按正确顺序输出 x2

x2 = [];
n = 10;
parfor i = 1:nx2 = [x2, i];i,
end

上面这段代码里, 因为将parfor拆分成很多分给并行计算池去计算,所以i 并不一定按照 1 到 10 的顺序输出,但 x2 的结果却必然是 1 到 10。

  1. temporary variable(临时变量)
    临时变量不需要有sliced变量的限制,使用更自由。
    但是在使用parfor时,这会弄混sliced变量和临时变量。临时变量在parfor里面申明,sliced变量是在parfor外面申明的。一定要有parfor会被拆分成很多份给并行计算池计算的概念,sliced变量能用是因为每个循环都只使用该变量的一个位置,而临时变量之所以能用是因为每次循环的开始就对其进行初始化,所以其初始状态相同,当然可以使用。例如下面b,每次parfor循环的初始状态都是1行4列的全0序列,所以当然能够使用。临时变量还一个最大的特点是只在parfor中有定义,在parfor外没有定义。
parfor i=1:10b=zeros(1,4);for j=1:4b(i)=i+1;enda(i)=b;   %a是sliced变量
end

一个简单的parfor并行计算程序。

parfor中变量的提取

因为parfor中定义的变量均是临时变量,在parfor外相当于未定义,所以需要有手段能将parfor中产生的数据提取出来。
比如里面定义的临时变量,可以将最后的结果赋值给已经在外面定义的切片变量,这样在外面可以使用,如下所示,proba可以是定义成数组,元组。这样每个parfor循环的数据都存到了proba中。

proba=cell(1,N)
parfor f = 1:N%now use proba{f} inside the loopproba{f}=(1/M)*ones(1, M);% rest of the code
end
%get proba from whatever iteration you want
pi_proba = proba{N};

MATLAB多核并行计算使用方法相关推荐

  1. matlab 多核并行编程

    在使用matlab处理大数据,编程需要注意两个问题:并行运算和释放内存.matlab也提供了并行计算的功能,甚至能用GPU加速.并行计算工具箱,叫做parallel computing toolbox ...

  2. MATLAB应用软件与多核并行科学计算工作站

    MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境.        MATLAB是matrix&labo ...

  3. matlab linux 并行,Matlab并行编程方法

    Matlab并行编程方法 本文讲一下matlab中的并行方法与技巧,这里我们不涉及GPU加速,主要考虑for循环并行和数据并行.分为以下几个板块: 1. 怎么并行? 2. parfor vs. SPM ...

  4. 实战matlab之并行程序设计.pdf,实战Matlab之并行程序设计_IT教程网

    资源名称:实战Matlab之并行程序设计 内容简介: <实战Matlab之并行程序设计>通过阅读和学习,读者可以掌握基于多种平台(多核.多处理器.集群和GPU等),利用多项技术(Matla ...

  5. Matlab多核并行计算parfor的那些事儿【注意事项】

    这几天因为实验需求,所以就了解并尝试用了matlab的多核并行计算方法,主要是通过parfor的形式来实现.现在将笔记mark down并share给大家.希望有所帮助.如有错误,欢迎批评指正. 什么 ...

  6. 多模态理论张德禄_学术观点 | 黄立鹤、张德禄:多核并行架构——多模态研究的范式、路径及领域问题之辨...

    相关阅读 期刊动态| <外语教学>2018年总目录 期刊动态|<外语教学>2019年第1期目录 多核并行架构:多模态研究的范式.路径及领域问题之辨 摘要:根据库恩关于科学范式的 ...

  7. 关于实现Halcon算法加速的基础知识(多核并行/GPU)

    一.提高Halcon的运算速度,有以下几种方法: 1.Multithreading(多线程) 2.Automatic Parallelization(自动操作并行化) 3.Compute device ...

  8. 【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(频域方法)

    上篇博文:[ MATLAB ]DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(时域方法) 提到了对序列x(n)做循环移位后的DFT形式为: 上篇博文已经讨论过了第一种实现循环移位的方法, ...

  9. matlab中 三种方法计算 Ax b,在MATLAB中,方程Ax=B的解可以用哪个命令求得? matlab 求助 解方程组...

    matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB中有两种方法: (1)x=inv(A)*b - 采用求逆运算解方程组: (2)x=A\B - ...

最新文章

  1. CVPR 2021 | 论文大盘点:3D目标检测
  2. 去除右键的一键备份到115网盘”
  3. 案例:服务器输出字符数据到浏览器 || 乱码问题|| 案例:服务器输出字节数据到浏览器
  4. css 加随机数 引用_在CSS中生成随机数
  5. python把列表样式的字符串重新转换为列表
  6. mysql性能优化教程_mysql性能优化教程
  7. R开发(part5)--导数计算
  8. .NET Core使用skiasharp文字头像生成方案(基于docker发布)
  9. apache camel_Apache Camel请向我解释这些端点选项的含义
  10. sas中一些小的选项的含义
  11. 找不到列 dbo 或用户定义的函数或聚合_Power BI 的大数据处理方案:聚合
  12. 程序设计实践——第二章
  13. 超像素分割算法(SLIC)
  14. Matlab之样本概率图像绘制函数capaplot
  15. 硬件之家|钽电容的详细介绍与电路应用
  16. python导入excel加入折线图_Python openpyxl 插入折线图实例
  17. 解决VS报表.rdl 显示乱码“小方块”问题
  18. ListView实现物流追踪
  19. 从 MySQL 数据页的角度看 B+ 树
  20. PLSQL设置选中字母大小写切换快捷键

热门文章

  1. 《写给大家看的设计书》- UI设计必看
  2. Matic Network的应用场景大揭秘!
  3. 英文字体设计的分类及特点
  4. CHEER UP 谐音版
  5. sql连接显示未能连接服务器,SQL Server 2008无法连接到服务器的操作教程
  6. 加载大量图片内存暴增导致闪退 Terminated due to memory issue(内存暴增SDWebImage加载高清大图崩溃)
  7. c#连接扫描仪,操作扫描仪
  8. 微带线宽与承受功率的关系
  9. docx库段落 python_Python-docx添加段落
  10. 奇富科技语音论文入选国际顶会INTERSPEECH 2023