(57)【要約】【課題】ＲＭＷ処理のオーバーヘッドを低減し、プログラムの工数増大を抑制して同時性確保の処理を実現するマルチプロセッサシステム等を提供すること。【解決手段】ＣＰＵコア１１ａがアクセスするデータの第１データＩＤを格納する第１データＩＤレジスタ１２ａと、ＣＰＵコア１１ｂがアクセスするデータの第２データＩＤを格納する第２データＩＤレジスタ１２ｂと、予め関連する複数のデータに、少なくとも一部が一致するデータＩＤを対応づけたデータテーブル２２を記憶する、複数のＣＰＵコアが共有するデータテーブル記憶手段１０と、第１データＩＤレジスタ１２ａに格納された第１データＩＤと第２データＩＤレジスタ１２ｂに格納された第２データＩＤを比較するデータＩＤ比較手段１６と、データＩＤ比較手段による比較結果が一致を示す場合、ＣＰＵコア１１ａとＣＰＵコア１１ｂのいずれか一方はデータテーブル２２へのアクセスを保留することを特徴とする。【選択図】図１
2008293368.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵコアが並行してプログラムを実行するマルチプロセッサシステムにおいて、
第１ＣＰＵコアがアクセスするデータの第１データＩＤを格納する第１データＩＤレジスタと、第２ＣＰＵコアがアクセスする前記データの第２データＩＤを格納する第２データＩＤレジスタと、
予め関連する複数の前記データに、少なくとも一部が一致するデータＩＤを対応づけたデータテーブルを記憶する、複数の前記ＣＰＵコアが共有するデータテーブル記憶手段と、
第１データＩＤレジスタに格納された第１データＩＤと第２データＩＤレジスタに格納された第２データＩＤを比較するデータＩＤ比較手段と、
前記データＩＤ比較手段による比較結果が一致を示す場合、第１ＣＰＵコアと第２ＣＰＵコアのいずれか一方は前記データテーブルへのアクセスを保留する、
ことを特徴とするマルチプロセッサシステム。
【請求項２】
前記データＩＤ比較手段は、第１データＩＤと第２データＩＤの一部が一致する場合、第１データＩＤと第２データＩＤが一致するとの比較結果を出力する、
ことを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項３】
前記データＩＤは、前記データが記述されたソースコードをコンパイルするコンパイラにより付与される、
ことを特徴とする請求項２記載のマルチプロセッサシステム。
【請求項４】
ＣＰＵコア毎に設けられた、所定処理の開始を検出する検出手段と、
第１ＣＰＵコアの前記検出手段が前記所定処理の開始を検出した場合、第１ＣＰＵコアが前記所定処理にてアクセスする対象変数の第１対象データＩＤを格納する第１所定処理データＩＤレジスタと、
第２ＣＰＵコアの前記検出手段が前記所定処理の開始を検出した場合、第２ＣＰＵコアが前記所定処理にてアクセスする対象変数の第２対象データＩＤを格納する第２所定処理データＩＤレジスタと、
第１データＩＤレジスタに格納された第１データＩＤと、第２所定処理データＩＤレジスタに格納された第２対象データＩＤとを比較する比較手段Ａと、
第２データＩＤレジスタに格納された第２データＩＤと、第１所定処理データＩＤレジスタに格納された第１対象データＩＤが一致するか否かを判定する比較手段Ｂと、を有し、
第１ＣＰＵコアは、第１ＣＰＵコアが書き込み命令を実行する場合であって、かつ、比較手段Ａによる比較結果が一致を示す場合、前記書き込み命令の実行を保留し、
第２ＣＰＵコアは、第２ＣＰＵコアが書き込み命令を実行する場合であって、かつ、判定手段Ｂによる比較結果が一致を示す場合、前記書き込み命令の実行を保留する、
ことを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項５】
第１ＣＰＵコアがアクセスするデータの第１データＩＤを格納する第１データＩＤレジスタと、
第２ＣＰＵコアがアクセスする前記データの第２データＩＤを格納する第２データＩＤレジスタと、
予め関連する複数の前記データに、少なくとも一部が一致するデータＩＤを対応づけたデータテーブルを記憶するた、複数の前記ＣＰＵコアが共有するデータテーブル記憶手段と、を有する、マルチプロセッサシステムの排他制御方法であって、
データＩＤ比較手段が、第１データＩＤレジスタに格納された第１データＩＤと第２データＩＤレジスタに格納された第２データＩＤを比較するステップと、
前記ステップの比較結果が一致を示す場合、第１ＣＰＵコアと第２ＣＰＵコアのいずれか一方は、前記データテーブルへのアクセスを保留するステップと、
を有することを特徴とするマルチプロセッサシステムの排他制御方法。
【請求項６】
請求項１〜４いずれか記載のマルチプロセッサシステムを搭載した車両用電子制御ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステム等に関し、特に、複数のＣＰＵが共有メモリにアクセスする場合に排他制御するマルチプロセッサシステム、排他制御方法及び車両用電子制御ユニットに関する。
【背景技術】
【０００２】
ＣＰＵコアなどの演算部を複数備えたマルチチプロセッサシステム（以下、ＭＰＳという）では、ＲＡＭなどの共有メモリに各演算部がアクセスする場合があるため、共有メモリへの排他処理が必要となる。
【０００３】
排他処理としてＲＭＷ（リード・モディファイ・ライト）命令が知られている。図７（ａ）はＲＭＷ命令による処理の概念図を示す。図７（ａ）のＲＭＷ命令では、ａ）所定アドレスのデータ２０４を読み出す、ｂ）該データ２０４を加工する、ｃ）加工後のデータ２０４を元のアドレスに書き込む、の一連の処理が実行される。
【０００４】
図７（ａ）では読み込んだデータ２０４の所定ビット（例えばフラグ）を書き換えてＲＡＭ２００の元のアドレスに書き込んでいる。ＣＰＵコア１００ａがｂ）の処理を実行している間に、ＣＰＵコア１００ｂが同じデータ２０４を書き換えても、その後ＣＰＵコア１００ａがｃ）の処理によりデータ２０４を上書きしてしまうので、ＣＰＵコア１００ｂが書き込んだはずのデータ２０４が消失してしまう。このため、ＲＭＷ命令は割り込み禁止機能を備え、ａ）〜ｃ）の一連の処理の間、ＣＰＵコア１００ｂのＲＡＭ２００へのアクセルを禁止する。
【０００５】
しかしながら、ＲＭＷ命令がソースコードに記述されていればコンパイラが自動的に認識し上述の排他処理が実行できるが、ＲＭＷ命令を用いない広義の（いくつかのステップを経る）ＲＭＷ処理はコンパイラが認識できない。このため、プログラマがＲＭＷ処理の開始から終了まで排他処理を記述する必要がある。
【０００６】
例えばエンジン等の制御ソフトにおいて、エンジンの状態を表すデータを入力値として演算する場合、最初の処理で入力値のデータを取得し、途中の処理でＲＭＷ処理に付随する他のデータを演算して、最後の処理で入力値のデータを更新するといった、ＲＭＷ命令を用いないＲＭＷ処理が多いが、このような広義のＲＭＷ処理の全てに排他処理を記述する必要がある。
【０００７】
また、ＲＭＷ処理の間、排他処理のためＣＰＵコア１００ａがＲＡＭ２００を１リソースとしてアクセスを禁止すると、その間ＣＰＵコア１００ｂはＲＡＭ２００にアクセスできないためオーバーヘッドが大きくなってしまうという問題がある。
【０００８】
この点について、自ＣＰＵが処理対象としたアドレスに対してのみ他ＣＰＵのアクセスを禁止する技術が提案されている（例えば、特許文献１参照。）。特許文献１には、自ＣＰＵがＲＭＷ処理を実行する場合、そのメモリアドレスを保持しておき、システムバスに出力されているアドレスとメモリアドレスが一致するか否かを検出するＭＰＳが記載されており、一致を検出した場合は、他ＣＰＵにアクセス中断信号を送出することで、処理対象としたアドレスに対してのみ他ＣＰＵのアクセスを禁止している。
【特許文献１】特開平７−９３２５９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１記載の技術では、メモリアドレスの一致に基づきアクセスを禁止するため、読み取りと書き込みのいずれのアクセスの場合も他ＣＰＵは共有メモリにアクセスできず、なお、オーバーヘッドが大きいという問題がある。また、自ＣＰＵがＲＭＷ処理を実行中、別のメモリアドレスにアクセスした場合には、他ＣＰＵがＲＭＷ処理の対象変数（上記の入力値のデータ）にアクセス可能となるため、入力値のデータを書き換えてしまうおそれがある。
【００１０】
ところで、ＭＰＳの排他処理として、ＲＭＷ（リード・モディファイ・ライト）処理の他に、同時性を確保するための処理が挙げられる。
【００１１】
図７（ｂ）は、２つのＣＰＵコア１００ａ、１００ｂがＲＡＭ２００を共有する従来のＭＰＳの概念図を示す。同時性の確保は、例えば関連する複数のデータが他の処理に優先して同時に（一連の処理で）更新されることが要求されることをいう。例えばエンジンを制御する制御ソフトではエンジンの状態を複数のデータで表すが、元となるエンジンの状態が変われば複数のデータも同時に更新されなければならない。例えば、データ２０１〜２０３が関連するデータであってＣＰＵコア１００ａがデータ２０１〜２０３を更新する場合、ＣＰＵコア１００ｂがエンジンの別の制御に関連してデータ２０３にアクセスする可能性があるため、同時性を確保するためにはプログラム上でデータ２０１〜２０３の更新の間はＲＡＭ２００へのアクセスを禁止する命令を記述する必要がある。しかしながら、制御ソフトには同時性の確保が必要な複数のデータが多く存在するため、ＲＡＭ２００にアクセスする処理全てに禁止命令を記述すると工数が増大してしまうし、プログラマ等の負担が増大するという問題がある。
【００１２】
本発明は、上記課題に鑑み、マルチプロセッサシステムの排他処理において、ＲＭＷ処理のオーバーヘッドを低減し、プログラムの工数増大を抑制して同時性確保の処理を実現するマルチプロセッサシステム、排他制御方法及び車両用電子制御ユニットを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するため、本発明は、複数のＣＰＵコアが並行してプログラムを実行するマルチプロセッサシステムにおいて、第１ＣＰＵコア（例えば、ＣＰＵコア１１ａ）がアクセスするデータの第１データＩＤを格納する第１データＩＤレジスタ（例えば、使用ＩＤレジスタ１１ａ）と、第２ＣＰＵコア（例えば、ＣＰＵコア１１ｂ）がアクセスするデータの第２データＩＤを格納する第２データＩＤレジスタ（例えば、使用ＩＤレジスタ１１ｂ）と、予め関連する複数のデータに、少なくとも一部が一致するデータＩＤを対応づけたデータテーブルを記憶する、複数のＣＰＵコアが共有するデータテーブル記憶手段（例えば、ＲＡＭ１０）と、第１データＩＤレジスタに格納された第１データＩＤと第２データＩＤレジスタに格納された第２データＩＤを比較するデータＩＤ比較手段（例えば、比較回路１６）と、データＩＤ比較手段による比較結果が一致を示す場合、第１ＣＰＵコアと第２ＣＰＵコアのいずれか一方はデータテーブルへのアクセスを保留する、ことを特徴とする。
【発明の効果】
【００１４】
マルチプロセッサシステムの排他処理において、ＲＭＷ処理のオーバーヘッドを低減し、プログラムの工数増大を抑制して同時性確保の処理を実現するマルチプロセッサシステム、排他制御方法及び車両用電子制御ユニットを提供することができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明を実施するための最良の形態について図面を参照しながら説明する。
図１は、本実施形態のマルチプロセッサシステム（以下、ＭＰＳという）１００の概略構成図を示す。本実施形態のＭＰＳ１００は、関連する複数のデータを関連づけるようプログラム２１に記述し、コンパイラによって関連する複数のデータに少なくとも一部が一致するデータＩＤが付与されるようにコンパイルする。ＣＰＵコア１１ａ、１１ｂがデータにアクセスする時には該データのデータＩＤを使用ＩＤレジスタ１２ａ、１２ｂに格納しておき、いずれかのＣＰＵコア１１ａ、１１ｂがデータにアクセスする場合、使用ＩＤレジスタ１２ａのデータＩＤと使用ＩＤレジスタ１２ｂのデータＩＤを比較して一致する場合には、ＣＰＵコア１１ａ又は１１ｂはアクセスを保留する。ＣＰＵコア１１ａ、１１ｂのいずれか一方が同じデータＩＤのデータを処理している間は、他方が同じデータＩＤのデータにアクセスできないので、関連する複数のデータの同時性を確保することができる。
【００１６】
また、ＲＭＷ処理の処理対象のデータＩＤを格納する使用ＲＭＷＩＤレジスタ１３ａ、１３ｂを備え、いずれかのＣＰＵコア１１ａ（１１ｂ）がデータに書き込みのアクセスをする場合、使用ＩＤレジスタ１２ａ（１２ｂ）のデータＩＤと使用ＲＭＷＩＤレジスタ１３ｂ（１３ａ）のデータＩＤを比較し、一致する場合には書き込みを保留することで、ＲＭＷ処理中の排他処理を実現する。
【００１７】
ＭＰＳ１００は、例えばエンジンＥＣＵ（電子制御ユニット）、ブレーキＥＣＵなど制御系のＥＣＵ、又は、ボディＥＣＵ、エアコンＥＣＵなどボディ系のＥＣＵに組み込まれているコンピュータの一形態である。ＭＰＳ１００はＣＡＮ（Controller  Area  Network）やＬＩＮ（Local  Interconnect  Network）等の車内ＬＡＮを介して他のＥＣＵと接続されており、車載装置の協調制御を実現している。
【００１８】
ＭＰＳ１００は、ＲＯＭ１５、ＣＰＵコア１１ａ、１１ｂ（区別しない場合、単にＣＰＵコア１１という）、ＲＡＭ１０、使用ＩＤレジスタ１２ａ、１２ｂ（区別しない場合、単に使用ＩＤレジスタ１２という）及び使用ＲＭＷＩＤレジスタ１３ａ、１３ｂ（区別しない場合、単に使用ＲＭＷＩＤレジスタ１３という）が内部バスに接続して構成されている。なお、車内ＬＡＮに接続する入出力インターフェースや他のＥＣＵとの通信装置を備えていてもよい。ＣＰＵコア１１ａ、１１ｂは同一のＣＰＵコアでもよいし、異なる構成のＣＰＵコアであってもよい。
【００１９】
ＲＯＭ１５にはコンパイルにより実行形式に変換されたプログラム（オブジェクトコード）２１、制御マップ、設定情報などのファイルが格納されている。プログラム２１をＣＰＵコア１１ａ、１１ｂが実行することで、例えばエンジンのスロットル開度、燃料噴射量等が制御される。
【００２０】
ＣＰＵコア１１ａ、１１ｂはプログラム２１の各スレッドを、予め定められた手順又はイベントの発生を受けて実行する。処理分配回路１４は、例えばコンパイル時に対応づけられたスレッドをそのＣＰＵコア１１ａ、１１ｂに分配するか、ＣＰＵコア１１ａ、１１ｂの負荷を監視しながら負荷の軽い方にスレッドを分配する。
【００２１】
ＣＰＵコア１１ａ、１１ｂはプログラム２１の実行時にはプログラム２１の一部又は全体をＲＡＭ１０に展開し、ＲＡＭ１０を作業領域にしてプログラム２１を実行する。ＣＰＵコア１１ａ、１１ｂは、ＲＡＭ１０の命令やデータをワード単位毎に読み出すフェッチ（読み出し）、命令を解読するデコード、命令に応じた演算、演算結果のＲＡＭ１０への格納（書き込み）というステップを繰り返す。
【００２２】
本実施形態のＭＰＳ１００は、ＣＰＵコア１１ａに接続された使用ＩＤレジスタ１２ａ及び使用ＲＭＷＩＤレジスタ１３ａ、ＣＰＵコア１１ｂに接続された使用ＩＤレジスタ１２ｂ及び使用ＲＭＷＩＤレジスタ１３ｂに、データを識別するデータＩＤを格納する。これらレジスタは好ましくは専用レジスタであり、後述する手順でデータＩＤを格納する。
【００２３】
また、ＭＰＳ１００は、使用ＩＤレジスタ１２ａと使用ＩＤレジスタ１２ｂにそれぞれ格納されたデータＩＤを比較する比較手段１６、使用ＩＤレジスタ１２ａと使用ＲＭＷＩＤレジスタ１３ｂにそれぞれ格納されたデータＩＤを比較する比較手段１７、使用ＩＤレジスタ１２ｂと使用ＲＭＷＩＤレジスタ１３ａにそれぞれ格納されたデータＩＤを比較する比較手段１８、使用ＩＤレジスタ１２ａと使用ＲＭＷＩＤレジスタ１３ａにそれぞれ格納されたデータＩＤを比較する比較手段１９、使用ＩＤレジスタ１２ｂと使用ＲＭＷＩＤレジスタ１３ｂにそれぞれ格納されたデータＩＤを比較する比較手段２０、を備え、ＣＰＵコア１１ａ、１１ｂがそれらの比較結果を検出できるようになっている。
【００２４】
〔データＩＤ〕
まず、データＩＤについて説明する。図２は、ＲＡＭ１０に記憶されたデータテーブル２２の一例を示す。データテーブル２２は、プログラム２１に含まれておりプログラム２１をＲＡＭ１０に展開する際に同時に展開される。なお、データそのものでなくデータのアドレスを記憶していてもよい。
【００２５】
データテーブル２２には、構造体st_A、st_B、配列array、変数data_X、data_YにデータＩＤが対応づけられている。構造体st_A、st_Bはそれぞれ変数ａ、ｂを関連付けて扱うための変数の一形態であり、例えばＣ言語では次のように記述される。
struct  {
float  ａ;
float  ｂ;
}st_A  ,  st_B;
float  ａ、float  ｂは、Ｃ言語では構造体のメンバと呼ばれ、変数st_A.aとst_A.b、st_B.aとst_B.bをそれぞれ関連付けて扱うことを可能にする。
【００２６】
また、配列arrayは、配列で確保される複数の領域に格納される変数を関連付けて扱うための変数の一形態であり、Ｃ言語では次のように記述される。
float  ary[2]  
配列arreyの宣言により、array[0]に格納される変数とarray[1]に格納される変数を関連付けて扱うことが可能となる、
また、構造体や配列に他の変数を関連付けることができる。例えば、構造体st_A、st_B  に変数data_Xを関連付ける場合、次のように記述する。
struct  {
float  ａ;
float  ｂ;
float  ｃ;
}st_A  ;
float  data_X;
int  main()  {
st_A.ｃ  =  data_X;
かかる書式を予め定めておき当該書式に対し同じデータＩＤ又は一部が一致するデータＩＤを付与するようにコンパイルルールが設定されたコンパイラを用いてコンパイルすることで、所定の書式で記述された変数に対しては、同じデータＩＤ又は一部が一致するデータＩＤを付与するようにコンパイルすることができる。図２では、変数st_A.aとst_A.b、はいずれもデータＩＤが等しく（図では１０）、st_B.aとst_B.bはいずれもデータＩＤが等しく（図では２０）、array[0]に格納される変数とarray[1]に格納される変数はいずれもデータＩＤが等しい（図では２２）。また、構造体st_Aに関連付けられた変数data_XのデータＩＤ「１１」はst_AのデータＩＤ「１０」と一部が一致している。
【００２７】
比較回路１６、１７、１８、１９、２０は、例えば、ビット毎に一致するか否かを比較するEXNOR回路を有し、全ビットが一致する場合、及び、所定数以上のビットが一致する場合に一致するとの比較結果を出力する。これにより、完全にはデータＩＤが一致しない複数のデータを一致するとして扱うことができる。
【００２８】
関連する複数のデータとは、例えばＭＰＳ１００がエンジンを制御する場合、エンジンの状態を表す複数のデータである。ソースコードに複数のデータを関連付けておくことで、コンパイルにより自動的に一致したデータＩＤを付与することができる。また、データＩＤはコンパイラが付与するので、プログラム２１のソースコードが修正された場合もプログラマが意識してデータＩＤを修正する必要がない。
【００２９】
〔同時性の確保〕
使用ＩＤレジスタ１２ａ、１２ｂを用いた、関連した複数データの同時性の確保について説明する。図３は、同時性を確保する処理において各レジスタに格納されるデータＩＤの遷移図を示す。
【００３０】
使用ＩＤレジスタ１２ａはＣＰＵコア１１ａの、使用ＩＤレジスタ１２ｂはＣＰＵコア１１ｂの、アクセス要求に基づきデータＩＤを格納し、比較回路１６はデータＩＤの格納の度に使用ＩＤレジスタ１２ａと使用ＩＤレジスタ１２ｂのデータＩＤを比較し、ＣＰＵコア１１は比較結果が一致を示す場合に、データテーブル２２へのアクセスを保留する。
【００３１】
ｉ）ＣＰＵコア１１ａが先に所定のデータＩＤのデータ（例えば、st_A.a）にアクセスした場合、使用ＩＤレジスタ１２ａは当該データのデータＩＤ（例えば、「１０」）を格納する。
【００３２】
ii）ついで、ＣＰＵコア１１ｂが所定のデータＩＤのデータ（例えば、st_A.b）にアクセスした場合、使用ＩＤレジスタ１２ｂは当該データのデータＩＤ（例えば、「１０」）を格納する。
【００３３】
この間、ＣＰＵコア１１ａは例えば関連するデータであるst_A.a、st_A.bの更新処理を実行している。
【００３４】
iii）比較回路１６は、使用ＩＤレジスタ１２ａと使用ＩＤレジスタ１２ｂのデータＩＤと比較した比較結果を出力するので、ＣＰＵコア１１ｂは比較結果が一致を示す場合、ＲＡＭ１０へのアクセスを保留する。一致を示さない場合、ＣＰＵコア１１ｂはＲＡＭ１０へのアクセスを中断しないので、ＣＰＵコア１１ｂは実行中のスレッドを処理できる。
【００３５】
iv）ＣＰＵコア１１ａがデータテーブル２２にアクセスする度に、使用ＩＤレジスタ１２ａはアクセスするデータのデータＩＤを格納（上書き）するので、ＣＰＵコア１１ａが関連しないデータにアクセスすると使用ＩＤレジスタ１２ａも書き変わる。
【００３６】
v）比較回路１６は所定のサイクル時間毎にデータＩＤの比較を繰り返し、ＣＰＵコア１１ｂは比較結果が一致を示さなくなるとＲＡＭ１０にアクセスする。
【００３７】
したがって、同時に更新することが必要な関連する複数のデータについて、ＣＰＵコア１１ａが更新処理等している間は、他のＣＰＵコア１１ｂは関連する複数のデータにアクセスできないので、関連する複数のデータの同時性を確保することができる。例えば、ＣＰＵコア１１ｂは関連する複数のデータが更新された後に当該データにアクセスできるようになる。
【００３８】
関連する複数データの記述を除きプログラム２１に同時性を確保するための記述も必要ないため、プログラム２１の工数の増大を抑制できる。また、ＣＰＵコア１１のアクセスの禁止／許可を使用ＩＤレジスタ１２が制御するので、高速に処理でき、同時性確保の処理にかかるオーバーヘッドを最小限に抑制できる。
【００３９】
また、関連するデータであるが構造体や配列にひとまとめにできないデータについては、構造体や配列の宣言に加え文法に従った記述を加えることで、構造体や配列に関連するデータとして扱われ同時性を確保できるので、関連するデータを柔軟に設定することができる。
【００４０】
〔ＲＭＷ処理〕
使用ＩＤレジスタ１２ａ、１２ｂ、及び、使用ＲＭＷＩＤレジスタ１３ａ、１３ｂを用いたＲＭＷ処理時の排他処理について説明する。
【００４１】
コンパイラが認識できないＲＭＷ処理については、一連の処理がＲＭＷ処理であることをＭＰＳ１００に検出させるため、プログラム２１のソースコードにＲＭＷ処理であることを示す記述を加える。例えば、ＲＭＷ処理の直前にＲＭＷ処理の開始を意味するRMW_start命令、直後にＲＭＷ処理の終了を意味するRMW_end命令、を記述する。
RMW_start
ＲＭＷ処理（対象変数）
RMW_end
また、ＣＰＵコア１１ａ、１１ｂはRMW_start、RMW_end、を検出するＲＭＷ検出手段２３ａ、２３ｂをそれぞれ備える。ＣＰＵコア１１ａ、１１ｂは、RMW_startを検出すると、ＲＭＷ処理の対象変数のデータＩＤを使用ＩＤレジスタ１２ａ、１２ｂ、使用ＲＭＷＩＤレジスタ１３ａ、１３ｂに格納する。なお、各ＲＭＷ処理と対象変数はコンパイル時に対応づけられている。
【００４２】
ＣＰＵコア１１ｂがＲＭＷ処理を実行する場合では、使用ＩＤレジスタ１２ｂのデータＩＤはＲＭＷ処理の間、ＲＭＷ処理に付随する処理のため次々と上書きされるが、使用ＲＭＷＩＤレジスタ１３のデータＩＤはRMW_end命令が検出されるまで削除されない。
【００４３】
したがって、ＲＭＷ処理をしていない例えばＣＰＵコア１１ａは、ＣＰＵコア１１ｂがＲＭＷ処理をしている間、使用ＩＤレジスタ１２ａと１２ｂのデータＩＤが一致しない限り、データテーブル２２へのアクセスできる。
【００４４】
しかし、ＣＰＵコア１１ｂがＲＭＷ処理を実行している間、他方のＣＰＵコア１１ａがＲＭＷ処理の対象変数に書き込みしてしまうと不整合が生じるので、ＣＰＵコア１１ａは書き込み命令を実行する場合のみ、比較回路１７に、使用ＩＤレジスタ１２ａと使用ＲＭＷＩＤレジスタ１３ｂのデータＩＤの比較を要求し、ＣＰＵコア１１ａは比較結果が一致を示す場合には書き込みを保留する。この構成により、ＲＭＷ処理の間、他方のＣＰＵコア１１ａは書き込み命令以外ではデータテーブル２２にアクセスすることができる。なお、比較回路１７，１８はデータへのアクセスの度に比較結果を出力してもよい。
【００４５】
図４の各レジスタに格納されるデータＩＤの遷移図を用いて、ＣＰＵコア１１ａがＲＭＷ処理する場合に、使用ＩＤレジスタ１２ａ、使用ＲＭＷＩＤレジスタ１３ａにデータＩＤが格納される手順を説明する。
【００４６】
i）ＲＭＷ検出回路２３ａがRMW_startを検出すると、ＣＰＵコア１１ａは、ＲＭＷ処理の対象変数（例えば、array［０］）のデータＩＤ（例えば「２２」）を使用ＩＤレジスタ１２ａ、使用ＲＭＷＩＤレジスタ１３ａのそれぞれに格納する。予めコンパイラは、例えばRMW_startの記述箇所にデータＩＤの格納命令を生成しておく。
【００４７】
ii)ついで、ＣＰＵコア１１ａは、ＲＭＷ処理に従い処理するその他のデータのデータＩＤを使用ＩＤレジスタ１２ａに次々と格納する。このため、ＲＭＷ処理の間は使用ＩＤレジスタ１２ａに格納されるデータＩＤは変動することが多い。
【００４８】
iii）ついで、ＣＰＵコア１１ｂが所定のデータ（例えば、array［１］）にアクセスした場合、ＣＰＵコア１１ｂは使用ＩＤレジスタ１２ｂに当該データのデータＩＤ（例えば、「２２」）を格納する。
【００４９】
iv）ＲＭＷ処理の間は、使用ＩＤレジスタ１２ａと１２ｂに格納されたデータＩＤが一致しないことが多いため、使用ＩＤレジスタ１２ａと１２ｂに格納されるデータＩＤとが一致せず、ＣＰＵコア１１ｂが当該データにアクセスできる。
【００５０】
ただし、ＣＰＵコア１１ｂが書き込み命令を実行する場合のみ、ＣＰＵコア１１ｂは検出回路１８に使用ＩＤレジスタ１２ｂと使用ＲＭＷＩＤレジスタ１３ａのデータＩＤの比較を要求する。比較結果が一致を示す場合、ＣＰＵコア１１ｂはデータテーブル２２へのアクセスを保留する。一致しない場合、ＣＰＵコア１１ｂはデータテーブル２２へ書き込みでき、ＣＰＵコア１１ｂは実行中のスレッドを処理できる。
【００５１】
v）ＣＰＵコア１１ａは、RMW_endの前に必ずＲＭＷ処理の対象変数の加工結果をデータテーブル２２に格納するため、使用ＩＤレジスタ１２ａには対象変数のデータＩＤが格納されることになる。
【００５２】
この結果、ＣＰＵコア１１ｂがアクセスを保留していた場合、使用ＩＤレジスタ１２ａと使用ＩＤレジスタ１２ｂには同じデータＩＤが格納されることになり、今度はＣＰＵコア１１ａがデータテーブル２２へのアクセスを禁止されてしまう。しかし、ＲＭＷ処理の結果の格納を優先するため、書き込み命令実行時、ＣＰＵコア１１ａは比較回路１９に使用ＩＤレジスタ１２ａと使用ＲＭＷＩＤレジスタ１３ａのデータＩＤの比較を要求し、比較結果が一致を示す場合、ＣＰＵコア１１ａはデータテーブル２２の対象変数へアクセスする。
【００５３】
vi）ついで、ＣＰＵコア１１ａがRMW_endを検出すると、ＣＰＵコア１１ａは使用ＩＤレジスタ１２ａ及び使用ＲＭＷＩＤレジスタ１３ａに格納した対象変数のデータＩＤを削除する。
【００５４】
これにより、使用ＩＤレジスタ１２ａと１２ｂに格納されたデータＩＤが一致しないことになり、ＣＰＵコア１１ｂは対象変数に書き込むことができるようになる。
【００５５】
以上の手順により、コンパイラ等で認識できないＲＭＷ処理について排他処理を実現することができる。ＲＭＷ処理の対象変数へのアクセスが発生しても、書き込み命令以外のアクセスは許可されるので、オーバーヘッドを最小限に抑制できるようになっている。また、書き込み命令時でも、ＲＭＷ処理の対象変数へのアクセスに関してのみ排他処理を実行するため、ＲＡＭ１０全体をアクセス禁止することがなく、オーバーヘッドも低減できる。
【００５６】
ところで、ＣＰＵコア１１ａ及び１１ｂが時間的に一部重複して同じＲＭＷ処理（すなわち対象変数も同じ）を実行する場合がある。
【００５７】
ＣＰＵコア１１ａ              ＣＰＵコア１１ｂ  
RMW_start                      
ＲＭＷ処理（対象変数）        RMW_start
RMW_end                          ＲＭＷ処理（対象変数）
RMW_end
この場合、ＣＰＵコア１１ａが先に対象変数を読み込むと共に書き込むが、その後にＣＰＵコア１１ｂが同じ対象変数を読み込みまた最後に書き込むため、対象変数の整合性の確保が困難となる。このため、例えば次のようにアクセスを制限する。
【００５８】
使用ＲＭＷＩＤレジスタ１３ａ又は１３ｂのどちらかに先に対象変数のデータＩＤが格納されるので、ＲＭＷ処理をこれから実行するＣＰＵコア１１は対象変数のデータＩＤと他方の使用ＲＭＷＩＤレジスタ１３のデータＩＤを比較し、一致する場合には後からＲＭＷ処理するＣＰＵコア１１がアクセス（読み込み）を保留すればよい。
【００５９】
以上のＲＭＷ処理におけるアクセスルールをまとめると次のように記載できる。ここでは、ＣＰＵコア１１ａがＲＭＷ処理を実行する状態を想定している。
Ａ．使用ＩＤレジスタ１２ａと使用ＩＤレジスタ１２ｂのデータＩＤが一致する場合は、ＣＰＵコア１１ａ、１１ｂのＲＡＭ１０へのアクセスを禁止する。
Ｂ．但し、以下の場合はアクセスを許可する。
【００６０】
ｂ１：ＣＰＵコア１１ａが書き込み命令を実行する場合を想定すると、使用ＩＤレジスタ１２ａと使用ＲＭＷＩＤレジスタ１３ａのデータＩＤが一致する場合。これにより、ＣＰＵコア１１ａはＲＭＷ処理の加工結果をデータテーブル２２に書き込むことができる。
【００６１】
ｂ２：ＣＰＵコア１１ｂが書き込み命令を実行する場合を想定すると、使用ＩＤレジスタ１２ｂに値がないか、使用ＩＤレジスタ１２ｂと使用ＲＭＷＩＤレジスタ１３ａのデータＩＤが一致しない場合。これにより、ＣＰＵコア１１ｂは、ＲＭＷ処理の対象変数以外のデータを書き込むことができる。なお、使用ＩＤレジスタ１２ｂに値がないとは、例えばデータＩＤ（排他処理の必要ない）のないデータにアクセスする場合である。
【００６２】
ｂ３：ＣＰＵコア１１ａが読み込み命令を実行する場合を想定すると、使用ＩＤレジスタ１２ａと使用ＲＭＤＩＤレジスタ１３ａのデータＩＤが一致し、かつ、使用ＩＤレジスタ１２ａと使用ＩＤレジスタ１２ｂ、使用ＩＤレジスタ１２ａと使用ＲＭＷＩＤレジスタ１３ｂのデータＩＤが一致しない場合。これにより、ＣＰＵコア１１ａはＣＰＵコア１１ｂが同じＲＭＷ処理を実行していない場合に対象変数を読み出すことができる。
【００６３】
ｂ４：ＣＰＵコア１１ａが読み込み命令を実行する場合を想定すると、使用ＲＭＷＩＤレジスタ１３ａに値がない場合。使用ＲＭＷＩＤレジスタ１３ａに値がなければ、新たにＲＭＷ処理を実行できる。
【００６４】
〔ＭＰＳ１００の処理手順〕
図５、６は、ＭＰＳ１００が同時性を確保し、また、ＲＭＷ処理時に排他処理する手順を示すフローチャート図を示す。図５の処理は、例えばイグニッションオン等によりＭＰＳ１００が起動するとスタートする。
【００６５】
ＣＰＵコア１１ａ又は１１ｂは、データテーブル２２へのアクセス、又は、RMW_startが検出されたか否かを判定する（S1-1）。いずれも検出されなければ、ステップＳ１−１の判定を繰り返し、RMW_startが検出された場合、図６のステップＳ２−１に進む。
【００６６】
ＣＰＵコア１１ａがデータテーブル２２へのアクセスを検出したものとすると、ＣＰＵコア１１ａはアクセスするデータのデータＩＤを使用ＩＤレジスタ１２ａに格納する（S1-2）。
【００６７】
ついで、ＣＰＵコア１１ａは、使用ＩＤレジスタ１２ａと使用ＲＭＷＩＤレジスタ１３ａのデータＩＤが一致するか否かを判定する（S1-3）。この判定はＲＭＷ処理の加工結果の書き込みを可能とするための判定である。
【００６８】
すなわち、一致する場合（S1-3のＹｅｓ）、ＣＰＵコア１１ａはプログラム２１の指示するアクセスが書き込み命令か否かを判定し（S1-10）、書き込み命令である場合（S1-10のＹｅｓ）は、ＲＭＷ処理の加工結果を書き込むため、ＣＰＵコア１１ａはデータへアクセス（書き込み）する（S1-7）。なお、書き込み命令でない場合（S1-10のＮｏ）、使用ＲＭＷＩＤレジスタ１３ａと使用ＩＤレジスタ１２ａのデータＩＤが一致しない場合と同様に扱えるのでステップＳ１−４に進む。
【００６９】
一致しない場合（S1-3のＮｏ）、ＣＰＵコア１１ａは、使用レジスタＩＤ１２ａと使用ＩＤレジスタ１２ｂのデータＩＤが一致するか否かを判定する（S1-4）。一致する場合（S1-4のＹｅｓ）、ＣＰＵコア１１ａはデータへのアクセスを保留にして、ステップＳ１−４の判定を繰り返す（S1-5）。これにより、関連する複数データの同時性を確保できる。
【００７０】
使用レジスタＩＤ１２ａと使用ＩＤレジスタ１２ｂのデータＩＤが一致しない場合（S1-4のＮｏ）、ＣＰＵコア１１ａはプログラム２１の指示するアクセスが書き込み命令か否かを判定する（S1-6）。
【００７１】
書き込み命令でない場合（S1-6のＮｏ）、ＣＰＵコア１１ａはデータテーブル２２のデータへのアクセスを実行する（S1-7）。
【００７２】
書き込み命令の場合（S1-6のＹｅｓ）、ＣＰＵコア１１ａは使用ＩＤレジスタ１２ａと使用ＲＭＷＩＤレジスタ１３ｂのデータＩＤが一致するか否かを判定する（S1-8）。この判定により、ＣＰＵコア１１ｂがＲＭＷ処理を実行中である場合ＣＰＵコア１１ｂは対象変数の排他処理を実現できる。
【００７３】
したがって、一致する場合（S1-8のＹｅｓ）、ＣＰＵコア１１ａはデータへのアクセスを保留にして、ステップＳ１−８の判定を繰り返す（S1-9）。
【００７４】
一致しない場合（S1-8のＮｏ）、ＣＰＵコア１１ｂはＲＭＷ処理をしていないか又はしていても対象変数とＣＰＵコア１１ａがアクセスするデータが異なることになるので、ＣＰＵコア１１ａはデータへアクセスする（S1-7）。
【００７５】
図６のステップＳ２−１に進み、RMW_startが検出された場合、ＣＰＵコア１１ａは、ＲＭＷ処理の対象変数のデータＩＤと使用ＲＭＷＩＤレジスタ１３ｂのデータＩＤが一致するか否かを判定する（S2-1）。一致する場合（S2-1のＹｅｓ）、ＣＰＵコア１１ａとＣＰＵコア１１ｂが同じ対象変数に対しＲＭＷ処理を実行しようとしていることになるので、ＣＰＵコア１１ａは、ＣＰＵコア１１ｂのＲＭＷ処理が終了するまで（使用ＲＭＷＩＤレジスタ１３ｂのデータＩＤが削除されるまで）、ＣＰＵコア１１ａはデータへのアクセスを保留にする（S2-8）。
【００７６】
一致しない場合（S2-1のＹｅｓ）、ＣＰＵコア１１ａは、ＲＭＷ処理の対象変数のデータＩＤを使用ＩＤレジスタ１２ａに格納し（S2-2）、また、使用ＲＭＷＩＤレジスタ１３ａに格納する（S2-3）。
【００７７】
ついで、ＣＰＵコア１１ａは、ＲＭＷ処理の対象変数を読み出し（S2-4）、ＲＭＷ処理に応じた演算処理を対象変数に施す（S2-5）。
【００７８】
演算処理が終了すると、ＣＰＵコア１１ａは対象変数をデータテーブル２２に書き込む（S2-6）。ここでは、使用ＩＤレジスタ１２ａと使用ＩＤレジスタ１２ｂのデータＩＤを比較しないので、これらが一致してもＣＰＵコア１１ａはＲＭＷ処理の対象変数を優先的に書き込むことができる。
【００７９】
ついで、ＣＰＵコア１１ａは使用ＲＭＷＩＤレジスタ１３ａのデータＩＤを消去する（S2-7）。なお、使用ＩＤレジスタ１２ａは上書きされるので消去してもしなくてもよい。
【００８０】
以上説明したように、本実施形態のＭＰＳ１００は、関連する複数のデータに同じデータＩＤが付与されるようにプログラム２１を記述し、使用ＩＤレジスタ１２ａと１２ｂのデータＩＤが一致する場合には後から処理するＣＰＵコア１１のアクセスを禁止するので、関連する複数のデータの同時性を確保することができる。また、完全にデータＩＤが一致しなくてもデータＩＤが一部共通すれば、ＣＰＵコア１１のアクセスを禁止するので、関連するデータを柔軟に設計することができる。
【００８１】
データの宣言とレジスタにより実現するので、プログラム２１にアクセス制御の記述も不要で、かつ、高速に実行することができる。
【００８２】
また、ＲＭＷ処理については、他方のＣＰＵコア１１が書き込む場合にのみ排他処理しＲＡＭ１０全体へのアクセスは許可されているので、排他処理のオーバーヘッドを低減できる。コンパイラでは認識できないＲＭＷ処理についてもＲＭＷ処理の開始と終了を記述するだけで排他処理を実現できる。
【００８３】
なお、本実施形態ではＣＰＵコア１１を２つとしたが、３以上のＣＰＵコア１１を備えている場合はそれぞれのＣＰＵコア１１に使用ＩＤレジスタ１２、使用ＲＭＷＩＤレジスタ１３を設け、他のＣＰＵコア１１のレジスタと比較できるように接続することで、本実施形態のＭＰＳ１００を好適に実現できる。
【図面の簡単な説明】
【００８４】
【図１】マルチプロセッサシステムの概略構成図である。
【図２】ＲＡＭに記憶されたデータテーブルの一例を示す図である。
【図３】同時性を確保する処理において各レジスタに格納されるデータＩＤの遷移図である。
【図４】ＲＭＷ処理において各レジスタに格納されるデータＩＤの遷移図である。
【図５】マルチプロセッサシステムが同時性を確保し、また、ＲＭＷ処理時に排他処理する手順を示すフローチャート図である。
【図６】マルチプロセッサシステムが同時性を確保し、また、ＲＭＷ処理時に排他処理する手順を示すフローチャート図である。
【図７】従来のＲＭＷ命令による処理の概念図、処理の同時性の概念図の一例である。
【符号の説明】
【００８５】
１０            ＲＡＭ    
１１ａ、１１ｂ  ＣＰＵコア
１２ａ、１２ｂ  使用ＩＤレジスタ
１３ａ、１３ｂ  使用ＲＭＷＩＤレジスタ
１４            処理分配回路
１５            ＲＯＭ
１６、１７、１８、１９、２０  比較回路
２１            プログラム    
２２            データテーブル
２３ａ、２３ｂ  ＲＭＷ検出手段
１００          マルチプロセッサシステム
【図１】
2008293368.tif 000003
【図２】
2008293368.tif 000004
【図３】
2008293368.tif 000005
【図４】
2008293368.tif 000006
【図５】
2008293368.tif 000007
【図６】
2008293368.tif 000008
【図７】
2008293368.tif 000009