(57)【要約】【課題】複数のＣＰＵで構成するマルチスレッドプロセッサの共有リソースの競合に関し、競合が発生するとき特徴的なイベントパターンが発生することに着目して競合の発生箇所を効率よく特定する検出器および検出方法を提供することを目的とする。【解決手段】本発明のマルチスレッドプロセッサにおける共有リソースの競合検出器は、コマンドの実行において発生するイベントを取得するイベント取得手段と、取得したイベントが予め登録した登録イベントパターンと一致するときカウンタをカウントアップするカウント手段と、カウンタが所定値になったとき、イベントを発生したＣＰＵに割り込みを掛ける割り込み手段とで構成する。【選択図】    図１
2004252670.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵを有するマルチスレッドプロセッサの共有リソースの競合検出器であって、
前記複数のＣＰＵがコマンドの実行によって発生するイベントを取得するイベント取得手段と、
取得した前記イベントと、予め登録したイベントパターンとを比較し、一致したときカウンタをカウントアップするカウント手段と、
前記カウンタのカウント値が所定の値になったとき、一つ以上のＣＰＵに割り込みを掛ける割り込み手段と
を有することを特徴とする共有リソースの競合検出器。
【請求項２】
前記登録したイベントパターンは、イベントと前記イベントに対応付けたイベント発生元であり、
前記割り込み手段は、前記カウンタのカウント値が所定の値になったとき、前記イベント発生元のＣＰＵに割り込みを掛ける
ことを特徴とする請求項１に記載の共有リソースの競合検出器。
【請求項３】
前記割り込み手段は、前記カウンタのカウント値が所定の値になったとき、一つ以上のＣＰＵに割り込みを掛け、前記ＣＰＵに対応したプログラムカウンタの値をサンプリングする
ことを特徴とする請求項１または請求項２に記載の共有リソースの競合検出器。
【請求項４】
前記割り込み手段は、前記カウンタのカウント値が所定の値になったとき、スレッドのスケジューリング処理を行う
ことを特徴とする請求項１または請求項２に記載の共有リソースの競合検出器。
【請求項５】
複数のＣＰＵを有するマルチスレッドプロセッサの共有リソースの競合検出方法であって、
前記複数のＣＰＵがコマンドの実行によって発生するイベント発生パターンを取得するイベントパターン取得手順と、
取得した前記イベント発生パターンと、予め登録した登録イベントパターンとを比較し、一致したときカウンタをカウントアップするカウント手順と、
前記カウンタのカウント値が所定の値になったとき、一つ以上のＣＰＵに割り込みを掛ける割り込み手順と
を有することを特徴とする共有リソースの競合検出方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数の論理ＣＰＵから構成されるマルチスレッドプロセッサにおいて、論理ＣＰＵ間で共有リソースの競合状態を発見するための検出器および検出方法に関する。
【０００２】
【従来の技術】
一般に、マルチプロセッサシステムにおいてプロセッサ間で共有するリソースに対して排他的にアクセスするために、「クリティカルリージョン」と呼ぶプログラム領域を設けることが多い。クリティカルリージョンは、同時に１  つのプロセッサしか実行することができないプログラム領域である。この領域内でプロセッサ間の共有リソースにアクセスすることで、並列プログラムを実行中のデータの整合性を保つ。
【０００３】
実際には、複数のプロセッサを搭載したシステムにおいて、プロセッサがクリティカルリージョンに入って良いかどうか、すなわち他のプロセッサがクリティカルリージョンを走行していないかどうかを判断するために、「スピンロック変数」と呼ぶ変数を設ける。
例えば、スピンロック変数には、
・あるプロセッサがクリティカルリージョンを走行中の場合は「１」
・いずれのプロセッサも走行していない場合は「０」
がセットされる。
【０００４】
この実装では、あるプロセッサがクリティカルリージョンを走行している間に他のプロセッサがクリティカルリージョンに入ろうとした場合には、スピンロッ変数が「０」になるまでスピンロック変数値を繰り返しチェックする必要が生じる。このループ処理を「スピンループ」と呼ぶ。スピンループは、排他制御の簡潔な実装方法として、マルチプロセッサシステム上で動作するソフトウェアにおいて多用されている。
【０００５】
しかし、マルチスレッドプロセッサにおいては大きな間題が発生する（マルチスレッドプロセッサについては、非特許文献１参照）。即ち、ある論理ＣＰＵ上でスピンループしているスレッドが論理ＣＰＵ間で共有している演算リソースを奪ってしまうために、計算処理を行っている他のスレッドの実効性能が大きく低下してしまうことがある（例えば、非特許文献２、３参照）。
【０００６】
また、マルチスレッドプロセッサでは、スピンロックのような演算リソースの奪い合い（競合）だけに留まらず、論理ＣＰＵ間で共有しているその他のリソース（例えば、Ｉｎｔｅｌ製Ｘｅｏｎプロセッサ（非特許文献４参照）の場合であれば、１次２次キャッシュメモリやＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋ−ａｓｉｄｅ  Ｂｕｆｆｅｒ  ）が論理ＣＰＵ間で共有される）  における競合もまた性能低下を招く原因となる（例えば、非特許文献５参照）。
【０００７】
次に、リソースの競合部分の発見について、従来の技術を述べる。
プログラムの実行において、「プログラム中のどの部分で最も時間を消費したか」といった統計情報を採取する作業を性能プロファイリングという。性能プロファイリングを行う最も基本的で広く利用されている手法として、ＰＣサンプリングが挙げられる（例えば、非特許文献６参照）。
【０００８】
ＰＣ（プログラムカウンタ）  サンプリングとは、ある一定間隔ごとにプログラムのどの部分を実行していたかを記録し、プログラム実行後にそれらサンプリングデータについて統計処理を施すことで性能プロファイリングを行う。実際には、イベント計測カウンタとカウンタのオーバフロー割り込みとを組み合わせることでＰＣサンプリングを既存プロセッサ上で実現している。
【０００９】
例えば、Ｉｎｔｅｌプロセッサに搭載されている性能モニタリングカウンタ（例えば、非特許文献５参照）は上記のような機能を有しているイベント計測カウンタである。しかし、従来のイベント計測カウンタを用いた場合では、ある特定のイベント（例えばタイムベースや実行命令数など）によるサンプリングを行うことは可能であるが、スピンループのような複数の命令の動作の組み合せによって引き起こされるイベントを計測することには対応できない。
【００１０】
また、マルチプロセッサ／マルチスレッドプロセッサ向きのイベント計測カウンタが提案されている（例えば、特許文献１、２参照）。しかしこれらの提案は、いずれもプロセッサ上で走行するスレッド別のカウントを可能とするものであったり、すべてのスレッドでの走行時間の合計を記録する、といった機能しか持たない。このような機能を利用したサンプリング測定では、すべてのスレッドが活動している部分を特定することは可能であると考えられるが、性能プロファイリングで重要なのは、すベてのスレッドが活動しているとして、それらがどのような動作（例えばスピンロック）を行っていたかを判断することである。この点において、上記のいずれの手法も、単純に実行された命令数を数えたり、キャッシュミスイベントの発生回数をカウントしたりといった、単一イベントの発生回数をカウントすることしか行うことができず、論理ＣＰＵ間での関連性を考察する上では不十分と言える。
【００１１】
以上の方式の他にも、命令そのものをプロファイルする技術「ＰｒｏｆｉｌｅＭｅ」（例えば、非特許文献７参照）と呼ぶ方法も提案されている。しかし、この方式は、命令一つずつに識別子をセットして命令そのものの実行遅延を測定するものであり、スピンループのような複数の命令から構成されるループ処理をチェックすることはできない。
【００１２】
さらに、ある一定時間毎にプロセッサの動作状態をチェックする「ＷａｔｃｈＤｏｇタイマ」と呼ぶ機能が知られている。この機能を応用すれば、スピンループについては発生場所を特定できる可能性がある。しかし、この手法では、プログラム中に出現するスピンループ以外のループ処理との識別が困難であり、また、検出できたとしても現在スピンループが発生している１箇所を特定するのみで、性能プロファイリングのような統計処理には適用できない。加えて、上記の手法はループ処理に対してのみ利用可能であり、本発明での課題とする共有リソース競合を検出するために応用することは困難である。
【００１３】
なお、ここで論理ＣＰＵについて定義を簡単に行う。マルチスレッドプロセッサ内部には、独立した複数の命令流を制御するために、
（１）命令制御部および命令実行ステートを保持するレジスタ群
（２）上記（１）の間で共有されている演算器等
が存在する。ここでは独立した命令流を実行する上で必要となる（１）と（２）の組合せを論理ＣＰＵと呼ぶこととする。一方、物理的なプロセッサ全体のことを「物理ＣＰＵ」と呼ぶこととする。
【００１４】
また、「スレッド」とはＯＳあるいはハードウェアで認識できる実行コンテキストを持つ一連の実行命令列のこととする。
【００１５】
【非特許文献１】
”Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ：  Ｍａｘｉｍｉｚｉｎｇ  Ｏｎ−Ｃｈｉｐ  Ｐａｒａｌｌｅｌｉｓｍ”，  Ｄｅａｎ  Ｍ．Ｔｕｌｌｓｅｎ，Ｓｕｓａｎ  Ｊ．Ｅｇｇｅｒｓ，ａｎｄ  Ｈｅｎｒｙ  Ｍ．Ｌｅｖｙ，Ｉｎ  Ｐｒｏｃ．  ｏｆ  ２２ｎｄ  Ａｎｎｕａｌ  Ｉｎｔｅｒｎａ−ｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ，ｐｐ．３９２−４０３，Ｊｕｎｅ  １９９５．
【００１６】
【非特許文献２】
”Ｕｓｉｎｇ  Ｓｐｉｎ−Ｌｏｏｐｓ  ｏｎ  Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ４  Ｐｒｏｃｅｓｓｏｒ  ａｎｄ  Ｉｎｔｅｌ  Ｘｅｏｎ  ＰｒｏｃｅｓｓｏｒＶｅｒｓｉｏｎ  ２．１”，Ｍａｙ  ２００１，Ｏｒｄｅｒ  Ｎｕｍｂｅｒ  ２４８６７４−００２．
【００１７】
【非特許文献３】
”Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ｎｅｘｔ  Ｇｅｎｅｒａｔｉｏｎ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ：Ｈｙｐｅｒ−Ｔｈｒｅａｄｉｎｇ  Ｔｅｃｈ−ｎｏｌｏｇｙ”，ｈｔｔｐ：／／ｗｗｗ．ｉｎｔｅｌ．ｃｏｍ／ｔｅｃｈｎｏｌｏｇｙ／ｈｙｐｅｒｔｈｒｅａｄ／ｉｎｔｒｏ  ｎｅｘｇｅｎ／．
【００１８】
【非特許文献４】
”Ｈｙｐｅｒ−Ｔｈｒｅａｄｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ａｎｄ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ”，Ｄｅｂｏｒａｈ  Ｔ．Ｍａｒｒ，  ｅｔ  ａｌ．，Ｉｎｔｅｌ  Ｔｅｃｈｎｏｌｏｇｙ  Ｊｏｕｒｎａｌ，Ｖｏｌｕｍｅ．６，Ｉｓｓｕｅ．１，Ｆｅｂｒｕ−  ａｒｙ  ２００２．
【００１９】
【非特許文献５】
”ＩＡ−３２  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ３  Ｓｙｓｔｅｍ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｇｕｉｄｅ”，Ｓｅｐｔｅｍｂｅｒ，２００２，Ｏｒｄｅｒ  Ｎｕｍｂｅｒ  ２４５４７２−００９，  ｐ．７−４０．
【００２０】
【非特許文献６】
”Ｍｅａｓｕｒｉｎｇ  Ｃｏｍｐｕｔｅｒ  Ｐｅｒｆｏｒｍａｎｃｅ  Ａ  Ｐｒａｃｔｉｔｉｏｎｅｒ’ｓ  Ｇｕｉｄｅ”，Ｄａｖｉｄ  Ｊ．Ｌｉｌｊａ，Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖｅｒｓｉｔｙ  Ｐｒｅｓｓ，Ｎｅｗ  Ｙｏｒｋ，ＮＹ，２０００．
【００２１】
【非特許文献７】
”ＰｒｏｆｉｌｅＭｅ：  Ｈａｒｄｗａｒｅ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｉｎｓｔｒｕｃｔｉｏｎ−Ｌｅｖｅｌ  Ｐｒｏｆｉｌｉｎｇ  ｏｎ  Ｏｕｔ−ｏｆ−Ｏｒｄｅｒ  Ｐｒｏｃｅｓｓｏｒｓ”，Ｊｅｆｆｒｅｙ  Ｄｅａｎ，Ｊａｍｅｓ  Ｅ．Ｈｉｃｋｓ，Ｃａｒｌ  Ａ．Ｗａｌｄｓｐｕｒｇｅｒ，ＷｉｌｌｉａｍＥ．Ｗｅｉｈｌ，Ｇｅｏｒｇｅ  Ｃｈｒｙｓｏｓ，Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ，１９９７
【００２２】
【特許文献１】
特開平１０−２７５１００号公報（第１頁、図１）
【００２３】
【特許文献２】
特開平９−２３７２０３号公報（第１頁）
【００２４】
【発明が解決しようとする課題】
前述のように、マルチスレッドプロセッサにおいては、ある論理プロセッサ上でのプログラムの実行速度は、他の論理プロセッサ上でのプログラムの動作状況に大きな影響を受ける。特に、一方の論理プロセッサ上でスピンループが実行されていた場合には、他方の論理プロセッサ上におけるプログラムの実効性能が大きく低下してしまう可能性がある。しかし、このようなスピンループがプログラム実行中の何時、どの部分で発生しているかを検出することはこれまで困難であると考えられていた。
【００２５】
また、マルチスレッドプロセッサ内部に装備されている共有リソース（  例えばキャッシュメモリ）  において、各論理ＣＰＵ間で頻繁に競合が発生する場合には、大幅な性能低下を招く危険がある。しかし、このような競合が頻繁に発生していると考えられる場所を特定することもまた困難であつた。
マルチスレッドプロセッサの性能を十分に発揮するためには、上記のような性能劣化の要因となるスピンループおよび共有リソースでの競合を簡単、かつ的確に発見することが課題である。
【００２６】
【課題を解決するための手段】
上記課題を解決するため、本発明のマルチスレッドプロセッサにおける共有リソースの競合検出器は以下のように構成される。
（１）第１の発明
第１の発明の原理を図１を用いて説明する。本発明の検出器は、イベント取得手段１、カウント手段２および割り込み手段３から構成する。
【００２７】
イベント取得手段１は、マルチスレッドプロセッサの中で実行中の複数のＣＰＵ（論理ＣＰＵ）からコマンドの実行に伴って発生するイベント（実行したイベントの種類）を取得する。
カウント手段２は、取得したイベントが予め登録してあるイベントパターンと比較して等しいときカウンタのカウントアップを行う。例えば、登録してあるイベントパターンが、イベントＡ、イベントＢ、イベントＣの順に登録してあるとき、イベント取得手段１で取得したイベントの順序とイベントの種類が登録のイベントパターンと同一であればカウンタを１つカウントアップするものである。
【００２８】
割り込み手段３は、カウント手段２によってカウントアップされたカウント値が所定の値となったとき、共有リソースの競合が発生したと判断してイベントを発生しているＣＰＵに割り込みを掛けることを行う。
第１の発明は、論理ＣＰＵ間で共有リソースの競合が起こった場合に、特徴的なイベントパターンが発生することに着目して競合の発生していることを検出するものである。本発明の構成は前述のとおりであるが、本発明を図２のように模式的に示すことができる。図２の論理ＣＰＵｘで実行中のプログラムの命令は、例えば既存のＩｎｔｅｌ製プロセッサにおける命令セットアーキテクチャを用いて図３の（ａ）に示されるようなものである。また図２の登録したイベントパターン内のイベントは同様にＩｎｔｅｌ製プロセッサの性能モニタリング用イベントを用いて示している。図３（ａ）のプログラムを実行することにより発生するイベントは、図３の（ｂ）に示されるもので、このイベントと登録したイベントパターンとを比較し、一致した場合にはカウンタをインクリメントする。カウンタ値が所定の値になった場合にイベントを発生しているＣＰＵ＃ｘに割り込みを発生させる。
【００２９】
第１の発明によれば、マルチスレッドプロセッサにおける共有リソース競合の発生を検知できる。
（２）第２の発明
登録するイベントパターンは、イベントとこのイベントに対応付けてイベント発生元（スピンループを発生している論理ＣＰＵ）とするものである。これにより、論理ＣＰＵ間での競合状態を検出することが可能となる。例えば、図４（ａ）のように、論理ＣＰＵ＃０がキャッシュミスを発生した直後に、論理ＣＰＵ＃１がキャッシュミスを発生させた場合には互いにキャッシュメモリヘのアクセスについて競合状態にある可能性が高い。このようにイベントの発生元を特定することで、共有リソースでの競合がプログラム実行時のどの部分において発生し、悪影響を及ぼしているかを判断することができる。例えば論理ＣＰＵ＃０と論理ＣＰＵ＃１は、図４（ｂ）に示すイベントを発生することが予想され、これをイベントパターンとして登録しておく。
（３）第３の発明
割り込み手段において、カウンタが所定値になったとき、即ち共有リソースの競合状態を検出したとき、論理ＣＰＵの割り込みを掛けると共に当該論理ＣＰＵのプログラムカウンタの値をサンプリングするものである。これにより、プログラムのどの部分で他方の論理ＣＰＵでスピンループが発生していたか、というＰＣサンプリングによるプロファイリングを行うことができる。
（４）第４の発明
割り込み手段において、カウンタが所定値になったとき、即ち共有リソースの競合状態を検出したとき、競合を発生している当該スレッドとは別の実行状態にあるスレッドを優先的にスケジューリングする。または、競合を発生する原因となっているスレッドの実行を休止（停止）させる。これにより、共有リソース競合の発生を抑えることができる。
（５）第５の発明
本発明の共有リソースの検出方法、イベント取得手順、カウント手順および割り込み手順から構成する。イベント取得手順は、マルチスレッドプロセッサの中で実行中の複数の論理ＣＰＵからコマンドの実行に伴って発生するイベントを取得する。カウント手順は、取得したイベントが予め登録してあるイベントパターンと比較して等しいときカウンタのカウントアップを行う。割り込み手順は、カウント手順によってカウントアップされたカウント値が所定の値となったとき、そのイベントを発生しているＣＰＵに割り込みを掛けることを行う。これにより、マルチスレッドプロセッサにおける共有リソース競合の発生を検知できる。
【００３０】
【発明の実施の形態】
次に、本発明について図面を参照して実施形態を説明する。
（実施形態その１）
実施形態その１は、２  つの論理ＣＰＵで構成されたマルチスレッドプロセッサにおいて、一方の論理ＣＰＵが５つの関数（Ａ，Ｂ，Ｃ，Ｄ，Ｅ）から構成されているプログラムを実行しているものとする。このとき、当該プログラムのどの部分が、論理ＣＰＵ＃１上で実行されたスピンループの影響を受けているかを検出する例を示す。
【００３１】
図５に、本発明のリソース競合の検出機能を有するマルチスレッドプロセッサの基本的な構成を示す。この例は、論理ＣＰＵが２つで構成されているマルチスレッドプロセッサである。各構成要素は、プログラム４０からコマンド取り出す命令フェッチユニット１１、スレッドを制御する命令シーケンサ１２、演算器を選択するＳＵ１３、算術／論理演算ユニットであるＡＬＵ１４、浮動小数点加算器のＦＰＡ１５、乗算器ＦＰＭ１６、割算器ＦＰＤ１７、ロ一ドストアユニットＬＤ／ＳＴ１８、命令シーケンサ１２に対応したレジスタセットＲＥＧ２０、命令の終了処理を行うＲｅｔｉｒｅｍｅｎｔ  Ｕｎｉｔ１９、リソースの競合を検出するイベント比較ユニット３０から成る。本発明の中心は、イベント比較ユニット３０にあるので、マルチスレッドプロセッサを構成する上での他の部分については省略してある。
【００３２】
イベント比較ユニットは、イベントパターンを格納するレジスタＰＴＲＮ  ＲＥＧＩＳＴＥＲＳ３５を持ち、ここに検出すべきイベントパターンが登録されている。この例の場合、最大６個のイベント発生シーケンスを検出することができ、イベント発生元とイベントとを登録している。イベント比較ユニット内部には、ＰＴＲＮ  ＩＮＤＥＸ  ＲＥＧＩＳＴＥＲ３４があり、これを用いてＰＴＲＮＲＥＧＩＳＴＥＲＳ３５内のどのイベントを現在比較しているかを示す。発生したイベントは、イベントフェッチユニット３１を通してイベント比較ユニットに投入され、登録されたイベントパターンと比較器３２で比較される。一致した場合は、カウンタ３３をカウントアップし、カウンタ３３がオーバーフローしたとき、競合が発生したと判断して割り込み信号を発生させる。カウンタ３３は例えば４０ビットで構成する。
【００３３】
また図５には、スピンループを行うプログラム４０の例を表示している。このプログラムが論理ＣＰＵ＃１で実行されているとし、この場合、図５のイベント発生パターンのようなシーケンスでイベントが発生する。この実施例では、図６のように論理ＣＰＵ＃１で発生したカウンタのオーバフロー割り込みを論理ＣＰＵ＃０に発生させることにする。そして、論理ＣＰＵ＃０に対して割り込みが発生した時に実行される割り込みハンドラ内部でＰＣサンプリングを行う。同時に、従来の技術で実現可能なタイムベース（クロックベース）  および実行完了命令数べ一スでのＰＣサンプリングも行うこととする。
【００３４】
次に、実施形態その１の処理フローについて図７をもとに説明する。まず、カウンタ３３のカウント値ＣＮＴ、および登録したイベントパターンの項目番号Ｉを初期化のため「０」にセットしておく。ＣＰＵ＃１でプログラム４０のコマンドを実行し、その実行にともなって発生するイベントをイベントフェッチユニット３１から取得する。（Ｓ１１〜Ｓ１４）。
【００３５】
登録のイベント項目番号Ｉをカウントアップし、取得したイベントがＩ番目の登録イベントパターンと一致するかを調べ、一致すればそれが６番目のイベントかどうかを調べる。６番目のイベントであれば６個の発生シーケンスからなる登録イベントパターンと一致したことになるので、カウンタ値”ＣＮＴ”をカウントアップする。次にカウンタがオーバーフローしていなければ、Ｓ１２に戻りイベントの取得を行うことを繰り返す。６番目のイベントでなかった場合もＳ１２に戻りイベントの取得の繰り返しを行う。（Ｓ１５〜Ｓ１９）。
【００３６】
カウンタ３３がオーバーフローした場合に競合発生と判断し、ＣＰＵ＃０に割り込みを掛けるとともにレジスタセットＲＥＧ２０の一つであるＰＣカウンタの値をサンプリングする。（Ｓ２０）。
図８にＰＣサンプリングの結果例を示す。これは、１ＧＨｚで動作するＣＰＵにおいて論理ＣＰＵ＃０で１秒間ＰＣサンプリングを行った結果である。図７には、従来の（ａ）タイムベース（クロックベース）  サンプリングを行った場合、（ｂ）実行完了命令数べ一スによるサンプリングを行った場合、（ｃ）スピンロック検出イベントによるサンプリングを行った場合のそれぞれについて、ＰＣサンプリングによる各関数の出現比率を示したものである。簡単のため、イベントサンプリングは、各イベントが発生するたびに行われるものとする。
【００３７】
（ａ）、（ｂ）は、従来のイベント計測カウンタによるプロファイリング結果である。通常ソフトウェア開発者は、（ａ）のプロファイリング結果から、関数Ｃが最も多くの時間を費やしているので、これが性能向上のボトルネックとなっていると判断する。この場合、関数ＣのＣＰＩ（Ｃｙｃｌｅｓ  Ｐｅｒ  Ｉｎｓｔｒｕｃｔｉｏｎｓ）は、
【００３８】
【数１】
2004252670.tif 000003
【００３９】
となる。ここで、（ｃ）より論理ＣＰＵ＃０が関数Ｃを実行中に、論理ＣＰＵ＃１においてスピンロックが
【００４０】
【数２】
2004252670.tif 000004
【００４１】
回発生していることがわかる。検出される１つのスピンロックは６命令から構成されているので、総計
【００４２】
【数３】
2004252670.tif 000005
【００４３】
命令が論理ＣＰＵ＃１においてスピンロックのために実行されたこととなる。したがって、大まかにいえば、論理ＣＰＵ＃１でスピンロック処理が行われていないと仮定すると、論理ＣＰＵ＃０での実行命令数がＩｓ増えることが期待できる。したがって、スピンロックの影響を取り除いた関数ＣのＣＰＩは、
【００４４】
【数４】
2004252670.tif 000006
【００４５】
となり、関数Ｃについては約３２％の高速化が見込める。
このように、本発明によりスピンロックの影響を受けて実行時間が大幅に増加している部分を検出することが可能となる。
（実施形態その２）
２つの論理ＣＰＵで構成されたマルチスレッドプロセッサにおいて、論理ＣＰＵ上で実行されているスピンループを検出し、それに対応してスレッドスケジューリングを行うことでプロセッサの実効性能を向上するシステム例を示す。
【００４６】
図９にスレッドスケジューリングを行うマルチスレッドプロセッサの構成例を示す。図９の構成要素は図５と同様で、イベント比較ユニット３０からスケジューリングユニット１３および命令シーケンサ１２に対して比較結果を転送するためのデータパスが設けられている。
ここで、論理ＣＰＵ＃０においては通常の計算処理を行うスレッド、また論理ＣＰＵ＃１においてスピンロックを行うスレッドが実行されるものとする。このとき、それぞれのスレッドに含まれる命令は対応する命令シーケンサＡおよびＢから発行される。
【００４７】
通常時、スケジューリングユニット１３は２つの命令シーケンサから発行された命令を、同一優先度の基で実行ユニットに対して投入するものとする。ここで、イベント比較ユニット３０によってスピンロックが検出された場合には、スピンロックを実行しているスレッドよりも、他方スレッドを優先的にスケジューリングする。すなわち、スピンロックを行う命令シーケンサＢから発行された命令よりも、命令シーケンサＡが発行した命令を優先的に実行ユニットに投入する。
【００４８】
本発明により、上記のようなプログラムの実行状況に対応した動的な命令スケジューリング装置が実現可能であり、マルチスレッドプロセッサの命令実効性能を向上させることができる。
（付記１）  複数のＣＰＵを有するマルチスレッドプロセッサの共有リソースの競合検出器であって、
前記複数のＣＰＵがコマンドの実行によって発生するイベントを取得するイベント取得手段と、
取得した前記イベントと、予め登録したイベントパターンとを比較し、一致したときカウンタをカウントアップするカウント手段と、
前記カウンタのカウント値が所定の値になったとき、前記イベントを発生したＣＰＵに割り込みを掛ける割り込み手段と
を有することを特徴とする共有リソースの競合検出器。
【００４９】
（付記２）    前記登録したイベントパターンは、イベントと前記イベントに対応付けたイベント発生元であり、
前記割り込み手段は、前記カウンタのカウント値が所定の値になったとき、前記イベントを発生したＣＰＵ、または登録した前記イベント発生元のＣＰＵに割り込みを掛ける
ことを特徴とする付記１に記載の共有リソースの競合検出器。
【００５０】
（付記３）  前記割り込み手段は、前記カウンタのカウント値が所定の値になったとき、前記イベントを発生したＣＰＵに割り込みを掛け、プログラムカウンタの値をサンプリングする
ことを特徴とする付記１または付記２に記載の共有リソースの競合検出器。
（付記４）  前記割り込み手段は、前記カウンタのカウント値が所定の値になったとき、スレッドのスケジューリング処理を行う
ことを特徴とする付記１または付記２に記載の共有リソースの競合検出器。
【００５１】
（付記５）  複数のＣＰＵを有するマルチスレッドプロセッサの共有リソースの競合検出方法であって、
前記複数のＣＰＵがコマンドの実行によって発生するイベント発生パターンを取得するイベントパターン取得手順と、
取得した前記イベント発生パターンと、予め登録した登録イベントパターンとを比較し、一致したときカウンタをカウントアップするカウント手順と、
前記カウンタのカウント値が所定の値になったとき、前記イベント発生パターンを発生したＣＰＵに割り込みを掛ける割り込み手順と
を有することを特徴とする共有リソースの競合検出方法。
【００５２】
（付記６）  前記登録したイベントパターンは、イベントと前記イベントの発生時間間隔である
ことを特徴とする付記１または付記２に記載の共有リソースの競合検出器。
（付記７）  前記割り込み手段は、前記カウンタのカウント値が所定の値になったとき、前記イベントを発生したＣＰＵを一時停止するように割り込みを掛ける
ことを特徴とする付記１、付記２または付記６に記載の共有リソースの競合検出器。
【００５３】
【発明の効果】
本発明は、マルチスレッドプロセッサにおいて、イベント発生パターンを認識することができるカウンタを使用することで、特徴的なイベント発生パターンを持つスピンループによる演算リソース競合やキャッシュメモリの利用競合、といった論理ＣＰＵ間での共有リソースの奪い合いが発生する場所を効率的に特定することが可能となる。この情報は、マルチスレッドプロセッサ上で動作するプログラムの最適化を行う技術をサポートする。
【図面の簡単な説明】
【図１】本発明の原理図である。
【図２】第１の発明の模式図である。
【図３】スピンループ実装プログラム例と発生したイベントパターン例である。
【図４】キャッシュメモリアクセスにおける競合の検出例である。
【図５】実施形態その１の構成例である。
【図６】イベント発生元の識別による競合検出例である。
【図７】実施形態その１のフロー例である。
【図８】ＰＣサンプリング例である。
【図９】実施形態その２の構成例である。
【符号の説明】
１：イベント取得手段
２：カウント手段
３：割り込み手段
１０：マルチスレッドプロセッサ
１１：命令フェッチユニット
１２：命令シーケンサ
１３：選択ユニット
１４：算術／論理演算ユニット
１５：浮動小数点加算機
１６：乗算器
１７：割算器
１８：ロード／ストアユニット
１９：リタイアメントユニット
２０：レジスタセット
３０：イベント比較ユニット
３１：イベントフェッチユニット
３２：比較器
３３：カウンタ
３４：パターン索引レジスタ
３５：パターンレジスタ
【図１】
2004252670.tif 000007
【図２】
2004252670.tif 000008
【図３】
2004252670.tif 000009
【図４】
2004252670.tif 000010
【図５】
2004252670.tif 000011
【図６】
2004252670.tif 000012
【図７】
2004252670.tif 000013
【図８】
2004252670.tif 000014
【図９】
2004252670.tif 000015