* a->mcols * a->mdeps; #pragma acc data copyin(a,b,c,wrk1,wrk2,bnd,p) ¥ copyin( a->m[0:matlen * a->mnums]) ¥ copyin( b->m[0:matlen * b->mnums]) ¥ copyin( c->m[0:matlen * c->mnums]) ¥ copyin(wrk1->m[0:matlen * wrk1->mnums]) ¥ copyin(wrk2->m[0:matlen * wrk2->mnums]) ¥ copyin( bnd->m[0:matlen * bnd->mnums]) ¥ copy ( p->m[0:matlen * p->mnums]) for(n=0 ; n<nn ; ++n){ gosa = 0.0; #pragma acc kernels loop gang #pragma acc loop gang independent for(i=1 ; i<imax-1 ; i++) #pragma acc loop worker independent for(j=1 ; j<jmax-1 ; j++) #pragma acc loop vector(256) reduction(+:gosa) ¥ independent for(k=1 ; k<kmax-1 ; k++){ s0= MR(a,0,i,j,k)*MR(p,0,i+1,j, k); ...; • static版と異なり、構造体 (SoA) で管理されてい るためデータコピーが複雑 1. 構造体変数をコピー 2. 構造体メンバー変数である配列をコピー • i, jループと最内ループのkループ間で依存関係があ ると認識されてしまう • 実際は存在しない(並列化可能) • loop independentを指定する • 依存関係がないことを明示して並列化を促進