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