/************************************************** 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);
for(j=w/3; j < pic; j=j+1) { for(i=w/3; i < pic; i=i+1) { data(i,j) = 8; } }C言語と同じようにfor文が使用できます。 ただし i++ のようなインクリメント演算子は使えません。