(57)【要約】【課題】同時に多数のスレッドを実行する演算処理装置において、キャッシュミスやＴＬＢミスの発生回数を削減し、プログラムの実行性能を向上させる。【解決手段】ループ状に配した複数のゲートの情報を保持し、ゲートの状態を第１の状態にするとき、そのゲートに対して１つ後に配したゲートの状態を第２の状態にし、第２の状態にしたゲートに対する状態の読み出しの最初の要求から所定の時間が経過したとき、そのゲートの状態を第１の状態にするスレッド進行制御部から、複数のスレッドで処理を実行するコアが、各スレッドで一定処理毎に、１つのゲートを指定してゲートの状態を読み出し、指定したゲートの状態が第１の状態であれば次の処理を実行し、第１の状態でなければ第１の状態になるまで次の処理の実行を待機する。【選択図】図１
2015055994.tif 000002
【特許請求の範囲】
【請求項１】
ループ状に配した複数のゲートの情報を保持し、前記ゲートの状態を第１の状態にするとき、前記第１の状態にするゲートに対して１つ後に配した前記ゲートの状態を第２の状態にし、前記第２の状態にしたゲートに対する状態の読み出しの最初の要求から所定の時間が経過したとき、前記要求で指定された前記ゲートの状態を前記第１の状態にする進行制御部と、
複数のスレッドで処理を実行し、各スレッドで一定処理毎に、前記複数のゲートの内の１つの前記ゲートを指定して前記進行制御部からゲートの状態を読み出し、指定した前記ゲートの状態が前記第１の状態であれば次の処理を実行し、指定した前記ゲートの状態が前記第１の状態でなければ第１の状態になるまで次の処理の実行を待機する命令実行部とを有することを特徴とする演算処理装置。
【請求項２】
前記進行制御部は、
前記第２の状態にしたゲートに対する状態の読み出しの最初の要求からカウント動作を開始するカウンタを有し、
前記カウンタの値が所定の値になったとき、前記要求で指定された前記ゲートの状態を前記第１の状態にすることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記進行制御部は、
前記第２の状態にしたゲートに対する状態の読み出しの最初の要求から所定の時間が経過する前に、前記要求で指定されたゲートに対して１つ前に配した前記ゲートに対する状態の読み出しの要求があった場合、前記要求で指定された前記ゲートの状態を前記第１の状態にするまでの期間を延長することを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
複数のスレッドで処理を実行する命令実行部を有する演算処理装置の制御方法において、
前記演算処理装置の進行制御部が、ループ状に配した複数のゲートの情報を保持し、前記ゲートの状態を第１の状態にするとき、前記第１の状態にするゲートに対して１つ後に配した前記ゲートの状態を第２の状態にし、前記第２の状態にしたゲートに対する状態の読み出しの最初の要求から所定の時間が経過したとき、前記要求で指定された前記ゲートの状態を前記第１の状態にし、
前記命令実行部が、各スレッドで一定処理毎に、前記複数のゲートの内の１つの前記ゲートを指定して前記進行制御部からゲートの状態を読み出し、指定した前記ゲートの状態が前記第１の状態であれば次の処理を実行し、指定した前記ゲートの状態が前記第１の状態でなければ第１の状態になるまで次の処理の実行を待機することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、プロセッサのコアの数を増やすことによりプロセッサの性能を向上させる方法が一般的になっており、１つのプロセッサが有するコア数が増加している（マルチコア化）。また、１つのコアで複数のスレッドを同時に実行可能なＳＭＴ（Simultaneous Multi-threading Technology）等の技術の採用も進んでいる（マルチスレッド化）。マルチコア化、マルチスレッド化が進展することにより、プロセッサ上で同時に実行されるスレッド数は増加する傾向にある。
【０００３】
同時に多数のスレッドを実行するプロセッサにおいて、キャッシュミスやＴＬＢ（Translation Look-aside Buffer）ミスが頻繁に発生すると、プログラムの実行性能は著しく低下する。例えば、プログラムの実行により同時にアクセスするメモリ領域（ページ）の数がＴＬＢエントリ数以下であれば、そのメモリ領域にアクセスをしている間にＴＬＢミスは発生しない。しかし、同時にアクセスするメモリ領域（ページ）の数がＴＬＢエントリ数を超えると、ＴＬＢミスが頻繁に発生する（ＴＬＢスラッシング）。
【０００４】
同時に多数のスレッドを実行するプロセッサでは、キャッシュメモリやＴＬＢは、複数のスレッドで共有される。そのため、複数のスレッドをデータ並列で使用する場合、キャッシュメモリやＴＬＢの構成を考慮した適切な割り当てで各スレッドに対するデータの割り当てを行わないと、キャッシュミスやＴＬＢミスの発生回数が増加する可能性がある。例えば、図１０（Ａ）に示すプログラムを、スレッド１〜スレッド４の４つのスレッドで並列して処理を実行する場合、ある時間内に各スレッドによりアクセスする箇所は、図１０（Ｂ）に矢印で示すように、ブロック（Ｂｌｏｃｋ）割り当てでは分散し、サイクリック（Ｃｙｃｌｉｃ）割り当てでは集中する。つまり、サイクリック割り当てでデータをスレッド１〜スレッド４に割り当てないと、キャッシュミスやＴＬＢミスの発生頻度が高くなる。
【０００５】
また、同時に多数のスレッドを実行するプロセッサは、実行モデルとしてＳＩＭＤ（Single Instruction Multiple Data）ではなく、ＳＰＭＤ（Single Program Multiple Data）を採用している。ＳＩＭＤは、スレッド間の同期を頻繁にとる必要があり、スレッド数が多くなると同期コストが大きくなり、その結果、プログラムの実行性能が低下してしまう。一方、ＳＰＭＤは、スレッド間の同期をとる必要がないため、実行準備の整ったスレッドをデータの順番とは無関係に実行させることにより、プロセッサのコアの空き時間（何も実行していない時間）を少なくすることができる。
【０００６】
複数のスレッドを並列実行するコンピュータにおいて、現行スレッドが同期点に達したときに、現行スレッドによりデータが参照される参照スレッドが同期点に達していない場合に、参照スレッドが同期点に到達するまでの現行スレッドの待機時間、及び参照スレッドの同期点でのデータを参照せずに現行スレッドが処理を行った場合の品質差分の大きさに応じて、現行スレッドの進行を制御する技術が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２００９／０９０９６４号
【特許文献２】特開２００３−１０８３９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
同時に多数のスレッドを実行するプロセッサでは、実行モデルとしてＳＰＭＤを採用しているため、進行の速いスレッドと進行の遅いスレッドとが存在しうる。スレッド間の進行差が大きくなると、サイクリック割り当てのような適切な割り当てで各スレッドのデータの割り当てを行っていても、ある時間内に各スレッドによりアクセスするメモリ箇所が分散し、キャッシュミスやＴＬＢミスの発生回数が増加する可能性がある。キャッシュミスやＴＬＢミスの発生回数が増加した場合、プロセッサにおけるプログラムの実行性能が低下してしまう。
【０００９】
スレッド間の進行差が大きくならないように全スレッド間で同期をとることにより、スレッド間の進行差によるキャッシュミスやＴＬＢミスの発生を抑制することは可能であるが、全スレッド間で同期をとると同期コストが大きくなる。また、同時に多数のスレッドを実行するプロセッサでは、図１１に例示するようにソフトウェアスレッドが状態遷移する。待機状態（Ｗａｉｔｉｎｇ状態）のスレッドは、Ａｃｔｉｖｅプールに空きが発生すると実行状態（Ａｃｔｉｖｅ）に遷移する。実行状態（Ａｃｔｉｖｅ）のスレッドは、ハードウェアスレッドへの割り当てを頻繁に切り替えて実行される。そして、実行状態（Ａｃｔｉｖｅ）のスレッドは、処理の実行が完了すると完了状態（Ｄｏｎｅ状態）に遷移する。このように、同時に多数のスレッドを実行するプロセッサにおいては、全スレッドが同時に実行状態であるアクティブ（Ａｃｔｉｖｅ）状態にならないことが多く、プログラムの実行が停止する可能性があるために、全スレッド間で同期をとることはできない。
【００１０】
１つの側面では、本発明の目的は、同時に多数のスレッドを実行する演算処理装置において、キャッシュミスやＴＬＢミスの発生回数を削減し、演算処理装置のプログラムの実行性能を向上させることにある。
【課題を解決するための手段】
【００１１】
演算処理装置の一態様は、ループ状に配した複数のゲートの情報を保持し、ゲートの状態を第１の状態にするとき、そのゲートに対して１つ後に配したゲートの状態を第２の状態にし、第２の状態にしたゲートに対する状態の読み出しの最初の要求から所定の時間が経過したとき、そのゲートの状態を第１の状態にする進行制御部と、複数のスレッドの各々で一定処理毎に、１つのゲートを指定して進行制御部からゲートの状態を読み出し、指定したゲートの状態が第１の状態であれば次の処理を実行し、第１の状態でなければ第１の状態になるまで次の処理の実行を待機する命令実行部とを有する。
【発明の効果】
【００１２】
発明の一態様においては、実行状態になっているスレッドで進行の速いスレッドの次の処理の実行を遅らせることによりスレッド間の進行差の拡大を防ぐことができ、キャッシュミスやＴＬＢミスの発生回数を削減し、演算処理装置のプログラムの実行性能を向上させることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態におけるスレッド進行制御機構の構成例を示す図である。
【図２】本実施形態における演算処理装置の構成例を示す図である。
【図３】本実施形態におけるスレッドの処理の例を示す図である。
【図４】本実施形態における進行制御ルーチンを説明するための図である。
【図５】本実施形態におけるゲートの状態移行の例を示す図である。
【図６】本実施形態における動作例を示す図である。
【図７】本実施形態における状態遷移の例を示す図である。
【図８】本実施形態における状態遷移の他の例を示す図である。
【図９】本実施形態における状態遷移の他の例を示す図である。
【図１０】スレッドに対するデータの割り当ての例を示す図である。
【図１１】ソフトウェアスレッドの状態遷移を示す図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態を図面に基づいて説明する。
本発明の実施形態における演算処理装置は、実行状態（Ａｃｔｉｖｅ状態）になっている複数のスレッド間の進行差を許容できる範囲内に収めるようにスレッドの進行を制御する。そこで、本実施形態における演算処理装置は、ループ状に配した複数（２つ以上）のゲートを用意し、実行状態にある複数のスレッドの各々で一定処理毎にゲートを指定してゲートの状態を読み出す。各スレッドでは、指定するゲートを順番に循環するように一定処理毎に切り替える。
【００１５】
各スレッドは、指定したゲートの状態が開状態（Ｏｐｅｎｅｄ状態）であれば次の処理を実行でき、指定したゲートの状態が開状態でなければ開状態になるまで次の処理の実行を待機する。また、各ゲートは、閉状態（Ｃｌｏｓｅｄ状態）に移行した後、最初に状態を読み出すためのアクセスを受けてから一定時間が経過するまで開状態に移行しない。このようにゲートによってスレッドでの処理の進行を制御して、進行の速いスレッドを適宜遅延させ、進行の速いスレッドと進行の遅いスレッドの進行差が拡大するのを抑える。
【００１６】
なお、各ゲートは、１つ前に配されたゲートの状態が開状態になったら閉状態に移行する。言い換えれば、ゲートの状態を開状態にするとき、それに対して１つ後に配されたゲートの状態を閉状態にする。例えば、ゲート数が２つ（ゲート０及びゲート１）の場合、ゲート０が開状態になったらゲート１が閉状態になり、ゲート１が開状態になったらゲート０が閉状態になる。また、ゲート数が３つ以上（ゲート０、ゲート１、ゲート２、ゲート３、・・・）の場合、ゲート０が開状態になったらゲート１が閉状態になり、ゲート１が開状態になったらゲート２が閉状態になり、ゲート２が開状態になったらゲート３が閉状態になる。
【００１７】
図１は、本実施形態における演算処理装置としてのプロセッサが有するスレッド進行制御機構の構成例を示す図である。スレッド進行制御部１１は、複数のコア１２とバス１３を介して通信可能に接続されている。プロセッサが有する命令実行部としてのコア１２は、それぞれが複数のスレッドを実行する。なお、スレッド進行制御部１１とコア１２とを接続するものはバス１３に限らず、接続形態は何であっても良く、例えばクロスバー等であっても良い。
【００１８】
スレッド進行制御部１１は、ゲート管理部（Gate Management Unit）１４、カウンタ制御部（Counter Control Unit）１５、及びゲート状態保持部１６を有する。ゲート状態保持部１７は、各ゲートの状態を保持するテーブル１７と各ゲートに対応するカウンタ１８とを有する。図１には、Ｎ個（Ｎは２以上の整数）のゲートを用意した例を示している。
【００１９】
ゲート管理部１４は、各ゲートの状態を保持するテーブル１７を管理する。また、ゲート管理部１４は、コア１２で実行しているスレッドからのゲート状態の読み出し要求を受けると、要求において指定されたゲートの状態をテーブル１７より取得し、要求元のスレッドに対して返す。
【００２０】
ここで、ゲートの状態は、開状態（Ｏｐｅｎｅｄ状態）、閉状態（Ｃｌｏｓｅｄ状態）、及び切替状態（Ｃｈａｎｇｉｎｇ状態）の３状態とし、各ゲートの初期状態は閉状態とする（図１に示した例は、初期状態からゲート０を開状態にした後を示している）。開状態は、そのゲートに対してアクセスしたスレッドが次の処理に進める状態である。ゲート管理部１４は、あるゲートを開状態に移行させるとき、開状態に移行させるゲートの次のゲートを閉状態に移行させる。ゲート管理部１４は、閉状態に移行させたゲートに対するアクセスをスレッドから受けると、ゲートを閉状態から切替状態に移行させる。ゲート管理部１４は、切替状態のゲートに対応するカウンタ１８の値が所定の値（図１に示す例では０）になると、ゲートを切替状態から開状態に移行させる。
【００２１】
すなわち、ゲート管理部１４は、図５（Ａ）に示すように、ゲート（ｉ−１）を開状態に移行させるとき、次のゲート（ｉ）を閉状態に移行させる。この状態で、ゲート管理部１４は、ゲート（ｉ）に対するアクセスをスレッドから受けると、図５（Ｂ）に示すようにゲート（ｉ）を切替状態に移行させる。そして、ゲート管理部１４は、ゲート（ｉ）に対応するカウンタの値が所定の値になると、図５（Ｃ）に示すように、ゲート（ｉ）を開状態に移行させるとともに、次のゲート（ｉ＋１）を閉状態に移行させる。
【００２２】
カウンタ制御部１５は、各ゲートに対応するカウンタ１８を制御する。カウンタ制御部１５は、ゲートの状態が閉状態から切替状態に移行すると、対応するカウンタ１８の値を初期値（図１に示す例ではｍａｘ）に設定してカウント動作を開始させる。なお、本実施形態では、カウンタ１８のカウント動作は、１ずつデクリメントするカウントダウンとするが、１ずつインクリメントするカウントアップであっても良い。
【００２３】
図２（Ａ）及び図２（Ｂ）は、本実施形態におけるプロセッサの構成例を示す図である。図２（Ａ）及び図２（Ｂ）において、２１はコアであり、２２はコア２１にそれぞれ対応して設けられるプライベートキャッシュ部である。２３はすべてのコア２１により共有される共有キャッシュ部であり、２４は外部メモリにアクセスするための、すべてのコア２１によりアクセス可能なメモリコントローラである。プライベートキャッシュ部２２及び共有キャッシュ部２３は、それぞれキャッシュコントローラ及びキャッシュメモリを有している。
【００２４】
図２（Ａ）及び図２（Ｂ）に示したように、スレッド進行制御部１１は、すべてのコア２１からアクセス可能に配置する。図２（Ａ）は、共有キャッシュ部２３にスレッド進行制御部１１を併設した例を示しており、図２（Ｂ）は、メモリコントローラ２４にスレッド進行制御部１１を併設した例を示している。
【００２５】
本実施形態では、図３に示すように、プロセッサのコアで実行する各スレッドの処理において、一定処理毎に制御点３１を設ける。各スレッドの制御点３１では、ゲートを指定してゲートに対するアクセスを行って状態を読み出す。その結果、スレッドは、指定したゲートの状態が開状態であれば次の処理に進み、開状態でなければ開状態になるまでゲートに対するアクセスを繰り返し行う。つまり、進行の速いスレッドは、ゲートが開状態になるまで比較的長い時間を待って次の処理に進み、進行の遅いスレッドは、ゲートが開状態になるまでの短い時間を待って又は待つことなく次の処理に進む。これにより、進行の速いスレッドと進行の遅いスレッドの進行差を縮めることができ、スレッド間の進行差が拡大することを抑えることができる。
【００２６】
前述したゲートに対するアクセスを行って状態を読み出す動作は、例えば図４（Ａ）に一例を示すように、複数のスレッドで並列して処理を実行するプログラム内でスレッド間の進行差を縮めたいポイントに、進行制御ルーチンのｌｏｏｓｅ＿ｓｙｎｃ（）を配置することで実現可能である。進行制御ルーチンのｌｏｏｓｅ＿ｓｙｎｃ（）は、図４（Ｂ）に一例を示すように、ｇａｔｅ＿ｉｄで指定するゲートに対するアクセスをゲートの状態が開状態になるまで繰り返し行うループ処理である。進行制御ルーチンのｌｏｏｓｅ＿ｓｙｎｃ（）の配置は、例えばソフトウェアを修正したり、コンパイラによって一定処理毎に自動挿入したりするようにすれば良い。また、ゲートに対するアクセスは、専用の命令を用いてアクセスするような形態であっても良いし、ゲートをメモリ空間にマッピングして、その領域に対するロード命令でアクセスするような形態であっても良い。
【００２７】
以上のようにして、プロセッサのコアは、並列に処理を実行する各スレッドにおいて、一定処理毎にゲートを指定して状態を読み出し、指定したゲートの状態が開状態であれば次の処理に進み、開状態でなければ開状態になるまで次の処理の実行を待機する。これにより、進行の速いスレッドは、ゲートが開状態になるまで比較的長い時間を待って次の処理に進み、進行の遅いスレッドは、ゲートが開状態になるまでの短い時間を待って又は待つことなく次の処理に進むことになり、進行の速いスレッドと進行の遅いスレッドの進行差を縮めることができる。例えば、スレッド０〜スレッド４において処理時間が異なり、単純に処理を実行すると図６（Ａ）に示すようにスレッド間の進行差が拡大していくような場合、本実施形態を適用することにより、図６（Ｂ）に示すようにスレッド間の進行差の拡大を抑えることができる。したがって、進行の速いスレッドと進行の遅いスレッドとの間の進行差が拡大することを抑えることができ、キャッシュミスやＴＬＢミスの発生回数を削減し、プログラムの実行性能を向上させることができる。また、実行状態（Ａｃｔｉｖｅ状態）になっているスレッドを特定し、特定されたスレッドのすべてが同期点に到達したことを確認するような仕組みと比べて、前述したスレッド進行制御機構は、構成が簡略であり同期コストを低減することができ、少ないハードウェア量での実装が可能である。
【００２８】
以下、本実施形態におけるゲートの状態の遷移を詳細に説明する。なお、以下の説明では、２つのゲート（ゲート０及びゲート１）を用意した場合を例に説明する。各ゲートの状態の制御は、スレッド進行制御部１１のゲート管理部１４が行い、各ゲートに対応するカウンタの制御は、スレッド進行制御部１１のカウンタ制御部１５が行う。また、以下では、ゲート０に対応するカウンタをカウンタ０と称し、ゲート１に対応するカウンタをカウンタ１と称す。
【００２９】
図７は、本実施形態におけるゲートの状態遷移の例を示す図である。状態ＳＴ１１は、初期状態であり、すべてのゲート、すなわちゲート０及びゲート１がともに閉状態（Ｃｌｏｓｅｄ状態）である。
【００３０】
状態ＳＴ１１において、あるスレッドからのゲート０に対するアクセスがあると、ゲート０が閉状態から切替状態（Ｃｈａｎｇｉｎｇ状態）に移行されるとともにカウンタ０が初期化され、ゲート０が切替状態であり、ゲート１が閉状態である状態ＳＴ１２になる。状態ＳＴ１２ではカウンタ０のカウントダウン動作が行われる。状態ＳＴ１２において、カウンタ０の値が０になる、すなわち状態ＳＴ１２になって一定時間が経過すると、ゲート０が切替状態から開状態（Ｏｐｅｎｅｄ状態）に移行され、ゲート０が開状態であり、ゲート１が閉状態である状態ＳＴ１３になる。
【００３１】
状態ＳＴ１３において、あるスレッドからのゲート１に対するアクセスがあると、ゲート１が閉状態から切替状態に移行されるとともにカウンタ１が初期化され、ゲート０が開状態であり、ゲート１が切替状態である状態ＳＴ１４になる。状態ＳＴ１４ではカウンタ１のカウントダウン動作が行われる。状態ＳＴ１４において、カウンタ１の値が０になる、すなわち状態ＳＴ１４になって一定時間が経過すると、ゲート１が切替状態から開状態に移行されるとともに次のゲートとしてのゲート０が開状態から閉状態に移行され、ゲート０が閉状態であり、ゲート１が開状態である状態ＳＴ１５になる。
【００３２】
状態ＳＴ１５において、あるスレッドからのゲート０に対するアクセスがあると、ゲート０が閉状態から切替状態に移行されるとともにカウンタ０が初期化され、ゲート０が切替状態であり、ゲート１が開状態である状態ＳＴ１６になる。状態ＳＴ１６ではカウンタ０のカウントダウン動作が行われる。状態ＳＴ１６において、カウンタ０の値が０になる、すなわち状態ＳＴ１６になって一定時間が経過すると、ゲート０が切替状態から開状態に移行されるとともに次のゲートとしてのゲート１が開状態から閉状態に移行され、ゲート０が開状態であり、ゲート１が閉状態である状態ＳＴ１３になる。
【００３３】
なお、状態ＳＴ１１において、あるスレッドからのゲート１に対するアクセスがあると、ゲート１が閉状態から切替状態に移行されるとともにカウンタ１が初期化され、ゲート０が閉状態であり、ゲート１が切替状態である状態ＳＴ１７になる。状態ＳＴ１７ではカウンタ１のカウントダウン動作が行われる。状態ＳＴ１７において、カウンタ１の値が０になる、すなわち状態ＳＴ１７になって一定時間が経過すると、ゲート１が切替状態から開状態に移行され、ゲート０が閉状態であり、ゲート１が開状態である状態ＳＴ１５になる。なお、図７に示す例では、あるゲートが切替状態（状態ＳＴ１２、ＳＴ１４、ＳＴ１６、ＳＴ１７）であるときは、どのゲートにアクセスしても状態遷移は起きない。
【００３４】
図８は、本実施形態におけるゲートの状態遷移の他の例を示す図である。図８に示す例は、状態ＳＴ１４において、あるスレッドからのゲート０に対するアクセスがあった場合と、状態ＳＴ１６において、あるスレッドからのゲート１に対するアクセスがあった場合の挙動が図７に示した例とは異なる。図７に示した例と重複する説明は省略する。
【００３５】
ゲート０が開状態であり、ゲート１が切替状態である状態ＳＴ１４において、カウンタ１の値が０になる前に、あるスレッドからのゲート０に対するアクセスがあると、カウンタ１の値が一定量増加又は初期値される。このようにして、ゲート１を開状態にするまでの期間を延長することにより、１つ前のゲートであるゲート０の閉状態への移行を遅らせ、ゲート０が開状態である期間を延長する。これにより、遅れるスレッドの数が少なくなり、スレッド間の進行差を縮めることができる。
【００３６】
また、ゲート０が切替状態であり、ゲート１が開状態である状態ＳＴ１６において、カウンタ０の値が０になる前に、あるスレッドからのゲート１に対するアクセスがあると、カウンタ０の値が一定量増加又は初期値される。このようにして、ゲート０を開状態にするまでの期間を延長することにより、１つ前のゲートであるゲート１の閉状態への移行を遅らせ、ゲート１が開状態である期間を延長する。これにより、遅れるスレッドの数が少なくなり、スレッド間の進行差を縮めることができる。
【００３７】
図９は、本実施形態におけるゲートの状態遷移の他の例を示す図である。図９に示す例は、状態ＳＴ１３、ＳＴ１５になってからの挙動が図７に示した例とは異なる。図７に示した例と重複する説明は省略する。
【００３８】
図９に示す例において、ゲート０が開状態であり、ゲート１が閉状態である状態ＳＴ１３では、カウンタ０のカウントアップ動作が行われる。そして、状態ＳＴ１３において、あるスレッドからのゲート１に対するアクセスがある前に、カウント０の値がある値（図９に示す例ではｍａｘ）に達する、すなわち状態ＳＴ１３になって一定時間が経過すると、ゲート０が開状態から閉状態に移行され、ゲート０及びゲート１がともに閉状態である状態ＳＴ１１になる。
【００３９】
また、ゲート０が閉状態であり、ゲート１が開状態である状態ＳＴ１５では、カウンタ１のカウントアップ動作が行われる。そして、状態ＳＴ１５において、あるスレッドからのゲート０に対するアクセスがある前に、カウント１の値がある値（図９に示す例ではｍａｘ）に達する、すなわち状態ＳＴ１５になって一定時間が経過すると、ゲート１が開状態から閉状態に移行され、ゲート０及びゲート１がともに閉状態である状態ＳＴ１１になる。
【００４０】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００４１】
１１  スレッド進行制御部
１２  コア
１３  バス
１４  ゲート管理部
１５  カウンタ制御部
１６  ゲート状態保持部
１７  テーブル
１８  カウンタ
２１  コア
２２  プライベートキャッシュ部
２３  共有キャッシュ部
２４  メモリコントローラ
【図１】
2015055994.tif 000003
【図２】
2015055994.tif 000004
【図３】
2015055994.tif 000005
【図４】
2015055994.tif 000006
【図５】
2015055994.tif 000007
【図６】
2015055994.tif 000008
【図７】
2015055994.tif 000009
【図８】
2015055994.tif 000010
【図９】
2015055994.tif 000011
【図１０】
2015055994.tif 000012
【図１１】
2015055994.tif 000013