JP2008530655A - マルチスレッディングマイクロプロセッサ内の分岐型スレッドスケジューラ - Google Patents

マルチスレッディングマイクロプロセッサ内の分岐型スレッドスケジューラ Download PDF

Info

Publication number
JP2008530655A
JP2008530655A JP2007554108A JP2007554108A JP2008530655A JP 2008530655 A JP2008530655 A JP 2008530655A JP 2007554108 A JP2007554108 A JP 2007554108A JP 2007554108 A JP2007554108 A JP 2007554108A JP 2008530655 A JP2008530655 A JP 2008530655A
Authority
JP
Japan
Prior art keywords
instruction
logic
threads
scheduler
priority
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007554108A
Other languages
English (en)
Inventor
ジヨーンズ,ダレン・エム
キンター,リアン・シー
キセル,ケビン・デイ
ピーターセン,トーマス・エイ
Original Assignee
ミップス テクノロジーズ インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ミップス テクノロジーズ インコーポレイテッド filed Critical ミップス テクノロジーズ インコーポレイテッド
Publication of JP2008530655A publication Critical patent/JP2008530655A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode

Abstract

マルチスレッディングプロセッサで同時実行する複数のスレッド命令をディスパッチする分岐型命令スケジューラである。スケジューラはカスタマによりカスタマイズできない再使用可能コアの第1部分、カスタマイズ可能なコア外部の第2部分、第2部分をコアに結合するインタフェースを含む。第2部分はカスタマの特定アプリケーションに対してカスタマイズされてもよいスレッドスケジューリングポリシーを実施する。第1部分はスケジューリングポリシー不可知でよく、第2部分にて伝えられるスケジューリングポリシーに基づき各クロックサイクルでスレッド命令を実行ユニットに発行する。第2部分はスレッドのためのプライオリティを介してスケジューリングポリシーを伝える。コアが命令をコミットする場合、コミットされた命令がどのスレッドにあるのか第2部分に伝え、第2部分がプライオリティを更新できるようにする。

Description

本出願は、各々があらゆる目的のためにその全体が参照として本明細書に組み込まれる以下の非仮出願の米国特許出願に関し、それらとともに出願される。
Figure 2008530655
本発明は一般にマルチスレッドプロセッサの分野に関し、詳細には複数の実行スレッドの中での命令発行スケジューリングに関する。
マイクロプロセッサの設計者は、マイクロプロセッサの性能を高めるために多くの技術を用いる。ほとんどのマイクロプロセッサは、固定された周波数で動くクロック信号を使用して動作する。各クロックサイクルで、マイクロプロセッサの回路はそれらの各々の機能を実行する。HennessyとPattersonによれば(「A Quantitative Approach」、Computer Architecture、第3版参照)、マイクロプロセッサの性能の真の尺度は、プログラムまたはプログラムの集合を実行するために必要とされる時間である。この観点から、マイクロプロセッサの性能はそのクロック周波数の機能、命令を実行するために必要とされるクロックサイクルの平均数(または代替的に述べると、クロックサイクル当たりの実行される命令の平均数)、およびプログラムまたはプログラムの集合の中で実行される命令の数である。半導体の科学者および技術者は継続的に、主にトランジスタのサイズを減らすことによって、マイクロプロセッサがより速いクロック周波数で動くことができるようにしており、その結果、切り替え時間はより速くなる。実行される命令の数は、プログラムによって実行されるべきタスクによって大部分が固定されているが、マイクロプロセッサの命令セットのアーキテクチャによっても影響を受ける。大幅な性能の増強は、クロックサイクル当たりの命令を向上させる構造的および組織的概念、特には並列処理の概念によって実現されてきた。
マイクロプロセッサのクロック周波数とともに、クロックサイクル当たりの命令を向上させた並列処理の1つの概念は、マイクロプロセッサのパイプライン段階の中で複数の命令の実行を重複するパイプライニングである。理想的な状況では、各クロックサイクルで、1つの命令は、命令の異なる機能を実行する新たな段階にパイプラインを下げる。したがって、個別の命令の複数のサイクルが重複するために、各々の個別の命令は複数のクロックサイクルを完了させるが、命令当たりのクロックの平均は減少される。パイプライニングの性能の向上は、プログラム内の命令が許す程度まで、すなわち命令が実行するためにその先行値に依存することがなく、したがってその先行値と並行して実行することができる程度まで実現される可能性があり、このことは一般に命令レベルの並列処理と呼ばれる。現代のマイクロプロセッサによって命令レベルの並列処理が活用される別の方法は、クロックサイクル当たりの実行のために複数の命令を発行するものである。これらのマイクロプロセッサは一般に、スーパースカラマイクロプロセッサと呼ばれる。
上述のものは、個別の命令レベルでの並列処理に関連している。しかしながら、命令レベルの並列処理の活用を通じて達成されることができる性能の向上は制限されている。制限された命令レベルの並列処理、およびその他の性能を制約する問題によって課せられる様々な制約は、一般にスレッドレベルの並列処理と呼ばれる命令のブロックまたはシーケンスまたはストリームのレベルでの並列処理を活用することの利点を最近一新している。スレッドとは単に、プログラム命令のシーケンスまたはストリームのことである。マルチスレッド型マイクロプロセッサは、例えばインタリーブ化されたスレッド、ブロック化されたスレッドなどの様々なスレッド、または同時マルチスレッディングの命令のフェッチおよび発行を命じる何らかのスケジューリングポリシーによって、複数のスレッドを同時に実行する。マルチスレッド型マイクロプロセッサは典型的に、同時に行われる方法で、複数のスレッドがマイクロプロセッサの機能ユニット(例えば命令のフェッチおよびデコードユニット、キャッシュ、分岐予測ユニット、およびロード/ストア、整数、浮動小数点、SIMD等の実行ユニット)を共有することを可能にする。しかしながらマルチスレッド型マイクロプロセッサは、命令をフェッチして、発行するためにスレッド間で迅速に切り替えを行う能力を促進するように、多重プログラムカウンタおよび汎用レジスタセットなどの各々のスレッドの固有の状態をストアするためにリソースまたはコンテキストの複数のセットを含む。
マルチスレッディングマイクロプロセッサによって対処される性能を制約する問題の1つの例は、キャッシュミスのために行われなければならないマイクロプロセッサの外部のメモリへのアクセスには典型的に比較的長い待ち時間があるということである。現代のマイクロプロセッサベースのコンピュータシステムのメモリのアクセス時間は、キャッシュヒットのアクセス時間よりも1桁から2桁大きいことが一般的である。キャッシュ中のデータのミスに依存する命令は、メモリからデータがやって来るのを待つパイプラインにストールされる。結果的に、シングルスレッド型マイクロプロセッサのパイプライン段階の一部またはすべては、多くのクロックサイクルの間に有用な作業を何も行わないアイドル状態である場合がある。マルチスレッド型マイクロプロセッサは、メモリのフェッチの待ち時間の間に別のスレッドから命令を発行することによって、この問題を解決することが可能であり、それによって、ページフォルトでタスクの切り替えを行うオペレーティングシステムに幾分類似しているが、それよりもより高いレベルのグラニュラリティで有用な作業を行うように、パイプライン段階を前進させることができる。マルチスレッディングマイクロプロセッサによって対処される性能を制約する問題の別の例は、分岐の誤予測およびそれに付随して起こるパイプラインフラッシュのため、またはデータの依存性のため、または除算命令、浮動小数点命令などの待ち時間の長い命令のため、またはその他のためのパイプラインストールおよびそれらに付随するアイドルサイクルである。ここでもまた、別のスレッドから、その他の場合では(otherwise)アイドルであるパイプライン段階に命令を発行するマルチスレッド型マイクロプロセッサの能力は、スレッドを含むプログラムまたはプログラムの集合を実行するために必要とされる時間を大幅に減少させることができる。
上述のものから認められることができるように、複数のスレッドを同時に実行するプロセッサは、複数のスレッドを含むプログラムまたはプログラムの集合を実行するために必要とされる時間を減少させることができる。しかしながら、単一スレッド型プロセッサを超えてマルチスレッディングプロセッサが実現することができる性能の増強の程度は、プロセッサのスケジューリングポリシーに、すなわちプロセッサが実行のための命令を発行するために、様々なスレッドをどのようにスケジュールするのかということに大きく依存している場合がある。さらに適切なスレッドのスケジューリングポリシーは、プロセッサが使用される特定のアプリケーションに大きく依存している場合がある。例えばマルチスレッディングプロセッサは、ネットワークのスイッチまたはルータなどのリアルタイムの埋め込み型システム、RAIDコントローラ、プリンタ、スキャナ、ハンドへルドデバイス、デジタルカメラ、自動車、セットトップボックス、電気機器等、科学的コンピューティング、トランザクション処理、サーバコンピューティング、および汎用コンピューティングを含む様々なアプリケーションの中で用いられる可能性がある。これらのアプリケーションの各々は、マルチスレッディングプロセッサの性能を最適化するために、異なるスケジューリングポリシーを必要とする場合がある。その結果、様々なアプリケーションを用いるカスタマが、スレッドのスケジューリングポリシーをカスタマイズするための能力を、それらの特定の要件に合わせることができるようにすることが非常に望ましい。カスタマイズ可能なスレッドスケジューラは、様々なカスタマのアプリケーションの必要性に合わせるためにカスタマイズ可能な、マイクロプロセッサおよび/またはシステムの一部であってもよいマルチスレッディングマイクロプロセッサコアを設計しようとする場合に特に望ましい。このことは、マルチスレッディングのコアを様々な設計のために再使用可能のものとし、各アプリケーションのためにプロセッサ全体を再設計しなければならないことを回避するので、非常に望ましいものである。
しかしながらスレッドスケジューリング回路は、典型的にマイクロプロセッサの内部のパイプライン動作に緊密に結び付けられており、望ましくない副作用を有するかもしれないので、マイクロプロセッサの全体のスレッドスケジューリング回路をカスタマイズ可能なものにすることには問題がある。例えば、カスタマがパイプラインの内部の作用を理解することは難しい場合があり、したがってカスタマがスケジューラをカスタマイズすることは難しい。さらに、タイミングが重要な内部パイプラインの信号経路は必然的にカスタマに露出されており、カスタマのカスタムロジックがあまりにも遅い場合、マイクロプロセッサの全体のクロックスピードを低下させるかもしれない。最終的にカスタマは、場合によってはマイクロプロセッサコアの全体の動作および機能に重大な影響を与えることもあるバグを、スケジューラに持ち込むかもしれない。
したがって、上述のような、スレッドスケジューリングポリシーを望ましくない副作用を伴わずにカスタマイズ可能なものにすることができるアーキテクチャを備えたマルチスレッディングプロセッサが必要とされる。
本発明は分岐型スケジューラアーキテクチャを提供する。このスケジューラの一部分はカスタマのアプリケーションによって必要とされるスレッドスケジューリングポリシーを実施し、プロセッサコアの外部に含まれているので、プロセッサコアの適切な動作および再使用を危険にさらすことなく、カスタマによって安全に変更されることが可能である。このスケジューラの第2の部分は、非コア部分によって実施されるスレッドスケジューリングポリシーに基づいてサイクル毎の命令ディスパッチングを実行し、プロセッサコア内に含まれているので、カスタマによって変更されることが不可能である。第1部分とコアとの間のインタフェースは、第1部分が各スレッドについてのスケジューリングプライオリティを第2部分に伝えることを可能にし、コアが命令実行情報を第1部分に伝えることを可能にするので、第1部分はそのスレッドスケジューリングポリシーを達成するためにプライオリティを更新することができる。
1つの態様で、本発明は複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチするための分岐型スケジューラを提供する。このスケジューラは、プロセッサの少なくとも1つの実行ユニットに複数のスレッドの命令を発行する第1スケジューラロジックを含む。このスケジューラは、複数のスレッドのスケジューリングポリシーを実施する第2スケジューラロジックも含む。このスケジューラはまた、第2スケジューラロジックを第1スケジューラロジックと少なくとも1つの実行ユニットに結び付けるインタフェースも含む。このインタフェースは、第1スケジューラロジックが複数のスレッドの各々のためのプライオリティを第2スケジューラロジックから受け取るための第1信号を含む。第1スケジューラロジックは、プライオリティに基づいて、少なくとも1つの実行ユニットに命令を発行する。このインタフェースはまた、第2スケジューラロジックが複数のスレッドの各々についての命令実行情報を受け取るための第2信号も含む。第2スケジューラロジックは、命令実行情報に基づいてプライオリティを更新する。
別の態様で、本発明はマルチスレッディングプロセッサを提供する。このプロセッサは、プロセッサによって同時に実行される複数のスレッドの命令ディスパッチをスケジューリングするためのポリシーを実施するスレッドスケジューリングポリシーロジックを含む。このプロセッサはまた、スレッドスケジューリングポリシーロジックに結合されたプロセッサコアも含む。このプロセッサコアは、命令を実行する少なくとも1つの実行パイプラインを含む。このプロセッサコアは、スレッドスケジューリングポリシーロジックから受け取ったポリシーに基づいて、複数のスレッドの命令を実行パイプラインにディスパッチするために結合された命令ディスパッチャも含む。このプロセッサはまた、スレッドスケジューリングポリシーロジックとプロセッサコアとを結合するためのインタフェースも含む。このインタフェースは、スレッドスケジューリングポリシーロジックが、ポリシーを実施するために複数のスレッドの各々のためのディスパッチプライオリティを命令ディスパッチャに伝えるためのプライオリティ指標を含む。このインタフェースはまた、少なくとも1つの実行パイプラインが、スレッドのための命令の実行を少なくとも1つの実行パイプラインがコミットしているのかどうかを示す指標を、複数のスレッドの各々のためのスレッドスケジューリングポリシーロジックに伝える実行指標も含む。
別の態様で、本発明は複数のスレッドを同時に実行するマルチスレッディングプロセッサのスレッドスケジューリングポリシーを実施するためのスレッドスケジューリングポリシーマネージャを提供する。このポリシーマネージャは、各プロセッサのクロックサイクルで、複数のスレッドの各々のための命令が実行されたかどうかを示す指標を受け取るための入力を含む。このポリシーマネージャは、各プロセッサのクロックサイクルで、複数のスレッドの各々のための命令ディスパッチプライオリティを送るための出力も含む。このポリシーマネージャはまた、スレッドスケジューリングポリシーを実施するために入力に基づいて出力を生成する、入力に結合されたロジックも含む。
別の態様で、本発明は複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサコアを提供する。複数のスレッドの各々は命令のストリームを含む。このプロセッサコアは、プロセッサコアの外部のスレッドスケジューリングポリシーロジックにプロセッサコアを結合するためのインタフェースを含む。このインタフェースは、スレッドスケジューリングポリシーロジックが複数のスレッドの各々のプライオリティをプロセッサコアに伝えるための第1信号を含む。このインタフェースはまた、スレッドスケジューリングポリシーロジックが、プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるためのスレッドの命令の実行に関する複数のスレッドの各々についての情報を、プロセッサコアから受け取るための第2信号も含む。このプロセッサコアはまた第1信号を受け取り、第1信号で受け取られたプライオリティに基づいて、発行するための複数のスレッドのうちの少なくとも1つから、実行のために少なくとも1つの命令を選択するように結合されたスケジューラも含む。
別の態様で、本発明はマルチスレッディングプロセッサ内で複数の同時実行スレッドをスケジューリングするための方法を提供する。この方法は、第1クロックサイクルの間に、複数のスレッドの各々のためのスレッドスケジューリングプライオリティを命令ディスパッチロジックに送るスレッドスケジューリングポリシーロジックを含む。この方法はまた、第2クロックサイクルの間に、命令ディスパッチロジックにプライオリティを送るスレッドスケジューリングポリシーロジックに応答して、実行のために複数のスレッドから少なくとも1つの命令をディスパッチする命令ディスパッチロジックも含む。
別の態様で、本発明はコンピューティングデバイスとともに使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチするための分岐型スケジューラを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含む。このコンピュータ可読プログラムコードは、複数のスレッドの命令を発行する第1スケジューラロジックをプロセッサの少なくとも1つの実行ユニットに提供するための第1プログラムコードを含む。このコンピュータ可読プログラムコードは、複数のスレッドのスケジューリングポリシーを実施するための第2スケジューラロジックを提供する第2プログラムコードも含む。このコンピュータ可読プログラムコードはまた、第2スケジューラロジックを第1スケジューラロジックおよび少なくとも1つの実行ユニットに結合するインタフェースを提供するための第3プログラムコードも含む。このインタフェースは、第1スケジューラロジックが複数のスレッドの各々についてのプライオリティを第2スケジューラロジックから受け取るための第1信号を含む。第1スケジューラロジックは、プライオリティに基づいて、少なくとも1つの実行ユニットに命令を発行する。このインタフェースはまた、第2スケジューラロジックが複数のスレッドの各々についての命令実行情報を受け取るための第2信号も含む。第2スケジューラロジックは、命令実行情報に基づいてプライオリティを更新する。
別の態様で、本発明はコンピューティングデバイスとともに使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、マルチスレッディングプロセッサを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含む。このコンピュータ可読プログラムコードは、プロセッサによって同時に実行される複数のスレッド命令ディスパッチをスケジューリングするためのポリシーを実施するスレッドスケジューリングポリシーロジックを提供するための第1プログラムコードを含む。このコンピュータ可読プログラムコードは、スレッドスケジューリングポリシーロジックに結合されたプロセッサコアを提供するための第2プログラムコードも含む。このプロセッサコアは、命令を実行する少なくとも1つの実行パイプラインを含む。このプロセッサコアはまた、スレッドスケジューリングポリシーロジックから受け取られたポリシーに基づいて、複数のスレッドの命令を実行パイプラインにディスパッチするために結合された命令ディスパッチャも含む。このコンピュータ可読プログラムコードはまた、スレッドスケジューリングポリシーロジックとプロセッサコアとを結合するインタフェースを提供するための第3プログラムコードも含む。このインタフェースは、スレッドスケジューリングポリシーロジックが、ポリシーを実施するために複数のスレッドの各々についてのディスパッチプライオリティを命令ディスパッチャに伝えるためのプライオリティ指標を含む。このインタフェースはまた、少なくとも1つの実行パイプラインが、スレッドのための命令の実行を少なくとも1つの実行パイプラインがコミットしているのかどうかを示す指標を、複数のスレッドの各々のためのスレッドスケジューリングポリシーロジックに伝える実行指標も含む。
別の態様で、本発明はコンピューティングデバイスとともに使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、複数のスレッドを同時に実行するマルチスレッディングプロセッサのスレッドスケジューリングポリシーを実施するスレッドスケジューリングポリシーマネージャを生じさせるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含む。このコンピュータ可読プログラムコードは、命令が複数のスレッドの各々のために実行されたかどうかを示す指標を各プロセッサのクロックサイクルで受け取るための入力を提供する第1プログラムコードを含む。このコンピュータ可読プログラムコードは、複数のスレッドの各々のための命令ディスパッチプライオリティを各プロセッサのクロックサイクルで送るための出力を提供する第2プログラムコードも含む。このコンピュータ可読プログラムコードはまた、スレッドスケジューリングポリシーを実施するために入力に基づいて出力を生成する、入力に結合されたロジックを提供する第3プログラムコードも含む。
別の態様で、本発明はコンピューティングデバイスとともに使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、各々が命令のストリームを含む複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサコアを生じさせるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含む。このコンピュータ可読プログラムコードは、プロセッサコアの外部のスレッドスケジューリングポリシーロジックにプロセッサコアを結合するためのインタフェースを提供する第1プログラムコードを含む。このインタフェースは、スレッドスケジューリングポリシーロジックが複数のスレッドの各々のプライオリティをプロセッサコアに伝えるための第1信号を含む。このインタフェースはまた、スレッドスケジューリングポリシーロジックが、プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるためのスレッドの命令の実行に関する複数のスレッドの各々についての情報を、プロセッサコアから受け取るための第2信号も含む。このコンピュータ可読プログラムコードはまた、第1信号を受け取り、第1信号で受け取られたプライオリティに基づいて、実行のため発行するために、複数のスレッドのうちの少なくとも1つから少なくとも1つの命令を選択するように結合されたスケジューラを提供するための第2プログラムコードも含む。
別の態様で、本発明は複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチする分岐型スケジューラを提供するためのコンピュータ可読プログラムコードを含む、伝送媒体内で具体化されるコンピュータデータ信号を提供する。このプログラムコードは、プロセッサの少なくとも1つの実行ユニットに複数のスレッドの命令を発行するように構成された第1スケジューラロジックを提供するための第1プログラムコードを含む。このプログラムコードは、複数のスレッドのスケジューリングポリシーを実施する第2スケジューラロジックを提供するための第2プログラムコードも含む。このプログラムコードはまた、第2スケジューラロジックを第1スケジューラロジックと少なくとも1つの実行ユニットに結合するインタフェースを提供するための第3プログラムコードも含む。このインタフェースは、第1スケジューラロジックが複数のスレッドの各々についてのプライオリティを第2スケジューラロジックから受け取るための第1信号を含む。第1スケジューラロジックは、プライオリティに基づいて少なくとも1つの実行ユニットに命令を発行する。このインタフェースはまた、第2スケジューラロジックが複数のスレッドの各々についての命令実行情報を受け取るための第2信号も含む。第2スケジューラロジックは、命令実行情報に基づいてプライオリティを更新する。
本明細書で説明される分岐型スケジューラの利点は、複数のカスタマによって再使用可能なプロセッサコアが設計され、また適切に、かつ設計された動作クロック周波数で動作することを可能にしながらも、カスタマが自分たちの特定のアプリケーションに必要とされる自分たち自身のスレッドスケジューリングポリシーを実施することができるということである。本明細書で説明される分岐型スケジューラの別の利点は、ソフトウェアに対してハードウェアによって実行されるスレッドスケジューリングポリシーの量を、カスタマが決定することを可能にするということである。すなわち、一部のカスタマはハードウェア内でスレッドスケジューリングポリシーの大部分か、または場合によってはそのすべてを実施することを望んでもよく、その一方で別のカスタマは、ハードウェア内で最小限の量のスレッドスケジューリングポリシーを実施し、ソフトウェアにスレッドスケジューリングポリシーの大部分を実行させることを望んでもよい。
ここで図1を参照すると、本発明によるパイプライン化されたマルチスレッディングマイクロプロセッサ100を示すブロック図が表されている。マイクロプロセッサ100は複数のスレッドを同時に実行するように構成されている。本明細書で実行スレッドまたは命令ストリームとも呼ばれるスレッドは、プログラム命令のシーケンスまたはストリームを含む。スレッドは、マイクロプロセッサ100で実行する異なるプログラムからか、またはマイクロプロセッサ100で実行する同一のプログラムの異なる部分からの命令ストリームであるか、またはそれらの組合せであってもよい。
各スレッドは関連したスレッドコンテキスト(TC)を有する。スレッドコンテキストはレジスタまたはラッチ、および/またはスレッドの実行状態を説明するマイクロプロセッサ100のストレージ要素の中のビットなどのストレージ要素の集合を含む。すなわちスレッドコンテキストは、マイクロプロセッサ100で同時に実行する別の実行スレッドと共有される状態ではなく、スレッドに固有の各々のスレッドの状態を説明する。スレッドコンテキストの中の各スレッドの状態をストアすることによって、マイクロプロセッサ100は、命令をフェッチして発行するためにスレッド間で迅速に切り替えを行うように構成されている。1つの実施形態で、各スレッドコンテキストは、マイクロプロセッサ100のレジスタファイル112に含まれているプログラムカウンタ(PC)と汎用レジスタセットとスレッド制御レジスタとを含む。
マイクロプロセッサ100は、様々なスレッドの命令のフェッチおよび発行を命じるスケジューリングポリシーによってスレッドを同時に実行する。本明細書では、複数のスレッドからの命令ディスパッチをスケジューリングするための様々な実施形態が説明される。命令の「発行」および「ディスパッチ」という用語は、本明細書では交換可能に使用される。マルチスレッド型マイクロプロセッサ100は、同時に行われる方法で、複数のスレッドがマイクロプロセッサ100の機能ユニット(例えば命令のフェッチおよびデコードユニット、キャッシュ、分岐予測ユニット、およびロード/ストア、整数、浮動小数点、SIMD等の実行ユニットならびにその他の実行ユニット)を共有することを可能にする。
マイクロプロセッサ100は、マイクロプロセッサ100を含むシステムのシステムメモリからフェッチされたプログラム命令、特に様々なスレッドの命令をキャッシュするための命令キャッシュ102を含む。マイクロプロセッサ100はまた、命令フェッチャ104か、あるいは命令キャッシュ102および/またはシステムメモリから複数のスレッドの命令を、命令フェッチャ104に結合された命令/スキッドバッファ106に同時にフェッチするために結合された命令フェッチパイプライン104も含む。1つの実施形態で、命令フェッチパイプライン104は4段階のパイプラインを含む。命令/スキッドバッファ106は、命令スケジューラ108またはスレッドスケジューラ108に命令を与える。1つの実施形態で、各スレッドはそれ自体の命令/スキッドバッファ106を有する。各クロックサイクルで、スケジューラ108はマイクロプロセッサ100のパイプラインの実行段階による実行のために、スレッドのうちの1つから命令を選択し、命令を発行する。レジスタファイル112はスケジューラ108に結合されており、命令を実行する実行ユニット114に命令オペランドを与える。マイクロプロセッサ100は、実行ユニット114に結合されたデータキャッシュ118も含む。実行ユニット114は整数実行ユニット、浮動小数点実行ユニット、SIMD実行ユニット、ロード/ストアユニットおよび分岐実行ユニットを含んでもよいが、それらに限定されるわけではない。1つの実施形態で、整数実行ユニットのパイプラインは、レジスタファイル112がアクセスされるレジスタファイル(RF)アクセス段階、アドレス生成(AG)段階、実行(EX)段階およびメモリセコンド(MS)段階の4つの段階を含む。EX段階では、(加算、引算、桁移動等の)単純なALU動作が実行される。さらにデータキャッシュ118は、EX段階の第1クロックサイクルの間にアクセスされ、MS段階の第2クロックサイクルの間にアクセスされる2サイクルのキャッシュである。各スレッドコンテキストはそれ自体のレジスタファイル112を含み、各レジスタファイルはそれ自体のプログラムカウンタと汎用レジスタセットとスレッド制御レジスタとを含む。命令フェッチャ104は、各スレッドコンテキストのプログラムカウンタの値に基づいて、スレッドの命令をフェッチする。実行ユニット114の一部は、かなり大規模にパイプライン化されてもよいことに留意されたい。マイクロプロセッサ100のパイプラインは、命令の結果をレジスタファイル112にライトバックするライトバック段階116も含む。1つの実施形態で、マイクロプロセッサ100のパイプラインはまた、実行ユニット114とライトバック段階116との間で結合された除外項目分解(exception resolution)段階も含む。
実行ユニット114は、実行のために特定のスレッドの命令がコミットされたことを示すために、各スレッドコンテキストに関連したTC_instr_Committed信号124を生成する。命令がマイクロプロセッサ100のパイプラインによってフラッシュされておらず、代わりに最終的に命令を完了することが保証されている場合、実行のために命令はコミットされており、このことが結果を生成し、マイクロプロセッサ100のアーキテクチャ状態を更新する。1つの実施形態で、複数の命令はクロックサイクル毎にコミットされてもよく、TC_instr_Committed信号124は、サイクルを計測するスレッドコンテキストのためにコミットされた命令の数を示す。TC_instr_Committed信号124はスケジューラ108に与えられる。TC_instr_Committed信号124に応答して、スケジューラ108は、図9および図10に関して以下で説明されるように、必要とされるサービス品質を達成するために、スケジューラ108のスレッドスケジューリングポリシーによって使用されるスレッドのための仮想水位指標を更新する。
TC_instr_Committed信号124はまた、各々の命令/スキッドバッファ106にも与えられる。TC_instr_Committed信号124に応答して、命令/スキッドバッファ106は、バッファ106から命令を効果的に取り除くためにポインタを更新する。従来のマイクロプロセッサでは、命令は従来の命令バッファから取り除かれ、実行のために発行される。しかしながら、本明細書で説明される命令/スキッドバッファ106は、好都合にも、命令が実行のために発行された後も命令をストアし続ける。図3および4に関して以下で詳細に説明されるように、実行ユニット114が各々のTC_instr_Committed信号124を介して命令が実行のためにコミットされたことを示すまで、命令は命令/スキッドバッファ106から取り除かれることはない。
スケジューラ108は、実行ユニット114にラン可能TC信号132を与える。ラン可能TC信号132はスレッドコンテキストのうちのどれがラン可能であるか、すなわちスケジューラ108が現在命令を発行してもよいのはどのスレッドコンテキストからなのかを特定する。1つの実施形態で、図7に関して以下で説明されるように、スレッドコンテキストがアクティブであり、(例えば停止、待機、一時停止または放棄などの)その他の状態によってブロックされていなければ、スレッドコンテキストはラン可能である。特に図5に関して以下で詳細に説明されるように、ストールされたスレッドコンテキストの命令をフラッシュするかどうかを決めるために、実行ユニット114はラン可能TC信号132を使用して、ストールされたスレッドコンテキストが唯一のラン可能なスレッドコンテキストであるかどうかを判定する。
実行ユニット114は、スケジューラ108にストール中イベント信号126を与える。ストール中イベント信号126は、特定のストール中イベント信号126によって特定された理由のために、実行ユニット114の中で命令がストールしたか、またはストールしてしまうことを示す。さらに、ストール中イベント信号126はストールされた命令のスレッドコンテキストを識別する識別子を含む。実行ユニット114はまた、スケジューラ108に非ストール中イベント信号128を与える。ストール中イベント信号126に応答して、スケジューラ108は、図5に関して以下でより詳細に説明されるように、適切な非ストール中イベント128が送られるまで、ストールされたスレッドコンテキストのために命令を発行することを停止する。
命令に応答して実行ユニット114をストールさせるイベントの例は以下のものを含むが、それらに限定されるわけではない。第1に、データキャッシュ118の中でミスしたロード命令からのデータなどの利用不可能なデータに、命令が依存している場合がある。例えば、データキャッシュ118の中でミスされた先行するロード命令とオペランドとは、システムメモリからまだフェッチされていないので、加算命令は利用不可能なオペランドを特定する場合がある。第2に、割算もしくはその他の長い演算命令、または例えばコプロセッサレジスタから値を動かす命令などの長期ラン命令からのデータに、命令が依存している場合がある。第3に、制限されたハードウェア資源のために、命令はコンフリクトを持ち込む場合がある。例えば1つの実施形態で、マイクロプロセッサ100は単一のデバイダ回路を含む。割算命令がデバイダによって既に実行されている場合、そのとき第2の割算命令は、第1の割算命令が完了するのを待ちながらストールしなければならない。別の例として、1つの実施形態でマイクロプロセッサ100の命令セットは、命令キャッシュ102の低レベルの管理動作を実行するための命令のグループを含む。命令キャッシュ管理命令が既に実行されている場合、そのとき第2の命令キャッシュ管理命令は、第1のものが完了するのを待ちながらストールしなければならない。別の例として、1つの実施形態で、マイクロプロセッサ100は進行中のデータキャッシュ118のリフィルをストアするための比較的少数のスロットを含むロードキューを含む。ロード命令がデータキャッシュ118の中でミスする場合、紛失しているデータをシステムメモリから得るために、ロードキューエントリが割り当てられ、プロセッサバストランザクションが開始される。データはバスに戻される場合、ロードキューにストアされ、その後データキャッシュ118に書き込まれる。バストランザクションが完了し、すべてのデータがデータキャッシュ118に書き込まれると、ロードキューエントリは解放される。しかしながら、ロードキューが満杯の場合、ロードミスがパイプラインストールを生じさせる。第4に、命令はEHB命令に従う場合がある。1つの実施形態で、マイクロプロセッサ100の命令セットは、すべての実行ハザードがクリアされるまで命令の実行を停止するためにソフトウェアによって使用されるEHB(実行ハザードバリア)命令を含む。典型的に、EHB命令に従う命令は、EHB命令が使われなくなるまでパイプラインの中でストールする。第5に命令は、その同一のスレッドコンテキストの中でスレッド間通信(ITC)スペースにアドレスしたロードまたはストア命令に従う場合がある。1つの実施形態で、マイクロプロセッサ100は、ITCロードまたはストアに従う同一のスレッドコンテキスト内の命令をストールさせる任意の長い時間ブロックすることができる、同期されたストレージを含むITCスペースへのロードおよびストアを支援する。
反対に、非ストール中イベント128の例は、データキャッシュ118の中でミスされたロードデータが戻される場合、デバイダ回路、命令キャッシュ102またはロードキュースロットなどの制限されたハードウェア資源が解放される場合、EHB命令、長期ラン命令、またはスレッド間通信(ITC)スペースに対するロード/ストア命令が完了する場合を含むが、これらに限定されるわけではない。
実行ユニット114はまた、パイプラインの実行部分(すなわちスケジューラ108の下のパイプライン部分)の中の特定されたスレッドの命令がフラッシュされているか、または無効にされていることを示すために、各スレッドコンテキストに関連したTC_flush信号122を生成する。1つの実施形態で、命令をフラッシュすること、または無効にすることは、パイプラインの中の命令に関連した有効ビットをクリアすることを含み、これは、命令の結果に応答してパイプラインがマイクロプロセッサ100のアーキテクチャ状態を更新することを回避する。実行ユニット114がTC_flush信号122を生成してもよい1つの理由は、上述のように、スレッドの命令が実行ユニット114の中でストールする場合である。命令を無効にすること、またはフラッシュすることは、命令のために生成された結果が無視されることになり、したがって正しいものである必要がないので、命令がストールされる理由を取り除く。以下でより詳細に説明されるように、好都合にも、ストール中の命令をフラッシュすることによって、別のスレッドの命令は実行パイプラインの実行帯域幅を実行し、利用し続けることが可能であり、それによってマイクロプロセッサ100の全体の性能を潜在的に高める。1つの実施形態で、ストール中スレッドの命令だけがフラッシュされ、このことがフラッシュによって持ち込まれるパイプラインバブルの数を都合よく減らすことができ、一部の場合では、実行ユニット114のパイプラインの中に存在する様々なスレッドからの命令の構成に応じて、ストール中の命令に関連した1つだけのバブルを生じさせることができる。1つの実施形態で、TC_flush信号122の信号は、スレッドコンテキストのすべてのコミットされていない命令がフラッシュされたことを示す。別の実施形態で、実行ユニット114は実行ユニット114の中に存在するコミットされていない命令の数よりも少数のもの、すなわちストール中の命令およびストール中のスレッドコンテキストの任意のより新しい命令をフラッシュすることができるが、ストール中の命令よりも古いスレッドコンテキストのコミットされていない命令をフラッシュすることはできない。この実施形態で、TC_flush信号122の信号はまた、実行ユニット114によってフラッシュされた命令の数も示す。
TC_flush信号122は、実行ユニット114によって、それらの各々の命令/スキッドバッファ106に与えられる。命令/スキッドバッファ106は、図3および4に関して以下で説明されるように、バッファ106の中の命令の状態をロールバックするためにTC_flush信号122を使用する。命令/スキッドバッファ106は、それらがフラッシュされずにコミットされるまで、命令をストアし続けるので、フラッシュされる任意の命令はその後、命令キャッシュ102から再フェッチされることを必要とせずに、命令スキッド/バッファ106から再発行されてもよい。これには、別のスレッドからの命令が実行されることを可能にする、実行パイプラインからのフラッシュ中のストール命令に関連したペナルティを潜在的に減らすという利点がある。命令を再フェッチしなければならない可能性を減らすことは、命令のフェッチの回数が増加しているように思われることから、ますます重要になっている。これは、とりわけ、主としてプロセッサのクロック期間の減少のせいで、命令キャッシュが旧型のマイクロプロセッサの設計のときと比べて、より多くのクロックサイクルをアクセスのために必要とすることがより一般的になっているためである。したがって、命令の再フェッチに関連したペナルティは、以前の設計のときと比べて1つ、2つ、またはそれ以上のクロックサイクルとなる場合がある。
ここで図2を参照すると、図1のマイクロプロセッサ100の部分を示すブロック図であり、特に本発明の1つの実施形態による命令/スキッドバッファ106が示されている。図2は、図1の命令フェッチャ104が命令をフェッチする、複数の各々のスレッドコンテキストのための複数の命令/スキッドバッファ106を示す。1つの実施形態による命令/スキッドバッファ106の構造および動作は、図3および4に関して以下でより詳細に示される。各命令/スキッドバッファ106は、命令206を命令選択ロジック202に与える。各クロックサイクルで、命令選択ロジック202は、実行されるべき実行ユニット114への供給のために、命令206のうちの1つを選択命令204として選択する。命令選択ロジック202は、各スレッドコンテキストのために、図1のスケジューラ108によって与えられるDS_TC_priority信号208に応答して、選択命令204を選択する。DS_TC_priority信号208の動作は、図7および8に関して以下でより詳細に説明される。
マイクロプロセッサ100が、実行のためにクロックサイクル毎に1つの命令だけを発行するスカラプロセッサである実施形態が説明されているが、命令選択ロジック202は、クロックサイクル毎に複数の命令を発行するスーパースカラプロセッサ内で動作するように構成されてもよい。さらに命令選択ロジック202は、一般に同時マルチスレッディングと呼ばれる、クロックサイクル毎の複数の異なるスレッドコンテキストからの発行のために、命令を選択するように構成されてもよい。
ここで図3を参照すると、本発明による図2の命令/スキッドバッファ106のうちの1つを例示する命令/スキッドバッファ106と、関連した制御ロジック302とを示すブロック図が表されている。図2の命令/スキッドバッファ106の各々は、図3に表されている命令/スキッドバッファ106に類似している。すなわち、図3には1つだけの命令/スキッドバッファ106と関連した制御ロジック302とが表されているが、1つの実施形態では、各スレッドコンテキストのために1つの命令/スキッドバッファ106と関連した制御ロジック302とが存在する。命令/スキッドバッファ106は、各々が命令をストアするための複数のエントリ332と、関連した命令が有効であるかどうかを示すための関連した有効ビット334とを含む。図3は、0から5で示された6つのエントリを備えた命令/スキッドバッファ106を示す。図3の1つの実施形態で、命令/スキッドバッファ106はエントリの循環キューとして構成されている。
図1の命令フェッチャ104は、命令を命令/スキッドバッファ106に書き込む度に、命令/スキッドバッファ106に対して書き込み信号314を生成する。書き込み信号314はまた、制御ロジック302に与えられる。制御ロジック302は、命令/スキッドバッファ106が満杯になっているので、命令フェッチャ104は命令/スキッドバッファ106が満杯ではなくなるまで、命令/スキッドバッファ106にそれ以上命令を書き込まないことを示すために、命令フェッチャ104に対してフル信号312を生成する。
図1のスケジューラ108は、命令/スキッドバッファ106から命令を読み取る度に、読み取り信号316を生成する。読み取り信号316はまた、制御ロジック302に与えられる。制御ロジック302は、命令/スキッドバッファ106が空であるので、スケジューラ108は命令/スキッドバッファ106が空でなくなるまで、命令/スキッドバッファ106から別の命令を読み取ることを試みないことを示すために、スケジューラ108に対して空信号318を生成する。
制御ロジック302は、命令/スキッドバッファ106の有効ビット334を更新する有効生成ロジック342を含む。有効生成ロジック342は、各々のスレッドコンテキストのために、図1のTC_instr_committed信号124を受け取る。実行ユニット114がTC_instr_committed信号124を生成する度に、有効生成ロジック342は命令/スキッドバッファ106の中の最も古い有効命令を無効にする。有効生成ロジック342はまた、命令フェッチャ104から書き込み信号314を受け取る。命令フェッチャ104が書き込み信号314を生成する度に、有効生成ロジック342は、命令が書き込まれる命令/スキッドバッファ106の中でエントリに有効の印を付ける。
制御ロジック302はまた、命令/スキッドバッファ106の中に存在する有効な命令の数をストアするfull_countカウンタ306も含む。full_countカウンタ306は、命令フェッチャ104からの書き込み信号314によって増分され、TC_instr_committed信号124によって減分される。制御ロジック302はまた、full_count306が命令/スキッドバッファ106の命令の最大数に等しい場合に、フル信号312での真の値を生成するために、full_count306を命令/スキッドバッファ106の中にストアされてもよい命令の最大数(すなわち命令/スキッドバッファ106の中のエントリ332の総数)と比較するコンパレータ304も含む。
制御ロジック302はまた、現時点で発行するのに好適な、命令/スキッドバッファ106の中に存在する有効命令の数をストアするempty_countカウンタ346も含む。empty_count346は、(まだコミットされてはいないが)既に実行パイプラインに発行されおり、したがって現時点では発行するのに好適ではない、いくつかの有効命令が命令/スキッドバッファ106の中に存在してもよいので、full_count306よりも特定の回数少なくてよい。empty_countカウンタ346は命令フェッチャ104からの書き込み信号314によって増分され、スケジューラ108からの読み取り信号316によって減分される。制御ロジック302はまた、empty_count346がゼロに等しい場合に、空信号318での真の値を生成するために、empty_count346をゼロと比較するコンパレータ344も含む。さらに、empty_countカウンタ346は、図1のTC_flush信号122での真の値に応答して、full_countカウンタ306の値で書き込まれる。
制御ロジック302はまた、各々が命令/スキッドバッファ106のエントリ0で初期化されるカウンタである、書き込みポインタ322とコミットポインタ324と読み取りポインタ326とを含む。カウンタの各々は、命令/スキッドバッファ106の中のエントリ数よりも少ない最大値を超えて増分される場合、ゼロに戻る。書き込みポインタ322は、命令フェッチャ104が命令を書き込む命令/スキッドバッファ106の中の次のエントリを特定し、命令が書き込まれた後、書き込み信号314によって増分される。コミットポインタ324は、コミットされるべき命令/スキッドバッファ106の中の次の命令を特定し、TC_instr_committed信号124によって増分される。読み取りポインタ326は、スケジューラ108が命令を読み取り、命令が読み取られた後、読み取り信号316によって増分される命令/スキッドバッファ106の中の次のエントリを特定する。さらに読み取りポインタ326は、TC_flush信号122の真の値に応答して、コミットポインタ324の値で書き込まれる。図3に表されているように、スキッドウィンドウは、それを含んではいないが、読み取りポインタ326によって示されるエントリまで、コミットポインタ324で開始する命令/スキッドバッファ106のエントリを含む。スキッドウィンドウは、実行のために既に発行されているが、まだコミットされていない有効命令を含む。
ここで図4を参照すると、本発明による図3の命令/スキッドバッファ106の動作を示す4つのフローチャートが表されている。フローチャートの各々は、異なるイベントに応答して命令/スキッドバッファ106によって実行される動作(action)を示す。第1フローチャートのフローは、ブロック402で開始する。
ブロック402で、図1の命令フェッチャ104は、各々の命令/スキッドバッファ106のために図3の書き込み信号314をアサートし、命令を命令/スキッドバッファ106に書き込む。フローはブロック404へ進む。
ブロック404で有効生成ロジック342は、書き込み信号314に応答して、書き込みポインタ322によって特定されたエントリに有効の印を付ける。フローはブロック406へ進む。
ブロック406で、図3の書き込みポインタ322は、書き込み信号314に応答して増分される。フローはブロック408へ進む。
ブロック408で、図3のfull_countカウンタ306は、書き込み信号314に応答して増分される。フローはブロック412へ進む。
ブロック412で、図3のempty_countカウンタ346は、書き込み信号314に応答して増分される。第1フローチャートのフローは、ブロック412で終了する。
第2フローチャートのフローは、ブロック422で開始する。
ブロック422で図1の実行ユニット114は、命令/スキッドバッファ106に関連したスレッドコンテキストのために、図1のTC_instr_Committed信号124をアサートする。フローはブロック424へ進む。
ブロック424で有効生成ロジック342は、TC_instr_committed信号124に応答して、コミットポインタ324によって特定されたエントリに無効の印を付け、それによってバッファから命令を効果的に取り除く。フローはブロック426へ進む。
ブロック426で、コミットポインタ324はTC_instr_committed信号124に応答して増分される。フローはブロック428へ進む。
ブロック428で、full_countカウンタ306はTC_instr_committed信号124に応答して減分される。第2フローチャートのフローは、ブロック428で終了する。
1つの実施形態で、制御ロジック302は、TC_instr_committed信号124を受信するのではなく、命令が再ディスパッチングを必要としないことをまだ保証されていない場合であっても、命令が命令/スキッドバッファ106から取り除かれるべきであることを単に示す実行ユニット114からの別の信号を受信する。1つの実施形態で、信号は命令が所定の再ディスパッチパイプライン段階に達したことを示す。制御ロジック302は、命令が所定の段階に達したことを検出する場合、命令/スキッドバッファ106から命令を取り除く。別の実施形態で、信号は各クロックサイクルで、命令がランしていた、すなわちストールしておらず、その代わりに次のパイプライン段階に進んだのかどうかを示す。制御ロジック302は、命令が所定のクロックサイクルの数ランしていたことを検出する場合、制御ロジック302は命令/スキッドバッファ106からその命令を取り除く。これらの実施形態では、命令が一旦実行パイプライン114の中の特定の段階に達してから再ディスパッチングを必要とする可能性は、たとえ命令が再ディスパッチングを必要としないことをまだ保証されていなくても、命令/スキッドバッファ106に別の命令が書き込まれるための場所を作るために、命令を命令/スキッドバッファ106から取り除くことを正当化するのに十分に低いものである。この実施形態で、実行ユニット114がその後、命令が実行の完了前にフラッシュされたことを示す場合、スレッド命令が正しい順序で発行されることを保証するために、命令フェッチパイプライン104の全体とともに、スレッドコンテキストのための命令/スキッドバッファ106の全体がフラッシュされなければならない。
第3フローチャートのフローはブロック442で開始する。
ブロック442で、図1のスケジューラ108は、各々の命令/スキッドバッファ106のために図3の読み取り信号316をアサートし、実行パイプラインに発行するために命令/スキッドバッファ106から命令を読み取る。フローはブロック444へ進む。
ブロック444で、図3の読み取りポインタ326は読み取り信号316に応答して増分される。フローはブロック446へ進む。
ブロック446で、empty_countカウンタ346は読み取り信号316に応答して減分される。第3フローチャートのフローはブロック446で終了する。
第4フローチャートのフローはブロック462で開始する。
ブロック462で、命令/スキッドバッファ106に関連したスレッドコンテキストのために、TC_flush信号122をアサートする。フローはブロック464へ進む。
ブロック464で、読み取りポインタ326はTC_flush信号122に応答して、コミットポインタ324とともにロードされる。フローはブロック466へ進む。
ブロック466で、empty_countカウンタ346はTC_flush信号122に応答して、full_count306とともにロードされる。第4フローチャートのフローはブロック466で終了する。
前述のように、1つの実施形態で、TC_flush信号122の信号は、実行ユニット114がスレッドコンテキストのすべてのコミットされていない命令をフラッシュしたことを示す。図4の第4フローチャートは、この実施形態のための命令/スキッドバッファ106の動作を説明している。しかしながら別の実施形態では、実行ユニット114は実行ユニット114の中に存在するコミットされていない命令の数よりも少数のもの、すなわちストール中の命令およびストール中のスレッドコンテキストの任意の新たな命令をフラッシュすることができるが、ストール中の命令よりも古いスレッドコンテキストのコミットされていない命令をフラッシュすることはできない。この実施形態で、TC_flush信号122の信号はまた、実行ユニット114によってフラッシュされた命令の数も示す。この実施形態ではブロック464で、読み取りポインタ326をコミットポインタ324とともに更新するのではなく、フラッシュされた命令の数は読み取りポインタ326から差し引かれる。さらにブロック466で、empty_count346をfull_countカウンタ306とともに更新するのではなく、フラッシュされた命令の数はempty_count346に付加される。
ここで図5を参照すると、本発明による、実行帯域幅の利用を向上させるためにストールされたスレッドコンテキストをフラッシュするための図1のマイクロプロセッサ100の動作を示すフローチャートが表されている。フローはブロック502で開始する。
ブロック502で、図1の実行ユニット114は、命令すなわちストール中の命令に応答して、図1のストール中イベント信号126に関して先に説明されたもののうちの1つなどのストール中イベントを検出する。実行ユニット114はまた、ストール中命令が関連しているのはどのスレッドコンテキストなのかを、すなわちどれがストール中スレッドコンテキストなのかを判定する。1つの実施形態で、各命令には、パイプラインを進むときに実行ユニット114がストール中スレッドコンテキストを識別するために使用する固有のスレッドコンテキスト識別子が付随する。1つの実施形態で、実行ユニット114はストール中イベント126に応答して命令をストールすることはせず、代わりにストール中イベント126が検出される同じクロックサイクルのブロック512によって命令をフラッシュし、それによって実行ユニット114をストールする必要性を軽減する。別の実施形態で、タイミング考慮事項によって必要とされる場合、実行ユニット114は以下のブロック512によってストールされた命令がフラッシュされることができるまで、ストール中イベント126に応答して実際に1クロックサイクルの間ストールしてもよい。フローはブロック504へ進む。
判定ブロック504で、実行ユニット114は図1のラン可能TC信号132を調べることによって、ストール中スレッドコンテキストが唯一のラン可能スレッドコンテキストであるのかどうかを判定する。ストール中スレッドコンテキストが唯一のラン可能スレッドコンテキストである場合、フローはブロック526へ進み、そうでなければブロック506へ進む。
ブロック506で、実行ユニット114はストール中イベント信号126を介してストール中イベントを送り、またストール中スレッドコンテキストの識別子を提供する。フローはブロック508へ進む。
ブロック508で、スケジューラ108はストールされたストール中スレッドコンテキストに印を付け、そのスレッドコンテキストのために命令を発行することを停止し、ストール中イベントの原因に関する状態を保存する。図7の実施形態で、発行可能命令ロジック708は、ストール指標704をストールされたスレッドコンテキストに印を付けるための真の値に設定し、それによって発行可能命令ロジック708は、発行可能な746信号で偽の値を生成する。フローはブロック512へ進む。
ブロック512で、実行ユニット114は実行ユニット114の中のストール中スレッドコンテキストのすべての命令を無効化、すなわちフラッシュし、ストール中スレッドコンテキスト、すなわちフラッシュされたスレッドコンテキストに関連する図1のTC_flush信号122で真の値を生成する。実行ユニット114はストール中命令およびその後の命令だけをフラッシュするが、ストール中命令に先行する命令をフラッシュすることはなく、そうしなければストール中の状態は決して終わることはないということを理解されたい。1つの実施形態で、実行ユニット114は、ストール中スレッドコンテキストだけではなく、すべてのスレッドコンテキストの命令をフラッシュする。しかしながら、ストール中スレッドコンテキストだけをフラッシュする実施形態には、別のスレッドコンテキストの命令が実行のために実行ユニット114の中にまだ残っていてもよいために、持ち込まれるパイプラインバブルは潜在的により少なくなり、それによってマイクロプロセッサ100は潜在的に、すべてのスレッドコンテキストをフラッシュする実施形態よりも、より効率的になるという利点がある。フローはブロック514へ進む。
ブロック514で、図1の命令/スキッドバッファ106は、図3および4、または図13および14、または図15に関して説明されるように、TC_flush信号122に応答してフラッシュされた命令をロールバックする。フローはブロック516へ進む。
ブロック516で、スケジューラ108はそのスレッドスケジューリングポリシーに従って、ストールされたという印を付けられていないスレッドコンテキストのために命令を発行し続ける。図7の実施形態で、ストール指標704は、命令がストールされているか、ストールされていないのかを示す。さらに実行ユニット114は、ブロック512でのフラッシュの後に実行ユニット114の中にある別のスレッドコンテキストの命令を実行し続け、その後ディスパッチされた命令を実行し続ける。フローは判定ブロック518へ進む。
判定ブロック518で、スケジューラ108はストール中イベントが終了したかどうかを判定する。スケジューラ108は図1の非ストール中イベント信号128を介して非ストール中イベントを送る実行ユニット114に応答して、またさらにブロック508で保存されたストール中イベントの原因に関する状態に基づいて、ストール中スレッドコンテキストのためのストール中イベントが終了したかどうかを判定する。ストール中スレッドコンテキストのためのストール中イベントが終了した場合、フローはブロック522に進み、そうでなければフローはブロック516に戻る。
ブロック522で、スケジューラ108はストール中スレッドコンテキストにストール解除されたと印を付け、別のストールされていないスレッドコンテキストとともに、(もはや)ストール中ではないスレッドコンテキストのための命令を再び発行し始める。図7の実施形態で、発行可能命令ロジック708は、スレッドコンテキストにストール解除されたと印を付けるために、ストール指標704を偽の値に設定する。
ブロック524で、ストール中のスレッドコンテキストが唯一のラン可能なスレッドコンテキストであることから、実行ユニット114は正しいプログラムの実行を保証するために、ストール中命令でストールする。フローは判定ブロック526へ進む。
判定ブロック526で、スケジューラ108はストール中イベントが終了したかどうかを判定する。もし終了していれば、フローはブロック534へ進み、そうでなければフローは判定ブロック528へ進む。
判定ブロック528で、実行ユニット114は図1のラン可能TC信号132を調べることによって、ストールされたスレッドコンテキストが唯一のラン可能スレッドコンテキストであるのかどうかを判定する。ストールされたスレッドコンテキストが唯一のラン可能スレッドコンテキストである場合、フローはブロック526へ進み、そうでなければフローは判定ブロック528へ進む。
判定ブロック528で、実行ユニット114はストール中のスレッドコンテキストが依然として唯一のラン可能スレッドコンテキストであるのかどうかを判定する。ストール中スレッドコンテキストが依然として唯一のラン可能スレッドコンテキストである場合、フローは判定ブロック526へ戻り、そうでなければフローはブロック506へ進む。
ブロック532で、実行ユニット114は、(もはや)ストール中ではない命令およびその他の命令をストール解除し、実行し続ける。ストール中イベントが終了する場合、有利にも、ストールされた命令およびその後の命令は、ブロック512によってそれらがフラッシュされている場合に必要とされる、再発行されることを必要とせずに、直ちに実行を開始してもよい。したがってストール中のスレッドコンテキストが唯一のラン可能なスレッドコンテキストである場合には、それをフラッシュしないことによって、有利にもマイクロプロセッサ100は潜在的に性能を向上させる。フローはブロック532で終了する。
図5からわかるように、別のスレッドの命令が実行ユニット114にディスパッチされ、そこで実行されることを可能にするために、実行ユニット114の中でストール中イベント126を検出し、実行ユニット114から命令をフラッシュすることは、実行パイプラインバブルのために無駄にされるクロックサイクルを回避することによって、有利にも実行ユニット114の使用をより効率的にする。命令がストールする実際の状態に応答して命令をフラッシュすることによって、マイクロプロセッサ100は潜在的により高い性能を達成する。
ここで図6を参照すると、本発明の1つの実施形態による図1のマイクロプロセッサ100の中の分岐されているスケジューラ108を示すブロック図が表されている。分岐型スケジューラ108はディスパッチスケジューラ(DS)602の部分と、ポリシーマネージャ(PM)604の部分とを含む。ディスパッチスケジューラ602の部分はマイクロプロセッサ100のプロセッサコア606内に含まれている一方で、ポリシーマネージャ604部分はプロセッサコア606の外部に含まれている。プロセッサコア606はカスタマによってカスタマイズすることができないマイクロプロセッサ100の部分である一方で、ポリシーマネージャ604はカスタマによってカスタマイズ可能である。1つの実施形態で、プロセッサコア606はソフトコアとも呼ばれる合成可能なコアである。合成可能なコアの設計は、迅速に製造可能な表現に変えられることが可能であり、一般に合成ツールと呼ばれる自動ツールを簡単に使用することが可能である。
プロセッサコア606は、複数の信号を含むポリシーマネージャ604にインタフェース628を与える。1つの実施形態で、コアではないポリシーマネージャ604ロジックが、分岐型スケジューラによって別途持ち込まれるかもしれない特定のタイミング問題を軽減する方法で、プロセッサコア606とインタフェースすることを都合よく可能とするために、ディスパッチスケジューラ602への入力とディスパッチスケジューラ602からの出力信号とが登録される。さらにインタフェース628は、カスタマにとって理解することが簡単であり、ポリシーマネージャ604のスケジューリングポリシーの設計を容易にする。
以下の表2には、1つの実施形態によるポリシーマネージャインタフェース628を含む様々な信号が表されている。表2は信号名、ポリシーマネージャ604に関する信号の方向、および各信号の簡単な説明を明記している。表2は、マイクロプロセッサ100が9つまでの実行スレッドに関連した状態をストアするための9つのスレッドコンテキストを含む実施形態を説明する。さらにこの実施形態は、マイクロプロセッサ100が2つまでの仮想処理要素(VPE)として構成されることを可能にする。1つの実施形態で、マイクロプロセッサ100は実質的にMIPS32またはMIPS64命令セットアーキテクチャ(ISA)に適合しており、実質的にMIPS特権リソースアーキテクチャ(Privileged Resource Architecture)(PRA)およびMIPSマルチスレッディング特定用途向け拡張機能(MT ASE)の中で特定されるコプロセッサ0に適合しているスレッド制御レジスタを含む、表2でCP0とされる制御コプロセッサ0を含む。表2で説明される信号の複数は、CP0レジスタにアクセスするために使用される。
Figure 2008530655
Figure 2008530655
表2に明記されたポリシーマネージャインタフェース628の特定の信号のうちの一部は、ここでより詳細に説明される。ポリシーマネージャ604はディスパッチスケジューラ602に対して、PM_TC_priority652の出力を介して各々のスレッドコンテキストのプライオリティを特定する。1つの実施形態で、PM_TC_priority652は2つのビットを含み、ディスパッチスケジューラ602は、ポリシーマネージャ604がスレッドコンテキストのための4つの異なるプライオリティのうちの1つを特定できるようにする。ポリシーマネージャ604は、各々のPM_TC_block654の出力で真の値を生成することによって、スレッドコンテキストのために命令を発行することを停止するようディスパッチスケジューラ602に命令する。したがって、ポリシーマネージャ604は、以下で、特には以下の図7から11に関してより詳細に説明されるように、PM_TC_priority652およびPM_TC_block654を介して、ディスパッチスケジューラ602が様々なスレッドコンテキストのためにどのように命令を発行するのかに影響を及ぼしてもよい。
図9に関して以下で説明されるように、プロセッサコア606はポリシーマネージャ604にPM_gclk658を与え、これによりポリシーマネージャ604は、PM_gclk658に基づいて周期的にPM_TC_priority652を調整することができる。ディスパッチスケジューラ602は、各々のPM_TC_state642の入力を介して、各スレッドコンテキストのために状態を伝える。表2に表されているように、スレッドコンテキストは以下の8つの状態のうちの1つの中にあってもよい。非アクティブ:スレッドコンテキストが現在実行スレッドに関連していないので、ディスパッチスケジューラ602はスレッドコンテキストの命令を発行しなくてもよい。アクティブ:スレッドコンテキストは現在実行スレッドコンテキストに関連しているので、ディスパッチスケジューラ602は、別のブロック中状態が存在しなければ、実行のためにスレッドコンテキストの命令を発行してもよい。放棄:スレッドは放棄命令を実行しており、これによってスレッドコンテキストは特定のイベントについてブロックされるので、ディスパッチスケジューラ602は実行のためにスレッドコンテキストの命令を発行しなくてもよい。停止:スレッドコンテキストはそれ自体によってか、または別のスレッドによって停止されているので、ディスパッチスケジューラは実行のためにスレッドコンテキストの命令を発行しなくてもよい。一時停止:スレッドがDMTまたはDVPE命令を実行したため、またはマイクロプロセッサ100もしくはVPEが現在除外項目を処理しているため、ディスパッチスケジューラ602は実行のためにスレッドコンテキストの命令を発行しなくてもよい。DMT命令はVPEのためのマルチスレッディング動作を一時停止する。DVPE命令はマイクロプロセッサ100全体のためのマルチスレッディング動作を一時停止する。ITCでの待機:スレッドコンテキストは、スレッドにより実行されるロード/ストア命令によって特定される、スレッド間通信(ITC)スペースの中の位置への/からのロード/ストアデータを待機してブロックされているので、ディスパッチスケジューラ602は実行のためにスレッドコンテキストの命令を発行しなくてもよい。待機による待機:スレッドは待機命令を実行しており、これによってスレッドコンテキストは割り込みが生じるまでブロックされるので、ディスパッチスケジューラ602は実行のためにスレッドコンテキストの命令を発行しなくてもよい。SRSとして使用:スレッドコンテキストレジスタセットがシャドウレジスタセットの動作のために使用されていることから、スレッドコンテキストは実行スレッドに関連しておらず、それに関連することも不可能なので、ディスパッチスケジューラ602はスレッドコンテキストの命令を発行しなくてもよい。
ディスパッチスケジューラ602は、各々のPM_TC_inst_issued646の入力を介して、スレッドコンテキストのために命令を発行したことをポリシーマネージャ604に伝える。実行ユニット114は、各々のPM_TC_instr_committed644の入力を介して、スレッドコンテキストの命令をコミットしたことをポリシーマネージャ604に伝える。1つの実施形態で、PM_TC_instr_committed644信号は、命令の実行が完了されたことを示す。別の実施形態で、PM_TC_instr_committed644信号は、命令がフラッシュされないことを保証されること、すなわち命令が最終的には実行を完了するが、まだ完了されていなくてもよいことを示す。顕著な点は、一部の命令が推測でディスパッチされ、決して完了しなくてもよいことから、異なっていてもよい、(PM_TC_inst_issued入力646によって伝えられた)単にディスパッチされた命令とは対照的な実行された命令についての情報を、PM_TC_instr_committed644入力がポリシーマネージャ604に与えるということである。図9に関して以下で説明されるように、アプリケーションの中の一部のスレッドは特定のサービス品質を必要とすることがあることから、これはポリシーマネージャ604に対する重要な区別となりうる。1つの実施形態で、PM_TC_instr_committed信号644は、TC_instr_committed信号124の登録されたバージョンである。したがって、特に以下の図7から図11に関して以下でより詳細に説明されるように、プロセッサコア606はPM_TC_inst_issued646、PM_TC_instr_committed644、およびPM_TC_state642の入力を介して、様々なスレッドコンテキスト、およびスレッドコンテキストの状態に対する命令の発行および実行についてのフィードバックを与える。
1つの実施形態で、ディスパッチスケジューラ602はまた、ポリシーマネージャ604にリラックス機能も与え、その目的は、アプリケーションのスレッドコンテキストが全部のプロセッサ帯域幅を必要としない場合に、マイクロプロセッサ100が実際にスリープに入ることなく、電力を節約することを可能にすることである。リラックス機能は、あたかもスケジュールされるべき、さらなるスレッドコンテキストがあるかのように動作する。しかしながら、リラックススレッドコンテキストが発行のために選択される場合、ディスパッチスケジューラ602は命令を発行することはない。ポリシーマネージャ604は、(図9に関して以下で説明される)TC_LEVEL918カウンタと同様に動作する(VPE当たりの)RELAX_LEVELカウンタを、それが増分のためにRELAX_RATEを使用し、リラックス命令スロットが完了されるときに減分される場合を除いて、維持する。1つの実施形態で、マイクロプロセッサ100は、ソフトウェアがRELAX_RATEを特定することを可能にする、TCスケジュールレジスタ902に類似したVPE当たりのVPEスケジュールレジスタを含む。リラックス機能は、表2に明記されたPM_vpe_relax_enable信号を介して使用可能または使用不可にされ、リラックススレッドコンテキストプライオリティは、PM_vpe_relax_priority信号を介して特定される。
1つの実施形態で、ディスパッチスケジューラ602はまた、ポリシーマネージャ604に除外機能も与え、その目的は、除外スレッドコンテキストがそれ自体の、通常のスレッドコンテキストから独立したプライオリティを持つことを可能にすることである。ポリシーマネージャは、(図9に関して以下で説明される)TC_LEVEL918カウンタと同様に動作する(VPE当たりの)EXC_LEVELカウンタを、それが増分のためにEXC_RATEを使用し、除外命令スロットが完了されるときに減分される場合を除いて、維持する。除外モードが使用可能にされ、VPEのために除外が受け入れられる場合、そのときVPEのスレッドコンテキストはすべて除外プライオリティに設定される。1つの実施形態で、ソフトウェアはVPEスケジュールレジスタを介してEXC_RATEを特定する。除外機能は表2に明記されたPM_vpe_exc_enable信号を介して使用可能または使用不可にされ、除外スレッドコンテキストプライオリティは、PM_vpe_exc_priority信号を介して特定される。
ここで図7を参照すると、本発明による図6のディスパッチスケジューラ602と図2の命令選択ロジック202とをより詳細に示すブロック図が表されている。命令選択ロジック202はコンパレータ714によって制御されるマルチプレクサ(muxes)724のツリーを含む。各マルチプレクサ724は、2つの異なるスレッドコンテキストから図2の命令206を受け取る。各マルチプレクサ724はまた、図2のDS_TC_priority208に関連した命令206も受け取る。各マルチプレクサ724に関連したコンパレータ714も、2つのスレッドコンテキストのための一組のDS_TC_priority信号を受け取り、それに関連したマルチプレクサ724を命令206、および最も高いDS_TC_priority208の値を備えたDS_TC_priority208を選択するために制御する。選択された命令206およびDS_TC_priority208は、実行パイプラインへの供給のために、最後のマルチプレクサ724が最も高いDS_TC_priority208を備えた図2の選択命令204を選択するまで、ツリーを下ってゆく。
図7は、ディスパッチスケジューラ602のロジック、すなわちストール指標704、発行可能命令ロジック708およびラウンドロビン(round−robin)ロジック712を示す。1つの実施形態で、ストール指標704と発行可能命令ロジック708とは、各スレッドコンテキストのためのDS_TC_priority208を生成するために、各スレッドコンテキストのためにディスパッチスケジューラ602の中で繰り返される。対照的に、ラウンドロビンロジック712は各々の可能なPM_TC_priority652のために一度インスタンス化されて、各PM_TC_priority652のためのラウンドロビン指標を生成する。例えば、図7はポリシーマネージャ604が4つの可能なPM_TC_priority652のうちの1つを特定してもよい実施形態を示しており、したがってラウンドロビンロジック712はディスパッチスケジューラ602の中で4度インスタンス化され、4つの各々のラウンドロビン指標を生成する。
1つの実施形態で、ラウンドロビン指標はマイクロプロセッサ100のスレッドコンテキスト当たり1ビットを含む。その各々のスレッドコンテキストに関連したラウンドロビン指標のビットは、図7に示されるようにラウンドロビンビット748として与えられる。ラウンドロビンビット748が真である場合、現時点で同じPM_TC_priority652であるその他のスレッドコンテキストの中で発行されるべき、ラウンドロビン方式におけるそのスレッドコンテキストの番となる。
発行可能命令ロジック708は、図1の実行ユニット114からの非ストール中イベント信号128およびストール中イベント信号126、図6のポリシーマネージャ604からのPM_TC_block654信号、命令/スキッドバッファ106からの図3の空信号318、およびTC状態742信号を受け取る。1つの実施形態で、TC状態742信号は、図6のPM_TC_state642信号に類似した情報を伝える。発行可能命令ロジック708は、スレッドコンテキストを識別するストール中イベント信号126に応答して、ストールされたスレッドコンテキストに印を付けるために、ストール指標704を設定する。発行可能命令ロジック708はまた、ストールの理由を記憶するために、ストール中イベント126に応答して状態をストアする。反対に、発行可能命令ロジック708は、非ストール中イベント128がストールの原因に関連している場合、非ストール中イベント信号128に応答してストール指標704をクリアする。発行可能命令ロジック708は、その入力に応答して発行可能746信号を生成する。スレッドコンテキストのために命令/スキッドバッファ106の読み取りポインタ326によって示された命令206が発行可能であれば、発行可能746信号は真である。1つの実施形態で、スレッドコンテキストがアクティブ状態にあって、(例えば停止、待機、一時停止、または放棄などの)別の状態によってブロックされておらず、ストール指標704が偽で、PM_TC_block654および空318信号が偽であることをTC_状態信号742が示す場合、命令は発行可能である。
発行可能746ビットとPM_TC_priority652ビットとラウンドロビンビット748とは、DS_TC_priority208を作り出すために結合される。図7の実施形態で、発行可能746ビットは最も有効なビットであり、ラウンドロビンビット748は最も有効度の低いビットであり、PM_TC_priority652は2つの中間の有効度のビットである。認められるように、発行可能ビット746はDS_TC_priority652の最も有効なビットであるので、発行可能ではない命令は、すべての発行可能命令よりも低いプライオリティになる。反対にラウンドロビンビット748は、2つ以上のスレッドコンテキストが発行可能命令を有し、同じ高さのPM_TC_priority652を有する場合に、スレッドを選択するためだけに使用される。
ここで図8を参照すると、本発明による図7のディスパッチスケジューラ602の動作を示すフローチャートが表されている。フローはブロック802で開始する。
ブロック802で、ディスパッチスケジューラ602は各PM_TC_priority652のために各ラウンドロビン指標を初期化する。フローはブロック804へ進む。
ブロック804で、ディスパッチスケジューラ602は各スレッドコンテキストのために、スレッドコンテキストが発行可能命令206を有するかどうかを判定する。すなわち、各スレッドコンテキストのための発行可能命令ロジック708は、発行可能746信号上で値を生成する。1つの実施形態で、発行可能命令ロジック708は、スレッドコンテキストがアクティブ状態であり、(停止、待機、一時停止または放棄などの)別の状態によってブロックされておらず、ストール指標704が偽であり、PM_TC_block654および空318信号が偽であることをTC_状態信号742が示す場合にだけ、発行可能746信号上で真の信号を生成する。フローは判定ブロック806へ進む。
判定ブロック806で、ディスパッチスケジューラ602はスレッドコンテキストの各々のための発行可能746信号を調べることによって、発行可能命令206を有する任意のスレッドコンテキストが存在するかどうかを判定する。そのようなスレッドコンテキストが存在しないのであれば、フローは少なくとも1つのスレッドコンテキストが発行可能命令206を有するまでブロック804に戻り、そうでなければフローはブロック808へ進む。
ブロック808で、ディスパッチスケジューラ602は、スレッドコンテキストの発行可能746ビット、スレッドコンテキストのPM_TC_priority652、およびスレッドコンテキストのPM_TC_priority652のラウンドロビンビット748に基づいて、各スレッドコンテキストの命令206のためのDS_TC_priority208を生成する。フローはブロック812へ進む。
ブロック812で、ディスパッチスケジューラ602は最も高いDS_TC_priority208を備えた命令206を発行する。すなわちディスパッチスケジューラ602は、発行可能命令を有し、かつ最も高いPM_TC_priority652を有するスレッドコンテキストから命令を発行する。複数のスレッドコンテキストがその基準を満たす場合、ディスパッチスケジューラ602は、スレッドコンテキストのPM_TC_priority652のためのラウンドロビンビット748によって、発行する番であることが示されるスレッドコンテキストから命令を発行する。フローはブロック814へ進む。
ブロック814で、ラウンドロビンロジック712は、その命令を発行させるためにスレッドコンテキストのうちのどれが選択されたのかということに基づいて、PM_TC_priority652のためにラウンドロビン指標を更新する。フローはブロック804に戻る。
ここで図9を参照すると、本発明による図6のポリシーマネージャとTCスケジュールレジスタ902とを示すブロック図が示されている。
マイクロプロセッサ100は、各スレッドコンテキストのためにTCスケジュールレジスタ902を含む。TCスケジュールレジスタ902はソフトウェアプログラム可能であり、ソフトウェアがポリシーマネージャ604にスレッドスケジューリングのヒントを与えるための手段を与える。1つの実施形態で、TCスケジュールレジスタ902は図6および表2に関して上で述べられたコプロセッサ0レジスタ内に含まれ、特にはポリシーマネージャ604内に含まれる。TCスケジュールレジスタ902はTC_LEVEL_PARAM1 908、TC_LEVEL_PARAM2 906、TC_LEVEL_PARAM3 904、TC_RATE912、OV914およびPRIO916の6つのフィールドを含む。図9の実施形態で、TC_LEVEL_PARAM1 908、TC_LEVEL_PARAM2 906、TC_LEVEL_PARAM3、904およびTC_RATE912フィールドは4ビットを含み、PRIO916フィールドは2ビットを含み、OV914フィ0ルドは単一のビットである。
図9に表されているポリシーマネージャ604ロジックは、制御ロジック924と、出力を制御ロジック924に与えるために結合されたコンパレータ922と、出力をコンパレータ924への入力として与えるために結合されたTC_LEVEL918レジスタと、出力をTC_LEVEL918レジスタへの入力として与えるために結合された3つの入力マルチプレクサ(mux)926とを含む。マルチプレクサ926はその第1の入力で、正しい値を保持しておくために、TC_LEVEL918レジスタの出力を受け取る。マルチプレクサ926はその第2の入力で、入力がTC_LEVEL918レジスタの出力であるデクリメンタ932の出力を受け取る。マルチプレクサ926はその第3の入力で、入力がTC_LEVEL918レジスタの出力を加算するアダー936の出力と、TC_RATE912に2を乗算するマルチプライヤ938の出力である、インクリメンタ934の出力を受け取る。TC_RATE912は、スレッドコンテキストの所望の実行速度、すなわちユニット時間当たりの完了されるべき命令の数を表す指標である。図9の実施形態で、TC_RATE912は、16クロックサイクル毎に完了されなければならないスレッドの命令の数を示す。図9の中では、実際に一覧にされるロジックは一度だけ表されているが、ロジックは各スレッドコンテキストのためにPM_TC_block654およびPM_TC_priority652信号を生成し、PM_TC_state642、PM_TC_inst_Committed644、PM_TC_inst_issued646、およびPM_gclk658信号を受け取るために、ポリシーマネージャ604内で各スレッドコンテキストのために繰り返されてもよい。
ポリシーマネージャ604は、スケジューラ108の高レベルのスレッドスケジューリングポリシーを達成するために、修正されたリーキーバケットアルゴリズムを用いる。TC_LEVEL918レジスタは、バケットの水位に類似している。TC_LEVEL918は本質的に、スレッドコンテキストによって行われなければならない作業量の尺度である。1つの実施形態で、TC_LEVEL918レジスタはゼロに初期化された12ビットのレジスタを含む。制御ロジック924は、マルチプレクサ926がどの入力を選択するかを制御するための制御信号928を生成する。32クロックサイクル毎に、マルチプレクサ926は、数量(TC_RATE×2+1)によってTC_LEVEL918を増やすTC_LEVEL918レジスタへのストアのために、インクリメンタ936の出力を選択する。1つの実施形態では、TC_RATE912に基づいたTC_LEVEL918の更新の間のクロックサイクルの数もまた、プログラム可能である。別のクロックサイクルで、PM_TC_instr_Committed信号644が、スレッドコンテキストのために命令が実行のためにコミットされたことを示す場合、マルチプレクサ926はTC_LEVEL918を減分するためにデクリメンタ932の出力を選択する。したがってソフトウェアは、スレッドのTCスケジュールレジスタ902のTC_RATE912の値を調整することによって、スレッドコンテキストのバケットの仮想水位に影響を及ぼすことができる。図9の実施形態で、TC_RATE912の値は、スレッドコンテキストのためにマイクロプロセッサ100が実行することを望まれる、16クロックサイクル毎の命令の数を示す。
水圧によって水漏れするバケツの水位が増えると、水は高い確率で漏れ出すようになる。同様にTC_LEVEL_PARAM領域904/906/908は、仮想水圧の範囲を定義する値を単調に増やすことでプログラムされる。コンパレータ922はTC_LEVEL918をTC_LEVEL_PARAM904/906/908と比較し、それらの結果を制御ロジック924に与え、それによって、TC_LEVEL918がどの仮想水圧の範囲に入るかに基づいて、PM_TC_priority652を生成する。図9のリーキーバケットによって示されているように、TC_LEVEL918の最も有効なニブルがTC_LEVEL_PARAM3 904の値を上回る場合、制御ロジック924は3のPM_TC_priority652の値(最も高いプライオリティ)を生成し、TC_LEVEL918の最も有効なニブルがTC_LEVEL_PARAM3 904の値とTC_LEVEL_PARAM2 906との値の間にある場合、制御ロジック924は2のPM_TC_priority652の値を生成し、TC_LEVEL918の最も有効なニブルがTC_LEVEL_PARAM2 906の値とTC_LEVEL_PARAM1 908との値の間にある場合、制御ロジック924は1のPM_TC_priority652の値を生成し、TC_LEVEL918の最も有効なニブルがTC_LEVEL_PARAM1 908の値を下回る場合、制御ロジック924は0のPM_TC_priority652の値(最も低いプライオリティ)を生成する。同様に、PM_TC_priority652のレベルを増やすことは、スレッドコンテキストに対して命令を発行するためのディスパッチスケジューラ602への圧力を増やし、一方でPM_TC_priority652のレベルを下げることは、スレッドコンテキストに対して命令を発行するためのディスパッチスケジューラ602への圧力を減らす。
上述のように、マイクロプロセッサ100を使用する一部のアプリケーションでは、異なるスレッドは、TC_RATE912フィールドを使用してプログラム可能な異なる命令実行速度を必要としてもよい。さらに異なるスレッドは異なる分解能(resolution)、すなわち命令の実行速度が測定される期間を必要としてもよい。すなわち、おそらくは高い実行速度を必要するわけではないが、一部のスレッドには最小限の期間を超えて命令の実行が欠けていてはならない。すなわち、スレッドは特定のサービス品質を必要とする。図9およびその説明から認められるように、各スレッドのために必要とされる分解能を達成するために、TC_LEVEL_PARAM904/906/908が用いられてもよい。互いに比較的近いTC_LEVEL_PARAM904/906/908を割り当てることによって、より高い分解能が達成されることができ、その一方で、比較的遠くに離れているTC_LEVEL_PARAM904/906/908を割り当てることは、より低い分解能を作り出す。したがってソフトウェアは、命令実行速度で必要とされる分解能を達成するために、TC_LEVEL_PARAM904/906/908を各スレッドコンテキストのために調整することによって、ポリシーマネージャ604を介して所望のサービス品質目標を達成してもよい。
OVビット914が設定される場合、制御ロジック924はTC_LEVEL_PARAM904/906/908、TC_RATE912およびTC_LEVEL918の値を無視し、代わりにPRIOフィールド916で特定される値に等しいPM_TC_priority652信号の値を生成する。これによって、ソフトウェアはリーキーバケットポリシーを迂回し、必要に応じて1つまたは複数のスレッドコンテキストのプライオリティを直接制御することができる。
1つの実施形態で、TC_LEVEL918が所定の数のクロックサイクルに対して、その最大値まで飽和する場合、そのときマイクロプロセッサ100は、特に1つまたは複数のTCスケジュールレジスタ902の中の値を変更することによって、ソフトウェアがより高いレベルでスレッドスケジューリング調整を行うことができるようにするために割り込みを送る。1つの実施形態で、割り込みはソフトウェアによってマスクされてもよい。
1つの実施形態で、マイクロプロセッサ100の命令セットは、特定されたイベントが生じるまで、スケジューラ108にスレッドコンテキストのために命令を発行することを止めるように命令するためにスレッドコンテキストが実行してもよい放棄命令を含む。1つの実施形態で、スレッドが放棄されている場合、ポリシーマネージャ604は一時的にスレッドのTC_LEVEL918の更新を使用不可にするので、スレッドのPM_TC_priorityはスレッドが放棄解除になるまで保存される。別の実施形態で、ポリシーマネージャ604はスレッドのTC_LEVEL918を更新し続け、おそらくスレッドのPM_TC_priorityを増やすことになるので、スレッドが放棄解除になった場合、基本的には呼び水でスレッドを援助するために、一時的に高いプライオリティを有する。1つの実施形態で、ポリシーマネージャ604の放棄されたスレッドに対する動作は、ソフトウェアによってプログラム可能である。
PM_TC_priority652、TC_LEVEL_PARAM904/906/908、TC_RATE912、TC_LEVEL918等を特定するために、特定の数のビットが使用される実施形態が説明されているが、スケジューラ108は任意の方法で、この実施形態で使用される値に限定されるわけではなく、むしろスケジューラ108は、マイクロプロセッサ100が使用されるべき特定のアプリケーションによって必要とされるような様々な異なる数のビット、プライオリティ、レベル、速度等を使用するように構成されてよいことを理解されたい。さらに、変更されたリーキーバケットスレッドスケジューリングポリシーを用いるポリシーマネージャ604が説明されてきたが、ポリシーマネージャ604は、依然として分岐型スケジューラ108の利点を享受しながら、任意の様々なスレッドスケジューリングポリシーを用いるように構成されてもよいことを理解されたい。例えば1つの実施形態では、ポリシーマネージャ604は、すべてのスレッドコンテキストのためのPM_TC_priority652の出力が同一の値に結び付けられている単純なラウンドロビンスレッドスケジューリングポリシーを用いる。別の実施形態では、ポリシーマネージャ604は、PM_TC_priority652の出力がスレッドコンテキストのTCスケジュールレジスタ902の中で特定された、いくつかの連続したクロックサイクルの間、1つのスレッドコンテキストのために最も高いプライオリティにまで高められ、次いでPM_TC_priority652の出力がスレッドコンテキストのTCスケジュールレジスタ902の中で特定された、おそらく異なった数の連続したクロックサイクルの間、別のスレッドコンテキストのために最も高いプライオリティにまで高められ、タイムスライス式の方法で各スレッドコンテキストのためにそのようにされる、タイムスライス式スレッドスケジューリングポリシーを用いる。
1つの実施形態で、マイクロプロセッサ100の命令セットは、利用可能なスレッドコンテキストを割当て、新たに割り当てられたスレッドコンテキストの中で新たなスレッドの実行をスケジューリングするための分岐命令を含む。1つの実施形態で、スレッドコンテキストが新たなスレッドコンテキストを分岐する場合、親スレッドコンテキストのためのTC_RATE912はそれ自体の間で分割され、子スレッドコンテキスト、すなわち新たなTC_RATE912は均一に2で割られた古いTC_RATE912である。これには、スレッドコンテキストが元々割り当てられたよりも多くの処理帯域幅を要求することを防ぐという利点がある。
上述のものから認められるように、スケジューラ108を分岐することによって、プロセッサコア606に含まれるディスパッチスケジューラ602を比較的簡単にすることができ、それによってディスパッチスケジューラ602をエリアおよび電力の点で比較的小型のものにし、スレッドスケジューリングポリシーのアプリケーション特定の複雑性を、プロセッサコア606の外部にあるポリシーマネージャ604に配置することができる。一部のアプリケーションは複雑なポリシーマネージャ604を必要としなくてもよく、したがって、本明細書で説明されるように、スケジューラ108が分岐されていなかった場合にすべてのアプリケーションに課せられる、さらなるエリアおよび電力要件の負担をかけられないでも済むため、これは好都合なことである。
ここで図10を参照すると、本発明による図9のポリシーマネージャ604の動作を示すフローチャートが表されている。図10では単一のスレッドコンテキストのためだけに動作が表されているが、図10に明記された動作はポリシーマネージャ604の中で、各スレッドコンテキストのために生じる。フローはブロック1002で開始する。
ブロック1002で、ポリシーマネージャ604はTC_LEVEL918をゼロに初期化する。フローはブロック1004へ進む。
ブロック1004で、ポリシーマネージャ604はPM_gclk658の1チックを待つ。フローは判定ブロック1006へ進む。
判定ブロック1006で、ポリシーマネージャ604は、フローが判定ブロック1006に最後に達したときから、32チックのPM_gclk658が過ぎたかどうかを判定する。32のPM_gclk658が過ぎていなければ、フローは判定ブロック1012へ進み、過ぎていればフローはブロック1008へ進む。
ブロック1008で、TC_LEVEL918はTC_RATE912+1の値の2倍だけ増やされる。フローは判定ブロック1012へ進む。
判定ブロック1012で、ポリシーマネージャ604はPM_TC_instr_committed644が真であるかどうかを判定する。PM_TC_instr_committed644が真でなければフローは判定ブロック1016へ進み、真であればフローはブロック1014へ進む。
ブロック1014で、TC_LEVEL918は減分される。フローは判定ブロック1016へ進む。
判定ブロック1016で、ポリシーマネージャ604はOVビット914が設定されるかどうかを判定する。OVビット914が設定されなければフローは判定ブロック1022へ進み、設定されるのであればフローはブロック1018へ進む。
ブロック1018で、ポリシーマネージャ604はPRIO916フィールドと等しいPM_TC_priority652の値を生成する。フローはブロック1004へ戻る。
判定ブロック1022で、ポリシーマネージャ604はTC_LEVEL918がTC_LEVEL_PRAM3 904の値よりも大きいかどうかを判定する。TC_LEVEL918がTC_LEVEL_PARAM3 904の値よりも大きくなければフローは判定ブロック1026へ進み、大きければフローはブロック1024へ進む。
ブロック1024で、ポリシーマネージャ604はPM_TC_priority652上で3の値(最も高いプライオリティ)を生成する。フローはブロック1004へ戻る。
判定ブロック1026で、ポリシーマネージャ604はTC_LEVEL918がTC_LEVEL_PARAM2 906の値よりも大きいかどうかを判定する。TC_LEVEL918がTC_LEVEL_PARAM2 906の値よりも大きくなければ、フローは判定ブロック1032へ進み、大きければフローはブロック1028へ進む。
ブロック1028で、ポリシーマネージャ604はPM_TC_priority652上で2の値を生成する。フローはブロック1004へ戻る。
判定ブロック1032で、ポリシーマネージャ604はTC_LEVEL918がTC_LEVEL_PARAM1 908の値よりも大きいかどうかを判定する。TC_LEVEL918がTC_LEVEL_PARAM1 908の値よりも大きくなければフローはブロック1036へ進み、大きければフローはブロック1034へ進む。
ブロック1034で、ポリシーマネージャ604はPM_TC_priority652上で1の値を生成する。フローはブロック1004へ戻る。
ブロック1036で、ポリシーマネージャ604はPM_TC_priority652上で0の値を(最も低いプライオリティ)生成する。フローはブロック1004へ戻る。
ここで図11を参照すると、本発明の代替の実施形態による図6のディスパッチスケジューラ602と図2の命令選択ロジック202とをより詳細に示すブロック図が表されている。図11の実施形態は図7の実施形態に類似しているが、図11の実施形態のディスパッチスケジューラ602は命令プレデコーダ1108とストール可能性プライオリティジェネレータ1104も含む。プレデコーダ1108は命令1114についてのレジスタ使用情報1106を生成するために、命令1114をプレデコードする。1つの実施形態で、レジスタ使用情報1106は、命令のソースレジスタとしてレジスタファイル112のどのレジスタが使用されているのかということと、ソースレジスタに必要とされるのは実行パイプライン114のどの段階であるのかということを特定する。さらにレジスタ使用情報1106は、命令の宛先レジスタはレジスタファイル112のどのレジスタであるのかということと、命令の結果が宛先レジスタにストアされる準備ができているのは実行パイプライン114のどの段階であるのかということを特定する。
ストール可能性プライオリティジェネレータ1104は、レジスタ使用情報と、マイクロプロセッサ100のパイプラインから受け取られたプロセッサ状態情報1112とに基づいて、命令1114のためのストール可能性プライオリティ1102を生成する。プロセッサ状態情報1112はロードがデータキャッシュ118の中でミスされたかどうかということと、ミスしているロードが既にフェッチされたかどうかということと、実行パイプラインの中で現在実行されている別の命令の、特には宛先レジスタである(命令プレデコーダ1108によって生成されたレジスタ使用情報1106を含んでもよい)レジスタの使用法と、実行パイプラインの中のEHB命令の存在と、ALUが別のALU命令を実行して現在ビジーであるかどうかということと、プレデコードされている命令と実行パイプライン中の別の命令との間にある現在のパイプライン段階の数等を含んでもよいが、それらに限定されるわけではない。図11の実施形態で、ストール可能性プライオリティ1102は、図2の選択命令204を選択するのに命令選択ロジック202によって使用されるために、図2の6ビットのDC_TC_priority208を形成するための発行可能ビット746とPM_TC_priorityビット652との間に含まれる2つのビットを含む。代替の実施形態で、ストール可能性プライオリティ1102の2つのビットは、PM_TC_priority652の2つのビットとインタリーブされる。1つの実施形態で、このビットは、ストール可能性プライオリティ1102のMSB、PM_TC_priority652のMSB、ストール可能性プライオリティ1102のLSB、LSBまたはPM_TC_priority652の最も有効なものから最も有効でないものまでの順序でインタリーブされる。この実施形態は、実行パイプライン114による高い全体の処理能力を維持することの助けとなるインタリーブ型の実施形態である。
ストール可能性プライオリティ1102は、そのレジスタの使用法に基づいて命令がストールすることなく実行される可能性を示す。1つの実施形態で、ストール可能性プライオリティ1102は以下のように4つのプライオリティレベルを作り出し、ストール可能性プライオリティジェネレータ1104によって生成される2つのビットを含む。命令はストールしないことを保証される場合、最も高いストール可能性プライオリティ1102に割り当てられる。例えば、命令がレジスタへの依存性を有していない場合、または命令がそれ自体と依存性を有する命令との間で十分なパイプライン段階の間隔を有している場合、または例えばミスしているロードデータが戻されているため、または前の命令の結果が現在利用可能であるために、依存性はもはや存在せず、命令によって必要とされるデータが利用可能である場合である。命令はストールすることが保証される場合、最も低いストール可能性プライオリティ1102に割り当てられる。例えば、命令が現在実行中のEHB命令に続く場合、命令がキャッシュ不可能なメモリ領域からのロードである場合、命令がスレッド間通信(ITC)スペース内の場所から/へのロード/ストアである場合、または命令がレジスタ依存性などの依存性のせいで、その前にある別の命令とバックトゥバックで実行されることができない場合である。キャッシュ可能ロード命令は、最も低いプライオリティに次ぐ値に割り当てられる。命令がストールしないことを保証される場合、最も高いプライオリティに次ぐ値に割り当てられるが、例えば1つの実施形態の中での乗算、除算または浮動小数点命令の結果に依存する命令など、ストールしない高い可能性を有する。
1つの実施形態で、命令1114は、スレッドコンテキストのための命令/スキッドバッファ106の読み取りポインタ326における図2の命令206、すなわち発行に適した次の命令であるスレッドコンテキストの命令206である。別の実施形態で、タイミング考慮事項を改善するために、命令プレデコーダ1108は命令1114が図1の命令/スキッドバッファ106にストアされるときに、命令1114のためにレジスタ使用情報1106を生成し、レジスタ使用情報1106を命令1114とともに命令/スキッドバッファ106の中にストアする。命令1114/206が命令/スキッドバッファ106から読み取られると、プレデコードされたレジスタ使用情報1106は、その時点でストール可能性プライオリティジェネレータ1104に与えられる。すなわち、この実施形態では、命令/スキッドバッファ106は命令プレデコーダ1108とストール可能性プライオリティジェネレータ1104との間で結合される。
ここで図12を参照すると、本発明による図11のディスパッチスケジューラ602の動作を示すフローチャートが表されている。図12のフローチャートは図8のフローチャートに類似しており、同じ番号を付けられたブロックは同じものである。しかしながら図12のフローチャートでは、ブロック808はブロック1208と置き換えられている。さらに図12のフローチャートは、さらなるブロック1205を含む。フローはブロック804からブロック1205へ進む。
ブロック1205で、各スレッドコンテキストのために、ストール可能性プライオリティジェネレータ1104は、図11のプロセッサ状態1112および命令1114のレジスタ使用情報1106に基づいて、命令1114のためのストール可能性プライオリティ1102を生成する。フローはブロック1205から判定ブロック806へ進む。
判定ブロック806で、ディスパッチスケジューラ602は、各スレッドコンテキストのための発行可能746信号を調べることによって、発行可能命令206を有する任意のスレッドコンテキストが存在するかどうかを判定し、そうしたスレッドコンテキストが存在しなければ、少なくとも1つのスレッドコンテキストが発行可能命令206を有するまでフローはブロック804へ戻り、そうでなければフローはブロック1208へ進む。
ブロック1208で、ディスパッチスケジューラ602は、スレッドコンテキストの発行可能746ビット、スレッドコンテキストのためにディスパッチするための次の命令206のストール可能性プライオリティ1102、スレッドコンテキストのPM_TC_priority652、およびスレッドコンテキストのPM_TC_priority652のラウンドロビンビット748に基づいて、各スレッドコンテキストの命令206のためのDS_TC_priority208を生成する。フローはブロック1208からブロック812へ進む。
ここで図13を参照すると、本発明の代替実施形態による図1のマイクロプロセッサ100の共有型の動的割当可能なスキッドバッファを示すブロック図が表されている。マイクロプロセッサ100は、図1の命令フェッチャ104とスケジューラ108とを含む。マイクロプロセッサ100は、図2のDC_TC_priority信号208に応答して選択命令204を出力する命令選択ロジック202も含む。マイクロプロセッサ100はまた、図1の命令フェッチャ104が命令をフェッチする、複数の各々のスレッドコンテキストのための複数の命令バッファ1306も含む。マイクロプロセッサ100はまた、複数のスキッドバッファ1312も含む。1つの実施形態で、命令バッファ1306およびスキッドバッファ1312の各々は、図3の命令/スキッドバッファ106の構造に類似した循環FIFOを含む。スキッドバッファ1312はスレッドコンテキストによって共有され、動的に割り当てられるので、スキッドバッファ1312の数は、好都合にもスレッドコンテキストの数よりも少なくてよい。図13はスキッドバッファA、スキッドバッファB、スキッドバッファCと記載されている3つのスキッドバッファ1312を有する実施形態を示す。さらに、各スキッドバッファ1312は関連した割当レジスタ1314とロックレジスタ1316とを有する。割当レジスタ1314は、関連したスキッドバッファ1312がスレッドコンテキストによる使用のために割り当てられているかどうかということと、もしそうであれば、どのスレッドコンテキストにスキッドバッファ1312が割り当てられるのかということを示す。同様に、ロックレジスタ1316は、関連したスキッドバッファ1312がスレッドコンテキストによる使用のためにロックされているのかどうかということと、もしそうであれば、どのスレッドコンテキストに対してスキッドバッファ1312がロックされるのかということを示す。スレッドコンテキストのためにスキッドバッファ1312を割り当てること、およびロックすることは、図14に関して以下でより詳細に述べられる。
マイクロプロセッサ100は、スキッドバッファ1312の各々に関連した複数のマルチプレクサ1322も含む。各マルチプレクサ1322はそれに関連したスキッドバッファ1312の入力に結合された各マルチプレクサ1322の出力を有する。各マルチプレクサ1322は命令バッファ1306の各々の出力を、各マルチプレクサ1322の入力として受け取る。マイクロプロセッサ100はまた、命令バッファ1306の各々に関連した複数のマルチプレクサ1324も含む。各マルチプレクサ1324は、その各々のスレッドコンテキストの図2の命令206を、命令選択ロジック202に出力する。各マルチプレクサ1324は、その各々の命令バッファ1306の出力を1つの入力の上で受け取る。各マルチプレクサ1324は、スキッドバッファ1312の各々の出力を、その残りの入力の上で受け取る。
図2の命令/スキッドバッファ106とは異なり、図13のスキッドバッファ1312は命令バッファ1306とは別のものであり、必要に応じた基準で、スレッドコンテキストによって共有され、動的に割り当てられる。このことは、より効率的な命令バッファリングの解決法を潜在的に提供し、特にはスペースと電力の量が同じである場合のより高性能の解決法か、または性能のレベルが類似している場合のスペースと電力の低減を提供する。マイクロプロセッサ100はまた命令バッファ1306、スキッドバッファ1312、マルチプレクサ1322および1324、割当レジスタ1314ならびにロックレジスタ1316の動作を制御するためのバッファ制御ロジック1332も含む。図13の命令バッファ1306およびスキッドバッファ1312の動作は、図14に関してここで説明される。
ここで図14を参照すると、本発明による図13のスキッドバッファの動作を示す3つのフローチャートが表されている。フローチャートの各々は、異なるイベントまたはイベントのセットに応答して、図13の命令バッファ1306およびスキッドバッファ1312によって行われる動作を示す。第1フローチャートのフローはブロック1404で開始する。
ブロック1404で、図6のディスパッチスケジューラ602は命令バッファ1306から命令を発行する。命令フェッチャ104はスレッドコンテキストに関連した命令バッファ1306に命令を書き込み続けており、特にはブロック1404で発行される命令を命令バッファ1306に書き込んでいることに留意されたい。フローは判定ブロック1406へ進む。
判定ブロック1406で、バッファ制御ロジック1332は、図13の割当レジスタ1314を読み取ることによって、スキッドバッファ1312が既にスレッドコンテキストのために割り当てられているかどうかを判定する。スキッドバッファ1312が既にスレッドコンテキストのために割り当てられているのであればフローはブロック1412へ進み、そうでなければ、フローはスキッドバッファ1312がスレッドコンテキストのために割り当てられてもよいかどうかを判定するために、判定ブロック1408へ進む。
判定ブロック1408で、バッファ制御ロジック1322は、図13のロックレジスタ1316を読み取ることによって、すべてのスキッドバッファがロックされているかどうかを判定する。すべてのスキッドバッファがロックされていないのであればフローはブロック1414へ進み、そうでなければ、スレッドコンテキストのために割り当てられてもよいスキッドバッファ1312は存在せず、このことはスレッドコンテキストがその後実行パイプラインによってフラッシュされる場合、フラッシュされた命令が再フェッチされなければならないことを意味するので、フローは終了する。
ブロック1412で、ブロック1404でディスパッチされた命令は、前にスレッドコンテキストのために割り当てられたスキッドバッファ1312に書き込まれ、命令は命令バッファ1306から取り除かれる。フローはブロック1412で終了する。
ブロック1414で、バッファ制御ロジック1332はスレッドコンテキストのためにスキッドバッファ1312を割り当てる。1つの実施形態で、バッファ制御ロジック1332は、割り当てられたスキッドバッファ1312に関連した割当レジスタ1314にスレッドコンテキスト識別子を書き込むことによって、スレッドコンテキストのためにスキッドバッファ1312を割り当てる。1つの実施形態で、バッファ制御ロジック1332は最も中身のないスキッドバッファ1312を割り当てる。別の実施形態で、バッファ制御ロジック1332は、最近で最も使用されていないものという基準でスキッドバッファ1312を割り当てる。別の実施形態で、バッファ制御ロジック1332は、最近で最もロックされていないものという基準でスキッドバッファ1312を割り当てる。別の実施形態で、バッファ制御ロジック1332は、スレッドコンテキストが現在最も低いプライオリティを有するスキッドバッファ1312を割り当てる。フローは、命令を割り当てられたスキッドバッファ1312に書き込むために、ブロック1414からブロック1412へ進む。
第2フローチャートのフローはブロック1442で開始する。
ブロック1442で、図1の実行ユニット114はスレッドコンテキストのためにストール中イベント126を送る。フローはブロック1444へ進む。
ブロック1444で、実行ユニット114はスレッドコンテキストのためにTC_flush122を送る。フローは判定ブロック1446へ進む。
判定ブロック1446で、バッファ制御ロジック1332は、図13の割当レジスタ1314を読み取ることによって、スキッドバッファ1312がスレッドコンテキストのために割り当てられたかどうかを判定する。スキッドバッファ1312がスレッドコンテキストのために割り当てられていなければフローはブロック1452へ進み、そうでなければフローはブロック1448へ進む。
ブロック1448で、バッファ制御ロジック1332はスレッドコンテキストのために割り当てられたスキッドバッファ1312をロックする。1つの実施形態で、バッファ制御ロジック1332は、スキッドバッファ1312に関連したロックレジスタ1316へスレッドコンテキスト識別子を書き込むことによって、スキッドバッファ1312をスレッドコンテキストのためにロックする。フローはブロック1448で終了する。
ブロック1452で、バッファ制御ロジック1332は、実行ユニット114によってフラッシュされたスレッドコンテキストの命令バッファ1306をフラッシュする。フローはブロック1452で終了する。
第3フローチャートのフローはブロック1482で開始する。
ブロック1482で、実行ユニット114はスレッドコンテキストのために適切な非ストール中イベント128を送る。フローは判定ブロック1484へ進む。
判定ブロック1484で、バッファ制御ロジック1332は、ロックレジスタ1316を読み取ることによって、スキッドバッファ1312がスレッドコンテキストのためにロックされているかどうかを判定する。スキッドバッファ1312がスレッドコンテキストのためにロックされているのであればフローはブロック1488へ進み、そうでなければフローはブロック1486へ進む。
ブロック1486で、スケジューラ108は、スレッドコンテキストに関連した命令バッファ1306から、スレッドコンテキストのために命令を発行する。スレッドコンテキストのためにロックされているスキッドバッファ1312はなかったため、これらの命令は命令バッファ1306の中に再フェッチされなければならなかったことに留意されたい。フローはブロック1486で終了する。
ブロック1488で、スケジューラ108は、例えば除外または妨害または分岐予測誤りの修正に応答して、スキッドバッファ1312が空になるまで、またはスキッドバッファ1312がフラッシュされるまで、第2フローチャートのブロック1448でスレッドコンテキストのためにロックされたスキッドバッファ1312から、スキッドコンテキストのために命令を発行する。好都合にも、これらの命令は再フェッチされる必要がなかったことに留意されたい。フローはブロック1492へ進む。
ブロック1492で、バッファ制御ロジック1332は、第2フローチャートのブロック1448でスレッドコンテキストのためにロックされていたスキッドバッファ1312をロック解除する。フローはブロック1492で終了する。
ここで図15を参照すると、本発明の代替の実施形態による、すべてのスレッドコンテキストによって共有される図1のマイクロプロセッサ100の単一の命令/スキッドバッファを示すブロック図が表されている。図15のマイクロプロセッサ100は、図1の命令フェッチャ104とスケジューラ108とを含む。マイクロプロセッサ100は、命令フェッチャ104がすべてのスレッドコンテキストのために命令をフェッチする単一の命令/スキッドバッファ1506も含む。マイクロプロセッサ100はまた、スケジューラ108から図2のDS_TC_priority信号208を受け取るバッファ制御ロジック1502も含む。バッファ制御ロジック1502は、実行ユニット114への供給のために、図2の選択命令204を出力するために命令/スキッドバッファ1506を制御する。
図15の単一の命令/スキッドバッファ1506はすべてのスレッドコンテキストからの命令をストアするためのランダムアクセスメモリ(RAM)である。したがってバッファ制御ロジック1502は、図3に関して上で説明されたものと同様に機能するすべてのスレッドコンテキストの中で、単一の書き込みポインタ(WP)およびfull_countを維持する。特に、書き込みポインタは命令のスレッドコンテキストに関わりなく、書き込まれるべきRAM1506中の次の場所のアドレスを特定する。同様にfull_countは、命令のスレッドコンテキストに関わりなく、RAM1506に命令が書き込まれる度に増分され、実行のために命令がコミットされる度に減分される。
対照的にバッファ制御ロジック1502は、図3に関して上で説明されたものと同様の、各スレッドコンテキストのための別個の読み取りポインタ(RP)とコミットポインタ(CP)とempty_countとを維持する。特には、読み取りポインタは各々のスレッドコンテキストのために読み取られるべきRAM1506中の次の場所のアドレスを特定し、コミットポインタは各スレッドコンテキストのためにコミットされるべき次の命令のRAM1506中の場所のアドレスを示し、empty_countは、各々のスレッドコンテキストのために命令がRAM1506に書き込まれる度に増分され、スケジューラ108が各々のスレッドコンテキストのためにRAM1506から命令を読み取る度に減分される。
1つの実施形態で、バッファ制御ロジック1502は、命令がRAM1506にフェッチされた順序で、スレッドコンテキストのための有効命令のRAM1506内の場所を特定する各スレッドコンテキストのためのリンクリストを維持する。リンクリストは、命令がRAM1506に書き込まれる度に更新され、各スレッドコンテキストのために読み取りポインタおよびコミットポインタを更新するために使用される。
バッファ制御ロジック1502は、スケジューラ108が命令を要求する場合にスケジューラ108からDS_TC_priority信号208を受け取り、バッファ制御ロジック1502は、それに反応して命令ディスパッチのためにスレッドコンテキストのうちの1つを選択し、DS_TC_priority信号208によって示される最も高いプライオリティを備えたスレッドコンテキストの命令204をRAM1506に出力させるために、RAM1506対して適切なアドレスを生成する。
本発明ならびにその目的、機能および利点が詳細に説明されてきたが、その他の実施形態は本発明によって包含される。例えば、スケジューラ108が分岐され、パラメータ化されたリーキーバケットスケジューリングポリシーがプロセッサコア606の外部、すなわちプロセッサ100のカスタマが変更することができる部分の外部にあるスケジューラ108の部分に含まれる実施形態が説明されてきたが、パラメータ化されたリーキーバケットスケジューラの使用は分岐型スケジューラに限定されるわけではなく、任意の様々な方法で分割されたスケジューラとともに、分岐型ではないスケジューラにも適合されてよいことを理解されたい。さらに、ポリシーマネージャ604がリーキーバケットスケジューリングポリシーを実施する分岐型スケジューラが説明されてきたが、分岐型スケジューラ108はリーキーバケットのスレッドスケジューリングポリシーに限定されるわけではなく、分岐型スケジューラのポリシーマネージャによって実施されるスレッドスケジューリングポリシーは、任意のスレッドスケジューリングアルゴリズムに従うものであってもよい。またさらに、ポリシーマネージャ604が、実行のために命令がコミットされたという指標に基づいて、スレッドコンテキストのプライオリティを更新する実施形態が説明されてきたが、別の実施形態では、ポリシーマネージャ604は、例えば(PM_TC_inst_発行信号646によって示されるような)命令が発行されたという指標、命令が完了されたか、またはマイクロプロセッサ100から廃棄されたという指標、または何らかのその他の命令の実行に関連した指標などの、プロセッサコア606からの別の情報に基づいてスレッドコンテキストのプライオリティを更新してもよい。さらに、TC_RATE912を用いてTC_LEVEL918を更新するために特定の計算が説明されてきたが、TC_LEVEL918は、TC_RATE912を使用する別の方法によって更新されてもよい。
上で本発明の様々な実施形態が説明されてきたが、それらは制限ではなく、例として示されたものであることを理解されたい。本発明の精神および範囲から逸脱することなく、本発明の中で形式および細部の様々な変更が行われることができることは、関連のコンピュータ技術の当業者であれば明らかであろう。
一例として、(例えば中央処理ユニット(「CPU」)、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、プロセッサコア、チップ上システム(「SOC」)、または任意のその他のプログラム可能なデバイスの内部にあるか、またはそれらに結合された)ハードウェアを使用することに加えて、実施態様は、例えばソフトウェアをストアするように構成されたコンピュータ使用可能(例えば可読)媒体の中で処理される(例えばコンピュータ可読コード、プログラムコード、ソース、オブジェクト、またはマシン言語などの任意の形式で処理される命令および/またはデータなどの)ソフトウェアで具体化されてもよい。そのようなソフトウェアは、例えば本明細書で説明された装置および方法の機能、製造、モデル化、シミュレーション、記述および/またはテストを可能にすることができる。例えばこれは、一般的なプログラミング言語(例えばC、C++)、GDSIIデータベース、Verilog HDL、VHDL等を含めたハードウェア記述言語(HDL)、またはその他の利用可能なプログラム、データベース、および/もしくは回路(すなわち回路図面)取り込みツールの使用を通じて達成されることができる。そのようなソフトウェアは、半導体、磁気ディスク、光ディスク(例えばCD−ROM、DVD−ROM等)を含む任意の知られているコンピュータ使用可能媒体の中で、コンピュータ使用可能(例えば可読)伝送媒体(例えば搬送波、またはデジタル、光もしくはアナログベースの媒体を含む任意のその他の媒体)中で具体化されるコンピュータデータ信号として処理されることができる。そのようにして、ソフトウェアは、インターネットまたはイントラネットを含む通信ネットワーク上で伝送されることができる。
本明細書で説明される装置および方法は、(例えばHDLで具体化される)マイクロプロセッサコアなどの半導体知的所有権コアの中に含まれ、集積回路の製造中にハードウェアに変形されてもよいことを理解されたい。さらに、本明細書で説明される装置および方法は、ハードウェアとソフトウェアの組合せとして具体化されてもよい。したがって、本発明は上述の例示的な実施形態のいかなるものによっても限定されるべきではなく、特許請求の範囲およびその均等物によってのみ定義されるべきである。
本発明によるパイプライン化されたマルチスレッディングマイクロプロセッサを示すブロック図である。 特に本発明の1つの実施形態による命令/スキッドバッファである、図1のマイクロプロセッサの一部を示すブロック図である。 本発明による図2の命令/スキッドバッファのうちの1つを例示する命令/スキッドバッファと、関連した制御ロジックとを示すブロック図である。 本発明による図3の命令/スキッドバッファの動作を示す4つのフローチャートである。 本発明による、実行帯域幅の利用を向上させるためにストールされたスレッドコンテキストをフラッシュするための図1のマイクロプロセッサの動作を示すフローチャートである。 本発明の1つの実施形態による図1のマイクロプロセッサの中の分岐されたスケジューラを示すブロック図である。 本発明による図6のディスパッチスケジューラと図2の命令選択ロジックとをより詳細に示すブロック図である。 本発明による図7のディスパッチスケジューラの動作を示すフローチャートである。 本発明による図6のポリシーマネージャとTCスケジュールレジスタとを示すブロック図である。 本発明による図9のポリシーマネージャの動作を示すフローチャートである。 本発明の代替実施形態による図6のディスパッチスケジューラと図2の命令選択ロジックとをより詳細に示すブロック図である。 本発明による図11のディスパッチスケジューラの動作を示すフローチャートである。 本発明の代替実施形態による図1のマイクロプロセッサの共有型の動的割当可能なスキッドバッファを示すブロック図である。 本発明による図13のスキッドバッファの動作を示す3つのフローチャートである。 本発明の代替実施形態による図1のマイクロプロセッサの単一の共有型命令/スキッドバッファを示すブロック図である。

Claims (101)

  1. 複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサで、命令をディスパッチするための分岐型スケジューラであって、
    複数のスレッドの命令をプロセッサの少なくとも1つの実行ユニットに発行するように構成された第1スケジューラロジックと、
    複数のスレッドのスケジューリングポリシーを実施するための第2スケジューラロジックと、
    前記第2スケジューラロジックを、第1スケジューラロジックと前記少なくとも1つの実行ユニットとに結合するインタフェースとを含み、前記インターフェースは、
    前記第1スケジューラロジックが前記第2スケジューラロジックから複数のスレッドの各々のためのプライオリティを受け取るための第1信号であって、前記第1スケジューラロジックが前記プライオリティに基づいて前記命令を前記少なくとも1つの実行ユニットに発行する第1信号と、
    前記第2スケジューラロジックが複数のスレッドの各々のための命令実行情報を受け取るための第2信号であって、前記第2スケジューラロジックが前記命令実行情報に基づいて前記プライオリティを更新する第2信号とを含む、スケジューラ。
  2. 前記第1スケジューラロジックが、各クロックサイクルで、前記プライオリティに基づいて前記命令を前記少なくとも1つの実行ユニットに発行するために、複数のスレッドのうちのどれかを選択する、請求項1に記載のスケジューラ。
  3. 前記第1スケジューラロジックが、各クロックサイクルで、前記プライオリティに基づいて前記命令を前記少なくとも1つの実行ユニットに発行するために、複数のスレッドのうちの1つを選択する、請求項2に記載のスケジューラ。
  4. 前記第1スケジューラロジックが、各クロックサイクルで、前記プライオリティに基づいて前記命令を前記少なくとも1つの実行ユニットに発行するために、複数のスレッドのうちの2つ以上を選択する、請求項2に記載のスケジューラ。
  5. 前記インタフェースが、
    前記第2スケジューラロジックが、前記第1スケジューラロジックから複数のスレッドの各々のためのステータス情報を受け取るための第3信号であって、前記第2スケジューラロジックが前記ステータス情報に基づいて前記プライオリティを更新する第3信号をさらに含む、請求項1に記載のスケジューラ。
  6. 前記ステータス情報が、前記第1スケジューラロジックが複数のスレッドの各々のために命令を発行することからブロックされているかどうかを示す指標を含む、請求項5に記載のスケジューラ。
  7. 複数のスレッドの各々の前記プライオリティが、複数の所定のプライオリティレベルのうちの1つを含む、請求項1に記載のスケジューラ。
  8. 前記命令実行情報が、前記少なくとも1つの実行ユニットによって与えられる、複数のスレッドのうちの命令が実行のためにコミットされたものを示す指標を含む、請求項1に記載のスケジューラ。
  9. 前記命令実行情報が、前記少なくとも1つの実行ユニットによって与えられる、複数のスレッドのうちの命令が完了されたものを示す指標を含む、請求項1に記載のスケジューラ。
  10. 前記命令実行情報が、前記第1スケジューラロジックによって与えられる、複数のスレッドのうちの命令が発行されたものを示す指標を含む、請求項1に記載のスケジューラ。
  11. 前記第1スケジューラロジックが、カスタマによる変更が不可能なものである、請求項1に記載のスケジューラ。
  12. 前記第2スケジューラロジックが、カスタマによる変更が可能なものである、請求項1に記載のスケジューラ。
  13. 複数のスレッドの各々が命令ストリームを含む、請求項1に記載のスケジューラ。
  14. プロセッサが、
    前記命令ストリームの実行の状態を記述するための、複数のスレッドの各々に関連したストレージ要素のセットをさらに含む、請求項13に記載のスケジューラ。
  15. ストレージ要素の前記セットの各々が、
    プラグラムカウンタを含む、請求項14に記載のスケジューラ。
  16. ストレージ要素の前記セットの各々が、
    汎用レジスタセットをさらに含む、請求項15に記載のスケジューラ。
  17. プロセッサがプロセッサコアを含み、前記プロセッサコアが前記第1スケジューラロジックを含み、前記第2スケジューラロジックを含まない、請求項1に記載のスケジューラ。
  18. 前記プロセッサコアが合成可能なものである、請求項17に記載のスケジューラ。
  19. 前記プロセッサコアが、複数のカスタマのために再利用可能である、請求項17に記載のスケジューラ。
  20. 前記第1スケジューラロジックが、そこから命令を発行するために、そのために発行可能命令がプロセッサによってフェッチされ、前記プライオリティによって特定される最も高いプライオリティを有する複数のスレッドのうちの少なくとも1つを選択するように構成されている、請求項1に記載のスケジューラ。
  21. 複数のスレッドの2つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティとを有する場合、前記第1スケジューラロジックが、ラウンドロビン方式で複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項20に記載のスケジューラ。
  22. 複数のスレッドの前記フェッチされた発行可能命令のレジスタ依存性を検査するためのロジックをさらに含み、複数のスレッドの2つ以上が前記最も高いプライオリティを有する場合、前記第1スケジューラロジックが、前記レジスタ依存性に基づいて複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項20に記載のスケジューラ。
  23. 複数のスレッドの2つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティと同じく前記レジスタ依存性とを有する場合、前記第1スケジューラロジックが、ラウンドロビン方式で複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項22に記載のスケジューラ。
  24. 前記インタフェースが、
    前記第2スケジューラロジックが複数のスレッドの各々のための前記第1スケジューラロジックに、スレッドのために命令を発行することをブロックするかどうかを伝えるための第3信号をさらに含む、請求項1に記載のスケジューラ。
  25. 前記インタフェースが、
    前記第1スケジューラロジックから前記第2スケジューラロジックへのクロック信号をさらに含む、請求項1に記載のスケジューラ。
  26. コンピュータプログラム製品が、スケジューラを生じるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータプログラム製品がコンピューティングデバイスとともに使用するためのものである、請求項1に記載のスケジューラ。
  27. コンピュータ可読プログラムコードを含む伝送媒体の中で具体化されるコンピュータデータ信号がスケジューラを提供する、請求項1に記載のスケジューラ。
  28. プロセッサによって同時に実行される複数のスレッドの命令ディスパッチをスケジューリングするためのポリシーを実施するように構成されたスレッドスケジューリングポリシーロジックと、
    命令を実行するための少なくとも1つの実行パイプライン、および
    前記スレッドスケジューリングポリシーロジックから受け取られた前記ポリシーに基づいて、前記実行パイプラインに前記複数のスレッドの命令をディスパッチするために結合された命令ディスパッチャを含む、前記スレッドスケジューリングポリシーロジックに結合されたプロセッサコアと、
    前記スレッドスケジューリングポリシーロジックと前記プロセッサコアとを結合するためのインタフェースとを含み、前記インターフェースは、
    前記ポリシーを実行するために、前記スレッドスケジューリングポリシーロジックが、前記命令ディスパッチャに複数のスレッドの各々のためのディスパッチプライオリティを伝えるためのプライオリティ指標、および
    前記少なくとも1つの実行パイプラインが、前記複数のスレッドの各々のための前記スレッドスケジューリングポリシーロジックに、前記少なくとも1つの実行パイプラインがスレッドのための命令を実行するためにコミットされたかどうかを示す指標を伝えるための実行指標を含む、マルチスレッディングプロセッサ。
  29. 前記スレッドスケジューリングポリシーロジックが、前記プロセッサコアの物理的に外部にある、請求項28に記載のプロセッサ。
  30. 前記スレッドスケジューリングポリシーロジックが、カスタマによる変更が可能なものであり、前記プロセッサコアが、カスタマによる変更が不可能なものである、請求項28に記載のプロセッサ。
  31. 前記命令ディスパッチャが命令を発行するために、そのために発行可能命令がプロセッサによってフェッチされ、前記プライオリティによって特定される最も高いプライオリティを有する前記複数のスレッドのうちの少なくとも1つを選択するように構成されている、請求項28に記載のプロセッサ。
  32. 複数のスレッドの2つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティとを有する場合、前記命令ディスパッチャが、ラウンドロビン方式で前記複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項31に記載のプロセッサ。
  33. 前記複数のスレッドの前記フェッチされた発行可能命令のレジスタ依存性を検査するためのロジックをさらに含み、前記複数のスレッドの2つ以上が前記最も高いプライオリティを有する場合、前記命令ディスパッチャが、前記レジスタ依存性に基づいて前記複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項31に記載のプロセッサ。
  34. 前記複数のスレッドの2つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティと同じく前記レジスタ依存性とを有する場合、前記命令ディスパッチャが、ラウンドロビン方式で前記複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項33に記載のプロセッサ。
  35. コンピュータプログラム製品が、プロセッサを生じるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータプログラム製品がコンピューティングデバイスとともに使用するためのものである、請求項28に記載のプロセッサ。
  36. コンピュータ可読プログラムコードを含む伝送媒体の中で具体化されるコンピュータデータ信号がプロセッサを提供する、請求項28に記載のプロセッサ。
  37. 複数のスレッドを同時に実行するマルチスレッディングプロセッサのスレッドスケジューリングポリシーを実施するためのスレッドスケジューリングポリシーマネージャであって、
    各プロセッサクロックサイクルで、複数のスレッドの各々のために命令が実行されたかどうかを示す指標を受け取るための入力と、
    各プロセッサクロックサイクルで、複数のスレッドの各々のための命令ディスパッチプライオリティを送るための出力と、
    スレッドスケジューリングポリシーを実施するために、前記入力に基づいて前記出力を生成するための、前記入力に結合されたロジックとを含む、ポリシーマネージャ。
  38. 命令が実行されたかどうかを示す前記指標が、前記命令が実行のためにディスパッチされたかどうかを示す、請求項37に記載のポリシーマネージャ。
  39. 命令が実行されたかどうかを示す前記指標が、前記命令が実行のためにコミットされたかどうかを示す、請求項37に記載のポリシーマネージャ。
  40. 命令が実行されたかどうかを示す前記指標が、前記命令の実行が完了したかどうかを示す、請求項37に記載のポリシーマネージャ。
  41. 複数のスレッドの各々の前記プライオリティが、複数の所定のプライオリティレベルのうちの1つを含む、請求項37に記載のポリシーマネージャ。
  42. 各プロセッサクロックサイクルで、複数のスレッドの各々のために命令を発行することをブロックするかどうかを示す指標を送るための第2出力をさらに含む、請求項37に記載のポリシーマネージャ。
  43. 各プロセッサクロックサイクルで、前記スレッドがそこから命令を発行させることから現在ブロックされているかどうかを示す、複数のスレッドの各々についての状態を受け取るための第2入力さらに含み、
    前記ロジックが、前記第1および第2入力に基づいて、スレッドスケジューリングポリシーを実施するために前記出力を生成するようにさらに構成されている、請求項37に記載のポリシーマネージャ。
  44. 複数のスレッドの各々の前記プライオリティが、複数の所定のプライオリティレベルのうちの1つを含む、請求項37に記載のポリシーマネージャ。
  45. コンピュータプログラム製品が、ポリシーマネージャを生じるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータプログラム製品がコンピューティングデバイスとともに使用するためのものである、請求項37に記載のポリシーマネージャ。
  46. コンピュータ可読プログラムコードを含む伝送媒体の中で具体化されるコンピュータデータ信号がポリシーマネージャを提供する、請求項37に記載のポリシーマネージャ。
  47. 複数のスレッドの各々が命令のストリームを含む、複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサコアであって、
    スレッドスケジューリングポリシーロジックが複数のスレッドの各々のプライオリティをプロセッサコアに伝えるための第1信号、および
    スレッドスケジューリングポリシーロジックが、前記プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるためのスレッドの命令の実行に関する複数のスレッドの各々についての情報を、プロセッサコアから受け取るための第2信号を含む、プロセッサコアをプロセッサコアの外部にあるスレッドスケジューリングポリシーロジックに結合するためのインタフェースと、
    前記第1信号を受け取り、前記第1信号で受け取られた前記プライオリティに基づいて、実行のために発行するために、複数のスレッドのうちの少なくとも1つから少なくとも1つの命令を選択するために結合されたスケジューラとを含む、プロセッサコア。
  48. 前記スケジューラが、プロセッサコアの各クロックサイクルで、前記少なくとも1つの命令を選択するように構成されている、請求項47に記載のプロセッサコア。
  49. 前記情報が、プロセッサコアが複数のスレッドのうちの特定された1つの命令を実行のためにコミットしたことを示す指標を含む、請求項47に記載のプロセッサコア。
  50. 前記命令がプロセッサからフラッシュされないことを保証される場合、プロセッサコアが実行のために前記命令をコミットしている、請求項49に記載のプロセッサコア。
  51. 前記命令がプロセッサによって完了されたことを保証される場合、プロセッサコアが実行のために前記命令をコミットしている、請求項49に記載のプロセッサコア。
  52. 前記情報が、プロセッサコアが複数のスレッドのうちの特定された1つの命令を完了したことを示す指標を含む、請求項47に記載のプロセッサコア。
  53. 前記情報が、プロセッサコアが複数のスレッドのうちの特定された1つの命令を実行のために発行したことを示す指標を含む、請求項47に記載のプロセッサコア。
  54. 前記インタフェースが、
    スレッドスケジューリングポリシーロジックが、前記プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるための複数のスレッドの各々の状態を特定する状態情報を、プロセッサコアから受け取るための第3信号をさらに含む、請求項47に記載のプロセッサコア。
  55. 前記状態情報が、複数のスレッドの各々が実行のためにスレッドから命令を発行することが前記スケジューラに対してブロックされているのかどうかを示す指標を含む、請求項54に記載のプロセッサコア。
  56. 前記インタフェースが、
    スレッドスケジューリングポリシーロジックが、複数のスレッドの各々のための前記スケジューラに、スレッドのために命令を発行することをブロックするかどうかを伝えるための第3信号をさらに含む、請求項47に記載のプロセッサコア。
  57. 前記スケジューラが、前記実行パイプラインが効率的なものになるように、プロセッサコアの実行パイプラインを命令でいっぱいにしておくことを試みるために、複数のスレッドのうちの前記少なくとも1つから前記少なくとも1つの命令を選択するように構成されている、請求項47に記載のプロセッサコア。
  58. 前記スケジューラが、そのために発行可能命令がプロセッサによってフェッチされ、前記プライオリティによって特定される最も高いプライオリティを有する複数のスレッドのうちの前記少なくとも1つを選択するように構成されている、請求項47に記載のプロセッサコア。
  59. 複数のスレッドの2つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティとを有する場合、前記スケジューラが、ラウンドロビン方式で複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項58に記載のプロセッサコア。
  60. 複数のスレッドの前記フェッチされた発行可能命令のレジスタ依存性を検査するためのロジックをさらに含み、複数のスレッドの2つ以上が前記最も高いプライオリティを有する場合、前記スケジューラが、前記レジスタ依存性に基づいて複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項58に記載のプロセッサコア。
  61. 複数のスレッドの2つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティと同じく前記レジスタ依存性とを有する場合、前記スケジューラがラウンドロビン方式で複数のスレッドの前記2つ以上のうちの1つを選択するように構成されている、請求項60に記載のプロセッサ。
  62. 複数のスレッドの各々の前記プライオリティが、複数の所定のプライオリティレベルのうちの1つを含む、請求項47に記載のプロセッサコア。
  63. 前記プロセッサコアが、再使用可能でありカスタマによる変更が不可能なコアを含む、請求項47に記載のプロセッサコア。
  64. 前記スレッドスケジューリングポリシーロジックが、カスタマによる変更が可能なロジックを含む、請求項47に記載のプロセッサコア。
  65. 前記プロセッサコアが合成可能なものである、請求項47に記載のプロセッサコア。
  66. 前記インタフェースが、
    前記スケジューラから前記スレッドスケジューリングポリシーロジックへのクロック信号をさらに含む、請求項47に記載のプロセッサコア。
  67. コンピュータプログラム製品が、プロセッサコアを生じるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータプログラム製品がコンピューティングデバイスとともに使用するためのものである、請求項47に記載のプロセッサコア。
  68. コンピュータ可読プログラムコードを含む伝送媒体の中で具体化されるコンピュータデータ信号がプロセッサコアを提供する、請求項47に記載のプロセッサコア。
  69. マルチスレッディングプロセッサの中で複数の同時実行スレッドをスケジューリングするための方法であって、
    第1クロックサイクルの間に、スレッドスケジューリングポリシーロジックによって、命令ディスパッチロジックに複数のスレッドの各々のためのスレッドスケジューリングプライオリティを送るステップと、
    前記プライオリティを送るステップに応答して、第2クロックサイクルの間に、命令ディスパッチロジックによって、実行のための複数のスレッドから少なくとも1つの命令をディスパッチするステップとを含む、方法。
  70. 第1クロックサイクルの後の第3クロックサイクルの間に、実行ロジックによって、スレッドスケジューリングポリシーロジックに、実行ロジックが複数のスレッドの各々のための命令を実行したかどうかを示す指標を送るステップをさらに含む、請求項69に記載の方法。
  71. 前記指標が、前記実行ロジックが実行のために命令をコミットしたかどうかを示す、請求項70に記載の方法。
  72. 前記指標が、前記命令が実行のために実行ロジックにディスパッチされたかどうかを示す、請求項70に記載の方法。
  73. 指標が、命令の実行が完了されたかどうかを示す、請求項70に記載の方法。
  74. 実行ロジックによってスレッドスケジューリングポリシーロジックに指標を送る前記ステップに応答して、第4クロックサイクルの間に、スレッドスケジューリングポリシーロジックによって、命令ディスパッチロジックに複数のスレッドの各々のための第2スレッドスケジューリングプライオリティを送るステップをさらに含む、請求項70に記載の方法。
  75. 前記第1クロックサイクルの前に、命令ディスパッチロジックによって、スレッドスケジューリングポリシーロジックに複数のスレッドの各々についての状態を送るステップと、
    命令ディスパッチロジックによってスレッドスケジューリングポリシーロジックに複数のスレッドの各々の状態を送る前記ステップに応答して、第1クロックサイクルの間に、スレッドスケジューリングポリシーロジックによって、命令ディスパッチロジックに複数のスレッドの各々のためのスレッドスケジューリングプライオリティを送る前記ステップとをさらに含む、請求項69に記載の方法。
  76. スレッドスケジューリングポリシーロジックによって、命令ディスパッチロジックに、スレッドのために命令をディスパッチすることをブロックするかどうかを示す複数のスレッドの各々のための指標を送るステップと、
    命令をディスパッチすることをブロックするために、スレッドスケジューリングポリシーロジックによって送られた複数のスレッドの各々からの命令を、命令ディスパッチロジックによってディスパッチする前記ステップを停止するステップとをさらに含む、請求項69に記載の方法。
  77. スレッドスケジューリングポリシーロジックがカスタマによってカスタマイズされ、命令ディスパッチロジックが複数のカスタマのために再使用可能である、請求項69に記載の方法。
  78. スレッドスケジューリングポリシーロジックがプロセッサのコアの外部にあり、命令ディスパッチロジックがコアの内部にある、請求項69に記載の方法。
  79. コンピューティングデバイスとともに使用するためのコンピュータプログラム製品であって、
    複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチするための分岐型スケジューラを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータ可読プログラムコードが、
    複数のスレッドの命令をプロセッサの少なくとも1つの実行ユニットに発行するように構成された第1スケジューラロジックを提供するための第1プログラムコードと、
    複数のスレッドのスケジューリングポリシーを実施するための第2スケジューラロジックを提供するための第2プログラムコードと、
    前記第2スケジューラロジックを第1スケジューラロジックと前記少なくとも1つの実行ユニットとに結合するインタフェースを提供するための第3プログラムコードとを含み、前記インタフェースが
    前記第1スケジューラロジックが、前記第2スケジューラロジックから複数のスレッドの各々のためのプライオリティを受け取るための第1信号であって、前記第1スケジューラロジックが前記プライオリティに基づいて、前記命令を前記少なくとも1つの実行ユニットに発行する第1信号、および
    前記第2スケジューラロジックが、複数のスレッドの各々のための命令実行情報を受け取るための第2信号であって、前記第2スケジューラロジックが前記命令実行情報に基づいて前記プライオリティを更新する第2信号を含む、コンピュータプログラム製品。
  80. 前記コンピュータ可読プログラムコードが、
    前記第2スケジューラロジックが前記第1スケジューラロジックから複数のスレッドの各々のについてのステータス情報を受け取るための第3信号を提供するための第4プログラムコードをさらに含み、前記第2スケジューラロジックが前記ステータス情報に基づいて前記プライオリティを更新する、請求項79に記載のコンピュータプログラム製品。
  81. コンピューティングデバイスとともに使用するためのコンピュータプログラム製品であって、
    マルチスレッディングプロセッサを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータ可読プログラムコードが、
    プロセッサによって同時に実行される複数のスレッドの命令ディスパッチのスケジューリングのためのポリシーを実施するように構成されたスレッドスケジューリングポリシーロジックを提供するための第1プログラムコードと、
    命令を実行するための少なくとも1つの実行パイプライン、および
    前記スレッドスケジューリングポリシーロジックから受け取られた前記ポリシーに基づいて、前記複数のスレッドの命令を前記実行パイプラインにディスパッチするために結合された命令ディスパッチャを含む、前記スレッドスケジューリングポリシーロジックに結合されたプロセッサコアを提供するための第2プログラムコードと、
    前記スレッドスケジューリングポリシーロジックと前記プロセッサコアとを結合するためのインタフェースとを含み、前記インターフェースが、
    前記スレッドスケジューリングポリシーロジックが、前記ポリシーを実施するために複数のスレッドの各々のためのディスパッチプライオリティを前記命令ディスパッチャに伝えるためのプライオリティ指標、および
    前記少なくとも1つの実行パイプラインが、前記少なくとも1つの実行パイプラインがスレッドのために命令の実行をコミットしたかどうかを示す指標を、前記複数のスレッドの各々のための前記スレッドスケジューリングポリシーロジックに伝えるための実行指標を含む、コンピュータプログラム製品。
  82. 前記コンピュータ可読プログラムコードが、
    前記命令ディスパッチャを提供するための第4プログラムコードをさらに含み、前記命令ディスパッチャが、そのために発行可能命令がプロセッサによってフェッチされ、前記プライオリティによって特定される最も高いプライオリティを有する前記複数のスレッドのうちの少なくとも1つを、命令を発行するために選択するように構成されている、請求項81に記載のコンピュータプログラム製品。
  83. コンピューティングデバイスとともに使用するためのコンピュータプログラム製品であって、
    複数のスレッドを同時に実行するマルチスレッディングプロセッサのスレッドスケジューリングポリシーを実施するためのスレッドスケジューリングポリシーマネージャを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータ可読プログラムコードが、
    各プロセッサクロックサイクルで、複数のスレッドの各々のために命令が実行されたかどうかを示す指標を受け取るための入力を提供するための第1プログラムコードと、
    各プロセッサクロックサイクルで、複数のスレッドの各々のための命令ディスパッチプライオリティを送るための出力を提供するための第2プログラムコードと、
    スレッドスケジューリングポリシーを実施するために前記入力に基づいて前記出力を生成するために、前記入力に結合されたロジックを提供するための第3プログラムコードとを含む、コンピュータプログラム製品。
  84. 前記コンピュータ可読プログラムコードが、
    前記ロジックを提供するための第4プログラムコードをさらに含み、複数のスレッドの各々の前記プライオリティが複数の所定のプライオリティレベルのうちの1つを含む、請求項83に記載のコンピュータプログラム製品。
  85. コンピューティングデバイスとともに使用するためのコンピュータプログラム製品であって、
    複数のスレッドの各々が命令のストリームを含む、複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサコアを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータ可読プログラムコードが、
    プロセッサコアをプロセッサコアの外部にあるスレッドスケジューリングポリシーロジックに結合するためのインタフェースを提供するための第1プログラムコードであって、前記インタフェースが
    スレッドスケジューリングポリシーロジックが複数のスレッドの各々のプライオリティをプロセッサコアに伝えるための第1信号、および
    スレッドスケジューリングポリシーロジックが、前記プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるためのスレッドの命令の実行に関する複数のスレッドの各々のための情報を、プロセッサコアから受け取るための第2信号とを含む第1プログラムコードと、
    前記第1信号を受け取り、前記第1信号で受け取られた前記プライオリティに基づいて、実行のために発行するために、複数のスレッドのうちの少なくとも1つから少なくとも1つの命令を選択するために結合されたスケジューラを提供するための第2プログラムコードとを含む、コンピュータプログラム製品。
  86. 前記コンピュータ可読プログラムコードが、前記インタフェースを提供するための第3プログラムコードをさらに含み、前記情報が、プロセッサコアが複数のスレッドのうちの特定された1つの命令を実行のためにコミットしたことを示す指標を含む、請求項85に記載のコンピュータプログラム製品。
  87. 伝送媒体の中で具体化されるコンピュータデータ信号であって、
    複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチするための分岐型スケジューラを提供するためのコンピュータ可読プログラムコードを含み、前記コンピュータ可読プログラムコードが、
    プロセッサの少なくとも1つの実行ユニットに複数のスレッドの命令を発行するように構成された第1スケジューラロジックを提供するための第1プログラムコードと、
    複数のスレッドのスケジューリングポリシーを実施するための第2スケジューラロジックを提供するための第2プログラムコードと、
    前記第2スケジューラロジックを第1スケジューラロジックと前記少なくとも1つの実行ユニットとに結合するインタフェースを提供するための第3プログラムコードを含み、前記インタフェースが、
    前記第1スケジューラロジックが前記第2スケジューラロジックから複数のスレッドの各々のためのプライオリティを受け取るための第1信号であって、前記第1スケジューラロジックが、前記プライオリティに基づいて前記命令を前記少なくとも1つの実行ユニットに発行する第1信号、および
    前記第2スケジューラロジックが複数のスレッドの各々のための命令実行情報を受け取るための第2信号であって、前記第2スケジューラロジックが、前記命令実行情報に基づいて前記プライオリティを更新する第2信号を含む、コンピュータデータ信号。
  88. 前記コンピュータ可読プログラムコードが、
    前記第2スケジューラロジックが、前記第1スケジューラロジックから複数のスレッドの各々についてのステータス情報を受け取るための第3信号を提供するための第4プログラムコードをさらに含み、前記第2スケジューラロジックが、前記ステータス情報に基づいて前記プライオリティを更新する、請求項87に記載のコンピュータデータ信号。
  89. プロセッサコアによる複数のスレッドの同時ディスパッチをスケジューリングするためのポリシーをポリシーロジックが実施することを可能にするための、プロセッサコアとスレッドスケジューリングポリシーロジックとの間のインタフェースであって、
    スレッドスケジューリングポリシーロジックが、複数のスレッドの各々のためのディスパッチプライオリティをプロセッサコアの命令ディスパッチャに伝えるためのプライオリティ指標と、
    プロセッサコアの実行パイプラインが、実行パイプラインがスレッドのための命令を実行したかどうかを示す指標を、複数のスレッドの各々のためのスレッドスケジューリングポリシーロジックに伝えるためのフィードバック指標とを含む、インタフェース。
  90. 前記フィードバック指標が、実行パイプラインがスレッドのための命令を実行したかどうかではなく、ディスパッチャがスレッドのための命令をディスパッチしたかどうかを示す指標を伝える、請求項89に記載のインタフェース。
  91. プロセッサコアがクロック信号をスレッドスケジューリングポリシーロジックに伝えるためのクロック指標をさらに含む、請求項89に記載のインタフェース。
  92. プロセッサコアが、複数のスレッドの各々についてのステータスをスレッドスケジューリングポリシーロジックに伝えるためのステータス指標をさらに含む、請求項89に記載のインタフェース。
  93. 前記ステータス指標が、スレッドが命令ディスパッチのために現在ブロックされているかどうかを示す、請求項92に記載のインタフェース。
  94. スレッドスケジューリングポリシーロジックが、複数のスレッドの各々のために命令をディスパッチすることを停止するためのコマンドをプロセッサコアに伝えるためのブロッキング指標をさらに含む、請求項89に記載のインタフェース。
  95. プロセッサコアが複数の仮想処理要素を含み、インタフェースが、
    プロセッサコアが前記仮想処理要素の各々についてのステータスをスレッドスケジューリングポリシーロジックに伝えるためのステータス指標をさらに含む、請求項89に記載のインタフェース。
  96. プロセッサコアが、スレッドスケジューリングポリシーロジックにプロセッサコアが新たなスレッドを作成したことを伝えるための分岐指標をさらに含む、請求項89に記載のインタフェース。
  97. 前記フィードバック指標が、複数のスレッドのうちのどれが前記新たなスレッドを作成したのかを示す、請求項96に記載のインタフェース。
  98. プロセッサコアがスレッドスケジューリングポリシーロジックの制御/ステータスレジスタの読み取りおよび書き込みを行うための制御信号をさらに含む、請求項89に記載のインタフェース。
  99. 前記制御/ステータスレジスタが、MIPS特権リソースアーキテクチャ(PRA)とMIPSマルチスレッディング特定用途向け拡張機能(MT ASE)とによって定義されるコプロセッサ0レジスタを含む、請求項98に記載のインタフェース。
  100. 前記プライオリティ指標が、除外処理スレッドのためのディスパッチプライオリティを伝える、請求項89に記載のインタフェース。
  101. 前記プライオリティ指標がリラックススレッドのためのディスパッチプライオリティを伝え、前記リラックススレッドが、スレッドスケジューリングポリシーロジックが実行パイプラインの実行帯域幅のすべてを利用しないことによって電力消費を節約するために、プロセッサコアと通信できるようにするための実在しない仮想スレッドである、請求項89に記載のインタフェース。
JP2007554108A 2005-02-04 2006-01-18 マルチスレッディングマイクロプロセッサ内の分岐型スレッドスケジューラ Pending JP2008530655A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/051,997 US7613904B2 (en) 2005-02-04 2005-02-04 Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
PCT/US2006/001557 WO2006083541A2 (en) 2005-02-04 2006-01-18 Bifurcated thread scheduler in a multithreading microprocessor

Publications (1)

Publication Number Publication Date
JP2008530655A true JP2008530655A (ja) 2008-08-07

Family

ID=36570301

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007554108A Pending JP2008530655A (ja) 2005-02-04 2006-01-18 マルチスレッディングマイクロプロセッサ内の分岐型スレッドスケジューラ

Country Status (7)

Country Link
US (1) US7613904B2 (ja)
EP (1) EP1856603B1 (ja)
JP (1) JP2008530655A (ja)
KR (1) KR101273036B1 (ja)
CN (1) CN101133391B (ja)
TW (1) TWI316203B (ja)
WO (1) WO2006083541A2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5168277B2 (ja) * 2007-06-20 2013-03-21 富士通株式会社 命令制御装置及び制御方法
JP2014170572A (ja) * 2014-04-24 2014-09-18 Renesas Electronics Corp マルチスレッドプロセッサ
US9098336B2 (en) 2008-09-30 2015-08-04 Renesas Electronics Corporation Multi-thread processor and its hardware thread scheduling method

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7657883B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7664936B2 (en) * 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7506140B2 (en) * 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7853777B2 (en) * 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7627770B2 (en) * 2005-04-14 2009-12-01 Mips Technologies, Inc. Apparatus and method for automatic low power mode invocation in a multi-threaded processor
US7600135B2 (en) * 2005-04-14 2009-10-06 Mips Technologies, Inc. Apparatus and method for software specified power management performance using low power virtual threads
JP4667206B2 (ja) * 2005-10-31 2011-04-06 富士通セミコンダクター株式会社 マルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法
US7721127B2 (en) * 2006-03-28 2010-05-18 Mips Technologies, Inc. Multithreaded dynamic voltage-frequency scaling microprocessor
US8149709B2 (en) * 2006-06-30 2012-04-03 Oracle America, Inc. Serialization queue framework for transmitting packets
US7594077B2 (en) * 2006-09-08 2009-09-22 Intel Corporation System, method and apparatus to accelerate raid operations
US7760748B2 (en) 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch
US7990989B2 (en) 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
US7961745B2 (en) * 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7773621B2 (en) * 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch
GB2443507A (en) * 2006-10-24 2008-05-07 Advanced Risc Mach Ltd Debugging parallel programs
US7975272B2 (en) 2006-12-30 2011-07-05 Intel Corporation Thread queuing method and apparatus
GB2449106B (en) * 2007-05-10 2011-07-27 Advanced Risc Mach Ltd Issue policy control within a multi-threaded in-order superscalar processor
US8650570B2 (en) * 2008-06-02 2014-02-11 Microsoft Corporation Method of assigning instructions in a process to a plurality of scheduler instances based on the instruction, in which each scheduler instance is allocated a set of negoitaited processor resources
US8933953B2 (en) * 2008-06-30 2015-01-13 Intel Corporation Managing active thread dependencies in graphics processing
US8434087B2 (en) * 2008-08-29 2013-04-30 International Business Machines Corporation Distributed acceleration devices management for streams processing
US8788793B2 (en) 2009-05-18 2014-07-22 Panasonic Corporation Instruction issue to plural computing units from plural stream buffers based on priority in instruction order table
CN101763251B (zh) * 2010-01-05 2014-04-16 浙江大学 含有译码缓冲装置的多线程的微处理器
KR101644800B1 (ko) * 2010-01-07 2016-08-02 삼성전자주식회사 컴퓨팅 시스템 및 방법
US8893092B1 (en) * 2010-03-12 2014-11-18 F5 Networks, Inc. Using hints to direct the exploration of interleavings in a multithreaded program
CN102073461B (zh) * 2010-12-07 2012-07-04 成都市华为赛门铁克科技有限公司 输入输出请求调度方法、相关装置和存储阵列
US9875105B2 (en) 2012-05-03 2018-01-23 Nvidia Corporation Checkpointed buffer for re-entry from runahead
US10001996B2 (en) 2012-10-26 2018-06-19 Nvidia Corporation Selective poisoning of data during runahead
US9740553B2 (en) 2012-11-14 2017-08-22 Nvidia Corporation Managing potentially invalid results during runahead
US9632976B2 (en) 2012-12-07 2017-04-25 Nvidia Corporation Lazy runahead operation for a microprocessor
US9207944B1 (en) 2013-03-15 2015-12-08 Google Inc. Doubling thread resources in a processor
KR102102166B1 (ko) * 2013-04-22 2020-04-21 삼성전자 주식회사 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법
CN103605572A (zh) * 2013-12-05 2014-02-26 用友软件股份有限公司 一种多线程计算装置
KR101895296B1 (ko) * 2014-02-12 2018-09-05 주식회사 칩스앤미디어 동영상 처리 방법 및 장치
KR101895295B1 (ko) * 2014-02-12 2018-09-05 주식회사 칩스앤미디어 동영상 처리 방법 및 장치
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
US10459760B2 (en) * 2016-07-08 2019-10-29 Sap Se Optimizing job execution in parallel processing with improved job scheduling using job currency hints
US10558464B2 (en) * 2017-02-09 2020-02-11 International Business Machines Corporation Infinite processor thread balancing
GB2563587B (en) 2017-06-16 2021-01-06 Imagination Tech Ltd Scheduling tasks
CN108228242B (zh) * 2018-02-06 2020-02-07 江苏华存电子科技有限公司 一种可配置且具弹性的指令调度器
US11119972B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
CN111399912B (zh) * 2020-03-26 2022-11-22 超睿科技(长沙)有限公司 一种面向多周期指令的指令调度方法、系统及介质
CN111478838B (zh) * 2020-04-08 2021-12-21 浙江中控研究院有限公司 一种高效高带宽的通信方法及系统
US20230066662A1 (en) * 2021-08-31 2023-03-02 Ceremorphic, Inc. Instruction Cache for Hardware Multi-Thread Microprocessor
US11614915B1 (en) 2021-12-17 2023-03-28 DSP Concepts, Inc. Audio multithreading interface

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6105051A (en) * 1997-10-23 2000-08-15 International Business Machines Corporation Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
US20020062435A1 (en) * 1998-12-16 2002-05-23 Mario D. Nemirovsky Prioritized instruction scheduling for multi-streaming processors
US20030028816A1 (en) * 2001-08-02 2003-02-06 Bacon Kinney C. Controlling processor clock rate based on thread priority
EP1351117A1 (en) * 2002-04-03 2003-10-08 Hewlett-Packard Company Data processing system and method

Family Cites Families (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4126895A (en) * 1975-12-29 1978-11-21 International Standard Electric Corporation Data processing system with monitoring and regulation of processor free time
US4924380A (en) * 1988-06-20 1990-05-08 Modular Computer Systems, Inc. (Florida Corporation) Dual rotating priority arbitration method for a multiprocessor memory bus
US5095460A (en) * 1989-04-25 1992-03-10 Digital Equipment Corporation Rotating priority encoder operating by selectively masking input signals to a fixed priority encoder
US5276887A (en) * 1991-06-06 1994-01-04 Commodore Electronics Limited Bus arbitration system for granting bus access to devices following two-wire bus arbitration protocol and devices following three-wire bus arbitration protocol
US5440752A (en) * 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
US5734877A (en) * 1992-09-09 1998-03-31 Silicon Graphics, Inc. Processor chip having on-chip circuitry for generating a programmable external clock signal and for controlling data patterns
US5309382A (en) * 1992-10-01 1994-05-03 Silicon Graphics, Inc. Binary shifter
US5357512A (en) * 1992-12-30 1994-10-18 Intel Corporation Conditional carry scheduler for round robin scheduling
US5528513A (en) * 1993-11-04 1996-06-18 Digital Equipment Corp. Scheduling and admission control policy for a continuous media server
US5745778A (en) * 1994-01-26 1998-04-28 Data General Corporation Apparatus and method for improved CPU affinity in a multiprocessor system
US5546554A (en) * 1994-02-02 1996-08-13 Sun Microsystems, Inc. Apparatus for dynamic register management in a floating point unit
US5793993A (en) * 1995-01-26 1998-08-11 General Magic, Inc. Method for transmitting bus commands and data over two wires of a serial bus
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
US5938742A (en) * 1995-08-18 1999-08-17 General Magic, Inc. Method for configuring an intelligent low power serial bus
US5860000A (en) * 1996-01-31 1999-01-12 Hitachi Micro Systems, Inc. Floating point unit pipeline synchronized with processor pipeline
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
KR100500002B1 (ko) * 1996-08-27 2005-09-08 마츠시타 덴끼 산교 가부시키가이샤 복수의명령흐름을독립적으로처리하고,명령흐름단위로처리성능을유연하게제어하는멀티스레드프로세서
JP3435293B2 (ja) * 1996-09-10 2003-08-11 株式会社東芝 パケットスケジューリング装置及びパケット転送方法
US6385715B1 (en) * 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US5898694A (en) * 1996-12-30 1999-04-27 Cabletron Systems, Inc. Method of round robin bus arbitration
US6073159A (en) * 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US5832278A (en) * 1997-02-26 1998-11-03 Advanced Micro Devices, Inc. Cascaded round robin request selection method and apparatus
US6094435A (en) * 1997-06-30 2000-07-25 Sun Microsystems, Inc. System and method for a quality of service in a multi-layer network element
US6658447B2 (en) * 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US5913049A (en) * 1997-07-31 1999-06-15 Texas Instruments Incorporated Multi-stream complex instruction set microprocessor
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW processor
US6567839B1 (en) * 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
US6076157A (en) * 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6212544B1 (en) * 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6549930B1 (en) * 1997-11-26 2003-04-15 Compaq Computer Corporation Method for scheduling threads in a multithreaded processor
US6163827A (en) * 1997-12-16 2000-12-19 Network Equipment Technologies, Inc. Method and apparatus for round-robin flash channel arbitration
US6272520B1 (en) * 1997-12-31 2001-08-07 Intel Corporation Method for detecting thread switch events
US6032218A (en) * 1998-05-28 2000-02-29 3Com Corporation Configurable weighted round robin arbiter
US7035997B1 (en) 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US6237081B1 (en) * 1998-12-16 2001-05-22 International Business Machines Corporation Queuing method and apparatus for facilitating the rejection of sequential instructions in a processor
US6389449B1 (en) * 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US6516369B1 (en) * 1998-12-29 2003-02-04 International Business Machines Corporation Fair and high speed arbitration system based on rotative and weighted priority monitoring
US6470016B1 (en) * 1999-02-09 2002-10-22 Nortel Networks Limited Servicing output queues dynamically according to bandwidth allocation in a frame environment
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6563818B1 (en) * 1999-05-20 2003-05-13 Advanced Micro Devices, Inc. Weighted round robin cell architecture
US6556571B1 (en) * 1999-05-25 2003-04-29 Nec Usa, Inc. Fast round robin priority port scheduler for high capacity ATM switches
US6754736B1 (en) * 1999-06-23 2004-06-22 Fujitsu Limited Information processing apparatus, data inputting/outputting method, and program storage medium therefor
US6542921B1 (en) * 1999-07-08 2003-04-01 Intel Corporation Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US6434155B1 (en) * 1999-12-22 2002-08-13 Alcatel Usa Sourcing, L.P. Weighted round robin engine used in scheduling the distribution of ATM cells
US6609190B1 (en) * 2000-01-06 2003-08-19 International Business Machines Corporation Microprocessor with primary and secondary issue queue
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US7051189B2 (en) * 2000-03-15 2006-05-23 Arc International Method and apparatus for processor code optimization using code compression
US7007153B1 (en) * 2000-03-30 2006-02-28 Agere Systems Inc. Method and apparatus for allocating functional units in a multithreaded VLIW processor
US6931641B1 (en) 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US6694425B1 (en) * 2000-05-04 2004-02-17 International Business Machines Corporation Selective flush of shared and other pipeline stages in a multithread processor
EP1164493B1 (en) * 2000-06-16 2005-11-30 STMicroelectronics S.r.l. Variable priority arbitration method, for instance for interconnect buses, and respective system
US6665760B1 (en) * 2000-09-29 2003-12-16 Rockwell Automation Technologies, Inc. Group shifting and level shifting rotational arbiter system
US6647449B1 (en) * 2000-10-05 2003-11-11 Hewlett-Packard Development Company, L.P. System, method and circuit for performing round robin arbitration
US6721874B1 (en) * 2000-10-12 2004-04-13 International Business Machines Corporation Method and system for dynamically shared completion table supporting multiple threads in a processing system
US6981129B1 (en) 2000-11-02 2005-12-27 Intel Corporation Breaking replay dependency loops in a processor using a rescheduled replay queue
US7139898B1 (en) 2000-11-03 2006-11-21 Mips Technologies, Inc. Fetch and dispatch disassociation apparatus for multistreaming processors
US7401211B2 (en) * 2000-12-29 2008-07-15 Intel Corporation Method for converting pipeline stalls caused by instructions with long latency memory accesses to pipeline flushes in a multithreaded processor
US6810426B2 (en) * 2001-01-30 2004-10-26 Nomadix, Inc. Methods and systems providing fair queuing and priority scheduling to enhance quality of service in a network
US6918116B2 (en) * 2001-05-15 2005-07-12 Hewlett-Packard Development Company, L.P. Method and apparatus for reconfiguring thread scheduling using a thread scheduler function unit
US6868529B1 (en) * 2001-08-31 2005-03-15 Turin Networks Method and apparatus for efficient implementation of round robin control unit
JP3577052B2 (ja) * 2002-03-19 2004-10-13 株式会社東芝 命令発行装置及び命令発行方法
US8024735B2 (en) * 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US7096470B2 (en) * 2002-09-19 2006-08-22 International Business Machines Corporation Method and apparatus for implementing thread replacement for optimal performance in a two-tiered multithreading structure
US7334086B2 (en) * 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
US20040128448A1 (en) * 2002-12-31 2004-07-01 Intel Corporation Apparatus for memory communication during runahead execution
US20040139441A1 (en) * 2003-01-09 2004-07-15 Kabushiki Kaisha Toshiba Processor, arithmetic operation processing method, and priority determination method
KR100498482B1 (ko) 2003-01-27 2005-07-01 삼성전자주식회사 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
EP1462934A1 (en) * 2003-03-29 2004-09-29 Deutsche Thomson-Brandt Gmbh Method and apparatus for forwarding of results
US7363625B2 (en) * 2003-04-24 2008-04-22 International Business Machines Corporation Method for changing a thread priority in a simultaneous multithread processor
US7469407B2 (en) * 2003-04-24 2008-12-23 International Business Machines Corporation Method for resource balancing using dispatch flush in a simultaneous multithread processor
US7213135B2 (en) * 2003-04-24 2007-05-01 International Business Machines Corporation Method using a dispatch flush in a simultaneous multithread processor to resolve exception conditions
US7401208B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Method and apparatus for randomizing instruction thread interleaving in a multi-thread processor
US7401207B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Apparatus and method for adjusting instruction thread priority in a multi-thread processor
US7120714B2 (en) * 2003-05-27 2006-10-10 Intel Corporation High-speed starvation-free arbiter system, rotating-priority arbiter, and two stage arbitration method
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US7441101B1 (en) * 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US6987517B1 (en) * 2004-01-06 2006-01-17 Nvidia Corporation Programmable graphics processor for generalized texturing
US7185178B1 (en) * 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7890734B2 (en) * 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
US20060095732A1 (en) * 2004-08-30 2006-05-04 Tran Thang M Processes, circuits, devices, and systems for scoreboard and other processor improvements
US7890735B2 (en) 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US20060168254A1 (en) * 2004-11-01 2006-07-27 Norton Scott J Automatic policy selection
JP4606142B2 (ja) * 2004-12-01 2011-01-05 株式会社ソニー・コンピュータエンタテインメント スケジューリング方法、スケジューリング装置およびマルチプロセッサシステム
US20060168393A1 (en) * 2005-01-27 2006-07-27 Christensen Bjorn P Apparatus and method for dependency tracking and register file bypass controls using a scannable register file
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7853777B2 (en) * 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7657891B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7664936B2 (en) 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US20060212853A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Real-time control apparatus having a multi-thread processor
US7760748B2 (en) 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch
US7961745B2 (en) 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7990989B2 (en) 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
US7773621B2 (en) 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6105051A (en) * 1997-10-23 2000-08-15 International Business Machines Corporation Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
US20020062435A1 (en) * 1998-12-16 2002-05-23 Mario D. Nemirovsky Prioritized instruction scheduling for multi-streaming processors
US20030028816A1 (en) * 2001-08-02 2003-02-06 Bacon Kinney C. Controlling processor clock rate based on thread priority
EP1351117A1 (en) * 2002-04-03 2003-10-08 Hewlett-Packard Company Data processing system and method

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5168277B2 (ja) * 2007-06-20 2013-03-21 富士通株式会社 命令制御装置及び制御方法
US9098336B2 (en) 2008-09-30 2015-08-04 Renesas Electronics Corporation Multi-thread processor and its hardware thread scheduling method
JP2014170572A (ja) * 2014-04-24 2014-09-18 Renesas Electronics Corp マルチスレッドプロセッサ

Also Published As

Publication number Publication date
US20060179279A1 (en) 2006-08-10
TWI316203B (en) 2009-10-21
WO2006083541A3 (en) 2007-04-19
WO2006083541A2 (en) 2006-08-10
EP1856603B1 (en) 2018-01-10
CN101133391A (zh) 2008-02-27
CN101133391B (zh) 2013-09-18
EP1856603A2 (en) 2007-11-21
KR101273036B1 (ko) 2013-06-10
KR20070100797A (ko) 2007-10-11
TW200636574A (en) 2006-10-16
US7613904B2 (en) 2009-11-03

Similar Documents

Publication Publication Date Title
KR101273036B1 (ko) 멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러
US7853777B2 (en) Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7752627B2 (en) Leaky-bucket thread scheduler in a multithreading microprocessor
US7664936B2 (en) Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7657891B2 (en) Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
JP5081143B2 (ja) マルチスレッド化されたプロセッサ内で低消費電力モードを自動的に呼び出すための装置及び方法
US8078840B2 (en) Thread instruction fetch based on prioritized selection from plural round-robin outputs for different thread states
US7657883B2 (en) Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7509447B2 (en) Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7660969B2 (en) Multithreading instruction scheduler employing thread group priorities
US7506140B2 (en) Return data selector employing barrel-incrementer-based round-robin apparatus
US7600135B2 (en) Apparatus and method for software specified power management performance using low power virtual threads

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090116

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110531

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110829

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110905

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111130

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120110