Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

PBL1-v1-006j.pptx

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Prochain SlideShare
PBL1-v1-003j.pptx
PBL1-v1-003j.pptx
Chargement dans…3
×

Consultez-les par la suite

1 sur 16 Publicité

PBL1-v1-006j.pptx

Télécharger pour lire hors ligne

IMAX3: Amazing Dataflow-Centric CGRA and its Applications
I present this slide to all hungry engineers who are tired of CPU, GPU, FPGA, tensor core, AI core, who want some challenging one with no black box inside, and who want to improve by themselves.

IMAX3: Amazing Dataflow-Centric CGRA and its Applications
I present this slide to all hungry engineers who are tired of CPU, GPU, FPGA, tensor core, AI core, who want some challenging one with no black box inside, and who want to improve by themselves.

Publicité
Publicité

Plus De Contenu Connexe

Similaire à PBL1-v1-006j.pptx (20)

Publicité

Plus récents (20)

PBL1-v1-006j.pptx

  1. 1. CPU GPU Ultimate CGRA w/ high-speed compiler CGRA for Energy-efficient Cryptography Beyond-Neuromorphic Systems Non-Deterministic Computing 1 ナレータ VOICEVOX:もち子(cv 明日葉よもぎ) はらぺこエンジニアに贈るCGRAの世界2022 (6. 高次数ステンシル計算編) スパコンからIoTまで 省エネ社会に AI+BCだけじゃない超効率計算手法
  2. 2. 20220202 2 様々なステンシル計算
  3. 3. 20220101 3 B[x, y, z] = C1 * A[x, y, z] + C2 * (A[x ± 1, y, z] + A[x, y ± 1, z] + A[x, y, z ± 1]) jacobi FD6 ヤコビ法 ● 格子点7 ● x軸方向に見て5ライン ● 乗算2、加算6 偏微分方程式 (次数6) ● 格子点19 ● x軸方向に見て13ライン ● 乗算4、加算18 B[x, y, z] = C1 * A[x, y, z] + C2 * (A[x ± 1, y, z] + A[x, y ± 1, z]+ A[x, y, z ± 1]) + C3 * (A[x ± 2, y, z] + A[x, y ± 2, z]+ A[x, y, z ± 2]) + C4 * (A[x ± 3, y, z] + A[x, y ± 3, z]+ A[x, y, z ± 3]) 浮動小数点演算を使うステンシル計算 wave2d 2次元波動方程式 ● 格子点5 ● x軸方向に見て3ライン ● 乗算4、加算6 z[x,y,2] = 2.0 * z[x,y,1] – z[x,y,0] + c * c * dt *dt / (dd * dd) * (z[x±1,y,1] + z[x,y±1,1] – 4.0 * z[x,y,1])
  4. 4. 20220101 4 D[x,y,z] = C[x,y,z] - A0 * B[x,y,z] - A1 * ( B[x±1,y,z] + B[x,y±1,z]] + B[x,y,z±1] ) - A2 * ( B[x±1,y±1,z] + B[x,y±1,z±1] + B[x±1,y,z±1] ) - A3 * ( B[x±1,y±1,z±1] ) RESID 3次元ポテンシャル場マルチグリッドソルバ ● 格子点27 ● x軸方向に見て9ライン ● 乗算4回、加算27回 GRAPES 大気シミュレーション ● 格子点19 ● x軸方向に見て9ライン ● 乗算18回、加算18回 ● 配列Aに再利用性無 浮動小数点演算を使うステンシル計算
  5. 5. 20220101 5 再利用可能ライン: 13 本中 6 本 FD6の写像 FD6
  6. 6. 20220101 6 FD6の写像 青枠:x方向に並ぶロード 紫 :y方向に並ぶロード 赤枠:z方向に並ぶロード
  7. 7. 20220101 7 FD6の写像 FD6
  8. 8. 20220101 8 FD6の別解 青:x方向に並ぶロード 紫:y方向に並ぶロード 赤:z方向に並ぶロード 緑:中央 Z+3 Z-3 Z+2 Z-2 Z+1 Z-1 X+3 X-3 Y+3 Y-3 X+2 X-2 Y+2 Y-2 X+1 X-1 Y+1 Y-1 XYZ
  9. 9. 20220101 9 FD6の写像 //EMAX5A begin fd6 mapdist=11 for (CHIP=0; CHIP<NCHIP; CHIP++) { for (INIT1=1,LOOP1=RMGRP,roofs=0-AWD*4; LOOP1--; INIT1=0) { for (INIT0=1,LOOP0=WD-PAD*2,coofs=(PAD-1)*4; LOOP0--; INIT0=0) { exe(OP_ADD, &coofs, INIT0?coofs:coofs, EXP_H3210, 4, EXP_H3210, 0, EXP_H3210, OP_AND, 0x000ffffffffLL, OP_NOP, 0); /* stage#0 */ exe(OP_ADD, &roofs, roofs, EXP_H3210, INIT0?WD*4:0, EXP_H3210, 0, EXP_H3210, OP_AND, 0x000ffffffffLL, OP_NOP, 0); /* stage#0 */ exe(OP_ADD3, &bofs, btop, EXP_H3210, roofs, EXP_H3210, coofs, EXP_H3210, OP_AND, 0x0ffffffffffLL, OP_NOP, 0); /* stage#1 */ exe(OP_ADD3, &cofs, ctop, EXP_H3210, roofs, EXP_H3210, coofs, EXP_H3210, OP_AND, 0x0ffffffffffLL, OP_NOP, 0); /* stage#1 */ /*map0*/ mop(OP_LDWR, &BR[2][0][1], bofs, (0-WDHT*3)*4, MSK_D0, brow00, WD*RMGRP, 0, 0, browp0, WD*RMGRP); /* stage#2 */ mop(OP_LDWR, &BR[2][2][1], bofs, (0+WDHT*3)*4, MSK_D0, brow05, WD*RMGRP, 0, 0, browp5, WD*RMGRP); /* stage#2 */ exe(OP_FAD, &r3, BR[2][0][1], EXP_H3210, BR[2][2][1], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#3 */ mop(OP_LDWR, &BR[3][0][1], bofs, (0-WDHT*2)*4, MSK_D0, brow01, WD*RMGRP, 0, 0, browp1, WD*RMGRP); /* stage#3 */ mop(OP_LDWR, &BR[3][2][1], bofs, (0+WDHT*2)*4, MSK_D0, brow04, WD*RMGRP, 0, 0, browp4, WD*RMGRP); /* stage#3 */ exe(OP_FAD, &r2, BR[3][0][1], EXP_H3210, BR[3][2][1], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#4 */ mop(OP_LDWR, &BR[4][0][1], bofs, (0-WDHT*1)*4, MSK_D0, brow02, WD*RMGRP, 0, 0, browp2, WD*RMGRP); /* stage#4 */ mop(OP_LDWR, &BR[4][2][1], bofs, (0+WDHT*1)*4, MSK_D0, brow03, WD*RMGRP, 0, 0, browp3, WD*RMGRP); /* stage#4 */ exe(OP_FAD, &r1, BR[4][0][1], EXP_H3210, BR[4][2][1], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#5 */ mop(OP_LDWR, &BR[5][0][1], bofs, (0 -WD*3)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#5 */ mop(OP_LDWR, &BR[5][0][0], bofs, (0 +WD*3)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#5 */ mop(OP_LDWR, &BR[5][1][1], bofs, (0 -3)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#5 */ mop(OP_LDWR, &BR[5][1][0], bofs, (0 +3)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#5 */ exe(OP_FAD, &r13,BR[5][0][1], EXP_H3210, BR[5][0][0], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#6 */ exe(OP_FAD, &r23,BR[5][1][1], EXP_H3210, BR[5][1][0], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#6 */ mop(OP_LDWR, &BR[6][0][1], bofs, (0 -WD*2)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#6 */ mop(OP_LDWR, &BR[6][0][0], bofs, (0 +WD*2)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#6 */ mop(OP_LDWR, &BR[6][1][1], bofs, (0 -2)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#6 */ mop(OP_LDWR, &BR[6][1][0], bofs, (0 +2)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#6 */ exe(OP_FAD, &r12,BR[6][0][1], EXP_H3210, BR[6][0][0], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#7 */ exe(OP_FAD, &r22,BR[6][1][1], EXP_H3210, BR[6][1][0], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#7 */ exe(OP_FAD, &r23,r13, EXP_H3210, r23, EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#7 */ mop(OP_LDWR, &BR[7][0][1], bofs, (0 -WD*1)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#7 */ mop(OP_LDWR, &BR[7][0][0], bofs, (0 +WD*1)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#7 */ mop(OP_LDWR, &BR[7][1][1], bofs, (0 -1)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#7 */ mop(OP_LDWR, &BR[7][1][0], bofs, (0 +1)*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#7 */ exe(OP_FAD, &r11,BR[7][0][1], EXP_H3210, BR[7][0][0], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#8 */ exe(OP_FAD, &r21,BR[7][1][1], EXP_H3210, BR[7][1][0], EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#8 */ exe(OP_FAD, &r22,r12, EXP_H3210, r22, EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#8 */ exe(OP_FAD, &r3, r23, EXP_H3210, r3, EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#8 */ mop(OP_LDWR, &BR[8][0][1], bofs, (0 )*4, MSK_D0, brow06, WD*(RMGRP+PAD*2), 0, 0, browp6, WD*(RMGRP+PAD*2)); /* stage#8 */ exe(OP_FML, &r10,BR[8][0][1], EXP_H3210, I1, EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#9 */ exe(OP_FAD, &r21,r11, EXP_H3210, r21, EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#9 */ exe(OP_FAD, &r2, r22, EXP_H3210, r2, EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#9 */ exe(OP_FMA, &r13,r10, EXP_H3210, r3, EXP_H3210, I4, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#10 */ exe(OP_FAD, &r1, r21, EXP_H3210, r1, EXP_H3210, 0, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#10 */ exe(OP_FMA, &r12,r13, EXP_H3210, r2, EXP_H3210, I3, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#11 */ exe(OP_FMA, &r11,r12, EXP_H3210, r1, EXP_H3210, I2, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#12 */ mop(OP_STWR, &r11, cofs, (0 )*4, MSK_D0, crow0, WD*RMGRP, 0, 0, crowp, WD*RMGRP); /* stage#12 */ } } } //EMAX5A end
  10. 10. 20220101 10 FD6の写像
  11. 11. 20220101 11 ライトフィールド画像処理 Refocus All in Focus Perspective Shift
  12. 12. 20220101 12 ライトフィールド画像処理
  13. 13. 20220101 13 ライトフィールド画像処理 レンダリング 距離画像生成
  14. 14. 20220101 14 ライトフィールド画像処理(距離画像生成)
  15. 15. 20220101 15 ライトフィールド画像処理(距離画像生成)
  16. 16. 20220202 16 今回のおさらい

×