単一の巨大なバイナリ ファイルに含まれる一連の画像 (~10^7) があります。すでに持っている機能を使って効率的に読み込んで分析したい。コード内のそのユーザー関数の各反復にfoo
は約 0.1 秒かかるため、コードがデータベース全体を読み取る単純な for ループを使用してデータベース全体を処理するには数日かかります。
...
for image_number=1:N
offset_in_bytes = npoints_per_image*element_size*(image_number-1);
fseek(fid, offset_in_bytes, 'bof');
s=fread(fid, npoints_to_load,'ushort');
image=reshape(s,nrows,[]);
[outputs]=foo(image)
end
できる限り関数を最適化しましたfoo
(可能な場合はコードをベクトル化し、適切なデータ クラスを使用するなど)。まだ行っていない唯一のことは、mex バージョンを作成することです。これを使おうと思ったparfor
のですが、うまくいきませんでした。各画像は独立していますが、上記のコードはデータをシリアルに読み取るため、実際には並列化できません。オプションがこのコードとデータベースにアクセスできるようにするにはどうすればよいparfor
ですか? ありがとう