(57)【要約】      （修正有）【課題】パイプラインプロセッサにおいてコンテキストスイッチを不要とする。【解決手段】複数のプロセッサスレッドに関連した命令をフェッチするように動作可能な命令フェッチユニットと、命令フェッチユニットに応答するデコーダと、デコーダに応答する発行ロジックと、複数のプロセッサスレッドに対応する複数のバンクを含むレジスタファイルとを含むプロセッサが提供される。各バンクは、対応するプロセッサスレッドに関連したデータを記憶するように動作可能である。プロセッサは、複数のプロセッサスレッドのそれぞれに対応する一組のレジスタを含むことができる。一組の中の各レジスタは、プロセッサのパイプラインステージの前又は後のいずれかに配置される。【選択図】図１
2006260571.tif 000002
【特許請求の範囲】
【請求項１】
パイプラインステージであって、
第１の入力レジスタと、
第２の入力レジスタと、
第１の出力レジスタと、
第２の出力レジスタと、
前記第１の入力レジスタ及び前記第２の入力レジスタと通信する第１のセレクタと、
前記第１の出力レジスタ及び前記第２の出力レジスタと通信する第２のセレクタと、
第１のプロセッサスレッドに関連したデータが、該第１のプロセッサスレッドが処理されている時間の間に、前記第１の入力レジスタ、該パイプラインステージ、及び前記第１の出力レジスタを通過し、第２のプロセッサスレッドに関連したデータが、該第２のプロセッサスレッドが処理されている時間の間に、前記第２の入力レジスタ、該パイプラインステージ、及び前記第２の出力レジスタを通過するように、前記第１のセレクタ及び前記第２のセレクタの切り換えを制御するように動作可能なコントローラと、
を含む該パイプラインステージ、
を備え、
前記第１の入力レジスタ及び前記第１の出力レジスタは、前記第１のプロセッサスレッドの状態を記憶するように動作可能であり、前記第２の入力レジスタ及び前記第２の出力レジスタは、前記第２のプロセッサスレッドの状態を記憶するように動作できる、プロセッサ。
【請求項２】
前記コントローラは、前記第１のプロセッサスレッド及び前記第２のプロセッサスレッドのそれぞれに割り当てられるプロセッサ時間を定義した入力に基づいて、前記第１のセレクタ及び前記第２のセレクタの切り換えを制御する、請求項１に記載のプロセッサ。
【請求項３】
前記第１のプロセッサスレッドに関連した割り込み要求をハンドリングする第１の割り込みハンドリングルーチンと、
前記第２のプロセッサスレッドに関連した割り込み要求をハンドリングする第２の割り込みハンドリングルーチンと、
をさらに備える、請求項１に記載のプロセッサ。
【請求項４】
前記第１の割り込みハンドリングルーチン及び前記第２の割り込みハンドリングルーチンは、別々のエントリーポイントを有する、請求項３に記載のプロセッサ。
【請求項５】
前記第１のプロセッサスレッドに関連した例外要求をハンドリングする第１の例外ハンドリングルーチンと、
前記第２のプロセッサスレッドに関連した例外要求をハンドリングする第２の例外ハンドリングルーチンと、
をさらに備える、請求項１に記載のプロセッサ。
【請求項６】
前記第１のプロセッサスレッド及び前記第２のプロセッサスレッドの双方に関連した実質的にすべての例外要求又は実質的にすべての割り込み要求をそれぞれハンドリングする単一の例外ハンドリングルーチン又は単一の割り込みハンドリングルーチンをさらに備える、請求項１に記載のプロセッサ。
【請求項７】
前記第１のプロセッサスレッド及び前記第２のプロセッサスレッドを含む複数のプロセッサスレッドのそれぞれに対応する一組のレジスタであって、該一組の中の各レジスタは、前記プロセッサの前記パイプラインステージの前又は後のいずれかに配置される、一組のレジスタ、
をさらに備え、
前記コントローラは、現在実行中のプロセッサスレッドの状態を対応する一組のレジスタに記憶すること、及び対応する一組のレジスタから別のプロセッサスレッドの状態をロードして、該別のプロセッサスレッドの処理を可能にすることを含む、コンテキストスイッチを前記複数のプロセッサスレッドの中から実行するように動作可能なプログラマブルコントローラを備える、請求項１に記載のプロセッサ。
【請求項８】
前記複数のプロセッサスレッドのそれぞれに対応する複数のバンクを含むレジスタファイルをさらに備え、該各バンクは、対応するプロセッサスレッドに関連したデータを記憶するように動作できる、請求項７に記載のプロセッサ。
【請求項９】
複数のプログラムカウンタをさらに備え、該各プログラムカウンタは、対応するプロセッサスレッドの実行状態を示すように動作できる、請求項７に記載のプロセッサ。
【請求項１０】
前記第１のプロセッサスレッド及び前記第２のプロセッサスレッドを含む複数のプロセッサスレッドに関連した命令をフェッチするように動作可能な命令フェッチユニットと、
前記命令フェッチユニットに応答するデコーダと、
前記デコーダに応答する発行ロジックと、
前記複数のプロセッサスレッドに対応する複数のバンクを含むレジスタファイルであって、該各バンクは、対応するプロセッサスレッドに関連したデータだけを記憶するように動作できる、レジスタファイルと、
をさらに備える、請求項１に記載のプロセッサ。
【請求項１１】
前記データは、所与のプロセッサスレッドに関連した、実行された命令のオペランド又は結果を含む、請求項１０に記載のプロセッサ。
【請求項１２】
前記コントローラは、前記命令フェッチユニットと通信し、次の命令が該命令フェッチユニットによってプロセッサスレッドからフェッチされる際の該プロセッサスレッドを決定するように動作できる、請求項１０に記載のプロセッサ。
【請求項１３】
前記複数のプロセッサスレッドのそれぞれに対応する一組のレジスタであって、該一組の中の各レジスタは、前記プロセッサの前記パイプラインステージの前又は後のいずれかに配置される、一組のレジスタ、
をさらに備え、
前記コントローラは、現在実行中のプロセッサスレッドの状態を対応する一組のレジスタに記憶すること、及び該対応する一組のレジスタから別のプロセッサスレッドの状態をロードして、該別のプロセッサスレッドの処理を可能にすることを含めて、コンテキストスイッチを前記複数のプロセッサスレッドの中から実行するように動作できる、請求項１０に記載のプロセッサ。
【請求項１４】
前記コントローラは、前記複数のプロセッサスレッドに対応する複数のスレッド割り当てカウンタを含み、該各スレッド割り当てカウンタは、どれだけのプロセッサ時間が各プロセッサスレッド用に割り当てられるかを表す値を含む、請求項１０に記載のプロセッサ。
【請求項１５】
前記コントローラは、前記命令フェッチユニットと通信するセレクタを切り換えることを含むコンテキストスイッチを実行するように動作できる、請求項１０に記載のプロセッサ。
【請求項１６】
前記コントローラは、前記命令フェッチユニットと通信する前記セレクタの切り換えをプログラムの実行中に動的に制御するように動作できる、請求項１５に記載のプロセッサ。
【請求項１７】
前記コントローラは、前記命令フェッチユニットと通信する前記セレクタの切り換えを、前記複数のプロセッサスレッドのそれぞれについての所定のプロセッサ時間割り当てに基づいて静的に制御するように動作できる、請求項１５に記載のプロセッサ。
【請求項１８】
命令実行用の第１のプロセッサスレッドを設けること、
命令実行用の第２のプロセッサスレッドを設けること、
前記第１のプロセッサスレッドを処理すること、及び
前記第１のプロセッサスレッドから前記第２のプロセッサスレッドへのコンテキストスイッチを実行することであって、
前記第１のプロセッサスレッドに対応する第１の組のレジスタに該第１のプロセッサスレッドの状態を記憶すること、及び
前記第２のプロセッサスレッドに対応する第２の組のレジスタから該第２のプロセッサスレッドの状態をロードすること、
を含む、前記コンテキストスイッチを実行すること、
を含む、方法。
【請求項１９】
前記対応する一組のレジスタ内に所与のプロセッサスレッドの状態を記憶することは、プロセッサのパイプラインステージに対応するデータを記憶することを含む、請求項１８に記載の方法。
【請求項２０】
前記プロセッサ時間割り当てを変更する入力を受け取ること、及び
前記変更されたプロセッサ時間割り当てに基づいて、前記第１のプロセッサスレッド及び前記第２のプロセッサスレッドの間でコンテキストスイッチを実行すること、
をさらに含む、請求項１８に記載の方法。
【請求項２１】
前記コンテキストスイッチを実行することは、プログラムの実行中に動的にコンテキストスイッチを実行することを含む、請求項１８に記載の方法。
【請求項２２】
前記コンテキストスイッチを実行することは、前記第１のプロセッサスレッド及び前記第２のプロセッサスレッドのそれぞれについての所定のプロセッサ時間割り当てに基づいて静的にコンテキストスイッチを実行することを含む、請求項１８に記載の方法。
【請求項２３】
前記コンテキストスイッチを実行することは、命令サイクルの終了時に該コンテキストスイッチを実行することを含む、請求項１８に記載の方法。
【請求項２４】
レジスタファイルの対応するバンクに所与のプロセッサスレッドに関連したデータを記憶すること、をさらに含む、請求項１８に記載の方法。
【請求項２５】
対応するプロセッサスレッドの実行ステータスを示すこと、をさらに含む、請求項１８に記載の方法。
【請求項２６】
前記第１のプロセッサスレッド及び前記第２のプロセッサスレッドを含む複数のプロセッサスレッドに関連した命令をフェッチすること、
前記命令をデコードすること、
前記命令を実行ユニットに発行すること、及び
所与のプロセッサスレッドの発行された命令に関連したデータを、レジスタファイルの対応するバンク内に記憶することであって、該各バンクは、対応するプロセッサスレッドに関連したデータだけを記憶する、レジスタファイルの対応するバンク内に記憶すること、
をさらに含む、請求項１８に記載の方法。
【請求項２７】
次の命令がプロセッサスレッドからフェッチされる際の該プロセッサスレッドを決定すること、をさらに含む、請求項２６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の開示は、処理回路及び処理システムに関する。
【背景技術】
【０００２】
従来のオペレーティングシステムは、通常、マルチタスクをサポートする。マルチタスクは、２つ以上のプロセッサスレッドが共通の処理資源を共有することを可能にするスケジューリング方式である。プロセッサスレッドは、ソフトウェアプログラムの実行を追跡するプロセッサ内のアーキテクチャ状態を表す。単一のプロセッサを有するコンピュータの場合、どの所与の時点においても１つのプロセッサスレッドしか処理されず、これは、プロセッサが、単一のプロセッサスレッドに関連した命令を積極的に実行していることを意味する。或るプロセッサスレッドから別のプロセッサスレッドへプロセッサを再割り当てする動作は、コンテキストスイッチと呼ばれる。
【０００３】
従来のパイプラインプロセッサでは、コンテキストスイッチは、通常、ハードウェア割り込み及び割り込みサービスルーチンを通じて行われる。割り込みサービスルーチンは、通常、貴重なプロセッサ時間を消費し得る、関連した実行時間、すなわち割り込みオーバーヘッドを有する。これに加えて、従来のパイプラインプロセッサでは、コンテキストスイッチは、たとえばオペレーティングシステムのベンダによって定められるように、通常、一定の間隔（たとえば、１００μｓごと）でしか行われない。
【発明の開示】
【課題を解決するための手段】
【０００４】
概して、一態様では、この明細書は、パイプラインステージを備えるプロセッサを説明する。パイプラインステージは、第１の入力レジスタと、第２の入力レジスタと、第１の出力レジスタと、第２の出力レジスタと、を備える。プロセッサは、第１の入力レジスタ及び第２の入力レジスタと通信する第１のセレクタと、第１の出力レジスタ及び第２の出力レジスタと通信する第２のセレクタと、をさらに備える。プロセッサはまた、第１のプロセッサスレッドに関連したデータが、第１のプロセッサスレッドが処理されている時間の間に、第１の入力レジスタ、パイプラインステージ、及び第１の出力レジスタを通過し、第２のプロセッサスレッドに関連したデータが、第２のプロセッサスレッドが処理されている時間の間に、第２の入力レジスタ、パイプラインステージ、及び第２の出力レジスタを通過するように、第１のセレクタ及び第２のセレクタの切り換えを制御するように動作可能なコントローラと、を含む。第１の入力レジスタ及び第１の出力レジスタは、第１のプロセッサスレッドの状態を記憶するように動作可能であり、第２の入力レジスタ及び第２の出力レジスタは、第２のプロセッサスレッドの状態を記憶するように動作できる。
【０００５】
特定の実施態様は、次の特徴の１つ又は複数を含むことができる。第１のセレクタはマルチプレクサを含むことができ、第２のセレクタはデマルチプレクサを含むことができる。パイプラインステージは、命令フェッチユニット、デコードロジック、発行ロジック、実行ユニット、読み出しロジック、又は書き込みロジックの１つを含むことができる。コントローラは、第１のプロセッサスレッド及び第２のプロセッサスレッドのそれぞれに割り当てられるプロセッサ時間を定義した入力に基づいて、第１のセレクタ及び第２のセレクタの切り換えを制御することができる。コントローラは、プログラムの実行中に動的に、又は、第１のプロセッサスレッド及び第２のプロセッサスレッドのそれぞれについて事前に設定されたプロセッサ時間割り当てに基づいて静的に、第１のセレクタ及び第２のセレクタの切り換えを制御することができる。
【０００６】
プロセッサは、第１のプロセッサスレッドに関連した割り込み要求をハンドリングする第１の割り込みハンドリングルーチンと、第２のプロセッサスレッドに関連した割り込み要求をハンドリングする第２の割り込みハンドリングルーチンと、をさらに備えることができる。第１の割り込みハンドリングルーチン及び第２の割り込みハンドリングルーチンは、別々のエントリーポイントを有することができる。プロセッサは、第１のプロセッサスレッドに関連した例外要求をハンドリングする第１の例外ハンドリングルーチンと、第２のプロセッサスレッドに関連した例外要求をハンドリングする第２の例外ハンドリングルーチンと、をさらに備えることができる。プロセッサは、第１のプロセッサスレッド及び第２のプロセッサスレッドの双方に関連した実質的にすべての例外要求又は実質的にすべての割り込み要求をそれぞれハンドリングする単一の例外ハンドリングルーチン又は単一の割り込みハンドリングルーチンをさらに備えることができる。
【０００７】
プロセッサは、複数のプロセッサスレッドのそれぞれに対応する一組のレジスタをさらに備えることができる。一組の中の各レジスタは、プロセッサのパイプラインステージの前又は後のいずれかに配置されることができる。コントローラは、現在実行中のプロセッサスレッドの状態を対応する一組のレジスタに記憶すること、及び対応する一組のレジスタから別のプロセッサスレッドの状態をロードして、別のプロセッサスレッドの処理を可能にすることを含めて、コンテキストスイッチを複数のプロセッサスレッドの中から実行することができる。
【０００８】
概して、別の態様では、この明細書は、複数のプロセッサスレッドのそれぞれに対応する一組のレジスタを含むプロセッサを説明する。一組の中の各レジスタは、プロセッサのパイプラインステージの前又は後のいずれかに配置される。プロセッサは、現在実行中のプロセッサスレッドの状態を対応する一組のレジスタに記憶すること、及び対応する一組のレジスタから別のプロセッサスレッドの状態をロードして、別のプロセッサスレッドの処理を可能にすることを含む、複数のプロセッサスレッド間でコンテキストスイッチを実行するように動作可能なプログラマブルコントローラをさらに含む。
【０００９】
特定の実施態様は、次の特徴の１つ又は複数を含むことができる。プログラマブルコントローラは、命令サイクルの終了時にコンテキストスイッチを実行することができる。プロセッサは、複数のプロセッサスレッドのそれぞれに対応する複数のバンクを有するレジスタファイルをさらに含むことができる。各バンクは、対応するプロセッサスレッドに関連したデータを記憶することができる。プロセッサは、複数のプログラムカウンタをさらに含むことができ、各プログラムカウンタは、対応するプロセッサスレッドの実行状態を示すように動作できる。プロセッサは、複数のプロセッサスレッドに対応する複数の割り込みハンドリングルーチンをさらに含むことができる。この場合、各割り込みハンドリングルーチンは、対応するプロセッサスレッドに関連した割り込み要求をハンドリングする。複数の割り込みハンドリングルーチンのそれぞれは、別々のエントリーポイントを有することができる。プロセッサは、複数のプロセッサスレッドに対応する複数の例外ハンドリングルーチンをさらに含むことができる。この場合、各例外ハンドリングルーチンは、対応するプロセッサスレッドに関連した例外要求をハンドリングする。プロセッサは、複数のプロセッサスレッドに関連した実質的にすべての例外要求又は実質的にすべての割り込み要求をそれぞれハンドリングする単一の例外ハンドリングルーチン又は単一の割り込みハンドリングルーチンをさらに含むことができる。
【００１０】
概して、別の態様では、この明細書は、命令実行用の第１のプロセッサスレッドを設けること、命令実行用の第２のプロセッサスレッドを設けること、第１のプロセッサスレッドを処理すること、及び第１のプロセッサスレッドから第２のプロセッサスレッドへのコンテキストスイッチを実行すること、を含む方法を説明する。コンテキストスイッチを実行することは、第１のプロセッサスレッドに対応する第１の組のレジスタに第１のプロセッサスレッドの状態を記憶すること、及び第２のプロセッサスレッドに対応する第２の組のレジスタから第２のプロセッサスレッドの状態をロードすること、を含む。
【００１１】
特定の実施態様は、次の特徴の１つ又は複数を含むことができる。対応する一組のレジスタ内に所与のプロセッサスレッドの状態を記憶することは、プロセッサのパイプラインステージに対応するデータを記憶することを含む。この方法は、プロセッサ時間割り当てを変更する入力を受け取ること、変更されたプロセッサ時間割り当てに基づいて、第１のプロセッサスレッド及び第２のプロセッサスレッドの間でコンテキストスイッチを実行すること、をさらに含むことができる。コンテキストスイッチを実行することは、プログラムの実行中に動的に、又は、第１のプロセッサスレッド及び第２のプロセッサスレッドのそれぞれについて事前に設定されたプロセッサ時間割り当てに基づいて静的に、コンテキストスイッチを実行することを含むことができる。この方法は、第１の割り込みハンドリングルーチンを使用することであって、それによって、第１のプロセッサスレッドに関連した割り込み要求をハンドリングする、第１の割り込みハンドリングルーチンを使用すること、及び第２の割り込みハンドリングルーチンを使用することであって、それによって、第２のプロセッサスレッドに関連した割り込み要求をハンドリングする、第２の割り込みハンドリングルーチンを使用すること、をさらに含むことができる。この方法は、第１の例外ハンドリングルーチンを使用することであって、それによって、第１のプロセッサスレッドに関連した例外要求をハンドリングする、第１の例外ハンドリングルーチンを使用すること、及び第２の例外ハンドリングルーチンを使用することであって、それによって、第２のプロセッサスレッドに関連した例外要求をハンドリングする、第２の例外ハンドリングルーチンを使用すること、をさらに含むことができる。この方法は、単一の例外ハンドリングルーチン又は単一の割り込みハンドリングルーチンを使用することであって、それによって、第１のプロセッサスレッド及び第２のプロセッサスレッドに関連した実質的にすべての例外要求及び実質的にすべての割り込み要求をそれぞれハンドリングする、単一の例外ハンドリングルーチン又は単一の割り込みハンドリングルーチンを使用すること、をさらに含むことができる。
【００１２】
概して、別の態様では、この明細書は、複数のプロセッサスレッドに関連した命令をフェッチするように動作可能な命令フェッチユニットと、命令フェッチユニットに応答するデコーダと、デコーダに応答する発行ロジックと、複数のプロセッサスレッドに対応する複数のバンクを含むレジスタファイルと、を備えるプロセッサを説明する。各バンクは、対応するプロセッサスレッドに関連したデータだけを記憶するように動作できる。
【００１３】
特定の実施態様は、次の特徴の１つ又は複数を含むことができる。データは、所与のプロセッサスレッドに関連した、実行された命令のオペランド又は結果を含むことができる。プロセッサは、命令フェッチユニットと通信するコントローラをさらに備えることができる。このコントローラは、次の命令が命令フェッチユニットによってプロセッサスレッドからフェッチされる際のプロセッサスレッドを決定することができる。プロセッサは、複数のプロセッサスレッドのそれぞれに対応する一組のレジスタをさらに備えることができる。一組の中の各レジスタは、プロセッサのパイプラインステージの前又は後のいずれかに配置されることができる。コントローラは、現在実行中のプロセッサスレッドの状態を対応する一組のレジスタに記憶すること、及び対応する一組のレジスタから別のプロセッサスレッドの状態をロードして、別のプロセッサスレッドの処理を可能にすることを含めて、コンテキストスイッチを複数のプロセッサスレッドの中から実行することができる。コントローラは、複数のプロセッサスレッドに対応する複数のスレッド割り当てカウンタを含むことができる。各スレッド割り当てカウンタは、どれだけのプロセッサ時間が各プロセッサスレッド用に割り当てられるかを表す値を含むことができる。コントローラは、命令フェッチユニットと通信するセレクタを切り換えることを含むコンテキストスイッチを実行することができる。セレクタはマルチプレクサ、又はデマルチプレクサを含むことができる。
【００１４】
概して、一態様では、この明細書は、パイプラインステージを通じて命令を実行するための手段を備えるプロセッサを説明する。命令を実行するための手段は、データを記憶するための第１の入力手段と、データを記憶するための第２の入力手段と、データを記憶するための第１の出力手段と、データを記憶するための第２の出力手段とを備える。プロセッサは、データを記憶するための第１の入力手段及びデータを記憶するための第２の入力手段と通信して選択を行うための第１の手段と、データを記憶するための第１の出力手段及びデータを記憶するための第２の出力手段と通信して選択を行うための第２の手段と、をさらに備える。また、プロセッサは、第１のプロセッサスレッドが処理されている時間の間、第１のプロセッサスレッドに関連したデータが、データを記憶するための第１の入力手段と、実行するための手段と、データを記憶するための第１の出力手段とを通過するように、且つ、第２のプロセッサスレッドが処理されている時間の間、第２のプロセッサスレッドに関連したデータが、データを記憶するための第２の入力手段と、実行するための手段と、データを記憶するための第２の出力手段とを通過するように、選択を行う第１の手段及び第２の手段の切り換えを制御するための手段も備える。データを記憶するための第１の入力手段及びデータを記憶するための第１の出力手段は、第１のプロセッサスレッドの状態を記憶するように動作可能であり、データを記憶するための第２の入力手段及びデータを記憶するための第２の出力手段は、第２のプロセッサスレッドの状態を記憶するように動作できる。
【００１５】
概して、別の態様では、この明細書は、複数のプロセッサスレッドのそれぞれに対応するデータを記憶するための手段を備えるプロセッサを説明する。データを記憶するための各手段は、プロセッサのステージ手段の前又は後のいずれかに配置される。プロセッサは、データを記憶するための対応する一組の手段に、現在実行されているプロセッサスレッドの状態を記憶し、且つ、データを記憶するための対応する一組の手段から別のプロセッサスレッドの状態をロードして、当該別のプロセッサスレッドの処理を可能にするための手段を含めて、複数のプロセッサスレッド間でコンテキストスイッチを実行するための手段をさらに備える。
【００１６】
概して、別の態様では、この明細書は、複数のプロセッサスレッドに関連した命令をフェッチするための手段と、フェッチされた命令をデコードするための手段と、デコードされた命令を発行するための手段と、対応するプロセッサスレッドに関連したデータを、記憶するための対応する手段内に記憶するための手段とを含むプロセッサを説明する。
【００１７】
特定の実施態様は、次の特徴の１つ又は複数を含むことができる。データは、所与のプロセッサスレッドに関連した、実行された命令のオペランド又は結果を含むことができる。プロセッサは、次の命令がプロセッサスレッドからフェッチされる際の当該プロセッサスレッドを決定するための手段をさらに備えることができる。プロセッサは、複数のプロセッサスレッドのそれぞれに対応するデータを記憶するための手段をさらに備えることができる。データを記憶するための各手段は、プロセッサのステージ手段の前又は後のいずれかに配置することができる。プロセッサは、データを記憶するための対応する手段に、現在実行されているプロセッサスレッドの状態を記憶し、且つ、データを記憶するための対応する手段から別のプロセッサスレッドの状態をロードして、当該別のプロセッサスレッドの処理を可能にするための手段を含めて、複数のプロセッサスレッド間でコンテキストスイッチを実行するための手段を備えることができる。
【００１８】
コンテキストスイッチを実行するための手段は、どれだけのプロセッサ時間が各プロセッサスレッド用に割り当てられるかを表す値を記憶するための手段を備えることができる。コンテキストスイッチを実行するための手段は、フェッチするための手段と通信するセレクタを切り換えるための手段を備えることができる。
【００１９】
実施態様は、次の利点の１つ又は複数を含むことができる。ハードウェア割り込み、たとえば割り込みサービスルーチン、に関連した割り込みオーバーヘッドが何らなく、コンテキストスイッチを実行するパイプラインプロセッサが提供される。一実施態様では、コンテキストスイッチは、自動的に行われ、主としてハードウェアを通じて、たとえばプログラマブルスレッド割り当てコントローラを使用して行われる。一実施態様では、パイプラインプロセッサは、第１のプロセッサスレッドの状態を、パイプラインプロセッサの各パイプラインステージ間に配置された第１の組のレジスタに保存し、同様にパイプラインプロセッサの各パイプラインステージ間に配置された第２の組のレジスタから第２のプロセッサスレッドの状態をロードする。このレジスタの配置によって、高速のコンテキストスイッチ時間が可能になる。
【００２０】
ユーザ、たとえばネットワークアドミニストレータは、各プロセッサスレッドにどれだけのプロセッサ時間を割り当てるかをカスタマイズすることができる。一実施態様では、初期プロセッサ時間割り当てが設定された後、ユーザは、プロセッサ時間割り当てをさらに動的に変更することができる。ユーザは、オペレーティングシステムに対する制御を放棄するのではなく、プロセッサ時間割り当ての全制御を保有することができる。
【００２１】
１つ又は複数の実施態様の詳細は、添付図面及び以下の説明に述べられている。他の特徴及び利点は、これらの説明及び図面、並びに特許請求の範囲から明らかになる。
【００２２】
さまざまな図面における同じ参照シンボルは、同じ要素を示す。
【発明を実施するための最良の形態】
【００２３】
図１は、２つ又は３つ以上のプロセッサスレッドＴ１、Ｔ２、…Ｔｎを処理するように動作可能なパイプラインプロセッサアーキテクチャ１００のブロック図である。プロセッサスレッドＴ１、Ｔ２、…Ｔｎは、それぞれ、対応するソフトウェアプログラムの実行を追跡する、パイプラインプロセッサアーキテクチャ１００内のアーキテクチャ状態を表す。ソフトウェアプログラムの命令は、たとえば、命令キャッシュ（たとえば、命令キャッシュ１０２）から取り出すことができる。一実施態様では、パイプラインプロセッサアーキテクチャ１００は、２つ又は３つ以上のプログラムカウンタ（図示せず）を含む。これらのプログラムカウンタのそれぞれは、プロセッサスレッドＴ１、Ｔ２、…Ｔｎに対応する。各プログラムカウンタは、（対応するプロセッサスレッドＴ１、Ｔ２、…Ｔｎについて）パイプラインプロセッサアーキテクチャ１００が、命令シーケンスに関してどこにいるかを示す。プログラムカウンタは、図３及び図５に関連して以下でより詳細に解説する。
【００２４】
一実施態様では、パイプラインプロセッサアーキテクチャ１００は、６つのパイプラインステージを含む。これら６つのパイプラインステージは、命令フェッチステージ（ＩＦ）、命令デコードステージ（ＩＤ）、命令発行ステージ（ＩＳ）、命令実行ステージ（ＥＸ）、データメモリ読み出しステージ（ＭＥＭ）、及びライトバックステージ（ＷＢ）を含む。しかしながら、パイプラインプロセッサアーキテクチャ１００は、異なる個数のパイプラインステージを含むこともできる。さらに、パイプラインプロセッサアーキテクチャ１００は、命令フェッチユニット（ＩＦＵ）１０４，デコードロジック１０６、発行ロジック１０８、レジスタファイル１１０、実行ユニット１１２、読み出しロジック１１４、書き込みロジック１１６、及びプログラマブルスレッド割り当てコントローラ１１８を含む。
【００２５】
命令フェッチユニット１０４は、たとえば命令キャッシュ１０２からプログラム命令を取り出す。デコードロジック１０６は、プログラム命令をデコードし、実行ユニット１１２によって実行されるデコードされた命令を生成する。一実施態様では、デコードされた命令は、固定長のマイクロオペレーション命令である。発行ロジック１０８は、実行のために実行ユニット１１２へデコードされた命令を発行する。実行ユニット１１２は、代理人整理番号第ＭＰ０６３４／１３３６１−１４０００１号のホン・イ・チェン（Hong-yi Chen）及びジェンセン・テン（Jensen Tjeng）による「Variable Length Pipeline Processor Architecture」という発明の名称の米国特許出願に記載されているようなロード実行ユニット、ストア実行ユニット、算術論理演算ユニット（ＡＬＵ）、積和演算（ＭＡＣ）ユニット、又はロード／ストア複合実行ユニットとすることができる。この米国特許出願は、その全内容が参照により援用される。読み出しロジック１１４は、たとえばデータキャッシュ（図示せず）からデータを読み出す。書き込みロジック１１６は、実行された命令の結果を、たとえば、データキャッシュ、レジスタファイル１１０、又はリオーダバッファ（図示せず）にライトバックする。
【００２６】
レジスタファイル１１０は、各プロセッサスレッドＴ１、Ｔ２、…Ｔｎに関連したデータを記憶する。一実施態様では、レジスタファイル１１０は、対応するプロセッサスレッドＴ１、Ｔ２、…Ｔｎに関連したデータを記憶する別々のバンク（たとえば、バンクＴ１、Ｔ２、…Ｔｎ）を含む。たとえば、書き込みロジック１１６が、プロセッサスレッドＴ２に関連したデータをレジスタファイル１１０にライトバックしている場合、書き込みロジック１１６は、そのデータをレジスタファイル１１０のバンクＴ２に書き込む。或いは、各プロセッサスレッドＴ１、Ｔ２、…Ｔｎに対応するデータを記憶するための別個のレジスタファイル（図示せず）をパイプラインプロセッサアーキテクチャ１００内に実施することもできる。
【００２７】
プログラマブルスレッド割り当てコントローラ１１８は、各プロセッサスレッドＴ１、Ｔ２、…Ｔｎについて定義されているプロセッサ時間割り当て、すなわち、プロセッサ時間のどの部分が、各プロセッサスレッドＴ１、Ｔ２、…Ｔｎに専用化されるか、を記憶するようにプログラミングすることができる。一実施態様では、複数のプロセッサスレッド（たとえば、プロセッサスレッドＴ１、Ｔ２、…Ｔｎ）のそれぞれに割り当てられるプロセッサ時間の部分を定義した、たとえばユーザからの入力が、グラフィカルユーザインターフェース（図示せず）を通じて受け取られる。たとえば、ユーザは、デュアルスレッドパイプラインプロセッサの場合、第１のプロセッサスレッドにプロセッサ時間の９５％を割り当て、第２のプロセッサスレッドに５％を割り当てることができる。一実施態様では、各プロセッサスレッド（たとえば、プロセッサスレッドＴ１、Ｔ２、…Ｔｎ）について定義されたプロセッサ時間割り当ては、ユーザ又は好ましくはソフトウェアプログラム（たとえば、実行されるソフトウェアプログラム）が動的に変更することができる。すなわち、プログラム実行中に変更することができる。或いは、各プロセッサスレッドのプロセッサ時間割り当ては、静的に設定することもできる。すなわち、プログラム実行中に変更することができない。
【００２８】
一実施態様では、プログラマブルスレッド割り当てコントローラ１１８は、次の命令が（たとえば、命令フェッチユニット１０４によって）プロセッサスレッドからフェッチされる際のプロセッサスレッドを決定することによって、コンテキストスイッチを自動的に実行する。一実施態様では、プログラマブルスレッド割り当てコントローラ１１８は、命令フェッチユニット１０４と通信する１つ又は複数のセレクタを切り換えることによってコンテキストスイッチを実行する。このセレクタは、たとえば、マルチプレクサ及び／又はデマルチプレクサ（図示せず）である。コンテキストスイッチを実行するマルチプレクサ及びデマルチプレクサを含むプロセッサの一実施態様は、図３、図４、及び図５に関連して以下で解説する。コンテキストスイッチが行われると、次のプロセッサスレッドに関連した命令が、命令フェッチユニット１０４によってフェッチされる。パイプラインプロセッサアーキテクチャ１００のパイプラインステージ（たとえば、パイプラインステージＩＦ、ＩＤ、ＩＳ、ＥＸ、ＭＥＭ、ＷＢ）は、２つ又は３つ以上のプロセッサスレッドに関連した命令を含むことができるが、各所与のプロセッサスレッドに関連したデータは、レジスタファイル１１０を通じて個別に保持され、したがって、各プロセッサスレッドに関連したデータの完全性が維持される。割り込みサービスルーチンを必要とする場合がある従来のパイプラインプロセッサと異なり、プログラマブルスレッド割り当てコントローラ１１８は、コンテキストスイッチを実行することに関連した割り込みオーバーヘッドを何ら有しない。
【００２９】
図２は、パイプラインプロセッサアーキテクチャ（たとえば、パイプラインプロセッサアーキテクチャ１００）を通じてプロセッサスレッドを処理するための方法２００を示している。複数のプロセッサスレッドのそれぞれに割り当てられるプロセッサ時間の一部を定義した入力が受け取られる（ステップ２０２）。一実施態様では、入力割り当てが、グラフィカルユーザインターフェースを通じてユーザから受け取られる。各プロセッサスレッドに割り当てられたプロセッサ時間は、プログラマブルスレッド割り当てコントローラ（たとえば、プログラマブルスレッド割り当てコントローラ１１８）に記憶することができる。一実施態様では、プロセッサ時間は、ＣＰＵ（中央処理装置）サイクル、クロックサイクル、及び／又は命令サイクルに基づいて割り当てられる。
【００３０】
各スレッドは、各スレッドに割り当てられたプロセッサ時間に従ってパイプラインプロセッサにより処理される（ステップ２０４）。一実施態様では、コンテキストスイッチは、プログラマブルスレッド割り当てコントローラに記憶された、各スレッドに割り当てられたプロセッサ時間に従って自動的に行われる。一実施態様では、プログラマブルスレッド割り当てコントローラは、命令フェッチユニット（たとえば、命令フェッチユニット１０４）と通信する１つ又は複数のマルチプレクサ及び／又はデマルチプレクサの切り換えを制御する。一実施態様では、以下でより詳細に解説するように、プログラマブルスレッド割り当てコントローラは、パイプラインプロセッサの各パイプラインステージの前後に配置された１つ又は複数のマルチプレクサ及び／又はデマルチプレクサの切り換えを制御して、コンテキストスイッチを実行する。この実施態様では、プロセッサスレッドの状態は、パイプラインプロセッサの各パイプラインステージの前後に配置されたレジスタに記憶され、これらのレジスタからロードされる。一実施態様では、コンテキストスイッチは、所与の命令サイクルの終了時に行われる。
【００３１】
プロセッサ時間割り当てを動的に変更する入力が受け取られたかどうかの判断が（たとえば、プログラマブルスレッド割り当てコントローラ１１８を通じて）行われる（ステップ２０６）。各プロセッサスレッドに割り当てられたプロセッサ時間が動的に変更されていない場合、各プロセッサスレッドは、前に設定されたプロセッサ時間割り当てに従って処理され、方法２００はステップ２０４に戻る。プロセッサ時間割り当てが動的に変更されている場合、各プロセッサスレッドは、変更されたプロセッサ時間割り当てに従って処理される（ステップ２０８）。ステップ２０８の後、方法２００は、上記で解説したステップ２０６に戻る。
【００３２】
図３は、（ｎ個の）プロセッサスレッドＴ１、Ｔ２、…Ｔｎを処理するパイプラインプロセッサアーキテクチャ１００に従って構築されたパイプラインプロセッサ３００のブロック図を示している。一実施態様では、パイプラインプロセッサ３００は、命令フェッチユニット３０４、デコーダ３０６、レジスタファイル３０８、発行ロジック３１０、２ステージ実行ユニット３１２、リオーダバッファ３１４、及びプログラマブルスレッド割り当てコントローラ３１６を含む。さらに、パイプラインプロセッサ３００は、プロセッサスレッドＴ１、Ｔ２、…Ｔｎにそれぞれ対応するレジスタＴ１〜Ｔｎ及びプログラムカウンタＴ１〜Ｔｎを含む。さらに、パイプラインプロセッサ３００はマルチプレクサ３５０を含む。
【００３３】
一実施態様では、命令フェッチ（ＩＦ）ステージの期間中に、命令フェッチユニット３０４は、実行される命令を、たとえば命令キャッシュ３０２から取り出す。命令フェッチユニット３０４は、プログラムカウンタＴ１、Ｔ２、…Ｔｎに従って命令を取り出す。一実施態様では、プログラムカウンタＴ１は、プロセッサスレッドＴ１の実行ステータス（すなわち、パイプラインプロセッサ３００が、プロセッサスレッドＴ１に関連した命令シーケンスに関してどこにいるか）を示し、プログラムカウンタＴ２は、プロセッサスレッドＴ２に関連した実行ステータスを示し、プログラムカウンタＴｎは、プロセッサスレッドＴｎに関連した実行ステータスを示す。
【００３４】
命令デコードステージ（ＩＤ）の期間中、命令フェッチユニット３０４によって取り出された命令がデコードされる。
【００３５】
命令発行ステージ（ＩＳ）の期間中、一実施態様では、デコードされた命令が、（発行ロジック３１０を通じて）リオーダバッファ３１４へ送られる。リオーダバッファ３１４は、デコードされた命令が実行のために発行されるまで、デコードされた命令を記憶する。一実施態様では、リオーダバッファ３１４は循環バッファである。
【００３６】
また、リオーダバッファ３１４は、実行された命令を、たとえばレジスタファイル３０８内に回収する準備ができるまで、実行された命令の結果も記憶する。一実施態様では、レジスタファイル３０８は、プロセッサ３００によって処理された各プロセッサスレッド（たとえば、プロセッサスレッドＴ１、Ｔ２、…Ｔｎ）に対応するバンク（たとえば、バンクＴ１、Ｔ２、…Ｔｎ）を含む。バンクＴ１は、プロセッサスレッドＴ１に関連したデータを保持し、バンクＴ２は、プロセッサスレッドＴ２に関連したデータを保持し、バンクＴｎは、プロセッサスレッドＴｎに関連したデータを保持する。これらのデータは、所与のプロセッサスレッドに関連した、実行された命令のオペランド及び／又は結果を含むことができる。一実施態様では、パイプラインプロセッサ３００は、リオーダバッファ３１４を含まない。
【００３７】
実行ステージＥＸ１、ＥＸ２の期間中、実行ユニット３１２は、デコードされて発行ロジック３１０から発行された命令を実行する。実行ユニット３１２は、上記で解説したように、あらゆるタイプの実行ユニットとすることができる。実行ユニット３１２は２つのパイプラインステージを有するものとして示されているが、実行ユニット３１２は、異なる個数のパイプラインステージを有することもできる。一実施態様では、実行された命令の結果は、リオーダバッファ３１４にライトバックされ、次いで、レジスタファイル３０８に回収される。
【００３８】
プログラマブルスレッド割り当てコントローラ３１６は、各プロセッサスレッドＴ１、Ｔ２、…Ｔｎのプロセッサ時間割り当て、すなわち、どれだけのプロセッサ時間が各プロセッサスレッドＴ１、Ｔ２、…Ｔｎに専用化されるか、を記憶するプログラミングを受けるように動作できる。一実施態様では、プロセッサ時間の一部を各プロセッサスレッドＴ１、Ｔ２、…Ｔｎに割り当てる、たとえばユーザからの入力が、グラフィカルユーザインターフェース（図示せず）を通じて受け取られる。一実施態様では、各プロセッサスレッドＴ１、Ｔ２、…Ｔｎのプロセッサ時間割り当ては、ユーザが動的に変更することができる。一実施態様では、各プロセッサスレッドＴ１、Ｔ２、…Ｔｎのプロセッサ時間割り当ては、プロセッサ３００によって処理されているソフトウェアアプリケーションを通じて動的に変更される。
【００３９】
一実施態様では、プログラマブルスレッド割り当てコントローラ３１６は、命令フェッチユニット３０４と通信するマルチプレクサ３５０を切り換えることにより、プロセッサスレッドＴ１、Ｔ２、…Ｔｎ間でコンテキストスイッチを自動的に実行する。たとえば、パイプラインプロセッサ３００がプロセッサスレッドＴ１を処理している時間の間、マルチプレクサ３５０は、プロセッサスレッドＴ１に関連した命令がパイプラインプロセッサ３００のパイプラインステージを通過するように制御される。コンテキストスイッチがプロセッサスレッドＴ１から行われると、マルチプレクサ３５０は、別のプロセッサスレッド、たとえばプロセッサスレッドＴ２、に関連した命令が通過するように制御される。一実施態様では、マルチプレクサ３５０は、ｎ対１マルチプレクサである。
【００４０】
一実施態様では、プログラマブルスレッド割り当てコントローラ３１６は、各プロセッサスレッドに割り当てられたプロセッサ時間に対応する重みを決定する複数のスレッド割り当てカウンタ（たとえば、スレッド割り当てカウンタＴ１〜Ｔｎ）を含む。たとえば、一実施態様では、スレッド割り当てカウンタＴ１〜Ｔｎのそれぞれは、いくつのＣＰＵサイクルが各スレッドについて割り当てられているかを表す値を含む。たとえば、スレッド割り当てカウンタＴ１が２５６の値を含み、スレッド割り当てカウンタＴ２が１６の値を含み、且つ、スレッド割り当てカウンタＴｎが０の値を含む場合、命令は、まず、２５６個のＣＰＵサイクルの間、プロセッサスレッドＴ１からフェッチされ、次に、命令は、１６個のＣＰＵサイクルの間、プロセッサスレッドＴ２からフェッチされ、プロセッサスレッドＴｎからは、０個の命令がフェッチされる。次に、命令は、別の２５６個のＣＰＵサイクル及び１６個のＣＰＵサイクルの間、再び、それぞれプロセッサスレッドＴ１及びＴ２からフェッチされる。以下、同様に繰り返される。命令フェッチは、スレッド割り当てカウンタの１つ又は複数の値が変更されるまで、それに応じて継続することができる。各スレッド割り当てカウンタＴ１〜Ｔｎが０の値に達すると、プログラマブルスレッド割り当てカウンタ３１６は、マルチプレクサ３５０を切り換えて、次のプロセッサスレッドに関連した命令を、処理のために命令フェッチユニット３０４に渡す。
【００４１】
図４は、２つ又は３つ以上のプロセッサスレッドＴ１、Ｔ２、…Ｔｎを処理するように動作可能なパイプラインプロセッサアーキテクチャ４００のブロック図である。プロセッサスレッドＴ１、Ｔ２、…Ｔｎに関連した命令は、たとえば、命令キャッシュ（たとえば、命令キャッシュ４０２）から取り出すことができる。
【００４２】
一実施態様では、パイプラインプロセッサアーキテクチャ４００は、６つのパイプラインステージを含む。これら６つのパイプラインステージは、命令フェッチステージ（ＩＦ）、命令デコードステージ（ＩＤ）、命令発行ステージ（ＩＳ）、命令実行ステージ（ＥＸ）、データメモリ読み出しステージ（ＭＥＭ）、及びライトバックステージ（ＷＢ）を含む。しかしながら、パイプラインプロセッサアーキテクチャ４００は、異なる個数のパイプラインステージを含むこともできる。さらに、パイプラインプロセッサアーキテクチャ４００は、命令フェッチユニット（ＩＦＵ）４０４，デコードロジック４０６、発行ロジック４０８、実行ユニット４１０、読み出しロジック４１２、書き込みロジック４１４、及びプログラマブルスレッド割り当てコントローラ４１６を含む。パイプラインプロセッサアーキテクチャ４００は、図１のパイプラインプロセッサアーキテクチャと類似している。しかしながら、パイプラインプロセッサアーキテクチャ４００は、さらに、１組のレジスタ（たとえば、レジスタＡ１〜Ａ７、Ｂ１〜Ｂ７、Ｎ１〜Ｎ７）を含む。これらのレジスタは、各パイプラインステージ間（各ステージの前に１つ及び後に１つ）に配置され、コンテキストスイッチの期間中、対応するプロセッサスレッドＴ１、Ｔ２、…Ｔｎの状態を記憶する。
【００４３】
レジスタＡ１〜Ａ７は、プロセッサスレッドＴ１の状態を記憶する。同様にして、レジスタＢ１〜Ｂ７は、プロセッサスレッドＴ２の状態を記憶し、レジスタＮ１〜Ｎ７は、プロセッサスレッドＴｎの状態を記憶する。一実施態様では、各レジスタＡ１〜Ａ７、Ｂ１〜Ｂ７、Ｎ１〜Ｎ７は、所与の命令サイクルの終了時にパイプラインプロセッサアーキテクチャ４００の対応するパイプラインステージによって生成されたデータの状態を記憶することを含めて、対応するプロセッサスレッドの状態を記憶する。たとえば、プロセッサスレッドＴ１に関連した命令を処理する時、命令サイクルの終了時に、レジスタＡ３は、デコードロジック４０６から受け取ったプロセッサスレッドＴ１のデータの状態を記憶することができ、レジスタＡ５は、実行ユニット４１０から受け取ったデータの状態を記憶することができる。レジスタＡ１〜Ａ７、Ｂ１〜Ｂ７、Ｎ１〜Ｎ７は、対応するプロセッサスレッドの状態を所与のレジスタから直接ロードする（又は、所与のレジスタへ直接記憶する）ことを可能にするという点でコンテキストスイッチを容易にする。一実施態様では、各一組のレジスタＡ１〜Ａ７、Ｂ１〜Ｂ７、Ｎ１〜Ｎ７は、パイプラインプロセッサアーキテクチャ４００内の機能ユニットの比較的近くに（たとえば、各パイプラインステージの間に）配置され、高速のコンテキストスイッチ時間が可能にされる。
【００４４】
一実施態様では、プログラマブルスレッド割り当てコントローラ４１６は、各パイプラインステージ（たとえば、パイプラインステージＩＦ、ＩＤ、ＩＳ、ＥＸ、ＭＥＭ、ＷＢ）の前又は後に配置された１つ又は複数のマルチプレクサ及び／又はデマルチプレクサ（図示せず）を切り換えることによって、コンテキストスイッチを自動的に実行する。コンテキストスイッチを実行する、マルチプレクサ及びデマルチプレクサを含むプロセッサの一実施態様は、図５に関連して以下で解説する。コンテキストスイッチが行われる場合、コンテキストスイッチを行う予定の現在のプロセッサスレッド（たとえば、プロセッサスレッドＴ１）に関連した一組のレジスタ（たとえば、レジスタＡ１〜Ａ７）は、現在のプロセッサスレッドの状態を記憶する。コンテキストスイッチを完了するために、次のプロセッサスレッド（たとえば、プロセッサスレッドＴ２）の状態が、次のプロセッサスレッドに関連した異なる一組のレジスタ（たとえば、レジスタＢ１〜Ｂ７）からロードされる。パイプラインプロセッサは、続く命令サイクルで次のプロセッサスレッドを処理する。一実施態様では、コンテキストスイッチは、命令サイクルの終了時に行われ（すなわち、パイプラインステージからのデータが、関連したレジスタに保存された後）、シームレスなコンテキストスイッチが可能にされる。
【００４５】
図５は、２つのスレッドＴ１、Ｔ２を処理するパイプラインプロセッサアーキテクチャ４００に関連して構築されたパイプラインプロセッサ５００のブロック図である。一実施態様では、パイプラインプロセッサ５００は、命令フェッチユニット５０４，デコーダ５０６、レジスタファイル５０８、発行ロジック５１０、２ステージ実行ユニット５１２、リオーダバッファ５１４、及びプログラマブルスレッド割り当てコントローラ５１６を含む。さらに、パイプラインプロセッサ５００は、プロセッサスレッドＴ１に対応する第１の組のレジスタＡ１〜Ａ６、及び、プロセッサスレッドＴ２に対応する第２の組のレジスタＢ１〜Ｂ６を含む。さらに、パイプラインプロセッサ５００は、プログラムカウンタＴ１、Ｔ２、マルチプレクサ５５０、及びデマルチプレクサ５５２を含む。
【００４６】
一実施態様では、命令フェッチ（ＩＦ）ステージの期間中、命令フェッチユニット５０４は、実行される命令を、たとえば命令キャッシュ５０２から取り出す。命令フェッチユニット５０４は、プログラムカウンタＴ１、Ｔ２に従って命令を取り出す。一実施態様では、プログラムカウンタＴ１は、プロセッサスレッドＴ１の実行ステータス（すなわち、パイプラインプロセッサ５００が、プロセッサスレッドＴ１に関連した命令シーケンスに関してどこにいるか）を示し、プログラムカウンタＴ２は、プロセッサスレッドＴ２に関連した実行ステータスを示す。
【００４７】
命令デコードステージ（ＩＤ）の期間中、命令フェッチユニット５０４によって取り出された命令がデコードされる。
【００４８】
命令発行ステージ（ＩＳ）の期間中、一実施態様では、デコードされた命令が、（発行ロジック５１０を通じて）リオーダバッファ５１４へ送られる。リオーダバッファ５１４は、デコードされた命令が実行のために発行されるまで、デコードされた命令を記憶する。一実施態様では、リオーダバッファ５１４は循環バッファである。
【００４９】
また、リオーダバッファ５１４は、実行された命令を、たとえばレジスタファイル５０８内に回収する準備ができるまで、実行された命令の結果も記憶する。一実施態様では、レジスタファイル５０８は、２つのバンクＴ１、Ｔ２を含む。バンクＴ１は、プロセッサスレッドＴ１に関連したデータを保持し、バンクＴ２は、プロセッサスレッドＴ２に関連したデータを保持する。レジスタファイル５０８は、データがレジスタからロードされる際の当該レジスタを示すスレッドインデックス（図示せず）を含むことができる。スレッドインデックスによって、現在実行中のプロセッサスレッドに関連したレジスタからのデータは、レジスタファイル５０８に確実にロードされる。
【００５０】
実行ステージＥＸ１、ＥＸ２の期間中、実行ユニット５１２は、デコードされて発行ロジック５１０から発行された命令を実行する。実行ユニット５１２は、上記で解説したように、あらゆるタイプの実行ユニットとすることができる。実行ユニット５１２は２つのパイプラインステージを有するものとして示されているが、実行ユニット５１２は、異なる個数のパイプラインステージを有することもできる。一実施態様では、実行された命令の結果は、リオーダバッファ５１４にライトバックされ、次いで、レジスタファイル５０８に回収される。
【００５１】
プログラマブルスレッド割り当てコントローラ５１６は、各プロセッサスレッドＴ１、Ｔ２のプロセッサ時間割り当てを記憶するプログラミングを受けるように動作できる。一実施態様では、プログラマブルスレッド割り当てコントローラ５１６は、パイプラインプロセッサ５００の各パイプラインステージ（たとえば、パイプラインステージＩＦ、ＩＤ、ＩＳ、ＥＸ１、ＥＸ２）の前後にそれぞれ配置されたマルチプレクサ５５０及びデマルチプレクサ５５２を切り換えることによって、プロセッサスレッドＴ１、Ｔ２間のコンテキストスイッチを自動的に実行する。たとえば、パイプラインプロセッサ５００がプロセッサスレッドＴ１を処理している時間の間、マルチプレクサ５５０及びデマルチプレクサ５５２は、プロセッサスレッドＴ１に関連した命令が（パイプラインプロセッサ５００のパイプラインステージを）通過するように制御される。プロセッサスレッドＴ２の状態情報は、レジスタＢ１〜Ｂ６に記憶される。コンテキストスイッチがプロセッサスレッドＴ１から行われると、レジスタＡ１〜Ａ６は、プロセッサスレッドＴ１の状態を記憶し、プロセッサスレッドＴ２の状態が、レジスタＢ１〜Ｂ６から（マルチプレクサ５５０及びデマルチプレクサ５５２に通じて）ロードされて、パイプラインプロセッサ５００によって処理される。一実施態様では、マルチプレクサ５５０のそれぞれは２対１マルチプレクサであり、デマルチプレクサ５５２のそれぞれは１対２デマルチプレクサである。
【００５２】
＜例外ハンドリング＞
パイプラインプロセッサアーキテクチャ１００、４００に従って構築されたプロセッサ（たとえば、プロセッサ３００、５００）が例外を検出すると、通常の命令実行シーケンスは一時停止する。例外は、通常のプログラム実行の一時停止を引き起こすイベントである。例外のタイプには、たとえば、アドレス指定例外、データ例外、オペレーション例外、オーバーフロー例外、保護例外、アンダーフロー例外等が含まれる。例外は、ハードウェアによって生成される場合もあるし、ソフトウェアによって生成される場合もある。
【００５３】
図６は、パイプラインプロセッサアーキテクチャ１００、４００に従って実施されたプロセッサで例外ハンドリングを実行するための方法を示している。所与のスレッドの命令ｉが実行されている間に、例外要求が発生する（ステップ６０２）。各プロセッサスレッドに関連したプログラムカウンタ値が、プロセッサのパイプライン内の現在の命令の状態と共に保存される（ステップ６０４）。一実施態様では、プロセッサのパイプライン内のすべての命令がアボート又はフラッシュされる。プロセッサは、所与のスレッドに関連した例外ハンドリングルーチンにジャンプする（ステップ６０６）。一実施態様では、各プロセッサスレッドは、他のプロセッサスレッドに関連した例外ハンドリングルーチンとは別で且つ独立の関連した例外ハンドリングルーチンを有する。一実施態様では、単一の例外ハンドリングルーチンが、実質的にすべてのプロセッサスレッドの例外要求を実行する。
【００５４】
例外要求は、所与の例外ハンドリングルーチンによって実行される（ステップ６０８）。例外要求がプロセッサによって実行された後、プログラムカウンタ値は、プロセッサのプログラムカウンタ内に復元され、（例外要求前の）命令の状態は、プロセッサのパイプライン内に復元される（ステップ６１０）。プロセッサは、例外ハンドリングルーチンから復帰した後、次の命令（たとえば、命令ｉ＋１）のプログラム実行を再開する（ステップ６１２）。ステップ６１２では、命令が再実行される場合、プロセッサは、命令ｉでプログラム命令を再開することができる。
【００５５】
＜割り込みハンドリング＞
パイプラインプロセッサアーキテクチャ１００、４００に従って実施されたプロセッサ内の割り込みも、例外と同様にハンドリングされる。図７は、パイプラインプロセッサアーキテクチャ１００、４００に従って実施されたプロセッサで割り込みをハンドリングするための方法を示している。
【００５６】
所与のスレッドの命令ｉが実行されている間に、割り込みが発生する（ステップ７０２）。各プロセッサスレッドに関連したプログラムカウンタ値が、そのプロセッサのパイプライン内の現在の命令の状態と共に保存される（ステップ７０４）。プロセッサは、所与のスレッドに関連した割り込みハンドリングルーチンにジャンプする（ステップ７０６）。一実施態様では、各プロセッサスレッドは、他のプロセッサスレッドに関連した割り込みハンドリングルーチンに関連したエントリーポイントとは別で且つ独立のエントリーポイントを有する、関連した割り込みハンドリングルーチンを有する。エントリーポイントは、割り込みハンドリングルーチンの開始アドレスである。一実施態様では、単一の割り込みハンドリングルーチン（単一のエントリーポイントを有する）が、実質的にすべてのプロセッサスレッドの割り込みを実行する。
【００５７】
割り込みは、所与の割り込みハンドリングルーチンによって実行される（ステップ７０８）。割り込みがプロセッサによって実行された後、プログラムカウンタ値は、プロセッサのプログラムカウンタ内に復元され、（割り込み要求前の）命令の状態は、プロセッサのパイプライン内に復元される（ステップ７１０）。プロセッサは、割り込みハンドリングルーチンから復帰した後、次の命令（たとえば、命令ｉ＋１）のプログラム実行を再開する（ステップ７１２）。
【００５８】
パイプラインプロセッサアーキテクチャ１００、４００に従って構築されたパイプラインプロセッサは、広範囲の用途に使用することができる。用途の例には、データストレージの用途、無線の用途、及びコンピュータシステムの用途が含まれる。
【００５９】
複数の実施態様を説明してきた。それにもかかわらず、この発明の趣旨及び範囲から逸脱することなく、さまざまな変更を行えることが理解されよう。たとえば、上述した方法のステップは、異なる順序で実行することができ、それでも依然として望ましい結果を達成することができる。したがって、他の実施態様も、添付の特許請求の範囲の範囲内にある。
【図面の簡単な説明】
【００６０】
【図１】パイプラインプロセッサアーキテクチャのブロック図である。
【図２】図１のパイプラインプロセッサアーキテクチャのオペレーションの方法である。
【図３】図１のパイプラインプロセッサアーキテクチャによるパイプラインプロセッサのブロック図である。
【図４】パイプラインプロセッサアーキテクチャのブロック図である。
【図５】図４のパイプラインプロセッサアーキテクチャによるパイプラインプロセッサのブロック図である。
【図６】図１及び図４のパイプラインプロセッサアーキテクチャで例外ハンドリングを実行する方法である。
【図７】図１及び図４のパイプラインプロセッサアーキテクチャで割り込みハンドリングを実行する方法である。
【図１】
2006260571.tif 000003
【図２】
2006260571.tif 000004
【図３】
2006260571.tif 000005
【図４】
2006260571.tif 000006
【図５】
2006260571.tif 000007
【図６】
2006260571.tif 000008
【図７】
2006260571.tif 000009
【外国語明細書】
2006260571.tif 000010
2006260571.tif 000011
2006260571.tif 000012
2006260571.tif 000013
2006260571.tif 000014
2006260571.tif 000015
2006260571.tif 000016
2006260571.tif 000017
2006260571.tif 000018
2006260571.tif 000019
2006260571.tif 000020
2006260571.tif 000021
2006260571.tif 000022
2006260571.tif 000023
2006260571.tif 000024
2006260571.tif 000025
2006260571.tif 000026
2006260571.tif 000027
2006260571.tif 000028
2006260571.tif 000029
2006260571.tif 000030
2006260571.tif 000031
2006260571.tif 000032
2006260571.tif 000033
2006260571.tif 000034
2006260571.tif 000035
2006260571.tif 000036
2006260571.tif 000037
2006260571.tif 000038
2006260571.tif 000039
2006260571.tif 000040
2006260571.tif 000041
2006260571.tif 000042
2006260571.tif 000043
2006260571.tif 000044
2006260571.tif 000045
2006260571.tif 000046
2006260571.tif 000047
2006260571.tif 000048
2006260571.tif 000049
2006260571.tif 000050
2006260571.tif 000051
2006260571.tif 000052
2006260571.tif 000053
2006260571.tif 000054
2006260571.tif 000055
2006260571.tif 000056
2006260571.tif 000057