(57)【要約】      （修正有）【課題】コンピュータ・システムのプロセッサ内でプログラム命令をディスパッチするための改良型の方法を提供する。【解決手段】必要なリソースを示すリソース・ベクトルはリソース・フィールドに符号化し、リソース・ベクトルを派生させるためにその後の段階でリソース・フィールドを復号する。リソース・フィールドは、それぞれのプログラム命令に関連付けられた命令キャッシュに格納する。プロセッサは、同時マルチスレッディング・モードで動作する。リソースの有効性が命令グループのリソース要件に等しいかまたはこれを超える場合、それらの命令をハードウェア・リソースに同時にディスパッチする。命令グループを定義するために、プログラム命令のうちの１つに開始ビットを挿入する。ハードウェア・リソースは、特に、固定小数点ユニット、ロード／ストア・ユニット、浮動小数点ユニット、または分岐処理ユニットなどの、実行ユニットである。【選択図】図２
2006114036.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１および第２のプログラム命令を受け取るステップと、
前記第１および第２のプログラム命令にそれぞれ第１および第２のリソース・フィールドを関連付けるステップであって、前記リソース・フィールドはプログラム命令を実施するためのハードウェア・リソースを特定するものである、当該関連付けるステップと、
前記第１および第２のリソース・フィールドに基づいて第１および第２のプログラム命令をマージするためのリソース要件を計算するステップと、
前記計算されたリソース要件に基づいて前記第１および第２のプログラム命令を同時に実行するためのリソースの有効性を決定するステップと、
を有する、複数のハードウェア・リソースを有するプロセッサで命令を処理するための方法。
【請求項２】
前記関連付けるステップが、第１および第２のリソース・ベクトルをそれぞれ前記第１および第２のリソース・フィールドに符号化するステップを含み、
前記計算するステップが、前記第１および第２のリソース・ベクトルを導くために前記第１および第２のリソース・フィールドを復号するステップを含む、
請求項１に記載の方法。
【請求項３】
前記第１および第２のリソース・フィールドを、それぞれ第１および第２のプログラム命令に関連付けられた命令キャッシュ内に格納するステップをさらに有する、請求項１に記載の方法。
【請求項４】
前記プロセッサが、前記第１のプログラム命令が第１のスレッドの一部であり、前記第２のプログラム命令が第２のスレッドの一部である、同時マルチスレッディング・モードで動作する、請求項１に記載の方法。
【請求項５】
前記決定されたリソースの有効性に基づいて、前記第１および第２のプログラム命令を前記ハードウェア・リソースに同時にディスパッチするステップをさらに有する、請求項１に記載の方法。
【請求項６】
前記ハードウェア・リソースが、少なくとも固定小数点ユニット、ロード／ストア・ユニット、浮動小数点ユニット、および分岐処理ユニットを含む、実行ユニットである、請求項１に記載の方法。
【請求項７】
前記決定するステップが、前記計算されたリソース要件と前記複数のハードウェア・リソースとを比較するステップを含む、請求項１に記載の方法。
【請求項８】
前記第１および第２のリソース・フィールドを検査することによって、少なくとも前記第１および第２の命令を含む同時実行のための命令グループを形成するステップをさらに有する、請求項１に記載の方法。
【請求項９】
前記命令グループを定義するために前記プログラム命令のうちの少なくとも１つに開始ビットを挿入するステップをさらに有する、請求項８に記載の方法。
【請求項１０】
複数のハードウェア・リソースと、
前記ハードウェア・リソースにプログラム命令をディスパッチするディスパッチ・ユニットと、
を有し、
前記ディスパッチ・ユニットが、少なくとも２つのプログラム命令をマージするためのリソース要件を計算し、前記計算されたリソース要件に基づいて前記マージされたプログラム命令を同時に実行するためのリソースの有効性を決定するための、命令グループ形成論理部を含む、
プロセッサ。
【請求項１１】
前記それぞれのプログラム命令を実施するために前記ハードウェア・リソースのいずれが必要であるかを示すために、リソース・フィールドをそれぞれのプログラム命令に関連付ける事前復号論理部をさらに有する、請求項１０に記載のプロセッサ。
【請求項１２】
前記事前復号論理部は、リソース・ベクトルを前記それぞれのリソース・フィールドに符号化することによって前記リソース・フィールドを関連付け、
前記命令グループ形成論理部は、前記それぞれのリソース・ベクトルを導くために前記リソース・フィールドを復号する、
請求項１１に記載のプロセッサ。
【請求項１３】
前記プログラム命令を格納し、それらを前記ディスパッチ・ユニットに提供して、前記それぞれのプログラム命令に関連付けられた前記リソース・フィールドを格納する、キャッシュをさらに有する、請求項１１に記載のプロセッサ。
【請求項１４】
前記プロセッサが、マージされた第１のプログラム命令のうちの１つが第１のスレッドの一部であり、マージされた第２のプログラム命令のうちの１つが第２のスレッドの一部である、同時マルチスレッディング・モードで動作する、請求項１０に記載のプロセッサ。
【請求項１５】
前記ディスパッチ・ユニットが、前記決定されたリソースの有効性に基づいて、前記マージされたプログラム命令を前記ハードウェア・リソースに同時にディスパッチする、請求項１０に記載のプロセッサ。
【請求項１６】
前記ハードウェア・リソースが、少なくとも固定小数点ユニット、ロード／ストア・ユニット、浮動小数点ユニット、および分岐処理ユニットを含む、実行ユニットである、請求項１０に記載のプロセッサ。
【請求項１７】
前記命令グループ形成論理部が、前記計算されたリソース要件と前記複数のハードウェア・リソースとを比較することによって前記リソースの有効性を決定する、請求項１０に記載のプロセッサ。
【請求項１８】
前記命令グループ形成論理部が、前記第１および第２のリソース・フィールドを検査することによって、少なくとも前記第１および第２の命令を含む同時実行のための命令グループを形成する、請求項１１に記載のプロセッサ。
【請求項１９】
前記事前復号論理部が、前記命令グループを定義するために前記マージされたプログラム命令のうちの少なくとも１つに開始ビットを挿入する、請求項１８に記載のプロセッサ。
【請求項２０】
システム・メモリ・デバイスと、
前記システム・メモリ・デバイスに接続されたキャッシュ・メモリと、
前記キャッシュ・メモリからプログラム命令を受け取る少なくとも１つのプロセッサと、
を有し、
前記プロセッサが、複数のハードウェア・リソースと、少なくとも２つのプログラム命令をマージするためのハードウェア・リソース要件を計算し、前記計算されたリソース要件に基づいて前記マージされたプログラム命令を同時に実行するためのハードウェア・リソースの有効性を決定する、命令グループ形成論理部とを有する、
コンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータ・システムに関し、とりわけ、プロセッサ内でプログラム命令をディスパッチするための改良された方法および改良されたプロセッサ設計に関する。
【背景技術】
【０００２】
構成のコンピュータ・システムは、複数のプロセッサを使用して、ソフトウェア・アプリケーションおよびオペレーティング・システムなどのコンピュータ・プログラムで具体化される様々なプログラム命令を実施する。典型的なマルチプロセッサ・システム１０が図１に示されている。コンピュータ・システム１０は、１つまたは複数のプロセッサ・グループ内に配置された１つまたは複数の処理ユニットを有し、記載されたシステムでは、プロセッサ・グループ１４内に４つの処理ユニット１２ａ、１２ｂ、１２ｃ、および１２ｄがある。処理ユニットは、システム・バスまたはファブリック・バス１６を介してシステム１０の他のコンポーネントと通信する。ファブリック・バス１６は、システム・メモリ２０および様々な周辺装置２２に接続される。サービス・プロセッサ１８ａ、１８ｂは、ＪＴＡＧインターフェースまたは他の外部サービス・ポートを介して処理ユニット１２に接続される。プロセッサ・ブリッジ２４をオプションで使用して、追加のプロセッサ・グループを相互接続することができる。システム１０は、システムの基本入力／出力論理を格納し、コンピュータ・システムの電源が最初に投入された（ブートされた）際に必ず周辺装置のうちの１つからオペレーティング・システムを探し出してこれをロードする、ファームウェア（図示せず）も含むことができる。
【０００３】
システム・メモリ２０（ランダム・アクセス・メモリまたはＲＡＭ）は、処理ユニットによって使用されるプログラム命令およびオペ練度・データを、揮発性（一時）状態で格納する。周辺装置２２は、たとえばＰＣＩホスト・ブリッジを使用する周辺コンポーネント相互接続（ＰＣＩ）ローカル・バスを介して、ファブリック・バス１６に接続することができる。ＰＣＩブリッジは低待ち時間パスを提供し、処理ユニット１２ａ、１２ｂ、１２ｃ、および１２ｄはこれを介してバス・メモリまたはＩ／Ｏアドレス・スペース内の任意の場所にマッピングされたＰＣＩデバイスにアクセスすることができる。ＰＣＩホスト・ブリッジ２４は
ＰＣＩデバイスがＲＡＭ２０にアクセスできるようにするための高帯域幅パスも提供する。こうしたＰＣＩデバイスは、ネットワーク・アダプタと、永続ストレージ・デバイス（すなわちハード・ディスク）への相互接続を提供するスモール・コンピュータ・システム・インターフェース（ＳＣＳＩ）アダプタと、キーボード、ディスプレイ・デバイスに接続されたグラフィックス・アダプタ、およびディスプレイ・デバイスと共に使用するためのグラフィカル・ポインティング・デバイス（マウス）を含む、入力／出力（Ｉ／Ｏ）デバイスへの接続用の業界標準アーキテクチャ（ＩＳＡ）拡張バスなどの、拡張バス・ブリッジとを含むことができる。
【０００４】
対称型マルチプロセッサ（ＳＭＰ）コンピュータでは、処理ユニット１２ａ、１２ｂ、１２ｃ、および１２ｄのすべてが通常は同一であり、すなわちこれらすべてが命令およびプロトコルの共通セットまたはサブセットを使用して動作し、通常は同じアーキテクチャを有する。処理ユニット１２ａで示されるように、各処理ユニットは、コンピュータを動作させるためにプログラム命令を実施する１つまたは複数のプロセッサ・コア２６ａ、２６ｂを含むことが可能である。プロセッサ・コアの一例には、インターナショナル・ビジネス・マシンズ・コーポレーションによって市販されているＰｏｗｅｒ５（商標）プロセッサが含まれ、これは、すべてが集積回路によって形成される様々な実行ユニット（固定小数点ユニット、浮動小数点ユニット、およびロード／ストア・ユニット）、レジスタ、バッファ、メモリ、および他の機能ユニットを備えた、単一の集積回路スーパースカラ・マイクロプロセッサを有する。プロセッサ・コアはＲＩＳＣ技法に従って動作可能であり、スーパースカラ・アーキテクチャの性能をさらに向上させるために、命令のパイプライン方式とアウト・オブ・オーダ（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）実行の両方を採用することができる。
【０００５】
各プロセッサ・コア２６ａ、２６ｂは、高速メモリ・デバイスを使用してインプリメントされるオンボード（Ｌ１）キャッシュ（通常は命令キャッシュとデータ・キャッシュが別々である）を含むことができる。キャッシュは一般に、システム・メモリ２０からデータをロードするステップがさらに長くなるのを避けることによって処理速度を上げるために、プロセッサが繰り返しアクセス可能な値を一時的に格納するために使用される。処理ユニットは、他のキャッシュ、すなわち、メモリ・コントローラ３０と共にそれぞれがコア２６ａおよび２６ｂの一部である両方のＬ１キャッシュをサポートする、第２レベル（Ｌ２）キャッシュ２８を含むことができる。ファブリック・バス１６を介してアクセス可能なＬ３キャッシュ３２などの、追加のキャッシュ・レベルも提供可能である。最高（Ｌ１）から最低（Ｌ３）までの各キャッシュ・レベルが連続してより多くの情報を格納することが可能であるが、アクセスがより長くなるという不利な面もある。たとえば、プロセッサ・コア内のオンボードＬ１キャッシュが１２８キロバイトの記憶容量のメモリを有し、Ｌ２キャッシュ２８が５１２キロバイトの記憶容量を有し、Ｌ３キャッシュ３２が２メガバイトの記憶容量を有する場合がある。欠陥のある処理ユニット・コンポーネントの修理／交換を容易にするために、各処理ユニット１２ａ、１２ｂ、１２ｃ、１２ｄは、モジュラー様式で容易にシステム１０にスワップイン・インストールするかまたはシステム１０からスワップアウトすることが可能な、交換可能な回路基板または同様の現場交換可能ユニット（ＦＲＵ）の形に構築することができる。
【０００６】
スーパースカラ・アーキテクチャでは、命令はイン・オーダ（ｉｎ−ｏｒｄｅｒ）およびアウト・オブ・オーダで完了することができる。イン・オーダ完了とは、先行してディスパッチされたすべての命令が完了するまでどの命令も完了できないことを意味する。アウト・オブ・オーダ完了とは、事前に定義された規則を満たしている限り、先行のすべての命令が完了するより前に命令を完了できることを意味する。パイプライン方式のスーパースカラ・プロセッサ内では、命令は最初に取り出され、復号された後、バッファに入れられる。リソースおよびオペランドが使用可能になると、命令を実行ユニットにディスパッチすることができる。さらに命令は、たどって行く分岐に関する予測に基づき、投機的に取り出してディスパッチすることもできる。その結果、最終結果をシステム・メモリ階層に書き込むことによってそのいずれも完了していない様々な実行段階に命令がプールされる。リソースが使用可能になり分岐が決定されると、命令がプログラム順に退去するため、命令をプログラム順に実行するというマシンの外観が保持される。全体的な命令のスループットは、たとえば単一のプロセッサ・コア内に複数の実行ユニットを備えることでプロセッサ内のハードウェアを変更することにより、さらに向上させることができる。
【０００７】
ハードウェア・マルチスレッディングとして知られる他の技法を使用して、スレッドまたはコンテキストと呼ばれる命令のより小さなシーケンスを独立して実行することができる。何らかの理由でプロセッサが停止し、これらスレッドのうちの１つの処理または実行が続行できなくなった場合、プロセッサは他のスレッドに切り換えることができる。コンピュータ・プロセッサ・アーキテクチャの分野の技術者が使用する「マルチスレッディング」という用語は、１つのタスクが複数の関連スレッドに細分化されるというソフトウェアの用語と同じではない。ソフトウェアのマルチスレッディングは、実質上、データを操作してレジスタからメイン・メモリへ保存し、関連および依存する命令のプログラム順序を維持した後にスレッドの交換が実行できる、オペレーティング・システムを含む。ソフトウェア・マルチスレッディングはハードウェア・マルチスレッディングを必要とせず、またこれに関係もしておらず、さらにその逆もまた同様である。ハードウェア・マルチスレッディングは、ハードウェア設計済みレジスタ、実行ユニット、およびパイプライン方式プロセッサを操作して、プロセッサ・ハードウェア内で１つまたは複数の独立して実行する命令セット（スレッド）の状態を維持する。ハードウェア・スレッドは、たとえばマルチタスキング・システム内の異なるタスクから、ソフトウェア・マルチスレッディング・システムからコンパイルされた異なるスレッドから、あるいは異なるＩ／Ｏプロセッサから、導くことができる。ハードウェア・マルチスレッディングの各例では、プロセッサのレジスタ内で複数のスレッドを独立して維持することができる。
【０００８】
同時マルチスレッディング（ＳＭＴ）は、ハードウェア・マルチスレッディングをスーパースカラ・プロセッサ技術と組み合わせて、複数のスレッドが各サイクルで命令を発行できるようにする、プロセッサ設計である。任意の所与のサイクルで単一のハードウェア・コンテキスト（すなわちスレッド）のみがアクティブである他のハードウェア・マルチスレッデッド・アーキテクチャとは異なり、ＳＭＴはすべてのスレッド・コンテキストを同時に競合させ、プロセッサ・リソースを共有させることができる。さらに、スレッドごとの命令レベル並列性（ＩＬＰ）が欠如した従来のスーパースカラ・プロセッサとは異なり、同時マルチスレッディングは複数のスレッドを使用して低い単一スレッドＩＬＰを補償する。性能上の影響は、多重プログラム環境および並列環境の両方における商用データベース、ウェブ・サーバ、および科学技術アプリケーションを含む様々な作業負荷に関する、大幅な命令スループットの上昇およびプログラムの高速化である。
【０００９】
ＳＭＴ処理には依然としていくつかの性能上の欠点がある。典型的なＳＭＴプロセッサでは、タイミングおよび複雑さが原因で、２つのスレッドを同じサイクル内でディスパッチすることはできない。言い換えれば、所与のサイクル内で１つのスレッドおよびそのスレッドのみがディスパッチ可能であるため、リソースを争っている他のスレッドはディスパッチの順番を待たなければならない。ディスパッチ中のスレッドがすべてのリソース（たとえば実行ユニット）を使い尽くせない場合、ディスパッチ中のスレッドにはすべての実行ユニットに送るだけの十分な命令がないため、１つまたは複数の実行ユニットはアイドル状態のままでいることができる。たとえば、プロセッサ内に２つの固定小数点ユニット（ＦＸＵ）および２つのロード／ストア・ユニット（ＬＳＵ）があり、ディスパッチ中のスレッドのみがディスパッチ予定の２つの固定小数点命令を有する場合、２つのＬＳＵは、２つのＦＸＵが命令を実行中である１サイクルの間、アイドル状態のままとなる。この効率の悪さによってプロセッサ内にボトルネックが発生し、システム全体の処理スループットが低下する可能性がある。
【００１０】
したがって、有効なディスパッチ帯域幅を増加させるように、ＳＭＴプロセッサ内の命令を処理する改良型の方法を考案することが望ましい。さらにこの方法が、過度のオーバヘッドを追加することなく、既存のプロセッサ・ハードウェアをより効率的に利用できることが望ましい。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
したがって本発明の一目的は、コンピュータ・システムのプロセッサ内でプログラム命令をディスパッチするための改良型の方法を提供することである。
【００１２】
本発明の他の目的は、ディスパッチ帯域幅を増加させるために同時マルチスレッディング（ＳＭＴ）プロセッサ設計において有利にインプリメント可能な方法を提供することである。
【００１３】
本発明の他の目的は、ＳＭＴプロセッサ向けの改良型構造を提供することである。
【課題を解決するための手段】
【００１４】
前述の目的は、一般に、少なくとも第１および第２のプログラム命令を受け取るステップと、第１および第２のプログラム命令にそれぞれ第１および第２のリソース・フィールドを関連付けるステップであって、このリソース・フィールドはプログラム命令を実施するためのハードウェア・リソースを特定するものである当該関連付けるステップと、第１および第２のリソース・フィールドに基づいて第１および第２のプログラム命令をマージするためのリソース要件を計算するステップと、計算されたリソース要件に基づいて第１および第２のプログラム命令を同時に実行するためのリソースの有効性を決定するステップと、を有する、複数のハードウェア・リソースを有するプロセッサで命令を処理する方法において達成される。第１および第２のリソース・ベクトルはそれぞれ第１および第２のリソース・フィールドに符号化することが可能であり、計算するステップは第１および第２のリソース・ベクトルを導くためにリソース・フィールドを復号するステップを含む。リソース・フィールドは、それぞれのプログラム命令に関連付けられた命令キャッシュ内に格納することができる。プロセッサは、第１のプログラム命令が第１のスレッドの一部であり、第２のプログラム命令が第２のスレッドの一部である、同時マルチスレッディング・モードで動作することができる。リソースの有効性が命令グループのリソース要件に等しいかまたはこれを超えた場合、それらの命令をハードウェア・リソースに同時にディスパッチすることができる。命令グループを定義するためにプログラム命令の１つに開始ビットを挿入することができる。ハードウェア・リソースは特に、少なくとも固定小数点ユニット、ロード／ストア・ユニット、浮動小数点ユニット、および分岐処理ユニットを含む、実行ユニットとすることができる。したがって本発明は複数の命令を同時に実行させ、それによってハードウェア・リソースをより効率的に使用し、全体のプロセッサ・スループットを上昇させることが可能である。
【００１５】
上記ならびに追加の本発明の目的、特徴、および利点は、以下の詳細に記載された説明で明らかとなろう。
【００１６】
本発明は、添付の図面を参照することによって当業者により良く理解され、その多数の目的、特徴、および利点を明らかにすることができる。
【００１７】
異なる図面中で同じ参照番号を使用している場合は、同様または同一の項目を示す。
【発明を実施するための最良の形態】
【００１８】
次に図面を参照、特に図２を参照すると、本発明に従って構築されたコンピュータ・プロセッサの一実施形態４０が示されている。プロセッサ４０は、一般に単一の集積回路スーパースカラ・マイクロプロセッサからなり、すべて集積回路によって形成される様々な実行ユニット、レジスタ、バッファ、メモリ、および他の機能ユニット（以下で詳細に説明）を含む。プロセッサ４０は、ＲＩＳＣ技法に従って動作することができる。プロセッサ４０は、プロセッサ４０内のバス・インターフェース・ユニット（ＢＩＵ）４４を介して、システム・バスまたはファブリック・バス４２に結合される。ＢＩＵ  ４４は、バス・アービトレーションに加わることによって、プロセッサ４０とメイン・メモリ（図示せず）などのシステム・バス４２に結合された他のデバイスとの間での情報の転送を制御する。プロセッサ４０、システム・バス４２、およびシステム・バス４２に結合された他のデバイスがまとまって、ホスト・データ処理システムを形成する。当業者であれば、いくつかのコンポーネントが省略可能であること、他のコンポーネントが追加可能であること、または本明細書に開示された新規な機能を依然として提供しながらも異なる相互接続が提供されることから、本発明が図２に示された特定の構造に限定されるものでないことを理解されよう。
【００１９】
ＢＩＵ  ４４は、プロセッサ４０内の命令キャッシュおよびメモリ管理ユニット（ＭＭＵ）４６とデータ・キャッシュおよびＭＭＵ  ４８とに接続される。命令キャッシュおよびＭＭＵ  ４６とデータ・キャッシュおよびＭＭＵ  ４８との中にあるような高速キャッシュは、プロセッサ４０が、以前にメイン・メモリからキャッシュへ転送されたデータまたは命令のサブセットへの比較的速いアクセス時間を達成し、その結果、ホスト・データ処理システムのオペレーション速度を改善できるようにするものである。さらに命令キャッシュおよびＭＭＵ  ４６は、各サイクル中に命令キャッシュおよびＭＭＵ  ４６から実行のための命令を取り出す順次フェッチャ（ｆｅｔｃｈｅｒ）５０に結合される。順次フェッチャ５０は、次の命令取り出しアドレスを計算するために、命令キャッシュおよびＭＭＵ  ４６から取り出された分岐命令を分岐処理ユニット（ＢＰＵ）５２に伝送するが、プロセッサ４０内の他の実行回路による実行のために順次命令を命令キュー５４内に一時的に格納する。
【００２０】
プロセッサ４０の実行回路は、ＢＰＵ  ５２に加えて、固定小数点ユニット（ＦＸＵ）５６、ロード・ストア・ユニット（ＬＳＵ）５８、浮動小数点ユニット（ＦＰＵ）６０、および他の分岐処理ユニット（ＢＰＵ）６１を含む、順次命令を実行するための複数の実行ユニットを有する。これらの実行ユニット５６、５８、６０、および６１は、各プロセッサ・サイクル中に特定タイプの順次命令のうちの１つまたは複数の命令を実行する。たとえばＦＸＵ  ５６は、指定された汎用レジスタ（ＧＰＲ）６２またはＧＰＲ名前変更バッファ６４から受け取ったソース・オペランドを利用して、加算、減算、ＡＮＤ演算、ＯＲ演算、およびＸＯＲ演算などの固定小数点数学および論理演算を実行する。ＦＸＵ  ５６は、固定小数点命令の実行に続いて、ＧＰＲ名前変更バッファ６４からの結果データを１つまたは複数のＧＰＲ  ６２へ転送することによって命令が完了するまで、オペランド・データ用の一時ストレージを提供するＧＰＲ名前変更バッファ６４に、命令のデータ結果を出力する。ＦＰＵ  ６０は、浮動小数点レジスタ（ＦＰＲ）６６またはＦＰＲ名前変更バッファ６８から受け取ったソース・オペランドに関して、浮動小数点乗算および除算などの単精度および倍精度の浮動小数点算術および論理演算を実行する。ＦＰＵ  ６０は、ＦＰＲ名前変更バッファ６８からの結果データを選択されたＦＰＲ  ６６へ転送することによって命令が完了するまで結果データを一時的に格納する選択されたＦＰＲ名前変更バッファ６８に、浮動小数点命令の実行の結果として生じたデータを出力する。ＬＳＵ  ５８は、メモリ（すなわち、データ・キャッシュおよびＭＭＵ  ４８内のデータ・キャッシュまたはメイン・メモリ）からのデータを選択されたＧＰＲ  ６２またはＦＰＲ  ６６にロードするか、あるいはＧＰＲ  ６２、ＧＰＲ名前変更バッファ６４、ＦＰＲ  ６６、またはＦＰＲ名前変更バッファ６８のうちの選択された１つからシステム・メモリにデータを格納する、浮動小数点および固定小数点命令を実行する。ＢＰＵ  ６１は、条件コード操作命令および分岐命令を実行する。
【００２１】
プロセッサ４０は、そのスーパースカラ・アーキテクチャの性能をさらに向上させるために、命令のパイプライン方式とアウト・オブ・オーダ実行の両方を採用することができる。したがって命令は、データ依存性が観察されている限り、ＦＸＵ  ５６、ＬＳＵ  ５８、ＦＰＵ  ６０、およびＢＰＵ  ６１によって任意の順序で実行可能である。さらに命令は、一連のパイプライン段階、特に取り出し、復号／ディスパッチ、実行、終了（ｆｉｎｉｓｈ）、および完了（ｃｏｍｐｌｅｔｉｏｎ）の５つの別個のパイプライン段階で、ＦＸＵ  ５６、ＬＳＵ  ５８、ＦＰＵ  ６０、およびＢＰＵ  ６１のそれぞれによって処理することができる。
【００２２】
取り出し段階では、順次フェッチャ５０は、命令キャッシュおよびＭＭＵ  ４６から１つまたは複数のメモリ・アドレスに関連付けられた１つまたは複数の命令を検索する。命令キャッシュおよびＭＭＵ  ４６から取り出された順次命令は、順次フェッチャ５０によって命令キュー５４内に格納される。これとは対照的に、順次フェッチャ５０は命令ストリームから分岐命令を除去（展開（ｆｏｌｄ  ｏｕｔ））し、それらを実行のためにＢＰＵ  ５２に転送する。ＢＰＵ  ５２は、分岐履歴テーブルなどの動的予測メカニズムを有することができる分岐予測メカニズムを含み、分岐を取るか否かを予測することによってＢＰＵ  ５２に投機的に未解決の条件付き分岐命令を実行させることができる。
【００２３】
復号／ディスパッチ段階では、以下でより詳細に説明するように、ディスパッチ・ユニット７０が１つまたは複数の命令を命令キュー５４から復号し、実行ユニット５６、５８、６０、および６１へとディスパッチする。加えてディスパッチ・ユニット７０は、各ディスパッチ済み命令の結果データに対して、ＧＰＲ名前変更バッファ６４またはＦＰＲ名前変更バッファ６８内に名前変更バッファを割り振る。ディスパッチ時、命令は完了ユニット７２の複数スロット完了バッファ内にも格納され、完了まで待機する。プロセッサ４０は、アウト・オブ・オーダ実行中に一意の命令識別子を利用してディスパッチ済み命令のプログラム順序を追跡する。
【００２４】
実行段階では、指示されたオペレーション用のオペランドおよび実行リソースが使用可能になると、実行ユニット５６、５８、６０、および６１がディスパッチ・ユニット７０から受け取った命令を便宜的に実行する。実行ユニット５６、５８、６０、および６１のそれぞれには、好ましくは、オペランドまたは実行リソースが使用可能になるまでその実行ユニットにディスパッチされた命令を格納する予約ステーションが備えられている。命令の実行が終了した後、実行ユニット５６、５８、６０、および６１は、データ結果があればこれを命令のタイプに応じてＧＰＲ名前変更バッファ６４またはＦＰＲ名前変更バッファ６８のいずれかに格納する。その後、実行ユニット５６、５８、６０、および６１は、どの命令が実行を終了したかを完了ユニット７２に通知する。最終的に命令は、完了ユニット７２の完了バッファ外でプログラム順に完了する。ＦＸＵ  ５６およびＦＰＵ  ６０によって実行された命令は、命令のデータ結果をＧＰＲ名前変更バッファ６４およびＦＰＲ名前変更バッファ６８から、それぞれＧＰＲ  ６２およびＦＰＲ  ６６へと転送することによって完了される。ＬＳＵ  ５８によって実行されたロードおよびストア命令は、終了した命令を完了済みストア・キューまたは完了済みロード・キューへと転送することによって完了され、ここから指示されたロード／ストア・オペレーションが実行されることになる。
【００２５】
例示的な実施形態では、プロセッサ４０は、同時マルチスレッディング（ＳＭＴ）を使用して複数のスレッドが各サイクルで異なる命令を発行できるようにすることにより、プロセッサのスループットを強化する。ハードウェア・マルチスレッディングは、粗（ｃｏａｒｓｅ−ｇｒａｉｎｅｄ）マルチスレッディング（実行スレッドが、たとえばデータまたは命令あるいはその両方をメモリから検索するなどの長い待ち時間イベント、プロセッサの中断、などを経験するまで１つのスレッドを実行すること）、または密（ｆｉｎｅ−ｇｒａｉｎｅｄ）マルチスレッディング（サイクルごとにスレッドをインターリーブまたはスイッチすること）などの様々な形式で、プロセッサ４０内でインプリメントすることができる。一般に、プロセッサ４０は同時ハードウェア・マルチスレッディングを使用して、Ｎ個のスレッドまたはＮ個の状態をプロセッサ内で並列に維持し、Ｎ個のスレッドを並行して同時に実行する。プロセッサ・レジスタは、汎用レジスタ、浮動小数点レジスタ、条件レジスタ、浮動小数点状況および制御レジスタ、カウント・レジスタ、リンク・レジスタ、例外レジスタ、保管／復元レジスタ、特定用途向けレジスタ、などのレジスタのうちのいくつかにおいて、Ｎ個のスレッドそれぞれの結果について複製（Ｎ回複製）することができる。セグメント・ルックアサイド・バッファなどの特殊バッファも複製可能であるが、複製できない場合は、各エントリにスレッド番号のタグを取り付けて、各スレッド・スイッチ時にフラッシュすることができる。また、たとえば相関レジスタおよび戻りスタックなどのいくつかの分岐予測メカニズムも複製することができる。各スレッドについてプロセッサ機能のすべてを複製する必要はなく、いくつかの共有レジスタおよびいくつかの複製レジスタがある、または、パイプライン中にいくつかの別々の並列段階があるかまたはパイプラインの他の共有段階がある、あるいはその両方とすることができる。キャッシュ、命令バッファ、ストア・キュー、命令ディスパッチャ、機能または実行ユニット、パイプライン、変換ルックアサイド・バッファ（ＴＬＢ）、または分岐履歴テーブルなどの、プロセッサのある高水準機能は複製する必要がない。
【００２６】
本発明は、命令が様々な実行ユニットにディスパッチされる方法を強化することによってディスパッチ帯域幅を増加させるために、ＳＭＴプロセッサ設計において有利に実施される。各特定の命令がディスパッチ時にどのリソースを使用することになるかを示すために、符号化リソース・フィールドが各命令と共にディスパッチ・ユニット７０に送信される。所与の命令用のリソース・フィールドが符号化され、命令キャッシュおよびＭＭＵ  ４６（「ＩＣａｃｈｅ」）内に書き込まれて、命令それ自体と共にＩＣａｃｈｅ内に格納される。リソースは任意の機能ユニットまたは設計済み機構とすることが可能であり、特に、ＦＸＵ  ５６、ＬＳＵ  ５８、ＦＰＵ  ６０、およびＢＰＵ  ６１などの実行ユニットを指す。
【００２７】
命令８２用のリソース・フィールド８０の実施が図３に示されている。リソース・フィールド８０は、「開始」ビットおよび必要リソース・ビット（この例では３ビット）を含む。開始ビットは、複数命令の同時ディスパッチ用に命令をグループにまとめるために使用される。言い換えれば、複数の命令を１つのグループとしてディスパッチすることができる。以下でより詳細に説明するように、このグループは、ＩＣａｃｈｅに書き込まれる前に事前復号段階で形成することができる。リソース・フィールドが復号されると、復号されたビットはこの命令のリソース要件を示す（すなわち、リソース・ベクトル８２）。この例では、リソース・ビットは、「１  ＦＸＵ」、「１  ＬＳＵ」、「１  ＦＰＵ」、「１  ＢＰＵ」、または「２  ＦＸＵ」という５つのリソース要件のうちの１つを示すように、５つの可能な値のうちの１つに復号される。「１  ＦＸＵ」ベクトルは、命令が１つの（１つだけの（ｏｎｅ  ｏｎｌｙ  ｏｎｅ））ＦＸＵ実行ユニットを使用する必要があることを示し、この値がゼロの場合、そのオペレーションにはロード／ストア・ユニットは不要である。「１  ＦＰＵ」ベクトルは、命令が１つのＦＰＵ実行ユニットを使用する必要があることを示し、この値がゼロの場合、そのオペレーションには浮動小数点ユニットは不要である。「１  ＢＰＵ」ベクトルは、命令が１つのＢＰＵ実行ユニットを使用する必要があることを示し、この値がゼロの場合、そのオペレーションには分岐処理ユニットは不要である。「２  ＦＸＵ」ベクトルは、命令が２つのＦＸＵ実行ユニットを使用する必要があることを示し、この値がゼロの場合、そのオペレーションは「１  ＦＸＵ」ビットによって規定されたゼロまたは１つの固定小数点ユニットを必要とすることになる。したがってこの例は、２つのＦＸＵ  ５６（「ＦＸＵ  ０」および「ＦＸＵ  １」）を有するプロセッサを指す。実施および命令のタイプに応じて、命令が必要とする他の様々なリソースを示すために、復号済みリソース・フィールドの複数のビットをアクティブにすることが可能である。
【００２８】
命令グループは、同じスレッドの同じグループ内にあるすべての命令がまとめてディスパッチできるように形成される。この指示は、（ｉ）グループ内の命令間に依存性はあり得ないこと、および（ｉｉ）グループに対するリソース要求は使用可能リソースを超えられないことを意味する。たとえば、マイクロプロセッサが２つのＦＸＵを有する場合、命令グループは２つを超えるＦＸＵの完了を要求することはできない。所与のスレッドについて、グループ内には最大２つのＦＸＵ命令が存在することを保証するために、グループを終了させるための第２のＦＸＵ命令後の命令で開始ビットが挿入されることになる。他の例では、マイクロプロセッサ内に（任意のタイプの）５つの実行ユニットが存在する場合、前の（より古い（ｏｌｄｅｒ））５つの命令のすべてが同じサイクル中に５つの実行ユニットにディスパッチできるのであれば、６番目の命令で開始ビットが挿入されることになる。したがって、命令がグループ内の第１の命令である場合、開始ビットは無視され、命令および要求されたリソース・フィールドは有効である（命令それ自体が有効であると仮定して）とみなされる。命令がグループ内の第１の命令でない場合、開始ビットは評価され、開始ビットがアクティブ（１）であれば、この命令および任意のより若い（ｙｏｕｎｇｅｒ）命令は無効とみなされ、それらの命令用の要求されたリソース・フィールドも無効である。さらに開始ビットは、依存命令がその結果を生成している命令とは異なるグループにあることを保証するために、より古い命令に依存する任意の命令でも挿入される。
【００２９】
図４は、ＳＭＴモード用に同じサイクル中に２つのスレッドをＦＸＵにディスパッチすることをサポートするための、データフローおよびリソース・フィールド計算を示す。Ｌ２キャッシュからの命令が、各命令用のリソースおよび開始ビットを生成する事前復号回路７６によって検査され、この情報が命令と共にＩＣａｃｈｅ４６に書き込まれる。取り出し時に、命令およびそれら命令用のリソース・フィールドは、ディスパッチ用に命令を格納するために命令キュー５４内の命令バッファ（ＩＢＵＦ）に送られる。ＳＭＴモードでは、１スレッドにつき１つのＩＢＵＦが存在する。この例では、ＳＭＴモードで実行される２つのスレッド「ｔｈｒｅａｄ０」および「ｔｈｒｅａｄ１」が存在する。任意の所与の時点で、一方のスレッドが高いディスパッチ優先度を有し（このスレッドが１次スレッドと呼ばれる）、他方のスレッドは低いディスパッチ優先度を有する（このスレッドが２次スレッドと呼ばれる）ことになる。ディスパッチのためにディスパッチ・ユニット７０によってＩＢＵＦから命令が読み取られる場合、それらの命令用のリソース・フィールドも読み取られる。２つのＩＢＵＦが同時に読み取られる。各スレッドがどのリソースを必要とするかを判別するために、論理回路９０によって各スレッド用のリソース・フィールドが復号される。グループ内の第１の命令の開始ビットは無視される。ある特定の命令Ｘの開始ビットがアクティブであり、この命令Ｘがグループ内の第１の命令ではない場合、上記で説明したように、この命令のリソース・フィールドおよびＸよりも若いいずれの命令も無効となる（すなわち、このグループ内の命令Ｘよりも古い命令のリソース・フィールドは依然として有効である）。その後、両方のスレッドが必要とする合計リソースを算出するために、各スレッドの復号されたリソース・フィールド（リソース・ベクトル）が論理回路９２によってまとめてマージされる。論理回路９２は命令の適切なディスパッチのためにマルチプレクサ選択信号を生成し、これがラッチ９４内に保持される。両方のスレッドを同時にディスパッチするために使用可能なリソースが不十分な場合、スレッドのうちの１つに「保持」信号が生成され、別々のラッチ９６に格納される。その後命令は、論理９２によって生成された選択信号によって制御されるＦＸＵディスパッチ・マルチプレクサ９８に送られる。マルチプレクサ９８は選択された命令をそれぞれのＦＸＵ  ５６に渡す。
【００３０】
両方のスレッドによる合計リソース要件に応じて、いくつかのシナリオを識別することができる。両方のスレッドが必要とする合計リソースが使用可能リソース数に等しいかまたはこれより少ない場合、両方のスレッドからのすべての命令を同時にディスパッチすることができる。たとえばマイクロプロセッサが使用可能な２つのＦＸＵ実行ユニットを有し、ｔｈｒｅａｄ０が必要なＦＸＵは１つのみ、ｔｈｒｅａｄ１が必要なＦＸＵが１つのみである場合、両方のスレッドからのすべての命令を同じサイクルでディスパッチすることができる。両方のスレッドが必要とする合計リソースが使用可能リソース数よりも多い場合、１次スレッドは必要とするすべてのリソースを利用し、２次スレッドは残りのいずれかのリソースを利用することになる。たとえば、ここでもマイクロプロセッサが使用可能な２つのＦＸＵ実行ユニットを有し、ｔｈｒｅａｄ０が必要なＦＸＵが１つであり、ｔｈｒｅａｄ１が必要なＦＸＵは２つであって、ｔｈｒｅａｄ０が１次スレッドである場合、両方のスレッドは依然として同じサイクルでディスパッチ可能であり、ｔｈｒｅａｄ０は１次スレッドであるため１つのＦＸＵ命令をディスパッチするが、ｔｈｒｅａｄ１は２つのＦＸＵ命令のうちの１つしかディスパッチできない。２次スレッドからの第２のＦＸＵ命令は、リソースの計算およびディスパッチの資格のある次のサイクルまで待機することになる。他の例では、さらにここでもマイクロプロセッサが使用可能な２つのＦＸＵ実行ユニットを有し、ｔｈｒｅａｄ０が必要なＦＸＵが２つであり、ｔｈｒｅａｄ１が必要なＦＸＵは１つであって、ｔｈｒｅａｄ０が１次スレッドである場合、ｔｈｒｅａｄ０のみがディスパッチされることになる。ｔｈｒｅａｄ０は１次スレッドであるためそのＦＸＵ命令を両方ともディスパッチできるが、ｔｈｒｅａｄ１はいずれのＦＸＵ命令もディスパッチできない。２次スレッドからのＦＸＵ命令は、リソースの計算およびディスパッチの資格のある次のサイクルまで待機することになる。
【００３１】
図３および４の諸実施形態について説明したアーキテクチャは単なる例であり、同じタイプの実行ユニットが２つだけよりも多い可能性があり、複数の実行ユニットが固定小数点ユニット以外のユニットである可能性もあるため、限定的な意味に解釈されるものではない。たとえば、単一のプロセッサ・コア内に４つのＦＸＵ、４つのＬＳＵ、４つのＦＰＵ、および４つのＢＰＵが存在する可能性がある。これとは逆に本発明は、重複（ｒｅｄｕｎｄａｎｔ）実行ユニットを持たない、すなわち１つのＦＸＵ、１つのＬＳＵ、１つのＦＰＵ、および１つのＢＰＵのみのシステムで利用することも可能であり、これは本発明がそれらユニットのいずれかに複数の命令を同時にディスパッチすることができるためである。
【００３２】
図５は、ＳＭＴモードで２つのスレッドをディスパッチする論理プロセス・フローを示す図である。プロセスは、Ｌ２キャッシュから命令を検索することで開始される（１００）。そのリソースおよび開始ビットを生成するために命令が事前復号され（１０１）、この情報が命令と共に命令キャッシュに書き込まれる（１０２）。その後、命令はＩＢＵＦに取り出される（１０３）。どちらのスレッド（ｔｈｒｅａｄ０またはｔｈｒｅａｄ１）が関係しているかを判別するチェックが行われる（１０４）。命令がｔｈｒｅａｄ０からの場合はＩＢＵＦ０に書き込まれ（１０５）、ディスパッチ・ユニット７０がＩＢＵＦ０から命令を読み取ることになる（１０６）。各命令のリソース・フィールドが復号され（１０８）、命令が必要とするリソースが計算される（１１０）。ステップ１０４に戻り、命令がｔｈｒｅａｄ０からではない（すなわちｔｈｒｅａｄ１の一部である）場合はＩＢＵＦ１に書き込まれ（１１２）、ディスパッチ・ユニット７０がＩＢＵＦ１からそれらの命令を読み取ることになる（１１４）。各命令用のリソース・フィールドが同様に復号され（１１６）、命令が必要とするリソースが計算される（１１８）。両方のスレッドによる合計リソース要件を計算するために、両方のスレッドから復号されたリソース・ベクトルがマージされる（１２０）。その後、ディスパッチ論理が、両方のスレッドが必要とするリソースが使用可能リソースに等しいかまたはこれより少ないかを判別する（１２２）。これに当てはまる場合、両方のスレッドからのすべての命令がディスパッチされる（１２４）。当てはまらない場合、どちらのスレッドが１次スレッドであるかがチェックされる（１２６）。ｔｈｒｅａｄ０が１次スレッドの場合、ｔｈｒｅａｄ０からのすべての命令がディスパッチされ、使用可能リソースが残っていればｔｈｒｅａｄ１からの追加の命令がディスパッチされるが、ディスパッチされなかったｔｈｒｅａｄ１からの命令があれば次のサイクル用に保存されることになる（１２８）。ｔｈｒｅａｄ０が１次スレッドでない（すなわちｔｈｒｅａｄ１が１次である）場合、優先順位が逆になり、ｔｈｒｅａｄ１からのすべての命令がディスパッチされ、可能であればｔｈｒｅａｄ０からの追加の命令がディスパッチされるが、ディスパッチされなかったｔｈｒｅａｄ０からの命令があれば次のサイクル用に保存されることになる（１３０）。
【００３３】
このようにして本発明は、既存のプロセッサ・ハードウェアをより効率的に利用できるようにすることにより、ＳＭＴ環境におけるディスパッチ帯域幅を大幅に改善する。この改善に伴うものは、ＩＣａｃｈｅ  ４６での事前復号段階におけるハードウェアへのわずかな追加と、ディスパッチ・ユニット７０での追加リソース論理のみである。
【００３４】
以上、特定の諸実施形態を参照しながら本発明について説明してきたが、この説明は限定的であると解釈されるべきものではない。当業者が本発明の説明を参照すれば、開示された諸実施形態の様々な修正ならびに本発明の代替実施形態が明らかとなろう。たとえば、本発明は特に高性能マルチプロセッサ・コンピュータ・システムに適しているが、単一プロセッサ・システムにも使用可能である。したがって、添付の特許請求の範囲に定義された本発明の趣旨または範囲から逸脱することなしにこうした修正が可能であることが企図される。
【図面の簡単な説明】
【００３５】
【図１】一般に同一である４つの処理ユニットのうちの１つの内部が詳細に示された、従来の対称型マルチプロセッサ（ＳＭＰ）コンピュータ・システムを示すブロック図である。
【図２】固定小数点ユニット、浮動小数点ユニット、ロード／ストア・ユニット、および分岐処理ユニットを含む複数の実行ユニットを有する、本発明に従って構築されたコンピュータ・プロセッサの一実施形態を示すブロック図である。
【図３】本発明の一実施形態に従ってプログラム命令をディスパッチするための、図２のプロセッサによって使用されるリソース・フィールドを示す絵画図である。
【図４】本発明の一実施に従った、同時マルチスレッディング（ＳＭＴ）モード用に単一のプロセッサ・サイクルにおける複数スレッドのディスパッチをサポートするための、データフローおよびリソース・フィールド計算を示すブロック図である。
【図５】本発明の一実施に従ってプログラム命令をディスパッチするための論理フローを示す図である。
【符号の説明】
【００３６】
４４    ＢＩＵ
４６    命令キャッシュおよびＭＭＵ
４８    データ・キャッシュおよびＭＭＵ
５０    順次フェッチャ
５２    分岐処理ユニット
５４    命令キュー
５６    ＦＸＵ
５８    ＬＳＵ
６０    ＦＰＵ
６１    ＢＰＵ
６２    ＧＰＲ
６４    ＧＰＲ名前変更バッファ
６６    ＦＰＲ
６８    ＦＰＲ名前変更バッファ
７０    ディスパッチ・ユニット
７２    完了ユニット
【図１】
2006114036.tif 000003
【図２】
2006114036.tif 000004
【図３】
2006114036.tif 000005
【図４】
2006114036.tif 000006
【図５】
2006114036.tif 000007