使用 parfor 节省时间和内存?

2024-02-21

考虑prova.mat在MATLAB中通过以下方式获得

for w=1:100
    for p=1:9    
        A{p}=randn(100,1); 
    end
    baseA_.A=A;

    eval(['baseA.A' num2str(w) '= baseA_;'])

end

save(sprintf('prova.mat'),'-v7.3', 'baseA')

要了解我的数据中的实际尺寸,1x9 cell in A1由以下内容组成9数组:904x5, 913x5, 1722x5, 4136x5, 9180x5, 3174x5, 5970x5, 4455x5, 340068x5。另一个Aj的组成相似。

考虑下面的代码

clear all
load prova
tic
parfor w=1:100
       indA=sprintf('A%d', w);
       Aarr=baseA.(indA).A;
       Boot=[];
       for p=1:9
           C=randn(100,1).*Aarr{p};
           Boot=[Boot; C];  
       end
       D{w}=Boot;
end
toc

如果我运行parfor循环与4本地工作人员在我的 Macbook Pro 上需要 1.2 秒。更换parfor with for需要 0.01 秒。

根据我的实际数据,时间差为 31 秒与 7 秒 [矩阵的创建C也比较复杂]。

如果理解正确的话,问题是计算机必须发送baseA对于每个当地工人来说,这需要时间和记忆。

您能否建议一个能够使parfor比方便for?我认为将所有单元格保存在baseA是一种通过在开始时加载一次来节省时间的方法,但也许我错了。


一般信息

很多功能都有内置隐式多线程 http://mathworks.com/products/parallel-computing/builtin-parallel-support.html,制作一个parfor使用这些函数时,循环并不比串行更有效for循环,因为所有核心都已被使用。parfor在这种情况下实际上会造成损害,因为它具有分配开销,同时与您尝试使用的函数一样并行。

不使用隐式多线程函数之一时parfor http://mathworks.com/help/distcomp/parfor.html基本上建议在两种情况下使用:循环中进行大量迭代(即,例如1e10),或者如果每次迭代都需要很长时间(例如,eig(magic(1e4)))。在第二种情况下,您可能需要考虑使用spmd http://mathworks.com/help/distcomp/spmd.html(慢于parfor在我的经验中)。原因parfor比a慢for http://mathworks.com/help/distcomp/for.html短范围或快速迭代的循环是正确管理所有工作人员所需的开销,而不是仅仅进行计算。

Check 这个问题 https://stackoverflow.com/questions/32095552/sending-data-to-workers有关在不同工作人员之间分割数据的信息。

标杆管理

Code

考虑以下示例以查看行为forparfor。如果您还没有打开并行池,请先打开它:

gcp; % Opens a parallel pool using your current settings

然后执行几个大循环:

n = 1000; % Iteration number
EigenValues = cell(n,1); % Prepare to store the data
Time = zeros(n,1);
for ii = 1:n
tic
    EigenValues{ii,1} = eig(magic(1e3)); % Might want to lower the magic if it takes too long
Time(ii,1) = toc; % Collect time after each iteration
end

figure; % Create a plot of results
plot(1:n,t)
title 'Time per iteration'
ylabel 'Time [s]'
xlabel 'Iteration number[-]';

然后做同样的事情parfor代替for。您会注意到每次迭代的平均时间增加(对于我的情况,从 0.27 秒增加到 0.39 秒)。但请注意,parfor使用了所有可用的工人,因此总时间(sum(Time))必须除以计算机的核心数量。因此,对于我的情况,总时间从大约 270 秒减少到 49 秒,因为我有一个八核处理器。

因此,虽然每次单独迭代的时间都会增加parfor关于使用for,总时间大大减少。

Results

这张图显示了我刚刚在我的家用电脑上运行的测试结果。我用了n=1000 and eig(500);我的计算机具有四核 I5-750 2.66GHz 处理器,运行 MATLAB R2012a。正如您所看到的,并行测试的平均值徘徊在 0.29 秒左右,并且有很大的差距,而串行代码则相当稳定在 0.24 秒左右。然而,总时间从 234 秒下降到 72 秒,加速了 3.25 倍。这不完全是 4 的原因是内存开销,用每次迭代花费的额外时间来表示。内存开销是由于 MATLAB 必须检查每个内核正在执行的操作并确保每个循环迭代仅执行一次并且数据被放入正确的存储位置。

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

使用 parfor 节省时间和内存? 的相关文章

  • 分组符号最大长度平衡子序列

    将 B 视为分组符号 和 的序列 如果 B 的长度为 0 或 B 具有以下形式之一 则称 B 为平衡序列 X Y 或 X Y 或 X Y 其中 X 和 Y 本身是平衡的 平衡示例 现在的问题是找到一种有效的算法来找到给定输入的最大长度平衡子
  • MPI 从文本文件中读取

    我正在学习 MPI 编程 我遇到了这个问题 假设我有一个包含 100 000 行 行的 txt 文件 如何将它们分块以供 4 个处理器处理 即我想让处理器 0 负责第 0 25000 行的处理 让处理器 1 负责第 25001 50000
  • 如何优化 Three.js 中多个 sphereGeometry 的渲染?

    我想优化 Three js 中 sphereGeometry 的渲染 因为它成为我的程序的瓶颈 javascript程序如下所示 var sphereThree for var idSphere 0 idSphere lt numSpher
  • Matlab 中的 3D 堆叠条形图

    我想在一个图中绘制多个堆叠条形图 detached 条形图 例如 准确地想象一下bar http mathworks com help matlab ref bar3 detached png绘图 但堆叠在一起 而不是单一颜色 Set up
  • 检查远程错误时出错 (val):5 个节点产生错误:未找到对象

    我尝试使用并行处理 parLapply 进行 10 倍交叉验证并估计联合模型的模型性能 我试图找出为什么我收到错误消息 checkForRemoteErrors val 中的错误 五个节点产生错误 未找到对象 Week 代码如下 Valid
  • Python 多处理:全局对象未正确复制到子级

    前几天我回答了一个关于SO的问题 https stackoverflow com q 67047533 1925388关于并行读取 tar 文件 这是问题的要点 import bz2 import tarfile from multipro
  • 网页优化:为什么组合文件速度更快?

    我读过 将所有 css 文件合并为一个大文件 或将所有脚本文件合并为一个脚本文件 可以减少 HTTP 请求的数量 从而加快下载速度 但我不明白这一点 我认为如果你有多个文件 最多有一个限制 我相信在现代浏览器上是 10 个 浏览器会并行下载
  • 将值从 C++ MEX 文件返回到 MATLAB

    我正在编写一个从 C 代码中检索数据的 MATLAB 程序 为此 我在 MATLAB 中创建了一个 MEX 文件和一个网关 mexFunction 虽然可以在 MATLAB 中读取读取值 但我无法检索它来使用它 如果不清楚 我有与这里完全相
  • 使用网络计算机进行 Matlab 并行处理

    我熟悉matlabpool and parfor用法 但我仍然需要加快计算速度 我的 1GB 网络中有一台功能更强大的计算机 两台计算机都有 R2010b 并且具有相同的代码和路径 使用两台计算机进行并行计算的最简单方法是什么 我今天使用的
  • Mysql:多个表还是一张大表?

    这个问题已经被问过 但我还没有找到 1 个语音答案 最好这样做 1 张大桌子 其中 用户 ID 属性 1 属性 2 属性 3 属性 4 或 4 个小桌子 其中 用户 ID 属性 1 用户 ID 属性 2 用户 ID 属性 3 用户 ID 属
  • SQL 执行计划是基于架构还是数据,或者两者兼而有之?

    我希望这个问题不太明显 我已经找到了很多关于解释执行计划的好信息 但有一个问题我还没有找到答案 该计划 更具体地说是相对 CPU 成本 仅基于架构 还是数据库中当前的实际数据 我尝试对我的产品数据库中需要索引的位置进行一些分析 但正在使用我
  • HTML5 - Canvas - 大图像优化

    我需要建立一个HTML5 canvas其中包含非常大的图像 可能高达 10 15MB 我的第一个想法是将图像分成几个块 这些块将在画布上水平移动时加载 对这个想法有什么想法吗 这是一件好事吗 也许我错过了一些已经实现的优化功能 你说得对 这
  • Scikit Learn GridSearchCV 无需交叉验证(无监督学习)

    是否可以在没有交叉验证的情况下使用 GridSearchCV 我正在尝试通过网格搜索优化 KMeans 聚类中的聚类数量 因此我不需要或想要交叉验证 The 文档 http scikit learn org stable modules g
  • Foreach循环无法找到对象

    我正在尝试将 foreach 与并行后端结合使用来加速计算 用于特征选择的 AUCRF 随机森林的交叉验证 如果这确实重要的话 在这样做的过程中 我需要获取向量的子集 向量的名称可以更改 但可以作为字符向量进行访问 我使用 eval par
  • Python(和 Java)中最快的数据打包

    Sometimes http www codinghorror com blog 2009 01 the sad tragedy of micro optimization theater html our host is wrong na
  • tbb:并行查找第一个元素

    我遇到了这个问题 查找列表中满足给定条件的第一个元素 不幸的是 该列表相当长 100 000 个元素 并且使用单个线程评估每个元素的条件总共需要大约 30 秒 有没有办法干净地并行化这个问题 我浏览了所有tbb模式 但找不到任何合适的 UP
  • MATLAB;具有 2+ 个/分割图例的饼图 R2017b

    我正在创建一个饼图 理想情况下希望图例水平显示在顶部和 或底部 然而 在几乎所有情况下 这是不可能的 因为图例超出了数字 因此 我理想情况下希望将图例分成两个 或更多 子图例并单独放置它们 我知道这不是 MATLAB 中的内置功能 我使用的
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • UDP接收和发送Matlab

    我目前正在努力从外部设备接收数据包 然后将数据发送到另一个设备 我有一个工作 Simulink 模型 但我不知道如何在 Matlab 中对其进行编码 Matlab 中 UDP 接收块的参数如下图所示UDP 接收参数 https i stac
  • MATLAB 图形渲染:OpenGL 与 Painters?

    当谈到使用哪个渲染器来处理 MATLAB 图形或何时它很重要时 我一无所知 但我遇到过某些示例 其中does matter plot 0 0 ko markersize 50 linewidth 8 set gcf renderer ope

随机推荐

  • 有没有免费的库可以实现类似于MSMQ(Microsoft Message Queuing)的消息队列?

    我有兴趣使用一个免费库 该库具有类似于 MSMQ 的功能 可以在 win 表单应用程序中的 3 个应用程序域之间发送 接收消息 我只需要专用队列功能 没有公共队列或 AD 支持 请提供链接和一些优点 缺点 如果您认为需要更多积分来了解更详细
  • C语言中\n是多字符吗?

    我读到 n 由 CR 和 LF 组成 每个都有自己的 ASCII 代码 那么C中的 n是用单个字符表示还是多字符表示呢 Edit 请具体说明您的答案 而不是简单地说 是的 or 不 不是 在 C 程序中 它是一个字符 n 代表行尾 然而 某
  • JavaCV 录像机方向在纵向模式下不正确

    嗨 我正在使用https github com bytedeco javacv https github com bytedeco javacv 用于录制视频 使用横向模式时方向很好 但当我将方向更改为纵向模式时 视频旋转 90 度 任何人
  • 使用 NHibernate 时出错

    考虑到这个例子 https www hibernate org 362 html作为基本示例 我创建了该应用程序 但是当我执行该应用程序时出现以下错误 The ProxyFactoryFactory was not configured 使
  • 在 Bootstrap 4 中的模式中滚动下拉菜单

    我目前正在从 Bootstrap4 alpha 迁移到 Bootstrap4 stable 到目前为止 一切都很好 除了我的模态出现的这个问题 我在任何地方都使用下拉菜单 包括包含许多项目的下拉菜单 以前 滚动效果很好 现在它没有 当我滚动
  • 将 pandas 函数实现为 numpy 函数

    有没有办法可以转换xy mean使用 pandas 库计算的函数就像y mean功能 我发现 pandas 功能Y mean pd Series PC list rolling number mean dropna to numpy 比 n
  • 将字符串转换为 Uri

    如何在 Java Android 中将字符串转换为 Uri IE String myUrl http stackoverflow com myUri 您可以使用parse静态方法来自Uri import android net Uri Ur
  • 已知常微分方程的李亚普诺夫谱 - Python 3 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想用数值方法计算李亚普诺夫谱洛伦兹系统 https en wikipedia org wiki Lorenz syst
  • Azure 服务主体没有足够的权限来管理其他服务主体

    我可以使用 Azure 或从门户控制台使用以下命令创建服务主体az cli az ad sp create for rbac name myspuser password adfhrrreeuwrgwejdfgds 然后 我在订阅级别分配所
  • 如何设置“npm install”期间使用的环境变量?

    我们的合作网络非常封闭 所以正常的方法是 npm install email protected cdn cgi l email protection 不起作用 因为它被代理阻止 我们需要提供参数CYPRESS INSTALL BINARY
  • Pandas:每组最大值的索引

    我的熊猫数据框 df 看起来像这样 parameter1 parameter2 value 1 1 0 1 2 0 2 2 1 0 6 2 0 3 value是一个结果groupby parameter1 parameter2 mean 另
  • std::cin 在读取 EOF 并清除后不再读取

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在阅读以下内容std cin with a while循环结束时EOF被介绍 退出循环后 我调用std cin clear 使流恢复正常
  • 我们什么时候会在Spring中使用applicationContext.xml? [复制]

    这个问题在这里已经有答案了 为什么我们需要applicationContext xml在春天 我们在什么情况下会使用它 你有例子吗 有什么区别applicationContext xml and spring servlet xml 我们如
  • 在 Android 上获取正确的启动器图标大小

    我正在开发一个能够将快捷方式图标添加到主屏幕的应用程序 Android 平板电脑的正确图标大小是多少 或者更好地说 如何在运行时获取它 它似乎与上面写的不同this http developer android com guide prac
  • 改变div背景颜色一秒钟,然后在javascript中将其返回到原始颜色

    我想改变 div 的背景颜色一秒钟 然后将其返回到原始颜色 我正在制作西蒙游戏 不知道如何在一段时间内闪烁颜色 到目前为止我有这个 var red document getElementById redBox flashRed functi
  • Azure 存储 - 在 标记中使用私有容器中的 Blob

    我创建了 Azure 容器并将其设置为私有 该权限必须设置为 私有 因为只有登录用户才能查看该内容 但是 我打算在标签中使用 blob 当容器设置为私有时 这是不可能的 有没有解决的办法 或者还有其他人遇到同样的问题吗 我从 CodePle
  • Win 64 Strawberry Perl DBI 无错误报告错误仍未修复?

    自 2011 年以来一直在处理这个问题 通常能够解决它 现在出现了一种情况 我确实需要能够处理错误 我在想 人们已经知道这个问题很多年了 这似乎是修复列表中最重要的事情 但是最新的 DBI 升级而且问题还没有解决 有没有人找到解决方法 或者
  • 是否可以更改版本号?归档 iOS 项目后?

    我提交给 iTunes Connect 进行 Testflight beta 测试的 iOS 应用程序版本几乎过期了 据我所知 为了延长 30 天的试用期 我需要再次提交它 但要使用递增的构建版本 由于我存档的代码库是很久以前的 我不想将代
  • AcquireTokenForClient (MSAL) 是否使用令牌缓存?

    我 成功 使用客户端凭据流与 MSAL 来验证应用程序 如下所示 private static async Task
  • 使用 parfor 节省时间和内存?

    考虑prova mat在MATLAB中通过以下方式获得 for w 1 100 for p 1 9 A p randn 100 1 end baseA A A eval baseA A num2str w baseA end save sp