SlideShare uma empresa Scribd logo
1 de 12
CPU GPU
Ultimate CGRA w/ high-speed compiler
CGRA for Energy-efficient Cryptography
Beyond-Neuromorphic Systems
Non-Deterministic Computing
1
ナレータ VOICEVOX:もち子(cv 明日葉よもぎ)
はらぺこエンジニアに贈るCGRAの世界2022
(2. 画像フィルタ初級編)
スパコンからIoTまで 省エネ社会に
AI+BCだけじゃない超効率計算手法
/* SCREEN=WD*HT */
for (row=0; row<HT; row++) {
for (col=0; col<WD; col++) {
pix = in[row*WD+col];
r = t[ pix>>24 ];
g = t[256+((pix>>16)&255)];
b = t[512+((pix>> 8)&255)];
out[row*WD+col]=r<<24 | g<<16 | b<<8;
} }
20220202
2
簡単な tone_curveをC言語で書く
Load →
Store ←
Color map tables
/* SCREEN=WD*HT */
for (row=0; row<HT; row++) {
//EMAX5A begin tone_curve mapdist=0
for (LOOP0=WD, col=-4; LOOP0--;) {
col += 4;
pix = in[row*WD+col/4];
r = t[ pix>>24 ];
g = t[256+((pix>>16)&255)];
b = t[512+((pix>> 8)&255)];
out[row*WD+col/4]=r<<24 | g<<16 | b<<8;
}
//EMAX5A end
}
//EDMAX5A drain_dirty_lmm
20220202
3
IMAXのループ構造記述に合わせる
Load →
Store ←
Color map tables
/* SCREEN=WD*HT */
for (row=0; row<HT; row++) {
for (col=0; col<WD; col++) {
pix = in[row*WD+col];
r = t[ pix>>24 ];
g = t[256+((pix>>16)&255)];
b = t[512+((pix>> 8)&255)];
out[row*WD+col]=r<<24 | g<<16 | b<<8;
} }
Load →
Store ←
Color map tables
/* SCREEN=WD*HT */
for (row=0; row<HT; row++) {
//EMAX5A begin tone_curve mapdist=0
for (LOOP0=WD, col=-4; LOOP0--;) {
col += 4;
mop(OP_LDWR, &pix, in_row_WD, col, MSK_W0, in, WD); //pix = in[row*WD+col/4];
mop(OP_LDUBR, &r, t_r, pix, MSK_B3, t, 256*3/4); //r = t[ pix>>24 ];
mop(OP_LDUBR, &g, t_g, pix, MSK_B2, t, 256*3/4); //g = t[256+((pix>>16)&255)];
mop(OP_LDUBR, &b, t_b, pix, MSK_B1, t, 256*3/4); //b = t[512+((pix>> 8)&255)];
out[row*WD+col/4]=r<<24|g<<16|b<<8;
}
//EMAX5A end
}
//EDMAX5A drain_dirty_lmm
20220202
4
IMAXの高機能関数記述に書き換えながらデバッグする
Load →
Store ←
Color map tables
/* SCREEN=WD*HT */
for (row=0; row<HT; row++) {
//EMAX5A begin tone_curve mapdist=0
for (LOOP0=WD, col=-4; LOOP0--;) {
exe(OP_ADD, &col, col, EXP_H3210, 4, EXP_H3210, 0, EXP_H3210); //col += 4;
mop(OP_LDWR, &pix, in_row_WD, col, MSK_W0, in, WD); //pix = in[row*WD+col/4];
mop(OP_LDUBR, &r, t_r, pix, MSK_B3, t, 256*3/4); //r = t[ pix>>24 ];
mop(OP_LDUBR, &g, t_g, pix, MSK_B2, t, 256*3/4); //g = t[256+((pix>>16)&255)];
mop(OP_LDUBR, &b, t_b, pix, MSK_B1, t, 256*3/4); //b = t[512+((pix>> 8)&255)];
exe(OP_MMRG, &out, r, EXP_H3210, g, EXP_H3210, b, EXP_H3210);
mop(OP_STWR, &out, out_row_WD, col, MSK_W0); //out[row*WD+col/4]=r<<24|g<<16|b<<8;
}
//EMAX5A end
}
//EDMAX5A drain_dirty_lmm
20220202
5
全部書き換えたら逐次実行プログラムとしてデバッグ
Load →
Store ←
Color map tables
20220202
6
データの配置と流れの観点から見直す
Load →
Store ←
Color map tables
/* SCREEN=WD*HT */
for (row=0; row<HT; row++) {
//EMAX5A begin tone_curve mapdist=0
for (LOOP0=WD, col=-4; LOOP0--;) {
exe(OP_ADD, &col, col, EXP_H3210, 4, EXP_H3210, 0, EXP_H3210); //col += 4;
mop(OP_LDWR, &pix, in_row_WD, col, MSK_W0, in, WD); //pix = in[row*WD+col/4];
mop(OP_LDUBR, &r, t_r, pix, MSK_B3, t, 256*3/4); //r = t[ pix>>24 ];
mop(OP_LDUBR, &g, t_g, pix, MSK_B2, t, 256*3/4); //g = t[256+((pix>>16)&255)];
mop(OP_LDUBR, &b, t_b, pix, MSK_B1, t, 256*3/4); //b = t[512+((pix>> 8)&255)];
exe(OP_MMRG, &out, r, EXP_H3210, g, EXP_H3210, b, EXP_H3210);
mop(OP_STWR, &out, out_row_WD, col, MSK_W0); //out[row*WD+col/4]=r<<24|g<<16|b<<8;
}
//EMAX5A end
}
//EDMAX5A drain_dirty_lmm
20220202
7
コンパイル結果
Load →
Store ←
Color map tables
int loop=WD/2;
//EMAX5A begin tone_curve mapdist=0
while (loop--) {
mop(OP_LDR, &BR[0][1][1], in++, 0LL, MSK_D0, in, WD, 0, 0, NULL, 0);
mop(OP_LDBR, &BR[1][1][1], t1, BR[0][1][1], MSK_B3, t, 256*3/4, 0, 0, NULL, 0);
mop(OP_LDBR, &BR[1][1][0], t1, BR[0][1][1], MSK_B7, t, 256*3/4, 0, 0, NULL, 0);
mop(OP_LDBR, &BR[1][2][1], t2, BR[0][1][1], MSK_B2, t, 256*3/4, 0, 0, NULL, 0);
mop(OP_LDBR, &BR[1][2][0], t2, BR[0][1][1], MSK_B6, t, 256*3/4, 0, 0, NULL, 0);
mop(OP_LDBR, &BR[1][3][1], t3, BR[0][1][1], MSK_B1, t, 256*3/4, 0, 0, NULL, 0);
mop(OP_LDBR, &BR[1][3][0], t3, BR[0][1][1], MSK_B5, t, 256*3/4, 0, 0, NULL, 0);
exe(OP_CCAT, &r1, BR[1][1][0], EXP_H3210, BR[1][1][1], EXP_H3210, 0, EXP_H3210,OP_NOP,0,OP_NOP,0);
exe(OP_CCAT, &r2, BR[1][2][0], EXP_H3210, BR[1][2][1], EXP_H3210, 0, EXP_H3210,OP_NOP,0,OP_NOP,0);
exe(OP_CCAT, &r3, BR[1][3][0], EXP_H3210, BR[1][3][1], EXP_H3210, 0, EXP_H3210,OP_NOP,0,OP_NOP,0);
exe(OP_MMRG, &r0, r1, EXP_H3210, r2, EXP_H3210, r3, EXP_H3210,OP_NOP,0,OP_NOP,0);
mop(OP_STR, &r0, out++, 0LL, MSK_D0, out, WD, 0, 0, NULL, 0);
}
//EMAX5A end
20220202
8
2way SIMD版
SIMD Load →
SIMD Store ←
Color map tables
20220202
9
2way SIMD版
CCATが増えた
ロード数が3から6に増えた
//EMAX5A begin tone_curve mapdist=0
for (CHIP=0; CHIP<NCHIP; CHIP++) { /* output channels are parallelized by multi-chip (OC/#chip) */
/*2*/for (INIT1=1,LOOP1=RMGRP,rofs=0-WD*4; LOOP1--; INIT1=0) { /* stage#0 *//* mapped to FOR() on BR[63][1][0] */
/*1*/for (INIT0=1,LOOP0=WD,cofs=0-4; LOOP0--; INIT0=0) { /* stage#0 *//* mapped to FOR() on BR[63][0][0] */
exe(OP_ADD, &cofs, INIT0?cofs:cofs, EXP_H3210, 4, EXP_H3210, 0LL, EXP_H3210, OP_AND, 0x00000000ffffffffLL, OP_NOP, 0LL); /* stage#0 */
exe(OP_ADD, &rofs, rofs, EXP_H3210, INIT0?WD*4:0, EXP_H3210, 0LL, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#0 */
exe(OP_ADD, &pofs, rofs, EXP_H3210, cofs, EXP_H3210, 0LL, EXP_H3210, OP_AND, 0x00000000ffffffffLL, OP_NOP, 0LL); /* stage#1 */
/*map0*/
mop(OP_LDWR, 1, &BR[2][1][1], (Ull)rtop0[CHIP], pofs, MSK_D0, (Ull)rtop0[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#2 */
mop(OP_LDUBR, 1, &BR[3][1][1], (Ull)t1, BR[2][1][1], MSK_B3, (Ull)t1, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#3 */
mop(OP_LDUBR, 1, &BR[3][2][1], (Ull)t2, BR[2][1][1], MSK_B2, (Ull)t2, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#3 */
mop(OP_LDUBR, 1, &BR[3][3][1], (Ull)t3, BR[2][1][1], MSK_B1, (Ull)t3, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#3 */
exe(OP_MMRG, &r1, BR[3][1][1], EXP_H3210, BR[3][2][1], EXP_H3210, BR[3][3][1], EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#3 */
mop(OP_STWR, 3, &r1, (Ull)dtop0[CHIP], pofs, MSK_D0, (Ull)dtop0[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#3 */
/*map1*/
mop(OP_LDWR, 1, &BR[4][1][1], (Ull)rtop1[CHIP], pofs, MSK_D0, (Ull)rtop1[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#4 */
mop(OP_LDUBR, 1, &BR[5][1][1], (Ull)t1, BR[4][1][1], MSK_B3, (Ull)t1, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#5 */
mop(OP_LDUBR, 1, &BR[5][2][1], (Ull)t2, BR[4][1][1], MSK_B2, (Ull)t2, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#5 */
mop(OP_LDUBR, 1, &BR[5][3][1], (Ull)t3, BR[4][1][1], MSK_B1, (Ull)t3, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#5 */
exe(OP_MMRG, &r1, BR[5][1][1], EXP_H3210, BR[5][2][1], EXP_H3210, BR[5][3][1], EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#5 */
mop(OP_STWR, 3, &r1, (Ull)dtop1[CHIP], pofs, MSK_D0, (Ull)dtop1[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#5 */
/*map2*/
mop(OP_LDWR, 1, &BR[6][1][1], (Ull)rtop2[CHIP], pofs, MSK_D0, (Ull)rtop2[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#6 */
mop(OP_LDUBR, 1, &BR[7][1][1], (Ull)t1, BR[6][1][1], MSK_B3, (Ull)t1, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#7 */
mop(OP_LDUBR, 1, &BR[7][2][1], (Ull)t2, BR[6][1][1], MSK_B2, (Ull)t2, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#7 */
mop(OP_LDUBR, 1, &BR[7][3][1], (Ull)t3, BR[6][1][1], MSK_B1, (Ull)t3, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#7 */
exe(OP_MMRG, &r1, BR[7][1][1], EXP_H3210, BR[7][2][1], EXP_H3210, BR[7][3][1], EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#7 */
mop(OP_STWR, 3, &r1, (Ull)dtop2[CHIP], pofs, MSK_D0, (Ull)dtop2[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#7 */
/*map3*/
mop(OP_LDWR, 1, &BR[8][1][1], (Ull)rtop3[CHIP], pofs, MSK_D0, (Ull)rtop3[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#8 */
mop(OP_LDUBR, 1, &BR[9][1][1], (Ull)t1, BR[8][1][1], MSK_B3, (Ull)t1, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#9 */
mop(OP_LDUBR, 1, &BR[9][2][1], (Ull)t2, BR[8][1][1], MSK_B2, (Ull)t2, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#9 */
mop(OP_LDUBR, 1, &BR[9][3][1], (Ull)t3, BR[8][1][1], MSK_B1, (Ull)t3, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#9 */
exe(OP_MMRG, &r1, BR[9][1][1], EXP_H3210, BR[9][2][1], EXP_H3210, BR[9][3][1], EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#9 */
mop(OP_STWR, 3, &r1, (Ull)dtop3[CHIP], pofs, MSK_D0, (Ull)dtop3[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#9 */
20220202
10
3重ループをIMAXの1回の起動に写像する
実際には、#define tone_core1(r, rm1, rp1) 
などと定義して並べるので、こんな冗長な書き方は不要だが、
最初なのでブラックボックス無しで説明
20220202
11
3重ループをIMAXの1回の起動に写像する
20220202
12
この先を知りたい人は…

Mais conteúdo relacionado

Semelhante a PBL1-v1-002j.pptx

Mango64 u boot 업데이트 하기
Mango64 u boot 업데이트 하기Mango64 u boot 업데이트 하기
Mango64 u boot 업데이트 하기종인 전
 
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321Teddy Hsiung
 
Codigo fuente
Codigo fuenteCodigo fuente
Codigo fuenteBlackD10
 
C++ amp on linux
C++ amp on linuxC++ amp on linux
C++ amp on linuxMiller Lee
 
Windbg랑 친해지기
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기Ji Hun Kim
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
Microcontroladores: programas de CCS Compiler.docx
Microcontroladores: programas de CCS Compiler.docxMicrocontroladores: programas de CCS Compiler.docx
Microcontroladores: programas de CCS Compiler.docxSANTIAGO PABLO ALBERTO
 
Lrz kurs: gpu and mic programming with r
Lrz kurs: gpu and mic programming with rLrz kurs: gpu and mic programming with r
Lrz kurs: gpu and mic programming with rFerdinand Jamitzky
 
Gaztea Tech Robotica 2016
Gaztea Tech Robotica 2016Gaztea Tech Robotica 2016
Gaztea Tech Robotica 2016Svet Ivantchev
 
All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2goMoriyoshi Koizumi
 
Spectre(v1%2 fv2%2fv4) v.s. meltdown(v3)
Spectre(v1%2 fv2%2fv4) v.s. meltdown(v3)Spectre(v1%2 fv2%2fv4) v.s. meltdown(v3)
Spectre(v1%2 fv2%2fv4) v.s. meltdown(v3)Gavin Guo
 
Kernelvm 201312-dlmopen
Kernelvm 201312-dlmopenKernelvm 201312-dlmopen
Kernelvm 201312-dlmopenHajime Tazaki
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and moreBrendan Gregg
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2PVS-Studio
 
eBPF Perf Tools 2019
eBPF Perf Tools 2019eBPF Perf Tools 2019
eBPF Perf Tools 2019Brendan Gregg
 

Semelhante a PBL1-v1-002j.pptx (20)

Mango64 u boot 업데이트 하기
Mango64 u boot 업데이트 하기Mango64 u boot 업데이트 하기
Mango64 u boot 업데이트 하기
 
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
ExperiencesSharingOnEmbeddedSystemDevelopment_20160321
 
Codigo fuente
Codigo fuenteCodigo fuente
Codigo fuente
 
3D-DRESD Lorenzo Pavesi
3D-DRESD Lorenzo Pavesi3D-DRESD Lorenzo Pavesi
3D-DRESD Lorenzo Pavesi
 
C++ amp on linux
C++ amp on linuxC++ amp on linux
C++ amp on linux
 
Windbg랑 친해지기
Windbg랑 친해지기Windbg랑 친해지기
Windbg랑 친해지기
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
20141106 asfws unicode_hacks
20141106 asfws unicode_hacks20141106 asfws unicode_hacks
20141106 asfws unicode_hacks
 
PIC and LCD
PIC and LCDPIC and LCD
PIC and LCD
 
Microcontroladores: programas de CCS Compiler.docx
Microcontroladores: programas de CCS Compiler.docxMicrocontroladores: programas de CCS Compiler.docx
Microcontroladores: programas de CCS Compiler.docx
 
Lrz kurs: gpu and mic programming with r
Lrz kurs: gpu and mic programming with rLrz kurs: gpu and mic programming with r
Lrz kurs: gpu and mic programming with r
 
Gaztea Tech Robotica 2016
Gaztea Tech Robotica 2016Gaztea Tech Robotica 2016
Gaztea Tech Robotica 2016
 
All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2go
 
Spectre(v1%2 fv2%2fv4) v.s. meltdown(v3)
Spectre(v1%2 fv2%2fv4) v.s. meltdown(v3)Spectre(v1%2 fv2%2fv4) v.s. meltdown(v3)
Spectre(v1%2 fv2%2fv4) v.s. meltdown(v3)
 
Explain this!
Explain this!Explain this!
Explain this!
 
Kernelvm 201312-dlmopen
Kernelvm 201312-dlmopenKernelvm 201312-dlmopen
Kernelvm 201312-dlmopen
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
 
eBPF Perf Tools 2019
eBPF Perf Tools 2019eBPF Perf Tools 2019
eBPF Perf Tools 2019
 
C# Assignmet Help
C# Assignmet HelpC# Assignmet Help
C# Assignmet Help
 

Mais de 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-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-010j.pptx
PBL1-v1-010j.pptxPBL1-v1-010j.pptx
PBL1-v1-010j.pptxNAIST
 
PBL1-v1-009j.pptx
PBL1-v1-009j.pptxPBL1-v1-009j.pptx
PBL1-v1-009j.pptxNAIST
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptxNAIST
 
PBL1-v1-007j.pptx
PBL1-v1-007j.pptxPBL1-v1-007j.pptx
PBL1-v1-007j.pptxNAIST
 
PBL1-v1-006j.pptx
PBL1-v1-006j.pptxPBL1-v1-006j.pptx
PBL1-v1-006j.pptxNAIST
 
PBL1-v1-005j.pptx
PBL1-v1-005j.pptxPBL1-v1-005j.pptx
PBL1-v1-005j.pptxNAIST
 
PBL1-v1-003j.pptx
PBL1-v1-003j.pptxPBL1-v1-003j.pptx
PBL1-v1-003j.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
 

Mais de NAIST (18)

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-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-010j.pptx
PBL1-v1-010j.pptxPBL1-v1-010j.pptx
PBL1-v1-010j.pptx
 
PBL1-v1-009j.pptx
PBL1-v1-009j.pptxPBL1-v1-009j.pptx
PBL1-v1-009j.pptx
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptx
 
PBL1-v1-007j.pptx
PBL1-v1-007j.pptxPBL1-v1-007j.pptx
PBL1-v1-007j.pptx
 
PBL1-v1-006j.pptx
PBL1-v1-006j.pptxPBL1-v1-006j.pptx
PBL1-v1-006j.pptx
 
PBL1-v1-005j.pptx
PBL1-v1-005j.pptxPBL1-v1-005j.pptx
PBL1-v1-005j.pptx
 
PBL1-v1-003j.pptx
PBL1-v1-003j.pptxPBL1-v1-003j.pptx
PBL1-v1-003j.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
 

Último

怎样办理圣芭芭拉分校毕业证(UCSB毕业证书)成绩单留信认证
怎样办理圣芭芭拉分校毕业证(UCSB毕业证书)成绩单留信认证怎样办理圣芭芭拉分校毕业证(UCSB毕业证书)成绩单留信认证
怎样办理圣芭芭拉分校毕业证(UCSB毕业证书)成绩单留信认证ehyxf
 
Call Girls Kothrud Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Kothrud Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Kothrud Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Kothrud Call Me 7737669865 Budget Friendly No Advance Bookingroncy bisnoi
 
Just Call Vip call girls godhra Escorts ☎️9352988975 Two shot with one girl (...
Just Call Vip call girls godhra Escorts ☎️9352988975 Two shot with one girl (...Just Call Vip call girls godhra Escorts ☎️9352988975 Two shot with one girl (...
Just Call Vip call girls godhra Escorts ☎️9352988975 Two shot with one girl (...gajnagarg
 
Just Call Vip call girls chhindwara Escorts ☎️9352988975 Two shot with one gi...
Just Call Vip call girls chhindwara Escorts ☎️9352988975 Two shot with one gi...Just Call Vip call girls chhindwara Escorts ☎️9352988975 Two shot with one gi...
Just Call Vip call girls chhindwara Escorts ☎️9352988975 Two shot with one gi...gajnagarg
 
Call Girls Banashankari Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
Call Girls Banashankari Just Call 👗 7737669865 👗 Top Class Call Girl Service ...Call Girls Banashankari Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
Call Girls Banashankari Just Call 👗 7737669865 👗 Top Class Call Girl Service ...amitlee9823
 
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)amitlee9823
 
Guwahati Escorts Service Girl ^ 9332606886, WhatsApp Anytime Guwahati
Guwahati Escorts Service Girl ^ 9332606886, WhatsApp Anytime GuwahatiGuwahati Escorts Service Girl ^ 9332606886, WhatsApp Anytime Guwahati
Guwahati Escorts Service Girl ^ 9332606886, WhatsApp Anytime Guwahatimeghakumariji156
 
Just Call Vip call girls Berhampur Escorts ☎️9352988975 Two shot with one gir...
Just Call Vip call girls Berhampur Escorts ☎️9352988975 Two shot with one gir...Just Call Vip call girls Berhampur Escorts ☎️9352988975 Two shot with one gir...
Just Call Vip call girls Berhampur Escorts ☎️9352988975 Two shot with one gir...gajnagarg
 
Get Premium Pimple Saudagar Call Girls (8005736733) 24x7 Rate 15999 with A/c ...
Get Premium Pimple Saudagar Call Girls (8005736733) 24x7 Rate 15999 with A/c ...Get Premium Pimple Saudagar Call Girls (8005736733) 24x7 Rate 15999 with A/c ...
Get Premium Pimple Saudagar Call Girls (8005736733) 24x7 Rate 15999 with A/c ...MOHANI PANDEY
 
怎样办理斯威本科技大学毕业证(SUT毕业证书)成绩单留信认证
怎样办理斯威本科技大学毕业证(SUT毕业证书)成绩单留信认证怎样办理斯威本科技大学毕业证(SUT毕业证书)成绩单留信认证
怎样办理斯威本科技大学毕业证(SUT毕业证书)成绩单留信认证tufbav
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In Yusuf Sarai ≼🔝 Delhi door step delevry≼🔝
Call Now ≽ 9953056974 ≼🔝 Call Girls In Yusuf Sarai ≼🔝 Delhi door step delevry≼🔝Call Now ≽ 9953056974 ≼🔝 Call Girls In Yusuf Sarai ≼🔝 Delhi door step delevry≼🔝
Call Now ≽ 9953056974 ≼🔝 Call Girls In Yusuf Sarai ≼🔝 Delhi door step delevry≼🔝9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Th...
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Th...Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Th...
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Th...Pooja Nehwal
 
Point of Care Testing in clinical laboratory
Point of Care Testing in clinical laboratoryPoint of Care Testing in clinical laboratory
Point of Care Testing in clinical laboratoryoyebolasonuga14
 
Vip Mumbai Call Girls Andheri East Call On 9920725232 With Body to body massa...
Vip Mumbai Call Girls Andheri East Call On 9920725232 With Body to body massa...Vip Mumbai Call Girls Andheri East Call On 9920725232 With Body to body massa...
Vip Mumbai Call Girls Andheri East Call On 9920725232 With Body to body massa...amitlee9823
 
SM-N975F esquematico completo - reparación.pdf
SM-N975F esquematico completo - reparación.pdfSM-N975F esquematico completo - reparación.pdf
SM-N975F esquematico completo - reparación.pdfStefanoBiamonte1
 
Just Call Vip call girls Begusarai Escorts ☎️9352988975 Two shot with one gir...
Just Call Vip call girls Begusarai Escorts ☎️9352988975 Two shot with one gir...Just Call Vip call girls Begusarai Escorts ☎️9352988975 Two shot with one gir...
Just Call Vip call girls Begusarai Escorts ☎️9352988975 Two shot with one gir...gajnagarg
 
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...amitlee9823
 

Último (20)

怎样办理圣芭芭拉分校毕业证(UCSB毕业证书)成绩单留信认证
怎样办理圣芭芭拉分校毕业证(UCSB毕业证书)成绩单留信认证怎样办理圣芭芭拉分校毕业证(UCSB毕业证书)成绩单留信认证
怎样办理圣芭芭拉分校毕业证(UCSB毕业证书)成绩单留信认证
 
Call Girls Kothrud Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Kothrud Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Kothrud Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Kothrud Call Me 7737669865 Budget Friendly No Advance Booking
 
Critical Commentary Social Work Ethics.pptx
Critical Commentary Social Work Ethics.pptxCritical Commentary Social Work Ethics.pptx
Critical Commentary Social Work Ethics.pptx
 
Just Call Vip call girls godhra Escorts ☎️9352988975 Two shot with one girl (...
Just Call Vip call girls godhra Escorts ☎️9352988975 Two shot with one girl (...Just Call Vip call girls godhra Escorts ☎️9352988975 Two shot with one girl (...
Just Call Vip call girls godhra Escorts ☎️9352988975 Two shot with one girl (...
 
Just Call Vip call girls chhindwara Escorts ☎️9352988975 Two shot with one gi...
Just Call Vip call girls chhindwara Escorts ☎️9352988975 Two shot with one gi...Just Call Vip call girls chhindwara Escorts ☎️9352988975 Two shot with one gi...
Just Call Vip call girls chhindwara Escorts ☎️9352988975 Two shot with one gi...
 
Call Girls Banashankari Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
Call Girls Banashankari Just Call 👗 7737669865 👗 Top Class Call Girl Service ...Call Girls Banashankari Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
Call Girls Banashankari Just Call 👗 7737669865 👗 Top Class Call Girl Service ...
 
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
 
Guwahati Escorts Service Girl ^ 9332606886, WhatsApp Anytime Guwahati
Guwahati Escorts Service Girl ^ 9332606886, WhatsApp Anytime GuwahatiGuwahati Escorts Service Girl ^ 9332606886, WhatsApp Anytime Guwahati
Guwahati Escorts Service Girl ^ 9332606886, WhatsApp Anytime Guwahati
 
Just Call Vip call girls Berhampur Escorts ☎️9352988975 Two shot with one gir...
Just Call Vip call girls Berhampur Escorts ☎️9352988975 Two shot with one gir...Just Call Vip call girls Berhampur Escorts ☎️9352988975 Two shot with one gir...
Just Call Vip call girls Berhampur Escorts ☎️9352988975 Two shot with one gir...
 
Get Premium Pimple Saudagar Call Girls (8005736733) 24x7 Rate 15999 with A/c ...
Get Premium Pimple Saudagar Call Girls (8005736733) 24x7 Rate 15999 with A/c ...Get Premium Pimple Saudagar Call Girls (8005736733) 24x7 Rate 15999 with A/c ...
Get Premium Pimple Saudagar Call Girls (8005736733) 24x7 Rate 15999 with A/c ...
 
Abortion pills in Jeddah |+966572737505 | Get Cytotec
Abortion pills in Jeddah |+966572737505 | Get CytotecAbortion pills in Jeddah |+966572737505 | Get Cytotec
Abortion pills in Jeddah |+966572737505 | Get Cytotec
 
怎样办理斯威本科技大学毕业证(SUT毕业证书)成绩单留信认证
怎样办理斯威本科技大学毕业证(SUT毕业证书)成绩单留信认证怎样办理斯威本科技大学毕业证(SUT毕业证书)成绩单留信认证
怎样办理斯威本科技大学毕业证(SUT毕业证书)成绩单留信认证
 
CHEAP Call Girls in Hauz Quazi (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Hauz Quazi  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Hauz Quazi  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Hauz Quazi (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In Yusuf Sarai ≼🔝 Delhi door step delevry≼🔝
Call Now ≽ 9953056974 ≼🔝 Call Girls In Yusuf Sarai ≼🔝 Delhi door step delevry≼🔝Call Now ≽ 9953056974 ≼🔝 Call Girls In Yusuf Sarai ≼🔝 Delhi door step delevry≼🔝
Call Now ≽ 9953056974 ≼🔝 Call Girls In Yusuf Sarai ≼🔝 Delhi door step delevry≼🔝
 
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Th...
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Th...Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Th...
Pooja 9892124323, Call girls Services and Mumbai Escort Service Near Hotel Th...
 
Point of Care Testing in clinical laboratory
Point of Care Testing in clinical laboratoryPoint of Care Testing in clinical laboratory
Point of Care Testing in clinical laboratory
 
Vip Mumbai Call Girls Andheri East Call On 9920725232 With Body to body massa...
Vip Mumbai Call Girls Andheri East Call On 9920725232 With Body to body massa...Vip Mumbai Call Girls Andheri East Call On 9920725232 With Body to body massa...
Vip Mumbai Call Girls Andheri East Call On 9920725232 With Body to body massa...
 
SM-N975F esquematico completo - reparación.pdf
SM-N975F esquematico completo - reparación.pdfSM-N975F esquematico completo - reparación.pdf
SM-N975F esquematico completo - reparación.pdf
 
Just Call Vip call girls Begusarai Escorts ☎️9352988975 Two shot with one gir...
Just Call Vip call girls Begusarai Escorts ☎️9352988975 Two shot with one gir...Just Call Vip call girls Begusarai Escorts ☎️9352988975 Two shot with one gir...
Just Call Vip call girls Begusarai Escorts ☎️9352988975 Two shot with one gir...
 
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 

PBL1-v1-002j.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 (2. 画像フィルタ初級編) スパコンからIoTまで 省エネ社会に AI+BCだけじゃない超効率計算手法
  • 2. /* SCREEN=WD*HT */ for (row=0; row<HT; row++) { for (col=0; col<WD; col++) { pix = in[row*WD+col]; r = t[ pix>>24 ]; g = t[256+((pix>>16)&255)]; b = t[512+((pix>> 8)&255)]; out[row*WD+col]=r<<24 | g<<16 | b<<8; } } 20220202 2 簡単な tone_curveをC言語で書く Load → Store ← Color map tables
  • 3. /* SCREEN=WD*HT */ for (row=0; row<HT; row++) { //EMAX5A begin tone_curve mapdist=0 for (LOOP0=WD, col=-4; LOOP0--;) { col += 4; pix = in[row*WD+col/4]; r = t[ pix>>24 ]; g = t[256+((pix>>16)&255)]; b = t[512+((pix>> 8)&255)]; out[row*WD+col/4]=r<<24 | g<<16 | b<<8; } //EMAX5A end } //EDMAX5A drain_dirty_lmm 20220202 3 IMAXのループ構造記述に合わせる Load → Store ← Color map tables /* SCREEN=WD*HT */ for (row=0; row<HT; row++) { for (col=0; col<WD; col++) { pix = in[row*WD+col]; r = t[ pix>>24 ]; g = t[256+((pix>>16)&255)]; b = t[512+((pix>> 8)&255)]; out[row*WD+col]=r<<24 | g<<16 | b<<8; } } Load → Store ← Color map tables
  • 4. /* SCREEN=WD*HT */ for (row=0; row<HT; row++) { //EMAX5A begin tone_curve mapdist=0 for (LOOP0=WD, col=-4; LOOP0--;) { col += 4; mop(OP_LDWR, &pix, in_row_WD, col, MSK_W0, in, WD); //pix = in[row*WD+col/4]; mop(OP_LDUBR, &r, t_r, pix, MSK_B3, t, 256*3/4); //r = t[ pix>>24 ]; mop(OP_LDUBR, &g, t_g, pix, MSK_B2, t, 256*3/4); //g = t[256+((pix>>16)&255)]; mop(OP_LDUBR, &b, t_b, pix, MSK_B1, t, 256*3/4); //b = t[512+((pix>> 8)&255)]; out[row*WD+col/4]=r<<24|g<<16|b<<8; } //EMAX5A end } //EDMAX5A drain_dirty_lmm 20220202 4 IMAXの高機能関数記述に書き換えながらデバッグする Load → Store ← Color map tables
  • 5. /* SCREEN=WD*HT */ for (row=0; row<HT; row++) { //EMAX5A begin tone_curve mapdist=0 for (LOOP0=WD, col=-4; LOOP0--;) { exe(OP_ADD, &col, col, EXP_H3210, 4, EXP_H3210, 0, EXP_H3210); //col += 4; mop(OP_LDWR, &pix, in_row_WD, col, MSK_W0, in, WD); //pix = in[row*WD+col/4]; mop(OP_LDUBR, &r, t_r, pix, MSK_B3, t, 256*3/4); //r = t[ pix>>24 ]; mop(OP_LDUBR, &g, t_g, pix, MSK_B2, t, 256*3/4); //g = t[256+((pix>>16)&255)]; mop(OP_LDUBR, &b, t_b, pix, MSK_B1, t, 256*3/4); //b = t[512+((pix>> 8)&255)]; exe(OP_MMRG, &out, r, EXP_H3210, g, EXP_H3210, b, EXP_H3210); mop(OP_STWR, &out, out_row_WD, col, MSK_W0); //out[row*WD+col/4]=r<<24|g<<16|b<<8; } //EMAX5A end } //EDMAX5A drain_dirty_lmm 20220202 5 全部書き換えたら逐次実行プログラムとしてデバッグ Load → Store ← Color map tables
  • 6. 20220202 6 データの配置と流れの観点から見直す Load → Store ← Color map tables /* SCREEN=WD*HT */ for (row=0; row<HT; row++) { //EMAX5A begin tone_curve mapdist=0 for (LOOP0=WD, col=-4; LOOP0--;) { exe(OP_ADD, &col, col, EXP_H3210, 4, EXP_H3210, 0, EXP_H3210); //col += 4; mop(OP_LDWR, &pix, in_row_WD, col, MSK_W0, in, WD); //pix = in[row*WD+col/4]; mop(OP_LDUBR, &r, t_r, pix, MSK_B3, t, 256*3/4); //r = t[ pix>>24 ]; mop(OP_LDUBR, &g, t_g, pix, MSK_B2, t, 256*3/4); //g = t[256+((pix>>16)&255)]; mop(OP_LDUBR, &b, t_b, pix, MSK_B1, t, 256*3/4); //b = t[512+((pix>> 8)&255)]; exe(OP_MMRG, &out, r, EXP_H3210, g, EXP_H3210, b, EXP_H3210); mop(OP_STWR, &out, out_row_WD, col, MSK_W0); //out[row*WD+col/4]=r<<24|g<<16|b<<8; } //EMAX5A end } //EDMAX5A drain_dirty_lmm
  • 8. int loop=WD/2; //EMAX5A begin tone_curve mapdist=0 while (loop--) { mop(OP_LDR, &BR[0][1][1], in++, 0LL, MSK_D0, in, WD, 0, 0, NULL, 0); mop(OP_LDBR, &BR[1][1][1], t1, BR[0][1][1], MSK_B3, t, 256*3/4, 0, 0, NULL, 0); mop(OP_LDBR, &BR[1][1][0], t1, BR[0][1][1], MSK_B7, t, 256*3/4, 0, 0, NULL, 0); mop(OP_LDBR, &BR[1][2][1], t2, BR[0][1][1], MSK_B2, t, 256*3/4, 0, 0, NULL, 0); mop(OP_LDBR, &BR[1][2][0], t2, BR[0][1][1], MSK_B6, t, 256*3/4, 0, 0, NULL, 0); mop(OP_LDBR, &BR[1][3][1], t3, BR[0][1][1], MSK_B1, t, 256*3/4, 0, 0, NULL, 0); mop(OP_LDBR, &BR[1][3][0], t3, BR[0][1][1], MSK_B5, t, 256*3/4, 0, 0, NULL, 0); exe(OP_CCAT, &r1, BR[1][1][0], EXP_H3210, BR[1][1][1], EXP_H3210, 0, EXP_H3210,OP_NOP,0,OP_NOP,0); exe(OP_CCAT, &r2, BR[1][2][0], EXP_H3210, BR[1][2][1], EXP_H3210, 0, EXP_H3210,OP_NOP,0,OP_NOP,0); exe(OP_CCAT, &r3, BR[1][3][0], EXP_H3210, BR[1][3][1], EXP_H3210, 0, EXP_H3210,OP_NOP,0,OP_NOP,0); exe(OP_MMRG, &r0, r1, EXP_H3210, r2, EXP_H3210, r3, EXP_H3210,OP_NOP,0,OP_NOP,0); mop(OP_STR, &r0, out++, 0LL, MSK_D0, out, WD, 0, 0, NULL, 0); } //EMAX5A end 20220202 8 2way SIMD版 SIMD Load → SIMD Store ← Color map tables
  • 10. //EMAX5A begin tone_curve mapdist=0 for (CHIP=0; CHIP<NCHIP; CHIP++) { /* output channels are parallelized by multi-chip (OC/#chip) */ /*2*/for (INIT1=1,LOOP1=RMGRP,rofs=0-WD*4; LOOP1--; INIT1=0) { /* stage#0 *//* mapped to FOR() on BR[63][1][0] */ /*1*/for (INIT0=1,LOOP0=WD,cofs=0-4; LOOP0--; INIT0=0) { /* stage#0 *//* mapped to FOR() on BR[63][0][0] */ exe(OP_ADD, &cofs, INIT0?cofs:cofs, EXP_H3210, 4, EXP_H3210, 0LL, EXP_H3210, OP_AND, 0x00000000ffffffffLL, OP_NOP, 0LL); /* stage#0 */ exe(OP_ADD, &rofs, rofs, EXP_H3210, INIT0?WD*4:0, EXP_H3210, 0LL, EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#0 */ exe(OP_ADD, &pofs, rofs, EXP_H3210, cofs, EXP_H3210, 0LL, EXP_H3210, OP_AND, 0x00000000ffffffffLL, OP_NOP, 0LL); /* stage#1 */ /*map0*/ mop(OP_LDWR, 1, &BR[2][1][1], (Ull)rtop0[CHIP], pofs, MSK_D0, (Ull)rtop0[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#2 */ mop(OP_LDUBR, 1, &BR[3][1][1], (Ull)t1, BR[2][1][1], MSK_B3, (Ull)t1, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#3 */ mop(OP_LDUBR, 1, &BR[3][2][1], (Ull)t2, BR[2][1][1], MSK_B2, (Ull)t2, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#3 */ mop(OP_LDUBR, 1, &BR[3][3][1], (Ull)t3, BR[2][1][1], MSK_B1, (Ull)t3, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#3 */ exe(OP_MMRG, &r1, BR[3][1][1], EXP_H3210, BR[3][2][1], EXP_H3210, BR[3][3][1], EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#3 */ mop(OP_STWR, 3, &r1, (Ull)dtop0[CHIP], pofs, MSK_D0, (Ull)dtop0[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#3 */ /*map1*/ mop(OP_LDWR, 1, &BR[4][1][1], (Ull)rtop1[CHIP], pofs, MSK_D0, (Ull)rtop1[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#4 */ mop(OP_LDUBR, 1, &BR[5][1][1], (Ull)t1, BR[4][1][1], MSK_B3, (Ull)t1, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#5 */ mop(OP_LDUBR, 1, &BR[5][2][1], (Ull)t2, BR[4][1][1], MSK_B2, (Ull)t2, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#5 */ mop(OP_LDUBR, 1, &BR[5][3][1], (Ull)t3, BR[4][1][1], MSK_B1, (Ull)t3, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#5 */ exe(OP_MMRG, &r1, BR[5][1][1], EXP_H3210, BR[5][2][1], EXP_H3210, BR[5][3][1], EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#5 */ mop(OP_STWR, 3, &r1, (Ull)dtop1[CHIP], pofs, MSK_D0, (Ull)dtop1[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#5 */ /*map2*/ mop(OP_LDWR, 1, &BR[6][1][1], (Ull)rtop2[CHIP], pofs, MSK_D0, (Ull)rtop2[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#6 */ mop(OP_LDUBR, 1, &BR[7][1][1], (Ull)t1, BR[6][1][1], MSK_B3, (Ull)t1, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#7 */ mop(OP_LDUBR, 1, &BR[7][2][1], (Ull)t2, BR[6][1][1], MSK_B2, (Ull)t2, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#7 */ mop(OP_LDUBR, 1, &BR[7][3][1], (Ull)t3, BR[6][1][1], MSK_B1, (Ull)t3, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#7 */ exe(OP_MMRG, &r1, BR[7][1][1], EXP_H3210, BR[7][2][1], EXP_H3210, BR[7][3][1], EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#7 */ mop(OP_STWR, 3, &r1, (Ull)dtop2[CHIP], pofs, MSK_D0, (Ull)dtop2[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#7 */ /*map3*/ mop(OP_LDWR, 1, &BR[8][1][1], (Ull)rtop3[CHIP], pofs, MSK_D0, (Ull)rtop3[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#8 */ mop(OP_LDUBR, 1, &BR[9][1][1], (Ull)t1, BR[8][1][1], MSK_B3, (Ull)t1, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#9 */ mop(OP_LDUBR, 1, &BR[9][2][1], (Ull)t2, BR[8][1][1], MSK_B2, (Ull)t2, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#9 */ mop(OP_LDUBR, 1, &BR[9][3][1], (Ull)t3, BR[8][1][1], MSK_B1, (Ull)t3, 256/8, 0, 0, (Ull)NULL, 256/8); /* stage#9 */ exe(OP_MMRG, &r1, BR[9][1][1], EXP_H3210, BR[9][2][1], EXP_H3210, BR[9][3][1], EXP_H3210, OP_NOP, 0LL, OP_NOP, 0LL); /* stage#9 */ mop(OP_STWR, 3, &r1, (Ull)dtop3[CHIP], pofs, MSK_D0, (Ull)dtop3[CHIP], WD*RMGRP/2, 0, 0, (Ull)NULL, WD*RMGRP/2);/* stage#9 */ 20220202 10 3重ループをIMAXの1回の起動に写像する 実際には、#define tone_core1(r, rm1, rp1) などと定義して並べるので、こんな冗長な書き方は不要だが、 最初なのでブラックボックス無しで説明

Notas do Editor

  1. 導入編が終わった人向けに、これから、アイマックスの具体的なプログラミング過程を説明していきます。 第2回は、画像フィルタです。
  2. 色を入れ換えるだけの簡単な画像処理から始めます。左画像を入力すると、右画像のように、色が変わります。色をどのように変換するかは、RGB成分ごとの変換表をひとつにまとめた配列tで定義します。まず、C言語で書きます。画像は2次元構造ですが、画素はメモリ上で一列に並んでいるので1次元配列を使い、プログラムの構造は、あとでステンシル計算に対応できるよう、2重ループにします。インが入力画素、ピックスが処理中の1画素、tが色変換表、アウトが出力画素です。RGBの色成分は8ビットなので、シフトとマスク演算を使ってピックスから各8ビットを取り出します。そして、各成分を使って色変換表を引き、最後に3色をつなぐと、出力のでき上がりです。
  3. まず、アイマックスで実行する範囲をビギンとエンドで括ります。最初は、最内ループのみを対象とします。アイマックスは、各ユニット自身がループ制御も行います。ユニット内の単純な演算器に写像できるよう、最内ループは、ループ0という予約語を使って変形します。そして、Colを整数配列の添え字から、バイトアドレスに変更し、更新結果を後続ユニットが参照できるようにします。具体的には、初期値をマイナス4にして、ループ内部の先頭で4を加算するようにします。これで、先頭ユニットが、初期値マイナス4のcolを毎サイクルインクリメントし、後続ユニットが、元のプログラム通りにcolを参照できるようになります。もちろん、colを整数配列の添え字に使っている部分は、わる4が必要です。
  4. 次に、最内ループの中を少しづつ、アイマックス用の関数形式に書き換えていきます。ここでは、ピックス、RGBの代入部分のみを書き換えました。インロウWD、TR、TG、TBは、それぞれ、画像各ぎょうの先頭アドレス、赤成分、緑成分、青成分変換表の先頭アドレス、つまりベースアドレスです。LDUBRは、ロードしたピクセルちから、指定したバイト位置を切り出したものをオフセットとして、ベースアドレスに加えて1バイトをロードします。マスクB3は、右から4バイト目、マスクB2は、右から3バイト目、マスクB1は、右から2バイト目の各1バイトを意味します。元のC言語にあったシフトとマスク演算が、このように高機能ロード関数に吸収され、僅か4関数に置き換わりました。また、最初のロード関数末尾の、inとWDは、必要とするデータの先頭と長さです。今は画像1行分を扱うので、ワード数にWDを指定します。同様に、RGBの変換では、共通の配列tを使うので、先頭はt、ワード数は256かける3わる4です。さて、ここまで書き換えたら、コンパイルして、動作を確認することができます。実際に実行できるだけでなく、ロード関数の中で、ベースアドレスとオフセットが、指定した範囲を逸脱していないかがチェックされます。アイマックス用の関数形式は、途中の状態でも、普通のCコンパイラでコンパイルし、実行できます。途中にプリントエフを挿入しながら、少しづつ書き換えて、アルゴリズムのデバッグを進めていける点が大きな特長です。
  5. 残りの部分も、書き換えていきます。MMRGを使うと、変換後のRGBを1つにまとめることができます。最後のストアも、末尾に、先頭アドレスと長さを書いて、ベースアドレスとオフセットの逸脱をチェックします。以上で、元の最内ループが、わずか7関数に変換されました。最初、アイマックスの書き方が、アセンブラのようだと思ったことでしょう。確かにアセンブラに似ていますが、高機能ハードウェアを余すことなく使うためには、このような高機能関数として記述するほうが、無駄がなく、また、コンパイル時間を大幅に短縮できます。ノイマン型は、複雑なプログラムには、命令数を増やすことで対応しますが、CGRAは、高効率である代わりに、ハードウェア資源に制約があり、命令数をいくらでも増やすことはできません。自由記述のプログラムをコンパイラに丸投げすることをいくら繰り返しても、最適解にはたどり着けませんし、デバッグも不可能です。これが、アイマックスのプログラミングに高機能関数を使う理由です。ところで、CGRAをある程度知っている人は、これは逐次実行プログラムではないかと思うことでしょう。その通りです。逐次実行プログラムとしてアルゴリズムをデバッグし、最後は、アイマックス専用コンパイラでCGRAに写像し、同じ実行結果と、高効率処理を手に入れる。これが、アイマックスのプログラミング思想です。
  6. では、データの流れに着目して、プログラムを見直します。青いぎょうは、入力画像を必要とします。CGRAでは、最も上に配置されるべきです。次に、緑のぎょうは、RGB変換表を必要とします。入力画像をロードした後に使うので、CGRAでは、入力画像よりも下のユニットにしか配置できません。ただし、RGBの変換表は、一度に引くことができるので、同じ位置に配置できます。同様に、出力画像は最後に配置されます。このように、アイマックスコンパイラは、変数の依存関係を解析して、どのユニットに、どのデータを配置するかを決めます。
  7. アイマックスコンパイラは、このように、コンパイル結果を可視化してくれます。右うえはじが第0行0列です。ここには、最内ループのカウンタ初期値と、ALUを使う減算がセットされます。カウンタが0になったら、下のユニットに停止指示を出します。後続ユニットの動作が、順に止まっていきます。第0行1列には、colの加算、第1行0列には、最初のピックスロードがセットされています。右から2番目のレジスタに,pixという名前が見えます。これが、ロード結果が入るレジスタです。第2行0列から2列に、LDUBRがセットされています。そして,第3行0列に,紫のMMRGと、ストアがセットされます。このプログラムでは、アイマックスを起動すると、コンパイラが自動生成するDMA機能を使って、第1行0列に入力画像,第2行0列から2列に色変換表が用意された後、第3行0列のメモリに、毎サイクル1つの出力画素を格納します。演算器内部だけでなく、ユニット間もパイプライン化されているので、毎サイクル結果が出てくるわけです。実行が終わったら、同様にDMAでホストの主記憶に書き戻されます。これで、画像の1行だけを加速するアイマックスプログラムの完成です。でも、色がついている部分がまばらですね。ハードウェアは、64行4列分あります。まだ、ほんの小手調べです。
  8. では、高性能化していきます。さっきのプログラムは,64ビットレジスタの半分しか使っていません。もったいないですね。アイマックスの演算器はツーウェイシムディーです。32ビットの画素値を2つロードすることで,処理速度を2倍に上げた64ビット版プログラムです。また、最初の1行を節約するために、フォー文の代わりにワイル文を使い、ロードストアにオートインクリメントを使っています。最初のLDRは,先頭ユニットのローカルメモリから,32ビットの画素値を2つロードして,BRゼロイチイチに格納します。続く6行のLDUBRは,色変換表の先頭をベースアドレス,最初にロードした画素値の合計6箇所の色成分をオフセットとして,1バイトをロードし,各々BRに格納します。3つのシーキャットは,同色の2つの1バイトデータを各々1つのレジスタにまとめ,MMRGが,3つのレジスタの内容をまとめて2つの画素値に戻し,最後のSTRが,64ビットデータを2つの出力画素としてメモリに書き込みます。アイマックスの実行回数も、画像の横幅、WDの半分になるので、ループ初期値はWDわる2になっています。
  9. コンパイル結果です。右うえはじが第0行0列です。第0行は、さっきの32ビット版と同じですが、オートインクリメントを使うことで、最初のロードも第0行に配置できています。第1行1列から3列に、LDUBRが2つずつセットされています。デュアルポートメモリのおかげです。第2行0列から2列に、シーキャットがセットされています。そして、第3行0列に、MMRGとSTRがセットされます。第3行0列のメモリに、毎サイクル2つの出力画素を格納するので、性能が2倍になりました。たしかに実装密度は上がりました。でも、まだたくさん余っています。
  10. アイマックスには、1基あたり、64個の物理ユニットが入っていますが、今までの2つの例では、4個しか使っていません。また、アイマックスは、画像1行を処理するだけなので、起動回数は、画像の高さHTイコール240でした。いろいろもったいないです。そこで、同じ処理を残りのユニットにも割り当て、多くのユニットを使うことで、アイマックスの起動回数を減らすことを考えます。32ビット版で作ったプログラムを10倍に増やしたのが、このプログラムです。長いので、途中は省略です。また、プログラムの構造が、ワイル文の単純ループではなく、3重ループになっています。アイマックスが4基参加し、10個の物理ユニットが各々2重ループにより、幅方向WD、高さ方向6の画像を一度に処理するようにします。これで、アイマックスの起動回数は何回になったでしょう。240わる4基わる10ユニットわる6は1です。起動回数はわずか1回になりました。
  11. コンパイル結果です。左側の第0行と第1行は,3重ループの制御とアドレス計算に使われています。第2行から第4行に,さっきの32ビット版が埋め込まれているのがわかります。10倍にふやしたので,物理ユニットは,3掛ける10の30必要でしょうか。いいえ,違います。よく見ると,第2行から第4行に対応するデータフローと同じ形が,第5行から第7行ではなく,1つ手前の,第4行から第6行にあります。つまり,コードを10倍に増やしても,論理ユニットに空きがあれば,一部オーバラップできるということです。全体では,22個の物理ユニットにおさまります。まだまだ物理ユニットが空いていますね。4バイトの1画素は,320掛ける6でも8キロバイト未満しかないので,64キロバイトのローカルメモリも大部分が余っています。物理ユニット数64というのは,少ないように感じるかもしれませんが,まだまだ余力があります。ところで、導入編で、コンパイル時間が長いのはコンピュータじゃないと言いました。このプログラムのCGRA写像に要する時間は、1秒未満です。これなら、何度でも試すことができます。
  12. ここまで、ただ色を入れ替えるだけの簡単なプログラムを説明してきました。アイマックスの機能も能力も、まだ5パーセントくらいしか使っていませんが、プログラミングスタイルとポテンシャルを理解できたことと思います。この動画の視聴者が増えてきたら、のこりの95パーセントも解説していくことにします。まあ、でも、99.99パーセントの、おなか一杯技術者は、別に、こんなの知らなくても、それなりに給料もらえるはずだと思ってることでしょう。あるいは、どこかのメーカーが、自由記述のプログラムをなんとかしてくれる、完全自動コンパイラを作ってくれると、見なかったことにすることでしょう。まだいるかもしれない、0.01パーセントのはらぺこ技術者のために、そのうち、残り95パーセントの解説動画を作ることにします。そういえば、画像フィルタ編のはずでしたが、色変換しか説明できませんでした。画像フィルタ編の続きは、メディアンフィルタ、アンシャープマスク、エッジ検出、フレーム補間、超解像、ステレオマッチングを予定しています。では、今回はここまでです。