我有一个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小时。
有人可以帮我摆脱上述两个问题吗? 提前谢谢。