Closed h-murai closed 7 years ago
コメントですが、ループ文を2回書くのは面倒なので、糖衣構文もあってもよいと思いました。
!$xmp reflect (a) async(10)
!$xmp loop on t(i) olap(-1:-1) wait_async(10) edge(1:1)
do i = 1, 100
a(i) = ...
end do
!$xmp reflect (a) async(10)
!$xmp loop on t(i) peel_and_wait(1:1, 10)
do i = 1, 100
a(i) = ...
end do
↓
!$xmp reflect (a) async(10)
!$xmp loop on t(i) expand(-1:-1)
do i = 1, 100
a(i) = ...
end do
!$xmp wait_async(10)
!$xmp loop on t(i) margin(1:1)
do i = 1, 100
a(i) = ...
end do
margin節でも負の値を指定できるようにする。
正の場合、領域の外側(シャドウ)の境界部分 → シャドウの初期化に使える。 負の場合、内側の境界部分。 上のサンプルコードの指定方法とは逆。
元のループ範囲の外側まで拡張することを示す修飾子として、unboundはどうか?
!$xmp loop on t(i) expand(/unbound/1:1)
do i = 1, 100
a(i) = ...
end do
分割されたループの本来の上下限を拡大または縮小するolap節(仮称)と、境界面のみを指定するedge節(仮称)があれば、テンポラルブロッキング、内点に対する演算と通信のオーバラップを書ける。
以下は、演算と通信のオーバラップの例。