ハードウエアアクセラレータの実装――システム性能向上の鍵は、アーキテクチャの最適化(3/3 ページ)
ハードウエアによるアルゴリズム処理を高速化する場合、ソフトウエアとハードウエアを組み合わせた並列処理を採用すれば単なるソフトウエアへの置き換えよりもはるかに高い性能を得られる。
並列処理の実現
ソフトウエアをハードウエア/ソフトウエアのハイブリッド実装に分ける最も単純な方法は、ソフトウエア関数の呼び出し動作をそのままハードウエアブロックで模倣することだ。この手法、つまり単純な置き換えは、ソフトウエアの上位レイヤーを設計しなおす必要がないために、設計への影響を最小限に抑えることができる。また、ハードウエア実装の設計者はアルゴリズムに関する詳しい知識を必要としない。
しかし、この手法では、システムの性能を最高レベルまで高めることはできない。なぜなら、アクセラレータの処理中はCPUコアがアイドル状態となり、ハードウエアブロックは常に1つしかアクティブにならないからだ。また、各機能ブロックは、ブロック間で直接通信するのではなく、システムメモリーとの間で通信する必要があるため、データフローも最適とはいえない。したがって、この機能置き換え手法が最も効果を発揮するのは、少量のデータ処理を頻繁に実行する独立した関数に適用したときである。
アルゴリズムの複数の機能を並列処理にすることによって、システムのパフォーマンスを向上させることができる。このプロジェクトでは、並列処理の対象として3つのデバイスアーキテクチャが検討された。CPUとハードウエアアクセラレータの並列処理は、両システムを同時動作させることで実現される。そしてその同時動作は、CPUコアが、関連するデータの準備ができると即座にハードウエア動作を開始し、なおかつハードウエアアクセラレータが計算している間に処理を実行することで可能になる。複数のハードウエアアクセラレータを使用することでも並列処理は実現できる。この方法では、互いが依存せずに処理を実行するアクセラレータブロックを使用することが必要である。
最後に、1つのハードウエアアクセラレータブロック内で並列処理を実現できることも紹介しておく。アルゴリズムを命令パイプラインとして分割することは、並列処理を行なう命令パイプラインとしてハードウエアを構成するのに役立つ。この手法では、パイプライン段数の違いにより実行時間に差があるそれぞれの処理の仲介役となるデータのバッファが必要であり、以降、実行単位でのデータ同期を取らなければならない。
並列処理を実現するには設計技術面からの支援が必要であり、設計者にはアルゴリズムの知識が求められる。今日、機能の置き換えを様々なレベルで自動化する業界標準ツールが数多く提供されている。例えば米Mentor社(http://www.mentor.com)からはプロファイリングツールや、ASAPのハードウエア変換ツールが提供されており、米Coware社(http://www.coware.com)、英Celoxica社(http://www.celoxica.com)、米CriticalBlue社(http://www.criticalblue.com)からもさまざまなツールが提供されている。ハイブリッド実装において、機能置き換えという手法が、求められる処理能力を備えたシステムの実現に効果的であれば、これらのツールは設計者の労力を大幅に軽減してくれる。たとえば、Mentor社のツールは、アクセラレータに必要なハードウエアラッパの開発を支援し、ソフトウエアドライバをハードウエアアクセラレータが使用できるようリライトしてくれる。しかしながら、これらのツールでは最適な並列実装が実現できない可能性がある。
このような場合、デバイスアーキテクチャとアルゴリズムの複雑性を理解している設計者による詳細な検討が必要になる。この取り組みは、機能置き換え手法による性能向上が不十分な場合にのみ有効である。
QuickLogic社のMPEG-2アルゴリズムプロジェクトでは、特定用途ハードウエアモジュール(図3)の開発により、機能置き換え手法をしのぐ100%のシステム性能向上を実現した。全体として、ハイブリッド実装ではソフトウエアのみの実装と比較して10倍の性能が得られた。消費電力を同等に抑えた場合でも、システムの性能は5倍に向上した。さらなる性能向上は、アルゴリズムの改善に依存するのは明らかであろう。
今回のプロジェクトで我々が導き出した結論は、設計者がハイブリッド実装によって性能をどれほど向上させられるかは、主に2つの要素に左右されるということだ。モジュール間のデータ転送による時間消費を増やすことなくソフトウエアをハードウエアに移行するためには、アルゴリズムの特性を設計者が理解しておくことが必要だ。そして、処理時間の増大を許容してアルゴリズム内での並列処理を最大限活用するならば、機能置き換え手法をはるかにしのぐ性能が得られる。ただし、この複雑な作業を実行するには市販ツールの能力はまだ不十分であり、並列処理をCPUコアとアクセラレータで実現するリソースに対し大きな投資が必要である。
Copyright © ITmedia, Inc. All Rights Reserved.