ハードウェアアクセラレーション

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

コンピューティングにおいて、ハードウェア・アクセラレーション (: hardware acceleration) とは、なんらかの機能を通常の汎用プロセッサ (CPU) 上で動作するソフトウェアコンピュータ・プログラム)による実装で処理したのではレイテンシやスループットが遅い、消費電力が大きい、などといった問題があるような場合に、ハードウェア実装による支援で実行速度などを加速(アクセラレーション)し、システム全体の性能や効率を向上させる技術である。

概略[編集]

ハードウェア・アクセラレーションはパフォーマンスを改善するために使用される様々な技術のうちのひとつである。特に並列処理の点で、専用設計されたハードウェアは効果を発揮しやすい。通常、CPUによるソフトウェアの実行では、CPUが備えるプリミティブな命令の並びで処理を実現し、その命令を逐次的にひとつずつ実行する。一方ハードウェアによるアクセラレーションでは特定の処理のための専用のハードウェアを設計し、そのハードウェア内では回路の並列性を生かして演算を並列に行うことで、逐次的な命令実行の場合よりはるかに高速に演算を実行する。しかし専用に設計されたハードウェアとして処理を実現した場合、CPUが備えるプリミティブな命令の組み合わせによりソフトウェアとして処理を実現する場合に比べて柔軟性が減少する。またハードウェアの設計及び製造にはソフトウェアに比べて桁違いのコストが必要になる。

このような実行性能と柔軟性やコストとのトレードオフから、ハードウェアによるアクセラレーションはソフトウェアの中でも特定のパターンの演算を集中的に処理するようなパフォーマンスの上重要な部分について利用される。ハードウェア・アクセラレーションは小さな機能ユニットからMPEG2の動作予測のように大きな機能ブロックまでさまざまな粒度にわたる。一般に粒度を大きくできれば実行性能が向上する一方、用途が固定化され柔軟性は低下する傾向がある。

アクセラレータ[編集]

処理の高速化を支援するハードウェアを総称してアクセラレータと呼ぶ。代表的なものに、Bit Block Transfer機能や3次元コンピュータグラフィックス描画、動画再生支援機能などを含むリアルタイムグラフィックス処理に特化したGPU(かつてはグラフィックアクセラレータと呼ばれていた)、数値演算コプロセッサなどとも呼ばれるFPU、音声などのデジタル信号処理に特化したDSPベクトルプロセッサやFPGA等を拡張ボードに実装したもの、などがある。専用計算機などでも、コストなどの点で一般の処理について通常のコンピュータを流用するためにアクセラレータの形態をとることがある。また以前はパーソナルコンピュータにおいて、アップグレードのためCPUを換装するのが一般的でなかったこともあり、オーバードライブプロセッサ等による「CPUの高速化」のためのプロセッサを「CPUアクセラレータ」等と称したこともあった[1]

また近年[いつ?]はグラフィックスなどはGPUに機能が分離される一方で、SSEなどのSIMD型拡張命令として、CPU自身がアクセラレータ的な機能を持つ命令を積極的に備えるようにもなってきている。

問題点[編集]

アクセラレータを搭載しないコンピュータでは、ハードウェア・アクセラレーションを利用したソフトウェアを実行することができない。代替としてソフトウェアによる実装をフォールバックソリューションとして用意することもあるが、開発工数やテスト工数も増加する。また、アクセラレータの命令仕様や演算精度の違いから、演算結果がCPUによるソフトウェア処理と異なる場合も問題となる。

また、アクセラレータを操作する処理を記述する際、本来アプリケーションソフトウェアを実現するために本質的ではない、ハードウェアに関する予備知識も必要となる。通例、ハードウェアを抽象化・標準化するDirectX/OpenGL/OpenCLといったアクセラレーション用APIを介することで、ハードウェアの詳細な実装を隠ぺいすることが多いが、ハードウェアおよびデバイスドライバー層がこれらのAPIをサポートする必要がある。

なお、通例CPUと外部ハードウェアとではメモリ空間が異なることから、外部ハードウェアに処理を委譲する際にデータをメインメモリから外部メモリに転送する必要があったり、逆に外部ハードウェアの処理結果を取得する際にデータを外部メモリからメインメモリに転送(リードバック)する必要があったりするため、プログラムが煩雑となる。AMD APUにおけるHSAのように、CPUと補助プロセッサのメモリ空間を統合することでソフトウェア開発の負担を低減する解決策も提案されている。

脚注[編集]

  1. ^ ある一時期には「Intel 80286#CPUアクセラレータ」の記事にあるように、286マシンに486を載せるといった製品まで登場した。

参考文献[編集]

関連項目[編集]