Main Content

大きいイメージ ファイルに対するパラレル ブロック処理

Parallel Computing Toolbox™ ライセンスをお持ちの場合、関数 blockproc は、マシンの複数のプロセッサ コアを利用してパラレル ブロック処理を実行できます。

パラレル ブロック処理とは何か

パラレル ブロック処理を使用して、タスクの計算を ("ワーカー" と呼ばれる) MATLAB® セッションのセットに分配することにより、多くのブロックを同時に処理できます。対話する MATLAB セッションは "クライアント" と呼ばれます。クライアントは ("並列プール" と呼ばれる) ワーカーのセットを予約します。その後、クライアントは入力イメージをブロックに分割し、ブロックをワーカーの MATLAB セッションに送信します。各ワーカーはブロックのサブセットを処理し、結果をクライアントに送り返します。クライアントは出力変数内に結果を集約します。

パラレル ブロック処理を使用する状況

小さいイメージを処理する場合は、逐次モードは並列モードより速いと予想されます。しかし、大きいイメージの場合は、並列処理でパフォーマンスが大幅に改善されると考えていいでしょう。パラレル ブロック処理のパフォーマンスは以下の 3 つの要素に依存します。

  • 処理に使用される関数

  • イメージ サイズ

  • ブロック サイズ

一般的に、イメージのブロック処理中に大きいブロックを使用すると、小さいブロックを使用して同じタスクを行うときよりパフォーマンスが改善されます。しかし時には、イメージに適用するタスクまたはアルゴリズムが一定のブロック サイズを必要とし、小さいブロックを使用しなければならない場合があります。小さいブロックを使用するブロック処理の場合、一般的にパラレル ブロック処理は通常の (逐次の) ブロック処理よりも大幅に速くなります。しかし、大きいブロックを使用する場合は、パラレル ブロック処理が計算時間を節約するかどうかを判断するために実験する必要があります。

パラレル ブロック処理の使用方法

パラレル ブロック処理を使用するには、以下の 2 つの条件を満たさなければなりません。

  • ソース イメージが ImageAdapter クラスとして指定されていないこと。

  • MATLAB をインストールするときに Parallel Computing Toolbox のライセンスがあること。

これらの条件を満たしている場合は、名前と値の引数 UseParalleltrue として指定することにより、blockproc で並列処理を実行することができます。これを行うと、MATLAB はローカル マシン上のワーカーの並列プールを自動的に開き、使用可能なすべてのワーカーを使用して入力イメージを処理します。

以下の例では、イメージの 8 × 8 ブロックごとに離散コサイン変換をパラレルに計算します。

blockFun = @(block_struct) dct2(block_struct.data);
result = blockproc(input_image,[8 8],blockFun, ...
   UseParallel=true);

クラスターへのスケール アップなどの並列基本設定を使用して、並列動作を制御します。並列環境の構成については、parpool (Parallel Computing Toolbox) を参照してください。

参考

関連するトピック