以下、図面を参照して、本発明の実施形態について説明する。
図1は、本実施形態に係るマルチプロセッサシステムのハードウェア構成を示すブロック図である。
図1のマルチプロセッサシステムは、主として、複数のプロセッサ要素(プロセッサ・エレメント:Processor Element)10、メモリコントローラ20、メモリ30、I/Oコントローラ40及び外部記憶装置50から構成される。以下、プロセッサ要素は、単にPEと表記する。
複数のPE10の各々は、マルチプロセッサシステムの動作を制御するために設けられた例えばメインプロセッサまたはサブプロセッサである。複数のPE10は、PE(0)、PE(1)、PE(2)及びPE(3)を含む。複数のPE10は、例えば外部記憶装置50に格納されているオペレーティングシステム(以下、OSと表記)51及びユーザアプリケーションプログラムのような各種アプリケーションプログラムを実行する。また、複数のPE10は、メモリのアクセス制御を行うメモリコントローラ20を介してメモリ30と接続されている。複数のPE10は、例えば1つのメモリ30を共有して利用する。
メモリコントローラ20は、帯域制御部21を含む。帯域制御部21は、各PEがメモリ30にアクセスできる帯域幅の制限値(最大値)または保証値(最小値)を設定する。また、メモリコントローラ20は、複数のPE10の各々をグループ化して、メモリ帯域幅を管理する。
また、複数のPE10は、各種デバイスとのやり取りを制御するI/Oコントローラ40を介して、例えば外部記憶装置50またはその他のデバイスと接続されている。
この外部記憶装置50には、複数のPE10によって実行されるOS51が格納されている。OS51は、例えばマルチプロセッサシステムのハードウェア資源およびソフトウェア資源の割り当て等を統合的に管理するためのプログラムである。また、OS51は、複数のPE10のうち、少なくとも1つのPE、例えばPE(0)上で動作する。
ここで、例えば複数のPE10のうちの少なくとも1つのPE上でOS51が実行されることによって、マルチプロセッサシステムのハードウェア資源およびソフトウェア資源の割り当て等の処理が実行される。しかし、以下の説明では、煩雑さを避けるために、OS51が各種処理を行うものとする。
OS51は、例えば複数のPE10に実行(処理)されるべきタスクを複数のPE10のうちの1つに割り当てる処理を実行する。このタスクは、OS51やユーザアプリケーションによって多数発生する。発生されたタスクの各々は、OS51によって複数のPE10の各々に割り当てられる。タスクの各々には、例えば動作条件が予め定められている。タスクは、動作条件として、例えば予め定められている当該タスクが実行される優先度を示す実行プライオリティ(Priority)値を有する。この実行プライオリティ値は小さいほど、実行プライオリティ値(優先度)が高いと表現する。例えば、実行プライオリティ値が0である場合には、実行プライオリティ値は最高となる。また、OS51は、上記したメモリコントローラ20の帯域制御部21によって設定されるメモリ帯域幅の制御を行う。
なお、上記した複数のPE10、メモリコントローラ20、メモリ30、I/Oコントローラ40及び外部記憶装置50等は、それぞれ例えばバスを介して接続されている。
次に、図2は、図1に示すOS51の主として機能構成を示すブロック図である。OS51は、帯域設定部511、スケジューラ512及びグループ設定部513を含む。これらの各部511乃至513は、図1に示される複数のPE10のうち、少なくとも1つのPEが外部記憶装置50に格納されているOS51を実行することにより実現されるものとする。このOS51は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。
また、図1に示す外部記憶装置50には、グループ・帯域テーブル52、グループ・プライオリティテーブル53及びタスクテーブル54が格納されている。
帯域設定部511は、例えばユーザによって入力された値に応じて、複数のPE10の各々が属する複数のPEグループの各々を識別するグループ識別情報及び当該グループ識別情報によって示されるPEグループに属するPEがメモリ30にアクセス可能なメモリ帯域幅を示す帯域幅情報を対応付けて、グループ・帯域テーブル52に登録する。帯域設定部511は、グループ・帯域テーブル52を参照して、PEグループ毎のメモリ帯域幅をメモリコントローラ20(の帯域制御部21)に設定する。なお、グループ・帯域テーブル52には、システムの設定として、グループ識別情報及び帯域幅情報が予め登録されている構成であっても良い。
グループ・プライオリティテーブル53には、上記したタスクの各々が実行される優先度を示す実行プライオリティ値及び当該タスクを実行するPEが属するPEグループを示すグループ識別情報が対応付けて予め保持されている。
タスクテーブル54には、例えば発生されたタスク(に係わる情報)が登録される。このタスクテーブル54には、例えばタスク毎に実行プライオリティ値が対応付けて保持される。
スケジューラ512は、例えばOS51の起動時に、タスクテーブル54を作成する処理を実行する。スケジューラ512は、タスクが発生すると、タスクテーブル54に当該タスクを登録する。スケジューラ512は、タスクテーブル54に登録されているタスクを各PEに割り当てる処理を実行する。これにより、スケジューラ512は、複数のPE10を利用して、複数のタスクを実行しようとする。スケジューラ512は、例えばPEの実行時間を分割してタスクに割り当てる。スケジューラ512は、例えば上記した実行プライオリティ値が高いタスクには多くの実行時間を、実行プライオリティ値が低いタスクには少ない実行時間を割り当てる。
また、スケジューラ512は、後述するグループ識別情報が設定されたPEに対して、当該グループ識別情報に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でタスクを実行させる。つまり、スケジューラ512は、各PEに対して、メモリコントローラ20に設定されたPEグループ毎のメモリ帯域幅でタスクを実行させる。
スケジューラ512は、タスクテーブル54に登録されているタスクを各PEのタスクキュー(図示しない)に追加することで、タスクを各PEに割り当てる。各PEにタスクが割り当てられると、タスクテーブル54には、当該タスクを実行するPEの識別子が当該タスク毎に対応付けて登録される。スケジューラ512は、例えば実行プライオリティが高い順に各PEのタスクキューにタスクを追加する。このタスクキューは、外部記憶装置50に格納されている。
複数のPE10の各々は、自身のタスクキューを参照して、例えば実行プライオリティが高いタスクには多くの実行時間を、実行プライオリティが低いタスクには少ない実行時間を与えながら動作(処理)する。
スケジューラ512は、グループ決定部514を含む。グループ決定部514は、各PEが実行するタスクの例えば動作条件に応じて、各PEが属すべきPEグループを決定する。グループ決定部514は、グループ・プライオリティテーブル53及びタスクテーブル54を参照して、各PEが実行するタスクの実行プライオリティ値から当該各PEのPEグループを決定する。グループ決定部514は、各PEが実行するタスクに対応付けてタスクテーブル54に保持されている実行プライオリティ値を取得する。また、グループ決定部514は、取得された実行プライオリティ値に対応付けてグループ・プライオリティテーブル53に保持されているグループ識別情報によって示されるPEグループを、各PEが属すべきPEグループとして決定する。
グループ設定部513は、グループ決定部514によって決定された各PEのPEグループを示すグループ識別情報(PEグループ番号)を、各PEのPEグループレジスタに設定する。このPEグループレジスタは、各PEに存在し、当該各PEが属するPEグループのグループ識別情報(識別子)を設定する記憶領域である。
各PEは、グループ識別情報が各PEのPEグループレジスタに設定されることにより、帯域設定部511によってメモリコントローラ30に設定された当該グループ識別情報によって示されるPEグループのメモリ帯域幅でタスクを実行する。
次に、図3のフローチャートを参照して、OS51の帯域設定部511がグループ・帯域テーブル52を作成(登録)する処理手順について説明する。なお、この処理は、例えばシステムの運用開始時または運用形態変更時に実行される。
まず、帯域設定部511は、例えばユーザによって入力されるPEグループ数の入力を受付ける(ステップS1)。ここで、ユーザによって入力されたPEグループ数は、N(Nは2以上の整数)であるものとする。
次に、帯域設定部511は、例えばグループn(n=0、1、2、…、N−1)の初期値として「0」を設定する(ステップS2)。
帯域設定部511は、例えばユーザによって入力されるPEグループnに属するPEがメモリにアクセスするメモリ帯域幅の入力を受付ける(ステップS3)。ここで、ユーザによって入力されたメモリ帯域幅は、Bn%であるものとする。なお、Bnは、1〜100%であるものとする。
帯域設定部511は、PEグループnを示すグループ識別情報及びステップS3で入力されたメモリ帯域幅Bnを示す帯域幅情報を外部記憶装置50上のグループ・帯域テーブル52に登録(設定)する(ステップS4)。ここでは、PEグループ0を示すグループ識別情報及びメモリ帯域幅B0を示す帯域幅情報が対応付けて登録される。
帯域設定部511は、PEグループnの値に、1を加える(ステップS5)。帯域制御部511は、PEグループnの値がN−1であるか否かを判定する(ステップS6)。帯域制御部511は、PEグループnの値がN−1でないと判定した場合(ステップS6のNO)、ステップS3に戻って、ステップS1で入力された全てのPEグループに対してメモリ帯域幅を登録する(ステップS6においてPEグループn=N−1と判定される)まで処理が繰り返される。この場合、ステップS3に戻って、PEグループ1のメモリ帯域幅B1をグループ・帯域幅テーブル52に登録する処理が実行される。
なお、例えばPEグループ毎に登録されるメモリ帯域幅は、その合計が100%となるように登録される。
一方、ステップS6において、PEグループnの値がN−1であると判定された場合、グループ・帯域テーブル52の作成処理は終了される。
なお、上記したようにPEグループの初期値は0としているため、上記したようにPEグループN−1まで処理されると、実際にはグループ・帯域テーブル52に登録されるPEグループ数は、Nとなる。
図4は、帯域設定部511によって作成(登録)されたグループ・帯域テーブル52のデータ構造の一例を示す。
図4に示すように、グループ・帯域テーブル52には、PEグループを示すグループ識別情報及び当該PEグループに対して設定されるメモリ帯域幅情報が対応付けて保持されている。図4の例では、PEグループ0を示すグループ識別情報「0」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅B0は、「90%」である。また、PEグループ1を示すグループ識別情報「1」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅B1は、「10%」である。この例では、ユーザによってPEグループ数として2(PEグループ0及びPEグループ1)が入力されている。また、グループ識別情報「0」及び「1」に対応付けられているメモリ帯域幅の合計は100%となっている。
次に、図5のフローチャートを参照して、帯域設定部511がメモリコントローラ20にPEグループ毎のメモリ帯域幅を設定する処理手順について説明する。なお、このPEグループ毎のメモリ帯域幅を設定する処理は、例えばOS51のスケジューラが起動する際に実行される。
まず、帯域設定部511は、外部記憶装置50からグループ・帯域テーブル52を読み込む(ステップS11)。
次に、帯域設定部511は、例えばPEグループn(n=0、1、2、…、N)の初期値として「0」を設定する(ステップS2)。
帯域設定部511は、グループ・帯域テーブル52を参照して、PEグループ0のメモリ帯域幅B0をメモリコントローラ20に設定する(ステップS13)。帯域設定部511は、PEグループ0を示すグループ識別情報に対応付けてグループ・帯域テーブル52に保持されているメモリ帯域情報によって示されるメモリ帯域幅B0を設定する。
帯域設定部511は、PEグループnの値に、1を加える(ステップS14)。帯域制御部511は、PEグループnの値がN−1であるか否かを判定する(ステップS15)。帯域制御部511は、PEグループnの値がN−1でないと判定した場合(ステップS15のNO)、ステップS13に戻って、グループ・帯域テーブル52に保持されている全てのPEグループに対してメモリ帯域幅を設定するまで処理が繰り返される。この場合、ステップS3に戻って、グループ1のメモリ帯域幅B1をメモリコントローラ20に設定する処理が実行される。
一方、ステップS15において、PEグループnの値がN−1であると判定された場合、PEグループのメモリ帯域を設定する処理は終了され、初期タスクテーブル及びタスクキューを作成する処理が実行される。これにより、タスクテーブル54に保持されている複数のタスクを各PEに割り当てる処理(タスクディスパッチ)が実行される。
図6は、グループ・プライオリティテーブル53のデータ構造の一例を示す。
図6に示すように、グループ・プライオリティテーブル53には、実行プライオリティ値及びグループ識別情報が保持されている。なお、実行プライオリティ値の段階数は2(実行プライオリティ値0または1)、PEグループ数は2(PEグループ0または1)であるものとする。図6の例では、実行プライオリティ値「0」に対応付けて、PEグループ0を示すグループ識別情報「0」が保持されている。また、実行プライオリティ値「1」に対応付けて、PEグループ1を示すグループ識別情報「1」が保持されている。このグループ・プライオリティテーブル53に保持されている実行プライオリティ値及びグループ識別情報は、例えばシステム運用開始時または運用形態変更時等に予め定められている。
図7は、タスクテーブル54及び各PEのタスクキュー(task queue)のデータ構造の一例を示す。図7に示すように、タスクテーブル54には、タスク毎に、当該タスクの実行プライオリティ値が保持されている。また、タスクテーブル54には、タスク毎に、スケジューラ512によって当該タスクが割り当てられたPEを示すPE識別情報が保持されている。
図7の例では、タスクテーブル54には、タスクA〜C、及びタスク1〜10が保持されている。また、タスクA〜Cの実行プライオリティ値は0であり、タスク1〜10の実行プライオリティ値は1である。なお、実行プライオリティ値は1よりも0の方がプライオリティ(処理優先度)が高いものとする。つまり、各PEは、タスクA〜Cには、多い実行時間で動作し、タスク1〜10には少ない実行時間で動作することになる。
また、各PEのタスクキューには、スケジューラ512によって割り当てられたタスクが実行プライオリティ毎に登録されている。各PEのタスクキューに登録されている複数のタスクは、例えば登録されている順に各PEによって処理されることになる。
図7に示すように、PE(0)のタスクキューには、実行プライオリティ値「0」のタスクとしてタスクAが割り当てられている。また、PE(0)のタスクキューには、実行プライオリティ値「1」のタスクとしてタスク3及び7が登録されている。
同様に、PE(1)のタスクキューには、実行プライオリティ値「0」のタスクとしてタスクBが割り当てられている。また、PE(1)のタスクキューには、実行プライオリティ値「1」のタスクとしてタスク4及び8が登録されている。
同様に、PE(2)のタスクキューには、実行プライオリティ値「0」のタスクとしてタスクCが割り当てられている。また、PE(2)のタスクキューには、実行プライオリティ値「1」のタスクとしてタスク5及び9が登録されている。
同様に、PE(3)のタスクキューには、実行プライオリティ値「1」のタスクとしてタスク1、2、6及び10が登録されている。
なお、タスクテーブル54に保持されている複数のタスクは、例えば実行プライオリティ値が高い順に各PEに割り当てられる。
また、図7のタスクテーブル54には、タスク毎に上記したように各タスクが割り当てられた各PEを示すPE識別情報が示されている。ここでは、PE(0)を示すPE識別情報を「0」、PE(1)を示すPE識別情報を「1」、PE(2)を示すPE識別情報を「2」及びPE(3)を示すPE識別情報を「3」とする。
次に、図8のフローチャートを参照して、各PEがタスクを実行する際に当該PEが属すべきPEグループを設定する処理手順について説明する。ここでは、PE(0)がタスクAを実行する際の処理について説明する。なお、他のPEについても同様であり、他のタスクを実行する際についても同様である。また、必要に応じて図4、図6及び図7を用いて説明する。
まず、スケジューラ512のグループ決定部514は、PE(0)がタスクAを実行する際、図7に示すタスクテーブル54を参照して、当該タスクAに対応付けて保持されている実行プライオリティ値(ここでは、「0」)を取得する(ステップS21)。
次に、グループ決定部514は、グループ・プライオリティテーブル53を参照して、取得された実行プライオリティ値からPEグループを決定する(ステップS22)。グループ決定部514は、取得された実行プライオリティ値に対応付けてグループ・プライオリティテーブル53に保持されているグループ識別情報によって示されるPEグループを、PE(0)が属すべきPEグループとして決定する。例えば、グループ決定部514は、図6に示すグループ・プライオリティテーブル53には実行プライオリティ値「0」に対応付けてグループ識別情報「0」が保持されているので、PE(0)のPEグループはPEグループ0であると決定する。
グループ設定部513は、グループ決定部514によって決定されたPEグループのPEグループ番号(グループ識別情報)をPE(0)のPEグループレジスタに設定する(ステップS23)。この場合、PE(0)のPEグループレジスタには、「0」が設定される。
PE(0)のPEグループレジスタに「0」が設定された場合、PE(0)は、グループ識別情報「0」に対応付けてグループ・帯域テーブル52に保持されている帯域情報によって示されるメモリ帯域幅で、タスクAを実行する。図4に示すグループ・帯域テーブル52の例では、PE(0)は、メモリ帯域幅90%でタスクAを処理可能である。
図9は、PE(0)〜PE(3)が、割り当てられた複数のタスクを実時間tで実行する処理の流れを示す。なお、PE(0)〜PE(3)には、上記した図7に示すように複数のタスクが割り当てられている。図9に示すように、PE(0)〜PE(2)は、実行プライオリティ値「1」のタスク(タスク3〜5、タスク7〜9)に比べて、実行プライオリティ値「0」のタスク(タスクA〜C)の実行時間を多くし、かつ、実行回数も多く動作している。また、PE(3)は、実行すべきタスク(タスク1、2、6及び10)が全て実行プライオリティ値「1」であるため、実行時間及び実行回数を均一的に各タスクを実行している。
図10は、図9に示す実時間tがt0のときのPE(0)〜PE(3)の各々が属するPEグループ及び当該PE(0)〜PE(3)の各々がメモリ30にアクセスできるメモリ帯域幅の関係を示す。
図9の例では、実時間t0のとき、PE(0)は、実行プライオリティ値「1」のタスク3を実行している。また、PE(1)は実行プライオリティ値「1」のタスク4を、PE(2)は実行プライオリティ値「1」のタスク5を、PE(3)は実行プライオリティ値「1」のタスク2を実行している。つまり、PE(0)〜PE(3)は、全て実行プライオリティ値「1」のタスクを実行している。
この場合、図10に示すように、PE(0)〜PE(3)の各々が属すべきPEグループは、PEグループ1であると決定されている。よって、PE(0)〜PE(3)のそれぞれのPEグループレジスタには、グループ識別情報(G)「1」が設定されている。これにより、図10の例では、PE(0)〜PE(3)は、グループ識別情報「1」に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ30にアクセスすることが可能となる。つまり、図4に示すグループ・帯域テーブル52の例では、PE(0)〜PE(3)は、メモリ帯域幅10%でメモリ30にアクセスできる。
ここで、図9に示す実時間tがt0からt1に経過した場合を想定する。この場合、PE(2)で実行されるタスクは、タスク5からタスクCに切り替えられる。また、PE(3)で実行されるタスクは、タスク2からタスク6に切り替えられる。
図11のフローチャートを参照して、例えばPE(2)で実行されるタスクが、タスク5からタスクCに切り替えられる際のPE(2)が属すべきPEグループを設定する処理手順について説明する。なお、必要に応じて、図4、図6及び図7を用いて説明する。
まず、PE(2)がタスク5を実行中に、タスクCによるタスク切り替え割込が発生したものとする(ステップS31)。
タスク切り替え割り込みが発生すると、現在PE(2)が実行中のタスク5(前タスク)の停止(終了)処理が実行される(ステップS32)。
次に、グループ決定部514は、PE(2)がタスク5の次に実行されるタスクA(新タスク)に対応付けてタスクテーブル54に保持されている実行プライオリティ値を取得する(ステップS33)。図7に示すタスクテーブル54の場合、グループ決定部514は、実行プライオリティ値「0」を取得する。
グループ決定部514は、グループ・プライオリティテーブル53を参照して、取得された実行プライオリティ値からPEグループを決定する(ステップS34)。例えば、グループ決定部514は、図6に示すグループ・プライオリティテーブル53には実行プライオリティ値「0」に対応付けてグループ識別情報「0」が保持されているので、PE(2)が属すべきPEグループはPEグループ0であると決定する。
グループ設定部513は、グループ決定部514によって決定されたPEグループのPEグループ番号(グループ識別情報)をPE(2)のPEグループレジスタに設定する(ステップS35)。この場合、PE(2)のPEグループレジスタには、「0」が設定される。
これにより、PE(2)がタスク5を実行している際には、グループ識別情報「1」が設定されていたPE(2)のPEグループレジスタに、タスクCを実行する際にはグループ識別情報「0」が設定される。このように、各PEが実行するタスクのプライオリティ値に応じて、PEグループレジスタのグループ識別情報を設定する(書き換える)ことができる。
PE(2)のPEグループレジスタに「0」が設定された場合、PE(2)はグループ識別情報「0」に対応付けてグループ・帯域テーブル52に保持されている帯域情報によって示されるメモリ帯域幅で、タスクCを実行する。図4に示すグループ・帯域テーブル52の例では、PE(2)は、メモリ帯域幅90%でタスクCを処理可能である。
PE(2)のPEグループレジスタに、グループ識別情報「0」が設定されると、タスクC(新タスク)の実行を再開(起動)する処理が実行される(ステップS36)。ここでは、例えば切替後のタスク(タスクC)のコンテキストリストア処理が実行される。具体的には、例えば主記憶上に保存されたタスクの実行状態(プログラムのアドレス、汎用レジスタの値等)をPEに設定する。これにより、切り替え後のタスクをPEに実行させるための準備を整える。
なお、上記したステップS32からS36の処理がタスク切替処理となる。タスク切替処理が終了すると、割込処理が完了する(ステップS37)。割込処理が完了すると、PE(2)は、与えられた帯域幅(ここでは、メモリ帯域幅90%)で切替後のタスク(ここでは、タスクC)を実行する。
また、図9に示す実時間tがt0からt1に経過した場合、PE(3)で実行されるタスクは、タスク2からタスク6に切り替えられる。この場合においても同様に、PE(3)のPEグループレジスタのグループ識別情報が設定される。なお、この場合では、タスク2及びタスク6の実行プライオリティ値は共に「1」であるため、結果的には、PE(3)のPEグループレジスタに設定されるグループ識別情報は変化しない。
図12は、図9に示す実時間tがt1のときのPE(0)〜PE(3)の各々が属するPEグループ及び当該PE(0)〜PE(3)の各々がメモリ30にアクセスできるメモリ帯域幅の関係を示す。
図9の例では、実時間t1のとき、PE(0)は、実行プライオリティ値「1」のタスク3を実行している。また、PE(1)は実行プライオリティ値「1」のタスク4を、PE(2)は実行プライオリティ値「0」のタスクCを、PE(3)は実行プライオリティ値「1」のタスク6を実行している。
この場合、図12に示すように、PE(0)、PE(1)及びPE(3)の各々が属すべきPEグループは、PEグループ1であると決定されている。また、PE(2)が属すべきPEグループは、PEグループ0であると決定されている。よって、PE(0)、PE(1)及びPE(3)のそれぞれのPEグループレジスタには、グループ識別情報「1」が設定されている。また、PE(2)のPEグループレジスタには、グループ識別情報「0」が設定されている。これにより、図12の例では、PE(0)、PE(1)及びPE(3)は、グループ識別情報「1」に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ30にアクセスすることが可能となる。また、PE(2)は、グループ識別情報「0」に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ30にアクセスすることが可能となる。つまり、図4に示すグループ・帯域テーブル52の例では、PE(0)、PE(1)及びPE(3)はメモリ帯域幅10%、PE(2)はメモリ帯域幅90%でメモリ30にアクセスできる。
図13は、図9に示す実時間tがt2のときのPE(0)〜PE(3)の各々が属するPEグループ及び当該PE(0)〜PE(3)の各々がメモリ30にアクセスできるメモリ帯域幅の関係を示す。なお、各PEにおいて、タスク切り替え割込が発生した場合には、上記した図11のような処理で各PEのPEグループレジスタのグループ識別情報は設定される。
図9の例では、実時間t2のとき、PE(0)は、実行プライオリティ値「0」のタスクAを実行している。また、PE(1)は実行プライオリティ値「0」のタスクBを、PE(2)は実行プライオリティ値「0」のタスクCを、PE(3)は実行プライオリティ値「1」のタスク10を実行している。
この場合、図13に示すように、PE(0)〜PE(2)の各々が属すべきPEグループは、PEグループ0であると決定されている。また、PE(3)が属すべきPEグループは、PEグループ1であると決定されている。よって、PE(0)〜PE(2)のそれぞれのPEグループレジスタには、グループ識別情報「0」が設定されている。また、PE(3)のPEグループレジスタには、グループ識別情報「1」が設定されている。これにより、図13の例では、PE(0)〜PE(2)はメモリ帯域幅90%、PE(3)はメモリ帯域幅10%でメモリ30にアクセスできる。
図14は、図9に示す実時間tがt3のときのPE(0)〜PE(3)の各々が属するPEグループ及び当該PE(0)〜PE(3)の各々がメモリ30にアクセスできるメモリ帯域幅の関係を示す。
図9の例では、実時間t3のとき、PE(0)は、実行プライオリティ値「0」のタスクAを実行している。また、PE(1)は実行プライオリティ値「0」のタスクBを、PE(2)は実行プライオリティ値「1」のタスク9を、PE(3)は実行プライオリティ値「1」のタスク10を実行している。
この場合、図14に示すように、PE(0)及びPE(1)の各々が属すべきPEグループは、PEグループ0であると決定されている。また、PE(2)及びPE(3)が属すべきPEグループは、PEグループ1であると決定されている。よって、PE(0)PE(1)のそれぞれのPEグループレジスタには、グループ識別情報「0」が設定されている。また、PE(2)及びPE(3)のPEグループレジスタには、グループ識別情報「1」が設定されている。これにより、図14の例では、PE(0)及びPE(1)はメモリ帯域幅90%、PE(2)及びPE(3)はメモリ帯域幅10%でメモリ30にアクセスできる。
上記したように本実施形態においては、複数のPE10をグループ化することで、タスクを実行する際に、当該タスクの実行プライオリティ値に応じて、当該タスクを実行するPEのPEグループレジスタにグループ識別情報を設定するという簡単な手順で、各PEのメモリ帯域幅を設定することが可能となる。また、グループ毎にメモリ帯域幅をメモリコントローラに設定しているため、高い実行プライオリティのタスクを実行するPEは、低い実行プライオリティの男タスクを実行するPEとメモリ30へのアクセスが競合することなく、タスクを実行することができる。
なお、上記した本実施形態においては、帯域制御部21はメモリコントローラ20に含まれるものとして説明したが、独立したハードウェアモジュールとして設けられる構成であっても構わない。
また、上記した本実施形態においては、帯域制御部21はメモリ帯域幅を制御するものとして説明したが、例えば帯域制御部21がバスコントローラに含まれており、当該帯域制御部21が各PE及びメモリ30間におけるバス帯域幅を制御する構成でも構わない。
[変形例]
次に、本実施形態の変形例について説明する。本変形例では、複数のタスクの各々には、予め動作状態が設定されている。各タスクは、上記した本実施形態で説明した実行プライオリティ値に加えて、当該タスクの動作状態として、メモリ30へのアクセスの頻度を示すアクセスプライオリティ(Access Priority)値を有する。このアクセスプライオリティ値は、小さいほどアクセスプライオリティ値(アクセス頻度)が高いと表現する。例えば、アクセスプライオリティ値が0の場合は、アクセスプライオリティ値は最高である。
スケジューラ512のグループ決定部514は、各PEが実行するタスクの実行プライオリティ値及びアクセスプライオリティ値から当該PEが属すべきPEグループを決定する。
なお、本変形例においては、本実施形態と異なり、便宜的にPEグループ数を3として設定されているものとして説明する。また、本変形例においては、実行プライオリティ値及びアクセスプライオリティ値から直接PEグループを決定するため、本実施形態と異なり、グループ・プライオリティテーブル53は存在しない。
図15は、本変形例のグループ・帯域テーブル52のデータ構造の一例を示す。図15に示すように、グループ・帯域テーブル52には、PEグループを示すグループ識別情報及びメモリ帯域幅情報が対応付けて保持されている。図15の例では、PEグループ0を示すグループ識別情報「0」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅B0は、「60%」である。また、PEグループ1を示すグループ識別情報「1」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅B1は、「30%」である。また、PEグループ2を示すグループ識別情報「2」に対応付けて保持されているメモリ帯域幅情報によって示されるメモリ帯域幅B2は、「10%」である。
図16は、本変形例のタスクテーブル54のデータ構造の一例を示す。図16に示すように、タスクテーブル54には、タスク毎に、当該タスクの実行プライオリティ値が及びアクセスプライオリティ値が保持されている。また、タスクテーブル54には、タスク毎に、スケジューラ512によって当該タスクが割り当てられたPEを示すPE識別情報が保持されている。なお、タスクテーブル54に保持されている各タスク及び当該タスクに対応付けられている実行プライオリティ値は、図7に示すタスクテーブル54と同様であるので、その詳しい説明は省略する。また、各タスクは、図7と同様に、各PEに割り当てられたものとする。
図16の例では、タスクA、B、1〜4のアクセスプライオリティ値は0であり、タスクC、5〜10のアクセスプライオリティ値は1である。なお、アクセスプライオリティ値は、1よりも0の方がメモリ30へのアクセス頻度が高いものとする。
また、タスクテーブル54には、タスクの実行プライオリティ値及びアクセスプライオリティ値からPEグループが決定された場合、当該タスク毎に、当該決定されたPEグループを示すグループ識別情報が保持される。なお、実行プライオリティ値及びアクセスプライオリティ値からPEグループを決定する処理の詳細については、後述する。
次に、図17を参照して、各PEがタスクを実行する際に当該PEが属すべきPEグループを設定する処理手順について説明する。
まず、スケジューラ512のグループ決定部514は、PEがタスクを実行する際、タスクテーブル54を参照して、当該タスクに対応付けて保持されている実行プライオリティ値及びアクセスプライオリティ値を取得する(ステップS41)。
次に、グループ決定部514は、取得された実行プライオリティ値及びアクセスプライオリティ値に基づいて、タスクを実行するPEが属すべきPEグループを決定(算出)する(ステップS42)。
ここで、実行プライオリティ値及びアクセスプライオリティ値の組合せからPEグループを決定する処理の具体例について説明する。なお、上記したように、実行プライオリティ値は0が最も優先度が高いものとし、アクセスプライオリティ値は0が最もメモリ30にアクセスする頻度が高いものとする。また、実行プライオリティ値が大きいほど、実行プライオリティ値が低いとし、アクセスプライオリティ値についても同様とする。
以下、タスクに対応付けてタスクテーブル54に保持されている実行プライオリティ値をP、アクセスプライオリティ値をA、実行プライオリティ値の最大値(優先度が最低)をPmax、アクセスプライオリティ値の最大値(アクセス頻度が最低)をAmaxとする。また、決定されるPEグループを示すグループ番号(グループ識別情報)をGまたはG(P、A)と表記する。また、PEグループにおいては、PEグループ番号0によって示されるPEグループが最も広いメモリ帯域幅を有し、PEグループ番号の最大値Gmaxによって示されるPEグループが最も狭いメモリ帯域幅を有するものとする。
まず、第1の具体例(加算方式)について説明する。第1の具体例では、PとAに予め定めた係数を乗じた上で加算することによってGを決定することを特徴とする。一般式の例としては、G=αP+βA(α、βは予め定めた正の実数)となる。この式を用いた最も簡単な単純加算方式は、G=P+Aである。
具体的には、例えばGmax=2、Pmax=Amax=1(グループ数は3、プライオリティ値の段階数はそれぞれ2)である場合、例えば処理優先度が高く、メモリ30へのアクセス頻度が高いタスクにはP=0、A=0を設定することで、当該タスクを実行するPEが属すべきPEグループのPEグループ番号はG(0、0)=0となり、当該PEは、最も広い帯域幅を有するPEグループ0に割り当てられる。
同様にG(0、1)=1、G(1、0)=1、G(1、1)=2となる。このように、G=0のPEグループに属するPEは、他のPまたはAが低いタスクを実行するPEに帯域を奪われることなく、タスクを実行できる。また、G=2のPEグループに属するPEは、決してG=1のPEグループに属するPEの帯域を妨害することなくタスクを実行する。
また、上記したような単純加算方式は、例えばGmax=4、Pmax=Amax=2(グループ数5、プライオリティ値の段階数はそれぞれ3)のような多階層のグループ分けにも適用できる。
また、実行プライオリティ値及びアクセスプライオリティ値の段階数が異なる場合、またはグループ数に対して実行プライオリティ値及びアクセスプライオリティ値の段階数が大きい場合等には、例えばG=(P/Pmax+A/Amax)×Gmax/2のような正規化加算方式を用いることで対応することができる。
また、特にシステム要件等によって実行プライオリティ値及びアクセスプライオリティ値に更に重みをつけたい場合には、正規化加算方式のPまたはAに更に重み係数を乗ずる等、適宜対応することができる。
なお、上記したような計算式によって例えばG(P、A)が0未満またはGmaxを超えるような場合には、それぞれ0またはGmaxとする。また、計算式によって例えばG(P、A)が小数部分を含む場合は、当該小数部分を切り捨てるか切り上げるかを適宜決定するものとする。
上記したような加算方式によると、最高の実行プライオリティ値(実行プライオリティ値が0)及びアクセスプライオリティ値が最高(アクセスプライオリティ値が0)のタスクは、当該タスクより低い実行プライオリティ値のタスクを実行するPEには決してメモリ帯域を妨害されずに実行される。また、実行プライオリティ値及びアクセスプライオリティ値のどちらかが最高でないタスクについてはバランスよくメモリ帯域が配分できるという利点がある。
次に、第2の具体例(実行プライオリティ分離方式)について説明する。第2の具体例では、Pがより高いタスクを実行するPEほど、Pがより低いタスクを実行するPEに対して必ずメモリ帯域のより広い、もしくは同じPEグループに割り当てられるように、G(P、A)が決定されることを特徴とする。
具体的には、例えばGmax=3、Pmax=Amax=1(グループ数は4、プライオリティ値の段階数はそれぞれ2)である場合には、G(0、0)=0、G(0、1)=1、G(1、0)=2、G(1、1)=3のように配置する。このような線形な配置を行う場合は計算式でも表現可能であるが、実行プライオリティ分離方式は必ずしも線形式に配置する必要はない。例えばGmax=2、Pmax=Amax=1の場合に、G(0、0)=0、G(0、1)=1、G(1、0)=G(1、1)=2等の配置であっても構わない。
このような実行プライオリティ分離方式によれば、Pを持つタスクの実行が、P+1等のより低い実行プライオリティ値のタスクの実行によってメモリ帯域を妨害されることがないことを保証できる。更に、同じPを持つタスク群を異なるAによって細分化できるため、高いPかつ低いAのタスクが実行される際に、無駄なメモリ帯域が独占されることを軽減できる。
なお、PmaxがGmaxより大きい場合等に、連続するPmaxの値をひとまとめとする方法も実行プライオリティ分離方式の拡張として実装可能である。例えばGmax=2、Pmax=3、Amax=1の場合に、G(0、0)=0、G(0、1)=1、G(1、0)=2、G(1、1)=2、G(2、0)=2、G(2、1)=2と配置すること等が考えられる。
なお、上記したいずれの方式においても、同一のPEグループに異なる実行プライオリティ値またはアクセスプライオリティ値のタスクが存在する場合には、実行プライオリティ値またはアクセスプライオリティ値が高い方に長いPE実行時間を与えるという方法を同時に適用するとしても良い。
グループ決定部514は、上記したような方式に基づいて、タスクを実行するPEが属すべきPEグループを決定する。なお、決定されたPEグループは、タスク毎に対応付けてタスクテーブル54に登録される。
次に、グループ設定部513は、グループ決定部514によって決定されたPEグループのPEグループ番号(グループ識別情報)をPEグループレジスタに設定する(ステップS43)。
図18は、PE(0)〜PE(3)が割り当てられた複数のタスクを実時間tで実行する処理の流れを示す。なお、PE(0)〜PE(3)には、上記した図16に示すように複数のタスクが割り当てられている。なお、各タスクの実行時間については、例えば実行プライオリティ値に応じて定められており、上記した図9の説明と同様であるのでその説明は省略する。
図19は、図18に示す実時間tがt0のときのPE(0)からPE(3)の各々が属するPEグループ及び当該PE(0)〜PE(3)の各々がメモリ30にアクセスできるメモリ帯域幅の関係を示す。
図18の例では、実時間t0のとき、PE(0)は、タスク3を実行しているので、PEグループ1に属している。なお、このPEグループは、上記した図16に示すタスクテーブル54のタスク毎の実行プライオリティ値及びアクセスプライオリティ値から単純加算方式によって決定されたものとする。また、PE(1)は、タスク4を実行しているので、PEグループ1に属している。また、PE(2)は、タスクCを実行しているので、PEグループ1に属している。また、PE(3)は、タスク6を実行しているので、PEグループ2に属している。また、各PEのPEグループレジスタには、各PEが属するPEグループのグループ番号が設定されている。
この場合、図19に示すように、PE(0)〜PE(2)は、グループ番号(識別情報)1に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ30にアクセスすることが可能となる。また、PE(3)は、グループ番号2に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ30にアクセスすることが可能となる。つまり、図15に示すグループ・帯域テーブル52の例では、PE(0)〜PE(2)は、メモリ帯域幅30%でメモリ30にアクセスできる。また、PE(3)は、メモリ帯域10%でメモリ30にアクセスできる。
図20は、図18に示す実時間tがt1のときのPE(0)〜PE(3)の各々が属するPEグループ及び当該PE(0)〜PE(3)の各々がメモリ30にアクセスできるメモリ帯域幅の関係を示す。なお、各PEが実行するタスクが切り替えられる場合は、上述した本実施形態と同様にして、新タスクを実行する各PEが属するPEグループのPEグループ番号を、当該PEのPEグループレジスタに設定する処理が実行される。
図18の例では、実時間t1のとき、PE(0)は、タスクAを実行しているので、PEグループ0に属している。また、PE(1)は、タスクBを実行しているので、PEグループ0に属している。また、PE(2)は、タスクCを実行しているので、PEグループ1に属している。また、PE(3)は、タスク6を実行しているので、PEグループ2に属している。また、各PEのPEグループレジスタには、各PEが属するPEグループのグループ番号が設定されている。
この場合、図20に示すように、PE(0)及びPE(1)は、グループ番号0に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ30にアクセスすることが可能となる。また、PE(2)は、グループ番号1に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ30にアクセスすることが可能となる。また、PE(3)は、グループ番号2に対応付けてグループ・帯域テーブル52に保持されている帯域幅情報によって示されるメモリ帯域幅でメモリ30にアクセスすることが可能となる。つまり、図15に示すグループ・帯域テーブル52の例では、PE(0)及びPE(1)は、メモリ帯域幅60%でメモリ30にアクセスできる。また、PE(2)は、メモリ帯域幅30%でメモリ30にアクセスできる。また、PE(3)は、メモリ帯域10%でメモリ30にアクセスできる。
上記したように本変形例においては、複数のPE10をグループ化することで、タスクを実行する際に、当該タスクの実行プライオリティ値及びアクセスプライオリティ値に応じて、当該タスクを実行するPEのPEグループレジスタにグループ識別情報(番号)を設定するという簡単な手順で、各PEのメモリ帯域幅を設定することが可能となる。
また、前述した本実施形態では、実行プライオリティ値のみに基づいてPEグループを決定するため、実行プライオリティ値が高いがメモリ30にアクセスする頻度があまり高くないタスクを実行するPEと、実行プライオリティ値が高くメモリ30にアクセスする頻度が高いタスクを実行するPEとが同一のPEグループに属することがあるため、かえって実行時間が長くなる場合が考えられる。しかしながら、本変形例では、実行プライオリティ値及びアクセスプライオリティ値に基づいてPEグループを決定するため、実行プライオリティ値及びアクセスプライオリティ値が共に高いタスクを実行するPEは、実行プライオリティ値は他界がアクセスプライオリティ値は低いタスクを実行するPEと異なるPEグループに属する。これにより、上記したような本実施形態において発生し得る非効率な状態を回避することができる。
なお、前述した本実施形態では、各タスクの実行プライオリティ値のみを用いて当該タスクを実行するPEが属すべきPEグループを決定する構成を説明したが、同様に、本変形例で説明した各タスクのアクセスプライオリティ値のみを用いて当該タスクを実行するPEが属すべきPEグループを決定する構成としても構わない。この場合では、前述したグループ・プライオリティテーブル53にアクセスプライオリティ値及びグループ識別情報が保持される構成とすると良い。
また、本願発明は、上記実施形態または変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態または変形例に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、実施形態または変形例に亘る構成要素を適宜組合せてもよい。
10…複数のPE(プロセッサ要素)、20…メモリコントローラ、21…帯域制御部、30…メモリ、40…I/Oコントローラ、50…外部記憶装置、51…OS(オペレーティングシステム)、52…グループ・帯域テーブル、53…グループ・プライオリティテーブル、54…タスクテーブル、511…帯域設定部、512…スケジューラ、513…グループ設定部、514…グループ決定部。