メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発...

23
メモリ抽象化フレームワーク PyCoRAMを用いた ソフトプロセッサ混載 FPGAアクセラレータの開発 チーム名: PyCoRAMist(学生部門) 高前田(山崎) 伸也 †‡ ,吉瀬 謙二 東京工業大学 大学院情報理工学研究科 日本学術振興会 特別研究員 (DC1) 2014123日 発表10計算機アーキテクチャ研究会@東工大

description

2014年1月23日 情報処理学会 計算機アーキテクチャ研究会@東京工業大学 第1回プロセッサ設計コンテスト論文 "メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発"

Transcript of メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発...

Page 1: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

メモリ抽象化フレームワーク PyCoRAMを用いた ソフトプロセッサ混載

FPGAアクセラレータの開発 チーム名: PyCoRAMist(学生部門) 高前田(山崎) 伸也†‡,吉瀬 謙二†

†東京工業大学 大学院情報理工学研究科 ‡日本学術振興会 特別研究員 (DC1)

2014年1月23日 発表10分 計算機アーキテクチャ研究会@東工大

Page 2: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

まずコンテストルールを確認しよう n 競技内容

l 指定のFPGAボード上に 指定のアプリケーションを処理可能な 計算機システムを実装し処理時間を競う

•  FPGAボード: Digilent Atlys –  FPGA: Xilinx Spartan-6 LX45, DRAM: DDR2-800 (1.6GB/s)

n ルールをよく読む

2014-01-23 Shinya T-Y. Tokyo Tech 2 速ければいい!

Page 3: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

ベンチマークアプリケーション4種

2014-01-23 Shinya T-Y. Tokyo Tech 3

アプリケーション 説明 メモリシステムへの要求

310_sort 整数ソート 低レイテンシ

320_mm 行列積(整数) 高バンド幅

330_stencil ステンシル計算(9点・整数) 高バンド幅

340_spath 最短経路問題 低レイテンシ

CPUコア+専用アクセラレータが良さそう

専用アクセラレータ向き 行列積・ステンシル計算 ソート・最短経路問題 専用アクセラレータは面倒

Page 4: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

どうやって実装するか? n 普通にHDLでアクセラレータを実装するのは芸が無い

l というかいろいろ面倒で嫌だ!博論〆切前だし・・・(当時) •  演算とメモリアクセスのスケジューリングロジック

–  ダブルバッファリングとか面倒

•  メモリシステムの制御回路 –  HDLでステートマシンを書くのは面倒だし間違えやすい

•  デバッグが面倒

l でもパイプラインの振る舞いはサイクルレベルで定義したい •  FPGAで性能を出すには高稼働率のパイプラインが重要

–  だから計算ロジックはHDLで書きたい

–  高位合成だとチューンがイマイチ難しい

n 抽象化されたメモリシステムが使えると幸せそう

2014-01-23 Shinya T-Y. Tokyo Tech 4

CoRAMメモリアーキテクチャ

Page 5: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

CoRAM [Chung+,FPGA’11] n  FPGAアクセラレータのためのメモリ抽象化

l 高位モデルによるメモリ管理でアクセラレータをポータブルに •  計算カーネルとメモリアクセスの分離

•  ソフトウェアのモデルによるメモリアクセスパターンの記述

2014-01-23 Shinya T-Y. Tokyo Tech 5

HW Kernels (Computing Logics)

CoR

AM

M

emor

y

Read Write

Manage

Control Threads (Memory Access

Pattern)

CoRAM Channel

Read/Write Read/Write

Communication FIFOs (Registers)

Abstracted On-chip Memories

Off-chip Memory

Page 6: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

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-01-23 Shinya T-Y. Tokyo Tech 6

Page 7: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

PyCoRAMマイクロアーキテクチャ

2014-01-23 Shinya T-Y. Tokyo Tech 7

User I/O

User Logic

CoRAM Channel

CoRAM Register

Control Thread

DMAC

CoRAM Memory

DMAC

CoRAM Stream FSM

GPIO

Page 8: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

PyCoRAMマイクロアーキテクチャ

2014-01-23 Shinya T-Y. Tokyo Tech 8

User I/O

User Logic

CoRAM Channel

CoRAM Register

Control Thread

DMAC

CoRAM Memory

DMAC

CoRAM Stream FSM

GPIO Modeled in RTL (Verilog HDL)

Memory Access Pattern

in Python

Page 9: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

PyCoRAMマイクロアーキテクチャの実装

2014-01-23 Shinya T-Y. Tokyo Tech 9

PyCoRAM IP

AXI4 Interconnect

DRAM Controller FPGA

User I/O

User Logic

CoRAM Channel

CoRAM Register

Control Thread

DMAC

AXI I/F

CoRAM Memory

DMAC

AXI I/F

CoRAM Stream FSM

GPIO

Page 10: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

PyCoRAMにおける開発フロー n 計算カーネルのRTLとPythonでのコントロールスレッド記述からIPコアパッケージを生成 l 生成されたIPコアは通常のEDAフローで利用可能

2014-01-23 Shinya T-Y. Tokyo Tech 10

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 Flow Python-to-Verilog HLS

RTL Conversion IP-core

generation with AXI4 Interface

Top design synthesis with

AXI4

Page 11: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

Pythonによるコントロールスレッド n  CoRAMオブジェクトに対する処理を記述する

l  CoRAMメモリ(read/write) •  オンチップCoRAMメモリとオフチップDRAM との間のDMA転送によるデータ移動

l  CoRAMチャネル(read/write) •  ユーザロジックとコントロールスレッド との間のトークンのやりとり

2014-01-23 Shinya T-Y. Tokyo Tech 11

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�

Page 12: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

ユーザロジックにおけるCoRAMオブジェクト n  CoRAMオブジェクトはブロックRAMやFIFOとして扱う

l 一般的なメモリとよく似たインターフェース •  CoRAMと外部を接続するインターフェースは自動的に追加される

l いくつかのパラメータで特性を指定 •  スレッド名,ID,データ幅,アドレス幅,スキャッターギャザー等

2014-01-23 Shinya T-Y. Tokyo Tech 12

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

Page 13: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

PyCoRAM IPコアを用いたFPGAアクセラレータ

2014-01-23 Shinya T-Y. Tokyo Tech 13

Control Thread

FSM

AXI4 Interconnect

DRAM Controller

DRAM (Off-chip)

DMAC

AXI I/F

CoRAM Memory

CoRAM Memory

AXI I/F

CoRAM Memory

CoRAM Memory

DMAC DMAC

AXI I/F

CoRAM Stream

DMAC

AXI I/F

CoRAM Stream

CoRAM Channel

HW Kernels (Computing Logics)

DMA Cluster

DMA Cluster

FPGA

Other AXI

IP-core or

CPU

PyCoRAM IP (Application)

Page 14: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

PyCoRAM IPコアのインターフェース n 標準的なAXI4マスターインターフェース

2014-01-23 Shinya T-Y. Tokyo Tech 14

DMA Controller

・・・

DramAddr BramAddr

Size WrEn RdEn Busy

Ready

Control Thread

FSM

Deq

ue

Em

pty

RdD

ata

Alm

Full

Enq

ue

WrD

ata

Rea

dy

RdE

n

RdE

n

Siz

e

Add

r

AXI Master Interface (Protocol Conversion)

AXI4 Interconnect

WR

EA

DY

WVA

LID

WD

ATA

BVA

LID

AWR

EA

DY

AWVA

LID

AWLE

N

AWA

DD

R

RVA

LID

RR

EA

DY

RD

ATA

AR

RE

AD

Y

AR

VALI

D

AR

LEN

AR

AD

DR

Write Address Channel

Write Data Channel

Read Address Channel

Read Data Channel

HW Kernels (Computing Logic)

Add

r

WrD

ata

RdD

ata

WrE

n

CoRAM Memory (BRAM)

Add

r

WrD

ata

RdD

ata

WrE

n

Add

r

WrD

ata

RdD

ata

WrE

n

CoRAM Memory (BRAM)

Add

r

WrD

ata

RdD

ata

WrE

n

CoRAM Channel

Deq

ue

Em

pty

RdD

ata

Alm

Full

Enq

ue

WrD

ata

Deq

ue

Em

pty

RdD

ata

Alm

Full

Enq

ue

WrD

ata

・・・ DMA Cluster

Page 15: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

決勝用FPGAアクセラレータ n 構成: 6段MIPSコア+UARTローダー+アクセラレータ2種

l  DRAMとの間のAXI4インターコネクトはXPSが自動的に生成

l 動作周波数: ロジック/AXIバス:100MHz, DRAM:400MHz

2014-01-23 Shinya T-Y. Tokyo Tech 15

AXI4 Interconnect (32-bit, Shared-bus)

DRAM Controller

PyCoRAM Abstraction

L1-D Cache (2-way, 32KB, 64bytes/line)

6-stage MIPS-core

PyCoRAM Abstraction

Memory Loader

UART

PyCoRAM Abstraction

Matrix Multiplication Accelerator

PyCoRAM Abstraction

9-point Stencil

Accelerator

Page 16: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

決勝用FPGAアクセラレータ n 構成: 6段MIPSコア+UARTローダー+アクセラレータ2種

l  DRAMとの間のAXI4インターコネクトはXPSが自動的に生成

l 動作周波数: ロジック/AXIバス:100MHz, DRAM:400MHz

2014-01-23 Shinya T-Y. Tokyo Tech 16

AXI4 Interconnect (32-bit, Shared-bus)

DRAM Controller

PyCoRAM Abstraction

L1-D Cache (2-way, 32KB, 64bytes/line)

6-stage MIPS-core

PyCoRAM Abstraction

Memory Loader

UART

PyCoRAM Abstraction

Matrix Multiplication Accelerator

PyCoRAM Abstraction

9-point Stencil

Accelerator

9.8%

4.5%

0.4%

2.5% 28.1% 22.5%

6.3%

Page 17: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

行列積アクセラレータ n 行列A・B・Cの各行をCoRAMメモリに格納

l  DRAMとの間のデータ転送をコントロールスレッドが担当

l 毎サイクル乗算パイプラインにデータを投入

l 行列Bの転送と演算をダブルバッファリング •  行列Bは別のPyCoRAMハードウェアを用いて予め転置

•  おおよそ400MB/sのメモリ帯域を利用(最大帯域の1/4程度)

2014-01-23 Shinya T-Y. Tokyo Tech 17

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 Pipeline A

C

check sum +

Page 18: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

ステンシル計算アクセラレータ n 元配列の3行と結果配列の1行をCoRAMメモリに格納

l  DRAMとの間のデータ転送をコントロールスレッドが担当

l 毎サイクル加算・除算パイプラインに3点分のデータを投入 •  過去3サイクルの入力値の合計を9で割る(3点×3サイクル=9点)

l 計算1行分毎に結果を書き戻して元配列の次の1行を読み込む •  おおよそ130MB/sのメモリ帯域を利用(最大帯域の1/12程度)

2014-01-23 Shinya T-Y. Tokyo Tech 18

Computing Logic (Verilog HDL) Control Thread

(Python) CoRAM

Memory 0

d1

CoRAM Memory 2

CoRAM Memory 3

Control Logic CoRAM Channel 0

41-stage Add-Divide

Pipeline

d0

rslt

d2

+ /

+ check sum

CoRAM Memory 1

Page 19: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

MIPSコア用L1データキャッシュ n データRAMとしてCoRAMメモリを利用

l データリプレイスメントをコントロールスレッドが担当 •  キャッシュミス時にコントロールスレッドにリクエストを発行

2014-01-23 Shinya T-Y. Tokyo Tech 19

Cache Logic (Verilog HDL)

Control Thread

(Python)

CoRAM Memory

0,1

Control Logic

CoRAM Channel 0

D0

D1

MU

X Tag0

=

Select Tag1

=

Write Data

Addr Stall

Read Data

Write Enable Read

Enable

reg

reg

reg

Page 20: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

評価 n 登場選手

l リファレンスデザイン (Ref)

l  6段MIPSコア+L1キャッシュ (6-stage)

l  6段MIPSコア+L1キャッシュ+アクセラレータ (6-stage+ACC)

n アプリケーションデータセット l 予選データセット

n  FPGA合成ツール l  Xilinx Platform Studio 14.6, PlanAhead 14.6

•  Optimization goal: Speed, Optimization Effort: High

•  AXI4 Interconnect: 32-bit Shared bus (Area optimized)

n  MIPS用ソフトウェアコンパイラ l  gcc 4.3.3 (-O3)

2014-01-23 Shinya T-Y. Tokyo Tech 20

Page 21: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

性能 n 全実行時間から転送時間を引いた正味の計算時間を比較 n リファレンスデザインと比較して大幅な速度向上

l  6段MIPSコアのみの構成で平均3.5倍の高速化

l  6段MIPSコア+アクセラレータ2種の構成で 平均13.2倍,最大47.1倍(ステンシル計算)の高速化

2014-01-23 Shinya T-Y. Tokyo Tech 21

3.9 1.4

5.9 4.7 3.5 3.9

35.2

47.1

4.7

13.2

0

5

10

15

20

25

30

35

40

45

50

310_sort 320_mm 330_stencil 340_spath Gmean

Rel

ativ

e Pe

rfor

man

ce

6-stage

6-stage+ACC

14.2 14.2 16.0

20.8

3.6

9.8

2.7 4.4 3.6

0.4 0.3

4.4

0

5

10

15

20

25

310_sort 320_mm 330_stencil 340_spath

Tim

e [s

ec]

Ref 6-stage 6-stage+ACC

Page 22: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

ハードウェア使用率

2014-01-23 Shinya T-Y. Tokyo Tech 22

0.0%

10.0%

20.0%

30.0%

40.0%

50.0%

60.0%

70.0%

80.0%

Slice Reg LUT

Peripheral Loader Stencil Acc. MM Acc. L1D-Cache UART MIPS

0 500

1000 1500 2000 2500 3000 3500 4000 4500 5000

L1D-Cache MM Acc. Stencil Acc. Loader

AXI I/F

DMAC

Control Thread

User-logic

0 1000 2000 3000 4000 5000 6000 7000 8000 9000

L1D-Cache MM Acc. Stencil Acc. Loader

AXI I/F

DMAC

Control Thread

User-logic

Slice Reg LUT

Entire System Utilization n  ユーザロジックと比べてDMACとAXI I/Fの リソース消費量が多い l  整数アプリかつパイプラインが1本 なので相対的に大きく見える

n  コントロールスレッドのレジスタ消費量が多い l  ステートマシンが巨大なため l  細粒度並列性を抽出しFSMを 小さくすると改善可能?

l  レジスタは余り気味だから 気にしなくてもいい

Page 23: メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発

まとめ

n メモリ抽象化フレームワークPyCoRAMを用いた FPGAアクセラレータの開発 l  MIPSコア+UARTローダー+アクセラレータ2種を混載

l リファレンスデザインと比較して最大47.1倍の性能向上を達成

n 開発したツール・フレームワークはgithubにて公開中 l  PyCoRAM: http://shtaxxx.github.io/PyCoRAM/

l  Pyverilog: http://shtaxxx.github.io/Pyverilog/

2014-01-23 Shinya T-Y. Tokyo Tech 23