SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
PyCoRAMによる
Pythonを用いたポータブルな
FPGAアクセラレータ開発
高前田(山崎) 伸也
奈良先端科学技術大学院大学 情報科学研究科
E-mail: shinya_at_is_naist_jp
2014年10月22日 15:00-15:50
組み込みシステムシンポジウム2014 (ESS2014)
チュートリアル
今日の話: PyCoRAMについて
n  高位合成技術とメモリシステム抽象化を用いた
アクセラレータIPコア開発のためのフレームワーク
l  キーワード: FPGAアクセラレータ・IPコア設計・Python-Verilog
高位合成・メモリシステム抽象化・AXI4インターコネクト
2014-10-22 Shinya T-Y, NAIST 2
PyCoRAM IP
User
I/O
User Logic
CoRAM
Channel
CoRAM
Register
Control
Thread
Master
DMAC
CoRAM
Memory
Master
DMAC
CoRAM
Stream
FSM
GPIO
Slave
DMAC
CoRAM
IoChannel
Modeled in RTL
(Verilog HDL)
Memory Access
Pattern
in Python
PyCoRAM and Pyverilog are released for public!
n PyCoRAM
l http://shtaxxx.github.io/PyCoRAM/
n Pyverilog
l http://shtaxxx.github.io/Pyverilog/
2014-10-22 Shinya T-Y, NAIST 3
2014-10-22 Shinya T-Y, NAIST 4
はじめに
Heterogeneous Computing
2014-10-22 Shinya T-Y, NAIST 5
OoO
Core
OoO
Core
OoO
Core
OoO
Core
L2 L2 L2 L2
L3 Cache
DDR3 DRAM
Multicore (Intel Corei7)
L2 Cache
GDDR5 DRAM
GPU (NVIDIA GeForce)
DDR3 DRAM
Manycore (Intel Xeon Phi)
DDR3 DRAM
FPGA (Xilinx Virtex-7)
FPGAs in Anywhere
n  As an LSI verification platform
l  Testing the LSI functions,
before the actual fabrication
•  It enables longer behavior simulations
than SW-based simulators
n  As a final product
l  Vision processing
l  Network router
l  Broadcasting
l  Stock Trading
(High Frequency Trading (HFT))
l  Oil mining
2014-10-22 Shinya T-Y, NAIST 6
Object
Detection
Stock Trading
FPGA Board Overview
2014-10-22 Shinya T-Y, NAIST 7
Xilinx VC707 Evaluation Board
(400,000yen)
PCI-express
(Connected to PC)
FPGA (Xilinx Virtex-7)
Ethernet
DDR3 SODIMM DRAM
(Memory)
SD Card
Power In
2014-10-22 Shinya T-Y, NAIST 8
Digilent Atlys
FPGA: Xilinx Spartan-6 LX45
Size: Pipelined CPU ×4
Price: 20,000yen (Academic)
Digilent ZedBoard
FPGA: Xilinx Zynq-7020
Size: Pipelined CPU ×8 (+ ARM DualCore)
Price: 50,000yen (Academic)
2014-10-22 Shinya T-Y, NAIST 9
ScalableCore System
FPGA: Xilinx Spartan-6 ×100
Size: Pipelined CPU x200?
Price: 1,000,000yen?
アプリケーションのポータビリティ
n  どうやって様々なプラットフォームをサポートするか?
l  プラットフォーム毎に特性が違うL
•  ロジックサイズ・メモリサイズ・
メモリインターフェース・I/O・・・
2014-10-22 Shinya T-Y, NAIST 10
Digilent Atlys
(Xilinx Spartan-6 LX45)
Xilinx ML605
(Xilinx Virtex-6 LX240T)
ScalableCore System (our FPGA system)
(Xilinx Spartan-6 LX16 × 128-node)
IPコアベースのシステム開発
n  IPコアを開発・追加して繋げばシステム完成J
l  標準的なインターコネクトでIPコア達を接続
l  EDAツールが自動的にインターコネクトと(いくつかの)
デバイス依存のインターフェースを生成してくれるから楽ちん
2014-10-22 Shinya T-Y, NAIST 11
Xilinx Platform Studio (XPS)
IP-core List
Interconnect
FPGA
CPU
HW
Acc
DRAM
I/F
Ether PCI-E
Interconnect
HW
Acc
DRAM
IP-core
Instances
どうやってアクセラレータIPを実装するか?
n  普通にHDLでアクセラレータを実装するのは芸が無い
l  というかいろいろ面倒で嫌だ!
•  演算とメモリアクセスのスケジューリングロジック
–  ダブルバッファリングとか面倒
•  メモリシステムの制御回路
–  HDLでステートマシンを書くのは面倒だし間違えやすい
•  デバッグが面倒
l  でもパイプラインの振る舞いはサイクルレベルで定義したい
•  FPGAで性能を出すには高稼働率のパイプラインが重要
–  だから計算ロジックはHDLで書きたい
–  高位合成だとチューンがイマイチ難しい
n  抽象化されたメモリシステムが使えると幸せそう
2014-10-22 Shinya T-Y, NAIST 12
CoRAMメモリアーキテクチャ
CoRAM [Chung+,FPGA’11]
n  FPGAアクセラレータのためのメモリ抽象化
l  高位モデルによるメモリ管理でアクセラレータをポータブルに
•  計算カーネルとメモリアクセスの分離
•  ソフトウェアのモデルによるメモリアクセスパターンの記述
2014-10-22 Shinya T-Y, NAIST 13
HW Kernels
(Computing Logics)
CoRAM
Memory
Read
Write
Manage
Control Threads
(Memory Access
Pattern)
CoRAM
Channel
Read/Write Read/Write
Communication
FIFOs (Registers)
Abstracted
On-chip Memories
Off-chip
Memory
2014-10-22 Shinya T-Y, NAIST 14
What  “Runs”  CoRAM?
Memory Translation (TLBs)
Architecture
Microarchitecture
Memory Interfaces and Caches
Fabric
ClusterDMA
Control
thread
programs
Control Logic
FPGA
SRAM
Core Logic
Fabric
ClusterDMA
Control Logic
Network-on-Chip
6/19/2013 CoRAM Tutorial 18
From
CoRAM Tutorial
@FPGA’13
High-level synthesis
from C to RTL
using LLVM
RTL conversion
CONNECT
NoC generator
2014-10-22 Shinya T-Y, NAIST 15
PyCoRAM
Motivation: CoRAM for Modern EDKs
n  CoRAMのメモリ抽象化を今時のEDKで使いたい
l  標準的なインターコネクト( AMBA AXI4)に繋ぎたい
l  そうすれば他の普通のIPコアとも簡単に共存できそう
2014-10-22 Shinya T-Y, NAIST 16
Standard On-chip Interconnect
CoRAM
Abstraction
Accelerator logic
Standard IP-core
Device-dependent Interfaces
CPU core
Portable application
design with CoRAM Cooperation with standard IP-cores
PyCoRAM [Takamaeda+,CARL’13]
n  ベンダーEDK向けのPythonベースのCoRAM実装
l  計算カーネルのRTL記述とメモリアクセスパターンの
Python記述からAXI4 IPコアを自動合成
l  出来上がったIPコアをEDKでポチポチつなげばシステム完成!
n  特徴
l  Pythonでのコントロールスレッド記述
•  Pythonで簡単にメモリアクセスパターンを記述できる
–  独自の高位合成コンパイラでPython記述からVerilog HDLのRTLを合成
l  AMBA AXI4インターコネクトのサポート
•  Xilinx Platform Studio (XPS)などを用いたIPコアベースの開発を支
援
l  計算ロジックの複雑なデザインに対応
•  ハードウェアデザイン解析・生成のための
オープンソースツールキットPyverilogを活用
2014-10-22 Shinya T-Y, NAIST 17
オリジナルのCoRAMとの比較
CoRAM PyCoRAM
Language
for Control-Thread
C Python
Supported
Memory Operations
(Blocking/Non-Blocking)
Read/Write
(Blocking/Non-Blocking)
Read/Write
On-chip Interconnect CONNECT NoC [FPGA’12] AMBA AXI4
FSM Granularity
in Control Thread
LLVM-IR Python AST Node
Generate Statement
Support for User logics
No Yes
Supported FPGAs
Xilinx ML605
Altera Terasic DE-4
Any FPGAs
supporting AXI Bus
# Lines of Code
11,682 lines
(w/o CONNECT)
4,947 lines
(w/o Pyverilog)
2014-10-22 Shinya T-Y, NAIST 18
FSM: Finite State Machine
LLVM-IR: Low Level Virtual Machine Intermediate Representation
AST: Abstract Syntax Tree
PyCoRAMマイクロアーキテクチャ
2014-10-22 Shinya T-Y, NAIST 19
PyCoRAM IP
User
I/O
User Logic
CoRAM
Channel
CoRAM
Register
Control
Thread
Master
DMAC
CoRAM
Memory
Master
DMAC
CoRAM
Stream
FSM
GPIO
Slave
DMAC
CoRAM
IoChannel
PyCoRAM IP
User
I/O
User Logic
CoRAM
Channel
CoRAM
Register
Control
Thread
Master
DMAC
CoRAM
Memory
Master
DMAC
CoRAM
Stream
FSM
GPIO
Slave
DMAC
CoRAM
IoChannel
PyCoRAMマイクロアーキテクチャ
2014-10-22 Shinya T-Y, NAIST 20
Modeled in RTL
(Verilog HDL)
Memory Access
Pattern
in Python
PyCoRAMマイクロアーキテクチャの実装
2014-10-22 Shinya T-Y, NAIST 21
PyCoRAM IP
Interconnect (AXI4/Avalon)
DRAM ControllerFPGA
User
I/O
User Logic
CoRAM
Channel
CoRAM
Register
Control
Thread
Master
DMAC
Master I/F
CoRAM
Memory
Master
DMAC
Master I/F
CoRAM
Stream
Slave I/F
FSM
GPIO
Slave
DMAC
CoRAM
IoChannel
PyCoRAMマイクロアーキテクチャの実装
2014-10-22 Shinya T-Y, NAIST 22
PyCoRAM IP
Interconnect (AXI4/Avalon)
DRAM ControllerFPGA
User
I/O
User Logic
CoRAM
Channel
CoRAM
Register
Control
Thread
Master
DMAC
Master I/F
CoRAM
Memory
Master
DMAC
Master I/F
CoRAM
Stream
Slave I/F
FSM
GPIO
Slave
DMAC
CoRAM
IoChannelMaster:
メモリ等へ能動
的にアクセス
Slave:
プロセッサ等から
読み書きされる
PyCoRAMにおける開発フロー
n  計算カーネルのRTLとPythonでのコントロールスレッド
記述からIPコアパッケージを生成
l  生成されたIPコアは通常のEDAフローで利用可能
2014-10-22 Shinya T-Y, NAIST 23
User-logic
(Verilog HDL)
Control
Threads
(Python)
Logic
Hierarchy
Analysis
Python-to-
Verilog
Compilation
Control
Signal
Insertion IP-core
Packing
(RTL,
.mpd,
and
.pao)
IP-core
Integration
on EDK
Synthesis
Control
Signal Port
Addition
FPGA
Bit
File
Portable
Application
Design
PyCoRAM Tool-chain Vendor EDA FlowPython-to-Verilog HLS
RTL Conversion
IP-core
generation
with AXI4
Interface
Top design
synthesis with
AXI4
2014-10-22 Shinya T-Y, NAIST 24
PyCoRAMの使い方
PyCoRAMにおけるIPコアの作り方・でき方
n  2種類のファイルを用意する
l  Verilog HDL: 計算ロジック
l  Python: コントロールスレッド(メモリアクセスパターン)
n  PyCoRAMが自動的にIPコアのパッケージを作成
l  Python-Verilog高位合成とRTL変換を自動で行う
2014-10-22 Shinya T-Y, NAIST 25
CoramMemory1P�
#(�
.CORAM_THREAD_NAME("thread_name"),�
.CORAM_ID(0),�
.CORAM_ADDR_LEN(ADDR_LEN),�
.CORAM_DATA_WIDTH(DATA_WIDTH)�
)�
inst_memory�
(.CLK(CLK),�
.ADDR(mem_addr),�
.D(mem_d),�
.WE(mem_we),�
.Q(mem_q)�
);�
def calc_sum(times):�
ram = CoramMemory(idx=0, datawidth=32, size=1024)�
channel = CoramChannel(idx=0, datawidth=32)�
addr = 0�
sum = 0�
for i in range(times):�
ram.write(0, addr, 128)�
channel.write(addr)�
sum += channel.read()�
addr += 128 * (32/8)�
print(‘sum=’, sum)�
calc_sum(8)�
計算ロジックにおけるCoRAMオブジェクト
n  CoRAMオブジェクトはブロックRAMやFIFOとして扱う
l  一般的なメモリとよく似たインターフェース
•  CoRAMと外部を接続するインターフェースは自動的に追加される
l  いくつかのパラメータで特性を指定
•  スレッド名,ID,データ幅,アドレス幅,スキャッターギャザー等
2014-10-22 Shinya T-Y, NAIST 26
CoramMemory1P�
#(�
.CORAM_THREAD_NAME("thread_name"),�
.CORAM_ID(0),�
.CORAM_ADDR_LEN(ADDR_LEN),�
.CORAM_DATA_WIDTH(DATA_WIDTH)�
)�
inst_memory�
(.CLK(CLK),�
.ADDR(mem_addr),�
.D(mem_d),�
.WE(mem_we),�
.Q(mem_q)�
);�
(a) CoRAM Memory
CoramChannel�
#(�
.CORAM_THREAD_NAME("thread_name"),�
.CORAM_ID(0),�
.CORAM_ADDR_LEN(CHANNEL_ADDR_LEN),�
.CORAM_DATA_WIDTH(CHANNEL_DATA_WIDTH)�
)�
inst_channel�
(.CLK(CLK),�
.RST(RST),�
.D(comm_d),�
.ENQ(comm_enq),�
.FULL(comm_full),�
.Q(comm_q),�
.DEQ(comm_deq),�
.EMPTY(comm_empty)�
);�
(b) CoRAM Channel
Pythonによるコントロールスレッド
n  CoRAMオブジェクトに対する処理を記述する
l  CoRAMメモリ(read/write)
•  オンチップCoRAMメモリとオフチップDRAM
との間のDMA転送によるデータ移動
l  CoRAMチャネル(read/write)
•  ユーザロジックとコントロールスレッド
との間のトークンのやりとり
2014-10-22 Shinya T-Y, NAIST 27
def calc_sum(times):�
ram = CoramMemory(idx=0, datawidth=32, size=1024)�
channel = CoramChannel(idx=0, datawidth=32)�
addr = 0�
sum = 0�
for i in range(times):�
ram.write(0, addr, 128)�
channel.write(addr)�
sum += channel.read()�
addr += 128 * (32/8)�
print(‘sum=’, sum)�
calc_sum(8)�
# Transfer (off-chip DRAM to BRAM)
# Notification to User-logic
# Wait for Notification from User-logic
# $display Verilog system task
�
User
I/O
User Logic
CoRAM
Channel
Control
Thread
DMAC
CoRAM
Memory FSM
0�
1�
2�
3�
4�
5�
6�
7�
8�
9�
10�
11�
サポートされているPyCoRAMオブジェクト
n  データ置き場(メモリ・ストリーム)
l  CoramMemory
•  Block RAM that the data is replaced by the control thread
l  CoramInStream
•  Input FIFO from off-chip DRAM
l  CoramOutStream
•  Output FIFO to off-chip DRAM
n  ユーザロジックとコンロールスレッド間のチャネル
l  CoramChannel
•  FIFO between user-logic and control-thread
l  CoramRegister
•  Latch between user-logic and control-thread
n  他のIPコア・プロセッサからアクセスできるスレーブチャネル
l  CoramIoChannel
•  (AXI4/Avalon) Slave interface
2014-10-22 Shinya T-Y, NAIST 28
例: 配列の和を求めるアクセラレータ
n  1-CoRAM+1-Threadの簡単なハードウェア
l  CoRAMメモリにDRAM(など)からデータを読み込む
l  コントロールスレッドでオンチップ-オフチップ間のデータ転送
パターンを表現
2014-10-22 Shinya T-Y, NAIST 29
Computing Logic (Verilog HDL)
Control
Thread
(Python)
sum
CoRAM
Memory 0
+
Control Logic
CoRAM
Channel 0
A
計算ロジック (1): I/Oポート
2014-10-22 Shinya T-Y, NAIST 30
クロック(CLK)とリセット(RST)
以外に専用のI/Oは不要
CoRAMメモリのための信号
(BRAMと同じインターフェース)
CoRAMチャネルのための信号
(FIFOと同じインターフェース)
ステートマシン用変数
計算ロジック (2): パイプライン/FSM
2014-10-22 Shinya T-Y, NAIST 31
CoRAMチャネルに書き込み
(コントロールスレッドに通知)
CoRAMチャネルから読み出し
(コントロールスレッドから受信)
計算ロジック (3): 子インスタンス
2014-10-22 Shinya T-Y, NAIST 32
CoRAMメモリ
(BRAMと同じインターフェース)
CoRAMチャネル
(FIFOと同じインターフェース)
コントロールスレッド (Python)
2014-10-22 Shinya T-Y, NAIST 33
ram (CoRAMメモリ)とchannel (CoRAMチャネル)の宣言
CoRAMメモリにDMA転送したり
CoRAMチャネルから読んだり書いたり
コンパイル
2014-10-22 Shinya T-Y, NAIST 34
シミュレーション結果
2014-10-22 Shinya T-Y, NAIST 35
シミュレーション結果(波形)
2014-10-22 Shinya T-Y, NAIST 36
2014-10-22 Shinya T-Y, NAIST 37
評価
評価
n  評価項目: メモリバンド幅利用率
l  メモリ抽象化の下でも高いメモリ性能を達成できることを示す
n  セットアップ
l  FPGAボード2種
•  Digilent Atlys
–  Spartan-6 LX45
–  DDR2-800 DRAM 128MB (1.2GB/s*)
–  AXI4 128-bit, 100MHz (1.6GB/s)
•  Xilinx ML605
–  Virtex-6 LX240T
–  DDR3-800 DRAM 512MB (6.4GB/s)
–  AXI4 256-bit, 200MHz (6.4GB/s)
l  EDK
•  Xilinx Platform Studio (14.6)
2014-10-22 Shinya T-Y, NAIST 38
Xilinx ML605
(Xilinx Virtex-6 LX240T)
Digilent Atlys
(Xilinx Spartan-6 LX45)
*300MHz動作のため
評価用アプリケーション
n  配列の和を求める
l  2つのCoRAMメモリをダブルバッファで利用
l  SIMD幅 (=同時に計算する要素数) を変化させてその影響を観測
•  4, 8, 16, 32, 64 (bytes)
2014-10-22 Shinya T-Y, NAIST 39
s3
+
s2
+
s1
+
s0
+
MUX
D[0]D[1]D[2]D[3]D[0]D[1]D[2]D[3]
sum
+
MUX
D[3] D[2] D[1] D[0]
Output
CoRAM
Memory
0
CoRAM
Memory
1
from DMA Controller 0 from DMA Controller 1
結果:メモリバンド幅利用率
n  結構良い感じでメモリバンド幅を使えている
l  Atlys: 85.5% (@ 16-byte)
l  ML605: 84.9% (@ 64-byte)
n  100%使い切れていない理由
l  各DMACのトランザクションがシーケンシャルになっているか
ら
•  結果,メモリアクセスレイテンシが性能にダイレクトに影響
2014-10-22 Shinya T-Y, NAIST 40
0
0.2
0.4
0.6
0.8
1
4 8 16 32 64
BandwidthUtilization
SIMD size [byte]
0
0.2
0.4
0.6
0.8
1
4 8 16 32
BandwidthUtilization
SIMD size [byte]
Atlys (Spartan-6) ML605 (Virtex-6)
大幅に改善!
(現在評価中)
2014-10-22 Shinya T-Y, NAIST 41
応用その1
行列積・ステンシル
アクセラレータ
高性能コンピュータシステム設計コンテスト
n  競技内容
l  指定のFPGAボード上に
指定のアプリケーションを処理可能な
計算機システムを実装し処理時間を競う
l  指定FPGAボード
•  Digilent Atlys (Xilinx Spartan6 LX45)
•  Terasic DE2-115 (Altera Cyclone 4) など
n  結果
l  第1回:準優勝
•  自作MIPSコア+アクセラレータ2種
–  高前田(山崎) 伸也, 吉瀬 謙二: メモリ抽象化フレームワークPyCoRAMを
用いたソフトプロセッサ混載FPGAアクセラレータの開発
l  第2回:3位
•  Microblaze+アクセラレータ2種
–  田ノ元 正和, 枝元 正寛, 竹内 昌平, 高前田(山崎) 伸也: IPコア開発フレー
ムワークPyCoRAMを用いたHW/SW協調FPGAアクセラレータの開発
2014-10-22 Shinya T-Y, NAIST 42
ベンチマークアプリケーション4種
2014-10-22 Shinya T-Y, NAIST 43
アプリケーション 説明 メモリシステムへの要求
310_sort 整数ソート 低レイテンシ
320_mm 行列積(整数) 高バンド幅
330_stencil ステンシル計算(9点・整数) 高バンド幅
340_spath 最短経路問題 低レイテンシ
CPUコア+専用アクセラレータが良さそう
専用アクセラレータ向き行列積・ステンシル計算
ソート・最短経路問題 専用アクセラレータは面倒
第2回コンテスト用アクセラレータ構成
n  PyCoRAMでIPコア2種を実装
l  MicroblazeからはAXI4スレーブ経由でメモリマップドI/Oで制御
2014-10-22 Shinya T-Y, NAIST 44
Matrix-Mult
Accelerator
CoRAM Abstraction
MM
Logic
Cthread
MM
UART
Loader
CoRAM Abstraction
UART
Loader
Logic
Control
Thread
Microblaze
5-stage
32KB Local memory
8KB D-Cache
AXI4 Interconnect (128-bit, Crossbar)
DRAM Controller (DDR2-800 16-bit (1.6GB/s))
exStick
FPGA (Spartan-6 LX45)
DRAM (128MB)
Stencil
Accelerator
CoRAM Abstraction
Stencil
Logic
Cthread
Stencil
AXI4-lite Interconnect (32-bit, Shared bus)
行列積アクセラレータ
n  行列A・B・Cの各行をCoRAMメモリに格納
l  DRAMとの間のデータ転送をコントロールスレッドが担当
l  毎サイクル乗算パイプラインにデータを投入
l  行列Bの転送と演算をダブルバッファリング
l  SIMD幅をメモリバンド幅を使い切るようにチューニング
2014-10-22 Shinya T-Y, NAIST 45
Computing Logic (Verilog HDL)
Control
Thread
(Python)
sum
CoRAM
Memory 0
B
× +
CoRAM
Memory 1
CoRAM
Memory 2
Control Logic
CoRAM
Channel 0
8-stage
Multiply
PipelineA
C
check
sum+
I/O
Channel
性能(第2回コンテスト)
n  データ転送時間を含む総時間
n  リファレンスデザインと比較して大幅な速度向上
l  行列積・ステンシル・最短経路(ソフト実装)では
データ転送に要する時間が殆ど
•  僅差だった・・・?J
2014-10-22 Shinya T-Y, NAIST 46
40.96
42.99
40.66
52.17
38.85
42.28
35.44
44.64
29.99
26.06 25.72 25.73
0.00
10.00
20.00
30.00
40.00
50.00
60.00
sort mm stencil spath
ExecutionTime[sec]
Atlys Ref DE2 Ref PyCoMA
50.93
65.22 63.66
55.99
62.78
86.00
69.90
54.28
37.24
26.23 25.94 25.70
0.00
10.00
20.00
30.00
40.00
50.00
60.00
70.00
80.00
90.00
100.00
sort mm stencil spath
ExecutionTime[sec]
Atlys Ref DE2 Ref PyCoMA
リファレンスデータ 第1回コンテスト決勝データ
2014-10-22 Shinya T-Y, NAIST 47
応用その1
グラフ処理
アクセラレータ
ダイクストラ法アクセラレータ[高前田+,CPSY2014-07]
n  不規則なメモリアクセスパターンを持つアプリにおける
PyCoRAM適用可能性を明らかにする
l  規則的なメモリアクセスパターンを持つアプリケーション
(行列積・ステンシル)はバンド幅律速
l  メモリアクセスレイテンシの影響が大きいアプリで使えるの?
•  まずは実装してみましょう
n  今回の題材:グラフ処理
l  最短経路探索(ダイクストラ法)
•  ボトルネックになりそうな箇所
–  未訪問ノードの管理→距離をキーとした優先度キュー
–  隣接ノード情報(コスト・親ノード)の読み書き→ページング
2014-10-22 Shinya T-Y, NAIST 48
PyCoRAMを用いたダイクストラIPコア
n  PyCoRAMを使って演算モジュールはVerilog HDLで実装
メモリアクセス制御はPythonで実装
2014-10-22 Shinya T-Y, NAIST 49
Read Node
InStream
Read Edge
InStream
Update
Node
OutStream
Mark Visited
OutStream
Priority Queue
InStreamOutStream
Edge
Page
Addr
Cost
+
Next Node Addr
Node
Addr
Next Node Cost
Node Addr
Next Node Addr
Next Node Cost
FSM
DMAC DMAC DMAC DMAC DMAC DMAC Slave I/F
AXI4 Master Interfaces
AXI4-lite
Slave Interfaces
Dijkstra
Logic
(Modeled in Verilog
HDL)
Mark Visited
Cthread
Read Node
Cthread
Read Edge
Cthread
Priority Queue Cthread
Mark Visited
Cthread
Main
CThread
Control Threads (Modeled in Python)
UserDefinition(ModeledinVerilogHDLandPython)Generatedby
PyCoRAM
優先度付きキュー(ヒープ)
n  CoRAMメモリ x2 + BRAM x1
l  外部から読み出すための CoramInChannel
l  外部へ書き込むための CoramOutChannel
l  コストが小さいノード群を格納する BRAM
2014-10-22 Shinya T-Y, NAIST 50
Control
Thread
(Modeled
in Python
FSM
Channel
FIFO
Out
DMACDMAC
Priority Queue Logic (Modeled in Verilog HDL)
Memory Bus (To DRAM)
DMA requests
ParentLeft Right Child
Compare Logic
BRAM
In
d, 20
f, 45b, 30
a, 40 e, 50
BRAM
Zone
評価環境:FPGAシステム
n  ホストからUART経由で制御・グラフ構築にMicroblaze
2014-10-22 Shinya T-Y, NAIST 51
Dijkstra Accelerator
CoRAM Abstraction
Read
Node
CThread
Dijkstra Logic
Read
Node
Read
Edge
Update
Node
Mark
Visited
Read
Edge
CThread
Update
Node
CThread
Mark
Visited
CThread
Main
Control
Tread
Priority
Queue
Priority
Queue
CThread
UART Loader
CoRAM Abstraction
UART
Loader
Logic
Control
Thread
Microblaze
3-stage
16KB Local memory
2KB I-Cache
2KB D-Cache
AXI4 Interconnect (128-bit, Crossbar)
DRAM Controller (DDR2-800 16-bit (1.6GB/s))
AXI4-lite Interconnect (32-bit, Shared bus)
Host PC
FPGA
(Spartan-6 LX45)
DRAM (128MB)
実行時間
n  FPGA上の実装は汎用PCと比べて25倍程度低速L
l  メモリバンド幅あたりの性能でも1.5倍程度悪い・・・
l  なぜか?
•  データセットが小さい・OoOプロセッサのMLP抽出能力は凄い
2014-10-22 Shinya T-Y, NAIST 52
498.9 492.7
413.4 404.3
16.2
0.0
100.0
200.0
300.0
400.0
500.0
600.0
C128 C32 S128 S32 x86
ExecutionTime[msec]
25x
実行時間
n  FPGAでの実行時間を比べてみると直感と真逆の結果
l  クロスバーよりも共有バスの方が高性能!
l  バス幅が狭い方が高性能!
n  なぜか?
l  共有バスの方が
レイテンシが短い
l  バス幅が短い方が
レイテンシが短い
l  必要なモノ:
高バンド幅ではなく
短レイテンシ
2014-10-22 Shinya T-Y, NAIST 53
498.9 492.7
413.4 404.3
16.2
0.0
100.0
200.0
300.0
400.0
500.0
600.0
C128 C32 S128 S32 x86
ExecutionTime[msec]
2014-10-22 Shinya T-Y, NAIST 54
まとめ
今後の展望
n  ロジックのモデリング方式
l  コンピューティングロジックもHDLで書きたくない
l  計算カーネルに特化したマルチパラダイム処理系・DSL?
•  MyHDLとの連携方式を実装中
n  静的解析による性能・電力チューニング
l  より少ないエフォートでより高いメモリ性能
l  電力効率の高いネットワーク・システム構成の自動選択
n  実アプリケーションへの適用
l  イーサネット直結系のオフローダ(ストリーム処理?)
l  ストレージ直結系のアクセラレータ(ビッグデータ?)
2014-10-22 Shinya T-Y, NAIST 55
まとめ
n  PyCoRAM: 高位合成技術とメモリシステム抽象化を用い
たアクセラレータIPコア開発のためのフレームワーク
n  開発したツール・フレームワークはgithubにて公開中
l  PyCoRAM: http://shtaxxx.github.io/PyCoRAM/
l  Pyverilog: http://shtaxxx.github.io/Pyverilog/
2014-10-22 Shinya T-Y, NAIST 56
PyCoRAM IP
User
I/O
User Logic
CoRAM
Channel
CoRAM
Register
Control
Thread
Master
DMAC
CoRAM
Memory
Master
DMAC
CoRAM
Stream
FSM
GPIO
Slave
DMAC
CoRAM
IoChannel
Modeled in RTL
(Verilog HDL)
Memory Access
Pattern
in Python

Weitere ähnliche Inhalte

Was ist angesagt?

FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
 
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
 
高速シリアル通信を支える技術
高速シリアル通信を支える技術高速シリアル通信を支える技術
高速シリアル通信を支える技術
Natsutani Minoru
 

Was ist angesagt? (20)

20140310 fpgax
20140310 fpgax20140310 fpgax
20140310 fpgax
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
 
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
FPGAX6_hayashi
FPGAX6_hayashiFPGAX6_hayashi
FPGAX6_hayashi
 
FPGAって、何?
FPGAって、何?FPGAって、何?
FPGAって、何?
 
マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討
 
Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
 
ICD/CPSY 201412
ICD/CPSY 201412ICD/CPSY 201412
ICD/CPSY 201412
 
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
 
FPGA
FPGAFPGA
FPGA
 
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
 
高速シリアル通信を支える技術
高速シリアル通信を支える技術高速シリアル通信を支える技術
高速シリアル通信を支える技術
 
Fpga local 20130322
Fpga local 20130322Fpga local 20130322
Fpga local 20130322
 
Myoshimi extreme
Myoshimi extremeMyoshimi extreme
Myoshimi extreme
 

Andere mochten auch

Andere mochten auch (9)

助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
 
Mapping Applications with Collectives over Sub-communicators on Torus Network...
Mapping Applications with Collectives over Sub-communicators on Torus Network...Mapping Applications with Collectives over Sub-communicators on Torus Network...
Mapping Applications with Collectives over Sub-communicators on Torus Network...
 
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
 
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
 
An FPGA-based Scalable Simulation Accelerator for Tile Architectures @HEART2011
An FPGA-based Scalable Simulation Accelerator for Tile Architectures @HEART2011An FPGA-based Scalable Simulation Accelerator for Tile Architectures @HEART2011
An FPGA-based Scalable Simulation Accelerator for Tile Architectures @HEART2011
 
PythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングPythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミング
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門
 
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)
 

Ähnlich wie PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)

High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
Takuma Usui
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
Hirotaka Kawata
 

Ähnlich wie PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014) (20)

ACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyoACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyo
 
フロー技術によるネットワーク管理
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理
 
GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
 
Singularityで分散深層学習
Singularityで分散深層学習Singularityで分散深層学習
Singularityで分散深層学習
 
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
High-speed Sorting using Portable FPGA Accelerator (IPSJ 77th National Conven...
 
[DL Hacks]FPGA入門
[DL Hacks]FPGA入門[DL Hacks]FPGA入門
[DL Hacks]FPGA入門
 
2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen
 
FPGA, AI, エッジコンピューティング
FPGA, AI, エッジコンピューティングFPGA, AI, エッジコンピューティング
FPGA, AI, エッジコンピューティング
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
 
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
 
FPGAを用いたEdge AIの現状
FPGAを用いたEdge AIの現状FPGAを用いたEdge AIの現状
FPGAを用いたEdge AIの現状
 
ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介
 
El text.tokuron a(2019).katagiri
El text.tokuron a(2019).katagiriEl text.tokuron a(2019).katagiri
El text.tokuron a(2019).katagiri
 
なにわテック20180127
なにわテック20180127なにわテック20180127
なにわテック20180127
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
MPLS Japan 2019 : Data & Control Plane を繋ぐ API
MPLS Japan 2019 : Data & Control Plane を繋ぐ APIMPLS Japan 2019 : Data & Control Plane を繋ぐ API
MPLS Japan 2019 : Data & Control Plane を繋ぐ API
 

Mehr von Shinya Takamaeda-Y

Mehr von Shinya Takamaeda-Y (12)

DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモDNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
 
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
 
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
 
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)
 
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: 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...
 
むかし名言集bot作りました!
むかし名言集bot作りました!むかし名言集bot作りました!
むかし名言集bot作りました!
 
APGAS言語X10を用いたオンチップネットワークシミュレーションの並列化
APGAS言語X10を用いたオンチップネットワークシミュレーションの並列化APGAS言語X10を用いたオンチップネットワークシミュレーションの並列化
APGAS言語X10を用いたオンチップネットワークシミュレーションの並列化
 
Network Performance of Multifunction On-chip Router Architectures (IEICE-CPSY...
Network Performance of Multifunction On-chip Router Architectures (IEICE-CPSY...Network Performance of Multifunction On-chip Router Architectures (IEICE-CPSY...
Network Performance of Multifunction On-chip Router Architectures (IEICE-CPSY...
 

PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)