マルチコア環境には文字どおり複数のコアが搭載されていますが、大きく分けて2種類があります。1つは、同じコアで構成されている「ホモジニアス」と呼ばれる環境です。
ホモジニアス環境でコンパイルされた実行コードは、どちらのコアでも動作可能となります。パソコンでのマルチコア環境の場合は、ほとんどがホモジニアス・マルチコアになりますので、一般的にマルチコアといった場合は、こちらを示すことの方が多くなります。
もう1つは、異なるタイプのコアより構成されている「ヘテロジニアス」と呼ばれる環境です。コアが異なるため当然実行コードは異なりますが、画像処理専用など特定の処理に特化した専用のコアを搭載し、処理能力を上げるといったことが可能になります。
組み込みソフトウェアの開発では、必ずハードウェアのアーキテクチャを意識して、タスクの割り当てを行う必要があります。例えば、画像処理チップや音声処理チップなどが、ある特定のCPUからのみアクセスできるようになっています。マルチコアのほとんどのパソコン環境では、すべてのCPUから特別な処理チップにアクセス可能となっていますが、組み込みハードウェアにおいては、バス効率を上げるために、ほかのCPUの影響を受けにくいローカルバスで接続されている場合が多く存在します。また、画像処理は画像処理チップと接続されているCPUにアサインし、音声処理は音声処理チップが接続されているCPUにアサインしなくてはなりません。それらは通常、システム設計の段階で決定し、それに従い割り当てを行います。
マルチコア環境におけるOS環境の種類としては、対称型なマルチプロセッシング構成の「SMP(Symmetrical Multi Processing)」と非対称型なマルチプロセッシング構成の「AMP(Asymmetrical multi processing)」という2種類が存在します。
パソコン環境のWindows/LinuxなどのOSはSMP対応になります。SMP対応OSとは、CPUコアの空き状況や、現在実行中のスレッドの優先度などに応じて、スレッドの切り替えが行われます。CPUの負荷は分散され、システム全体の性能は向上するのですが、リアルタイム性能の予測が困難であるため、リアルタイム性を保証しなくてはいけない部分には適していません。
それに対しAMP環境は、機能分散型の構成であり、各処理は特定(指定)されたコアで実行されます。よって、特定のハードウェアが接続しているコアが限定されている場合や、動作するコアを特定しなくてはいけない場合、リアルタイム性を保証しなくてはいけない処理などに適しています。
SMP環境もAMP環境もそれぞれに特徴があり、混在させて構成することも可能になります。
AMP環境では、各コアに対する処理の割り当てをユーザーが決定する必要があります。よって開発ではユーザーが機能の割り当てや依存関係などを考慮して検討する必要があります。
それに対しSMP環境では、各コアに対する処理の割り当てをOSが自動的に行います。よってユーザーは割り当てを検討する必要がありません。SMP環境においては、AMP環境と比較すると、比較的容易にマルチコアへの移植が可能となります。特にマルチスレッド化されたプログラムであれば、さらに容易に移植が行えるはずです。またデッドロックやデータ競合などの並列化の問題をOSが管理しているため、ユーザーはこれらを考慮せずに移植できるといった優位性があります。
しかしながら、マルチコア開発における本来の目的は、処理能力(スループット)の向上にあります。例えばSMP環境における各コアのキャッシュのコヒーレンスを保持するためには、すべてのコア間で共有する必要があり、ハードウェアのアーキテクチャにおいては、キャッシュのコヒーレンスはすべてのコア間で保たれる仕様のシステムが前提となります。
キャッシュのコヒーレンスをコア間で保持するアーキテクチャでは、キャッシュの処理能力を考えた場合、どうしても処理能力が低下してしまいます。また、組み込み開発のランダムイベントなどに対応するイベントドリブンな処理に対して、リアルタイム性を保証するのは困難になります。つまり、SMP環境ではOSが処理の割り当てを行うため、条件によってリアルタイム性が大きく変化してしまいます。そのため、リアルタイム性を保証することが困難となってしまいます。リアルタイム性を保証しなくてはならない部分については、AMP環境にてユーザーが処理の割り当てを確定する方が適しています。
SMPとAMPにはそれぞれ特徴があり、組み込み開発を行ううえでどちらが向いているかではなく、それぞれの特徴を生かした開発を行うことが重要になります。
Copyright © ITmedia, Inc. All Rights Reserved.