膨大なデータに対し、複雑な演算処理を高速に実行するHPC(ハイパフォーマンス・コンピューティング)ですが、その世界市場規模は2025年には500億米ドル近くまで成長すると予測されています。
HPC領域をチップセットの観点から捉えるとCPU、GPU、ASIC、FPGAに大別され、コンピューティング方式の観点からはスーパーコンピューティング、量子コンピューティングもHPC領域に含めることができます。
このように間口の広いHPCの中から、FPGAに着目した連載をお届けします。
みなさんはFPGAと呼ばれる製品をご存じでしょうか? FPGA(Field Programmable Gate Array)とは、ユーザ独自の回路を何度でも書き換えができるデバイスで、Xilinx(ザイリンクス)とIntel(旧アルテラ)の2大メーカーだけで80%以上のシェアを誇っています。近年では、ビットコインなどの仮想通貨のマイニング性能でNVIDIAのGPUとも比較されている高性能な演算デバイスです。
![FPGAの説明](https://www.kagoya.jp/howto/wp-content/uploads/202105a_1-2.png)
目次
FPGAの有用性
「ムーアの法則」の終焉!?
ムーアの法則とは、Intel創業者の一人であるゴードン・ムーアが「半導体の集積率は18ヶ月で2倍になる」と唱えた有名な話で、言い換えると18ヶ月後には同じサイズのデバイスは2倍の処理性能を持つと同じ意味になります。しかし、有名な下記のグラフによると集積度は法則を維持しつつも、周波数や性能については頭打ちの状態で限界が近いことが見て取れます。この限界に対して、Intel/AMDなどのCPUメーカーはマルチスレッド化できるような仕組みを取っていますが、CPUコアの並列化にも限界があり他の対策が急務となっています。
![半導体の集積率](https://www.kagoya.jp/howto/wp-content/uploads/202105a_2.png)
ヘテロジニアスコンピューティング
ムーアの法則の終焉に対して、Intelなどのプロセッサメーカは用途に適した異なるプロセッサで処理をさせる「ヘテロジニアスコンピューティング」に1つの解を求めました。それは、IntelによるAltera(当時の2大FPGAメーカーの1つ)買収からも見て取れます。Intelに続きAMDによるXilinx(No.1 FPGAメーカー)や、逆の形のNVIDIAによるARM買収など、演算処理性能の限界をヘテロジニアスコンピューティングで超えていく動きが活発化しています。
![](https://www.kagoya.jp/howto/wp-content/uploads/202105a_3.png)
GPUに代わるFPGAとは
機械学習推論のイメージで説明します。
GPUはとても演算能力の高い演算デバイスですが、この演算能力を活かすためには複数の入力を待って同時に処理を開始する必要があります。しかし、FPGAはユーザが機械学習に特化した回路を搭載する事ができるので、入ってきたデータから順番に(1フレーム分のデータが揃う前に)処理するような回路を作る事により順次処理が可能になります。これは、自動車の自動ブレーキや産業用ロボットなど高速な処理を求める機器に非常に有効です。この様にFPGAは、独自のアルゴリズムで高速に処理したいユーザに採用が広がっており、NVIDIA T4, V100, A100等のGPGPUアクセラレータカードと置き換え可能なPCIeスロットに挿して使えるFPGA アクセラレータカードが利用されています。
![](https://www.kagoya.jp/howto/wp-content/uploads/202105a_4.gif)
FPGAの設計は難しい!?
FPGAの採用事例
FPGAは、最近よく耳にする5G(基地局)・車載向け自動ブレーキやロボットの制御・民生品まで、幅広く産業機器に採用されています。また、組込み製品向けにARM(CPU)を内蔵したFPGA(Xilinx:Zynq、Intel:Cyclone SoC)もあり、様々な用途で使用する事が出来る様になっていますので、皆様が直接目にする機会もそう遠くはないかもしれません。
ハード設計用の言語で回路を作ってみた
ASIC(デジタル回路)やFPGA設計で用いる言語をHDL(ハードウェア記述言語)と言い、Verilog-HDL/VHDLが有名です。この言語はクロック単位での演算や制御を行うのに特化しており、ゲートレベルに置き換えられる論理合成(Synopsysのツールなど)を実行しハードウェアを構成していきます。
以下に32bit同士を加算する単純な記述を書いてみました。見てわかるように、クロック単位で制御するため抽象度は低くなってしまいます。また、1クロックで加算し終えないと正確な値が伝達されないので、クロック速度によってはcarry-look-ahead型などの高速加算器を作る必要も出てきますが、carry先読み回路は規模が大きくなるため全体の回路サイズとのトレードオフで構成を決めたりします。この様にハード設計者はクロック単位で回路を考察し、ソフトウェアでは到達できない圧倒的なパフォーマンスを持つ回路を作成していきます。
![](https://www.kagoya.jp/howto/wp-content/uploads/202105a_5-1.png)
実はC言語でも設計可能!!
C言語を高位合成ツール(NEC:CyberWorkBench)を使ってHDL化する話は20年以上も前から存在しており、最近では無償の高位合成ツール(Xilinx:Vivado HLS)もリリースされるなど、導入の敷居が下がっている状況です。
しかし、ソフトウェアエンジニアがASICやFPGA設計をしてパフォーマンスが出た話をほとんど聞いたことがありません。”なぜか?”、それはソフトウェアエンジニアが記述する抽象度の高いC言語ベースで設計できたとしても、記述そのものがパイプライン処理を意識していない為に都度メモリにアクセスする様な構成の回路設計になってしまうからです。
Cベース設計については、アダプティブコンピューティング研究推進体のAcriブログに説明されていますので参照してみてください。
これからはFPGA設計不要のソリューション
ヘテロジニアスコンピューティングで処理性能を上げていくのは喫緊の課題かと思いますが、前述したようにFPGAをソフトウェアエンジニアが設計するには未だにハードルが高い状況です。
その様な状況の中、Xilinx/Intelは PCIeスロットに挿入可能なFPGAカード向けに特化したアクセラレータソリューション(機械学習推論・データ分析・画像圧縮/展開・金融向けなど)を次々にリリースしており、ユーザはお持ちのアプリケーションをFPGAを意識することなく圧倒的なパフォーマンスのFPGAアクセラレーションを実行する事ができます。
![](https://www.kagoya.jp/howto/wp-content/uploads/202105a_6-1.png)
次回予告:FPGAアクセラレータカードでディープラーニングをやってみよう
FPGAカードを使って、Githubのサンプルで簡単に機械学習推論を実行し、且つ、GPUでは到達不可能な低遅延が確認できるデモ動画を準備します。