【高性能】Matlab的并行计算之parfor

2023-10-27

当matlab计算量很大,重复独立的循环计算很多的时候,我们可以使用matlab的并行计算,这里我先试验了parfor并行计算。以下代码仅适合新版的matlab,改编自《实战matlab之并行程序设计》。

启动代码:

function [pool] = startmatlabpool(size)
pool=[];
isstart = 0;
if isempty(gcp('nocreate'))==1
    isstart = 1;
end
if isstart==1
    if nargin==0
        pool=parpool('local');
    else
        try
            pool=parpool('local',size);%matlabpool('open','local',size);
        catch ce
            pool=parpool('local');%matlabpool('open','local');
            size = pool.NumWorkers;
            display(ce.message);
            display(strcat('restart. wrong  size=',num2str(size)));
        end
    end
else
    display('matlabpool has started');
    if nargin==1
        closematlabpool;
        startmatlabpool(size);
    else
        startmatlabpool();
    end
end


关闭代码:

function [] = closematlabpool
if isempty(gcp('nocreate'))==0
    delete(gcp('nocreate'));
end

测试代码:

pool = startmatlabpool(4);
N=1000;
M=100;
data = cell(1,N);
for kk = 1:N
   data{kk} = rand(M);
end
display(strcat('datasize:',num2str(N*M*M/1024/1024),'M doubles'));
tic;
parfor ii = 1:N
     c1(:,ii) = eig(data{ii});
end
t1 = toc; 
display(strcat('parafor:',num2str(t1),'seconds'));
 
tic;
for ii = 1:N
     c2(:,ii) = eig(data{ii});
end
t2 = toc; 
display(strcat('for:',num2str(t2),'seconds'));
 
closematlabpool;


结果:

datasize:9.5367M doubles
parafor:1.6411seconds
for:3.908seconds
Parallel pool using the 'local' profile is shutting down.

可以看出parfor计算速度快了一半。

 

问答1:能否汇总各个线程的数据?

在openMP中也有这个问答:

for i = 1 : 1000

sum = sum + i;

end

 

如果是并行的话,每个A在线程中都有自己的一份拷贝,那么最后得到的A是不可预计的。

openMP的解决方法是增加了reduction子句:

#pragma omp parallel for reduction(+: sum)

for ( i = 1; i < 1001; i++ )

{

        sum += i;

}

这样sum就是1-1000的和。

在matlab中,matlab自己会默认把sum的加法设置为reduction加法,称为简约/规约操作,反正不进行这个操作的话也没有其他意义。ORZ

代码:

startmatlabpool(4)
sum = 0;
parfor i = 1:1000
    sum = sum + i;
end
sum
closematlabpool;


结果:sum=500500


事实上可以进行连续操作的操作符都支持简约操作,比如*,.*,+,-,&,|,[,expr]等等。

不过简约操作有很多陷阱,所以简化并行操作和增加一致性是非常必要的。

 

问答2:parfor的变量有什么讲究?

其实没什么讲究,比起openMP来parfor要简单的多,好用说不上,但是方便简单的并行操作。所有的变量直接用就行了,书上的各种变量种类都是唬人的,不过请注意非简约操作情况下答案是否正确,以及不要随便修改输入变量(修改后的结果无法预计)。

 

问答3:parfor语句作用域能用break吗?

答案是不能。这个不能在特定情况下直接退出,就是说一旦运行就要执行下去。另外parfor是最低端的并行语句,在作用域内部也不能使用spmd,parfor嵌套,不过可以使用含有parfor的函数。

 

问答4:什么时候使用parfor

其实用了一下感觉他的作用并不大,各种并行控制手段都没有……如果数据量特别大,各个循环域之间相对独立,就可以用parfor。另外matlab启动并行环境也比较慢。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【高性能】Matlab的并行计算之parfor 的相关文章

  • 如何将条形图的 XtickLabels 向左移动?

    我目前正在尝试创建频率直方图 为此 我必须创建一个条形图 条形图之间没有空格 然而 这集中于XTickLabels在酒吧的中间 由于它是一个直方图 我希望数值位于每个条形之间的线上 以便它可以直观地指示间隔 本质上 我需要将所有刻度标签移至
  • 在 Matlab 中保存当前运行的脚本

    有没有办法保存Matlab中当前运行的脚本 我有一个脚本 它会自动备份一组脚本 但如果我更改了当前脚本 则保存的版本将过期 也许可以调用一些java Thanks 在 Yair Altman 网站上的某个地方 请参阅我的其他答案中的链接 他
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • 两个 y 轴与相同的 x 轴[重复]

    这个问题在这里已经有答案了 可能的重复 在单个图中绘制 4 条曲线 具有 3 个 y 轴 https stackoverflow com questions 1719048 plotting 4 curves in a single plo
  • Matlab中转换数据类型的有效方法(double vs. im2double)

    我想将真彩色图像转换为双精度 据我所知有两种方法可以做到这一点 double rgb img im2double rgb img 哪一种效率更高 谢谢 他们都是不同的 im2double将图像的范围转换为0 1如果数据类型是uint8 or
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • MATLAB - 如何将子图一起缩放?

    我在一张图中有多个子图 每个图的 X 轴是相同的变量 时间 每个图上的 Y 轴都不同 无论是它所代表的内容还是数据的大小 我想要一种同时放大所有图的时间尺度的方法 理想情况下 可以在其中一张图上使用矩形缩放工具 并让其他图相应地更改其 X
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • 使用符号求解器仅求解某些变量

    我正在尝试在 MATLAB 中求解包含 3 个变量和 5 个常量的方程组 是否可以使用solve求解三个变量 同时保持常量为符号而不用数值替换它们 当您使用SOLVE http www mathworks com access helpde
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • ROC曲线和libsvm

    给定一条 ROC 曲线plotroc m see here http www csie ntu edu tw cjlin libsvmtools roc curve for binary svm 理论问题 如何选择要使用的最佳阈值 编程问题
  • 给定协方差矩阵,在Matlab中生成高斯随机变量

    Given a M x M期望的协方差 R 以及所需数量的样本向量 N计算一个N x M高斯随机向量 X在普通 MATLAB 中 即不能使用r mvnrnd MU SIGMA cases 不太确定如何解决这个问题 通常你需要一个协方差并且意

随机推荐

  • 卡尔曼滤波中状态协方差P的表示形式不同造成的影响

    递推最小二乘法中 我们在前面一篇文章中说了 卡尔曼滤波是递推最小二乘法的一种特殊情况 P有以下三种形式 第一个 就是从原始的PK定义出发 结合观测更新公式推得的 第二个 对第二种等式两边求逆 再用矩阵反演定理 求得 第三个 把对PK的迹求偏
  • Android实现APP版本自动更新功能

    Android实现APP自动更新功能 现在一般的android软件都是需要不断更新的 当你打开某个app的时候 如果有新的版本 它会提示你有新版本需要更新 该小程序实现的就是这个功能 该小程序的特点是 当有更新时 会弹出一个提示框 点击确定
  • Java中运行时的多态的含义及其作用

    Java中运行时的多态的含义及其作用 1 多态含义 同种类的多个对象 在接收到同一个消息时却产生了不同的反应和效果 2 运行时多态的含义 使用父类引用指向子类对象 再调用某一父类中的方法时 不同的子类会表现出不同的结果 3 运行时多态的作用
  • ES Doc ,增、删、改

    删除 DELETE index doc id 修改 PUT index doc id
  • 手把手教你如何在Innovus中解决local congestion问题

    手把手教你如何在Innovus中解决local congestion问题 文章右侧广告为官方硬广告 与吾爱IC社区无关 用户勿点 点击进去后出现任何损失与社区无关 吾爱 IC 社区 吾爱 IC 社区 52 ic com 是一个专业交流和分享
  • cocos Lua与Java交互

    简介 cocos2d为了使Android SDK的接入 封装了LuaJavaBridge用于Java和Lua的相互调用 LuaJavaBridge从本质上来说 是通过C 作为中介 其调用流程为 Lua调用Java Lua gt C gt J
  • 第二课 你的第一个Python程序

    要编写Python代码 可以使用任意能编辑文本的编辑器 比如你的笔记本 notepad 或者用其他工具平台 比如vscode pycharm等等 如下图就是vscode 默认情况下 python文件使用UTF 8字符编码 Python程序扩
  • Vue下载文件

    this editValue是导出文件的内容 1 下载内容是text类型 downLoadSave const element document createElement a element setAttribute href data
  • Echarts的x轴调整间隔,可以用 xAxis数组子项的axisLabel.interval

    Echarts的x轴调整间隔 可以用 xAxis数组子项的axisLabel interval https echarts apache org zh option html xAxis axisLabel interval xAxis a
  • 小程序微信支付 实例配置详解

    一 开发前的准备 开发步骤 如果开发者已做过 JSAPI 或 JSSDK 调起微信支付 接入小程 序支付非常相似 以下是三种接入方式的对比 如此看来 小程序要想集成支付功能 倒是简单了 阅读业务流程图 本人强烈推荐阅读这个图示 流程明确了
  • Android下安装Kali Linux

    准备材料 一部2GRAM 16GROM的安卓智能手机 已经Root的Android系统 Linux Deploy BusyBox Pro JuiceSSH kali linux light 2017 1 armhf img PS 现在主流智
  • Opencv模板匹配

    模板匹配 模板匹配函数的方法公式 模板匹配函数属性 minMaxLoc分析匹配结果 不同模板函数对比 多模板匹配 匹配多个对象 numpy的切片 模板匹配和卷积原理很像 模板在原图像上从原点开始滑动 计算模板与 图像被模板覆盖的地方 的差别
  • android instrumentation自动化测试,android基础知识12:android自动化测试06—Instrumentation 05 InstrumentationTestRunn...

    在学习Android JUnit的过程中 随着学习的深入 发现相关的内容越来越多 将这些类按照继承关系整理如下 Test TestCase AndroidTestCase Test TestCase InstrumentationTestC
  • 计算机毕业设计---java+springboot宠物商城系统

    一 项目运行 环境配置 Jdk1 8 Tomcat8 5 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 Springboot M
  • 关于评价指标的理解(TPR,FPR,TAR,FAR,FRR,ERR)

    近期 一直在做人脸识别方面的研究 在阅读paper的时候 发现对一些指标认识不足 因此 从新学习认识算法的评价指标 非常感谢https blog csdn net liuweiyuxiang article details 81259492
  • 机器学习(SVM)文本分类

    训练 coding utf 8 Project company Author little fly File name 文本分类 Create time 2020 10 31 9 48 导入必要的包 import jieba import
  • 去除java数组里面的空字符串

    String array1 mdnResult getFaillist split 按逗号分割 含空字符串 List noRepeatList removeNullStringArray array1 public List removeN
  • mybatis 自动化处理 mysql 的json类型字段 终极方案

    文章目录 mybatis 自动化处理 mysql 的json类型字段 终极方案 why json 简介 mysql 建表 json 字段 添加1条json 数据 对应的java对象 JsonEntity mybatis 不使用 通用mapp
  • 大数据学习之HiveSQL

    一 DDL 数据定义语言 1 DDL概述 数据定义语言 Data Definition Language DDL 是SQL语言集中对数据库内部的对象结构进行创建 删除 修改等的操作语言 这些数据库对象包括database schema ta
  • 【高性能】Matlab的并行计算之parfor

    当matlab计算量很大 重复独立的循环计算很多的时候 我们可以使用matlab的并行计算 这里我先试验了parfor并行计算 以下代码仅适合新版的matlab 改编自 实战matlab之并行程序设计 启动代码 function pool