
ハードウェアアクセラレーションとは、汎用CPU上で動作するソフトウェアよりも高速に特定の機能を実行するために、ハードウェアアクセラレータと呼ばれるコンピュータハードウェアを使用することです。CPU上で動作するソフトウェアで計算できるデータ変換は、適切なハードウェアアクセラレータ、または両者の組み合わせによっても計算できます。
コンピューティングタスクをより効率的に実行するには、一般的に、ソフトウェアの改善、ハードウェアの改善、あるいはその両方に時間と資金を投資することができます。レイテンシの低減、スループットの向上、エネルギー消費量の削減といった観点から、それぞれに長所と短所を持つ様々なアプローチが存在します。
ソフトウェアに注力することの典型的な利点としては、汎用性の向上、開発の迅速化、非反復的なエンジニアリングコストの削減、移植性の向上、機能の更新やバグ修正 の容易さなどが挙げられますが、その代償として、一般的な演算処理のオーバーヘッドが増加します。
ハードウェアに焦点を当てることの利点としては、高速化、消費電力の削減[ 1 ]、レイテンシの低減、並列性[ 2 ]と帯域幅の増加、集積回路上で利用可能な面積と機能コンポーネントのより良い利用などが挙げられます。ただし、シリコンにエッチングされた後の設計の更新能力の低下、機能検証のコストの増加、市場投入までの時間の増加、およびより多くの部品の必要性といった代償があります。
汎用プロセッサから完全にカスタマイズされたハードウェアまで、デジタルコンピューティングシステムの階層構造では、柔軟性と効率性のトレードオフがあり、特定のアプリケーションがその階層構造の上位(つまり、よりカスタマイズされた側)に実装されるほど、効率性が桁違いに向上します。 [ 3 ]この階層構造には、CPU などの汎用プロセッサ、[ 4 ] GPUのプログラマブルシェーダーなどのより特殊なプロセッサ、[ 5 ]フィールドプログラマブルゲートアレイ(FPGA)に実装されたアプリケーション、[ 6 ]および特定用途向け集積回路(ASIC)に実装された固定機能が含まれます。 [ 7 ]
ハードウェアアクセラレーションはパフォーマンスに有利であり、機能が固定されている場合は実用的であるため、ソフトウェアソリューションほど更新は必要ありません。FPGAなどの再プログラム可能なロジックデバイスの出現により、ハードウェアアクセラレーションの制限は2010年以降、完全に固定されたアルゴリズムに限定されなくなり、アルゴリズムと処理制御フローの変更が必要な問題領域にもハードウェアアクセラレーションを適用できるようになりました。[ 8 ] [ 9 ]しかし、欠点は、多くのオープンソースプロジェクトでは、すべてのベンダーが配布または公開したがらない独自のライブラリが必要となるため、そのようなプロジェクトに統合するのが難しいことです。
集積回路は、アナログ信号とデジタル信号の両方に対して様々な演算処理を行うように設計されています。コンピューティングにおいては、デジタル信号が最も一般的であり、通常は2進数で表現されます。コンピュータのハードウェアとソフトウェアは、この2進数表現を用いて演算を実行します。これは、2進数入力に対してブール関数を処理し、その結果をストレージや他のデバイスによるさらなる処理のために出力することによって行われます。
チューリングマシンはあらゆる計算可能な関数を実行できるため、特定のソフトウェアと同じ機能を実行するカスタムハードウェアを設計することは常に可能です。逆に、ソフトウェアを使用して特定のハードウェアの機能をエミュレートすることも常に可能です。カスタムハードウェアは、ソフトウェアで指定できる同じ機能に対して、ワットあたりのパフォーマンスを向上させることができます。VerilogやVHDLなどのハードウェア記述言語(HDL)は、ソフトウェアと同じ意味論をモデル化し、設計をFPGAにプログラムしたり、ASICの論理ゲートに構成したりできるネットリストに合成することができます。
ソフトウェアベースのコンピューティングの大部分は、フォン・ノイマン・アーキテクチャを実装したマシン上で行われ、これらは総称してプログラム内蔵型コンピュータと呼ばれています。コンピュータプログラムはデータとして格納され、プロセッサによって実行されます。このようなプロセッサは、ソフトウェアプログラムを構成する命令を実行するために、命令をフェッチしてデコードし、メモリからデータオペランドをロードする必要があります(命令サイクルの一部として)。コードとデータに共通のキャッシュを使用することで、「フォン・ノイマン・ボトルネック」と呼ばれる、フォン・ノイマン・アーキテクチャを実装したプロセッサ上でのソフトウェアのスループットに対する根本的な制限が生じます。命令とデータがメモリ階層内で別々のキャッシュを持つ改良型ハーバード・アーキテクチャにおいても、命令オペコードのデコードとマイクロプロセッサまたはマイクロコントローラ上の利用可能な実行ユニットの多重化にはオーバーヘッドがあり、回路利用率が低くなります。同時マルチスレッドを提供する最新のプロセッサは、利用可能なプロセッサ機能ユニットの利用率の低さと、異なるハードウェアスレッド間の命令レベルの並列性を活用しています。
ハードウェア実行ユニットは一般的にフォン・ノイマン型アーキテクチャや改良型ハーバード型アーキテクチャに依存しておらず、命令サイクルの命令フェッチおよびデコード処理を実行する必要がないため、これらの処理に伴うオーバーヘッドが発生しません。必要な計算がレジスタ転送レベル(RTL)のハードウェア設計で指定されている場合、命令フェッチおよびデコード処理によって発生する時間と回路面積のコストを節約し、他の用途に活用できます。
このリソース再利用により、計算における時間、電力、回路面積を節約できます。再利用されたリソースは、並列計算の強化、その他の機能、通信、メモリ、入出力機能の向上などに利用できます。ただし、汎用性は低下します。
ハードウェア設計のRTLカスタマイズ性を高めることで、インメモリコンピューティング、トランスポートトリガーアーキテクチャ(TTA)、ネットワークオンチップ(NoC)などの新興アーキテクチャは、実行コンテキストへのデータの局所性の向上からさらに恩恵を受け、モジュール間および機能ユニット間のコンピューティングおよび通信の遅延を低減できます。
カスタムハードウェアの並列処理能力は、集積回路ダイ上で使用可能な面積とロジックブロックによってのみ制限されます。[ 10 ]したがって、ハードウェアは汎用プロセッサ上のソフトウェアよりも大規模な並列処理を提供する自由度が高く、並列ランダムアクセスマシン(PRAM)モデルを実装する可能性を提供します。
単一の FPGA または ASIC 上に、マイクロプロセッサ IP コアの回路図からマルチコアおよびメニーコア処理ユニットを構築することは一般的です。 [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ]同様に、デジタル信号処理のように、プロセッサIP コアに組み込まれることなく、特殊な機能ユニットを並列に構成することもできます。そのため、特に大量のデータに対して、条件分岐がほとんどない反復的で固定されたタスクには、ハードウェア アクセラレーションがよく使用されます。NvidiaのCUDAシリーズの GPU はこのように実装されています。
デバイスのモビリティが高まるにつれて、物理的なハードウェアの寸法、消費電力、および処理スループットなどの特性を考慮して、特定のアクセラレーション プロトコルの相対的なパフォーマンスを測定する新しい指標が開発されました。これらは、タスク効率、実装効率、および柔軟性の 3 つのカテゴリにまとめることができます。適切な指標は、ハードウェアの面積と、対応する処理スループットおよび消費エネルギーの両方を考慮します。[ 16 ]
ハードウェアアクセラレーションの例としては、グラフィックス処理ユニット (GPU) のビットブリットアクセラレーション機能、ニューラルネットワークを高速化するためのメンリスタの使用、正規表現によるサービス拒否(ReDoS) 攻撃を防ぐことを目的としたサーバー業界のスパム対策のための正規表現ハードウェアアクセラレーションなどがあります。[ 17 ]アクセラレーションを実行するハードウェアは、汎用 CPU の一部である場合もあれば、ハードウェアアクセラレータと呼ばれる独立したユニットである場合もありますが、通常は 3D アクセラレータや暗号化アクセラレータなど、より具体的な用語で呼ばれます。
従来、プロセッサは逐次処理(命令が1つずつ実行される)であり、命令フェッチ(例えば、一時的な結果をレジスタファイルとの間で移動させる)によって制御される汎用アルゴリズムを実行するように設計されていました。ハードウェアアクセラレータは、並列処理能力を高め、一時変数専用のデータパスを用意し、フェッチ・デコード・実行サイクルにおける命令制御のオーバーヘッドを削減することで、特定のアルゴリズムの実行効率を向上させます。
現代のプロセッサはマルチコアであり、多くの場合、並列の「単一命令、複数データ」(SIMD)ユニットを備えています。このようなユニットは、 CPU内に統合されている場合もあれば、 AMD AI エンジンなどの追加コンポーネントによって提供される場合もあります。[ 18 ]それでも、ハードウェア アクセラレーションは依然としてメリットをもたらします。ハードウェア アクセラレーションは、タスクやプログラムで頻繁に実行される計算集約型のアルゴリズムに適しています。ハードウェア アクセラレーションは、粒度に応じて、小さな機能ユニットから大きな機能ブロック(MPEG-2の動き推定など)まで変化します。
FPGA 上でのハードウェアシミュレーションにより、デジタルフィルタの性能が向上した。