Matlab中parfor循环的一个具体例子,它优于for循环

时间:2012-08-13 13:10:26

标签: performance matlab for-loop parallel-processing

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

首先,由于我是大学新生的机器,因此我通过在命令提示符下键入ver来验证我所使用的机器是并行计算工具箱,并显示:{{1 }}。请注意,该机器有4个核心

我尝试了使用Parallel Computing Toolbox Version 5.2 (R2011b)parfor的简单示例,但for总是赢了,但这可能是因为开销成本。我做的很简单,例如:MATLAB parfor is slower than for -- what is wrong?

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

3 个答案:

答案 0 :(得分: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()命令没有记录。

答案 1 :(得分:3)

Loren Shure's MATLAB blog上有一个改进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

答案 2 :(得分: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的答案所示,那么你的性能应该会有明显的提升。