1  我们知道MATLAB支持并行运行一般有四种模式:

  第一种模式:本机调用多核CPU性能并行运算

  第二种模式:本机调用GPU性能并行运算

  第三种模式:多计算机组成集群,调用集群CPU性能并行运算

  第四种模式:运用MATLAB提供的云计算服务。

2  在第一种并行运算模式中

  标准模式为:

      第一步:打开并行池parpool

      第二步:parfor等相关PCT,并行计算工具箱中函数

      第三步:关闭并行池

3  第一步:打开并行池的方式:

  1)p = parpool('local',2);   % 在知道有几个本地核的情况下,选择调用几个核进行并行运算。

  2)parpool; % 这是直接打开并行池的方式。

  备注:建议采用第一种,方便关闭和更改参数。

  

  第二步:parfor函数的问题

  1)很多简单的低纬度运算,建议只需要用普通函数和关键字即可,用parfor函数进行运算并不能提升性能。

  2)MATLAB利用多核心的计算能力来加速计算时非常有必要的,因为目前所有的电脑最少都双核心了。

  3)循环并行使用parfor循环代替for循环,但是很多时候parfor很不好用,当parfor循环体内的代码比较多时,非常不容易满足循环条件而失败。因此我们首先要分析代码,另一种方式用profiler打开代码分析器来分析代码那一部分耗时较大,进行代码分析。

  3)通用格式

     parfor ss = 1:100

     XXX

     ......

       ......

     end

  4)通用并行计算模板:其基本思路就是将循环体内代码打包为函数!

    parfor ss=1:100
    func(ss,...,...);
    end

    函数如下所示:
    function func(ss,...,...)
    xxx
    .....
    .....
    end

  备注:该函数不应该有返回值,当parfor循环体内计算结果需要返回主函数时(绝大多数情况是这样的),那么将结果在循环体内保存为文件,文件名与循环变量ss有关。当parfor的并行运行完之后,将保存的临时文件读取进来即可,保存和读取计算结果相比于大型的计算耗时来讲应该小很多,从而体现出并行的优势。所提供的该方法可以用于任何一维、二维或者多维循环的加速计算,采用这种方法,规避了学习parofr规则的所有难点,非常具有通用性。

  第三步:删除并行池参数关闭

  delete(p)

  

  举个例子:比如有这么一段并行计算代码,其中绿色标注的位置为循环体。

p = parpool('local',2);
tic
n = 200;
A = 500;
a = zeros(n);
parfor i = 1:n
a(i) = max(abs(eig(rand(A))));
end
toc
delete(p)

  当然这个循环体内可以有不同的计算队列,我们把这个队列封装成为一个函数,如下:

function [a] = sample(A)
a = max(abs(eig(rand(A))));
end

  然后再用parpool调用,如下:

p = parpool('local',2);
clear;
tic
n = 200;
A = 500;
a = zeros(n);
parfor i = 1:n
b = sample(A);
a(i) = b;

end
clear b;
toc
delete(p);
时间已过 28.838599 秒。

  对比原先的代码:

tic
n = 200;
A = 500;
a = zeros(n);
for i = 1:n
a(i) = max(abs(eig(rand(A))));
end
toc
时间已过 42.570194 秒。

4  MATLAB并行计算的提升有限和MATLAB语言的效率有关,并且和处理的数据量和计算复杂度有关。

Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-关于parfor的问题的更多相关文章

  1. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-2

    1 MATLAB并行计算-从个人桌面到远程集群和云(陈伟/魏奋)视频摘录笔记 https://cn.mathworks.com/videos/parallel-computing-with-matla ...

  2. Matlab高级教程_第二篇:MATLAB和C#对应数据类型的讲解(多讲一点儿C#的矩阵运算)

    1. MATLAB对应C#的数据类型主要在引入的父类库MWArray当中.有如下对应规则 .NET TYPE MWArrayTYPE MATLAB Type System.Double MWNumer ...

  3. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-1

    1 更高级的算法牵扯到更多重的循环和复杂的计算,尤其是现在人工智能的算法尤其如此.有些历史知识的人能够了解到,人工智能的很多基本算法其实近百年之前就有了,但是当时的计算机技术达不到去实现这些算法的要求 ...

  4. Matlab高级教程_第二篇:Matlab相见恨晚的模块_01_定时器

    MATLAB的定时器功能(timer函数): 1 从MATLAB6.5版本开始,MATLAB开始支持定时器.相对于传统的pause函数来说,定时器要强大的多,不仅可以等效实现pause的功能,还可以显 ...

  5. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-利用GPU并行执行MATLAB程序

    1 MATLAB原文: 如果所有你想使用的函数支持GPU,你能够使用gpuArray把输入的数据传输到GPU,也能够唤起gather命令把传输值GPU的数据回收. 2 通过gpuDevice命令观察当 ...

  6. Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_全局变量的妙用_遍历穿透

    1 比如我这边写了一个函数,这个函数中有一个变量作为参数,给定这个参数一个值,然后这个函数返回给我一个值.但是,我写这函数的时候,这个传参我不写到函数里面.可以通过全局变量的方式进行在外部穿透遍历. ...

  7. Matlab高级教程_第二篇:关于MATLAB转C#过程中遇到输出两组参数的问题

    1. 在matlab的m函数很可能遇到原函数[a,b] = func(a); 这样的两个输出参数. 2. 在观察C#生成后定义中我们发现: public MWArray HP(); public MW ...

  8. Matlab高级教程_第二篇:MATLAB和C#一些常用的矩阵运算方法的转换

    1.相关方法已经生产引用,直接调用的结果如下: 2. 相关调用代码如下: using System; using System.Collections.Generic; using System.Li ...

  9. Matlab高级教程_第二篇:关于MATLAB转C#过程中MWArray到C#数组,C#数组到MWArray相互转换

    Matlab传递数据时使用的方法,那么Matlab计算完成后在C#中应该怎么获取它的计算数据呢? 需要遵循两个基本步骤: 弄清楚Matlab函数传回的数据到底是什么格式?struct?cell?cha ...

随机推荐

  1. stm32h7 开发板学习

    按键和 IO 之间连接一个 1K 电阻,可以防止当 IO 被配置为高电平输出的时候,按下按键,导致 VDD 和 GND 直接连通.

  2. zset底层数据结构

    redis zset底层数据结构 https://www.jianshu.com/p/fb7547369655 跳跃列表(Skip List)与其在Redis中的实现详解 https://www.ji ...

  3. markdown使用介绍

    一.标题,前面加#,加一个 一级标题,两个二级标题,以此类推. 一级标题 二级标题 三级标题

  4. MySQL 表查询语句练习题

    MySQL 表查询语句练习题: 一.  设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表 ...

  5. JS高级学习笔记(2)之js多线程

    参考大神:Javascript多线程 web worker ---- 6.Web Worker 概述 截图过来: 线程之间的通信 let worker = new Worker(‘js文件路径’) 主 ...

  6. tp5 输入域名即访问指定页面

    遇到PC官网类型的项目,经常会遇到隐藏入口文件和输入域名即可打开官网首页的需求.需要修改站点的默认加载文件和伪静态的配置才可以生效. 以下为nginx1.15版本,宝塔面板的修改方式.修改入口文件为w ...

  7. 吴裕雄--天生自然 JAVASCRIPT开发学习:函数参数

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 1月18日 LCA专项训练

    A. Lorenzo Von Matterhorn B.Minimum spanning tree for each edge C.Misha, Grisha and Underground D.Fo ...

  9. MySQL索引(一)

    1.索引的类型 1) B-Tree索引 (1)概念 人们常说的Mysql索引一般是指B-Tree索引,它使用B-Tree数据结构来存储数据.存储引擎以不同的方式使用B-Tree索引,性能也各有不同,各 ...

  10. CodeForces-1100C NN and the Optical Illusion 简单数学

    题目链接:https://vjudge.net/problem/CodeForces-1100C 题意: 题目给出外部圆的数目n和内部圆的半径r,要求求出外部圆的半径以满足图片要求. 显然这是一道数学 ...