Performance Matlab中parfor循环的一个具体示例,其性能优于for循环

Performance Matlab中parfor循环的一个具体示例,其性能优于for循环,performance,matlab,for-loop,parallel-processing,Performance,Matlab,For Loop,Parallel Processing,我对Matlab中的并行计算还是有点陌生。我已经在C语言中成功地使用了OpenMP,但在Matlab中并没有获得更好的性能 首先,由于我是一所大学的计算机,我在命令提示符下键入ver,验证我所在的计算机是否有并行计算工具箱,并显示:Parallel Computing Toolbox Version 5.2(R2011b)。请注意,机器有4个芯 我尝试了使用parfor和for的简单例子,但是for总是赢,尽管这可能是因为间接成本。我在做一些简单的事情,比如这里的例子: 在尝试将parfor应用

我对Matlab中的并行计算还是有点陌生。我已经在C语言中成功地使用了OpenMP,但在Matlab中并没有获得更好的性能

首先,由于我是一所大学的计算机,我在命令提示符下键入
ver
,验证我所在的计算机是否有并行计算工具箱,并显示:
Parallel Computing Toolbox Version 5.2(R2011b)
。请注意,机器有4个芯

我尝试了使用
parfor
for
的简单例子,但是
for
总是赢,尽管这可能是因为间接成本。我在做一些简单的事情,比如这里的例子:


在尝试将parfor应用于更大更复杂的程序之前(我需要计算500次函数求值,每次求值大约需要一分钟,因此并行化在这里会有所帮助),我非常希望看到一个具体的例子,其中
parfor
for
。OpenMP的例子很多,但我没有找到一个简单的例子可以复制和粘贴,说明
parfor
for

有一个例子可以说明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
我使用以下代码(每个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()
命令没有文档记录。

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的答案所示,您应该会在性能方面得到相当明显的改进。

您是否尝试过使用需要很长时间计算的函数?您可以只制作一个包含
暂停(5)
的…在使用
parfor
之前是否设置了matlabpool?例如:
matlabpool open 4
@Serg:No.
matlabpool open 4
是否仅仅意味着我想要使用4个内核?如果是这样的话,知道这一点将非常有帮助。另外,例如,
matlabpool open 3
是否意味着我只使用了4个内核中的3个?@GuntherStruyf:是的,我使用了,尽管示例很复杂,这就是为什么我想用一个简单的示例来检查问题。我现在离开了我的工作计算机…我明天会检查你和Serg的建议,然后再回来..Serg似乎从这里就对了:它说“注意,如果matlabpool没有运行,parfor循环在客户端上连续运行,而不考虑迭代顺序。”我没有打开matlabpool…太好了,谢谢!尝试了远程登录,成功了。感谢您帮助我开始使用Matlab中的
parfor
。@dblazevski欢迎您。你说的远程登录是什么意思?这与我的问题有关吗?啊,不,对不起……之前我在上面的一个评论中提到我离开了一台工作电脑。我正在做一份新工作,我不知道实际的服务器名是什么,所以我想我明天再试一次。。。然后在挖掘和猜测之后,我远程登录来测试你说的话。所以,不,不相关,但在某种程度上我是在大声思考。