マルチプロセッサ仕様「MP T-Kernel」の実力:T-Kernel技術解説 AMP編(3/3 ページ)
組み込みの世界にも、マルチプロセッサ/マルチコアの波が押し寄せている。AMPに対応した「MP T-kernel」の概要とその効果を紹介する
AMP化の効果
標準T-KernelからAMP T-Kernelへの移植とその効果を、実際のプログラムを例に見てみよう。
シングルプロセッサからAMPに移行して効果が大きいプログラムには、以下の条件が考えられる。
2と3に問題がある場合は、AMPではなくSMPを検討する余地もある。
以上を踏まえたうえで取り上げるプログラムは、3DアニメーションとMP3音楽の再生を行うシンプルなものである。このプログラムは、AMP T-Kernelのデモンストレーション用に作成されたものなので、そもそも先の条件によく合うようになっている。少々ずるくはあるが、説明には最適なのでこれを使用したい。このデモ・ソフトは、μT-Engine/MP211上で動作する。2006年のESECにおいて、T-Engineフォーラムブースで実演されていたものなので、ご覧になった方もいるだろう。
このデモ・ソフトの概要は以下のとおりである。
- 液晶画面に3Dのアニメーションを表示する。表示する物体は、実際にリアルタイムで計算したものである
- アニメーションのバックグラウンドで、MP3フォーマットの音楽データを再生する
- アニメーションの開始・停止などは、シリアル・インターフェイスから操作できる。アニメーションとMP3再生は同期して動作する
3DアニメーションとMP3再生は、どちらもプロセッサの能力を必要とする処理である。また、開始や停止など動作の同期は取るものの、処理自体は独立しており、データも共用しない。まさに上記の条件にぴったりである。付け加えるなら、デモとして人間がその効果を確認しやすくもある。
では、このプログラムを単純に標準T-Kernelのプログラムとして作ってみる。図2がプログラムの構成である。
単純なプログラムなのであまり説明は要らないと思うが、プログラムは表1の3つのタスクからなり、タスク間の同期・通信にメッセージバッファを使用する。
タスク | 機能 | |
---|---|---|
コマンド・タスク | シリアル・インターフェイスから操作コマンドを受信し、ほかのタスクへ指示を出す | |
3Dアニメーションタスク | コマンド・タスクからの指示に従い、3Dアニメーションの描画を行う | |
MP3再生タスク | コマンド・タスクからの支持に従い、MP3の再生を行う | |
表1 デモ・プログラムのタスク一覧 |
タスクの優先度は、全体の指示を行うコマンド・タスクを最優先とし、音声が途切れないことを重視して次にMP3再生タスク、そして最下位を3Dアニメーションタスクとする。
このプログラムをμT-Engine/MP211でプロセッサ・コアを1個だけ使用して実装してみる。つまりARM9の標準T-Kernel相当である。プログラムを動かしてみると、優先度を上げているためMP3の音声再生は問題なく行われる。しかし、3Dアニメーションの方は動きがスムーズとはいい難い。明らかにプロセッサの処理能力が足りない(注)。
では、このプログラムをAMPに移植してみよう。負荷の大きい3DアニメーションタスクとMP3再生タスクをそれぞれ別のプロセッサに割り当てる。コマンド・タスクは大して重い処理を行うわけではないので負荷の問題はほとんどないが、サンプル・プログラムでもあるので、これも別のプロセッサに割り当てる。全体の構成は図3のようになる。
このAMP版のプログラムと最初のシングル版のプログラムを並べて動作させたのが動画1(WMVファイル:YRPユビキタス・ネットワーキング研究所提供)である。当然の結果だが、一目瞭然でAMP版のアニメーションがスムーズなのが分かる。
ここで重要なのは、シングル版からAMP版への移植に際して、タスクのソース・プログラムにほとんど変更が必要なかった点である。移植の際の主な変更点は、プログラムの初期化の部分で、3つのタスク生成を行っていた部分をそれぞれ1つずつに変更したくらいである。
今回の例は小さく簡単なプログラムであったが、大規模なプログラムであっても、機能分割さえ可能ならば、同様にAMP化は容易である(図4)。
AMP化の際にプログラムの変更がどの程度となるかは、タスク間の同期・通信をカーネル・オブジェクトにより行っているか否かが大きな要因となる。プロセッサ間の同期・通信にカーネル・オブジェクトを使用しなくてはならないのは当然として、排他制御を含むタスクの同期処理にセマフォなどのカーネル・オブジェクトを使用しているか否かも重要となる。
シングルプロセッサでは、同時に1つのタスクしか動かない。優先度の高いタスクは自身より優先度の低いタスクに割り込まれることはないので、特別な排他制御を行わないことがよくある。また処理の実行順序も、その処理を行うタスクの優先度から暗黙的に決められることもある。しかし、これらは複数のプロセッサに機能分割すると無効となってしまう。これは、AMPだけに限らずSMPも含めてマルチプロセッサへの移植においていえることである。逆に、タスクの同期・通信をカーネル・オブジェクトによりきちんと行っているプログラムは、移植が容易となる。
MP T-Kernelの展望
AMP T-KernelはMP211での試作開発を完了し、現在は正式版に向けて動作の評価や改良が行われている。仕様についても、T-Engineフォーラムで一般公開に向けた作業が行われている。
SMP T-Kernelは、ARM社のMPCoreプロセッサを第1ターゲットとして開発が進められている。MPCoreはARM11プロセッサ・コアを4個搭載したマルチコア・プロセッサである。
SMPの場合、基本的にはアプリケーション・プログラムから複数のプロセッサを意識することはない。存在するカーネルは1つであり、プロセッサへのタスク割り当ては自動的に行われる。つまり、アプリケーション・プログラムから見た場合、SMP T-KernelはAMP T-Kernel以上に標準T-Kernelとの相違が少なくなる。ただし、「組み込みシステムとしては、SMPでもプロセッサを意識的に制御できる仕組みが必要なのではないか」という課題があり、T-Engineフォーラムで仕様の検討が行われている。
AMPとSMPの混在したシステムへの対応も課題の1つである。例えば、4個のコアのうち2個をSMPとして使用し、残りの2個をAMPとして、それぞれに機能を割り当てるといった使い方である。これは情報系のコンピュータでは通常あり得ないが、組み込みシステムの場合はさほど特殊とも思えない。このような、組み込みシステムならではの要求に柔軟に対応していくことをMP T-Kernelは目指している。
さらに、T-Kernel/Standard Extensionのソースコードが8月に一般公開されたが、これのMP T-Kernel対応が進められている。T-Kernel/Standard Extensionは、プロセス管理やファイルシステムなど、上位の機能を実現する。
MP T-Kernelの成果は、2006年12月に開催されるTRONSHOW2007にて発表・展示が行われる予定である。
Copyright © ITmedia, Inc. All Rights Reserved.