2

我对 Matlab 中的并行计算还有些陌生。我在 C 中成功使用了 OpenMP,但在 Matlab 中无法获得更好的性能。

首先,由于我是刚接触大学的机器,因此我通过ver在命令提示符下键入来验证我所在的机器具有并行计算工具箱,并显示: Parallel Computing Toolbox Version 5.2 (R2011b). 注意机器有4核

我尝试了使用parforvs.的简单示例for,但for总是获胜,尽管这可能是因为开销成本。我正在做一些简单的事情,比如这里的例子:MATLAB parfor is slow than for -- what is wrong?

在尝试将 parfor 应用到我更大更复杂的程序之前(我需要计算一个函数的 500 次评估,每次评估大约需要一分钟,所以并行化在这里会有所帮助),我非常希望看到一个具体的例子,其中parforbeats for。. OpenMP的例子很丰富,但是没有找到一个我可以复制和粘贴的简单例子,显示parforfor

4

3 回答 3

7

我使用以下代码(每个 Matlab 会话一次)以便使用parfor

pools = matlabpool('size');
cpus = feature('numCores');
if pools ~= (cpus - 1)
    if pools > 0
        matlabpool('close');
    end
    matlabpool('open', cpus - 1);
end

这为其他进程留下了 1 个核心。请注意,该feature()命令未记录在案。

于 2012-08-13T17:25:28.653 回答
4

Loren Shure 的 MATLAB 博客上有一个 parfor 提高性能的示例。

她的示例只是计算幻方矩阵的秩:

function ranks = parMagic(n)

ranks = zeros(1,n);
parfor (ind = 1:n)
    ranks(ind) = rank(magic(ind));  % last index could be ind,not n-ind+1
end
于 2012-08-13T14:24:55.693 回答
0

Serg 描述了如何“启用”并行功能。这是一个非常简单的剪切和粘贴示例,可根据要求对其进行测试。只需将以下内容复制并粘贴到 mfile 中并运行它。

function parfortest()
enable_parallel;
pause on
tic;
N=500;
for i=1:N
    sequential_answer=slow_fun(i);
end
sequential_time=toc
tic;
parfor i=1:N
   sequential_answer=slow_fun(i);
end
parallel_time=toc
end
function result=slow_fun(x)
    pause(0.001);
    result=x;
end

如果您已运行代码以启用并行,如 Serg 的回答所示,您应该会在性能上获得非常明显的改进。

于 2014-10-22T01:46:45.200 回答