2012-07-10 85 views
0

我想对一些计算,我想这样做并行使用PARFOR或通过打开matlabpool ..作为当前实现速度太慢:Matlab的并行for循环或Matlab开放游泳池

result=zeros(25,16000); 
for i = 1:length(vector1) % length is 25 

    for j = 1:length(vector2) % length is 16000 

       temp1 = vector1(i); 
       temp2 = vector2(j); 
       t1 = load(matfiles1(temp1).name) %load image1 from matfile1 
       t2 = load(matfiles2(temp2).name) % load image2 from matfile2 
       result(i,j)=t1.*t2 
    end 
end 

其工作正常,但我真的很想知道是否有办法加快速度...... 非常感谢!

+0

每个图像文件的大小是多少?一个简单的优化就是简单地将't1'加载线移出内部循环。 – Ansari 2012-07-10 04:05:39

+0

尺寸为240 * 320;做了t1优化,但速度没有太大差别... – Ash 2012-07-10 04:15:13

回答

1

使用parfor循环并打开matlabpool一起去。打开matlabpool为您的MATLAB会话提供专门的工作人员,用它可以运行您的parfor循环的主体。所以,你可以更改您的代码是这样的:

matlabpool open local 4 % or however many cores you have 
parfor i = ... 
    ... 
end 

并行运行代码之前,我肯定会推荐使用MATLAB profiler以确保您了解正在那里度过的时间运行代码。 (我有点惊讶,将load提升为t1进入外部循环没有任何影响 - 因此,探查器可能应该显示load调用与其他算法相比所花费的时间很少)。

+0

当我将t1移到外部循环时,从132秒到122秒有一个下降。但是,当我使用parfor和matlab打开时,我没有看到任何真正的改进......并且我收到了一条消息,以修复代码 – Ash 2012-07-10 06:31:11

+0

中的切片变量问题您正在使用哪种MATLAB版本?另外,我是否正确理解您有16000个单独的文件,每个文件都包含一个标量值? – Edric 2012-07-10 10:29:23

+0

是.. 16000图像 – Ash 2012-07-11 00:26:09