SlideShare a Scribd company logo
1 of 16
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だけじゃない超効率計算手法
20220202
2
様々なステンシル計算
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])
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に再利用性無
浮動小数点演算を使うステンシル計算
20220101
5
再利用可能ライン: 13 本中 6 本
FD6の写像
FD6
20220101
6
FD6の写像
青枠:x方向に並ぶロード
紫 :y方向に並ぶロード
赤枠:z方向に並ぶロード
20220101
7
FD6の写像
FD6
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
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
20220101
10
FD6の写像
20220101
11
ライトフィールド画像処理
Refocus All in Focus Perspective Shift
20220101
12
ライトフィールド画像処理
20220101
13
ライトフィールド画像処理
レンダリング
距離画像生成
20220101
14
ライトフィールド画像処理(距離画像生成)
20220101
15
ライトフィールド画像処理(距離画像生成)
20220202
16
今回のおさらい

More Related Content

Similar to PBL1-v1-006j.pptx

お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかKousuke Ebihara
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPUgos-k
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressAkinari Tsugo
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519Yasuhiro Ishii
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目hecomi
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!Masami Ichikawa
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化翔新 史
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another sideKiwamu Okabe
 
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくるデジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくるAtsushi Tadokoro
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題にmagoroku Yamamoto
 
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続V6でJIT・部分適用・継続
V6でJIT・部分適用・継続7shi
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)MITSUNARI Shigeo
 
Moony li pacsec-1.5_j4-truefinal
Moony li pacsec-1.5_j4-truefinalMoony li pacsec-1.5_j4-truefinal
Moony li pacsec-1.5_j4-truefinalPacSecJP
 

Similar to PBL1-v1-006j.pptx (20)

お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another side
 
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくるデジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
Bluespec @waseda(PDF)
Bluespec @waseda(PDF)Bluespec @waseda(PDF)
Bluespec @waseda(PDF)
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
 
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続V6でJIT・部分適用・継続
V6でJIT・部分適用・継続
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
 
Moony li pacsec-1.5_j4-truefinal
Moony li pacsec-1.5_j4-truefinalMoony li pacsec-1.5_j4-truefinal
Moony li pacsec-1.5_j4-truefinal
 

More from NAIST

PBL1-v1-200j.pptx
PBL1-v1-200j.pptxPBL1-v1-200j.pptx
PBL1-v1-200j.pptxNAIST
 
PBL1-v1-200e.pptx
PBL1-v1-200e.pptxPBL1-v1-200e.pptx
PBL1-v1-200e.pptxNAIST
 
PBL1-v1-100j.pptx
PBL1-v1-100j.pptxPBL1-v1-100j.pptx
PBL1-v1-100j.pptxNAIST
 
PBL1-v1-100e.pptx
PBL1-v1-100e.pptxPBL1-v1-100e.pptx
PBL1-v1-100e.pptxNAIST
 
PBL1-v1-014j.pptx
PBL1-v1-014j.pptxPBL1-v1-014j.pptx
PBL1-v1-014j.pptxNAIST
 
PBL1-v1-014e.pptx
PBL1-v1-014e.pptxPBL1-v1-014e.pptx
PBL1-v1-014e.pptxNAIST
 
PBL1-v1-013j.pptx
PBL1-v1-013j.pptxPBL1-v1-013j.pptx
PBL1-v1-013j.pptxNAIST
 
PBL1-v1-013e.pptx
PBL1-v1-013e.pptxPBL1-v1-013e.pptx
PBL1-v1-013e.pptxNAIST
 
PBL1-v1-012j.pptx
PBL1-v1-012j.pptxPBL1-v1-012j.pptx
PBL1-v1-012j.pptxNAIST
 
PBL1-v1-012e.pptx
PBL1-v1-012e.pptxPBL1-v1-012e.pptx
PBL1-v1-012e.pptxNAIST
 
PBL1-v1-011j.pptx
PBL1-v1-011j.pptxPBL1-v1-011j.pptx
PBL1-v1-011j.pptxNAIST
 
PBL1-v1-005j.pptx
PBL1-v1-005j.pptxPBL1-v1-005j.pptx
PBL1-v1-005j.pptxNAIST
 
PBL1-v1-004j.pptx
PBL1-v1-004j.pptxPBL1-v1-004j.pptx
PBL1-v1-004j.pptxNAIST
 
PBL1-v1-002j.pptx
PBL1-v1-002j.pptxPBL1-v1-002j.pptx
PBL1-v1-002j.pptxNAIST
 
PBL1-v1-001j.pptx
PBL1-v1-001j.pptxPBL1-v1-001j.pptx
PBL1-v1-001j.pptxNAIST
 
PBL1-v0-200j.pptx
PBL1-v0-200j.pptxPBL1-v0-200j.pptx
PBL1-v0-200j.pptxNAIST
 

More from NAIST (16)

PBL1-v1-200j.pptx
PBL1-v1-200j.pptxPBL1-v1-200j.pptx
PBL1-v1-200j.pptx
 
PBL1-v1-200e.pptx
PBL1-v1-200e.pptxPBL1-v1-200e.pptx
PBL1-v1-200e.pptx
 
PBL1-v1-100j.pptx
PBL1-v1-100j.pptxPBL1-v1-100j.pptx
PBL1-v1-100j.pptx
 
PBL1-v1-100e.pptx
PBL1-v1-100e.pptxPBL1-v1-100e.pptx
PBL1-v1-100e.pptx
 
PBL1-v1-014j.pptx
PBL1-v1-014j.pptxPBL1-v1-014j.pptx
PBL1-v1-014j.pptx
 
PBL1-v1-014e.pptx
PBL1-v1-014e.pptxPBL1-v1-014e.pptx
PBL1-v1-014e.pptx
 
PBL1-v1-013j.pptx
PBL1-v1-013j.pptxPBL1-v1-013j.pptx
PBL1-v1-013j.pptx
 
PBL1-v1-013e.pptx
PBL1-v1-013e.pptxPBL1-v1-013e.pptx
PBL1-v1-013e.pptx
 
PBL1-v1-012j.pptx
PBL1-v1-012j.pptxPBL1-v1-012j.pptx
PBL1-v1-012j.pptx
 
PBL1-v1-012e.pptx
PBL1-v1-012e.pptxPBL1-v1-012e.pptx
PBL1-v1-012e.pptx
 
PBL1-v1-011j.pptx
PBL1-v1-011j.pptxPBL1-v1-011j.pptx
PBL1-v1-011j.pptx
 
PBL1-v1-005j.pptx
PBL1-v1-005j.pptxPBL1-v1-005j.pptx
PBL1-v1-005j.pptx
 
PBL1-v1-004j.pptx
PBL1-v1-004j.pptxPBL1-v1-004j.pptx
PBL1-v1-004j.pptx
 
PBL1-v1-002j.pptx
PBL1-v1-002j.pptxPBL1-v1-002j.pptx
PBL1-v1-002j.pptx
 
PBL1-v1-001j.pptx
PBL1-v1-001j.pptxPBL1-v1-001j.pptx
PBL1-v1-001j.pptx
 
PBL1-v0-200j.pptx
PBL1-v0-200j.pptxPBL1-v0-200j.pptx
PBL1-v0-200j.pptx
 

PBL1-v1-006j.pptx

  • 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だけじゃない超効率計算手法
  • 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. 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に再利用性無 浮動小数点演算を使うステンシル計算
  • 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