精华内容
下载资源
问答
  • 23. matlab并行计算原理以及parpool函数

    万次阅读 2018-12-07 11:03:37
    Matlab并行运算 - wenyusuran的专栏 - CSDN博客 https://blog.csdn.net/wenyusuran/article/details/28901727   (1)matlab并行运算函数  最初的matlab并行的运算函数是: matlabpool 而后淘汰了...

     声明: 因电脑问题, 只做记录,以后尝试。

    出处:

    Matlab并行运算 - wenyusuran的专栏 - CSDN博客
    https://blog.csdn.net/wenyusuran/article/details/28901727

     

    (1)matlab并行运算函数

     最初的matlab并行的运算函数是:       matlabpool

    而后淘汰了matlabpool函数,转为使用parpool函数

    本人使用为matlab2016b

    (2)matlab并行原理:

    Matlab的并行计算实质还是主从结构的分布式计算。当你初始化Matlab并行计算环境时,你最初的Matlab进程自动成为主节点,同时初始化多个(具体个数手动设定,详见下文)Matlab计算子节点。Parfor的作用就是让这些子节点同时运行Parfor语句段中的代码。Parfor运行之初,主节点会将Parfor循环程序之外变量传递给计算子节点。子节点运算过程时互不干扰,运算完毕,则应该有相应代码将各子节点得到的结果组合到同一个数组变量中,并返回到Matlab主节点。当然,最终计算完毕应该手动关闭计算子节点。
    --------------------- 
    作者:文宇肃然 
    来源:CSDN 
    原文:https://blog.csdn.net/wenyusuran/article/details/28901727 
    (3)初始化matlab并行计算环境

    这里讲述的方法仅针对多核机器做并行计算的情况。

    设机器的CPU核心数量是CoreNum。双核机器的CoreNum2,依次类推。CoreNum不等于核心数量,但是如果CoreNum小于核心数量则核心利用率没有最大化,如果CoreNum大于核心数量则效率反而可能下降。因此单核机器就不要折腾并行计算了,否则速度还更慢。

    查看CPU的核数:-----系统信息查看

    也就是实际上双核--逻辑上分了四个线程(2个内核,四个逻辑处理器)

                          尴尬-----------似乎并行了效率会更差啊-----------------

    一代码初始化Matlab并行计算环境:

    %Initialize Matlab Parallel Computing Enviornment by Xaero | Macro2.cn
    
    CoreNum=2; %设定机器CPU核心数量,我的机器是双核,所以CoreNum=2
    
    if matlabpool('size')<=0 %判断并行计算环境是否已然启动
    
    matlabpool('open','local',CoreNum); %若尚未启动,则启动并行环境
    
    else
    
    disp('Already initialized'); %说明并行环境已经启动。
    
    end
    --------------------- 
    作者:文宇肃然 
    来源:CSDN 
    原文:https://blog.csdn.net/wenyusuran/article/details/28901727 
    版权声明:本文为博主原创文章,转载请附上博文链接!

     

     

    以下内容参看: 

    Matlab并行运算 - wenyusuran的专栏 - CSDN博客
    https://blog.csdn.net/wenyusuran/article/details/28901727

    展开全文
  • 本来CPU就是双核,不过以前一直注重算法,没注意并行计算的问题。今天为了在8核的dell服务器上跑程序才专门看了一下。...一、Matlab并行计算原理梗概 Matlab的并行计算实质还是主从结构的分布式计算。当你初始化...

    本来CPU就是双核,不过以前一直注重算法,没注意并行计算的问题。今天为了在8核的dell服务器上跑程序才专门看了一下。本身写的程序就很容易实现并行化,因为beamline之间并没有考虑相互作用。等于可以拆成n个线程并行,要是有550核的话,估计1ms就算完了。。。

    先转下网上找到的资料。

    一、Matlab 并行计算原理梗概

    Matlab的并行计算实质还是主从结构的分布式计算。当你初始化Matlab并行计算环境时,你最初的Matlab进程自动成为主节点,同时初始化多个(具体个数手动设定,详见下文)Matlab计算子节点。Parfor的作用就是让这些子节点同时运行Parfor语句段中的代码。Parfor运行之初,主节点会将Parfor循环程序之外变量传递给计算子节点。子节点运算过程时互不干扰,运算完毕,则应该有相应代码将各子节点得到的结果组合到同一个数组变量中,并返回到Matlab主节点。当然,最终计算完毕应该手动关闭计算子节点。

    二十六、初始化 Matlab 并行计算环境

    这里讲述的方法仅针对多核机器做并行计算的情况。设机器的CPU核心数量是CoreNum双核机器的CoreNum2,依次类推。CoreNum以不等于核心数量,但是如果CoreNum于核心数量则核心利用率没有最大化,如果CoreNum于核心数量则效率反而可能下降。因此单核机器就不要折腾并行计算了,否则速度还更慢。下面一段代码初始化Matlab并行计算环境:

    %Initialize Matlab Parallel Computing Enviornment by Xaero | Macro2.cn

    CoreNum=2; %设定机器CPU核心数量,我的机器是双核,所以CoreNum=2

    if matlabpool('size')<=0 %判断并行计算环境是否已然启动

    matlabpool('open','local',CoreNum); %若尚未启动,则启动并行环境

    else

    disp('Already initialized'); %说明并行环境已经启动。

    end

     

    运行成功后会出现如下语句:

    Starting matlabpool using the 'local' configuration ... connected to 2 labs.

    如果运行出错,按照下面的办法检测:

    首先运行:

    matlabpool size

     

    如果出错,说明你没有安装Matlab并行工具箱。确认安装了此工具箱后,运行:

    matlabpool open local 2;

    如果出错,证明你的机器在开启并行计算时设置有问题。请联系MathWorks的售后服务。

     

    二十七、终止 Matlab 并行计算环境

    用上述语句启动Matlab并行计算环境的话,在你的内存里面有CoreNumMatlab进程存在,每个占用内存都在百兆以上。(可以用Windows任务管理器查看),故完成运行计算后可以将其关闭。关闭的命令很简单:

    matlabpool close

    二十八、Matlab Monte Carlo 并行的算法

    Matlab并行计算比较特别。下图节选自Matlab并行计算工具箱用户手册。这个列表告诉你Matlab如何处理Parfor并行计算程序段中的各种变量。所以写代码时要注意不少问题,否则写出的并行代码可能还不如非并行的代码快。

     

    MATLAB并行计算 - CD_Keanu - 智慧人生

     

     

    这里我推荐大家用MatlabMonte Carlo并行代码时按照以下注意事项来写:

    1.将Monte Carlo模拟过程中不会改变的参数都写在Parfor循环块外面

    2.生成随机数、计算f(x)等过程都写在Parfor里面

    3.不要将V0结果传递出Parfor,而是直接计算出V0的均值、方差传递出parfor

    4.最后用数学公式将传递出ParforV0的均值方差组合计算成最终结果

    这些事项如何体现到程序中请参照示例代码文件并结合视频教程学习。这样的并行办法简单易行,对原始程序没有太大的改动,同时传递变量耗费时间也较少,效率比较高。

    另外一个问题就是并行代码做模拟的次数问题。我们要达到用非并行的代码做N此模拟所能得到结果的精确程度,在核心为CoreNum并行代码中,Parfor语句段中只要做N/CoreNum次即可达到。

    二十九、将例子改写为并行代码

    附件中的pareg1.m,……,pareg5.m五个文件分别是前一章五个例子的并行代码。这里需要提到的是,这五个代码文件都是用向量化的代码编写。原因在于,在前一章大家都看到了,向量化的代码比循环语句代码一般快几十甚至上千倍,所以要提高速度,向量化代码是最重要的优化方法,并行计算倒是其次。

     

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

     

    由于要搜索多核运行,找到这个帖子里来了

    刚才试了一下,我使用的MATLAB2010可以多核运行的。需要多核多线程跑的算法,在之前要让matlab在本地建立4个“实验室”(我的机器是4核,所以是4个)
    >> matlabpool local 4
    Starting matlabpool using the 'local' configuration ... connected to 4 labs.
    显示正在进行多核配置,一会说,连接到4个“实验室”。我理解就是在本地虚拟出4台可以运行matlab的工作站,这样用分布式计算工具箱可以进行并行计算(matlabpool这个命令好像是在并行计算工具箱里的)。观察windows任务管理器,可以发现一共有5个MATLAB.exe进程。其中一个占内存较多的,我理解是主控的,他基本不干活,只负责分配,进行计算时他的cpu占用率只有1~2%,剩下四个进程专门用来计算的,跑起来各占cpu 25%左右。看上去还是每个matlab进程单核运算,但是一下开4个进程,所以能把cpu用满。
    如果后续还需要多核运算,就直接用parfor好了,不用每次都用matlabpool命令。那个配置一次就好。
    算完了,不再跑了,临退出时关闭配置就行。
    >> matlabpool close
    Sending a stop signal to all the labs ... stopped.

    下面是我一个M文件的程序,测测4核并行计算和单核计算的差距,很简单。
    function testtime

    runtimes = 1e9;
    dummy1   = 0;
    dummy2   = 0;

    %matlabpool local 4

    tic
    %for x= 1:runtimes;
    parfor x= 1:runtimes;
        dummy1 = dummy1 + x;
        dummy2 = 2 * x + 1;
    end
    toc

    plot([1 2], [dummy1, dummy2]);

    第一次用普通for语句,单核跑,6.09秒
    >> testtime
    Elapsed time is 6.094267 seconds.

    第二次用parfor语句,4核跑,1.63秒
    >> matlabpool local 4
    Starting matlabpool using the 'local' configuration ... connected to 4 labs.
    >> testtime
    Elapsed time is 1.631350 seconds.
    >> matlabpool close

    加速比 6.09 / 1.63 = 3.736,将近4倍(还有开销吧),还比较可观。
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    然后说一下要注意的几个问题:
    1、parfor效果好,但是用起来要注意程序的细节。很多地方都会报错。比如下标必须为 连续的整数!否则会报下面这个错误“The variable xxx in a parfor cannot be classified.”具体可以看parfor帮助文件里面的sliced variables这一节,帮助建议仔细全部看过最好。
    2、用了parfor之后,输出参数用nargout确定,会出错。不知道为什么。
    3、变量在parfor内外的传进传出要非常小心,因为并行的关系,依赖循环下标的变量都要仔细考虑。
     
    在我的程序里面,用profile监测,
    不用并行计算的时候,CPU时间为 84.742 S,
    用了并行计算的时候,CPU时间为 15.231 S
    加速比达到了5.6!!!!!!
     
    Oh my lady gaga!!!!!!
     
    双核E6400,不知道为什么加速比这么恐怖.
     
    明天在xeon 5310上面去试试,双CPU,一共8核,不知道会是什么样子,估计最多1S。。。。

     

     

    转载于:https://www.cnblogs.com/qqhfeng/p/5139685.html

    展开全文
  • matlab并行计算之parfor

    千次阅读 2018-12-03 15:22:10
    提高matlab代码的执行效率,是很多码农们的迫切愿望和需求。最重要的当然是好的代码结构,向量化的语言的高效性是for循环拍马也赶不上的。但是,现实中很多时候我们是需要...并行计算原理就是将代码分配到多...

    原文:http://blog.sina.com.cn/s/blog_866e7fa70101cv08.html

    提高matlab代码的执行效率,是很多码农们的迫切愿望和需求。最重要的当然是好的代码结构,向量化的语言的高效性是for循环拍马也赶不上的。但是,现实中很多时候我们是需要使用到for循环的,为此可以使用matlab的并行计算来提高代码执行效率。

    并行计算的原理就是将代码分配到多个处理器中进行运算。例如8核的机器,就可以同时调动8个处理器来运算。不过为了在运算时你不至于太无聊,还是留下一个给自己做其他事情用吧。

    1、启动和关闭并行计算功能
    启动:
    CoreNum=7; %调用的处理器个数
    if matlabpool('size')<=0   %之前没有打开
        matlabpool('open','local',CoreNum);
    else   %之前已经打开
        disp('matlab pool already started');
    end
    关闭:
    matlabpool close
    如果代码还在调试阶段,可以暂时不关闭matlabpool,反复开关浪费时间得很。另外,matlab关闭后,matlabpool也会自动关闭,所以如果不是海量代码,可以不用关闭的(个人意见,没有实测影响)。

    2、parfor的使用
    将传统的for循环改为parfor循环,就会将循环体作为整体分到到一个个处理器中,从而一次性进行多组运算。在使用parfor时,代码的编写有一些注意事项,最主要的是其中变量的处理。matlab的帮助文档中有详细的描述。
    matlab并行计算之parfor

    在此,我将摘取一部分重要的加以说明并举例。
    在parfor中,变量不再是随心所欲的使用,有着其自己的分类。在parfor运行时,我们经常会遇到这样的错误“  Error: The variable xxx in a parfor cannot be classified.”说的就是变量xxx不能被正常划分到正确的类别中。
    matlab并行计算之parfor
    parfor变量一共分为5类,每一类的定义和用途就不说了,看一眼就明白。需要注意的是以下几点
    (1)循环变量
    循环变量在循环体中的使用一定要具有独立性,循环体之间不相关。例
    a(i)=a(i-1)*temp;是不行的。
    (2)sliced 变量(一般是数组,被各个处理器分割成一个个slice)
    slice变量在一个循环体内只能出现一个slice,简单说就是一个循环体内只能出现slice数组的一个元素。例
    a(i)=temp1;
    a(i+1)=temp2;
    是不行的。
    另外,slice变量的下标一定要连续,例
    a(2*i)=temp;
    是不行的。
    (3)临时变量
    matlab使用变量的一个好处是不需要预定义。但是在使用parfor时,这会弄混sliced变量和临时变量。由于临时变量不需要有sliced变量的限制,使用更自由,因此一定要区分开。方法是在parfor中对临时变量进行预定义。例
    parfor i=1:10
        b=zeros(1,4);
        for j=1:4
            b(i)=i+1;
        end
        a(i)=b;   %a是sliced变量
    end
    基本上注意到这几个问题就能正常运行parfor了。
    展开全文
  • matlab并行计算 parfor

    千次阅读 2019-11-01 15:36:17
    应该是一个项目中只用一个parfor,一般是最外面那个,子函数里面的循环千万不要也写parfor哦,不然会报错,并行计算原理是循环之间是没有任何重叠的,,没有数据传递和交叠。所以本质上是把parfor end之间的所有...

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    CoreNum=6; %设定机器CPU核心数量
    parpool(CoreNum);
    
    Starting parallel pool (parpool) using the 'local' profile ... connected to 6 workers.
    

    测试:竟然快了接近20倍!!!

    tic
    parfor i=1:3, c(:,i) = eig(rand(1000)); end
    toc
    
    tic
    for i=1:3, c(:,i) = eig(rand(1000)); end
    toc
    
    Starting parallel pool (parpool) using the 'local' profile ... connected to 6 workers.
    时间已过 20.193056 秒。
    时间已过 1.230642 秒。
    

    parfor 是并行循环计算
    多重循环的嵌套,只能在其中一层循环使用parfor并行计算,因为parfor就是让几个worker同时干活,比如一个循环中,i=1:30,那么一个worker做i=1:5,一个做i=6:10····不同的循环变量之间完全独立,所以当然可以一起干活,在里面在嵌套parfor,相当于把里面的工作还要分给6个人,很容易混乱不清,出现问题,如果再继续嵌套就更没法独立地界限清晰地并行工作了
    但是一个parfor执行结束之后,后面地循环还可以再用parfor,即:

    poolobj = gcp('nocreate');
    if isempty(poolobj) % If no pool,  create new one.
        poolsize = 0;
        CoreNum=6; %设定机器CPU核心数量
        parpool(CoreNum);
    else
        poolsize = poolobj.NumWorkers;
        disp('Already initialized'); %说明并行环境已经启动
    end
    
    parfor i=1:100
    function1;
    end
    
    ···
    
    parfor i=1:100
    function2;
    end
    

    通常将parfor放到最外层的循环, 也不是一定要放在最外面,如果里面那层运算量很大,外面那层基本没什么运算,放在里面也可以的,总之哪里运算量大并且可以不交叠地的分开,就在哪里用

    parfor将循环迭代分组,那么每个worker执行迭代的一部分。当迭代耗时很长的时候parfor循环也是有用的,因为workers可以同时执行迭代,但是当你的CPU的利用率如果已经达到了100%,此时你这种并行是没有意义的,速度不会加快的。另外这个博客上指出了Matlab的parfor的使用条件即:

    大量的简单计算的循环。
    大量或少量的复杂计算的循环
    各个任务之间不会出现数据的依赖,比如说循环内部的变量之间不要存在数据传递等等。

    应该是一个项目中只用一个parfor,一般是最外面那个,子函数里面的循环千万不要也写parfor哦,不然会报错,并行计算的原理是循环之间是没有任何重叠的,,没有数据传递和交叠。所以本质上是把parfor end之间的所有代码打包成了一个没有返回值的函数!!
    在这里插入图片描述

    展开全文
  • Matlab并行计算parpool使用方法+代码

    千次阅读 2021-01-19 23:55:34
    parfor 是并行循环计算多重循环的嵌套,只能在其中一层循环使用parfor并行计算,因为parfor就是让几个worker同时干活,比如一个循环中,i=1:30,那么一个worker做i=1:5,一个做i=6:10····不同的循环变量之间完全...
  • Matlab并行运算

    万次阅读 2014-06-06 17:14:31
    今天搞了一下matlab的并行计算,效果好的出乎我的意料。 本来CPU就是双核,不过以前一直注重算法,没注意并行计算的问题。今天为了在8核的dell服务器上跑程序才专门看了一下。...一、Matlab并行计算原理梗概 Matl
  • MATLAB中进行并行计算

    2012-05-21 11:04:34
    详细介绍了matlab环境下进行并行计算原理方法与应用。
  • matlab 并行运算【转】

    2014-04-14 09:55:00
    一、Matlab并行计算原理梗概 Matlab的并行计算实质还是从主从结构的分布式计算。当你初始化Matlab并行计算环境时,你最初的Matlab进行自动成为主节点,同时初始化多个(具体个数手动设定,详见下文)Matlab计算子...
  • Promrel与MATLAB分布式并行计算的比较

    千次阅读 2018-09-17 20:32:04
    人们常常把分布式计算自然而然的和并行计算联系起来。然而这并不正确。实际上,分布式计算并不一定是并行的,举个简单的例子就能理解—— 某软件功能如下: (1)提示用户输入两个数 A 和 B (2)在内部,对 A 和...
  • CRC32的FPGA并行实现原理MATLAB仿真,包含文档和代码。 博客地址:https://blog.csdn.net/qq_16923717/article/details/83826856
  • CRC并行计算推导及MATLAB计算CRC并行表达式
  • Matlab 并行代码

    千次阅读 2019-04-09 15:56:24
    转自:并行代码 1 并行问题的由来——从抛硬币说起 举个简单的例子:抛100次硬币统计正面向上的次数。我们可以拿一个硬币重复地抛100次。但有人嫌麻烦,就想能不能再叫一个人带另外一个硬币过来,两个人同时抛,...
  • 本书对基于Matlab 的并行程序设计的原理进行了深入的剖析,并结合各章给出的大量实例对基于Mat—lab 的并行计算程序设计方法和技巧给出了详细的说明。通过阅读和学习本书的内容,读者可以掌握基于多种平台(多核、多...
  • Matlab并行编程

    2017-03-06 22:25:01
    1 并行问题的由来——从抛硬币说起  举个简单的例子:抛100次硬币统计正面向上的次数。我们可以拿一个硬币重复地抛100次。但有人嫌麻烦,就想能不能再叫一个人带另外一个硬币过来,两个人同时抛,这样每个人就能只...
  • 第一个分太高了要50,过分,通过阅读和学习,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、...
  • MATLAB并行编程

    千次阅读 2015-10-08 10:26:29
    1 并行问题的由来——从抛硬币说起  举个简单的例子:抛100次硬币统计正面向上的次数。我们可以拿一个硬币重复地抛100次。但有人嫌麻烦,就想能不能再叫一个人带另外一个硬币过来,两个人同时抛,这样每个人就能...
  • 《实战Matlab之并行程序设计》通过阅读和学习,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、...
  • 学院的计算平台(一期)运行已经一年了,麻雀虽小五脏俱全。本来以为大家有GPU需求的差不多都会自己买上一两台GPU服务器(我自己还有一台K40×2的古董呢),所以一期建设只有刀片和FPGA,但是现在大家都玩深度学习了...
  • 通过阅读和学习,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、方法和技巧。《实战Matlab之...
  • 读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、方法和技巧。《实战Matlab之并行程序设计》共分l...
  • MATLAB并行编程(一)

    2016-03-18 14:10:59
    原文地址:MATLAB并行编程(一)作者:拉力力1 并行问题的由来——从抛硬币说起      举个简单的例子:抛100次硬币统计正面向上的次数。我们可以拿一个硬币重复地抛100次。但有人嫌麻烦,就想能不能再叫一个人带...
  • matlab学习日志之并行运算

    千次阅读 2014-08-03 16:59:46
    原文地址:matlab并行计算
  • 最近写了一个模式识别的程序,可是发现时间复杂度有点高,等待结果的时间要挺长的,所以重新拿出书本来复习一下MATLAB代码优化。 MATLAB是一种专门为数组运算而设计的语言,因此在程序设计中要注意充分利用这一优点...
  • 《实战Matlab之并行程序设计》通过阅读和学习,读者可以掌握基于多种平台(多核、多处理器、集群和GPU等),利用多项技术(Matlab并行计算工具箱、多线程MEX文件、OpenMP和GPU等),学习理解Matlab并行程序设计的原理、...
  • 图像小波去噪的Matlab函数解析与并行化实现思路

    千次阅读 多人点赞 2020-03-01 10:59:46
    对于一位想要使用Matlab进行图片的小波去噪,但又不想了解公式、原理的同学,可以重点阅读第二章;对于一位想参考小波去噪流程以及离散小波变换(DWT)原理的同学,可以重点阅读第三章;对GPU计算感兴趣的同学可以重点...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,266
精华内容 1,306
关键字:

matlab并行计算原理

matlab 订阅