今さら聞けないマルチプロセッサの基礎教えます ――キャッシュの共有,割り込みの共有,OSによる制御
● 通信のオーバヘッドや負荷分散,排他制御に注意
複数のプロセッサまたはプロセッサ・コアを利用するシステムのプログラム開発においては,通信オーバヘッドをなるべく小さくする,各コアに割り振られるタスクの負荷をなるべく均等にする,クリティカル・セクションを注意深く設計する,などの問題は共通です.冒頭に述べた対称型マルチプロセッサ・システムと組み込み分野のマルチプロセッサ・システムで大きく異なる点として,非対称な構成に起因する問題と,キャッシュの一貫性維持のしくみがないことに起因する問題があります.
1)非対称の構成に起因する問題
一般的なマルチプロセッサ対応OS(タスク・スケジューラ)は対称的なプロセッサ構成を前提としているため,非対称のマルチプロセッサ・システムにはそのままでは使用できません.現在のところは,専用APIを使い,特定のコアで実行するタスクを明示的に割り当てるやりかたが現実的でしょう(8).
なお,MPCoreのような対称的なマルチコア・システムにおいて,すべてのコアを平等に扱うという方針でシステムを設計する場合は,通常のマルチプロセッサ対応OSをほぼそのまま利用できます注7.しかし,各プロセッサ・コアを特定の用途で使用したい(例えば,特定のI/Oデバイスからの割り込みを特定のコアで優先的に処理したい)という場合には,何らかの対応が必要となります.具体的には,割り込み先を指定する回路(MPCoreでいうInterrupt Distributor)に対応するデバイス・ドライバを追加したり,プロセッサ・コアごとにタスクの優先度を変えられるようにスケジューラを修正する,といった対応が考えられます.
注7;MPCoreにはLinuxが搭載される予定.Linuxの移植にあたっては,割り込み(通常のシングル・プロセッサでもアーキテクチャに強く依存する)関連では修正が必要だろうが,スケジューラについては通常のLinuxのものがそのまま利用できるはずである.