(57)【要約】  マルチスレッド化されたマイクロプロセッサ内で実行するためのｙｉｅｌｄ命令を開示する。このｙｉｅｌｄ命令は、１つのオペランドを含む。オペランドがゼロである場合、マイクロプロセッサは、このｙｉｅｌｄ命令を含むプログラムスレッドを終了させる。オペランドが−１である場合、マイクロプロセッサは、プログラムスレッドを無条件にスケジュール変更する。オペランドが正の整数である場合、マイクロプロセッサは、そのオペランドを、割り込み信号などの１つまたは複数のｙｉｅｌｄクォリファイヤ入力を指定するビットベクトルとみなし、そのクォリファイヤ入力およびビットベクトルの値に基づいてスレッドを条件付きでスケジュール変更する。マイクロプロセッサは、また、クォリファイヤ入力のビットベクトルを指定するマスクレジスタを含む。オペランドが、マスクレジスタ内では指定されていないクォリファイヤ入力を指定する場合、命令に対する例外が立てられる。命令は、マスクレジスタの値によって条件付けられたクォリファイヤ入力の値を指定する値を戻す。
2007504539.tif 000002
【特許請求の範囲】
【請求項１】
並行したプログラムスレッドを実行するように構成されているマイクロプロセッサで実行するためのｙｉｅｌｄ命令であって、
スレッドの実行を一時停止するようマイクロプロセッサに指示するためのオペコードを含み、ｙｉｅｌｄ命令が、前記スレッド内の命令であり、
前記ｙｉｅｌｄ命令がさらに、
１つのオペランドを含み、前記オペランドが第１の所定の値である場合には、マイクロプロセッサが、前記スレッドの実行を終了させ、前記オペランドが第２の所定の値である場合には、マイクロプロセッサが、実行用に前記スレッドを無条件にスケジュール変更する、命令。
【請求項２】
前記オペランドが、マイクロプロセッサのレジスタ内に保存されている、請求項１に記載の命令。
【請求項３】
前記レジスタが、命令によって指定される複数の汎用レジスタのうちの１つである、請求項１に記載の命令。
【請求項４】
前記オペランドが、スタックメモリ内に保存されている、請求項１に記載の命令。
【請求項５】
実行用に前記スレッドをスケジュール変更するマイクロプロセッサが、スレッドスケジューリングポリシーに従って前記スレッドを実行に適格であると指定するマイクロプロセッサを含む、請求項１に記載の命令。
【請求項６】
前記オペランドが所定の値のセット内の値である場合に、マイクロプロセッサが、実行用に前記スレッドを条件付きでスケジュール変更し、前記所定の値のセットが、前記第１および第２の所定の値を除く、請求項１に記載の命令。
【請求項７】
実行用に前記スレッドを条件付きでスケジュール変更するマイクロプロセッサが、前記オペランドによって指定された条件が満たされて初めて、スレッドスケジューリングポリシーに従って前記スレッドを実行に適格であると指定するマイクロプロセッサを含む、請求項６に記載の命令。
【請求項８】
前記オペランドが、複数のクォリファイヤ入力の１つまたは複数を指定し、前記複数のクォリファイヤ入力の前記１つまたは複数のうちの少なくとも１つが真である場合に、前記条件が満たされる、請求項７に記載の命令。
【請求項９】
命令の結果値を受け取るための第２のオペランドをさらに含み、前記結果値が、前記命令に応答してサンプリングされた前記複数のクォリファイヤ入力の状態を指定する、請求項８に記載の命令。
【請求項１０】
前記結果値が、１つのビットベクトルを含む、請求項９に記載の命令。
【請求項１１】
前記オペランドが、マイクロプロセッサのプログラム可能なマスクレジスタ内で指定されていない、マイクロプロセッサによって受け取られた前記複数のクォリファイヤ入力のうちの１つまたは複数を指定する場合に、マイクロプロセッサが、ｙｉｅｌｄ命令に対して例外を立てる、請求項８に記載の命令。
【請求項１２】
前記所定の値のセットが、正の整数を含む、請求項６に記載の命令。
【請求項１３】
命令の結果値を受け取るための第２のオペランドをさらに含む、請求項１に記載の命令。
【請求項１４】
前記第２のオペランドが、マイクロプロセッサのレジスタ内に保存されている、請求項１３に記載の命令。
【請求項１５】
前記レジスタが、命令によって指定される複数の汎用レジスタのうちの１つである、請求項１４に記載の命令。
【請求項１６】
前記第２のオペランドが、スタックメモリ内に保存されている、請求項１に記載の命令。
【請求項１７】
前記スレッドの実行を一時停止するマイクロプロセッサが、前記スレッド内の命令をフェッチおよび発行することを停止するマイクロプロセッサを含む、請求項１に記載の命令。
【請求項１８】
前記スレッドの実行を終了させるマイクロプロセッサが、前記スレッド内の命令をフェッチおよび発行することを終了させるマイクロプロセッサを含む、請求項１に記載の命令。
【請求項１９】
前記スレッドの実行を終了させるマイクロプロセッサが、それまで前記スレッドの実行用として割り当てられていたハードウェアリソースを解放して、前記解放されたハードウェアリソースを、別のスレッドによる割り当てに利用できるようにするマイクロプロセッサを含む、請求項１に記載の命令。
【請求項２０】
前記ハードウェアリソースが、プログラムカウンタレジスタを含む、請求項１９に記載の命令。
【請求項２１】
前記ハードウェアリソースが、汎用レジスタのセットを含む、請求項１９に記載の命令。
【請求項２２】
前記第１の所定の値が、ゼロ（０）である、請求項１に記載の命令。
【請求項２３】
前記第２の所定の値が、マイナス１（−１）である、請求項１に記載の命令。
【請求項２４】
前記スレッドが、プログラム命令のシーケンスを含む、請求項１に記載の命令。
【請求項２５】
前記スレッドが、前記プログラム命令のシーケンスの実行に関連付けられているマイクロプロセッサの状態変化のシーケンスをさらに含む、請求項２４に記載の命令。
【請求項２６】
命令を含むプログラムスレッドの実行を選択的にスケジュールするかまたは終了させるようマイクロプロセッサに指示する命令を実行するためのマイクロプロセッサであって、
１つのオペランドと、
前記オペランドが第１の所定の値である場合には、スレッドの実行を終了させ、また前記オペランドが第２の所定の値である場合には、実行用にスレッドをスケジュールするための、前記オペランドを受け取るために結合されているスケジューラとを含む、マイクロプロセッサ。
【請求項２７】
命令の前記オペランドを保存するためのレジスタをさらに含む、請求項２６に記載のマイクロプロセッサ。
【請求項２８】
前記レジスタが、命令によって指定される汎用レジスタを含む、請求項２７に記載のマイクロプロセッサ。
【請求項２９】
対応する複数のイベントを示すための、前記スケジューラに結合されている複数の入力をさらに含み、
前記オペランドが、前記第１および第２の所定の値を除く所定の値のセット内にある場合に、前記オペランドが、前記複数の入力の１つまたは複数を指定するビットベクトルである、請求項２６に記載のマイクロプロセッサ。
【請求項３０】
前記オペランドが前記所定の値のセット内にある場合に、前記ビットベクトルによって指定される前記複数の入力の前記１つまたは複数のうちの少なくとも１つが真になるまで、前記スケジューラがスレッドの実行を一時停止する、請求項２９に記載のマイクロプロセッサ。
【請求項３１】
前記複数の入力のうちの少なくとも１つが、マイクロプロセッサの外部で生成された信号を受け取る、請求項２９に記載のマイクロプロセッサ。
【請求項３２】
前記複数の入力のうちの少なくとも１つが、マイクロプロセッサの内部で生成された信号を受け取る、請求項２９に記載のマイクロプロセッサ。
【請求項３３】
前記複数の入力のうちの１つまたは複数を指定する値を保存するための、前記スケジューラに結合されているマスクレジスタをさらに含む、請求項２９に記載のマイクロプロセッサ。
【請求項３４】
前記オペランドが前記所定の値のセット内にある場合に、前記オペランドが、前記マスクレジスタの値によって指定されていない前記複数の入力のうちの１つまたは複数を指定すると、マイクロプロセッサが、命令に対して例外を立てる、請求項３３に記載のマイクロプロセッサ。
【請求項３５】
命令の結果値を保存するための、前記複数の入力および前記マスクレジスタに結合されている第２のレジスタをさらに含み、前記結果値が、前記命令に応答してサンプリングされて前記マスクレジスタの値によって条件付けられた前記複数の入力の状態を指定する、請求項３３に記載のマイクロプロセッサ。
【請求項３６】
命令の結果値を保存するための、前記複数の入力に結合されている第２のレジスタをさらに含み、前記結果値が、前記命令に応答してサンプリングされた前記複数の入力の状態を指定する、請求項２９に記載のマイクロプロセッサ。
【請求項３７】
前記第１の所定の値が、ゼロ（０）であり、前記第２の所定の値が、マイナス１（−１）である、請求項２６に記載のマイクロプロセッサ。
【請求項３８】
マイクロプロセッサ内でプログラムスレッドの実行を選択的に一時停止するかまたは終了させる方法であって、
プログラムスレッド内に、１つのオペランドを指定する命令を発行するステップと、
オペランドが第１の所定の値である場合に、スレッドの実行を終了させるステップと、
オペランドが第２の所定の値である場合に、スレッドの実行を無条件にスケジュール変更するステップとを含み、前記第１の所定の値と前記第２の所定の値が異なる、方法。
【請求項３９】
マイクロプロセッサが、イベント信号をモニタするように構成され、オペランドが所定の値のセット内にある場合に、オペランドが、イベント信号の１つまたは複数を指定し、
オペランドが所定の値のセット内にある場合に、オペランドによって指定されたイベント信号の１つまたは複数のうちの少なくとも１つが真になるまで、スレッドの実行を一時停止するステップをさらに含む、請求項３８に記載の方法。
【請求項４０】
前記発行するステップの後に、１つまたは複数のイベント信号の値をサンプリングするステップと、
サンプリングされた値を命令の結果値として保存するステップとをさらに含む、請求項３９に記載の方法。
【請求項４１】
サンプリングされた値を保存する前記ステップが、サンプリングされた値を、命令によって指定された結果レジスタ内に保存するステップを含む、請求項４０に記載の方法。
【請求項４２】
オペランドによって指定されたイベント信号の１つまたは複数のうちのすべてが、マイクロプロセッサのマスクレジスタ内でも指定されているかどうかを判定するステップと、
オペランドによって指定されたイベント信号の１つまたは複数のうちのすべてより少ないイベント信号が、マスクレジスタ内でイネーブルされていない場合に、命令に対して例外を立てるステップとをさらに含む、請求項３９に記載の方法。
【請求項４３】
オペランドによって指定されたイベント信号の１つまたは複数のうちの少なくとも１つがいったん真になると、実行用にスレッドをスケジュール変更するステップをさらに含む、請求項３９に記載の方法。
【請求項４４】
第１の所定の値が、ゼロ（０）であり、第２の所定の値が、マイナス１（−１）であり、所定の値のセットが、正の整数を含む、請求項３９に記載の方法。
【請求項４５】
オペランドが第１の所定の値である場合に、それまでスレッドに割り当てられていたスレッドコンテキストを、新たなスレッドによるその後の使用のために解放するステップをさらに含む、請求項３８に記載の方法。
【請求項４６】
第１の所定の値が、ゼロ（０）であり、第２の所定の値が、マイナス１（−１）である、請求項３８に記載の方法。
【請求項４７】
複数の信号ソースと、
プログラムスレッド内の命令を実行し、命令のオペランドが第１の所定の値である場合には、前記スレッドの実行を終了させ、そうでない場合には、前記オペランドによって指定された前記複数の信号のうちの１つまたは複数の条件に基づいて実行用に前記スレッドをスケジュール変更するように構成されている、前記複数の信号ソースによって生成される複数の信号を受け取るために結合されているマイクロプロセッサとを含む、処理システム。
【請求項４８】
前記マイクロプロセッサが、前記オペランドが第２の所定の値である場合に、実行用に前記スレッドを無条件にスケジュール変更するように構成されている、請求項４７に記載の処理システム。
【請求項４９】
前記マイクロプロセッサが、前記オペランドが前記第１および第２の所定の値を除く所定の値のセット内にある場合に、前記オペランドによって指定された前記複数の信号のうちの１つまたは複数の前記条件に基づいて、実行用に前記スレッドを条件付きでスケジュール変更するように構成されている、請求項４８に記載の処理システム。
【請求項５０】
前記複数の信号ソースのうちの少なくとも１つが、入力／出力デバイスを含む、請求項４７に記載の処理システム。
【請求項５１】
命令が、前記複数の信号の値を示すオペランドを戻す、請求項４７に記載の処理システム。
【請求項５２】
前記複数の信号ソースを前記マイクロプロセッサへの複数の入力にマップするための、前記複数の信号ソースと前記マイクロプロセッサとの間に結合されている複数のレジスタをさらに含む、請求項４７に記載の処理システム。
【請求項５３】
前記マイクロプロセッサが、
前記複数の信号を複数のクォリファイヤ入力にマップするための、前記複数の信号を受け取るために結合されている複数のレジスタをさらに含み、前記オペランドが、実行用に前記スレッドを条件付きでスケジュール変更するための前記条件を決定するために、前記クォリファイヤ入力上でマイクロプロセッサによって実行されるブール関数を指定する、請求項４７に記載の処理システム。
【請求項５４】
前記マイクロプロセッサが、
前記オペランドを保存するために結合されているレジスタをさらに含む、請求項４７に記載の処理システム。
【請求項５５】
中に含まれているオペランドスタック内に前記オペランドを保存するための、前記マイクロプロセッサに結合されているメモリをさらに含む、請求項４７に記載の処理システム。
【請求項５６】
コンピューティングデバイスと共に使用するためのコンピュータプログラム製品であって、
コンピュータで使用可能なメディアであって、マイクロプロセッサに指示する命令を実行するためのマイクロプロセッサに、命令を含むプログラムスレッドの実行を選択的にスケジュールさせるかまたは終了させるための、前記メディア内で具体化されるコンピュータ可読プログラムコードを有する、コンピュータで使用可能なメディアを含み、前記コンピュータ可読プログラムコードが、
命令のオペランドを提供するための第１のプログラムコードと、
前記オペランドが第１の所定の値である場合には、スレッドの実行を終了させ、前記オペランドが第２の所定の値である場合には、実行用にスレッドをスケジュールするための、前記オペランドを受け取るために結合されている、スケジューラを提供するための第２のプログラムコードとを含む、コンピュータプログラム製品。
【請求項５７】
前記コンピュータ可読プログラムコードが、
対応する複数のイベントを示すための、前記スケジューラに結合されている、複数の入力を提供するための第３のプログラムコードをさらに含み、前記オペランドが、前記第１および第２の所定の値を除く所定の値のセット内にある場合に、前記オペランドが、前記複数の入力のうちの１つまたは複数を指定するビットベクトルである、請求項５６に記載のコンピュータプログラム製品。
【請求項５８】
前記コンピュータ可読プログラムコードが、
前記複数の入力のうちの１つまたは複数を指定する値を保存するための、前記スケジューラに結合されている、マスクレジスタを提供するための第４のプログラムコードをさらに含む、請求項５７に記載のコンピュータプログラム製品。
【請求項５９】
前記コンピュータ可読プログラムコードが、
命令の結果値を保存するための、前記複数の入力および前記マスクレジスタに結合されている、第２のレジスタを提供するための第５のプログラムコードをさらに含み、前記結果値が、前記命令に応答してサンプリングされて前記マスクレジスタの値によって条件付けられた前記複数の入力の状態を指定する、請求項５８に記載のコンピュータプログラム製品。
【請求項６０】
伝送メディアで具体化されるコンピュータデータ信号であって、
命令を含むプログラムスレッドの実行を選択的にスケジュールするかまたは終了させるようマイクロプロセッサに指示する命令を実行するためのマイクロプロセッサを提供するためのコンピュータ可読プログラムコードを含み、前記コンピュータ可読プログラムコードが、
命令のオペランドを保存するための、レジスタを提供するための第１のプログラムコードと、
前記オペランドが第１の所定の値である場合には、スレッドの実行を終了させ、前記オペランドが第２の所定の値である場合には、実行用にスレッドをスケジュールするための、前記レジスタに結合されている、スケジューラを提供するための第２のプログラムコードとを含む、コンピュータデータ信号。
【請求項６１】
前記コンピュータ可読プログラムコードが、
対応する複数のイベントを示すための、前記スケジューラに結合されている、複数の入力を提供するための第３のプログラムコードをさらに含み、前記オペランドが、前記第１および第２の所定の値を除く所定の値のセット内にある場合に、前記オペランドが、前記複数の入力のうちの１つまたは複数を指定するビットベクトルである、請求項６０に記載のコンピュータデータ信号。
【請求項６２】
前記コンピュータ可読プログラムコードが、
前記複数の入力のうちの１つまたは複数を指定する値を保存するための、前記スケジューラに結合されている、マスクレジスタを提供するための第４のプログラムコードをさらに含む、請求項６１に記載のコンピュータデータ信号。
【請求項６３】
前記コンピュータ可読プログラムコードが、
命令の結果値を保存するための、前記複数の入力および前記マスクレジスタに結合されている、第２のレジスタを提供するための第５のプログラムコードをさらに含み、前記結果値が、前記命令に応答してサンプリングされて前記マスクレジスタの値によって条件付けられた、前記複数の入力の状態を指定する、請求項６２に記載のコンピュータデータ信号。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、下記の同時係属の米国特許非仮出願の一部継続出願（ＣＩＰ）であり、これらの米国特許非仮出願については、その全体をすべての目的から参照によって本明細書に組み込む。
【表１】
2007504539.tif 000003
【０００２】
上記の同時係属の米国特許非仮出願は、下記の米国特許仮出願の恩恵について請求するものであり、これらの米国特許仮出願のそれぞれの恩恵については、本出願でも請求しており、これらの米国特許仮出願については、その全体をすべての目的から参照によって本明細書に組み込む。
【表２】
2007504539.tif 000004
【０００３】
本出願は、下記の米国特許非仮出願に関連し、これらと同時に出願されたものであり、これらの米国特許非仮出願については、その全体をすべての目的から参照によって本明細書に組み込む。
【表３】
2007504539.tif 000005
【０００４】
本発明は、デジタルプロセッサ（たとえばマイクロプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラなど）の分野におけるものであり、より詳細には、シングルプロセッサにおいて複数のスレッドの実行を管理することに関連する装置および方法に関する。
【背景技術】
【０００５】
デジタルコンピューティングの領域において、演算能力の発展の歴史には、多くの分野における着実な進歩が含まれる。たとえば、プロセッサに対するデバイスの密度、演算の速度に影響を与える相互接続技術、より高速のクロック速度を許容して使用する能力、およびさらに多くの分野において、着実な進歩がもたらされている。全般的な演算能力に影響を与える別の分野は、並列処理の分野であり、この分野には、複数の別個のプロセッサによる並列演算以上のものが含まれる。
【０００６】
並列処理という概念には、複数の別個のプロセッサの間でタスクを分担する能力が含まれるが、シングルプロセッサで複数のプログラムを並行して実行するためのスキームも含まれる。このスキームは、一般にマルチスレッディングと呼ばれる。
【０００７】
マルチスレッディングという概念は、次のように説明される。プロセッサの演算頻度が高まるにつれて、コンピュータシステムの演算につきものの待ち時間を感じさせないようにすることが、ますます困難になる。所与のアプリケーション内の命令の１％に関するデータキャッシュにおいてミスを犯すハイエンドのプロセッサは、外部ＲＡＭに対して５０サイクルの待ち時間を有する場合、約５０％の時間にわたって失速する可能性がある。キャッシュミスの間にプロセッサが失速しているときに、別のアプリケーションに向けられた命令を実行することができれば、プロセッサのパフォーマンスを改善することができ、効果的にメモリの待ち時間の一部または全体を感じさせないようにすることができる。たとえば図１Ａは、キャッシュミスを経験して失速している単一の命令ストリーム１０１を示している。サポートするマシンは、一度に単一のスレッドまたはタスクを実行することしかできない。対照的に、図１Ｂは、ストリーム１０１が失速している間に実行できる命令ストリーム１０２を示している。この場合、サポートするマシンは、２つのスレッドを並行してサポートすることができ、これによってそのリソースをより効率よく利用することができる。
【０００８】
より一般的には、個々のコンピュータ命令は固有のセマンティクスを有し、これによって、異なるクラスの命令は、所望の演算を実行するために異なるリソースを必要とする。レジスタのシフトがロード／ストアユニットのリソースを必要としないのと同様に、整数のロードでは、浮動小数点ユニットの論理またはレジスタを利用しない。単一の命令が、プロセッサのリソースのすべてを消費することはなく、また平均的な命令によって使用されるプロセッサリソース全体の比率は、より多くのパイプラインステージおよび並列機能ユニットが、パフォーマンスの高い設計に追加されるにつれて低下する。
【０００９】
単一の順次処理型のプログラムでは、基本的にプロセッサのリソースを十分に効率よく活用できない場合、プロセッサは、プログラムを実行する複数の並行するスレッドの間で、それらのリソースの一部を共有できるべきであるという考えから、マルチスレッディングが大いに行われている。結果としては、必ずしもいずれかの特定のプログラムがより速く実行されるようにはならず、実際には、いくつかのマルチスレッディングスキームによって、プログラムを実行する単一のスレッドのパフォーマンスは実質的に低下するが、これによって、並行する命令ストリームの集合全体は、より短い時間で、および／またはより少ない数のプロセッサ上で実行することができる。この概念は、図２Ａおよび図２Ｂに示されており、この図２Ａおよび図２Ｂは、シングルスレッドプロセッサ２１０およびデュアルスレッドプロセッサ２５０をそれぞれ示している。プロセッサ２１０は、単一のスレッド２１２をサポートし、これは、ロード／ストアユニット２１４を利用して示されている。キャッシュ２１６にアクセスしている間にミスが発生した場合、行方不明のデータが検索されるまで、プロセッサ２１０は（図１Ａに従って）失速することになる。このプロセスの間、乗算／除算ユニット２１８は、休止して活用されないままとなる。しかしプロセッサ２５０は、２つのスレッド、すなわち２１２および２６２をサポートする。したがって、スレッド２１２が失速した場合、プロセッサ２５０は、スレッド２６２および乗算／除算ユニット２１８を並行して利用することができ、これによって、（図１Ｂに従って）そのリソースをよりよく利用することができる。
【００１０】
しかしシングルプロセッサのマルチスレッディングは、改善されたマルチタスクのスループットを上回る利点を提供することができる。プログラムスレッドを重要なイベントに結び付けることによって、イベントへの応答時間を短縮することができ、スレッドレベルの並列性は、原則として、単一のアプリケーションプログラム内で利用することができる。
【００１１】
複数の多様なマルチスレッディングが提案されている。それらの１つが、インターリーブドマルチスレッディングであり、これは、発行されるそれぞれの命令ごとに、１つのスレッドから別のスレッドへ切り替える、時分割マルチプレックス（ＴＤＭ）（ｔｉｍｅ−ｄｉｖｉｓｉｏｎ  ｍｕｌｔｉｐｌｅｘｅｄ）スキームである。このスキームは、スケジューリングにおいて一定の「公平性」を課すが、スレッドに対するスロットの発行を静的に割り当てる実装形態は、一般に単一のプログラムスレッドのパフォーマンスを制限する。動的なインターリービングは、この問題を改善するが、実施するには、かえって複雑である。
【００１２】
別のマルチスレッディングスキームが、ブロックドマルチスレッディングであり、このスキームは、キャッシュミスやリプレイトラップなど、何らかの指定されたブロッキングイベントによって、たとえばそのスレッドが一時停止されて別のスレッドがアクティブ化されるまで、単一のプログラムスレッドから連続した命令を発行する。ブロックドマルチスレッディングは、スレッドを変更する頻度が低いため、その実装形態は、簡略化することができる。その一方で、ブロッキングは、スレッドのスケジューリングにおける「公平性」が低い。単一のスレッドが、幸運にもそのデータのすべてをキャッシュ内で見つけるのに十分な場合、長時間にわたってプロセッサを独占することがある。ブロックドマルチスレッディングの要素とインターリーブドマルチスレッディングの要素を組み合わせた複合型のスケジューリングスキームも構築され、研究されている。
【００１３】
さらに別の形態のマルチスレッディングが、同時マルチスレッディングであり、これは、スーパースケーラプロセッサで実施されるスキームである。同時マルチスレッディングでは、別々のスレッドからの命令を、並行して発行することができる。たとえばスーパースケーラ縮小命令セットコンピュータ（ＲＩＳＣ）（ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｅｒ）が、サイクルごとに最大２つの命令を発行し、同時マルチスレッド化されたスーパースケーラパイプラインが、２つのスレッドのどちらかからサイクルごとに最大２つの命令を発行すると仮定する。依存状態や失速によって、単一のプログラムスレッドではプロセッサを十分に活用できなかったこれらのサイクルが、別のスレッド用の命令を発行することによって満たされる。
【００１４】
同時マルチスレッディングは、スーパースケーラパイプラインにおいて失われた効率性を回復するためのこのように非常に強力な技術である。これはまた、所与のサイクルで複数のスレッドをアクティブにすることができ、メモリアクセス保護の実装形態が複雑になることなどのため、実装する上では、おそらく間違いなく最も複雑なマルチスレッディングシステムである。おそらくは注目に値することだが、所与の作業負荷に関して、中央処理ユニット（ＣＰＵ）（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）のオペレーションを完全にパイプライン化できればできるほど、マルチスレッディングを実装することに対して効率面で見込まれる利得は小さくなる。
【００１５】
マルチスレッディングとマルチプロセッシングは、密接に関連している。実際に、その違いは程度の違いにすぎないと言える。マルチプロセッサは、メモリおよび／または接続性のみを共有するが、マルチスレッド化されたプロセッサは、メモリおよび／または接続性を共有し、命令のフェッチおよび発行論理、ならびに場合によってはその他のプロセッサリソースも共有する。単一のマルチスレッド化されたプロセッサでは、さまざまなスレッドが、発行スロットおよびその他のリソースを求めて競合し、これによって並列性が制限される。いくつかのマルチスレッド化されたプログラミングモデルおよびアーキテクチャモデルでは、新しいスレッドは、十分に並列に実行するために、別個のプロセッサに割り当てられることを前提とする。
【発明の開示】
【発明が解決しようとする課題】
【００１６】
本出願の提出時に利用可能であった現況技術のマルチスレッディングソリューションに伴う複数の顕著な問題が存在する。これらの１つが、リアルタイムのスレッドの扱いである。通常、リアルタイムのマルチメディアアルゴリズムは、サービス品質（ＱｏＳ）（ｑｕａｌｉｔｙ−ｏｆ−ｓｅｒｖｉｃｅ）および応答時間を確保するために、専用のプロセッサ／ＤＳＰで実行され、複数のスレッドの混合した中に含まれてマルチスレッディングスキーム内で共有されることはない。これは、リアルタイムのソフトウェアが、タイムリーな形で実行されることを容易には保証できないためである。
【００１７】
この点において明らかに必要とされているのは、１つまたは複数のリアルタイムのスレッドまたは仮想プロセッサが、命令と命令の間に指定の間隔を保ちつつ、マルチスレッド化されたプロセッサ内に指定の割合の命令発行スロットを保証され、これによって計算帯域幅および応答時間を、うまく規定できるようにするスキームおよびメカニズムである。このようなメカニズムが利用可能ならば、厳格なＱｏＳ要件を伴うスレッドを、マルチスレッディングの混合の中に含めることができる。さらに、このようなシステムにおける（ＤＳＰ関連のスレッドなどの）リアルタイムのスレッドは、割り込みを受けることを何らかの形で免れることができ、実行時間の変動の重大な要因が取り除かれる。この種の技術は、消費者向けマルチメディアアプリケーションにおいて別々のＲＩＳＣコアとＤＳＰコアを使用する代わりに、ＤＳＰによって強化されたＲＩＳＣプロセッサおよびコアを受け入れる上で決定的に重要となる可能性が高い。
【００１８】
本出願の出願時における現況技術のマルチスレッディングスキームに伴う別の顕著な問題は、プロセッサ内でアクティブなスレッドを作成および破棄することにある。相対的にきめ細かいマルチスレッディングをサポートするには、プログラムを実行する並列のスレッドが、可能な最小限のオーバーヘッドで、かつ少なくとも通常の場合は、オペレーティングシステムの介入を必要とすることなく、作成および破棄されることが望ましい。この点において明らかに必要とされているのは、ある種のＦＯＲＫ（スレッドの作成）命令およびＪＯＩＮ（スレッドの終了）命令である。スレッドが何らかのリソースによってブロックされるまで、スケジューリングポリシーがスレッドを実行させる状況において、リソースによるブロックのないスレッドが、それにもかかわらずプロセッサを他の何らかのスレッドに明け渡す必要がある場合に、マルチスレッド化されたプロセッサに関する別の問題が存在する。この点において明らかに必要とされているのは、明確なＰＡＵＳＥまたはＹＩＥＬＤ命令である。さらにマイクロプロセッサ命令セットのオペコードスペースは、アーキテクチャ上の貴重なリソースであり、こうしたリソースは、とりわけＲＩＳＣ命令セット内では限定される可能性がある。したがって必要とされているのは、オペコードスペースを節約するために、ＦＯＲＫ、ＪＯＩＮ、およびＹＩＥＬＤタイプの命令のうちの２つまたはそれ以上を組み合わせて、単一の命令デコードにするための手段である。
【課題を解決するための手段】
【００１９】
一態様では、本発明は、並行したプログラムスレッドを実行するように構成されているマイクロプロセッサで実行するためのｙｉｅｌｄ命令を提供する。この命令は、スレッドの実行を一時停止するようマイクロプロセッサに指示するオペコードを含む。このｙｉｅｌｄ命令は、そのスレッド内の命令である。この命令はまた、１つのレジスタを指定する１つのオペランドを含む。レジスタが、第１の所定の値を含む場合、マイクロプロセッサは、スレッドの実行を終了させる。レジスタが、第２の所定の値を含む場合、マイクロプロセッサは、実行用にスレッドを無条件にスケジュール変更する。レジスタが、所定の値のセット内の値を含む場合、マイクロプロセッサは、実行用にスレッドを条件付きでスケジュール変更する。この所定の値のセットは、第１および第２の所定の値を除く。
【００２０】
さらに別の態様では、本発明は、命令を含むプログラムスレッドの実行を選択的にスケジュールするかまたは終了させるよう、マイクロプロセッサに指示する命令を実行するためのマイクロプロセッサを提供する。マイクロプロセッサは、命令のオペランドを保存するためのレジスタと、そのレジスタに結合されているスケジューラとを含む。スケジューラは、オペランドが第１の所定の値である場合には、スレッドの実行を終了させ、またオペランドが第２の所定の値である場合には、実行用にスレッドをスケジュールする。
【００２１】
さらに別の態様では、本発明は、イベント信号を受け取るマイクロプロセッサ内でプログラムスレッドの実行を選択的に一時停止するかまたは終了させる方法を提供する。この方法は、プログラムスレッド内の命令を発行するステップを含む。その命令は、第１の所定の値、第２の所定の値、またはその第１および第２の所定の値を除く所定の値のセット内の値を指定する、１つのオペランドを指定する。このオペランドは、所定の値のセット内にある場合に、イベント信号の１つまたは複数を指定する。この方法は、オペランドが第１の所定の値である場合に、スレッドの実行を終了させるステップをさらに含む。この方法は、オペランドが第２の所定の値である場合に、スレッドの実行を無条件にスケジュール変更するステップをさらに含む。この方法は、オペランドが所定の値のセット内にある場合に、そのオペランドによって指定されたイベント信号の１つまたは複数のうちの少なくとも１つが真になるまで、スレッドの実行を一時停止するステップをさらに含む。
【００２２】
さらに別の態様では、本発明は、１つの処理システムを提供する。この処理システムは、複数の信号ソースと、その複数の信号ソースによって生成される複数の信号を受け取るために結合されているマイクロプロセッサとを含む。マイクロプロセッサは、プログラムスレッド内の命令を実行する。マイクロプロセッサは、命令のオペランドが第１の所定の値である場合には、スレッドの実行を終了させ、そうでない場合には、オペランドによって指定された複数の信号のうちの１つまたは複数の条件に基づいて実行用にスレッドをスケジュール変更する。
【００２３】
さらに別の態様では、本発明は、コンピューティングデバイスと共に使用するためのコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、マイクロプロセッサに指示する命令を実行するためのマイクロプロセッサに、その命令を含むプログラムスレッドの実行を選択的にスケジュールさせるかまたは終了させるための、メディアで具体化されるコンピュータ可読プログラムコードを有する、コンピュータで使用可能なメディアを含む。このコンピュータ可読プログラムコードは、命令のオペランドを保存するレジスタを提供するための第１のプログラムコードを含む。このコンピュータ可読プログラムコードはまた、オペランドが第１の所定の値である場合には、スレッドの実行を終了させ、オペランドが第２の所定の値である場合には、実行用にスレッドをスケジュールする、レジスタに結合されている、スケジューラを提供するための第２のプログラムコードを含む。
【００２４】
さらに別の態様では、本発明は、伝送メディアで具体化されるコンピュータデータ信号を提供し、このコンピュータデータ信号は、命令を含むプログラムスレッドの実行を選択的にスケジュールするかまたは終了させるよう、マイクロプロセッサに指示する命令を実行するためのマイクロプロセッサを提供するための、コンピュータ可読プログラムコードを含む。このプログラムコードは、命令のオペランドを保存するレジスタを提供するための第１のプログラムコードを含む。このプログラムコードはまた、オペランドが第１の所定の値である場合には、スレッドの実行を終了させ、オペランドが第２の所定の値である場合には、実行用にスレッドをスケジュールする、レジスタに結合されている、スケジューラを提供するための第２のプログラムコードを含む。
【００２５】
このＹＩＥＬＤ命令の利点は、きわめてわずかなオーバーヘッドで、典型的にはＲＩＳＣ方式における単一のクロックサイクルで、通常の場合はオペレーティングシステムの介入を必要とすることなく、プロセッサの実行を別のスレッドに明け渡すためのプログラム用の手段を提供することである。したがって、たとえば組み込みシステムは、割り込みサービスルーチンを別々のスレッドへと変換することができ、そのスレッドが、１つのＹＩＥＬＤ命令を含み、そのＹＩＥＬＤ命令が、割り込みソースが１つのイベントを示すまでスレッドを一時停止し、その時点でスレッドがスケジュール変更され、これによって、本質的にオーバーヘッドがゼロの割り込みサービスが達成される。有利なことに、このＹＩＥＬＤ命令は、プログラムスレッドの実行を効率よく一時停止する能力と、プログラムスレッドの終了とを単一の命令に統合し、これによって命令セット内の貴重なオペコードスペースを節約する。最後に、このＹＩＥＬＤ命令が、命令に対する入力オペランドの値に基づいて、スレッドを条件付きで終了させるための手段を提供するという事実によって、マルチスレッド化されたコードをよりコンパクトにすることができ、マイクロプロセッサパイプライン内でさらに効率よく実行することができる。
【発明を実施するための最良の形態】
【００２６】
本発明の一実施形態では、プロセッサアーキテクチャは、互換プロセッサでマルチスレッディングを使用可能にする機能、関数、および命令を備える命令セットを含む。本発明は、いずれの特定のプロセッサアーキテクチャおよび命令セットにも限定されるものではないが、典型的な例として、よく知られているＭＩＰＳのアーキテクチャ、命令セット、およびプロセッサ技術（「ＭＩＰＳ技術」と総称する）を参照し、可能な限り詳細に後述する本発明の実施形態については、ＭＩＰＳ技術を伴うコンテキストにおいて説明する。ＭＩＰＳ技術に関するさらなる情報（以降で参照する資料を含む）は、（カリフォルニア州マウンテンビューにある）ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ｉｎｃ．およびウェブ上のｗｗｗ．ｍｉｐｓ．ｃｏｍ（同社のウェブサイト）から入手することができる。
【００２７】
本明細書で使用される「プロセッサ」および「デジタルプロセッサ」という用語は、ハードウェア（たとえばアプリケーション固有のシリコンチップ、ＦＰＧＡなど）、ソフトウェア（たとえばハードウェア記述言語、Ｃ、Ｃ＋など）、あるいはそれらのその他の任意のインスタンス化（または組合せ）において、プログラム可能な任意のデバイス（たとえばマイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、プロセッサコアなど）を意味することを意図している。
【００２８】
本明細書で使用される「スレッド」および「プログラムスレッド」という用語は、同じ意味を有する。スレッドとは、コンピュータ命令のシーケンスと、それらの命令の実行に関連付けられているプロセッサの状態変化の関連付けられているシーケンスである。命令のシーケンスは、必ずしも常にではないが、通常は、分岐命令などの１つまたは複数のプログラム制御命令を含む。したがって命令は、連続したメモリアドレスを有する可能性もあり、あるいは有さない可能性もある。命令のシーケンスは、単一のプログラムから生じる。
【００２９】
概要
本発明の実施形態における記述のための「スレッドコンテキスト」とは、プロセッサ内での命令ストリームの実行の状態を記述するのに必要なプロセッサの状態の集合である。この状態は通常、プロセッサレジスタの内容に反映される。たとえば業界標準のＭＩＰＳ３２  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ、および／またはＭＩＰＳ６４  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ（「ＭＩＰＳ  Ｐｒｏｃｅｓｓｏｒ」）と互換性のあるプロセッサでは、スレッドコンテキストは、汎用レジスタ（ＧＰＲ）（ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｒｅｇｉｓｔｅｒ）、高低乗算器結果レジスタ、プログラムカウンタ（ＰＣ）（ｐｒｏｇｒａｍ  ｃｏｕｎｔｅｒ）のある表示、および何らかの関連付けられた特権を有するシステム制御状態のセットを含む。システム制御状態は、通常は「ＣＰ０」（ｃｏｐｒｏｃｅｓｓｏｒ  ｚｅｒｏ）と呼ばれるＭＩＰＳ  Ｐｒｏｃｅｓｓｏｒのその部分に保持され、大きくはシステム制御レジスタおよび（使用する場合は）「ＴＬＢ」（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）によって維持される。対照的に「プロセッサコンテキスト」とは、プロセッサの状態のさらに大きな集合であり、少なくとも１つのスレッドコンテキストを含む。再びＭＩＰＳ  Ｐｒｏｃｅｓｓｏｒを参照すると、この場合のプロセッサコンテキストは、（上述のように）少なくとも１つのスレッドコンテキスト、ならびによく知られているＭＩＰＳ３２またはＭＩＰＳ６４の「ＰＲＡ」（Ｐｒｉｖｉｌｅｇｅｄ  Ｒｅｓｏｕｒｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ）のインスタンス化を記述するのに必要な、ＣＰ０およびシステムの状態を含むであろう（要するに、ＰＲＡは、命令セットアーキテクチャが動作する上で基づく環境および機能のセットである。ＰＲＡは、オペレーティングシステムが、プロセッサのリソース、たとえば仮想メモリ、キャッシュ、例外、およびユーザコンテキストを管理するのに必要なメカニズムを提供する）。
【００３０】
本発明の一実施形態によれば、命令セットアーキテクチャおよびＰＲＡに対する「Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥ」（ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｅｘｔｅｎｓｉｏｎ）によって、２つの別個の、しかし互いに排他的ではないマルチスレッディング機能を、所与のプロセッサ内に含むことができる。最初に、シングルプロセッサは、いくつかのプロセッサコンテキストを含むことができ、そのそれぞれは、そのプロセッサ内の特定のリソースを共有すること、および命令セットアーキテクチャをサポートすることを通じて、独立した処理要素として機能することができる。本明細書では、これらの独立した処理要素を、「ＶＰＥ」（Ｖｉｒｔｕａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）と呼ぶ。ソフトウェアにとって、Ｎ  ＶＰＥプロセッサは、まさにＮウェイ「ＳＭＰ」（ｓｙｍｍｅｔｒｉｃ  ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ）のように見える。これによって、既存のＳＭＰ対応のオペレーティングシステムは、ＶＰＥのセットを管理することができ、このＶＰＥのセットは、プロセッサの実行ユニットを透過的に共有する。
【００３１】
図３は、レジスタの状態０  ３０２およびシステムコプロセッサの状態０  ３０４を含む、第１のＶＰＥ（「ＶＰＥ０」）をサポートするシングルプロセッサ３０１を用いて、この機能を示している。プロセッサ３０１は、レジスタの状態１  ３０６およびシステムコプロセッサの状態１  ３０８を含む、第２のＶＰＥ（「ＶＰＥ１」）もサポートする。ＶＰＥ０およびＶＰＥ１によって共有されるプロセッサ３０１のそれらの部分は、フェッチ、デコード、および実行のパイプライン、ならびにキャッシュ３１０を含む。ＳＭＰ対応のオペレーティングシステム３２０は、プロセッサ３０１で作動しているものとして示されており、ＶＰＥ０とＶＰＥ１の双方をサポートする。ソフトウェアプロセスＡ３２２およびプロセスＣ３２６は、あたかも２つの異なるプロセッサで作動しているかのように、ＶＰＥ０とＶＰＥ１のそれぞれで別々に作動しているものとして示されている。プロセスＢ３２４はキューに入れられ、ＶＰＥ０またはＶＰＥ１で作動することができる。
【００３２】
Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥによって可能となる第２の機能は、それぞれのプロセッサまたはＶＰＥが、ベースアーキテクチャによって必要とされる単一のスレッドコンテキストだけでなく、複数のスレッドコンテキストを含むこともできるという点である。マルチスレッド化されたＶＰＥは、明確なオペレーティングシステムのサポートを必要とするが、このようなサポートがあれば、軽量できめ細かいマルチスレッド化されたプログラミングモデルが提供され、このプログラミングモデルでは、通常の場合は、オペレーティングシステムが介入することなくスレッドを作成および破棄することができ、また外的な条件（たとえば、イベントなど）に応答して、割り込みの待ち時間をゼロにしてシステムサービススレッドをスケジュールすることができる。
【００３３】
図４は、（３つのスレッド４２２をサポートする）レジスタの状態４０２、４０４、および４０６と、システムコプロセッサの状態４０８とを含む、単一のＶＰＥをサポートするプロセッサ４０１を用いて、この第２の機能を示している。図３とは異なり、このインスタンスでは、３つのスレッドが、単一のアプリケーションアドレス空間内にあり、単一のＶＰＥでＣＰ０リソース（ならびにハードウェアリソース）を共有している。専用のマルチスレッディングオペレーティングシステム４２０も示されている。この例では、マルチスレッド化されたＶＰＥは、ブロードバンドネットワーク４５０からのパケットを処理しており、ここではパケットのロードは、ＦＩＦＯ４５２のバンク（そのそれぞれは、マルチスレッド化されたＶＰＥのＩ／Ｏメモリスペース内における個別のアドレスを有する）にわたって散らばっている。制御アプリケーションプログラムは、自分が有する提供用のＦＩＦＯと同じ数のスレッドを作成し、それぞれのスレッドを、それらのＦＩＦＯを読み取るタイトループに配置する。
【００３４】
スレッドコンテキストは、４つの状態のうちの１つの状態の下に置くことができる。その状態は、フリーな状態、アクティブ化された状態、停止された状態、またはワイヤードの状態とすることができる。フリーなスレッドコンテキストは、有効なコンテンツを持たず、命令を発行するようにスケジュールすることはできない。アクティブ化されたスレッドコンテキストは、実装されているポリシーに従って、そのプログラムカウンタから命令をフェッチおよび発行するようにスケジュールされる。停止されたスレッドコンテキストは、有効なコンテンツを有しているが、命令をフェッチおよび発行することを禁止されている。ワイヤードのスレッドコンテキストは、Ｓｈａｄｏｗ  Ｒｅｇｉｓｔｅｒストレージとして使用するように割り当てられており、つまりこれは、例外ハンドラの排他的な使用に備えて保持され、レジスタコンテキストをそのハンドラ内に保存して復元するオーバーヘッドを回避する。フリーなスレッドコンテキストは、アクティブ化されておらず、停止もされておらず、ワイヤードでもないスレッドコンテキストである。アクティブ化されたスレッドコンテキストのみが、スケジュールすることができる。フリーなスレッドコンテキストのみが、新しいスレッドを作成するために割り当てることができる。
【００３５】
連携するスレッドのきめ細かい同期化を可能にするために、「ＩＴＣ」（ｉｎｔｅｒ−ｔｈｒｅａｄ  ｃｏｍｍｕｎｉｃａｔｉｏｎ）メモリスペースが、空いている／満たされたビットのセマンティクスと共に仮想メモリ内に作成され、これによってスレッドは、他のスレッドによってデータが生成または消費されるまで、ロードまたはストアでブロックすることができる。
【００３６】
スレッドの作成／破棄、および同期化の機能は、一般的な場合では、オペレーティングシステムの介入なしに機能するが、操作されるリソースは、オペレーティングシステムを介してすべて仮想化することができる。これによって、ＶＰＥに存在するスレッドコンテキストよりも多くの仮想スレッドと共に、またスレッドを移行してマルチプロセッサシステム内の負荷のバランスをとるために、マルチスレッド化されたプログラムを実行することができる。
【００３７】
スレッドは、その実行におけるいずれかの特定の時点において、特定のＶＰＥの特定のスレッドコンテキストに結合される。スレッドコンテキストのそのＶＰＥのセットへのインデックスは、その時点における一意の識別子を提供する。しかしコンテキストの切り替えおよび移行によって、単一の順次処理型の実行のスレッドが、たとえば一連の異なるＶＰＥに、一連の異なるスレッドインデックスを有するようにすることができる。
【００３８】
スレッドコンテキストの動的結合、ＴＬＢエントリ、および同一のプロセッサの複数のＶＰＥにとってのその他のリソースは、特別なプロセッサリセット構成状態において実行される。それぞれのＶＰＥは、そのリセットベクトルを、まさにそれが別個のプロセッサであるかのように入力する。
【００３９】
マルチスレッド化された実行および例外モデル
Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、並列のスレッドおよびＶＰＥの実行に対して、何らかの特定の実装またはスケジューリングモデルを強制するものではない。スケジューリングは、ラウンドロビン方式、任意のきめ細かさでタイムスライスされた方式、または同時方式とすることができる。しかし１つの実装によって、ブロックされているスレッドが、いずれかの共有されているプロセッサリソースを独占して、ハードウェアのデッドロックが引き起こされることがあってはならない。
【００４０】
ＭＩＰＳ  Ｐｒｏｃｅｓｓｏｒでは、単一のＶＰＥで実行されている複数のスレッドはすべて、同じシステムコプロセッサ（ＣＰ０）、同じＴＬＢ、および同じ仮想アドレス空間を共有する。それぞれのスレッドは、命令のデコードおよびメモリへのアクセスの目的で、独立したＫｅｒｎｅｌ／Ｓｕｐｅｉｖｉｓｏｒ／Ｕｓｅｒの状態を有する。例外が取られる場合は、その例外を取っているスレッド以外のすべてのスレッドが、停止されて、ＳｔａｔｕｓワードのＥＸＬおよびＥＲＬビットがクリアされるまで保留されるか、またはＥＪＴＡＧ  Ｄｅｂｕｇ例外の場合は、Ｄｅｂｕｇ状態が終了する。Ｓｔａｔｕｓワードは、ステータスレジスタ内に存在し、ステータスレジスタはＣＰ０内に配置されている。ＥＸＬおよびＥＲＬビット、ならびにＥＪＴＡＧデバッグ例外に関する詳細については、ＭＩＰＳ３２（商標）Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｐｒｏｇｒａｍｍｅｒｓ  Ｖｏｌｕｍｅ  ＩＩＩ：Ｔｈｅ  ＭＩＰＳ３２（商標）Ｐｒｉｖｉｌｅｇｅｄ  Ｒｅｓｏｕｒｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ，Ｒｅｖ．２．００，ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ｉｎｃ．（２００３年）、およびＭＩＰＳ６４（商標）Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｐｒｏｇｒａｍｍｅｒｓ  Ｖｏｌｕｍｅ  ＩＩＩ：Ｔｈｅ  ＭＩＰＳ６４（商標）Ｐｒｉｖｉｌｅｇｅｄ  Ｒｅｓｏｕｒｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ，Ｒｅｖ．２．００，ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ｉｎｃ．（２００３年）という２つの資料で見ることができ、そのそれぞれは、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ｉｎｃ．から入手することができ、その全体をすべての目的から参照によって本明細書に組み込む。ＴＬＢミスなど、命令ストリームの実行によって引き起こされる同期例外、および浮動小数点例外のための例外ハンドラは、問題の命令ストリームを実行しているスレッドによって実行される。割り込みなど、マスクされていない非同期例外が、ＶＰＥに対して生じる場合、どのスレッドが例外ハンドラを実行するかは、実装形態による。
【００４１】
例外ハンドラを実行するためにシャドウレジスタセットが使用される場合でも、それぞれの例外は、スレッドコンテキストに関連付けられている。この関連付けられているスレッドコンテキストは、例外ハンドラによって実行されるすべてのＲＤＰＧＰＲおよびＷＲＰＧＰＲ命令のターゲットである。（シャドウレジスタにアクセスするために使用される）ＲＤＰＧＰＲおよびＷＲＰＧＰＲ命令に関する詳細については、ＭＩＰＳ３２（商標）Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｐｒｏｇｒａｍｍｅｒｓ  Ｖｏｌｕｍｅ  ＩＩ：Ｔｈｅ  ＭＩＰＳ３２（商標）Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ，Ｒｅｖ．２．００，ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ｉｎｃ．（２００３年）、およびＭＩＰＳ６４（商標）Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｐｒｏｇｒａｍｍｅｒｓ  Ｖｏｌｕｍｅ  ＩＩ：Ｔｈｅ  ＭＩＰＳ６４（商標）Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ，Ｒｅｖ．２．００，ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ｉｎｃ．（２００３年）という２つの資料で見ることができ、そのそれぞれはＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ｉｎｃ．から入手することができ、その全体をすべての目的から参照によって本明細書に組み込む。
【００４２】
Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、２つの例外条件を含む。これら例外条件の１つめが、Ｔｈｒｅａｄ  Ｕｎａｖａｉｌａｂｌｅ条件であり、ここではスレッドの割り当て要求を満たすことができない。例外条件の２つめが、Ｔｈｒｅａｄ  Ｕｎｄｅｒｆｌｏｗ条件であり、ここではスレッドの終了および割り当て解除によって、ＶＰＥに割り当てられているスレッドはなくなる。これらの２つの例外条件は、単一の新しいＴｈｒｅａｄ例外にマップされる。これらは、例外が生じた際に、ＣＰ０レジスタビットセットに基づいて区別することができる。
【００４３】
命令
一実施形態におけるＭｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、７つの命令を含む。ＦＯＲＫおよびＹＩＥＬＤ命令は、スレッドの割り当て、割り当て解除、およびスケジューリングを制御し、実装され使用可能にされると、すべての実行モードにおいて利用することができる。ＭＦＴＲおよびＭＴＴＲ命令は、特権を有するシステムソフトウェアがスレッドの状態を管理するために利用できる、システムコプロセッサ（Ｃｏｐ０）命令である。新しいＥＭＴ命令および新しいＤＭＴ命令は、ＶＰＥのマルチスレッド化されたオペレーションを使用可能にしたり使用不可能にしたりするための特権を有するＣｏｐ０命令である。最後に、新しいＥＣＯＮＦ命令は、特別なプロセッサ構成状態を終了させてそのプロセッサを再び初期化するための特権を有するＣｏｐ０命令である。
【００４４】
ＦＯＲＫ−新しいスレッドを割り当て、スケジュールする
ＦＯＲＫ命令によって、フリーなスレッドコンテキストが割り当てられ、アクティブ化される。そのフォーマット５００が、図５に示されている。ＦＯＲＫ命令は、フィールド５０２（ｒｓ）および５０４（ｒｔ）において識別されるＧＰＲから２つのオペランド値を取る。ＧＰＲ  ｒｓのコンテンツは、新しいスレッドのためのフェッチおよび実行を開始するアドレスとして使用される。ＧＰＲ  ｒｔのコンテンツは、新しいスレッドのＧＰＲへと渡される値である。宛先ＧＰＲは、ＣＰ０のＴｈｒｅａｄＣｏｎｆｉｇレジスタのＦＯＲＫＴａｒｇｅｔフィールドの値によって決定され、これについては図２１に示されており、また以降で説明する。新しいスレッドのＫｅｒｎｅｌ／Ｓｕｐｅｒｖｉｓｏｒ／Ｕｓｅｒ状態は、ＦＯＲＫを行っているスレッドのものに設定される。フォークのために利用できるフリーなスレッドコンテキストがない場合は、ＦＯＲＫ命令に対してＴｈｒｅａｄ  Ｅｘｃｅｐｔｉｏｎが生じる。
【００４５】
ＹＩＥＬＤ−スレッドをスケジュール解除し、条件付きで割り当て解除する（第１の実施形態）
ＹＩＥＬＤ命令によって、現在のスレッドが選択的にスケジュール解除される。第１の実施形態によるＹＩＥＬＤ命令６００のフォーマットが、図６に示されており、図３２は、本発明の一実施形態におけるシステムによる、図６のＹＩＥＬＤ命令の機能をアサートするオペレーションを示すフローチャート３２００である。ＹＩＥＬＤ命令３５００の第２の実施形態については、以降で図３５から図４０を参照して説明する。
【００４６】
ＹＩＥＬＤ命令６００は、たとえばフィールド６０２（ｒｓ）において識別されるＧＰＲから単一のオペランド値を取る。一実施形態では、ＧＰＲが使用されるが、代替実施形態では、オペランド値は、システムにとってアクセス可能な本質的にすべてのデータストレージデバイス（たとえばＧＰＲ以外のレジスタ、メモリなど）に保存して、そこから検索することができる。一実施形態では、ＧＰＲ  ｒｓのコンテンツは、発行スレッドをスケジュール変更すべき状況を記述する記述子とみなすことができる。図３２のステップ３２０２に示されているように、ＧＰＲ  ｒｓのコンテンツがゼロである場合（すなわち、オペランドの値がゼロである場合）、スレッドは、まったくスケジュール変更されず、代わりにステップ３２０４に示されているように、割り当て解除され（すなわち終了されるか、またはその他の形でさらなる実行を永続的に停止され）、その関連付けられているスレッドコンテキストストレージ（すなわち、状態を保存するために上で識別されたレジスタ）は、その他の何らかのスレッドによって発行される後続のＦＯＲＫ命令による割り当て用として解放される。ＧＰＲ  ｒｓの最下位ビットが、設定された場合（すなわち、ｒｓ０＝１の場合）、スレッドは、図３２のステップ３２０６に示されているように直ちにスケジュール変更され、取って代わるその他の実行可能なスレッドがなければ、すぐに実行を継続することができる。この実施形態では、ＧＰＲ  ｒｓのコンテンツは、図７のテーブル７００によって記述されている１５ビットのクォリファイヤマスク（すなわち、さまざまな条件をコード化しているビットベクトル）として、その他の形で処理される。
【００４７】
テーブル７００を参照すると、ＧＰＲ  ｒｓのビット１５から１０は、プロセッサに提示されるハードウェアの割り込み信号を示しており、ビット９および８は、プロセッサによって生成されるソフトウェアの割り込みを示しており、ビット７および６は、ＭＩＰＳアーキテクチャのＬｏａｄ  ＬｉｎｋｅｄおよびＳｔｏｒｅ  Ｃｏｎｄｉｔｉｏｎａｌ同期化プリミティブのオペレーションを示しており、ビット５から２は、プロセッサに提示される割り込み以外の外部信号を示している。
【００４８】
ＧＰＲ  ｒｓのコンテンツが、偶数であり（すなわち、ビットゼロが設定されておらず）、ＧＰＲ  ｒｓのクォリファイヤマスク内のその他の任意のビットが、設定されている場合（ステップ３２０８）、スレッドは、少なくとも１つの対応する条件が満たされるまで一時停止される。もしもこのような状況が発生した場合、スレッドは、スケジュール変更され（ステップ３２１０）、ＹＩＥＬＤ命令６００に続く命令において実行を再開する。この使用可能化は、ＣＰ０．Ｓｔａｔｕｓ．ＩＭｎ割り込みマスクビットによる影響を受けず、これによって、この実施形態では、（図７に示されている）ビット１５〜１０および５〜２によってコード化されている、最大で１０個までの外部条件（たとえばイベントなど）、および（図７に示されている）ビット９〜６によってコード化されている４つのソフトウェア条件を使用して、プロセッサが例外を取る必要をまったく伴わずに、独立したスレッドが外部信号に応答できるようにすることができる。この特定の例では、ハードウェアの割り込み信号が６つ、ハードウェアの割り込み以外の信号が４つ、およびソフトウェアの割り込み信号が２つ、ソフトウェアの割り込み以外の信号が２つ、ならびに専用のスケジュール変更機能（すなわちｒｓ０）が１つ存在し、合計で１５個の条件を表している（ＣＰ０．Ｓｔａｔｕｓ．ｉＭｎ割り込みマスクビットは、ＭＩＰＳ  Ｐｒｏｃｅｓｓｏｒに対する８つの基本的な割り込み入力を任意選択でマスクできる、ＣＰ０  Ｓｔａｔｕｓレジスタ内の８ビットのセットである。ＩＭビットが設定されている場合、関連付けられている割り込み入力は、アサートされたときにプロセッサに対して例外を引き起こすことはない）。
【００４９】
ＥＩＣ割り込みモードでは、直交表示のベクトルを表すのではなく、ＩＰ２〜ＩＰ７ビットは、優先順位の最も高い使用可能にされている割り込みの値をコード化する。したがって、プロセッサがＥＩＣ割り込みモードを使用しているときに、ＹＩＥＬＤ命令６００内でＩＰ２〜ＩＰ７に関連付けられているＧＰＲ  ｒｓビットは、もはや特定の外部イベントでスレッドのスケジューリングを再び使用可能にするために使用することはできない。ＥＩＣモードでは、システムに依存する外部イベント表示（すなわち、この実施形態のＧＰＲ  ｒｓのビット５から２）のみを、ＹＩＥＬＤクォリファイヤとして使用すべきである。ＥＩＣ割り込みモードおよびＩＰ２〜ＩＰ７ビットについては、その全体を特定して本明細書に組み込んだ、前述のＭＩＰＳ３２（商標）Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｐｒｏｇｒａｍｍｅｒｓ  Ｖｏｌｕｍｅ  ＩＩＩ：Ｔｈｅ  ＭＩＰＳ３２（商標）Ｐｒｉｖｉｌｅｇｅｄ  Ｒｅｓｏｕｒｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ、およびＭＩＰＳ６４（商標）Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｐｒｏｇｒａｍｍｅｒｓ  Ｖｏｌｕｍｅ  ＩＩＩ：Ｔｈｅ  ＭＩＰＳ６４（商標）Ｐｒｉｖｉｌｅｇｅｄ  Ｒｅｓｏｕｒｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅという資料でさらに説明されている。
【００５０】
ＹＩＥＬＤ６００を実行した結果、プロセッサまたはＶＰＥで最後に割り当てられたスレッドが割り当て解除された場合、ＣＰ０のＴｈｒｅａｄＳｔａｔｕｓレジスタ内のアンダーフロー表示（図１８に示されており、以降で説明する）を伴うＴｈｒｅａｄ  Ｅｘｃｅｐｔｉｏｎが、ＹＩＥＬＤ命令６００に生じる。
【００５１】
前述の実施形態は、ＹＩＥＬＤ命令６００のＧＰＲ  ｒｓ内に含まれているオペランドを、スレッドスケジューリングパラメータとして利用する。この場合、パラメータは、直交表示の１５ビットベクトルとして処理される（図７を参照すると、ビット１および１５が確保されているため、この実施形態においてコード化されている条件は、１５個しかない）。この実施形態はまた、パラメータを指定の値として処理する（すなわち、所与のスレッドを、割り当て解除すべきかどうかを判断するために処理する。図３２のステップ３２０２を参照されたい）。しかし、このようなパラメータの特性は、命令の別の実施形態に適合するように変更することができる。たとえば、スレッドをすぐにスケジュール変更できるかどうかを判断する上で最下位ビット（すなわちｒｓ０）に依存するのではなく、パラメータ自体の値（たとえば、２の補数形態でのマイナス１｛−１｝の値）を使用して、スレッドを、追加の遅延なしにスケジュール変更すべきかどうか（すなわち、スケジューリングのために再びキューに入れるべきかどうか）を判断することができる。
【００５２】
この命令のその他の実施形態は、このようなスレッドスケジューリングパラメータを、１つまたは複数のマルチビット値フィールドを含むものとして処理することができ、これによってスレッドは、大きな（たとえば３２ビット以上の）イベントネームスペースからの単一のイベントでＹＩＥＬＤを行うように指定することができる。このような実施形態では、少なくとも、その１つのターゲットイベントに関連付けられているビットは、その従属するＹＩＥＬＤ命令６００によってアクセスされることになる。もちろん、特定の実施形態での要望に応じて、さらなるビットフィールドを、（さらなるイベントに関連付けられている）命令に渡すことができる。
【００５３】
ＹＩＥＬＤ命令６００のその他の実施形態は、その命令によってアクセスされるスレッドスケジューリングパラメータ内における前述のビットベクトルおよび値フィールドの組合せや、（たとえば）特定の実装形態のニーズを満たすための、アプリケーションに固有のその他の修正および機能強化を含むことができる。ＹＩＥＬＤ命令６００の代替実施形態は、上述のようなスレッドスケジューリングパラメータに、従来の任意の方法で、たとえば（図６に示されているように）ＧＰＲから、（メモリを含む）その他の任意のデータストレージデバイスから、そして命令自体の中にある直接の値として、アクセスすることができる。
【００５４】
ＭＦＴＲ−スレッドレジスタから移動する
ＭＦＴＲ命令は、１つのスレッドで実行されているオペレーティングシステムが、別のスレッドコンテキストにアクセスできるようにする特権を有する（Ｃｏｐ０）命令である。そのフォーマット８００が、図８に示されている。
【００５５】
アクセスされるスレッドコンテキストは、ＣＰ０のＴｈｒｅａｄＣｏｎｔｒｏｌレジスタのＡｌｔｅｒｎａｔｅＴｈｒｅａｄフィールドの値によって決定され、これについては図１６に示されており、以降で説明する。選択されたスレッドコンテキスト内で読み取られるレジスタは、フィールド８０２において識別されるｒｔオペランドレジスタ内の値と、フィールド８０４および８０６においてそれぞれ提供され、図９として含まれているテーブル９００に従って解釈される、ＭＦＴＲ命令のｕおよびｓｅｌビットとによって決定される。結果として生じる値は、フィールド８０８において識別されるターゲットレジスタｒｄに書き込まれる。
【００５６】
ＭＴＴＲ−スレッドレジスタへ移動する
ＭＴＴＲ命令は、ＭＦＴＲの逆である。これは、レジスタの値を、現在のスレッドのスレッドコンテキストから別のスレッドコンテキスト内のレジスタへコピーする、特権を有するＣｏｐ０命令である。そのフォーマット１０００が、図１０に示されている。
【００５７】
アクセスされるスレッドコンテキストは、ＣＰ０のＴｈｒｅａｄＣｏｎｔｒｏｌレジスタのＡｌｔｅｒｎａｔｅＴｈｒｅａｄフィールドの値によって決定され、これについては図１６に示されており、以降で説明する。選択されたスレッドコンテキスト内で書き込まれるレジスタは、フィールド１００２において識別されるｒｄオペランドレジスタ内の値と、フィールド１００４および１００６においてそれぞれ提供され、図１１において提供されているテーブル１１００（コード化は、ＭＦＴＲの場合と同様）に従って解釈される、ＭＴＴＲ命令のｕおよびｓｅｌビットとによって決定される。フィールド１００８において識別されるレジスタｒｔ内の値が、選択されたレジスタにコピーされる。
【００５８】
ＥＭＴ−マルチスレッディングを使用可能にする
ＥＭＴ命令は、ＣＰ０のＴｈｒｅａｄＣｏｎｔｒｏｌレジスタのＴＥビットを設定することによって、複数のスレッドの並行実行を使用可能にする、特権を有するＣｏｐ０命令であり、これについては図１６に示されており、以降で説明する。そのフォーマット１２００が、図１２に示されている。ＥＭＴの実行に先立つＴＥ（Ｔｈｒｅａｄｓ  Ｅｎａｂｌｅｄ）ビット値を含むＴｈｒｅａｄＣｏｎｔｒｏｌレジスタの値が、レジスタｒｔ内に返される。
【００５９】
ＤＭＴ−マルチスレッディングを使用不可能にする
ＤＭＴ命令は、ＣＰ０のＴｈｒｅａｄＣｏｎｔｒｏｌレジスタのＴＥビットをクリアすることによって、複数のスレッドの並行実行を禁止する、特権を有するＣｏｐ０命令であり、これについては図１６に示されており、以降で説明する。そのフォーマット１３００が、図１３に示されている。
【００６０】
ＤＭＴ命令を発行しているスレッド以外のすべてのスレッドが、さらなる命令のフェッチおよび実行を禁止される。これは、任意のスレッドごとに停止している状態からは無関係である。ＤＭＴの実行に先立つＴＥ（Ｔｈｒｅａｄｓ  Ｅｎａｂｌｅｄ）ビット値を含むＴｈｒｅａｄＣｏｎｔｒｏｌレジスタの値が、レジスタｒｔ内に返される。
【００６１】
ＥＣＯＮＦ−プロセッサの構成を終了する
ＥＣＯＮＦ命令は、ＶＰＥの構成の終了を知らせて、マルチＶＰＥの実行を使用可能にする、特権を有するＣｏｐ０命令である。そのフォーマット１４００が、図１４に示されている。
【００６２】
ＥＣＯＮＦが実行されると、（以降で説明する）Ｃｏｎｆｉｇ３レジスタのＶＰＣビットがクリアされ、この同じレジスタのＭＶＰビットが、その現在の値で読み取り専用になり、そのＥＣＯＮＦを実行しているＶＰＥを含むプロセッサのすべてのＶＰＥが、Ｒｅｓｅｔ例外を取る。ＥＣＯＮＦ命令は、図３５から図４０のＭｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥの代替実施形態には含まれていない。
【００６３】
特権を有するリソース
図１５のテーブル１５００は、Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥに関連するシステムコプロセッサの特権を有するリソースの概要をまとめたものである。特段の記載がない限り、以降で特定される新規のかつ修正されたコプロセッサゼロ（ＣＰ０）レジスタは、コプロセッサゼロの（すなわちＭＩＰＳ  Ｐｒｏｃｅｓｓｏｒの）従来のシステム制御レジスタのようにアクセスする（すなわち、書き込みおよび読み取りを行う）ことができる。
【００６４】
新規の特権を有するリソース
（Ａ）ＴｈｒｅａｄＣｏｎｔｒｏｌ  Ｒｅｇｉｓｔｅｒ（Ｃｏｐｒｏｃｅｓｓｏｒ  ０  Ｒｅｇｉｓｔｅｒ  ７，Ｓｅｌｅｃｔ  １）
ＴｈｒｅａｄＣｏｎｔｒｏｌレジスタは、ＶＰＥごとにシステムコプロセッサの一部としてインスタンス化される。そのレイアウト１６００が、図１６に示されている。ＴｈｒｅａｄＣｏｎｔｒｏｌ  Ｒｅｇｉｓｔｅｒフィールドは、図１７のテーブル１７００に従って定義される。
【００６５】
（Ｂ）ＴｈｒｅａｄＳｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ（Ｃｏｐｒｏｃｅｓｓｏｒ  ０  Ｒｅｇｉｓｔｅｒ  １２，Ｓｅｌｅｃｔ  ４）
ＴｈｒｅａｄＳｔａｔｕｓレジスタは、スレッドコンテキストごとにインスタンス化される。それぞれのスレッドは、自分自身のＴｈｒｅａｄＳｔａｔｕｓのコピーを見て、特権を有するコードは、ＭＦＴＲおよびＭＴＴＲ命令を介して他のスレッドのＴｈｒｅａｄＳｔａｔｕｓのコピーにアクセスすることができる。そのレイアウト１８００が、図１８に示されている。ＴｈｒｅａｄＳｔａｔｕｓ  Ｒｅｇｉｓｔｅｒフィールドは、図１９のテーブル１９００において定義される。
【００６６】
アクティブ化されているスレッドのＨａｌｔｅｄビットに１を書き込むと、アクティブ化されているスレッドは、命令をフェッチすることをやめて、その内部のリスタートＰＣを、発行される次の命令に設定する。アクティブ化されているスレッドのＨａｌｔｅｄビットに０を書き込むことによって、そのスレッドをスケジュールして、内部のリスタートＰＣアドレスからフェッチおよび実行することができる。アクティブ化されていないスレッドのＡｃｔｉｖａｔｅｄビットまたはＨａｌｔｅｄビットのいずれかに１を書き込むと、そのスレッドがＦＯＲＫ命令によって割り当てられてアクティブ化されることが防止される。
【００６７】
（Ｃ）ＴｈｒｅａｄＣｏｎｔｅｘｔ  Ｒｅｇｉｓｔｅｒ（Ｃｏｐｒｏｃｅｓｓｏｒ  ０  Ｒｅｇｉｓｔｅｒ  ４，Ｓｅｌｅｃｔ  １）
ＴｈｒｅａｄＣｏｎｔｅｘｔレジスタ２０００は、図２０に示されているように、プロセッサＧＰＲと同じ幅でスレッドごとにインスタンス化される。これは純粋に、スレッド固有のストレージ、たとえばスレッドコンテキスト保存エリアへのポインタとして、オペレーティングシステムによって使用できる、ソフトウェア読み取り／書き込みレジスタである。
【００６８】
（Ｄ）ＴｈｒｅａｄＣｏｎｆｉｇ  Ｒｅｇｉｓｔｅｒ（Ｃｏｐｒｏｃｅｓｓｏｒ  ０  Ｒｅｇｉｓｔｅｒ  ６，Ｓｅｌｅｃｔ  １）
ＴｈｒｅａｄＣｏｎｆｉｇレジスタは、プロセッサまたはＶＰＥごとにインスタンス化される。そのレイアウト２１００が、図２１に示されている。ＴｈｒｅａｄＣｏｎｆｉｇレジスタフィールドは、図２２のテーブル２２００において定義される。
【００６９】
ＴｈｒｅａｄＣｏｎｆｉｇのＷｉｒｅｄＴｈｒｅａｄフィールドによって、ＶＰＥで利用可能なスレッドコンテキストのセットを、Ｓｈａｄｏｗ  Ｒｅｇｉｓｔｅｒセットと並列実行スレッドとの間で区切ることができる。ＷｉｒｅｄＴｈｒｅａｄレジスタの値より小さいインデックスを有するスレッドコンテキストは、シャドウレジスタセットとして使用することができる。
【００７０】
（Ｅ）ＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒ（Ｃｏｐｒｏｃｅｓｓｏｒ  ０  Ｒｅｇｉｓｔｅｒ  ６，Ｓｅｌｅｃｔ  ２）
ＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタは、任意選択のものだが、実装する際はスレッドごとに実装される。そのレイアウト２３００が、図２３に示されている。Ｓｃｈｅｄｕｌｅ  Ｖｅｃｔｏｒ（図示されているように、一実施形態では３２ビット幅である）は、関連付けられているスレッドに関する要求されている発行帯域幅のスケジューリングを記述したものである。この実施形態では、それぞれのビットは、プロセッサまたはＶＰＥの発行帯域幅の１／３２を表し、それぞれのビットロケーションは、３２スロットのスケジューリングサイクルにおける個別のスロットを表す。
【００７１】
スレッドのＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタ内の１つのビットが設定されると、そのスレッドは、関連付けられているプロセッサまたはＶＰＥで可能な３２の連続した発行のすべてに関して、対応する１つの発行スロットを使用できる保証を有する。あるスレッドのＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタ内の１つのビットに１を書き込む際に、同じプロセッサまたはＶＰＥの他の何らかのスレッドが、既に同じＴｈｒｅａｄＳｃｈｅｄｕｌｅビットセットを有している場合、結果としてＴｈｒｅａｄ例外が生じる。３２ビットが、一実施形態におけるＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタの幅であるが、この幅は、他の実施形態において使用する場合には変更される（すなわち増やされる、または減らされる）可能性があると予想される。
【００７２】
（Ｆ）ＶＰＥＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒ（Ｃｏｐｒｏｃｅｓｓｏｒ  ０  Ｒｅｇｉｓｔｅｒ  ６，Ｓｅｌｅｃｔ  ３）
ＶＰＥＳｃｈｅｄｕｌｅレジスタは任意選択のものであり、ＶＰＥごとにインスタンス化される。これは、Ｃｏｎｆｉｇ３レジスタのＭＶＰビットが設定された場合にのみ、書き込み可能となる（図２９を参照されたい）。そのフォーマット２４００が、図２４に示されている。
【００７３】
Ｓｃｈｅｄｕｌｅ  Ｖｅｃｔｏｒ（図示されているように、一実施形態では３２ビット幅である）は、関連付けられているＶＰＥに関する要求されている発行帯域幅のスケジューリングを記述したものである。この実施形態では、それぞれのビットは、マルチＶＰＥプロセッサの全発行帯域幅の１／３２を表し、それぞれのビットロケーションは、３２スロットのスケジューリングサイクルにおける個別のスロットを表す。
【００７４】
ＶＰＥのＶＰＥＳｃｈｅｄｕｌｅレジスタ内の１つのビットが設定されると、そのスレッドは、プロセッサで可能な３２の連続した発行のすべてに関して、対応する１つの発行スロットを使用できる保証を有する。あるＶＰＥのＶＰＥＳｃｈｅｄｕｌｅレジスタ内の１つのビットに１を書き込む際に、他の何らかのＶＰＥが、既に同じＶＰＥＳｃｈｅｄｕｌｅビットセットを有している場合、結果としてＴｈｒｅａｄ例外が生じる。
【００７５】
いずれのスレッドによっても具体的にスケジュールされていない発行スロットは、プロセッサのその時点でのデフォルトのスレッドスケジューリングポリシー（たとえばラウンドロビン方式など）に従って、任意の実行可能なＶＰＥ／スレッドに自由に割り当てることができる。
【００７６】
ＶＰＥＳｃｈｅｄｕｌｅレジスタおよびＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタは、発行帯域幅の割り当ての階層を作成する。ＶＰＥＳｃｈｅｄｕｌｅレジスタのセットは、ＶＰＥに対して、プロセッサまたはコアで利用可能な全体のうちの一部として帯域幅を割り当て、その一方でＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタは、スレッドに対して、それらのスレッドを含むＶＰＥにとって利用可能なものの一部として帯域幅を割り当てる。
【００７７】
３２ビットが、一実施形態におけるＶＰＥＳｃｈｅｄｕｌｅレジスタの幅であるが、この幅は、他の実施形態において使用する場合には変更される（すなわち増やされる、または減らされる）可能性があると予想される。
【００７８】
（Ｇ）Ｃｏｎｆｉｇ４  Ｒｅｇｉｓｔｅｒ（Ｃｏｐｒｏｃｅｓｓｏｒ  ０  Ｒｅｇｉｓｔｅｒ  １６，Ｓｅｌｅｃｔ  ４）
Ｃｏｎｆｉｇ４  Ｒｅｇｉｓｔｅｒは、プロセッサごとにインスタンス化される。これは、動的なマルチＶＰＥプロセッサの構成に必要な構成情報を含む。プロセッサが、ＶＰＥ構成状態（すなわち、Ｃｏｎｆｉｇ３レジスタのＶＭＣビットが設定されている状態）にない場合、Ｍ（継続）フィールド以外のすべてのフィールドの値は、実装形態によって変わり、予測できない可能性がある。そのレイアウト２５００が、図２５に示されている。Ｃｏｎｆｉｇ４のレジスタフィールドは、図２６のテーブル２６００に示されているように定義される。いくつかの実施形態では、Ｃｏｎｆｉｇ３レジスタ用のＶＭＣビットが存在することができ、これは、それまで確保されていた／割り当てられていないビットとすることができる。
【００７９】
既存の特権を有するリソースアーキテクチャに対する修正
Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、現在のＭＩＰＳ３２およびＭＩＰＳ６４のＰＲＡのいくつかの要素を修正する。
【００８０】
（Ａ）Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ
ＳｔａｔｕｓレジスタのＣＵビットは、マルチスレッド化された構成において、さらなる意味を持つようになっている。ＣＵビットを設定するという動作は、コプロセッサコンテキストを、そのＣＵビットに関連付けられているスレッドに結合したいという要求である。コプロセッサコンテキストが、利用可能である場合には、スレッドに結合され、これによって、そのスレッドによって発行される命令は、コプロセッサに達することができ、ＣＵビットは、そこに書き込まれている１の値を保持する。コプロセッサコンテキストがまったく利用できない場合、ＣＵビットは、０として読み戻される。設定されているＣＵビットに０を書き込むと、関連付けられているすべてのコプロセッサが、割り当て解除される。
【００８１】
（Ｂ）Ｃａｕｓｅ  Ｒｅｇｉｓｔｅｒ
図２７に示されているように、Ｔｈｒｅａｄ例外にとって必要とされる新規のＣａｕｓｅレジスタＥｘｃＣｏｄｅ値がある。
【００８２】
（Ｃ）ＥｎｔｒｙＬｏ  Ｒｅｇｉｓｔｅｒ
図２８に示されているように、それまで確保されていたキャッシュ属性がＩＴＣインジケータとなる。
【００８３】
（Ｄ）Ｃｏｎｆｉｇ３  Ｒｅｇｉｓｔｅｒ
図２９のテーブル２９００に示されているように、Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥの利用可能性および複数のスレッドコンテキストの利用可能性を表すために定義される、新規のＣｏｎｆｉｇ３レジスタフィールドがある。
【００８４】
（Ｅ）ＥＢａｓｅ
図３０に示されているように、ＥＢａｓｅレジスタのそれまで確保されていたビット３０が、ＶＰＥコンテキストごとのＶＰＥ禁止ビットとなる。
【００８５】
（Ｆ）ＳＲＳＣｔｌ
それまで事前に設定されていたＨＳＳフィールドが、今度はＴｈｒｅａｄＣｏｎｆｉｇ  ＷｉｒｅｄＴｈｒｅａｄフィールドの機能として作成される。
【００８６】
ＦＯＲＫを伴わないスレッドの割り当ておよび初期化
一実施形態においてオペレーティングシステムがスレッドを「手動で」作成するためのプロシージャは、次のとおりである。
１．ＤＭＴを実行して、他のスレッドの実行および場合によってはＦＯＲＫを停止する。
２．ＴｈｒｅａｄＣｏｎｔｒｏｌレジスタのＡｌｔｅｒｎａｔｅＴｈｒｅａｄフィールドを連続した値に設定し、ＭＦＴＲ命令を用いてＴｈｒｅａｄＳｔａｔｕｓレジスタを読み取ることによって、利用可能なＴｈｒｅａｄＣｏｎｔｅｘｔを識別する。フリーなスレッドは、そのＴｈｒｅａｄＳｔａｔｕｓレジスタセットのＨａｌｔｅｄでもなくＡｃｔｉｖａｔｅｄでもないビットを有することになる。
３．選択されたスレッドのＴｈｒｅａｄＳｔａｔｕｓレジスタのＨａｌｔｅｄビットを設定して、それが別のスレッドによって割り当てられることを防止する。
４．ＥＭＴ命令を実行して、マルチスレッディングを再び使用可能にする。
５．ｕフィールドを１に設定した状態でＭＴＴＲ命令を使用して、所望のすべてのＧＰＲを、選択されたスレッドコンテキストへコピーする。
６．ｕおよびｓｅｌフィールドをゼロに設定し、ｒｔフィールドを１４（ＥＰＣ）に設定した状態でＭＴＴＲ命令を使用して、所望の実行開始アドレスをスレッドの内部のリスタートアドレスレジスタに書き込む。
７．ＭＴＴＲ命令を使用して、ＨａｌｔｅｄビットにゼロをＡｃｔｉｖａｔｅｄビットに１を有する値を、選択されたＴｈｒｅａｄＳｔａｔｕｓレジスタに書き込む。
【００８７】
その結果、新たに割り当てられるスレッドが、スケジュール可能となる。プロシージャ中にＥＸＬまたはＥＲＬが設定される場合には、それらが、マルチスレッド化された実行を暗に禁止するため、ＤＭＴを実行するステップ、新しいスレッドのＨａｌｔｅｄビットを設定するステップ、およびＥＭＴを実行するステップは省略することができる。
【００８８】
ＹＩＥＬＤを伴わないスレッドの終了および割り当て解除
一実施形態において、オペレーティングシステムが現在のスレッドを終了するためのプロシージャは、次のとおりである
１．ＯＳが、Ｔｈｒｅａｄ  Ｕｎｄｅｒｆｌｏｗ状態でのＴｈｒｅａｄ例外に対するサポートをまったく有していない場合には、ＭＦＴＲ命令を用いてＴｈｒｅａｄＳｔａｔｕｓレジスタのセットをスキャンして、プロセッサに別の実行可能なスレッドがあることを確認するか、またはそうでない場合には、プログラムにエラーを知らせる。
２．重要なＧＰＲレジスタの値をすべてメモリに書き込む。
３．Ｓｔａｔｕｓ／ＴｈｒｅａｄＳｔａｔｕｓレジスタ内でＫｅｒｎｅｌモードを設定する。
４．ＥＸＬ／ＥＲＬをクリアして、現在のスレッドが特権を有する状態に留まっている間に、他のスレッドをスケジュールできるようにする。
５．標準的なＭＴＣ０命令を使用して、ＴｈｒｅａｄＳｔａｔｕｓレジスタのＨａｌｔｅｄビットとＡｃｔｉｖａｔｅｄビットの双方にゼロを有する値を書き込む。
【００８９】
通常のプロシージャは、この方法でスレッドが自分自身を終了させることである。特権を有するモードで実行中の１つのスレッドが、ＭＴＴＲ命令を使用して別のスレッドを終了させることもできるが、これを行うと、ＯＳにとっては、どのスレッドコンテキストを割り当て解除すべきか、そしてどの時点でそのスレッドの計算の状態が安定するかを決定するという、さらなる問題が提示されることになる。
【００９０】
Ｉｎｔｅｒ−Ｔｈｒｅａｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｓｔｏｒａｇｅ
ＩＴＣ（Ｉｎｔｅｒ−Ｔｈｒｅａｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）Ｓｔｏｒａｇｅは、きめ細かいマルチスレッディングのためのＬｏａｄ−Ｌｉｎｋｅｄ／Ｓｔｏｒｅ−Ｃｏｎｄｉｔｉｏｎａｌの同期化に対する代替方法を提供する任意選択の機能である。これは、ロードおよびストアによって操作されるため、命令セットアーキテクチャには見えないが、Ｐｒｉｖｉｌｅｇｅｄ  Ｒｅｓｏｕｒｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅには見え、相当なマイクロアーキテクチャ上のサポートを必要とする。
【００９１】
そのＴＬＢエントリがＩＴＣストレージとしてタグ付けされている仮想メモリページへの参照は、特別な属性を有するストアに帰着する。それぞれのページは、１〜１２８の６４ビットのストレージロケーションのセットをマップし、そのそれぞれは、それに関連付けられているＥｍｐｔｙ／Ｆｕｌｌビットの状態を有し、標準的なロード命令およびストア命令を使用して、４つの方法のうちの１つでアクセスすることができる。アクセスモードは、図３１のテーブル３１００に示されているように、作成された仮想アドレスの最下位（および変換されていない）ビット内でコード化される。
【００９２】
それぞれのストレージロケーションは、Ｃの構造によって、次のように記述することができる。
ｓｔｒｕｃｔ  ｛
ｕｉｎｔ６４  ｅｆ＿ｓｙｎｃ＿ｌｏｃａｔｉｏｎ；
ｕｉｎｔ６４  ｆｏｒｃｅ＿ｅｆ＿ｌｏｃａｔｉｏｎ；
ｕｉｎｔ６４  ｂｙｐａｓｓ＿ｌｏｃａｔｉｏｎ；
ｕｉｎｔ６４  ｅｆ＿ｓｔａｔｅ；
｝  ＩＴＣ＿ｌｏｃａｔｉｏｎ；
ここでは、４つのロケーションすべてが、基礎をなすストレージの同じ６４ビットを参照する。このストレージへの参照は、アクセスごとに同じＥｍｐｔｙ／Ｆｕｌｌプロトコルを義務付けられている状態で、６４ビット未満のアクセスタイプ（たとえばＬＷ、ＬＨ、ＬＢ）を有することができる。
【００９３】
ＥｍｐｔｙビットとＦｕｌｌビットは別個のものであり、これによって、ＦＩＦＯなどの切り離されているマルチエントリデータバッファを、ＩＴＣストレージへマップすることができる。
【００９４】
ＩＴＣストレージは、｛ｂｙｐａｓｓ＿ｌｏｃａｔｉｏｎ，ｅｆ＿ｓｔａｔｅ｝のペアを一般的なストレージへコピーすること、および一般的なストレージからコピーすることによって、保存および復元することができる。ｂｙｐａｓｓ＿ｌｏｃａｔｉｏｎの６４ビットを保持しなければならないが、厳密に言えば、ｅｆ＿ｓｔａｔｅの最下位ビットのみを操作すればよい。マルチエントリデータバッファの場合、それぞれのロケーションを、Ｅｍｐｔｙまで読み取って、コピーでそのバッファを空にしなければならない。
【００９５】
４Ｋページごとのロケーションの数、およびＶＰＥごとのＩＴＣページの数は、ＶＰＥまたはプロセッサの構成パラメータである。
【００９６】
ＩＴＣストレージの「物理アドレス空間」は、マルチプロセッサシステム内のすべてのＶＰＥおよびプロセッサにわたってグローバルにすることができ、これによってスレッドは、自分が実行中であるＶＰＥとは別のＶＰＥ上のロケーションで同期化することができる。グローバルＩＴＣストレージアドレスは、それぞれのＶＰＥのＥＢａｓｅレジスタのＣＰＵＮｕｍフィールドから得られる。ＣＰＵＮｕｍの１０ビットは、ＩＴＣストレージアドレスの上位１０ビットに対応する。ユニプロセッサアプリケーション用に設計されているプロセッサまたはコアは、物理インターフェースをＩＴＣストレージにエクスポートする必要はなく、プロセッサ内部のリソースとして処理することができる。
【００９７】
マルチＶＰＥプロセッサ
コアまたはプロセッサは、機能ユニットなどの複数のＶＰＥ共有リソースを実装することができる。それぞれのＶＰＥは、ＭＩＰＳ３２またはＭＩＰＳ６４命令、および特権を有するリソースアーキテクチャの自分自身のインスタンス化を見る。それぞれは、自分自身のレジスタファイルまたはスレッドコンテキストアレイを見て、それぞれは、自分自身のＣＰ０システムコプロセッサおよび自分自身のＴＬＢ状態を見る。同じプロセッサの２つのＶＰＥは、２ＣＰＵのキャッシュコヒーレントなＳＭＰマルチプロセッサからのソフトウェアにとっては見分けがつかない。
【００９８】
１つのプロセッサのそれぞれのＶＰＥは、ＣＰ０のＥｂａｓｅレジスタのＣＰＵＮｕｍフィールド内の別個の値を見る。
【００９９】
スレッドコンテキストおよびＴＬＢストレージならびにコプロセッサなどのプロセッサアーキテクチャ上のリソースは、ハードワイヤードの構成においてＶＰＥに結合することもでき、あるいは必要な構成機能をサポートするプロセッサ内で動的に構成することもできる。
【０１００】
リセットおよび仮想プロセッサの構成
ＭＩＰＳ３２およびＭＩＰＳ６４のＰＲＡとの下位互換性を有するには、設定によって変更できるようにマルチスレッド化された／／マルチＶＰＥプロセッサは、リセット時に健全なデフォルトのスレッド／ＶＰＥ構成を有していなければならない。これは、単一のスレッドコンテキストを有する単一のＶＰＥの構成である場合が典型的だが、必ずしもその必要はない。リセット時に、Ｃｏｎｆｉｇ３レジスタのＭＶＰビットをサンプリングして、動的なＶＰＥ構成が可能かどうかを決定することができる。この機能が、レガシーソフトウェアによるものとして無視される場合、プロセッサは、デフォルト構成用の指定に従って動作することになる。
【０１０１】
ＭＶＰビットが設定されている場合、Ｃｏｎｆｉｇ３レジスタのＶＰＣ（Ｖｉｒｔｕａｌ  Ｐｒｏｃｅｓｓｏｒ  Ｃｏｎｆｉｇｕｒａｔｉｏｎ）ビットを、ソフトウェアによって設定することができる。これによって、プロセッサは構成状態に置かれ、この構成状態では、Ｃｏｎｆｉｇ４レジスタのコンテンツを読み取って、利用可能なＶＰＥコンテキスト、スレッドコンテキスト、ＴＬＢエントリ、およびコプロセッサ、ならびに書き込み可能になるＣｏｎｆｉｇレジスタの通常は読み取り専用である特定の「事前に設定されている」フィールドの数を決定することができる。構成状態の命令ストリームに制約を課すことができ、たとえばそれらの命令ストリームに対しては、キャッシュされたまたはＴＬＢにマップされたメモリアドレスを使用することを禁止することができる。
【０１０２】
構成状態では、設定によって変更できるＶＰＥの総数は、Ｃｏｎｆｉｇ４レジスタのＰＶＰＥフィールド内にコード化される。それぞれのＶＰＥは、そのインデックスを、ＥＢａｓｅレジスタのＣＰＵＮｕｍフィールドに書き込むことによって選択することができる。選択されたＶＰＥに関しては、場合によっては、下記のレジスタフィールドに書き込みを行うことによって、これらのレジスタフィールドを設定することができる。
Ｃｏｎｆｉｇ１．ＭＭＵ＿Ｓｉｚｅ
Ｃｏｎｆｉｇ１．ＦＰ
Ｃｏｎｆｉｇ１．ＭＸ
Ｃｏｎｆｉｇ１．Ｃ２
Ｃｏｎｆｉｇ３．ＮＴｈｒｅａｄｓ
Ｃｏｎｆｉｇ３．ＮＩＴＣ＿Ｐａｇｅｓ
Ｃｏｎｆｉｇ３．ＮＩＴＣ＿ＰＬｏｃｓ
Ｃｏｎｆｉｇ３．ＭＶＰ
ＶＰＥＳｃｈｅｄｕｌｅ。
【０１０３】
上記の構成パラメータのすべてが、設定によって変更できる必要はない。たとえばＶＰＥごとのＩＴＣページが設定によって変更できる場合でも、ページごとのＩＴＣロケーションの数は固定することができ、あるいは双方のパラメータを固定することもでき、ＦＰＵを、ＶＰＥごとに事前に割り当ててハードワイヤードとすることなどもできる。
【０１０４】
コプロセッサは、別々のユニットとしてＶＰＥに割り当てられる。コプロセッサがマルチスレッド化される程度は、コプロセッサ固有のコントロールレジスタおよびステータスレジスタを介して表示および制御すべきである。
【０１０５】
ＶＰＥは、ＥＢａｓｅレジスタ内のＶＰＩ禁止ビットをクリアすることによって、構成後の実行用に使用可能にされる。
【０１０６】
構成状態は、ＥＣＯＮＦ命令を発行することによって終了する。この命令によって、禁止されていないＶＰＥはすべて、リセット例外を取り、並行して実行を開始する。構成中にＣｏｎｆｉｇ３レジスタのＭＶＰビットがクリアされ、ＥＣＯＮＦ命令によってゼロにラッチされた場合、ＶＰＣビットはもはや設定できず、プロセッサ構成は、次のプロセッサリセットまで効果的に凍結される。ＭＶＰが設定されたままの場合、オペレーティングシステムは、再びＶＰＣビットを設定することによって、再び構成モードに入ることができる。再び構成モードに入るプロセッサの実行中のＶＰＥに対する結果は、予測できない可能性がある。
【０１０７】
マルチスレッド化されたプロセッサのためのＱｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅのスケジューリング
本明細書は、ここまで、マルチスレッディングを提供するためのＭＩＰＳ互換システム用のアプリケーション固有の拡張について説明している。前述のように、説明されている機能およびメカニズムは、ＭＩＰＳシステム以外にも適用できるため、説明されているＭＩＰＳの実装形態は、典型的なものであり、限定的なものではない。
【０１０８】
背景技術の部分で見た問題、すなわちリアルタイムのスレッドおよびリアルタイムに近いスレッドのためのマルチスレッディングにおける特別なサービスの問題については、ＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタ（図２３）およびＶＰＥＳｃｈｅｄｕｌｅレジスタ（図２４）を対象とした前述の考察において簡単に触れた。本明細書の残りでは、この問題をさらに詳しく扱い、特にスレッドレベルのサービス品質「ＱｏＳ」（ｑｕａｌｉｔｙ−ｏｆ−ｓｅｒｖｉｃｅ）を扱うための特定の拡張について教示する。
【０１０９】
背景
マルチメディアデータを伝送するために設計されたネットワークによって、１つのネットワーク内のさまざまなデータストリームにさまざまなポリシーを適用する必要性を記述するための「ＱｏＳ」（Ｑｕａｌｉｔｙ−ｏｆ−Ｓｅｒｖｉｃｅ）という概念が発展した。たとえば音声接続は、相対的に帯域幅を必要としないが、数十ミリ秒を超える遅延を許容することはできない。ブロードバンドマルチメディアネットワーク内のＱｏＳプロトコルは、時間が決定的に重要となる伝送に際して、タイムリーな配信を確保するのに必要な特別な取り扱いおよび優先順位はいかなるものでも得られるように保証する。
【０１１０】
単一のチップ上で「ＲＩＳＣ」と「ＤＳＰ」のプログラム実行を組み合わせることに対して提起される主な反論の１つは、ＤＳＰコードの厳密なリアルタイムの実行を保証することが、組み合わされたマルチタスク環境ではよりいっそう困難であるということである。したがってＤＳＰアプリケーションは、プロセッサの帯域幅に関する「ＱｏＳ」の要件を有しているとみなすことができる。
【０１１１】
マルチスレッディングおよびＱｏＳ
複数のスレッドから命令の発行をスケジュールする複数の方法が存在する。インターリーブドスケジューラは、サイクルごとにスレッドを変更し、その一方でブロッキングスケジューラは、キャッシュミスやその他の重大な失速が生じるたびにスレッドを変更する。詳細に前述したＭｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、特定のスレッドスケジューリングメカニズムまたはポリシーへのいかなる依存状態も回避しようと試みる、明確にマルチスレッド化されたプロセッサのためのフレームワークを提供する。しかしスケジューリングポリシーは、さまざまなスレッドの実行に関してどんなＱｏＳ保証が可能かということに対して、大きな影響を与える可能性がある。
【０１１２】
ＤＳＰによって拡張されたＲＩＳＣは、リアルタイムのＤＳＰコードに関してＱｏＳ保証を作成できる場合には、より著しく有用となる。このようなプロセッサにマルチスレッディングを実装し、それによってＤＳＰコードが、別個のスレッド内で、ことによると別個の仮想プロセッサ内でさえ実行され、また保証されたＱｏＳを提供するために、ＤＳＰスレッドのハードウェアスケジューリングをプログラム可能に決定することができれば、ＤＳＰによって強化されたＲＩＳＣのパラダイムを受け入れることに対する主要な障壁が論理的に取り除かれる。
【０１１３】
ＱｏＳスレッドスケジューリングアルゴリズム
Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅのスレッドスケジューリングは、プログラマやシステム設計者が、コードの特定の断片の実行時間に関して自信を持って予測するステートメントを作成できるようにする、スケジューリングメカニズムおよびポリシーのセットとして大まかに定義することができる。これらのステートメントは、一般に、「このコードは、Ｎｍａｘ以下かつＮｍｉｎ以上のサイクルで実行される」という形態を有する。多くの場合、実際に重要な数値は、Ｎｍａｘの数値のみであるが、いくつかのアプリケーションでは、スケジュールに先んじて実行することも問題となり、したがってＮｍｉｎも重要となる可能性がある。ＮｍｉｎとＮｍａｘの間の範囲が小さければ小さいほど、それだけシステム全体の動作を正確に予測することができる。
【０１１４】
単純な優先順位スキーム
マルチスレッド化された発行スケジューリングに一定レベルのＱｏＳを提供するために提案されてきた１つの単純なモデルは、単一の指定されたリアルタイムのスレッドに最高の優先順位を単純に割り当てることであり、これによってそのスレッドは、実行可能である場合、常に選択されて命令を発行することになる。これによって、Ｎｍｉｎの最小値が提供されることになり、指定されたスレッドに関して可能なＮｍａｘの最小値が提供されるように見えるかもしれないが、いくつかの悪影響がある。
【０１１５】
第１に、このようなスキームでは単一のスレッドしか、いかなるＱｏＳ保証も有することができない。このアルゴリズムは、指定されたリアルタイムのスレッド以外のスレッド内における任意のコードに関するＮｍａｘが、事実上無限になることを意味する。第２に、指定されたスレッド内のコードブロックに関するＮｍｉｎの数値を最小化しつつも、このモデルには例外を考慮に入れなければならない。指定されたスレッドによって例外が取られる場合、Ｎｍａｘの値はより複雑になり、場合によっては確定することが不可能になる。指定されたスレッド以外のスレッドによって例外が取られる場合、Ｎｍａｘは、指定されたスレッド内のコードのために厳密に限界を設定されるが、プロセッサの割り込み応答時間は無限になる。
【０１１６】
このような優先順位スキームは、場合によっては役に立つかもしれないし、ハードウェアの実装においてはいくつかの実用面での利点があるかもしれないが、全般的なＱｏＳスケジューリングソリューションを提供するものではない。
【０１１７】
確保ベースのスキーム
代替となる、より強力で、ユニークなスレッドスケジューリングモデルは、発行スロットを確保することに基づく。このようなスキームにおけるハードウェアスケジューリングメカニズムは、１つまたは複数のスレッドに、それぞれＭ個の連続した発行スロットのうちのＮ個を割り当てることができる。このようなスキームは、割り込みの自由な環境におけるリアルタイムのコード断片用の優先順位スキームほど低いＮｍｉｎの値を提供しないが、実は次のようなその他の長所を有する。
【０１１８】
複数のスレッドが、保証されたＱｏＳを有することができる。
【０１１９】
割り込みが、最も高い優先順位を有するスレッド以外のスレッドに結合されている場合でも、割り込み待ち時間の上限を設定することができる。これによって、リアルタイムのコードブロックに関するＮｍａｘの引き下げを潜在的に可能にすることができる。
【０１２０】
確保方式のスケジューリングの１つの簡単な形式では、Ｎ個ごとの発行スロットをリアルタイムのスレッドに割り当てる。Ｎには１と２の中間の値がないため、これは、マルチスレッディング環境内におけるリアルタイムのスレッドが、プロセッサの発行スロットの最大でも５０％しか得ることができないことを意味する。リアルタイムのタスクは、組み込まれたプロセッサの帯域幅の５０％超を消費する可能性があるため、発行帯域幅のより柔軟な割り当てを可能にするスキームが、きわめて望ましい。
【０１２１】
ＱｏＳを有する複合型のスレッドスケジューリング
上述のマルチスレッディングシステムは、意図的にスケジューリングポリシーについては中立であるが、複合型のスケジューリングモデルを可能にするように拡張することができる。このモデルでは、リアルタイムのスレッドには、スレッド発行スロットの一定割合の固定されたスケジューリングを与え、残りのスロットは、実装形態に応じたデフォルトのスケジューリングスキームによって割り当てることができる。
【０１２２】
発行スロットへのスレッドの結合
プロセッサにおいては、命令は、連続して速い速度で発行される。マルチスレッディング環境では、所与の固定数のスロットの中でそれぞれのスレッドが発行するスロットの比例配分した数を述べることによって、混合状態の中でそれぞれのスレッドによって消費される帯域幅を定量化することができる。逆に本発明者は、スロットの固定数を任意に述べてから、１つの特定のスレッドに対する固定数のうちの一定数のスロットを確保しておくように、プロセッサに制約を課す手段を叙述することができると認識している。そしてリアルタイムのスレッドに対して保証される帯域幅の固定された分数を指定することができる。
【０１２３】
スロットを複数のリアルタイムのスレッドに比例配分して割り当てることができることは明らかであり、このスキームが機能する際のきめ細かさは、比例配分される対象となる発行スロットの固定数によって制約を受ける。たとえば３２個のスロットを選択すると、任意の特定のスレッドには、帯域幅の１／３２から３２／３２までを保証することができる。
【０１２４】
そしておそらくは、固定された発行帯域幅をスレッドに割り当てるための最も一般的なモデルは、それぞれのスレッドを、そのスレッドに割り当てられている発行スロットの分数（たとえば１／２、４／５）の分子および分母を形成する整数のペア｛Ｎ，Ｄ｝に関連付けることである。認められる整数の範囲が十分に大きい場合、このモデルは、スレッドの優先順位の割り当てをほとんど任意にきめ細かく調整することができるが、いくつかの重大な欠点がある。１つの問題としては、｛｛Ｎ０，Ｄ０｝，｛Ｎ１，Ｄ１｝，．．．｛Ｎｎ，Ｄｎ｝｝というペアの大きなセットを、１つの発行スケジュールへと変換するためのハードウェアロジックは、軽微なものとは言えず、スロットの１００％超が割り当てられるエラーのケースを検知することは必ずしも容易ではない。別の問題としては、このようなスキームによって、長期間にわたって、１つのスレッドに発行スロットのＮ／Ｄが割り当てられることになる指定が可能だが、どの発行スロットが、より短いサブセットのコード断片よりも１つのスレッドに割り当てられることになるかに関するあらゆるステートメントを作成できるようには必ずしもならない。
【０１２５】
したがって本発明の一実施形態では、リアルタイムの帯域幅のＱｏＳが望まれるそれぞれのスレッドは、整数のペアの代わりに、そのスレッドに割り当てられるべきスケジューリングスロットを表すビットベクトルに関連付けられる。実施形態では、このベクトルは、システムソフトウェアにとっては、前述のＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒ（図２３）のコンテンツとして見ることができる。ＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒは、３２ビット幅のスケジューリング「マスク」を含むが、代替実施形態では、このマスク内のビット数をより多くしたり、あるいはより少なくしたりすることができる。３２ビット幅のスレッドスケジューリングマスクによって、１つのスレッドに、プロセッサの発行帯域幅の１／３２から３２／３２までを割り当てることができ、さらに特定の発行パターンを指定することもできる。３２ビットのマスクの場合、０ｘａａａａａａａａという値は、１つおきのスロットをスレッドに割り当てる。０ｘ００００ｆｆｆｆという値も、発行帯域幅の５０％をスレッドに割り当てるが、１６個の連続したスロットのブロックで割り当てを行う。０ｘｅｅｅｅｅｅｅｅという値をスレッドＸに割り当て、０ｘ０１０１０１０１という値をスレッドＹに割り当てると、４サイクルごとに３サイクル（３２サイクルのうちの２４サイクル）がスレッドＸに与えられ、８サイクルごとに１サイクル（３２サイクルのうちの４サイクル）がスレッドＹに与えられ、３２サイクルのグループごとの残りの４サイクルは、他の、場合によってはより決定性の低いハードウェアアルゴリズムによって、他のスレッドに割り当てられるために残される。さらに、スレッドＸは、４サイクルごとに３サイクルを有することになるということ、およびスレッドＹには、連続する命令の間に８サイクルを超える間隔が生じることはないということがわかる。
【０１２６】
この実施形態におけるスケジューリングの衝突は、いかなるビットも、複数のスレッドのＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒ内に設定されるはずはないという点から、きわめて簡単に検知することができる。すなわち、ある特定のビットが、１つのスレッドに対して設定された場合、そのビットは、発行マスクが割り当てられる他のすべてのスレッドに対してはゼロでなければならない。衝突は、このように比較的容易に検知される。
【０１２７】
リアルタイムのスレッドに関する発行ロジックは、比較的簡単である。それぞれの発行機会は、３２を法とするインデックスに関連付けられ、このインデックスは、準備ができているすべてのスレッドに送信することができ、それらのスレッドの多くとも１つが、関連付けられている発行スロットを割り当てられることになる。そのスロットにヒットがある場合、関連付けられているスレッドは、その次の命令を発行する。そのスロットを所有するスレッドがない場合、プロセッサは、実行可能なリアルタイムではないスレッドを選択する。
【０１２８】
３２ビット未満のＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒの実装形態であれば、スレッドごとのストレージおよびロジックのサイズは小さくなるが、スケジューリングの柔軟性も低下することになる。原理上は、このレジスタは、６４ビットまで拡張することもでき、あるいは（ＭＩＰＳ  Ｐｒｏｃｅｓｓｏｒの場合、）ＭＩＰＳ３２  ＣＰ０レジスタスペース内のインクリメントする選択値における一連のレジスタとして実装して、さらにいっそう長いスケジューリングベクトルを提供することさえできる。
【０１２９】
スレッドに対する割り込みサービスの免除
前述のように、割り込みサービスによって、例外を取るスレッドの実行時間に相当な変動が生じることがある。したがって厳格なＱｏＳ保証を必要とするスレッドには、割り込みサービスを免除することが望ましい。これは、一実施形態において達成され、この実施形態は、スレッドごとに単一のビットを有し、オペレーティングシステムにとって見ることができ、生じたいかなる非同期例外も、免除されないスレッドがスケジュールされるまで保留する（すなわちＴｈｒｅａｄＳｔａｔｕｓ  ＲｅｇｉｓｔｅｒのビットＩＸＭＴ、図１８および図１９を参照されたい）。これによって、割り込みの待ち時間が増えるが、これは、ＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒの値を選択することによって上限を設定して制御できる程度である。割り込みハンドラの実行が、免除されているリアルタイムのＱｏＳスレッドに割り当てられていない発行スロットの間でしか生じないのであれば、割り込みサービスは、そのようなリアルタイムのコードの実行時間に対して一次的な影響をまったく及ぼさない。
【０１３０】
スレッドへの発行スロットの割り当てと、Ｖｉｒｔｕａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔへの発行スロットの割り当て
可能な限り詳細に前述したＭｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、スレッドリソースの階層的な割り当てについて記述し、ここでは複数のＶＰＥ（Ｖｉｒｔｕａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）が、それぞれ所定の複数のスレッドを含む。それぞれのＶＰＥは、（ＭＩＰＳ  Ｐｒｏｃｅｓｓｏｒで構成される場合には）ＣＰ０および特権を有するリソースアーキテクチャの１つの実装を有するため、１つのＶＰＥで実行されているオペレーティングシステムソフトウェア（「ＯＳ」）は、別のＶＰＥでどの発行スロットが要求されているかを直接把握して制御することはできない。したがってそれぞれのＶＰＥの発行スロットネームスペースは、そのＶＰＥに関連し、これは、発行スロットの割り当ての階層を意味する。
【０１３１】
図３４は、スレッドリソースのこの階層的な割り当てを示す、スケジューリング回路３４００のブロック図である。Ｐｒｏｃｅｓｓｏｒ  Ｓｃｈｅｄｕｌｅｒ３４０２（すなわちホストプロセッサの全体的なスケジューリングロジック）は、「Ｓｌｏｔ  Ｓｅｌｅｃｔ」信号３４０３を介して、ホストプロセッサ内のすべてのＶＰＥ内に配置されているすべてのＶＰＥＳｃｈｅｄｕｌｅレジスタに、１つの発行スロット番号を伝達する。信号３４０３は、ＶＰＥＳｃｈｅｄｕｌｅレジスタ内の１つのビット位置に対応する（この実施形態では、３２個の位置のうちの１つに対応することになる）。Ｓｃｈｅｄｕｌｅｒ３４０２は、このようなビット位置の全体にわたって信号３４０３をくり返し循環させ、それぞれの発行スロットが生じるたびにその位置をインクリメントし、最上位のビット位置（すなわち、この実施形態では３１）に達すると、最下位の位置（すなわち０）にリセットする。
【０１３２】
図３４を参照すると、一例として、ビット位置１（すなわち「Ｓｌｏｔ  １」）が、信号３４０３を介して、ホストプロセッサ内のすべてのＶＰＥＳｃｈｅｄｕｌｅレジスタ、すなわちレジスタ３４１４および３４１６に伝達されている。対応するビットが「設定されている」（すなわち、ロジック１を保持している）いずれかのＶＰＥＳｃｈｅｄｕｌｅレジスタが、「ＶＰＥ  Ｉｓｓｕｅ  Ｒｅｑｕｅｓｔ」信号を用いて、この事実をプロセッサスケジューラに伝える。これに応答して、スケジューラは、「ＶＰＥ  Ｉｓｓｕｅ  Ｇｒａｎｔ」信号を用いて、対象のＶＰＥに現在の発行スロットを許可する。再び図３４を参照すると、（ＶＰＥ０の）ＶＰＥＳｃｈｅｄｕｌｅレジスタ３４１４は、ビット位置１を設定されており、したがってＶＰＥ  Ｉｓｓｕｅ  Ｒｅｑｕｅｓｔ信号３４１５をＰｒｏｃｅｓｓｏｒ  Ｓｃｈｅｄｕｌｅｒ３４０２に送信し、Ｐｒｏｃｅｓｓｏｒ  Ｓｃｈｅｄｕｌｅｒ３４０２は、ＶＰＥ  Ｉｓｓｕｅ  Ｇｒａｎｔ信号３４０５を用いて応答する。
【０１３３】
１つのＶＰＥは、発行を許可されると、そのＶＰＥのレベルで同様のロジックを採用する。再び図３４を参照すると、ＶＰＥ  Ｓｃｈｅｄｕｌｅｒ３４１２（すなわちＶＰＥ０  ３４０６のスケジューリングロジック）は、信号３４０５に応答して、Ｓｌｏｔ  Ｓｅｌｅｃｔ信号３４１３を介して、そのＶＰＥ内に配置されているすべてのＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタに１つの発行スロット番号を提示する。これらのＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタは、それぞれ、対象のＶＰＥによってサポートされているスレッドに関連付けられる。信号３４１３は、ＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタ内の１つのビット位置に対応する（この実施形態では、３２個の位置のうちの１つに対応することになる）。Ｓｃｈｅｄｕｌｅｒ３４１２は、このようなビット位置の全体にわたって信号３４１３をくり返し循環させ、それぞれの発行スロットが生じるたびにその位置をインクリメントし、最上位のビット位置（すなわち、この実施形態では３１）に達すると、最下位のビット位置（すなわち０）にリセットする。このスロット番号は、ＶＰＥＳｃｈｅｄｕｌｅレベルで使用されるスロット番号とは無関係である。
【０１３４】
図３４を参照すると、一例として、ビット位置０（すなわち「Ｓｌｏｔ  ０」）が、信号３４１３で対象のＶＰＥ内のすべてのＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタ、すなわちレジスタ３４１８および３４２０に伝達されている。そのＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタの選択された位置に１つのビットが設定されているいずれかのスレッドが、その事実をＶＰＥスケジューラに示し、そのスレッドが、現在の発行スロットを許可される。図３４を参照すると、（Ｔｈｒｅａｄ  ０の）ＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタ３４１８は、ビット位置０を設定されており、したがってＴｈｒｅａｄ  Ｉｓｓｕｅ  Ｒｅｑｕｅｓｔ信号３４１９を、ＶＰＥ  Ｓｃｈｅｄｕｌｅｒ３４１２に送信し、ＶＰＥ  Ｓｃｈｅｄｕｌｅｒ３４１２は、Ｔｈｒｅａｄ  Ｉｓｓｕｅ  Ｇｒａｎｔ信号３４１７を用いて応答する（これによって、Ｔｈｒｅａｄ  ０に現在の発行スロットを許可する）。示されたスロットに関して、ＶＰＥＳｃｈｅｄｕｌｅビットがまったく設定されていないサイクルや、示されたスロットに関してＴｈｒｅａｄＳｃｈｅｄｕｌｅビットがまったく設定されていないサイクルでは、プロセッサまたはＶＰＥスケジューラは、その他の何らかのデフォルトのスケジューリングアルゴリズムに従って次の発行を許可することになる。
【０１３５】
上述の説明によれば、一実施形態におけるそれぞれのＶＰＥ、たとえば図３４のＶＰＥ  ０（３４０６）およびＶＰＥ  １（３４０４）は、ＶＰＥＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒ（図２４に示されているフォーマット）を割り当てられ、これによって、そのレジスタのコンテンツの長さを法とする特定のスロットを、そのＶＰＥに確定的に割り当てることができる。図３４のＶＰＥＳｃｈｅｄｕｌｅレジスタは、ＶＰＥ  ０用のレジスタ３４１４、およびＶＰＥ  １用のレジスタ３４１６である。いずれのＶＰＥにも割り当てられないこれら発行スロットは、実装形態に固有の割り当てポリシーによって割り当てられる。
【０１３６】
また上述の説明によれば、ＶＰＥ内のスレッドに割り当てられるスロットは、そのＶＰＥに与えられた割り当てから割り当てられる。例えば、図３４に示されているように、１つのプロセッサが、２つのＶＰＥを設定されており、これによって一方が、０ｘａａａａａａａａを含むＶＰＥＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒを有し、他方が０ｘ５５５５５５５５を含むＶＰＥＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒを有する場合、発行スロットは、２つのＶＰＥの間で交互に切り替わることになる。これらのＶＰＥのうちの一方のスレッドが、０ｘ５５５５５５５５を含むＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒを有する場合、そのスレッドは、そのスレッド自身を含むＶＰＥの発行スロットを１つおきに、すなわちプロセッサ全体の発行スロットを３つおきに得ることになる。
【０１３７】
このように、それぞれのＶＰＥに関連付けられているＶＰＥＳｃｈｅｄｕｌｅレジスタの値は、どの処理スロットがそれぞれのＶＰＥに与えられるかを決定する。ＶＰＥ  ０内に示されているＴｈｒｅａｄ  ０およびＴｈｒｅａｄ  １など、具体的なスレッドが、それぞれのＶＰＥに割り当てられている。図示されていないその他のスレッドは、同様にＶＰＥ  １に割り当てられている。たとえばＴｈｒｅａｄ  ０用のレジスタ３４１８およびＴｈｒｅａｄ  １用のレジスタ３４２０など、それぞれのスレッドに１つのＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタが関連付けられている。ＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタの値は、ＶＰＥに割り当てられているそれぞれのＴｈｒｅａｄ用の処理スロットの割り当てを決定する。
【０１３８】
スケジューラ３４０２および３４１２は、上述の機能を実行するための簡単な組合せロジックから構築することができ、本明細書で提供されている開示を与えられれば、必要以上の実験を伴うことなく、当業者の技術の範囲内でこれらのスケジューラを構築することができるであろう。これらは、たとえば組合せロジック、プログラマブルロジック、ソフトウェア等によってなど、説明した機能を実行するための任意の従来の方法で構築することができる。図３３は、本発明のさまざまな実施形態を実施できる一般的な形態のコンピュータシステム３３００を示している。このシステムは、前述および後述の命令（すなわちＦＯＲＫ、ＹＩＥＬＤ、ＭＦＴＲ、ＭＴＴＲ、ＥＭＴ、ＤＭＴ、およびＥＣＯＮＦ）のうちの１つまたは複数をサポートするための（当業者には明らかであるような）、必要なデコードおよび実行ロジックと共に構成されているプロセッサ３３０２を含む。一実施形態では、コア３３０２は、また、図３４に示されているスケジューリング回路３４００を含み、前述のような「ホストプロセッサ」に相当する。システム３３００は、また、プロセッサと双方向通信状態にあるシステムインターフェースコントローラ３３０４と、このシステムインターフェースコントローラによってアクセスできるＲＡＭ３３１６およびＲＯＭ３３１４と、バス３３１２上でシステムインターフェースコントローラと通信する３つのＩ／Ｏデバイス３３０６、３３０８、および３３１０とを含む。本明細書で可能な限り詳細に説明した装置およびコードの応用を通じて、システム３３００は、マルチスレッド化されたシステムとして機能することができる。図３３に示されている一般的な形態に対して多くの変更形態が存在できることは、当業者にとって明らかであろう。たとえばバス３３１２は、複数の形態のうちのいずれの形態をとることもでき、いくつかの実施形態ではオンチップバスとすることができる。同様にＩ／Ｏデバイスの数も典型的なものであり、システムごとに変更することができる。さらに、デバイス３３０６のみが、割り込み要求を発行するものとして示されているが、他のデバイスも、割り込み要求を発行できることは明らかなはずである。
【０１３９】
さらなる改良
ここまで説明した固定された３２ビットのＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタおよびＶＰＥＳｃｈｅｄｕｌｅレジスタ用の実施形態では、発行帯域幅の厳密な奇数の分数を割り当てることができない。すべての発行スロットの厳密に１／３を所与のスレッドに割り当てたいプログラマは、１０／３２または１１／３２を近似値としなければならないであろう。一実施形態におけるさらなるプログラム可能なマスクまたは長さのレジスタによって、プログラマは、ＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒおよび／またはＶＰＥＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒ内のビットのサブセットが、シーケンスを再スタートさせる前に、発行ロジックによって使用されるように指定することができる。たとえばプログラマは、３０ビットのみが有効であると指定し、０ｘ２４９２４９２４によって適切なＶＰＥＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒおよび／またはＴｈｒｅａｄＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒをプログラムする。
【０１４０】
ＹＩＥＬＤ−スレッドをスケジュール解除し、条件付きで割り当て解除する（第２の実施形態）
次いで図３５を参照すると、本発明の代替実施形態によるＹＩＥＬＤ命令３５００のフォーマットを示すブロック図が示されている。図３５のＹＩＥＬＤ命令３５００は、図示されているように、図６の命令６００に類似している。しかし図３５のＹＩＥＬＤ命令３５００は、２つの相違点を含む。第１に、以降で説明するように、ｒｓフィールド３５０２によって指定されているレジスタに保存されている値の意味が、若干異なる。第２に、図３５のＹＩＥＬＤ命令３５００はまた、第２のオペランドフィールドｒｄ  ３５０４を含む。図３５の実施形態では、ｒｄオペランドフィールド３５０４は、ＹＩＥＬＤ命令３５００のビット１１から１５を含む。ｒｄオペランドフィールド３５０４は、以降で説明するように、ＹＩＥＬＤ命令３５００の完了時に、結果値を受け取るＧＰＲなどの宛先レジスタを指定する。
【０１４１】
次いで図３６を参照すると、本発明の図３５の代替実施形態による、図３５のＹＩＥＬＤ命令３５００を実行するためのプロセッサコア３３０２のブロック図が示されている。図３６のプロセッサコア３３０２は、図３３のシステム３３００のプロセッサコア３３０２に類似している。プロセッサコア３３０２は、図３４のスケジューラ３４００を含む。プロセッサコア３３０２はまた、図３５のｒｓフィールド３５０２によって指定されるｒｓレジスタ３６０２、および図３５のｒｄフィールド３５０４によって指定されるｒｄレジスタ３６０４、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６、３１個の２つの入力のＡＮＤゲート３６０８のブロック、および制御ロジック３６１２を含む。
【０１４２】
プロセッサコア３３０２は、ＹＱ０〜ＹＱ３０と示されている、３１個のＹＩＥＬＤ  Ｑｕａｌｉｆｉｅｒ（ＹＱ）入力３６１４を受け取る。ＹＱ入力３６１４は、プロセッサコア３３０２の外部の回路によって生成される信号を受け取ることができ、これらの信号は、図３３のＩ／Ｏデバイス３３０６などのＩ／Ｏデバイスによって生成される割り込み信号を含むが、それには限定されない。ＹＱ入力３６１４は、プロセッサコア３３０２によって内部で生成される信号を受け取ることもでき、これらの信号は、ソフトウェア割り込み信号およびキャッシュミス信号を含むが、それらには限定されない。さらにＹＱ入力３６１４は、プロセッサコア３３０２の外部で生成される信号と内部で生成される信号との組合せを受け取ることができる。一実施形態では、１つの信号ソースを、プロセッサコア３３０２へのＹＱ入力３６１４と割り込み入力の双方に結合することができる。一実施形態では、ＹＱ入力３６１４のうちの１つまたは複数を、１つの信号ソースに接続することはできないが、その代わりに、適切なように論理的な１または０の値に接続することができる。
【０１４３】
簡単に図３７を参照すると、図３６のＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６のフォーマットを示すブロック図が示されている。ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６は、３２ビットのレジスタである。ビット３１はゼロである。ビット０〜３０は、Ｍａｓｋフィールド３７０２を含む。Ｍａｓｋフィールド３７０２は、オペレーティングシステムなどのソフトウェアによってプログラムできるビットベクトルであり、ＹＩＥＬＤ命令３５００を発行しているスレッドをスケジュール変更するための条件として、ＹＱ入力３６１４のうちのどれが使用可能かを指定する。具体的には、ＹＩＥＬＤ命令３５００が、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６内で指定されていないＹＱ入力３６１４を指定した場合、以降で説明するように、プロセッサコア３３０２は例外を立てる。一実施形態では、ＹＱＭａｓｋレジスタ３６０６は、ＶＰＥごとに定義される。
【０１４４】
再び図３６を参照すると、ＡＮＤゲート３６０８のそれぞれは、その入力のうちの１つ上で、対応するＹＱ入力３６１４を受け取る。ＡＮＤゲート３６０８のそれぞれは、その他の入力で、ＹＱＭａｓｋレジスタ３６０６内に保存されている３１ビットベクトルの対応するビットを受け取る。ＡＮＤゲート３６０８の３１個の出力ビットが、ＹＩＥＬＤ命令３５００の完了時に、ｒｄレジスタ３６０４内に保存するための１つのビットベクトルとして提供される。ｒｄレジスタ３６０４の結果値は、図３７に示されているように、アーキテクチャ上はＹＱ入力３６１４と同じビット構成および配置を有するように定義される。
【０１４５】
本明細書で説明したように、ｒｓレジスタ３６０２は、ＹＩＥＬＤ命令３５００を発行しているスレッドをスケジュール変更すべき状況の記述子を保存する。具体的には、ｒｓレジスタ３６０２は、正の値を含む場合、ＹＱ入力３６１４のビットベクトルを指定する。ｒｓ３６０２ビットベクトル内で指定されているＹＱ入力３６１４のうちの１つが真である場合、プロセッサコア３３０２は、そのスレッドをスケジュール変更する。
【０１４６】
制御ロジック３６１２は、ＹＱ入力３６１４、ＹＱＭａｓｋレジスタ３６０６のコンテンツ、およびｒｓレジスタ３６０２のコンテンツを受け取る。制御ロジック３６１２は、本明細書に記載されている機能を実行するように構成されている、組合せおよびシーケンシャルロジック、プログラマブルロジック、ソフトウェアなどを含むことができるが、それらには限定されない。制御ロジック３６１２は、例外信号３６２２、スレッド終了信号３６２４、スレッド一時停止信号３６２６、およびスレッドスケジュール変更信号３６２８を生成し、これらはすべてスケジューラ３４００に提供される。一実施形態では、制御ロジック３６１２とスケジューラ３４００は統合される。
【０１４７】
例外信号３６２２は、ＹＩＥＬＤ命令３５００によって例外が生じていることを示す。一実施形態では、ｒｓレジスタ３６０２ビットベクトルの値が、ＹＱＭａｓｋレジスタ３６０６内の対応するビットが空いているＹＱ入力３６１４を指定する場合に、ＹＩＥＬＤ命令３５００によって例外が生じる。一実施形態では、そのスレッドが終了されるよう（すなわちゼロのｒｓレジスタ３６０２の値を介するよう）ＹＩＥＬＤ命令３５００が指定している一方で、そのＹＩＥＬＤ命令３５００を発行しているスレッドが、動的に割り当て可能なスレッドではない場合、すなわちそのスレッドがワイヤードのスレッドである場合に、そのＹＩＥＬＤ命令３５００によって例外が生じる。一実施形態では、そのスレッドが終了されるよう（すなわちゼロのｒｓレジスタ３６０２の値を介するよう）、ＹＩＥＬＤ命令３５００が指定している一方で、スケジューリングに利用できる他のスレッドがまったくない場合に、そのＹＩＥＬＤ命令３５００によって例外が生じる。
【０１４８】
終了信号３６２４は、ＹＩＥＬＤ命令３５００を発行しているスレッドを、終了させるべきであること、すなわち割り当て解除すべきであることを示す。プロセッサコア３３０２は、スレッドから命令をフェッチおよび発行することを停止することによって、そのスレッドを終了させる、すなわち割り当て解除する。さらにプロセッサコア３３０２は、それまでそのスレッドの実行用として割り当てられていたハードウェアの状態、またはリソース、すなわちスレッドコンテキストを解放して、その解放されたハードウェア状態を、別のスレッドによる割り当てに利用できるようにする。一実施形態では、ハードウェアリソースは、図１５に示されているレジスタの一部などを含む、プログラムカウンタレジスタ、汎用レジスタのセット、乗算器結果レジスタ、および／あるいは１つまたは複数の特権を有するシステムコプロセッサリソースを含むことができるが、それらには限定されない。
【０１４９】
一時停止信号３６２６は、ＹＩＥＬＤ命令３５００を発行しているスレッドを、一時停止すべきであること、すなわちブロックすべきであることを示す。プロセッサコア３３０２は、スレッドから命令をフェッチおよび発行することを停止することによって、そのスレッドを一時停止する、すなわちブロックする。
【０１５０】
スケジュール変更信号３６２８は、ＹＩＥＬＤ命令３５００を発行しているスレッドを、スケジュール変更すべきであることを示す。プロセッサコア３３０２は、スレッドスケジューリングポリシーに従ってスレッドを実行に適格であると指定することによって、そのスレッドをスケジュール変更する。すなわちプロセッサコア３３０２は、そのスレッドをその時点で実行の準備が整っているスレッドのリストに追加し、これによってプロセッサコア３３０２は、そのスレッドのプログラムカウンタから命令をフェッチおよび発行するようスケジューラ３４００に指定されると、その処理を開始する。
【０１５１】
次いで図３８を参照すると、本発明による図３５の代替実施形態のＹＩＥＬＤ命令３５００を実行するための、図３６のプロセッサコア３３０２のオペレーションを示すフローチャートが示されている。フローは、判定ブロック３８０２において開始する。
【０１５２】
判定ブロック３８０２において、図３６の制御ロジック３６１２は、ｒｓレジスタ３６０２を点検して、その値がゼロであるかどうかを判定する。その値がゼロである場合、フローはブロック３８０４へ進み、その値がゼロではない場合、フローは判定ブロック３８０６へ進む。
【０１５３】
ブロック３８０４において、制御ロジック３６１２は、図３６の終了信号３６２４に真の値を生成して、そのスレッドを終了させる。すなわち、そのスレッドは、スケジュール変更されず、そのスレッドのコンテキストは、割り当て解除され、後続のＦＯＲＫ命令３００による割り当て用として解放される。一実施形態では、ＹＩＥＬＤ命令３５００がそのスレッドを終了させ、スケジューリングに利用できる他のスレッドがまったくない場合、プロセッサコア３３０２は例外を立てる。一実施形態では、プロセッサコア３３０２がそのスレッドを終了させた場合、ｒｄレジスタ３６０４内には何の値も返されない。フローは、ブロック３８０４において終了する。
【０１５４】
判定ブロック３８０６において、制御ロジック３６１２は、ｒｓレジスタ３６０２を点検して、その値がマイナス１（−１）であるかどうかを判定する。その値がマイナス１である場合、フローはブロック３８１８へ進み、その値がマイナス１ではない場合、フローは判定ブロック３８０８へ進む。
【０１５５】
ブロック３８０８において、制御ロジック３６１２は、ｒｓレジスタ３６０２内に保存されているビットベクトルを、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６内に保存されているビットベクトルと比較する。一実施形態では、−１以外のｒｓレジスタ３６０２の負の値は確保され、したがってブロック３８０８において、ｒｓレジスタ３６０２内に保存されている値は正の値であることがわかる。フローは、判定ブロック３８１２へ進む。
【０１５６】
判定ブロック３８１２において、制御ロジック３６１２は、ｒｓレジスタ３６０２内に設定されているビット０〜３０のいずれかが、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６内の対応する空いているビットを有しているかどうかを判定する。対応する空いているビットを有している場合、フローはブロック３８１４へ進み、対応する空いているビットを有していない場合、フローは判定ブロック３８１６へ進む。
【０１５７】
ブロック３８１４において、制御ロジック３６１２は、例外信号３６２２に真の値を生成して、そのスレッドが無効なＹＱ入力３６１４を指定されていることを示す。フローは、ブロック３８１４において終了する。
【０１５８】
判定ブロック３８１６において、制御ロジック３６１２は、ＹＱ入力３６１４を点検して、ｒｓレジスタ３６０２に設定されているビットによって指定されているＹＱ入力３６１４が、すべて偽であるかどうかを判定する。ｒｓレジスタ３６０２に設定されているビットによって指定されているＹＱ入力３６１４が、すべて偽である場合、フローは判定ブロック３８１６へ戻り、制御ロジック３６１２は、一時停止信号３６２６に引き続き真の値を生成して、ｒｓレジスタ３６０２内の設定されているビットによって指定されているＹＱ入力３６１４のうちの１つが、真になるまで、そのスレッドを一時停止したままにする。ｒｓレジスタ３６０２に設定されているビットによって指定されているＹＱ入力３６１４が、すべて偽というわけではない場合、フローはブロック３８１８へ進む。
【０１５９】
ブロック３８１８において、制御ロジック３６１２は、図３６のスケジュール変更信号３６２８に真の値を生成して、スケジューラ３４００にスレッドをスケジュール変更させる。すなわち、そのスレッドは、次の機会のスケジューリングには適格であるが、スケジューラ３４００に働きかけて、スケジューラ３４００のスケジューリングポリシーに従って、最初に実行すべき他のスレッドのためにプロセッサコア３３０２を譲る。フローは、ブロック３８２２へ進む。
【０１６０】
ブロック３８２２において、プロセッサコア３３０２は、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６の値によってマスクされたＹＱ入力３６１４の信号値、すなわち図３６のＡＮＤゲートの出力を、ｒｄレジスタ３６０４内に保存する。一実施形態では、ＹＱ入力３６１４の信号値は、ＹＩＥＬＤ命令３５００がプロセッサコア３３０２によって引き下げられる時点でサンプリングされる。フローは、ブロック３８２２において終了する。
【０１６１】
一実施形態では、スケジューラ３４００が、ＹＩＥＬＤ命令３５００を含むスレッドをブロック３８１８においてスケジュール変更した後に、そのスレッドの実行を開始するまで、プロセッサコア３３０２はそのスレッド内の命令を発行しない。
【０１６２】
図３５〜図４０では、ＹＩＥＬＤ命令３５００への入力オペランドが、汎用レジスタすなわちｒｓレジスタ３６０２内に提供される一実施形態について説明しているが、他の実施形態では、入力オペランドは、メモリを介して、あるいは汎用以外のレジスタを介してなど、その他の手段を介して提供することができる。たとえば、プロセッサ３３０２が、レジスタベースのプロセッサである実施形態について説明してきたが、プロセッサが、Ｊａｖａ（登録商標）バーチャルマシンコードを効率よく実行するように構成されているプロセッサなど、スタックベースのプロセッサであるその他の実施形態も考えられる。そのような実施形態では、ＹＩＥＬＤ命令３５００の入力オペランドは、レジスタ内ではなくメモリ内のオペランドスタック内に指定することができる。たとえば、それぞれのスレッドコンテキストは、スタックポインタレジスタを含むことができ、ＹＩＥＬＤ命令３５００のフィールドは、プロセッサのレジスタスペース内にレジスタを指定するのではなく、そのスタックポインタレジスタの値に関連してスタックメモリへのＹＩＥＬＤ入力オペランドのオフセットを指定することができる。同様に、ＹＩＥＬＤ命令３５００の戻り値は、レジスタ内ではなくオペランドスタックに戻すことができる。
【０１６３】
上述の説明からわかるように、本発明のＹＩＥＬＤ命令３５００は、有利なことに、ｒｓ３６０２入力オペランドの値に基づいて、スレッドを条件付きで終了させるための手段を提供する。並列の、またはマルチスレッド化された計算においては、実行のスレッドを終了させる条件は、ランタイムに計算することができる。たとえばループは、満たすべき条件のセットに関してテストを行うことができ、これに応じてテストに基づいてループを選択的に終了させることができる。本発明のＹＩＥＬＤ命令３５００によって、スレッドは、ｒｓレジスタ３６０２内にゼロまたはマイナス１のいずれかの値を生成する計算を実行することができ、その結果、スレッドは、ｒｓレジスタ３６０２の値にＹＩＥＬＤ命令３５００を実行して、（ゼロで）終了するか、または（マイナス１で）継続し、分岐してループの最初に戻るかのいずれかとなる。さらなる比較および分岐命令を用いて、同様の効果を達成することもできるが、本発明の条件付きの値に基づくＹＩＥＬＤ命令３５００によって、マルチスレッド化されたコードをよりコンパクトにすることができ、マイクロプロセッサ１００パイプライン内でさらに効率よく実行することができる。
【０１６４】
上述の説明からわかるように、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６をプログラムして、ｒｄレジスタ３６０４の戻り値を特定の方法で使用することによって、プログラムは、ブロックしているＹＩＥＬＤ命令３５００のオペレーションの２つの潜在的に有用なシミュレーションを実行することができる。
【０１６５】
第１に、オペレーティングシステムは、特定のＹＱ入力３６１４でブロックするＹＩＥＬＤ命令３５００のオペレーションを、たとえそのＹＱ入力３６１４に接続される信号のハードウェアソースが存在していなくても、アプリケーションプログラムを修正することなく、シミュレートすることができる。このシミュレーションは、ハードウェア信号ソースの開発中に、あるいはそのプロトタイプの開発中に、アプリケーションプログラムをテストする上で役に立つ可能性がある。オペレーティングシステムは、欠けているＹＱ入力３６１４に対応するビットをクリアするように、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６をプログラムすることができ、これによって、ｒｓレジスタ３６０２内に設定されている対応するビットを有するＹＩＥＬＤ  ｒｄ、ｒｓ３５００は、例外を起こす。その例外に応答して、オペレーティングシステムは、「仮想の」ＹＱ入力３６１４が真であるとシミュレートするのが妥当な時点まで、スレッドを一時停止する。その時点で、オペレーティングシステムは、ＹＩＥＬＤ命令３５００のｒｄフィールド３５０４をデコードして、どのレジスタが、ｒｄレジスタ３６０４として選択されたかを判断し、適切な値をｒｄレジスタ３６０４に書き込み、スレッドのプログラムカウンタをＹＩＥＬＤ命令３５００の直後の命令まで進め、スレッドの実行を再開する。アプリケーションプログラムにとっては、まるでＹＩＥＬＤ命令３５００が、指定されたＹＱ入力３６１４での真の値に応答してブロックし、待機し、スケジュール変更されているかのように見える。さらにオペレーティングシステムは、複数のプロセッサコア３３０２の間でロードバランシングを実行することなど、スレッドを１つのプロセッサコア３３０２から別のプロセッサコアへ移行する際に、プログラムオペレーションを保証するために、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６を採用することができる。
【０１６６】
第２に、アプリケーションプログラムは、ｒｓレジスタ３６０２によって指定されているＹＱ入力３６１４のセットが真になるまで、ＹＩＥＬＤ命令３５００の実行をブロックすることによって、プロセッサコア３３０２がハードウェア内で実行するオペレーションをソフトウェア内で明確にシミュレートすることができる。このソフトウェアシミュレーションは、ハードウェアが、割り込み要求に応答して実行を割り込みサービスルーチンに移行できるようにすることよりも、むしろ割り込みを求めてポーリングを行うプログラムに類似している。通常の場合、すなわちシミュレーション以外の場合には、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６は、１つまたは複数のビットを設定され、ＹＩＥＬＤ  ｒｄ、ｒｓ３５００は、ｒｓレジスタ３６０２内の対応するビットが設定された場合に実行されることを前提とする。プロセッサコア３３０２は、指定されているＹＱ入力３６１４のうちの１つが真になるまで、スレッドがＹＩＥＬＤ命令３５００を発行するのを一時停止する。このオペレーションをシミュレートするために、プログラムは、問題のＹＱ入力３６１４のセットを指定するビットベクトルをＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６内に保存する。プログラムは、ＹＩＥＬＤ  ｒｄ、ｒｓ３５００を発行し、そこではｒｓレジスタ３６０２の値は−１であり、これによってスレッドは、ブロックすることなくスケジュール変更される。ＹＩＥＬＤ命令３５００が完了した時点で、ｒｄレジスタ３６０４内の戻り値には、ＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒ３６０６内で指定されているＹＱ入力３６１４の信号値が含まれていることになる。次いでアプリケーションプログラムは、その戻り値をテストし、その戻り値がゼロである場合には、その戻り値がゼロ以外の値になるまで、ＹＩＥＬＤ命令３５００にループバックする。したがって、−１というｒｓレジスタ３６０２の値を指定するＹＩＥＬＤ命令３５００は、ＹＱ入力３６１４をポーリングまたはサンプリングする手段となり、これは、それ以外の場合には、ＹＩＥＬＤ命令３５００を発行しているスレッドの実行をブロックするために、プロセッサコア３３０２のハードウェアによって使用されることになる。プログラムスレッドの実行は、依然として実際の指定されているＹＱ入力３６１４に基づいて制御されるが、ハードウェアによるスレッドのブロッキングは、プロセッサコア３３０２ではなくプログラム自体によってシミュレートされるという点に留意されたい。
【０１６７】
次いで図３９を参照すると、本発明の図３５の代替実施形態によるＹＩＥＬＤ命令３５００を実行するための図３６のプロセッサコア３３０２を含む、図３３の処理システム３３００などの処理システム３３００を示すブロック図が示されている。システム３３００は、信号３９１２を生成する信号ソース３９０８を含み、信号３９１２は、図３３のＩ／Ｏデバイス３３０６によって生成される割り込み要求信号などであるが、それらには限定されない。
【０１６８】
システム３３００は、また、ＹＱ入力管理ブロック３９０２を含む。ＹＱ入力管理ブロック３９０２は、対応する多重通信回路３９０４を制御する３１個のＹＱ  Ｍａｐ  Ｒｅｇｉｓｔｅｒ３９０６を含む。図３９の実施形態は、ＹＱ  Ｍａｐ  Ｒｅｇｉｓｔｅｒ  ０  ３９０６、ＹＱ  Ｍａｐ  Ｒｅｇｉｓｔｅｒ  １  ３９０６、およびＹＱ  Ｍａｐ  Ｒｅｇｉｓｔｅｒ  ３０  ３９０６と表示されている、３つのＹＱ  Ｍａｐ  Ｒｅｇｉｓｔｅｒ３９０６を示しており、それらの対応する多重通信回路３９０４の出力が、ＹＱ入力０  ３６１４、ＹＱ入力１  ３６１４、およびＹＱ入力３０  ３６１４にそれぞれ結合されている。多重通信回路３９０４のそれぞれは、信号ソース３９０８からの信号３９１２をすべて受け取り、そのそれぞれのＹＱ  Ｍａｐ  Ｒｅｇｉｓｔｅｒ３９０６によって提供される選択入力に基づいて、そのそれぞれのＹＱ入力３６１４に提供するためにそれらの信号３９１２のうちの１つを選択する。一実施形態では、ＹＱ  Ｍａｐ  Ｒｅｇｉｓｔｅｒ３９０６は、プロセッサコア３３０２で実行されているプログラムによってプログラムすることができる。一実施形態では、ＹＱ入力管理ブロック３９０２は、プロセッサコア３３０２の外部に存在するのではなく、プロセッサコア３３０２内に含まれる。別の実施形態では、ＹＱ入力管理ブロック３９０２は、プロセッサコア３３０２に対するコプロセッサ内に含まれる。
【０１６９】
次いで図４０を参照すると、本発明による図３５の代替実施形態の代替実施形態による図３５のＹＩＥＬＤ命令３５００のｒｓフィールド３５０２内で指定されている、ｒｓレジスタ３６０２のセマンティックを示すブロック図が示されている。図４０の実施形態は、図３６のＹＱ入力３６１４のうち３１個ではなく４つのみを受け取る、プロセッサコア３３０２において採用される。この４つのＹＱ入力３６１４は、図３９のＹＱ入力管理ブロックと同様のＹＱ入力管理ブロック３９０２内にプログラムされた値に基づいて選択される。一実施形態では、ＹＱ入力管理ブロック３９０２は、プロセッサコア３３０２に対するコプロセッサ内に含まれる。一実施形態では、それぞれのスレッドコンテキストは、１つのＹＱ入力管理ブロック３９０２を含む。
【０１７０】
ｒｓレジスタ３６０２は、８つの４ビットフィールドに分割される。それらのフィールドのうちの４つは、反転マスクフィールドであり、ＩＮＶ３、ＩＮＶ２、ＩＮＶ１、およびＩＮＶ０と表示されている。それらのフィールドのうちの４つは、ＡＮＤ対応タームフィールドであり、ＡＮＤ３、ＡＮＤ２、ＡＮＤ１、およびＡＮＤ０と表示されている。図４０に示されているテーブルは、これらのフィールドのそれぞれについて記述している。
【０１７１】
制御ロジック３６１２は、ｒｓレジスタ３６０２の値に基づいて、ＹＱ入力３６１４に対して下記の操作を実行するための回路を含む。ＹＱ入力３６１４の４つの値は、信号３９１２への自身のマッピングを、ＹＱ入力管理ブロック３９０２によって制御され、４つの独立したＸＯＲゲートのセットに持ち込まれ、そこでは、対応するＩＮＶｘフィールド内に設定されているビットを反転して、アクティブな高い値の条件付きのセットが作成される。４つの条件付きのクォリファイヤのそれぞれが、独立したｎ−Ｗａｙ  ＡＮＤブロックに提供され、そこでは、関連付けられているＡＮＤｘフィールドによって選択されたビットのセットが、インプリシットの１（すなわち１つのＡＮＤｘビットのみが設定されている場合、出力は、対応する入力を追跡する）と共にＡＮＤ処理されて、４つのゲート制御されたクォリファイヤのうちの１つが作成される。次いで４つのゲート制御されたクォリファイヤが、一緒にＯＲ処理される。その結果がゼロ以外である場合、制御ロジック３６１２は、スケジュール変更信号３６２８に真の値を生成して、スレッドをスケジュール変更する。
【０１７２】
一実施形態では、ｒｄレジスタ３６０４内に保存される戻り値は、４つのゲート制御されたクォリファイヤの値のベクトルである。一実施形態では、戻り値は、ｒｄレジスタ３６０４の最下位ビット内に保存される。別の実施形態では、戻り値は、２ビットだけ左にシフトされてアドレスオフセットを作成し、スケジュール変更の理由に基づいてソフトウェアの切り替えを容易にする。
【０１７３】
図３５の実施形態におけるように、ｒｓレジスタ３６０２のゼロの値は、スレッドを終了させる。しかし、−１によって図３５において指定されているスレッドの無条件のスケジュール変更を達成するために、ｒｓレジスタ３６０２は、ＩＮＶおよびＡＮＤマスクを使用した値を用いて、４つのＹＱ入力３６１４のうちの任意の「Ａ」に関して（Ａ）｜（〜Ａ）を作成するようにプログラムされる。
【０１７４】
３１個のＹＱ入力３６１４が提供される実施形態について説明し、また３２ビットのアーキテクチャについて説明してきたが、本明細書に記載されているＹＩＥＬＤ命令３５００は、これらの実施形態に限定されるものではなく、さまざまな入力数およびレジスタサイズへと拡張または縮小することができる。
【０１７５】
もちろん本出願に記載されているＭｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、たとえば「ＣＰＵ」（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、マイクロプロセッサ、マイクロコントローラ、デジタルシグナルプロセッサ、プロセッサコア、「ＳＯＣ」（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）、あるいはその他の任意のプログラム可能なデバイス内にある、またはそれらに結合されているハードウェアで具体化することができる。さらにＭｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、たとえばソフトウェアを格納するように構成されている、コンピュータで使用可能な（たとえば読み取り可能な）メディア内に配置されたソフトウェア（たとえばソース、オブジェクト、マシン語などの任意の形式で配置された、コンピュータ可読コード、プログラムコード、命令、および／またはデータ）で具体化することができる。このようなソフトウェアによって、本明細書に記載されている装置およびプロセスの機能、製作、モデリング、シミュレーション、記述、および／またはテストが可能となる。たとえば、これは、一般的なプログラミング言語（たとえばＣ、Ｃ＋＋）、ＧＤＳＩＩデータベース、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬ、ＡＨＤＬ（Ａｌｔｅｒａ  ＨＤＬ）などを含むハードウェア記述言語（ＨＤＬ）（ｈａｒｄｗａｒｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｌａｎｇｕａｇｅｓ）、あるいはその他の利用可能なプログラム、データベース、および／または回路（すなわち回路図）取り込みツールを使用することを通じて、達成することができる。このようなソフトウェアは、半導体、磁気ディスク、光ディスク（たとえばＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）を含む任意の知られている、コンピュータで使用可能なメディア内に、またコンピュータで使用可能な（たとえば読み取り可能な）伝送メディア（たとえば搬送波、あるいはデジタルメディア、光メディア、またはアナログベースのメディアを含むその他の任意のメディア）で具体化されるコンピュータデータ信号として、配置することができる。そのようなものとして、このソフトウェアは、インターネットおよびイントラネットを含む通信ネットワークを介して伝送することができる。
【０１７６】
ソフトウェアで具体化されるＭｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、（たとえばＨＤＬで具体化される）プロセッサコアなどの半導体知的所有権の中核に含むことができ、集積回路を製造する際にハードウェアへと変形することができる。さらに、本明細書に記載されているＭｕｌｔｉｔｈｒｅａｄｉｎｇ  ＡＳＥは、ハードウェアとソフトウェアの組合せとして具体化することができる。
【０１７７】
本発明の趣旨および範囲から逸脱することなく、本明細書に記載の実施形態にさまざまな変更を施すことができることは、当業者にとって明らかであろう。たとえば記載されている実施形態については、具体的な例としてＭＩＰＳのプロセッサ、アーキテクチャ、および技術を使用して説明した。さまざまな実施形態における本発明は、より広く応用することができ、そのような例に特に限定されるものではない。さらに当業者ならば、微妙に異なるやり方で上述の機能をプログラムする方法を見つける可能性があり、それも本発明の範囲内に収まるはずである。ＱｏＳに関する教示においては、ＴｈｒｅａｄＳｃｈｅｄｕｌｅ  ＲｅｇｉｓｔｅｒおよびＶＰＥＳｃｈｅｄｕｌｅ  Ｒｅｇｉｓｔｅｒのコンテンツは、長さに限定されるものではなく、本発明の趣旨および範囲内で多くの変更を施すことができる。
【０１７８】
したがって、本発明は、特許請求の範囲によってのみ限定される。
【０１７９】
最後に、開示されている概念および特定の実施形態は、特許請求の範囲によって規定される本発明の趣旨および範囲から逸脱することなく、本発明の同じ目的を達成するためのその他の構造を設計または修正するための基盤として、容易に使用できるということを当業者なら理解するはずである。
【図面の簡単な説明】
【０１８０】
【図１Ａ】キャッシュミスを経験して失速している単一の命令ストリームを示す図である。
【図１Ｂ】図１Ａのストリームが失速している間に実行できる命令ストリームを示す図である。
【図２Ａ】シングルスレッドプロセッサを示す図である。
【図２Ｂ】デュアルスレッドプロセッサ２５０を示す図である。
【図３】本発明の一実施形態における第１および第２のＶＰＥをサポートするプロセッサを示す図である。
【図４】本発明の一実施形態における３つのスレッドをサポートする単一のＶＰＥをサポートするプロセッサを示す図である。
【図５】本発明の一実施形態におけるＦＯＲＫ命令用のフォーマットを示す図である。
【図６】本発明の第１の実施形態におけるＹＩＥＬＤ命令用のフォーマットを示す図である。
【図７】ＧＰＲ  ｒｓ用の１６ビットのクォリファイヤマスクを示すテーブルである。
【図８】本発明の一実施形態におけるＭＦＴＲ命令用のフォーマットを示す図である。
【図９】本発明の一実施形態におけるＭＦＴＲ命令のフィールドを解釈するためのテーブルである。
【図１０】本発明の一実施形態におけるＭＴＴＲ命令用のフォーマットを示す図である。
【図１１】本発明の一実施形態におけるＭＴＴＲ命令のｕおよびｓｅｌビットを解釈するためのテーブルである。
【図１２】本発明の一実施形態におけるＥＭＴ命令用のフォーマットを示す図である。
【図１３】本発明の一実施形態におけるＤＭＴ命令用のフォーマットを示す図である。
【図１４】本発明の一実施形態におけるＥＣＯＮＦ命令用のフォーマットを示す図である。
【図１５】本発明の一実施形態におけるシステムコプロセッサの特権を有するリソースのテーブルである。
【図１６】本発明の一実施形態におけるＴｈｒｅａｄＣｏｎｔｒｏｌレジスタのレイアウトを示す図である。
【図１７】本発明の一実施形態におけるＴｈｒｅａｄＣｏｎｔｒｏｌレジスタフィールドを定義するテーブルである。
【図１８】本発明の一実施形態におけるＴｈｒｅａｄＳｔａｔｕｓレジスタ用のレイアウトを示す図である。
【図１９】本発明の一実施形態におけるＴｈｒｅａｄＳｔａｔｕｓレジスタのフィールドを定義するテーブルである。
【図２０】本発明の一実施形態におけるＴｈｒｅａｄＣｏｎｔｅｘｔレジスタのレイアウトを示す図である。
【図２１】本発明の一実施形態におけるＴｈｒｅａｄＣｏｎｆｉｇレジスタのレイアウトを示す図である。
【図２２】本発明の一実施形態におけるＴｈｒｅａｄＣｏｎｆｉｇレジスタのフィールドを定義するテーブルである。
【図２３】本発明の一実施形態におけるＴｈｒｅａｄＳｃｈｅｄｕｌｅレジスタのレイアウトを示す図である。
【図２４】本発明の一実施形態におけるＶＰＥＳｃｈｅｄｕｌｅレジスタのレイアウトを示す図である。
【図２５】本発明の一実施形態におけるＣｏｎｆｉｇ４レジスタのレイアウトを示す図である。
【図２６】本発明の一実施形態におけるＣｏｎｆｉｇ４レジスタのフィールドを定義するテーブルである。
【図２７】スレッド例外にとって必要とされるＣａｕｓｅレジスタＥｘｃＣｏｄｅ値を定義するテーブルである。
【図２８】ＩＴＣインジケータを定義するテーブルである。
【図２９】Ｃｏｎｆｉｇ３レジスタフィールドを定義するテーブルである。
【図３０】ＶＰＥコンテキストごとのＶＰＥ禁止ビットを示すテーブルである。
【図３１】ＩＴＣストレージの動作を示すテーブルである。
【図３２】本発明の一実施形態におけるＹＩＥＬＤ機能のオペレーションを示す流れ図である。
【図３３】本発明の一実施形態におけるコンピューティングシステムを示す図である。
【図３４】本発明の一実施形態における、プロセッサ内ではＶＰＥにより、およびＶＰＥ内ではスレッドによるスケジューリングを示す図である。
【図３５】本発明の代替実施形態によるＹＩＥＬＤ命令のフォーマットを示すブロック図である。
【図３６】本発明の図３５の代替実施形態による、図３５のＹＩＥＬＤ命令を実行するためのプロセッサコアを示すブロック図である。
【図３７】図３６のＹＱＭａｓｋ  Ｒｅｇｉｓｔｅｒのフォーマットを示すブロック図である。
【図３８】本発明の図３５の代替実施形態による、図３５のＹＩＥＬＤ命令を実行するための図３６のプロセッサコアのオペレーションを示すフローチャートである。
【図３９】本発明の図３５の代替実施形態による、ＹＩＥＬＤ命令を実行するための図３６のプロセッサコアを含む、図３３の処理システムなどの処理システムを示すブロック図である。
【図４０】本発明による代替実施形態による、図３５のＹＩＥＬＤ命令のｒｓレジスタのセマンティックを示すブロック図である。
【図１Ａ】
2007504539.tif 000006
【図１Ｂ】
2007504539.tif 000007
【図２Ａ】
2007504539.tif 000008
【図２Ｂ】
2007504539.tif 000009
【図３】
2007504539.tif 000010
【図４】
2007504539.tif 000011
【図５】
2007504539.tif 000012
【図６】
2007504539.tif 000013
【図７】
2007504539.tif 000014
【図８】
2007504539.tif 000015
【図９】
2007504539.tif 000016
【図１０】
2007504539.tif 000017
【図１１】
2007504539.tif 000018
【図１２】
2007504539.tif 000019
【図１３】
2007504539.tif 000020
【図１４】
2007504539.tif 000021
【図１５】
2007504539.tif 000022
【図１６】
2007504539.tif 000023
【図１７】
2007504539.tif 000024
【図１８】
2007504539.tif 000025
【図１９】
2007504539.tif 000026
【図２０】
2007504539.tif 000027
【図２１】
2007504539.tif 000028
【図２２】
2007504539.tif 000029
【図２３】
2007504539.tif 000030
【図２４】
2007504539.tif 000031
【図２５】
2007504539.tif 000032
【図２６】
2007504539.tif 000033
【図２７】
2007504539.tif 000034
【図２８】
2007504539.tif 000035
【図２９】
2007504539.tif 000036
【図３０】
2007504539.tif 000037
【図３１】
2007504539.tif 000038
【図３２】
2007504539.tif 000039
【図３３】
2007504539.tif 000040
【図３４】
2007504539.tif 000041
【図３５】
2007504539.tif 000042
【図３６】
2007504539.tif 000043
【図３７】
2007504539.tif 000044
【図３８】
2007504539.tif 000045
【図３９】
2007504539.tif 000046
【図４０】
2007504539.tif 000047
【国際調査報告】
2007504539.tif 000048
2007504539.tif 000049
2007504539.tif 000050