(57)【要約】  マルチスレッディングプロセッサで同時実行する複数のスレッド命令をディスパッチする分岐型命令スケジューラである。スケジューラはカスタマによりカスタマイズできない再使用可能コアの第１部分、カスタマイズ可能なコア外部の第２部分、第２部分をコアに結合するインタフェースを含む。第２部分はカスタマの特定アプリケーションに対してカスタマイズされてもよいスレッドスケジューリングポリシーを実施する。第１部分はスケジューリングポリシー不可知でよく、第２部分にて伝えられるスケジューリングポリシーに基づき各クロックサイクルでスレッド命令を実行ユニットに発行する。第２部分はスレッドのためのプライオリティを介してスケジューリングポリシーを伝える。コアが命令をコミットする場合、コミットされた命令がどのスレッドにあるのか第２部分に伝え、第２部分がプライオリティを更新できるようにする。
2008530655.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサで、命令をディスパッチするための分岐型スケジューラであって、
複数のスレッドの命令をプロセッサの少なくとも１つの実行ユニットに発行するように構成された第１スケジューラロジックと、
複数のスレッドのスケジューリングポリシーを実施するための第２スケジューラロジックと、
前記第２スケジューラロジックを、第１スケジューラロジックと前記少なくとも１つの実行ユニットとに結合するインタフェースとを含み、前記インターフェースは、
前記第１スケジューラロジックが前記第２スケジューラロジックから複数のスレッドの各々のためのプライオリティを受け取るための第１信号であって、前記第１スケジューラロジックが前記プライオリティに基づいて前記命令を前記少なくとも１つの実行ユニットに発行する第１信号と、
前記第２スケジューラロジックが複数のスレッドの各々のための命令実行情報を受け取るための第２信号であって、前記第２スケジューラロジックが前記命令実行情報に基づいて前記プライオリティを更新する第２信号とを含む、スケジューラ。
【請求項２】
前記第１スケジューラロジックが、各クロックサイクルで、前記プライオリティに基づいて前記命令を前記少なくとも１つの実行ユニットに発行するために、複数のスレッドのうちのどれかを選択する、請求項１に記載のスケジューラ。
【請求項３】
前記第１スケジューラロジックが、各クロックサイクルで、前記プライオリティに基づいて前記命令を前記少なくとも１つの実行ユニットに発行するために、複数のスレッドのうちの１つを選択する、請求項２に記載のスケジューラ。
【請求項４】
前記第１スケジューラロジックが、各クロックサイクルで、前記プライオリティに基づいて前記命令を前記少なくとも１つの実行ユニットに発行するために、複数のスレッドのうちの２つ以上を選択する、請求項２に記載のスケジューラ。
【請求項５】
前記インタフェースが、
前記第２スケジューラロジックが、前記第１スケジューラロジックから複数のスレッドの各々のためのステータス情報を受け取るための第３信号であって、前記第２スケジューラロジックが前記ステータス情報に基づいて前記プライオリティを更新する第３信号をさらに含む、請求項１に記載のスケジューラ。
【請求項６】
前記ステータス情報が、前記第１スケジューラロジックが複数のスレッドの各々のために命令を発行することからブロックされているかどうかを示す指標を含む、請求項５に記載のスケジューラ。
【請求項７】
複数のスレッドの各々の前記プライオリティが、複数の所定のプライオリティレベルのうちの１つを含む、請求項１に記載のスケジューラ。
【請求項８】
前記命令実行情報が、前記少なくとも１つの実行ユニットによって与えられる、複数のスレッドのうちの命令が実行のためにコミットされたものを示す指標を含む、請求項１に記載のスケジューラ。
【請求項９】
前記命令実行情報が、前記少なくとも１つの実行ユニットによって与えられる、複数のスレッドのうちの命令が完了されたものを示す指標を含む、請求項１に記載のスケジューラ。
【請求項１０】
前記命令実行情報が、前記第１スケジューラロジックによって与えられる、複数のスレッドのうちの命令が発行されたものを示す指標を含む、請求項１に記載のスケジューラ。
【請求項１１】
前記第１スケジューラロジックが、カスタマによる変更が不可能なものである、請求項１に記載のスケジューラ。
【請求項１２】
前記第２スケジューラロジックが、カスタマによる変更が可能なものである、請求項１に記載のスケジューラ。
【請求項１３】
複数のスレッドの各々が命令ストリームを含む、請求項１に記載のスケジューラ。
【請求項１４】
プロセッサが、
前記命令ストリームの実行の状態を記述するための、複数のスレッドの各々に関連したストレージ要素のセットをさらに含む、請求項１３に記載のスケジューラ。
【請求項１５】
ストレージ要素の前記セットの各々が、
プラグラムカウンタを含む、請求項１４に記載のスケジューラ。
【請求項１６】
ストレージ要素の前記セットの各々が、
汎用レジスタセットをさらに含む、請求項１５に記載のスケジューラ。
【請求項１７】
プロセッサがプロセッサコアを含み、前記プロセッサコアが前記第１スケジューラロジックを含み、前記第２スケジューラロジックを含まない、請求項１に記載のスケジューラ。
【請求項１８】
前記プロセッサコアが合成可能なものである、請求項１７に記載のスケジューラ。
【請求項１９】
前記プロセッサコアが、複数のカスタマのために再利用可能である、請求項１７に記載のスケジューラ。
【請求項２０】
前記第１スケジューラロジックが、そこから命令を発行するために、そのために発行可能命令がプロセッサによってフェッチされ、前記プライオリティによって特定される最も高いプライオリティを有する複数のスレッドのうちの少なくとも１つを選択するように構成されている、請求項１に記載のスケジューラ。
【請求項２１】
複数のスレッドの２つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティとを有する場合、前記第１スケジューラロジックが、ラウンドロビン方式で複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項２０に記載のスケジューラ。
【請求項２２】
複数のスレッドの前記フェッチされた発行可能命令のレジスタ依存性を検査するためのロジックをさらに含み、複数のスレッドの２つ以上が前記最も高いプライオリティを有する場合、前記第１スケジューラロジックが、前記レジスタ依存性に基づいて複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項２０に記載のスケジューラ。
【請求項２３】
複数のスレッドの２つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティと同じく前記レジスタ依存性とを有する場合、前記第１スケジューラロジックが、ラウンドロビン方式で複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項２２に記載のスケジューラ。
【請求項２４】
前記インタフェースが、
前記第２スケジューラロジックが複数のスレッドの各々のための前記第１スケジューラロジックに、スレッドのために命令を発行することをブロックするかどうかを伝えるための第３信号をさらに含む、請求項１に記載のスケジューラ。
【請求項２５】
前記インタフェースが、
前記第１スケジューラロジックから前記第２スケジューラロジックへのクロック信号をさらに含む、請求項１に記載のスケジューラ。
【請求項２６】
コンピュータプログラム製品が、スケジューラを生じるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータプログラム製品がコンピューティングデバイスとともに使用するためのものである、請求項１に記載のスケジューラ。
【請求項２７】
コンピュータ可読プログラムコードを含む伝送媒体の中で具体化されるコンピュータデータ信号がスケジューラを提供する、請求項１に記載のスケジューラ。
【請求項２８】
プロセッサによって同時に実行される複数のスレッドの命令ディスパッチをスケジューリングするためのポリシーを実施するように構成されたスレッドスケジューリングポリシーロジックと、
命令を実行するための少なくとも１つの実行パイプライン、および
前記スレッドスケジューリングポリシーロジックから受け取られた前記ポリシーに基づいて、前記実行パイプラインに前記複数のスレッドの命令をディスパッチするために結合された命令ディスパッチャを含む、前記スレッドスケジューリングポリシーロジックに結合されたプロセッサコアと、
前記スレッドスケジューリングポリシーロジックと前記プロセッサコアとを結合するためのインタフェースとを含み、前記インターフェースは、
前記ポリシーを実行するために、前記スレッドスケジューリングポリシーロジックが、前記命令ディスパッチャに複数のスレッドの各々のためのディスパッチプライオリティを伝えるためのプライオリティ指標、および
前記少なくとも１つの実行パイプラインが、前記複数のスレッドの各々のための前記スレッドスケジューリングポリシーロジックに、前記少なくとも１つの実行パイプラインがスレッドのための命令を実行するためにコミットされたかどうかを示す指標を伝えるための実行指標を含む、マルチスレッディングプロセッサ。
【請求項２９】
前記スレッドスケジューリングポリシーロジックが、前記プロセッサコアの物理的に外部にある、請求項２８に記載のプロセッサ。
【請求項３０】
前記スレッドスケジューリングポリシーロジックが、カスタマによる変更が可能なものであり、前記プロセッサコアが、カスタマによる変更が不可能なものである、請求項２８に記載のプロセッサ。
【請求項３１】
前記命令ディスパッチャが命令を発行するために、そのために発行可能命令がプロセッサによってフェッチされ、前記プライオリティによって特定される最も高いプライオリティを有する前記複数のスレッドのうちの少なくとも１つを選択するように構成されている、請求項２８に記載のプロセッサ。
【請求項３２】
複数のスレッドの２つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティとを有する場合、前記命令ディスパッチャが、ラウンドロビン方式で前記複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項３１に記載のプロセッサ。
【請求項３３】
前記複数のスレッドの前記フェッチされた発行可能命令のレジスタ依存性を検査するためのロジックをさらに含み、前記複数のスレッドの２つ以上が前記最も高いプライオリティを有する場合、前記命令ディスパッチャが、前記レジスタ依存性に基づいて前記複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項３１に記載のプロセッサ。
【請求項３４】
前記複数のスレッドの２つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティと同じく前記レジスタ依存性とを有する場合、前記命令ディスパッチャが、ラウンドロビン方式で前記複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項３３に記載のプロセッサ。
【請求項３５】
コンピュータプログラム製品が、プロセッサを生じるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータプログラム製品がコンピューティングデバイスとともに使用するためのものである、請求項２８に記載のプロセッサ。
【請求項３６】
コンピュータ可読プログラムコードを含む伝送媒体の中で具体化されるコンピュータデータ信号がプロセッサを提供する、請求項２８に記載のプロセッサ。
【請求項３７】
複数のスレッドを同時に実行するマルチスレッディングプロセッサのスレッドスケジューリングポリシーを実施するためのスレッドスケジューリングポリシーマネージャであって、
各プロセッサクロックサイクルで、複数のスレッドの各々のために命令が実行されたかどうかを示す指標を受け取るための入力と、
各プロセッサクロックサイクルで、複数のスレッドの各々のための命令ディスパッチプライオリティを送るための出力と、
スレッドスケジューリングポリシーを実施するために、前記入力に基づいて前記出力を生成するための、前記入力に結合されたロジックとを含む、ポリシーマネージャ。
【請求項３８】
命令が実行されたかどうかを示す前記指標が、前記命令が実行のためにディスパッチされたかどうかを示す、請求項３７に記載のポリシーマネージャ。
【請求項３９】
命令が実行されたかどうかを示す前記指標が、前記命令が実行のためにコミットされたかどうかを示す、請求項３７に記載のポリシーマネージャ。
【請求項４０】
命令が実行されたかどうかを示す前記指標が、前記命令の実行が完了したかどうかを示す、請求項３７に記載のポリシーマネージャ。
【請求項４１】
複数のスレッドの各々の前記プライオリティが、複数の所定のプライオリティレベルのうちの１つを含む、請求項３７に記載のポリシーマネージャ。
【請求項４２】
各プロセッサクロックサイクルで、複数のスレッドの各々のために命令を発行することをブロックするかどうかを示す指標を送るための第２出力をさらに含む、請求項３７に記載のポリシーマネージャ。
【請求項４３】
各プロセッサクロックサイクルで、前記スレッドがそこから命令を発行させることから現在ブロックされているかどうかを示す、複数のスレッドの各々についての状態を受け取るための第２入力さらに含み、
前記ロジックが、前記第１および第２入力に基づいて、スレッドスケジューリングポリシーを実施するために前記出力を生成するようにさらに構成されている、請求項３７に記載のポリシーマネージャ。
【請求項４４】
複数のスレッドの各々の前記プライオリティが、複数の所定のプライオリティレベルのうちの１つを含む、請求項３７に記載のポリシーマネージャ。
【請求項４５】
コンピュータプログラム製品が、ポリシーマネージャを生じるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータプログラム製品がコンピューティングデバイスとともに使用するためのものである、請求項３７に記載のポリシーマネージャ。
【請求項４６】
コンピュータ可読プログラムコードを含む伝送媒体の中で具体化されるコンピュータデータ信号がポリシーマネージャを提供する、請求項３７に記載のポリシーマネージャ。
【請求項４７】
複数のスレッドの各々が命令のストリームを含む、複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサコアであって、
スレッドスケジューリングポリシーロジックが複数のスレッドの各々のプライオリティをプロセッサコアに伝えるための第１信号、および
スレッドスケジューリングポリシーロジックが、前記プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるためのスレッドの命令の実行に関する複数のスレッドの各々についての情報を、プロセッサコアから受け取るための第２信号を含む、プロセッサコアをプロセッサコアの外部にあるスレッドスケジューリングポリシーロジックに結合するためのインタフェースと、
前記第１信号を受け取り、前記第１信号で受け取られた前記プライオリティに基づいて、実行のために発行するために、複数のスレッドのうちの少なくとも１つから少なくとも１つの命令を選択するために結合されたスケジューラとを含む、プロセッサコア。
【請求項４８】
前記スケジューラが、プロセッサコアの各クロックサイクルで、前記少なくとも１つの命令を選択するように構成されている、請求項４７に記載のプロセッサコア。
【請求項４９】
前記情報が、プロセッサコアが複数のスレッドのうちの特定された１つの命令を実行のためにコミットしたことを示す指標を含む、請求項４７に記載のプロセッサコア。
【請求項５０】
前記命令がプロセッサからフラッシュされないことを保証される場合、プロセッサコアが実行のために前記命令をコミットしている、請求項４９に記載のプロセッサコア。
【請求項５１】
前記命令がプロセッサによって完了されたことを保証される場合、プロセッサコアが実行のために前記命令をコミットしている、請求項４９に記載のプロセッサコア。
【請求項５２】
前記情報が、プロセッサコアが複数のスレッドのうちの特定された１つの命令を完了したことを示す指標を含む、請求項４７に記載のプロセッサコア。
【請求項５３】
前記情報が、プロセッサコアが複数のスレッドのうちの特定された１つの命令を実行のために発行したことを示す指標を含む、請求項４７に記載のプロセッサコア。
【請求項５４】
前記インタフェースが、
スレッドスケジューリングポリシーロジックが、前記プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるための複数のスレッドの各々の状態を特定する状態情報を、プロセッサコアから受け取るための第３信号をさらに含む、請求項４７に記載のプロセッサコア。
【請求項５５】
前記状態情報が、複数のスレッドの各々が実行のためにスレッドから命令を発行することが前記スケジューラに対してブロックされているのかどうかを示す指標を含む、請求項５４に記載のプロセッサコア。
【請求項５６】
前記インタフェースが、
スレッドスケジューリングポリシーロジックが、複数のスレッドの各々のための前記スケジューラに、スレッドのために命令を発行することをブロックするかどうかを伝えるための第３信号をさらに含む、請求項４７に記載のプロセッサコア。
【請求項５７】
前記スケジューラが、前記実行パイプラインが効率的なものになるように、プロセッサコアの実行パイプラインを命令でいっぱいにしておくことを試みるために、複数のスレッドのうちの前記少なくとも１つから前記少なくとも１つの命令を選択するように構成されている、請求項４７に記載のプロセッサコア。
【請求項５８】
前記スケジューラが、そのために発行可能命令がプロセッサによってフェッチされ、前記プライオリティによって特定される最も高いプライオリティを有する複数のスレッドのうちの前記少なくとも１つを選択するように構成されている、請求項４７に記載のプロセッサコア。
【請求項５９】
複数のスレッドの２つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティとを有する場合、前記スケジューラが、ラウンドロビン方式で複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項５８に記載のプロセッサコア。
【請求項６０】
複数のスレッドの前記フェッチされた発行可能命令のレジスタ依存性を検査するためのロジックをさらに含み、複数のスレッドの２つ以上が前記最も高いプライオリティを有する場合、前記スケジューラが、前記レジスタ依存性に基づいて複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項５８に記載のプロセッサコア。
【請求項６１】
複数のスレッドの２つ以上が前記フェッチされた発行可能命令と前記最も高いプライオリティと同じく前記レジスタ依存性とを有する場合、前記スケジューラがラウンドロビン方式で複数のスレッドの前記２つ以上のうちの１つを選択するように構成されている、請求項６０に記載のプロセッサ。
【請求項６２】
複数のスレッドの各々の前記プライオリティが、複数の所定のプライオリティレベルのうちの１つを含む、請求項４７に記載のプロセッサコア。
【請求項６３】
前記プロセッサコアが、再使用可能でありカスタマによる変更が不可能なコアを含む、請求項４７に記載のプロセッサコア。
【請求項６４】
前記スレッドスケジューリングポリシーロジックが、カスタマによる変更が可能なロジックを含む、請求項４７に記載のプロセッサコア。
【請求項６５】
前記プロセッサコアが合成可能なものである、請求項４７に記載のプロセッサコア。
【請求項６６】
前記インタフェースが、
前記スケジューラから前記スレッドスケジューリングポリシーロジックへのクロック信号をさらに含む、請求項４７に記載のプロセッサコア。
【請求項６７】
コンピュータプログラム製品が、プロセッサコアを生じるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータプログラム製品がコンピューティングデバイスとともに使用するためのものである、請求項４７に記載のプロセッサコア。
【請求項６８】
コンピュータ可読プログラムコードを含む伝送媒体の中で具体化されるコンピュータデータ信号がプロセッサコアを提供する、請求項４７に記載のプロセッサコア。
【請求項６９】
マルチスレッディングプロセッサの中で複数の同時実行スレッドをスケジューリングするための方法であって、
第１クロックサイクルの間に、スレッドスケジューリングポリシーロジックによって、命令ディスパッチロジックに複数のスレッドの各々のためのスレッドスケジューリングプライオリティを送るステップと、
前記プライオリティを送るステップに応答して、第２クロックサイクルの間に、命令ディスパッチロジックによって、実行のための複数のスレッドから少なくとも１つの命令をディスパッチするステップとを含む、方法。
【請求項７０】
第１クロックサイクルの後の第３クロックサイクルの間に、実行ロジックによって、スレッドスケジューリングポリシーロジックに、実行ロジックが複数のスレッドの各々のための命令を実行したかどうかを示す指標を送るステップをさらに含む、請求項６９に記載の方法。
【請求項７１】
前記指標が、前記実行ロジックが実行のために命令をコミットしたかどうかを示す、請求項７０に記載の方法。
【請求項７２】
前記指標が、前記命令が実行のために実行ロジックにディスパッチされたかどうかを示す、請求項７０に記載の方法。
【請求項７３】
指標が、命令の実行が完了されたかどうかを示す、請求項７０に記載の方法。
【請求項７４】
実行ロジックによってスレッドスケジューリングポリシーロジックに指標を送る前記ステップに応答して、第４クロックサイクルの間に、スレッドスケジューリングポリシーロジックによって、命令ディスパッチロジックに複数のスレッドの各々のための第２スレッドスケジューリングプライオリティを送るステップをさらに含む、請求項７０に記載の方法。
【請求項７５】
前記第１クロックサイクルの前に、命令ディスパッチロジックによって、スレッドスケジューリングポリシーロジックに複数のスレッドの各々についての状態を送るステップと、
命令ディスパッチロジックによってスレッドスケジューリングポリシーロジックに複数のスレッドの各々の状態を送る前記ステップに応答して、第１クロックサイクルの間に、スレッドスケジューリングポリシーロジックによって、命令ディスパッチロジックに複数のスレッドの各々のためのスレッドスケジューリングプライオリティを送る前記ステップとをさらに含む、請求項６９に記載の方法。
【請求項７６】
スレッドスケジューリングポリシーロジックによって、命令ディスパッチロジックに、スレッドのために命令をディスパッチすることをブロックするかどうかを示す複数のスレッドの各々のための指標を送るステップと、
命令をディスパッチすることをブロックするために、スレッドスケジューリングポリシーロジックによって送られた複数のスレッドの各々からの命令を、命令ディスパッチロジックによってディスパッチする前記ステップを停止するステップとをさらに含む、請求項６９に記載の方法。
【請求項７７】
スレッドスケジューリングポリシーロジックがカスタマによってカスタマイズされ、命令ディスパッチロジックが複数のカスタマのために再使用可能である、請求項６９に記載の方法。
【請求項７８】
スレッドスケジューリングポリシーロジックがプロセッサのコアの外部にあり、命令ディスパッチロジックがコアの内部にある、請求項６９に記載の方法。
【請求項７９】
コンピューティングデバイスとともに使用するためのコンピュータプログラム製品であって、
複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチするための分岐型スケジューラを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータ可読プログラムコードが、
複数のスレッドの命令をプロセッサの少なくとも１つの実行ユニットに発行するように構成された第１スケジューラロジックを提供するための第１プログラムコードと、
複数のスレッドのスケジューリングポリシーを実施するための第２スケジューラロジックを提供するための第２プログラムコードと、
前記第２スケジューラロジックを第１スケジューラロジックと前記少なくとも１つの実行ユニットとに結合するインタフェースを提供するための第３プログラムコードとを含み、前記インタフェースが
前記第１スケジューラロジックが、前記第２スケジューラロジックから複数のスレッドの各々のためのプライオリティを受け取るための第１信号であって、前記第１スケジューラロジックが前記プライオリティに基づいて、前記命令を前記少なくとも１つの実行ユニットに発行する第１信号、および
前記第２スケジューラロジックが、複数のスレッドの各々のための命令実行情報を受け取るための第２信号であって、前記第２スケジューラロジックが前記命令実行情報に基づいて前記プライオリティを更新する第２信号を含む、コンピュータプログラム製品。
【請求項８０】
前記コンピュータ可読プログラムコードが、
前記第２スケジューラロジックが前記第１スケジューラロジックから複数のスレッドの各々のについてのステータス情報を受け取るための第３信号を提供するための第４プログラムコードをさらに含み、前記第２スケジューラロジックが前記ステータス情報に基づいて前記プライオリティを更新する、請求項７９に記載のコンピュータプログラム製品。
【請求項８１】
コンピューティングデバイスとともに使用するためのコンピュータプログラム製品であって、
マルチスレッディングプロセッサを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータ可読プログラムコードが、
プロセッサによって同時に実行される複数のスレッドの命令ディスパッチのスケジューリングのためのポリシーを実施するように構成されたスレッドスケジューリングポリシーロジックを提供するための第１プログラムコードと、
命令を実行するための少なくとも１つの実行パイプライン、および
前記スレッドスケジューリングポリシーロジックから受け取られた前記ポリシーに基づいて、前記複数のスレッドの命令を前記実行パイプラインにディスパッチするために結合された命令ディスパッチャを含む、前記スレッドスケジューリングポリシーロジックに結合されたプロセッサコアを提供するための第２プログラムコードと、
前記スレッドスケジューリングポリシーロジックと前記プロセッサコアとを結合するためのインタフェースとを含み、前記インターフェースが、
前記スレッドスケジューリングポリシーロジックが、前記ポリシーを実施するために複数のスレッドの各々のためのディスパッチプライオリティを前記命令ディスパッチャに伝えるためのプライオリティ指標、および
前記少なくとも１つの実行パイプラインが、前記少なくとも１つの実行パイプラインがスレッドのために命令の実行をコミットしたかどうかを示す指標を、前記複数のスレッドの各々のための前記スレッドスケジューリングポリシーロジックに伝えるための実行指標を含む、コンピュータプログラム製品。
【請求項８２】
前記コンピュータ可読プログラムコードが、
前記命令ディスパッチャを提供するための第４プログラムコードをさらに含み、前記命令ディスパッチャが、そのために発行可能命令がプロセッサによってフェッチされ、前記プライオリティによって特定される最も高いプライオリティを有する前記複数のスレッドのうちの少なくとも１つを、命令を発行するために選択するように構成されている、請求項８１に記載のコンピュータプログラム製品。
【請求項８３】
コンピューティングデバイスとともに使用するためのコンピュータプログラム製品であって、
複数のスレッドを同時に実行するマルチスレッディングプロセッサのスレッドスケジューリングポリシーを実施するためのスレッドスケジューリングポリシーマネージャを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータ可読プログラムコードが、
各プロセッサクロックサイクルで、複数のスレッドの各々のために命令が実行されたかどうかを示す指標を受け取るための入力を提供するための第１プログラムコードと、
各プロセッサクロックサイクルで、複数のスレッドの各々のための命令ディスパッチプライオリティを送るための出力を提供するための第２プログラムコードと、
スレッドスケジューリングポリシーを実施するために前記入力に基づいて前記出力を生成するために、前記入力に結合されたロジックを提供するための第３プログラムコードとを含む、コンピュータプログラム製品。
【請求項８４】
前記コンピュータ可読プログラムコードが、
前記ロジックを提供するための第４プログラムコードをさらに含み、複数のスレッドの各々の前記プライオリティが複数の所定のプライオリティレベルのうちの１つを含む、請求項８３に記載のコンピュータプログラム製品。
【請求項８５】
コンピューティングデバイスとともに使用するためのコンピュータプログラム製品であって、
複数のスレッドの各々が命令のストリームを含む、複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサコアを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含み、前記コンピュータ可読プログラムコードが、
プロセッサコアをプロセッサコアの外部にあるスレッドスケジューリングポリシーロジックに結合するためのインタフェースを提供するための第１プログラムコードであって、前記インタフェースが
スレッドスケジューリングポリシーロジックが複数のスレッドの各々のプライオリティをプロセッサコアに伝えるための第１信号、および
スレッドスケジューリングポリシーロジックが、前記プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるためのスレッドの命令の実行に関する複数のスレッドの各々のための情報を、プロセッサコアから受け取るための第２信号とを含む第１プログラムコードと、
前記第１信号を受け取り、前記第１信号で受け取られた前記プライオリティに基づいて、実行のために発行するために、複数のスレッドのうちの少なくとも１つから少なくとも１つの命令を選択するために結合されたスケジューラを提供するための第２プログラムコードとを含む、コンピュータプログラム製品。
【請求項８６】
前記コンピュータ可読プログラムコードが、前記インタフェースを提供するための第３プログラムコードをさらに含み、前記情報が、プロセッサコアが複数のスレッドのうちの特定された１つの命令を実行のためにコミットしたことを示す指標を含む、請求項８５に記載のコンピュータプログラム製品。
【請求項８７】
伝送媒体の中で具体化されるコンピュータデータ信号であって、
複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチするための分岐型スケジューラを提供するためのコンピュータ可読プログラムコードを含み、前記コンピュータ可読プログラムコードが、
プロセッサの少なくとも１つの実行ユニットに複数のスレッドの命令を発行するように構成された第１スケジューラロジックを提供するための第１プログラムコードと、
複数のスレッドのスケジューリングポリシーを実施するための第２スケジューラロジックを提供するための第２プログラムコードと、
前記第２スケジューラロジックを第１スケジューラロジックと前記少なくとも１つの実行ユニットとに結合するインタフェースを提供するための第３プログラムコードを含み、前記インタフェースが、
前記第１スケジューラロジックが前記第２スケジューラロジックから複数のスレッドの各々のためのプライオリティを受け取るための第１信号であって、前記第１スケジューラロジックが、前記プライオリティに基づいて前記命令を前記少なくとも１つの実行ユニットに発行する第１信号、および
前記第２スケジューラロジックが複数のスレッドの各々のための命令実行情報を受け取るための第２信号であって、前記第２スケジューラロジックが、前記命令実行情報に基づいて前記プライオリティを更新する第２信号を含む、コンピュータデータ信号。
【請求項８８】
前記コンピュータ可読プログラムコードが、
前記第２スケジューラロジックが、前記第１スケジューラロジックから複数のスレッドの各々についてのステータス情報を受け取るための第３信号を提供するための第４プログラムコードをさらに含み、前記第２スケジューラロジックが、前記ステータス情報に基づいて前記プライオリティを更新する、請求項８７に記載のコンピュータデータ信号。
【請求項８９】
プロセッサコアによる複数のスレッドの同時ディスパッチをスケジューリングするためのポリシーをポリシーロジックが実施することを可能にするための、プロセッサコアとスレッドスケジューリングポリシーロジックとの間のインタフェースであって、
スレッドスケジューリングポリシーロジックが、複数のスレッドの各々のためのディスパッチプライオリティをプロセッサコアの命令ディスパッチャに伝えるためのプライオリティ指標と、
プロセッサコアの実行パイプラインが、実行パイプラインがスレッドのための命令を実行したかどうかを示す指標を、複数のスレッドの各々のためのスレッドスケジューリングポリシーロジックに伝えるためのフィードバック指標とを含む、インタフェース。
【請求項９０】
前記フィードバック指標が、実行パイプラインがスレッドのための命令を実行したかどうかではなく、ディスパッチャがスレッドのための命令をディスパッチしたかどうかを示す指標を伝える、請求項８９に記載のインタフェース。
【請求項９１】
プロセッサコアがクロック信号をスレッドスケジューリングポリシーロジックに伝えるためのクロック指標をさらに含む、請求項８９に記載のインタフェース。
【請求項９２】
プロセッサコアが、複数のスレッドの各々についてのステータスをスレッドスケジューリングポリシーロジックに伝えるためのステータス指標をさらに含む、請求項８９に記載のインタフェース。
【請求項９３】
前記ステータス指標が、スレッドが命令ディスパッチのために現在ブロックされているかどうかを示す、請求項９２に記載のインタフェース。
【請求項９４】
スレッドスケジューリングポリシーロジックが、複数のスレッドの各々のために命令をディスパッチすることを停止するためのコマンドをプロセッサコアに伝えるためのブロッキング指標をさらに含む、請求項８９に記載のインタフェース。
【請求項９５】
プロセッサコアが複数の仮想処理要素を含み、インタフェースが、
プロセッサコアが前記仮想処理要素の各々についてのステータスをスレッドスケジューリングポリシーロジックに伝えるためのステータス指標をさらに含む、請求項８９に記載のインタフェース。
【請求項９６】
プロセッサコアが、スレッドスケジューリングポリシーロジックにプロセッサコアが新たなスレッドを作成したことを伝えるための分岐指標をさらに含む、請求項８９に記載のインタフェース。
【請求項９７】
前記フィードバック指標が、複数のスレッドのうちのどれが前記新たなスレッドを作成したのかを示す、請求項９６に記載のインタフェース。
【請求項９８】
プロセッサコアがスレッドスケジューリングポリシーロジックの制御／ステータスレジスタの読み取りおよび書き込みを行うための制御信号をさらに含む、請求項８９に記載のインタフェース。
【請求項９９】
前記制御／ステータスレジスタが、ＭＩＰＳ特権リソースアーキテクチャ（ＰＲＡ）とＭＩＰＳマルチスレッディング特定用途向け拡張機能（ＭＴ  ＡＳＥ）とによって定義されるコプロセッサ０レジスタを含む、請求項９８に記載のインタフェース。
【請求項１００】
前記プライオリティ指標が、除外処理スレッドのためのディスパッチプライオリティを伝える、請求項８９に記載のインタフェース。
【請求項１０１】
前記プライオリティ指標がリラックススレッドのためのディスパッチプライオリティを伝え、前記リラックススレッドが、スレッドスケジューリングポリシーロジックが実行パイプラインの実行帯域幅のすべてを利用しないことによって電力消費を節約するために、プロセッサコアと通信できるようにするための実在しない仮想スレッドである、請求項８９に記載のインタフェース。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、各々があらゆる目的のためにその全体が参照として本明細書に組み込まれる以下の非仮出願の米国特許出願に関し、それらとともに出願される。
【表１】
2008530655.tif 000003
【０００２】
本発明は一般にマルチスレッドプロセッサの分野に関し、詳細には複数の実行スレッドの中での命令発行スケジューリングに関する。
【背景技術】
【０００３】
マイクロプロセッサの設計者は、マイクロプロセッサの性能を高めるために多くの技術を用いる。ほとんどのマイクロプロセッサは、固定された周波数で動くクロック信号を使用して動作する。各クロックサイクルで、マイクロプロセッサの回路はそれらの各々の機能を実行する。ＨｅｎｎｅｓｓｙとＰａｔｔｅｒｓｏｎによれば（「Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ」、Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ、第３版参照）、マイクロプロセッサの性能の真の尺度は、プログラムまたはプログラムの集合を実行するために必要とされる時間である。この観点から、マイクロプロセッサの性能はそのクロック周波数の機能、命令を実行するために必要とされるクロックサイクルの平均数（または代替的に述べると、クロックサイクル当たりの実行される命令の平均数）、およびプログラムまたはプログラムの集合の中で実行される命令の数である。半導体の科学者および技術者は継続的に、主にトランジスタのサイズを減らすことによって、マイクロプロセッサがより速いクロック周波数で動くことができるようにしており、その結果、切り替え時間はより速くなる。実行される命令の数は、プログラムによって実行されるべきタスクによって大部分が固定されているが、マイクロプロセッサの命令セットのアーキテクチャによっても影響を受ける。大幅な性能の増強は、クロックサイクル当たりの命令を向上させる構造的および組織的概念、特には並列処理の概念によって実現されてきた。
【０００４】
マイクロプロセッサのクロック周波数とともに、クロックサイクル当たりの命令を向上させた並列処理の１つの概念は、マイクロプロセッサのパイプライン段階の中で複数の命令の実行を重複するパイプライニングである。理想的な状況では、各クロックサイクルで、１つの命令は、命令の異なる機能を実行する新たな段階にパイプラインを下げる。したがって、個別の命令の複数のサイクルが重複するために、各々の個別の命令は複数のクロックサイクルを完了させるが、命令当たりのクロックの平均は減少される。パイプライニングの性能の向上は、プログラム内の命令が許す程度まで、すなわち命令が実行するためにその先行値に依存することがなく、したがってその先行値と並行して実行することができる程度まで実現される可能性があり、このことは一般に命令レベルの並列処理と呼ばれる。現代のマイクロプロセッサによって命令レベルの並列処理が活用される別の方法は、クロックサイクル当たりの実行のために複数の命令を発行するものである。これらのマイクロプロセッサは一般に、スーパースカラマイクロプロセッサと呼ばれる。
【０００５】
上述のものは、個別の命令レベルでの並列処理に関連している。しかしながら、命令レベルの並列処理の活用を通じて達成されることができる性能の向上は制限されている。制限された命令レベルの並列処理、およびその他の性能を制約する問題によって課せられる様々な制約は、一般にスレッドレベルの並列処理と呼ばれる命令のブロックまたはシーケンスまたはストリームのレベルでの並列処理を活用することの利点を最近一新している。スレッドとは単に、プログラム命令のシーケンスまたはストリームのことである。マルチスレッド型マイクロプロセッサは、例えばインタリーブ化されたスレッド、ブロック化されたスレッドなどの様々なスレッド、または同時マルチスレッディングの命令のフェッチおよび発行を命じる何らかのスケジューリングポリシーによって、複数のスレッドを同時に実行する。マルチスレッド型マイクロプロセッサは典型的に、同時に行われる方法で、複数のスレッドがマイクロプロセッサの機能ユニット（例えば命令のフェッチおよびデコードユニット、キャッシュ、分岐予測ユニット、およびロード／ストア、整数、浮動小数点、ＳＩＭＤ等の実行ユニット）を共有することを可能にする。しかしながらマルチスレッド型マイクロプロセッサは、命令をフェッチして、発行するためにスレッド間で迅速に切り替えを行う能力を促進するように、多重プログラムカウンタおよび汎用レジスタセットなどの各々のスレッドの固有の状態をストアするためにリソースまたはコンテキストの複数のセットを含む。
【０００６】
マルチスレッディングマイクロプロセッサによって対処される性能を制約する問題の１つの例は、キャッシュミスのために行われなければならないマイクロプロセッサの外部のメモリへのアクセスには典型的に比較的長い待ち時間があるということである。現代のマイクロプロセッサベースのコンピュータシステムのメモリのアクセス時間は、キャッシュヒットのアクセス時間よりも１桁から２桁大きいことが一般的である。キャッシュ中のデータのミスに依存する命令は、メモリからデータがやって来るのを待つパイプラインにストールされる。結果的に、シングルスレッド型マイクロプロセッサのパイプライン段階の一部またはすべては、多くのクロックサイクルの間に有用な作業を何も行わないアイドル状態である場合がある。マルチスレッド型マイクロプロセッサは、メモリのフェッチの待ち時間の間に別のスレッドから命令を発行することによって、この問題を解決することが可能であり、それによって、ページフォルトでタスクの切り替えを行うオペレーティングシステムに幾分類似しているが、それよりもより高いレベルのグラニュラリティで有用な作業を行うように、パイプライン段階を前進させることができる。マルチスレッディングマイクロプロセッサによって対処される性能を制約する問題の別の例は、分岐の誤予測およびそれに付随して起こるパイプラインフラッシュのため、またはデータの依存性のため、または除算命令、浮動小数点命令などの待ち時間の長い命令のため、またはその他のためのパイプラインストールおよびそれらに付随するアイドルサイクルである。ここでもまた、別のスレッドから、その他の場合では（ｏｔｈｅｒｗｉｓｅ）アイドルであるパイプライン段階に命令を発行するマルチスレッド型マイクロプロセッサの能力は、スレッドを含むプログラムまたはプログラムの集合を実行するために必要とされる時間を大幅に減少させることができる。
【０００７】
上述のものから認められることができるように、複数のスレッドを同時に実行するプロセッサは、複数のスレッドを含むプログラムまたはプログラムの集合を実行するために必要とされる時間を減少させることができる。しかしながら、単一スレッド型プロセッサを超えてマルチスレッディングプロセッサが実現することができる性能の増強の程度は、プロセッサのスケジューリングポリシーに、すなわちプロセッサが実行のための命令を発行するために、様々なスレッドをどのようにスケジュールするのかということに大きく依存している場合がある。さらに適切なスレッドのスケジューリングポリシーは、プロセッサが使用される特定のアプリケーションに大きく依存している場合がある。例えばマルチスレッディングプロセッサは、ネットワークのスイッチまたはルータなどのリアルタイムの埋め込み型システム、ＲＡＩＤコントローラ、プリンタ、スキャナ、ハンドへルドデバイス、デジタルカメラ、自動車、セットトップボックス、電気機器等、科学的コンピューティング、トランザクション処理、サーバコンピューティング、および汎用コンピューティングを含む様々なアプリケーションの中で用いられる可能性がある。これらのアプリケーションの各々は、マルチスレッディングプロセッサの性能を最適化するために、異なるスケジューリングポリシーを必要とする場合がある。その結果、様々なアプリケーションを用いるカスタマが、スレッドのスケジューリングポリシーをカスタマイズするための能力を、それらの特定の要件に合わせることができるようにすることが非常に望ましい。カスタマイズ可能なスレッドスケジューラは、様々なカスタマのアプリケーションの必要性に合わせるためにカスタマイズ可能な、マイクロプロセッサおよび／またはシステムの一部であってもよいマルチスレッディングマイクロプロセッサコアを設計しようとする場合に特に望ましい。このことは、マルチスレッディングのコアを様々な設計のために再使用可能のものとし、各アプリケーションのためにプロセッサ全体を再設計しなければならないことを回避するので、非常に望ましいものである。
【０００８】
しかしながらスレッドスケジューリング回路は、典型的にマイクロプロセッサの内部のパイプライン動作に緊密に結び付けられており、望ましくない副作用を有するかもしれないので、マイクロプロセッサの全体のスレッドスケジューリング回路をカスタマイズ可能なものにすることには問題がある。例えば、カスタマがパイプラインの内部の作用を理解することは難しい場合があり、したがってカスタマがスケジューラをカスタマイズすることは難しい。さらに、タイミングが重要な内部パイプラインの信号経路は必然的にカスタマに露出されており、カスタマのカスタムロジックがあまりにも遅い場合、マイクロプロセッサの全体のクロックスピードを低下させるかもしれない。最終的にカスタマは、場合によってはマイクロプロセッサコアの全体の動作および機能に重大な影響を与えることもあるバグを、スケジューラに持ち込むかもしれない。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
したがって、上述のような、スレッドスケジューリングポリシーを望ましくない副作用を伴わずにカスタマイズ可能なものにすることができるアーキテクチャを備えたマルチスレッディングプロセッサが必要とされる。
【課題を解決するための手段】
【００１０】
本発明は分岐型スケジューラアーキテクチャを提供する。このスケジューラの一部分はカスタマのアプリケーションによって必要とされるスレッドスケジューリングポリシーを実施し、プロセッサコアの外部に含まれているので、プロセッサコアの適切な動作および再使用を危険にさらすことなく、カスタマによって安全に変更されることが可能である。このスケジューラの第２の部分は、非コア部分によって実施されるスレッドスケジューリングポリシーに基づいてサイクル毎の命令ディスパッチングを実行し、プロセッサコア内に含まれているので、カスタマによって変更されることが不可能である。第１部分とコアとの間のインタフェースは、第１部分が各スレッドについてのスケジューリングプライオリティを第２部分に伝えることを可能にし、コアが命令実行情報を第１部分に伝えることを可能にするので、第１部分はそのスレッドスケジューリングポリシーを達成するためにプライオリティを更新することができる。
【００１１】
１つの態様で、本発明は複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチするための分岐型スケジューラを提供する。このスケジューラは、プロセッサの少なくとも１つの実行ユニットに複数のスレッドの命令を発行する第１スケジューラロジックを含む。このスケジューラは、複数のスレッドのスケジューリングポリシーを実施する第２スケジューラロジックも含む。このスケジューラはまた、第２スケジューラロジックを第１スケジューラロジックと少なくとも１つの実行ユニットに結び付けるインタフェースも含む。このインタフェースは、第１スケジューラロジックが複数のスレッドの各々のためのプライオリティを第２スケジューラロジックから受け取るための第１信号を含む。第１スケジューラロジックは、プライオリティに基づいて、少なくとも１つの実行ユニットに命令を発行する。このインタフェースはまた、第２スケジューラロジックが複数のスレッドの各々についての命令実行情報を受け取るための第２信号も含む。第２スケジューラロジックは、命令実行情報に基づいてプライオリティを更新する。
【００１２】
別の態様で、本発明はマルチスレッディングプロセッサを提供する。このプロセッサは、プロセッサによって同時に実行される複数のスレッドの命令ディスパッチをスケジューリングするためのポリシーを実施するスレッドスケジューリングポリシーロジックを含む。このプロセッサはまた、スレッドスケジューリングポリシーロジックに結合されたプロセッサコアも含む。このプロセッサコアは、命令を実行する少なくとも１つの実行パイプラインを含む。このプロセッサコアは、スレッドスケジューリングポリシーロジックから受け取ったポリシーに基づいて、複数のスレッドの命令を実行パイプラインにディスパッチするために結合された命令ディスパッチャも含む。このプロセッサはまた、スレッドスケジューリングポリシーロジックとプロセッサコアとを結合するためのインタフェースも含む。このインタフェースは、スレッドスケジューリングポリシーロジックが、ポリシーを実施するために複数のスレッドの各々のためのディスパッチプライオリティを命令ディスパッチャに伝えるためのプライオリティ指標を含む。このインタフェースはまた、少なくとも１つの実行パイプラインが、スレッドのための命令の実行を少なくとも１つの実行パイプラインがコミットしているのかどうかを示す指標を、複数のスレッドの各々のためのスレッドスケジューリングポリシーロジックに伝える実行指標も含む。
【００１３】
別の態様で、本発明は複数のスレッドを同時に実行するマルチスレッディングプロセッサのスレッドスケジューリングポリシーを実施するためのスレッドスケジューリングポリシーマネージャを提供する。このポリシーマネージャは、各プロセッサのクロックサイクルで、複数のスレッドの各々のための命令が実行されたかどうかを示す指標を受け取るための入力を含む。このポリシーマネージャは、各プロセッサのクロックサイクルで、複数のスレッドの各々のための命令ディスパッチプライオリティを送るための出力も含む。このポリシーマネージャはまた、スレッドスケジューリングポリシーを実施するために入力に基づいて出力を生成する、入力に結合されたロジックも含む。
【００１４】
別の態様で、本発明は複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサコアを提供する。複数のスレッドの各々は命令のストリームを含む。このプロセッサコアは、プロセッサコアの外部のスレッドスケジューリングポリシーロジックにプロセッサコアを結合するためのインタフェースを含む。このインタフェースは、スレッドスケジューリングポリシーロジックが複数のスレッドの各々のプライオリティをプロセッサコアに伝えるための第１信号を含む。このインタフェースはまた、スレッドスケジューリングポリシーロジックが、プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるためのスレッドの命令の実行に関する複数のスレッドの各々についての情報を、プロセッサコアから受け取るための第２信号も含む。このプロセッサコアはまた第１信号を受け取り、第１信号で受け取られたプライオリティに基づいて、発行するための複数のスレッドのうちの少なくとも１つから、実行のために少なくとも１つの命令を選択するように結合されたスケジューラも含む。
【００１５】
別の態様で、本発明はマルチスレッディングプロセッサ内で複数の同時実行スレッドをスケジューリングするための方法を提供する。この方法は、第１クロックサイクルの間に、複数のスレッドの各々のためのスレッドスケジューリングプライオリティを命令ディスパッチロジックに送るスレッドスケジューリングポリシーロジックを含む。この方法はまた、第２クロックサイクルの間に、命令ディスパッチロジックにプライオリティを送るスレッドスケジューリングポリシーロジックに応答して、実行のために複数のスレッドから少なくとも１つの命令をディスパッチする命令ディスパッチロジックも含む。
【００１６】
別の態様で、本発明はコンピューティングデバイスとともに使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチするための分岐型スケジューラを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含む。このコンピュータ可読プログラムコードは、複数のスレッドの命令を発行する第１スケジューラロジックをプロセッサの少なくとも１つの実行ユニットに提供するための第１プログラムコードを含む。このコンピュータ可読プログラムコードは、複数のスレッドのスケジューリングポリシーを実施するための第２スケジューラロジックを提供する第２プログラムコードも含む。このコンピュータ可読プログラムコードはまた、第２スケジューラロジックを第１スケジューラロジックおよび少なくとも１つの実行ユニットに結合するインタフェースを提供するための第３プログラムコードも含む。このインタフェースは、第１スケジューラロジックが複数のスレッドの各々についてのプライオリティを第２スケジューラロジックから受け取るための第１信号を含む。第１スケジューラロジックは、プライオリティに基づいて、少なくとも１つの実行ユニットに命令を発行する。このインタフェースはまた、第２スケジューラロジックが複数のスレッドの各々についての命令実行情報を受け取るための第２信号も含む。第２スケジューラロジックは、命令実行情報に基づいてプライオリティを更新する。
【００１７】
別の態様で、本発明はコンピューティングデバイスとともに使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、マルチスレッディングプロセッサを生じるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含む。このコンピュータ可読プログラムコードは、プロセッサによって同時に実行される複数のスレッド命令ディスパッチをスケジューリングするためのポリシーを実施するスレッドスケジューリングポリシーロジックを提供するための第１プログラムコードを含む。このコンピュータ可読プログラムコードは、スレッドスケジューリングポリシーロジックに結合されたプロセッサコアを提供するための第２プログラムコードも含む。このプロセッサコアは、命令を実行する少なくとも１つの実行パイプラインを含む。このプロセッサコアはまた、スレッドスケジューリングポリシーロジックから受け取られたポリシーに基づいて、複数のスレッドの命令を実行パイプラインにディスパッチするために結合された命令ディスパッチャも含む。このコンピュータ可読プログラムコードはまた、スレッドスケジューリングポリシーロジックとプロセッサコアとを結合するインタフェースを提供するための第３プログラムコードも含む。このインタフェースは、スレッドスケジューリングポリシーロジックが、ポリシーを実施するために複数のスレッドの各々についてのディスパッチプライオリティを命令ディスパッチャに伝えるためのプライオリティ指標を含む。このインタフェースはまた、少なくとも１つの実行パイプラインが、スレッドのための命令の実行を少なくとも１つの実行パイプラインがコミットしているのかどうかを示す指標を、複数のスレッドの各々のためのスレッドスケジューリングポリシーロジックに伝える実行指標も含む。
【００１８】
別の態様で、本発明はコンピューティングデバイスとともに使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、複数のスレッドを同時に実行するマルチスレッディングプロセッサのスレッドスケジューリングポリシーを実施するスレッドスケジューリングポリシーマネージャを生じさせるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含む。このコンピュータ可読プログラムコードは、命令が複数のスレッドの各々のために実行されたかどうかを示す指標を各プロセッサのクロックサイクルで受け取るための入力を提供する第１プログラムコードを含む。このコンピュータ可読プログラムコードは、複数のスレッドの各々のための命令ディスパッチプライオリティを各プロセッサのクロックサイクルで送るための出力を提供する第２プログラムコードも含む。このコンピュータ可読プログラムコードはまた、スレッドスケジューリングポリシーを実施するために入力に基づいて出力を生成する、入力に結合されたロジックを提供する第３プログラムコードも含む。
【００１９】
別の態様で、本発明はコンピューティングデバイスとともに使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、各々が命令のストリームを含む複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサコアを生じさせるために、それ自体の中で具体化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を含む。このコンピュータ可読プログラムコードは、プロセッサコアの外部のスレッドスケジューリングポリシーロジックにプロセッサコアを結合するためのインタフェースを提供する第１プログラムコードを含む。このインタフェースは、スレッドスケジューリングポリシーロジックが複数のスレッドの各々のプライオリティをプロセッサコアに伝えるための第１信号を含む。このインタフェースはまた、スレッドスケジューリングポリシーロジックが、プライオリティを更新するのにスレッドスケジューリングポリシーロジックによって使用されるためのスレッドの命令の実行に関する複数のスレッドの各々についての情報を、プロセッサコアから受け取るための第２信号も含む。このコンピュータ可読プログラムコードはまた、第１信号を受け取り、第１信号で受け取られたプライオリティに基づいて、実行のため発行するために、複数のスレッドのうちの少なくとも１つから少なくとも１つの命令を選択するように結合されたスケジューラを提供するための第２プログラムコードも含む。
【００２０】
別の態様で、本発明は複数のスレッドを同時に実行するように構成されたマルチスレッディングプロセッサの中で命令をディスパッチする分岐型スケジューラを提供するためのコンピュータ可読プログラムコードを含む、伝送媒体内で具体化されるコンピュータデータ信号を提供する。このプログラムコードは、プロセッサの少なくとも１つの実行ユニットに複数のスレッドの命令を発行するように構成された第１スケジューラロジックを提供するための第１プログラムコードを含む。このプログラムコードは、複数のスレッドのスケジューリングポリシーを実施する第２スケジューラロジックを提供するための第２プログラムコードも含む。このプログラムコードはまた、第２スケジューラロジックを第１スケジューラロジックと少なくとも１つの実行ユニットに結合するインタフェースを提供するための第３プログラムコードも含む。このインタフェースは、第１スケジューラロジックが複数のスレッドの各々についてのプライオリティを第２スケジューラロジックから受け取るための第１信号を含む。第１スケジューラロジックは、プライオリティに基づいて少なくとも１つの実行ユニットに命令を発行する。このインタフェースはまた、第２スケジューラロジックが複数のスレッドの各々についての命令実行情報を受け取るための第２信号も含む。第２スケジューラロジックは、命令実行情報に基づいてプライオリティを更新する。
【００２１】
本明細書で説明される分岐型スケジューラの利点は、複数のカスタマによって再使用可能なプロセッサコアが設計され、また適切に、かつ設計された動作クロック周波数で動作することを可能にしながらも、カスタマが自分たちの特定のアプリケーションに必要とされる自分たち自身のスレッドスケジューリングポリシーを実施することができるということである。本明細書で説明される分岐型スケジューラの別の利点は、ソフトウェアに対してハードウェアによって実行されるスレッドスケジューリングポリシーの量を、カスタマが決定することを可能にするということである。すなわち、一部のカスタマはハードウェア内でスレッドスケジューリングポリシーの大部分か、または場合によってはそのすべてを実施することを望んでもよく、その一方で別のカスタマは、ハードウェア内で最小限の量のスレッドスケジューリングポリシーを実施し、ソフトウェアにスレッドスケジューリングポリシーの大部分を実行させることを望んでもよい。
【発明を実施するための最良の形態】
【００２２】
ここで図１を参照すると、本発明によるパイプライン化されたマルチスレッディングマイクロプロセッサ１００を示すブロック図が表されている。マイクロプロセッサ１００は複数のスレッドを同時に実行するように構成されている。本明細書で実行スレッドまたは命令ストリームとも呼ばれるスレッドは、プログラム命令のシーケンスまたはストリームを含む。スレッドは、マイクロプロセッサ１００で実行する異なるプログラムからか、またはマイクロプロセッサ１００で実行する同一のプログラムの異なる部分からの命令ストリームであるか、またはそれらの組合せであってもよい。
【００２３】
各スレッドは関連したスレッドコンテキスト（ＴＣ）を有する。スレッドコンテキストはレジスタまたはラッチ、および／またはスレッドの実行状態を説明するマイクロプロセッサ１００のストレージ要素の中のビットなどのストレージ要素の集合を含む。すなわちスレッドコンテキストは、マイクロプロセッサ１００で同時に実行する別の実行スレッドと共有される状態ではなく、スレッドに固有の各々のスレッドの状態を説明する。スレッドコンテキストの中の各スレッドの状態をストアすることによって、マイクロプロセッサ１００は、命令をフェッチして発行するためにスレッド間で迅速に切り替えを行うように構成されている。１つの実施形態で、各スレッドコンテキストは、マイクロプロセッサ１００のレジスタファイル１１２に含まれているプログラムカウンタ（ＰＣ）と汎用レジスタセットとスレッド制御レジスタとを含む。
【００２４】
マイクロプロセッサ１００は、様々なスレッドの命令のフェッチおよび発行を命じるスケジューリングポリシーによってスレッドを同時に実行する。本明細書では、複数のスレッドからの命令ディスパッチをスケジューリングするための様々な実施形態が説明される。命令の「発行」および「ディスパッチ」という用語は、本明細書では交換可能に使用される。マルチスレッド型マイクロプロセッサ１００は、同時に行われる方法で、複数のスレッドがマイクロプロセッサ１００の機能ユニット（例えば命令のフェッチおよびデコードユニット、キャッシュ、分岐予測ユニット、およびロード／ストア、整数、浮動小数点、ＳＩＭＤ等の実行ユニットならびにその他の実行ユニット）を共有することを可能にする。
【００２５】
マイクロプロセッサ１００は、マイクロプロセッサ１００を含むシステムのシステムメモリからフェッチされたプログラム命令、特に様々なスレッドの命令をキャッシュするための命令キャッシュ１０２を含む。マイクロプロセッサ１００はまた、命令フェッチャ１０４か、あるいは命令キャッシュ１０２および／またはシステムメモリから複数のスレッドの命令を、命令フェッチャ１０４に結合された命令／スキッドバッファ１０６に同時にフェッチするために結合された命令フェッチパイプライン１０４も含む。１つの実施形態で、命令フェッチパイプライン１０４は４段階のパイプラインを含む。命令／スキッドバッファ１０６は、命令スケジューラ１０８またはスレッドスケジューラ１０８に命令を与える。１つの実施形態で、各スレッドはそれ自体の命令／スキッドバッファ１０６を有する。各クロックサイクルで、スケジューラ１０８はマイクロプロセッサ１００のパイプラインの実行段階による実行のために、スレッドのうちの１つから命令を選択し、命令を発行する。レジスタファイル１１２はスケジューラ１０８に結合されており、命令を実行する実行ユニット１１４に命令オペランドを与える。マイクロプロセッサ１００は、実行ユニット１１４に結合されたデータキャッシュ１１８も含む。実行ユニット１１４は整数実行ユニット、浮動小数点実行ユニット、ＳＩＭＤ実行ユニット、ロード／ストアユニットおよび分岐実行ユニットを含んでもよいが、それらに限定されるわけではない。１つの実施形態で、整数実行ユニットのパイプラインは、レジスタファイル１１２がアクセスされるレジスタファイル（ＲＦ）アクセス段階、アドレス生成（ＡＧ）段階、実行（ＥＸ）段階およびメモリセコンド（ＭＳ）段階の４つの段階を含む。ＥＸ段階では、（加算、引算、桁移動等の）単純なＡＬＵ動作が実行される。さらにデータキャッシュ１１８は、ＥＸ段階の第１クロックサイクルの間にアクセスされ、ＭＳ段階の第２クロックサイクルの間にアクセスされる２サイクルのキャッシュである。各スレッドコンテキストはそれ自体のレジスタファイル１１２を含み、各レジスタファイルはそれ自体のプログラムカウンタと汎用レジスタセットとスレッド制御レジスタとを含む。命令フェッチャ１０４は、各スレッドコンテキストのプログラムカウンタの値に基づいて、スレッドの命令をフェッチする。実行ユニット１１４の一部は、かなり大規模にパイプライン化されてもよいことに留意されたい。マイクロプロセッサ１００のパイプラインは、命令の結果をレジスタファイル１１２にライトバックするライトバック段階１１６も含む。１つの実施形態で、マイクロプロセッサ１００のパイプラインはまた、実行ユニット１１４とライトバック段階１１６との間で結合された除外項目分解（ｅｘｃｅｐｔｉｏｎ  ｒｅｓｏｌｕｔｉｏｎ）段階も含む。
【００２６】
実行ユニット１１４は、実行のために特定のスレッドの命令がコミットされたことを示すために、各スレッドコンテキストに関連したＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号１２４を生成する。命令がマイクロプロセッサ１００のパイプラインによってフラッシュされておらず、代わりに最終的に命令を完了することが保証されている場合、実行のために命令はコミットされており、このことが結果を生成し、マイクロプロセッサ１００のアーキテクチャ状態を更新する。１つの実施形態で、複数の命令はクロックサイクル毎にコミットされてもよく、ＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号１２４は、サイクルを計測するスレッドコンテキストのためにコミットされた命令の数を示す。ＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号１２４はスケジューラ１０８に与えられる。ＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号１２４に応答して、スケジューラ１０８は、図９および図１０に関して以下で説明されるように、必要とされるサービス品質を達成するために、スケジューラ１０８のスレッドスケジューリングポリシーによって使用されるスレッドのための仮想水位指標を更新する。
【００２７】
ＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号１２４はまた、各々の命令／スキッドバッファ１０６にも与えられる。ＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号１２４に応答して、命令／スキッドバッファ１０６は、バッファ１０６から命令を効果的に取り除くためにポインタを更新する。従来のマイクロプロセッサでは、命令は従来の命令バッファから取り除かれ、実行のために発行される。しかしながら、本明細書で説明される命令／スキッドバッファ１０６は、好都合にも、命令が実行のために発行された後も命令をストアし続ける。図３および４に関して以下で詳細に説明されるように、実行ユニット１１４が各々のＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号１２４を介して命令が実行のためにコミットされたことを示すまで、命令は命令／スキッドバッファ１０６から取り除かれることはない。
【００２８】
スケジューラ１０８は、実行ユニット１１４にラン可能ＴＣ信号１３２を与える。ラン可能ＴＣ信号１３２はスレッドコンテキストのうちのどれがラン可能であるか、すなわちスケジューラ１０８が現在命令を発行してもよいのはどのスレッドコンテキストからなのかを特定する。１つの実施形態で、図７に関して以下で説明されるように、スレッドコンテキストがアクティブであり、（例えば停止、待機、一時停止または放棄などの）その他の状態によってブロックされていなければ、スレッドコンテキストはラン可能である。特に図５に関して以下で詳細に説明されるように、ストールされたスレッドコンテキストの命令をフラッシュするかどうかを決めるために、実行ユニット１１４はラン可能ＴＣ信号１３２を使用して、ストールされたスレッドコンテキストが唯一のラン可能なスレッドコンテキストであるかどうかを判定する。
【００２９】
実行ユニット１１４は、スケジューラ１０８にストール中イベント信号１２６を与える。ストール中イベント信号１２６は、特定のストール中イベント信号１２６によって特定された理由のために、実行ユニット１１４の中で命令がストールしたか、またはストールしてしまうことを示す。さらに、ストール中イベント信号１２６はストールされた命令のスレッドコンテキストを識別する識別子を含む。実行ユニット１１４はまた、スケジューラ１０８に非ストール中イベント信号１２８を与える。ストール中イベント信号１２６に応答して、スケジューラ１０８は、図５に関して以下でより詳細に説明されるように、適切な非ストール中イベント１２８が送られるまで、ストールされたスレッドコンテキストのために命令を発行することを停止する。
【００３０】
命令に応答して実行ユニット１１４をストールさせるイベントの例は以下のものを含むが、それらに限定されるわけではない。第１に、データキャッシュ１１８の中でミスしたロード命令からのデータなどの利用不可能なデータに、命令が依存している場合がある。例えば、データキャッシュ１１８の中でミスされた先行するロード命令とオペランドとは、システムメモリからまだフェッチされていないので、加算命令は利用不可能なオペランドを特定する場合がある。第２に、割算もしくはその他の長い演算命令、または例えばコプロセッサレジスタから値を動かす命令などの長期ラン命令からのデータに、命令が依存している場合がある。第３に、制限されたハードウェア資源のために、命令はコンフリクトを持ち込む場合がある。例えば１つの実施形態で、マイクロプロセッサ１００は単一のデバイダ回路を含む。割算命令がデバイダによって既に実行されている場合、そのとき第２の割算命令は、第１の割算命令が完了するのを待ちながらストールしなければならない。別の例として、１つの実施形態でマイクロプロセッサ１００の命令セットは、命令キャッシュ１０２の低レベルの管理動作を実行するための命令のグループを含む。命令キャッシュ管理命令が既に実行されている場合、そのとき第２の命令キャッシュ管理命令は、第１のものが完了するのを待ちながらストールしなければならない。別の例として、１つの実施形態で、マイクロプロセッサ１００は進行中のデータキャッシュ１１８のリフィルをストアするための比較的少数のスロットを含むロードキューを含む。ロード命令がデータキャッシュ１１８の中でミスする場合、紛失しているデータをシステムメモリから得るために、ロードキューエントリが割り当てられ、プロセッサバストランザクションが開始される。データはバスに戻される場合、ロードキューにストアされ、その後データキャッシュ１１８に書き込まれる。バストランザクションが完了し、すべてのデータがデータキャッシュ１１８に書き込まれると、ロードキューエントリは解放される。しかしながら、ロードキューが満杯の場合、ロードミスがパイプラインストールを生じさせる。第４に、命令はＥＨＢ命令に従う場合がある。１つの実施形態で、マイクロプロセッサ１００の命令セットは、すべての実行ハザードがクリアされるまで命令の実行を停止するためにソフトウェアによって使用されるＥＨＢ（実行ハザードバリア）命令を含む。典型的に、ＥＨＢ命令に従う命令は、ＥＨＢ命令が使われなくなるまでパイプラインの中でストールする。第５に命令は、その同一のスレッドコンテキストの中でスレッド間通信（ＩＴＣ）スペースにアドレスしたロードまたはストア命令に従う場合がある。１つの実施形態で、マイクロプロセッサ１００は、ＩＴＣロードまたはストアに従う同一のスレッドコンテキスト内の命令をストールさせる任意の長い時間ブロックすることができる、同期されたストレージを含むＩＴＣスペースへのロードおよびストアを支援する。
【００３１】
反対に、非ストール中イベント１２８の例は、データキャッシュ１１８の中でミスされたロードデータが戻される場合、デバイダ回路、命令キャッシュ１０２またはロードキュースロットなどの制限されたハードウェア資源が解放される場合、ＥＨＢ命令、長期ラン命令、またはスレッド間通信（ＩＴＣ）スペースに対するロード／ストア命令が完了する場合を含むが、これらに限定されるわけではない。
【００３２】
実行ユニット１１４はまた、パイプラインの実行部分（すなわちスケジューラ１０８の下のパイプライン部分）の中の特定されたスレッドの命令がフラッシュされているか、または無効にされていることを示すために、各スレッドコンテキストに関連したＴＣ＿ｆｌｕｓｈ信号１２２を生成する。１つの実施形態で、命令をフラッシュすること、または無効にすることは、パイプラインの中の命令に関連した有効ビットをクリアすることを含み、これは、命令の結果に応答してパイプラインがマイクロプロセッサ１００のアーキテクチャ状態を更新することを回避する。実行ユニット１１４がＴＣ＿ｆｌｕｓｈ信号１２２を生成してもよい１つの理由は、上述のように、スレッドの命令が実行ユニット１１４の中でストールする場合である。命令を無効にすること、またはフラッシュすることは、命令のために生成された結果が無視されることになり、したがって正しいものである必要がないので、命令がストールされる理由を取り除く。以下でより詳細に説明されるように、好都合にも、ストール中の命令をフラッシュすることによって、別のスレッドの命令は実行パイプラインの実行帯域幅を実行し、利用し続けることが可能であり、それによってマイクロプロセッサ１００の全体の性能を潜在的に高める。１つの実施形態で、ストール中スレッドの命令だけがフラッシュされ、このことがフラッシュによって持ち込まれるパイプラインバブルの数を都合よく減らすことができ、一部の場合では、実行ユニット１１４のパイプラインの中に存在する様々なスレッドからの命令の構成に応じて、ストール中の命令に関連した１つだけのバブルを生じさせることができる。１つの実施形態で、ＴＣ＿ｆｌｕｓｈ信号１２２の信号は、スレッドコンテキストのすべてのコミットされていない命令がフラッシュされたことを示す。別の実施形態で、実行ユニット１１４は実行ユニット１１４の中に存在するコミットされていない命令の数よりも少数のもの、すなわちストール中の命令およびストール中のスレッドコンテキストの任意のより新しい命令をフラッシュすることができるが、ストール中の命令よりも古いスレッドコンテキストのコミットされていない命令をフラッシュすることはできない。この実施形態で、ＴＣ＿ｆｌｕｓｈ信号１２２の信号はまた、実行ユニット１１４によってフラッシュされた命令の数も示す。
【００３３】
ＴＣ＿ｆｌｕｓｈ信号１２２は、実行ユニット１１４によって、それらの各々の命令／スキッドバッファ１０６に与えられる。命令／スキッドバッファ１０６は、図３および４に関して以下で説明されるように、バッファ１０６の中の命令の状態をロールバックするためにＴＣ＿ｆｌｕｓｈ信号１２２を使用する。命令／スキッドバッファ１０６は、それらがフラッシュされずにコミットされるまで、命令をストアし続けるので、フラッシュされる任意の命令はその後、命令キャッシュ１０２から再フェッチされることを必要とせずに、命令スキッド／バッファ１０６から再発行されてもよい。これには、別のスレッドからの命令が実行されることを可能にする、実行パイプラインからのフラッシュ中のストール命令に関連したペナルティを潜在的に減らすという利点がある。命令を再フェッチしなければならない可能性を減らすことは、命令のフェッチの回数が増加しているように思われることから、ますます重要になっている。これは、とりわけ、主としてプロセッサのクロック期間の減少のせいで、命令キャッシュが旧型のマイクロプロセッサの設計のときと比べて、より多くのクロックサイクルをアクセスのために必要とすることがより一般的になっているためである。したがって、命令の再フェッチに関連したペナルティは、以前の設計のときと比べて１つ、２つ、またはそれ以上のクロックサイクルとなる場合がある。
【００３４】
ここで図２を参照すると、図１のマイクロプロセッサ１００の部分を示すブロック図であり、特に本発明の１つの実施形態による命令／スキッドバッファ１０６が示されている。図２は、図１の命令フェッチャ１０４が命令をフェッチする、複数の各々のスレッドコンテキストのための複数の命令／スキッドバッファ１０６を示す。１つの実施形態による命令／スキッドバッファ１０６の構造および動作は、図３および４に関して以下でより詳細に示される。各命令／スキッドバッファ１０６は、命令２０６を命令選択ロジック２０２に与える。各クロックサイクルで、命令選択ロジック２０２は、実行されるべき実行ユニット１１４への供給のために、命令２０６のうちの１つを選択命令２０４として選択する。命令選択ロジック２０２は、各スレッドコンテキストのために、図１のスケジューラ１０８によって与えられるＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ信号２０８に応答して、選択命令２０４を選択する。ＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ信号２０８の動作は、図７および８に関して以下でより詳細に説明される。
【００３５】
マイクロプロセッサ１００が、実行のためにクロックサイクル毎に１つの命令だけを発行するスカラプロセッサである実施形態が説明されているが、命令選択ロジック２０２は、クロックサイクル毎に複数の命令を発行するスーパースカラプロセッサ内で動作するように構成されてもよい。さらに命令選択ロジック２０２は、一般に同時マルチスレッディングと呼ばれる、クロックサイクル毎の複数の異なるスレッドコンテキストからの発行のために、命令を選択するように構成されてもよい。
【００３６】
ここで図３を参照すると、本発明による図２の命令／スキッドバッファ１０６のうちの１つを例示する命令／スキッドバッファ１０６と、関連した制御ロジック３０２とを示すブロック図が表されている。図２の命令／スキッドバッファ１０６の各々は、図３に表されている命令／スキッドバッファ１０６に類似している。すなわち、図３には１つだけの命令／スキッドバッファ１０６と関連した制御ロジック３０２とが表されているが、１つの実施形態では、各スレッドコンテキストのために１つの命令／スキッドバッファ１０６と関連した制御ロジック３０２とが存在する。命令／スキッドバッファ１０６は、各々が命令をストアするための複数のエントリ３３２と、関連した命令が有効であるかどうかを示すための関連した有効ビット３３４とを含む。図３は、０から５で示された６つのエントリを備えた命令／スキッドバッファ１０６を示す。図３の１つの実施形態で、命令／スキッドバッファ１０６はエントリの循環キューとして構成されている。
【００３７】
図１の命令フェッチャ１０４は、命令を命令／スキッドバッファ１０６に書き込む度に、命令／スキッドバッファ１０６に対して書き込み信号３１４を生成する。書き込み信号３１４はまた、制御ロジック３０２に与えられる。制御ロジック３０２は、命令／スキッドバッファ１０６が満杯になっているので、命令フェッチャ１０４は命令／スキッドバッファ１０６が満杯ではなくなるまで、命令／スキッドバッファ１０６にそれ以上命令を書き込まないことを示すために、命令フェッチャ１０４に対してフル信号３１２を生成する。
【００３８】
図１のスケジューラ１０８は、命令／スキッドバッファ１０６から命令を読み取る度に、読み取り信号３１６を生成する。読み取り信号３１６はまた、制御ロジック３０２に与えられる。制御ロジック３０２は、命令／スキッドバッファ１０６が空であるので、スケジューラ１０８は命令／スキッドバッファ１０６が空でなくなるまで、命令／スキッドバッファ１０６から別の命令を読み取ることを試みないことを示すために、スケジューラ１０８に対して空信号３１８を生成する。
【００３９】
制御ロジック３０２は、命令／スキッドバッファ１０６の有効ビット３３４を更新する有効生成ロジック３４２を含む。有効生成ロジック３４２は、各々のスレッドコンテキストのために、図１のＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４を受け取る。実行ユニット１１４がＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４を生成する度に、有効生成ロジック３４２は命令／スキッドバッファ１０６の中の最も古い有効命令を無効にする。有効生成ロジック３４２はまた、命令フェッチャ１０４から書き込み信号３１４を受け取る。命令フェッチャ１０４が書き込み信号３１４を生成する度に、有効生成ロジック３４２は、命令が書き込まれる命令／スキッドバッファ１０６の中でエントリに有効の印を付ける。
【００４０】
制御ロジック３０２はまた、命令／スキッドバッファ１０６の中に存在する有効な命令の数をストアするｆｕｌｌ＿ｃｏｕｎｔカウンタ３０６も含む。ｆｕｌｌ＿ｃｏｕｎｔカウンタ３０６は、命令フェッチャ１０４からの書き込み信号３１４によって増分され、ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４によって減分される。制御ロジック３０２はまた、ｆｕｌｌ＿ｃｏｕｎｔ３０６が命令／スキッドバッファ１０６の命令の最大数に等しい場合に、フル信号３１２での真の値を生成するために、ｆｕｌｌ＿ｃｏｕｎｔ３０６を命令／スキッドバッファ１０６の中にストアされてもよい命令の最大数（すなわち命令／スキッドバッファ１０６の中のエントリ３３２の総数）と比較するコンパレータ３０４も含む。
【００４１】
制御ロジック３０２はまた、現時点で発行するのに好適な、命令／スキッドバッファ１０６の中に存在する有効命令の数をストアするｅｍｐｔｙ＿ｃｏｕｎｔカウンタ３４６も含む。ｅｍｐｔｙ＿ｃｏｕｎｔ３４６は、（まだコミットされてはいないが）既に実行パイプラインに発行されおり、したがって現時点では発行するのに好適ではない、いくつかの有効命令が命令／スキッドバッファ１０６の中に存在してもよいので、ｆｕｌｌ＿ｃｏｕｎｔ３０６よりも特定の回数少なくてよい。ｅｍｐｔｙ＿ｃｏｕｎｔカウンタ３４６は命令フェッチャ１０４からの書き込み信号３１４によって増分され、スケジューラ１０８からの読み取り信号３１６によって減分される。制御ロジック３０２はまた、ｅｍｐｔｙ＿ｃｏｕｎｔ３４６がゼロに等しい場合に、空信号３１８での真の値を生成するために、ｅｍｐｔｙ＿ｃｏｕｎｔ３４６をゼロと比較するコンパレータ３４４も含む。さらに、ｅｍｐｔｙ＿ｃｏｕｎｔカウンタ３４６は、図１のＴＣ＿ｆｌｕｓｈ信号１２２での真の値に応答して、ｆｕｌｌ＿ｃｏｕｎｔカウンタ３０６の値で書き込まれる。
【００４２】
制御ロジック３０２はまた、各々が命令／スキッドバッファ１０６のエントリ０で初期化されるカウンタである、書き込みポインタ３２２とコミットポインタ３２４と読み取りポインタ３２６とを含む。カウンタの各々は、命令／スキッドバッファ１０６の中のエントリ数よりも少ない最大値を超えて増分される場合、ゼロに戻る。書き込みポインタ３２２は、命令フェッチャ１０４が命令を書き込む命令／スキッドバッファ１０６の中の次のエントリを特定し、命令が書き込まれた後、書き込み信号３１４によって増分される。コミットポインタ３２４は、コミットされるべき命令／スキッドバッファ１０６の中の次の命令を特定し、ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４によって増分される。読み取りポインタ３２６は、スケジューラ１０８が命令を読み取り、命令が読み取られた後、読み取り信号３１６によって増分される命令／スキッドバッファ１０６の中の次のエントリを特定する。さらに読み取りポインタ３２６は、ＴＣ＿ｆｌｕｓｈ信号１２２の真の値に応答して、コミットポインタ３２４の値で書き込まれる。図３に表されているように、スキッドウィンドウは、それを含んではいないが、読み取りポインタ３２６によって示されるエントリまで、コミットポインタ３２４で開始する命令／スキッドバッファ１０６のエントリを含む。スキッドウィンドウは、実行のために既に発行されているが、まだコミットされていない有効命令を含む。
【００４３】
ここで図４を参照すると、本発明による図３の命令／スキッドバッファ１０６の動作を示す４つのフローチャートが表されている。フローチャートの各々は、異なるイベントに応答して命令／スキッドバッファ１０６によって実行される動作（ａｃｔｉｏｎ）を示す。第１フローチャートのフローは、ブロック４０２で開始する。
【００４４】
ブロック４０２で、図１の命令フェッチャ１０４は、各々の命令／スキッドバッファ１０６のために図３の書き込み信号３１４をアサートし、命令を命令／スキッドバッファ１０６に書き込む。フローはブロック４０４へ進む。
【００４５】
ブロック４０４で有効生成ロジック３４２は、書き込み信号３１４に応答して、書き込みポインタ３２２によって特定されたエントリに有効の印を付ける。フローはブロック４０６へ進む。
【００４６】
ブロック４０６で、図３の書き込みポインタ３２２は、書き込み信号３１４に応答して増分される。フローはブロック４０８へ進む。
【００４７】
ブロック４０８で、図３のｆｕｌｌ＿ｃｏｕｎｔカウンタ３０６は、書き込み信号３１４に応答して増分される。フローはブロック４１２へ進む。
【００４８】
ブロック４１２で、図３のｅｍｐｔｙ＿ｃｏｕｎｔカウンタ３４６は、書き込み信号３１４に応答して増分される。第１フローチャートのフローは、ブロック４１２で終了する。
【００４９】
第２フローチャートのフローは、ブロック４２２で開始する。
【００５０】
ブロック４２２で図１の実行ユニット１１４は、命令／スキッドバッファ１０６に関連したスレッドコンテキストのために、図１のＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号１２４をアサートする。フローはブロック４２４へ進む。
【００５１】
ブロック４２４で有効生成ロジック３４２は、ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４に応答して、コミットポインタ３２４によって特定されたエントリに無効の印を付け、それによってバッファから命令を効果的に取り除く。フローはブロック４２６へ進む。
【００５２】
ブロック４２６で、コミットポインタ３２４はＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４に応答して増分される。フローはブロック４２８へ進む。
【００５３】
ブロック４２８で、ｆｕｌｌ＿ｃｏｕｎｔカウンタ３０６はＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４に応答して減分される。第２フローチャートのフローは、ブロック４２８で終了する。
【００５４】
１つの実施形態で、制御ロジック３０２は、ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４を受信するのではなく、命令が再ディスパッチングを必要としないことをまだ保証されていない場合であっても、命令が命令／スキッドバッファ１０６から取り除かれるべきであることを単に示す実行ユニット１１４からの別の信号を受信する。１つの実施形態で、信号は命令が所定の再ディスパッチパイプライン段階に達したことを示す。制御ロジック３０２は、命令が所定の段階に達したことを検出する場合、命令／スキッドバッファ１０６から命令を取り除く。別の実施形態で、信号は各クロックサイクルで、命令がランしていた、すなわちストールしておらず、その代わりに次のパイプライン段階に進んだのかどうかを示す。制御ロジック３０２は、命令が所定のクロックサイクルの数ランしていたことを検出する場合、制御ロジック３０２は命令／スキッドバッファ１０６からその命令を取り除く。これらの実施形態では、命令が一旦実行パイプライン１１４の中の特定の段階に達してから再ディスパッチングを必要とする可能性は、たとえ命令が再ディスパッチングを必要としないことをまだ保証されていなくても、命令／スキッドバッファ１０６に別の命令が書き込まれるための場所を作るために、命令を命令／スキッドバッファ１０６から取り除くことを正当化するのに十分に低いものである。この実施形態で、実行ユニット１１４がその後、命令が実行の完了前にフラッシュされたことを示す場合、スレッド命令が正しい順序で発行されることを保証するために、命令フェッチパイプライン１０４の全体とともに、スレッドコンテキストのための命令／スキッドバッファ１０６の全体がフラッシュされなければならない。
【００５５】
第３フローチャートのフローはブロック４４２で開始する。
【００５６】
ブロック４４２で、図１のスケジューラ１０８は、各々の命令／スキッドバッファ１０６のために図３の読み取り信号３１６をアサートし、実行パイプラインに発行するために命令／スキッドバッファ１０６から命令を読み取る。フローはブロック４４４へ進む。
【００５７】
ブロック４４４で、図３の読み取りポインタ３２６は読み取り信号３１６に応答して増分される。フローはブロック４４６へ進む。
【００５８】
ブロック４４６で、ｅｍｐｔｙ＿ｃｏｕｎｔカウンタ３４６は読み取り信号３１６に応答して減分される。第３フローチャートのフローはブロック４４６で終了する。
【００５９】
第４フローチャートのフローはブロック４６２で開始する。
【００６０】
ブロック４６２で、命令／スキッドバッファ１０６に関連したスレッドコンテキストのために、ＴＣ＿ｆｌｕｓｈ信号１２２をアサートする。フローはブロック４６４へ進む。
【００６１】
ブロック４６４で、読み取りポインタ３２６はＴＣ＿ｆｌｕｓｈ信号１２２に応答して、コミットポインタ３２４とともにロードされる。フローはブロック４６６へ進む。
【００６２】
ブロック４６６で、ｅｍｐｔｙ＿ｃｏｕｎｔカウンタ３４６はＴＣ＿ｆｌｕｓｈ信号１２２に応答して、ｆｕｌｌ＿ｃｏｕｎｔ３０６とともにロードされる。第４フローチャートのフローはブロック４６６で終了する。
【００６３】
前述のように、１つの実施形態で、ＴＣ＿ｆｌｕｓｈ信号１２２の信号は、実行ユニット１１４がスレッドコンテキストのすべてのコミットされていない命令をフラッシュしたことを示す。図４の第４フローチャートは、この実施形態のための命令／スキッドバッファ１０６の動作を説明している。しかしながら別の実施形態では、実行ユニット１１４は実行ユニット１１４の中に存在するコミットされていない命令の数よりも少数のもの、すなわちストール中の命令およびストール中のスレッドコンテキストの任意の新たな命令をフラッシュすることができるが、ストール中の命令よりも古いスレッドコンテキストのコミットされていない命令をフラッシュすることはできない。この実施形態で、ＴＣ＿ｆｌｕｓｈ信号１２２の信号はまた、実行ユニット１１４によってフラッシュされた命令の数も示す。この実施形態ではブロック４６４で、読み取りポインタ３２６をコミットポインタ３２４とともに更新するのではなく、フラッシュされた命令の数は読み取りポインタ３２６から差し引かれる。さらにブロック４６６で、ｅｍｐｔｙ＿ｃｏｕｎｔ３４６をｆｕｌｌ＿ｃｏｕｎｔカウンタ３０６とともに更新するのではなく、フラッシュされた命令の数はｅｍｐｔｙ＿ｃｏｕｎｔ３４６に付加される。
【００６４】
ここで図５を参照すると、本発明による、実行帯域幅の利用を向上させるためにストールされたスレッドコンテキストをフラッシュするための図１のマイクロプロセッサ１００の動作を示すフローチャートが表されている。フローはブロック５０２で開始する。
【００６５】
ブロック５０２で、図１の実行ユニット１１４は、命令すなわちストール中の命令に応答して、図１のストール中イベント信号１２６に関して先に説明されたもののうちの１つなどのストール中イベントを検出する。実行ユニット１１４はまた、ストール中命令が関連しているのはどのスレッドコンテキストなのかを、すなわちどれがストール中スレッドコンテキストなのかを判定する。１つの実施形態で、各命令には、パイプラインを進むときに実行ユニット１１４がストール中スレッドコンテキストを識別するために使用する固有のスレッドコンテキスト識別子が付随する。１つの実施形態で、実行ユニット１１４はストール中イベント１２６に応答して命令をストールすることはせず、代わりにストール中イベント１２６が検出される同じクロックサイクルのブロック５１２によって命令をフラッシュし、それによって実行ユニット１１４をストールする必要性を軽減する。別の実施形態で、タイミング考慮事項によって必要とされる場合、実行ユニット１１４は以下のブロック５１２によってストールされた命令がフラッシュされることができるまで、ストール中イベント１２６に応答して実際に１クロックサイクルの間ストールしてもよい。フローはブロック５０４へ進む。
【００６６】
判定ブロック５０４で、実行ユニット１１４は図１のラン可能ＴＣ信号１３２を調べることによって、ストール中スレッドコンテキストが唯一のラン可能スレッドコンテキストであるのかどうかを判定する。ストール中スレッドコンテキストが唯一のラン可能スレッドコンテキストである場合、フローはブロック５２６へ進み、そうでなければブロック５０６へ進む。
【００６７】
ブロック５０６で、実行ユニット１１４はストール中イベント信号１２６を介してストール中イベントを送り、またストール中スレッドコンテキストの識別子を提供する。フローはブロック５０８へ進む。
【００６８】
ブロック５０８で、スケジューラ１０８はストールされたストール中スレッドコンテキストに印を付け、そのスレッドコンテキストのために命令を発行することを停止し、ストール中イベントの原因に関する状態を保存する。図７の実施形態で、発行可能命令ロジック７０８は、ストール指標７０４をストールされたスレッドコンテキストに印を付けるための真の値に設定し、それによって発行可能命令ロジック７０８は、発行可能な７４６信号で偽の値を生成する。フローはブロック５１２へ進む。
【００６９】
ブロック５１２で、実行ユニット１１４は実行ユニット１１４の中のストール中スレッドコンテキストのすべての命令を無効化、すなわちフラッシュし、ストール中スレッドコンテキスト、すなわちフラッシュされたスレッドコンテキストに関連する図１のＴＣ＿ｆｌｕｓｈ信号１２２で真の値を生成する。実行ユニット１１４はストール中命令およびその後の命令だけをフラッシュするが、ストール中命令に先行する命令をフラッシュすることはなく、そうしなければストール中の状態は決して終わることはないということを理解されたい。１つの実施形態で、実行ユニット１１４は、ストール中スレッドコンテキストだけではなく、すべてのスレッドコンテキストの命令をフラッシュする。しかしながら、ストール中スレッドコンテキストだけをフラッシュする実施形態には、別のスレッドコンテキストの命令が実行のために実行ユニット１１４の中にまだ残っていてもよいために、持ち込まれるパイプラインバブルは潜在的により少なくなり、それによってマイクロプロセッサ１００は潜在的に、すべてのスレッドコンテキストをフラッシュする実施形態よりも、より効率的になるという利点がある。フローはブロック５１４へ進む。
【００７０】
ブロック５１４で、図１の命令／スキッドバッファ１０６は、図３および４、または図１３および１４、または図１５に関して説明されるように、ＴＣ＿ｆｌｕｓｈ信号１２２に応答してフラッシュされた命令をロールバックする。フローはブロック５１６へ進む。
【００７１】
ブロック５１６で、スケジューラ１０８はそのスレッドスケジューリングポリシーに従って、ストールされたという印を付けられていないスレッドコンテキストのために命令を発行し続ける。図７の実施形態で、ストール指標７０４は、命令がストールされているか、ストールされていないのかを示す。さらに実行ユニット１１４は、ブロック５１２でのフラッシュの後に実行ユニット１１４の中にある別のスレッドコンテキストの命令を実行し続け、その後ディスパッチされた命令を実行し続ける。フローは判定ブロック５１８へ進む。
【００７２】
判定ブロック５１８で、スケジューラ１０８はストール中イベントが終了したかどうかを判定する。スケジューラ１０８は図１の非ストール中イベント信号１２８を介して非ストール中イベントを送る実行ユニット１１４に応答して、またさらにブロック５０８で保存されたストール中イベントの原因に関する状態に基づいて、ストール中スレッドコンテキストのためのストール中イベントが終了したかどうかを判定する。ストール中スレッドコンテキストのためのストール中イベントが終了した場合、フローはブロック５２２に進み、そうでなければフローはブロック５１６に戻る。
【００７３】
ブロック５２２で、スケジューラ１０８はストール中スレッドコンテキストにストール解除されたと印を付け、別のストールされていないスレッドコンテキストとともに、（もはや）ストール中ではないスレッドコンテキストのための命令を再び発行し始める。図７の実施形態で、発行可能命令ロジック７０８は、スレッドコンテキストにストール解除されたと印を付けるために、ストール指標７０４を偽の値に設定する。
【００７４】
ブロック５２４で、ストール中のスレッドコンテキストが唯一のラン可能なスレッドコンテキストであることから、実行ユニット１１４は正しいプログラムの実行を保証するために、ストール中命令でストールする。フローは判定ブロック５２６へ進む。
【００７５】
判定ブロック５２６で、スケジューラ１０８はストール中イベントが終了したかどうかを判定する。もし終了していれば、フローはブロック５３４へ進み、そうでなければフローは判定ブロック５２８へ進む。
【００７６】
判定ブロック５２８で、実行ユニット１１４は図１のラン可能ＴＣ信号１３２を調べることによって、ストールされたスレッドコンテキストが唯一のラン可能スレッドコンテキストであるのかどうかを判定する。ストールされたスレッドコンテキストが唯一のラン可能スレッドコンテキストである場合、フローはブロック５２６へ進み、そうでなければフローは判定ブロック５２８へ進む。
【００７７】
判定ブロック５２８で、実行ユニット１１４はストール中のスレッドコンテキストが依然として唯一のラン可能スレッドコンテキストであるのかどうかを判定する。ストール中スレッドコンテキストが依然として唯一のラン可能スレッドコンテキストである場合、フローは判定ブロック５２６へ戻り、そうでなければフローはブロック５０６へ進む。
【００７８】
ブロック５３２で、実行ユニット１１４は、（もはや）ストール中ではない命令およびその他の命令をストール解除し、実行し続ける。ストール中イベントが終了する場合、有利にも、ストールされた命令およびその後の命令は、ブロック５１２によってそれらがフラッシュされている場合に必要とされる、再発行されることを必要とせずに、直ちに実行を開始してもよい。したがってストール中のスレッドコンテキストが唯一のラン可能なスレッドコンテキストである場合には、それをフラッシュしないことによって、有利にもマイクロプロセッサ１００は潜在的に性能を向上させる。フローはブロック５３２で終了する。
【００７９】
図５からわかるように、別のスレッドの命令が実行ユニット１１４にディスパッチされ、そこで実行されることを可能にするために、実行ユニット１１４の中でストール中イベント１２６を検出し、実行ユニット１１４から命令をフラッシュすることは、実行パイプラインバブルのために無駄にされるクロックサイクルを回避することによって、有利にも実行ユニット１１４の使用をより効率的にする。命令がストールする実際の状態に応答して命令をフラッシュすることによって、マイクロプロセッサ１００は潜在的により高い性能を達成する。
【００８０】
ここで図６を参照すると、本発明の１つの実施形態による図１のマイクロプロセッサ１００の中の分岐されているスケジューラ１０８を示すブロック図が表されている。分岐型スケジューラ１０８はディスパッチスケジューラ（ＤＳ）６０２の部分と、ポリシーマネージャ（ＰＭ）６０４の部分とを含む。ディスパッチスケジューラ６０２の部分はマイクロプロセッサ１００のプロセッサコア６０６内に含まれている一方で、ポリシーマネージャ６０４部分はプロセッサコア６０６の外部に含まれている。プロセッサコア６０６はカスタマによってカスタマイズすることができないマイクロプロセッサ１００の部分である一方で、ポリシーマネージャ６０４はカスタマによってカスタマイズ可能である。１つの実施形態で、プロセッサコア６０６はソフトコアとも呼ばれる合成可能なコアである。合成可能なコアの設計は、迅速に製造可能な表現に変えられることが可能であり、一般に合成ツールと呼ばれる自動ツールを簡単に使用することが可能である。
【００８１】
プロセッサコア６０６は、複数の信号を含むポリシーマネージャ６０４にインタフェース６２８を与える。１つの実施形態で、コアではないポリシーマネージャ６０４ロジックが、分岐型スケジューラによって別途持ち込まれるかもしれない特定のタイミング問題を軽減する方法で、プロセッサコア６０６とインタフェースすることを都合よく可能とするために、ディスパッチスケジューラ６０２への入力とディスパッチスケジューラ６０２からの出力信号とが登録される。さらにインタフェース６２８は、カスタマにとって理解することが簡単であり、ポリシーマネージャ６０４のスケジューリングポリシーの設計を容易にする。
【００８２】
以下の表２には、１つの実施形態によるポリシーマネージャインタフェース６２８を含む様々な信号が表されている。表２は信号名、ポリシーマネージャ６０４に関する信号の方向、および各信号の簡単な説明を明記している。表２は、マイクロプロセッサ１００が９つまでの実行スレッドに関連した状態をストアするための９つのスレッドコンテキストを含む実施形態を説明する。さらにこの実施形態は、マイクロプロセッサ１００が２つまでの仮想処理要素（ＶＰＥ）として構成されることを可能にする。１つの実施形態で、マイクロプロセッサ１００は実質的にＭＩＰＳ３２またはＭＩＰＳ６４命令セットアーキテクチャ（ＩＳＡ）に適合しており、実質的にＭＩＰＳ特権リソースアーキテクチャ（Ｐｒｉｖｉｌｅｇｅｄ  Ｒｅｓｏｕｒｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ）（ＰＲＡ）およびＭＩＰＳマルチスレッディング特定用途向け拡張機能（ＭＴ  ＡＳＥ）の中で特定されるコプロセッサ０に適合しているスレッド制御レジスタを含む、表２でＣＰ０とされる制御コプロセッサ０を含む。表２で説明される信号の複数は、ＣＰ０レジスタにアクセスするために使用される。
【表２】
2008530655.tif 000004
2008530655.tif 000005
【００８３】
表２に明記されたポリシーマネージャインタフェース６２８の特定の信号のうちの一部は、ここでより詳細に説明される。ポリシーマネージャ６０４はディスパッチスケジューラ６０２に対して、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の出力を介して各々のスレッドコンテキストのプライオリティを特定する。１つの実施形態で、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２は２つのビットを含み、ディスパッチスケジューラ６０２は、ポリシーマネージャ６０４がスレッドコンテキストのための４つの異なるプライオリティのうちの１つを特定できるようにする。ポリシーマネージャ６０４は、各々のＰＭ＿ＴＣ＿ｂｌｏｃｋ６５４の出力で真の値を生成することによって、スレッドコンテキストのために命令を発行することを停止するようディスパッチスケジューラ６０２に命令する。したがって、ポリシーマネージャ６０４は、以下で、特には以下の図７から１１に関してより詳細に説明されるように、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２およびＰＭ＿ＴＣ＿ｂｌｏｃｋ６５４を介して、ディスパッチスケジューラ６０２が様々なスレッドコンテキストのためにどのように命令を発行するのかに影響を及ぼしてもよい。
【００８４】
図９に関して以下で説明されるように、プロセッサコア６０６はポリシーマネージャ６０４にＰＭ＿ｇｃｌｋ６５８を与え、これによりポリシーマネージャ６０４は、ＰＭ＿ｇｃｌｋ６５８に基づいて周期的にＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２を調整することができる。ディスパッチスケジューラ６０２は、各々のＰＭ＿ＴＣ＿ｓｔａｔｅ６４２の入力を介して、各スレッドコンテキストのために状態を伝える。表２に表されているように、スレッドコンテキストは以下の８つの状態のうちの１つの中にあってもよい。非アクティブ：スレッドコンテキストが現在実行スレッドに関連していないので、ディスパッチスケジューラ６０２はスレッドコンテキストの命令を発行しなくてもよい。アクティブ：スレッドコンテキストは現在実行スレッドコンテキストに関連しているので、ディスパッチスケジューラ６０２は、別のブロック中状態が存在しなければ、実行のためにスレッドコンテキストの命令を発行してもよい。放棄：スレッドは放棄命令を実行しており、これによってスレッドコンテキストは特定のイベントについてブロックされるので、ディスパッチスケジューラ６０２は実行のためにスレッドコンテキストの命令を発行しなくてもよい。停止：スレッドコンテキストはそれ自体によってか、または別のスレッドによって停止されているので、ディスパッチスケジューラは実行のためにスレッドコンテキストの命令を発行しなくてもよい。一時停止：スレッドがＤＭＴまたはＤＶＰＥ命令を実行したため、またはマイクロプロセッサ１００もしくはＶＰＥが現在除外項目を処理しているため、ディスパッチスケジューラ６０２は実行のためにスレッドコンテキストの命令を発行しなくてもよい。ＤＭＴ命令はＶＰＥのためのマルチスレッディング動作を一時停止する。ＤＶＰＥ命令はマイクロプロセッサ１００全体のためのマルチスレッディング動作を一時停止する。ＩＴＣでの待機：スレッドコンテキストは、スレッドにより実行されるロード／ストア命令によって特定される、スレッド間通信（ＩＴＣ）スペースの中の位置への／からのロード／ストアデータを待機してブロックされているので、ディスパッチスケジューラ６０２は実行のためにスレッドコンテキストの命令を発行しなくてもよい。待機による待機：スレッドは待機命令を実行しており、これによってスレッドコンテキストは割り込みが生じるまでブロックされるので、ディスパッチスケジューラ６０２は実行のためにスレッドコンテキストの命令を発行しなくてもよい。ＳＲＳとして使用：スレッドコンテキストレジスタセットがシャドウレジスタセットの動作のために使用されていることから、スレッドコンテキストは実行スレッドに関連しておらず、それに関連することも不可能なので、ディスパッチスケジューラ６０２はスレッドコンテキストの命令を発行しなくてもよい。
【００８５】
ディスパッチスケジューラ６０２は、各々のＰＭ＿ＴＣ＿ｉｎｓｔ＿ｉｓｓｕｅｄ６４６の入力を介して、スレッドコンテキストのために命令を発行したことをポリシーマネージャ６０４に伝える。実行ユニット１１４は、各々のＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ６４４の入力を介して、スレッドコンテキストの命令をコミットしたことをポリシーマネージャ６０４に伝える。１つの実施形態で、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ６４４信号は、命令の実行が完了されたことを示す。別の実施形態で、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ６４４信号は、命令がフラッシュされないことを保証されること、すなわち命令が最終的には実行を完了するが、まだ完了されていなくてもよいことを示す。顕著な点は、一部の命令が推測でディスパッチされ、決して完了しなくてもよいことから、異なっていてもよい、（ＰＭ＿ＴＣ＿ｉｎｓｔ＿ｉｓｓｕｅｄ入力６４６によって伝えられた）単にディスパッチされた命令とは対照的な実行された命令についての情報を、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ６４４入力がポリシーマネージャ６０４に与えるということである。図９に関して以下で説明されるように、アプリケーションの中の一部のスレッドは特定のサービス品質を必要とすることがあることから、これはポリシーマネージャ６０４に対する重要な区別となりうる。１つの実施形態で、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号６４４は、ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ信号１２４の登録されたバージョンである。したがって、特に以下の図７から図１１に関して以下でより詳細に説明されるように、プロセッサコア６０６はＰＭ＿ＴＣ＿ｉｎｓｔ＿ｉｓｓｕｅｄ６４６、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ６４４、およびＰＭ＿ＴＣ＿ｓｔａｔｅ６４２の入力を介して、様々なスレッドコンテキスト、およびスレッドコンテキストの状態に対する命令の発行および実行についてのフィードバックを与える。
【００８６】
１つの実施形態で、ディスパッチスケジューラ６０２はまた、ポリシーマネージャ６０４にリラックス機能も与え、その目的は、アプリケーションのスレッドコンテキストが全部のプロセッサ帯域幅を必要としない場合に、マイクロプロセッサ１００が実際にスリープに入ることなく、電力を節約することを可能にすることである。リラックス機能は、あたかもスケジュールされるべき、さらなるスレッドコンテキストがあるかのように動作する。しかしながら、リラックススレッドコンテキストが発行のために選択される場合、ディスパッチスケジューラ６０２は命令を発行することはない。ポリシーマネージャ６０４は、（図９に関して以下で説明される）ＴＣ＿ＬＥＶＥＬ９１８カウンタと同様に動作する（ＶＰＥ当たりの）ＲＥＬＡＸ＿ＬＥＶＥＬカウンタを、それが増分のためにＲＥＬＡＸ＿ＲＡＴＥを使用し、リラックス命令スロットが完了されるときに減分される場合を除いて、維持する。１つの実施形態で、マイクロプロセッサ１００は、ソフトウェアがＲＥＬＡＸ＿ＲＡＴＥを特定することを可能にする、ＴＣスケジュールレジスタ９０２に類似したＶＰＥ当たりのＶＰＥスケジュールレジスタを含む。リラックス機能は、表２に明記されたＰＭ＿ｖｐｅ＿ｒｅｌａｘ＿ｅｎａｂｌｅ信号を介して使用可能または使用不可にされ、リラックススレッドコンテキストプライオリティは、ＰＭ＿ｖｐｅ＿ｒｅｌａｘ＿ｐｒｉｏｒｉｔｙ信号を介して特定される。
【００８７】
１つの実施形態で、ディスパッチスケジューラ６０２はまた、ポリシーマネージャ６０４に除外機能も与え、その目的は、除外スレッドコンテキストがそれ自体の、通常のスレッドコンテキストから独立したプライオリティを持つことを可能にすることである。ポリシーマネージャは、（図９に関して以下で説明される）ＴＣ＿ＬＥＶＥＬ９１８カウンタと同様に動作する（ＶＰＥ当たりの）ＥＸＣ＿ＬＥＶＥＬカウンタを、それが増分のためにＥＸＣ＿ＲＡＴＥを使用し、除外命令スロットが完了されるときに減分される場合を除いて、維持する。除外モードが使用可能にされ、ＶＰＥのために除外が受け入れられる場合、そのときＶＰＥのスレッドコンテキストはすべて除外プライオリティに設定される。１つの実施形態で、ソフトウェアはＶＰＥスケジュールレジスタを介してＥＸＣ＿ＲＡＴＥを特定する。除外機能は表２に明記されたＰＭ＿ｖｐｅ＿ｅｘｃ＿ｅｎａｂｌｅ信号を介して使用可能または使用不可にされ、除外スレッドコンテキストプライオリティは、ＰＭ＿ｖｐｅ＿ｅｘｃ＿ｐｒｉｏｒｉｔｙ信号を介して特定される。
【００８８】
ここで図７を参照すると、本発明による図６のディスパッチスケジューラ６０２と図２の命令選択ロジック２０２とをより詳細に示すブロック図が表されている。命令選択ロジック２０２はコンパレータ７１４によって制御されるマルチプレクサ（ｍｕｘｅｓ）７２４のツリーを含む。各マルチプレクサ７２４は、２つの異なるスレッドコンテキストから図２の命令２０６を受け取る。各マルチプレクサ７２４はまた、図２のＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８に関連した命令２０６も受け取る。各マルチプレクサ７２４に関連したコンパレータ７１４も、２つのスレッドコンテキストのための一組のＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ信号を受け取り、それに関連したマルチプレクサ７２４を命令２０６、および最も高いＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８の値を備えたＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８を選択するために制御する。選択された命令２０６およびＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８は、実行パイプラインへの供給のために、最後のマルチプレクサ７２４が最も高いＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８を備えた図２の選択命令２０４を選択するまで、ツリーを下ってゆく。
【００８９】
図７は、ディスパッチスケジューラ６０２のロジック、すなわちストール指標７０４、発行可能命令ロジック７０８およびラウンドロビン（ｒｏｕｎｄ−ｒｏｂｉｎ）ロジック７１２を示す。１つの実施形態で、ストール指標７０４と発行可能命令ロジック７０８とは、各スレッドコンテキストのためのＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８を生成するために、各スレッドコンテキストのためにディスパッチスケジューラ６０２の中で繰り返される。対照的に、ラウンドロビンロジック７１２は各々の可能なＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のために一度インスタンス化されて、各ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のためのラウンドロビン指標を生成する。例えば、図７はポリシーマネージャ６０４が４つの可能なＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のうちの１つを特定してもよい実施形態を示しており、したがってラウンドロビンロジック７１２はディスパッチスケジューラ６０２の中で４度インスタンス化され、４つの各々のラウンドロビン指標を生成する。
【００９０】
１つの実施形態で、ラウンドロビン指標はマイクロプロセッサ１００のスレッドコンテキスト当たり１ビットを含む。その各々のスレッドコンテキストに関連したラウンドロビン指標のビットは、図７に示されるようにラウンドロビンビット７４８として与えられる。ラウンドロビンビット７４８が真である場合、現時点で同じＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２であるその他のスレッドコンテキストの中で発行されるべき、ラウンドロビン方式におけるそのスレッドコンテキストの番となる。
【００９１】
発行可能命令ロジック７０８は、図１の実行ユニット１１４からの非ストール中イベント信号１２８およびストール中イベント信号１２６、図６のポリシーマネージャ６０４からのＰＭ＿ＴＣ＿ｂｌｏｃｋ６５４信号、命令／スキッドバッファ１０６からの図３の空信号３１８、およびＴＣ状態７４２信号を受け取る。１つの実施形態で、ＴＣ状態７４２信号は、図６のＰＭ＿ＴＣ＿ｓｔａｔｅ６４２信号に類似した情報を伝える。発行可能命令ロジック７０８は、スレッドコンテキストを識別するストール中イベント信号１２６に応答して、ストールされたスレッドコンテキストに印を付けるために、ストール指標７０４を設定する。発行可能命令ロジック７０８はまた、ストールの理由を記憶するために、ストール中イベント１２６に応答して状態をストアする。反対に、発行可能命令ロジック７０８は、非ストール中イベント１２８がストールの原因に関連している場合、非ストール中イベント信号１２８に応答してストール指標７０４をクリアする。発行可能命令ロジック７０８は、その入力に応答して発行可能７４６信号を生成する。スレッドコンテキストのために命令／スキッドバッファ１０６の読み取りポインタ３２６によって示された命令２０６が発行可能であれば、発行可能７４６信号は真である。１つの実施形態で、スレッドコンテキストがアクティブ状態にあって、（例えば停止、待機、一時停止、または放棄などの）別の状態によってブロックされておらず、ストール指標７０４が偽で、ＰＭ＿ＴＣ＿ｂｌｏｃｋ６５４および空３１８信号が偽であることをＴＣ＿状態信号７４２が示す場合、命令は発行可能である。
【００９２】
発行可能７４６ビットとＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２ビットとラウンドロビンビット７４８とは、ＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８を作り出すために結合される。図７の実施形態で、発行可能７４６ビットは最も有効なビットであり、ラウンドロビンビット７４８は最も有効度の低いビットであり、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２は２つの中間の有効度のビットである。認められるように、発行可能ビット７４６はＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の最も有効なビットであるので、発行可能ではない命令は、すべての発行可能命令よりも低いプライオリティになる。反対にラウンドロビンビット７４８は、２つ以上のスレッドコンテキストが発行可能命令を有し、同じ高さのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２を有する場合に、スレッドを選択するためだけに使用される。
【００９３】
ここで図８を参照すると、本発明による図７のディスパッチスケジューラ６０２の動作を示すフローチャートが表されている。フローはブロック８０２で開始する。
【００９４】
ブロック８０２で、ディスパッチスケジューラ６０２は各ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のために各ラウンドロビン指標を初期化する。フローはブロック８０４へ進む。
【００９５】
ブロック８０４で、ディスパッチスケジューラ６０２は各スレッドコンテキストのために、スレッドコンテキストが発行可能命令２０６を有するかどうかを判定する。すなわち、各スレッドコンテキストのための発行可能命令ロジック７０８は、発行可能７４６信号上で値を生成する。１つの実施形態で、発行可能命令ロジック７０８は、スレッドコンテキストがアクティブ状態であり、（停止、待機、一時停止または放棄などの）別の状態によってブロックされておらず、ストール指標７０４が偽であり、ＰＭ＿ＴＣ＿ｂｌｏｃｋ６５４および空３１８信号が偽であることをＴＣ＿状態信号７４２が示す場合にだけ、発行可能７４６信号上で真の信号を生成する。フローは判定ブロック８０６へ進む。
【００９６】
判定ブロック８０６で、ディスパッチスケジューラ６０２はスレッドコンテキストの各々のための発行可能７４６信号を調べることによって、発行可能命令２０６を有する任意のスレッドコンテキストが存在するかどうかを判定する。そのようなスレッドコンテキストが存在しないのであれば、フローは少なくとも１つのスレッドコンテキストが発行可能命令２０６を有するまでブロック８０４に戻り、そうでなければフローはブロック８０８へ進む。
【００９７】
ブロック８０８で、ディスパッチスケジューラ６０２は、スレッドコンテキストの発行可能７４６ビット、スレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２、およびスレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のラウンドロビンビット７４８に基づいて、各スレッドコンテキストの命令２０６のためのＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８を生成する。フローはブロック８１２へ進む。
【００９８】
ブロック８１２で、ディスパッチスケジューラ６０２は最も高いＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８を備えた命令２０６を発行する。すなわちディスパッチスケジューラ６０２は、発行可能命令を有し、かつ最も高いＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２を有するスレッドコンテキストから命令を発行する。複数のスレッドコンテキストがその基準を満たす場合、ディスパッチスケジューラ６０２は、スレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のためのラウンドロビンビット７４８によって、発行する番であることが示されるスレッドコンテキストから命令を発行する。フローはブロック８１４へ進む。
【００９９】
ブロック８１４で、ラウンドロビンロジック７１２は、その命令を発行させるためにスレッドコンテキストのうちのどれが選択されたのかということに基づいて、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のためにラウンドロビン指標を更新する。フローはブロック８０４に戻る。
【０１００】
ここで図９を参照すると、本発明による図６のポリシーマネージャとＴＣスケジュールレジスタ９０２とを示すブロック図が示されている。
【０１０１】
マイクロプロセッサ１００は、各スレッドコンテキストのためにＴＣスケジュールレジスタ９０２を含む。ＴＣスケジュールレジスタ９０２はソフトウェアプログラム可能であり、ソフトウェアがポリシーマネージャ６０４にスレッドスケジューリングのヒントを与えるための手段を与える。１つの実施形態で、ＴＣスケジュールレジスタ９０２は図６および表２に関して上で述べられたコプロセッサ０レジスタ内に含まれ、特にはポリシーマネージャ６０４内に含まれる。ＴＣスケジュールレジスタ９０２はＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４、ＴＣ＿ＲＡＴＥ９１２、ＯＶ９１４およびＰＲＩＯ９１６の６つのフィールドを含む。図９の実施形態で、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３、９０４およびＴＣ＿ＲＡＴＥ９１２フィールドは４ビットを含み、ＰＲＩＯ９１６フィールドは２ビットを含み、ＯＶ９１４フィ０ルドは単一のビットである。
【０１０２】
図９に表されているポリシーマネージャ６０４ロジックは、制御ロジック９２４と、出力を制御ロジック９２４に与えるために結合されたコンパレータ９２２と、出力をコンパレータ９２４への入力として与えるために結合されたＴＣ＿ＬＥＶＥＬ９１８レジスタと、出力をＴＣ＿ＬＥＶＥＬ９１８レジスタへの入力として与えるために結合された３つの入力マルチプレクサ（ｍｕｘ）９２６とを含む。マルチプレクサ９２６はその第１の入力で、正しい値を保持しておくために、ＴＣ＿ＬＥＶＥＬ９１８レジスタの出力を受け取る。マルチプレクサ９２６はその第２の入力で、入力がＴＣ＿ＬＥＶＥＬ９１８レジスタの出力であるデクリメンタ９３２の出力を受け取る。マルチプレクサ９２６はその第３の入力で、入力がＴＣ＿ＬＥＶＥＬ９１８レジスタの出力を加算するアダー９３６の出力と、ＴＣ＿ＲＡＴＥ９１２に２を乗算するマルチプライヤ９３８の出力である、インクリメンタ９３４の出力を受け取る。ＴＣ＿ＲＡＴＥ９１２は、スレッドコンテキストの所望の実行速度、すなわちユニット時間当たりの完了されるべき命令の数を表す指標である。図９の実施形態で、ＴＣ＿ＲＡＴＥ９１２は、１６クロックサイクル毎に完了されなければならないスレッドの命令の数を示す。図９の中では、実際に一覧にされるロジックは一度だけ表されているが、ロジックは各スレッドコンテキストのためにＰＭ＿ＴＣ＿ｂｌｏｃｋ６５４およびＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２信号を生成し、ＰＭ＿ＴＣ＿ｓｔａｔｅ６４２、ＰＭ＿ＴＣ＿ｉｎｓｔ＿Ｃｏｍｍｉｔｔｅｄ６４４、ＰＭ＿ＴＣ＿ｉｎｓｔ＿ｉｓｓｕｅｄ６４６、およびＰＭ＿ｇｃｌｋ６５８信号を受け取るために、ポリシーマネージャ６０４内で各スレッドコンテキストのために繰り返されてもよい。
【０１０３】
ポリシーマネージャ６０４は、スケジューラ１０８の高レベルのスレッドスケジューリングポリシーを達成するために、修正されたリーキーバケットアルゴリズムを用いる。ＴＣ＿ＬＥＶＥＬ９１８レジスタは、バケットの水位に類似している。ＴＣ＿ＬＥＶＥＬ９１８は本質的に、スレッドコンテキストによって行われなければならない作業量の尺度である。１つの実施形態で、ＴＣ＿ＬＥＶＥＬ９１８レジスタはゼロに初期化された１２ビットのレジスタを含む。制御ロジック９２４は、マルチプレクサ９２６がどの入力を選択するかを制御するための制御信号９２８を生成する。３２クロックサイクル毎に、マルチプレクサ９２６は、数量（ＴＣ＿ＲＡＴＥ×２＋１）によってＴＣ＿ＬＥＶＥＬ９１８を増やすＴＣ＿ＬＥＶＥＬ９１８レジスタへのストアのために、インクリメンタ９３６の出力を選択する。１つの実施形態では、ＴＣ＿ＲＡＴＥ９１２に基づいたＴＣ＿ＬＥＶＥＬ９１８の更新の間のクロックサイクルの数もまた、プログラム可能である。別のクロックサイクルで、ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿Ｃｏｍｍｉｔｔｅｄ信号６４４が、スレッドコンテキストのために命令が実行のためにコミットされたことを示す場合、マルチプレクサ９２６はＴＣ＿ＬＥＶＥＬ９１８を減分するためにデクリメンタ９３２の出力を選択する。したがってソフトウェアは、スレッドのＴＣスケジュールレジスタ９０２のＴＣ＿ＲＡＴＥ９１２の値を調整することによって、スレッドコンテキストのバケットの仮想水位に影響を及ぼすことができる。図９の実施形態で、ＴＣ＿ＲＡＴＥ９１２の値は、スレッドコンテキストのためにマイクロプロセッサ１００が実行することを望まれる、１６クロックサイクル毎の命令の数を示す。
【０１０４】
水圧によって水漏れするバケツの水位が増えると、水は高い確率で漏れ出すようになる。同様にＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ領域９０４／９０６／９０８は、仮想水圧の範囲を定義する値を単調に増やすことでプログラムされる。コンパレータ９２２はＴＣ＿ＬＥＶＥＬ９１８をＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ９０４／９０６／９０８と比較し、それらの結果を制御ロジック９２４に与え、それによって、ＴＣ＿ＬＥＶＥＬ９１８がどの仮想水圧の範囲に入るかに基づいて、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２を生成する。図９のリーキーバケットによって示されているように、ＴＣ＿ＬＥＶＥＬ９１８の最も有効なニブルがＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４の値を上回る場合、制御ロジック９２４は３のＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の値（最も高いプライオリティ）を生成し、ＴＣ＿ＬＥＶＥＬ９１８の最も有効なニブルがＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４の値とＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６との値の間にある場合、制御ロジック９２４は２のＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の値を生成し、ＴＣ＿ＬＥＶＥＬ９１８の最も有効なニブルがＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６の値とＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８との値の間にある場合、制御ロジック９２４は１のＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の値を生成し、ＴＣ＿ＬＥＶＥＬ９１８の最も有効なニブルがＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８の値を下回る場合、制御ロジック９２４は０のＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の値（最も低いプライオリティ）を生成する。同様に、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のレベルを増やすことは、スレッドコンテキストに対して命令を発行するためのディスパッチスケジューラ６０２への圧力を増やし、一方でＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のレベルを下げることは、スレッドコンテキストに対して命令を発行するためのディスパッチスケジューラ６０２への圧力を減らす。
【０１０５】
上述のように、マイクロプロセッサ１００を使用する一部のアプリケーションでは、異なるスレッドは、ＴＣ＿ＲＡＴＥ９１２フィールドを使用してプログラム可能な異なる命令実行速度を必要としてもよい。さらに異なるスレッドは異なる分解能（ｒｅｓｏｌｕｔｉｏｎ）、すなわち命令の実行速度が測定される期間を必要としてもよい。すなわち、おそらくは高い実行速度を必要するわけではないが、一部のスレッドには最小限の期間を超えて命令の実行が欠けていてはならない。すなわち、スレッドは特定のサービス品質を必要とする。図９およびその説明から認められるように、各スレッドのために必要とされる分解能を達成するために、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ９０４／９０６／９０８が用いられてもよい。互いに比較的近いＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ９０４／９０６／９０８を割り当てることによって、より高い分解能が達成されることができ、その一方で、比較的遠くに離れているＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ９０４／９０６／９０８を割り当てることは、より低い分解能を作り出す。したがってソフトウェアは、命令実行速度で必要とされる分解能を達成するために、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ９０４／９０６／９０８を各スレッドコンテキストのために調整することによって、ポリシーマネージャ６０４を介して所望のサービス品質目標を達成してもよい。
【０１０６】
ＯＶビット９１４が設定される場合、制御ロジック９２４はＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ９０４／９０６／９０８、ＴＣ＿ＲＡＴＥ９１２およびＴＣ＿ＬＥＶＥＬ９１８の値を無視し、代わりにＰＲＩＯフィールド９１６で特定される値に等しいＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２信号の値を生成する。これによって、ソフトウェアはリーキーバケットポリシーを迂回し、必要に応じて１つまたは複数のスレッドコンテキストのプライオリティを直接制御することができる。
【０１０７】
１つの実施形態で、ＴＣ＿ＬＥＶＥＬ９１８が所定の数のクロックサイクルに対して、その最大値まで飽和する場合、そのときマイクロプロセッサ１００は、特に１つまたは複数のＴＣスケジュールレジスタ９０２の中の値を変更することによって、ソフトウェアがより高いレベルでスレッドスケジューリング調整を行うことができるようにするために割り込みを送る。１つの実施形態で、割り込みはソフトウェアによってマスクされてもよい。
【０１０８】
１つの実施形態で、マイクロプロセッサ１００の命令セットは、特定されたイベントが生じるまで、スケジューラ１０８にスレッドコンテキストのために命令を発行することを止めるように命令するためにスレッドコンテキストが実行してもよい放棄命令を含む。１つの実施形態で、スレッドが放棄されている場合、ポリシーマネージャ６０４は一時的にスレッドのＴＣ＿ＬＥＶＥＬ９１８の更新を使用不可にするので、スレッドのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙはスレッドが放棄解除になるまで保存される。別の実施形態で、ポリシーマネージャ６０４はスレッドのＴＣ＿ＬＥＶＥＬ９１８を更新し続け、おそらくスレッドのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙを増やすことになるので、スレッドが放棄解除になった場合、基本的には呼び水でスレッドを援助するために、一時的に高いプライオリティを有する。１つの実施形態で、ポリシーマネージャ６０４の放棄されたスレッドに対する動作は、ソフトウェアによってプログラム可能である。
【０１０９】
ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２、ＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ９０４／９０６／９０８、ＴＣ＿ＲＡＴＥ９１２、ＴＣ＿ＬＥＶＥＬ９１８等を特定するために、特定の数のビットが使用される実施形態が説明されているが、スケジューラ１０８は任意の方法で、この実施形態で使用される値に限定されるわけではなく、むしろスケジューラ１０８は、マイクロプロセッサ１００が使用されるべき特定のアプリケーションによって必要とされるような様々な異なる数のビット、プライオリティ、レベル、速度等を使用するように構成されてよいことを理解されたい。さらに、変更されたリーキーバケットスレッドスケジューリングポリシーを用いるポリシーマネージャ６０４が説明されてきたが、ポリシーマネージャ６０４は、依然として分岐型スケジューラ１０８の利点を享受しながら、任意の様々なスレッドスケジューリングポリシーを用いるように構成されてもよいことを理解されたい。例えば１つの実施形態では、ポリシーマネージャ６０４は、すべてのスレッドコンテキストのためのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の出力が同一の値に結び付けられている単純なラウンドロビンスレッドスケジューリングポリシーを用いる。別の実施形態では、ポリシーマネージャ６０４は、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の出力がスレッドコンテキストのＴＣスケジュールレジスタ９０２の中で特定された、いくつかの連続したクロックサイクルの間、１つのスレッドコンテキストのために最も高いプライオリティにまで高められ、次いでＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の出力がスレッドコンテキストのＴＣスケジュールレジスタ９０２の中で特定された、おそらく異なった数の連続したクロックサイクルの間、別のスレッドコンテキストのために最も高いプライオリティにまで高められ、タイムスライス式の方法で各スレッドコンテキストのためにそのようにされる、タイムスライス式スレッドスケジューリングポリシーを用いる。
【０１１０】
１つの実施形態で、マイクロプロセッサ１００の命令セットは、利用可能なスレッドコンテキストを割当て、新たに割り当てられたスレッドコンテキストの中で新たなスレッドの実行をスケジューリングするための分岐命令を含む。１つの実施形態で、スレッドコンテキストが新たなスレッドコンテキストを分岐する場合、親スレッドコンテキストのためのＴＣ＿ＲＡＴＥ９１２はそれ自体の間で分割され、子スレッドコンテキスト、すなわち新たなＴＣ＿ＲＡＴＥ９１２は均一に２で割られた古いＴＣ＿ＲＡＴＥ９１２である。これには、スレッドコンテキストが元々割り当てられたよりも多くの処理帯域幅を要求することを防ぐという利点がある。
【０１１１】
上述のものから認められるように、スケジューラ１０８を分岐することによって、プロセッサコア６０６に含まれるディスパッチスケジューラ６０２を比較的簡単にすることができ、それによってディスパッチスケジューラ６０２をエリアおよび電力の点で比較的小型のものにし、スレッドスケジューリングポリシーのアプリケーション特定の複雑性を、プロセッサコア６０６の外部にあるポリシーマネージャ６０４に配置することができる。一部のアプリケーションは複雑なポリシーマネージャ６０４を必要としなくてもよく、したがって、本明細書で説明されるように、スケジューラ１０８が分岐されていなかった場合にすべてのアプリケーションに課せられる、さらなるエリアおよび電力要件の負担をかけられないでも済むため、これは好都合なことである。
【０１１２】
ここで図１０を参照すると、本発明による図９のポリシーマネージャ６０４の動作を示すフローチャートが表されている。図１０では単一のスレッドコンテキストのためだけに動作が表されているが、図１０に明記された動作はポリシーマネージャ６０４の中で、各スレッドコンテキストのために生じる。フローはブロック１００２で開始する。
【０１１３】
ブロック１００２で、ポリシーマネージャ６０４はＴＣ＿ＬＥＶＥＬ９１８をゼロに初期化する。フローはブロック１００４へ進む。
【０１１４】
ブロック１００４で、ポリシーマネージャ６０４はＰＭ＿ｇｃｌｋ６５８の１チックを待つ。フローは判定ブロック１００６へ進む。
【０１１５】
判定ブロック１００６で、ポリシーマネージャ６０４は、フローが判定ブロック１００６に最後に達したときから、３２チックのＰＭ＿ｇｃｌｋ６５８が過ぎたかどうかを判定する。３２のＰＭ＿ｇｃｌｋ６５８が過ぎていなければ、フローは判定ブロック１０１２へ進み、過ぎていればフローはブロック１００８へ進む。
【０１１６】
ブロック１００８で、ＴＣ＿ＬＥＶＥＬ９１８はＴＣ＿ＲＡＴＥ９１２＋１の値の２倍だけ増やされる。フローは判定ブロック１０１２へ進む。
【０１１７】
判定ブロック１０１２で、ポリシーマネージャ６０４はＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ６４４が真であるかどうかを判定する。ＰＭ＿ＴＣ＿ｉｎｓｔｒ＿ｃｏｍｍｉｔｔｅｄ６４４が真でなければフローは判定ブロック１０１６へ進み、真であればフローはブロック１０１４へ進む。
【０１１８】
ブロック１０１４で、ＴＣ＿ＬＥＶＥＬ９１８は減分される。フローは判定ブロック１０１６へ進む。
【０１１９】
判定ブロック１０１６で、ポリシーマネージャ６０４はＯＶビット９１４が設定されるかどうかを判定する。ＯＶビット９１４が設定されなければフローは判定ブロック１０２２へ進み、設定されるのであればフローはブロック１０１８へ進む。
【０１２０】
ブロック１０１８で、ポリシーマネージャ６０４はＰＲＩＯ９１６フィールドと等しいＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の値を生成する。フローはブロック１００４へ戻る。
【０１２１】
判定ブロック１０２２で、ポリシーマネージャ６０４はＴＣ＿ＬＥＶＥＬ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＲＡＭ３  ９０４の値よりも大きいかどうかを判定する。ＴＣ＿ＬＥＶＥＬ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ３  ９０４の値よりも大きくなければフローは判定ブロック１０２６へ進み、大きければフローはブロック１０２４へ進む。
【０１２２】
ブロック１０２４で、ポリシーマネージャ６０４はＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２上で３の値（最も高いプライオリティ）を生成する。フローはブロック１００４へ戻る。
【０１２３】
判定ブロック１０２６で、ポリシーマネージャ６０４はＴＣ＿ＬＥＶＥＬ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６の値よりも大きいかどうかを判定する。ＴＣ＿ＬＥＶＥＬ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ２  ９０６の値よりも大きくなければ、フローは判定ブロック１０３２へ進み、大きければフローはブロック１０２８へ進む。
【０１２４】
ブロック１０２８で、ポリシーマネージャ６０４はＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２上で２の値を生成する。フローはブロック１００４へ戻る。
【０１２５】
判定ブロック１０３２で、ポリシーマネージャ６０４はＴＣ＿ＬＥＶＥＬ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８の値よりも大きいかどうかを判定する。ＴＣ＿ＬＥＶＥＬ９１８がＴＣ＿ＬＥＶＥＬ＿ＰＡＲＡＭ１  ９０８の値よりも大きくなければフローはブロック１０３６へ進み、大きければフローはブロック１０３４へ進む。
【０１２６】
ブロック１０３４で、ポリシーマネージャ６０４はＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２上で１の値を生成する。フローはブロック１００４へ戻る。
【０１２７】
ブロック１０３６で、ポリシーマネージャ６０４はＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２上で０の値を（最も低いプライオリティ）生成する。フローはブロック１００４へ戻る。
【０１２８】
ここで図１１を参照すると、本発明の代替の実施形態による図６のディスパッチスケジューラ６０２と図２の命令選択ロジック２０２とをより詳細に示すブロック図が表されている。図１１の実施形態は図７の実施形態に類似しているが、図１１の実施形態のディスパッチスケジューラ６０２は命令プレデコーダ１１０８とストール可能性プライオリティジェネレータ１１０４も含む。プレデコーダ１１０８は命令１１１４についてのレジスタ使用情報１１０６を生成するために、命令１１１４をプレデコードする。１つの実施形態で、レジスタ使用情報１１０６は、命令のソースレジスタとしてレジスタファイル１１２のどのレジスタが使用されているのかということと、ソースレジスタに必要とされるのは実行パイプライン１１４のどの段階であるのかということを特定する。さらにレジスタ使用情報１１０６は、命令の宛先レジスタはレジスタファイル１１２のどのレジスタであるのかということと、命令の結果が宛先レジスタにストアされる準備ができているのは実行パイプライン１１４のどの段階であるのかということを特定する。
【０１２９】
ストール可能性プライオリティジェネレータ１１０４は、レジスタ使用情報と、マイクロプロセッサ１００のパイプラインから受け取られたプロセッサ状態情報１１１２とに基づいて、命令１１１４のためのストール可能性プライオリティ１１０２を生成する。プロセッサ状態情報１１１２はロードがデータキャッシュ１１８の中でミスされたかどうかということと、ミスしているロードが既にフェッチされたかどうかということと、実行パイプラインの中で現在実行されている別の命令の、特には宛先レジスタである（命令プレデコーダ１１０８によって生成されたレジスタ使用情報１１０６を含んでもよい）レジスタの使用法と、実行パイプラインの中のＥＨＢ命令の存在と、ＡＬＵが別のＡＬＵ命令を実行して現在ビジーであるかどうかということと、プレデコードされている命令と実行パイプライン中の別の命令との間にある現在のパイプライン段階の数等を含んでもよいが、それらに限定されるわけではない。図１１の実施形態で、ストール可能性プライオリティ１１０２は、図２の選択命令２０４を選択するのに命令選択ロジック２０２によって使用されるために、図２の６ビットのＤＣ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８を形成するための発行可能ビット７４６とＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙビット６５２との間に含まれる２つのビットを含む。代替の実施形態で、ストール可能性プライオリティ１１０２の２つのビットは、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の２つのビットとインタリーブされる。１つの実施形態で、このビットは、ストール可能性プライオリティ１１０２のＭＳＢ、ＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のＭＳＢ、ストール可能性プライオリティ１１０２のＬＳＢ、ＬＳＢまたはＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２の最も有効なものから最も有効でないものまでの順序でインタリーブされる。この実施形態は、実行パイプライン１１４による高い全体の処理能力を維持することの助けとなるインタリーブ型の実施形態である。
【０１３０】
ストール可能性プライオリティ１１０２は、そのレジスタの使用法に基づいて命令がストールすることなく実行される可能性を示す。１つの実施形態で、ストール可能性プライオリティ１１０２は以下のように４つのプライオリティレベルを作り出し、ストール可能性プライオリティジェネレータ１１０４によって生成される２つのビットを含む。命令はストールしないことを保証される場合、最も高いストール可能性プライオリティ１１０２に割り当てられる。例えば、命令がレジスタへの依存性を有していない場合、または命令がそれ自体と依存性を有する命令との間で十分なパイプライン段階の間隔を有している場合、または例えばミスしているロードデータが戻されているため、または前の命令の結果が現在利用可能であるために、依存性はもはや存在せず、命令によって必要とされるデータが利用可能である場合である。命令はストールすることが保証される場合、最も低いストール可能性プライオリティ１１０２に割り当てられる。例えば、命令が現在実行中のＥＨＢ命令に続く場合、命令がキャッシュ不可能なメモリ領域からのロードである場合、命令がスレッド間通信（ＩＴＣ）スペース内の場所から／へのロード／ストアである場合、または命令がレジスタ依存性などの依存性のせいで、その前にある別の命令とバックトゥバックで実行されることができない場合である。キャッシュ可能ロード命令は、最も低いプライオリティに次ぐ値に割り当てられる。命令がストールしないことを保証される場合、最も高いプライオリティに次ぐ値に割り当てられるが、例えば１つの実施形態の中での乗算、除算または浮動小数点命令の結果に依存する命令など、ストールしない高い可能性を有する。
【０１３１】
１つの実施形態で、命令１１１４は、スレッドコンテキストのための命令／スキッドバッファ１０６の読み取りポインタ３２６における図２の命令２０６、すなわち発行に適した次の命令であるスレッドコンテキストの命令２０６である。別の実施形態で、タイミング考慮事項を改善するために、命令プレデコーダ１１０８は命令１１１４が図１の命令／スキッドバッファ１０６にストアされるときに、命令１１１４のためにレジスタ使用情報１１０６を生成し、レジスタ使用情報１１０６を命令１１１４とともに命令／スキッドバッファ１０６の中にストアする。命令１１１４／２０６が命令／スキッドバッファ１０６から読み取られると、プレデコードされたレジスタ使用情報１１０６は、その時点でストール可能性プライオリティジェネレータ１１０４に与えられる。すなわち、この実施形態では、命令／スキッドバッファ１０６は命令プレデコーダ１１０８とストール可能性プライオリティジェネレータ１１０４との間で結合される。
【０１３２】
ここで図１２を参照すると、本発明による図１１のディスパッチスケジューラ６０２の動作を示すフローチャートが表されている。図１２のフローチャートは図８のフローチャートに類似しており、同じ番号を付けられたブロックは同じものである。しかしながら図１２のフローチャートでは、ブロック８０８はブロック１２０８と置き換えられている。さらに図１２のフローチャートは、さらなるブロック１２０５を含む。フローはブロック８０４からブロック１２０５へ進む。
【０１３３】
ブロック１２０５で、各スレッドコンテキストのために、ストール可能性プライオリティジェネレータ１１０４は、図１１のプロセッサ状態１１１２および命令１１１４のレジスタ使用情報１１０６に基づいて、命令１１１４のためのストール可能性プライオリティ１１０２を生成する。フローはブロック１２０５から判定ブロック８０６へ進む。
【０１３４】
判定ブロック８０６で、ディスパッチスケジューラ６０２は、各スレッドコンテキストのための発行可能７４６信号を調べることによって、発行可能命令２０６を有する任意のスレッドコンテキストが存在するかどうかを判定し、そうしたスレッドコンテキストが存在しなければ、少なくとも１つのスレッドコンテキストが発行可能命令２０６を有するまでフローはブロック８０４へ戻り、そうでなければフローはブロック１２０８へ進む。
【０１３５】
ブロック１２０８で、ディスパッチスケジューラ６０２は、スレッドコンテキストの発行可能７４６ビット、スレッドコンテキストのためにディスパッチするための次の命令２０６のストール可能性プライオリティ１１０２、スレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２、およびスレッドコンテキストのＰＭ＿ＴＣ＿ｐｒｉｏｒｉｔｙ６５２のラウンドロビンビット７４８に基づいて、各スレッドコンテキストの命令２０６のためのＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ２０８を生成する。フローはブロック１２０８からブロック８１２へ進む。
【０１３６】
ここで図１３を参照すると、本発明の代替実施形態による図１のマイクロプロセッサ１００の共有型の動的割当可能なスキッドバッファを示すブロック図が表されている。マイクロプロセッサ１００は、図１の命令フェッチャ１０４とスケジューラ１０８とを含む。マイクロプロセッサ１００は、図２のＤＣ＿ＴＣ＿ｐｒｉｏｒｉｔｙ信号２０８に応答して選択命令２０４を出力する命令選択ロジック２０２も含む。マイクロプロセッサ１００はまた、図１の命令フェッチャ１０４が命令をフェッチする、複数の各々のスレッドコンテキストのための複数の命令バッファ１３０６も含む。マイクロプロセッサ１００はまた、複数のスキッドバッファ１３１２も含む。１つの実施形態で、命令バッファ１３０６およびスキッドバッファ１３１２の各々は、図３の命令／スキッドバッファ１０６の構造に類似した循環ＦＩＦＯを含む。スキッドバッファ１３１２はスレッドコンテキストによって共有され、動的に割り当てられるので、スキッドバッファ１３１２の数は、好都合にもスレッドコンテキストの数よりも少なくてよい。図１３はスキッドバッファＡ、スキッドバッファＢ、スキッドバッファＣと記載されている３つのスキッドバッファ１３１２を有する実施形態を示す。さらに、各スキッドバッファ１３１２は関連した割当レジスタ１３１４とロックレジスタ１３１６とを有する。割当レジスタ１３１４は、関連したスキッドバッファ１３１２がスレッドコンテキストによる使用のために割り当てられているかどうかということと、もしそうであれば、どのスレッドコンテキストにスキッドバッファ１３１２が割り当てられるのかということを示す。同様に、ロックレジスタ１３１６は、関連したスキッドバッファ１３１２がスレッドコンテキストによる使用のためにロックされているのかどうかということと、もしそうであれば、どのスレッドコンテキストに対してスキッドバッファ１３１２がロックされるのかということを示す。スレッドコンテキストのためにスキッドバッファ１３１２を割り当てること、およびロックすることは、図１４に関して以下でより詳細に述べられる。
【０１３７】
マイクロプロセッサ１００は、スキッドバッファ１３１２の各々に関連した複数のマルチプレクサ１３２２も含む。各マルチプレクサ１３２２はそれに関連したスキッドバッファ１３１２の入力に結合された各マルチプレクサ１３２２の出力を有する。各マルチプレクサ１３２２は命令バッファ１３０６の各々の出力を、各マルチプレクサ１３２２の入力として受け取る。マイクロプロセッサ１００はまた、命令バッファ１３０６の各々に関連した複数のマルチプレクサ１３２４も含む。各マルチプレクサ１３２４は、その各々のスレッドコンテキストの図２の命令２０６を、命令選択ロジック２０２に出力する。各マルチプレクサ１３２４は、その各々の命令バッファ１３０６の出力を１つの入力の上で受け取る。各マルチプレクサ１３２４は、スキッドバッファ１３１２の各々の出力を、その残りの入力の上で受け取る。
【０１３８】
図２の命令／スキッドバッファ１０６とは異なり、図１３のスキッドバッファ１３１２は命令バッファ１３０６とは別のものであり、必要に応じた基準で、スレッドコンテキストによって共有され、動的に割り当てられる。このことは、より効率的な命令バッファリングの解決法を潜在的に提供し、特にはスペースと電力の量が同じである場合のより高性能の解決法か、または性能のレベルが類似している場合のスペースと電力の低減を提供する。マイクロプロセッサ１００はまた命令バッファ１３０６、スキッドバッファ１３１２、マルチプレクサ１３２２および１３２４、割当レジスタ１３１４ならびにロックレジスタ１３１６の動作を制御するためのバッファ制御ロジック１３３２も含む。図１３の命令バッファ１３０６およびスキッドバッファ１３１２の動作は、図１４に関してここで説明される。
【０１３９】
ここで図１４を参照すると、本発明による図１３のスキッドバッファの動作を示す３つのフローチャートが表されている。フローチャートの各々は、異なるイベントまたはイベントのセットに応答して、図１３の命令バッファ１３０６およびスキッドバッファ１３１２によって行われる動作を示す。第１フローチャートのフローはブロック１４０４で開始する。
【０１４０】
ブロック１４０４で、図６のディスパッチスケジューラ６０２は命令バッファ１３０６から命令を発行する。命令フェッチャ１０４はスレッドコンテキストに関連した命令バッファ１３０６に命令を書き込み続けており、特にはブロック１４０４で発行される命令を命令バッファ１３０６に書き込んでいることに留意されたい。フローは判定ブロック１４０６へ進む。
【０１４１】
判定ブロック１４０６で、バッファ制御ロジック１３３２は、図１３の割当レジスタ１３１４を読み取ることによって、スキッドバッファ１３１２が既にスレッドコンテキストのために割り当てられているかどうかを判定する。スキッドバッファ１３１２が既にスレッドコンテキストのために割り当てられているのであればフローはブロック１４１２へ進み、そうでなければ、フローはスキッドバッファ１３１２がスレッドコンテキストのために割り当てられてもよいかどうかを判定するために、判定ブロック１４０８へ進む。
【０１４２】
判定ブロック１４０８で、バッファ制御ロジック１３２２は、図１３のロックレジスタ１３１６を読み取ることによって、すべてのスキッドバッファがロックされているかどうかを判定する。すべてのスキッドバッファがロックされていないのであればフローはブロック１４１４へ進み、そうでなければ、スレッドコンテキストのために割り当てられてもよいスキッドバッファ１３１２は存在せず、このことはスレッドコンテキストがその後実行パイプラインによってフラッシュされる場合、フラッシュされた命令が再フェッチされなければならないことを意味するので、フローは終了する。
【０１４３】
ブロック１４１２で、ブロック１４０４でディスパッチされた命令は、前にスレッドコンテキストのために割り当てられたスキッドバッファ１３１２に書き込まれ、命令は命令バッファ１３０６から取り除かれる。フローはブロック１４１２で終了する。
【０１４４】
ブロック１４１４で、バッファ制御ロジック１３３２はスレッドコンテキストのためにスキッドバッファ１３１２を割り当てる。１つの実施形態で、バッファ制御ロジック１３３２は、割り当てられたスキッドバッファ１３１２に関連した割当レジスタ１３１４にスレッドコンテキスト識別子を書き込むことによって、スレッドコンテキストのためにスキッドバッファ１３１２を割り当てる。１つの実施形態で、バッファ制御ロジック１３３２は最も中身のないスキッドバッファ１３１２を割り当てる。別の実施形態で、バッファ制御ロジック１３３２は、最近で最も使用されていないものという基準でスキッドバッファ１３１２を割り当てる。別の実施形態で、バッファ制御ロジック１３３２は、最近で最もロックされていないものという基準でスキッドバッファ１３１２を割り当てる。別の実施形態で、バッファ制御ロジック１３３２は、スレッドコンテキストが現在最も低いプライオリティを有するスキッドバッファ１３１２を割り当てる。フローは、命令を割り当てられたスキッドバッファ１３１２に書き込むために、ブロック１４１４からブロック１４１２へ進む。
【０１４５】
第２フローチャートのフローはブロック１４４２で開始する。
【０１４６】
ブロック１４４２で、図１の実行ユニット１１４はスレッドコンテキストのためにストール中イベント１２６を送る。フローはブロック１４４４へ進む。
【０１４７】
ブロック１４４４で、実行ユニット１１４はスレッドコンテキストのためにＴＣ＿ｆｌｕｓｈ１２２を送る。フローは判定ブロック１４４６へ進む。
【０１４８】
判定ブロック１４４６で、バッファ制御ロジック１３３２は、図１３の割当レジスタ１３１４を読み取ることによって、スキッドバッファ１３１２がスレッドコンテキストのために割り当てられたかどうかを判定する。スキッドバッファ１３１２がスレッドコンテキストのために割り当てられていなければフローはブロック１４５２へ進み、そうでなければフローはブロック１４４８へ進む。
【０１４９】
ブロック１４４８で、バッファ制御ロジック１３３２はスレッドコンテキストのために割り当てられたスキッドバッファ１３１２をロックする。１つの実施形態で、バッファ制御ロジック１３３２は、スキッドバッファ１３１２に関連したロックレジスタ１３１６へスレッドコンテキスト識別子を書き込むことによって、スキッドバッファ１３１２をスレッドコンテキストのためにロックする。フローはブロック１４４８で終了する。
【０１５０】
ブロック１４５２で、バッファ制御ロジック１３３２は、実行ユニット１１４によってフラッシュされたスレッドコンテキストの命令バッファ１３０６をフラッシュする。フローはブロック１４５２で終了する。
【０１５１】
第３フローチャートのフローはブロック１４８２で開始する。
【０１５２】
ブロック１４８２で、実行ユニット１１４はスレッドコンテキストのために適切な非ストール中イベント１２８を送る。フローは判定ブロック１４８４へ進む。
【０１５３】
判定ブロック１４８４で、バッファ制御ロジック１３３２は、ロックレジスタ１３１６を読み取ることによって、スキッドバッファ１３１２がスレッドコンテキストのためにロックされているかどうかを判定する。スキッドバッファ１３１２がスレッドコンテキストのためにロックされているのであればフローはブロック１４８８へ進み、そうでなければフローはブロック１４８６へ進む。
【０１５４】
ブロック１４８６で、スケジューラ１０８は、スレッドコンテキストに関連した命令バッファ１３０６から、スレッドコンテキストのために命令を発行する。スレッドコンテキストのためにロックされているスキッドバッファ１３１２はなかったため、これらの命令は命令バッファ１３０６の中に再フェッチされなければならなかったことに留意されたい。フローはブロック１４８６で終了する。
【０１５５】
ブロック１４８８で、スケジューラ１０８は、例えば除外または妨害または分岐予測誤りの修正に応答して、スキッドバッファ１３１２が空になるまで、またはスキッドバッファ１３１２がフラッシュされるまで、第２フローチャートのブロック１４４８でスレッドコンテキストのためにロックされたスキッドバッファ１３１２から、スキッドコンテキストのために命令を発行する。好都合にも、これらの命令は再フェッチされる必要がなかったことに留意されたい。フローはブロック１４９２へ進む。
【０１５６】
ブロック１４９２で、バッファ制御ロジック１３３２は、第２フローチャートのブロック１４４８でスレッドコンテキストのためにロックされていたスキッドバッファ１３１２をロック解除する。フローはブロック１４９２で終了する。
【０１５７】
ここで図１５を参照すると、本発明の代替の実施形態による、すべてのスレッドコンテキストによって共有される図１のマイクロプロセッサ１００の単一の命令／スキッドバッファを示すブロック図が表されている。図１５のマイクロプロセッサ１００は、図１の命令フェッチャ１０４とスケジューラ１０８とを含む。マイクロプロセッサ１００は、命令フェッチャ１０４がすべてのスレッドコンテキストのために命令をフェッチする単一の命令／スキッドバッファ１５０６も含む。マイクロプロセッサ１００はまた、スケジューラ１０８から図２のＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ信号２０８を受け取るバッファ制御ロジック１５０２も含む。バッファ制御ロジック１５０２は、実行ユニット１１４への供給のために、図２の選択命令２０４を出力するために命令／スキッドバッファ１５０６を制御する。
【０１５８】
図１５の単一の命令／スキッドバッファ１５０６はすべてのスレッドコンテキストからの命令をストアするためのランダムアクセスメモリ（ＲＡＭ）である。したがってバッファ制御ロジック１５０２は、図３に関して上で説明されたものと同様に機能するすべてのスレッドコンテキストの中で、単一の書き込みポインタ（ＷＰ）およびｆｕｌｌ＿ｃｏｕｎｔを維持する。特に、書き込みポインタは命令のスレッドコンテキストに関わりなく、書き込まれるべきＲＡＭ１５０６中の次の場所のアドレスを特定する。同様にｆｕｌｌ＿ｃｏｕｎｔは、命令のスレッドコンテキストに関わりなく、ＲＡＭ１５０６に命令が書き込まれる度に増分され、実行のために命令がコミットされる度に減分される。
【０１５９】
対照的にバッファ制御ロジック１５０２は、図３に関して上で説明されたものと同様の、各スレッドコンテキストのための別個の読み取りポインタ（ＲＰ）とコミットポインタ（ＣＰ）とｅｍｐｔｙ＿ｃｏｕｎｔとを維持する。特には、読み取りポインタは各々のスレッドコンテキストのために読み取られるべきＲＡＭ１５０６中の次の場所のアドレスを特定し、コミットポインタは各スレッドコンテキストのためにコミットされるべき次の命令のＲＡＭ１５０６中の場所のアドレスを示し、ｅｍｐｔｙ＿ｃｏｕｎｔは、各々のスレッドコンテキストのために命令がＲＡＭ１５０６に書き込まれる度に増分され、スケジューラ１０８が各々のスレッドコンテキストのためにＲＡＭ１５０６から命令を読み取る度に減分される。
【０１６０】
１つの実施形態で、バッファ制御ロジック１５０２は、命令がＲＡＭ１５０６にフェッチされた順序で、スレッドコンテキストのための有効命令のＲＡＭ１５０６内の場所を特定する各スレッドコンテキストのためのリンクリストを維持する。リンクリストは、命令がＲＡＭ１５０６に書き込まれる度に更新され、各スレッドコンテキストのために読み取りポインタおよびコミットポインタを更新するために使用される。
【０１６１】
バッファ制御ロジック１５０２は、スケジューラ１０８が命令を要求する場合にスケジューラ１０８からＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ信号２０８を受け取り、バッファ制御ロジック１５０２は、それに反応して命令ディスパッチのためにスレッドコンテキストのうちの１つを選択し、ＤＳ＿ＴＣ＿ｐｒｉｏｒｉｔｙ信号２０８によって示される最も高いプライオリティを備えたスレッドコンテキストの命令２０４をＲＡＭ１５０６に出力させるために、ＲＡＭ１５０６対して適切なアドレスを生成する。
【０１６２】
本発明ならびにその目的、機能および利点が詳細に説明されてきたが、その他の実施形態は本発明によって包含される。例えば、スケジューラ１０８が分岐され、パラメータ化されたリーキーバケットスケジューリングポリシーがプロセッサコア６０６の外部、すなわちプロセッサ１００のカスタマが変更することができる部分の外部にあるスケジューラ１０８の部分に含まれる実施形態が説明されてきたが、パラメータ化されたリーキーバケットスケジューラの使用は分岐型スケジューラに限定されるわけではなく、任意の様々な方法で分割されたスケジューラとともに、分岐型ではないスケジューラにも適合されてよいことを理解されたい。さらに、ポリシーマネージャ６０４がリーキーバケットスケジューリングポリシーを実施する分岐型スケジューラが説明されてきたが、分岐型スケジューラ１０８はリーキーバケットのスレッドスケジューリングポリシーに限定されるわけではなく、分岐型スケジューラのポリシーマネージャによって実施されるスレッドスケジューリングポリシーは、任意のスレッドスケジューリングアルゴリズムに従うものであってもよい。またさらに、ポリシーマネージャ６０４が、実行のために命令がコミットされたという指標に基づいて、スレッドコンテキストのプライオリティを更新する実施形態が説明されてきたが、別の実施形態では、ポリシーマネージャ６０４は、例えば（ＰＭ＿ＴＣ＿ｉｎｓｔ＿発行信号６４６によって示されるような）命令が発行されたという指標、命令が完了されたか、またはマイクロプロセッサ１００から廃棄されたという指標、または何らかのその他の命令の実行に関連した指標などの、プロセッサコア６０６からの別の情報に基づいてスレッドコンテキストのプライオリティを更新してもよい。さらに、ＴＣ＿ＲＡＴＥ９１２を用いてＴＣ＿ＬＥＶＥＬ９１８を更新するために特定の計算が説明されてきたが、ＴＣ＿ＬＥＶＥＬ９１８は、ＴＣ＿ＲＡＴＥ９１２を使用する別の方法によって更新されてもよい。
【０１６３】
上で本発明の様々な実施形態が説明されてきたが、それらは制限ではなく、例として示されたものであることを理解されたい。本発明の精神および範囲から逸脱することなく、本発明の中で形式および細部の様々な変更が行われることができることは、関連のコンピュータ技術の当業者であれば明らかであろう。
【０１６４】
一例として、（例えば中央処理ユニット（「ＣＰＵ」）、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、プロセッサコア、チップ上システム（「ＳＯＣ」）、または任意のその他のプログラム可能なデバイスの内部にあるか、またはそれらに結合された）ハードウェアを使用することに加えて、実施態様は、例えばソフトウェアをストアするように構成されたコンピュータ使用可能（例えば可読）媒体の中で処理される（例えばコンピュータ可読コード、プログラムコード、ソース、オブジェクト、またはマシン言語などの任意の形式で処理される命令および／またはデータなどの）ソフトウェアで具体化されてもよい。そのようなソフトウェアは、例えば本明細書で説明された装置および方法の機能、製造、モデル化、シミュレーション、記述および／またはテストを可能にすることができる。例えばこれは、一般的なプログラミング言語（例えばＣ、Ｃ＋＋）、ＧＤＳＩＩデータベース、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬ等を含めたハードウェア記述言語（ＨＤＬ）、またはその他の利用可能なプログラム、データベース、および／もしくは回路（すなわち回路図面）取り込みツールの使用を通じて達成されることができる。そのようなソフトウェアは、半導体、磁気ディスク、光ディスク（例えばＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等）を含む任意の知られているコンピュータ使用可能媒体の中で、コンピュータ使用可能（例えば可読）伝送媒体（例えば搬送波、またはデジタル、光もしくはアナログベースの媒体を含む任意のその他の媒体）中で具体化されるコンピュータデータ信号として処理されることができる。そのようにして、ソフトウェアは、インターネットまたはイントラネットを含む通信ネットワーク上で伝送されることができる。
【０１６５】
本明細書で説明される装置および方法は、（例えばＨＤＬで具体化される）マイクロプロセッサコアなどの半導体知的所有権コアの中に含まれ、集積回路の製造中にハードウェアに変形されてもよいことを理解されたい。さらに、本明細書で説明される装置および方法は、ハードウェアとソフトウェアの組合せとして具体化されてもよい。したがって、本発明は上述の例示的な実施形態のいかなるものによっても限定されるべきではなく、特許請求の範囲およびその均等物によってのみ定義されるべきである。
【図面の簡単な説明】
【０１６６】
【図１】本発明によるパイプライン化されたマルチスレッディングマイクロプロセッサを示すブロック図である。
【図２】特に本発明の１つの実施形態による命令／スキッドバッファである、図１のマイクロプロセッサの一部を示すブロック図である。
【図３】本発明による図２の命令／スキッドバッファのうちの１つを例示する命令／スキッドバッファと、関連した制御ロジックとを示すブロック図である。
【図４】本発明による図３の命令／スキッドバッファの動作を示す４つのフローチャートである。
【図５】本発明による、実行帯域幅の利用を向上させるためにストールされたスレッドコンテキストをフラッシュするための図１のマイクロプロセッサの動作を示すフローチャートである。
【図６】本発明の１つの実施形態による図１のマイクロプロセッサの中の分岐されたスケジューラを示すブロック図である。
【図７】本発明による図６のディスパッチスケジューラと図２の命令選択ロジックとをより詳細に示すブロック図である。
【図８】本発明による図７のディスパッチスケジューラの動作を示すフローチャートである。
【図９】本発明による図６のポリシーマネージャとＴＣスケジュールレジスタとを示すブロック図である。
【図１０】本発明による図９のポリシーマネージャの動作を示すフローチャートである。
【図１１】本発明の代替実施形態による図６のディスパッチスケジューラと図２の命令選択ロジックとをより詳細に示すブロック図である。
【図１２】本発明による図１１のディスパッチスケジューラの動作を示すフローチャートである。
【図１３】本発明の代替実施形態による図１のマイクロプロセッサの共有型の動的割当可能なスキッドバッファを示すブロック図である。
【図１４】本発明による図１３のスキッドバッファの動作を示す３つのフローチャートである。
【図１５】本発明の代替実施形態による図１のマイクロプロセッサの単一の共有型命令／スキッドバッファを示すブロック図である。
【図１】
2008530655.tif 000006
【図２】
2008530655.tif 000007
【図３】
2008530655.tif 000008
【図４】
2008530655.tif 000009
【図５】
2008530655.tif 000010
【図６】
2008530655.tif 000011
【図７】
2008530655.tif 000012
【図８】
2008530655.tif 000013
【図９】
2008530655.tif 000014
【図１０】
2008530655.tif 000015
【図１１】
2008530655.tif 000016
【図１２】
2008530655.tif 000017
【図１３】
2008530655.tif 000018
【図１４】
2008530655.tif 000019
【図１５】
2008530655.tif 000020
【国際調査報告】
2008530655.tif 000021
2008530655.tif 000022
2008530655.tif 000023
2008530655.tif 000024
2008530655.tif 000025
2008530655.tif 000026
2008530655.tif 000027
2008530655.tif 000028
2008530655.tif 000029