(57)【要約】【課題】ハードウェアスレッドの数は、ダイエリア及びパフォーマンスによって制限される。【解決手段】本発明にかかるマルチスレッドプロセッサシステムは、Ｎ個（Ｎは１以上の整数）のハードウェアスレッドを有するレジスタファイルと、Ｍ個（Ｍは１以上の整数）のハードウェアスレッドを有するオフラインストレージ構造と、Ｎ個のハードウェアスレッドのうち少なくとも１つに関連するレジスタ値をＭ個のハードウェアスレッドのうち少なくとも１つのレジスタに転送し、Ｍ個のハードウェアスレッドのうち少なくとも１つのレジスタ値をＮ個のハードウェアスレッドのうち少なくとも１つのレジスタに転送するスレッド制御機構と、を備える。【選択図】図２
2006195976.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッドプロセッサシステム（１０）であって、
Ｎ個のハードウェアスレッド（３４、３６）を有するレジスタファイル（１２、３２、５２、８６）であって、Ｎは１以上の整数である、レジスタファイル（１２、３２、５２、８６）と、
Ｍ個のハードウェアスレッド（４４）を有するオフラインストレージ構造（１４、４２、５４、９０）であって、Ｍは１以上の整数である、オフラインストレージ構造（１４、４２、５４、９０）と、
前記Ｎ個のハードウェアスレッド（３４、３６）のうちの少なくとも１つに関連するレジスタ値を前記Ｍ個のハードウェアスレッド（４４）のうちの少なくとも１つのレジスタ（７０）に転送し、該Ｍ個のハードウェアスレッド（４４）のうちの少なくとも１つのレジスタ値を前記Ｎ個のハードウェアスレッド（３４、３６）のうちの少なくとも１つのレジスタ（６２）に転送するスレッド制御機構（１８、８４）と、
を備えるマルチスレッドプロセッサシステム。
【請求項２】
マルチスレッドプロセッサシステム（１０）であって、
前記スレッド制御機構（１８、８４）は、前記レジスタファイル（１２、３２、５２、８６）内のアクティブスレッド（３４）を非アクティブ化し、前記プロセッサシステム（１０）の第１の設計状態に関連するレジスタ値を前記非アクティブ化されたスレッドから前記Ｍ個のハードウェアスレッド（４４）のうちの１個のレジスタ（７０）にアンロードし、前記プロセッサシステム（１０）の第２の設計状態に関連する前記Ｍ個のハードウェアスレッド（４４）のうちの１個から前記レジスタファイル（１２、３２、５２、８６）内の前記非アクティブ化されたスレッドにレジスタ値をロードする、
請求項１に記載のマルチスレッドプロセッサシステム。
【請求項３】
マルチスレッドプロセッサシステム（１０）であって、
前記レジスタ値が前記非アクティブ化されたスレッドからアンロードされる前記Ｍ個のハードウェアスレッド（４４）のうちの１個は、前記レジスタ値が前記非アクティブ化されたスレッドにロードされる前記Ｍ個のハードウェアスレッド（４４）のうちの１個と同じである、
請求項２に記載のマルチスレッドプロセッサシステム。
【請求項４】
マルチスレッドプロセッサシステム（１０）であって、
前記レジスタ値が前記非アクティブ化されたスレッドからアンロードされる前記Ｍ個のハードウェアスレッド（４４）のうちの１個は、遷移スレッドであり、前記レジスタ値が前記非アクティブ化されたスレッドにロードされる前記Ｍ個のハードウェアスレッド（４４）のうちの１個と同じのうちの１個は、前記遷移スレッドと異なる、
請求項２に記載のマルチスレッドプロセッサシステム。
【請求項５】
マルチスレッドプロセッサシステム（１０）であって、
前記オフラインストレージ構造は、オフラインレジスタファイル（４２、５４）及びオフラインコンテキストキャッシュ（９０）の一方である、
請求項１に記載のマルチスレッドプロセッサシステム。
【請求項６】
マルチスレッドプロセッサシステム（１０）であって、
前記レジスタファイル（１２、３２、５２、８６）は、レジスタ（５２、６２）の列として配置され、各列はＮ個のレジスタ部（６４、６６）を有し、該Ｎ個のレジスタ部（６４、６６）のそれぞれは前記レジスタファイル（１２、３２、５２、８６）の異なるハードウェアスレッドに関連付けられる、
請求項１に記載のマルチスレッドプロセッサシステム。
【請求項７】
マルチスレッドプロセッサシステム（１０）であって、
前記オフラインストレージ構造（１４、４２、５４、９０）は、レジスタ（５４、７０）の列として配置されるオフラインレジスタファイル（４２、５４）であり、各列はＭ個のレジスタ部（７２）を有し、該Ｍ個のレジスタ部（７２）のそれぞれは前記オフラインレジスタファイル（４２、５４）の異なるハードウェアスレッド（４４）に関連付けられる、
請求項６に記載のマルチスレッドプロセッサシステム。
【請求項８】
マルチスレッドプロセッサシステム（１０）であって、
前記Ｍ個のレジスタ部（７２）及び前記Ｎ個のレジスタ部（６４、６６）は、シフトレジスタ（６４、６６、７２）であり、前記オフラインレジスタファイル（４２、５４）内の各レジスタ（７０）に関連付けられるＭ個のレジスタ部（７２）の所与の列は、前記レジスタファイル（１２、３２、５２、８６）内の略同様のレジスタ（６２）に関連付けられるＮ個のレジスタ部（６４、６６）の所与の列に揃えられ、それにより、前記オフラインレジスタファイル（４２、５４）内のスレッド（４４）から前記レジスタファイル（１２、３２、５２、８６）内のスレッド（３４、３６）にレジスタ値をシフトできるようにし、それと同時に、前記レジスタファイル（１２、３２、５２、８６）内の前記スレッド（３４、３６）から前記オフラインレジスタファイル（４２、５４）内の前記スレッド（４４）にレジスタ値をシフトできるようにするシフトレジスタリング（６０）が形成される、
請求項７に記載のマルチスレッドプロセッサシステム。
【請求項９】
マルチスレッドプロセッサシステム（１０）であって、
命令を実行する実行エンジン（１６、８２）をさらに備え、
該実行エンジン（１６、８２）は、前記レジスタファイル（１２、３２、５２、８６）から前記オフラインストレージ構造（１４、４２、５４、９０）にレジスタ値を移動させ、前記オフラインストレージ構造（１４、４２、５４、９０）から前記レジスタファイル（１２、３２、５２、８６）にレジスタ値を移動させるように前記スレッド制御機構（１８、８４）に命令するロード命令及び記憶命令を実行する、
請求項１に記載のマルチスレッドプロセッサシステム。
【請求項１０】
マルチスレッドプロセッサシステム（１０）であって、
前記オフラインストレージ構造（１４、４２、５４、９０）は、独立した構造及びキャッシュ構造の一部のうちの一方であるオフラインコンテキストキャッシュ（９０）である、
請求項９に記載のマルチスレッドプロセッサシステム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、包括的にはマルチスレッドハードウェアシステム及び方法に関する。
【背景技術】
【０００２】
ハードウェアマルチスレッドプロセッサは、プロセッサコア内の設計ハードウェアプロセッサ内の２つ以上のスレッドの状態を保持する。一意のスレッドがそれぞれ関連付けられたハードウェアレジスタの設計プロセッサ状態を変更するだけで、いくつかのスレッドをマルチスレッドプロセッサ内で実行することができる。プロセッサは、マシンサイクル毎にレジスタを変更してもよく、又はプロセッサが、たとえば、プロセッサがより離れたところにあるキャッシュ又はメモリからデータ又は命令を待っているためアイドルであるときに、レジスタ又はスレッドを切り替えてもよい。このようにして、リモートシステム及び／又はソフトウェアは、単一のプロセッサを、プロセッサに関連するハードウェアのスレッド数に基づいて１つ又は複数のプロセッサとして見る。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、ハードウェアスレッドの数は、ダイエリア及びパフォーマンスによって制限される。スレッドの数が増えるにつれて、追加のスレッドのサポートに関連する回路の複雑性及びサイズも増大し、ハードウェアスレッドの追加が実現不可能になる。さらに、パフォーマンスは、ハードウェアスレッドの数が増大するにつれて、読み書きポートの数が制限されていること、及び値をプロセッサ実行ユニットとハードウェアレジスタの間で転送するために必要なオーバヘッドにより低下する。
【課題を解決するための手段】
【０００４】
本発明の一実施形態は、Ｎ個のハードウェアスレッドを有するレジスタファイルであって、Ｎは１以上の整数である、レジスタファイルと、Ｍ個のハードウェアスレッドを有するオフラインストレージ構造であって、Ｍは１以上の整数である、オフラインストレージ構造とを備えるマルチスレッドプロセッサを包含し得る。本マルチスレッドプロセッサシステムはさらに、Ｎ個のハードウェアスレッドのうちの少なくとも１つに関連するレジスタ値をＭ個のハードウェアスレッドのうちの少なくとも１つのレジスタに転送し、Ｍ個のハードウェアスレッドのうちの少なくとも１つのレジスタ値をＮ個のハードウェアスレッドのうちの少なくとも１つのレジスタに転送するスレッド制御機構を備えてもよい。
【０００５】
別の実施形態は、少なくとも１つのハードウェアスレッド及びレジスタファイルのアクティブハードウェアスレッドに関連するレジスタ値を読み書きするための関連する制御ロジックを有するレジスタファイルと、レジスタファイルの少なくとも１つの非アクティブハードウェアスレッドの設計状態に関連するレジスタ値を記憶する少なくとも１つのオフラインハードウェアスレッドを有するオフラインスレッド構造と、を備えたマルチスレッドレジスタファイルアーキテクチャを包含し得る。マルチスレッドレジスタファイルアーキテクチャは、レジスタファイルの少なくとも１つの非アクティブスレッドとオフラインスレッド構造の少なくとも１つのオフラインハードウェアスレッドとの間でのレジスタ値の転送を開始するスレッド制御機構をさらに備えてもよい。
【０００６】
さらに別の実施形態は、少なくとも１つのハードウェアスレッドを備えたレジスタファイルを有するレジスタファイルシステムを含むことができる。システムは、レジスタファイルからオフラインのレジスタファイルの少なくとも１つのハードウェアスレッドに関連するレジスタの設計状態を記憶する手段と、レジスタファイルと設計状態を記憶する手段との間でのレジスタの設計状態の転送を制御する手段とを備えてもよい。
【０００７】
さらに別の実施形態は、レジスタファイルのレジスタに関連する設計状態を記憶する方法を含むことができる。方法は、レジスタ値をレジスタファイルのハードウェアスレッドからオフラインスレッド構造内のハードウェアスレッドにアンロードすること、及びレジスタ値をオフラインスレッド構造内のハードウェアスレッドからレジスタファイルのハードウェアスレッドにロードすることを含むことができる。
【発明を実施するための最良の形態】
【０００８】
本開示は、包括的にはマルチスレッドハードウェアシステム及び方法に関する。システム及び方法は、１つ又は複数のハードウェアスレッドを有するレジスタファイル、及びレジスタファイル内の１つ又は複数のハードウェアスレッドの設計状態（たとえば、レジスタ値）を記憶するオフラインストレージ（storage）構造を含む。
【０００９】
設計状態は、レジスタファイルからオフラインストレージ構造に、またオフラインストレージ構造からレジスタファイルに順次又は同時に転送され得る。オフライン記憶ストレージ構造の使用により、レジスタファイルのサイズ又は複雑性を増大させることなくハードウェアスレッド構造を拡張することが可能になる。
【００１０】
図１に、マルチスレッドアーキテクチャを有するマルチスレッドプロセッサシステム１０を示す。システム１０は、Ｎ個のハードウェアスレッドを有するスレッドレジスタファイル１２を備える。但し、Ｎは１以上の整数である。Ｎ個のハードウェアスレッドのそれぞれは、複数の略同一のハードウェアレジスタを含む。たとえば、所与のハードウェアスレッドは、所与のプロセッサアーキテクチャに基づいて、１２８個の汎用レジスタ、１２８個の浮動レジスタ、８個の分岐レジスタ、１５個の制御レジスタ、２０〜３０個のアプリケーションレジスタ、及び１つ又は複数の追加レジスタタイプのものをいくつかを含むことができる。スレッドレジスタファイル１２は、選択されたハードウェアスレッド（すなわち、アクティブスレッド）のレジスタからレジスタ値を読み出すための複数の読み出しポート及び関連するドライバ回路、並びに選択されたハードウェアスレッドのレジスタにレジスタ値を書き込むための複数の書き込みポート及び関連するドライバ回路も含む。
【００１１】
スレッドレジスタファイル１２は、実行するアクティブスレッドを選択するとともに、現在アクティブなスレッドを非アクティブ化する制御ロジックも含む。Ｎ個のハードウェアスレッドのうちの１個のみがアクティブであり、所与の時間における実行に採用される。残りのＮ−１個のスレッドは、Ｎ−１個のスレッドのうちの１個がアクティブ化のため選択されるまで非アクティブ状態のままである。Ｎ個のハードウェアスレッドの対応するレジスタは、第１のハードウェアスレッドの第１のレジスタが、Ｎ個のスレッドそれぞれの第２のハードウェアスレッドに関連する略同一の第２のレジスタに並べて配置されるように互いに並べて列状に配置することができる。さらに、これをＮ個のスレッドの略同一の各レジスタに繰り返すことができる。このようにして、現在アクティブなハードウェアスレッドを非アクティブ化し、選択されたハードウェアスレッドをアクティブ化することに関連するロジックを簡易化することができる。さらに、アクティブハードウェアスレッドのレジスタへの読み書きに関連するロジックを簡易化することができる。
【００１２】
システム１０は、Ｍ個のオフラインハードウェアスレッドを有するオフラインハードウェアスレッド構造１４を備える。但し、Ｍは１以上の整数である。Ｍ個のオフラインハードウェアスレッドのそれぞれは、スレッドレジスタファイル１２のＮ個のハードウェアスレッドのそれぞれと略同一の複数のハードウェアレジスタを含む。オフラインハードウェアスレッド構造１４は、スレッドレジスタファイル１２が採用するドライブ回路及び選択回路を必要としないため、スレッドレジスタファイル１２よりも実質的に小型であることができる。オフラインハードウェアスレッド構造１４のＭ個のオフラインハードウェアスレッドの対応するレジスタは、第１のハードウェアスレッドの第１のレジスタが、Ｍ個のオフラインスレッドそれぞれの第２のハードウェアスレッドに関連する略同一の第２のレジスタに並べて配置されるように互いに並べて列状に配置することができる。さらに、これをＭ個のスレッドの略同一の各レジスタに繰り返すことができる。オフラインハードウェアスレッド構造１４の対応するレジスタもスレッドレジスタファイル１２のレジスタと同じ様式で配置することができるため、オフラインハードウェアスレッド構造１４とスレッドレジスタファイル１２との略同一のレジスタを位置合わせして、スレッドレジスタファイル１２とオフラインハードウェアスレッド構造１４の間で異なる設計状態に関連するレジスタ値の転送を容易にすることができる。
【００１３】
システム１０は、スレッド制御機構１８及び実行エンジン１６を備える。実行エンジン１６は、アクティブスレッドのレジスタに存在する（residing）データに対して並列演算を実行する複数の実行ユニット（たとえば、演算論理装置及び関連する回路）を備えることができる。実行エンジンはまた、命令キュー、命令キャッシュ、ストレージバッファ、及びプロセッサに典型的な他の装置を備えることができる。スレッド制御機構１８は、実行エンジン１６の一部として一体化することもでき、又は独立した装置であることもできる。スレッド制御機構１８は、読み出しポートを介したレジスタファイル１２から実行エンジン１６へのアクティブハードウェアスレッドに関連するレジスタ値の転送、及び書き込みポートを介した実行エンジン１６からレジスタファイル１２へのアクティブハードウェアスレッドに関連するレジスタ値の転送を制御する。スレッド制御機構１８はまた、レジスタファイル１２のＮ個のハードウェアスレッドのいずれがアクティブスレッドであるか、及びレジスタファイル１２のＮ−１個のハードウェアスレッドのいずれを非アクティブスレッドにすべきかの切り替えも制御する。スレッド制御機構１８は、実行エンジン１６又は或る他の制御機能から、Ｎ−１個の非アクティブハードウェアスレッドのいずれを次のアクティブスレッドにすべきかを含む命令を受け取り、アクティブスレッドを切り替えることができる。次いで、スレッド制御機構１８は、現在アクティブなハードウェアスレッドを非アクティブ化し、Ｎ−１個のハードウェアスレッドから選択された１個をアクティブ化することができる。これは、スレッドレジスタファイル１２に関連する制御ロジックを介してハードウェアスレッドの切り替えを制御する制御信号を生成することにより、実現することができる。次いで、実行エンジン１６はレジスタ値を新たにアクティブ化されたハードウェアスレッドに読み書きすることができる。
【００１４】
スレッド制御機構１８はまた、１つ又は複数の非アクティブハードウェアスレッドの設計状態に関連するレジスタ値のオフラインストレージ構造１４へのオフロード、及び１つ又は複数のハードウェアスレッドの設計状態に関連するレジスタ値のスレッドレジスタファイル１２へのロードも制御する。スレッド制御機構は、実行エンジン１６又は何らかの他の制御機能から、レジスタ値をオフラインハードウェアスレッドのいずれからレジスタファイルのハードウェアスレッドのいずれにロードするか、及びレジスタ値をレジスタファイルのいずれのハードウェアスレッドからオフラインストレージ１４のいずれのオフラインハードウェアスレッドにオフロードするかの選択を示す命令を受け取ることができる。実行エンジン１６、スレッド制御機構１８、又は他の制御機能は、命令キュー内の命令を見直すことにより、又は未処理のロードミス依存性を監視することによりオフロード及びロードにいずれのスレッドを選択すべきかを判断することができる。別法として、スレッドの切り替えは、たとえばオペレーティングシステムに関連するスレッドスケジューラによりスケジュールすることができる。
【００１５】
図２にマルチスレッドレジスタファイルアーキテクチャ３０を示す。マルチスレッドレジスタファイルアーキテクチャ３０は、マルチスレッドレジスタファイル３２、及びオフラインスレッド０〜オフラインスレッド（Ｍ−１）と記された複数のオフラインスレッド４４を有するオフラインハードウェアスレッド構造４２を備える。マルチスレッドレジスタファイル３２は、第１のハードウェアスレッド３４（スレッド０）及び第２のハードウェアスレッド３６（スレッド１）を含む。アクティブスレッド選択信号により、第１のハードウェアスレッド３４及び第２のハードウェアスレッド３６のいずれがアクティブスレッドであり、いずれが非アクティブスレッドであるかが決められる。マルチスレッドレジスタファイル３２は、データを実行エンジン（図示せず）から現在アクティブなスレッドに関連するレジスタに書き込むための複数の書き込みポートに結合された入力マルチプレクサ３８を備える。マルチスレッドレジスタファイル３２は、データを現在アクティブなスレッドに関連するレジスタから実行エンジンに読み出すための複数の読み出しポートに結合された出力マルチプレクサ４０を備える。
【００１６】
マルチスレッドレジスタファイル３２はまた、次のスレッド選択命令を、たとえばスレッド制御機構から受け取る。次のスレッド選択命令は、アクティブスレッドの非アクティブ化、非アクティブスレッドのアクティブ化、現在非アクティブのスレッドからオフラインスレッド４４の選択された１個へのレジスタ値のオフロード、並びにオフラインスレッド４４の選択された１個からマルチスレッドレジスタファイル３２内の現在非アクティブスレッドのレジスタへのレジスタ値のロードを開始させる。命令は、現在アクティブなスレッドのレジスタを採用することができる。次いで、マルチスレッドレジスタファイル３２の現在アクティブなスレッドを非アクティブ化し、マルチスレッドレジスタファイル３２の非アクティブスレッドをアクティブ化することができる。次いで、新たに非アクティブ化されたスレッドからのレジスタ値を、オフラインスレッドの選択された１個のレジスタにオフロードし、その一方で選択されたオフラインスレッドのレジスタ値を、マルチスレッドレジスタファイル３２の非アクティブスレッドのレジスタにロードすることができる。このプロセスは、現在アクティブなスレッドの設計状態を保存し、マルチスレッドレジスタファイル３２内の非アクティブスレッド上で実行を開始し、オフラインスレッド４４に存在するレジスタ値の設計状態の実行のキューイングを開始したいその都度、繰り返すことができる。マルチスレッドレジスタファイル３２内の非アクティブスレッドのレジスタ値及びマルチスレッドレジスタファイル３２にロードすべきオフラインスレッド４４のレジスタ値は、たとえばシフトレジスタを採用することにより同時に交換することができることを理解されたい。別法として、オフラインスレッド４４の１個を遷移スレッドとして採用することができ、それによってマルチスレッドレジスタファイル３２の非アクティブスレッドのレジスタ値を遷移スレッドの中にオフロードし、選択されたオフラインスレッド４４のレジスタ値をマルチスレッドレジスタファイル３２の非アクティブスレッドの中にロードすることができる。これは順次、又は同時に行うことができる。レジスタ値をマルチスレッドレジスタファイル３２の非アクティブスレッドからオフロードし、レジスタ値をオフラインスレッド構造４２からマルチスレッドレジスタファイル３２の非アクティブスレッドにロードする他の種々の技法を採用することが可能である。
【００１７】
図３に、オフラインレジスタファイルを採用したレジスタファイル構造例５０を示す。レジスタファイル構造例５０は、２個のスレッドコンテキストを有する１２８個のレジスタを有するハードウェアレジスタファイル５２の一部を備える。すなわち、レジスタ０〜１２７と記された１２８個のレジスタのそれぞれは、第１のハードウェアスレッドに関連するｋビット（たとえば、６４ビット）を有する第１のレジスタ部及び第２のハードウェアスレッドに関連するｋビット（たとえば、６４ビット）を有する第２のレジスタ部として構成される。各レジスタは、１２８個のレジスタの対になった列がレジスタファイル５２を形成するように、２ビット幅を有する列に沿って揃えられた（aligned）関連する第１の部分及び第２の部分を有する。いかなるときにも、各レジスタ対の第１のレジスタ部がアクティブ状態であり、各レジスタ対の第２のレジスタ部が非アクティブ状態である。アクティブスレッドに関連する１つ又は複数のレジスタ部からのデータを１つ又は複数の読み出しポートから読み出し、実行のために１つ又は複数の実行ユニットに提供することができる。
【００１８】
例示的なレジスタファイル構造５０は、Ｍ個のスレッドコンテキストを有する１２８個のレジスタを有するオフラインレジスタファイル５４を備える。オフラインレジスタファイル５４の各レジスタは、Ｍビット幅の１２８個のレジスタ列がオフラインレジスタファイル５４を形成するように、列に沿って位置合わせされたＭ個の関連するレジスタ部を有する。レジスタ０〜１２７と記された１２８個のレジスタそれぞれのＭ個の関連するレジスタ部のそれぞれは、ｋビット（たとえば、６４ビット）を有するように構成される。Ｍビット幅の各レジスタ列は、レジスタファイル５２内の関連するレジスタ対に揃えられて、レジスタファイル５２の非アクティブスレッドのレジスタ値をオフラインレジスタファイル５４内のオフラインスレッドのレジスタにオフロードするのを容易にするとともに、オフラインレジスタファイル５４内のオフラインスレッドのレジスタ値をレジスタファイル５２内の非アクティブスレッドにロードするのを容易にする。
【００１９】
図４に、２個のスレッドコンテキストを有する単一レジスタ６２のシフトレジスタリング６０を示す。シフトレジスタリング６０を採用して、図３において説明したような、レジスタファイル構造のレジスタ値のロード及びオフロードを行うことができる。レジスタファイルの単一レジスタ６２は、第１のシフトレジスタ部６４（シフトレジスタＡ０）及びそれに隣接して配置される第２のシフトレジスタ部６６（シフトレジスタＡ１）を有する。単一レジスタ６２は、２ビット幅の列（たとえば６４ビット高）として構成される。シフトレジスタ部の一方はアクティブスレッドに関連し、シフトレジスタ部の他方は非アクティブスレッドに関連する。シフトレジスタリング６０は、シフトレジスタＢ０〜ＢＭと記されたＭ個の追加レジスタ部を有するＭビット幅のオフラインレジスタ７０を備える。但し、Ｍは１以上の整数である。Ｍ個の追加レジスタ部はレジスタファイルの単一レジスタに関連付けられ、Ｍビット幅の列（たとえば、６４ビット高さ）として構成される。シフトレジスタリングはレジスタファイルの各レジスタについて繰り返すことができることを理解されたい。
【００２０】
シフトレジスタリング６０により、レジスタ値をレジスタ６２の選択されたレジスタ部（６４又は６６）からオフラインレジスタ７０の選択されたレジスタ部７２に転送し、それと同時にレジスタ値をオフラインレジスタ７０の選択されたレジスタ部７２からレジスタ６２の選択されたレジスタ部（６４又は６６）に転送することができる。たとえば、第１のシフトレジスタ部６４はアクティブ状態から非アクティブ状態に遷移し、その間、第２のシフトレジスタ部６６は非アクティブ状態からアクティブ状態に遷移する。ここで、第１のレジスタ部６４のレジスタ値をオフラインレジスタ部７２の１個にオフロードすることができる。スレッド制御機構（図示せず）が、オフロードする第１のレジスタ部６４を選択するレジスタ選択信号（ＲＥＧ  ＳＥＬ）を生成するとともに、内容を第１のレジスタ部６４にロードするオフラインレジスタ部７２を選択するレジスタ選択信号（ＲＥＧ  ＳＥＬ）を生成し、その間に第１のレジスタ部６４の内容を選択されたオフラインレジスタ部７４にオフロードすることができる。これは、第１のシフトレジスタ部６４からの内容を選択されたオフラインレジスタ部７２の内容にシフトし、それと同時にオフラインレジスタ部７２の内容を第１のレジスタ部６４にシフトするクロックパルス（ＣＰ）を生成することにより実現することができる。たとえば、第１のレジスタ部６４及びオフラインレジスタ部７４の両方が６４ビットで構成される場合、データを６４クロックサイクルで完全にシフトして転送することができる。
【００２１】
図５に、スレッド資源拡張のためにオフラインコンテキストキャッシュ９０を有するマルチスレッドプロセッサシステム８０を示す。システム８０は、レジスタファイル８６、キャッシュ８８、オフラインコンテキストキャッシュ９０、及び実行エンジン８２を備える。実行エンジン８２は、レジスタファイル８６内の１つ又は複数のハードウェアスレッドのレジスタ値をオフラインコンテキストキャッシュ９０内の１つ又は複数のハードウェアスレッドに転送するとともに、オフラインコンテキストキャッシュ９０の１つ又は複数のハードウェアスレッドのレジスタ値をレジスタファイル８６内の１つ又は複数のハードウェアスレッドに転送するように動作可能なスレッド制御機構８４を備える。スレッド制御機構８４は、独立したユニットであることもでき、又は実行エンジン８２の一部であることもできる。実行エンジン８２は、命令キュー、命令キャッシュ、演算論理装置、ストレージバッファ、及びプロセッサに典型的な他の装置を備えることができる。
【００２２】
実行エンジン８２はプログラム命令を実行する。キャッシュ８８はレジスタファイル８６と相互作用し（interface）、それによって実行エンジン８２が実行するロード命令により、キャッシュ８８からレジスタファイル８６にデータを転送させ、実行エンジン８２が実行する記憶命令により、データをレジスタファイル８６からキャッシュ８８の中に転送させる。オフラインコンテキストキャッシュ９０は、キャッシュ８８のデータパスを再使用することができるが、レジスタファイル８６からのレジスタ値を記憶し、オフラインコンテキストキャッシュ９０からのレジスタ値をレジスタファイル８６にロードする。オフラインコンテキストキャッシュ９０はキャッシュ８８の一部であることができ、それによりキャッシュ８８の一部がハードウェアスレッドのオフラインレジスタ値を記憶するために確保される。実行エンジン８２は、レジスタファイル８６及びオフラインコンテキストキャッシュ９０のハードウェアスレッドに関連するレジスタ値を相互に移動させるようにスレッド制御機構８４に命令する特別なスレッド命令を実行することができる。実行エンジン８２は、メインプログラムがキャッシュ８８へのロード／記憶のためのデータパスを使用していない場合、スレッド切り替え時間中、又は利用可能な命令スケジューリング時間中に、特別なスレッドロード／記憶命令を投入する（inject）ことができる。実行エンジン８２は、特別なスレッドロード／記憶をプログラム実行と同時に投入することができる。
【００２３】
上記構造及び上述した機能特徴を鑑みて、特定の方法が図６〜図８を参照してより良く理解されよう。図示のアクションは、他の実施形態では、異なる順序で行ってよく、且つ／又は他のアクションと同時に行ってよいことを理解し、且つ認識されたい。さらに、方法の実施に図示の特徴がすべて必要であるわけではない場合もある。
【００２４】
図６に、レジスタファイルのレジスタに関連する設計状態を記憶する方法を示す。１００において、命令が、たとえばプロセッサの１つ又は複数の実行ユニットにより、レジスタファイルのアクティブスレッドのレジスタを使用して実行される。レジスタファイルは、いかなるときにも１つのみのスレッドがアクティブスレッドであることができる１つ又は複数のハードウェアスレッドを含むことができる。アクティブスレッドではないハードウェアスレッドは、非アクティブスレッドである。次いで、方法は１１０に進む。１１０において、アクティブスレッドは非アクティブ化され、非アクティブスレッドはアクティブ化される。たとえば、これは、プロセッサが直面した命令に基づいて、又は別のシステム若しくはプロセッサからのデータ要求の結果として行うことができる。１２０において、レジスタファイルの最近非アクティブ化されたスレッドのレジスタ値が、オフラインストレージ構造に記憶される。１３０において、レジスタ値がオフラインストレージ構造からレジスタファイルの最近非アクティブ化されたスレッドの中にロードされる。オフラインストレージ構造は、レジスタファイルのハードウェアスレッドのレジスタ値に関連する設計状態を記憶する複数のハードウェアスレッドを含むことができる。レジスタファイルの非アクティブスレッドからオフラインストレージ構造へのレジスタ値のアンロード及びオフラインストレージ構造から非アクティブスレッドへのレジスタ値のロードは同時に、又は順次行うことができる。次いで、方法は１００に戻り、レジスタファイルのアクティブスレッドのレジスタを使用して命令の実行を開始する。
【００２５】
図７に、レジスタファイルのレジスタに関連する設計状態を記憶する別の方法を示す。２００において、命令が、たとえばプロセッサの１つ又は複数の実行ユニットにより、レジスタファイルのアクティブスレッドのレジスタを使用して実行される。レジスタファイルは、いかなるときにも１つのみのスレッドがアクティブスレッドであることができる１つ又は複数のハードウェアスレッドを含むことができる。アクティブスレッドではないハードウェアスレッドは、非アクティブスレッドである。次いで、方法は２１０に進む。２１０において、方法は、特別なスレッドロード／記憶命令に直面したか否かを判断する。方法が、特別なスレッドロード／記憶命令に直面していないと判断する（いいえ）場合、方法は２００に戻り、レジスタファイルのアクティブスレッドのレジスタを使用して引き続き命令を実行する。方法が、特別なスレッドロード／記憶命令に直面したと判断する場合（はい）、方法は２２０に進む。
【００２６】
２２０において、アクティブスレッドは非アクティブ化され、非アクティブスレッドがアクティブ化される。２３０において、レジスタファイルの最近非アクティブ化されたスレッドのレジスタ値が、オフラインコンテキストキャッシュに記憶される。２４０において、オフラインコンテキストキャッシュからのレジスタ値が、レジスタファイルの最近非アクティブ化されたスレッドの中にロードされる。オフラインコンテキストキャッシュは、レジスタファイルの１つ又は複数のハードウェアスレッドのレジスタ値に関連する複数の設計状態を記憶することができる。次いで、方法は２００に戻り、レジスタファイルのアクティブスレッドのレジスタを使用して命令の実行を開始する。
【００２７】
図８に、レジスタファイルのレジスタに関連する設計状態を記憶するさらに別の方法を示す。３００において、レジスタファイルのハードウェアスレッドからのレジスタ値が、オフラインスレッド構造のハードウェアスレッドにアンロードされる。３１０において、オフラインスレッド構造のハードウェアスレッドのレジスタ値が、レジスタファイルのハードウェアスレッドにロードされる。
【００２８】
本発明の例について上述した。もちろん、本発明を説明する目的で構成要素又は方法の考えられるあらゆる組み合わせを説明することは不可能であり、本発明の多くのさらなる組み合わせ及び置換が可能であることが当業者により認識されよう。したがって、本発明は、添付の特許請求の範囲の精神及び範囲内にあるこのような改変、変更、及び変形をすべて包含するものである。
【図面の簡単な説明】
【００２９】
【図１】マルチスレッドハードウェアアーキテクチャを有するマルチスレッドプロセッサシステムの実施形態のブロック図を示す。
【図２】マルチスレッドレジスタファイルアーキテクチャの実施形態の概略ブロック図を示す。
【図３】オフラインレジスタファイルを採用するレジスタファイルアーキテクチャの実施形態のブロック図である。
【図４】シフトレジスタリングの一実施形態のブロック図を示す。
【図５】オフラインコンテキストキャッシュを有するマルチスレッドプロセッサシステムの一実施形態のブロック図を示す。
【図６】レジスタファイルのレジスタに関連する設計状態を記憶する方法の一実施形態を示す。
【図７】レジスタファイルのレジスタに関連する設計状態を記憶する別の方法の一実施形態を示す。
【図８】レジスタファイルのレジスタに関連する設計状態を記憶するさらに別の方法の一実施形態を示す。
【符号の説明】
【００３０】
１０・・・マルチスレッドプロセッサシステム
１２・・・Ｎ個のスレッドレジスタファイル
１４・・・Ｍ個のオフラインスレッド
１６・・・実行エンジン
１８・・・スレッド制御機構
３０・・・マルチスレッドレジスタファイルアーキテクチャ
３２・・・マルチスレッドレジスタファイル
３４・・・スレッド０（アクティブ）
３６・・・スレッド１（非アクティブ）
３８・・・入力マルチプレクサ
４０・・・出力マルチプレクサ
４２・・・オフラインスレッド構造
４４・・・オフラインスレッド
５０・・・レジスタファイル構造例
５２・・・レジスタファイル（２個のスレッドコンテキスト）
５４・・・オフラインレジスタファイル（Ｍ個のスレッドコンテキスト）
６０・・・シフトレジスタリング
６２・・・レジスタ
６４，６６，７２・・・シフトレジスタ
７０・・・オフラインレジスタ
８０・・・マルチスレッドプロセッサシステム
８２・・・実行エンジン
８４・・・スレッド制御機構
８６・・・レジスタファイル
８８・・・キャッシュ
９０・・・オフラインコンテキストキャッシュ
【図１】
2006195976.tif 000003
【図２】
2006195976.tif 000004
【図３】
2006195976.tif 000005
【図４】
2006195976.tif 000006
【図５】
2006195976.tif 000007
【図６】
2006195976.tif 000008
【図７】
2006195976.tif 000009
【図８】
2006195976.tif 000010