特集
» 2006年10月21日 00時00分 公開

T-Kernel技術解説 AMP編:マルチプロセッサ仕様「MP T-Kernel」の実力 (3/3)

[豊山 祐一 YRPユビキタス・ネットワーキング研究所 基盤システム研究室 室長,@IT MONOist]
前のページへ 1|2|3       

AMP化の効果

 標準T-KernelからAMP T-Kernelへの移植とその効果を、実際のプログラムを例に見てみよう。

 シングルプロセッサからAMPに移行して効果が大きいプログラムには、以下の条件が考えられる。


1.シングルプロセッサでは処理の負荷が大き過ぎる
シングルプロセッサで能力的に十分であれば、マルチプロセッサにする必要はない。

2.並列して動作する独立性の高い処理に機能分割が可能である
重要なのは、「並行」と「独立性」である。機能分割できたとしても、並列処理するのでなければマルチプロセッサ化のメリットは少ない。また、並列処理であっても互いに細かく同期を取り合うのであれば、やはりマルチプロセッサによる効果は十分に得られない場合がある。

3.分割した処理間で、データのやりとりが少ない
プロセッサ間で大量のデータをやりとりすると、そのオーバヘッドがマイナス要因になる。

 2と3に問題がある場合は、AMPではなくSMPを検討する余地もある。

 以上を踏まえたうえで取り上げるプログラムは、3DアニメーションとMP3音楽の再生を行うシンプルなものである。このプログラムは、AMP T-Kernelのデモンストレーション用に作成されたものなので、そもそも先の条件によく合うようになっている。少々ずるくはあるが、説明には最適なのでこれを使用したい。このデモ・ソフトは、μT-Engine/MP211上で動作する。2006年のESECにおいて、T-Engineフォーラムブースで実演されていたものなので、ご覧になった方もいるだろう。

 このデモ・ソフトの概要は以下のとおりである。

  • 液晶画面に3Dのアニメーションを表示する。表示する物体は、実際にリアルタイムで計算したものである
  • アニメーションのバックグラウンドで、MP3フォーマットの音楽データを再生する
  • アニメーションの開始・停止などは、シリアル・インターフェイスから操作できる。アニメーションとMP3再生は同期して動作する

 3DアニメーションとMP3再生は、どちらもプロセッサの能力を必要とする処理である。また、開始や停止など動作の同期は取るものの、処理自体は独立しており、データも共用しない。まさに上記の条件にぴったりである。付け加えるなら、デモとして人間がその効果を確認しやすくもある。

 では、このプログラムを単純に標準T-Kernelのプログラムとして作ってみる。図2がプログラムの構成である。

デモ・プログラムの構成(シングルプロセッサ版) 図2 デモ・プログラムの構成(シングルプロセッサ版)

 単純なプログラムなのであまり説明は要らないと思うが、プログラムは表1の3つのタスクからなり、タスク間の同期・通信にメッセージバッファを使用する。

タスク 機能
コマンド・タスク シリアル・インターフェイスから操作コマンドを受信し、ほかのタスクへ指示を出す
3Dアニメーションタスク コマンド・タスクからの指示に従い、3Dアニメーションの描画を行う
MP3再生タスク コマンド・タスクからの支持に従い、MP3の再生を行う
表1 デモ・プログラムのタスク一覧

 タスクの優先度は、全体の指示を行うコマンド・タスクを最優先とし、音声が途切れないことを重視して次にMP3再生タスク、そして最下位を3Dアニメーションタスクとする。

 このプログラムをμT-Engine/MP211でプロセッサ・コアを1個だけ使用して実装してみる。つまりARM9の標準T-Kernel相当である。プログラムを動かしてみると、優先度を上げているためMP3の音声再生は問題なく行われる。しかし、3Dアニメーションの方は動きがスムーズとはいい難い。明らかにプロセッサの処理能力が足りない(注)。

※注:
本プログラムは、シングルプロセッサとマルチプロセッサの処理能力の差を見ることを目的としているので、MP3再生や3Dグラフィックスの描画は特に最適化などを行っていない。よって、この結果はMP211自体の能力を示すものではない。


 では、このプログラムをAMPに移植してみよう。負荷の大きい3DアニメーションタスクとMP3再生タスクをそれぞれ別のプロセッサに割り当てる。コマンド・タスクは大して重い処理を行うわけではないので負荷の問題はほとんどないが、サンプル・プログラムでもあるので、これも別のプロセッサに割り当てる。全体の構成は図3のようになる。

デモ・プログラムの構成(マルチプロセッサ版) 図3 デモ・プログラムの構成(マルチプロセッサ版)

 このAMP版のプログラムと最初のシングル版のプログラムを並べて動作させたのが動画1(WMVファイル:YRPユビキタス・ネットワーキング研究所提供)である。当然の結果だが、一目瞭然でAMP版のアニメーションがスムーズなのが分かる。

 ここで重要なのは、シングル版からAMP版への移植に際して、タスクのソース・プログラムにほとんど変更が必要なかった点である。移植の際の主な変更点は、プログラムの初期化の部分で、3つのタスク生成を行っていた部分をそれぞれ1つずつに変更したくらいである。

 今回の例は小さく簡単なプログラムであったが、大規模なプログラムであっても、機能分割さえ可能ならば、同様にAMP化は容易である(図4)。

マルチプロセッサの例 図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にて発表・展示が行われる予定である。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.