(57)【特許請求の範囲】
【請求項１】
各々キャッシュを備える複数のプロセッサと、該プロセッサ群を結合する接続線と、前記キャッシュ間の内容一致制御回路とを備えるシステムにおいて、
前記プロセッサ群の内の第１の複数のプロセッサが、複数のプロセスを前記第１の複数のプロセッサで同時実行するモードか、１つのプロセスを前記第１の複数のプロセッサで並列実行するモードかを識別する第１の情報を具備し、
前記情報に応じて前記内容一致制御回路の動作を切り替えるマルチプロセッサシステム。
【請求項２】
前記内容一致制御回路を、複数の機能ユニットから構成し、前記情報に応じて前記機能ユニットのいずれを起動するかを選択する回路を備える請求項１のマルチプロセッサシステム。
【請求項３】
１つのプロセスを前記第１の複数のプロセッサで並列実行するモードは、更に、プロセスの並列動作部分を実行するモードと非並列動作部分を実行するモードとを有し、
前記並列動作部分を実行するモードと非並列動作部分を実行するモードとを切り替える手段と、
前記並列動作部分を実行するモードと非並列動作部分を実行するモードに応じて前記内容一致制御回路の動作を切り替える手段とを有する請求項１のマルチプロセッサシステム。
【請求項４】
前記内容一致制御回路を複数の機能ユニットから構成し、
該機能ユニットは、他のプロセッサのキャッシュ更新内容を取り込む回路を含み、
前記１つのプロセスを前記第１の複数のプロセッサで並列実行するモードであり、かつ、非並列動作部分を実行するモードである場合は、前記キャッシュ更新内容取り込み回路を起動する請求項３のマルチプロセッサシステム。
【請求項５】
前記内容一致制御回路を複数の機能ユニットから構成し、
該機能ユニットは、他のプロセッサのキャッシュ更新内容を取り込む回路を含み、
前記１つのプロセスを前記第１の複数のプロセッサで並列実行するモードであり、かつ、並列動作部分を実行するモードである場合は、前記キャッシュ更新内容取り込み回路を抑止する請求項３のマルチプロセッサシステム。
【請求項６】
前記内容一致制御回路は、他のプロセッサのキャッシュ更新内容を取り込む機能を有し、１つのプロセスを前記第１の複数のプロセッサで並列実行するモードであり、かつ、非並列動作部分を実行するモードである場合は、前記キャッシュ更新内容取り込み機能を起動する請求項３のマルチプロセッサシステム。
【請求項７】
前記第１の複数のプロセッサは、１つの親プロセッサと他の子プロセッサからなり、
前記親プロセッサか前記子プロセッサかに応じて、前記内容一致制御回路の動作を変える請求項１のマルチプロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、主記憶共有のマルチプロセッサシステムにかかわり、特に複数プロセスの同時実行によるスループット向上と１プロセスの並列実行による高速化の双方の目的を達成するためのマルチプロセッサシステムに関する。
【０００２】
【従来の技術】
プロセッサシステムの性能を向上させるために、主記憶を共有した複数プロセッサから成るマルチプロセッサ構成をとることが近年一般的に行なわれている。
【０００３】
主記憶共有マルチプロセッサ（以下ＳＭＰ：Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｏｒと呼ぶ）の目的は、大きく分けて（１）複数プロセスの複数プロセッサでの同時実行によるシステムスループットの向上、（２）１プロセスの複数プロセッサでの並列実行（１プロセスを分割し、分割した各プロセスを各プロセッサで同時に並列実行する）による高速化、の２つである。
【０００４】
上記双方の目的を達成するために、一般に従来の技術では以下が行なわれている。すなわち、単体プロセッサの実行はキャッシュを利用して高速化し、各プロセッサキャッシュ間の一致性はハードウェアのキャッシュコヒーレント機構により保証する。キャッシュコヒーレント機構には、大別してスヌープ方式とディレクトリ方式がある。いずれの方式においても、各プロセッサキャッシュ内の各ラインが他のラインや主記憶の内容と一致しているのかどうかを管理し、不一致が発生する場合は、プロセッサ間の結合網を介して一致をとるためのキャッシュラインのコピー／更新／無効化などを行なうことで不一致を解消し、プロセッサが誤動作するのを防いでいる。またキャッシュを命令用とデータ用に分けプログラム側に命令の書き換えを許さないという制限を課して、命令キャッシュ同士のコヒーレンスはとらない様にしたものもある。これに関しては、「情報科学コアカリキュラム講座  コンピュータアーキテクチャＩ」、１６７頁−１７７頁、富田真治著、丸善出版、に記載がある。
【０００５】
【発明が解決しようとする課題】
しかしながら上記従来の技術では、主記憶を共有するマルチプロセッサシステムに於いて、システムが複数プロセスを同時実行しているときも、１プロセスを並列実行しているときも、全く同じキャッシュコヒーレント方式を利用していた。
【０００６】
複数プロセッサから成るマルチプロセッサシステムが複数プロセスを同時実行している場合は、一般に、各プロセッサは互いに異なるプロセスを実行するので、各プロセッサのキャッシュが同じ主記憶の内容を指すことは少なく、キャッシュコヒーレント機構をなるべく起動しないよう制御する方が性能が向上する。そのため、複数プロセスを同時実行しているマルチプロセッサシステムのキャッシュコヒーレントは、多くの場合、自プロセッサのキャッシュにデータがあるときは他プロセッサとの結合網にキャッシュの内容を送出せず、また、命令キャッシュの内容を他プロセッサとの結合網に送出しないようになっている。
【０００７】
しかしながら上記の複数プロセスを複数のプロセッサで同時実行しているマルチプロセッサシステムのキャッシュコヒーレント方式は、必ずしもマルチプロセッサシステムが複数のプロセッサが１プロセスを並列実行する場合に最適な方法ではない。
【０００８】
このことを、図３のＦＯＲＴＲＡＮプログラムのＤＯ１０、ＤＯ２０を添え字ｉについて４つのプロセッサで並列実行する場合を例にとって、説明する。図３のプログラムは以下のように実行される。３１００、３３００の部分を複数のプロセッサを有するシステム中の１つのプロセッサ（これを親プロセッサと呼ぶ。仮にＰＥ０とする）が実行し、３２００、３４００の部分を複数のプロセッサ（これらを子プロセッサと呼ぶ。仮にＰＥ１、ＰＥ２、ＰＥ３とする）および親プロセッサが分担実行する。親プロセッサＰＥ０は３１００の実行が終了すると、子プロセッサ群ＰＥ１〜３を起動し、３２００の各々添え字ｉ＝５〜８、９〜１２、１３〜１６を各々実行させるとともに、自らは添え字ｉ＝１〜４を分担する。全プロセッサの実行が終了すると、親プロセッサＰＥ０は３３００を実行し、それが終了すると、再び子プロセッサ群ＰＥ１〜３を起動し、３４００の各々添え字ｉ＝５〜８、９〜１２、１３〜１６を各々実行させるとともに自らは添え字ｉ＝１〜４を分担する。親プロセッサが３１００、３３００を実行している間、子プロセッサ群は親プロセッサからの起動を待つ。
【０００９】
このプログラムの実行では、子プロセッサ群は親プロセッサから起動されて初めて実行すべきプログラム部分の命令アドレスを通知される。そのため、１プロセスを複数プロセッサで並列実行する場合のキャッシュコヒーレント方式として、前述の複数プロセスを複数プロセッサで同時実行する場合のキャッシュコヒーレント方式を用いた場合には、命令キャッシュの内容を他プロセッサに通知しないことから、命令キャッシュミスを起こすことが多い。
【００１０】
また上記プログラムの実行では、子プロセッサ群は親プロセッサから起動されて初めて実行すべきデータをフェッチする。そのため、１プロセスを複数プロセッサで並列実行する場合のキャッシュコヒーレント方式として、前述の複数プロセスを複数プロセッサで同時実行する場合のキャッシュコヒーレント方式を用いた場合、自プロセッサのキャッシュにデータがあるときは他プロセッサとの結合網にキャッシュの内容を送出しないことから、上記プログラムの実行でデータキャッシュミスを起こすことも多い。結果として、キャッシュミスのペナルティが大きいため、１プロセスを並列実行してもあまり性能が向上しない、という事態が発生する。
【００１１】
上記の状況は、本来、１プロセスの複数プロセッサによる並列実行のために要求されるコヒーレント方式と、複数プロセスの複数プロセッサによる同時実行のために要求されるコヒーレント方式が異なる性格を持つにもかかわらず、同一の手段でコヒーレンスを保とうとしているために発生する。
【００１２】
本発明の目的は、主記憶共有型マルチプロセッサシステムにおいて、システムが複数プロセスを同時実行しているときと、１プロセスを並列実行しているときで、異なるキャッシュコヒーレント方式を実現するシステム構成を提供することにある。
【００１３】
【課題を解決するための手段】
上記を解決するために本発明では、各々キャッシュを備える複数のプロセッサと、上記プロセッサ群を結合する接続線と、上記キャッシュ間の内容一致制御回路とを備えるシステムにおいて、上記プロセッサ群の内の第１の複数のプロセッサが、複数のプロセスを前記第１の複数のプロセッサで同時実行するモードか、１つのプロセスを前記第１の複数のプロセッサで並列実行するモードかを識別する第１の情報を具備し、前記情報に応じて前記内容一致制御回路の動作を切り替えるようにする。
【００１４】
また、前記内容一致制御回路を、複数の機能ユニットから構成し、前記情報に応じて前記機能ユニットのいずれを起動するかを選択する回路を備える。
【００１５】
更にまた、１つのプロセスを前記第１の複数のプロセッサで同時実行するモードは、プロセスの並列動作部分を実行するモードと非並列動作部分を実行するモードとからなり、前記並列動作部分を実行するモードと非並列動作部分を実行するモードとを切り替える手段と、前記前記並列動作部分を実行するモードと非並列動作部分を実行するモードに応じて前記内容一致制御回路の動作を切り替える手段とを有する。
【００１６】
更にまた、前記内容一致制御回路を複数の機能ユニットから構成し、前記１つのプロセスを前記第１の複数のプロセッサで同時実行するモードであり、かつ、非並列動作部分を実行するモードである場合は、前記第１の複数のプロセッサのそれぞれのキャッシュが同じエントリで更新されるように、前記機能ユニットを選択する回路を有するようにする。
【００１７】
更にまた、前記内容一致制御回路は、１つのプロセスを前記第１の複数のプロセッサで同時実行するモードであり、かつ、非並列動作部分を実行するモードである場合は、前記第１の複数のプロセッサのそれぞれのキャッシュを同じエントリで更新するようにする。更にまた、前記内容一致制御回路を複数の機能ユニットから構成し、前記１つのプロセスを前記第１の複数のプロセッサで同時実行するモードであり、かつ、並列動作部分を実行するモードである場合は、前記第１の複数のプロセッサのそれぞれのキャッシュが個別のエントリで更新されるようにする。
【００１８】
更にまた、前記第１の複数のプロセッサは、１つの親プロセッサと他の子プロセッサからなり、前記親プロセッサか前記子プロセッサかに応じて、上記内容一致制御回路の動作を変えるようにする。
【００１９】
【発明の実施の形態】
以下、図面を参照しつつ本発明の実施形態を説明する。
はじめに、本実施の形態での用語を定義しておく。複数プロセッサから成るシステムが、複数プロセッサにより複数プロセスを同時実行していることを示すモードを以下ＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｏｒ）モードとし、複数プロセッサにより１プロセスを並列実行していることを示すモード以下ＡＳＭＰ（Ａｓｙｎｃｈｒｏｎｏｕｓ  ＳＭＰ）モードとする。更に、ＡＳＭＰモードのプロセッサ群が、プログラムの非並列化部分（図３の３１００、３３００など。以下シングル部分と呼ぶ）を実行中の場合をシングルモード、並列化部分（図３の３２００、３３００など。以下パラレル部分と呼ぶ）を実行中の場合をパラレルモードとする。
【００２０】
図１は本発明の１実施形態であるシステムの全体構成である。プロセッサ群１０〜１３（ＰＥ０〜ＰＥ３）および主記憶４３が、アドレス／コマンドバス４１およびデータバス４２を介し接続されている。プロセッサ群１０〜１３は各々命令キャッシュ（Ｉｃａｃｈｅ）、データキャッシュ（Ｄｃａｃｈｅ）を備えている。また、信号線１８〜２１はプロセッサ群とアドレス／コマンドバス４１を接続する。信号線２２〜２５はプロセッサ群とデータバス４２を接続する。信号線２６は主記憶４３とアドレス／コマンドバス４１を、信号線２７は主記憶４３とデータバス４２を接続する。これら構成要素は、従来のＳＭＰシステム（マルチプロセッサシステムが複数プロセスを同時実行しているシステム）でも備えている。
【００２１】
更に、本実施形態特有の構成要素である、プロセッサ群１０〜１３の各プロセッサ間を接続し、同期をとる同期情報バス４０、プロセッサ群と同期情報バスを接続する信号線１４〜１７を有する。この同期情報バスは、後述するモード情報やプログラムカウンタの値（即ち、命令アドレス）の通知に使用される。
【００２２】
図２は、プロセッサ１０の内部構成である。他のプロセッサ１１〜１３の構成も同様であり説明を省略する。プロセッサは、命令キャッシュ（Ｉｃａｃｈｅ）５２、命令の実行および命令キャッシュを制御する命令ユニット５３、演算ユニット（ＡＬＵ）５７、ロードストアユニット（ＬＳＵ）５６、データキャッシュ（Ｄｃａｃｈｅ）５１、データキャッシュを制御するデータユニット５０、レジスタ５８からなる。また、これらを接続する信号線６０、６２、６３、６４、６５、６６、６８、外部バスとの接続を行う信号線１８−０、１８−１、２２−０、２２−１を有する。これらの構成要素は公知のＳＭＰシステムでも備えており、本発明のＳＭＰモード時の動作も公知のＳＭＰシステムの動作と同様である。
【００２３】
更に、図２は、本実施形態特有の構成要素である命令ユニット５３内のモードビット、モードビットの情報をデータユニットに通達する信号線６７、同期情報バス４０に接続する信号線１４を有する。モードビットにより定まるモードについては図１１で説明する。
【００２４】
図１１は、上記の本実施形態におけるモードビットの構成を示す。モードビットは、
（１）ＡＳＭＰビット：ＡＳＭＰモード（主記憶共有マルチプロセッサシステムにおいて１プロセスを複数のプロセッサで並列実行していることを示すモード（Ａｓｙｎｃｈｒｏｎｏｕｓ  ＳＭＰモード））であるかＳＭＰモード（主記憶共有マルチプロセッサシステムにおいて複数のプロセスを複数のプロセッサで同時実行していることを示すモード（ＳＭＰモード））であるかを示す（ここではＡＳＭＰビット＝１の場合はＡＳＭＰモード、ＡＳＭＰビット＝０の場合はＳＭＰモードとする）、
（２）ｐａｒｅｎｔビット：ＡＳＭＰモード時に自プロセッサが親であるか子であるかを示す（ここでは、ｐａｒｅｎｔビット＝１の場合は親、ｐａｒｅｎｔビット＝０の場合は子とする）、
（３）ｐａｒａビット：ＡＳＭＰモード時に現在プログラムのパラレル部を実行しているのかシングル部を実行しているのかを示す（ここでは、ｐａｒａビット＝１の場合はパラレル部を実行、ｐａｒａビット＝０の場合はシングル部を実行とする）、
の３つからなる。
【００２５】
ＡＳＭＰビットおよびｐａｒｅｎｔビットはＯＳ（オペレーティングシステム）が変更する。ｐａｒａビットはユーザプログラムおよびＯＳが変更する。なお、ここでは各モード種別をビット情報の形で記録しているが、これらを識別できる情報を記録できる手段であればどのような形で記録されても良い。例えば、レジスタを設け、レジスタ内にこれらを識別できる情報を数字やアルファベット記号の形で記憶しても良い。
【００２６】
以下、ＳＭＰモードで本システムが動作する場合の動作を説明する。
ＯＳは、まずＳＭＰモードで動作するプロセッサのＡＳＭＰビットを「０」（ＳＭＰモードを示す）とし、各プロセッサに各々独立なプロセスを割り当てる。
【００２７】
ＳＭＰモード時、プロセッサは以下のように動作する（図２参照）。
命令ユニット５３は、命令キャッシュ５２に命令がある場合はそれを取り出し、命令がない場合は信号線１８−１を介してアドレス／コマンドバス４１に命令フェッチのライン転送要求を送出するとともに、命令キャッシュ５２がデータバス４２から命令ラインを受け取るように制御する。命令ユニット５３はバスを介して取り出した命令をデコードし、演算命令なら演算ユニットＡＬＵ５７を、ロードストア命令であればロードストアユニット５６を、信号線６８を介して制御する。
【００２８】
命令がロードストア命令の場合、ロードストアユニット５６はデータユニット５０に対し命令の種別とアドレスを信号線６０を介して送出する。データユニット５０は、データキャッシュ５１にデータがある場合はレジスタ５８にデータを送出するようデータキャッシュ５１を制御する。データがない場合は、信号線１８−０を介してアドレス／コマンドバス４１にデータフェッチのライン転送要求を送出するとともに、データキャッシュ５１がデータバス４２からデータラインを受け取るように制御する。
【００２９】
図６は、本実施形態で行うＳＭＰモード時のデータキャッシュコヒーレンス方式を示す。本方式はバークレイプロトコルとして知られる公知の方式である（「情報科学コアカリキュラム講座  コンピュータアーキテクチャＩ」、１７０頁−１７３頁、富田真治著、丸善出版）。
【００３０】
図６に於いて、“丸”で囲ってあるのが、キャッシュの各キャッシュラインの状態を示す。「Ｉ」はＩｎｖａｌｄ（自キャッシュにデータがない。）、「Ｖ」はＶａｌｉｄ（自キャッシュにデータがあり、内容は主記憶と一致。他キャッシュにも同一のデータがある可能性がある。）、「Ｄ」はＤｉｒｔｙ（自キャッシュにデータがあり、内容は主記憶と異なる。他キャッシュにはない。）、「Ｓｈ．Ｄ」はＳｈａｒｅｄ  Ｄｉｒｔｙ（自キャッシュにデータがあり、内容は主記憶と異なる。他キャッシュにも同一のデータがある可能性がある。）を示す。
【００３１】
図６（ａ）は、自プロセッサで発生するアクセス（Ｌ：ロード、ＳＴ：ストア、Ｃａｓｔｏｕｔ：リプレースに伴う主記憶への書き戻し）により、各キャッシュラインの状態がどう遷移するか、またこのキャッシュライン状態の変化に伴ってトランザクションが発生し、他プロセッサへバスを介して出力される（このバス上へ送信されるトランザクションをバストランザクションへいう）。このバストランザクションは図６において“四角”で囲ってある。このバストランザクションはバス（アドレス／コマンドバス４１、データバス４２）を介して他プロセッサへ通知される。バストランザクションには、ＬＴｒｅｑ：他プロセッサのロードに伴うライン転送要求、ＬＴｒｅｑ−ｆｏｒＳＴ：他プロセッサのストアに伴うライン転送要求、Ｉｎｖ：他プロセッサから発せられた無効化要求、Ｂｕｓｏｕｔ：自キャッシュの当該キャッシュラインの内容のデータバスへの出力、がある。
【００３２】
図６（ｂ）は、他プロセッサからバスを介してバストランザクション（ＬＴｒｅｑ、ＬＴｒｅｑ−ｆｏｒＳＴ、Ｉｎｖ、Ｂｕｓｏｕｔ）を受けた場合、自プロセッサの自キャッシュの状態がどう遷移するか、また他プロセッサへ送信するどのようなバストランザクションが発生するかを示している。発生するバストランザクションは“四角”で囲ってある。ここでは、発生するバストランザクションとして、更に「Ｂｕｓｏｕｔ＆Ｓｈ．Ｄ化指示（自キャッシュの当該キャッシュラインの内容のデータバスへの出力および、データ取り込み先でのＳｈ．Ｄ化要求）」が加わる。
【００３３】
例えば、Ｖａｌｉｄであるラインに対して自プロセッサからストア命令を実行した場合、自プロセッサのラインに書込むためにその状態はＤｉｒｔｙに移行し、同時にバスに対しＩｎｖトランザクションを発行する（図６（ａ）参照）。一方他のプロセッサにおいて同じラインがＶａｌｉｄだった場合、バストランザクションＩｎｖを受け、そのラインは無効化されるとともに状態はＩに移行する（図６（ｂ）参照）。
【００３４】
本プロトコルは公知であり、その動作は状態遷移図を追えば明らかであるため、ここではこれ以上説明しないが、本プロトコルにより、ＳＭＰモードにおいて複数のプロセッサのキャッシュが同じ主記憶位置を共有した場合も、キャッシュ内容の一致性が保証される。
以上、ＳＭＰモードで本システムが動作する場合の動作を説明した。
【００３５】
次にＡＳＭＰモード時の本システムの動作を説明する。
ＯＳは、まず並列実行されるプログラムが要求する台数分のプロセッサ群を選択し、それらのＡＳＭＰビットを１とする。さらにその中の１台のみｐａｒｅｎｔビットを１とし（このプロセッサは親となる）、他のプロセッサのｐａｒｅｎｔビットは０（これらプロセッサ群は子となる）とする。その後選択したプロセッサ群に同一プロセス（ジョブに相当）の各スレッド（タスクに相当）を割り当てる。
【００３６】
図３は並列実行されるプログラムの例であり、その内いずれの部分が並列実行されるかは「発明が解決しようとする課題」の項で述べたとおりである。
【００３７】
図４は図３のプログラムを並列実行する機械語命令列イメージである。命令列の左側に付された数字は機械語命令のアドレスとして便宜的に付けたものである。本実施形態では、親プロセッサも子プロセッサ群も全く同じアドレスから始まる同じ命令列を実行する。
【００３８】
命令列中、ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令、および、ｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令は、本実施形態において新設される命令である。本命令の動作は、命令を実行するプロセッサが親であるか子であるか、すなわちｐａｒｅｎｔビットの値によって異なる。
【００３９】
（１）ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令の実行
ｐａｒｅｎｔビットが１の時（親プロセッサの場合）、ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令をデコードすると、プロセッサは子プロセッサ群から同期情報バス４０を介して、子プロセッサからバリア（当該複数のプロセッサが予めプログラムで設定した同期ポイント）まで処理が終了したことを示す信号（この信号をバリア信号と呼ぶことにする）が返ってくるのを待ち、全ての子プロセッサから上記信号を受信することで、全てのプロセッサ間で同期が取れたこと（バリア同期）を確認したら（なお、親プロセッサはｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令をデコードするということが即ちバリアまで処理が終了していることを示している）、同期情報バス４０にモードをシングルに変更するよう指示を出す。
【００４０】
ｐａｒｅｎｔビットが０の時（子プロセッサの場合）、ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令をデコードすると、プロセッサは同期情報バス４０に対して自プロセッサがバリアまで処理が終了したことを示す信号を送出後、プログラムカウンタの更新をやめる。すなわち各子プロセッサは、命令の取り出しおよび実行を中止した状態に入り、親プロセッサは全子プロセッサがバリアに到達するのを待ってから後続の命令を実行することになる。
【００４１】
（２）ｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令の実行
ｐａｒｅｎｔビットが１の時（親プロセッサの場合）、ｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令をデコードすると、親プロセッサは同期情報バス４０にモードをパラレルに変更するよう指示を出し、その時実行中の命令のプログラムカウンタを同期情報バス４０に送出する。モードをパラレルに変更されると、子プロセッサは同期情報バス４０に送出されたプログラムカウンタを受け取り、その値からプログラムカウンタの更新を再開する。すなわち、親プロセッサは子プロセッサの中止した状態（ストール状態）を解除し、その時実行中の命令から再開させることになる。
ｐａｒｅｎｔビットが０の時（子プロセッサの場合）、ｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令をデコードしてもプロセッサは何も行なわない。
【００４２】
ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令、ｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令の動作が上記であることから、図４の機械語命令列は以下のように実行されることになる。すなわち、命令列１００２は親プロセッサのみが実行し、命令１００３により、子プロセッサにも命令アドレス９２０が伝わり、親、子プロセッサ群が命令列１００４を並列実行する。ここで命令列１００２は図３の３１００に相当し、命令列１００４は３２００に相当する。命令列１００２中のｃｏｍｐｕｔｅ＿ｍｙ＿ａｄｄｒは、各プロセッサの担当すべきデータのアドレスをそれぞれの計算機で互いに独立に計算する命令シーケンスを略記したものである。命令１００５により子プロセッサは実行を中止し、親プロセッサはバリア同期がとれたのを確認の後、命令列１００６を実行する。さらに命令１００７により再び親、子プロセッサ群が命令列１００８の並列実行を開始し、命令１００９により再び親プロセッサのみの実行に戻る。ここで命令列１００６は図３の３３００に相当し、命令列１００８は３４００に相当する。
【００４３】
すなわち、図４に示されるプログラムは、最初、親プロセッサおよび子プロセッサ群により処理が開始されるが、ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令により、子プロセッサ群は中止状態となり、親プロセッサだけで処理される状態となる。その後、親プロセッサにてｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令が処理されると、子プロセッサ群へプログラムの再開用の親プロセッサのプログラムカウンタの値が通知され、全てのプロセッサによって、このプログラムカウンタの値からプログラム処理が行われる。また、ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令を実行すると先の記述と同様の処理を繰り返す。
以上の動作がモードビットに基づく命令列並列実行のシーケンスである。
【００４４】
以下モードビットに基づくキャッシュコヒーレント動作について説明する。
【００４５】
まず図２を用いて動作概要を説明する。
ＡＳＭＰモードかつパラレルモード時のキャッシュコヒーレント動作は本実施形態では、ＳＭＰモード時と同じとする。すなわちデータキャッシュのコヒーレンスは図６に基づいて行なう。また命令キャッシュのコヒーレンスはとらない。
【００４６】
ＡＳＭＰモードかつシングルモード時は、親プロセッサのみが命令列を実行するが、親プロセッサの実行した結果を子プロセッサのデータキャッシュにも反映するよう、コヒーレント機構は動作する。すなわち、親プロセッサが書込んだキャッシュラインはＳｈ．Ｄ属性を持って全ての子プロセッサにブロードキャストされ、また親プロセッサが読み込んだデータラインは、全ての子プロセッサにＶ属性でブロードキャストされる。また命令キャッシュについては、子プロセッサは命令の実行を中止（ストール）してはいるが、親プロセッサが発生した命令フェッチのためのライン転送結果を自命令キャッシュにも取り込むように制御する。以上により、パラレルモード時にはばらばらであった各プロセッサのキャッシュの内容が、シングルモードで実行中に徐々に親プロセッサのキャッシュの内容に変化していく（詳細後述）。
【００４７】
図７は、上記を実現しつつデータキャッシュのコヒーレンスを保つ状態遷移方式を示す。図７（ａ）は自プロセッサで発生するアクセスにより、各状態がどう遷移するか、またどのようなバストランザクションが発生するかを示している。また図７（ｂ）はバスから発生するトランザクションにより自キャッシュの状態がどう遷移するか、またどのようなバストランザクションを発生するかを示している。
【００４８】
例えば、Ｖであるラインに対して自プロセッサからストア命令を実行した場合、自プロセッサのラインに書込むと同時に他のプロセッサへブロードキャストが発生し、その状態はＳｈ．Ｄに移行する（図７（ａ）参照）。一方他のプロセッサにおいて同じラインがＶだった場合、バストランザクションＢｒｏａｄｃａｓｔを受けそのラインはキャッシュに取り込まれ、状態はＳｈ．Ｄに移行する（図７（ｂ）参照）。本状態遷移が正しく動作することは、後に図４の機械語命令列を用いて説明する。
【００４９】
図８、図９は、以上のモードビットに基づくプロセッサ動作およびキャッシュコヒーレント動作を実現する構成を示す。
【００５０】
図８は、データユニット５０の構成図である。データキャッシュ状態記憶機構７９は、データキャッシュ５１に保持されているデータラインのアドレスとその状態を記憶している。信号線６７には命令ユニット５３内のモードビットの値が出力されている。
【００５１】
信号線６７がＳＭＰモードを示しているとき、信号線６０−０および６０−１を介してロードストアユニット５６からロードストア要求が入ってくると、組合せ回路８０は図６（ａ）の状態遷移に従って、バストランザクション発生回路７１〜７６およびデータキャッシュへのライン取込み指示回路７７、キャッシュ状態変更回路７８を制御する信号を信号線１０１〜１０７、９３に送出する。
【００５２】
具体的には、例えばストア要求が信号線６０−１を介し入力され、そのストアアドレスが信号線６０−０に入力されたとする。データキャッシュ状態記憶機構７９は、ストアアドレスとキャッシュの状態を比較し、アクセス要求先のラインの状態、すなわち「Ｉ」か「Ｖ」か「Ｄ」か「Ｓｈ．Ｄ」かを信号線９１に送出する。また信号線９２にはそのストア要求によってＣａｓｔｏｕｔされるべきラインがあるかとそのアドレスが送出される。例えば信号線９１に「Ｖ」が示され、またＣａｓｔｏｕｔされるべきラインがない場合、組合せ回路８０は無効化トランザクション発生回路７３を起動し、エンコード回路８１を経由してアドレス／コマンドバス４１に対し無効化トランザクションを発生させる。さらに組合せ回路８０は状態変更回路７８を起動し、アクセス要求先ラインの状態を「Ｄ」に変更する。
【００５３】
また信号線１８−０−１にはバスから発生するトランザクションが入力され、組合せ回路８０は図６（ｂ）の状態遷移にしたがってバストランザクション発生回路７１〜７６およびデータキャッシュへのライン取込み指示回路７７、キャッシュ状態変更回路７８を制御する信号線を送出する。
【００５４】
信号線６７がＡＳＭＰかつパラレルモードを示しているときの動作は、本実施形態においては上記ＳＭＰモード時の動作と同じである。
【００５５】
信号線６７がＡＳＭＰかつシングルモードを示している場合、組み合せ回路８０は図７（ａ）（ｂ）の状態遷移に従ってバストランザクション発生回路７１〜７６およびデータキャッシュへのライン取込み指示回路７７、キャッシュ状態変更回路７８を制御する信号線を送出する。
【００５６】
具体的には例えばストア要求が信号線６０−１を介し入力され、そのストアアドレスが信号線６０−０に入力されたとする。データキャッシュ状態記憶機構７９が信号線９１にＶを送出し、またＣａｓｔｏｕｔされるべきラインが信号線９２に示されない場合、組合せ回路８０はブロードキャストトランザクション発生回路７６を起動する。ブロードキャストトランザクション発生回路７６は信号線６５を介してデータキャッシュ５０に対しストア結果の反映されたラインをデータバス４２に送出するよう指示するとともに、エンコード回路８１を経由してアドレス／コマンドバス４１に対しブロードキャストトランザクションを発生させる。さらに組合せ回路８０は状態変更回路７８を起動し、アクセス要求先ラインの状態をＳｈ．Ｄに変更する。
【００５７】
図９は、命令ユニット５３の構成図である。
【００５８】
命令キャッシュ状態記憶機構１５３は、命令キャッシュ５２に保持されている命令ラインのアドレスを記憶している。プログラムカウンタ１３１はこれから実行すべき命令のアドレスを示し、命令キャッシュ状態記憶機構１５３で命令アドレスを調べた結果、求める命令が命令キャッシュ５２になければ状態変更回路１３４、信号線１８−１−０を経由して命令ラインのフェッチ要求を送出する。状態変更回路１３４は命令ラインのフェッチ要求を出した場合は信号線６６−１に命令キャッシュに対するライン取込み指示を、信号線１５５に命令キャッシュ状態変更指示を送出する。命令キャッシュ５２に求める命令がある場合は信号線６６−０を介し命令要求が命令キャッシュ５２に送出され、信号線６６−２を介して命令が送られる。命令はデコード回路１２０でデコードされ、通常の演算もしくはロードストア命令であれば、デコード結果は信号線６８に送出され、演算ユニット５７もしくはロードストアユニット５６を制御する。命令がＡＳＭＰをモード制御する、図４のｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令（１００１）およびｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令（１００３）である場合、デコード結果は信号線１５３に送出される。プログラムカウンタ１３１は信号線１５８により、命令を取り出すごとに更新される。以上がモードビットにかかわらず共通的な命令ユニット５３の動作である。
【００５９】
次に、モードビットにかかわった命令ユニット５３の動作を示す。
【００６０】
モードビット１５２がＳＭＰモードを示している場合、デコード１２０からの出力１５３とモード１２１からの出力１５２の組み合わせによって動作する組合せ回路１２２は何も出力しない。すなわち命令ユニット５３の動作は上述のとおりであり、ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令（１００１）およびｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令（１００３）は無視される。
【００６１】
モードビット１５２がＡＳＭＰモード示している場合、信号線１５３にｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令（１００１）およびｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令（１００３）を送出されると、組合せ回路１２２は、ＰＣ（プログラムカウンタ）取込み回路１２３、プログラムカウンタの更新を抑止するＰＣ（プログラムカウンタ）更新抑止回路１２４、I-line取込み指示回路１２５、自プロセッサでのプログラム処理がバリア点に達したときにこれを通知する信号を送出するバリア送出回路１２６、子プロセッサへモードが遷移したことを通知するモードBroad-Cast回路１２７、全ての子プロセッサからバリア点への到達が通知されたらモードブロードキャスト回路１２７を起動するバリア完待ち回路１２８、他のプロセッサへプログラムカウンタ値を送出するＰＣ送出回路１２９を次のように制御する。
【００６２】
すなわちｐａｒｅｎｔ＝１、ｐａｒａ＝１を示している場合、ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令が信号線１５３に送出されると、バリア完了待ち回路１２８とモードブロードキャスト回路１２７を起動する。バリア完了待ち回路１２８は信号線１４−０に全ての子プロセッサのバリア点への到達が通知されたらモードブロードキャスト回路１２７を起動する。またｐａｒｅｎｔ＝１、ｐａｒａ＝０の時にｓｗｉｔｃｈ＿ｔｏ＿ｐａｒａ＿ｍｏｄｅ命令が信号線１５３に送出されると、モードブロードキャスト回路１２７と他のプロセッサへプログラムカウンタ値を送出するプログラムカウンタ送出回路１２９を起動する。
【００６３】
一方ｐａｒｅｎｔ＝０、ｐａｒａ＝１を示している場合、ｓｗｉｔｃｈ＿ｔｏ＿ｓｉｎｇｌｅ＿ｍｏｄｅ命令が信号線１５３に送出されると、バリア送出回路１２６とプログラムカウンタ更新抑止回路１２４が起動される。またｐａｒｅｎｔ＝０、ｐａｒａ＝０の時に信号線１４−０にモードをパラレルに切り替える指示が入力されると、モードビット１２１はｐａｒａ＝１とするとともに組合せ回路１２２を介してプログラムカウンタ取込み回路１２３を起動し、信号線１４−０に送出されているプログラムカウンタを取り込むよう制御する。
【００６４】
図４の機械語命令列を実行したときのキャッシュの内容について図６、図７、図１０（ａ）を用いて説明する。なお、キャッシュは１ラインに４データ保持できるものとする。
【００６５】
図１０は、図４の各命令列１００１〜１００９を４台のプロセッサで実行したときの親プロセッサ（ＰＥ０）および子プロセッサ（ＰＥ１〜３）の命令キャッシュおよびデータキャッシュの内容を示したものである。なお、図１０では子プロセッサは同じ動作をするのでＰＥ１のキャッシュの内容のみを示している。命令キャッシュの内容は、図４で便宜的に付した命令アドレスで表示した。図中、＊が付いている命令もしくはデータはキャッシュミスもしくはブロードキャストされたデータの取込みが発生したことを示している。また図中Ａ（１）〜のように表示した場合、Ａ（１）から始まる４つのデータ、すなわちＡ（１）、Ａ（２）、Ａ（３）、Ａ（４）がキャッシュに入っていることを意味するとする。
【００６６】
図４の命令１００１を実施したときは、ＰＥ０、ＰＥ１とも命令キャッシュミスが発生したとする。ＰＥ１はプログラムカウンタの更新を抑止し、中止（ストール）状態に入る。ＰＥ０〜３はシングルモードとなり、ＰＥ０は命令列１００２の実行を開始する。ＰＥ０のデータキャッシュにはデータが入っていなかったとすると、Ｐ、Ｓ、Ａ（１）〜は全てライン転送される。この時ＰＥ１（子プロセッサ）のデータキャッシュは図７（ｂ）に従い、Ｐ、Ｓ、Ａ（１）〜を取り込む［状態ＩからＬＴｒｅｑもしくはＬＴｒｅｑ−ｆｏｒＳＴにより遷移］。ＰＥ０（親プロセッサ）のみＶａｌｉｄ、その他（子プロセッサ）はＳｈ．Ｄとなる。またＰＥ１（子プロセッサは命令キャッシュにもＰＥ０と同じアドレス９１０を取り込む。すなわち、子プロセッサは中止状態ではあるが、子プロセッサの命令およびデータキャッシュの更新は親プロセッサの命令およびデータキャッシュ更新と合わせて行われる。これらの取込み処理は、ＰＥ０のライン転送のかげで行なわれるので、処理時間の増加は起こさない。
【００６７】
ＰＥ０（親プロセッサ）が命令１００３を実行すると、親プロセッサは同期情報バスのモードをパラレルとするとともにプログラムカウンタを出力する。ＰＥ１（子プロセッサ）はプログラムカウンタを取り込み、全プロセッサが命令列１００４の並列実行を開始する。ＰＥ１の命令キャッシュにはＰＥ０と同じラインが格納されているので命令キャッシュミスは発生しない。またＰＥ１のデータキャッシュにはＳが格納されているのでＳに関してはキャッシュミスは発生しない。Ａ（５）〜、Ｂ（５）〜についてはキャッシュミスとなる。命令列１００４の実行は図６の状態遷移に基づき行なわれるため、ＰＥ０とＰＥ１のキャッシュの内容はかなり異なってくる。ＰＥ１ではＢ（５）〜はＤｉｒｔｙの状態で保持される。
【００６８】
命令１００５を実行すると、ＰＥ１（子プロセッサ）は、バリア点に到達するとこのことを示すバリア信号を同期情報バス４０に送出してストール状態に入る。またＰＥ０（親プロセッサ）は、命令１００５を実行すると、ＰＥ１〜３（子プロセッサ）からのバリア信号を待ち、これらを全て受け取ると、モードをシングルにする。
【００６９】
命令列１００６の実行では、キャッシュコヒーレンス制御は図７の状態遷移に従う。よってＰＥ１〜３が変更したＢ（５）〜Ｂ（１６）はＰＥ０が参照するたびに、ブロードキャストされ、全ＰＥがＳｈ．Ｄ属性のＢ（５）〜Ｂ（１６）を保持することになる。例えば、ＰＥ０（親プロセッサ）は図７（ａ）の状態ＩからＬによってＳｈ．Ｄに移行し、ＰＥ１〜３（子プロセッサ）は図７（ｂ）の状態ＩからＬＴｒｅｑによりＳｈ．Ｄに移行する。
【００７０】
命令１００７は、命令１００３と同様に実行される。命令列１００８は、全ＰＥにより並列実行されるが、ＰＥ１はＢ（５）〜を既にキャッシュに取り込んでいるので、ミスを発生しない。
【００７１】
比較のため、従来方式により図３のプログラムを並列実行する場合の機械語命令列イメージを図５に示し、また本命令列を通常のＳＭＰモード、すなわち図６の状態遷移に従って実行した場合のキャッシュの内容を図１０（ｂ）に示す。
【００７２】
図５（ａ）は親プロセッサが実行する命令列、（ｂ）は子プロセッサ群が実行する命令列である。図５（ａ）の命令２００３のｓｔｏｒｅ＿ｂｅｇｉｎ＿ａｄｄｒ命令は、子プロセッサを起動し、子プロセッサに実行開始アドレスを通知するシーケンスを表している。図５（ａ）の命令２００５のｌｏａｄａｌｌ＿ｅｎｄ命令は、子プロセッサが通知してくる終了フラグを集計するシーケンスを表している。図５（ｂ）に示すように、子プロセッサはプログラムの非並列実行部分に到達するとスピンウェイトを行なうとする。
【００７３】
図１０（ｂ）に明らかなように、従来方式ではプログラムの並列化部分に入るときにＰＥ１（子プロセッサ）の命令キャッシュがミスする（２００４、２００８）。また本発明の実施形態では発生しなかったデータキャッシュミスが２００４、２００８で発生している。
【００７４】
以上より明らかに従来方式の方がキャッシュミスのペナルティが大きく、１プロセス並列実行による性能向上を阻害している。
【００７５】
【発明の効果】
以上により本発明では、複数のプロセスを複数のプロセッサで同時実行するモード（ＳＭＰモード）か、１つのプロセスを前記第１の複数のプロセッサで並列実行するモード（ＡＳＭＰモード）かを識別する第１の情報を具備し、前記情報に応じて前記内容一致制御回路の動作を切り替えるので、各モードにあったキャッシュコヒーレント制御方式を選ぶことができる。例えば、ＳＭＰモードでは各プロセッサのキャッシュの内容をなるべく独立に保つことにより、無駄にコヒーレント機構を起動せずに複数プロセス実行のスループットを向上させることができる。一方ＡＳＭＰモードでは、プログラムの実行部分（プロセスの並列動作部分を実行するモードと非並列動作部分を実行するモード）に応じて適したキャッシュコヒーレント方式をとることができ、１プロセスの並列実行の性能を向上させることができる。
【図面の簡単な説明】
【図１】本発明の実施形態の１つであるプロセッサシステムの全体構成図である。
【図２】本発明のプロセッサの構成図である。
【図３】例題プログラムである。
【図４】図３のプログラムの本発明における機械語命令列イメージである。
【図５】図３のプログラムの従来技術における機械語命令列イメージである。
【図６】キャッシュコヒーレンス方式を説明する状態遷移図である。
【図７】キャッシュコヒーレンス方式を説明する状態遷移図である。
【図８】本発明のプロセッサのデータキャッシュコヒーレント機構の構成図である。
【図９】本発明のプロセッサの命令キャッシュコヒーレント機構の構成図である。
【図１０】本発明と従来技術のキャッシュ内容である。
【図１１】本発明の動作切り替えモードビットの構成である。
【符号の説明】
５１  データキャッシュ、
５２  命令キャッシュ、
５０  データユニット、
５３  命令ユニット、
１２１  モードビット、
４０  同期情報バス、
７１〜７７  データキャッシュコヒーレント回路、
１２３〜１２９  命令キャッシュコヒーレント回路。
【図１】
0003820645.tif 000002
【図２】
0003820645.tif 000003
【図３】
0003820645.tif 000004
【図４】
0003820645.tif 000005
【図５】
0003820645.tif 000006
【図６】
0003820645.tif 000007
【図７】
0003820645.tif 000008
【図８】
0003820645.tif 000009
【図９】
0003820645.tif 000010
【図１０】
0003820645.tif 000011
【図１１】
0003820645.tif 000012