(57)【特許請求の範囲】
【請求項１】
複数のスレッドを実行することができるハードウェア・マルチスレッド・コンピュータ処理システムのスレッド能力を変更する方法であって、
（ａ）前記複数のスレッドの各々に固有に関連づけられたレジスタ／アレイの障害を分離することができるテストを実行するステップと、
（ｂ）少なくとも１つのレジスタ／アレイの障害を検出して、当該障害を起こした少なくとも１つのレジスタ／アレイが固有に関連づけられた特定のスレッドを記録するステップと、
（ｃ）前記特定のスレッドに関連づけられた全てのレジスタ／アレイへのアクセスを不能にするステップと、
（ｄ）検出された障害を有しない前記複数のスレッドのうちの他のスレッドに固有に関連づけられた全てのレジスタ／アレイへのアクセスを維持するステップと、
を含む方法。
【請求項２】
前記ステップ（ａ）が、ロジック・ビルトイン・セルフ・テスト（ＬＢＩＳＴ）及び、又はアレイ・ビルトイン・セルフ・テスト（ＡＢＩＳＴ）を実行するステップを含む、請求項１記載の方法。
【請求項３】
前記レジスタ／アレイが、記憶セルを有するマルチスレッド・レジスタ／アレイを含み、各々の記憶セルが、前記複数のスレッドの１つに固有に関連づけられた１つの記憶要素を有する、請求項１記載の方法。
【請求項４】
前記ステップ（ｃ）が、前記レジスタ／アレイへの少なくとも１つのポートを切断するためヒューズを飛ばすステップを含む、請求項１記載の方法。
【請求項５】
前記ステップ（ｃ）が、前記特定のスレッドのハードウェア・スレッド切り替え制御レジスタの中で、複数のスレッド切り替え制御イベントのいずれかを不能にするステップを含む、請求項１記載の方法。
【請求項６】
前記ステップ（ｃ）が、マイクロコード命令を実行するステップを含む、請求項１記載の方法。
【請求項７】
複数のスレッドを実行することができるハードウェア・マルチスレッド・コンピュータ処理システムのスレッド能力を変更する方法であって、
（ａ）マルチスレッド・レジスタ／アレイ内の記憶要素の障害を分離する機能テストを実行するステップであって、前記マルチスレッド・レジスタ／アレイは記憶セルのマトリックスとして配列され、更に各々の記憶セルは複数の記憶要素を含み、各々の記憶要素は複数のスレッドの各々に固有に対応している、前記ステップと、
（ｂ）少なくとも１つの記憶要素の障害を検出して、当該障害を起こした少なくとも１つの記憶要素が固有に関連づけられた特定のスレッドを記録するステップと、
（ｃ）前記特定のスレッドに固有に関連づけられた全ての記憶要素を不能にするステップと、
（ｄ）前記特定のスレッドのデータを、前記複数のスレッドのうちの他のスレッドに固有に関連づけられた記憶要素へ回送するステップと、
を含む方法。
【請求項８】
前記ステップ（ｃ）が、前記複数のスレッドのうちの他のスレッドに固有に関連づけられた記憶要素を選択するため、マルチスレッド・コンピュータ内でマイクロコード命令を実行することによってスレッド切り替え信号を生成するステップを含む、請求項７記載の方法。
【請求項９】
前記ステップ（ｃ）が、ヒューズを飛ばすことを含む、請求項７記載の方法。
【請求項１０】
前記ヒューズが、当該ヒューズに関連づけられた全ての記憶要素へ接続された全ての読み出し／書き込みポートに置かれる、請求項９記載の方法。
【請求項１１】
前記ヒューズが、スレッド切り替えイベント制御レジスタに置かれ、前記特定のスレッドに対するスレッド切り替えイベント制御レジスタの全て又は一部分を不能にする、請求項９記載の方法。
【請求項１２】
前記ヒューズが、スレッド切り替えイベント制御レジスタ内の個々のビットに接続され、当該個々のビットが前記特定のスレッドを不能にする、請求項１１記載の方法。
【請求項１３】
前記ヒューズが、前記特定のスレッドに関係するスレッド状態レジスタに接続される、請求項９記載の方法。
【請求項１４】
前記ヒューズが、非活動状態を有するスレッドとして前記特定のスレッドをマークするため、前記スレッド状態レジスタの個々のビットに接続される、請求項１３記載の方法。
【請求項１５】
少なくとも１つのスレッドを不能にすることができるマルチスレッド・コンピュータ・システムであって、
（ａ）少なくとも１つのマルチスレッド・コンピュータ・プロセッサと、
（ｂ）前記マルチスレッド・コンピュータ・システムにおける複数のスレッドの各々に対する少なくとも１つのスレッド切り替え制御レジスタと、
（ｃ）記憶セルの各々が１つのスレッドに固有に関連づけられた記憶要素を有するマルチスレッド記憶セルを有する少なくとも１つのハードウェア・マルチスレッド・メモリ／レジスタ・アレイと、
（ｄ）前記マルチスレッド・コンピュータ・プロセッサに接続されたメイン・メモリと、
（ｅ）複数のデータ記憶装置、１つ又は複数の外部通信ネットワーク、前記マルチスレッド・コンピュータ・プロセッサとの間でユーザ入力を提供する１つ又は複数の入力／出力装置から構成されるグループの少なくとも１つへ、前記マルチスレッド・コンピュータ・プロセッサ及び前記メイン・メモリを接続するバス・インタフェースと、
（ｆ）前記マルチスレッド・コンピュータ・プロセッサの最初のブリングアップの間に、前記マルチスレッド・コンピュータ・プロセッサ内で少なくとも１つのスレッドの機能テストを実行する機能テスト生成手段と、
（ｇ）前記機能テストを受けている前記少なくとも１つのスレッドに固有に関連づけられた記憶要素の障害を検出する記憶要素障害検出手段と、
（ｈ）前記機能テストを受けている前記少なくとも１つのスレッドに関連づけられた全ての記憶要素を不能にする記憶要素不能手段と、
を備えたマルチスレッド・コンピュータ・システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的にはハードウェア・マルチスレッド・コンピュータ処理の分野に関し、更に具体的には、ハードウェア・マルチスレッド・コンピュータ・プロセッサが実行することができるスレッドの数を変更する方法に関する。
【０００２】
【従来の技術】
ハードウェア・マルチスレッド・コンピュータ・プロセッサは、設計されたハードウェア・プロセッサ内の複数のスレッドの状態を、プロセッサ・コア内に保全する。各々のハードウェア・レジスタが固有のスレッドに関連づけられている場合、ハードウェア・レジスタを単に変更することによって、幾つかのスレッドをマルチスレッド・プロセッサの中で実行してよい。プロセッサはマシン・サイクルごとにレジスタを変更してよいか、又は、例えば、プロセッサが、より遠いキャッシュ又はメモリからのデータ又は命令を待っているためにアイドル状態にあるとき、プロセッサはレジスタを切り替えてよい（即ち、スレッドを切り替えてよい）。
【０００３】
最近、プロセッサのレジスタ、例えば汎用及び特殊目的レジスタ及び他のマルチスレッド・メモリ・アレイは、読み出し独立性を無視することによって、マルチスレッドのために専門化されてきた。マルチスレッド・レジスタ／アレイは、依然として、マトリックスとして配列された記憶セルを有するが、各々の記憶セルは多数の記憶要素を有し、各々の記憶要素は動作中の固有のスレッドに関連づけられている。ハードウェア・マルチスレッド処理は、パフォーマンスの予想を越え、コンピュータ・アーキテクチャの規範的パラダイムとなりつつある。
【０００４】
しかし、プロセッサ内で１つ又は複数のスレッドを不能にすることが望ましい場合がある。これは、マルチスレッド・プロセッサが、単一スレッド・プロセッサとしてのみ機能することが必要である場合である。マルチスレッド・プロセッサが単一スレッド・プロセッサとしてのみ機能する必要がある場合の例は、プロセッサが製造された後、顧客へ販売される前に、プロセッサの設計をテストするプロセッサ・ブリングアップ（bring-up）テストの場合である。単一スレッド処理が好ましい他の場合は、マルチスレッド能力を使用するようにプログラムされていないオペレーティング・システムと共に、プロセッサが使用される場合である。
【０００５】
更に、マルチスレッド・プロセッサの１つ又は複数のスレッドを不能にすることが好ましい他の場合は、マルチスレッド・レジスタ／アレイに欠陥が生じて、コンピュータ障害となる場合である。コンピュータのコンポーネントが組み立てられてアセンブルされた後のコンピュータ障害を避けるため、多くの製造業者は、コンピュータが顧客へ販売される前に、プロセッサ及びメモリ・コンポーネントをテストし、誤りを有するコンピュータ・コンポーネントを除去する。プロセッサ障害の１つのタイプは、特に、プロセッサ・コア内の汎用及び特殊目的レジスタのＡＣ欠陥、及び正常な使用のもとでコンポーネントにストレスを加えることによって生じたコンピュータのメイン・ランダム・アクセス・メモリのＡＣ欠陥に帰せられてよい。更に、プロセッサのレジスタ／アレイは、ＬＢＩＳＴ及びＡＢＩＳＴを受けるかも知れない。これらのテストは、必要な時間にビットを掴んで保持するディジタル記憶装置の能力をテストする。現在、マルチスレッド・プロセッサが、これらのテストの１つに失敗すると、それは捨てられる。
【０００６】
しかし、プロセッサの障害は、１つ又は幾つかのスレッドだけに固有であって、他のスレッドは正常に実行できるかも知れない。従って、マルチスレッド・プロセッサが多数のスレッドを処理できなくても、それは、より少数のスレッド又は１つだけのスレッドを処理できるかも知れない。プロセッサは、縮小された能力と共に販売されたとき、救うことのできる価値を有するが、もしプロセッサが捨てられると、その価値は失われてしまう。
【０００７】
【発明が解決しようとする課題】
従って、マルチスレッド・プロセッサ内で実行可能なスレッドの数を縮小して、単一スレッド・モード又は縮小スレッド・モードで処理できるプロセッサ能力を維持する必要性が産業界に存在する。更に、プロセッサが、その縮小されたスレッド能力と共に販売及び使用されることができ、またプロセッサが、正常な単一スレッド処理、又は欠陥のある記憶セルを有しない縮小された数の他のスレッドのマルチスレッド処理を実行できるように、この縮小されたスレッド能力を実行できるプロセッサを救助する必要性が存在する。
【０００８】
更に、コンピュータが顧客へ販売される前に、マルチスレッド記憶要素を有するマルチスレッド・レジスタ及び、又はメモリ・アレイの欠陥を検出する必要性が、マルチスレッド・コンピュータ産業界に存在する。もし障害を起こしたスレッドに関連づけられたマルチスレッド・メモリ又はレジスタ内の記憶要素のみを、プロセッサで使用できないようにすれば、プロセッサ自体は、捨てられる必要はないであろう。欠陥のある記憶要素に関連づけられたスレッドのスレッド処理は、適正に機能するスレッドの記憶要素へ回送されることができる。
【０００９】
【課題を解決するための手段】
これらの必要性、及び当業者に明らかとなるであろう他の必要性は、複数のスレッドを実行することができるハードウェア・マルチスレッド・コンピュータ処理システムのスレッド能力を変更する方法によって満足させられる。この方法は、各々のスレッドに固有に関連づけられたレジスタ／アレイの障害を分離することができるテストを実行し、少なくとも１つのレジスタ／アレイの障害を検出して、障害を起こしたレジスタ／アレイが固有に関連づけられた特定のスレッドを記録し、当該特定のスレッドに関連づけられた全てのレジスタ／アレイへのアクセスを不能にし、検出された障害を有しない他のスレッドに固有に関連づけられた全てのレジスタ／アレイへのアクセスを維持するステップを含む。更に、各々のスレッドに固有に関連づけられたレジスタ／アレイの障害を分離することができるテストは、ロジック・ビルトイン・セルフ・テスト（ＬＢＩＳＴ）及び、又はアレイ・ビルトイン・セルフ・テスト（ＡＢＩＳＴ）を含んでよい。
【００１０】
レジスタ／アレイは、記憶セルを有するマルチスレッド・レジスタ／アレイを含み、各々の記憶セルは、１つのスレッドに固有に関連づけられた１つの記憶要素を有してよい。
【００１１】
更に、前記アクセスを不能にするステップは、前記特定のスレッドに関係するレジスタ／アレイへの読み出し／書き込みポートを切断するためヒューズを飛ばすことを含む。代替の実施形態において、前記アクセスを不能にするステップは、前記特定のスレッドのハードウェア・スレッド切り替えイベント制御レジスタ内の複数のスレッド切り替え制御イベントのいずれかを不能にすることを含む。更に、他の実施形態では、前記アクセスを不能にするステップは、マイクロコード命令を実行することによって、スレッド切り替え命令を生成することを含む。
【００１２】
更に、本発明は、複数のスレッドを実行することができるハードウェア・マルチスレッド・コンピュータ処理システムのスレッド能力を変更する方法と考えられる。この方法は、マルチスレッド・レジスタ／アレイ内の記憶要素の障害を分離する機能テストを実行し、マルチスレッド・レジスタ／アレイは記憶セルのマトリックスとして配列され、更に、各々の記憶セルは複数の記憶要素を含み、各々の記憶要素は多数のスレッドの各々に固有に対応し、少なくとも１つの記憶要素の障害を検出して、障害を起こした少なくとも１つの記憶要素が固有に関連づけられた特定のスレッドを記録し、障害を起こした少なくとも１つの記憶要素に関連づけられた特定のスレッドに固有に対応する全ての記憶要素を不能にし、特定のスレッドのデータを、他のスレッドに固有に関連づけられた記憶要素へ回送するステップを含む。
【００１３】
更に、特定のスレッドに関連づけられた全ての記憶要素を不能にする前記ステップは、他のスレッドに関連づけられた個々の記憶要素の中の他の記憶要素を選択するため、マルチスレッド・コンピュータの中でマイクロコード命令を実行することによって、スレッド切り替え信号を生成することを含んでよい。
【００１４】
代替的に、特定のスレッドに関連づけられた全ての記憶要素を不能にする前記ステップは、更に、ヒューズを飛ばすことを含む。ヒューズは、特定のスレッドの全ての記憶要素へ接続された全ての読み出し／書き込みポートに置かれてよい。ヒューズは、スレッド切り替えイベント制御レジスタに置かれて、特定のスレッドに対するスレッド切り替えイベント制御レジスタの全て又は一部分を不能にしてよく、又は、ヒューズは、スレッド切り替えイベント制御レジスタ内の個々のビットへ接続されて、個々のビットが特定のスレッドを不能にしてよい。更に、ヒューズは、特定のスレッドに関係するスレッド状態レジスタへ接続されよい。即ち、明確には、ヒューズは、非活動状態を有するスレッドとして特定のスレッドをマークするため、スレッド状態レジスタの個々のビットへ接続されてよい。
【００１５】
更に、本発明は、動作の少なくとも１つのスレッドを不能にすることができるマルチスレッド・コンピュータ・システムと考えられる。このマルチスレッド・コンピュータ・システムは、少なくとも１つのマルチスレッド・コンピュータ・プロセッサと、マルチスレッド・コンピュータ・プロセッサにおける動作の複数のスレッドの各々に対する少なくとも１つのスレッド切り替え制御レジスタと、各々の記憶セルが動作の１つのスレッドに固有に関連づけられた記憶要素を有するマルチスレッド記憶セルを有する少なくとも１つのハードウェア・マルチスレッド・メモリ／レジスタ・アレイと、少なくとも１つのマルチスレッド・コンピュータ・プロセッサに接続されたメイン・メモリと、複数のデータ記憶装置、１つ又は複数の外部通信ネットワーク、コンピュータ・プロセッサとの間でユーザ入力を与える１つ又は複数の入力／出力装置から成るグループの少なくとも１つへ、マルチスレッド・コンピュータ・プロセッサ及びメイン・メモリを接続するバス・インタフェースとを含む。更に、装置は、プロセッサの最初のブリングアップの間に少なくとも１つのマルチスレッド・コンピュータ・プロセッサ内で動作の少なくとも１つのスレッドの機能テストを実行する機能テスト生成手段と、機能テストを受けている動作の少なくとも１つのスレッドに固有に関連づけられた記憶要素の障害を検出する記憶要素障害検出手段と、マルチスレッド記憶セル内で機能テストを受けている動作の少なくとも１つのスレッドに関連づけられた全ての記憶要素を不能にする記憶要素不能手段とを含む。
【００１７】
【発明の実施の形態】
本発明の好ましい実施形態に従って選択的に不能にされることができるマルチスレッド記憶セルを含むレジスタを有するコンピュータ・システム１００の主なハードウェア・コンポーネントが、図１に示される。中央処理ユニット（ＣＰＵ）１０１Ａ及び１０１Ｂは、メイン・メモリ１０２からの命令及びデータの上で基本的マシン処理を実行するときハードウェア・マルチスレッド動作をサポートする。各々のＣＰＵ１０１Ａ及び１０１Ｂは、それぞれの内部レベル１命令キャッシュ１０６Ａ、１０６Ｂ（Ｌ１  Ｉキャッシュ）、及びレベル１データ・キャッシュ１０７Ａ、１０７Ｂ（Ｌ１  Ｄキャッシュ）を含む。各々のＬ１  Ｉキャッシュ１０６Ａ、１０６Ｂは、そのＣＰＵによって実行される命令を記憶する。各々のＬ１  Ｄキャッシュは、そのＣＰＵによって処理される命令以外のデータを記憶する。各々のＣＰＵ１０１Ａ、１０１Ｂは、それぞれのレベル２キャッシュ（Ｌ２キャッシュ）１０８Ａ、１０８Ｂへ結合される。レベル２キャッシュ１０８Ａ、１０８Ｂは、命令及びデータの双方を保持するために使用されることができる。メモリ・バス１０９は、ＣＰＵ及びメモリの間でデータを転送する。更に、ＣＰＵ１０１Ａ、１０１Ｂ及びメモリ１０２は、メモリ・バス１０９及びバス・インタフェース１０５を介して、システムＩ／Ｏバス１１０と通信する。様々なＩ／Ｏ処理ユニット（ＩＯＰ）１１１〜１１５が、システムＩ／Ｏバス１１０に取り付けられ、様々な記憶装置及びＩ／Ｏ装置、例えば直接アクセス記憶装置（ＤＡＳＤ）、テープ・ドライブ、ワークステーション、プリンタ、及び遠隔装置又は他のコンピュータ・システムと通信する遠隔通信線との通信をサポートする。記述を簡単にするため、ＣＰＵ、Ｌ１  Ｉキャッシュ、Ｌ１  Ｄキャッシュ、及びＬ２キャッシュは、ここでは、それぞれ参照番号１０１、１０６、１０７、及び１０８と略記される。様々なバスが図１に示されるが、これらは、様々な通信路を概念レベルで表すように意図されており、バスの実際の物理構成は変わるかも知れず、実際に、もっと複雑であることを理解すべきである。更に、図１はシステム構成の１つの例として意図されており、コンピュータ・システムにおけるコンポーネントの実際の数、タイプ、及び構成は変わってよいことを理解すべきである。特に、本発明は、単一のマルチスレッドＣＰＵを有するシステム、又は多数のマルチスレッドＣＰＵを有するシステムで使用されることができるであろう。
【００１８】
各々のＣＰＵ１０１は、多数のスレッドの状態を保全することができる。ＣＰＵ１０１は、典型的には、データを記憶するための複数の汎用レジスタ、及び条件、中間結果、命令、及びプロセッサの状態を集合的に決定する他の情報を記憶するための様々な特殊目的レジスタを含む。この情報は、ＣＰＵ１０１によってサポートされる各々のスレッドのために複製される。各々のＣＰＵ１０１の内部には、スレッドの優先順位、その活動状態又は非活動状態などに関する情報を含むスレッド状態レジスタ１０３Ａ及び１０３Ｂが、各々のスレッドごとに存在する。図１には、２スレッド・システムであることを仮定して、２つのスレッド状態レジスタが示される。しかし、プロセッサは、３つ以上のスレッドについて状態を保全し、処理を行うことができる。スレッド状態レジスタは、アクティブ・スレッド信号を生成する。ハードウェア・スレッド切り替え制御レジスタ１０５Ａ及び１０５Ｂは、スレッドの切り替えを生成するイベントを選択するようにプログラムされることができる。各々のスレッド切り替え制御イベントは、スレッド切り替え制御レジスタ１０５の中に別々の可能ビットを有する。各々のスレッドのために、別々のスレッド切り替え制御レジスタが存在してよいが、多くの場合、個々のスレッドに対応するレジスタの個々のビット回路は、典型的には、チップ上で物理的にインタリーブされているであろう。即ち、スレッド０に対するレジスタ部分のビット０は、他のスレッドの各々に対するレジスタ部分の物理的に隣接したビット０であろう。それぞれのビット１回路は、全て物理的に相互に隣接しているであろう。ビット２以下も同様である。１つのスレッド切り替え制御レジスタにおける１つのスレッドのスレッド切り替え制御イベントは、他のスレッドに関連づけられたスレッド切り替え制御イベント、又は他のスレッド切り替え制御レジスタ内のイベントと同一である必要はない。スレッド切り替え制御レジスタは、当技術分野で知られているサービス・プロセッサによって書き込まれることができる。スレッド切り替え制御レジスタの内容は、マルチスレッド・プロセッサにおけるスレッド切り替えの生成を可能又は不能にするため、ハードウェア・スレッド切り替えコントローラによって使用される。レジスタ内の１の値は、そのビットに関連づけられたスレッド切り替え制御イベントを可能にして、スレッド切り替えを生成する。スレッド切り替え制御レジスタ内の０の値は、そのビットに関連づけられたスレッド切り替え制御イベントを不能にして、スレッド切り替えを生成しないようにする。ビット２２：２９における０の値は、ビットに関連づけられたスレッドを不能にするであろう。もちろん、実行されているスレッド内の命令は、その特定のスレッド又は他のスレッドについて、いずれか又は全てのスレッド切り替え条件を不能にすることができるであろう。次の表は、スレッド切り替えイベントと、スレッド切り替え制御レジスタにおける可能ビットとの間の関連の例を示す。
スレッド切り替え制御レジスタのビット割り当て
（０）          Ｌ１データ・キャッシュ・フェッチ・ミスで切り替え
（１）          Ｌ１データ・キャッシュ記憶ミスで切り替え
（２）          Ｌ１命令キャッシュ・ミスで切り替え
（３）          命令ＴＬＢミスで切り替え
（４）          Ｌ２キャッシュ・フェッチ・ミスで切り替え
（５）          Ｌ２キャッシュ記憶ミスで切り替え
（６）          Ｌ２命令キャッシュ・ミスで切り替え
（７）          データＴＬＢ／セグメント・ルックアサイド・バッファ・ミスで切り替え
（８）          Ｌ２キャッシュ・ミス及び活動休止スレッド非Ｌ２キャッシュ・ミスで切り替え
（９）          スレッド切り替えタイムアウト値に達したときに切り替え
（１０）        Ｌ２キャッシュ・データが返されたときに切り替え
（１１）        ＩＯ外部アクセスで切り替え
（１２）        ダブルＸ記憶で切り替え：  ２者の中の１番目でミス
（１３）        ダブルＸ記憶で切り替え：  ２者の中の２番目でミス
（１４）        多数／ストリング記憶で切り替え：  いずれかのアクセスでミス
（１５）        多数／ストリング・ロードで切り替え：  いずれかのアクセスでミス
（１６）        予約
（１７）        ダブルＸロードで切り替え： ２者の中の１番目でミス
（１８）        ダブルＸロードで切り替え： ２者の中の２番目でミス
（１９）        もしマシン状態レジスタ（プロブレム状態）ビット、ｍｓｒ（ｐｒ）＝１であれば、ｏｒ１，１，１命令で切り替え。ｍｓｒ（ｐｒ）から独立してソフトウェア優先順位の変更を可能にする。もしビット１９が１であれば、ｏｒ１，１，１命令は低い優先順位を設定する。もしビット１９が０であれば、                  ｏｒ１，１，１命令が実行されるときにｍｓｒ（ｐｒ）＝０                  である場合にのみ、優先順位は低に設定される。後述するよ                  うに、ソフトウェアを使用して優先順位を変更する場合を参                  照されたい。
（２０）        予約
（２１）        スレッド切り替え優先順位を可能にする
（２２：２９）  スレッドを可能にする。スレッドごとに１つのビット
（３０：３１）  前方進行カウント
（３２：６３）  ６４ビット・レジスタの実装で予約
＊  ダブルＸロード／記憶とは、ダブルワード境界を横断する基本的ハーフワード、ワード、又はダブルワードのロード又は記憶を指す。この文脈におけるダブルＸロード／記憶とは、多数のワード又はワード・ストリングのロード又は記憶ではない。
【００１９】
マルチスレッド・プロセッサ設計に関する追加の背景情報は、次の共通譲渡された同時係属米国特許出願に含まれる。これらの特許出願は、参照して、それらの全体をここに組み込まれる。本願と同時に出願され、「マルチスレッド・コンピュータ・プロセッサのスレッド損失に対する現場防止」（Field Protection Against  Thread Loss in a Multithreaded Computer Processor）と題する一連番号不詳の特許出願（譲受人のドケット番号、ＲＯＣ９２００００１３９）、１９９９年１１月１２日に出願され、「マルチスレッド処理のマスタ・スレーブ・ラッチ回路」（Master-Slave Latch Circuit for Multithreaded Processing）と題する第０９／４３９，５８１号（譲受人のドケット番号、ＲＯ９９９−１４０）、１９９９年３月１０日に出願され、「マルチスレッド・プロセッサの命令キャッシュ」（Instruction Cache for Multithreaded Processor）と題する第０９／２６６，１３３号（譲受人のドケット番号、ＲＯ９９８−２７７）、１９９７年１１月２１日に出願され、「マルチスレッド・データ処理システムにおける多数エントリ完全連想キャッシュ・バッファからのデータ・アクセス」（Accessing Data from a Multiple Entry Fully Associative Cache Buffer in a Multithreaded Data Processing System）と題する第０８／９７６，５３３号（譲受人のドケット番号、ＲＯ９９７−１８２）、１９９７年１１月１０に出願され、「実効・リアル・アドレス・キャッシュ管理装置及び方法」（Effective-To-Real Address Cache Managing Apparatus and Method）と題する第０８／９６６，７０６号（譲受人のドケット番号、ＲＯ９９７−１５５）、１９９７年１０月２３日に出願され、「マルチスレッド・プロセッサにおけるスレッド優先順位の変更」（Altering Thread Priorities in a Multithreaded Processor）と題する第０８／９５８，７１８号（譲受人のドケット番号、ＲＯ９９７−１０６）、１９９７年１０月２３日に出願され、「マルチスレッド・プロセッサ内でスレッド切り替えイベントを選択する方法及び装置」（Method and Apparatus for Selecting Thread Switch Events in a Multithreaded Processor）と題する第０８／９５８，７１６号（譲受人のドケット番号、ＲＯ９９７−１０４）、１９９７年１０月２３日に出願され、「マルチスレッド・プロセッサ・システムにおけるスレッド切り替え制御」（Thread Switch Control in a Multithreaded Processor System）と題する第０８／９５７，００２号（譲受人のドケット番号、ＲＯ９９６−０４２）、１９９７年１０月２３日に出願され、「マルチスレッド・プロセッサにおける前方進行を保証する装置及び方法」（An Apparatus and Method to Guarantee Forward Progress in a Multithreaded Processor）と題する第０８／９５６，８７５号（譲受人のドケット番号、ＲＯ９９７−１０５）、１９９７年１０月２３日に出願され、「マルチスレッド・プロセッサにおけるスレッド切り替えの強制」（To Force a Thread Switch in a Multithreaded Processor）と題する第０８／９５６，５７７号（譲受人のドケット番号、ＲＯ９９７−１０７）、１９９６年１２月２７日に出願され、「マルチスレッド・プロセッサにおける命令及び関連フェッチ・リクエストのバックグラウンド完了」（Background Completion of Instruction and Associated Fetch Request in a Multithread Processor）と題する第０８／７７３，５７２号（譲受人のドケット番号、ＲＯ９９６−０４３）。これらの出願で説明されるマルチスレッド・プロセッサ設計は、粗粒度マルチスレッド実現方法であるが、本発明は、粗粒度マルチスレッド、又は細粒度マルチスレッドのいずれにも応用可能であることを理解すべきである。
【００２０】
マルチスレッド・メモリ・レジスタ／アレイは、共通の読み出しデータ・バスを有する通常の２スレッド・メモリ・アレイと著しく異なっている。共通読み出しバスを有するコンピュータ・アーキテクチャのパラダイムは、読み出し独立性が必要であること、及び各々のスレッドのデータが同時に読み出されるための別々の読み出しデコーダを必要とすることを仮定している。しかし、読み出し独立性を無視することによって、重大なマイナス結果を受けることなく、最適配線能力及び関連した最適最小トランジスタ数を有するマルチスレッド・メモリを達成できることが発見された。なぜなら、２つ以上のスレッドのデータが同時に要求されるインスタンスの数は、無視できるからである。図２のマルチスレッド記憶セルは、読み出し独立性を無視することによって、実質的なマイナスの結果を受けることなく、チップ表面領域の消費を著しく減らすことができるという発見を反映している。なぜなら、読み出し独立性は、一時に１つのスレッドだけをアクセスできるプロセッサに対しては、無視できる機能的属性だからである。スレッド・セレクタ及び読み出しポートに必要なトランジスタの数は、スレッドの各々について別々の読み出しポートを形成する場合に必要であった数よりも少なくなる。
【００２１】
図２は、本願の譲受人によって共通所有される米国特許第５，７７８，２４３号に示されるマルチスレッド記憶セルのブロック図である。この特許は、参照して、その全体を組み込まれる。マルチスレッド記憶セル３００は、スレッド０及びスレッド１を読み出しポート３４０へ選択的に接続するスレッド・セレクタ３３０を含むマルチスレッド読み出しインタフェースを有する。読み出しポート３４０の数は、記憶要素３２０及び３２２から読み出され得る機能ユニットの数、通常は１を超える数、例えば６から８までの機能ユニットの数に対応する。機能ユニットの例は、整数及び浮動小数点数表現の間で、整数、論理シフト、フィールド抽出、及び、又は浮動小数点演算及び、又は変換を実行することができる算術論理ユニットである。読み出し動作のためには、各々の記憶要素３２０、３２２は、次のように機能ユニットへ接続される。即ち、記憶要素３２０、３２２はスレッド・セレクタ３３０へ接続され、スレッド・セレクタ３３０は、読み出しポート３４０の１つへ接続され、この１つのポートはデコーダ（図２には示されていない）へ接続され、デコーダは機能ユニット（同様に、図２には示されていない）へ接続される。
【００２２】
更に、図２は、スレッド０のための書き込みポート３１０、及びスレッド１のための書き込みポート３１２を含む。書き込みポートの数は、記憶要素へ書き込むことができる機能ユニットの数、通常は１を超える数、例えば３から１２までの機能ユニットの数に対応する。スレッド０の記憶要素３２０は、書き込みポート３１０及びスレッド・セレクタ３３０へ接続され、スレッド１の記憶要素３２２は、書き込みポート３１２及びスレッド・セレクタ３３０へ接続される。
【００２３】
プロセッサ（図示されていない）は、スレッド０を選択するようにスレッド・セレクタ３３０を制御することによって、記憶要素３２０内のデータを読み出すことができる。それによって、記憶要素３２０のデータは、読み出しポート３４０上で利用可能になる。同様に、記憶要素３２２内のデータを読み出すためには、、プロセッサが、記憶要素３２２からの線を選択するようにスレッド・セレクタ３３０を制御することが必要である。
【００２４】
図３は、図２の実施形態の、更に詳細なブロック図である。図３は、マルチスレッド記憶セル４１０から形成された２スレッド・アレイ４０２を示す。図３の２スレッド・アレイは、読み出しデコーダ４３０、４３２、４３４、４３６、スレッド０の書き込みデコーダ４３８、スレッド１の書き込みデコーダ４４０、及びマルチスレッド記憶セル４１０のアレイ４５０を含む。１つの記憶セル４１０に対する書き込み相互接続のみが示される。なぜなら、アレイ内の他のセルに対する相互接続は、同じだからである。
【００２５】
書き込みデコーダ４３８、４４０の各々は、書き込みアドレス・バス４１８、４２２へ接続され、それぞれ、それ自身の書き込みスレッド選択線４１６、４２０へ接続される。このようにして、スレッド選択は、２スレッド・レジスタ４０２に対して外部的に行われる。対照的に、読み出しデコーダ、例えば４３０、４３２、４３４、４３６は、読み出しアドレス・バス４１２へ接続されるが、読み出しスレッド選択線４１４には接続されない。むしろ、どのスレッドを読み出すかの選択が、マルチスレッド記憶セル４１０の外部ではなく内部で起こるように、メモリ・セル４１０の各々が読み出しスレッド選択線４１４へ接続される。
【００２６】
図４は、図２の実施形態の配線略図である。具体的には、ブロックはＣＭＯＳトランジスタから形成されたように示されるが、本発明は、他の技術の中でも、ＮＭＯＳ、ＢＩＣＭＯＳ、ＢＩＮＭＯＳ、バイポーラ、ＳＯＩ、及びＧａＡＳへ応用される。第１のスレッドの記憶要素３２０は、トランジスタ５１０、５１２、５１４、５１６、５１８、５２０から形成され、単一のビットを保持する。単純に、ただ１つの機能ユニットが記憶要素へ書き込むことを仮定して、第１のスレッドの書き込みポート３１０は単一のポートのみを有するように示される。しかし、前述したように、そのような機能ユニットの複数が存在してよい。書き込みポート３１０は、トランジスタ５０２、５０４から形成され、トランジスタ５０２のゲートを横切るスレッド可能信号５２２によって動作可能にされる。第２のスレッドは、トランジスタ５３０、５３２、５３４、５３６、５３８、５４０から形成された記憶要素３２２、及びトランジスタ５０６並びに５０８を含む書き込みポート３１２を有する。第２のスレッド可能信号５２６は、トランジスタ５０６のゲートに接続される。スレッド・セレクタ３３０は、トランジスタ５６０、５６２、５６４、５６６、５６８、５７０から形成される。トランジスタ５６０のゲート及びトランジスタ５６６のゲートに接続された線５５０上の信号ＴＨＢ、及びトランジスタ５６２のゲート及びトランジスタ５６４のゲートに接続された線５５２上の信号ＴＨＡの状態に基づいて、スレッド・セレクタ３３０は、第１のスレッド又は第２のスレッドを選択する。読み出しポート３４０は２つのポート５８０及び５９０を含み、第１のポート５８０はトランジスタ５８２及び５８４から形成され、第２のポート５９０はトランジスタ５９２及び５９４から形成される。ここでも、各々のインタフェースにおけるポートの数は例示的なもので、実際には、記憶要素との間で読み出し／書き込みを行うことができる機能ユニットの数に従って変わるであろう。
【００２７】
マルチスレッド記憶セルを有するレジスタ及びメモリ・アレイは、製造された後にテストされる。幾つかのテスト手順があるが、２つだけを挙げると、ＬＢＩＳＴ及びＡＢＩＳＴがある。それらのテストでは、既知のビット・シーケンスがアレイの中へ入力され、アレイの出力と比較される。適正に機能するメモリ・アレイでは、入力は出力とマッチする。これらのシーケンスは、高速で実行され、多くのメモリ・セルを同時に巻き込むことができ、プロセッサへ「ストレス」を加えて、その障害パラメータ（もしあれば）を決定することができる。他の種類のテストは機能テストであって、その場合、顧客のパフォーマンス要件を代表する実際の符号化命令がストレスのもとで実行され、メモリ・アレイの臨界セクションを働かせる。再び、これらのテストは異なったプロセッサ速度で実行されることができ、プロセッサが障害を起こすかどうか、及び何時プロセッサが障害を起こすかを決定することができる。そのような障害は、最も普通では、マルチスレッド記憶セル内のビット値を捕捉して保持することのできないメモリ・アレイ及び汎用並びに特殊レジスタの結果である。本発明の重要な特徴は、別々のスレッドに関連づけられた個々の記憶セル内に記憶された値をテストする能力である。言い換えれば、本発明との関連において、各々のスレッドは、今や別々にテストされることができる。
【００２８】
図５は、マルチスレッド・プロセッサの障害を検出する方法の簡単なフローチャートである。図５は、障害が起こるとすれば、それが起こるまで実際の符号化命令を実行する機能テストを例示するが、他のテスト、例えば、メモリ・アレイをテストするためのＡＢＩＳＴ、ＬＢＩＳＴなども、本発明との関連で使用されることができる。典型的には、これらのテストは、製造された後、及び、又は現場におけるプロセッサ・システムの正常な動作の間、即ち、顧客の活動場所で正常なプロセッサ実行の間に定期的に行われる。ここで説明される好ましい実施形態では、これらのテストは、最初のブリングアップの間、即ち、プロセッサ・チップが製造された後、コンピュータへアセンブルされる前、又は販売される前に行われる。ステップ６００からスタートして、プロセスは、ステップ６１０へ進行する。ステップ６１０において、アクティブ・スレッドが第１のスレッドに設定される。これは、ＣＰＵ内のスレッド状態レジスタによって達成されることができる。次に、ステップ６１２において、アクティブ・スレッドの命令がプロセッサで実行される。ステップ６１４において、テスト手順は、実行されるべきアクティブ・スレッドの更なる命令があるかどうかをチェックする。もし更なる命令があれば、プロセスはステップ６１２へループバックし、そのスレッドのために次の命令を実行する。しかし、もしステップ６１４において、選択されたスレッドの更なる命令がなければ、ステップ６１６において、プロセスは、選択されたスレッドの命令の実行中に障害が生じたかどうかを質問する。
【００２９】
ステップ６１６において、レジスタ又はメモリ・アレイの障害がなければ、プロセスは、ステップ６１８で、テストすべき追加のスレッドがあるかどうかをチェックする。もしあれば、ステップ６２０で、他のスレッドを選択するようにスレッド選択がプログラムされる。それは、再びステップ６１２で、その命令の実行をテストするためである。しかし、もし第１のスレッドが障害を経験すれば、障害はステップ６３０で記録され、信号誤りメッセージがステップ６３２で生成される。この時点で、テストはステップ６４０で終了してよい。なぜなら、プロセッサは、マルチスレッド・レジスタ又はメモリ・アレイ内で機能障害を経験したからである。代替的に、テストは、全てのスレッドがテストされてしまうまで、選択されたアクティブ・スレッドとしての次のスレッドへ継続する。ここで開示される特徴の発明以前では、障害を経験したプロセッサ・チップは捨てられたであろう。即ち、全てのスレッドがテストされたわけではないので、プロセッサ内の他のスレッドが適正に実行され、他のスレッドの記憶セルが完全に機能する場合でも、捨てられたであろう。
【００３０】
このようにして、図５のフローチャートは、どの特定スレッドが機能障害を起こすかを確かめることによって、プロセッサを救助する利点を提供する幾つかの発明的特徴を表す。マルチスレッド・レジスタを有するプロセッサは捨てられる必要はない。その代わりに、欠陥を有するそれらの記憶要素は不能にされ、マルチスレッド・メモリ・アレイ内で障害を経験したスレッドの命令及びデータは、同一又は異なったアレイ又はレジスタ内の他のスレッドの記憶要素へ回送されてよい。
【００３１】
２スレッド・レジスタ／アレイ内で１つだけのスレッドに関連づけられた欠陥記憶要素を不能にするハードウェア装置及び方法の１つの実施形態が、図６に示される。マルチスレッド・レジスタ／アレイ４５０は、２つのスレッドを有するように示されるが、概念及びハードウェアは、当業者によって、３つ以上のスレッドへ容易に拡張されることができる。本発明の好ましい実施形態に従った変更は、複数のヒューズブック、及びハードワイヤ・ロジックと連係するマルチプレクサを含む。ヒューズブック内のヒューズは、「１」又は「０」のディジタル信号を駆動するように設定されることができる。典型的には、これらの値は、一度設定されると変更されることはできない。
【００３２】
図６を参照すると、スレッド選択ヒューズブックと呼ばれる第１のヒューズブック７１０は、マルチプレクサ７５０へ入る出力信号Ｆ１  ７１２を生成する。更に、スレッド状態レジスタによって生成されたアクティブ・スレッド信号ＡＴ７１４が、マルチプレクサ７５０へ入力される。マルチプレクサ７５０へ入力される第３の信号Ｆ０  ７３２は、欠陥要素ヒューズブックと呼ばれる第２のヒューズブック７３０から引き出される。この欠陥要素ヒューズブックは、もし機能テストの間に、例えば図５のステップ６３０から、欠陥のある記憶要素が検出されると、「１」の値を有する信号Ｆ０  ７３２を出力する。スレッド選択ヒューズブック７１０は、記憶要素が欠陥を有しないスレッドに対応する値を有する信号Ｆ１  ７１２を出力する。記憶要素が欠陥を有しないという知識は、ブリングアップの間、又はプロセッサが販売される前の他の時点で実行された機能テスト又は他のテストの結果から得られる。アクティブ・スレッド信号ＡＴ  ７１４は、単にアクティブ・スレッドが処理されていること、及びレジスタ／アレイへのアクセスを望んだことを示す。レジスタ／アレイは、マルチスレッド記憶セルのレジスタ／アレイ４５０であってよい。２スレッド・メモリ・アレイのためにマルチプレクサ内で具体化されることができるロジックの１つの例に従って、書き込み又は読み出しポートのデコーダへ与えられる出力信号ＡＴｏＦ（アクティブ・スレッド又はヒューズ）  ７５２は、どのスレッドがマルチスレッド・アレイ内でアクセスすべきかを示す。更に、出力信号は、レジスタの個々のビット又は全体のアレイへ出力されることができる。例えば、図６のように配列されたヒューズブック７１０及び７３０並びにマルチプレクサ７５０は、スレッド切り替え制御イベント・レジスタにおけるビット２２：２９の個々のビット、又は特定スレッドのスレッド切り替え制御イベント・レジスタへ接続されることができよう。同様に、図６のヒューズブック配列は、例えばスレッドの状態を常に非アクティブとしてマークするため、各々のスレッド状態レジスタのポート、又はスレッド状態レジスタの個々のビットへ接続されることができよう。従って、結果は、レジスタでスレッドを不能にすることになろう。もしマルチスレッド・レジスタ／アレイ内で欠陥アレイ又は欠陥記憶要素が検出されたならば、信号Ｆ０が１へ設定されるであろう。もし適正に機能している記憶要素を有するスレッドが第１のスレッドであったならば、信号Ｆ１は０であろう。ここで、もしアクティブ・スレッドがスレッド０であれば（論理チャート内でも０の値である）、出力信号ＡＴｏＦは０であり、メモリ・セルはアクセスされることができよう。しかし、もし上記の条件が、アクティブ・スレッド信号がスレッド１に対するものであったことを除いて同じであれば、信号Ｆ１と信号ＡＴは矛盾し、第２のスレッドに対する記憶要素へのアクセスは不能にされるであろう。従って、与えられたロジックのもとでは、欠陥記憶要素が検出されて、Ｆ０信号が１であり、アクティブ・スレッド信号ＡＴが、どのスレッドが適正に機能する記憶要素を有するかを示す信号Ｆ１と矛盾するとき、アクティブ・スレッドによって要求されたレジスタ／アレイへのアクセスは不能にされる。
【００３３】
図７は、マルチスレッド・レジスタ／アレイのハードウェアへ組み込まれることのできるヒューズブックの１つの例に過ぎない。ヒューズは、実際には多くの実現方法を有し、当業者は、同じように実現されることのできる他のヒューズ及び、又はハードワイヤ・ロジックを知っているであろう。ネットの設定＿ヒューズブックは、スタートアップで活性化され、デフォルト値として「１」の出力値を有するが、ヒューズブックを設定するためには「０」の値へドロップする。次に、ネットの設定＿ヒューズブックは、プロセッサの寿命の間、「１」の値へ戻る。ヒューズブックを設定する場合、設定＿ヒューズブックは０へドロップし、これはトランジスタＮ１及びＰ１をオンにし、トランジスタＮ３及びＮ２をオフにする。もしヒューズが飛ばされていなければ、ヒューズ＿ネットは０へ設定される。Ｎ１がオンであるとき、ヒューズ＿ラッチはヒューズ＿ネットを短絡させる。ヒューズ＿ネットは０になって、インバータＩ２を介してヒューズ＿フィードバックを１の値にする。代わって、このアクションは、Ｐ２をオフにし、Ｎ４をオンにし、出力信号ヒューズ＿アウトは、インバータＩ３を介して０になる。設定＿ヒューズブックが高になるとき、トランジスタＮ３及びＮ２は活性化されるが、トランジスタＮ１及びＰ１は非活性化される。今や、Ｎ３及びＮ４を通るフィードバック通路が存在し、この通路はヒューズ＿ラッチを０に保持し、ヒューズ＿フィードバックを１に保持し、ヒューズ＿アウトを０に保持する。この状態は、設定＿ヒューズブックがスタートアップ時を除いて１に止まるので、チップがパワーダウンされるまで続く。
【００３４】
しかし、もしヒューズが、レーザの使用により、又は電気的に飛ばされると、トランジスタＮ２がオン、即ち設定＿ヒューズブックが１であるときを除いて、ヒューズ＿ネットはグラウンドへの通路を有しない。従って、設定＿ヒューズブックが０になると、ヒューズ＿ネットは０状態で浮動し、トランジスタＮ１及びＰ１はオンになる。Ｐ１は、トランジスタＮ１を介してヒューズ＿ネットのグラウンド値に打ち勝ち、ヒューズ＿フィードバックを０にし、ヒューズ＿ラッチ及びヒューズ＿ネットを１にする。設定＿ヒューズブックが１へ戻り、トランジスタＰ１及びＮ１が非活性化されるとき、ヒューズ＿ラッチの値が１に保持され、トランジスタＮ４がオフでヒューズ＿フィードバックが０に保持され、ヒューズ＿アウトが１に止まるように、トランジスタＰ２を通るフィードバック通路は存在しない。
【００３５】
これまで、本発明の様々な実施形態が説明されたが、それらは、限定ではなく例として提示されたこと、及び変形が可能であることを理解すべきである。本発明は、潜在的イベントに基づいてスレッドを切り替える粗粒度マルチスレッドに限定されない。即ち、それは細粒度マルチスレッド・システムに組み込まれるように等しく変更されることができる。更に、本発明は、単に２つのスレッドを有するハードウェア・マルチスレッド・プロセッサに限定されず、多数のスレッドを実行することのできるプロセッサへ拡張されることができる。本発明の好ましい実施形態は、記憶セルの各々でスレッドごとに固有の記憶要素を有するマルチスレッド・メモリ・レジスタに関して説明されたが、マルチスレッド・プロセッサのスレッド能力を変更する発明的特徴は、各々のスレッドについて別々のレジスタを有するマルチスレッド・プロセッサにも等しく応用することができる。レジスタを不能にするハードウェア手法は、ヒューズブックを使用しなくても実現することができる。レジスタ／アレイへのポートを不能にするために必要なロジックも、異なったものでよい。従って、本発明の広さ及び範囲は、これまで説明した例示的実施形態によって限定されるべきではなく、クレイム及びそれらの同等物に従ってのみ限定されるべきである。
【図面の簡単な説明】
【図１】  本発明の好ましい実施形態に従って、個々のスレッドのための記憶セルを有するマルチスレッド・レジスタ／メモリ・アレイを使用するコンピュータ・システムの主なハードウェア・コンポーネントを示す図である。
【図２】  マルチスレッド記憶セルの簡単なブロック図である。
【図３】  図２のマルチスレッド記憶セルの更に詳細なブロック図である。
【図４】  図３のマルチスレッド記憶セルの配線略図である。
【図５】  マルチスレッド・セルの記憶要素に欠陥があることを検出するプロセスの簡単なフローチャートである。
【図６】  本発明の１つの実施形態に従って、スレッド能力を変更する能力を有するマルチスレッド・メモリ・レジスタ／アレイのコンポーネントの簡単なブロック図である。
【図７】  レジスタ／アレイのスレッド能力を変更するため、マルチスレッド・メモリ・レジスタ／アレイに従って使用されることができるヒューズブックの回路図である。
【図１】
0003683837.tif 000002
【図２】
0003683837.tif 000003
【図３】
0003683837.tif 000004
【図４】
0003683837.tif 000005
【図５】
0003683837.tif 000006
【図６】
0003683837.tif 000007
【図７】
0003683837.tif 000008