Your SlideShare is downloading. ×
0
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,971

Published on

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

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,971
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
18
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 2014年1月23日 発表10分 計算機アーキテクチャ研究会@東工大 メモリ抽象化フレームワーク PyCoRAMを用いた ソフトプロセッサ混載 FPGAアクセラレータの開発 チーム名: PyCoRAMist(学生部門) 高前田(山崎) 伸也†‡,吉瀬 謙二† †東京工業大学 大学院情報理工学研究科 ‡日本学術振興会 特別研究員 (DC1)
  • 2. まずコンテストルールを確認しよう 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
  • 3. ベンチマークアプリケーション4種 アプリケーション 説明 メモリシステムへの要求 310_sort 整数ソート 低レイテンシ 320_mm 行列積(整数) 高バンド幅 330_stencil ステンシル計算(9点・整数) 高バンド幅 340_spath 最短経路問題 低レイテンシ 行列積・ステンシル計算 ソート・最短経路問題 専用アクセラレータ向き 専用アクセラレータは面倒 CPUコア+専用アクセラレータが良さそう 2014-01-23 Shinya T-Y. Tokyo Tech 3
  • 4. どうやって実装するか? n  普通にHDLでアクセラレータを実装するのは芸が無い l  というかいろいろ面倒で嫌だ!博論〆切前だし・・・(当時) •  演算とメモリアクセスのスケジューリングロジック –  ダブルバッファリングとか面倒 •  メモリシステムの制御回路 –  HDLでステートマシンを書くのは面倒だし間違えやすい •  デバッグが面倒 l  でもパイプラインの振る舞いはサイクルレベルで定義したい •  FPGAで性能を出すには高稼働率のパイプラインが重要 –  だから計算ロジックはHDLで書きたい –  高位合成だとチューンがイマイチ難しい n  抽象化されたメモリシステムが使えると幸せそう CoRAMメモリアーキテクチャ 2014-01-23 Shinya T-Y. Tokyo Tech 4
  • 5. CoRAM [Chung+,FPGA’11] n  FPGAアクセラレータのためのメモリ抽象化 l  高位モデルによるメモリ管理でアクセラレータをポータブルに •  計算カーネルとメモリアクセスの分離 •  ソフトウェアのモデルによるメモリアクセスパターンの記述 Read/Write Communication FIFOs (Registers) CoRAM Channel Read/Write Read Write CoRAM Memory Abstracted On-chip Memories HW Kernels (Computing Logics) 2014-01-23 Off-chip Memory Shinya T-Y. Tokyo Tech Manage Control Threads (Memory Access Pattern) 5
  • 6. 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
  • 7. PyCoRAMマイクロアーキテクチャ GPIO User I/O User Logic CoRAM Register Control Thread CoRAM Channel CoRAM Memory DMAC 2014-01-23 CoRAM Stream DMAC Shinya T-Y. Tokyo Tech FSM 7
  • 8. PyCoRAMマイクロアーキテクチャ Modeled in RTL (Verilog HDL) User I/O GPIO User Logic CoRAM Register Control Thread Memory Access Pattern in Python CoRAM Channel CoRAM Memory DMAC 2014-01-23 CoRAM Stream DMAC Shinya T-Y. Tokyo Tech FSM 8
  • 9. PyCoRAMマイクロアーキテクチャの実装 GPIO User I/O PyCoRAM IP User Logic CoRAM Register Control Thread CoRAM Channel CoRAM Memory CoRAM Stream DMAC DMAC AXI I/F AXI I/F FSM AXI4 Interconnect FPGA 2014-01-23 DRAM Controller Shinya T-Y. Tokyo Tech 9
  • 10. PyCoRAMにおける開発フロー n  計算カーネルのRTLとPythonでのコントロールスレッド 記述からIPコアパッケージを生成 l  生成されたIPコアは通常のEDAフローで利用可能 RTL Conversion User-logic (Verilog HDL) Control Threads (Python) Portable Application Design 2014-01-23 Logic Hierarchy Analysis Python-toVerilog Compilation Control Signal Insertion IP-core generation with AXI4 Interface IP-core Packing Control Signal Port Addition PyCoRAM Tool-chain Python-to-Verilog HLS Shinya T-Y. Tokyo Tech (RTL, .mpd, and .pao) Top design synthesis with AXI4 IP-core Integration on EDK Synthesis FPGA Bit File Vendor EDA Flow 10
  • 11. Pythonによるコントロールスレッド n  CoRAMオブジェクトに対する処理を記述する l  CoRAMメモリ(read/write) User I/O User Logic •  オンチップCoRAMメモリとオフチップDRAM との間のDMA転送によるデータ移動 l  CoRAMチャネル(read/write) •  ユーザロジックとコントロールスレッド との間のトークンのやりとり Control Thread CoRAM Channel CoRAM Memory FSM DMAC 0� def calc_sum(times):� ram = CoramMemory(idx=0, datawidth=32, size=1024)� 1� channel = CoramChannel(idx=0, datawidth=32)� 2� addr = 0� 3� sum = 0� 4� for i in range(times):� 5� ram.write(0, addr, 128)� # Transfer (off-chip DRAM to BRAM) 6� channel.write(addr)� # Notification to User-logic 7� sum += channel.read()� # Wait for Notification from User-logic 8� addr += 128 * (32/8)� 9� print(‘sum=’, sum)� # $display Verilog system task 10� � 11� calc_sum(8)� 2014-01-23 Shinya T-Y. Tokyo Tech 11
  • 12. ユーザロジックにおけるCoRAMオブジェクト n  CoRAMオブジェクトはブロックRAMやFIFOとして扱う l  一般的なメモリとよく似たインターフェース •  CoRAMと外部を接続するインターフェースは自動的に追加される l  いくつかのパラメータで特性を指定 •  スレッド名,ID,データ幅,アドレス幅,スキャッターギャザー等 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)� );� 2014-01-23 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)� );� (a) CoRAM Memory (b) CoRAM Channel Shinya T-Y. Tokyo Tech 12
  • 13. PyCoRAM IPコアを用いたFPGAアクセラレータ FPGA Other AXI IP-core or CPU PyCoRAM IP (Application) CoRAM Memory DMA Cluster HW Kernels (Computing Logics) CoRAM Memory DMAC AXI I/F CoRAM Channel CoRAM Stream CoRAM Stream DMAC DMAC DMAC AXI I/F AXI I/F AXI I/F CoRAM Memory DMA Cluster Control Thread CoRAM Memory FSM AXI4 Interconnect DRAM Controller DRAM (Off-chip) 2014-01-23 Shinya T-Y. Tokyo Tech 13
  • 14. PyCoRAM IPコアのインターフェース n  標準的なAXI4マスターインターフェース WrData Enque AlmFull WrData Enque AlmFull Empty Deque RdData FSM Addr Size RdEn RdEn Ready WrData Enque AlmFull Control Thread RdEn Busy Ready RdData ・・・ WrEn DMA Controller Deque RdData Empty Deque WrEn WrData BramAddr DramAddr Size Empty CoRAM Channel DMA Cluster WrEn Addr WrData ・・・ RdData CoRAM Memory (BRAM) WrEn WrData RdData Addr CoRAM Memory (BRAM) RdData Addr WrEn RdData WrData Addr HW Kernels (Computing Logic) Write Address Channel Write Data Channel Read Address Channel RDATA RREADY RVALID ARADDR ARLEN ARVALID ARREADY WDATA BVALID WVALID WREADY AWADDR AWLEN AWVALID AWREADY AXI Master Interface (Protocol Conversion) Read Data Channel AXI4 Interconnect 2014-01-23 Shinya T-Y. Tokyo Tech 14
  • 15. 決勝用FPGAアクセラレータ n  構成: 6段MIPSコア+UARTローダー+アクセラレータ2種 l  DRAMとの間のAXI4インターコネクトはXPSが自動的に生成 l  動作周波数: ロジック/AXIバス:100MHz, DRAM:400MHz 6-stage MIPS-core L1-D Cache (2-way, 32KB, 64bytes/line) PyCoRAM Abstraction UART Memory Loader PyCoRAM Abstraction Matrix Multiplication Accelerator 9-point Stencil Accelerator PyCoRAM Abstraction PyCoRAM Abstraction AXI4 Interconnect (32-bit, Shared-bus) DRAM Controller 2014-01-23 Shinya T-Y. Tokyo Tech 15
  • 16. 決勝用FPGAアクセラレータ n  構成: 6段MIPSコア+UARTローダー+アクセラレータ2種 l  DRAMとの間のAXI4インターコネクトはXPSが自動的に生成 l  動作周波数: ロジック/AXIバス:100MHz, DRAM:400MHz 9.8% 6-stage MIPS-core L1-D Cache (2-way, 32KB, 4.5% 64bytes/line) PyCoRAM Abstraction 0.4% UART Memory Loader 2.5% PyCoRAM Abstraction Matrix Multiplication Accelerator 28.1% PyCoRAM Abstraction 9-point Stencil Accelerator 22.5% PyCoRAM Abstraction AXI4 Interconnect (32-bit, Shared-bus) DRAM Controller 2014-01-23 Shinya T-Y. Tokyo Tech 6.3% 16
  • 17. 行列積アクセラレータ n  行列A・B・Cの各行をCoRAMメモリに格納 l  DRAMとの間のデータ転送をコントロールスレッドが担当 l  毎サイクル乗算パイプラインにデータを投入 l  行列Bの転送と演算をダブルバッファリング •  行列Bは別のPyCoRAMハードウェアを用いて予め転置 •  おおよそ400MB/sのメモリ帯域を利用(最大帯域の1/4程度) Control Thread (Python) Computing Logic (Verilog HDL) CoRAM Memory 0 A B CoRAM Memory 1 2014-01-23 8-stage Multiply Pipeline × + check sum CoRAM Memory 2 + C sum Control Logic Shinya T-Y. Tokyo Tech CoRAM Channel 0 17
  • 18. ステンシル計算アクセラレータ n  元配列の3行と結果配列の1行をCoRAMメモリに格納 l  DRAMとの間のデータ転送をコントロールスレッドが担当 l  毎サイクル加算・除算パイプラインに3点分のデータを投入 •  過去3サイクルの入力値の合計を9で割る(3点×3サイクル=9点) l  計算1行分毎に結果を書き戻して元配列の次の1行を読み込む •  おおよそ130MB/sのメモリ帯域を利用(最大帯域の1/12程度) Computing Logic (Verilog HDL) CoRAM Memory 0 CoRAM Memory 1 CoRAM Memory 2 d0 d1 d2 + + check sum CoRAM Memory 3 / rslt 41-stage Add-Divide Pipeline Control Logic 2014-01-23 Control Thread (Python) Shinya T-Y. Tokyo Tech CoRAM Channel 0 18
  • 19. MIPSコア用L1データキャッシュ n  データRAMとしてCoRAMメモリを利用 l  データリプレイスメントをコントロールスレッドが担当 •  キャッシュミス時にコントロールスレッドにリクエストを発行 CoRAM Memory 0,1 Write Data reg Cache Logic (Verilog HDL) D0 MUX = D1 Read Data Stall Control Thread (Python) reg Tag0 Addr Select Tag1 Write Enable reg = CoRAM Channel 0 Read Enable 2014-01-23 Control Logic Shinya T-Y. Tokyo Tech 19
  • 20. 評価 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
  • 21. 性能 n  全実行時間から転送時間を引いた正味の計算時間を比較 n  リファレンスデザインと比較して大幅な速度向上 l  6段MIPSコアのみの構成で平均3.5倍の高速化 l  6段MIPSコア+アクセラレータ2種の構成で 平均13.2倍,最大47.1倍(ステンシル計算)の高速化 25 50 Ref 40 6-stage+ACC Time [sec] 16.0 15 14.2 14.2 9.8 10 4.44.4 3.63.6 5 2.7 0.4 Relative Performance 20 45 20.8 6-stage 0 6-stage+ACC 35.2 35 30 25 20 13.2 15 10 5 0.3 47.1 6-stage 3.9 3.9 5.9 4.7 4.7 1.4 3.5 0 310_sort 2014-01-23 320_mm 330_stencil 340_spath 310_sort Shinya T-Y. Tokyo Tech 320_mm 330_stencil 340_spath Gmean 21
  • 22. ハードウェア使用率 n  ユーザロジックと比べてDMACとAXI I/Fの リソース消費量が多い l  整数アプリかつパイプラインが1本 なので相対的に大きく見える n  コントロールスレッドのレジスタ消費量が 多い l  ステートマシンが巨大なため l  細粒度並列性を抽出しFSMを 小さくすると改善可能? l  レジスタは余り気味だから 気にしなくてもいい 5000 4500 4000 3500 3000 2500 2000 1500 1000 500 0 L1D-Cache 2014-01-23 Slice Reg 80.0% 70.0% 60.0% 50.0% Entire System Utilization Peripheral Loader Stencil Acc. MM Acc. L1D-Cache UART MIPS 40.0% 30.0% 20.0% 10.0% 0.0% Slice Reg 9000 LUT LUT AXI I/F 8000 AXI I/F DMAC 7000 DMAC Control Thread 6000 Control Thread User-logic 5000 User-logic 4000 3000 2000 1000 MM Acc. Stencil Acc. 0 Loader L1D-Cache Shinya T-Y. Tokyo Tech MM Acc. Stencil Acc. Loader 22
  • 23. まとめ 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

×