設計原則 - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

はじめに

HLS ツールを使用し、C/C++ コードを記述してハードウェア用の RTL を生成することで生産性を向上させたり、C/C++ アルゴリズムの一部を高速化してプログラマブル ロジックにインプリメントしたカスタム ハードウェアで実行したりできます。この章は、C/C++ で記述されたソフトウェア アルゴリズムからハードウェアを合成するプロセスについて理解してもらうことを目的としています。この資料では、高位合成 (HLS) ツールを使用してハードウェアに正しく変換できるように、優れた合成可能なソフトウェアを設計および作成するための基本的な概念について説明します。ここで紹介する概念はほとんどの HLS ツールに共通したもので、ツール独自のものではありません。経験豊富な設計者はこの資料を参照することで、これらの概念の重要性がよりはっきりとするので、HLS へのアプローチ方法、特に HLS コードの構造を理解して、パフォーマンスに優れたデザインを達成するのに役立つはずです。

スループットとパフォーマンス

プログラマブル ロジックにカスタム ハードウェアとしてインプリメントされた C/C++ の関数は、従来の CPU/GPU アーキテクチャで達成可能な速度よりもかなり高速で実行し、高い処理速度やパフォーマンスを達成できます。まず、ハードウェア アクセラレーションの観点から、これらの用語の意味について説明します。「スループット」は、時間単位ごとに実行される特定のアクションの数、または時間単位ごとに生成される結果の数として定義されます。これは、時間単位あたりの生産量 (自動車、オートバイ、I/O サンプル、メモリ ワード、反復回数) の単位で測定されます。たとえば、「メモリ帯域幅」という用語が、メモリ システムのスループットを指定するために使用されることがあります。同様に、「パフォーマンス」は、より大きなスループットということではなく、低消費電力でより大きなスループットと定義されます。消費電力の削減は、今日ではより大きなスループットと同じくらい重要です。

アーキテクチャの重要性

カスタム ハードウェアがプログラムの一部をアクセラレーションする方法を理解するには、まずプログラムが従来のコンピューターでどのように動作するかを理解する必要があります。フォンノイマン型アーキテクチャは、70 年以上前に設計されたものですが、現在のほぼすべてのコンピューティングの基礎となっています。このアーキテクチャは、大規模なアプリケーションに最適であり、非常に柔軟性が高く、プラグマバブルである傾向がありますが、アプリケーションの要求がシステムにストレスを与え始めたため、CPU が複数プロセスの実行をサポートするようになりました。マルチスレッドやマルチプロセスには、複数の「システム プロセス」を含めることも (たとえば、複数のプログラムを同時に実行するなど) できるほか、これらを複数の「スレッド」を持つ 1 つのプロセスで構成することもできます。 共有メモリ システムを使用したマルチスレッド プログラミングは、ソフトウェア開発者が並列処理を念頭に置いて、CPU アーキテクチャを固定してアプリケーションを設計できるようになったため、非常に人気が高まっています。ただし、マルチスレッドや増え続ける CPU 速度によりデータ プロセッシング レートが追いつかなくなった場合は、右側の図に示すように、複数の CPU コアとハイパースレッドを使用してスループットを向上させました。

この汎用的な柔軟性は、消費電力とピーク スループットの点でコストがかかります。今日どこにでもあるスマホ、ゲーム、オンライン ビデオ会議では、処理されるデータの性質が変化しています。スループットを向上させるには、ワークロードをメモリに近づけるか、または特殊な機能ユニット内に移動する必要があります。そのため、十分なプログラマビリティを維持しながら、より優れたパフォーマンスとと低消費電力を実現できるように、新しいプログラマブル アーキテクチャを設計することが新しい課題となります。

FPGA (フィールド プログラマブル ゲート アレイ) は、このようなプログラマビリティを提供しつつ、これを高パフォーマンスで低消費電力のソリューションにするのに十分なメモリ帯域幅も提供します。プログラムを実行する CPU とは異なり、FPGA はカスタムのハードウェア回路に組み込んで、それがハードウェアの専門部分が動作するのと同じ方法で入力に応答します。FPGA のようなリコンフィギャラブル デバイスには、基本的なロジック ゲートからデジタル信号処理 (DSP) ブロックなどの完全な演算ロジック ユニットまで、非常に柔軟な粒度の計算要素が含まれます。粒度が高くなると、カーネルと呼ばれるユーザー指定の構成可能なロジック ユニットを FPGA に戦略的に配置して、さまざまな役割を実行できます。リコンフィギャラブルな FPGA デバイスのこの特性により、カスタムのマクロアーキテクチャの作成が可能になり、アプリケーション特有の並列処理を利用する際に従来の CPU/GPU よりも大きな利点をもたらします。計算がデバイスに空間的にマップできるため、プロセッサ中心のプラットフォームよりも運用スループットが大幅に向上します。最新の FPGA デバイスには、プログラマブル ファブリックにプログラムすることなく使用できるプロセッサ コア (Arm ベース) やその他のハード化された IP ブロックを含めることもできます。