MATLAB Memo
5. 並列計算(parfor)
Parallel Computing Toolbox を使った parfor による並列計算のメモです。
計算そのものは簡単に並列化できても、図の保存では少し工夫が必要になります。
旧メモで書いていた回避策を、そのまま整理しています。
parfor
parpool
Parallel Computing Toolbox
saveas
fig
jpeg
メモ
旧ページでは、
回避策として、まず
parfor ループ内で直接 JPEG 保存すると
低解像度になってしまう問題を扱っています。回避策として、まず
.fig 形式で保存し、
後から別ループで JPEG に変換する方法を使っています。
注意点
※ 要 Parallel Computing Toolbox
旧メモでは、どうしても
旧メモでは、どうしても
parfor ループ内でダイレクトに jpg に落とすことができない、
という点が最大の注意事項として挙げました。parfor での並列処理
%---------------------------------------------------------
% parforループで並列処理
%---------------------------------------------------------
parpool(6); % ← ワーカーの数を指定
parfor k=1:length(fl); % <----- 変数 "fl" にファイルリストが入っているとする
:
:
[parforループ内である変数 X,Y,Z を計算したとする]
[m_map でマッピングしたとする]
:
:
saveas(gcf, '*****.fig', 'fig'); % ← マッピングした図を fig 形式で保存
parsave(ofl,X,Y,Z); % ← 以下に示す新規の関数 parsave を用意しておく
:
:
end
delete(gcp); % matlabpool にさよなら
fig から jpg へ変換
旧メモでは、なぜか別プログラムにしないと動かない、とコメントされています。
まず並列ループで .fig を保存し、その後に順次 JPEG へ変換します。
%---------------------------------------------------------
% fig形式からjpgへ変換
%---------------------------------------------------------
for k=1:length(fl)
hoge=fileList{k};
oflj=[hoge(1:26),'.jpg'];
oflf=[hoge(1:26),'.fig'];
uiopen(oflf,1); % <--------- parfor ループで作った *.fig ファイルを開く
print('-djpeg','-r200',oflj); % <------ jpg 形式で保存
delete oflf; % <------ fig ファイルを削除
close all;
end
補助関数 parsave
並列ループで変数を保存するために、別関数として parsave を用意します。
function parsave(fname,x,y,z)
save(fname,'x','y','z')
end