(57)【特許請求の範囲】
【請求項１】
キャッシュメモリを備えた複数のプロセッサを有するコンピュータに於いて、
前記プロセッサによるスピンウェイト命令の実行中を検出した際に、前記スピンウェイトの終了条件となっている変数値の監視を指示した後に前記プロセッサの動作状態を変更させるスピンウェイト検出部と、
前記スピンウェイト検出部から指示された変数値を監視し、該変数値が変更されたことを検出した場合に前記プロセッサに値変更を通知して動作状態を元に戻す値変更検出部と、
を備え、
前記プロセッサはプログラム実行を停止する機能を持っており、
前記スピンウェイト検出部は、スピンウェイト命令の実行中を検出した際に前記プロセッサにプログラムの実行を停止させ、
前記値変更検出部は、前記スピンウェイトの終了条件となっている変数値の変更を検出した際に、前記プロセッサにプログラムの実行を再開させることを特徴とするコンピュータ。
【請求項２】
請求項１記載のコンピュータにおいて、前記スピンウェイト検出部は、前記プロセッサによるスピンウェイト命令の実行中を検出した際に、前記スピンウェイト命令の実行で参照している前記変数値が格納された前記キャッシュメモリのキャッシュブロックの監視を前記値変更検出部に指示し、
前記値変更検出部は、前記スピンウェイト検出部から指示されたキャッシュブロックを監視し、該キャッシュブロックの状態が変更されたことを検出した場合に前記プロセッサに値変更を通知することを特徴とするコンピュータ。
【請求項３】
請求項２記載のコンピュータに於いて、前記値変更検出部は、前記キャッシュブロックの状態が他のプロセッサ又は入出力ユニットにより無効化されたことを検出した場合に、前記プロセッサに値変更を通知することを特徴とするコンピュータ。
【請求項４】
請求項２記載のコンピュータに於いて、前記値変更検出部は、前記キャッシュブロックがキャッシュメモリから追い出されたことを検出した場合に、前記プロセッサに値変更を通知することを特徴とするコンピュータ。
【請求項５】
請求項１記載のコンピュータに於いて、
前記スピンウェイト検出部は、前記プロセッサによるスピンウェイト命令の実行中を検出した際に、前記スピンウェイト命令の実行で参照している変数値が格納されているメモリアドレスに対するバスリクエストの監視を前記値変更検出部に指示し、
前記値変更検出部は、前記スピンウェイト検出部から指示された変数値が格納されているメモリアドレスに対するバスリクエストを監視し、他のプロセッサ又は入出力ユニットから前記メモリアドレスに対するバスリクエストを検出した場合に、前記プロセッサに値変更を通知することを特徴とするコンピュータ。
【請求項６】
請求項１記載のコンピュータに於いて、
前記プロセッサは通常モードと低消費電力モードの少なくとも２つ以上の動作モードを持っており、
前記スピンウェイト検出部は、スピンウェイト命令の実行中を検出した際に前記プロセッサの動作モードを低消費電力モードに変更し、
前記値変更検出部は、前記スピンウェイトの終了条件となっている変数値の変更を検出した際に、前記プロセッサの動作モードを通常モードに変更させることを特徴とするコンピュータ。
【請求項７】
キャッシュメモリを備えた複数のプロセッサを有するコンピュータに於いて、
前記プロセッサによるスピンウェイト命令の実行中を検出した際に、前記スピンウェイトの終了条件となっている変数値の監視を指示した後に前記プロセッサの動作状態を変更させるスピンウェイト検出部と、
前記スピンウェイト検出部から指示された変数値を監視し、該変数値が変更されたことを検出した場合に前記プロセッサに値変更を通知して動作状態を元に戻す値変更検出部と、
を備え、
前記プロセッサは、複数スレッドを同時実行できる構造を持っており、
前記スピンウェイト検出部は、スピンウェイト命令の実行中のスレッドを検出した際に、該スレッドヘのプロセッサリソースの割当てを減少又は停止させ、
前記値変更検出部は、前記スピンウェイトの終了条件となっている変数値の変更を検出した際に、前記スレッドヘのプロセッサリソースの割当てを増加又は再開させることを特徴とするコンピュータ。
【請求項８】
請求項１または７記載のコンピュータに於いて、前記プロセッサはスピンウェイト専用命令を持っており、前記スピンウェイト検出部は、前記プロセッサによるスピンウェイト専用命令の実行からスピンウェイト実行中を検出することを特徴とするコンピュータ。
【請求項９】
請求項１または７記載のコンピュータに於いて、前記スピンウェイト検出部は、
前記プロセッサによる実効済命令列を格納するバッファと、
前記スピンウェイト専用命令の命令列を記録するスピンウェイト命令列記録部と、
前記バッファとスピンウェイト命令列記録部とを比較して命令列が一致した際に、スピンウェイト実行中を検出することを特徴とするコンピュータ。
【請求項１０】
キャッシュメモリを備えた複数のプロセッサを有するコンピュータの制御方法に於いて、
前記プロセッサによるスピンウェイト命令の実行中を検出した際に、前記スピンウェイトの終了条件となっている変数値の監視を開始した後に前記プロセッサの動作状態を変更させ、
前記変数値が変更されたことを検出した場合に前記プロセッサに値変更を通知して動作状態を元に戻し、
前記プロセッサはプログラム実行を停止する機能を持っており、
前記スピンウェイト命令の実行中を検出した際に前記プロセッサにプログラムの実行を停止させ、
前記スピンウェイトの終了条件となっている変数値の変更を検出した際に、前記プロセッサにプログラムの実行を再開させることを特徴とするコンピュータの制御方法。
【請求項１１】
請求項１０記載のコンピュータの制御方法に於いて、
前記プロセッサによるスピンウェイト命令の実行中を検出した際に、前記スピンウェイト命令の実行で参照している前記変数値が格納された前記キャッシュメモリのキャッシュブロックの監視を開始し、
前記キャッシュブロックの監視中に、該キャッシュブロックの状態が変更されたことを検出した場合に前記プロセッサに値変更を通知することを特徴とするコンピュータの制御方法。
【請求項１２】
請求項１１記載のコンピュータの制御方法に於いて、前記キャッシュブロックの状態が他のプロセッサ又は入出力ユニットにより無効化されたことを検出した場合に、前記プロセッサに値変更を通知することを特徴とするコンピュータの制御方法。
【請求項１３】
請求項１１記載のコンピュータの制御方法に於いて、前記キャッシュブロックがキャッシュメモリから追い出されたことを検出した場合に、前記プロセッサに値変更を通知することを特徴とするコンピュータの制御方法。
【請求項１４】
請求項１０記載のコンピュータの制御方法に於いて、
前記プロセッサによるスピンウェイト命令の実行中を検出した際に、前記スピンウェイト命令の実行で参照している変数値が格納されているメモリアドレスに対するバスリクエストの監視を開始し、
前記メモリアドレスに対するバスリクエストの監視中に、他のプロセッサ又は入出力ユニットから前記メモリアドレスに対するバスリクエストを検出した場合に、前記プロセッサに値変更を通知することを特徴とするコンピュータの制御方法。
【請求項１５】
請求項１０記載のコンピュータの制御方法に於いて、
前記プロセッサは通常モードと低消費電力モードの少なくとも２つ以上の動作モードを持っており、
前記スピンウェイト命令の実行中を検出した際に前記プロセッサの動作モードを低消費電力モードに変更させ、
前記スピンウェイトの終了条件となっている変数値の変更を検出した際に、前記プロセッサの動作モードを通常モードに変更させることを特徴とするコンピュータの制御方法。
【請求項１６】
キャッシュメモリを備えた複数のプロセッサを有するコンピュータの制御方法に於いて、
前記プロセッサによるスピンウェイト命令の実行中を検出した際に、前記スピンウェイトの終了条件となっている変数値の監視を開始した後に前記プロセッサの動作状態を変更させ、
前記変数値が変更されたことを検出した場合に前記プロセッサに値変更を通知して動作状態を元に戻し、
前記プロセッサは、複数スレッドを同時実行できる構造を持っており、
前記スピンウェイト命令の実行中のスレッドを検出した際に、該スレッドヘのプロセッサリソースの割当てを減少又は停止させ、
スピンウェイトの終了条件となっている変数値の変更を検出した際に、前記スレッドヘのプロセッサリソースの割当てを増加又は再開させることを特徴とするコンピュータの制御方法。
【請求項１７】
請求項１０または１６記載のコンピュータの制御方法に於いて、前記プロセッサはスピンウェイト専用命令を持っており、前記プロセッサによるスピンウェイト専用命令の実行からスピンウェイト実行中を検出することを特徴とするコンピュータの制御方法。
【請求項１８】
請求項１７記載のコンピュータの制御方法に於いて、前記スピンウェイト検出は、
前記スピンウェイト専用命令の命令列をスピンウェイト命令列記録部に記録し、
前記プロセッサによる実行済命令列を順次バッファに格納し、
前記バッファとスピンウェイト命令列記録部とを比較して命令列が一致した際に、スピンウェイト実行中を検出することを特徴とするコンピュータの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリを備えた複数のプロセッサを有する共有メモリ型マルチプロセッサ構成のコンピュータ及び制御方法に関し、特に、同期処理などに用いられるスピンウェイト命令の命令実行効率を改善するためのコンピュータ及び制御方法に関する。
【背景技術】
【０００２】
従来、キャッシュメモリを備えた複数のプロセッサでメインメモリを共有する共有メモリ型マルチプロセッサシステムにおいては、プロセッサ間の同期処理にスピンウェイトが用いられることが多い。
【０００３】
このプロセッサ間の同期処理にスピンウェイトを使用する代表的な例がスピンロックである。スピンロックの命令処理は図１のように、検証部１００と設定部１０２の手順で実現されることが多い。検証部１００は、ロック獲得ポイントに達したプロセス又はスレッドがステップＳ１で変数Ｘをロードし、ステップＳ２で変数Ｘが例えばＸ＝０といったロック獲得が可能であることを示す値か否か判定し、Ｘ＝０になるまでステップＳ１，Ｓ２の処理を繰り返すスピンを行って待つスピンウェイトを行う。設定部１０２は、
「ｔｅｓｔ＿ａｎｄ＿ｓｅｔ」や「ｃｏｍｐａｒｅ＿ａｎｄ＿ｊｕｍｐ」などのインターロック命令を用いて、ステップＳ３でロック変数値ＸをＸ＝１に設定してスピンロック処理を抜ける。
【０００４】
もしロック変数値Ｘ＝１の設定に失敗したら検証部１００に戻りスピンウェイトを継続する。このように、ロック獲得が可能であるかどうかをチェックするスピンロックの検証部１００でスピンウェイトが用いられることが多い。
【０００５】
スピンロック以外では、共有メモリ型マルチプロセッサシステムにおけるプロセッサ間の同期処理にスピンウェイトを使用するバリア同期がある。バリア同期とは、同期対象であるプロセス又はスレッドが同期ポイントで待ち合わせを行うことであり、メモリベースのバリア同期の場合には、図２の手順で実現されることが多い。
【０００６】
まず設定部１０４のステップＳ１において、プロセス又はスレッドが同期ポイントに達する前はロック変数ＸはＸ＝０である。同期ポイントに達するとプロセス又はスレッドは、「ｔｅｓｔ＿ａｎｄ＿ｓｅｔ」や「ｃｏｍｐａｒｅ＿ａｎｄ＿ｊｕｍｐ」などのインターロック命令を用いて該当するプロセス又はスレッドに対応するロック変数Ｘのビットを１に設定し、検証部１０６に進む。
【０００７】
検証部１０６は、ステップＳ２でロック変数Ｘをロードし、ステップＳ３でバリア同期の対象となっている全プロセス又は全スレッドのビットが１になるまで、即ち
ａｌｌ  Ｘ＝１まで スピンして待つスピンウェイトを行う。全プロセス又は全スレッドが同期ポイントに達すると、ａｌｌ  Ｘ＝１になり、同期がとられた状態でスピンウェイトを抜けて次の処理に移行する。
【０００８】
このようにバリア同期でも、全プロセス又は全スレッドが同期ポイントに達しているかどうかをチェックする検証部１０６でスピンウェイトが用いられることが多い。
【０００９】
また、Ｉ／Ｏデバイス（入出力デバイス）との同期にもスピンウェイトが使用されている。通常のＩ／Ｏ処理では、プロセッサとＩ／Ｏデバイス間の同期には割り込みを使うのが一般的であった。これは、Ｉ／Ｏデバイスがプロセッサと比べて非常に遅く、Ｉ／Ｏデバ イスからの応答をプロセッサが待ち続けることの損失が大きかったためである。
【００１０】
しかし、Ｉ／Ｏデバイスの高速化により、一部のＩ／Ｏデバイスにおいては割り込みを使うことによる弊害が出てきている。一般的に割り込みはオーバーヘッド(遅延)が大きいので、Ｉ／Ｏデバイス本来の速度を活かせない。そのため、一部の高速Ｉ／Ｏデバイスに関しては、スピンウェイトによる同期処理を採用し始めている。
【特許文献１】Ｕｓｉｎｇ  Ｓｐｉｎ−Ｌｏｏｐ  ｏｎ  ＩｎｔｅｌＰｅｎｔｉｕｍ（Ｒ）  Ｐｒｏｓｅｓｓｏｒ  ａｎｄ  Ｉｎｔｅｌ  ＸｅｎｏＰｒｏｓｅｓｓｏｒ  Ｖｅｒｓｉｏｎ  ２．１［Ｏｎｌｉｎｅ］，米国、Ｉｎｔｅｌ  Ｃｏｒｐ．，２００１年５月  ｐｐ．１−１１
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、スピンウェイトの実行には無駄が多い。スピンウェイトは、ウェイト終了条件となっている変数値が他のプロセッサやＩ／Ｏデバイスなどの他のエージェントにより所望の値に変更されるまで延々と同じ命令列の実行を繰り返す。繰り返しの回数となるスピン回数は、場合によっては数百回、数千回に及ぶこともめずらしくなく、ある意味でプロセッサを無駄に使用しているといえる。電力消費の観点から考えると、スピンウェイトのあいだは無駄に電力を消費していることになる。
【００１２】
また、複数スレッドの同時実行が可能なＳＭＴ(Ｓｉｍｕｌｔａｎｅｏｕｓ
Ｍｕｌｔｉ−Ｔｈｒｅａｄｉｎｇ Ａｒｃｈｉｔｅｃｔｕｒｅ)プロセッサにおいては、スピンウェイトを実行中のスレッドが他の実行スレッドの妨げとなる可能性がある。一般的にＳＭＴプロセッサでは、プロセッサリソースはスレッド間で共有されている。このプロセッサリソースは、実行スレッド毎に均等に割り当てられるのではなく、各スレッドの状態に応じて割り当てられるプロセッサリソースの数や量が変わるというのが一般的である。プロセッサリソース割り当てを決定する基準にはいろいろな方法が提案されているが、例えば次のようなアプローチがある。
【００１３】
（１）キャッシュミスを起こしたスレッドヘのリソース割り当てを減らす；
（２）投機的に実行している命令数が多いスレッドヘのリソース割り当てを減らする；
（３）リザベーションステーションに登録されている命令数の多いスレッドヘのリソース割り当てを減らす；
これらのアプローチは、よりスムーズに命令を実行できる可能性の高いスレッドに優先的にプロセッサリソースを割り当てようという考えに基づいている。ここスピンウェイトは命令を非常にスムーズに実行することができる。なぜなら、同じ命令列の実行を繰り返しているだけなので、キャッシュミスも起らないし、分岐予測も外れることがないからである。
【００１４】
したがって、ＳＭＴプロセッサにおいては、スピンウェイトを実行中のスレッドに期せずして優先的にプロセッサリソースを割り当てることになる。すると、スピンウェイト実行中スレッドに比べ、生産性の高い命令列を実行していると思われる他のスレッドへのプロセッサリソースの割り当てが減ってしまい、結果としてプロセッサの性能が下がる可能性がある。
【００１５】
この様に、スピンウェイトには
（１） 電力を無駄に消費する；
（２）ＳＭＴプロセッサの性能が下げる可能性が高い；
といった問題がある。
【００１６】
この問題への対策として、スピンウェイトが始まったことを検出したら、スピンウェイトの実行を停止し、スピンウェイトから抜けられる条件が整ったら割り込みにより通知し、実行を再開するという手法もある。しかし、スピンウェイトから抜けられる条件が整ったことを、割り込みで通知してしまっては元も子もない。そもそもスピンウェイトは低遅延を実現するために採用しているのであり、割り込みを使ったら時間コストが大きくなってしまう。
【００１７】
また、同期専用のハードウェアを備えるという手法もある。しかし、その場合にはハードウェアコストが高くなる。現在、メモリベースの同期処理が一般的となっている背景には、汎用デバイス(メモリ）を用いて同期処理を行うことによるコスト削減のメリットが大きいという歴史的な経緯がある。
【００１８】
本発明は、スピンウェイトの実行で生じる電力やプロセッサリソースの無駄を省いて命令実行効率を高めるコンピュータ及び制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１９】
本発明は、キャッシュメモリを備えた複数のプロセッサを有するコンピュータにおいて、プロセッサによるスピンウェイト命令の実行中を検出した際に、スピンウェイトの終了条件となっている変数値の監視を指示した後にプロセッサの動作状態を変更させるスピンウェイト検出部と、スピンウェイト検出部から指示された変数値を監視し、この変数値が変更されたことを検出した場合にプロセッサに値変更を通知して動作状態を元に戻す値変更検出部とを設けたことを特徴とする。
【００２０】
このように本発明は、スピンウェイトから脱出できる可能性がない時、もしくは可能性が低い時は、プロセッサの動作状態を変更することにより、スピンウェイト実行中に生ずる無駄を削減する。また本発明によれば、プロセッサにスピンウェイト検出部を設け、またキャッシュメモリに値変更検出部を設けるといった少量のハードウェアの追加により、スピンウェイトが終了する可能性が無いか又は低いときの無駄を削減し、スピンウェイトの低遅延という特徴を損ねることなく、プロセッサの命令実行効率を良くする。
【００２１】
スピンウェイト検出部は、プロセッサによるスピンウェイト命令の実行中を検出した際に、スピンウェイト命令の実行で参照している変数値が格納されたキャッシュメモリのキャッシュブロックの監視を値変更検出部に指示する。値変更検出部は、キャッシュブロックの状態が他のプロセッサ又は入出力ユニットにより無効化されたことを検出した場合に、プロセッサに値変更を通知する。変更検出部は、キャッシュブロックがキャッシュメモリから追い出されたことを検出した場合にも、プロセッサに値変更を通知する。
【００２２】
スピンウェイト検出部は、プロセッサによるスピンウェイト命令の実行中を検出した際に、スピンウェイト命令の実行で参照している変数値が格納されているメモリアドレスに対するバスリクエストの監視を値変更検出部に指示する。値変更検出部は、スピンウェイト検出部から指示された変数値が格納されているメモリアドレスに対するバスリクエストを監視し、他のプロセッサ又は入出力ユニットから前記メモリアドレスに対するバスリクエストを検出した場合に、プロセッサに値変更を通知する。
【００２３】
プロセッサは通常モードと低消費電力モードの少なくとも２つ以上の動作モードを持っている場合、スピンウェイト検出部は、スピンウェイト命令の実行中を検出した際にプロセッサの動作モードを低消費電力モードに変更する。また値変更検出部は、スピンウェイトの終了条件となっている変数値の変更を検出した際に、プロセッサの動作モードを通常モードに変更させる。これによりスピンウェイト実行中にプロセッサの消費電力量を削減できる。
【００２４】
プロセッサはプログラム実行を停止する機能を持っている場合、スピンウェイト検出部は、スピンウェイト命令の実行中を検出した際にプロセッサにプログラムの実行を停止させる。また値変更検出部は、スピンウェイトの終了条件となっている変数値の変更を検出した際に、プロセッサにプログラムの実行を再開させる。これによりスピンウェイト実行中にプログラムの実行が停止され、これに伴いプロセッサの消費電力量を削減できる。
【００２５】
プロセッサは、複数スレッドを同時実行できる構造（ＳＭＴプロセッサ）を持っている場合、スピンウェイト検出部は、スピンウェイト命令の実行中のスレッドを検出した際に、このスレッドヘのプロセッサリソースの割り当てを減少又は停止させる。また値変更検出部は、スピンウェイトの終了条件となっている変数値の変更を検出した際に、スレッドヘのプロセッサリソースの割り当てを増加又は再開させる。
【００２６】
これによりＳＭＰプロセッサにおけるスレッドのスピンウェイト実行中に、他のスレッドプログラムの実行が停止され、スピンウェイト実行スレッドによる他のスレッドヘの悪影響を回避し、結果としてプロセッサの性能が上がる。
【００２７】
プロセッサはスピンウェイト専用命令を持っており、スピンウェイト検出部は、プロセッサによるスピンウェイト専用命令の実行からスピンウェイト実行中を検出する。またスピンウェイト検出部は、プロセッサによる実効済命令列を格納するバッファと、スピンウェイト専用命令の命令列を記録する命令列記録部と、バッファと命令列記録部とを比較して命令列が一致した際に、スピンウェイト実行中を検出する比較部とを備える。
【００２８】
本発明は、キャッシュメモリを備えた複数のプロセッサを有するコンピュータの制御方法を提供するものであり、
プロセッサによるスピンウェイト命令の実行中を検出した際に、スピンウェイトの終了条件となっている変数値の監視を開始した後にプロセッサの動作状態を変更させ、
監視中に変数値が変更されたことを検出した場合にプロセッサに値変更を通知して動作状態を元に戻させることを特徴とする。
この制御方法の詳細はコンピュータの場合と基本的に同じになる。
【発明の効果】
【００２９】
本発明によれば、スピンウェイトの特徴である遅延の低さを犠牲にすることなく、スピンウェイト命令実行によって発生する無駄な命令実行やプロセッサの動作を制限することができ、その結果としてプロセッサの電力消費を節減することができる。
【００３０】
またＳＭＴプロセッサにあっては、スピンウェイト実行スレッドによる他のスレッドへの悪影響を回避することができ、ＳＭＴプロセッサの処理能力を向上させることができる。
【発明を実施するための最良の形態】
【００３１】
図３は、本発明が適用される共有メモリ型マルチプロセッサシステムのブロック図である。図３において、マルチプロセッサシステムは、例えば４台のプロセッサ１０−１〜１０−４を備えており、プロセッサ１０−１〜１０−４ごとにキャッシュメモリ１２−１〜１２−４が設けられている。
【００３２】
キャッシュメモリ１２−１〜１２−４はバス１４を介して共有メモリとして使用されるメインメモリ１６を接続している。またバス１４には入出力ユニット１８が接続され、この入出力ユニット１８としては例えば入出力エージェントとして機能する入出力プロセッサであり、外部のハードディスクドライブＨＤＤなどのサブシステムやネットワーク、更にはキーボード、マウス、ディスプレイなどの入出力機器を接続している。
【００３３】
図４は、図３のプロセッサ１０−１の実施形態である。なお、他のプロセッサ１０−２〜１０−４も同じ実施形態となる。図４において、プロセッサ１０−１は、プロセッサコア１１、キャッシュメモリインタフェ−ス２０を備える。またキャッシュメモリ１２−１は、プロセッサインタフェース２４、キャッシュメモリ制御部２６、バスインタフェース２８及びキャッシュメモリアレイ３０を備えている。
【００３４】
このようなプロセッサ１０−１及びキャッシュメモリ１２−１の構成は従来のプロセッサと同じであるが、本発明にあってはプロセッサ１０−１側に新たにスピンウェイト検出部２２を設け、同時にキャッシュメモリ１２−１側に値変更検出部３２を設けている。プロセッサ１０−１に設けられたスピンウェイト検出部２２は、プロセッサコア１１によるスピンウェイト命令の実行中を検出した際に、スピンウェイトの終了条件となっている変数値の監視をキャッシュメモリ１２−１側に設けた値変更検出部３２に指示した後に、プロセッサ１０−１の動作状態を変更させる。
【００３５】
スピンウェイト検出部２２によるプロセッサ１０−１の動作状態の変更としては、スピンウェイト命令の実行中に生ずる無駄を削減する動作状態に変更するものであり、具体的には次のようになる。
【００３６】
例えばプロセッサ１０−１が通常モードと低消費電力モードの少なくとも２つの動作モードを持っている場合には、スピンウェイト検出部２２でスピンウェイト命令の実行中を検出した際にはプロセッサの動作モードを低消費電力モードに変更する。
【００３７】
またプロセッサがプログラム実行を停止する機能を持っている場合には、スピンウェイト検出部２２でスピンウェイト命令の実行中を検出した際にプロセッサにプログラムの実行を停止させる。このスピンウェイト命令の実行を検出した際の低消費電力モードへの変更あるいはプログラムの実行停止のいずれも、スピンウェイトの終了条件が所定の値に変更されるまで延々とスピンウェイトの命令列の実行を繰り返すスピンにより、プロセッサの無駄な動作や無駄に使用している消費電力を防ぐようにする。もちろん、スピンウェイト命令検出時のプロセッサによるプログラムの実行停止は低消費電力モードの１つの形態に含まれると言うこともできる。
【００３８】
キャッシュメモリ１２−１側に設けた値変更検出部３２は、スピンウェイト検出部２２から指示されたスピンウェイトの終了条件となっている変数値を監視し、この変数値が他のプロセッサ１０−２〜１０−４や入出力ユニット１８により変更されたことを検出した場合に、プロセッサ１０−１側に値変更を通知してプロセッサの動作状態を元に戻す。
【００３９】
例えば、スピンウェイト命令実行中の検出でプロセッサか低消費電力モードに変更されていた場合には通常モードに戻す。またスピンウェイト命令の実行中の検出でプロセッサのプログラムの実行停止となっていた場合にはプログラムの実行を再開させる。
【００４０】
図５は、図４のプロセッサ１０−１に設けているスピンウェイト検出部２２の実施形態である。スピンウェイト検出部２２は、実行済命令列バッファ３４、スピンウェイト命令列記録部３６及び比較部３８を備える。この実施形態にあっては、既存の命令セットＩＳＡ（Ｉｎｓｔｒｕｃｔｉｏｎ Ｓｅｔ Ａｒｃｈｉｔｅｃｔｕｒｅ）をそのまま使用した場合を例に取っている。スピンウェイト検出部２２は、まずスピンウェイト命令列記録部３６にスピンウェイトであることを示す命令列を予め記録する。
【００４１】
この命令列の記録は複数個でもよく、また記録内容は予め定められたものであっても良い。実行済命令列バッファ３４には、プロセッサコアで実行が完了した命令列が記録される。比較部３８は、スピンウェイト命令列記録部３６に記録している基準となる命令列と実行済命令列バッファ３４に記録された命令列を比較し、両者が一致したら即ちスピンウェイト命令列が実行されていることを検出したら、キャッシュメモリインタフェース２０に対しスピンウェイト命令列検出信号Ｅ１を出力する。
【００４２】
図６は、図４のキャッシュメモリ１２−１側に設けている値変更検出部３２の実施形態である。この実施形態において値変更検出部３２には、監視対象先記録部４０とキャッシュステート監視部４２を設けている。プロセッサにおいてスピンウェイト命令の実行によりスピンウェイトが始まると、図５に示したスピンウェイト検出部２２よりスピンウェイト命令列検出信号Ｅ１が出力され、図６の値変更検出部３２に設けている監視対象アドレス記録部４０にスピンウェイトの終了条件として参照している変数値を格納しているキャッシュブロック、具体的にはキャッシュメモリエントリを、キャッシュメモリ制御部２６を経由して受けて記録する。
【００４３】
キャッシュステート監視部４２は監視対象アドレス記録部４０に記録されたキャッシュメモリエントリを監視しており、このエントリのキャッシュステート（キャッシュ状態）が更新されたら、キャッシュメモリ制御部２６を介してプロセッサ側に値変更検出信号Ｅ２を出力する。
【００４４】
この実施形態において、キャッシュプロトコルとしてはＭＥＳＩプロトコルを例にとっており、この場合、キャッシュステート監視部４２は監視対象となるエントリのキャッシュステートが無効Ｉに更新されたら値変更検出信号Ｅ２を出力する。なおキャッシュステート監視部４２としては、スピンウェイト終了条件となっている変数値の書き換えに対応したキャッシュステートの無効Ｉの更新から値変更検出信号Ｅ２を出力しているが、キャッシュメモリのＬＲＵアルゴリズムにより監視対象となっているキャッシュメモリエントリの追い出しが行われた場合にも値変更検出信号Ｅ２を出力する。
【００４５】
図７は、スピンウェイト検出時にスピンウェイト終了条件となっている変数値が格納されているキャッシュメモリエントリ（キャッシュブロック）を監視して値変更を検出する本発明の処理手順のタイムチャートである。まずスピンウェイト検出部２２がステップＳ１でプロセッサ１０−１でスピンウェイト命令を実行中か否かチェックしている。
【００４６】
プロセッサ１０−１でスピンウェイト命令が実行されると、図５の実施形態に示したようなスピンウェイト検出部２２でスピンウェイト命令の実行が検出され、スピンウェイト命令検出信号Ｅ１が出力される。これによって、ステップＳ２でスピンウェイト検出部２２は、スピンウェイトで参照している変数値が格納されたキャッシュブロックの監視をキャッシュメモリ１２−１側の値変更検出部３２に指示する。これと同時にスピンウェイト検出部２２は、ステップＳ３でプロセッサ１０−１によるスピンウェイト命令の実行を停止し、低消費電力の動作状態に入る。
【００４７】
スピンウェイト検出部２２からキャッシュブロックの監視を指示された値変更検出部３２は、ステップＳ１０１でプロセッサから指示されたキャッシュブロックの監視を開始する。即ち、ステップＳ１０２で監視対象となるキャッシュブロックにおけるキャッシュステート即ちキャッシュ状態の状態変化、具体的には無効化が行われたか否かを検出している。この状態で他のプロセッサ１０−１〜１０−４のいずれか、あるいは入出力ユニット１８によるキャッシュブロックの更新があると、監視しているキャッシュブロックのキャッシュステートが無効状態に更新される。
【００４８】
これをステップＳ１０２で検出すると、ステップＳ１０３に進み、キャッシュブロックの状態変化を図６の値変更検出部３０より値変更検出信号Ｅ２として出力し、キャッシュブロックの状態変化即ち無効化をプロセッサ側に通知する。この値変更検出信号を受けて、スピンウェイト検出部２２にあっては、ステップＳ４でプロセッサ１０−１によるスピンウェイト命令の実行を再開する。
【００４９】
図８は、マルチプロセッサシステムにおけるバリア同期処理を例にとって本発明の処理手順を示した説明図である。図８（Ａ）はバリア同期処理の対象となるマルチプロセッサシステムの一部であり、説明を簡単にするため２台のプロセッサ１０−１，１０−２のバリア同期処理を例にとっている。
【００５０】
またプロセッサ１０−１，１０−２に設けたキャッシュメモリ１２−１，１２−２にあっては、スピンウェイト命令の実行で参照しているスピンウェイトの終了条件となっている２ビットの変数値とキャッシュブロックにおけるキャッシュステートを示している。
【００５１】
このキャッシュステートはＭＥＳＩプロトコルに対応しており、また変数値は２台のプロセッサ１０−１，１０−２のバリア同期であることから、それぞれに対応した２ビットの情報であり、同期ポイントに達する前の状態では「００」となっている。
【００５２】
図８（Ｂ）〜（Ｇ）は、図７に示した本発明の処理手順に従ったバリア同期処理の動作の遷移状態を時間的に分けて表わしている。図８（Ｂ）はバリア同期の対象となっている２台のプロセッサ１０−１，１０−２の内、プロセッサ１０−１が同期ポイントに達してスピンウェイトした状態である。
【００５３】
即ちプロセッサ１０−１は、同期ポイントへの到達で図２に示した設定部１０４の処理により、キャッシュメモリ１２−１の対象エントリの変数値のうち自分の対応ビットを１にセットし、これにより変数値は「００」から「０１」となる。このキャッシュメモリ１２−１の変数値の更新に際し、同じキャッシュブロックを持っているプロセッサ１０−２のキャッシュメモリ１２−２にあっては、キャッシュステートの無効化が行われる。なおキャッシュメモリ１２−１にあっては、該当するキャッシュブロックのキャッシュステートは変更Ｍに更新される。
【００５４】
この図８（Ｂ）のようにプロセッサ１０−１でスピンウェイト状態になると、図４のようにプロセッサ１０−１に設けているスピンウェイト検出部２２がスピンウェイト命令の実行中を検出し、キャッシュメモリ１２−１に対し該当するキャッシュブロックのキャッシュステートが無効Ｉになるか否かの監視を指示する。同時にプロセッサ１０−１に対し例えばスピンウェイトのプログラム実行を停止させる。これにより図８（Ｃ）のように、プロセッサ１０−１はスピンウェイトのプログラム実行を停止した状態となり、一方、プロセッサ１０−２は通常モードでプログラム実行を続けている。
【００５５】
図８（Ｄ）はプロセッサ１０−２が同期ポイントに達したときの処理である。プロセッサ１０−２が同期ポイントに達すると、スピンウェイト命令の実行によりキャッシュメモリ１２−２からスピンウェイト終了条件となる変数値の読み込みを行う。このときキャッシュメモリ１２−２の該当キャッシュブロックは無効Ｉ状態にあることから、キャッシュプロトコルによりプロセッサ１０−１のキャッシュメモリ１２−２から変数値を読み出してキャッシュステートを共有Ｓ状態にした後にプロセッサ１０−２で読み取る。
【００５６】
続いて図８（Ｅ）のように、プロセッサ１０−２は自分に割り当てられているビットを１に書き換えることで変数値を「１１」とする。この変数値の更新により、プログラムの実行停止にあるプロセッサ１０−１のキャッシュメモリ１２−１に対し変数値の無効化が行われ、キャッシュステートはそれまでの共有Ｓから無効Ｉに更新される。このキャッシュメモリ１２−１における無効Ｉへの状態変化を図４のキャッシュメモリ１２−１側に設けている値変更検出部３２で検出すると、プロセッサ１０−１に対し値変更通知を行い、これによって、それまで停止していたプログラムの実行が再開される。
【００５７】
このため、プログラムの実行を再開したプロセッサ１０−１は、図８（Ｆ）でスピンウェイト命令の実行によりキャッシュメモリ１２−１の該当キャッシュブロックの変数値「１１」を読み込み、これによってスピンウェイト終了条件が成立したことを認識する。
【００５８】
このときプロセッサ１２−２側にあっても、変数値「１１」の認識でスピンウェイト終了条件を判定しており、これにより２台のプロセッサ１０−１，１０−２のバリア同期が取られ、図８（Ｇ）のようにスピンウェイトを終了して、次のプログラムの実行処理に移行することになる。
【００５９】
図９は、図４のキャッシュメモリ１２−１側に設けている値変更検出部３２の他の実施形態であり、この実施形態にあってはスピンウェイトの終了条件となっている変数値を格納しているキャッシュブロックに対する他のプロセッサ、あるいは入出力ユニットによる変数値変更のためのバストランザクション（バスリクエスト）を監視して値変更を検出するようにしたことを特徴とする。
【００６０】
図９の値変更検出部３２は、図６と同じ監視対象アドレス記録部４０に対しバストランザクション監視部４４を設けている。プロセッサ側でスピンウェイト命令の実行が開始されると、スピンウェイトで参照しているデータアドレスが監視対象アドレス記録部４０に記録される。
【００６１】
バストランザクション監視部４４は、監視対象アドレスに対する他のプロセッサあるいは入出力ユニットからのバス１４によるトランザクションをバスインタフェースス２８を介して監視しており、監視しているバストランザクションを検出すると、値変更検出信号Ｅ２をキャッシュメモリ制御部２６を経由してプロセッサ側に出力する。このバストランザクションの監視による値変更検出は、スピンウェイトの終了条件となっている変数値の変更を直接検出するものではなく、正確には変数値が変更される可能性があることを検出していると言うことができる。
【００６２】
図１０は、図９のバストランザクションの監視により値変更を検出する場合の本発明の処理手順のタイムチャートである。スピンウェイト検出部２２は、ステップＳ１でプロセッサでのスピンウェイト命令実行中を検出すると、ステップＳ２で、スピンウェイト命令で参照している変数値が格納されているキャッシュブロック、即ちデータアドレスの監視の指示をキャッシュメモリ側の値変更検出部３２に対し行う。
【００６３】
またステップＳ３で、スピンウェイト検出部２２はプロセッサに対しスピンウェイト命令列検出実行を出力して、プロセッサによるスピンウェイト命令の実行を停止させる。
【００６４】
キャッシュメモリ側の値変更検出部３２にあっては、ステップＳ１０１でプロセッサ側から指示されたデータアドレスに対するバストランザクションを監視し、監視対象のキャッシュブロックに対するバストランザクションをステップＳ１０２で検出すると、ステップＳ１０３でバストランザクションによる状態変化（可能性）を値変更検出信号の出力によりプロセッサ側に通知する。これを受けてスピンウェイト検出部２２にあっては、ステップＳ４でプロセッサによるスピンウェイト命令の実行を再開することになる。
【００６５】
次に図３のプロセッサ１０−１〜１０−４としてＳＭＴプロセッサを使用した場合について、スピンウェイト命令実行中のプロセッサに対するプロセッサリソースの割り当てを削減する本発明の他の実施形態を説明する。
【００６６】
図１１は、本発明が適用されるＳＭＴプロセッサの概略構成である。ＳＭＴプロセッサは、命令ポインタ４６−１，４６−２、フェッチ／デコード４８−１，４８−２、実行ユニット５０、リタイヤメントユニット５２、１次命令キャッシュユニット５４、１次データキャッシュユニット５６及び２次キャッシュユニット５８を備えている。このような概略構成を持つＳＭＴプロセッサは、同時に複数スレッドを実行するため通常は命令ポインタを複数持っており、この例では２つの命令ポインタ４６−１，４６−２を持った場合を示している。
【００６７】
この命令ポインタ４６−１，４６−２及びフェッチ／デコード４８−１，４８−２で実現される２つのスレッドの実行にあっては、実行ユニット５０などのリソースをスレッド間で共有することにより、リソースの有効利用率を高めており、これがＳＭＴプロセッサの狙いである。このように複数のスレッドでプロセッサリソースを共有するＳＭＴプロセッサにあっては、次にどのスレッドの命令を実行ユニット５０に割り当てるかを極める方針がいろいろ提案されている。
【００６８】
そこで本発明は、この実行ユニットなどのプロセッサリソースをどのスレッドの命令に割り当てるかを決める方針の決定に利用することができる。具体的には、スピンウェイト実行中のスレッドを検出したら、スピンウェイト命令を実行中のスレッドに対する実行ユニットなどのプロセッサリソースの割り当てを削減もしくは停止する。
これによってスピンウェイトではない、より意味のある命令を実行している他のスレッドの命令を実行ユニットに割り当てる機会が増え、その結果、ＳＭＴプロセッサの処理性能の向上が期待できる。
【００６９】
図１２は、ＳＭＴプロセッサについてスピンウェイトを検出してプロセッサリソースを削減する本発明の処理手順のタイムチャートである。ＳＭＴプロセッサ側のスピンウェイト検出部２２は、ステップＳ１で複数のスレッド内のあるスレッドでスピンウェイト実行中か否かをチェックしており、実行中を検出すると、ステップＳ２に進み、スピンウェイトで参照している変数値が格納されたキャッシュブロックの監視をキャッシュメモリ側の値変更検出部３２に指示する。
【００７０】
またステップＳ３で、スピンウェイト命令を実行中のスレッドの命令を割り当てるプロセッサリソースの削減または停止を行う。具体的には、例えば命令ポインタ４６−１及びフェッチ／デコード４８−１側で実行されるスレッドの命令でスピンウェイト実行中が検出された場合には、このスレッドによる命令の実行ユニット５０に対する割り当てを削減または停止し、スピンウェイト命令以外の命令を実行している命令ポインタ４６−２，フェッチ／デコード４８−２側となる他のスレッドの命令に実行ユニット５０を割り当てる。
【００７１】
キャッシュメモリ側の値変更検出部３２にあっては、ステップＳ１０１でプロセッサ側から指示されたキャッシュブロックのキャッシュステートを監視し、ステップＳ１０２でキャッシュステート即ち状態が無効Ｉに更新されたことを検出すると、ステップＳ１０３でキャッシュブロックの状態変化をプロセッサ側に通知する。
【００７２】
これを受けてスピンウェイト検出部２２側にあっては、ステップＳ４でスピンウェイト命令を実行中のスレッドに対するそれまでのプロセッサリソースの割り当ての削減または停止を解除する。
【００７３】
なお上記の実施形態にあっては、キャッシュプロトコルとしてＭＥＳＩプロトコルを例にとるものであったが、無効Ｉへの更新を含むものであれば適宜のキャッシュプロトコルであってもよい。また上記の実施形態にあっては、スピンウェイト終了条件のための変更値として該当するキャッシュブロックのキャッシュステートの無効化、あるいはこのステートに対するバストランザクションからキャッシュ終了条件となっている変数値を直接または間接的に監視しているが、これ以外の変数値の直接または間接的な監視であっても良いことはもちろんである。
【００７４】
また上記の実施形態にあっては、スピンウェイト実行中を検出した際のプロセッサの動作状態の変更として、低消費電力モードへの変更、プログラムの実行停止、更にはＳＭＴプロセッサにあってはプロセッサリソースの割り当て減少または停止を例に取るものであったが、これ以外に適宜のスピンウェイト命令の実行で生ずる無駄を省くプロセッサの動作状態の変更であれば適宜のものを含む。
【００７５】
また本発明は上記の実施形態に限定されず、その利点と目的を損なうことのない適宜の変形を含む。更に本発明は上記の実施形態に示した数値による限定は受けない。
【図面の簡単な説明】
【００７６】
【図１】従来のスピンロック処理の説明図
【図２】従来のバリア同期処理の説明図
【図３】本発明が適用される共有メモリ型マルチプロセッサシステムのブック図
【図４】本発明によるプロセッサの実施形態のブロック図
【図５】図４におけるスピンウェイト検出部の実施形態ブロック図
【図６】キャッシュブロックを監視する図４における値変更検出部の実施形態のブロック図
【図７】スピンウェイト検出時にキャッシュブロックを監視して値変更を検出する本発明の処理手順のタイムチャート
【図８】本発明による同期処理の説明図
【図９】バストランザクションを監視する図４における値変更検出部の他の実施形態のブロック図
【図１０】本発明によるスピンウェイト検出時にバストランザクションを監視して値変更を検出する本発明の処理手順のタイムチャート
【図１１】本発明が適用されるＳＭＴプロセッサの概略構成のブロック図
【図１２】スピンウェイトを検出してプロセッサリソースを削減する本発明の処理手順のタイムチャート
【符号の説明】
【００７７】
１０：キャッシュメモリインタフェ−ス
１０−１〜１０−４：プロセッサ
１１：プロセッサコア
１２−１〜１２−４：キャッシュメモリ
１４：バス
１６：メインメモリ
１８：入出力ユニット
２２：スピンウェイト検出部
２４：プロセッサインタフェース
２６：キャッシュメモリ制御部
２８：バスインタフェース
３０：キャッシュメモリアレイ
３２：値変更検出部
３４：実行済命令列バッファ
３６：スピンウェイト命令列記録部
３８：比較部３８
４０：監視対象先記録部
４２：キャッシュステート監視部４２
４４：バストランザクション監視部
４６−１，４６−２：命令ポインタ
４８−１，４８−２：フェッチ／デコード
５０：実行ユニット
５２：リタイヤメントユニット
５４：１次命令キャッシュユニット
５６：１次データキャッシュユニット
５８：２次キャッシュユニット
【図１】
0004253796.tif 000002
【図２】
0004253796.tif 000003
【図３】
0004253796.tif 000004
【図４】
0004253796.tif 000005
【図５】
0004253796.tif 000006
【図６】
0004253796.tif 000007
【図７】
0004253796.tif 000008
【図８】
0004253796.tif 000009
【図９】
0004253796.tif 000010
【図１０】
0004253796.tif 000011
【図１１】
0004253796.tif 000012
【図１２】
0004253796.tif 000013