XcalableMP / Specification

Specification of XcalableMP
0 stars 0 forks source link

[C]Combined DirectiveをXMP/Cでも適用させる #51

Closed mnakao closed 5 years ago

mnakao commented 8 years ago

XMP/Fでは下記のように、複数の配列に対して一行でalignすることが可能である(他にもnodesなども可能。詳しくは仕様書v1.2.1の3.1.2節(p15)を参照)

real a(100), b(100), c(100)
!$xmp align (i) with t(i) :: a, b, c

これを、例えば下記のようにXMP/Cでも適用したい。

double a[100], b[100], c[100];
#pragma xmp align [i] with t[i] :: a, b, c

XMP/Fのような記法である必要はないが、XMP/Cにおいても一行で複数の配列に対して設定が行えると、コードが簡潔になり、またコード量も減るため、便利であると考える。

また、XMP/Fではshadowを追加することもできている。

real a(100), b(100), c(100)
!$xmp align (i) with t(i), shadow (1) :: a, b, c
mnakao commented 6 years ago

C言語のように記述するには、下記のような記述方法が考えられる。 前スレッドに記述したXMP/Fの記法をそのまま利用したXMP/Cの記法と比較して冗長な面もあるが、C言語のユーザにとってはよりわかりやすいと考えられる。

double a[100], b[100], c[100];
#pragma xmp align a[i], b[i], c[i] with t[i]

また、この記法では、前スレッドの記法では不可能な、異なる形状を持つ分散配列を1行で定義できる。 下記の例では、配列a[]の形状は他の2つと異なっている。

double a[100][100], b[100], c[100];
#pragma xmp align a[i][*], b[i], c[i] with t[i]

また、本提案は#52にも関係していて、shadowも定義する場合は、下記のようになる。

double a[100], b[100], c[100];
#pragma xmp align a[i], b[i], c[i] with t[i]; shadow a[1], b[1], c[1]
mnakao commented 6 years ago
double a[100], b[100], c[100];
#pragma xmp align [i] with t[i] :: a, b, c

で仕様案を考える。

mnakao commented 5 years ago

仕様書案を添付する。赤枠で囲ったところが、現在との差分である。 51.pdf