(57)【要約】プロセッサコア（１００）は、複数の整数実行ユニット（１５４ａ，１５４ｂ）に同じ整数命令ストリームをディスパッチし、浮動小数点ユニット（１６０）に同じ浮動小数点命令ストリームを連続的にディスパッチしうる命令デコードユニット（１４０）を有する。前記整数実行ユニットは、各クロックサイクル中に、各整数実行ユニットが同じ整数命令を実行するように、ロックステップ方式で動作しうる。前記浮動小数点ユニットは、前記同じ浮動小数点命令ストリームを２回実行しうる。比較ロジック（１５８ａ，１５８ｂ，１６３）は、前記整数命令がリタイヤする前に、前記整数実行ユニットのそれぞれからの実行結果間の不一致を検出しうる。また、前記比較ロジックは、前記浮動小数点命令ストリームの前記実行の結果を前記浮動小数点ユニットから転送する前に、各連続する浮動小数点命令ストリームの実行の結果間の不一致を検出しうる。更に、前記比較ロジックは、不一致を検出すると、前記不一致を発生させた命令を再実行させうる。
2011509490.tif 000002
【特許請求の範囲】
【請求項１】
高信頼実行モードで動作するように構成されたプロセッサコア（１００）であって、
複数の整数実行ユニット（１５４ａ，１５４ｂ）に同じ整数命令ストリームをディスパッチし、浮動小数点ユニット（１６０）に同じ浮動小数点命令スレッドを連続的にディスパッチするように構成された命令デコードユニット（１４０）であって、
各クロックサイクル中に、前記複数の整数実行ユニットが同じ整数命令を実行するように、前記複数の整数実行ユニットはロックステップ方式で動作するように構成されており、
前記浮動小数点ユニットは、前記同じ浮動小数点命令ストリームを２回実行するように構成されている命令デコードユニットと、
前記複数の整数実行ユニットおよび前記浮動小数点ユニットに結合された比較ロジック（１５８ａ，１５８ｂ，１６３）とを備え、前記比較ロジックは、前記同じ整数命令ストリーム中の命令がリタイヤする前に、前記複数の整数実行ユニットのそれぞれからの実行結果間の不一致を検出するように構成されており、
前記浮動小数点ユニットが、前記浮動小数点命令ストリームの前記実行結果を、前記浮動小数点ユニットから転送する前に、前記比較ロジックは、各連続する浮動小数点命令ストリームの実行の結果間の不一致を検出するように更に構成されており、
前記比較ロジックが不一致を検出すると、前記比較ロジックは、前記不一致を発生させた命令を再実行させるように構成されている、プロセッサコア。
【請求項２】
前記複数の整数実行ユニットは、それぞれ１つ以上の第１の整数実行ユニット（１５４ａ）と１つ以上の第１のスケジューラユニット（１５２ａ）とを有する複数の整数実行クラスタ（１５０ａ，１５０ｂ）を備える、請求項１に記載のプロセッサコア。
【請求項３】
前記比較ロジックは、前記複数の整数実行クラスタの第１の実行クラスタの実行結果に対応する信号を、前記複数の整数実行クラスタの第２の実行クラスタの実行結果に対応する信号と比較するように更に構成されている、請求項２に記載のプロセッサコア。
【請求項４】
前記比較ロジックは、前記第１の実行クラスタ、前記第２の実行クラスタ、および前記浮動小数点ユニットに含まれる分散された比較機能を有する、請求項３に記載のプロセッサコア。
【請求項５】
前記複数の整数実行ユニットのそれぞれからの前記実行結果に対応する前記信号には、前記複数の整数実行ユニットのそれぞれの内部の結果バスにおいて伝達される結果信号から生成されるシグニチャが含まれる、請求項１に記載のプロセッサコア。
【請求項６】
プロセッサコア（１００）において論理エラーから保護する方法であって、
前記プロセッサコアを高信頼実行モードで動作させるステップと、
複数の整数実行ユニットに同じ整数命令ストリームをディスパッチし（３０５）、浮動小数点ユニットに同じ浮動小数点命令ストリームを連続的にディスパッチするステップ（３５５，３６０）と、
各クロックサイクル中に、前記複数の整数実行ユニットが同じ整数命令を実行するように、前記複数の整数実行ユニットをロックステップ方式で動作させるステップ（３１０）と、
前記浮動小数点ユニットが前記同じ浮動小数点命令ストリームを２回実行するステップと、
比較ロジックが比較を実行し（３１５）、前記同じ整数命令ストリーム中の命令がリタイヤする前に、前記複数の整数実行ユニットのそれぞれからの実行結果間の不一致を検出するステップ（３２０）と、
前記比較ロジックが比較を実行し（３６５）、前記浮動小数点ユニットが、前記浮動小数点命令ストリームの前記実行結果を、前記浮動小数点ユニットから転送する前に、各連続する浮動小数点命令ストリームの実行の結果間の不一致を検出するステップ（３７０）と、
不一致を検出すると前記不一致を発生させた命令を再実行させるステップとを含む、方法。
【請求項７】
前記複数の整数実行ユニットは、それぞれ１つ以上の第１の整数実行ユニット（１５４ａ）と１つ以上の第１のスケジューラユニット（１５２ａ）とを有する複数の整数実行クラスタ（１５０ａ，１５０ｂ）を備える、請求項６に記載の方法。
【請求項８】
前記比較ロジックが、前記複数の整数実行クラスタの第１の実行クラスタの実行結果に対応する信号を、前記複数の整数実行クラスタの第２の実行クラスタの実行結果に対応する信号と比較するステップを更に含む、請求項７に記載の方法。
【請求項９】
前記比較ロジックは、前記第１の実行クラスタ、前記第２の実行クラスタ、および前記浮動小数点ユニットに含まれる分散された比較機能を有する、請求項８に記載の方法。
【請求項１０】
前記複数の整数実行ユニットのそれぞれの内部の結果バスにおいて伝達される結果信号からシグニチャを生成することによって、前記複数の整数実行ユニットのそれぞれからの前記実行結果に対応する前記信号を生成するステップを更に含む、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、より詳細には、プロセッサ内部の論理エラー保護に関する。
【背景技術】
【０００２】
電子部品はさまざまにエラーを発生することがある。メモリアレイを含む部品は、ビット不良を有することがあり、これがデータエラーとして現れることがある。論理（ロジック）回路は、縮退（stuck-at）ビットおよび／または遅延エラーを有することがある。エラーは枚挙にいとまがない。多くのエラーは製造不良によって発生することがある。例えば、製造時のパーティクル汚染がハードエラーを発生させ、このエラーは直ちに現れることもあれば、動作時に後から現れることもある。このようなエラーの多くは、故障が検出されるとその故障が永続するため、「ハードエラー」として分類されうる。ハードエラーの多くは製造時やバーインイン試験時に検出することができるが、なかには潜伏しているか、見つからないものもある。ある種類のエラーは、他の種類よりも被害が大きいことがある。例えば、メモリデータの破壊により発生するエラー等のサイレントなエラーは、このエラーが検出されて、訂正されるか、回復メカニズムが存在しない限り回復できないため、深刻な被害を起こすことがある。このため、多数のエラー検出／訂正メカニズムが開発されてきた。詳しく説明すると、エラー検出および誤り訂正符号（ＥＤＣ／ＥＣＣ）に加えて、ＥＤＣ／ＥＣＣハードウェアが設計に搭載されてきた。従来、このような手法は、メモリエラーからの保護のためにマイクロプロセッサの設計で使用されてきた。従来、ほとんどの論理エラーが製造試験およびバーンイン中に発見されていたため、論理はほとんど保護されていなかった。
【０００３】
一方、ソフトエラーは時々発生し、不規則に現れ、このため検出および訂正が困難となりうる。以前は、ソフトエラーは、通常、ケーブルとコネクタを有するボード等を使用したシステムなどに隔離されていた。しかし、現在、製造技術が進歩を遂げ、デバイスが一層微細化（９０ｎｍ未満など）しているため、特に金属酸化物半導体（ＭＯＳ）デバイスでは、ソフトエラーの別の発生源が登場している。このような新しいソフトエラーは、中性子またはアルファ粒子の衝撃によって発生し、メモリアレイへの直接の衝撃によるメモリエラーとして現れるか、論理素子（フリップフロップなど）への衝撃による論理エラーとして現れる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
何百万個ものトランジスタを搭載したマイクロプロセッサなどのデバイスでは、ソフトエラーが検出されない場合、深刻な結果を引き起こすことがある。この結果、チップ境界でエラーを検出することができる従来のチップレベル冗長性などの検出方法が開発されてきた。例えば、システムにある２つの同じプロセッサチップが同時に同じコードを実行し、チップ境界でそれぞれの最終結果が比較される。従来のチップレベル冗長方式の多くでは、このようなエラーを検出しても訂正できず、エラーによりプロセッサの内部実行状態が破壊されているため、システムがトランスペアレントに回復できず、再起動が必要となる。このため、この種の構成は、エラーを検出できるものの、高信頼および高可用性のシステムでは不十分となりうる。
【課題を解決するための手段】
【０００５】
論理エラー保護のためのハイブリッド冗長性を備えたプロセッサの各種実施形態が開示される。一実施形態では、プロセッサコアは、通常実行モードと高信頼性実行モードで動作することができる。前記プロセッサコアは、複数の整数実行ユニットに同じ整数命令ストリームをディスパッチし、浮動小数点ユニットに同じ浮動小数点命令ストリームを連続的にディスパッチするように構成されうる命令デコードユニットを有する。例えば、前記命令デコードユニットは、前記高信頼実行モードで動作中は、前記整数実行クラスタに同じ整数命令ストリームをディスパッチし、浮動小数点ユニットに浮動小数点命令ストリームの命令を連続的に２回ディスパッチしうる。各クロックサイクル中に、前記複数の整数実行ユニットが同じ整数命令を実行するように、前記複数の整数実行ユニットはロックステップ方式で動作するように構成され、このため、同じ結果を有するはずである。前記浮動小数点ユニットは、前記同じ浮動小数点命令ストリームを２回実行するように構成され、このため、この場合も同じ結果を有するはずである。また、前記プロセッサコアは、前記複数の整数実行ユニットと、前記浮動小数点ユニットとに結合された比較論理（ロジック）も有する。前記比較論理は、例えば、前記同じ整数命令ストリームの命令がリタイヤするか、またはその結果が恒久的にコミットされる前に、前記複数の整数実行ユニットのそれぞれからの実行結果間の不一致を検出するように構成されうる。また、前記浮動小数点ユニットが、前記浮動小数点命令ストリームの前記実行結果を、前記浮動小数点ユニットから転送する前に、前記比較論理は、各連続する浮動小数点命令ストリームの実行の結果間の不一致を検出するように更に構成されうる。更に、前記比較論理が不一致を検出すると、前記比較論理は、前記不一致の原因となった命令を再実行させるように構成されうる。
【図面の簡単な説明】
【０００６】
【図１】プロセッサコアの一実施形態のブロック図。
【図２】プロセッサコア論理（ロジック）のエラー保護の一実施形態のアーキテクチャブロック図。
【図３】図１，図２のプロセッサの実施形態の動作を示すフローチャート。
【図４】図１，図２のプロセッサの別の実施形態の動作を示すフローチャート。
【図５】図１のプロセッサコアを複数有するプロセッサの一実施形態のブロック図。
【発明を実施するための形態】
【０００７】
本発明は、さまざまに変形されたり代替形態を取りうるが、その特定の実施形態が、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、逆に、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図することが理解されるべきである。本願にわたり、「しうる」、「してもよい」との文言は、許容を示す意味（すなわち、可能性がある、可能であること）で用いられており、義務的な意味（すなわち必須）ではない点が留意される。
【０００８】
プロセッサコア１００の一実施形態が図１に示される。一般に、コア１００は、コア１００に直接または間接的に結合されたシステムメモリ（図５に示す）に記憶されうる命令を実行するように構成されうる。このような命令は、特定の命令セットアーキテクチャ（ＩＳＡ）に従って定義されうる。例えば、コア１００は、ｘ８６  ＩＳＡの一種を実装するように構成されうるが、別の実施形態では、コア１００は異なるＩＳＡまたはＩＳＡの組み合わせを実装してもよい。
【０００９】
図に示した実施形態では、コア１００は、命令フェッチユニット（ＩＦＵ）１２０に命令を提供するように結合された命令キャッシュ（ＩＣ）１１０を備えうる。ＩＦＵ１２０は、分岐予測ユニット（ＢＰＵ）１３０と、命令デコードユニット１４０とに結合されうる。デコードユニット１４０は、複数の整数実行クラスタ１５０ａ〜ｂと、浮動小数点ユニット（ＦＰＵ）１６０とにオペレーションを提供するように結合されうる。各クラスタ１５０ａ〜ｂは、各々の複数の整数実行ユニット１５４ａ〜ｂに結合された個々のクラスタスケジューラ１５２ａ〜ｂを備えうる。クラスタ１５０ａ〜ｂは、実行ユニット１５４ａ〜ｂにデータを提供するように結合された各々のデータキャッシュ１５６ａ〜ｂを備えうる。図に示した実施形態では、データキャッシュ１５６ａ〜ｂはＦＰＵ１６０の浮動小数点実行ユニット１６４にもデータを提供し、浮動小数点実行ユニット１６４は、ＦＰスケジューラ１６２からオペレーションを受け取るように結合されうる。データキャッシュ１５６ａ〜ｂと命令キャッシュ１１０とは、コアインタフェースユニット１７０にも結合され、コアインタフェースユニット１７０は、一元化されたＬ２キャッシュ１８０のほか、図２に示し、下で説明するコア１００の外部にあるシステムインタフェースユニット（ＳＩＵ）にも結合されうる。図１は、各ユニット間の特定の命令とデータの流れの経路を示しているが、図１には特に図示しないデータまたは命令の流れの追加の経路または方向が提供されてもよい点に留意されたい。
【００１０】
下で更に詳細に説明するように、コア１００は、別個の実行スレッドに含まれる命令が同時に実行されうるマルチスレッド実行のために構成されうる。一実施形態では、各クラスタ１５０ａ〜ｂは、２つのスレッドのそれぞれ一方に対応する命令の実行に占有的に使用されるが、ＦＰＵ１６０と上りの命令フェッチユニットおよびデコード論理（ロジック）とは、複数のスレッドで共有されうる。別の実施形態では、同時実行がサポートされるスレッド数が異なっていてもよく、設けられるクラスタ１５０とＦＰＵ１６０の個数も異なっていてもよい。
【００１１】
命令キャッシュ１１０は、取得、デコード、および実行のために発行される前の命令を記憶するように構成されうる。各種実施形態では、命令キャッシュ１１０は、どのようなキャッシュタイプおよびどのようなサイズのキャッシュとして構成されてもよく、必要に応じて、物理アドレッシングされても、仮想アドレッシングされても、この両者の組み合わせ（例えば、仮想インデックスビットと物理タグビット）でもよい。一部の実施形態では、命令キャッシュ１１０は、命令フェッチアドレスのために仮想−物理変換をキャッシュするように構成された変換ルックアサイドバッファ（ＴＬＢ）論理（ロジック）を有してもよいが、ＴＬＢと変換論理（ロジック）が、コア１００の他の構成要素に含まれていてもよい。
【００１２】
命令キャッシュ１１０への命令フェッチアクセスは、ＩＦＵ１２０によって調整されうる。例えば、ＩＦＵ１２０は、各実行スレッドの現在のプログラムカウンタ状態をトラッキングし、実行する後続の命令を取得するために、命令キャッシュ５１０にフェッチを発行しうる。命令キャッシュミスの場合、命令キャッシュ１１０またはＩＦＵ１２０のいずれかが、Ｌ２キャッシュ１８０からの命令データの取得を調整しうる。一部の実施形態では、ＩＦＵ１２０は、メモリレーテンシの影響を軽減するために、予想される命令が使用される前に、メモリ階層の他のレベルからの、その命令のプリフェッチを調整しうる。例えば、精度の高い命令のプリフェッチにより、命令が必要となったときに、その命令が命令キャッシュ１１０に存在する確率が高くなり、これにより、おそらくメモリ階層の複数のレベルでのキャッシュミスのレーテンシの影響が回避される。
【００１３】
各種の分岐（例えば、条件付きの分岐または無条件の分岐、呼び出し／戻り命令など）により、特定のスレッドの実行の流れが変わりうる。分岐予測ユニット１３０は、通常、ＩＦＵ１２０が使用するために、今後フェッチするアドレスを予測するように構成されうる。一部の実施形態では、ＢＰＵ１３０は、命令の流れにおいて可能な分岐に関するさまざまな情報を記憶するように構成されうる分岐先バッファ（ＢＴＢ）(不図示)を備えうる。一実施形態では、分岐予測が命令のフェッチに先行し、ＩＦＵ１２０が命令をフェッチ可能となるまでに、今後フェッチする複数のアドレスを予測してキューイングできるように、ＩＦＵ１２０の実行パイプラインとＢＰＵ１３０の実行パイプラインが分離されてもよい。マルチスレッドオペレーション中に、予測のパイプラインとフェッチのパイプラインが、異なるスレッドに同時に操作するように構成されてもよい点が考察される。
【００１４】
ＩＦＵ１２０は、フェッチを行った結果、「フェッチパケット」と呼ばれる命令バイトのシーケンスを生成するように構成されうる。例えば、フェッチパケットは、３２バイト長または別の適切な値でもよい。一部の実施形態では、特に、可変長命令を実装するＩＳＡでは、所定のフェッチパケット内の任意の境界に配列される有効な命令数が変わり、場合によっては、命令が異なるフェッチパケットにまたがることがある。一般に、デコードユニット１４０は、フェッチパケット内で命令の境界を特定して、この命令を、デコードするか、あるいはまたはほかの方法で、クラスタ１５０またはＦＰＵ１６０が実行可能なオペレーションに変換して、このようなオペレーションを実行のためにディスパッチするように構成されうる。
【００１５】
一実施形態では、ＤＥＣ１４０は、最初に、１つ以上のフェッチパケットから抽出した所定のバイトのウィンドウ内で、可能な命令の長さを決定するように構成されうる。例えば、ＤＥＣ１４０は、ｘ８６互換ＩＳＡの場合、所定のフェッチパケット内の各バイト位置を始点とする、プレフィックス、オペコード、「ｍｏｄ／ｒｍ」、および「ＳＩＢ」の各バイトの有効なシーケンスを特定するように構成されうる。一実施形態では、ＤＥＣ１４０内の抽出論理（ロジック）は、次に、ウィンドウ内で最大４つの有効な命令の境界を特定するように構成されうる。一実施形態では、複数のフェッチパケットと、命令の境界を特定する複数の命令ポインタ群が、ＤＥＣ１４０内にキューイングされ、ＩＦＵ１２０が時としてデコードよりも「先にフェッチ」できるように、デコードプロセスをフェッチから分離することが可能となる。
【００１６】
次に、命令が、フェッチパケット記憶域からＤＥＣ１４０内のいくつかの命令デコーダの１つに送られうる。一実施形態では、ＤＥＣ１４０は、１サイクルにつき最大４つの命令を実行のためにディスパッチするように構成されており、これに対応して４つの別個の命令デコーダが設けられるが、他の構成も可能であり、考察される。コア１００がマイクロコード命令をサポートしている実施形態では、各命令デコーダは、所定の命令がマイクロコード化されているかどうかを判定し、マイクロコード化されている場合は、命令をオペレーションのシーケンスに変換するために、マイクロコードエンジンの動作を起動するように構成されうる。マイクロコード化されていない場合、命令デコーダは、命令を、クラスタ１５０またはＦＰＵ１６０が実行するのに適した１つのオペレーション（あるいは、一部の実施形態では複数のオペレーション）に変換しうる。得られたオペレーションは、「マイクロオペレーション」、「マイクロオペ」または「ＵＯＰ」とも呼ばれ、１つ以上のキューに格納され、実行のためにディスパッチされるのを待機しうる。一部の実施形態では、マイクロコードオペレーションと、非マイクロコード（または「高速パス」）オペレーションとは、別のキューに格納されうる。
【００１７】
ＤＥＣ１４０内部のディスパッチ論理（ロジック）は、ディスパッチパーセルを組み立てるために、ディスパッチ待機中のキューイングされたオペレーションの状態を、実行リソースの状態およびディスパッチルールと併せて調べるように構成されうる。例えば、ＤＥＣ１４０は、キューイングされたオペレーションをディスパッチ可能かどうか、キューイングされてクラスタ１５０および／またはＦＰＵ１６０内での実行を待機しているオペレーションの数、ならびにディスパッチするオペレーションに適用されうるリソース制約を考慮しうる。一実施形態では、ＤＥＣ１４０は、所定の実行サイクル中に、クラスタ１５０またはＦＰＵ１６０の１つに、最大４オペレーションのパーセルをディスパッチするように構成されうる。
【００１８】
一実施形態では、ＤＥＣ１４０は、所定の実行サイクル中に１つのスレッドのオペレーションのみをデコードし、ディスパッチするように構成されてもよい。しかし、ＩＦＵ１２０とＤＥＣ１４０が、同時に同じスレッドを操作する必要はない点に留意されたい。命令のフェッチおよびデコード中に各種のスレッド切替ポリシーを使用することが考察される。例えば、ＩＦＵ１２０とＤＥＣ１４０は、Ｎサイクル（Ｎは最小で１）おきに、ラウンドロビン方式で、処理する異なるスレッドを選択するように構成されうる。あるいは、スレッド切替が、キューの占有率などの動的な条件によって変更されてもよい。例えば、ＤＥＣ１４０内の特定のスレッドのキューイングされているデコード済みのオペレーション、または特定のクラスタ１５０のキューイングされているディスパッチ済みのオペレーションの深さが、しきい値を下回ると、異なるスレッドのキューイングされているオペレーションが不足するまで、デコード処理はそのスレッドに切り換えうる。一部の実施形態では、コア１００は、複数の異なるスレッド切替ポリシーをサポートすることができ、そのうちのいずれかが、ソフトウェアによって、あるいは製造時（例えば、製造マスクオプションとして）選択されてもよい。
【００１９】
一般に、クラスタ１５０は、ロード／ストアオペレーションのほかに、整数演算オペレーションと論理オペレーションも実装するように構成されうる。一実施形態では、クラスタ１５０ａ〜ｂのそれぞれは、個々のスレッドのオペレーションの実行のみに使用され、コア１００がシングルスレッドモードで動作するように構成されている場合、オペレーションが、クラスタ５５０の１つのみにディスパッチされうる。各クラスタ１５０は、独自のスケジューラ１５２を有し、このスケジューラ１５２は、クラスタに既にディスパッチされているオペレーションを実行するための発行を管理するように構成されうる。各クラスタ１５０は、独自の整数物理レジスタファイルのコピーのほか、独自の終了論理（例えば、オペレーションの終了とリタイヤを管理するためのリオーダーバッファまたは他の構造体）も有しうる。
【００２０】
下記に詳述するように、上記の動作に加えて、一実施形態では、プロセッサコア１００は、高信頼実行モードで動作するように構成されうる。一実装では、プロセッサコア１００は、例えば、外部ピン（図５に図示）を、ＶＤＤまたはＧＮＤなどの所定の基準電圧に結合することによって通常実行モードまたは高信頼実行モードのいずれを実行するように選択的に設定することができる。高信頼実行モードが選択された場合、ＤＥＣ１４０内部のディスパッチ論理（ロジック）は、同じクロックサイクルにおいて各クラスタ１５０ａ〜ｂに同じ命令のシーケンスをディスパッチするように構成されうる。また、クラスタ１５０ａ〜ｂは、各クロックサイクルに、同じ命令がパイプラインの同じステージに存在し、各クラスタが各ステージで同じ結果を生成しなければならないロックステップ方式で動作するように構成されうる。また、ロックステップ方式で動作中は、クラスタ１５０ａ〜ｂ間ですべてのプロセッサ状態が同じでなければならず、Ｌ２キャッシュ１８０へのアクセスが実質的に同時に発生しなければならない。下で更に詳細に説明するように、ソフト論理エラーの伝達を阻止するために、これらの特性が使用されうる。
【００２１】
各クラスタ１５０内の実行ユニット１５４は、異なるタイプのオペレーションの同時実行をサポートすることができる。例えば、一実施形態では、実行ユニット１５４は、２つの並列ロード／ストアアドレス生成（ＡＧＵ）オペレーションと、２つの同時数値／論理演算（ＡＬＵ）オペレーションとをサポートし、クラスタ当たり合計４つの同時整数オペレーションをサポートすることができる。実行ユニット１５４は、整数の乗算、除算などの追加のオペレーションをサポートしてもよいが、各種実施形態では、クラスタ１５０は、スループットに対するスケジューリングの制約、ならびにこのような追加のオペレーションの他のＡＬＵ／ＡＧＵオペレーションとの同時実行を実装してもよい。また、各クラスタ１５０は、命令キャッシュ１１０と同様に、さまざまなキャッシュ構成のいずれかを使用して実装されうる独自のデータキャッシュ１５６を備えてもよい。データキャッシュ１５６が命令キャッシュ１１０とは異なる構造で編成されてもよい点に留意されたい。
【００２２】
図に示した実施形態では、クラスタ１５０とは異なり、ＦＰＵ１６０は異なるスレッドの浮動小数点演算を実行するように構成され、場合によってはこれらを同時に実行するように構成されうる。ＦＰＵ１６０は、クラスタスケジューラ１５２と同様に、オペレーションを受け取り、キューイングし、ＦＰ実行ユニット１６２内で実行するために発行するように構成されうるＦＰスケジューラ１６４を備えうる。また、ＦＰＵ１６０は、浮動小数点オペランドを管理するように構成された浮動小数点物理レジスタファイルを備えうる。ＦＰ実行ユニット１６４は、加算、乗算、除算、乗算累算などの各種の浮動小数点演算のほか、ＩＳＡによって定義されうる他の浮動小数点、マルチメディアまたはその他のオペレーションを実装するように構成されうる。各種実施形態では、ＦＰＵ１６０は、特定の異なる種類の浮動小数点演算の同時実行をサポートし、異なる精度（例えば、６４ビットオペランド、１２８ビットオペランドなど）もサポートすることができる。図に示すように、ＦＰＵ１６０はデータキャッシュを有さないが、代わりに、クラスタ１５０内部に設けられたデータキャッシュ１５６にアクセスするように構成されうる。一部の実施形態では、ＦＰＵ１６０は、浮動小数点のロード命令とストア命令を実行するように構成されうるが、別の実施形態では、ＦＰＵ１６０の代わりにクラスタ１５０が上記命令を実行してもよい。
【００２３】
前述のように、高信頼実行モードが選択された場合、ＤＥＣ１４０内部のディスパッチ論理（ロジック）は、スレッドがＦＰＵ１６０によって実行されるたびに、ＦＰＵ１６０に連続的に同じスレッドをディスパッチするように構成されうる。このため、下で更に詳細に説明するように、精度向上のために、連続する同じスレッド実行のそれぞれの結果が比較されうる。
【００２４】
命令キャッシュ１１０とデータキャッシュ１５６とは、コアインタフェースユニット１７０を介してＬ２キャッシュ１８０にアクセスするように構成されうる。一実施形態では、ＣＩＵ１７０は、システム内のコア１００と他のコア１００間のほか、外部システムメモリ、周辺機器などとの間でも一般的なインタフェースを提供しうる。一実施形態では、Ｌ２キャッシュ１８０は、任意の適切なキャッシュ構成を使用する一元的なキャッシュとして構成されうる。通常、Ｌ２キャッシュ１８０は、１次命令キャッシュおよびデータキャッシュよりも実質的に大容量である。
【００２５】
一部の実施形態では、コア１００は、ロードオペレーションとストアオペレーションを含むオペレーションのアウトオブオーダー実行をサポートすることができる。すなわち、クラスタ１５０とＦＰＵ１６０内でのオペレーションの実行の順序が、オペレーションに対応する命令の元のプログラムの順序と変わることがある。このように実行の順序を柔軟に設定できることにより、実行リソースをより効率的にスケジューリングできるようになり、全体的な実行パフォーマンスを向上させることができる。
【００２６】
また、コア１００は、各種の制御手法とデータ投機手法とを実装してもよい。前述のように、コア１００は、スレッドの実行制御の流れの進行方向を予測するために、各種の分岐予測手法と投機的プリフェッチ手法を実装しうる。このような制御投機手法は、一般に、命令が使用可能となるか、（例えば、分岐予測ミスのため）投機ミスが発生するかどうかが確定する前に、矛盾のないような命令の流れを与えようとする手法である。コア１００は、制御投機ミスが発生すると、投機ミスの経路に沿ってオペレーションとデータを廃棄し、実行制御を正しい経路に導くように構成されうる。例えば、一実施形態では、クラスタ１５０は、条件付きの分岐命令を実行して、分岐結果が予測された結果と一致するかどうかを判定するように構成されうる。一致しない場合、クラスタ１５０は、ＩＦＵ１２０に、正しい経路に沿ったフェッチを開始させるように構成されうる。
【００２７】
これとは別に、コア１００は、値の正誤が判明する前に、その後の実行で使用するデータ値を提供しようとする各種データ投機手法を実装しうる。例えば、セットアソシエティブキャッシュでは、データがキャッシュに存在する場合、キャッシュ内のどのウェイにデータが実際にヒットするかが判明する前に、データを、キャッシュの複数のウェイから取得することが可能である。一実施形態では、コア１００は、ウェイのヒット／ミス状態が判明する前に、キャッシュ結果を提供するために、命令キャッシュ１１０、データキャッシュ１５６および／またはＬ２キャッシュ１８０において、一種のデータ投機としてウェイ予測を実行するように構成されうる。データ投機の誤りが発生した場合、投機ミスとなったデータに依存するオペレーションが、「再生」すなわち再実行のために再発行されうる。例えば、ウェイ予測が外れたロードオペレーションが再生されうる。実施形態によっては、再実行時に、ロードオペレーションが、以前の投機ミスの結果に基づいて、再投機される（例えば、先に判定された正しいウェイを使用して投機される）か、あるいはデータ投機を行わずに実行されうる（例えば、結果の生成前に、ウェイのヒット／ミスチェックが終了まで実行の進行が許容される）。各種実施形態では、コア１００は、アドレス予測、アドレスまたはアドレスオペランドのパターンに基づくロード／ストア依存関係の検出、投機的なストア−ロード結果の転送、データコヒーレンスの投機、または他の適切な手法、あるいはその組み合わせなど、数多くの他の種類のデータ投機を実装してもよい。
【００２８】
各種実施形態では、プロセッサ実装は、ほかの構造と共に、１つの集積回路に一体化して形成されたコア１００を複数有してもよい。このようなプロセッサの一実施形態が図５に示される。
【００２９】
上で簡潔に記載したように、プロセッサコア１００は高信頼実行モードにおいて動作しうる。このモード中は、クラスタ１５０ａ〜ｂの各々の論理（ロジック）が、各クラスタが同じ命令ストリームを実行するロックステップ方式で動作するように構成されうる。エラーがない場合、すべてのステージにおいて、論理（ロジック）内の結果バスにおける結果が各クロックサイクルで等しくなければならない。このため、例えば、アルファ粒子の衝撃によって１つのクラスタの論理（ロジック）素子にエラーが発生した場合、所定のクロックサイクルにおける、影響を受けた論理（ロジック）素子の後の特定の位置で結果バスに出力される結果が、同じクロックサイクルにおける他のクラスタの対応する結果バスに出力される結果とは異なってしまう。
【００３０】
図１に示すように、各クラスタ１５０は、個々のシグニチャ生成部ユニット１５７と、個々の比較ユニット１５８とを備える。一実施形態では、動作中に、各ステージからの結果が結果バス上に生成されると、シグニチャ生成ユニット１５７ａ，１５７ｂは、個々の結果バス信号からシグニチャを生成するように構成されうる。比較ユニット１５８ａ，１５８ｂは、比較対象のシグニチャを比較し、一致しない場合にはＣＩＵ１７０に通知するように構成されうる。ＣＩＵ１７０は、２つのクラスタ内の問題のある命令を、２つのクラスタ１５０の実行パイプラインからフラッシュさせ、再実行させるように構成されうる。一実施形態では、ＣＩＵ１７０は、不一致が通知されるとマシンチェックフォルトを発生させうる。
【００３１】
各種実施形態では、どのようなタイプのシグニチャまたは圧縮を使用して、結果のシグニチャを生成してもよい。結果のシグニチャまたはハッシュを作成するためのシグニチャまたは圧縮手法により、各クラスタおよびＦＰＵ１６０内部の比較ユニットに結線させるワイヤの本数を削減することができる。生成されるシグニチャが元の信号を表す可能性が高ければ、そのシグニチャは適切である。しかし、一実施形態では、効率的ではないものの、圧縮が行われず、すべての結果信号が比較されてもよいことが考察される。
【００３２】
また、前述のように、２つのクラスタ１５０の実行論理（ロジック）が、Ｌ２キャッシュ１８０に実質的に同時にアクセスしなければならない。このため、ＣＩＵ１７０内部の比較ユニット１７１は、Ｌ２アクセスが発生したタイミングをチェックし、Ｌ２アクセスが実質的に同時に発生しなかった場合は、ＣＩＵ１７０が、上記のように２つのクラスタ中の問題のある命令をフラッシュさせ、再実行させるように構成されうる。
【００３３】
同様に、一方のクラスタで分岐ミス予測が発生した場合、これが他方のクラスタでも発生しなければならない。このため、ＣＩＵ１７０内部の比較ユニット１７１は、２つのクラスタ間のミス予測状態をチェックするようにも構成されうる。
【００３４】
前述のように、共有リソースであるＦＰＵ１６０は、同じスレッドまたは浮動小数点命令ストリームを、同じ論理（ロジック）で連続して２回実行しうる。一実施形態では、上記のシグニチャ生成部と同様に、シグニチャ生成部１５７ｃは、それぞれのスレッド実行の結果からシグニチャを生成するように構成されうる。ＦＰＵ１６０内部の「ＦＰ比較１６３」として示す比較ユニットは、各ストリームの実行結果がＦＰＵ１６０から出力されてリタイヤメントキューに記憶される前に、この結果を比較して、不一致が検出された場合に、ＣＩＵ１７０に不一致を通知するように構成されうる。上記のように、ＣＩＵ１７０は、結果をフラッシュして、スレッドを２回再実行させうる。
【００３５】
このため、上記の論理エラー保護は、クラスタ１５０内では「クラスタレベル空間冗長性」、ＦＰＵ１７０内では「スレッドレベル時間冗長性」と呼ぶことができる。図２に示すように、シグニチャの生成と結果の比較は、命令の実行と並列に、命令がリタイヤメントキュー（図２に示す）に記憶される前に行われる。したがって、命令がリタイヤまたは恒久的にコミットされる前に、エラーを検出することができ、これによりトランスペアレントなエラー回復が可能となる。また、比較が命令の実行と並列に行われるため、比較がクリティカルパスとならない。従来のチップレベルの冗長方式では、チェックされる結果がリタイヤメントキューから取得されるため、クリティカルパスとなる。また、残りのメモリ、レジスタおよび他のシステム論理（ロジック）を保護するために、必要に応じてＥＤＣ／ＥＣＣ論理（ロジック）およびコードを使用してもよい。このため、空間冗長性、時間冗長性、およびＥＤＣ／ＥＣＣエラー保護冗長性の組み合わせにより、論理エラーから保護するためのハイブリッド冗長装置が得られる。
【００３６】
図２を参照すると、プロセッサコア論理（ロジック）のエラー保護の一実施形態のアーキテクチャブロック図が示される。図１に示した構成要素に対応する構成要素は、簡潔を期するために同じ符号を付している。簡潔を期するために、各種構成要素が図２から省略されている。プロセッサコア１００は、命令キャッシュと、命令フェッチおよびデコード論理（ロジック）とを有し、これらは、図２ではまとめて参照符号２１０で示されている。また、図１のように、プロセッサコア１００は、デコードユニット２１０に結合された、整数実行クラスタ１５０と、「ＦＰユニット１６０」として示す浮動小数点ユニットとを有する。また、プロセッサコア１００は、個々の結果バスを介して、クラスタ１５０とＦＰユニット１６０とに結合されたリタイヤメントキュー２９０も有する。結果バスはシグニチャ生成部２６５にも結合され、シグニチャ生成部２６５は比較ユニット２７５に結合されている。また、シグニチャ生成部２６５は、プロセッサ状態情報２９５を受け取るように結合されている。
【００３７】
図に示した実施形態では、シグニチャ生成部２６５は、１つのユニットとして図示されている。しかし、シグニチャ生成部２６５が分散された機能でもよく、図１に示し、上で説明したように、複数のシグニチャ生成ブロックが存在してもよい。
【００３８】
図に示した実施形態では、シグニチャ生成部２６５は、結果が各結果バスに出力されたときに、リタイヤメントキュー２９０に記憶される前に、結果のシグニチャまたはハッシュを生成するように構成される。このため、前述のように、エラー検査をクリティカルパス外で行うことができる。
【００３９】
また、一実施形態では、生成された各シグニチャに、ＥＦＬＡＧＳレジスタ値、レジスタファイルのパリティエラー状態、外部割込などを含むプロセッサ状態情報が含まれうる。シグニチャは、図１の説明で前述したように、比較のために比較ユニット２７５に送信されうる。プロセッサ状態情報をチェックすることにより、プロセッサの状態に関連するが、結果には現れない潜在的な問題を検出することができる。
【００４０】
図に示した実施形態では、リタイヤメントキュー２９０は、ＥＣＣ論理（ロジック）２９１によって保護されている。このため、チェックされた結果がリタイヤメントキュー２９０に記憶されると、その結果が、パリティまたは他のタイプのエラー検出／訂正符号によってソフトエラーから保護されるようになる。
【００４１】
図３に、図１，図２のプロセッサの実施形態の動作を示すフローチャートが示される。図１〜図３をまとめて参照し、図３のブロック３００から参照すると、プロセッサコア１００が高信頼実行モードで動作中であり、命令をフェッチする。前述のように、ＤＥＣ１４０は、クラスタ１５０ａと１５０ｂに同じ整数命令を実質的に同時にディスパッチする（ブロック３０５）。クラスタ１５０は、高信頼実行モードでは、ロックステップ方式で動作するように構成されている（ブロック３１０）。各種パイプラインステージの結果が利用可能になると、各クラスタにおいて、これらの結果に対応する信号が互いに比較される。より詳細には、各クラスタは、所定のステージにおける自身の結果に対応する信号を、そのステージにおける他のクラスタからの結果に対応する信号と比較しうる。クラスタ１５０はロックステップ方式で動作中であるため、結果が同じでなければならない。前述のように、信号を比較する前に、結果信号が、何らかの方法でシグニチャまたはハッシュに圧縮されうる。いずれかの比較ユニット１５８が不一致を検出した場合（ブロック３２０）、比較ユニット１５８はＣＩＵ１７０に通知し、ＣＩＵ１７０はマシンチェックフォルトまたは別のタイプのフォルトを発生させて、命令を２つのクラスタからフラッシュさせ（ブロック３２５）再実行させる（ブロック３３０）。ブロック３０５の説明に関連して上で説明したように動作が続けられる。
【００４２】
ブロック３２０を再び参照すると、不一致が検出されない場合、結果がリタイヤメントキュー２９０に書き込まれうる（ブロック３５０）。なお、別の実施形態では、ほかのステージからの追加の結果がチェックされてもよい。このような実施形態では、各ステージについて、結果に対応する信号が不一致となるかどうかがチェックされ、不一致が発見された場合、命令がフラッシュされ、再実行されうる。しかし、不一致が検出されない場合、結果がリタイヤメントキュー２９０に書き込まれるか記憶されうる。
【００４３】
ブロック３００を再び参照すると、フェッチされた命令が浮動小数点命令の場合、ＤＥＣ１４０は命令ストリームを含む浮動小数点スレッドをＦＰＵ１６０にディスパッチしうる（ブロック３５５）。例えば、スレッド実行の結果（または結果に対応する信号）が、ＦＰ比較ユニット１６３（ブロック３６０）内部に保持される。また、高信頼実行モードで動作中に、ＤＥＣ１４０は、実行されたばかりの同じ浮動小数点命令ストリームをＦＰＵ１６０にディスパッチする（ブロック３６５）。ＦＰ比較ユニット１６３は、現在のスレッド実行の結果を、前回のスレッド実行の結果と比較する（ブロック３７０）。
【００４４】
不一致のない場合（ブロック３７５）、結果がＦＰＵ１６０から解放され、リタイヤメントキュー２９０に記憶される。しかし、ＦＰ比較ユニットが不一致を検出した場合（ブロック３７５）、スレッドの浮動小数点命令がフラッシュされ（ブロック３８０）、再度２回再実行される（ブロック３８５）。ブロック３５５の説明に関連して上で説明したように動作が続けられる。
【００４５】
前述のように、比較の結果を伝達するのに必要なワイヤの本数を削減するために、結果信号のシグニチャまたはハッシュが使用されうる。このため、この機能を実行するために、図１のシグニチャ生成部ブロック１５７と図２のシグニチャ生成部２６５が使用されうる。また、従来のシステムの多くとは異なり、図１〜図４に示したシグニチャの生成とその後の比較とを、処理と並列に（すなわち、結果が利用可能となったときに）実行することができる。このため、シグニチャの生成と比較を、処理のクリティカルパスから除くことができる。図４は、図１，図２のプロセッサコア１００の別の実施形態の動作を示すフローチャートである。より詳細には、図４に示す動作は、図３に示す動作と同様である。しかし、図４に示す動作は、追加のステップを含む。このため、明瞭を期するために、図３に示したものとは異なる動作のみを以下に説明する。
【００４６】
図１〜図４をまとめて参照し、図４のブロック４１０から参照すると、プロセッサコア１００が高信頼実行モードで動作中に、整数命令をフェッチして、各クラスタ１５０に同じ整数命令をディスパッチしている。各クラスタは、ロックステップ方式で命令を実行する。各クラスタの結果バス上の１つ以上の選択された位置において、結果バス信号が取得される。結果が利用可能になると、シグニチャ生成部（例えば、１５７ａ，１５７ｂ，２６５）は、前述のように結果およびプロセッサ状態のシグニチャまたはハッシュを生成する（ブロック４１５）。生成されたシグニチャが他のクラスタへ送られ、各クラスタは、自身のシグニチャを、他のクラスタから受信したシグニチャと比較する（ブロック４２０）。シグニチャの生成とその後の比較は、命令実行と並列に行われる。比較の結果に応じて、結果がリタイヤメントキュー２９０に記憶されるか、あるいは命令がフラッシュされて再実行されうる（ブロック４２５〜４４０）。
【００４７】
ブロック４５５を参照すると、図３のブロック３５５の説明で上記したように、ＤＥＣ１４０は、浮動小数点命令スレッドをＦＰＵ１６０にディスパッチしうる。シグニチャ生成部１５７ｃは、浮動小数点命令ストリームの実行の結果から、シグニチャを生成する（ブロック４６０）。一実施形態では、結果がＦＰ比較ユニット１６３に保持される。前述のように、ＤＥＣ１４０は、実行されたばかりの同じ浮動小数点命令ストリームをＦＰＵ１６０にディスパッチする（ブロック４６５）。シグニチャ生成部１５７ｃは、浮動小数点命令ストリームの２回目の実行の結果から、シグニチャを生成する（ブロック４７０）。ＦＰ比較ユニット１６３は、現在のスレッド実行の結果を、保持している前回のスレッド実行の結果と比較する（ブロック４７５）。比較の結果に応じて、結果がリタイヤメントキュー２９０に記憶されるか、あるいはスレッド中の命令がフラッシュされて再実行されうる（ブロック４８０〜４９５）。
【００４８】
図５を参照すると、プロセッサ５００は、それぞれが前述のように構成されうる４つのコア１００ａ〜ｄを有する。図に示した実施形態では、各コア１００は、システムインタフェースユニット（ＳＩＵ）５１０を介して、Ｌ３キャッシュ５２０、およびメモリコントローラ／周辺機器インタフェースユニット（ＭＣＵ）５３０に結合されうる。図に示した実施形態では、高信頼実行モードセレクトピンが、ＳＩＵ５１０と結合されうる。しかし、別の実施形態では、ピンが他のブロックと接続されてもよいと考えられる。一実施形態では、Ｌ３キャッシュ５２０は、任意の適切な構成を使用して実装され、コア１００のＬ２キャッシュ１８０と、比較的低速のシステムメモリ５４０との間の中間キャッシュとして動作する一元的なキャッシュとして構成されうる。
【００４９】
ＭＣＵ５３０は、プロセッサ５００をシステムメモリ２４０と直接インタフェースするように構成されうる。例えば、ＭＣＵ５３０は、１種類以上の種類の異なるランダムアクセスメモリ（ＲＡＭ）をサポートするために必要な信号を生成するように構成され、このようなＲＡＭには、デュアルデータレートシンクロナスダイナミックＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、ＤＤＲ−２  ＳＤＲＡＭ、フルバッファデュアルインラインメモリ（ＦＢ−ＤＩＭＭ）、あるいはシステムメモリ５４０を実装するために使用されうる別の適切なタイプのメモリが挙げられる。システムメモリ５４０は、プロセッサ５００の各種コア１００によって操作されうる命令およびデータを保存するように構成され、システムメモリ５４０の内容が、上で説明した各種キャッシュによってキャッシュされうる。
【００５０】
また、ＭＣＵ５３０は、プロセッサ５００への他のタイプのインタフェースもサポートすることができる。例えば、ＭＣＵ５３０は、プロセッサ５００を、グラフィック処理サブシステム（別個のグラフィックプロセッサ、グラフィックメモリおよび／または他のコンポーネントなどを含む）にインタフェースするために使用されうるアクセラレィティッド／アドバンスドグラフィックスポート（ＡＧＰ）インタフェースの一種などの専用のグラフィックプロセッサインタフェースを実装しうる。また、ＭＣＵ５３０は、１種類以上の周辺機器インタフェース（例えば、ＰＣＩ  Ｅｘｐｒｅｓｓバス規格の一種）を実装するように構成され、プロセッサ５００は、このインタフェースを使用して、ストレージデバイス、グラフィックデバイス、ネットワークデバイスなどの周辺機器とインタフェースすることができる。一部の実施形態では、他の種類のバスまたは相互接続を介して、プロセッサ５００を他の周辺機器に結合するために、プロセッサ５００の外部のセカンダリバスブリッジ（例えば、「サウスブリッジ」）が使用されうる。メモリコントローラと周辺機器インタフェースの機能が、ＭＣＵ５３０を介してプロセッサ５００内に統合されて図示されているが、別の実施形態では、これらの機能が、従来の「ノースブリッジ」構成を介してプロセッサ５００の外部に実装されてもよい点に留意されたい。例えば、ＭＣＵ５３０の各種機能が、プロセッサ５００内に一体化されるのではなく、別個のチップセットを介して実装されてもよい。
【００５１】
上の実施形態についてかなり詳細に記載したが、上記の開示を完全に理解できれば、数多くの変形例および変更例が当業者にとって明らかであろう。下記の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
【産業上の利用可能性】
【００５２】
本発明は、一般にプロセッサに利用可能である。
【図１】
2011509490.tif 000003
【図２】
2011509490.tif 000004
【図３】
2011509490.tif 000005
【図４】
2011509490.tif 000006
【図５】
2011509490.tif 000007
【国際調査報告】
2011509490.tif 000008
2011509490.tif 000009
2011509490.tif 000010