モジュール

			
/**************************************************
  Jacobi.cc
  Jacobi処理(SyncCache版)
***************************************************/

#define TIMES	25

vs_module
jacobi(fImage_opt data)
{
    fImage_opt shadow(data);	 // テンポラリ変数

    // 径1の外周(全領域中での)は処理からはずす
    vsSetBoundary2D(1);

    fprintf(stderr,"process start!\n");
    for(int i=0; i < TIMES; i++) {

	parallel(x,y) {
	    shadow[][] = (data[-1][] + data[][-1] + \
			  data[+1][] + data[][+1]) / 4;
	}

	ImgCopy(data, shadow);	// 大域変数に戻す
	vsSyncCache(data);
    }
}


実行フロープログラム

/****************************************
 *   	 実装実験用プログラム jacobi.vpe     	*
 ****************************************/
// 通信処理初期化 -------------

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

#pragma use_intercomm


// データの初期化 -------------

int w,h, pic;
w   = 512;
h   = w;
pic = w/3*2;

fImage data(w,h);
int i,j;
for(j=w/3; j < pic; j=j+1) {
    for(i=w/3; i < pic; i=i+1) {
        data(i,j) = 8;
    }
}

set(data, CACHE, 1);
module("jacobi", data);

gather(data);
imgSave("result.pgm", data);


実行方法

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


実行フロー設定項目


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