【问题标题】:How to fully use the CPU in Matlab [Improving performance of a repetitive, time-consuming program]Matlab中如何充分利用CPU【提高重复耗时程序的性能】
【发布时间】:2013-11-06 03:12:28
【问题描述】:

我正在研究一种在不同光照条件下的自适应和全自动分割算法,该算法的核心使用粒子群优化(PSO)来调整模糊系统,相信我这非常耗时:|只有 5 个粒子和 100 次迭代,我必须等待 2 到 3 个小时!它只是从我的数据集中处理一张包含 100 多张照片的图像!

我正在使用 matlab R2013 ,带有 intel coer i7-2670Qm @ 2.2GHz //8.00GB RAM//64 位操作系统

问题是:启动程序时它只使用了我的 CPU 的 12%-16% 并且只有一个内核在工作!!

我搜索了很多并进入了 matlabpool,所以我将这一行添加到我的代码中:

matlabpool open 8

现在,当我启动程序时,任务管理器显示 98% 的 CPU 使用率,但这只是几秒钟!之后它又回到了 12-13% 的 CPU 使用率:|

你知道我怎样才能让这段代码运行得更快吗?!

【问题讨论】:

  • 我没有足够的知识来评论加速此代码,但是您的描述表明上述代码可能只使用一个线程。由于您表示您有 100 个文件,您可以探索一次处理 4 个以上文件的想法(调整数量以获得最大的 CPU 利用率)。即在此代码周围放置一个 parfor (1:numfiles)。

标签: matlab time consuming particle-swarm


【解决方案1】:

12% 听起来像 Matlab 只使用一个线程/核心,而这个是满载的,这是正常的。

matlabpool open 8 还不够,这只是打开了工人。您必须使用 parfor 之类的命令来为它们分配工作。

【讨论】:

  • 感谢 Daniel 的回复,由于 PSO 算法的竞争性,您认为可以在 PSO 循环中使用 parfor 吗?在每次迭代中,我们需要将粒子 best_fit 相互比较,并与 Global_best 进行比较!
【解决方案2】:

根据 Daniel 的建议,理想情况下应用 PARFOR,您会在算法中发现一个耗时的 FOR 循环,其中迭代是独立的,并将其转换为 PARFOR。一般来说,PARFOR 在可能的最外层应用时效果最佳。在开始添加并行性之前,绝对值得使用 MATLAB 分析器来帮助您优化串行代码。

【讨论】:

  • 使用 MATLAB 分析器我发现 Fit 函数是我的程序中最耗时的循环,它位于 PSO 主循环内,我不能像我向 Daniel 解释的那样将 parfor 与 PSO 循环一起使用,但是你对这个循环有什么建议吗? for i=1:SzTrain [output, IRR, ORR, ARR] =evalfis([train(i,1);train(i,2);train(i,3)],fis); ... end
  • @Amir:这一行代码没用,关键是一次迭代与下一次迭代之间的依赖关系。
  • @Daniel R:可以解释一下吗? PSO 迭代相互依赖,It(n+1) 依赖于 it(n)。你建议parfor?因为迭代相互依赖?
  • @Amir:是的,这不是直截了当的。许多优化问题的一个基本思想是让每个工作人员尝试一步并做到最好。如果您需要详细帮助,请附上您的代码。
  • @Daniel R 我已经添加了主 PSO 循环,够了吗?
【解决方案3】:

通过我自己的模拟,我发现我无法使用 Parfor 重新编码它们,我拥有的 for 循环过于交织在一起,无法利用多个内核。

但是:

您可以打开 Matlab 的第二个(以及第三个和第四个等)实例,并告诉这个附加实例运行另一个作业。 matlab open 的每个实例都将使用不同的内核。因此,如果您有一个四核,您可以打开 4 个实例并通过在所有 4 个中运行代码来获得 100% 的效率。

因此,我通过同时打开多个 matlab 实例并运行作业来提高效率。我的工作一次需要 8 到 27 个小时,正如人们想象的那样,没有液体冷却,我烧坏了我的 cpu 风扇,不得不更换它。

还要考虑优化您的 matlab 代码,我最近优化了我的代码,现在它的运行速度提高了 40%。

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多