アクセラレーション: 工場のたとえ - 2021.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-03-29
Version
2021.2 Japanese

CPU、GPU、およびプログラマブル デバイスの間には、明確な違いがあります。これらの違いを理解することで、それぞれのデバイス用のアプリケーションを効率的に開発し、最適なアクセラレーションを達成できます。

CPU および GPU はどちらも定義済みのアーキテクチャで、決まった数のコアおよび命令セットのほか、柔軟性の低いメモリ アーキテクチャが含まれます。GPU のパフォーマンスは、コアの数と SIMD/SIMIT の並列処理で決まります。一方、プログラマブル デバイスは完全にカスタマイズ可能なアーキテクチャです。開発者は、アプリケーションの要件に合わせて計算ユニットを作成します。計算ユニット数を増やすのではなく、データパスをパイプライン処理することによりパフォーマンスを達成します。

たとえば、CPU は熟練作業員がそれぞれ 1 人ずつ働く作業場を集めたようなもので、作業員はほとんど何でも作成できる汎用ツールを使用できます。それぞれの作業員が異なるツールを使用して、原材料から 1 つずつ完成品を仕上げていきます。この順次的なプロセスには、その仕事の特性によって、多くの手順が必要となることがあります。作業場はそれぞれ独立しており、作業員は互いに邪魔したり、問題を調整したりすることなく、個別に作業を進めます。

GPU の場合も作業員と作業場がありますが、作業員の数が多く、それぞれがより専門化している点が異なります。使用できるのは特殊なツールのみなので、できることは少なくなりますが、作業を効率的に実行できます。GPU の作業員は、小数の同じ作業を繰り返したり、全員が同じ作業を同時に実行したりする場合などに最適です。作業員が多いので、全員に同じ命令をする方が効率的です。

プログラマブル デバイスは、この作業場のたとえで言えば産業化時代への変化のようなものです。CPU と GPU が順次手順を実行して入力を出力に変換する個別の作業員の集まりであるとすると、プログラマブル デバイスは組立ラインとベルトコンベヤーのある工場のようなものです。組立ラインに配備された作業員グループが、原材料を徐々に完成品に仕上げていきます。それぞれの作業員が同じ仕事を繰り返して、ベルトコンベヤーで流れ作業をするので、製品化までの処理能力は大幅に向上します。

また、プログラマブル デバイスでは、CPU および GPU の作業場および作業員とは異なり、工場および組立ラインが実際には存在しないという点も異なります。上記のたとえを言い換えると、プログラマブル デバイスは開発待機中の空地を集めたようなものです。つまり、デバイスの開発では、汎用ツールを使用するのではなく、工場、組立ライン、ワークステーションを構築し、それらを必要な作業に合わせてカスタマイズします。敷地の大きさに限りがあるように、デバイスの不動産も無限にあるわけではないので、デバイス内で建設可能な工場の数と大きさには限りがあります。このため、デバイス プログラム プロセスではこれらの工場を正しく建設して設定することが重要となります。

従来のソフトウェア開発では定義済みのアーキテクチャに機能をプログラムしますが、プログラマブル デバイス開発では必要な機能をインプリメントするアーキテクチャをプログラムします。