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