(57)【特許請求の範囲】
【請求項１】
コンピュータプログラムの命令を格納するように構成されたキャッシュと、機能ユニットのＭ（Ｍは正の整数）個のコピーを含むプロセッサであって、各コピーは複数のスレッドのうち２つ以上のスレッドに対応する、プロセッサとを備えたシステムであって、
前記プロセッサが、
前記命令の元の命令を受信し、
前記元の命令が第１の命令タイプに相当すると判断すると、前記元の命令を複製して前記元の命令のコピーを作成し、
前記元の命令が、１つのソースオペランドのみを有する単項命令タイプであって前記第１の命令タイプとは異なる命令タイプである第２の命令タイプに相当すると判断すると、前記元の命令の複製に先行して、前記第２の命令タイプの前記元の命令を、２つのソースオペランドを有する二項命令タイプに変換し、
前記２つのソースオペランドのうち１つのソースオペランドが第１のスレッドから準備済みであり、かつ前記２つのソースオペランドのうち１つのソースオペランドが前記複数のスレッドのうち他の少なくとも１つのスレッドから準備済みであると判断すると、第１機能ユニットによって変換された前記第２の命令タイプの前記元の命令を実行するように構成されている、システム。
【請求項２】
前記第２の命令タイプの前記元の命令の実行に応じて、前記プロセッサが、前記第１機能ユニットからの１つの結果を、前記第１のスレッドに対応する第２機能ユニットと、前記複数のスレッドの別のスレッドに対応する第３機能ユニットとに伝えるようにさらに構成されている、請求項１に記載のシステム。
【請求項３】
前記命令の元の命令が第１の命令タイプに相当すると判断することに応じて、前記プロセッサが、前記元の命令を前記複数のスレッドの内の前記第１のスレッドに割り当て、前記元の命令のコピーを前記第１のスレッドとは異なる少なくとも１つのスレッドに割り当てるようにさらに構成されている、請求項２に記載のシステム。
【請求項４】
前記第２の命令タイプの前記元の命令の実行および各ソースオペランドが準備済みであると判断することに応じて、前記プロセッサが、前記各ソースオペランドの値を相互に比較するようにさらに構成されている、請求項２に記載のシステム。
【請求項５】
前記プロセッサが、前記第１の命令タイプの前記元の命令の結果と、前記元の命令の少なくとも１つのコピーの結果とを比較するようにさらに構成されている、請求項４に記載のシステム。
【請求項６】
前記結果の比較および前記ソースオペランドの比較のうちの１つ以上から不一致を検出することに応じて、前記プロセッサが、エラー情報を伝えるようにさらに構成されている、請求項５に記載のシステム。
【請求項７】
前記第１機能ユニットが浮動小数点ユニットであり、前記第２機能ユニットが整数実行ユニットである、請求項６に記載のシステム。
【請求項８】
前記第２の命令タイプが浮動小数点ストア命令および浮動小数点整数転送命令のうちの１つ以上である請求項７に記載のシステム。
【請求項９】
プロセッサが、
命令の元の命令が第１の命令タイプに相当すると判断すると、複数の命令のうち前記元の命令を複製して前記元の命令のコピーを作成するステップと、
前記元の命令が、１つのソースオペランドのみを有する単項命令タイプであって、第１の機能ユニットによって実行される命令タイプであって、前記第１の命令タイプとは異なる命令タイプである第２の命令タイプに相当すると判断すると、前記命令の前記元の命令の複製に先行して、前記第２の命令タイプの前記元の命令を、１つのソースオペランドのみを有する単項命令タイプから２つのソースオペランドを有する二項命令タイプに変換するステップと、
前記２つのソースオペランドのうち１つのソースオペランドが第１のスレッドから準備済みであり、かつ前記２つのソースオペランドのうち１つのソースオペランドが複数のスレッドのうち他の少なくとも１つのスレッドから準備済みであると判断すると、第１機能ユニットによって変換された前記第２の命令タイプの前記元の命令を実行するステップとを備え、
前記第１機能ユニットのＭ（Ｍは正の整数）個のコピーが存在し、各コピーは、前記複数のスレッドのうち２つ以上のスレッドに対応し、
前記各ソースオペランドが前記元の命令と同じレジスタ番号で規定されることを特徴とする、方法。
【請求項１０】
前記第２の命令タイプの前記元の命令の実行に応じて、前記第１のスレッドに対応する第２機能ユニットと、前記複数のスレッドの別のスレッドに対応する少なくとも１つの他の第２機能ユニットとに、１つの第１機能ユニットから１つの結果を伝えるステップを更に備え、
前記第２機能ユニットは、Ｍより大きい整数であるＮ個のコピーがあり、その各コピーは前記複数のスレッドのうちのそれぞれ異なるスレッドに対応する、請求項９に記載の方法。
【請求項１１】
前記元の命令が前記第１の命令タイプに相当することに応じて、前記元の命令を前記複数のスレッドの内の前記第１のスレッドに割り当てるステップと、前記元の命令のコピーを前記第１のスレッドとは異なる少なくとも１つのスレッドに割り当てるステップとを更に備えた、請求項１０に記載の方法。
【請求項１２】
前記第２の命令タイプの前記元の命令の実行および各ソースオペランドが準備済みであることに応じて、前記各ソースオペランドの値を相互に比較するステップを更に備えた、請求項１０に記載の方法。
【請求項１３】
前記第１の命令タイプの前記元の命令の結果と前記元の命令の少なくとも１つのコピーの結果とを比較するステップを更に備え、
前記結果は同じパイプラインステージで計算される、請求項１２に記載の方法。
【請求項１４】
前記結果の比較および前記ソースオペランドの比較の内の１つ以上からの不一致の検出に応じてエラー情報を伝えるステップを更に備えた、請求項１３に記載の方法。
【請求項１５】
前記第１機能ユニットが浮動小数点ユニット（ＦＰＵ）であり、前記第２機能ユニットが整数実行ユニットである、請求項１４に記載の方法。
【請求項１６】
前記第２の命令タイプが浮動小数点ストア命令および浮動小数点整数転送命令のうちの１つ以上である、請求項１５に記載の方法。
【請求項１７】
命令フェッチユニット、キャッシュ、およびそれぞれが複数のスレッドの内の１つの異なるスレッドに対応する２つ以上の整数実行クラスタ（ＩＥＣ）と通信するよう構成されたインターフェースと、ストレージユニットと、回路とを備えた浮動小数点（ＦＰ）コプロセッサであって、
前記回路が、
元の命令が第１の命令タイプに相当すると判断すると、前記元の命令を複製して前記元の命令のコピーを作成し、
前記元の命令が、１つのソースオペランドのみを有する単項命令タイプであって前記第１の命令タイプとは異なる命令タイプである第２の命令タイプに相当すると判断すると、前記元の命令の複製に先行して、前記第２の命令タイプの前記元の命令を、２つのソースオペランドを有する二項命令タイプに変換し、
前記２つのソースオペランドのうち１つのソースオペランドが第１のスレッドから準備済みであり、かつ前記２つのソースオペランドのうち１つのソースオペランドが前記複数のスレッドのうち他の少なくとも１つのスレッドから準備済みであると判断すると、第１機能ユニットによって変換された前記第２の命令タイプの前記元の命令を実行するように構成されている、ＦＰコプロセッサ。
【請求項１８】
前記第２の命令タイプの前記元の命令の実行に応じて、前記回路が、前記第１のスレッドに対応するＩＥＣと、前記複数のスレッドの別のスレッドに対応する少なくとも１つの他のＩＥＣとに、１つの第１機能ユニットから１つの結果を伝えるように更に構成されており、
前記ＩＥＣは、Ｍ（Ｍは正の整数）より大きい整数であるＮ個のコピーがあり、その各コピーは前記複数のスレッドのうちのそれぞれ異なるスレッドに対応する、請求項１７に記載のＦＰコプロセッサ。
【請求項１９】
命令の元の命令が第１の命令タイプに相当すると判断することに応じて、前記回路が、前記元の命令を前記複数のスレッドの内の前記第１のスレッドに割り当て、前記元の命令のコピーを前記第１のスレッドとは異なる少なくとも１つのスレッドに割り当てるように構成されている、請求項１８に記載のＦＰコプロセッサ。
【請求項２０】
前記第２の命令タイプの前記元の命令の実行および各ソースオペランドが準備済みであることに応じて、前記回路が、前記各ソースオペランドの値を相互に比較するように構成されている、請求項１８に記載のＦＰコプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算システムに関し、より詳細には同時マルチスレッディングマシーンでの効率的な信頼性の高い実行に関する。
【背景技術】
【０００２】
ミッションクリティカルなソフトウェアアプリケーションは高い信頼性を要する。これらのアプリケーションの幾つかの例には財務ならびに銀行ソフトウェア、データベース、および軍事用アプリケーションが含まれる。ソフトウェア試験方法は、ソフトウェアアプリケーションを既定の品質レベルに対して確認し検証するために使用される。しかし、マイクロプロセッサなどのアプリケーションを実行するためのハードウェアプラットフォームに起因して問題が生じる場合がある。マイクロプロセッサはソフトウェアアプリケーションと同様に、既定の品質要件に適合するよう試験済みであったかもしれないが、初期状態などの入力と前提条件のすべての組合せでの試験は実行可能ではない。さらに、機能的エラーの他に、現代のマイクロプロセッサは縮退故障などのハードエラーおよびストレージノードへの放射線誘起エラーなどのソフトエラーの両方に遭遇する可能性がある。
【０００３】
次世代の新しいプロセッサと共に時間経過によってノード容量と供給電圧が小さくなり、ノードに蓄積される電荷量は減少する。この事実により、宇宙線、アルファ粒子、および中性子などの高エネルギー粒子に起因する放射線誘起ソフトエラーにノードはより敏感となる。この放射線はトランジスタのソースおよびドレイン領域に少数キャリアを生成し、ソースおよびドレインダイオードによって転送される。総電荷に比較してノードに蓄積される電荷の変化は、各世代と共に減少して、十分に大きい割合になり、回路のノイズマージンを超えてノードの蓄積状態を変化させる可能性がある。回路はこの放射線によって恒久的には破壊されないが、ロジック障害が起る可能性がある。
【０００４】
上述の理由により、スタティックランダムアクセスメモリ（ＳＲＡＭ）などのメモリは誤り訂正符号（ＥＣＣ）を使用してソフトエラーの検出と訂正を行う。フリップフロップなどの逐次素子はソフトエラーに対処するために、その設計の中により大きい電気容量のノードまたは冗長ラッチを使用することができる。しかし、整数および浮動小数点機能ユニットなどの組合せロジック内のノードもソフトエラーに対して敏感である。したがって、機能エラーおよびハードエラーに対して保護される試験は組合せロジックによりソフトエラーに対して安全であることが立証されていないため、ミッションクリティカルなアプリケーションに対して受け入れられない場合がある。
【０００５】
エラーが機能障害、ハードエラー、またはソフトエラーのいずれによるかに関係なく、ミッションクリティカルなアプリケーションはエラーの発生に対する許容度が小さい可能性があり、特定のデータセットでの繰返し実行を許容しない可能性がある。特定のハードウェアでのアプリケーションの正しい演算を保証してエラーを検出するために、このアプリケーションの２つの並列実行をチェックポイントで動作させることができる。各チェックポイントでは、同じであるはずの各実行の結果として生じるデータの比較を実行することができる。このようにして同時実行がロックステップで動作する。そして、チェックポイントにおける比較によって検出される差によってエラーが表示される可能性がある。同時実行の演算によって前の成功したチェックポイントに両実行をロールバックすることができ、並列実行をこのチェックポイントから再動作させることができる。また、フラグまたは警告をユーザーに通知することができる。ユーザーは問題が生じるチェックポイントで差が再び発見されるかを確認するために再実行を決定するか、または結果として生じるデータの差が決定されるタイミングでアプリケーションのデバッグを決定することができる。
【０００６】
しかし、効率的な並列ロックステップの実行は困難な場合がある。例えば、各マイクロプロセッサが同時にアプリケーションのコピーを実行して他のマイクロプロセッサと同時に実行を開始するような２つのマイクロプロセッサを使用することは等しくないダイレクトメモリアクセス（ＤＭＡ）時間また等しくないリフレッシュ演算などの理由によりロックステップ実行を提供しない可能性がある。したがって、ハードウェアと機能ユニットのコピーを持つ１つのマイクロプロセッサを使用することがより有利である可能性がある。
【０００７】
多くの最新のマイクロプロセッサはマルチスレッディング演算の実装のためにコアのコピーを使用し、その場合に各コアは別のコアと同時に別のソフトウェアスレッドで独立に演算することができる。
【０００８】
ミッションクリティカルなアプリケーションのロックステップの実行を実現する１つの方法は、マイクロプロセッサ内のコアの２つのコピーで同時にアプリケーションとアプリケーションのコピーを実行することである。各コアが、最初のコアに元の命令で２番目のコアにその命令のツインコピーのように、各コアが同じ命令を受け取り、各クロックサイクルで適切なデータの比較を実行することができる。したがって、ミッションクリティカルなアプリケーションのロックステップの実行が達成可能である。
【０００９】
しかし、異なった要素がこのロックステップの実行を遮る可能性がある。例えば、マイクロプロセッサ内でマルチスレッディング演算を実現するためにすべてのハードウェアリソースをコピーすることはできない。浮動小数点ユニット（ＦＰＵ）はダイ上の多くの場所を消費する複雑なロジックを含む。また、ＦＰＵ演算は頻繁には実行されない。したがって設計者はダイ上に浮動小数点ロジックの不経済なコピーを独立して作成するよう動機づけられない。さらに、ＦＰＵに対するマルチスレッディング演算およびおそらく他のダイ上のハードウェアリソースが、同時マルチスレッディング（ＳＭＴ）によって達成可能である。
【００１０】
マルチスレッディングと同様に、ＳＭＴでは１つを超えるスレッドからの命令が同時に所定のパイプライン段で実行可能でメモリの潜在を隠して使用することが可能で、使用するハードウェアの量に従い計算スループットを増加させることができる。しかし、ＳＭＴは構成状態を格納する部分などプロセッサのある部分を複製して動作するが、メインの実行リソースの複製はしない。このことによりＳＭＴを備えたプロセッサはホストのオペレーティングシステムに対して２つの「論理的」プロセッサとして見えるように装うことができる。オペレーティングシステムは２つ以上のスレッドまたはプロセスを同時にスケジュール可能である。ＳＭＴ不可能プロセッサにおける実行リソースが現在のスレッドによって使用されない場合、特にプロセッサがキャッシュのミス、分岐の予測ミス、またはその他によって停止する場合、ＳＭＴを備えたプロセッサはそれらの実行リソースを使用して他のスケジュールされたスレッドを実行することができる。
【００１１】
ＦＰＵなどのＳＭＴハードウェアは２つのスレッド演算をロックステップで実行しない。したがって、２つの独立した整数クラスタのコピーなどのハードウェアコピーとの通信は２つの整数クラスタ内でロックステップの実行を妨害する。さらに、マイクロプロセッサが信頼できる実行モードで演算していない場合に、その性能を低下させないために、スケジューラやリネームロジックを変更したり、ＦＰＵからのロックステップでない受信信号を同期させるために整数クラスタ間で信号を配信したりすることは望ましくない。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上記に鑑み、同時マルチスレッディングマシーンで効率的で信頼性の高い実行のための効率的な方法と仕組みを提供する。
【課題を解決するための手段】
【００１３】
同時マルチスレッディングマシーンでの効率的な信頼性の高い実行のためのシステムと方法が考察されている。１つの実施形態では、コンピュータシステムはキャッシュとプロセッサで構成して提供される。プロセッサは同時マルチスレッド（ＳＭＴ）浮動小数点ユニット（ＦＰＵ）および複数インスタンス化整数独立クラスタで構成することができ、ここで各クラスタは異なったストランドまたはハードウェアスレッドに対応する。信頼性の高い実行モード（ＲＥＭ）ではプロセッサは２つのスレッドでのみ演算するよう構成可能である。ミッションクリティカルなソフトウェアアプリケーションの命令はプロセッサで実行可能である。ＦＰＵから整数クラスタに通信する浮動小数点外部演算でない各命令は複製される。元の命令は第１のスレッドに割り当てられる。ツインコピー命令は第２のスレッドに割り当てられる。
【００１４】
プロセッサのフロントエンドおよび整数クラスタはロックステップの方法で２つのスレッドのこれらの命令を実行することができる。２つの結果の比較を含むチェックポイントは設計要件に依存して実行の中止または完了時点で生じる場合がある。不一致の場合はユーザーが検査するためにプロセッサがエラー情報をキャッシュ内の既定の場所に伝えることができる。
【００１５】
ＦＰＵから整数クラスタに伝える浮動小数点外部演算の各命令は新しい命令に変換される。通常は、浮動小数点外部演算は浮動小数点ストア命令や浮動小数点整数転送命令のような単項命令である。そのような命令は、２つのスレッドがＲＥＭ演算の間に演算するような場合に、二項命令に変換される。２つのソースオペランドは演算スレッドの各々に対応し、第１の命令の単一ソースオペランドとして同じ論理レジスタ番号によって指定される。
【００１６】
この新しい命令の実行中に、ＦＰＵは両方のオペランドが準備済みになる間待機する必要があり、それは浮動小数点スケジューラの通常演算である。２つのソースオペランドの比較によって一致が決定されなければならない。不一致が発見されると、前述のように、ユーザーが検査するためにプロセッサはエラー情報をキャッシュの既定の場所に伝える。所望の設計に応じてストアまたは整数転送演算はなお進行中かまたは実行を停止している可能性がある。一致が生じると、ＦＰＵは同時に結果を整数クラスタに伝える。したがって、浮動小数点演算は非同期で実行される場合があるが、ＦＰＵから整数クラスタへの通信は同期演算で提供される。プロセッサはロックステップの方法で実行を継続する。
【００１７】
別の実施形態として、複数のインスタンス化整数独立クラスタと同様に命令フェッチユニットから命令を受け取るＳＭＴ＿ＦＰＵが提供される。ＦＰＵ内のロジックはプロセッサがＲＥＭモード演算に置かれると上述のすべてのステップを実行するよう構成される。
【図面の簡単な説明】
【００１８】
本発明はさまざまな変更および代替形式の影響を受けやすいが、図の例によって特定の実施形態を示し、詳細にここで説明する。しかし、図および詳細説明は発明を特定の閉じられた形式に限定する意図はなく、反対に発明は付録の請求項によって定義される本発明の精神および範囲内のすべての変更、等価および代替をカバーするものである。
【００１９】
【図１】図１は代表的なマイクロプロセッサの１つの実施形態を図示した一般的なブロック図である。
【００２０】
【図２】図２は順序のない実行を行う汎用プロセッサコアの１つの実施形態を示す一般的なブロック図である。
【００２１】
【図３Ａ】図３Ａは同時マルチスレッディングプロセッサでの効率的な信頼性の高い実行のための１つの実施形態の流れ図である。
【００２２】
【図３Ｂ】図３Ｂは同時マルチスレッディングプロセッサでの効率的な信頼性の高い実行のための１つの実施形態の流れ図である。
【発明を実施するための形態】
【００２３】
以下の説明において、多くの特定の詳細を示し本発明の完全な理解を提供する。しかし、技能面で一般的なレベルの者はこれらの特定の詳細なしで発明を実施可能であることを認識されたい。幾つかの例では、良く知られた回路、構造、および技術は本発明を曖昧にすることを避けるために詳細を示していない。
【００２４】
図１を参照すると、典型的なマイクロプロセッサ１００の１つの実施形態が示されている。マイクロプロセッサ１００はメモリコントローラ１２０、インターフェースロジック１４０、１つ以上のプロセッサコア１１２と対応するキャッシュメモリサブシステム１１４を含むことができる１つ以上の処理ユニット１１５、クロスバー相互接続ロジック１１６、および共有キャッシュメモリサブシステム１１８を含むことができる。１つの実施形態ではマイクロプロセッサ１００の図示された機能は単一集積回路上にまとめられる。
【００２５】
インターフェース１４０は一般的にマイクロプロセッサ１００の外の入力／出力（Ｉ／Ｏ）デバイスの共有キャッシュメモリサブシステム１１８および処理ユニット１１５に対するインターフェースを提供する。ここで使用されているように、数字とその後の文字で参照される要素は数字のみで総称として参照可能である。例えば、処理ユニット１１５ａ〜１１５ｂはまとめて処理ユニット１１５またはユニット１１５と言う。Ｉ／Ｏデバイスはプリンタ、キーボード、モニタ、カメラ、カードリーダー、ハードまたはフロッピー（登録商標）ディスクドライブまたはドライブコントローラ、ネットワークインターフェースカード、ビデオアクセロレータ、オーディオカード、モデム、汎用インターフェースバス（ＧＰＩＢ）またはフィールドバスインターフェースカード、またはその他のさまざまなデータ収集カードなどのペリフェラルネットワークデバイスを含むことができる。さらに、インターフェース１４０は他のマイクロプロセッサおよび／あるいは他の処理ノードとの通信に使用可能である。一般的にインターフェースロジック１４０は対応するリンクからのパケットの受け取り用および対応するリンクに送出するパケットをバッファするバッファで構成することができる。適切なフローコントロール方式をマイクロプロセッサ１００との間でのパケットの伝達に使用可能である。
【００２６】
マイクロプロセッサ１００は個別のメモリコントローラ１２０経由で個別のメモリに結合可能である。メモリは適切なメモリデバイスで構成することができる。例えば、メモリは１つ以上のＲＡＭＢＵＳダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＤＲＡＭ、スタティックＲＡＭなどで構成可能である。マイクロプロセッサ１００のアドレス空間は複数のメモリに分割可能である。各マイクロプロセッサ１００またはマイクロプロセッサ１００を構成する個別の処理ノードはいずれのアドレスがいずれのメモリに割り当てられるかおよびいずれのマイクロプロセッサ１００または処理ノードに対して特定のアドレスに対するメモリ要求を配信するかを決定するために使用可能である。１つの実施形態では、アドレスに対する一致ポイントはアドレスに対応したバイトを格納するメモリに結合したメモリコントローラ１２０である。メモリコントローラ１２０はメモリにインターフェースするコントロール回路を構成することができる。さらにメモリコントローラ１２０はメモリ要求をキューする要求キューを含むことができる。
【００２７】
一般的に、クロスバー相互接続１１６はインターフェース１４０に結合したリンクで受け取るコントロールパケットに応答し、プロセッサコア１１２および／あるいはキャッシュメモリサブシステム１１４に応答してコントロールパケットを生成し、サービスのためにメモリコントローラ１２０によって選択されたトランザクションに応答してプローブコマンドおよび応答パケットを生成し、インターフェースロジック１４０を通して他のノードに対するマイクロプロセッサを構成するクロスバー中間ノードに対してパケットを配信するように構成される。インターフェースロジック１４０はパケットを受け取りクロスバー相互接続１１６によって使用される内部クロックにパケットを同期させるロジックを含むことができる。クロスバー相互接続１１６はメモリ要求をプロセッサコア１１２から共有キャッシュメモリサブシステム１１８またはメモリコントローラ１２０およびメモリサブシステムの下位レベルに伝えるよう構成することができる。また、クロスバー相互接続１１６は受信メモリラインおよび、メモリコントローラ１２０経由で下位レベルからプロセッサコア１１２およびキャッシュメモリサブシステム１１４および１１８へのコントロール信号を伝えることができる。クロスバー相互接続１１６、メモリコントローラ１２０、インターフェース１４０、およびプロセッサユニット１１５間の相互接続バスの実装は適切な技術で構成することができる。
【００２８】
キャッシュメモリサブシステム１１４および１１８はデータブロックを格納するよう構成された高速キャッシュメモリを構成することができる。キャッシュメモリサブシステムは対応するプロセッサコア１１２内に集積可能である。代わりに、キャッシュメモリサブシステム１１４はバックサイドキャッシュ構成またはインライン内でプロセッサコア１１２と結合可能である。さらに、キャッシュメモリサブシステム１１４はキャッシュにハイアラーキとして実装可能である。プロセッサコア１１２に近い（ハイアラーキ内）キャッシュは必要に応じてプロセッサコア内に集積化可能である。１つの実施形態ではキャッシュメモリサブシステム１１４はおのおのＬ２キャッシュ構造を表し共有キャッシュサブシステム１１８はＬ３キャッシュ構造を表す。
【００２９】
キャッシュメモリサブシステム１１４と共有キャッシュメモリサブシステム１１８の両方とも対応するキャッシュコントローラに結合されたキャッシュメモリを含むことができる。プロセッサコア１１２は予め定義された汎用命令セットに従う命令を実行する回路を含む。例えば、ｘ８６の命令セット方式を選択可能である。その代わりに、Ａｌｐｈａ、ＰｏｗｅｒＰ、または他の汎用命令セット方式を選択可能である。一般的に、プロセッサコア１１２はキャッシュメモリサブシステム１１４をデータおよび命令のためにそれぞれアクセスする。要求したブロックがキャッシュメモリサブシステム１１４または共有キャッシュメモリサブシステム１１８に見つからない場合は、読み取り要求を生成することができ、見つからないブロックがメモリコントローラ１２０経由でマップされる場所に送出される。
【００３０】
図２は順序のない実行を行う汎用プロセッサコア２００の１つの実施形態を示す。命令キャッシュ（ｉキャッシュ）および対応するトランスレーションルックアサイドバッファ（ＴＬＢ）２０２はソフトウェアアプリケーション用の命令および命令をアクセスするためのアドレスを格納することができる。キャッシュ２０２と２２２の両方はプロセッサコア２００内または図１のキャッシュメモリサブシステム１１４内のような外部に置くことができる。命令フェッチユニット（ＩＦＵ）２０４はｉキャッシュミスがない場合にクロックサイクルごとにｉ−キャッシュ２０２から複数の命令をフェッチすることができる。ＩＦＵ２０４はｉ−ＴＬＢのアドレスと比較することができる次の命令のアドレスに対するポインタを保持してｉ−キャッシュ２０２でフェッチするプログラムカウンタを含むことができる。ＩＦＵ２０４は分岐予測ユニットも含み、実行ユニットが後のパイプライン段における実際の出力を決定する前に条件付き命令の出力を予測することができる。
【００３１】
デコーダユニット２０６は複数フェッチ命令の演算コードをデコードし、再順序化バッファ２０８などの順番の中止キューにエントリを割り当てることができる。エントリは再順序化バッファ２０８内の割り当てに続き、整数キュー２１２および浮動小数点キュー２１６内で割り当てることができる。ロード／ストアユニット２２０内の入力キューのエントリは実行ユニット２１０内で割り当てに続いて、または必要であれば同時に割り当てることができる。実行ユニット２１０および／あるいはロード／ストアユニット２２０でのエントリの割り当てはディスパッチと考えられる。実行ユニット２１０の議論はメモリアクセスの説明に続く。
【００３２】
ロードおよびストア演算などのメモリアクセスはロード／ストアユニット２２０に対して発行される。ロード／ストアユニット２２０はキューおよびメモリアクセス命令を実行するロジックを含むことができる。また、検証ロジックをロード／ストアユニット２２０に置きロード命令が正しい最も若いストア命令からの転送データを受け取ることを保証することができる。ロード／ストアユニット２２０はメモリアクセス要求２２４をチップ上のデータキャッシュ（ｄキャッシュ）２２２の１つ以上のレベルに送ることができる。キャッシュの各レベルはメモリ要求２２４とのアドレス比較のためのそれ自身のＴＬＢを持つことができる。キャッシュ２２２の各レベルは直列または並列法で検索可能である。キャッシュ２２２に要求メモリラインが見つからない場合は、メモリ要求２２４がキャッシュ１１４および１１８などのキャッシュメモリの下位レベルに、または可能ならばオフチップメモリに送られる。直列または並列検索、他のメモリに対して可能な要求、および要求メモリラインが到達する間の待機は相当数のクロックサイクルが必要となる可能性がある。
【００３３】
実行ユニット２１０およびロード／ストアユニット２２０からの結果はコモンバス２３０上に提示することができる。その結果はレコーダバッファ２０８に送ることができる。１つの実施形態では、レコーダバッファ２０８はプログラム順序に従う命令の順序中止を保証するファーストインファーストアウト（ＦＩＦＯ）のキューとすることができる。ここで、その結果を受け取る命令は中止と記録される。命令がキューの先頭である場合、命令は対応する方式レジスタファイルに送った結果を持つことができる。キューの２１２と２１６の各々は方式レジスタを保持することができる。方式レジスタファイルはプロセッサコア２００の汎用レジスタの方式状態を保持可能である。その場合レコーダバッファにあるその命令は順序どおりに中止でき、キューポインタの先頭はプログラム順の後続命令に合わせることができる。
【００３４】
コモンデータバス２３０上の結果はその結果を待っている命令のオペランドに値を転送するために実行ユニット２１０に送ることができる。例えば、算術命令は前の算術命令の結果に依存するオペランドを持つことができるか、またはロード命令は機能ユニット２１４にあるアドレス生成ユニット（ＡＧＵ）によって計算されるアドレスを必要とする可能性がある。これらの待機命令がそのオペランドに値を持つ場合でハードウェアリソースが命令の実行に利用可能であれば、それらは対応するキュー２１２および２１６から機能ユニット２１４および２１６またはロード／ストアユニット２２０内に適切なリソースに対して順序なく発行される可能性がある。
【００３５】
拘束されない、または非中止のメモリアクセス命令は、ロード／ストアユニット２２０内にエントリがある。使用予定の転送データ値、または最も若い使用未定の古いストア命令からの使用未定のロード命令はコモンバス２３０上に置かれるか、または単純にロード／ストアユニット２２０内のロードバッファ内の適切なエントリに配信することができる。
【００３６】
実行ユニット２１０に戻ると、キュー２１２および２１６はオペランドが利用可能になるのを待機する対応する整数および浮動小数点命令を格納することができる。レジスタの名前変更と実行スケジュールはキュー２１２および２１６内または非表示の周囲の対応回路内で発生することができる。オペランドが利用可能でハードウェアリソースも利用可能な場合、１つの命令をキュー２１２および２１６から整数機能ユニット２１４、浮動小数点機能ユニット２１８に、および／あるいはロード／ストアユニット２２０に順序なく発行することができる。整数機能ユニット２１４の各セットは加算、減算、アドレス生成、および分岐条件命令の出力の決定などの整数演算計算のための算術ロジックユニット（ＡＬＵ）を含むことができる。浮動小数点機能ユニット２１８は浮動小数点加算、減算、乗算、除算、平方根、整数浮動小数点変換、浮動小数点整数変換、またはその他を実行する回路を含むことができる。
【００３７】
１つの実施形態では、複数の整数機能ユニット２１４をマイクロプロセッサ命令のスループットを増大させるためにインスタンス化することができる。例として、プロセッサコア２００は複数のソフトウェアスレッドを実行するよう構成可能である。マイクロプロセッサ１００のためのオペレーティングシステム、および対応するプロセッサコア２００はソフトウェアアプリケーション用のメモリ領域を割り当てる。ソフトウェアアプリケーションがコンパイルされる場合、アプリケーションは複数プロセスを構成することができる。そのような実施形態において、各プロセスは画像メモリ、または命令のインスタンスおよびアプリケーションの実行の前のデータなどの自分自身のリソースを持つことができる。また、各プロセスはコードのアドレスを指定するアドレス空間、データ、ならびに可能ならヒープおよびスタックなどのプロセス固有情報；スタックポインタ、汎用および浮動小数点レジスタ、プログラムカウンタ、およびその他のデータおよびコントロールレジスタ内の変数；ならびにｓｔｄｉｎ、ｓｔｄｏｕｔ、およびその他のオペレーティングシステム記述子、ならびにプロセッサ所有者および許可のプロセスセットなどの安全属性で構成することができる。
【００３８】
ソフトウェアアプリケーションの各プロセスはソフトウェアスレッドにさらに分割することができる。多くの現代のマイクロプロセッサは２つ以上のソフトウェアスレッドを同時に実行するよう構成される。これらのマイクロプロセッサは２つ以上のハードウェアスレッド、またはストランドを持つことができ、オペレーティングシステムのカーネルによる並列実行および割り当てのために利用可能である。例えば、マルチスレッドマイクロプロセッサに対して、各整数機能ユニット２１４は特定のユニット２１４内のハードウェアリソースの利用性に応じてクロックサイクル当り、より多くの特定スレッドの整数命令を受け取ることができる。命令フェッチユニット２０４から整数キュー２１２への回路は各ユニットのハードウェアを複製しないで２つ以上のプロセッサストランドを管理するよう変更可能である。例えば、スレッドの方式状態を保持するレジスタは複製可能であるが、実行ハードウェアリソースは複製することができない。
【００３９】
別の実施形態では、プロセッサコア２００のマルチスレッドは全クラスタのコピーのインスタンスを含むことができ、ここでクラスタは１個のスレッドの実行に利用でき１つの実施形態では、デコーダユニット２０６から命令機能ユニット２１４までの回路を構成する。そのような実施形態において、この回路は整数実行クラスタと言うことができる。別の実施形態では、浮動小数点コプロセッサはデコーダユニット２０６から浮動小数点機能ユニット２１８までの回路を含むことができる。この浮動小数点コプロセッサのインスタンス数は整数実行クラスタのインスタンス数よりも少なくすることができる。そのような実施形態において、各浮動小数点コプロセッサは２つ以上のスレッドに対応し、ここで各整数実行クラスタは１つの異なったスレッドに対応する。命令フェッチユニット２０４はコア２００内の複数スレッドを管理する回路を含むことになり、各クラスタに特定スレッドの利用可能な１つ以上の対応する命令を供給する。この場合、各クラスタはストランドまたはハードウェアスレッドである。
【００４０】
回路ロジックの観点からすると整数機能ユニット２１４の各コピーを伴わせるために浮動小数点ユニット２１８の複数コピーをインスタンス化することが望ましいと言えるが、それはハードウェア実装の観点からは望ましくないと言える。例えば、浮動小数点機能ユニット（ＦＰＵ）２１８は多くのダイ上の場所を消費する複雑なロジックを含む可能性がある。また、浮動小数点演算はプログラムコードでは頻繁には実行されない。したがって、ハードウェア設計者はダイに浮動小数点機能ユニット２１８の高価なコピーを独立して作成するよう動機づけられない可能性がある。
【００４１】
マイクロプロセッサ１００、およびそれに従ってプロセッサコア２００は信頼性の高い実行モード（ＲＥＭ）演算として実装することができる。このモードはハードウェアソフトエラーなどの実行エラーの発生をミッションクリティカルなソフトウェアの実行中に検出するために利用可能である。１つの実施形態として、プロセッサコア２００の浮動小数点キュー２１６および浮動小数点機能ユニット２１８は２つの独立整数実行クラスタまたは２つの独立整数機能ユニットで実行する２つの独立ソフトウェアとして役立つために同時マルチスレッディング（ＳＭＴ）モードで演算可能であり、ここで両方の実装は独立ストランドである。１つの実施形態ではＩＦＵ２０４はＳＭＴ回路として実装可能で２つのストランドに命令を供給可能である。デコーダユニット２０６から整数機能ユニット２１４への回路はダイ上では１つの整数ストランドとして実装可能である。この第１のストランドのコピーである第２の整数ストランドはダイ上でインスタンス化することもできる。
【００４２】
２つの整数ストランドはＩＦＵ２０４の出力から対応する整数機能ユニット２１４の出力までロックステップで演算動作可能である。例えば、ソフトウェアスレッドの命令が第１の整数ストランドに供給され、このストランドのコピーが第２の整数ストランドに供給される場合、２つのストランドの各パイプライン段は各個別クロックサイクルの終了時に同じ結果を生じるはずである。各クロックサイクルの終了時に比較を実行するのではなく、複数のチェックポイント命令をプログラムコードに挿入することができる。各チェックポイントの間、特定のレジスタの内容の比較は２つのストランドについて実行可能である。対応する値が一致する場合、ソフトエラーは検出されず実行を継続することができる。不一致が検出されると、１つの実施形態では、実行が最後の成功したチェックポイントにロールバックして実行はプログラムコードのこの場所から進めることができる。１つの実施形態では、警告をオペレーティングシステム（ＯＳ）に通知することができる。別の実施形態では、警告通知はユーザーが精査するためにメモリの既定の場所のロジックファイルに記録することができる。
【００４３】
別の実施形態では、デコーダユニット２０６から整数キュー２１２への回路はコピーすることができず、ＳＭＴユニットとして実装可能である。整数機能ユニット２１４はコピー可能である。再び、１つの実施形態では、２つの整数ストランドの実行はＩＦＵ２０４の出力から対応する整数機能ユニット２１４の出力へのロックステップで演算可能である。チェックと比較は上述したように実行可能である。２つのストランドの利用は例示の目的であり、より多くのストランドの利用が可能であり、予測可能である。例えば、別の実施形態ではプロセスに関して上述したように、マイクロプロセッサの回路は２つ以上のハードウェアスレッド、またはスレッドを必要とする２つ以上のソフトウェアスレッドを実行するよう構成可能である。したがって、３つ以上の整数ストランドの実行はＩＦＵ２０４の出力から対応する整数機能ユニット２１４へのロックステップで演算可能である。
【００４４】
上述の実施形態のいずれかで、浮動小数点キュー２１６、浮動小数点機能ユニット２１８、ロード／ストアユニット（ＬＳＵ）２２０およびキャッシュ２２２は独立にインスタンス化可能であり、整数キュー２１２および２つの独立したインスタンス化整数機能ユニット２１４からの入力を受け取る。上述のように、単一のソフトウェアアプリケーションは高い信頼性でその２つコピーを各整数ストランド上で、１つずつロックステップで実行することができる。しかし、この技術は浮動小数点キュー２１６および浮動小数点機能ユニット２１８に対して適用不可能である。その理由は異なったスレッドからの演算がロックステップで実行されることが保証されないからである。浮動小数点機能ユニット２１８などのチップのＳＭＴ部分に対して、２つのソフトウェアスレッドから同時に命令を実行するための十分なハードウェアリソースを持たない場合がある。したがって、２つのソフトウェアスレッドからのこれらの命令はロックステップではなく、同期なしで実行可能である。
【００４５】
この問題に対する１つのソリューションは両方のソフトウェアスレッドをＳＭＴ浮動小数点回路上で、ロックステップで動作させることであろう。しかし、この提案は複雑性、１つのダイの実面積、余分な１つのダイ配線ルートにおいて大きな犠牲を払い、またＲＥＭ演算が必要でない場合に性能も低下させる。この問題に対する別のソリューションは両方のソフトウェアスレッドの浮動小数点命令を可能として、浮動小数点機能ユニット２１８上で独立に動作させることであり、結果を非同期に作り出す。両方のソフトウェアスレッド間のクロスチェックの結果はその場合に２つのソフトウェアスレッドの内の遅い方が結果を計算するまで各演算を遅延させなければならない。この遅延は、数百サイクルなどと非常に大きくなることがあり、コードストリームの各演算をチェックする必要があるため、設計者は非常に大きいバッファを割り当ててそれらが安全にチェック可能になるまで両方のスレッドからの結果を捕捉しなければならない。
【００４６】
代わりに、ＲＥＭ演算には、元の命令とそのツインコピーなど２つの命令があり、２つの「別の」ソフトウェアスレッド、また、元のソフトウェアスレッドおよびそのツインコピーがＳＭＴ浮動小数点回路で大部分の時間、同期なしに実行可能である。２つのスレッドは浮動小数点領域間で結果を伝達することを試みる場合にのみ同期して隔たりを計算し、したがって２つの整数クラスタに対して同期化した刺激が保証される。このことにより整数クラスタが浮動小数点回路からのすべての伝達で両方のスレッドからの等しい応答を確認することが可能になり、それらはロックステップに留まることができる。
【００４７】
こんどは図３Ａに戻り、同時マルチスレッディングプロセッサでの効率的で信頼性の高い実行のための方法３００の１つの実施形態が示される。議論のために、この実施形態の各ステップが順番に示される。しかし、幾つかのステップは図示とは異なる順序で発生可能であり、幾つかのステップは同時に実行され、幾つかのステップは他のステップと結合される可能性があり、幾つかのステップは他の実施形態では欠けている可能性がある。マイクロプロセッサ内のマルチスレッドプロセッサコアはブロック３０２の信頼性の高い実行モード（ＲＥＭ）に設定される。この演算はプログラムコード命令、システムのマイクロコード命令、外部コントロールまたは他によってアサートまたはデアサートする指定されたピンの信号によって実行することができる
【００４８】
マイクロプロセッサの命令フェッチユニットはブロック３０４のｉキャッシュの指定されたアドレスから命令をフェッチする。ＲＥＭ演算の間、１つの実施形態では、マイクロプロセッサは２つのストランドのみ、または数百のスレッドを実行可能である。各フェッチされた命令は選択的に複製可能である。例えば、浮動小数点ストア命令、浮動小数点整数転送命令、またはその他などの浮動小数点回路（条件付きブロック３０６）の外部と通信する浮動小数点命令が検出されない場合、他の計算のこれらの命令はブロック３１２で複製される。元の命令は第１のソフトウェアの命令として取り扱われて第１のストランドに送られる。命令のコピーは第２のソフトウェアスレッドの命令として扱われてブロック３１４の第２のストランドに送られる。
【００４９】
命令の検出と命令の複製の両方はデコーダユニット２０６、レコーダバッファ２０８、実行キュー２１２および２１６、または設計者によって選択された他のフロントエンドユニットで実行することができる。これらの浮動小数点外部演算専用の前デコード回路はデコーダユニット２０６の先に置くことができる。デコーダ２０６から整数機能ユニット２１４への回路を含むコア２００で整数コアがコピーされる場合は、この技術は使用可能である。代わりに、デコーダユニット２０６の出力信号はこれらの演算の検出に使用可能であり、複製はデコードの後で発生する。この技術は実行キュー２１２および２１６に対するデコーダユニット２０６の回路がＳＭＴ回路として実装される場合に使用可能である。続いて、元の命令と複製命令の両方はブロック３１４の別のストランドに割り当てられブロック３１６内での実行のために名前変更およびスケジュールされる。
【００５０】
浮動小数点ストア命令、浮動小数点整数転送命令、またはその他などの浮動小数点回路（条件付きブロック３０６）の外部と通信する浮動小数点命令が検出されると、この浮動小数点外部演算または命令は複製されない可能性がある。これらの命令は浮動小数点機能ユニット２１８から整数機能ユニット２１４までの伝達経路またはワイヤルートを必要とする。機能ユニット２１８内に浮動小数点ロジックのコピーがないため、ロックステップの実行はすべての機能ユニット２１４および２１８においてこれらの命令のために中止されようとする。したがって、この命令タイプはブロック３０８で新しい命令タイプに変換可能である。この場合、この複製されない新しい命令タイプは利用可能ストランドの１つに割り当てられる。例えば、この新しい命令タイプは元のソフトウェアスレッドの命令として扱いプロセッサ２００の対応ストランドに割り当てることができる。
【００５１】
例えば、マイクロプロセッサ内の２つのストランドの１つの実施形態に対して、第１のストランドがｆ０〜ｆ３１の３２個の浮動小数点（ＦＰ）レジスタを持つことができ、第２のストランドに対しても同様である。キュー２１６および２１８の両方の回路で構成可能な、またはデコードユニット２０６〜キュー２１６の演算のための独自回路で構成可能な浮動小数点ユニット（ＦＰＵ）は両方のストランドに対する状態を維持する必要がある可能性がある。ＦＰＵはＬ０〜Ｌ６３などの少なくとも６４の２つのストランドのコミットされた方式状態を保持する論理レジスタを必要とする可能性がある。Ｌ０〜Ｌ６３からストランド０．ＦＰ０〜ストランド０．ＦＰ３１およびストランド０．ＦＰ１〜ストランド０．ＦＰ３１へのなどのマッピングは任意とすることができる。１つの実施形態では、マッピングにはＬ０ではストランド０．ＦＰ０およびしたがってＬ３１からストランド０．ＦＰ３１へ、およびさらにＬ３２からストランド１．ＦＰ０およびしたがってＬ６３からストランド１．ＦＰ３１に対する割り当てを含むことができる。
【００５２】
非ＳＭＴマシーンでは、Ｌ３２〜Ｌ６３の割り当てはない可能性がある。したがって、１つの実施形態では、ＦＭＵＬ＿ＦＰ０、ＦＰ１−−＞ＦＰ２などの単純なＦＰ演算は、ストランド０またはストランド１のいずれのストランドが到来したかに従って、ＦＭＵＬ＿Ｌ０、Ｌ１−−＞Ｌ２またはＦＭＵＬ＿Ｌ３２、Ｌ３３−−＞Ｌ３４の１つのみにマップすることができる。ＲＥＭ／ロックステップモードでは、１つのソフトウェアスレッド実行のみが存在する可能性があるが、このソフトウェアスレッドはストランド０とストランド１の両方のストランドで実行するようにされる可能性がある。これは上述の浮動小数点乗算、ＦＭＵＬをＦＭＵＬ＿Ｌ０、Ｌ１−−＞Ｌ２およびＦＭＵＬ＿Ｌ３２、Ｌ３３−−＞Ｌ３４の両方の命令にマッピングして達成可能である。これは既に述べたクローニング演算である。
【００５３】
このように、上述のマッピングがＦＰＵのフロントエンドで実行されると、論理レジスタ数がすべての依存性を伝えるのに十分であるため、演算のストランド認識は複数の演算間での依存性を強制することは必要でない可能性がある。１つの実施形態では、ストランド０からの演算はレジスタＬ０〜Ｌ３１のみを参照可能であり、ストランド１からの演算はＬ３２からＬ６３からのレジスタの参照のみが可能である。２つのセット間の混合は非ＲＥＭモードではできない可能性がある。このように、演算がマッピングされると、マイクロプロセッサがロックステップモードで演算していてもいなくても、ストランドＩＤはその演算には必要でない可能性がある。
【００５４】
ＲＥＭモードでは、１つの実施形態では、クローン演算が実行されると、２つのクローンされた演算を作り出すことができ、そのいずれもスケジュールの目的でストランド識別子（ＩＤ）を持つことはできない。それは記録され、ストランドＩＤを必要とするが、他の用途のためである。
【００５５】
１つの実施形態では、ＦＳＴＯ＿ＦＰ０−−＞［ｍｅｍ］（［ｍｅｍ］はデスティネーションメモリ位置を表す）などの浮動小数点ストア命令などの単項演算はクローンすることができない。代わりに、単項命令は形式ＦＣＭＰＳＴＯ＿Ｌ０、Ｌ３２−−＞［ｍｅｍ］の単一二項論理命令にマッピング可能である。この論理命令は命令に割り当てられたストランドＩＤを持つことはできない。むしろ、その命令がそれに割り当てられたすべてのストランドＩＤを持つことができるがそれはその命令がすべての利用可能ストランドから引かれる論理レジスタの混合セットを使用しているからである。
【００５６】
この単一にマップされた命令は両方のストランドからソースオペランドを引くことができＬ０とＬ３２の最後の生産者命令に依存することができる。定義によって、１つの実施形態では、ストランド０とストランド１が起源のＬ０とＬ３２の生産者。同様に、これらの生産者は浮動小数点乗算命令、ＦＭＵＬに似たクローンされた演算であった可能性がある。これらのクローンされた演算はＬ０とＬ３２の両方が作られて危険でない場合など異なった時に実行可能である。この場合、ＦＣＭＰＳＴＯは実行のためのスケジュールに進むことができる。
【００５７】
別の実例として、浮動小数点外部演算は次のような浮動小数点ストア命令であることができる。
【００５８】
【数１】
0005719350.tif 000002
【００５９】
１つの実施形態では、上記のライン１の浮動小数点除算命令、ＦＤＩＶはＦＰ＿Ｒｅｇ＿Ｓｒｃ１と記述された浮動小数点レジスタ内の６４ビット、倍精度浮動小数点ソースオペランドをＦＰ＿Ｒｅｇ＿Ｓｒｃ２と記述された浮動小数点レジスタ内の６４ビット、倍精度浮動小数点ソースオペランドによって除算可能である。リマインダーは保存されない。ＦＤＩＶ命令はプロセッサ２００がＲＥＭモードで演算している場合は複製可能である。元のＦＤＩＶ命令はストランド０に割り当てることができる。複製されたＦＤＩＶ命令はストランド１に割り当てることができる。
【００６０】
上記のライン２の浮動小数点ストア命令、ＳＴＦはソース浮動小数点レジスタ、ＦＰ＿Ｒｅｇ＿Ｒｅｓｕｌｔから指定された実行アドレス、＜ａｄｄｒｅｓｓ＞に既定のバイト数を格納可能である。整数転送演算と同様に、浮動小数点ストア演算は単項演算である。それらは単一ソースオペランドのみを持つ。これらの特別な単項演算は第１のスレッドからの元の論理レジスタ番号と第２のスレッドからの同じ論理レジスタ番号の２つの構造ソースを持つ新しい命令を作成して単項から二項演算に変換可能である。例えば、プロセッサコア２００がＲＥＭモードで２つのストランドのみを演算する場合、上述の浮動小数点ストア命令は以下に変換可能である。
【００６１】
【数２】
0005719350.tif 000003
【００６２】
このように、浮動小数点ストア命令は浮動小数点ストアアンド比較命令に変換される。名前変更レジスタファイル回路は再順序化バッファ２０８または実行キュー２１２および２１６に存在させることができる。１つの実施形態では、マッピングユニットは命令レジスタ番号（ＩＲＮ）を論理レジスタ番号（ＬＲＮ）に変換することができる。その場合、名前変更レジスタファイルはＬＲＮを物理レジスタ番号（ＰＲＮ）にマップすることができ、その場合はＩＲＮの直接使用によってアドレスできるよりも大きな数の物理レジスタがある。上記のライン３の変換された演算のオペランド、ＦＰ＿Ｒｅｇ＿Ｒｅｓｕｌｔ＜ストランド０＞およびＦＰ＿Ｒｅｇ＿Ｒｅｓｕｌｔ＜ストランド１＞は通常通りに物理レジスタ番号（ＰＲＮ）にマップされ浮動小数点キュー２１６内の浮動小数点スケジューラに送られる。この浮動小数点外部演算は複製されず、上記のライン３に示す命令はストランド０に割り当てることができ、非演算命令は方法３００のブロック３１０のストランド１に割り当てることができる。
【００６３】
この変換された命令は当然、プロセッサコア２００の２つのストランドで実行される２つのソフトウェアスレッドのデータフロー間のチェックポイント、または同期化ポイントとして働く。実行ユニット２１０内の変更されない浮動小数点スケジューラ内で変換された演算は両方のＰＲＮが準備済みになると選択のみ可能でピックすることができる。これは、浮動小数点除算計算を実行する計算チェインがＳＭＴ浮動小数点機能ユニット２１８の通常のデータフローの方法で計算を終えて、結果を変換された演算の２つのソースレジスタ、つまりＦＰ＿Ｒｅｇ＿Ｒｅｓｕｌｔ＜ストランド０＞およびＦＰ＿Ｒｅｇ＿Ｒｅｓｕｌｔ＜ストランド１＞に供給するときに、当然生じる可能性がある。
【００６４】
今度は図３Ｂに戻り、同時マルチスレッディングプロセッサでの効率的で信頼性の高い実行を継続するための方法３３０の１つの実施形態が示される。議論のために、この実施形態の各ステップが順番に示される。しかし、幾つかのステップは図示とは異なる順序で発生可能であり、幾つかのステップは同時に実行され、幾つかのステップは他のステップと結合される可能性があり、幾つかのステップは他の実施形態では欠けている可能性がある。プロセッサコア２００はブロック３３２で、ＲＥＭモードで命令を実行中である。
【００６５】
プログラム実行の同期化ポイントはソフトエラーなどのエラーがミッションクリティカルなソフトウェアアプリケーションの実行で生じなかったことを定期的に確認するために選択することができる。１つの実施形態では、１つ以上のパイプライン段または特定の組合せロジックの出力を条件付きブロック３３４で同期化ポイントにするよう選択可能である。この選択は並列実行スレッドをロックステップで実行している場合にのみ可能とすることができる。ロックステップの実行が可能である場合、特定のレジスタ出力、組合せロジック出力、および／あるいはその他の指定値などの特定値はブロック３４０の２つのストランド間の各サイクルで比較することができる。もっと頻繁なチェックポイントを望む場合は、１つの実施形態において、ＦＭＯＶ＿ＦＰ０−−＞ＦＰ０の形式のダミーの単項移動命令をソフトウェアプログラムストリームのいずれに挿入可能である。このＦＭＯＶ命令はその後二項比較および移動命令に変換可能であり、そのことによって、元のプログラム命令ストリームに通常の単項ストアがない場合にも、任意の頻度でチェックの実行が可能になる。
【００６６】
ミッションクリティカルなソフトウェアアプリケーションの命令を複製するために、および、１つの実施形態では、インスタンス化した整数クラスタのコピーを構成するプロセッサ上の２つの分離ストランドに元のおよびツインコピーを配置して、整数ロックステップ実行が可能である。したがって１つの実施形態では、各整数命令とそのツインは同じクロックサイクル（条件付きブロック３３４）内で、命令の完了で相互に各対応結果を比較させることが可能である。この場合、命令は整数命令（条件付きブロック３３６）である。
【００６７】
１つの実施形態では、ブロック３４０での比較は、ロックステップ実行のために同じクロックサイクル内では同じ結果となるはずの２つのスレッドが発散した場合に事態を検出することができる。不一致が検出されると（条件付きブロック３４２）、それはＲＥＭコントローラのロジックに通知可能で既定の連続動作がブロック３４４で行われる。そのような動作にはマイクロプロセッサからのある信号出力のアサート、アプリケーションをさらに実行することの停止、既定バッファへの発散した命令のアドレスのストア、および／あるいはその他を含むことができる。
【００６８】
不一致が検出されない（条件付きブロック３４２）と、その場合にロックステップの方法で通常通りに継続し、方法３３０のコントロールフローはコントロールブロックＢに移動する。他の実施形態では、ソフトウェアプログラマーまたはコンパイラーのいずれかによって挿入することができるチェックポイント命令を同期化チェックポイント（条件付きブロック３３４）の提供に使用可能である。１つの実施形態では、すべてのロックステップ実行スレッドで追跡する命令数を小さくするために、そのような命令をコードの各基本ブロック内に挿入することができる。
【００６９】
他の同期化チェックポイントは変換された浮動小数点外部演算（条件付きブロック３３６）の実行とすることができる。実行の間、デコーダユニット２０６またはレコーダバッファ２０８などのプロセッサのフロントエンドは浮動小数点キュー２１６に半分のスループットで命令を送ることができる。これはクロックサイクル当り少なくとも２つの浮動小数点命令を送るか、または１つ置きのクロックサイクルごとに少なくとも４つの浮動小数点命令を送ることによって達成することができる。この例では、プロセッサコア２００が４幅の命令発行マシーンであると仮定されている。他の実施形態が可能であり、予測可能である。
【００７０】
方法３００のブロック３１２で説明したように、１つの実施形態では、プロセッサのフロントエンドのロジックはこれらの浮動小数点命令を選択的に複製可能である。このロジックは浮動小数点ストアや整数転送演算などの浮動小数点外部演算を複製することはない。そうではなく、これらの浮動小数点命令タイプは方法３００のブロック３０８に関して上述のように変換される。
【００７１】
１つの実施形態では、プロセッサコア２００内の２つのストランドはＲＥＭ演算中に使用される。１つの実施形態では、元のソフトウェアスレッドからの浮動小数点命令と同じコピーを作成する（コピーはコア２００の第２のストランドの第２のソフトウェアスレッドで実行される）ために、浮動小数点外部演算でない浮動小数点命令を複製するロジックがプロセッサフロントエンドに存在する。両方の命令は浮動小数点機能ユニット２１８内のロジックを使用して実行されるが、同時ではない。それはハードウェアリソースが無いからである。その場合、上述のライン３に示されるように変換された浮動小数点外部命令の実行中に、すべてのソースオペランドがブロック３３８で準備済みになると、浮動小数点演算に対応する実行ユニット２１０内の他のロジックはブロック３４０内の２つのストランド内の同じ番号のレジスタの内容を比較することができる。不一致（条件付きブロック３４２）はブロック３４４の適切なアクションのためにＲＥＭコントローラにフラグ通知する。
【００７２】
ＲＥＭ演算中、浮動小数点ロジック２１６および２１８外と通信する唯一の命令である非複製で変換された浮動小数点外部演算の実行は浮動小数点ロジック内で同時に実行されるように見え、ロックステップにある整数ロジック２１２および２１４に通知する。他のすべての浮動小数点命令は実際に他のソフトウェアスレッドのそのツイン命令に関連してロックステップなしで実行される。それはこれらの命令が、整数ロジックがロックステップなしに実行される浮動小数点ロジックの外側に刺激を送出しないからである。変換された浮動小数点外部命令はそのソースオペランドを、ＳＭＴコアに既に存在し変更の必要がないブロック３３８でそのオペランドが準備済みになったときに読み取り、それらをブロック３４０内でその通常の機能と平行して、等しいかを比較する。不一致（条件付きブロック３４２）はブロック３４４のＲＥＭコントローラに通知することができる。不一致（条件付きブロック３４２）が存在しない場合、命令は単に同じサイクルで両方の整数ロジックに情報を送る。このことにより整数機能ユニット２１４が浮動小数点ロジックからのロックステップ刺激のみを確認し自身を同期外れにしない。
【００７３】
これまで説明した図では、２つのクラスタの中止は同期外れになる可能性がある。これは許容できるが、その理由は、１つの実施形態では、プロセッサの２つのストランドで演算している２つのソフトウェアスレッドのクロスチェックは中止時に比較が行われるのではなく、結果のシグネチャを使用して実行後直ちに値を比較することが含まれるからである。中止時の比較の実行は物理的レジスタファイルに余分な読み取りポートを必要とする。しかし、これまで述べたスキームに関して困難を伴う２つの事態が生じる。
【００７４】
１つ目は他方のスレッドには見られないロジック障害によるスレッド上の外部例外の可能性である。そのような例外はリダイレクトおよびフラッシュの原因となり、他方のスレッドにはない一方のスレッドでトリガーされることになる。この事態はプロセッサのフロントエンドに特別なロジックを追加して処理することができ、１つのスレッドがリダイレクトしたら両方のスレッドがリダイレクトするロジックをディスパッチする。
【００７５】
２番目の事態は非同期外部割込みである。そのような割込みは両方のスレッドが中止状態に関して同期していなければロックステップでは役に立たない。このためにはインスタンス化した整数ロジックがコピーされ、浮動小数点ロックステップが両方のスレッドからすべての重要な命令を中止させるまで外部割込みによるディスパッチを停止する必要がある。同じメカニズムを上述の外部例外ケースを扱うためにも使用可能である。
【００７６】
別の実施形態として、より低い性能スキームではＥＰＣ経由で実行ユニットの代わりに中止キューからの命令に対する完了状態を送ることになる。このスキームでは、もはやＥＰＣはクラスタＲＯＢＳに状態を送ることはないが代わりにＦＰＲＥＴブロックに状態を送る。ＦＰＲＥＴ内のロジックは両方のスレッドからのいずれの演算が完了したかを追跡し両方のスレッドで実行を完了した各演算に対してロックステップで２つのクラスタの完了を通知する。
【００７７】
さらに別の実施形態では、プロセッサコア２００が３つ以上の利用可能ストランドまたはハードウェアスレッドを持つ場合に浮動小数点外部演算の変換は単項命令を三項命令に変換することができる。上記のライン２から変換される単項命令の例は再び次のように下に示される。
【００７８】
【数３】
0005719350.tif 000004
【００７９】
プロセッサコア２００がＲＥＭ演算中に３つのストランドを演算する場合、上記の浮動小数点ストア命令は以下に変換することができる。
【００８０】
【数４】
0005719350.tif 000005
【００８１】
このように、浮動小数点ストア命令は３つのオペランドの浮動小数点のストアおよび比較命令に変換される。この実装の利点は比較ステップ中にある、もしストランド０と１など２つのストランドが一致するが、ストランド２などの３番目のストランド不一致の値である場合、方法３３０のブロック３４４における不一致を適切な信号でＲＥＭに送ることができ方法３３０のブロック３４４の不一致がＲＥＭコントローラに通知されるが、実行はストランド０とストランド１の一致した値を使用して継続することができる。浮動小数点ユニット２１８はこの一致した値をインスタンス化した整数ロジック２１２および２１４に送ることができる。しかし、３つすべてのストランドは異なった値を持ち、したがってブロック３４４では、それはＲＥＭコントローラ内のロジックに通知することができる。しかし、３つのすべてのストランドは異なった値を持つ場合、それはＲＥＭコントローラ内のロジックに通知することができ、既定のサブシーケンスアクションは先に述べたように行われる。そのようなアクションにはマイクロプロセッサからのある信号出力のアサートを含むことができ、アプリケーションがさらに実行されるのを停止し既定バッファ、および／あるいはその他に発散した命令のアドレスを格納する。
【００８２】
さまざまな実施形態はさらに命令および／あるいはコンピュータでアクセス可能な媒体に上述に従って実装したデータを受け取り、送出または格納することができる。一般に、コンピュータアクセス可能媒体にはストレージ媒体またはディスクまたはＤＶＤ／ＣＤ−ＲＯＭなどの磁気または光学媒体、ＲＡＭ（例：ＳＤＲＡＭ、ＤＤＲ、ＲＤＲＡＭ、ＳＲＡＭなど）揮発性または不揮発性媒体、ＲＯＭ、などが含まれる。コンピュータアクセス可能媒体には、伝送媒体または電気的、電磁気的などの信号、またはネットワークおよび／あるいは無線リンクなどの通信媒体で伝えられるデジタル信号が含まれる。
【００８３】
上述の実施形態をかなり詳細に述べたが、上述の開示が完全に明らかになると、さまざまな変形および変更は当業者にとっては明らかである。上記の請求項はすべての変形および変更を包含すると解釈されることを意図する。
【図１】
0005719350.tif 000006
【図２】
0005719350.tif 000007
【図３Ａ】
0005719350.tif 000008
【図３Ｂ】
0005719350.tif 000009