fpga startup 第一回 lt
TRANSCRIPT
昔ちょっとかじった人が久しぶりにに触ってみた
15年ぶりだねああ、間違いない。FPGAだ
大和 一洋第1回FPGAスタートアップセミナーLT
大学院時代、FPGAとの出会い
2000年代初頭物理の実験(宇宙線測定)装置開発
多数のセンサ同時読み出しにFPGA利用
センサー
センサー
センサー
ADC
ADC
ADC
ALTERAAPEX
(VHDL)
ホストシステムへ
数千チャンネル
USB2.0デバイス
コントローラ
直近10年ミラクル・リナックス社に勤務
Linux/OSSに関連したソフトウェア技術者
Linux OS デジタルサイネージ 運用監視ソフトGStreamer, H.264OpenGL (Mesa)WebKit(C++)
カーネル、ライブラリの不
具合調査・修正
(C言語)
GLibMySQL, RabbitMQDjango(C++, Python, JS)
文字列分割(トークナイザ)をFPGAで
OSの基本機能のオフロードにトライ
文字列処理の基本機能: 分割
“I have a pen” ⇒ I, have, a, pen■ C言語 strtok()■ Java StringTokenier■ Python split()
春から業務として取り組む半年ぐらいフルタイム
● Xilinx Virtex-7 XC7VX690T-2○ ALPHA DATA ADM-PCIE-7V3
■ PCI Express: x8, Gen3
● Vivado● Vivado HLS (高位合成コンパイラ)
○ C++で記述
デバイスと開発環境
時間を要したところ
● 並列的な処理(高速化)のための方式開発
● ホストコンピュータとのデータ入出力効率化○ デバイスドライバ
○ 効率的な転送のための高位合成コンパイラへの指示本日、Tipsを共有したい
ホストとFPGAのデータ転送での問題
分割器(C++)
AXIPCIe
Bridge(LogiCORE)
PCIeRoot
Complex
CPU
RAM
AXIインターフェイス PCI Express
FPGA
DMAエンジン
バースト転送
バースト転送
バースト転送
バースト転送
バースト転送
シュミレーション 実動作
→時間→時間
期待(シュミレーション )より長い
効率的なバースト転送のための設定
(1) for文やmemcpy()に与えるバースト長
(2) AXIインターフェイスへのパラメータ追加
#pragma HLS INTERFACE m_axi port=lengths offset=slave bundle=gmem
max_read_burst_length=32 latency=0ベストな値は?
マニュアルでも曖昧な表現、試行錯誤的に決定
● 実機評価で初めて気づいたのでハマった
性能:対CPUで最大約10倍高速
入力サイズ数KB以下
(1) CPU:速い
(2) FPGA:一定
スループット
最大約4.2GiB/s(1)
(2)
感想・まとめ
● 15年ぶりだけど、なんとか出来た
○ 高位合成、実用的と思うも、それ用に書く必要■ 既存の資産の流用は難しいのでは
■ C++でもCPU用に書く場合と頭の使ってる場所が違う感じ
● PCI Expressカード
○ バースト転送の効率重要■ Xilinx Vivado HLS: AXIインターフェイスのパラメータ設定
● レポートにまとめて、12月初めに会社から公開予定
● 実際は、SDAccel (OpenCL)でもやってみた
○ 興味ある方、お話しましょう