很多时候,当我们写成初版程序后,想要通过并行计算进行提速。
此时并行计算只需要对关键瓶颈进行并行即可,不需要将整个程序进行并行。
因为并行有额外的开销而且,有些变量不能够加入到并行里面。
一般处于for循环内部的瓶颈函数都,这种情况都很适合并行计算。
这种情况同样适用于C++框架下的openMP,将瓶颈算法改成并行模式并将关键输出保存成文件。
%这个文件可以根据自己的需要进行更改,比如说变量名,变量的数量等
function parsave(fname, x,y)
save(fname, 'x', 'y')
end
下面我给出一个具体的框架,并行需要使用parfor。
count_excel=1
parfor j=1:num_FN
trueSaveFile=[trueSaveFolder num2str(j) '.mat'];
%通过文件存储,使得程序能够被打断,不至于丢失关键数据
if exist(trueSaveFile,'file')
if delete_exist
delete(trueSaveFile)
else
continue
end
end
%写入到中间变量中
temp_xls=cell(1,2);
%需要存储的信息
temp_xls{1,1}=current_folder_name;
%瓶颈算法的结果
temp_xls{1,2}=pingjingsuanfa(x,y);
%保存
parsave(trueSaveFile,temp_xls)
end
for j=1:num_FN
%从文件中读取
%循环的框架与parfor的框架相同
trueSaveFile=[trueSaveFolder num2str(j) '.mat'];
if ~exist(trueSaveFile,'file')
continue
end
load(trueSaveFile);
%写入到excel中 count_excel 是数字转excel的列
xlswrite(logFileName_xlsx,temp_xls,1,['A' num2str(count_excel+1)]);
end