【问题标题】:run two functions in parallel matlab在matlab中并行运行两个函数
【发布时间】:2015-03-22 23:09:49
【问题描述】:

我有这个问题:我有一个 MATLAB 函数,可以在体积上执行各向异性扩散。对于医疗卷,完成执行大约需要 20 分钟。现在我想在两个不同的卷上同时使用这个函数,这样使用 Matlab 的并行计算工具箱,总执行时间保持 20 分钟而不是 40 分钟。 我有一台四核 Macbook,所以在我看来,一个核心应该运行一个第一卷,第二个核心应该运行第二卷。

我该怎么做?

我要同时运行的功能是:

filt1=anisodiff3D(volume1);
filt2=anisodiff3D(volume2);

谢谢!

【问题讨论】:

  • 我知道您询问了并行计算工具箱解决方案,但仍然:我经常只是启动第二个 Matlab 实例,它也将并行运行。提醒你一下;并行计算工具箱并不总是必要的。
  • 我知道这个话题已经有一年的历史了,但我觉得我的问题值得评论而不是问题本身。我有四个要在 MATLAB 中运行的脚本,但是,与问题相反,我无法索引参数,因为脚本的名称几乎没有共同之处。我想将特定工作分配给本地集群(四核)上的特定工作人员(1、2、3 或 4)我有 distcomp 工具箱。我的问题是:有可能还是我必须求助于启动四个 MATLAB 实例?谢谢你的回答!

标签: matlab parallel-processing


【解决方案1】:

您首先需要创建一个 Matlab 进程池,然后使用 parfor 构造。我会这样做:

% Useful for operating on parfor
filt = [filt1, filt2];
vol = [volume1, volume2];

% Please note that these are separate processes and sharing data can be challengin
matlabpool(2); % or parpool(2);

% Parallelize the for loop using 2 workers
parfor i = 1 : 2
   filt(i) = anisodiff3D(vol(i));
end

【讨论】:

  • matlabpool 在 Matlab 2014a 中被删除,最新版本使用 parpool
  • @Daniel 谢谢。我将它作为注释添加到代码中。
  • 好吧,我做到了,但结果是这样的:经过的时间是 4049.721585 秒。有谁知道发生这种情况的原因吗?
  • 你是如何测量时间的?什么时候没有并行性?你的核心有超线程吗?可能是进程在 2 个超线程上而不是在 2 个物理不同的内核上执行的情况。
  • 我用一个简单的 tic,toc 命令测量了它!没有并行性是 2880.723432 秒......超线程是什么意思?我该如何解决这个问题?并行计算中的默认集群是本地的。
【解决方案2】:

您正在寻找 MATLAB 并行计算工具箱(除非您已经拥有它)。这使您可以并行进行乘法运算(例如运行两个函数)。关键是这些功能之间的 IPC。我相信当你让他们相互交流时,事情会变得更加复杂。如果不需要,您可以通过该工具箱使用并行 for 循环(又名 PARFOR),以便并行运行两个(或更多)函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多