連載
» 2015年09月02日 07時00分 UPDATE

SYSTEM DESIGN JOURNAL:限界に達したエンベデッド・プロセッサを並列処理で補完する (1/4)

組み込みシステムの能力を並列処理で補完するアイデアは、身近で現実味を帯びたものとなっています。しかし、その実行に際しては手法の選択が重要な意味を持ちます。OpneMPやOpenCLなどを理解しながら、最適な手法を検討しましょう。

[Ron Wilson,Altera Corporation. MONOist]

 限界に達したエンベデッド・プロセッサを並列処理で補完する――このシナリオはますます身近なものになっています。既にこの方針で稼働しているエンベデッド・デザインがあり、恐らく数年間にわたるユーザー側での実装と数十万行のデバッグ済みコードによって裏付けられています。その一方で新しい一連の性能や仕様を求める市場があり、コンピュータの限界に挑む新しいアルゴリズムも開発されていますが、現在のCPUでそれを扱うことはできません。

 この選択肢は悲観的なものかもしれません。命令セットの互換性を完全に失うことなく性能が高いCPUに移行することは可能ですが、新たなエンベデット・デザインには新しいOSが必要であり、コードの再検証も必要となります。さらに、新しいCPUは消費電力の増加からDRAMインタフェースの違いなど、ハードウェアへの影響も及ぼします。

 命令セットが異なるさらに高速なCPUに変更することも、もちろん可能です。しかし、コンパイラからデバッグに至る新しいツールチェーンと、これらの命令セットへの隠れた全ての依存性をレガシーコードから見つけ出す作業が、この変更を本当に恐ろしいものにする可能性があります。SoCのベンダーが変わることもシステムレベルの影響をハードウェアに与えるでしょう。

 あるいは、コードやその新しいアルゴリズムの性能上のピークを特定して並列実行可能な複数のスレッドに分解するというアプローチを試みることもできます。このアプローチを取れば、この新しいコードをマルチコアCPUクラスタで実行できます。かなり特殊なものを使用していない限り、現在使用しているCPUコアの複数のインスタンスを持つ市販チップが見つかる可能性は高いでしょう。

 固有の並列処理があるならばそのスレッドを書き直してGPUやDSP、またはFPGA、ASICのハードウェアアクセラレータで実行することもできます。これらの選択肢はいずれも新しいコードを必要としますが、必要なのは高速化する特定のセグメントのコードだけです。そのレガシーコードの大部分はデバッグする必要がありません。

並列化の実施

 並列化すると決めたならば、次にはその方法が問題になります。予想されるように、その方法はコードに含まれる並列処理の性質と、選択するハードウェアによって決まります。そして、全てを自動的に並列化することは難しく、人の手による解決を図らねばなりません。

 タスクの並列処理を想定した際、問題の原因が最大レイテンシ仕様であり、ルーチンのワーストケース・パスにある命令が多過ぎるとします。マルチコア構成で使用できるCPUがN個あれば、重要なルーチンを別々のCPUコアで並列実行できるN個の独立したスレッドに分割することができます。そのスレッドのいくつかは投機的に実行する必要があるかもしれないので、ほとんどのスレッドはどこか1つの計算結果を待って停止させる必要がありません。

 マルチコアに対応したOSでは、各スレッドを別々のコアに関連付けて全てのスレッドを一度に起動し、タスクレイテンシを最も遅いスレッドのレイテンシとわずかなオーバーヘッドの合計にまで減らすことができます。幸運ならば、ほとんど 1/N まで改善できることがあります。もちろん、スレッドを特定し、共有メモリや共有 I/O での衝突問題を回避する責任は人間が負います。アルゴリズムやハードウェアが変わったら、最初からやり直さなければならない可能性があります。

 もう1つの人手によるアプローチはハードウェアアクセラレータを使用するものです。NVIDIA「CUDA」など、ベンダーが開発したGPU言語でタスクを再コード化することが必要になりますが、GPUを利用すれば高レベルのデータ並列処理が可能になります。

 同様に、FPGAでタスクを高速化する場合は、高速計算を実行するために必要なステートマシンとデータパスをVerilogやVHDLで記述します。GPUとFPGA、いずれのケースでもC/C++などからハードウェア固有の言語に変換するプログラムが用意されていますが、プロセスの前工程と後工程には人手によるステップが残っています。

 ここには、コードを詳細にチェックし、パスとタイミング制約を比較し、並列化可能なホットスポットを特定し、それらをターゲットハードウェアのコードに変換するツールを自動化する明確なニーズがあります。けれど、そのようなツールはありません。しかし、エンベデッド・コンピューティング業界以外で開発された、作業の大部分に対応するツールが2つあります。

関連キーワード

OpenCL | FPGA | GPU | API | 組み込みシステム


       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.