マルチコアで処理時間短縮の前にやるべきこと:組み込みマルチコア進化論(1)(4/4 ページ)
組み込みシステムでもマルチコアは当たり前。でもソフトウェア開発者はどのように開発を行えばいいの?
タスクの割り当てと並列化
組み込み開発はイベントドリブンのシステムが多く、イベントから応答を返すまでの時間、つまりリアルタイム性が重要になってきます。優先順位は低く設定せざるを得ないタスクでも、優先順位の高いタスクとは依存関係がある場合などがあります。優先順位の検討には苦労された方も多いのではないでしょうか。
以下にマルチコア環境における並列化手法の分類を紹介します。
環境 | リアルタイムOS環境 | 1つのタスク内を分割 | ||
---|---|---|---|---|
分割種別 | リアルタイムOSにおけるタスク割り当て | アルゴリズムにおける処理単位並列化 | アルゴリズムにおける繰り返し処理の並列化 | |
目的 | リアルタイム性の向上 | 処理の高速化 | ||
種別 | AMP環境 | SMP環境 | 処理分割 | データ分割 |
単位 | リアルタイムOSなどのタスク単位 | 関数単位で検討(注) | ループ(for)構文 | |
依存関係 | 共有メモリ、タスク間インターフェイス | 外部変数、分割する部分の関数における引数/戻り値 | ループ内で使用している外部変数/内部変数 | |
並列化手法 | タスク割り当て | タスク並列化 | データ並列化 | |
備考 | OpenMPを使用して見積もりが可能 | |||
表2 マルチコア環境並列化手法の分類 (注)関数より詳細の検討の際は、関数化を行い検討する |
シングルコアで例えばイベントからの要求応答処理が8つ存在する場合、優先度は、1〜8の8段階になります。それをデュアルコア(2つのコア)にした場合、それぞれのコアに4つずつの要求応答処理を割り当てることが可能となります。つまり、1つ目のコアの優先度は1〜4の4段階であり、2つ目のコアの優先度も1〜4の4段階になります。優先度が低く実行される機会が少なかった要求応答についても、動作可能となる機会が増え、リアルタイム性が向上します。
各CPUに1タスクを割り当てて常に動作可能状態にするというのが理想ですが、実際にはコストの問題もあるのでそうはいきません。しかし、マルチタスクOSでは並列に動作することを想定して設計を行っても、コアが1つしか存在しない環境ではシーケンシャルにタスクを切り替えて動作しているだけです。マルチコアというのは、マルチタスク設計においては本来のあるべき姿に近づいているといえるかもしれません。
シングルコアでは、優先順位を低く設定せざるを得なかったタスクがボトルネックとなり、リアルタイム性を確保することが困難となることもあります。そしてあるタスクの優先度を上げるとほかのタスクの優先度が下がってしまいます。実際に実装してみた際の性能のギャップや性能については実装が終了してみないと分かりません。工程の終盤でその原因を明確化して対策を考えるなど、さまざまな苦労をしてきたことがマルチコアによって改善されることを期待しています。
処理単位の並列化
組み込みシステムには複数の機能(処理)が存在しています。しかし、シングルコア環境では複数の機能が1つのコアで順番に動作するにもかかわらず、そのような状況の中でリアルタイム性を確保する必要があります。開発者はこの部分に苦労を重ね実現してきたといっても過言ではありません。
マルチコア環境では、各機能を別のコアに割り当てて並列動作させることができます。例えばリアルタイムOSでは、各機能はタスクに分割されています。理想をいえば、各タスクがそれぞれのコアで動作するのであれば、すべて並列動作が可能であり、すべてのタスクにおいてリアルタイム性を確保できます。
これまで組み込み開発においてリアルタイム性を確保することに苦労を重ねてきたソフトウェア開発者にとっては、うれしいことです。本来の理想の姿に戻すといってもいいでしょう。しかし実際にはそう簡単にはいきません。まず、タスクの数と同じ数のコアは用意されていません。従って、各タスクをどのコアに割り当てて動作させるかを検討する必要があります。また、それぞれのタスクには依存関係があるので同期処理を検討する必要があります。それらをすべて考える必要があり、ソフトウェア開発者の負担が増えていくことは事実です。そして、機能(処理)分割を行うには、設計者が設計を行う際に割り当てを検討する必要があります。
繰り返し処理の並列化については、ループ処理に着目するため実装段階でも行うことが可能です。コンパイラなどにより自動での並列化も可能になりつつあります。繰り返し処理の並列化においては、ボトルネック(クリティカルポイント)工程に適用することでより高い効果が期待されています。また、当然使用頻度の多い部分に適用することで全体のスループット向上が期待されています。
現在、マルチコア環境における並列化手法はまだ確立されているとはいえません。皆さんと一緒に進化させていくものと信じています。ご意見、ご質問がある方は件名を「マルチコア並列化手法の件」として、メールアドレスinfo@zipc.comまでご連絡ください。また、参考ホームページはhttp://www.zipc.com/support/rre/multicore/になります。よろしくお願いいたします。
次回もお楽しみに。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.