前へ  次へ

並列処理構文(parallel文)


VIOSでは任意のワーキングセットに対する処理を、ここで説明するparallel構文を利用し記述することにより、全ワーキングセットに対する処理を並列に行うプログラミング、および実行スタイルを従来より提供しています。

  1. 各ワーキングセット間に順序関係が存在しない場合

     parallel <Working_Set_Size, ...> (index_variable, ...){

        /* 本文 */
     }

    まず引数について、<>に囲まれた第1引数となるWorking_Set_Sizeは、1ワーキングセットに含まれる要素の数を示しています。これは、あるデータ「ブロック」を1ワーキングセットとして扱いたい場合に利用するものです。
    次に、()に囲まれた第2引数となるindex_variableは、並列処理中に各ワーキングセットが自身を特定するための変数名を指定するためのもので、任意の名前(事前に宣言されている必要はない)が利用できます。

    また並列処理のベースとなる変数は、以下に従い決定されます。

  2. 各ワーキングセット間に順序関係が存在する場合
    (または通信により各処理単位の処理時間に大きな差が存在する場合)


    parallel_ie <Working_Set_Size, ...> (index_variable, ...){

        /* 本文 */
     }

    こちらの並列処理構文は、全てのワーキングセットを同等に扱うことができない場合に利用します。具体的には、以下のような場合に使用します。
    なお引数などの詳しい書式に関しては、parallel文と同様ですが、以下の制約が加わります。

使用例

  vs_module sample(iImage data1, iImage data2){
    parallel<2,3>(lx,ly){
      if((lx == 0) && (ly == 0)){ ...
      ...
    }
    ...
  }

この例では、2次元変数に対するprallel文を利用しています。parallel文内では、モジュールsampleの最初の引数である2次元の整数型、iImage型のVIOS変数data1をベース変数として、parallel文内の並列処理が行われます。また、各次元の識別変数にはlxとlyという名前を利用しています。また、各ワーキングセットの大きさは2×3ピクセルとなっています。

前へ  次へ