Matlab parfor比平常更长时间

时间:2016-05-28 15:18:13

标签: matlab time parfor

我有一个MATLAB代码,我使用parfor来减少for执行某些图像处理任务所花费的时间。基本上,它是拍摄两张图像,经过一些数学计算后,会产生一个名为EucDist的标量元素。为此,一个图像保持固定,另一个图像由FORTRAN代码生成,这需要大约20秒才能完成。以下是我的代码大纲:

matlabpool open
gray1 = some_image(8192,200);

dep = 0.04:0.01:0.40;       % Parameter 1
vel = 1.47:0.01:1.72;       % Parameter 2

dist = zeros(length(dep),length(vel));

tic
parfor i = 1:length(dep)
    ans = zeros(1,length(vel));
    for j = 1:length(vel)

        % Updating the Input.txt file
        fname = sprintf('Input_%.2d%s',i,'.txt');
        fid=fopen(fname,'w');
        fprintf(fid,'%-5.2f\n%-5.2f\n%.2d',dep(i),vel(j),i);
        fclose(fid);

        % Running my fortran code to generate another .dat file (Note that I have already compiled this code outside these loops)
        system(['./editcrfl ' fname]);

        % Calling IMAGE_GEN script incorporating the above .dat file 
        system('IMAGE_GEN');

        system(sprintf('IMAGE_GEN %d',i));

        gray2 = some_image(8192,200);

        % Doing some mathematical calculations and getting a value say 'EucDist' 
        - - - - - - - 
        - - - - - - -
        ans(j) = EucDist; 

    end
    dist(i,:) = ans;
    fclose('all');
end
fprintf('Total time taken: %f\n',toc); 
matlabpool close

上面的代码我遇到了两个主要问题。

首先,dist矩阵无法存储生成的所有EucDist。理想情况下,dist矩阵的大小应为37 X 26,但它只有37 X 1,并且所有值都为零。虽然我已经检查过所有37个X 26值都已计算出来,但不知道为什么它没有存储在dist中。

其次,我使用parfor所花费的总时间约为9.5小时,而正常for则只需5.5小时。

有人可以帮我摆脱上述两个问题吗? 提前谢谢。

0 个答案:

没有答案