(57)【特許請求の範囲】
【請求項１】
データ処理システムにおいてコードをコンパイルする方法であって、
処理前コードを受信することに応答して、コンパイラが、アドレス生成の加速の候補ではない前記処理前コード内のコード・セクションを特定し、アドレス生成の加速の候補である前記処理前コード内のコード・ブロックであって、少なくとも第１オペランド及び第２オペランドを有する繰り返し演算を指定するコード・ブロックを特定する、ことと、
前記コード・セクションを特定することに応答して、前記コンパイラが、前記特定されたコード・セクションに対応する１つ又は複数の下位レベルの命令を含む処理後コードを生成することと、
前記コード・ブロックを特定することに応答して、前記コンパイラが、前記処理後コードとは別個の演算データ構造及びオペランド・データ構造を生成し、出力することであって、前記演算データ構造は前記繰り返し演算を特定し、前記オペランド・データ構造は複数の第１オペランドのアドレス間の第１のアドレス関係と、複数の第２オペランドのアドレス間の第２のアドレス関係とを定める、ことと、
前記コンパイラが、前記演算データ構造及び前記オペランド・データ構造の処理を呼び出して、前記繰り返し演算を実行するブロック計算コマンドを前記処理後コード内に置くことと、
前記コンパイラが、前記処理後コードを出力することと、
を含む方法。
【請求項２】
前記第１のアドレス関係は、前記複数の第１オペランドの実効アドレス間のアドレス関係を示し、
前記第２のアドレス関係は、前記複数の第２オペランドの実効アドレス間のアドレス関係を示す、請求項１に記載の方法。
【請求項３】
前記第１オペランドはソース・オペランドであり、前記第２オペランドは宛先オペランドである、請求項１に記載の方法。
【請求項４】
前記コンパイラが、前記第１及び第２オペランドのキャッシングに関する情報を前記演算データ構造内に置くことをさらに含む、請求項１に記載の方法。
【請求項５】
前記コンパイラが、前記複数の第１オペランドにアクセスするために生成される第１の数のアドレスと、前記複数の第２オペランドにアクセスするために生成される第２の数のアドレスとをオペランド・データ構造内に示すことをさらに含む、請求項１に記載の方法。
【請求項６】
オペランド・データ構造を生成することは、オペランド・テーブルを生成することを含む、請求項１に記載の方法。
【請求項７】
データ処理システムにより処理されるときに、請求項１乃至６のいずれか１項に従った方法を前記データ処理システムに実行させるためのコンパイラ・プログラム・コードを含む、コード・コンパイラ。
【請求項８】
命令を実行するための少なくとも１つの実行ユニットと、
請求項７に記載のコード・コンパイラによって生成された処理後コードに含まれる、前記少なくとも１つの実行ユニットによる実行用の命令及びブロック計算コマンドをフェッチし、前記ブロック計算コマンドに応じてブロック計算開始信号を出力する命令順序付けユニットと、
プロセッサにより実行され、それぞれ第１オペランド及び第２オペランドを有する１つ又は複数の繰り返し演算を特定する、前記実行用の命令とは別個の演算データ構造と、
前記繰り返し演算の複数回の繰り返しのための複数の第１オペランドのアドレス間の第１の関係と、前記繰り返し演算の複数回の繰り返しのための複数の第２オペランドのアドレス間の第２の関係とを指定する、前記実行用の命令とは別個のオペランド・データ構造と、
前記オペランド・データ構造により指定される前記第１の関係を参照することにより前記複数の第１オペランドのアドレスを、及び、前記オペランド・データ構造により指定される前記第２の関係を参照することにより前記複数の第２オペランドのアドレスを計算し、出力するアドレス生成加速器と、
前記命令順序付けユニットからの前記ブロック計算開始信号に応答して、前記演算データ構造にアクセスし、前記演算データ構造によって特定された前記１つ又は複数の繰り返し演算を前記アドレス生成加速器からのアドレスを用いて実行する計算エンジンと、
を含むプロセッサ。
【請求項９】
前記繰り返し演算の前記繰り返しごとに、前記計算エンジンは、メモリ階層から取り出された前記複数の第１オペランドの１つ及び前記複数の第２オペランドの１つから宛先オペランドを計算するように動作可能である、請求項８に記載のプロセッサ。
【請求項１０】
前記アドレスは実効アドレスである、請求項８に記載のプロセッサ。
【請求項１１】
前記第１オペランドはソース・オペランドであり、前記第２オペランドは宛先オペランドである、請求項８に記載のプロセッサ。
【請求項１２】
前記オペランド・データ構造は、前記第１の関係を用いて生成される第１の数のアドレス及び前記第２の関係を用いて生成される第２の数のアドレスの表示を含む、請求項８に記載のプロセッサ。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、データ処理に関する。
【背景技術】
【０００２】
現在のところ、多くの傾向が、サーバ・クラス及びメインフレームのコンピュータ・システムの開発に影響を及ぼしている。特に、集積回路内のトランジスタの密度は、現在の公式化では、集積回路上の単位面積当たりのトランジスタ数はおよそ１８カ月ごとに倍増すると仮定するムーアの法則に従って増加し続けている。さらに、プロセッサの周波数は、およそ２年ごとに倍増し続けている。さらに、システムの規模（すなわち、システム内の中央処理ユニット（ＣＰＵ）の数）は、数十、数百、場合によっては数千のプロセッサにさえも増え続けている。これらの傾向の結果として、サーバ・クラス及びメインフレームのコンピュータ・システムのピーク性能が急速に高まり、最近開発された大規模高性能
計算（ＨＰＣ）システムは、数百ＴＦＬＯＰＳ（毎秒１兆回の浮動小数点演算）のピーク性能を誇っている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
残念なことに、高性能計算システムにおける持続性能（sustained performance）は、ピーク性能のペースでは向上しておらず、実際には、持続性能対ピーク性能の比率は現在も低く（例えば、１：１０）が、全体的に下降している。かかる未利用の計算能力が利用可能であることについて、今や大きな関心が、より高い持続的性能の達成に向けられている。
【課題を解決するための手段】
【０００４】
本発明は、データ処理システムの１つ又は複数のプロセッサ内でのアドレス生成が加速された場合に、より高い性能（及び、より高い持続対ピーク性能）を達成できることが分かる。
【０００５】
一実施形態において、プロセッサが、命令を実行するための少なくとも１つの実行ユニットと、少なくとも１つの実行ユニットによる実行用の命令をフェッチするための命令順序付けユニットと、プロセッサにより実行される１又は複数の繰り返し演算（iterated operation）を特定する演算データ構造と、命令順序付けユニットからの開始信号に応答して、演算データ構造にアクセスし、演算データ構造により特定された１又は複数の繰り返し演算を実行するための計算エンジンとを含む。
ここで本発明の実施形態が、添付図面を参照して単なる一例として説明される。
【図面の簡単な説明】
【０００６】
【図１】本発明の実施形態による、データ処理システムの高レベル・ブロック図である。
【図２】図１からの処理ユニットの高レベル・ブロック図である
【図３】図２からのプロセッサ・コアのより詳細なブロック図である。
【図４】図３の浮動小数点ユニット（ＦＰＵ）による浮動小数点命令の実行に伴うステップを示す例示的なプロセスの高レベル・ブロック図である
【図５】図３のブロック計算エンジン（ＢＣＥ）の例示的な実施形態のより詳細なブロック図である
【図６】図５のオペランド・データ構造の例示的な実施形態を示す。
【図７】図５の演算データ構造の例示的な実施形態を示す。
【図８】コード・ブロック処理をサポートする関連したオペランド・データ構造及び演算データ構造と共に、ソース・コードのような処理前コードからの、オブジェクト・コードのような処理後コードの生成を示すプロセス・フロー図である。
【図９】本発明の実施形態による、ブロック駆動型計算の例示的な方法の高レベル論理フローチャートである。
【発明を実施するための形態】
【発明を実施するための形態】
【０００７】
ここで図を、特に図１を参照すると、本発明による、マルチプロセッサ・データ処理システムの例示的な実施形態の高レベル・ブロック図が示される。示されるように、データ処理システム１００は、データ及び命令を処理するための複数の処理ノード１０２ａ、１０２ｂを含む。処理ノード１０２ａ、１０２ｂは、アドレス、データ及び制御情報を伝えるように、システム相互接続部１１０に結合されている。システム相互接続部１１０は、例えば、バス型相互接続部、スイッチ型相互接続部、又はハイブリッド相互接続部として実装することができる。
【０００８】
示される実施形態において、各処理ノード１０２は、各々が好ましくはそれぞれの集積回路として実現される４つの処理ユニット１０４ａ−１０４ｄを含むマルチチップ・モジュール（ＭＣＭ）として実現される。各処理ノード１０２内の処理ユニット１０４ａ−１０４ｄは、ローカル相互接続部１１４により通信するように結合され、システム相互接続部１１０のように、１つ又は複数のバス及び／又はスイッチを実装することができる。
【０００９】
各ローカル相互接続部１１４に結合されたデバイスは、処理ユニット１０４だけではなく、１つ又は複数のシステム・メモリ１０８ａ−１０８ｄも含む。一般的に、データ処理システム１００の任意の処理ノード１０２内の任意の処理ユニット１０４において、プロッセサ・コア２００（図２）により、システム・メモリ１０８内にあるデータ及び命令にアクセスし、これらを修正することができる。本発明の代替的実施形態においては、１つ又は複数のシステム・メモリ１０８は、ローカル相互接続部１１４でなく、システム相互接続部１１０に結合させることができる。
【００１０】
当業者であれば、データ処理システム１００は、例えば、周辺機器、相互接続ブリッジ、不揮発性ストレージ、ネットワーク又は付属装置に接続するためのポート等のような、示されていない多くの付加的なコンポーネントを含むことができることを理解するであろう。こうした付加的なコンポーネントは、本発明の理解に必要ではないので、図１には示されず、本明細書ではこれ以上説明されない。しかしながら、本発明がもたらす改善点は、様々なアーキテクチャのデータ処理システムに適用可能であり、決して、図１に示される一般化されたデータ処理システム・アーキテクチャに限定されるものではない。
【００１１】
ここで図２を参照すると、本発明による例示的な処理ユニット１０４のより詳細なブロック図が示される。示される実施形態において、各々の処理ユニット１０４は、命令及びデータを独立して処理するための、複数の（例えば、２つの）プロセッサ・コア２００ａ、２００ｂを含む。各々のプロセッサ・コア２００の動作は、最下位レベルに共有システム・メモリ１０８ａ−１０８ｄを有し、上位レベルに１つ又は複数のレベルのキャッシュ・メモリを有するマルチレベルの揮発性メモリ階層によりサポートされる。示される実施形態において、各々の処理ユニット１０４は、プロセッサ・コア２００ａ−２００ｂから受け取った要求及びローカル相互接続部１１４上でスヌープされた（snooped）動作に応答して、処理ノード１０２内のシステム・メモリ１０８ａ−１０８ｄのそれぞれへの読み書きアクセスを制御する統合メモリ・コントローラ（integrated memory controller、ＩＭＣ）２０６を含む。
【００１２】
例証となる実施形態において、処理ユニット１０４のキャッシュ・メモリ階層は、各プロセッサ・コア２００内のストア・スルー（store-through）・レベル１（Ｌ１）キャッシュと、処理ユニット１０４の全てのプロセッサ・コア２００ａ、２００ｂにより共有されるレベル２（Ｌ２）キャッシュ２３０とを含む。Ｌ２キャッシュ２３０は、Ｌ２アレイ及びディレクトリ２３４、並びに、マスター２３２及びスヌーパ２３６を含むキャッシュ・コントローラを含む。マスター２３２は、関連したプロセッサ・コア２００ａ−２００ｂから受け取ったメモリ・アクセス（及び他の）要求に応答して、ローカル相互接続部１１４及びシステム相互接続部１１０におけるトランザクションを開始し、Ｌ２アレイ及びディレクトリ２３４にアクセスする。スヌーパ２３６は、ローカル相互接続部１１４における動作をスヌープし、適切な応答を与え、動作により要求されるＬ２アレイ及びディレクトリ２３４へのあらゆるアクセスを実行する。
【００１３】
示されるキャッシュ階層は、２つのキャッシュ・レベルしか含まないが、当業者であれば、代替的な実施形態は、上位レベルのキャッシュのコンテンツを完全に含む、部分的に含む、又は含まない、付加的なレベル（Ｌ３、Ｌ４等）のオンチップ・キャッシュ又はオフチップ・キャッシュ、インライン・キャッシュ又はルックアサイド・キャッシュを含むことができることを理解するであろう。さらに、様々なレベルのキャッシュ階層のいずれかを、特定のプロセッサ・コア２００に対して非公開にしてもよく、又は複数のプロセッサ・コア２００により共有してもよい。
【００１４】
さらに図２を参照すると、各々の処理ユニット１０４は、データ処理システム１００内のキャッシュ・コヒーレンスを維持する分散型スヌープ・ベースのコヒーレンス信号伝達機構の一部を実装する、応答論理２１０のインスタンスをさらに含む。さらに、各々の処理ユニット１０４は、ローカル相互接続部１１４とシステム相互接続１１０との間で通信を選択的に転送するための転送論理２１２のインスタンスを含む。最後に、各々の処理ユニット１０４は、Ｉ／Ｏ装置２１６等の１つ又は複数のＩ／Ｏ装置の取り付けをサポートする統合Ｉ／Ｏ（入力／出力）コントローラ２１４を含む。Ｉ／Ｏコントローラ２１４は、Ｉ／Ｏ装置２１６による要求に応答して、ローカル相互接続部１１４及び／又はシステム相互接続部１１０を動作させることができる。
【００１５】
ここで図３を参照すると、図２からのプロセッサ・コア２００の１つのより詳細なブロック図が示される。図示されるように、プロセッサ・コア２００は、プロセッサ・コア２００によってアクセスされる可能性の高い命令及びオペランド・データを一時的にバッファリングする、分岐したレベル１（Ｌ１）命令キャッシュ３０２及びデータ・キャッシュ３０４を含む。さらに、プロセッサ・コア２００は、命令メモリ管理ユニット（instruction memory management unit、ＩＭＭＵ）３０８が実行する実効アドレス−実アドレス変換（effective-to real address translation、ＥＲＡＴ）によって得られる実アドレスを用いて、Ｌ１  Ｉ−キャッシュ３０２から命令をフェッチする命令順序付けユニット（instruction sequencing unit、ＩＳＵ）３０６を有する。当業者により理解されるように、ＩＳＵ３０６は、実行の１つ又は複数のアクティブ・スレッド内のフェッチ命令（すなわち、非投機的フェッチ命令）、又は最終的に実行されることもされないこともある投機的フェッチ命令を要求することができる。いずれにせよ、要求された命令セットがＬ１  Ｉ−キャッシュ３０２内に存在しない場合には、ＩＳＵ３０６は、Ｉ−キャッシュ再ロード・バス３１０を介して、Ｌ２キャッシュ２３０（及び／又は、下位レベルのメモリ）から関連した命令セットを要求する。
【００１６】
ＩＳＵ３０６によりフェッチされた命令は、最初にＩＳＵ３０６内にバッファリングされ、前処理を行なって、例えば、分岐予測を行なうこと又はマイクロコードを用いて命令を変換することができる。ＩＳＵ３０６は、特定の命令により必要とされるリソースを割り当て、次に、命令を、命令のタイプに基づいて、場合によってはアウト・オブ・プログラム・オーダー方式で、実行ユニット３２０−３２８のような実行ユニットにディスパッチする。従って、条件・レジスタ・修正命令（condition-register-modifying instruction）及び分岐命令は、それぞれ条件レジスタ・ユニット（condition register unit、ＣＲＵ）３２０及び分岐実行ユニット（branchexecution unit、ＢＥＵ）３２２にディスパッチされ、固定小数点命令及びロード／ストア命令は、それぞれ固定小数点ユニット（fixed-point unit、ＦＸＵ）３２４及びロード・ストア・ユニット（loadstore unit、ＬＳＵ）３２６にディスパッチされ、浮動小数点命令は、浮動小数点ユニット（floating-pointunit、ＦＰＵ）３２８にディスパッチされる。勿論、ベクトル実行ユニットのような１つ又は複数の他のタイプの実行ユニット、及び、１つ又は複数のタイプのレジスタ・ファイル（例えば、ベクトル・レジスタ・ファイル）を実装することもできる。可能なキューイング及びバッファリングの後、ディスパッチされた命令が、実行ユニット３２０−３２８によって適時（opportunistically）又はインオーダー方式で実行される。
【００１７】
実行ユニット３２０−３２８の１つの中での実行中に、命令は、入力オペランドがある場合はそれを、実行ユニットに結合されたレジスタ・ファイル３３０−３３４内の１つ又は複数の設計レジスタ及び／又はリネーム・レジスタから受け取ることができる。同様に、命令実行のデータ結果（例えば、宛先オペランド）がある場合にはそれが、実行ユニット３２０−３２８によりレジスタ・ファイルに書き込まれる。例えば、ＦＸＵ３２４は、入力オペランドを汎用レジスタ・ファイル（general-purpose register file、ＧＰＲＦ）３３２から受け取り、宛先オペランドをそこに格納し、ＦＰＵ３２８は、入力オペランドを浮動小数点レジスタ・ファイル（floating-point register file、ＦＰＲＦ）３３４から受け取り、宛先オペランドをそこに格納する。ＬＳＵ３２６は、入力オペランドをＧＰＲＦ３３２から受け取り、ターゲット実効アドレスを計算し、データをＬ１  Ｄ−キャッシュ３０４とＧＰＲＦ３３２及びＦＰＲＦ３３４の両方の間で転送させ、その後、データ・メモリ管理ユニット（data memory management unit、ＤＭＭＵ）３４０による実効アドレス−実アドレス変換が行なわれる。同様に、条件・レジスタ・修正命令及び条件・レジスタ・依存命令を実行するときは、ＣＲＵ３２０及びＢＥＵ３２２は、例えば、それぞれの条件レジスタ、リンク・レジスタ、カウント・レジスタ、及びリネーム・レジスタを含むことができる制御レジスタ・ファイル（control register file、ＣＲＦ）３３０にアクセスする。ＢＥＵ３２２は、経路アドレスを得るための条件分岐を解決するために条件レジスタ、リンク・レジスタ、及びカウント・レジスタの値にアクセスし、ＢＥＵ３２２は、このアドレスを、それが指示する経路に沿って命令フェッチを開始するために、命令順序付けユニットに供給する。実行ユニットは、命令の実行を終了した後、ＩＳＵ３０６に通知し、このＩＳＵ３０６は、命令の完了をスケジュールする。
【００１８】
プロセッサ・コア２００はまた、随意的に、しかし好ましくは、要求に先立ってデータを投機的にプリフェッチするデータ・プリフェッチ・ユニット（data prefetch unit、ＤＰＦＵ）３２８を含む。つまり、最近見られたたメモリ・アクセス・パターンに基づいて、ＤＰＦＵ３２８は、投機的データ・フェッチ・アドレスをＬ２キャッシュ２３０又は下位レベルのメモリに提供し、プロセッサ・コア２００によりアクセスされる可能性が高いデータを取り出してＬ１  Ｄ−キャッシュ３０４に入れる。このように、平均データ・アクセス待ち時間が改善される。
【００１９】
プロセッサ・コア２００の動作の前述の説明から分かるように、実行ユニット３２０−３２８による命令の実行は、一般に、共通パターンに従う。このパターンの例として、図４に示される高レベル論理フローチャートにおいて要約される、浮動小数点命令の実行に伴うステップを考える。
【００２０】
図４に示されるプロセスは、ブロック４００において、命令ストリームの実行における任意の時点で始まり、ブロック４０２に進む。ブロック４０２は、ＦＸＵ３２４が、１つ又は複数の固定小数点命令を実行し、ブロック４０６において後で実行される浮動小数点命令の１つ又は複数のソース・オペランドの実効アドレスを決定することを示す。実行に続いて、ＦＸＵ３２４は、ソース・オペランドの実効アドレスをＧＰＲＦ３３２内の１つ又は複数のＧＰＲに格納する。次に、ブロック４０４において、ＬＳＵ３２６は、浮動小数点ロード命令を実行する。浮動小数点ロード命令を実行する際、ＬＳＵ３２６は、ＧＰＲＦ３３２から浮動小数点ソース・オペランドの実効アドレス読み取り、メモリ階層内の浮動小数点ソース・オペランドにアクセスし、浮動小数点ソース・オペランドをＦＰＲＤ３３４内の１つ又は複数のＦＰＲに格納する。ブロック４０６において、ＦＰＵ３２８は、浮動小数点命令を実行する。浮動小数点命令を実行する際、ＦＰＵ３２８は、ＦＰＲＦ３３４内の１つ又は複数の浮動小数点ソース・オペランドにアクセスし、１つ又は複数の浮動小数点宛先オペランドを計算し、浮動小数点宛先オペランドをＦＰＲＦ３３４内の１つ又は複数のＦＰＲＦに格納する。最後に、ブロック４０８において、ＬＤＵ３２６は、浮動小数点ストア命令を実行し、浮動小数点命令の実行結果をメモリ階層に配置する。浮動小数点ストア命令を実行する際、ＬＳＵ３２６は、ＧＰＲＦ３３２から１つ又は複数のソース・オペランドを読み取り（その計算は、１つ又は複数の付加的な固定小数点命令のＦＸＵ３２４による実行を必要とすることがある）、ターゲット実効アドレスを計算し、浮動小数点宛先オペランドを、ターゲット実効アドレスと関連したメモリ階層内の位置に格納する。ブロック４０８に続いて、示されるプロセスは、ブロック４１０で終了する。
【００２１】
理解されるように、例えば、科学的作業負荷を処理するときなどのプログラム実行中、図４に示されるプロセスが、何度も繰り返されることが多い。多くの科学的プログラムは、実効アドレス空間内に規定分布を有する入力オペランドにおいて同じ浮動小数点計算を繰り返し行ない、結果として得られる宛先オペランドを、規定分布を有する実効アドレス空間に格納するので、本発明は、とりわけ、入力オペランド及び宛先オペランドの実効アドレスの生成を加速することによって、性能を向上させることができることが理解される。従って、図３に示されるものを含む少なくとも幾つかの実施形態においては、プロセッサ・コア２００は、命令のブロックについての入力オペランド及び宛先オペランドの実効アドレス空間の計算を加速するブロック計算エンジン（ＢＣＥ）３５０をさらに含む。示される実施形態において、ＢＣＥ３５０は、ＢＣＥ３５０による処理を開始するＩＳＵ３０６、及び、ＢＣＥ３５０によって生成されたメモリ・アクセスの実効アドレスをメモリ階層にアクセスするのに用いられる対応する実アドレスに変換するＤＭＭＵ３４０に結合される。
【００２２】
ここで図５を参照すると、図３のブロック計算エンジン（ＢＣＥ）３５０のより詳細なブロック図が示される。図示されるように、ＢＣＥ３５０は、メモリ階層から読み取られるソース・オペランドの実効アドレス（ＥＡ）を指定する読み取り要求を生成し、出力するアドレス生成加速器（address generation accelerator、ＡＧＡ）５００を含む。ＡＧＡ５００はまた、メモリ階層に書き込まれる宛先オペランドの実効アドレスＥＡを指定する書き込み要求を生成し、出力する。下記にさらに詳述されるように、ＡＧＡ５００は、ＡＧＡ５００にアクセス可能な１つ又は複数のオペランド・データ構造５０２を参照することによって、読み取り要求及び書き込み要求を生成する。図３のＢＣＥ３５０とＤＭＭＵ３４０の結合により示されるように、アドレス生成加速器５００は、メモリ・アクセス要求のＥＡをＤＭＭＵ３４０に提供し、ＤＭＭＵ３４０が、ＥＡをメモリ階層にアクセスするために用いられる実アドレスに変換する。
【００２３】
少なくとも幾つかの実施形態においては、ＡＧＡ５００により生成されたＥＡを用いて、ＡＧＡが生成したＥＡと関連した１つ又は複数の入力オペランドを入力として取得し、ＡＧＡが生成したＥＡと関連した１つ又は複数の宛先オペランドを出力として生成する、実行ユニット３２０−３２８（及び、存在する場合にはベクトル実行ユニット）による命令の実行をサポートする。他の実施形態においては、ＡＧＡ５００は、演算データ構造５１２により示される演算を、ＡＧＡが生成したＥＡと関連した入力オペランドに適用して、ＡＧＡが生成したＥＡと関連した１つ又は複数の宛先オペランドを獲得する、計算エンジン５１０をさらに含む。
【００２４】
ＡＧＡ５００及び計算エンジン５１０は、例えば、プログラマブル論理アレイ（ＰＬＡ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又は１つ又は複数の算術論理ユニット（ＡＬＵ）を用いて実装することができる。
【００２５】
図５は、オペランド・データ構造５０２及び演算データ構造５１２を、ＢＣＥ３５０内の専用ストレージ内にあるものとして示しているが、他の実施形態においては、オペランド・データ構造５０２及び演算データ構造５１２は、代替的に、Ｌ１  Ｄ−キャッシュ３０４内又はプロセッサ・コア２００の他のデータ格納場所内にあってもよい。
【００２６】
ここで図６−図７を参照すると、オペランド・データ構造５０２及び演算データ構造５１２の例示的な実施形態のブロック図が示される。最初に図６を参照すると、オペランド・データ構造５０２の示される実施形態は、各々がそれぞれのコード・ブロックについてのオペランドＥＡを計算するためにＡＧＡ５００により用いられる情報を提供する、１つ又は複数のオペランド・テーブル６００ａ、６００ｂ、・・・６００ｎを含む。つまり、ＡＧＡ５００は、ＩＳＵ３０６によるコマンドに応答して、オペランド・テーブル６００ａにアクセスして第１のコード・ブロックについてのＥＡを計算し、オペランド・テーブル６００ｂにアクセスして第２のコード・ブロックについてのＥＡを計算し、オペランド・テーブル６００ｎにアクセスして後続の第３のコード・ブロックについてのＥＡを計算する。
【００２７】
図６にさらに示されるように、示される例示的な実施形態において、各々のオペランド・テーブル６００は、少なくとも３つのエントリ、すなわち、ソース・オペランドＡ（ＳＡ）エントリ６０２ａ、ソース・オペランドＢ（ＳＢ）エントリ６０２ｂ、及び宛先オペランドＣ（ＤＣ）エントリ６０２ｃを含む。勿論、必要に応じて、付加的なソース・オペランド及び宛先オペランドをサポートする付加的なエントリを実装することもできる。示される実施形態において、各々のエントリ６０２は、所与のタイプの次のオペランドのＥＡを計算するために用いられるアルゴリズムを示すアルゴリズム・フィールド６０４と、ＥＡと関連した入力オペランド又は宛先オペランドのサイズを示すオペランド・サイズ・フィールド６０６と、エントリについて計算されるＥＡの数を示す距離フィールド６０８と、例えば、オペランドがキャッシングされることが好ましいかどうか、そして、キャッシングすることが好ましい場合には、キャッシュ階層内のどのキャッシュ・レベルにキャッシングされるか、といったキャッシング・ポリシーを示すキャッシュ・ヒント・フィールド６１０とを含む、多数のフィールドを含む。各エントリ６０２は、随意的に、他のオペランドのＥＡを計算するベース実効アドレスを示す付加的なフィールドを含むことができる。下記にさらに述べられるように、ベース実効アドレス情報は、代替的に、ブロック計算開始信号のパラメータとして通信することができる。
【００２８】
ここで図７を参照すると、同様に、演算データ構造５１２をテーブルとして実装することもできる。この実施形態においては、１つの演算データ構造５１２が実装され、この１つの演算データ構造５１２は、１つ又は複数の宛先オペランドを取得するために、１つ又は複数のソース・オペランドにおいて実行される演算を示す複数のエントリ６２０ａ−６２０ｎを含む。複数のエントリ６２０ａ−６２０ｎの各々は、特定のコード・ブロックに一意に対応することが好ましく（必須ではないが）、計算エンジン５１０が、１つ又は複数の宛先オペランドを取得するために、各エントリ６２０により示される演算を、ＡＧＡ５００によりメモリ階層から取り出された各々の入力オペランド・セットに適用することを意味する。
【００２９】
図６−図７は、テーブルを用いるオペランド・データ構造５０２及び演算データ構造５１２の例示的な実施形態を示すが、他の実施形態においては、アレイ、リンク・リスト等のような１つ又は複数の他のタイプのデータ構造を、代替的に又は付加的に用い得ることも理解すべきである。
【００３０】
ここで図８を参照すると、１つ又は複数のオペランド・データ構造５０２及び１つ又は複数の演算データ構造５１２を生成するための例示的なプロセスを示すデータ・フロー図が示される。示されるプロセスにおいて、揮発性又は不揮発性の有形データ・ストレージ内にあり、図１のデータ処理システム（又は、いずれかの他の適切なデータ処理システム）のようなデータ処理システム上で実行することができる、コンパイラ７０２のようなプログラム・コードが、ソース・コード７００又は中間コードのような処理前コードを受け取り、該処理前コードをコンパイルして、オブジェクト・コード７０４（又は何らかの中間コード）のような処理後コード７０４を得る。コンパイル・プロセスにおいては、コンパイラ７０２も、１つ又は複数のオペランド・データ構造５０２及び１つ又は複数の演算データ構造５１２を生成する。
【００３１】
一般に、ソース・コード７００は、例えば高水準言語又はスクリプトで書かれた命令、ステートメント、又はコマンドを含む。示される例においては、ソース・コード７００は、ＢＣＥ３５０による処理の候補ではないコード・セクション７１０ａ、７１０ｂを含む。例えば、コード・セクション７１０ａは、変数ｘ及びｙの相対値に応じた条件分岐を含む。さらに、ソース・コード７００は、ＢＣＥ３５０による処理の候補である、コード・ブロック７１２等の１つ又は複数のコード・ブロックを含む。示される例においては、コード・ブロック７１２は、ループ変数ｘの値によって選択されるアレイｂ、ｃ及びｄ内の浮動小数点値に浮動小数点の乗加算演算を行ない、次に、各計算の結果を、ループ変数ｘの値によって再び選択されるアレイａ内にある位置に配置する、ホワイル・ループ（while loop）を含む。
【００３２】
ソース・コード７００の受領に応答して、コンパイラ７０２は、加速の候補ではないコード・セクションを特定し、対応するオブジェクト・コード７１４（例えば、アセンブリ言語コード又はマシン・コード）を生成する。例えば、本例では、コンパイラ７０２は、コード・セクション７１０ａにより示される条件分岐に対応するアセンブリ命令を生成する。さらに、コンパイラ７０２は、加速の候補である、コード・ブロック７１２のような１つ又は複数のコード・ブロックを特定し、そうしたコード・ブロックの各々について、オペランド・データ構造５０２及び演算データ構造５１２のような、対応するエントリを含むデータ構造を生成する。
【００３３】
しかしながら、コンパイラ７０２は、コード・ブロック７１２の機能に明示的に命令するアセンブリ・コード（又は、他の下位レベル・コード）を生成しない。代わりに、コンパイラ７０２は、ブロック計算コマンド（block computation command、ＢＣＣ）７１６をオブジェクト・コード７０４に挿入し、ブロック計算コマンド（ＢＣＣ）７１６は、ＢＣＥ３５０を含むプロセッサ・コア２００によって処理されると、オペランド・データ構造５０２及び演算データ構造５１２におけるエントリに対するＢＣＥ３５０の動作を呼び出して、コード・ブロック７１２により指定された機能を達成する。ＢＣＣは、プロセッサ・コア２００の実行ユニットにおいて直接実行するように意図されていないので、ＢＣＣは、実行ユニット３２０−３２８により実行される命令に対して用いられる命令セット・アーキテクチャに属する必要も又はこれに従う必要もない。
【００３４】
示される例において、コンパイラ７０２は、ソース・オペランドｂ［ｘ］、ｃ［ｘ］、及びｄ［ｘ］に対する３つのソース・オペランド・エントリ６０２と、宛先オペランドａ［ｘ］に対する宛先オペランド・エントリ６０２とを含むオペランド・テーブル６００を生成する。次に、コンパイラ７０２は、アルゴリズムｘ＝ｘ＋ｙを、これらのエントリ６０２の各々のアルゴリズム・フィールド６０４に置き、オペランド・サイズ８ｈ（８バイトの単精度浮動小数点値のサイズを表す）を、各エントリ６０２のオペランド・サイズ・フィールド６０６に置く。各エントリ６０２の距離フィールド６０８において、コンパイラ７０２は、コード・ブロック７０４内のホワイル・ループが実行される回数を表す、１０進値１０に対応する値を置く。最後に、コンパイラ７０２は、ソース・オペランド及び宛先オペランドと関連したキャッシュ・ヒントがある場合はそれをキャッシュ・ヒント・フィールド６１０に置く。コンパイラ７０２は、例えば、ソース・オペランド及び宛先オペランドの将来の使用を参照することによって、キャッシュ・ヒントを決定する。例えば、宛先オペランドが計算されるものの、二度と参照されない場合には、コンパイラ７０２は、キャッシュ・ヒント・フィールド６１０において、宛先オペランドをキャッシングすべきではないことを示す。代替的に、計算直後に宛先オペランドを再び参照する（例えば、後の宛先オペランドの計算の入力オペランドとして）場合には、コンパイラ７０２は、キャッシュ・ヒント・フィールド６１０において、宛先オペランドを例えばＬ１  Ｄ−キャッシュ３０４内にキャッシングすべきであることを示す。
【００３５】
ここで図９を参照すると、本発明による、ブロック駆動型計算の例示的なプロセスの高レベル論理フローチャートが示される。図示されるプロセスは、例えば、図３のプロセッサ・コア２００によって実行することができ、幾つかの実施においては、１つ又は複数のハードウエア・スレッド内のプロセッサ・コア２００によって、プロセスの複数のインスタンスを同時に実行することができる。論理フローチャートとして、示されるステップの少なくとも幾つかを同時に又は示される順序とは異なる順序で行なうことができる。
【００３６】
示されるように、プロセスは、ブロック８００で始まり、次に、処理のためにＩＳＵ３０６がオブジェクト・コード７０４内の次のコード・セットをフェッチすることを示すブロック８０２に進む。次に、図９に示されるプロセスは分岐し、ブロック８０４及びブロック８１０に進む。
【００３７】
まずブロック８０４を参照すると、ＩＳＵ３０６は、フェッチされたコード・セット内の命令の実行を行なう際に実行ユニット３２０−３２８により用いられるリソース（例えば、リネーム及び設計レジスタ、バッファ等）を割り当て、フェッチされたコード・セット内の命令を実行ユニット３２０−３２８にディスパッチする。ディスパッチされた命令の受信に応答して、実行ユニット３２０−３２８の１つ又は複数は、割り当てられたリソースを用いてディスパッチされた命令を実行する（ブロック８０６）。命令を実行した後、ＩＳＵ３０６は命令を終了し、命令実行中に用いられたリソースを解放又は再割り当てする。その後、プロセスはブロック８０２に戻る。
【００３８】
ここでブロック８１０を参照すると、ＩＳＵ３０６は、フェッチされたコード・セットが少なくとも１つのブロック計算コマンド（ＢＣＣ）を含むかどうかを判断する。含まない場合、プロセスは、既に説明したブロック８０２に戻る。しかしながら、フェッチされたコード・セットが少なくとも１つのＢＣＣを含むとＩＳＵ３０６が判断した場合、ブロック８１２に示されるように、ＩＳＵ３０６は、各ＢＣＣに対応するブロック計算開始要求をＢＣＥ３５０に伝送する。少なくとも幾つかの実施形態において、ブロック計算開始信号は、オペランド・データ構造５０２内の適切なオペランド・テーブル６００と、演算データ構造５１２内の適切なエントリ６２０へのポインタを含む又は参照する。オペランド・テーブル６００内に存在しない場合、ブロック計算開始要求はまた、各々のソース・オペランド又は宛先オペランドについてのベース実効アドレス（例えば、ＳＡ、ＳＢ、ＤＣ）へのポインタを含む又は参照することも好ましい。
【００３９】
各々のブロック計算開始信号の受信に応答して、ＡＧＡ５００は、ＢＣＣに対応するオペランド・テーブル６００にアクセスする。アルゴリズム・フィールド６０４により示されるアルゴリズムを用いて、ＡＧＡ５００は、ソース・オペランドについての１つ又は複数のＥＡのシーケンスを生成し、ＥＡを読み取り要求内のＤＭＭＵ３４０に発行する（ブロック８１４）。ＤＭＭＵ３４０は、ＥＡを実アドレスに変換し、次に、読み取り要求をメモリ階層に転送する。メモリ階層は、計算エンジン５１０に、実アドレスと関連したソース・オペランドを与えることによって、読み取り要求に応答する。データ依存性が存在しない限り、演算データ構造５１２により示される演算の１回又は複数回の繰り返しのソース・オペランドは、どのような順序でもメモリ階層から取り出すことができる。
【００４０】
さらに、ブロック８１６において、計算エンジン５１０は、演算データ構造５１２の指定されたエントリにより示される演算を用いて、ブロック８１４に示されるステップを介して得られたソース・オペランドから、１つ又は複数の宛先オペランドを計算する。ソース・オペランドはデータ依存性がみられる場合に利用可能になるので、計算エンジン５１０は、演算を任意の順序で何度も繰り返し実行することができる。計算エンジン５１０は、キャッシュ・ヒント・フィールド６１０内に示されるキャッシュ・ポリシーに従って、演算のソース・オペランド及び／又は宛先オペランドをキャッシュ階層内にキャッシングすることが好ましい。従って、異なるキャッシュ・ポリシーは、オペランド・データの再使用に関するコンパイラにより提供された情報に基づいて、同じ演算又は異なる演算の異なるオペランドに適用することができる。
【００４１】
ブロック８１６に示される演算の前、最中及び／又は後、ＡＧＡ５００は、ＢＣＣに対応するオペランド・テーブル６００に再びアクセスする。宛先オペランドについてのアルゴリズム・フィールドにより示されるアルゴリズムを用いて、ＡＧＡ５００は、宛先オペランドについての１つ又は複数のＥＡのシーケンスを生成する（ブロック８１８）。宛先オペランドが計算エンジン５１０によって生成され、関連したＥＡがＡＧＡ５００によって生成されると、ＢＣＥ３５０は、ＤＭＭＵ３４０を介して、宛先オペランド及び関連したＥＡを指定する書き込み要求をメモリ階層に発行し、ＤＭＭＵ３４０は、ＥＡを実アドレスに変換し、サービスのために書き込み要求をメモリ階層に転送する。ブロック８２０に続いて、プロセスは、既述のブロック８０２に戻る。
【００４２】
１つ又は複数の実施形態を具体的に示し、説明したが、当業者であれば、本発明の範囲から逸脱することなく、形態及び詳細に関する様々な変更を行なうことができることを理解するであろう。例えば、本発明の態様は、少なくとも幾つかの機能に命令するプログラム・コードを実行するコンピュータ・システムに関して説明されたが、本発明の１つ又は複数の実施形態は、代替的に、データ処理システムと併せて用いるためのプログラムとして実装できることを理解すべきである。例えば、コンパイラ７０２は、プログラムとして実現することができる。さらに、オペランド・データ構造及びオブジェクト・コード７０４のような処理後コード、並びに随意的に演算データ構造を、合わせてプログラムとして実現することができる。こうしたプログラムは、本発明の機能に命令するプログラム・コードをコード化するコンピュータ可読媒体を含む。コンピュータ可読媒体は、例えば、有形ストレージ媒体（例えば、ＣＤ−ＲＯＭ、ＤＶＤ、ディスケット、又はハードディスク、システム・メモリ、フラッシュ・メモリ等）、或いはデジタル・ネットワーク及びアナログ・ネットワーク等の通信媒体として実装することができる。
【００４３】
本特許出願は、以下の同時係属中の出願に関連しており、これらの全体を引用により本明細書に組み込む。
（１）米国特許出願第１２／３３６，３１５号（整理番号第ＡＵＳ９２００７０３８５ＵＳ１号）
（２）米国特許出願第１２／３３６，３４２号（整理番号第ＡＵＳ９２００８０２８５ＵＳ１号）
（３）米国特許出願第１２／３３６，３５０号（整理番号第ＡＵＳ９２００８０２８６ＵＳ１号）、及び
（４）米国特許出願第１２／３３６，３０１号（整理番号第ＡＵＳ９２００８０２８７ＵＳ１号）
【符号の説明】
【００４４】
１００：データ処理システム
１０２、１０２ａ、１０２ｂ：処理ノード
１０４、１０４ａ−１０４ｄ：処理ユニット
１０８、１０８ａ−１０８ｄ：システム・メモリ
１１０：システム相互接続部
１１４：ローカル相互接続部
２００、２００ａ、２００ｂ：プロッセサ・コア
２０６：メモリ・コントローラ（ＩＭＣ）
２１０：応答論理
２１２：転送論理
２１４：統合Ｉ／Ｏ（入力／出力）コントローラ
２１６：Ｉ／Ｏ装置
２３０：Ｌ２キャッシュ
２３２：マスター
２３４：Ｌ２アレイ及びディレクトリ
２３６：スヌーパ
３０２：Ｌ１命令キャッシュ
３０４：データ・キャッシュ
３０６：命令順序付けユニット（ＩＳＵ）
３０８：命令メモリ管理ユニット（ＩＭＭＵ）
３２０：条件レジスタ・ユニット（ＣＲＵ）
３２２：分岐実行ユニット（ＢＥＵ）
３２４：固定小数点ユニット（ＦＸＵ）
３２６：ロード・ストア・ユニット（ＬＳＵ）
３２８：浮動小数点ユニット（ＦＰＵ）
３２９：データ・プリフェッチ・ユニット（ＤＰＦＵ）
３３０：制御レジスタ・ファイル（ＣＲＦ）
３３２：汎用レジスタ・ファイル（ＧＰＲＦ）
３３４：浮動小数点レジスタ・ファイル（ＦＰＲＦ）
３４０：データ・メモリ管理ユニット（ＤＭＭＵ）
５００：アドレス生成加速器（ＡＧＡ）
５０２：オペランド・データ構造
５１０：計算エンジン
５１２：演算データ構造
６００ａ、６００ｂ、・・・６００ｎ：オペランド・テーブル
６０２ａ：ソース・オペランドＡ（ＳＡ）エントリ
６０２ｂ：ソース・オペランドＢ（ＳＢ）エントリ
６０２ｃ：宛先オペランドＣ（ＤＣ）エントリ
６０４：アルゴリズム・フィールド
６０６：オペランド・サイズ・フィールド
６０８：距離フィールド
６１０：キャッシュ・ヒント・フィールド
６２０ａ、・・・、６２０ｎ：エントリ
７００：ソース・コード
７０２：コンパイラ
７０４：オブジェクト・コード
７１０ａ、７１０ｂ：コード・セクション
７１２：コード・ブロック
７１４：オブジェクト・コード
７１６：ブロック計算コマンド（ＢＣＣ）
【図１】
0005671474.tif 000002
【図２】
0005671474.tif 000003
【図３】
0005671474.tif 000004
【図４】
0005671474.tif 000005
【図５】
0005671474.tif 000006
【図６】
0005671474.tif 000007
【図７】
0005671474.tif 000008
【図８】
0005671474.tif 000009
【図９】
0005671474.tif 000010