0

と を多用する特定の画像処理アルゴリズムを作成imwriteimreadました。次の例は、ハイパースレッディング対応の 6 コア i7 マシン上の 8 つの Matlab セッションで同時に実行されます。(ファイル名はセッションごとに異なります。)

tic; 
for i=1:1000 
    %a processing operation will be put here%
    imwrite(imgarray,temp,'Quality',100); 
    imgarray=imread(temp); 
end 
toc;

temp=[ramdrive_loc temp];次の 2 つの目的で、サンプル コードの変更を検討しています。

  • 時間消費の削減
  • ハードドライブの摩耗を下げる

作成される画像ファイルのサイズは約 1 MB です。ハード ドライブは、2 x 7.2k Caviar Black を使用して RAID0 として形成されます。マシンは Windows マシンで、パーティションは NTFS としてフォーマットされています。

上記の出力tocは(画像を処理せずに)次のとおりです。

Ramdiskなし: 104.330466 秒。

Ramdiskの場合: 106.100880 秒。

速度が上がらない原因は何かありますか? RAM ディスクのファイル システムを FAT32 に変更すると効果がありますか?

注: RAM ディスクとハードディスクの比較に関して、他にも質問がありました。ただし、この質問は主にimreadimwrite、および Matlab I/O に関するものです。

追加: RAM ディスクは、SoftPerfect のフリー ソフトウェアを介してセットアップされます。3 GB のスペースがあり、タスクには十分すぎるほどです (最大 10 MB が生成され、Matlab セッション中に何度も書き込まれます)。

4

1 に答える 1

1

ファイルのキャッシュ。おそらく、Windows のファイル キャッシュによって既に I/O アクティビティが高速化されているため、RAM ディスクによってさらに高速化されることはありません。ファイルを書き出すと、ファイル キャッシュに書き込まれ、非同期的にディスクにフラッシュされるため、Matlab コードは物理ディスクの書き込みが完了するまで待つ必要がありません。また、同じファイルをすぐにメモリに読み込むと、ファイル キャッシュにまだ存在する可能性が高いため、物理ディスクの読み取りが発生する代わりに、メモリから提供されます。

それが実際のコードである場合、同じファイルを何度も書き直しています。つまり、すべてのアクティビティがディスク キャッシュ内で発生している可能性があるため、基盤となるストレージ メカニズムでボトルネックにぶつかることはありません。

テスト コードを書き直して、実際のワークロードに近づけるようにします。画像処理コードを含め、実際に行う場合はパスごとに異なるファイルに書き込み、実際に複数のプロセスを並行して実行します。これを Matlab プロファイラーに入れるか、より細かい tic/toc 呼び出しを追加して、実際に I/O に費やしている時間を確認します (例:imreadimwrite、およびファイル I/O を実行している部分)。I/O の外で重要な処理を行っている場合、ファイル キャッシュは他の処理中に実際の物理 I/O を実行する時間があるため、RAM ディスクからの大幅な速度向上は見られない可能性があります。

そして、何度も何度も書き込まれる最大 10 MB があると言うので、そもそもファイル キャッシュ内に簡単に収まるほど小さく、実際の物理 I/O スループットはかなり小さいです。ファイルを作成し、ファイル キャッシュがファイルをディスクにフラッシュする前にその内容を新しいデータで上書きする場合、OS はその最初のデータ セットをディスクにフラッシュする必要はありません。物理 I/O がボトルネックにならないため、I/O は既にほとんどがメモリ内で発生しているため、RAM ディスクに切り替えても効果がありません。

最新のオペレーティング システムは、このようなシナリオが発生することを認識しているため、多くのキャッシュを実行します。RAM ディスクが必ずしも大幅な高速化になるとは限りません。この動作について、 Matlab またはimread/に固有のものはありません。RAMdisk ディスクよりも遅いimwriteなどの他の RAM ディスクに関する質問はありますか? はまだ関連性があります。

于 2014-05-19T04:18:42.353 に答える