モジュール

			
/*****************************************************
  reverse.cc
  反転フィルター処理
******************************************************/

vs_module
reverse(iImage data)
{
    parallel<1,1>(x,y) {
        data[][] = abs(255 - data[][]);
    }
}


実行フロープログラム


 /****************************************
  filter.vpe
  フィルター処理起動用スクリプト
 ****************************************/

// 通信処理初期化 -------------

#pragma host_name	host1
#pragma host_name	host2
#pragma host_name	host3
#pragma host_name	host4


// データの初期化 (画像データの読み込み)-------------
imgLoad("./toy.pgm", data);

// モジュール実行時の引数データの分割方式設定-------------
set(data,DIVISION,BLOCK);

// モジュールの実行
module(reverse, data);

// 保存するためにデータを回収
gather(data);
imgSave("./result.pgm", data);


実行方法

  1. 入力画像の用意
  2. モジュールのコンパイル
    % vs_makemodule reverse.cc
  3. プログラムの実行
    % vios_run < filter.vpe


実行フロー設定項目


モジュールプログラム説明

parallel<1,1>(x,y){} はそのブロック内を並列に処理することを示す。
最初の "<1,1>"は、並列処理単位の指定である。左から順に、x,yの粒度の設定をしており、この場合x,yともに1、つまり1pixelずつ全ての画素に対して

data[][] = abs(255 - data[][]);
という処理を行う。
この並列処理の最小単位をワーキングセットという。
ここで、parallel構文内での data[][] の様な大括弧"[ ]" の配列アクセスは、現在注目している画素を表す。
次の(x,y) というのはインデックス変数名の設定である。必ず記述しなければならないが、このプログラムでは使用しないので説明は省く。


実行結果

入力画像 toy.pgm

結果画像

これらの画像はGIF形式です。VIOSで用いるときはPGMに変換してください。