マルチコアプロセッサにおけるOS環境、AMPとSMPのそれぞれの特徴について解説します。組込み開発を行ううえで、どちらが向いているかではなく、それぞれの特徴を生かした開発を行うことが重要になります。
SMPとAMPの比較
SMPとAMPの特徴をまとめると、以下の通りです。
SMP Symmetric Multiprocessing |
AMP Asymmetric Multiprocessing |
|
対称型マルチプロセッシング | 非対称型マルチプロセッシング | |
構成 | 負荷分散型(同じ処理を適時分散) | 機能分散型(コア毎に別の機能を選任) |
用途 | Windowsや LinuxなどのOS、データセンター | RTOS、組込みシステム |
稼働 |
|
|
留意点 |
|
|
SMPとAMPそれぞれの構成を下図に示します。
SMP(Symmetric Mlutiprocessing)とは
SMP(Symmetric Multi-Processing:対称型マルチプロセッシング)とは、一台のコンピュータに複数のマイクロプロセッサ(MPU/MCU)を搭載する方式の一つです。各プロセッサが対等な立場で処理を分担する手法で、処理要求は全てのプロセッサに均等に割り当てられます。
SMPの用途
私たちが普段使っているPC環境のWindows(Intel x86 CPU)/LinuxなどのOSはSMPアーキテクチャのデバイスです。別々のCPUコアであっても、各コア上のプログラムはコア番号を意識することなく処理することができます(CPU間通信やメモリアクセスなど)。SMPはデータセンターでよく用いられます。均一性により、何万ものCPUコア間でタスクを割り当てる際に高い柔軟性が得られるためです。
SMPの特徴
SMPはCPUの負荷が分散されるため、システム全体の処理性能(スループット)が向上する点が利点として挙げられます。また、各コアに対する処理の割り当てをOSが自動的に行うため、ユーザーは割り当てを検討する必要がなく、デッドロックやデータ競合などの並列化の問題を考慮せずに移植が可能です。一方で、リアルタイム性能の予測が困難なため、リアルタイム性を保証しなくてはいけない部分には適していません。また、優先度ベースにスケジューリング方式に頼った排他を行っている場合、低優先度プログラムがCPUコアに空いているときに実行してしまう点にも留意が必要です。
AMP(Asymmetric Mlutiprocessing)とは
AMP(Asymmetric Multi-Processing:非対称型マルチプロセッシング)とは複数のプロセッサの間で役割分担や制御-非制御の関係などが存在し、対称な関係になっていないような機能分散型の方式をさします。各処理は特定(指定)されたコアに静的に割つけられ実行されます。あえて同じハードウェア構成としないことにより回路を簡素化。ハードウェア規模を抑えつつ、マルチコアによる並列性を実現します。個別のプロセッサの性質はシングルコアに近く、SMP型と比較してリアルタイム性の保証が容易と言えます。
AMPの用途
AMPは、特定のハードウェアが接続しているコアが限定されている場合や、動作するコアを特定しなくてはいけない場合、リアルタイム性を保証しなくてはいけない処理などに適しています。特定の処理を目的とした「組み込みシステム」に最適化しやすいアーキテクチャと言えるでしょう。組込みシステムの場合、パソコンなどと異なり実行する処理が事前にわかっているケースが一般的です。そのため、AMP型のマルチコアシステムを用いることが多いといえます。
シングルコアプロセッサを搭載したデジタルカメラの場合、一つのプロセッサで撮影と画像の処理を行っていくため、短時間での連続撮影を行うことが困難でした。AMP環境のマルチコアプロセッサを搭載することにより、片方のコアで撮影をする間、もう片方のコアで画像処理を行うという形で、各コアに静的にタスクを割り当てることで連続撮影の間隔短縮を実現できます。
AMPの特徴
SMPのように負荷配分を自動で行うのではなく、プログラマが負荷を予測し思い通りのコアへ処理を割り振ることで負荷配分ができるのがAMPの利点です。一方で、各コアに対する処理の割り当てをユーザーが決定する必要があります。開発ではユーザーが機能の割り当てや依存関係などを考慮して検討しなければならない点に留意点すべきでしょう。
SMPとAMPを混在させた構成とは
マルチコアCPUを生かす組込みOSの開発手法として、SMPとAMP混在型の構成があげられます。機器のIoT化を進めるにあたって、AMPだけでなくSMPの概念を取り入れると、リアルタイム性の保証とネットワーク管理における利便性を両方享受することができます。
実際のSMPとAMP共存のOSのユースケースとして、μC3+Linuxの搭載例を示します。μC3+Linuxは、マルチコアプロセッサにRTOSとLinuxを共存させ、OS間の通信を可能にするソリューションです。下図は、クアッドコアのCPUを想定し、LinuxをSMP型の3コア、RTOS(μC3)をAMP型の単一コアで使用するときの例です。SMP型のLinuxは豊富なソフトウェア資産を持つのが特徴です。
実用例として、LinuxをUI部分、リアルタイム性が重要な機器をAMP型のRTOSで制御するケースが挙げられます。GUIの高機能化とリアルタイム性能を両立が可能となる上、Linux側のシステムが停止した場合もコアが物理的に分離しているため、RTOS側の安全性を確保できるというメリットがあります。
AMP型マルチコアプロセッサ向けRTOS :μC3/Standard+M
μC3(マイクロ・シー・キューブ)/Standrd+Mは、μC3/StandardにAMP型のマルチコア拡張を追加した、マルチコアプロセッサ向けRTOSです。μITRON4.0スタンダード・プロファイルをベースにAMP型の特徴を活かしたコア毎の処理・リソースの割り当て、コア間連携のためのAPIを追加しています。Cortex-Aシリーズを中心にマルチコアのプロセッサをサポートしています。
東京エレクトロンデバイス社のZynq7000評価用ボードにμC3/Standard+Mを搭載、コア1側でネットワークの転送速度を計測、コア0側でHTTPサーバから転送レートを表現したCPU負荷表示デモ動画もございます。是非ご覧ください。