Open mnakao opened 8 years ago
報告者:村井
タスクレットに関する要検討事項:OpenMP のタスクと比較したとき、
報告者:村井
タスクレットの同期について:
xmp barrier は暗黙の taskletwait または taskletbarrier を含むのか?
報告者:村井
要検討事項:
第24回XMP規格部会(2016/5/30)で用いた資料を添付する。
提案モデルに基づくコード例
#pragma xmp node P(4,4)
#pragma xmp template T(0:nt-1,0:nt-1)
#pragma xmp distribute T(block,block) onto P
double A[nt][nt][ts*ts];
#pragma xmp align A[j][i][*] with T(j,i)
xmp_event_t e0[nt][nt];
xmp_event_t e1[nt][nt];
xmp_event_t e2[nt][nt];
xmp_event_t e3[nt][nt];
#pragma xmp align e0[j][i] with T(j,i)
#pragma xmp align e1[j][i] with T(j,i)
#pragma xmp align e2[j][i] with T(j,i)
#pragma xmp align e3[j][i] with T(j,i)
void func(){
xmp_disable_event(e0[:][:]);
xmp_disable_event(e1[:][:]);
xmp_disable_event(e2[:][:]);
xmp_disable_event(e3[:][:]);
xmp_enable_event(e2[0][:]);
xmp_enable_event(e3[0][0]);
#pragma xmp taskletloop (k) on T(k,k) wait(e3[k][k]) post(e0[k][k]) grainsize(1)
for (int k = 0; k < nt; k++){
xmp_potrf(A[k][k], ts, ts);
}
#pragma xmp taskletloop (k,i) on T(k,i) wait(e0[k][k], e2[k][i]) post(e1[k][i]) grainsize(1,1) private(T)
for (int k = 0; k < nt; k++){
for (int i = k + 1; i < nt; i++){
double T[ts*ts];
#pragma xmp gmove in
T[:] = A[k][k][:];
xmp_trsm(T, A[k][i], ts, ts);
}
}
for (int k = 0; k < nt; k++){
#pragma xmp taskletloop (j,i) on T(j,i) wait(e1[k][i], e1[k][j]) inpost(e2[j][i]) grainsize(1,1) private(T1, T2)
for (int i = k + 1; i < nt; i++){
for (int j = k + 1; j < i; j++){
double T1[ts*ts], T2[ts*ts];
#pragma xmp gmove in
T1[:] = A[k][i][:];
#pragma xmp gmove in
T2[:] = A[k][j][:];
xmp_gemm(T1, T2, A[j][i], ts, ts);
}
}
}
for (int k = 0; k < nt; k++){
#pragma xmp taskletloop (i) on T(i,i) wait(e1[k][i]) post(e3[i][i]) grainsize(1) private(T)
for (int i = k + 1; i < nt; i++){
double T[ts*ts];
#pragma xmp gmove in
T[:] = A[k][i][:];
xmp_syrk(T, A[i][i], ts, ts);
}
}
#pragma xmp taskletwait
}
2016年9月29日の規格部会において、以下の方針を決定。
報告者:村井
タスクレットとスレッドという概念が導入される XMP2.0 へ向け、実行モデルを修正しました。
従来は「ノード」が実行主体であったのに対し、
という定義に基づいたモデルとしています(基本的に OpenMP の真似です)。
一方、生成されたタスクレットのスケジュールについてはまだ議論されていませんが、(OpenMPのような)あまり複雑なルールにはしたくないので、taskletwait (またはその効果を持つ他の指示文)の箇所で実行されるという程度でいいかと考えています。
spec_tasklet.txt