昔ちょっとかじった人が
久しぶりにに触ってみた
15年ぶりだね
ああ、間違いない。FPGAだ
大和 一洋
第1回FPGAスタートアップセミナーLT
大学院時代、FPGAとの出会い
2000年代初頭
物理の実験(宇宙線測定)装置開発
多数のセンサ同時読み出しにFPGA利用
センサー
センサー
センサー
ADC
ADC
ADC
ALTERA
APEX
(VHDL)
ホストシステムへ
数千チャンネル
USB2.0
デバイス
コントローラ
直近10年ミラクル・リナックス社に勤務
Linux/OSSに関連したソフトウェア技術者
Linux OS デジタルサイネージ 運用監視ソフト
GStreamer, H.264
OpenGL (Mesa)
WebKit
(C++)
カーネル、ライブラリの不
具合調査・修正
(C言語)
GLib
MySQL, RabbitMQ
Django
(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++)
AXI
PCIe
Bridge
(LogiCORE)
PCIe
Root
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)でもやってみた
○ 興味ある方、お話しましょう

FPGA startup 第一回 LT