(57)【要約】  プロセッサは、複数のスレッドを実行するプロセッサコアを含む。分岐スレッドスケジューラは、内部プロセッサコア構成部品と、外部プロセッサコア構成部品とを含む。分岐スレッドスケジューラは、複数のスレッド全てがいつブロックされたかを識別し、その後、自動的にデフォルト低消費電力スリープモードに入る。
2008538436.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステム内の消費電力を管理する方法であって、
複数のスレッドを実行するステップと、
前記複数のスレッド全てがいつブロックされたかを識別するステップと、
識別に応答して自動的にデフォルト低消費電力スリープモードに入るステップと、
前記複数のスレッドのうちのあるスレッドがいつブロック解除されたかを判定するステップと、
判定に応答して自動的に前記低消費電力スリープモードを抜け出るステップとを含む方法。
【請求項２】
識別が、ブロックされたスレッドがいつ待機命令を受けたかを識別することを含む、請求項１に記載の方法。
【請求項３】
識別が、ブロックされたスレッドがいつｙｉｅｌｄ命令を受けたかを識別することを含む、請求項１に記載の方法。
【請求項４】
識別が、ブロックされたスレッドがいつブロッキングスレッド間通信（ＩＴＣ）アクセスを受けたかを識別することを含む、請求項１に記載の方法。
【請求項５】
識別が、ブロックされたスレッドがいつポリシーマネージャからの停止優先順位要求を受けたかを識別することを含む、請求項１に記載の方法。
【請求項６】
デフォルト低消費電力スリープモードに自動的に入ることが、待機命令を発行することなく待機状態に入ることを含む、請求項１に記載の方法。
【請求項７】
前記デフォルト低消費電力スリープモードに自動的に入る前にハウスキーピングを実行することを更に含む、請求項１に記載の方法。
【請求項８】
プロセッサであって、
複数のスレッドを実行するプロセッサコアと、
内部プロセッサコア構成部品及び外部プロセッサコア構成部品を含む分岐スレッドスケジューラであって、前記複数のスレッド全てがいつブロックされたかを識別し、その後、自動的にデフォルト低消費電力スリープモードに入る、前記分岐スレッドスケジューラと、を含むプロセッサ。
【請求項９】
前記分岐スレッドスケジューラが、ブロックされたスレッドがいつ待機命令を受けたかを識別するよう構成される、請求項８に記載のプロセッサ。
【請求項１０】
前記分岐スレッドスケジューラが、ブロックされたスレッドがいつｙｉｅｌｄ命令を受けたかを識別するよう構成される、請求項８に記載のプロセッサ。
【請求項１１】
前記分岐スレッドスケジューラが、ブロックされたスレッドがいつブロッキングスレッド間通信（ＩＴＣ）アクセスを受けたかを識別するよう構成される、請求項８に記載のプロセッサ。
【請求項１２】
前記分岐スレッドスケジューラが、ブロックされたスレッドがいつ前記外部プロセッサコア構成部品からの停止優先順位要求を受けたかを識別するよう構成される、請求項８に記載のプロセッサ。
【請求項１３】
前記分岐スレッドスケジューラが、待機命令を発行することなく、前記デフォルト低消費電力スリープモードに入るよう構成される、請求項８に記載のプロセッサ。
【請求項１４】
前記プロセッサが、前記デフォルト低消費電力スリープモードに入る前にハウスキーピング機能を実行するよう構成される、請求項８に記載のプロセッサ。
【請求項１５】
コンピュータ可読媒体であって、
複数のスレッドを実行するプロセッサコアを定義することと、
内部プロセッサコア構成部品及び外部プロセッサコア構成部品を含む分岐スレッドスケジューラであって、前記複数のスレッド全てがいつブロックされたかを識別し、その後、自動的にデフォルト低消費電力スリープモードに入る、前記分岐スレッドスケジューラを指定することと、を行うための実行可能な命令を含むコンピュータ可読媒体。
【請求項１６】
コンピュータがプロセッサを生成するのを可能にする方法であって、
複数のスレッドを実行するプロセッサコアを定義することと、内部プロセッサコア構成部品及び外部プロセッサコア構成部品を含む分岐スレッドスケジューラであって、前記複数のスレッド全てがいつブロックされたかを識別し、その後、自動的にデフォルト低消費電力スリープモードに入る前記分岐スレッドスケジューラを指定することと、を行うための実行可能な命令を選択するステップと、
前記実行可能な命令をネットワークを介して指定のコンピュータに伝送するステップとを含む方法。
【請求項１７】
伝送媒体で具現化されるコンピュータデータ信号であって、
プロセッサをコンピュータに記述させるための実行可能な命令を含み、
前記プロセッサが、
複数のスレッドを実行するプロセッサコアと、
内部プロセッサコア構成部品及び外部プロセッサコア構成部品を含む分岐スレッドスケジューラであって、前記複数のスレッド全てがいつブロックされたかを識別し、その後、自動的にデフォルト低消費電力スリープモードに入る前記分岐スレッドスケジューラとを含む、コンピュータデータ信号。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の簡単な説明
本発明は、一般に、マルチスレッド化されたプロセッサでの消費電力管理に関する。より詳しくは、本発明は、低消費電力モードプロセッサ状態を自動的に呼び出すための技術に関する。
【背景技術】
【０００２】
発明の背景
マイクロプロセッサの設計者は、マイクロプロセッサの性能を高めるために多数の技術を採用している。ほとんどのマイクロプロセッサは、固定された周波数を有するクロック信号を使用して動作する。各クロックサイクルで、マイクロプロセッサの回路が、それぞれの機能を実行する。マイクロプロセッサの性能の１つの尺度は、１つのプログラム又はプログラムの集合を実行するのに必要な時間である。この観点から、マイクロプロセッサの性能は、そのクロック周波数、１つの命令を実行するのに必要なクロックサイクル数の平均値（言い換えると、クロックサイクルあたりに実行される命令の個数の平均値）、及びプログラム又はプログラムの集合で実行される命令の個数に応じたものとなる。
【０００３】
半導体の科学者およびエンジニアは、主にトランジスタのサイズを縮小し、スイッチング時間を高速化することにより、マイクロプロセッサがより高いクロック周波数で動作することを可能にすることを絶えず行っている。実行される命令の個数は、プログラムによって実行されるタスクによってほぼ固定されているが、マイクロプロセッサの命令セットアーキテクチャにも影響される。大幅な性能向上が、アーキテクチャ的及び編成的な概念（並列性等）によって実現されてきた。
【０００４】
マイクロプロセッサのクロックサイクルあたりの命令、並びにクロック周波数を改善した並列性という概念の１つが、マイクロプロセッサのパイプラインステージ内で複数の命令の実行をオーバーラップさせるパイプライン化である。理想的な状況では、各クロックサイクルで１つの命令が、パイプラインで新しいステージに移動し、この新しいステージは、その命令に対して異なる機能を実行する。したがって、個々の命令はそれぞれ完了するのに複数のクロックサイクルを要するが、個々の命令の複数のサイクルがオーバーラップしているので、命令毎の平均クロック数が減少する。パイプライン化の性能改善は、プログラム内の命令がそれを許容する範囲まで、即ち、命令が実行のためにその先行命令に依存せず、したがってその先行命令と並列に実行できる（一般に、これを命令レベル並列性と称する）範囲まで実現することができる。命令レベル並列性が最近のマイクロプロセッサによって活用されるもう１つの形は、クロックサイクル毎に実行のために複数の命令を発行することである。これらのマイクロプロセッサは、一般にスーパースカラマイクロプロセッサと称する。
【０００５】
上記したことは、個々の命令レベルでの並列性に関する。しかし、命令レベル並列性を活用して達成できる性能改善は制限されている。制限された命令レベル並列性によって課せられる様々な制約、及び性能を制約する他の問題点が、最近、命令のブロック、シーケンス、又はストリームのレベルで並列性を活用すること（一般にスレッドレベル並列性と称する）への関心を復活させた。スレッドとは、単に、プログラム命令のシーケンス又はストリームである。マルチスレッド化されたマイクロプロセッサは、インターリーブドマルチスレッディング、ブロックドマルチスレッディング、又は同時マルチスレッディング等、様々なスレッドの命令のフェッチ及び発行を指示する、あるスケジューリングポリシーに従って、複数のスレッドを並行して実行する。マルチスレッド化されたマイクロプロセッサでは、通常、複数のスレッドが、並行した形でマイクロプロセッサの機能ユニット（例えば、命令フェッチ及びデコードユニット、キャッシュ、分岐予測ユニット、及びロード／ストア、整数、浮動小数点、ＳＩＭＤ等の実行ユニット）を共用することができる。しかし、マルチスレッド化されたマイクロプロセッサは、各スレッドの独自の状態を保管するために、複数のプログラムカウンタや汎用レジスタセット等、複数の組のリソース又はコンテキストを備えることで、命令をフェッチするスレッドと命令を発行するスレッドとをすばやく切り替える機能を促進する。
【０００６】
マルチスレッディングマイクロプロセッサによって対処される、性能を制約する問題の一例は、キャッシュミスが発生すると、通常、比較的長い待ち時間が生じるということである。最近のマイクロプロセッサベースのコンピュータシステムのメモリアクセス時間は、キャッシュヒットアクセス時間より１桁から２桁長くなることが一般的である。キャッシュ内のデータ欠落に左右される命令は、メモリから来るデータを待機して、パイプライン内でストールされる。その結果、シングルスレッド式マイクロプロセッサのパイプラインステージの一部又は全てが、アイドルになり、多数のクロックサイクルの間に有用な作業を実行しない場合がある。マルチスレッド化されたマイクロプロセッサは、この問題を解決するために、メモリフェッチ待ち時間中に他のスレッドからの命令を発行する。これによって、ページフォールト時にタスク切り替えを実行するオペレーティングシステムに多少似ているがそれより微細な細分性レベルで、パイプラインステージが有用な作業を実行して前進することができる。マルチスレッディングマイクロプロセッサによって対処される、性能を制約する問題の他の例としては、データ依存性に起因する、又は除算命令や浮動小数点命令等の待ち時間が長い命令に起因する、又は制限されたハードウェアリソースの競合に起因する、パイプラインストール及びそれに付随するアイドルサイクルが挙げられる。この場合も、マルチスレッド化されたマイクロプロセッサは、本来ならアイドルになっているパイプラインステージに他のスレッドからの命令を発行することができるので、スレッドを含むプログラム又はプログラムの集合を実行するのに必要な時間を大幅に短縮することが可能である。
【０００７】
マルチスレッディングや他の技術によってマイクロプロセッサの性能を向上させると、結果としてマイクロプロセッサの消費電力が増大する。消費電力は、多くのアプリケーションで重要なファクタとなる。したがって、消費電力管理技術が益々重要視されている。ほとんどの消費電力管理技術は、プロセッサの状態の事前把握に基づいて、予測される。つまり、プロセッサの動作の包括的な把握内容に応じて、且つ、処理スループットと消費電力管理との種々のトレードオフの重み付けを通して、消費電力管理動作が起動される。このような技術は、高度な制御方式に依存している。プロセッサの状態に関する情報にほとんど依存しない単純な制御方式によって、消費電力の節約を達成することが極めて望ましい。プロセッサ性能の犠牲を最小限に抑えて、このような技術が自動的に呼び出されるのが理想的である。
【発明の開示】
【課題を解決するための手段】
【０００８】
発明の概要
本発明は、マルチスレッドを実行するプロセッサコアを備えたプロセッサを含む。分岐スレッドスケジューラは、内部プロセッサコア構成部品と、外部プロセッサコア構成部品とを含む。分岐スレッドスケジューラは、複数のスレッド全てがいつブロックされたかを識別し、その後、自動的にデフォルト低消費電力スリープモードに入る。一実施形態で、分岐スレッドスケジューラは、ブロックされたスレッドがいつ、待機命令、ｙｉｅｌｄ命令、ブロッキングスレッド間通信（blocking inter-thread communication）（ＩＴＣ）アクセス、及び外部プロセッサコア構成部品からの停止優先順位要求（stopped priority request）を受けたかを識別するよう構成される。分岐スレッドスケジューラは、待機命令を発行することなくデフォルト低消費電力スリープモードに入るよう構成されることが有利である。分岐スレッドスケジューラは、デフォルト低消費電力スリープモードに入る前にハウスキーピング機能を実行することができる。
【０００９】
本発明は、コンピュータシステム内で消費電力を管理する方法も含む。複数のスレッドが実行される。複数のスレッド全てがブロックされていると識別された場合に、デフォルト低消費電力スリープモードに自動的に入る。スレッドのブロックが解除されると、低消費電力スリープモードが自動的に終了する。
【００１０】
本発明は、添付の図面を参照しながら以下の詳細説明を読むことにより、更に深く理解できよう。
【００１１】
同様の参照番号は、図面の複数の図を通して対応する部品を示す。
【発明を実施するための最良の形態】
【００１２】
発明の詳細な説明
図１は、本発明の実施形態に係るパイプライン化されたマルチスレッディングマイクロプロセッサ１００を示す。この例示的なマルチスレッディングマイクロプロセッサ１００は、本発明の概念を開示するために使用される。また、本発明の概念は、代替のマルチスレッディングマイクロプロセッサの設計にも適用できることを理解されたい。
【００１３】
マイクロプロセッサ１００は、複数のスレッドを並行して実行するように構成されている。スレッド（本明細書では、実行のスレッド、または、命令ストリームとも呼ぶ）は、プログラム命令のシーケンス（又はストリーム）を含む。スレッドは、マイクロプロセッサ１００で実行する様々なプログラムからのものとすることも、マイクロプロセッサ１００で実行する同一プログラムの様々な部分からの命令ストリームとすることも、これらの組み合わせとすることもできる。
【００１４】
各スレッドは、関連付けられたスレッドコンテキスト（ＴＣ）を有する。スレッドコンテキストは、レジスタやラッチ等のストレージ要素の集合、及び／又はスレッドの実行状態を記述する、マイクロプロセッサ１００のストレージ要素内のビットを含む。つまり、スレッドコンテキストは、それに対応する各々のスレッドの状態を記述するが、その状態は、そのスレッドに固有の状態であり、マイクロプロセッサ１００で並行して実行する他の実行のスレッドと共有する状態ではない。マイクロプロセッサ１００は、各スレッドの状態をスレッドコンテキストに格納することにより、命令をフェッチするスレッドと命令を発行するスレッドとを迅速に切り替えるように構成されている。一実施形態で、各スレッドコンテキストは、プログラムカウンタ（ＰＣ）と、汎用レジスタセットと、スレッド制御レジスタとを含み、これらはマイクロプロセッサ１００のレジスタファイル１１２に含まれる。
【００１５】
マイクロプロセッサ１００は、種々のスレッドの命令のフェッチ及び命令の発行を指示するスケジューリングポリシーに従って、該当するスレッドを並行して実行する。本明細書には、複数のスレッドからの命令のディスパッチをスケジューリングするための種々の実施形態が記載されている。本明細書内では、用語として命令の「発行」と命令の「ディスパッチ」とが同義で使用されている。マルチスレッド化されたマイクロプロセッサ１００では、複数のスレッドが、並行した形でマイクロプロセッサ１００の機能ユニット（例えば、命令フェッチ及びデコードユニット、キャッシュ、分岐予測ユニット、及びロード／ストア、整数、浮動小数点、ＳＩＭＤ等の実行ユニット）を共用することができる。
【００１６】
マイクロプロセッサ１００は、該マイクロプロセッサ１００を含むシステムのシステムメモリーからフェッチされたプログラム命令（特に、種々のスレッドの命令）をキャッシングするための命令キャッシュ１０２を含む。マイクロプロセッサ１００はまた、命令キャッシュ１０２及び／又はシステムメモリーから、（命令フェッチャー１０４に結合された）命令／スキッドバッファ１０６へ、複数のスレッドの命令を同時にフェッチするように結合される、命令フェッチャー１０４（又は命令フェッチパイプライン１０４）を含む。一実施形態で、命令フェッチパイプライン１０４は、４ステージパイプラインを含む。命令／スキッドバッファ１０６は、命令スケジューラ１０８（又はスレッドスケジューラ１０８）に命令を提供する。一実施形態で、各スレッドはそれぞれ独自の命令／スキッドバッファ１０６を有する。各クロックサイクルで、スケジューラ１０８は、スレッドの１つからの命令を選択し、その命令を、実行のために、マイクロプロセッサ１００パイプラインの実行ステージ内に発行する。レジスタファイル１１２はスケジューラ１０８に結合されており、命令を実行する実行ユニット１１４に命令のオペランドを提供する。マイクロプロセッサ１００はまた、実行ユニット１１４に結合されたデータキャッシュ１１８を含む。実行ユニット１１４は、整数実行ユニット、浮動小数点実行ユニット、ＳＩＭＤ実行ユニット、ロード／ストアユニット、及び分岐予測ユニットを含んでもよいが、これらに限定されるものではない。
【００１７】
一実施形態で、整数実行ユニットパイプラインは４つのステージを含む。レジスタファイル１１２がアクセスされるレジスタファイル（ＲＦ）アクセスステージと、アドレス生成（ＡＧ）ステージと、実行（ＥＸ）ステージと、メモリ第２（ＭＳ）ステージとの４つである。ＥＸステージでは、簡単なＡＬＵ演算（加算、減算、シフト等）が実行される。更に、データキャッシュ１１８は、ＥＸステージの第１クロックサイクル中と、ＭＳステージの第２クロックサイクル中にアクセスされる２サイクルキャッシュである。各スレッドコンテキストはそれぞれ独自のレジスタファイル１１２を含み、各レジスタファイルは独自のプログラムカウンタ、汎用レジスタセット、及びスレッド制御レジスタを含む。命令フェッチャー１０４は、各スレッドコンテキストのプログラムカウンタ値に基づいてスレッドの命令をフェッチする。実行ユニット１１４には、パイプライン化され得るものと、広範囲にわたってパイプライン化され得るものがあることに留意されたい。マイクロプロセッサ１００のパイプラインは、命令結果をレジスタファイル１１２にライトバックするライトバックステージ１１６も含む。一実施形態で、マイクロプロセッサ１００のパイプラインは、実行ユニット１１４とライトバックステージ１１６とに結合された例外解決ステージも含む。
【００１８】
一実施形態で、実行ユニット１１４は、各スレッドコンテキストと関連付けられたＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４を生成して、指定されたスレッドの命令が実行のためにコミットされていることを示す。命令は、マイクロプロセッサ１００パイプラインによってフラッシュされないように保証され、その代わりに、最終的に実行を完了（つまり、結果を生成し、マイクロプロセッサ１００のアーキテクチャの状態を更新）するようにコミットされている場合に、実行のためにコミットされていることになる。一実施形態では、クロックサイクル毎に複数の命令をコミットすることが可能であり、該当するクロックサイクルで、スレッドコンテキストに関してコミットされた命令の個数が、ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４によって示される。ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４は、スケジューラ１０８に提供される。ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４に応答して、スケジューラ１０８は、必要なサービス品質を達成するために、同スケジューラ１０８のスレッドスケジューリングポリシーで使用される、スレッド用の仮想的な水位インジケータを更新する（以下に説明）。
【００１９】
ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４は、各々の命令／スキッドバッファ１０６にも提供される。ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４に応答して、命令／スキッドバッファ１０６は、ポインタを更新して、該バッファ１０６から命令を効果的に除去する。従来のマイクロプロセッサでは、命令は、従来の命令バッファから除去されて、実行のために発行される。しかし、命令／スキッドバッファ１０６の場合は、命令が実行のために発行された後も、それらの命令を引き続き格納しておく。命令が実行のためにコミットされたことを、実行ユニット１１４が各々のＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４を介して示すまで、命令／スキッドバッファ１０６から命令は除去されない。
【００２０】
スケジューラ１０８は、実行ユニット１１４に実行可能ＴＣ信号（runnable TCs signal）１３２を提供する。実行可能ＴＣ信号１３２は、どのスレッドコンテキストが実行可能可な状態にあるか（即ち、スケジューラ１０８は、現在、どのスレッドコンテキストから命令を発行できるか）を示す。  一実施形態で、スレッドコンテキストは、アクティブであり、且つ、他の条件Ｈａｌｔｅｄ（停止）、Ｗａｉｔｉｎｇ（待機）、Ｓｕｓｐｅｎｄｅｄ（中断）、Ｙｉｅｌｄｅｄ等）によってブロックされていない場合、実行可能な状態にある。特に、実行ユニット１１４は、実行可能ＴＣ信号１３２を使用することでストールされたスレッドコンテキストが唯一実行可能なスレッドコンテキストかどうかを判定し、そのストールされたスレッドコンテキストの命令をフラッシュするかどうかを決定する。
【００２１】
実行ユニット１１４は、スケジューラ１０８にストールイベント信号１２６を提供する。ストールイベント信号１２６は、特定のストールイベント信号１２６によって指定された理由により、実行ユニット１１４内で命令がストールした（又はストールしたと推測される）ことを示す。更に、ストールイベント信号１２６は、ストールされた命令のスレッドコンテキストを識別する識別子を含む。実行ユニット１１４は、スケジューラ１０８に、非ストールイベント信号１２８も提供する。ストールイベント信号１２６に応答して、スケジューラ１０８は、対応する非ストールイベント信号１２８が通知されるまでストールされたスレッドコンテキストに関する命令の発行を停止する。
【００２２】
命令に応答して実行ユニット１１４がストールする原因となるイベントの例として、以下のものが挙げられるが、これに限定されるものではない。第１に、ロード命令がデータキャッシュ１１８内で見つけられないデータ等、使用できないデータに命令が依存している場合が挙げられる。例えば、先行ロード命令がデータキャッシュ１１８内で見つけられず、オペランドがシステムメモリーからまだフェッチされていないために利用できないオペランドを、加算命令が指定している場合である。第２に、命令が、除算や他の長い算術命令といった実行時間の長い命令からのデータ、又はコプロセッサレジスタ等から値を移動する命令からのデータに依存する場合が挙げられる。
【００２３】
第３に、命令が、制限されたハードウェアリソースの競合をもたらす場合が挙げられる。例えば、一実施形態で、マイクロプロセッサ１００は、１つの除算器回路を含んでいる。この除算器が除算命令をすでに実行中である場合、第２の除算命令はストールして、第１の除算命令が終了するのを待機する必要がある。別の例として、一実施形態では、マイクロプロセッサ１００の命令セットが、命令キャッシュ１０２の低レベルな管理演算を実行するための命令グループを含んでいる。命令キャッシュ管理命令がすでに実行中である場合、第２の命令キャッシュ管理命令はストールし、第１の命令キャッシュ管理命令が終了するのを待機する必要がある。別の例として、一実施形態で、マイクロプロセッサ１００のロードキューが、進行中のデータキャッシュ１１８の再読込みを格納するための比較的少数のスロットを含んでいる。データキャッシュ１１８内でロード命令がデータを見つけられない場合は、欠落データをシステムメモリーから取得するために、ロードキューエントリが割り当てられ、プロセッサバストランザクションが開始される。バス上にデータが返されると、そのデータはロードキューに格納され、次いでデータキャッシュ１１８に書き込まれる。バストランザクションが終了し、且つ、全てのデータがデータキャッシュ１１８に書き込まれると、ロードキューエントリは解放される。しかし、ロードキューが一杯のときは、ロードミスによりパイプラインのストールが発生する。
【００２４】
第４に、命令がＥＨＢ命令の後に続く場合が挙げられる。一実施形態で、マイクロプロセッサ１００の命令セットは、全ての実行ハザード（execution hazards）が解消されるまで命令の実行を停止させておくためにソフトウェアによって使用されるＥＨＢ（Ｅｘｅｃｕｔｉｏｎ  Ｈａｚａｒｄ  Ｂａｒｒｉｅｒ）命令を含む。通常、ＥＨＢ命令に続く命令は、ＥＨＢ命令が引き下げられるまでパイプライン内でストールする。
【００２５】
第５に、命令が、同じスレッドコンテキスト内のスレッド間通信（ＩＴＣ）空間にアドレス指定されるロード又はストア命令の後に続く場合が挙げられる。一実施形態で、マイクロプロセッサ１００は、同期化されたストレージを備えたＩＴＣ空間に対するロード及びストアをサポートしている。これは、任意に長い期間、ブロックされ、同じスレッドコンテキスト内のＩＴＣロード又はストアに続く命令がストールすることを引き起こす。
【００２６】
逆に、非ストールイベント１２８の例としては、データキャッシュ１１８内で見つけられなかった欠落したロードデータが復帰した場合、除算器回路、命令キャッシュ１０２、ロードキュースロット等の制限されたハードウェアリソースが解放された場合、ＥＨＢ命令、実行時間が長い命令、又はスレッド間通信（ＩＴＣ）空間に対するロード／ストア命令が完了した場合等が挙げられるが、これに限定されるものではない。
【００２７】
実行ユニット１１４はまた、パイプラインの実行部（即ち、スケジューラ１０８より下のパイプライン部分）内の指定されたスレッドの命令がフラッシュされた又は無効にされたことを示すために、各スレッドコンテキストと関連付けられたＴＣ＿ｆｌｕｓｈ信号１２２を生成する。一実施形態で、命令のフラッシュ又は無効化は、パイプライン内の命令と関連付けられた有効ビットをクリアすることを含む。これにより、命令の結果に反応してパイプラインがマイクロプロセッサ１００のアーキテクチャの状態を更新することが防止される。実行ユニット１１４がＴＣ＿ｆｌｕｓｈ信号１２２を生成する理由の一つとして、上記したように、スレッドの命令が実行ユニット１１４内でストールする場合が挙げられる。命令を無効化又はフラッシュすると、その命令について生成される結果は無視され正確である必要がなくなるので、命令がストールされる理由は解消される。有利なことに、ストールしている命令をフラッシュすると、他のスレッドの命令が、引き続き実行でき、実行パイプラインの実行帯域幅を利用できるので、マイクロプロセッサ１００の全体の性能が向上する可能性がある（以下に詳細に説明する）。一実施形態では、ストールしているスレッドの命令だけがフラッシュされる。これは、フラッシュによってもたらされるパイプラインバブル数を有利に減らし、ある場合には、実行ユニット１１４パイプラインに存在する種々のスレッドからの命令の構成に応じて、ストールしている命令と関連付けられたバブルを１つだけ発生させることができる。一実施形態で、ＴＣ＿ｆｌｕｓｈ信号１２２は、スレッドコンテキストのコミットされていない命令が全てフラッシュされたことを示す。別の実施形態で、実行ユニット１１４は、実行ユニット１１４内に存在するコミットされていない命令の数（即ち、ストールしているスレッドコンテキストのストールしている命令及びあらゆる新規命令）より少ない数の命令をフラッシュできるが、スレッドコンテキストのストールしている命令よりも古いコミットされていない命令をフラッシュすることができない。この実施形態で、ＴＣ＿ｆｌｕｓｈ信号１２２はまた、実行ユニット１１４によってフラッシュされた命令数を示す。
【００２８】
ＴＣ＿ｆｌｕｓｈ信号１２２は、実行ユニット１１４によって、対応する各々の命令／スキッドバッファ１０６に提供される。命令／スキッドバッファ１０６は、ＴＣ＿ｆｌｕｓｈ信号１２２を使用して、バッファ１０６内の命令の状態をロールバックする。命令／スキッドバッファ１０６は、命令がコミットされてフラッシュされなくなるまで、命令を格納し続けるので、フラッシュされた命令はいずれも、命令キャッシュ１０２からの再フェッチを行わずとも、命令／スキッドバッファ１０６から引き続き再発行することができる。これの利点は、ストールされた命令を実行パイプラインからフラッシュすることに関連するペナルティを潜在的に減少させて、他のスレッドからの命令を実行できるようにすることである。命令フェッチ回数が増えているようなので、命令を再フェッチしなければならないという可能性を低く抑えることは、益々重要になる。これは、特に、プロセッサのクロック周期の短縮を主な理由として、命令キャッシュが、古いマイクロプロセッサの設計の場合よりも、アクセスのためのクロックサイクル数を多く必要とするのが、益々一般的になっているからである。したがって、命令再フェッチに関連するペナルティは、古い設計より１サイクル、２サイクル、又はそれ以上のサイクル分、多くなる場合がある。
【００２９】
次に図２を参照すると、本発明の一実施形態に係る図１のマイクロプロセッサ１００内のスケジューラ１０８を示すブロック図が表示されており、そこでは、該スケジューラ１０８は分岐されている。分岐されたスケジューラ１０８は、ディスパッチスケジューラ（ＤＳ）６０２部分とポリシーマネージャ（ＰＭ）６０４部分とを含む。ディスパッチスケジューラ６０２部分は、マイクロプロセッサ１００のプロセッサコア６０６の内部に構成され、ポリシーマネージャ６０４部分はプロセッサ６０６の外部に構成されている。プロセッサコア６０６は、使用者がカスタマイズできない、マイクロプロセッサ１００の部分である。一方、ポリシーマネージャ６０４は使用者がカスタマイズできる部分である。一実施形態で、プロセッサコア６０６は合成可能なコア（synthesizable core）であって、ソフトコアとも呼ばれる。合成可能なコアの設計は、一般に合成ツールと呼ばれる自動化ツールを使用して、製造可能な表現（manufacturable representaiton）に迅速且つ容易に縮小することができる。
【００３０】
プロセッサコア６０６は、ポリシーマネージャ６０４との間に、複数の信号を有するインターフェース６２８を提供する。一実施形態では、ディスパッチスケジューラ６０２への入力及びディスパッチスケジューラ６０２からの出力信号は登録され、これにより、非コアポリシーマネージャ６０４のロジックは、分岐されたスケジューラによって本来もたらされると考えられる特定のタイミングに関する問題を緩和する方法で、プロセッサコア６０６と有利にインターフェースすることができる。更に、インターフェース６２８は使用者にとって理解しやすいので、ポリシーマネージャ６０４のスケジューリングポリシーを容易に設計できる。
【００３１】
以下の表１には、一実施形態に係るポリシーマネージャインターフェース６２８を含む種々の信号が示されている。表１では、信号名、ポリシーマネージャ６０４に対する信号の方向、及び各信号に関する簡単な説明を提供している。表１に示す実施形態では、マイクロプロセッサ１００が、最大９つの実行のスレッドと関連付けられた状態を格納するための９つのスレッドコンテキストを含む。更に、この実施形態では、マイクロプロセッサ１００を２つまでの仮想処理要素（ＶＰＥ）として構成することができる。一実施形態で、マイクロプロセッサ１００は、実質的にＭＩＰＳ３２又はＭＩＰＳ６４のインストラクションセットアーキテクチャ（ＩＳＡ）に準拠し、コントロールコプロセッサ０（表１ではＣＰ０）を含む。該ＣＰ０は、ＭＩＰＳ  Ｐｒｉｖｉｌｅｇｅｄ  Ｒｅｓｏｕｒｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＰＲＡ）及びＭＩＰＳ  Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｅｘｔｅｎｓｉｏｎ（ＭＴ  ＡＳＥ）で指定されたコプロセッサ０に実質的に準拠する。ＣＰ０レジスタには、表１に説明した複数の信号を使用してアクセスする。
【００３２】
【表１】
2008538436.tif 000003
【００３３】
【表２】
2008538436.tif 000004
【００３４】
表１に記したポリシーマネージャインターフェース６２８の特定の信号について以下に詳しく説明する。ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２出力を介して各々のスレッドコンテキストの優先順位をディスパッチスケジューラ６０２に指定する。一実施形態で、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２は２ビットを有しており、ディスパッチスケジューラ６０２は、ポリシーマネージャ６０４に、スレッドコンテキスト用の４種類の優先順位の一つを指定させる。ポリシーマネージャ６０４は、各々のＰＭ＿ＴＣ＿ｂｌｏｃｋ  ６５４出力で真（ｔｒｕｅ）値を生成することにより、スレッドコンテキストの命令の発行を停止するようディスパッチスケジューラ６０２に指示する。したがって、ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２出力及びＰＭ＿ＴＣ＿ｂｌｏｃｋ  ６５４出力を介して、ディスパッチスケジューラ６０２が種々のスレッドコンテキストの命令を発行する方法に影響を与えることができる。
【００３５】
プロセッサコア６０６はポリシーマネージャ６０４にＰＭ＿ｇｃｌｋ  ６５８を提供する。これにより、ポリシーマネージャ６０４は、ＰＭ＿ｇｃｌｋ  ６５８を基にＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２を定期的に調整することができる。ディスパッチスケジューラ６０２は、各スレッドコンテキストの状態を、各々のＰＭ＿ＴＣ＿ｓｔａｔｅ  ６４２入力を介して伝達する。表１に示すように、スレッドコンテキストは、以下の８つの状態の１つを取り得る。ＩｎＡｃｔｉｖｅ（非アクティブ）：スレッドコンテキストが実行のスレッドと現在関連付けられていないため、ディスパッチスケジューラ６０２はスレッドコンテキストの命令を発行することができない。Ａｃｔｉｖｅ（アクティブ）：スレッドコンテキストが実行のスレッドと現在関連付けられている。したがって、ディスパッチスケジューラ６０２は、他にブロッキング条件が存在しなければ、実行のためにスレッドコンテキストの命令を発行することができる。Ｙｉｅｌｄｅｄ：スレッドが、ＹＩＥＬＤ命令（指定のイベントでスレッドコンテキストがブロックされる）を発行したので、ディスパッチスケジューラ６０２は実行のためにスレッドコンテキストの命令を発行できない。Ｈａｌｔｅｄ（停止）：スレッドコンテキストが単独で停止したか別のスレッドによって停止されているので、ディスパッチスケジューラは実行のためにスレッドコンテキストの命令を発行できない。Ｓｕｓｐｅｎｄｅｄ（中断）：スレッドがＤＭＴ命令又はＤＶＰＥ命令を実行したため、又はマイクロプロセッサ１００若しくはＶＰＥが、現在、例外をサービスしているために、ディスパッチスケジューラ６０２は実行のためにスレッドコンテキストの命令を発行できない。ＤＭＴ命令は、ＶＰＥに対するマルチスレッディング演算を中断する。ＤＶＰＥ命令は、マイクロプロセッサ１００全体に対するマルチスレッディング演算を中断する。Ｗａｉｔｉｎｇ  ｏｎ  ＩＴＣ（ＩＴＣで待機）：スレッドによって実行されたロード／ストア命令で指定されたスレッド間通信（ＩＴＣ）空間内の場所に対するデータのロード／ストアを、スレッドコンテキストが待機して、ブロックされているので、ディスパッチスケジューラ６０２は、実行のためにスレッドコンテキストの命令を発行できない。Ｗａｉｔｉｎｇ  ｄｕｅ  ｔｏ  ＷＡＩＴ（ＷＡＩＴによる待機）：スレッドがＷＡＩＴ命令（割り込みが発生するまでスレッドコンテキストをブロックする）を実行したので、ディスパッチスケジューラ６０２は、実行のためにスレッドコンテキストの命令を発行できない。Ｕｓｅｄ  ａｓ  ＳＲＳ（ＳＲＳとして使用）：スレッドコンテキストレジスタセットがシャドウレジスタセット演算用に使われているので、スレッドコンテキストが実行のスレッドと関連付されず、その関連付けが不可能であるという理由で、ディスパッチスケジューラ６０２はスレッドコンテキストの命令を発行できない。
【００３６】
ディスパッチスケジューラ６０２は、自身がスレッドコンテキストの命令を発行したことを、各々のＰＭ＿ＴＣ＿ｉｎｓｔ＿ｉｓｓｕｅｄ  ６４６入力を介して、ポリシーマネージャ６０４に伝達する。実行ユニット１１４は、自身がスレッドコンテキストの命令をコミットしたことを、各々のＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ  ６４４入力を介して、ポリシーマネージャ６０４に伝達する。一実施形態で、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ  ６４４信号は、命令の実行が完了したことを示す。別の実施形態では、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ  ６４４は、命令がフラッシュされないよう（即ち、最終的に実行を完了するよう）保証されているが、命令がまだ完了していないことを示す。重要な点は、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ  ６４４入力が、単にディスパッチされた命令（ＰＭ＿ＴＣ＿ｉｎｓｔ＿ｉｓｓｕｅｄ入力６４６によって伝達される）ではなく、実行された命令に関する情報をポリシーマネージャ６０４に提供することである（単にディスパッチされた命令は、理論的にディスパッチされても完了できないものがある点で、異なっている）。このことは、アプリケーション内の一部のスレッドが特定のサービス品質を必要とする場合があるので、ポリシーマネージャ６０４にとって重要となり得る。一実施形態で、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号６４４は、ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４の登録されたバージョンである。したがって、プロセッサコア６０６は、種々のスレッドコンテキストの命令の発行及び実行と、スレッドコンテキストの状態とに関するフィードバックを、ＰＭ＿ＴＣ＿ｉｎｓｔ＿ｉｓｓｕｅｄ  ６４６入力、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ  ６４４入力、及びＰＭ＿ＴＣ＿ｓｔａｔｅ  ６４２入力を介して、提供する。
【００３７】
一実施形態で、ディスパッチスケジューラ６０２はまた、ポリシーマネージャ６０４にリラックス機能を提供する。この機能の目的は、マイクロプロセッサ１００が、アプリケーションのスレッドコンテキストがプロセッサ帯域全てを必要としない場合に、実際にスリープモードに入ることなしに節電するのを可能にすることにある。リラックス機能は、スケジュールすべき追加のスレッドコンテキストが存在するかのように動作する。しかし、リラックススレッドコンテキストが発行のために選択されても、ディスパッチスケジューラ６０２は命令を発行しない。ポリシーマネージャ６０４は、（ＶＰＥ毎の）ＲＥＬＡＸ＿ＬＥＶＥＬカウンタを維持する。このＲＥＬＡＸ＿ＬＥＶＥＬカウンタは、インクリメントの場合はＲＥＬＡＸ＿ＲＡＴＥを使用し、リラックスされた命令スロットが完了するとディクリメントされることを除けば、以下に示すＴＣ＿ＬＥＶＥＬ  ９１８カウンタと同様に動作する。一実施形態で、マイクロプロセッサ１００は、ソフトウェアによるＲＥＬＡＸ＿ＲＡＴＥの指定を可能にするＴＣＳｃｈｅｄｕｌｅレジスタ９０２に類似した、ＶＰＥ毎のＶＰＥＳｃｈｅｄｕｌｅレジスタを含む。リラックス機能は、表１に記載したＰＭ＿ｖｐｅ＿ｒｅｌａｘ＿ｅｎａｂｌｅ信号を介して、イネーブル又はディセーブル（disabled）にされ、リラックススレッドコンテキスト優先順位はＰＭ＿ｖｐｅ＿ｒｅｌａｘ＿ｐｒｉｏｒｉｔｙ信号を介して指定される。
【００３８】
一実施形態で、ディスパッチスケジューラ６０２は、ポリシーマネージャ６０４に例外機能も提供する。例外機能の目的は、例外スレッドコンテキストが、通常のスレッドコンテキストとは独立して独自の優先順位を保持できるようにすることにある。ポリシーマネージャは、（ＶＰＥ毎の）ＥＸＣ＿ＬＥＶＥＬカウンタを維持する。このＥＸＣ＿ＬＥＶＥＬカウンタは、インクリメントの場合はＥＸＣ＿ＲＡＴＥを使用し、例外命令スロットが完了するとディクリメントされることを除けば、以下に示すＴＣ＿ＬＥＶＥＬ  ９１８カウンタと同様に動作する。例外モードがイネーブルにされ、ＶＰＥに対して例外が適用されると、ＶＰＥのスレッドコンテキストは全て例外優先順位に設定される。一実施形態で、ソフトウェアは、ＶＰＥＳｃｈｅｄｕｌｅレジスタを介してＥＸＣ＿ＲＡＴＥを指定する。例外機能は、表１に記載したＰＭ＿ｖｐｅ＿ｅｘｃ＿ｅｎａｂｌｅ信号を介してイネーブル又はディセーブルにされ、例外スレッドコンテキスト優先順位はＰＭ＿ｖｐｅ＿ｅｘｃ＿ｐｒｉｏｒｉｔｙ信号を介して指定される。
【００３９】
次に図３を参照すると、ブロック図は、図２のディスパッチスケジューラ６０２と、命令／スキッドバッファ１０６に関連付けられた命令選択ロジック２０２とを、より詳しく示したものである。命令選択ロジック２０２は、コンパレータ７１４で制御される、ＭＵＸ  ７２４のツリー構造を含む。各ＭＵＸ  ７２４は、２つの異なるスレッドコンテキストから命令２０６を受信する。各ＭＵＸ  ７２４はまた、命令２０６に対応するＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８も受信する。更に、各ＭＵＸ  ７２４と関連付けられたコンパレータ７１４は、２つのスレッドコンテキストに対応するＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ信号ペアを受信し、関連付けられたＭＵＸ  ７２４を制御して、最も高いＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８値を有するＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８と命令２０６を選択する。選択された命令２０６及びＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８は、最終のＭＵＸ  ７２４が実行パイプラインへ送り出すために最も高いＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８を伴う選択された命令２０４を選択するまで、ツリーを伝播する。
【００４０】
図３は、ディスパッチスケジューラ６０２のロジック、即ち、ストールドインジケータ７０４、発行可能命令ロジック７０８、及びラウンドロビンロジック７１２を示す。一実施形態で、ストールドインジケータ７０４及び発行可能命令ロジック７０８は、各スレッドコンテキストのためにディスパッチスケジューラ６０２内に複製され、各スレッドコンテキストに対してＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８を生成する。対照的に、ラウンドロビンロジック７１２は、取り得る各々のＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２に対して一度インスタンス化され、各ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２に対してラウンドロビンインジケータを生成する。例えば、図３に示す実施形態で、ポリシーマネージャ６０４は、取り得る４つのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｉｙ  ６５２のうちの１つを指定できる。これにより、ラウンドロビンロジック７１２は、ディスパッチスケジューラ６０２内で４回インスタンス化され、４つのラウンドロビンインジケータをそれぞれ生成する。
【００４１】
一実施形態で、ラウンドロビンインジケータは、マイクロプロセッサ１００のスレッドコンテキスト毎に１ビットを有する。各々のスレッドコンテキストと関連付けられたラウンドロビンインジケータのビットが、ラウンドロビンビット７４８として提供される。ラウンドロビンビット７４８が真である場合は、現在同じＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２値を有するスレッドコンテキストの中で、該当するスレッドコンテキストが、ラウンドロビン方式により発行される順番になったことを意味する。
【００４２】
発行可能命令ロジック７０８は、図１の実行ユニット１１４からの非ストールイベント信号１２８及びストールイベント信号１２６と、図２のポリシーマネージャ６０４からのＰＭ＿ＴＣ＿ｂｌｏｃｋ  ６５４信号と、命令／スキッドバッファ１０６からの空の信号３１８と、ＴＣ状態７４２信号とを受信する。一実施形態で、ＴＣ状態７４２信号は、図２のＰＭ＿ＴＣ＿ｓｔａｔｅ  ６４２信号に類似した情報を伝達する。発行可能命令ロジック７０８は、スレッドコンテキストを識別するストールイベント信号１２６に応答してストールドインジケータ７０４をセットし、スレッドコンテキストをストール状態としてマークする。発行可能命令ロジック７０８はまた、ストールイベント１２６に応答して状態を格納し、ストールの原因を保存する。逆に、発行可能命令ロジック７０８は、非ストールイベント１２８がストールの原因に関連している場合、その非ストールイベント信号１２８に応答してストールドインジケータ７０４を解除する。発行可能命令ロジック７０８は、その入力に応答して発行可能７４６信号を生成する。スレッドコンテキスト用の命令／スキッドバッファ１０６の読み取りポインタによって指定された命令２０６が発行可能である場合、発行可能７４６信号は真となる。一実施形態で、スレッドコンテキストがＡｃｔｉｖｅ（アクティブ）状態にあって他の条件（Ｈａｌｔｅｄ（停止）、Ｗａｉｔｉｎｇ（待機）、Ｓｕｓｐｅｎｄｅｄ（中断）、又はＹｉｅｌｄｅｄの状態にある等）によってブロックされていないことをＴＣ状態信号７４２が示しており、ストールドインジケータ７０４が偽であり、並びにＰＭ＿ＴＣ＿ｂｌｏｃｋ  ６５４と空の３１８信号とが偽である場合、命令は発行可能である。
【００４３】
発行可能７４６ビットと、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２ビットと、ラウンドロビンビット７４８とが組み合わされて、ＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８が作成される。図３の実施形態では、発行可能ビット７４６が最上位ビット、ラウンドロビンビット７４８が最下位ビット、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２が中位の２ビットである。前述から観察できるように、発行可能ビット７４６はＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２の最上位ビットであるので、発行不可能な命令は、どの発行可能な命令よりも優先順位が低くなる。逆に、複数のスレッドコンテキストが、発行可能な命令及び同一の最も高いＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２を有する場合、ラウンドロビンビット７４８だけがスレッドの選択に使用される。
【００４４】
次に図４を参照すると、本発明に係る図３のディスパッチスケジューラ６０２の動作を示すフローチャートが示されている。フローは、ブロック８０２で始まる。
【００４５】
ブロック８０２で、ディスパッチスケジューラ６０２は、各ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２に対するラウンドロビンインジケータをそれぞれ初期化する。フローはブロック８０４に進む。
【００４６】
ブロック８０４で、ディスパッチスケジューラ６０２は、スレッドコンテキスト毎に、スレッドコンテキストが発行可能な命令２０６を持っているかどうかを判定する。つまり、各スレッドコンテキストに対する発行可能命令ロジック７０８は、発行可能７４６信号の値を生成する。一実施形態で、スレッドコンテキストがＡｃｔｉｖｅ（アクティブ）状態にあって他の条件（Ｈａｌｔｅｄ（停止）、Ｗａｉｔｉｎｇ（待機）、Ｓｕｓｐｅｎｄｅｄ（中断）、又はＹｉｅｌｄｅｄの状態にある等）によってブロックされていないことをＴＣ状態信号７４２が示しており、ストールドインジケータ７０４が偽であり、並びにＰＭ＿ＴＣ＿ｂｌｏｃｋ  ６５４と空の３１８信号とが偽である場合に限り、発行可能命令ロジック７０８は発行可能７４６信号において真信号を生成する。フローは、判断ブロック８０６に進む。
【００４７】
判断ブロック８０６で、ディスパッチスケジューラ６０２は、スレッドコンテキスト毎に発行可能信号７４６を調べて、発行可能命令２０６を持つスレッドコンテキストが存在するかどうかを判定する。存在しない場合は、デフォルト低消費電力スリープモード８０７に入る。一部の実施形態では、低消費電力スリープモードに入る前に特定のハウスキーピングタスクが実行される。例えば、ハウスキーピングタスクには、バッファからペンディングトランザクションをフラッシュすること、又は実行時間の長い演算（除算）を完了させることが含まれる。低消費電力スリープモードは、任意の節電状態として実装され得る。一実施形態で、低消費電力モードは、パイプライン演算を何も実行しないことで、節電を達成する。
【００４８】
次いで、フローは、少なくとも１つのスレッドコンテキストが発行可能な命令を持つに至るまで、ブロック８０４に戻る。発行可能な命令が確認されると、デフォルト低消費電力スリープモードは必要に応じて８０８で終了する。
【００４９】
ブロック８１０で、ディスパッチスケジューラ６０２は、スレッドコンテキストの発行可能７４６ビットと、スレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２と、スレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２のラウンドロビンビット７４８とに基づいて、各スレッドコンテキストの命令２０６に対するＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８を生成する。フローは、判断ブロック８１２に進む。
【００５０】
ブロック８１２で、ディスパッチスケジューラ６０２は、最も高いＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ２０８を有する命令２０６を発行する。言い換えると、ディスパッチスケジューラ６０２は、発行可能な命令を有し、且つ最も高いＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２を有するスレッドコンテキストから、命令を発行する。複数のスレッドコンテキストがその基準を満たしている場合、ディスパッチスケジューラ６０２は、スレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２のラウンドロビンビット７４８によって示された発行順に当たるスレッドコンテキストから、命令を発行する。フローは、ブロック８１４に進む。
【００５１】
ブロック８１４で、ラウンドロビンロジック７１２は、どのスレッドコンテキストが選択されその命令が発行されたかに基づいて、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２のためのラウンドロビンインジケータを更新する。フローは、ブロック８０４に戻る。
【００５２】
したがって、図４により、デフォルト低消費電力スリープモードに自動的に入るための手法を、本発明が含むことを示している。このモードへの切り替えは、単純な判定基準（即ち、スレッドのブロックされた状態）に基づいて行われることに注目されたい。このため、複雑な制御手法は必要ない。デフォルト低消費電力スリープモードに入ると電力が節約されるが、全てのスレッドがすでにブロックされた状態になっているので、このモードになってもプロセッサ性能は低下しないことにも注目されたい。
【００５３】
本発明の種々の実装が可能である。例えば、一実施形態では、全てのユニットがアイドルであり、且つ実行可能なスレッドコンテキストが存在しない場合、トップレベルのクロックゲーター（ｇａｔｅｒ）だけがクロックを遮断する。ＭＩＰＳ３２  ３４Ｋプロセッサコアファミリー命令セットからの命令を使用する場合が開示される一実施形態では、次の条件のいずれも満たされていない場合にスレッドコンテキストは実行可能である。ここで条件とは、ＷＡＩＴ命令が実行されている、ＹＩＥＬＤ命令が実行されている、Ｈａｌｔビットがセットされている、自由ビットがセットされていない、スレッドコンテキストがスレッド間通信（ＩＴＣ）アクセスで待機している、というものである。この実施形態では、ｙｉｅｌｄ及びＩＴＣインターフェース上のロジックの少なくとも一部が、フリーランニングプロセッサクロック（例えば、ｇｆｃｌｋ）上になければならず、そうすることで、それらのブロック内の外部アクティビティがコアをウェークアップさせることができる。
【００５４】
次に図５を参照すると、本発明に係る、図２のポリシーマネージャ６０４、及びＴＣＳｃｈｅｄｕｌｅレジスタ９０２を表すブロック図が示されている。
【００５５】
マイクロプロセッサ１００は、スレッドコンテキスト毎にＴＣＳｃｈｅｄｕｌｅレジスタ９０２を含む。ＴＣＳｃｈｅｄｕｌｅレジスタ９０２は、ソフトウェアでプログラム可能なレジスタであり、ポリシーマネージャ６０４にスレッドスケジューリングヒントを与えるための手段をソフトウェアに提供する。一実施形態で、ＴＣＳｃｈｅｄｕｌｅレジスタ９０２は、図２及び表１を基に先に説明したコプロセッサ０レジスタ内に含まれ、特に、ポリシーマネージャ６０４内に含まれる。ＴＣＳｃｈｅｄｕｌｅレジスタ９０２は、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４、ＴＣ＿ＲＡＴＥ  ９１２、ＯＶ  ９１４、及びＰＲＩＯ  ９１６という６つのフィールドを含む。図５の実施形態では、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８フィールド、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６フィールド、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４フィールド、及びＴＣ＿ＲＡＴＥ  ９１２フィールドはそれぞれ４ビットを有し、ＰＲＩＯ  ９１６フィールドは２ビットを有し、ＯＶ  ９１４フィールドは１ビットを有する。
【００５６】
図５に示したポリシーマネージャ６０４ロジックは、制御ロジック９２４と、制御ロジック９２４に結合され、該制御ロジック９２４に出力を与えるコンパレータ９２２と、コンパレータ９２２に結合され、出力を該コンパレータ９２２への入力として提供するＴＣ＿ＬＥＶＥＬ  ９１８レジスタと、ＴＣ＿ＬＥＶＥＬ  ９１８レジスタに結合され、出力を該ＴＣ＿ＬＥＶＥＬ  ９１８レジスタへの入力として提供する３入力ＭＵＸ９２６とを有する。ＭＵＸ９２６は、その第１の入力で、ＴＣ＿ＬＥＶＥＬ  ９１８レジスタの出力を受信して、正確な値を保持する。ＭＵＸ９２６は、その第２の入力で、ＴＣ＿ＬＥＶＥＬ  ９１８レジスタの出力を入力として受けているディクリメンタ９３２の出力を受信する。ＭＵＸ９２６は、その第３の入力で、インクリメンタ９３４の出力を受信する。該インクリメンタ９３４の入力は、ＴＣ＿ＬＥＶＥＬ  ９１８レジスタの出力と、ＴＣ＿ＲＡＴＥ  ９１２を２倍する乗算器９３８の出力とを加算する加算器９３６の出力である。ＴＣ＿ＲＡＴＥ  ９１２は、スレッドコンテキストの所望の実行レート（即ち、単位時間あたりに完了すべき命令数）の指示値である。図５の実施形態で、ＴＣ＿ＲＡＴＥ  ９１２は、１６クロックサイクル毎に完了すべきスレッドの命令数を示す。ここで列挙したロジックは図５では１回だけしか示されていないが、このロジックは、スレッドコンテキスト毎にポリシーマネージャ６０４内で複製され、スレッドコンテキスト毎に、ＰＭ＿ＴＣ＿ｂｌｏｃｋ  ６５４信号及びＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２信号を生成し、ＰＭ＿ＴＣ＿ｓｔａｔｅ  ６４２信号、ＰＭ＿ＴＣ＿ｉｎｓｔ＿ｃｏｍｍｉｔｔｅｄ  ６４４信号、ＰＭ＿ＴＣ＿ｉｎｓｔ＿ｉｓｓｕｅｄ  ６４６信号、及びＰＭ＿ｇｃｌｋ  ６５８信号を受信する。
【００５７】
ポリシーマネージャ６０４は、修正されたリーキィバケットアルゴリズム（leaky-bucket algorithm）を採用することで、スケジューラ１０８の高レベルなスレッドスケジューリングポリシーを達成している。ＴＣ＿ＬＥＶＥＬ  ９１８レジスタは、バケット内の水位に例えられる。ＴＣ＿ＬＥＶＥＬ  ９１８は、本質的にスレッドコンテキストによって処理される必要がある仕事量の指標である。一実施形態で、ＴＣ＿ＬＥＶＥＬ  ９１８レジスタは、ゼロに初期化される１２ビットレジスタを含む。制御ロジック９２４は、制御信号９２８を生成して、ＭＵＸ９２６が選択する入力を制御する。３２クロックサイクル毎に、ＭＵＸ９２６は、インクリメンタ９３６の出力を選択してＴＣ＿ＬＥＶＥＬ  ９１８レジスタに格納する。これにより、ＴＣ＿ＬＥＶＥＬ  ９１８の量が（ＴＣ＿ＲＡＴＥ＊２＋１）だけ増加する。一実施形態では、ＴＣ＿ＲＡＴＥ  ９１２に基づくＴＣ＿ＬＥＶＥＬ  ９１８の更新の間隔を示すクロックサイクル数もプログラム可能である。他のクロックサイクルにおいて、スレッドコンテキストの命令が実行のためにコミットされていることをＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号６４４が示している場合、ＭＵＸ９２６は、ディクリメンタ９３２の出力を選択してＴＣ＿ＬＥＶＥＬ  ９１８をディクリメントする。これにより、ソフトウェアは、スレッドのＴＣＳｃｈｅｄｕｌｅレジスタ９０２のＴＣ＿ＲＡＴＥ  ９１２値を調整することにより、スレッドコンテキストのバケット内の仮想水位に影響を与えることができる。図５の実施形態で、ＴＣ＿ＲＡＴＥ  ９１２の値は、マイクロプロセッサ１００が、スレッドコンテキストについて、１６クロックサイクルあたり、どれだけの数の命令を実行することが求められるかを示す。
【００５８】
リーキィバケット内の水位が増すと、水圧が上昇し、水が漏れ出る速度も速くなる。同じ様に、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭフィールド９０４／９０６／９０８は、仮想水圧範囲を定義する単調増加値でプログラミングされる。コンパレータ９２２は、ＴＣ＿ＬＥＶＥＬ  ９１８をＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ  ９０４／９０６／９０８と比較し、それらの結果を制御ロジック９２４に提供する。制御ロジック９２４は、ＴＣ−ＬＥＶＥＬ  ９１８がどの仮想水圧範囲に入っているかに基づいて、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２を生成する。図５のリーキィバケットに示すように、ＴＣ＿ＬＥＶＥＬ  ９１８の最上位のニブルがＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４の値より大きい場合、制御ロジック９２４はＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２の値として３（最高の優先順位）を生成する。ＴＣ＿ＬＥＶＥＬ  ９１８の最上位のニブルがＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４の値とＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６の値との間にある場合、制御ロジック９２４はＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２の値として２を生成する。ＴＣ＿ＬＥＶＥＬ  ９１８の最上位のニブルがＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６の値とＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８の値との間にある場合、制御ロジック９２４はＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２の値として１を生成する。ＴＣ＿ＬＥＶＥＬ  ９１８の最上位のニブルがＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８の値より小さい場合、制御ロジック９２４はＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２の値として０（最低の優先順位）を生成する。同じ様に、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２のレベルを上げると、ディスパッチスケジューラ６０２上で、スレッドコンテキストの命令を発行する圧力が強められ、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２のレベルを下げると、ディスパッチスケジューラ６０２上で、スレッドコンテキストの命令を発行する圧力が弱められる。
【００５９】
上記したように、マイクロプロセッサ１００を使用するいくつかのアプリケーションでは、様々なスレッドがそれぞれ異なる実行レートを必要とすることが考えられるが、このような実行レートは、ＴＣ＿ＲＡＴＥ  ９１２フィールドを使用してプログラミングすることができる。更に、様々なスレッドがそれぞれ異なる分解能（ｒｅｓｏｌｕｔｉｏｎ）（即ち、命令実行レートが計測される期間）を必要とすることも考えられる。つまり、一部のスレッドは、高い実行レートを必要としていないとはいえ、最低時間を超える命令実行を求めない場合がある。つまり、スレッドは、特定のサービス品質を必要としている。図５及び図５の説明から観察できるように、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ  ９０４／９０６／９０８を採用することで、スレッド毎に所望の分解能を達成できる。互いに比較的接近しているＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ  ９０４／９０６／９０８を割り当てることにより、より高い分解能が達成され得る。一方、互いに比較的離れているＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ  ９０４／９０６／９０８を割り当てると、分解能は低くなる。したがって、ソフトウェアでは、ポリシーマネージャ６０４を介して、スレッドコンテキスト毎にＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ  ９０４／９０６／９０８を調整し、命令実行レートについて必要な分解能を達成することで、所望のサービス品質を達成することができる。
【００６０】
ＯＶビット９１４がセットされた場合、制御ロジック９２４は、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ  ９０４／９０６／９０８、ＴＣ＿ＲＡＴＥ  ９１２、及びＴＣ＿ＬＥＶＥＬ  ９１８の値を無視し、代わりに、ＰＲＩＯフィールド９１６で指定された値に等しい値をＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２信号で生成する。これにより、ソフトウェアは、必要に応じて、リーキィバケットポリシーをバイパスし、１つ又は複数のスレッドコンテキストの優先順位を直接制御することができる。
【００６１】
一実施形態では、ＴＣ−ＬＥＶＥＬ  ９１８が所定のクロックサイクル数の間、最大値に飽和した場合、マイクロプロセッサ１００は、割り込みを通知する。これにより、ソフトウェアは、より高いレベルで、特に、１つ又は複数のＴＣＳｃｈｅｄｕｌｅレジスタ９０２の値を変更することにより、スレッドスケジューリングを調整できる。一実施形態では、ソフトウェアで割り込みをマスクすることができる。
【００６２】
一実施形態で、マイクロプロセッサ１００の命令セットは、ＹＩＥＬＤ命令を含んでいる。スレッドコンテキストはＹＩＥＬＤ命令を実行することで、指定されたイベントが発生するまでそのスレッドコンテキストの命令の発行を停止するようスケジューラ１０８に指示することができる。一実施形態で、スレッドがＹＩＥＬＤされると、ポリシーマネージャ６０４は、スレッドのＴＣ＿ＬＥＶＥＬ  ９１８の更新を一時的にディセーブルにして、スレッドがｕｎＹＩＥＬＤ状態になるまでスレッドのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙを保護する。別の実施形態で、ポリシーマネージャ６０４は、スレッドのＴＣ＿ＬＥＶＥＬ  ９１８を引き続き更新する。これでおそらくスレッドのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙは上昇し、その結果、スレッドがｕｎＹＩＥＬＤ状態になっても、スレッドの優先順位は一時的に高く、スレッドによるポンプの本質的なプライミングが支援される（aid the thread in essentially priming its pump）。一実施形態で、ＹＩＥＬＤされたスレッドに対するポリシーマネージャ６０４の挙動は、ソフトウェアによってプログラム可能である。
【００６３】
特定のビット数を使用してＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ  ９０４／９０６／９０８、ＴＣ＿ＲＡＴＥ  ９１２、ＴＣ＿ＬＥＶＥＬ  ９１８等を指定する実施形態が説明されているが、スケジューラ１０８は、該実施形態で使用される値に決して限定されるものではなく、むしろ、スケジューラ１０８は、マイクロプロセッサ１００が使用される特定のアプリケーションで必要な種々のビット数、優先順位、レベル、レート等を使用するよう構成され得る、ことを理解されたい。更に、修正されたリーキィバケット式スレッドスケジューリングポリシーを採用したポリシーマネージャ６０４を説明してきたが、ポリシーマネージャ６０４は、種々のスレッドスケジューリングポリシーの中から任意のものを採用し、分岐スケジューラ１０８の利点を引き続き確保できるよう構成可能であることを、理解されたい。例えば、一実施形態で、ポリシーマネージャ６０４は、全てのスレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２出力が同じ値に固定されている単純なラウンドロビンスレッドスケジューリングポリシーを採用する。別の実施形態で、ポリシーマネージャ６０４は、タイムスライス式スレッドスケジューリングポリシーを採用する。該スレッドスケジューリングポリシーでは、１つのスレッドコンテキストのＴＣＳｃｈｅｄｕｌｅレジスタ９０２で指定された連続クロックサイクル数の間、そのスレッドコンテキストに対するＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２の出力が最も高い優先順位に引き上げられる。次いで、別のスレッドコンテキストのＴＣＳｃｈｅｄｕｌｅレジスタ９０２で指定された（おそらく異なる）連続クロックサイクル数の間、そのスレッドコンテキストに対するＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２の出力が最も高い優先順位に引き上げられ、更に、各々のスレッドコンテキストにタイムスライス方式で同様のことが行われる。
【００６４】
一実施形態で、マイクロプロセッサ１００の命令セットは、ＦＯＲＫ命令を含む。このＦＯＲＫ命令は、使用可能なスレッドコンテキストを割り当てて、その新規に割り当てられたスレッドコンテキスト内の新規のスレッドの実行をスケジューリングするためのものである。一実施形態で、スレッドコンテキストが新規のスレッドコンテキストをＦＯＲＫすると、親スレッドコンテキストのＴＣ＿ＲＡＴＥ  ９１２は、親スレッドコンテキストと子スレッドコンテキストとの間で平等に分割される（即ち、新規のＴＣ＿ＲＡＴＥ  ９１２は、旧ＴＣ＿ＲＡＴＥ  ９１２を２分割して得られる）。これには、スレッドコンテキストが、元々割り当てられている処理帯域幅より広い処理帯域幅を要求するのを防止するという利点がある。
【００６５】
上記から観察できるように、スケジューラ１０８を２つの部分に分岐させることにより、ディスパッチスケジューラ６０２（プロセッサコア６０６に含まれる）を比較的簡単にすることができる（これによりディスパッチスケジューラ６０２の面積及び消費電力を比較的小さくすることができる）とともに、スレッドスケジューリングポリシーのアプリケーション固有の複雑性さをポリシーマネージャ６０４（プロセッサコア６０６の外部に位置する）に配置することができる。このことは、次の理由で有利である。つまり、アプリケーションの中には、高度なポリシーマネージャ６０４を必要としないものもあり、それらは、スケジューラ１０８が分岐されない場合に全てのアプリケーションに課せられる余分な面積及び消費電力の要件を負わなくてもよいからである。
【００６６】
次に、図６を参照すると、本発明に係る図５のポリシーマネージャ６０４の動作を表すフローチャートが示されている。図６では、単一のスレッドコンテキストに対する動作しか表示されていないが、図６で示した動作は、各スレッドコンテキストに対してポリシーマネージャ６０４内で発生する。フローは、ブロック１００２で開始する。
【００６７】
ブロック１００２で、ポリシーマネージャ６０４はＴＣ＿ＬＥＶＥＬ  ９１８をゼロに初期化する。フローはブロック１００４に進む。
【００６８】
ブロック１００４で、ポリシーマネージャ６０４はＰＭ＿ｇｃｌｋ  ６５８の１サイクル待機する。フローは、判断ブロック１００６に進む。
【００６９】
判断ブロック１００６で、ポリシーマネージャ６０４は、フローが判断ブロック１００６に最後に到達してから３２のＰＭ＿ｇｃｌｋ  ６５８が経過したかどうかを判定する。その時間が経過していない場合、フローは判断ブロック１０１２に進み、経過している場合、フローはブロック１００８に進む。
【００７０】
ブロック１００８で、ＴＣ＿ＬＥＶＥＬ  ９１８は、ＴＣ＿ＲＡＴＥ  ９１２の値を２倍した結果に１を加算した分だけ増やされる。フローは判断ブロック１０１２に進む。
【００７１】
判断ブロック１０１２で、ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ  ６４４が真かどうかを判定する。真でない場合、フローは判断ブロック１０１６に進み、真である場合、フローはブロック１０１４に進む。
【００７２】
ブロック１０１４では、ＴＣ＿ＬＥＶＥＬ  ９１８がディクリメントされる。フローは、判断ブロック１０１６に進む。
【００７３】
判断ブロック１０１６で、ポリシーマネージャ６０４はＯＶビット９１４がセットされているかどうかを判定する。セットされていない場合、フローは判断ブロック１０２２に進み、セットされている場合、フローは１０１８に進む。
【００７４】
ブロック１０１８で、ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２について、ＰＲＩＯ  ９１６フィールドの値に等しい値を生成する。フローはブロック１００４に戻る。
【００７５】
判断ブロック１０２２で、ポリシーマネージャ６０４は、ＴＣ＿ＬＥＶＥＬ  ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４の値より大きいかどうかを判定する。大きくない場合、フローは判断ブロック１０２６に進み、大きい場合、フローはブロック１０２４に進む。
【００７６】
ブロック１０２４で、ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２について、値３（最高の優先順位）を生成する。フローはブロック１００４に戻る。
【００７７】
ブロック１０２６で、ポリシーマネージャ６０４は、ＴＣ＿ＬＥＶＥＬ  ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６の値より大きいかどうかを判定する。大きくない場合、フローは判断ブロック１０３２に進み、大きい場合、フローはブロック１０２８に進む。
【００７８】
ブロック１０２８で、ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２について、値２を生成する。フローはブロック１００４に戻る。
【００７９】
判断ブロック１０３２で、ポリシーマネージャ６０４は、ＴＣ＿ＬＥＶＥＬ  ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８の値より大きいかどうかを判定する。大きくない場合、フローはブロック１０３６に進み、大きい場合、フローはブロック１０３４に進む。
【００８０】
ブロック１０３４で、ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２について、値１を生成する。フローはブロック１００４に戻る。
【００８１】
ブロック１０３６で、ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ  ６５２について、値０（最低の優先順位）を生成する。フローはブロック１００４に戻る。
【００８２】
本発明の種々の実施形態を上記したが、これらは例として提示したものであり、これらに限定されるものではない。本発明の趣旨及び範囲から逸脱することなく、形態及び細部について種々の変形が可能であることは当業者には明白である。
【００８３】
例えば、ハードウェアにて（例えば、中央演算処理装置（「ＣＰＵ」）、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、プロセッサコア、システムオンチップ（「ＳＯＣ」）、又は他の任意のプログラマブルデバイスに内蔵又は結合されて）実装された低消費電力仮想スレッドに加えて、ソフトウェアを格納するために構成されたコンピュータ使用可能（例えば可読）媒体等に配置されるソフトウェア（例えば、ソース、オブジェクト、機械語等、任意の形式で配置された、コンピュータ可読コード、プログラムコード、命令、及び／又はデータ）にて、実装を具現化することもできる。そのようなソフトウェアは、例えば、本明細書で説明した装置及び方法の機能、製造、モデル化、シミュレーション、記述（description）、及び／又はテストを可能にする。例えば、これを、一般的なプログラミング言語（Ｃ、Ｃ＋＋等）、ＧＤＳＩＩデータベース、ＶｅｒｉｌｏｇＨＤＬやＶＨＤＬ等を含むハードウェア記述言語（ＨＤＬ）、又は他の使用可能なプログラム、データベース、及び／若しくは、回路（即ち、回路図）キャプチャツールの使用を介して、達成することができる。そのようなソフトウェアは、半導体、磁気ディスク、光ディスク（例えば、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ）等の公知の任意のコンピュータ使用可能媒体に配置することができ、コンピュータ使用可能（例えば、可読）伝送媒体（例えば、搬送波又は他の任意の媒体（デジタル媒体、光媒体、又はアナログベースの媒体等））で具現化されるコンピュータデータ信号として配置することもできる。したがって、インターネットやイントラネット等の通信ネットワークを介してソフトウェアを伝送することができる。
【００８４】
本明細書で説明した装置及び方法は、マイクロプロセッサコア（例えば、ＨＤＬで具現化される）等の半導体知的財産コア（semiconductor intellectual property core）に含めることができ、集積回路製造においてハードウェアに変換できることを理解されたい。また、本明細書で説明した装置及び方法は、ハードウェアとソフトウェアとの組み合わせとして具現化され得る。したがって、本発明は、上記した例示的な実施形態のいずれによっても限定されるものではなく、特許請求の範囲及びその等価物に従ってのみ定義されるものである。
【図面の簡単な説明】
【００８５】
【図１】本発明の実施形態に従って使用可能なマルチスレッディングマイクロプロセッサを示す。
【図２】本発明の実施形態に従って利用可能な、ディスパッチスケジュールやポリシーマネージャを含む分岐スケジューラを示す。
【図３】図２の分岐スケジューラにおいて使用され得るディスパッチスケジューラを示す。
【図４】図３のディスパッチスケジューラと関連付けられた処理工程を示す。
【図５】図２の分岐スケジューラにおいて使用され得るポリシーマネージャを示す。
【図６】図５のポリシーマネージャと関連付けられた処理工程を示す。
【図１】
2008538436.tif 000005
【図２】
2008538436.tif 000006
【図３】
2008538436.tif 000007
【図４】
2008538436.tif 000008
【図５】
2008538436.tif 000009
【図６】
2008538436.tif 000010