**********************************************************************
セッションs4b
テーマ:ソフトウェアエンジニアでもできる、ハードウェアをやわらかく使う方法
講師:満田賢一郎(システム開発研究所)
日時:2017/8/25 13:00-14:10
参加人数:18人
**********************************************************************

・ISPの紹介
所属:(株)システム計画研究所/ISP
ISPの事業分野としては医療情報、webアプリケーションシステム事業、通信、ネットワーク、制御、宇宙システム事業、AIシステム事業、画像処理システム事業
FPGAでアルゴリズムを加速(アクセラレート)することにたいして関心がある。

・アクセラレータ開発の必要性
組み込むシステムでも取得するデータや扱うデータが増加しており加速は必要である。
処理量の増加への対策としてハードウェアの強化が挙げられる。
対策1 CPUコアを増やす
CPUコアを複数搭載する方法。近年は一般的に使われているが、並列処理での効率化には限界がある。
対策2 専用ハードウェアを追加したSoC(System on a chip)
CPUコアと応用目的の専用機能(GPUなど)を統合する方法。同じことを大量にすることは得意だが、CPUに対して汎用性が欠ける。
対策3 再構成可能ハードウェアを追加したSoC
CPUコアと機能に応じて再構成可能なハードウェアを統合する方法。ソフトウェアエンジニアが対象アルゴリズムを論理回路としてアルゴリズムを設計する。
対策1、2はソフトウェアエンジニアでも可能だが対策3は難しい。

・FPGAを使ったアクセラレータ開発の実際
FGPAとは各リソース(CLB、BR、DSP)を格子状に配置したものである。
一般的なFPGA開発手法はハードウェア記述言語(HDL)を用いたRTL設計である。
RTL設計とは回路の動作をレジスタ間のデータ転送とそれに対する論理演算の組み合わせで記述する設計方法。
RTL設計を実践したがソフトウェアベースのアルゴリズムからRTL設計をするのは非現実的という結論に至った。特にクロック等を意識するのが難しい。

・高位合成があればFPGA開発は簡単?
高位合成(HLS)を用いた設計では、HLS言語で記述されたアルゴリズムツールでRTLに変換する。RTLで必要なクロック、リセットなどの信号は隠蔽できるが、HLS可能なC、C++にはいくつかの制限がある。
HLSを使ったROBUSKEY(独自の高品位クロマキー合成アルゴリズム)をInterBEEに参考出品した。
HLSを使ってROBUSKEYデモを作成して得た結論はHLSを使ってソフトウェアエンジニアがHLSを作ることは比較的現実的ということ。
ROBUSKEYデモ作成で行ったことは周辺回路やIPといった部品から作成し、それらを結合して最後にソフトウェアを書くといった作業であり、「ボトムアップ型」の作業工程である。
高位合成でのIPを作成以外にもソフトエンジニアとってハードルの高い作業は多くある。
ソフトウェアエンジニアが感じる高位合成以外の課題としてプラットフォームの扱いの難しさや開発手順が煩雑であること、開発手順が「トップダウン型」ではなく「ボトムアップ型」であることが挙げられる。

・最新ツールで、もっと「ソフト」にFPGA開発
プラットフォームの扱いの難しさや開発手順の煩雑さ、開発手順が「ボトムアップ型」であるといった問題を最新のツールを使うと解決できる。今回はSDSoCを紹介。
SDSoCにはあらかじめ提供される開発プラットフォーム、ソフトウェアとハードウェアの両方のソースコードを扱える統一環境、アルゴリズムのアクセラレーションを意識した機能がある。
SDSoCを導入することで上述の問題を解消できた。
ソフトウェアからのアクセラレータ開発では元のアルゴリズムの機能の担保とアクセラレータによる「目標性能」を考慮する必要がある。
ソフトウェアからHLSでアクセラレータ開発するときは
1.元のソフトウェアで実装
2.本来のアルゴリズム
3.高位合成対応の実装
の順に行う。
高位合成をするにおいてハードウェアの知識が必要。HLSでよい設計をするにおいてソフトウェアにはない「物理リソース」、FPGA内部の使用するリソース量の感覚が必要である。
高位合成は新しいプログラミング言語を学ぶのとは違う。
ソフトウェアエンジニアが高位合成を使うために学ぶべきことは
1.高位合成を経験したエンジニアへのヒアリング
2.FPGAを構成する要素技術や動作の特徴
3.非ノイマン型のアーキテクチャに関する理解

質疑応答
Q.HDLを書くことができる人が高位合成をするメリットについて
A.HSLを使うことで書くコードの量が減ったことや、ビット幅の調整があとから行えるなどプロトタイピング的にも便利である。
Q.高位合成を使うとC言語とRTLで対応が取れない。デバックが大変だがどうすればいいのか
A.機能面ではゴールデンデータを作って結果が一緒であることを担保する。性能面では難しい。

感想
参加者1
かつての論理合成によく似ており、今後スタンダードになると感じた。また高位合成をするにおいてハードウェアの理解、特に非ノイマン型の考え方が大切である。
参加者2
昔に比べて簡単になったと感じた。

まとめ
ソフトウェアエンジニアもFPGAを使えるようになるべきである。FPGAという選択肢を持つことによる技術の発展の可能性がある。