ソフトウェア開発とハードウェア開発の境界線は、案外あいまいなものです。HDL (ハードウェア記述言語)を用いて実現したい機能を設計できる FPGA (フィールド プログラマブル ゲート アレイ) デバイスは、ハードウェア プログラミングとソフトウェア プログラミングのいわば橋渡しとして機能します。
しかし、これまで FPGA はハードウェア エンジニアのみがプログラムできるデバイスとして敬遠されてきました。そこで、FPGA のプログラミング プロセスをより身近なものにするために、共通の開発ツールにプラグインして使用する最新の統合ソフトウェア プラットフォームが登場し、誰もが簡単に利用できるデバイスとなりました。
実際、ソフトウェア開発者でも簡単に FPGA をプログラムできます。ここでは、FPGA の仕組みとその有効性など、FPGA の基礎について説明します。また、FPGA アプリケーションを設計して実行するために必要なツールも紹介します。
FPGA は、CLB (コンフィギャラブル ロジック ブロック) やユーザーがプログラムおよび再プログラムできるさまざまな機能を搭載した集積回路 (IC) です。「フィールド プログラマブル」という言葉は、FPGA の機能を自在にプログラムでき、ほかの IC チップのようにメーカーでハードワイヤ実装されていないデバイスを意味します。
FPGA は、PLD (プログラマブル ロジック デバイス) に分類される集積回路 (IC) であり、製造後に変更できる適応性に優れたハードウェアで構築されていることが特徴です。配列された各ハードウェア ブロックは個別に設定でき、必要に応じて接続できるため、あらゆるアプリケーションに対応できるドメイン固有のアーキテクチャを構築できます。
このハードウェアのアダプタビリティが、CPU や GPU との差別化要因となります。
CPU は高い柔軟性を備えていますが、基盤となるハードウェアが固定されています。CPU 製造後は、ハードウェアを変更できません。メモリ上のどのデータに対して、どの演算 (算術関数) を実行するかは、ソフトウェアで決定します。ハードウェアは、ソフトウェア命令で呼び出されるすべての動作を実行しますが、一度に 1 つの命令しか実行できません。それに対して FPGA は、膨大なデータを並列処理できます。適応型ハードウェアの利点は、主に計算の性質や並列処理能力などアプリケーションによって異なりますが、同じ機能を CPU に実装した場合と比べて、FPGA では 20 倍の性能向上が見られることも珍しくありません。
GPU は、CPU の欠点である大量データの並列処理が可能であり、ワイド データセットに対して演算を実行できます。基本的には GPU もハードウェアが固定され、ソフトウェア命令で動作するため、CPU と類似しています。1 つの命令で 1000 個以上のデータ処理が可能なため、グラフィック アクセラレーション、高性能コンピューティング、ビデオ処理、一部の機械学習など、ドメイン特化型として最適です。ただし、GPU の基本アーキテクチャとデータフローは製造前に確定されます。
FPGA は、プログラマや設計者がアプリケーション要件に合わせて演算アーキテクチャを変更できるため、より要件に合ったドメイン固有のアーキテクチャを実現できます。FPGA は、目新しい技術ではありませんが、AI などの分野でイノベーションが加速し、その必要性がますます高まっています。最初の商用 FPGA は、1985 年に AMD が開発したものであり、今では FPGA 市場の 60% ~ 70% を占めています。
無償の eBook をダウンロード
アダプティブ コンピューティングの紹介
FPGA はさまざまな分野で使用されており、その用途はデータセンター、航空宇宙工学、防衛、人工知能 (AI)、インダストリアル IoT (モノのインターネット)、有線/無線ネットワーク、オートモーティブなど、多岐にわたります。一般的には、リアルタイム性が重視される環境で使用されます。たとえば、家庭用監視カメラは、家主のスマート デバイスに高解像度映像を最小限の遅延でリアルタイムに送る必要があります。このように、消費者へ必要な情報をリアルタイムに届けるスマート デバイスが普及する現代ではその必要性がますます高まっていくでしょう。
また、本来ならソフトウェアで実行される機能を FPGA で高速化できるため、人工知能のディープ ニューラル ネットワーク (DNN) 推論などの性能が重視されるタスクのオフロード機能としても有効です。
FPGA アーキテクチャは、ハードウェア アクセラレーション ソリューションを効率的に実現できます。ASIC や GPU などのデバイスは、プログラムとメモリ間をジャンプする旧式の手法を採用しているため、データの格納と取得に多くの電力を必要とし、性能低下を招くため。リアルタイム性が要求されるアプリケーションには適していません。
FPGA は、これらのデバイスとは異なり、プログラムとメモリ間をジャンプする必要がないため、より効率的なデータの格納と取得が可能です。柔軟な FPGA アーキテクチャは、特定のタスクに対して割り当てる電力量をカスタマイズできます。
1 つまたは複数の FPGA を使用して、従来の CPU やほかのデバイスから、電力を消費するタスクをオフロードすることも可能です。また、多くの FPGA は再プログラムが可能なため、ハードウェア アクセラレーション システムに変更を加えて簡単にアップグレードできます。
FPGA のプログラミングでは、HDL を使用して回路を設計し、デバイスに必要な機能を構成します。この設計プロセスは、GPU や CPU のプログラミングとは異なり、連続的に実行されるプログラムを記述することではありません。HDL を使用して、必要な機能を備えるためにハードウェアに物理的な変更を加えるのです。
プロセスはソフトウェア プログラミングのように、コードを記述してバイナリ ファイルに変換し、FPGA にロードしますが、ソフトウェアを実行するためにデバイスを最適化するのではなく、ハードウェアに物理的な変更を加えます。
FPGA 上のプログラムは、論理ゲートやメモリ ブロックなどの下位エレメントを組み合わせて構成され、それらが連携して 1 つのタスクを実行します。FPGA は、ハードウェアをゼロから構築するため、非常に柔軟性が高いソリューションだと言えます。各タスクに応じて、メモリや消費電力などの基本機能を調整できます。
FPGA は、ソフトウェア開発者の領域というより、ハードウェア設計者の領域と思われるかもしれません。というのも、FPGA のコード記述に使用される HDL が、ソフトウェア エンジニアよりもハードウェア エンジニアに馴染みのある低水準言語が使用されている理由から、実際の HDL は、一般的なソフトウェア言語とよく似ています。
FPGA の「プログラミング」は、ソフトウェアのプログラミングとは設定や実行方法が異なるため、まったく同じとは言えませんが、FPGA のコード記述や実行は、ソフトウェア アルゴリズムを作成するプロセスと類似していると考えられます。従来、FPGA は回路レベルで設計するハードウェア技術者でなければプログラムできないものでしたが、今はそうではありません。
統合ソフトウェア プラットフォームを利用すれば、HDL の知識がなくても、任意の言語で FPGA をプログラムできます。このため、ソフトウェア開発者は新たなプログラミング言語を習得する必要がなく、専門分野に集中できます。これらのプラットフォームは、基本的に高級言語を低水準言語に変換し、FPGA に目的の機能を備えられるようにサポートします。統合ソフトウェア プラットフォームでサポートされている FPGA プログラミング用の言語は次のとおりです。
TensorFlow や Pytorch などの AI フレームワーク - Vitis AI により、 TensorFlow や Pytorch などの学習済みディープ ラーニング モデルをそのまま利用してコンパイルし、FPGA を高速化できます。これにより、低水準言語を使用するハードウェア プログラミングが不要になるだけでなく、CPU や GPU を使用する一般的なソフトウェア コンパイルに匹敵する超高速コンパイル (数分以内) が可能になります。
C/C++ - 高位合成 (HLS) により、C 言語で FPGA を設計できるようになりました。たとえば、AMD の Vivado™ HLS コンパイラは、C/C++ プログラムの最適化のために、標準および専用プロセッサと主要テクノロジを共有するプログラミング環境を提供します。これにより、ソフトウェア エンジニアは、限られたメモリ スペースや演算リソースに悩まされることなくコードを最適化できます。
Python - AMD のプラットフォーム上で Python 言語や Python ライブラリを使用して簡単に FPGA をプログラムできるようにサポートする AMD のオープンソース プロジェクト「PYNQ」を使用して、高性能アプリケーションを作成できます。
また、現在の FPGA プログラミングで使用されているハードウェア記述言語 (HDL) も多数あります。主な HDL 言語とその特徴は次のとおりです。
Lucid - Verilog のような古典的な言語の問題点を解消した FPGA 用の言語です。
VHDL - VHSIC(Very High Speed Integrated Circuits)Hardware Description Language の略で、Ada と Pascal をベースに 1980 年代に登場した言語です。
Verilog - 最初の HDL である Verilog は、現在では主にテスト解析や検証に使用されています。この言語のベースは C 言語です。
これまで FPGA は、ハードウェア エンジニア専用のデバイスとして考えられてきましたが、今では AI サイエンティストやソフトウェア プログラマがソフトウェアのコードを記述するような感覚で FPGA を設計できる画期的なプラットフォームがあります。適切なツールを使用すれば、現在のソフトウェア/ハードウェアの知識レベルで、FPGA を簡単にプログラムできます。
GPU プログラミング経験者であれば、多少の違いがあるものの、FPGA のコード記述プロセスにすぐに慣れるでしょう。FPGA プログラミング プロセスは、コードを記述し、必要に応じてプログラムを低水準言語に変換して、バイナリ ファイルに変換します。そして、FPGA にプログラムを書き込みます。これは、GPU が実行する C++ プログラムを書き込むプロセスと同じで、非常にシンプルです。
一方で、このプログラミング プロセスを効率化するためには、適切なプラットフォームを利用する必要があります。AMD は、FPGA プログラミング プロセスのあらゆる段階でソフトウェア開発者を支援する画期的なツール 環境を提供しています。
Vitis™ 統合ソフトウェア プラットフォームは、ソフトウェア エンジニア、データ サイエンティスト、AI 開発者向けの FPGA プログラミング プロセスを効率化する最先端アプリケーションです。AMD の FPGA や ACAP ハードウェア プラットフォームに最適化された広範なオープンソース ライブラリ、そしてハードウェアの設計経験がなくてもアクセラレーション アプリケーションをシームレスに構築できるコア開発キットが含まれます。
また、Vitis Model Composer も含まれており、MATLAB® および Simulink® 環境内で使用できるツールボックスを提供しています。これらを使用して、新しいアプリケーションの設計やテスト プロセスを効率化できます。
Vitis™ は、エッジ、オンプレミス、クラウド環境でデータや計算負荷の高いアプリケーションの高速化を 4 つの手順で可能にします。
アプリケーションの高速化が必要な部分を特定する
Vitis アクセラレーション ライブラリを使用してアクセラレータを設計する、または C、C++、OpenCL、RTL で独自開発する
構築、解析、デバッグを実行して機能の正当性を検証し、性能目標に達していることを検証する
AMD プラットフォームを使用して設計したアクセラレーション アプリケーションをエッジ、オンプレミス、またはクラウド上で運用する
FPGA プログラミングは、ハードウェアの専門知識がないと難しいと思われていますが、Vitis™ プラットフォームを利用すれば、ソフトウェア開発者でも簡単に設計できます。AMD は、業界トップの収益を誇る FPGA ベンダーであり、ソフトウェア エンジニアのアプリケーション構築をサポートする豊富なリソースを提供している業界リーダーです。
C、C++、および OpenCL™ でプログラムした機能は、AMD の Vitis™ HLS ツールを利用して、ハードウェアに統合できます。HLS ツールによって、コード生成が自動化され、アップデートが簡単になります。また C/C++ コードの最適化によって低レイテンシ高スループットを実現できます。
簡単に FPGA をプログラミングできます。最適な方法を選択してください。簡単に FPGA をプログラミングできます。