SMP T-Kernelプログラミングの概要
SMPの場合、各コアはSMP T-Kernelによってアプリケーションプログラムから隠蔽される。アプリケーションを構成するタスクは、自動的に各コアに割り当てられ並列で実行される(図4)。したがって、アプリケーションプログラムがマルチコアを直接意識する必要はなく、同一のプログラムを異なったコア数のシステムで動かすことも可能だ。
図4 SMP T-Kernelのシステム概略 |
しかし、従来のシングルコア用に作られたプログラムがそのまま動くかというと、多くの場合が駄目である。これは、シングルコアのプログラムがタスクが真に並列実行されることを想定していないためだ。特にT-KernelやμITRONなどのリアルタイムOSでは、各タスクに優先度が定められ、その順番に従って逐次実行される優先度スケジューリングが基本である。シングルコア用のプログラムはこれを前提とした暗黙のタスク間の同期や排他制御を行ってしまっているのだ。
たとえば、A、B、Cの3つのタスクが存在し、その優先度はA>B>Cだったとする。この三つのタスクが実行可能な状態であった場合、シングルコアでは必ずA、B、Cの順で実行されることが保障される。しかしマルチコアではこの保障は一切なくなり、A、B、Cが同時に実行される場合もあり得る(図5)。もし、タスクBの処理の中に、Aの処理が終了してなくてはならない処理があった場合、マルチコアでは動作しないこととなる。この場合、タスクAとBの処理の間に明示的な同期を取らなくてはならない。
図5 SMPにおけるスケジューリングの問題 |
このようにSMPのプログラミングでは、タスク間の同期や排他制御をSMP T-Kenrelの同期・通信機能を使って明示的に行う必要がある。ただし、単純にタスク間の同期や排他制御を行っただけでは、SMPを活用することはできない。なぜならば、同期や排他制御はタスクの並列処理を阻害する可能性があるからだ。タスクBの実行がAの終了に同期し、Cの実行がBの終了に同期するのであれば、シングルコアで実行した場合と変わらないことになる注3。SMPのプログラミングでは、出来る限り並列実行が可能な設計を行う必要がある。
注3
並列に処理できる事が無ければマルチコアにしても効率は向上しない。実際にコア数を増やしても、実行効率は数割の向上しか見られなかった、という話しはよく聞く。
最後に
組み込みシステムにおけるマルチコアプロセッサは、まだ新しい分野であり、MP T-Kernelも開発中である。しかしNECエレクトロニクスの「NaviEngine」の登場などにより、現実的になりつつある。なお、今年(2007年)のTRONSHOW2008(12月12日~14日に東京国際フォーラムにて開催)では、NaviEngineなど最新の組み込み向けマルチコアプロセッサの上で、MP T-Kernelの実演を行う予定である。
(YRPユビキタス・ネットワーキング研究所:豊山祐一)