SlideShare a Scribd company logo
1 of 51
Download to read offline
オープンソースコンパイラNNgenでつくる
エッジ・ディープラーニングシステム
東京大学 大学院情報理工学系研究科
コンピュータ科学専攻 准教授
JSTさきがけ
高前田 伸也
2
高 前 田 伸 也
た か ま え だ し ん や
東京大学
大学院情報理工学系研究科
コンピュータ科学専攻 准教授
(理学部 情報科学科 兼担)
JST さきがけ研究者
専門分野 コンピュータアーキテクチャ
「素敵」なコンピュータの構造や設計技術、
コンピュータそのものの在り方について
研究しています
• 高位合成コンパイラ
• FPGAシステム
• アルゴリズム/ハードウェア協調設計
• 機械学習処理の高速化
オープンソースソフトウェアの開発にも
力を入れています
• NNgen: github.com/NNgen/nngen
• Veriloggen: github.com/PyHDI/veriloggen
• Pyverilog: github.com/PyHDI/Pyverilog
Twitter / GitHub
shtaxxx
Co-design
for Nice Computer System
Nice is …
ü High Speed
ü Low Power and Energy
ü Reliable and Dependable
ü FunJ
高前田 研究室
CASYS (Computer Architecture and Systems Lab.)
Software
Compiler for Machine Learning Acceleration
Compiler for Hardware Design
Hardware / Architecture
Machine Learning Chip
Annealing Processor
FPGA Accelerator
Application / Algorithm
Machine Learning / Deep Learning
Combinatorial Optimization
Image Processing
Hardware / Architecture
SRAM
Register
Dec.
SRAM
Dec.
Register
Processing Units
Processing Units
Outgoing Weights
Incoming Weights
PIM (Processing-in-Memory)
Neuron
ID
Neuron
ID
Input
Neuron
Output
Neuron
PE Array
W_MEM
A_MEM
DMAC
TCI
I/F
O_MEM
B_MEM
Sequencer
μ
Controller
Inst.
Mem.
Sync.
Table
Neighbor Link (n/e/w/s)
Global Network
Core
From W_MEM
From
A_MEM
From B_MEM
PE Column
O
: Linear
: Log
PE0
ACT
FF0
FF1
PE1
FF31
PE31
20
20
32
1
32
1
1
1
Processing Elements
(MAC Array)
Input Buffer
Weight
Buffer
Output Buffer
Data
Mover
(DMA)
DRAM
Controller
Predictor
Deep Learning Accelerator Chip
BRein Memory: In-Memory
Binary Neural Network Chip
QUEST: Log-Quantized
Neural Network Chip
Deep Learning Accelerator Architecture
Dead
Neuron
Predictor
Dead
Neuron
Predictor
Dead
Neuron
Predictor
Main Graph
Predictor
Dead Neuron Prediction:
Runtime Neuron Pruning Architecture
FPGA Accelerator
Multi-FPGA based
Parallel Computer
Low-Power
Cloud Computing
Edge Computing
Application / Algorithm Software
Original Binary Binary w/ Dither
O
ut Ch
Pseudo Color on Binary
Neural Network by
Error Diffusion
Dither NN: Accurate Binary Neural Network
by Error Diffusion
DeltaNet: Accurate Binary Neural Network
by Neighbor Comparison
Σ f
Σ f
Σ f
Σ f
Σ f
Σ f
Σ f
Σ f
f
f
Σ
Σ
Σ
Σ
f
f
0 f
f
Σ
Σ
Σ
Σ
f
f
0
DeltaNet
Standard
Binary Net
Comparison-based
activation keeps the
partial order information
of neurons on Binary NN
Veriloggen: Multi-paradigm Hardware Synthesis
Compiler on Python
Veriloggen.Core (RTL)
ハードウェアメタプログラミング
Thread
RAM
Thread
RAM
Stream
データフロー型
高位合成
Stream
Computing
Unit
Thread
Python-to-FSM
高位合成
Stream
Control
Thread Bus + DMA
(AXI4 Master/Slave)
AXI4 Interconnect DRAM
CPU
RTL
Control
Intrinsic
RTL
埋め込み
RTL
Control DMA Control
DMA Burst Transfer
NNgen: Neural Network Hardware Synthesis
Compiler for FPGAs
You can develop a model-specific
hardware from neural network
definition without hardware
description
最近の研究:
セキュアな不揮発性メモリのクラッシュ一貫性支援
6
新しい不揮発性メモリ (NVM)
次世代のメモリ技術として注目
JDRAM並の速度、SSDと同じ永続性
Lセキュリティ、クラッシュ一貫性
現状: 別々に研究されてきた
→しかし、実用上は両者の考慮が重要
セキュアなNVMではクラッシュ一貫性実現の
ボトルネックが実は異なることを示し
最適化アーキテクチャを提案
レジスタ
キャッシュ
DRAM
NVM
SSD
HDD
オンチップ
主記憶
二次記憶
揮発性
不揮発性
Intel Optane Persistent Memory (2019~)
最近の研究:
画像処理用のFPGAアクセラレータの小規模化
Bilateral Filter
l エッジを保持したまま平滑化ができるフィルタ
Bilateral Grid
l Bilateral Filterの近似手法の一つ、ウィンドウ半径に応じて計算量・
回路規模が増大するのを抑制できる
l FPGAに適した小型かつ高速なアクセラレータを実現
7
ノイズの乗った画像 Bilateral Filter で
処理した画像
Gaussian Filter で
処理した画像
最近の研究:
不確実性を評価できる機械学習の高速化
Bayesian Neural Network
l 重みが分布であるニューラルネットワーク
Ø 不確実性評価・少ないデータでの学習・過学習対策
ASBNN
l サンプリングベースの変分推論を近似により
計算省略し高速化するアルゴリズムとアーキテクチャを開発
8
近似しても
ほぼ同様の結果
ベースライン ASBNN
Edge Computing with “Intelligence of Things”
Cloud Computing
膨大なデータに基づく推論・制御J
情報送信から判断までの遅延大L
Edge computing
低遅延・リアルタイムな制御J
電力・計算能力の制約L
より高度な処理を
反射神経のように行うための
省エネルギー・高性能な
深層学習エッジデバイスが必要
9
Neural Network
パーセプトロン (Perceptron)
l 入力値に係数を乗算・総和、活性化関数を経て出力
ディープニューラルネットワーク (Deep Neural Network)
l 多層に積層したもの: 「畳み込み層」や「全結合層」などで構成
10
y = f (u)
u = wi xi
i=0
n
∑
x1
x2
x3
y
w1
w2
w3
f(u)
Perceptron
畳み込み (Convolution) 全結合 (Fully-connected)
Convolutionの計算パターン
11
N
M
K
K
M
R
C
Tr
Tc
N
C-S+K
Tn
Tm
入力
チャネル
出力チャネル
Tn: 入力チャネル方向
Tm: 出力チャネル方向
Tr, Tc: 出力画素方向
Tk: 重みフィルタ方向
5種類の方向に並列演算可能
各並列方向に対して最適解を求める
for m in 出力チャネル(M):
for n in 入力チャネル(N):
for r in 出力行(R):
for c in 出力列(C):
for k in 重み(K):
並列化
Tk
Tk
FPGA
(Field Programmable Gate Array)
ユーザーが回路構成を変更できる
やわらかいハードウェア
l アプリに特化した回路で処理をするので
高速、低消費電力
AND, OR, NOTなどの論理と記憶素子
の組み合わせを設計する
l ハードウェア記述言語 (HDL)
Ø 自分で詳細設計をするので大変
l 高位合成 (High Level Synthesis)
Ø Cなどのプログラミング言語で
動作・構造を設計するので効率的(なはず)
12
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
SB
CB
SB
CB
SB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
IOB
FPGA
FPGAに基づくSystem on Chip
SoC FPGA
Programmable Logic
On-chip
Interconnect
(AMBA
AXI4)
CPU
NW
DRAM
Ctrl
GPU
Soft CPU
BRAM DSP
DNN Processor
BRAM
DSP
BRAM
DSP
DSP DSP
BRAM BRAM
Camera
Camera
Image
Processor
BRAM
DSP
Mortar
Mortar
Controller
GPIO
Pin
GPIO
Controller
DRAM
All-in-oneなシステム
13
FPGAに基づくSystem on Chip
SoC FPGA
Programmable Logic
On-chip
Interconnect
(AMBA
AXI4)
CPU
NW
DRAM
Ctrl
GPU
Soft CPU
BRAM DSP
DNN Processor
BRAM
DSP
BRAM
DSP
DSP DSP
BRAM BRAM
Camera
Camera
Image
Processor
BRAM
DSP
Mortar
Mortar
Controller
GPIO
Pin
GPIO
Controller
DRAM
他の機能の性能や資源量を考慮して
適切なアクセラレータ構成を決定したい
I/Oに直接アクセスできるため
低遅延処理が実現可能
14
NNgen: DNNモデル特化
HW高位合成コンパイラ
DNNモデル記述から
モデルに特化したFPGA用回路を
自動生成する高位合成コンパイラ
https://github.com/NNgen/nngen
l 入力(モデル記述)
Ø Tensorflow-like NNgen dataflow
Ø ONNX (Pytorch等から変換)
l 出力
Ø Verilog HDL, IP-XACT
ハードウェアの知識がなくても
DNNシステムが作れる
15
Import NNgen
placeholder, variable, constant
16
conv2d (w/ ReLU)
placeholder
variable
17
conv2d
max_pool
placeholder
variable
18
conv2d
placeholder
variable
max_pool
reshape
matmul (FC)
19
モデルデータフロー
ハードウェア構成の指定
(並列度、RAM容量、等)
20
モデルデータフロー
モデルからHWへ
21
22
学習済みモデルの
ダウンロード
ONNX形式に変換
ONNX形式から
NNgen形式へ
23
量子化
並列化
24
HW化
HW等価なSWとして
データフローを実行して動作検証
ベンダー開発ツールを用いたFPGA実装
Xilinx Vivadoの場合
l IP-XACTのIPコアをインポートして接続するだけ
25
NNgen IPコアをAXI4バスに接続
NNgen-DNNアーキテクチャ
26
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
出現OPに対応するストリーム演算器
NNgen-DNNアーキテクチャ
27
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
各OPで再利用される細粒度演算器群
NNgen-DNNアーキテクチャ
28
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
演算器間を接続するカスタムNoC
NNgen-DNNアーキテクチャ
29
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
オンチップRAM
NNgen-DNNアーキテクチャ
30
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
演算器・RAM間カスタムNoC
NNgen-DNNアーキテクチャ
31
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
データ転送機構(AXI4-Master + DMA)
NNgen-DNNアーキテクチャ
32
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
トップレベル制御FSM
ストリーム演算制御FSM
トップFSMが動的に設定
する動作パラメータ
NNgen-DNNアーキテクチャ
33
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
外部制御インターフェース
NNgen-DNNマイクロアーキテクチャ (conv2d)
34
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
Acc
Acc
Acc
Acc
Out
BRAM
8x4-bit
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
Bias
BRAM
8x4-bit
rshift
rshift
rshift
Add
Add
Add
Add
Mul
Mul
Mul
Mul
rshift
rshift
rshift
rshift
Scale
BRAM
8x4-bit
OutCh 0
OutCh 1
OutCh 2
OutCh 3
InCh 0
InCh 1
InCh 2
InCh 3
ReLU
ReLU
ReLU
ReLU
Pixel 0
Act (3, 3)
BRAM
8x4-bit
Act (1,1)
BRAM
8x4-bit
2-stage Xbar
: Substream
NNgen-DNNマイクロアーキテクチャ (conv2d)
35
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
Acc
Acc
Acc
Acc
Out
BRAM
8x4-bit
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
Bias
BRAM
8x4-bit
rshift
rshift
rshift
Add
Add
Add
Add
Mul
Mul
Mul
Mul
rshift
rshift
rshift
rshift
Scale
BRAM
8x4-bit
OutCh 0
OutCh 1
OutCh 2
OutCh 3
InCh 0
InCh 1
InCh 2
InCh 3
ReLU
ReLU
ReLU
ReLU
Pixel 0
Act (3, 3)
BRAM
8x4-bit
Act (1,1)
BRAM
8x4-bit
2-stage Xbar
: Substream
オンチップRAM
NNgen-DNNマイクロアーキテクチャ (conv2d)
36
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
Acc
Acc
Acc
Acc
Out
BRAM
8x4-bit
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
Bias
BRAM
8x4-bit
rshift
rshift
rshift
Add
Add
Add
Add
Mul
Mul
Mul
Mul
rshift
rshift
rshift
rshift
Scale
BRAM
8x4-bit
OutCh 0
OutCh 1
OutCh 2
OutCh 3
InCh 0
InCh 1
InCh 2
InCh 3
ReLU
ReLU
ReLU
ReLU
Pixel 0
Act (3, 3)
BRAM
8x4-bit
Act (1,1)
BRAM
8x4-bit
2-stage Xbar
: Substream
乗算器 (Substreamプールより)
NNgen-DNNマイクロアーキテクチャ (conv2d)
37
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
Acc
Acc
Acc
Acc
Out
BRAM
8x4-bit
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
Bias
BRAM
8x4-bit
rshift
rshift
rshift
Add
Add
Add
Add
Mul
Mul
Mul
Mul
rshift
rshift
rshift
rshift
Scale
BRAM
8x4-bit
OutCh 0
OutCh 1
OutCh 2
OutCh 3
InCh 0
InCh 1
InCh 2
InCh 3
ReLU
ReLU
ReLU
ReLU
Pixel 0
Act (3, 3)
BRAM
8x4-bit
Act (1,1)
BRAM
8x4-bit
2-stage Xbar
: Substream
加算ツリー (Substreamプールより)
NNgen-DNNマイクロアーキテクチャ (conv2d)
38
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
Acc
Acc
Acc
Acc
Out
BRAM
8x4-bit
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
Bias
BRAM
8x4-bit
rshift
rshift
rshift
Add
Add
Add
Add
Mul
Mul
Mul
Mul
rshift
rshift
rshift
rshift
Scale
BRAM
8x4-bit
OutCh 0
OutCh 1
OutCh 2
OutCh 3
InCh 0
InCh 1
InCh 2
InCh 3
ReLU
ReLU
ReLU
ReLU
Pixel 0
Act (3, 3)
BRAM
8x4-bit
Act (1,1)
BRAM
8x4-bit
2-stage Xbar
: Substream
積算器 (Substreamプールより)
NNgen-DNNマイクロアーキテクチャ (conv2d)
39
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
Acc
Acc
Acc
Acc
Out
BRAM
8x4-bit
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
Bias
BRAM
8x4-bit
rshift
rshift
rshift
Add
Add
Add
Add
Mul
Mul
Mul
Mul
rshift
rshift
rshift
rshift
Scale
BRAM
8x4-bit
OutCh 0
OutCh 1
OutCh 2
OutCh 3
InCh 0
InCh 1
InCh 2
InCh 3
ReLU
ReLU
ReLU
ReLU
Pixel 0
Act (3, 3)
BRAM
8x4-bit
Act (1,1)
BRAM
8x4-bit
2-stage Xbar
: Substream
正規化回路 (Substreamプールより)
NNgen-DNNマイクロアーキテクチャ (conv2d)
40
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Mul
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
Weight
BRAM
16x4-bit
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
AddTree
(4x3x3
input)
Acc
Acc
Acc
Acc
Out
BRAM
8x4-bit
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
rshift
Bias
BRAM
8x4-bit
rshift
rshift
rshift
Add
Add
Add
Add
Mul
Mul
Mul
Mul
rshift
rshift
rshift
rshift
Scale
BRAM
8x4-bit
OutCh 0
OutCh 1
OutCh 2
OutCh 3
InCh 0
InCh 1
InCh 2
InCh 3
ReLU
ReLU
ReLU
ReLU
Pixel 0
Act (3, 3)
BRAM
8x4-bit
Act (1,1)
BRAM
8x4-bit
2-stage Xbar
: Substream
活性化関数 (Substreamプールより)
NNgenの特徴
モデルに特化したアクセラレータを生成する
l モデル毎に異なる演算器アレイと制御回路を生成する
パラメータを変更することでアクセラレータ構成が変わる
l データ型(ビット幅)
Ø ng.intX (X = 1, 2, 4, 8, 16, 32, 64)
Ø ng.uintX (X = 1, 2, 4, 8, 16, 32, 64)
l 並列度: conv2dの場合
Ø par_ich: 入力チャネル方向の並列度 (1, 2, 4, 8, ...)
Ø par_och: 出力チャネル方向の並列度 (1, 2, 4, 8, ...)
Ø par_col: 行内の並列度 (1, 2, 4, 8, ...)
Ø par_row: 行数の並列度 (1, 2, 4, 8, ...)
→DNNモデルから要件に応じた異なるハードウェアが生成可能
41
NNgenのバックエンド: マルチパラダイム型
ハードウェア設計フレームワークVeriloggen
https://github.com/PyHDI/veriloggen
42
Veriloggen.Core (RTL)
Hardware Metaprogramming
Thread
RAM
Thread
RAM
Stream
Dataflow HLS
Stream
Computing
Unit
Thread
Python-to-FSM
HLS
Stream
Control
Thread Bus + DMA
(AXI4 Master/Slave)
AXI4 Interconnect DRAM
CPU
RTL
Control
Intrinsic
RTL
Embedding
RTL
Control DMA Control
DMA Burst Transfer
Veriloggen as Hardware Construction Language:
トップモジュール・制御回路
43
verilog.py
トップモジュール
クロック信号、リセット信号
AXI-Masterインターフェース + DMAコントローラ
AXI-Slaveインターフェース
+ 制御レジスタ
Veriloggen as High-Level Synthesis Language:
データフロー表現 (Stream) による演算回路
44
pool.py
Stream入力
pool演算
回路共有: オペレータ回路全体
各オペレータは同一性を判断するためのハッシュ値を持つ
l ハッシュ値が同一ならオペレータ回路 (Stream) を共有する
45
conv2d.py
pool.py
回路共有: 演算器、RAM
演算器(乗算器等)とRAMは異なるオペレータ回路で共有
l 演算器 (Substream) とRAMの要件を宣言する
46
CPU
Substream Pool
Computing Unit Pool
RAM Pool
Mul Mul Mul Mul
Mul Mul Mul Mul
Mul Mul Mul Mul
Acc Acc Acc Acc
AddTree AddTree
AddTree AddTree
conv2d 3x3
Parallel: 3x3x4x4x2x2
max_pool 2x2
Parallel: 4
matmul
Parallel: 4x4
Thread
Arg
Stream
Thread
Arg
Stream
Thread
Arg
Stream
Main Thread
Substream
Interconnect
BRAM
Width:
8x4-bit
BRAM
Width:
8x4-bit
BRAM
Memory
Interconnect
DMA
Interconnect
DMA
Controller
AXI4
Master
I/F
AXI4
Slave
I/F
Config Register
AXI4
Interconnect
NNgen Accelerator IP-core (IP-XACT)
DRAM
共有RAMプール 共有演算器プール
pool.py
ONNX Importer: Conv
47
ソース側の
ONNXノードを
先に変換する
レイアウトをNNgen形式
(NHWC) に変換
BatchNormの結合
NNgenオペレータ
の生成
パッドと
ストライドの
計算
レイアウト情報
の保持
ONNX Importer: Concat
48
ソース側の
ONNXノードを
先に変換する
ONNXレイアウトとNNgenレイアウトの対応関係を作成
結合軸 (axis) の変換
NNgenオペレータの生成
ACRiのNNgenのチュートリアル:
https://www.acri.c.titech.ac.jp/wordpress/archives/5576
NNgenを用いて
Ultra96V2上に
DNNアクセラレータを
つくるチュートリアル
l DNNモデルからRTLへ
l 学習済みモデル量子化
l PYNQによる制御
49
NNgenで「できること」
基本的なレイヤー/モデルのハードウェア化
l レイヤー: conv2d, matmul, max_pool, add, concat, slice, batchnorm, ...
l モデル: VGG, ResNet, ...
ハードウェア処理中へのソフトウェア処理の挿入
l Externレイヤー: 割り込みを発生させ途中処理をSWに委任
パラメータ指定による並列化・最適化
l データ型、並列度、メモリサイズ
学習済みモデルの任意ビット幅への量子化 (Post-training Quantization)
l 入力データの統計量に基づき、スケーリング、ビットシフト量を自動決定
ONNXを介した学習済みモデルのハードウェア化
l torchvision等の学習済みモデルがNo RTLでハードウェア化可能
57
NNgenで「できるようにしたいこと」
ハードウェア指向レイヤーのサポート
l Depth-wise Convolution, Grouped Convolution, ...
スパースなレイヤーのサポート
l PruningされたConv, FCの効率的な実行機構: CSC/CSR形式への対応、演算スキップ
予測に基づく計算スキップ機構のサポート
l Dead Neural Prediction
ベイジアンニューラルネットワークのサポート
l 信頼できるAIシステムの実現を支援
回路資源の効率化と大規模な並列化
l 異なる性質のオペレータ同士の回路共有: カーネルサイズが異なるConvの共有化を実装中
l 並列度に対して回路資源の増加が少ないスケーラブルなアーキテクチャ
58
大小関わらず、みなさまからのPull-requestをお待ちしています!
当研究室との産学連携・共同研究の提案もお待ちしています!

More Related Content

What's hot

2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
智啓 出川
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
mmitti
 

What's hot (20)

2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
 
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
 
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
 
HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder
 
Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化
 
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
 

Similar to オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム

seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
Hirotaka Kawata
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro
 
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
Insight Technology, Inc.
 

Similar to オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム (20)

MemoryPlus Workshop
MemoryPlus WorkshopMemoryPlus Workshop
MemoryPlus Workshop
 
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent MemoryASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
 
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
 
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
 
kagamicomput201713
kagamicomput201713kagamicomput201713
kagamicomput201713
 
不揮発メモリとOS研究にまつわる何か
不揮発メモリとOS研究にまつわる何か不揮発メモリとOS研究にまつわる何か
不揮発メモリとOS研究にまつわる何か
 
Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
 
機械学習 / Deep Learning 大全 (6) Library編
機械学習 / Deep Learning 大全 (6) Library編機械学習 / Deep Learning 大全 (6) Library編
機械学習 / Deep Learning 大全 (6) Library編
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
 
インフラ野郎AzureチームProX
インフラ野郎AzureチームProXインフラ野郎AzureチームProX
インフラ野郎AzureチームProX
 
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
 
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
 
Meltdown を正しく理解する
Meltdown を正しく理解するMeltdown を正しく理解する
Meltdown を正しく理解する
 
研究を加速するChainerファミリー
研究を加速するChainerファミリー研究を加速するChainerファミリー
研究を加速するChainerファミリー
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
 
第4回 配信講義 計算科学技術特論A (2021)
第4回 配信講義 計算科学技術特論A (2021)第4回 配信講義 計算科学技術特論A (2021)
第4回 配信講義 計算科学技術特論A (2021)
 
ICD/CPSY 201412
ICD/CPSY 201412ICD/CPSY 201412
ICD/CPSY 201412
 
20170421 tensor flowusergroup
20170421 tensor flowusergroup20170421 tensor flowusergroup
20170421 tensor flowusergroup
 

More from Shinya Takamaeda-Y

More from Shinya Takamaeda-Y (20)

ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
 
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
 
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
 
ゆるふわコンピュータ (IPSJ-ONE2017)
ゆるふわコンピュータ (IPSJ-ONE2017)ゆるふわコンピュータ (IPSJ-ONE2017)
ゆるふわコンピュータ (IPSJ-ONE2017)
 
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
 
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
 
PythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングPythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミング
 
マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討
 
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
 
A CGRA-based Approach for Accelerating Convolutional Neural Networks
A CGRA-based Approachfor Accelerating Convolutional Neural NetworksA CGRA-based Approachfor Accelerating Convolutional Neural Networks
A CGRA-based Approach for Accelerating Convolutional Neural Networks
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
 
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようPythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
 
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
 
Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門
 
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
 
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
 
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
 
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
 
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
 
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
 

オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム