(57)【要約】マルチスレッド・プロセッサは、要求元スレッドから宛先スレッドに向けられたスレッド間割込みを処理するための割込みコントローラを含む。例示的一実施形態では、割込みコントローラは、宛先スレッドへのスレッド間割込みの送達を求める要求を受信し、スレッド間割込みの宛先スレッドがスレッド間割込みの受信をイネーブルにしているかどうかを判断し、宛先スレッドがスレッド間割込みの受信をイネーブルにしているときは、スレッドＩＤを使用して宛先スレッドへのスレッド間割込みの送達を制御する。要求元スレッドは、マルチスレッド・プロセッサのフラグ・レジスタ内の対応する割込み保留ビットをセットすることによって、宛先スレッドへのスレッド間割込みの送達を要求する。マルチスレッド・プロセッサのイネーブル・レジスタの対応するイネーブル・ビットがセットされている場合は、宛先スレッドのスレッド間割込みの受信はイネーブルである。このフラグ・レジスタおよびイネーブル・レジスタは、割込みコントローラ内部に実装される。
2006503385.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッド・プロセッサにおいて要求元スレッドから宛先スレッドに向けられたスレッド間割込みを処理する方法であって、
前記宛先スレッドへの前記スレッド間割込みの送達を求める要求を受信する工程と、
前記スレッド間割込みの前記宛先スレッドが、スレッド間割込みの受信をイネーブルにしているかどうかを判断する工程と、
前記宛先スレッドがスレッド間割込みの受信をイネーブルにしている場合は、スレッドＩＤを使用して前記宛先スレッドへの前記スレッド間割込みの送達を制御する工程と
を含む方法。
【請求項２】
前記マルチスレッド・プロセッサのフラグ・レジスタ内の対応する割込み保留ビットをセットすることによって、前記要求元スレッドが、前記宛先スレッドへの前記スレッド間割込みの送達を要求する、請求項１に記載の方法。
【請求項３】
前記スレッド間割込みが前記宛先スレッドに送達されたとき、前記割込み保留ビットが自動的にクリアされる、請求項２に記載の方法。
【請求項４】
前記マルチスレッド・プロセッサのイネーブル・レジスタ内の対応するイネーブル・ビットがセットされている場合は、前記宛先スレッドのスレッド間割込みの受信がイネーブルである、請求項１に記載の方法。
【請求項５】
前記宛先スレッドが複数の割込みを同時に受信することを防ぐために、前記スレッド間割込みが前記宛先スレッドに送達されたときに前記イネーブル・ビットが自動的にクリアされる、請求項４に記載の方法。
【請求項６】
前記宛先スレッドが前記スレッド間割込みを処理したときに、前記イネーブル・ビットが自動的に再セットされる、請求項５に記載の方法。
【請求項７】
前記スレッド間割込みの前期要求が受信されると、前記マルチスレッド・プロセッサの１命令実行サイクルより短い持続時間を有する時間内に、前記スレッド間割込みが前記宛先スレッドに続いて送達される、請求項１に記載の方法。
【請求項８】
前記受信、判断、および使用の各工程が、割込みコントローラに実装される、請求項１に記載の方法。
【請求項９】
前記割込みコントローラが、イネーブル・レジスタ、フラグ・レジスタ、および論理回路を含む、請求項８に記載の方法。
【請求項１０】
前記イネーブル・レジスタが少なくともＮ個の部分を含み、その各々が前記マルチスレッド・プロセッサのＮ個のスレッドの１つに対応している、請求項９に記載の方法。
【請求項１１】
前記各スレッドが、前記イネーブル・レジスタのそのスレッドに対応する部分にだけアクセスすることが許され、前記イネーブル・レジスタの他のスレッドに対応するＮ−１個の部分のいずれにもアクセスすることが許されない、請求項１０に記載の方法。
【請求項１２】
前記フラグ・レジスタが少なくともＮ個の部分を含み、その各々が前記マルチスレッド・プロセッサのＮ個のスレッドの１つに対応している、請求項９に記載の方法。
【請求項１３】
前記各スレッドが、前記フラグ・レジスタの前記Ｎ個の部分のいずれにもアクセスすることが許される、請求項１２に記載の方法。
【請求項１４】
マルチスレッド・プロセッサにおいて、要求元スレッドから宛先スレッドに向けられたスレッド間割込みを処理する装置であって、前記装置が、
論理回路を含む割込みコントローラを含み、前記割込みコントローラが、（ｉ）前記宛先スレッドへの前記スレッド間割込みの送達を求める要求を受信し、（ｉｉ）前記スレッド間割込みの前記宛先スレッドがスレッド間割込みの受信をイネーブルにしているかどうかを判断し、（ｉｉｉ）前記宛先スレッドがスレッド間割込みの受信をイネーブルにしている場合は、スレッドＩＤを使用して前記宛先スレッドへの前記スレッド間割込みの送達を制御するように構成された装置。
【請求項１５】
前記割込みコントローラが、イネーブル・レジスタおよびフラグ・レジスタをさらに含み、前記フラグ・レジスタ内の対応する割込み保留ビットをセットすることによって、前記要求元スレッドが前記宛先スレッドへのスレッド間割込みの送達を要求し、前記イネーブル・レジスタ内の対応するイネーブル・ビットがセットされている場合は、前記宛先スレッドのスレッド間割込みの受信がイネーブルである、請求項１４に記載の装置。
【請求項１６】
前記論理回路が、
前記割込み要求を処理するための割込み要求論理回路と、
前記イネーブル・レジスタおよび前記フラグ・レジスタの両方からの対応するビットを、各論理ゲートが入力として受信する複数の論理ゲートと、
前記論理ゲートの出力の中から少なくとも１つの出力を選択して、少なくとも一部は前記スレッドＩＤに基づく前記スレッド間割込みの生成を制御する際に使用するマルチプレクサ回路と
を含む、請求項１５に記載の装置。
【請求項１７】
タイマ割込み、命令アドレス割込み、およびデータ・アドレス割込みの少なくとも１つを含む少なくとも１つの他の種類の割込みに対する、前記スレッド間割込みの優先度を決める優先度論理回路を、前記論理回路がさらに含む、請求項１６に記載の装置。
【請求項１８】
前記他の種類の割込みよりも高い優先度、または低い優先度を前記スレッド間割込みに提供するように前記優先度論理回路が構成される、請求項１７に記載の装置。
【請求項１９】
データ・メモリおよびキャッシュ・メモリの少なくとも一方を含むメモリと、
マルチスレッド・プロセッサ中で、要求元スレッドから宛先スレッドに向けられたスレッド間割込みを処理する割込みコントローラであって、（ｉ）前記宛先スレッドへの前記スレッド間割込みの送達を求める要求を受信し、（ｉｉ）前記スレッド間割込みの前記宛先スレッドがスレッド間割込みの受信をイネーブルにしているかどうかを判断し、（ｉｉｉ）前記宛先スレッドがスレッド間割込みの受信をイネーブルにしている場合は、スレッドＩＤを使用して前記宛先スレッドへの前記スレッド間割込みの送達を制御するように構成された割込みコントローラと
を含むマルチスレッド・プロセッサ。
【請求項２０】
要求元スレッドから宛先スレッドに向けられたスレッド間割込みの処理に使用されるプログラム・コードが実施されたマシン可読の記憶媒体を、マルチスレッド・プロセッサ中に含む製品であって、前記プログラム・コードが前記プロセッサによって実行されるときに、
前記宛先スレッドへの前記スレッド間割込みの送達を求める要求を受信する工程と、
前記スレッド間割込みの前記宛先スレッドがスレッド間割込みの受信をイネーブルにしているかどうかを判断する工程と、
前記宛先スレッドがスレッド間割込みの受信をイネーブルにしている場合には、スレッドＩＤを使用して、前記宛先スレッドへの前記スレッド間割込みの送達を制御する工程と
を実施する製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にデジタル・データ・プロセッサの分野に関し、より詳細にはマルチスレッド・プロセッサで使用される割込み技術に関する。
【背景技術】
【０００２】
本出願は、Ｈｏｋｅｎｅｋらの名前で２００２年１０月１５日に出願された、「Ｈｉｇｈ  Ｓｐｅｅｄ  Ｃｒｏｓｓ−Ｔｈｒｅａｄ  Ｉｎｔｅｒｒｕｐｔｓ」と題する米国特許仮出願第６０／４１８４５５号の優先権を主張するものであり、その開示を参照により本明細書に組み込む。
【０００３】
コンピュータ・システムにおいては、予期しないまたは稀にしか発生しない、動作または状態をプロセッサに知らせるために、歴史的に「割込み」機構を使用してきた。例えば、現代の代表的なコンピュータは、無効な計算、ネットワーク・パケットの到着、ディスク・アクセスの完了などについてはすべて、割込みを発生させる。プロセッサの通常の動作には関与しない特別なハードウェアによって状態を検出し、プロセッサに信号で通知する。割込みを受信すると直ぐに、プロセッサは現在のタスクを中断し、その状態を処理するために必要な諸ステップを実施し、次いで通常の実行を再開する。この割込み機能を用いると、コンピュータは、稀にしか発生しないイベントに対し、それらを常にチェックまたは「ポーリング」することを必要とせずに、直ちに応答することが可能になる。
【０００４】
一般に、マルチプロセッサ・システムはプロセッサ間割込みをサポートしており、それを使用して、あるプロセッサから他のプロセッサに割込みをかけることができる。プロセッサ間割込みは、様々なプロセッサの動作を同期させるため、あるいは動作中のシステムやプログラムの状態の変化をプロセッサに知らせるために使用される。例えば、マルチ・プロセッサ上で動作中のプログラムは、プログラムの状態が変化したとき、変化を検出したプロセッサだけでなく、そのプログラムの実行に関与しているすべてのプロセッサにその変化を反映させる必要がある。さらに、プロセッサ間割込みを使用して、プロセッサ間メッセージが到着したことをプロセッサに知らせることもできる。
【０００５】
プロセッサ間割込みの送達および受信は比較的高速であるが、それでも多数のプロセッサ・クロック・サイクルが必要になる。割込みの送受信に使用される割込みコントローラは、プロセッサから分離されていることも多く、操作のために複数サイクルの動作を必要とする。また、プロセッサは一般に、従来の割込みコントローラより高速のクロック・レートで実行されるので、ある割込みコントローラから他の割込みコントローラに実際に割込みを送信するためには、例えば、いくつかのプロセッサ・クロック・サイクルを必要とすることもある。
【０００６】
マルチスレッド・プロセッサとは、複数の異なる命令シーケンスすなわち「スレッド」の同時実行をサポートするプロセッサのことである。この複数の処理スレッドは、単一スレッドだけの場合より、プロセッサのより多くの計算パワーを使用するように協働する。一般に、この協働によって、代表的なマルチプロセッサ・システムよりさらに多くの同期や通信が発生し、その結果、スレッド間割込み、すなわち、あるスレッドから他のスレッドへの割込み、などの通信機構のコストが一層増大する。
【０００７】
「ハイパースレッド技術」を使用するインテル（登録商標）製プロセッサなど、既存のマルチスレッド・プロセッサは通常、先に説明したマルチプロセッサ・システムでプロセッサ間割込みの処理に使用される技術をエミュレートする技術を使用してスレッド間割込みを処理する。その結果、スレッド間割込みを処理する従来の技術では処理が非常に遅くなり、処理リソースの非常に大きなオーバヘッドを要することがあり得る。例えば、従来技術を使用して、あるスレッドから他のスレッドに割込みをかけるには、一般に、かなりの数の命令実行サイクルが必要になる。
【特許文献１】米国特許仮出願第６０／４１８４５５号
【特許文献２】米国特許出願第１０／１６１７７４号
【特許文献３】米国特許出願第１０／１６１８７４号
【特許文献４】米国特許出願第１０／２６９２４７号
【特許文献５】米国特許出願第１０／２６９３７３号
【特許文献６】米国特許出願第１０／２６９３７２号
【特許文献７】米国特許出願第１０／２６９２４５号
【発明の開示】
【発明が解決しようとする課題】
【０００８】
上記のことから明らかなように、マルチスレッド・プロセッサで使用される、改良されたスレッド間割込み処理技術が求められている。
【課題を解決するための手段】
【０００９】
本発明は、マルチスレッド・プロセッサでスレッド間割込みを処理するための改良された技術を提供する。
【００１０】
本発明の一態様では、マルチスレッド・プロセッサは、要求元スレッドから宛先スレッドに向けられたスレッド間割込みを処理する割込みコントローラを含む。
【００１１】
例示的一実施形態における割込みコントローラは、宛先スレッドへのスレッド間割込みの送達を求める要求を受信し、スレッド間割込みの宛先スレッドがスレッド間割込みの受信をイネーブルにしているかどうかを判断し、宛先スレッドがスレッド間割込みの受信をイネーブルにしている場合には、スレッドＩＤを使用して宛先スレッドへのスレッド間割込みの送達を制御する。
【００１２】
要求元スレッドは、マルチスレッド・プロセッサのフラグ・レジスタ内の対応する割込み保留ビットを設定することによって、宛先スレッドへのスレッド間割込みの送達を要求する。スレッド間割込みが宛先スレッドに送達されたときに、割込み保留ビットを自動的にクリアすることもできる。
【００１３】
マルチスレッド・プロセッサのイネーブル・レジスタ内の対応するイネーブル・ビットがセットされている場合は、宛先スレッドのスレッド間割込みの受信がイネーブルである。スレッド間割込みが宛先スレッドに送達されたとき、宛先スレッドが複数の割込みを同時に受信することを防ぐために、イネーブル・ビットは自動的にクリアされる。次いで、スレッド間割込みを処理した後で、宛先スレッドによる他の割込みの受信を再びイネーブルにするために、イネーブル・ビットは再セットされる。
【００１４】
例示的実施形態のイネーブル・レジスタおよびフラグ・レジスタは、どちらも少なくともＮ個の部分を含み、このＮ個の各部分は、マルチスレッド・プロセッサのＮ個のスレッドの１つに対応する。好ましくは、このＮ個の各スレッドは、イネーブル・レジスタのそのスレッドに対応する部分だけにアクセスすることが許され、イネーブル・レジスタの他のスレッドに対応するＮ−１個の部分のいずれにもアクセスすることは許されない。一方、このＮ個の各スレッドは、フラグ・レジスタのＮ個の部分のいずれにもアクセスすることが許される。
【００１５】
本発明の他の態様によれば、割込みコントローラの論理回路は、割込み要求を処理する割込み要求論理回路、各論理ゲートがイネーブル・レジスタおよびフラグ・レジスタの両方から対応するビットを入力として受信する複数の論理ゲート、およびマルチプレクサ回路を含むことができる。マルチプレクサ回路は、論理ゲートの出力の中から少なくとも１つの出力を選択して、少なくとも一部はスレッドＩＤに基づくスレッド間割込みの生成を制御する際に使用する。
【００１６】
割込みコントローラの論理回路はさらに、タイマ割込み、命令アドレス割込み、外部生成割込みなど、他の種類の割込みに対する、スレッド間割込みの優先度を決定する優先度論理回路を含むことができる。
【００１７】
有利には、本発明は、マルチスレッド・プロセッサにおいてスレッド間割込みを送達し処理する、待ち時間が少なく、かつオーバヘッドが少ない機構を提供する。例えば、上述の例示的実施形態では、所与のスレッドは、単一の命令実行サイクル以内で他のスレッドに割込みをかけることができる。
【発明を実施するための最良の形態】
【００１８】
この明細書において本発明は、メイン・メモリ、マルチスレッド・キャッシュ・メモリ、およびマルチスレッド・データ・メモリが付随したマルチスレッド・プロセッサに実装されるものとして示されている。しかし、本発明が、例示した実施形態の、特定のマルチスレッド・プロセッサおよびメモリの構成を必要とするものではないこと、および本発明が、より一般的に、スレッド間割込みの改良された処理の提供が望まれる、どのようなマルチスレッド・プロセッサの割込み処理用途での使用にも適するものであることを理解されたい。
【００１９】
本発明によるスレッド間割込み処理技術を実装する処理システム１００の一例を、図１および図２と共に説明する。
【００２０】
図１は、メイン・メモリ１０４に結合されたマルチスレッド・プロセッサ１０２を含む処理システム１００を示す。マルチスレッド・プロセッサ１０２は、割込みコントローラ１０５、マルチスレッド・キャッシュ・メモリ１１０、およびマルチスレッド・データ・メモリ１１２を含む。
【００２１】
本発明の一態様によれば、マルチスレッド・プロセッサ１０２における、スレッド間割込みを処理するための改良された技術が提供される。例示的一実施形態では、これらの技術は、主に割込みコントローラ１０５内に実装される。割込みコントローラ１０５は、この実施形態では、好ましくは図１に一般的に示されているように、マルチスレッド・プロセッサ１０２の内部に組み込まれる。
【００２２】
割込みコントローラ１０５は、本発明の、スレッド間割込みを効率的に処理するための技術に従って構成されるが、当業者には周知の従来技術を用いた他の種類の割込み、例えばデータもしくは命令アドレス割込み、タイマ割込み、外部生成割込みなどを処理するようにも構成できることを理解されたい。外部生成割込みには、例えばマルチスレッド・プロセッサ１０２の外部の特定の装置に関連する割込みや、プロセッサの特定の入力ピンに関連する割込みなどが含まれる。
【００２３】
したがって、割込みコントローラ１０５には、本明細書に記載の特定の割込みコントローラ要素に追加してまたはその代わりに、様々な従来要素を含めることができる。
【００２４】
図２は、マルチスレッド・プロセッサ１０２の可能な一実装のより詳細な図である。この実施形態では、マルチスレッド・プロセッサ１０２は、割込みコントローラ１０５、マルチスレッド・キャッシュ・メモリ１１０、データ・メモリ１１２、キャッシュ・コントローラ１１４、命令デコーダ１１６、レジスタ・ファイル１１８、および１組の演算論理ユニット（ＡＬＵ）１２０を含む。マルチスレッド・キャッシュ・メモリ１１０は、本明細書ではマルチスレッド・キャッシュとも呼ぶ。
【００２５】
当業者には明らかなように、図１および図２に示した特定の構成が、図を見やすくするために簡略化されていること、したがって、明示的に示されていない追加のまたは代替の要素を含めることができることに留意されたい。
【００２６】
割込みコントローラ１０５は、論理回路２０２および割込みコントローラ・レジスタ２０４を含む。例示の実施形態では、レジスタ２０４は、イネーブル・レジスタおよびフラグ・レジスタを含む。これらについては、それぞれ図３および図４と共に以下でより詳細に説明する。論理回路２０２、および論理回路とレジスタ２０４の相互作用については、図５と共に以下でより詳細に説明する。
【００２７】
割込みコントローラ１０５は、システム・バス２０６を介して、マルチスレッド・プロセッサ１０２の他の要素と結合させることができる。
【００２８】
この例示の実施形態では、割込みコントローラ１０５には、ブランチ・コントローラ２１０も関係している。ブランチ・コントローラ２１０は、キャッシュ・コントローラ１１４および割込みコントローラ１０５と結合されている。ブランチ・コントローラはまた、バス２０６または図には明示されていない他の適切な接続を介して、マルチスレッド・プロセッサ１０２中の１つまたは複数の他の要素と通信することもできる。図では分離した要素として示されているが、本明細書に記載したブランチ・コントローラ２１０の機能は、その全体または一部を、割込みコントローラ１０５の内部、またはマルチスレッド・プロセッサ１０２の他の要素の内部に実装することができる。ブランチ・コントローラ２１０または関連する割込みコントローラ１０５には、従来のスレッド実行コントローラに関する機能など、他の機能を実装することもできる。
【００２９】
マルチスレッド・キャッシュ１１０は、複数のスレッド・キャッシュ１１０−１、１１０−２、・・・１１０−Ｎを含む。ただし、Ｎはマルチスレッド・プロセッサ１０２によってサポートされるスレッドの数を一般化して示したものである。したがって各スレッドは、マルチスレッド・キャッシュ１１０内に、そのスレッドに関連づけられた対応するスレッド・キャッシュを含む。同様にデータ・メモリ１１２は、図にデータ・メモリ１１２−１、１１２−２、・・・１１２−Ｎとして示された、Ｎ個の異なるデータ・メモリ・インスタンスを含む。
【００３０】
マルチスレッド・キャッシュ１１０の各スレッド・キャッシュは、１つまたは複数の組のメモリ配置を有するメモリ・アレイを含むことができる。所与のスレッド・キャッシュはさらに、関連するスレッドＩＤを格納するためのスレッドＩＤレジスタを含むこと、またはそのレジスタに関連づけることができる。
【００３１】
マルチスレッド・キャッシュ１１０は、キャッシュ・コントローラ１１４を介してメイン・メモリ１０４とインタフェースする。キャッシュ・コントローラ１１４は、メイン・メモリ１０４からの適切な命令がマルチスレッド・キャッシュ１１０にロードされることを保証する。この例示的実施形態でのキャッシュ・コントローラ１１４は、論理回路または個々のスレッド・キャッシュ１１０−１、１１０−２、・・・１１０−Ｎに関連する他の処理要素と共に動作し、例えば完全連想マッピング、直接マッピング、セット連想マッピングなどのアドレスマッピング技術の少なくとも一部を実施する。本発明と共に用いるのに適した例示的なセット連想マッピング技術は、２００２年６月４日出願の、米国特許出願第１０／１６１７７４号および第１０／１６１８７４号に記載されている。これらの発明は、どちらも本発明の譲受人に譲渡されており、その両方の開示を参照により本明細書に組み込む。
【００３２】
一般に、マルチスレッド・キャッシュ１１０は、マルチスレッド・プロセッサ１０２によって実行される命令を格納するために使用され、一方、データ・メモリ１１２は、それらの命令によって操作されるデータを格納する。各命令は、命令デコーダ１１６によって、マルチスレッド・キャッシュ１１０からフェッチされる。命令デコーダ１１６は、レジスタ・ファイル１１８およびＡＬＵ１２０と協働し、従来の方法で命令の実行を制御する。マルチスレッド・プロセッサの各要素、例えば１１６、１１８、１２０などの動作については、当技術分野ではよく理解されているので本明細書ではこれ以上詳細には説明しない。
【００３３】
データ・メモリ１１２は通常、メイン・メモリ１０４に直接接続される。ただし、図にはこの接続は明示されていない。
【００３４】
１つまたは複数のメモリ、１０４、１１０、および１１２はそれぞれ、複数のバンクまたは他の指定された部分を含むように構成することができる。例として、各バンクは、１つまたは複数のメモリ・モジュール、または単一のメモリ・モジュールの指定された部分から構成されるものと見なせる。
【００３５】
マルチスレッド・プロセッサに関する、これらおよび他のメモリの、スレッドベースのバンキング技術は、２００２年１０月１１日出願の、「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｔｈｒｅａｄ−Ｂａｓｅｄ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  ｉｎ  ａ  Ｍｕｌｔｉｔｈｒｅａｄ  Ｐｒｏｃｅｓｓｏｒ」と題する米国特許出願第１０／２６９２４７号に記載されている。この発明は、本発明の譲受人に譲渡されており、その開示を参照により本明細書に組み込む。
【００３６】
本明細書で使用する「メモリ」という用語は、内部または外部メモリ、キャッシュ・メモリ、データ・メモリ、あるいはデータ記憶要素の他の構成を包含するように、幅広く解釈されることを意図したものである。本発明は、特定のメモリの種類、構成、または用途に限定されるものではない。ただし、メモリは一般に、プロセッサ技術分野においては、レジスタ、例えば図２のレジスタ・ファイル１１８を構成するレジスタなどとは別のものと解釈されていることに留意されたい。
【００３７】
レジスタ・ファイルへのスレッドベースのアクセス技術は、２００２年１０月１１日出願の、「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｒｅｇｉｓｔｅｒ  Ｆｉｌｅ  Ｐｏｒｔ  Ｒｅｄｕｃｔｉｏｎ  ｉｎ  ａ  Ｍｕｌｔｉｔｈｒｅａｄｅｄ  Ｐｒｏｃｅｓｓｏｒ」と題する米国特許出願第１０／２６９３７３号に記載されている。この発明は、本発明の譲受人に譲渡されており、その開示を参照により本明細書に組み込む。
【００３８】
本発明が、図２に示された特定のマルチスレッド・プロセッサの構成を必要とするものではないことも強調しておく必要がある。本発明は、様々な他のマルチスレッド・プロセッサの構成に実装することができる。
【００３９】
本発明と共に使用するのに適した、図２に示した種類のマルチスレッド・プロセッサのより詳細な例が、２００２年１０月１１日出願の、「Ｍｕｌｔｉｔｈｒｅａｄｅｄ  Ｐｒｏｃｅｓｓｏｒ  Ｗｉｔｈ  Ｅｆｆｉｃｉｅｎｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｆｏｒ  Ｃｏｎｖｅｒｇｅｎｃｅ  Ｄｅｖｉｃｅ  Ａｐｐｌｉｃａｔｉｏｎｓ」と題する、米国特許出願第１０／２６９３７２号に記載されている。この発明は、本発明の譲受人に譲渡されており、その開示を参照により本明細書に組み込む。米国特許出願第１０／２６９３７２号に記載のマルチスレッド・プロセッサの例示的実施形態は、リスクベースの制御コード、デジタル・シグナル・プロセッサ（ＤＳＰ）コード、Ｊａｖａ（登録商標）コード、およびネットワーク処理コードを実行することができる。このプロセッサは、単一命令複数データ（ＳＩＭＤ）ベクトル・ユニット、リダクション・ユニット、および長命令語（ＬＩＷ）複合命令実行を含むことができる。
【００４０】
マルチスレッド・プロセッサ１０２は、トークン・トリガ・スレッディングと呼ばれるスレッド手法、または他の適切なスレッド技術を使用するように構成することができる。好ましくは、このようなスレッド手法と共に、パイプライン手法を使用することもできる。本発明と共に使用するのに適したスレッドおよびパイプライン技術の例は、２００２年１０月１１日出願の、「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｔｏｋｅｎ  Ｔｒｉｇｇｅｒｅｄ  Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ」と題する米国特許出願第１０／２６９２４５号に記載されている。この発明は、本発明の譲受人に譲渡されており、その開示を参照により本明細書に組み込む。
【００４１】
マルチスレッド・プロセッサでは、一般に所与のスレッドを、ハードウェアと見なすことも、ソフトウェアとも見なすこともできる。所与のスレッドに関する特定のプロセッサ・ハードウェアは、より詳しくハードウェア・スレッド・ユニット、あるいは単に「コンテクスト」と呼ばれることも多い。本明細書で使用する「スレッド」という用語は、ソフトウェア・スレッドまたはハードウェア・スレッド、あるいはその両方を含むことが意図される。
【００４２】
次に、ブランチ・コントローラ２１０と、割込みコントローラ１０５やマルチスレッド・プロセッサ１０２の他の要素との相互作用についてより詳細に述べる。一般に、ブランチ・コントローラ２１０は、各スレッドがどの命令を実行中かを指定する情報を維持し、どの命令を命令デコーダ１１６に送ってデコードし、実行すべきかについて、スレッド・キャッシュに指示する。したがってブランチ・コントローラ２１０は通常、各スレッドごとに、個別のプログラム・カウンタと、通常の命令、分岐命令、割込みなどの後でそれぞれプログラム・カウンタを更新する機構とを維持する。
【００４３】
図２の構成図では、ブランチ・コントローラ２１０と割込みコントローラ１０５の間に、２本の接続２１２および２１４が示されている。この接続のより詳細な例は、以下で説明する図５に示される。ブランチ・コントローラ２１０は、接続２１２を使用して、本明細書で「次の実行」スレッドとも呼ぶ、次に実行される予定のスレッドへの割込みがあるかどうかを、割込みコントローラ１０５に照会する。割込みコントローラ１０５は、この照会に対する応答を、接続２１４を介してブランチ・コントローラ２１０に返す。図５の例では、接続２１２は、割込みを受ける特定のスレッドを識別するように、より詳細に指定される。一方、接続２１４は、割込みがある場合には、その特定の割込みに関するアドレスおよび制御出力を含む。
【００４４】
上述のように、一態様によれば本発明は、マルチスレッド・プロセッサ１０２によって使用される改良されたスレッド間割込み処理技術を提供する。
【００４５】
本発明の例示的一実施形態では、マルチスレッド・プロセッサ、例えばマルチスレッド・プロセッサ１０２は、あるスレッドから他のスレッドに単一命令実行サイクル以内で割込みをかけることができるように構成される。以下に述べるように、割込みコントローラ１０５をマルチスレッド・プロセッサ１０２に統合し、処理スレッドから割込みコントローラ・レジスタ２０４への迅速なアクセスを可能にすることによって、スレッド間割込みの送達、処理、またはその他の処理に必要な時間が大幅に短縮される。
【００４６】
図３および図４はそれぞれ、本発明による割込みコントローラ１０５に付随する例示的なイネーブル・レジスタおよびフラグ・レジスタを示す。図３および図４のレジスタは、図２に一般的に示したレジスタ２０４の特別な例と見なすことができる。以下でより詳細に説明するように、これらの例示的な割込みコントローラ・レジスタは、任意の所与の時間にどの割込みをどのスレッドに送達可能かを制御するものであるが、これらは、単一の命令実行サイクルで読み出し、または修正することができる。好ましくは上記のように、これらのレジスタはマルチスレッド・プロセッサ１０２と一体化される。例えば、これらの割込みコントローラ・レジスタは、割込みコントローラ１０５の内部、またはマルチスレッド・プロセッサ内の他の場所に組み込まれた、いわゆる「特殊用途」のレジスタであってもよい。ただし、本発明の技術を実装するには、他の種類のレジスタを使用することも可能である。
【００４７】
図３〜５と共に説明する各実施形態では、説明を分かりやすく簡単にするために、スレッドの数Ｎを８と想定する。もちろん本発明に、この特定の数のスレッドが必要なわけではない。当業者には容易に明らかになるはずであるが、開示の構成は、他の数のスレッドに対応するように容易に修正することができる。
【００４８】
最初に図３を参照すると、スレッド割込みイネーブル・レジスタ（ＴＩＥＲ）３００が示されている。ＴＩＥＲは、各スレッドに対して１つずつの、８個の異なる４ビット・レジスタと見なすことができる。ただし、この実施形態では、ＴＩＥＲは単一の３２ビットレジタを使用して実装されており、ビット０、８、１６、２４がスレッド１に関連づけられ、ビット１、９、１７、２５がスレッド２に関連づけられ、以下同様に関連づけられる。
【００４９】
割込みコントローラは、各スレッドが、ＴＩＥＲのそのスレッドに対応する部分にだけアクセスできることを保証するように構成される。ＴＩＥＲは、８つの各スレッドに対し、データ・アドレス（ＤＡＤＲ）割込みイネーブル・ビット、命令アドレス（ＩＡＤＲ）割込みイネーブル・ビット、タイマ割込みイネーブル・ビット、およびマスタ割込みイネーブル・ビットを含む。所与の１つのスレッドに対し、マスタ割込みイネーブル・ビットがセットされると、そのスレッドは、すべての割込みソースからの割込みを受信することが可能になる。また、そのビットがクリアされると、そのスレッドでは、すべての割込みソースからの割込みの受信が阻止される。説明を分かりやすくするために、本明細書では、「セット」および「クリア」という用語を、それぞれロジック０レベル、およびロジック１レベルを表すものとして使用することを想定する。ただし、他の想定を使用することもできる。
【００５０】
スレッド間割込みを可能にするために、ＴＩＥＲの特定のビットを必要とするものではないことに留意されたい。その理由は、例示の実施形態におけるこれらの割込みが、少なくともひとつには、マルチスレッド・プロセッサ１０２上で動作するソフトウェアによって生成できるからである。
【００５１】
一般に、ＴＩＥＲを用いると、所与のスレッドが様々なソースからの割込みを受信できるようにすることが可能になる。この実施形態では、所与のスレッドは、ＴＩＥＲのそのスレッドに対応する部分のマスタ・イネーブル・ビットをセットすることによって、他のスレッドからのスレッド間割込みを含む、あらゆるソースからの割込みの受信を保証することができる。他の構成を使用して、本発明によるスレッド間割込みを可能にできることに留意されたい。
【００５２】
図４は、スレッド割込みフラグ・レジスタ（ＴＩＦＲ）４００を示す。この実施形態では、このレジスタは８個のスレッド間で共用される。スレッド間でＴＩＦＲが「共用」されるとは、各スレッドがレジスタの全体にアクセスできるという意味である。このことは、ＴＩＥＲとは対照的であり、ＴＩＥＲに含まれる個別の各部分には、対応するスレッドだけがアクセス可能である。
【００５３】
ＴＩＦＲには、この８個の各スレッドごとに、本明細書で「割込み保留」ビットとも呼ぶ１組のフラグ・ビットが含まれる。より詳細には、ＴＩＦＲは、所与のスレッドに対し合計４個の割込み保留ビット、すなわちデータ・アドレス（ＤＡＤＲ）割込み、命令アドレス（ＩＡＤＲ）割込み、タイマ割込み、およびスレッド間（ＸＴＨＲ）割込みの各割込みに対する個別の割込み保留ビットを含む。本実施形態のＴＩＦＲもまた、単一の３２ビット・レジスタを使用して実装され、ビット０、８、１６、２４がスレッド１に関連づけられ、ビット１、９、１７、２５がスレッド２に関連づけられ、以下同様に関連づけられている。ＴＩＦＲにおいては、所与の割込み保留ビットは、セット時には対応する割込みが保留中であることを示し、クリア時には対応する割込みが保留中でないことを示す。所与のスレッドは一般に、ＴＩＦＲ中の対応するＸＴＨＲ割込み保留ビットをセットすることによって、他のスレッドに対するスレッド間割込みを設定する。
【００５４】
上で示したように、本発明のＴＩＥＲレジスタおよびＴＩＦＲレジスタは、図に示したような特定の構成を必要とするものではない。例えば、図３および４では単一のレジスタとして図示されているが、ＴＩＥＲおよびＴＩＦＲの一方、またはその両方を、別法として、スレッドあたり１レジスタ、スレッド・ペアあたり１レジスタなど、それぞれを複数のレジスタとして実装することもできる。ＴＩＥＲおよびＴＩＦＲについての、他の多数の代替構成は、当業者には容易に明らかになるはずである。
【００５５】
図５は、本発明の例示的実施形態における、割込みコントローラ１０５のより詳細な図を示す。割込みコントローラ１０５は、前述のような形で各々３２ビット・レジスタとして実装された、ＴＩＥＲ３００およびＴＩＦＲ４００を含む。割込みコントローラ１０５はさらに、割込みアドレスおよび制御出力を生成するための、割込み要求論理回路５０２、この実施形態では３２個の２入力ＡＮＤゲートで構成される論理ゲート５０４、マルチプレクサ回路５０６、および優先度論理回路５０８を含む。
【００５６】
割込み要求論理回路５０２は、割込み要求バス５１０に結合されている。このバスは、図２のシステム・バス２０６の少なくとも一部を表すものである。割込み要求論理回路５０２はまた、ライン５１２を介して、入力として割込み要求スレッドＩＤも受信する。「スレッドＩＤ」という用語は、本明細書ではスレッド＿ＩＤとも記される。所与のスレッドの１つに対するスレッドＩＤは、そのＩＤ用の上記スレッドＩＤレジスタに格納することができる。この例では、先に述べたようにＮ＝８であり、スレッドＩＤは３ビットＩＤとすることができる。
【００５７】
一般に、入力５１０および５１２を使用して、ＴＩＦＲのどのビットをセットすべきかを決定する。より詳細には、入力５１２を介して提供される割込み要求スレッドＩＤを使用して、割込みコントローラ１０５は、フラグ・レジスタの要求された宛先スレッドの部分を選択する。また、割込み要求バス５１０は、割込み要求の個々の種類を指定する情報を提供する。
【００５８】
本明細書で使用する「スレッドＩＤ」という用語は、マルチスレッド・プロセッサにおける個々のスレッドまたは１組の複数のスレッドを識別するのに適した任意の情報を含むことが意図される。限定の意味ではなく例として、スレッドＩＤは、マルチスレッド・プロセッサのスレッド・カウンタの出力に対応させることができる。より詳細には、所与のマルチスレッド・プロセッサは、複数のスレッドを、例えばラウンド・ロビン順など所定の順序で処理し、実行中の特定のスレッドを識別するためにスレッド・カウンタ出力を使用するように構成することができる。この実施形態では、ラウンド・ロビン順に処理される計８個のスレッドを含むことができ、各スレッドは３ビットのＩＤによって識別される。したがって、処理中の個々のスレッドは、３ビット・カウンタの出力を使用して識別することができる。他の実施形態では、カウンタを用いないスレッドＩＤの実装を使用することもできる。本発明での使用に適した、様々なスレッドＩＤ構成が、当業者には容易に明らかになるはずである。
【００５９】
マルチスレッド・プロセッサ１０２の様々なスレッドは、割込み要求論理回路５０２を介してＴＩＥＲおよびＴＩＦＲにアクセスすることができる。他のスレッドのスレッド間割込みを要求する所与のスレッドは、割込みを受けるそのスレッドの割込み要求スレッドＩＤを、入力５１２を介して割込み要求論理回路５０２に提供する。スレッド間割込みによって割込みを受けるスレッドを、本明細書では「宛先」スレッドとも呼ぶ。
【００６０】
１組の論理ゲート５０４の各２入力ＡＮＤゲートは、一方がＴＩＥＲから、もう一方がＴＩＦＲからの一対のビットを入力として受け取る。例えば、２入力ＡＮＤゲートの左端のゲートは、入力として、ＴＩＥＲおよびＴＩＦＲの３２番目のビット、すなわち、ＴＩＥＲおよびＴＩＦＲのＤＡＤＲ部分のビット３１として識別されるビットを受信する。ＴＩＥＲおよびＴＩＦＲの他のビットも同様に、ペアの形で２入力ＡＮＤゲートに印加される。
【００６１】
ＡＮＤゲートの出力はマルチプレクサ回路５０６の入力に印加される。より詳細には、４個の各８：１マルチプレクサ、５０６−１、５０６−２、５０６−３、および５０６−４は、１組の論理ゲート５０４における３２個の２入力ＡＮＤゲートのうちの８個の出力を入力として受信する。マルチプレクサ、５０６−１、５０６−２、５０６−３、および５０６−４が受信する入力は、それぞれＴＩＥＲおよびＴＩＦＲのビット０〜７、ビット８〜１５、ビット１６〜２３、およびビット２４〜３１に関連づけられている。
【００６２】
各マルチプレクサはまた、次に実行されるスレッドのスレッドＩＤを、上記の図２に関して説明したような方法で、ブランチ・コントローラ２１０から接続２１２を介して割込みコントローラ１０５に提供される選択信号入力として受信する。このスレッドＩＤは、次に実行されるスレッドが何らかの保留割込みを有しているかどうかについての上記の照会と共に提供される。提供された「次に実行される」スレッドＩＤに基づき、各マルチプレクサは、その８入力のうちの選択された１つを優先度論理回路５０８に入力する。優先度論理回路５０８は、これらの入力を使用して、対応する割込みのための適切なアドレスおよび制御出力を生成する。
【００６３】
以下でより詳細に説明するように、「次に実行する」スレッドに対する保留割込みがある場合は、割込みコントローラ１０５は、上記の照合に応答して、最初に、その特定の宛先スレッドのマスタ割込みイネーブル・ビットがセットされているかどうかをチェックする。次に、マスタ割込みイネーブル・ビットがセットされている場合は、割込みコントローラ１０５は、適切な制御出力、および対応する割込みハンドラ・アドレスを、接続２１４を介してブランチ・コントローラに送達する。
【００６４】
図６は、割込みコントローラ１０５の、スレッド間割込み処理に関する例示的動作を示す流れ図６００である。スレッド間割込みを送達するために、要求元スレッドは、ステップ６０２に示すように、ＴＩＦＲ中の、宛先スレッドに対応するＸＴＨＲビットをセットする。「次に実行する」スレッドのスレッドＩＤに基づいて、マルチプレクサ５０６−１、５０６−２、５０６−３、および５０６−４は、対応する２入力ＡＮＤゲートの出力を優先度論理回路５０８に渡す。
【００６５】
宛先スレッドが、ＴＩＥＲ中のそのスレッドのマスタ・イネーブル・ビットをセットしている場合は、対応するＡＮＤゲートの出力は論理ハイ・レベルであるはずである。ステップ６０４に示されるように、マルチプレクサの動作に関するこの構成は、次に可能な機会にスレッド間割込みを生成して宛先スレッドに送達するよう優先度論理回路５０８に通知する機構を提供する。
【００６６】
例示の実施形態において、次に可能な機会は、一般に次に宛先スレッドが命令を実行するときに生じる。先に示したように、宛先スレッドは、そのマスタ・イネーブル・ビットをセットすることも必要になる。ステップ６０６において、割込みは、一般にアドレスおよび制御情報の形で優先度論理回路５０８から宛先スレッドに送達される。このことは、以下でさらに詳細に説明する。
【００６７】
割込みが宛先スレッドに送達された後で、ステップ６０８に示されたように、宛先のマスタ・イネーブル・ビットは自動的にクリアされる。これにより、宛先スレッドが複数の割込みを同時に受信することを防止する。この例示的実施形態では、プロセッサは一般に、複数割込みの同時受信を正しく処理することができない。次に、ステップ６１０に示したように、宛先スレッドによって割込みが処理される。割込みが処理された後で、ステップ６１２に示したように、宛先スレッドへの割込みを再度イネーブルにするために、宛先スレッドのマスタ・イネーブル・ビットが自動的にセットされる。次に処理はステップ６０２に戻って、他のスレッド間割込みを処理する。
【００６８】
図６の流れ図における、マスタ・イネーブル・ビットの自動クリアおよびセットは、本発明の要件ではなく、例示的なものと考えられたい。代替実施形態では、この機能を他の技術を使用して実装できる。例えば、マスタ・イネーブル・ビットは、適切なソフトウェア命令によって明示的にセットまたはクリアすることができる。
【００６９】
図には示されていないが、ＴＩＦＲのＸＴＨＲ割込み保留ビットを自動的にクリアする動作は、ステップ６０６の後のプロセスに含めることができる。ただし、このビットは割込み処理中は再度イネーブルにすべきではない。
【００７０】
先に示したように、優先度論理回路５０８は、マルチプレクサ回路５０６の出力に基づいて、アドレスおよび制御情報を生成する。この実施形態では、スレッド間、タイマ、命令アドレス、データ・アドレスの各割込みの優先順位は、ａ、ｂ、ｃ、ｄの順に固定されている。ただし、ａ、ｂ、ｃ、ｄはそれぞれ、マルチプレクサ５０６−１、５０６−２、５０６−３、５０６−４の出力である。４つの入力ａ、ｂ、ｃ、ｄの所与の組に対し、優先度論理回路５０８は、割込みアドレス、および複数ビットの制御信号を出力として生成する。アドレス出力は、割込みハンドラの実行アドレスを与え、このアドレスが、スレッドの新しい実行アドレスになる。複数ビットの制御信号は、例えば５ビットの信号であり、その信号の最上位ビットは、割込みが受信されたかどうかを示し、残りのビットは、どの割込みが受信されたかを示す。
【００７１】
より詳細な例として、アドレスおよび制御信号は、入力ａ、ｂ、ｃ、ｄに基づいて以下の値をとることができる。ただし、アドレスは１６進表記であり、制御信号は２進表記である。
Ｘｔｈｒ＿Ｉ０＝ａ；
スレッド間割込みアドレス：０ｘ２００
制御信号：１０００１
Ｘｔｈｒ＿Ｉ１＝（ｎｏｔ  ａ  ａｎｄ  ｂ）；
タイマ割込みアドレス：０ｘ２８０
制御信号：１００１０
Ｘｔｈｒ＿Ｉ２＝（ｎｏｔ  ａ  ａｎｄ  ｎｏｔ  ｂ  ａｎｄ  ｃ）；
命令アドレス割込みアドレス：０ｘ３００
制御信号：１０１００
Ｘｔｈｒ＿Ｉ３＝（ｎｏｔ  ａ  ａｎｄ  ｎｏｔ  ｂ  ａｎｄ  ｎｏｔ  ｃ  ａｎｄ  ｄ）；
データ・アドレス割込みアドレス：０ｘ３８０
制御信号：１１０００
その他の場合；
アドレス：任意
制御信号：０００００
【００７２】
前の例で、Ｘｔｈｒ＿Ｉ０、Ｘｔｈｒ＿Ｉ１、Ｘｔｈｒ＿Ｉ２、およびＸｔｈｒ＿Ｉ３は、優先度論理回路入力ａ、ｂ、ｃ、およびｄの論理値の様々な組合せを示す。ただし、値が存在するときは、その値が論理ハイ・レベルであることを示し、値の前に項「ｎｏｔ」が存在するときは、その値が論理ロー・レベルであることを示す。
【００７３】
上記の固定された優先度の構成が、本発明の要件ではないことに留意されたい。他の種類の優先度、例えばランダム優先度や、プログラマブル優先度をそのまま提供することもできる。
【００７４】
上記のように、本発明のスレッド間割込み技術は、従来技術と比べて大きな利益を提供する。例えば、本発明を用いると、所与のスレッドは、他のスレッドに単一命令実行サイクル以内で割込みをかけることができるようになる。したがって本発明は、マルチスレッド・プロセッサのスレッド間割込みを送達し処理するための、待ち時間が少なくオーバヘッドが少ない機構を提供するものである。
【００７５】
本発明の上記の実施形態は、例示のためだけのものであることが意図されており、したがって当業者には、添付の特許請求の範囲を逸脱することなく多数の代替実施形態が明らかになるはずである。例えば、例示の実施形態の割込みコントローラに関する特定の回路構成は、代替の回路構成で置き換えることができる。また、スレッドの数、イネーブル・レジスタおよびフラグ・レジスタの種類や構成、割込み優先度、スレッドＩＤ構成、ならびに例示の実施形態の他のパラメータについては、所与の用途の特定のニーズに適合するように変更することが可能である。
【図面の簡単な説明】
【００７６】
【図１】本発明が実装される処理システムの一例を示すブロック図である。
【図２】図１の処理システムにおける、マルチスレッド・プロセッサの例示的一実施形態を示すより詳細なブロック図である。
【図３】本発明の技術による、図２のマルチスレッド・プロセッサの割込みコントローラに実装できるスレッド割込みイネーブル・レジスタ（ＴＩＥＲ）の一例を示す図である。
【図４】本発明の技術による、図２のマルチスレッド・プロセッサの割込みコントローラに実装できるスレッド割込みフラグ・レジスタ（ＴＩＦＲ）の一例を示す図である。
【図５】本発明に従って構成された割込みコントローラの例示的一実施形態を示す図である。
【図６】本発明の技術を使用するスレッド間割込みの処理を例示する流れ図である。
【図１】
2006503385.tif 000003
【図２】
2006503385.tif 000004
【図３】
2006503385.tif 000005
【図４】
2006503385.tif 000006
【図５】
2006503385.tif 000007
【図６】
2006503385.tif 000008
【国際調査報告】
2006503385.tif 000009