(57)【要約】  ブロックベースプロセッサアーキテクチャにおいてターゲットアドレスに対する早期アクセスを提供することについて、システム、方法、及びコンピュータ読取可能ストレージが開示される。開示されるテクノロジーの一例において、ブロックベースアーキテクチャにおいて分岐を実行する方法が、ブロックベースアーキテクチャの第１のコアを用いて第１の命令ブロックの１つ以上の命令を実行することを含むことができる。方法は、第１の命令ブロックがコミットされる前に、第２の命令ブロックの命令の非投機的実行を開始することを含むことができる。
2018519602.tif 000002
【特許請求の範囲】
【請求項１】
第１の命令ブロックの命令を実行し、かつ前記第１の命令ブロックがコミットされる前に第２の命令ブロックのターゲットアドレスを生成するように構成された第１のプロセッサコアを含む複数のプロセッサコアと、
前記第１の命令ブロックがコミットされる前に、前記第２の命令ブロックの前記ターゲットアドレスを受信し、かつ前記第２の命令ブロックの非投機的実行を開始するように構成された制御論理と、
を含むブロックベースコンピューティングシステム。
【請求項２】
前記複数のプロセッサコアにより共有されたリソース、をさらに含み、前記制御論理は、前記共有されたリソースに対するアクセスを、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る前記リソースに対しての優先順位を有するように、優先順位づけるようにさらに構成される、請求項１に記載のブロックベースコンピューティングシステム。
【請求項３】
前記第２の命令ブロックの非投機的実行を開始することは、前記第１の命令ブロックのヘッダ内にエンコードされたエグジットタイプ情報に少なくとも部分的に基づく、請求項１又は２のうちいずれか１項に記載のブロックベースコンピューティングシステム。
【請求項４】
前記第２の命令ブロックの実行を開始することは、前記第２の命令ブロックを前記複数のプロセッサコアのうち第２のコアにロードすることを含む、請求項１乃至３のうちいずれか１項に記載のブロックベースコンピューティングシステム。
【請求項５】
前記第１の命令ブロックは、前記第１のコアの第１の命令ウィンドウにロードされ、前記第２の命令ブロックの実行を開始することは、前記第２の命令ブロックを前記第１のコアの第２の命令ウィンドウにロードすることを含む、請求項１乃至４のうちいずれか１項に記載のブロックベースコンピューティングシステム。
【請求項６】
ブロックベースアーキテクチャにおいて分岐を実行する方法であって、
前記ブロックベースアーキテクチャの第１のコアを用いて第１の命令ブロックの１つ以上の命令を実行することと、
前記第１の命令ブロックがコミットされる前に、第２の命令ブロックの命令の非投機的実行を開始することと、
を含む方法。
【請求項７】
前記第１の命令ブロックの前記命令のプレディケートを評価することと、
前記プレディケート評価に少なくとも部分的に基づいて、前記開始することを実行することと、
をさらに含む請求項６に記載の方法。
【請求項８】
前記第１の命令ブロックの命令ヘッダ内に記憶されたエグジットタイプ情報を評価することと、
前記エグジットタイプ情報に少なくとも部分的に基づいて、前記開始することを実行することと、
をさらに含む請求項６又は７のうちいずれか１項に記載の方法。
【請求項９】
前記開始された、非投機的実行は、前記第２の命令ブロックを前記ブロックベースアーキテクチャのＬ１キャッシュにプリフェッチすることを含む、請求項６乃至８のうちいずれか１項に記載の方法。
【請求項１０】
前記開始された、非投機的実行は、前記第２の命令ブロックを前記ブロックベースアーキテクチャの第２のコアの命令ウィンドウにフェッチすることを含む、請求項６乃至９のうちいずれか１項に記載の方法。
【請求項１１】
前記第２の命令ブロックは、前記開始することの前に前記ブロックベースアーキテクチャの第２のコアにロードされ、前記開始された、非投機的実行は、前記第２のコアにロードされた前記第２の命令ブロックをリフレッシュすることを含む、請求項６乃至１０のうちいずれか１項に記載の方法。
【請求項１２】
前記開始された、非投機的実行は、前記第２の命令ブロックのヘッダをプリフェッチすることを含む、請求項６乃至１１のうちいずれか１項に記載の方法。
【請求項１３】
前記ブロックベースアーキテクチャの共有されたリソースに対するアクセス要求を、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る前記共有されたリソースに対しての優先順位を有するように、優先順位づけること、
をさらに含む請求項６乃至１２のうちいずれか１項に記載の方法。
【請求項１４】
ブロックベースアーキテクチャのための命令を有するコンピュータ読取可能記憶デバイス又はメモリであって、前記命令は前記ブロックベースアーキテクチャにより実行されると前記ブロックベースアーキテクチャに請求項６乃至１３のうちいずれか１項に記載の方法を実行させる、コンピュータ読取可能記憶デバイス又はメモリ。
【請求項１５】
ソースコードをブロックベースコンピュータアーキテクチャ上で実行可能なマシンコードにコンパイルする方法をプロセッサに実行させる命令を有するコンピュータ読取可能記憶デバイス又はメモリであって、前記命令は、
前記プロセッサに、前記ブロックベースコンピュータアーキテクチャ上で実行可能なマシンコード命令のストリームを生成させる命令であって、前記マシンコード命令のストリームは複数の命令ブロックに分割される、命令と、
前記プロセッサに、前記複数の命令ブロックのそれぞれの命令ブロックのエグジットタイプを決定させる命令と、
前記プロセッサに、それぞれの命令ブロックの前記エグジットタイプを前記それぞれの命令ブロックのヘッダ内にエンコードさせる命令と、
を含むコンピュータ読取可能記憶デバイス又はメモリ。
【発明の詳細な説明】
【背景技術】
【０００１】
マイクロプロセッサは、関連するプロセッサ命令セットアーキテクチャ（ＩＳＡ）における変更がほとんどない状態で、ムーアの法則により予測された継続したトランジスタスケーリングのため、トランジスタ数、集積回路コスト、製造資本、クロック周波数、及びエネルギー効率における継続的な進歩の恩恵を受けてきた。しかしながら、この４０年にわたり半導体産業を推進してきたフォトリソグラフィックのスケーリングから実現される恩恵は減速しつつあり、あるいは逆転さえしつつある。縮小命令セットコンピューティング（ＲＩＳＣ）アーキテクチャは、長年の間、プロセッサ設計において支配的パラダイムであった。アウトオブオーダスーパースカラ実装は、面積又は性能における持続した向上を提示していない。したがって、プロセッサＩＳＡにおける向上が性能向上を拡大する十二分な機会が存在する。
【発明の概要】
【０００２】
ブロックベースプロセッサ命令セットアーキテクチャ（ＢＢ‐ＩＳＡ）においてターゲットアドレスに対する早期アクセスを提供することについて、方法、装置、及びコンピュータ読取可能記憶デバイスが開示される。解決策のために説明される手法及びツールは、プロセッサ性能を潜在的に向上させることができ、互いに対して別個に、又は様々な組み合わせで実装できる。下記でより十分に説明されるように、説明される手法及びツールは、デジタルシグナルプロセッサ、マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、ソフトプロセッサ（例えば、再構成可能論理を用いてフィールドプログラマブルゲートアレイ（ＦＰＧＡ）で実装されたマイクロプロセッサコア）、プログラマブル論理、又は他の適切な論理回路において実装できる。当業者に容易に明らかになるように、開示されるテクノロジーは、様々なコンピューティングプラットフォームにおいて実装でき、該コンピューティングプラットフォームには、これらに限られないが、サーバ、メインフレーム、セルフォン、スマートフォン、ＰＤＡ、ハンドヘルドデバイス、ハンドヘルドコンピュータ、タッチスクリーンタブレットデバイス、タブレットコンピュータ、ウェアラブルコンピュータ、及びラップトップコンピュータが含まれる。
【０００３】
開示されるテクノロジーのいくつかの例において、ブロックベースコンピューティングシステムは、複数のプロセッサコアと制御論理とを含むことができる。プロセッサコアは、第１の命令ブロックの命令を実行し、かつ第１の命令ブロックがコミットされる前に第２の命令ブロックのターゲットアドレスを生成するように構成された第１のプロセッサコアを含むことができる。制御論理は、第１の命令ブロックがコミットされる前に第２の命令ブロックのターゲットアドレスを受信し、かつ第２の命令ブロックの実行を開始するように構成できる。開始された、第２の命令ブロックの実行は、第１の命令ブロックのヘッダ内にエンコードされたエグジットタイプ情報に少なくとも部分的に基づくことができる。
【０００４】
本発明の概要は、下記で発明の詳細な説明においてさらに説明される概念のうちの選択物を簡素化された形式で紹介するために提供される。本発明の概要は、請求される対象事項の重要な特徴又は必須の特徴を識別するようには意図されず、請求される対象事項の範囲を限定するために使用されるようにも意図されない。開示される対象事項についての前述及び他の目的、特徴、及び利点が、添付図面を参照して進む下記の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【０００５】
【図１】開示されるテクノロジーのいくつかの例で使用できる、複数のプロセッサコアを含むブロックベースプロセッサを例示する。
【図２】開示されるテクノロジーのいくつかの例で使用できる、ブロックベースプロセッサコアを例示する。
【図３】開示されるテクノロジーの特定の例による、幾つかの命令ブロックを例示する。
【図４】ソースコードの部分とそれぞれの命令ブロックとを例示する。
【図５】開示されるテクノロジーのいくつかの例で使用できる、ブロックベースプロセッサヘッダ及び命令を例示する。
【図６】ブロックベースコンピュータアーキテクチャをターゲットにしたコンパイラのための一例示的な方法を例示するフローチャートである。
【図７】開示されるテクノロジーのいくつかの例で使用できる、一例示的な命令ブロックの様々な態様を例示する。
【図８】ブロックベースコンピュータアーキテクチャ上での命令の実行を制御する方法の一例を例示するフローチャートである。
【図９】開示されるテクノロジーのいくつかの例で使用できる、ブロックベースアーキテクチャの異なる構成及びオペレーションの例を例示する。
【図１０】開示されるテクノロジーのいくつかの例で使用できる、ブロックベースアーキテクチャの異なる構成及びオペレーションの例を例示する。
【図１１】開示されるテクノロジーのいくつかの実施形態を実装するのに適切なコンピューティング環境を例示するブロック図である。
【発明を実施するための形態】
【０００６】
Ｉ．概論
本開示は、いかなる方法でも限定するように意図されない代表的な実施形態の文脈で説明される。
【０００７】
本出願において用いられるとき、単数形“ａ”、“ａｎ”、及び“ｔｈｅ”は、文脈が別段明確に示さない限り、複数形を含む。さらに、用語“ｉｎｃｌｕｄｅｓ”は、“ｃｏｍｐｒｉｓｅｓ”を意味する。さらに、用語「結合された」は、アイテムを一緒に結合又はリンクする機械的、電気的、磁気的、光学的、及び他の実際的方法を包含し、結合されたアイテム間における中間要素の存在を除外しない。さらに、本明細書において用いられるとき、用語「及び／又は」は、フレーズ内の任意の１つのアイテム又はアイテムの組み合わせを意味する。
【０００８】
本明細書に説明されるシステム、方法、及び装置は、いかなる方法でも限定するとみなされるべきではない。代わりに、本開示は、単体で、並びに互いの様々なコンビネーション及びサブコンビネーションで、様々な開示される実施形態のすべての新規及び非自明の特徴及び態様に向けられる。開示されるシステム、方法、及び装置は、いかなる特定の態様若しくは特徴又はこれらの組み合わせにも限定されず、開示される事物及び方法は、いずれか１つ以上の特定の利点が存在し又は問題が解決されることを必要としない。さらに、開示される実施形態のいかなる特徴又は態様も、互いの様々なコンビネーション及びサブコンビネーションで使用できる。
【０００９】
開示される方法のうちいくつかについてのオペレーションが、簡便な提示のために特定の順序で説明されるが、この説明の仕方は、下記で説明される特定の言語により特定の順序付けが必要とされない限り、再配置を包含することが理解されるべきである。例えば、順次的に説明されたオペレーションが、いくつかの場合、再配置され、あるいは同時に実行されてもよい。さらに、簡素化のため、添付された図面は、開示される事物及び方法が他の事物及び方法と関連して使用できる様々な方法を示さないことがある。さらに、本説明は時に、「作成する」、「生成する」、「表示する」、「受信する」、「出す」、「検証する」、「実行する」、及び「開始する」などの用語を使用して、開示される方法を説明する。これら用語は、実行される実際のオペレーションの高水準の説明である。これら用語に対応する実際のオペレーションは、特定の実装に依存して変動することになり、当業者によって容易に認識できる。
【００１０】
本開示の装置又は方法を参照して本明細書に提示されるオペレーションの理論、科学的原理、又は理論的説明は、より良い理解を目的として提供されており、範囲を限定するようには意図されない。別記の請求項における装置及び方法は、こうしたオペレーション理論により説明される仕方で機能する装置及び方法に限定されない。
【００１１】
開示される方法のいずれも、１つ以上のコンピュータ読取可能媒体（例えば、１つ以上の光学媒体ディスク、揮発メモリコンポーネント（ＤＲＡＭ又はＳＲＡＭなど）、又は不揮発メモリコンポーネント（ハードドライブなど）などの、コンピュータ読取可能媒体）上に記憶され、かつコンピュータ（例えば、任意の市販のコンピュータであり、スマートフォン、又はコンピューティングハードウェアを含む他のモバイルデバイスが含まれる）上で実行されるコンピュータ実行可能命令として実装できる。開示される手法を実施するコンピュータ実行可能命令のうち任意のもの、並びに開示される実施形態の実施の間に作成及び使用される任意のデータは、１つ以上のコンピュータ読取可能媒体（例えば、コンピュータ読取可能記憶媒体）に記憶できる。コンピュータ実行可能命令は、例えば、専用ソフトウェアアプリケーション、又は、ウェブブラウザ若しくは他のソフトウェアアプリケーション（リモートコンピューティングアプリケーションなど）を介してアクセス若しくはダウンロードされるソフトウェアアプリケーションの、一部であってもよい。こうしたソフトウェアは、例えば、単一のローカルコンピュータ上で（例えば、任意の適切な市販のコンピュータ上で実行するエージェントとして）、又は１つ以上のネットワークコンピュータを用いてネットワーク環境内で（例えば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバネットワーク（クラウドコンピューティングネットワークなど）、又は他のこうしたネットワークを介して）実行できる。
【００１２】
明りょうさのため、ソフトウェアベースの実装のうち特定の選択された態様のみが説明される。当分野において周知である他の詳細は省略される。例えば、開示されるテクノロジーはいかなる特定のコンピュータ言語又はプログラムにも限定されないことが理解されるべきである。例えば、開示されるテクノロジーは、Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）、又は任意の他の適切なプログラミング言語で書かれたソフトウェアにより実装できる。同様に、開示されるテクノロジーは、任意の特定のコンピュータ又はハードウェアのタイプに限定されない。適切なコンピュータ及びハードウェアの特定のタイプは周知であり、本開示において詳細に説明される必要はない。
【００１３】
さらに、ソフトウェアベースの実施形態のうち任意のもの（例えば、開示される方法のうち任意のものをコンピュータに実行させるコンピュータ実行可能命令を含む）が、適切な通信手段を通してアップロードされ、ダウンロードされ、あるいはリモートからアクセスされてもよい。こうした適切な通信手段には、例えば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル（ファイバ光ケーブルを含む）、磁気通信、電磁通信（ＲＦ、マイクロ波、及び赤外線通信を含む）、電子通信、又は他のこうした通信手段が含まれる。
【００１４】
ＩＩ．開示技術への導入
スーパースカラアウトオブオーダアーキテクチャは、レジスタをリネームし、データフロー順序で命令をスケジュールし、誤投機（miss-speculation）の後にクリーンアップし、正確な例外のためにインオーダで結果をリタイアさせる（retire）ために、相当な回路リソースを採用している。これは、高価なエネルギー消費回路、例えば、深い多ポートのレジスタファイル、ウェークアップをスケジュールするデータフロー命令のための多ポートのコンテンツアクセシブルメモリ（ＣＡＭ）、並びに多ワイドバスマルチプレクサ及びバイパスネットワークなどを含み、これらのすべてがリソースを多量に要する。例えば、マルチリードマルチライトＲＡＭのＦＰＧＡベースの実装は、複製、マルチサイクルオペレーション、クロック二重化、バンクインターリービング、ライブ値テーブル、及び他の高価な手法の混合を典型的に必要とする。
【００１５】
開示されるテクノロジーは、プロセッサハードウェア及び関連づけられたソフトウェアの双方における相当な複雑さとオーバーヘッドとを回避すると同時に、高い命令レベル並列性（ＩＬＰ）、アウトオブオーダ（ＯｏＯ）、スーパースカラ実行を含む手法の適用を通してエネルギー効率及び／又は性能強化を実現することができる。開示されるテクノロジーのいくつかの例において、複数のプロセッサコアを含むブロックベースプロセッサ（block-based  processor）が、面積効率及びエネルギー効率の良い高ＩＬＰ実行のために設計されたエクスプリシットデータグラフエグゼキューション（Explicit  Data  Graph  Execution）（ＥＤＧＥ）  ＩＳＡを使用する。いくつかの例において、ＥＤＧＥアーキテクチャ及び関連コンパイラの使用は、レジスタリネーミング、ＣＡＭ、及び複雑さの多くを巧みに解決する。いくつかの例において、ブロックベースプロセッサのそれぞれのコアは、繰り返し実行される可能性があるフェッチ及びデコードされた命令を記憶し、あるいはキャッシュすることができ、フェッチ及びデコードされた命令は、低減させた電力及び／又は増大させた性能を潜在的に達成するために再使用できる。
【００１６】
開示されるテクノロジーの特定の例において、ＥＤＧＥ  ＩＳＡは、Ｃ及びＣ＋＋などのメインストリームプログラミング言語をサポートすると同時に、レジスタリネーミング、データフロー解析、誤投機リカバリ、及びインオーダリタイアメントを含む１つ以上の複雑なアーキテクチャ特徴の必要を潜在的に除外することができる。開示されるテクノロジーの特定の例において、ブロックベースプロセッサは、２つ以上の命令のうち複数をアトミックブロックとして実行する。ブロックベース命令が、プログラムデータフロー及び／又は命令フローのセマンティクスをより明示的な形で表現するために使用され、向上させたコンパイラ及びプロセッサ性能を可能にすることができる。開示されるテクノロジーの特定の例において、ＥＤＧＥ  ＩＳＡは、不適当な制御フロー命令の検出を向上させるために使用できるプログラム制御フローに関する情報を含み、これにより、性能を増大させ、メモリリソースを節減し、かつ／あるいはエネルギーを節減する。
【００１７】
開示されるテクノロジーのいくつかの例において、命令ブロック内に編成される命令は、アトミックにフェッチされ、実行され、コミットされる。ブロック内部の命令はデータフロー順序で実行され、このことはレジスタリネーミングを使用することを低減させ、あるいは除外し、電力効率の良いＯｏＯ実行を提供する。コンパイラは、ＩＳＡを通したデータ依存関係を明示的にエンコードするために使用され、実行時に依存関係を再発見することでプロセッサコア制御論理に負担をかけることを低減させ、あるいは除外することができる。プレディケートされた実行を用いて、ブロック内の分岐はデータフロー命令に変換されることができ、メモリ依存関係以外の依存関係は直接のデータ依存関係に限定されることができる。開示されるターゲット形式エンコーディング手法は、ブロック内の命令がそのオペランドをオペランドバッファを介して直接通信することを可能にし、電力を大量消費するマルチポートの物理レジスタファイルに対するアクセスを低減させる。いくつかの例において、後の命令ブロックの命令は、より早期の命令ブロックの命令がコミットされる前に非投機的に実行できる。
【００１８】
命令ブロック間で、命令は、メモリ及びレジスタを用いて通信することができる。ゆえに、ハイブリッドなデータフロー実行モデルを利用することにより、ＥＤＧＥアーキテクチャは、必要不可欠なプログラミング言語及び順次のメモリセマンティクスを依然としてサポートし、しかし望ましくはさらに、インオーダの電力効率及び複雑さに近い状態でアウトオブオーダ実行の恩恵を享受することができる。
【００１９】
関連分野における当業者に容易に理解されるように、開示されるテクノロジーの実装の範囲は、様々な面積、性能、及び電力のトレードオフと共に可能である。
【００２０】
ＩＩＩ．例示的なブロックベースプロセッサ
図１は、開示されるテクノロジーのいくつかの例において実装できるブロックベースプロセッサ１００のブロック図１０である。プロセッサ１００は、命令セットアーキテクチャ（ＩＳＡ）に従って命令のアトミックブロックを実行するように構成され、上記ＩＳＡは、レジスタモデル、ブロックベース命令により実行される幾つかの定義されたオペレーション、メモリモデル、割り込み、及び他のアーキテクチャ特徴を含むプロセッサオペレーションの幾つかの態様を説明する。ブロックベースプロセッサは、プロセッサコア１１１を含む複数の処理コア１１０を含む。
【００２１】
図１に示されるように、プロセッサコアは、コアインターコネクト１２０を介して互いに接続される。コアインターコネクト１２０は、コア１１０の個々のコアとメモリインターフェース１４０と入力／出力（Ｉ／Ｏ）インターフェース１４５とにおけるデータ及び制御信号を搬送する。コアインターコネクト１２０は、電気的、光学的、磁気的、又は他の適切な通信テクノロジーを用いて信号を送信し、受信することができ、特定の所望される構成に依存して、幾つかの異なるトポロジに従って配置された通信接続を提供することができる。例えば、コアインターコネクト１２０は、クロスバー、バス、ポイントツーポイントバス、又は他の適切なトポロジを有することができる。いくつかの例において、コア１１０のうち任意の１つが、他のコアのうち任意のものに接続されてもよく、他の例において、いくつかのコアが他のコアのサブセットにのみ接続される。例えば、各コアは、最も近い４、８、又は２０の近隣コアにのみ接続されてもよい。コアインターコネクト１２０が使用されて、コアへの及びコアからの入力／出力データを送信し、さらに、コアへの及びコアからの制御信号及び他の情報信号を送信することができる。例えば、コア１１０の各々は、それぞれのコアの各々により現在実行されている命令の実行ステータスを示すセマフォを受信し、送信することができる。いくつかの例において、コアインターコネクト１２０は、コア１１０とメモリシステムとを接続するワイヤとして実装され、他の例において、コアインターコネクトは、インターコネクトワイヤ上でデータ信号を多重化する回路、アクティブ信号ドライバ及びリピータを含むスイッチ及び／又はルーティングコンポーネント、又は他の適切な回路を含むことができる。開示されるテクノロジーのいくつかの例において、プロセッサ１００内で、及びプロセッサ１００へ／から送信される信号は、フルスイングの電気デジタル信号に限定されず、プロセッサは、差動信号、パルス信号、又はデータ及び制御信号を送信する他の適切な信号を含むように構成されてもよい。
【００２２】
図１の例において、プロセッサのメモリインターフェース１４０は、さらなるメモリ、例えばプロセッサ１００以外の別の集積回路上に位置するメモリに接続するために使用される、インターフェース論理を含む。図１に示されるように、外部のメモリシステム１５０が、Ｌ２キャッシュ１５２及びメインメモリ１５５を含む。いくつかの例において、Ｌ２キャッシュはスタティックＲＡＭ（ＳＲＡＭ）を用いて実装でき、メインメモリ１５５はダイナミックＲＡＭ（ＤＲＡＭ）を用いて実装できる。いくつかの例において、メモリシステム１５０は、プロセッサ１００の他のコンポーネントと同じ集積回路上に含まれる。いくつかの例において、メモリインターフェース１４０は、レジスタファイル及び／又はプロセッサ１００を使用することなくメモリ内のデータのブロックの転送を可能にするダイレクトメモリアクセス（ＤＭＡ）コントローラを含む。いくつかの例において、メモリインターフェースは、仮想メモリの割り振りを管理し、利用可能なメインメモリ１５５を拡張する。
【００２３】
Ｉ／Ｏインターフェース１４５は、他のコンポーネントに対する入力及び出力信号、例えば、ハードウェア割り込み、システム制御信号、ペリフェラルインターフェース、コプロセッサ制御及び／又はデータ信号（例えば、グラフィックス処理ユニット、浮動小数点コプロセッサ、物理処理ユニット、デジタルシグナルプロセッサ、又は他のコプロセシングコンポーネントのための信号）、クロック信号、セマフォ、又は他の適切なＩ／Ｏ信号などを受信及び送信する回路を含む。Ｉ／Ｏ信号は、同期的であってもよく、あるいは非同期的であってもよい。いくつかの例において、Ｉ／Ｏインターフェースのすべて又は一部が、メモリインターフェース１４０と関連してメモリマップドＩ／Ｏ手法を用いて実装される。
【００２４】
ブロックベースプロセッサ１００は、制御ユニット１６０をさらに含むことができる。制御ユニット１６０は、プロセッサ１００のオペレーションを監督する。制御ユニット１６０により実行できるオペレーションには、命令処理を実行するためのコアの割り振り及び割り振り解除（de-allocation）と、コア、レジスタファイル、メモリインターフェース１４０、及び／又はＩ／Ｏインターフェース１４５のうち任意のものの間における入力データ及び出力データの制御と、実行フローの修正と、分岐命令のターゲット位置、命令ヘッダ、及び制御フロー内の他の変更を検証することとを含むことができる。制御ユニット１６０は、ハードウェア割り込みをさらに処理し、特別なシステムレジスタ、例えば１つ以上のレジスタファイルに記憶されたプログラムカウンタの、読み出し及び書き込みを制御することができる。開示されるテクノロジーのいくつかの例において、制御ユニット１６０は、処理コア１１０のうち１つ以上を用いて少なくとも部分的に実装され、他の例において、制御ユニット１６０は、非ブロックベース処理コア（例えば、メモリに結合された汎用目的ＲＩＳＣ処理コア）を用いて実装される。いくつかの例において、制御ユニット１６０は、下記のうち１つ以上を用いて少なくとも部分的に実装される：ハードワイヤード有限状態マシン、プログラマブルマイクロコード、プログラマブルゲートアレイ、又は他の適切な制御回路。別の例において、制御ユニット機能性は、コア１１０のうち１つ以上により実行されてもよい。
【００２５】
制御ユニット１６０は、命令ブロックをプロセッサコア１１０に割り振るために使用されるスケジューラを含む。本明細書において用いられるとき、スケジューラ割り振りは、命令ブロックマッピングを開始すること、命令ブロックをフェッチすること、デコードすること、実行すること、コミットすること、アボートすること、アイドル状態にすること、及びリフレッシュすることを含む、命令ブロックのオペレーションを指令することを参照する。プロセッサコア１１０は、命令ブロックマッピングの間、命令ブロックに割り当てられる。列挙された命令オペレーションの段階は例示目的のものであり、開示されるテクノロジーのいくつかの例において、特定のオペレーションが組み合わせられ、省略され、複数のオペレーションに分離されてもよく、あるいはさらなるオペレーションが追加されてもよい。
【００２６】
ブロックベースプロセッサ１００は、クロック生成器１７０をさらに含み、クロック生成器１７０は、１つ以上のクロック信号をプロセッサ内の様々なコンポーネント（例えば、コア１１０、インターコネクト１２０、メモリインターフェース１４０、及びＩ／Ｏインターフェース１４５）に分配する。開示されるテクノロジーのいくつかの例において、コンポーネントのすべてが共通クロックを共有し、他の例において、異なるコンポーネントが異なるクロックを、例えば、異なるクロック周波数を有するクロック信号を使用する。いくつかの例において、クロックの一部がゲート制御されて、プロセッサコンポーネントのうちいくつかが使用されていないときの電力節減を可能にする。いくつかの例において、クロック信号は、固定の、一定の周波数及びデューティサイクルの信号を生成する位相ロックループ（ＰＬＬ）を用いて生成される。クロック信号を受信する回路は、単一のエッジ（例えば、立ち上がりエッジ）上でトリガされることができ、他の例において、受信回路の少なくともいくつかが、立ち上がり及び立ち下がりクロックエッジによってトリガされる。いくつかの例において、クロック信号は、光学的に又は無線で送信されてもよい。
【００２７】
ＩＶ．例示的なブロックベースプロセッサコア
図２は、開示されるテクノロジーの特定の例で使用できるブロックベースプロセッサ１００の例示的なマイクロアーキテクチャ、特に、ブロックベースプロセッサコアのうち１つのインスタンスをさらに詳細化したブロック図２００である。説明の容易さのために、例示的なブロックベースプロセッサコアは、５つの段階、すなわち、命令フェッチ（ＩＦ）、デコード（ＤＣ）、オペランドフェッチ、実行（ＥＸ）、及びメモリ／データアクセス（ＬＳ）を用いて例示される。しかしながら、例示されるマイクロアーキテクチャに対する修正、例えば、段階を追加すること／削除すること、オペレーションを実行するユニットを追加すること／削除すること、及び他の実装詳細などが、ブロックベースプロセッサの特定の用途に適するように修正されてもよいことを当業者は容易に理解するであろう。
【００２８】
図２に示されるように、プロセッサコア１１１は、制御ユニット２０５を含み、制御ユニット２０５は、制御信号を生成してコアオペレーションを統制し、命令スケジューラ２０６を用いてコア内の命令のフローをスケジュールする。制御ユニット２０５及び／又は命令スケジューラ２０６により実行できるオペレーションには、命令処理を実行するためのコアの割り振り及び割り振り解除と、コア、レジスタファイル、メモリインターフェース１４０、及び／又はＩ／Ｏインターフェース１４５のうち任意のものの間における入力データ及び出力データの制御とを含むことができる。制御ユニット２０５は、ハードウェア割り込みをさらに処理し、特別なシステムレジスタ、例えば１つ以上のレジスタファイルに記憶されたプログラムカウンタの、読み出し及び書き込みを制御することができる。開示されるテクノロジーの他の例において、制御ユニット２０５及び／又は命令スケジューラ２０６は、非ブロックベース処理コア（例えば、メモリに結合された汎用目的ＲＩＳＣ処理コア）を用いて実装される。いくつかの例において、制御ユニット２０５及び／又は命令スケジューラ２０６は、下記のうち１つ以上を用いて少なくとも部分的に実装される：ハードワイヤード有限状態マシン、プログラマブルマイクロコード、プログラマブルゲートアレイ、又は他の適切な制御回路。
【００２９】
例示的な処理コア１１１は、２つの命令ウィンドウ２１０及び２１１を含み、これらの各々は、命令ブロックを実行するように構成できる。開示されるテクノロジーのいくつかの例において、命令ブロックは、命令ブロックヘッダと複数の１つ以上の命令とを含むブロックベースプロセッサ命令のアトミックな集合である。以下でさらに論じられるように、命令ブロックヘッダは、命令ブロック内の複数の命令のうち１つ以上についてのセマンティクスをさらに定義するために使用できる情報を含む。使用される特定のＩＳＡ及びプロセッサハードウェアに依存して、命令ブロックヘッダは、さらに、命令の実行の間に、及び、例えば命令及び／又はデータの早期フェッチング、向上させた分岐予測、投機的実行、向上させたエネルギー効率、及び向上させたコードコンパクト性を可能にすることによって命令ブロックを実行する性能を向上させるために、使用されてもよい。他の例において、異なる数の命令ウィンドウが可能であり、例えば、１つ、４つ、８つ、又は他の数の命令ウィンドウなどである。
【００３０】
命令ウィンドウ２１０及び２１１の各々は、インターコネクトバス及び命令キャッシュ２２７に接続する入力ポート２２０、２２１、及び２２２のうち１つ以上から命令及びデータを受信することができ、同様に、上記インターコネクトバス及び命令キャッシュ２２７は、命令デコーダ２２８及び２２９に接続される。さらなる制御信号が、さらなる入力ポート２２５上でさらに受信されてもよい。命令デコーダ２２８及び２２９の各々は、命令ブロックの命令ヘッダ及び／又は命令をデコードし、デコードされた命令を、各それぞれの命令ウィンドウ２１０及び２１１に位置するメモリストア２１５及び２１６内に記憶する。
【００３１】
プロセッサコア１１１は、Ｌ１（レベル１）キャッシュ２３５に結合されたレジスタファイル２３０をさらに含む。レジスタファイル２３０は、ブロックベースプロセッサアーキテクチャ内に定義されたレジスタのデータを記憶し、１つ以上の読み出しポート及び１つ以上の書き込みポートを有することができる。例えば、レジスタファイルは、レジスタファイル内の個々のレジスタからデータを読み出すための複数の読み出しポートを有するだけでなく、レジスタファイルにデータを記憶するための２つ以上の書き込みポートも含んでもよい。いくつかの例において、単一の命令ウィンドウ（例えば、命令ウィンドウ２１０）が、一時にレジスタファイルの１つのポートにのみアクセスすることができ、他の例において、命令ウィンドウ２１０は、１つの読み出しポート及び１つの書き込みポートにアクセスすることができ、あるいは２つ以上の読み出しポート及び／又は書き込みポートに同時にアクセスすることができる。いくつかの例において、レジスタファイル２３０は６４個のレジスタを含み、該レジスタの各々はデータの３２ビットのワードを保持することができる。（本出願は、別段規定されない限り、データの３２ビットをワードとして参照する。）いくつかの例において、レジスタファイル２３０内のレジスタのいくつかが特別な目的に対して割り振られてもよい。例えば、レジスタのいくつかがシステムレジスタとして専用されてもよく、上記システムレジスタの例には、定数値（例えば、すべてゼロのワード）、実行されているプログラムスレッドの現在のアドレスを示すプログラムカウンタ（ＰＣ）、物理コア番号、論理コア番号、コア割り当てトポロジ、コア制御フラグ、プロセッサトポロジ、又は他の適切な専用の目的を記憶するレジスタが含まれる。いくつかの例において、複数のプログラムカウンタレジスタが存在し、１つ又は各々のプログラムカウンタが、１つ以上のプロセッサコア及び／又はプロセッサにわたる複数の実行スレッドの同時実行を可能にする。いくつかの例において、プログラムカウンタは、レジスタファイル内のレジスタとしての代わりに、指定されたメモリ位置として実装される。いくつかの例において、システムレジスタの使用は、オペレーティングシステム又は他の監督コンピュータ命令によって制限されてもよい。いくつかの例において、レジスタファイル２３０は、フリップフロップのアレイとして実装され、他の例において、レジスタファイルは、ラッチ、ＳＲＡＭ、又は他の形式のメモリストレージを用いて実装されてもよい。所与のプロセッサ、例えばプロセッサ１００のＩＳＡ仕様は、レジスタファイル２３０内のレジスタが如何にして定義され、使用されるかを規定する。
【００３２】
いくつかの例において、プロセッサ１００は、複数のプロセッサコアにより共有されるグローバルレジスタファイルを含む。いくつかの例において、プロセッサコアに関連づけられた個々のレジスタファイルは、プロセッサＩＳＡ及び構成に依存して、静的に又は動的に、より大きいファイルを形成するように組み合わせられてもよい。
【００３３】
図２に示されるように、命令ウィンドウ２１０のメモリストア２１５は、幾つかのデコードされた命令２４１、左オペランド（ＬＯＰ）バッファ２４２、右オペランド（ＲＯＰ）バッファ２４３、及び命令スコアボード２４５を含む。開示されるテクノロジーのいくつかの例において、命令ブロックの各命令は、図２に示されるように、デコードされた命令と左及び右オペランドとスコアボードデータとの行へ分解される。デコードされた命令２４１は、ビットレベル制御信号として記憶された、部分的に又はフルにデコードされたバージョンの命令を含むことができる。オペランドバッファ２４２及び２４３は、オペランド（例えば、レジスタファイル２３０から受信したレジスタ値、メモリから受信したデータ、命令内に符号化された即値オペランド、より早期に発行された命令により計算されたオペランド、又は他のオペランド値）を、そのそれぞれのデコードされた命令が実行するのにレディになる（ready）まで記憶する。命令オペランドは、レジスタファイルでなくオペランドバッファ２４２及び２４３から読み出される。
【００３４】
第２の命令ウィンドウ２１１のメモリストア２１６は、メモリストア２１５と同様の命令情報（デコードされた命令、オペランド、及びスコアボード）を記憶するが、簡素化のために図２中に示されない。命令ブロックは、ＩＳＡ制約を受けて、及び制御ユニット２０５により指令されるように、第１の命令ウィンドウに関して同時に又は順次的に第２の命令ウィンドウ２１１により実行できる。
【００３５】
開示されるテクノロジーのいくつかの例において、フロントエンドパイプライン段階のＩＦ及びＤＣは、バックエンドパイプライン段階（ＩＳ、ＥＸ、ＬＳ）から切り離されて動作することができる。一実施形態において、制御ユニットは、クロックサイクルにつき２つの命令を命令ウィンドウ２１０及び２１１の各々へフェッチし、デコードすることができる。別の実施形態において、制御ユニットは、クロックサイクルにつき１つ、４つ、又は別の数の命令を対応する数の命令ウィンドウへフェッチし、デコードしてもよい。制御ユニット２０５は、各々のデコードされた命令の入力（例えば、各それぞれの命令のプレディケート（predicate(s)）及びオペランド）のレディ状態をスコアボード２４５を用いて監視するように命令ウィンドウデータフロースケジューリング論理を提供する。特定のデコードされた命令のための入力のすべてがレディになったとき、この命令は、発行するのにレディである。制御論理２０５は、次いで、各サイクルで１つ以上の次の命令（例えば、最も低く番号づけられたレディ命令）の実行を開始し、そのデコードされた命令及び入力オペランドが、実行のために機能ユニット２６０のうち１つ以上に送信される。デコードされた命令は、幾つかのレディイベントをさらにエンコードしていてもよい。制御論理２０５内のスケジューラは、これら及び／又は他のソースからのイベントを受け入れ、ウィンドウ内の他の命令のレディ状態を更新する。こうして、実行は進み、プロセッサコア１１１のレディのゼロ入力命令、ゼロ入力命令によりターゲットにされた命令などで始まる。
【００３６】
デコードされた命令２４１は、これらが命令ウィンドウ２１０のメモリストア２１５内に配置されるのと同じ順序で実行する必要はない。むしろ、デコードされた命令の依存関係を追跡するために命令スコアボード２４５が使用され、依存関係が満たされるとき、関連づけられた個々のデコードされた命令が実行のためにスケジュールされる。例えば、依存関係がそれぞれの命令について満たされているとき、それぞれの命令に対する参照がレディキューへプッシュされてもよく、命令が、レディキューから先入れ先出し（ＦＩＦＯ）順序でスケジュールされてもよい。スコアボード２４５に記憶された情報には、これらに限られないが、関連づけられた命令の実行のプレディケート（例えば、プレディケートビットが計算されることを命令が待機しているかどうか、及び、プレディケートビットが真又は偽である場合に命令が実行されるかどうかなど）、命令に対するオペランドの可用性、又は、関連づけられた個々の命令を実行する前に必要とされる他の前提条件を含むことができる。
【００３７】
一実施形態において、スコアボード２４５は、命令デコーダ２３１により初期化されるデコードされたレディ状態と、命令の実行の間に制御ユニット２０５により初期化されるアクティブレディ状態とを含むことができる。例えば、デコードされたレディ状態は、それぞれの命令がデコードされたか、おそらくはブロードキャストチャネルを介してプレディケート及び／又はいくつかのオペランドを待つか、あるいは即座に発行するのにレディであるかどうかをエンコードしていてもよい。デコードされたアクティブ状態は、それぞれの命令がプレディケート及び／又はいくつかのオペランドを待つか、発行するのにレディであるか、あるいはすでに発行されたかどうかをエンコードしていてもよい。デコードされたレディ状態は、ブロックリセット又はブロックリフレッシュでクリアされることができる。新しい命令ブロックに分岐すると、デコードされたレディ状態及びデコードされたアクティブ状態はクリアされる（ブロック又はコアリセット）。しかしながら、命令ブロックがコア上で再実行されるとき、例えば、命令ブロックが分岐してそれ自体に戻るとき（ブロックリフレッシュ）など、アクティブレディ状態のみがクリアされる。ブロックリフレッシュは、即座に（命令ブロックがそれ自体に分岐するとき）、あるいは幾つかの他の介在命令ブロックを実行した後、発生する可能性がある。ゆえに、命令ブロックのデコードされたレディ状態は、ブロックの命令を再フェッチ及びデコードすることが必要でなくなるように保存されることができる。したがって、ブロックリフレッシュが使用されて、ループ及び他の繰り返しプログラム構造における時間及びエネルギーを節減することができる。
【００３８】
各命令ウィンドウ内に記憶される命令の数は、命令ブロック内の命令の数に一般に対応する。いくつかの例において、命令ブロック内の命令の数は、３２、６４、１２８、１０２４、又は別の命令数であってもよい。開示されるテクノロジーのいくつかの例において、命令ブロックは、一プロセッサコア内の複数の命令ウィンドウにわたり割り振られる。いくつかの例において、命令ウィンドウ２１０、２１１は、複数の命令ブロックが単一のプロセッサコア上で実行され得るように論理的に区分されてもよい。例えば、１つ、２つ、４つ、又は別の数の命令ブロックが１つのコア上で実行されてもよい。それぞれの命令ブロックは、互いに対して同時に又は順次的に実行されてもよい。
【００３９】
命令は、プロセッサコア１１１内に位置する制御ユニット２０５を用いて割り振られ、スケジュールされることができる。制御ユニット２０５は、メモリからの命令のフェッチング、命令のデコーディング、ひとたび命令がそれぞれの命令ウィンドウにロードされたときの命令の実行、プロセッサコア１１１への／からのデータフロー、並びにプロセッサコアにより入力及び出力される制御信号を調整する。例えば、制御ユニット２０５は、上記で説明されたように、命令をスケジュールするのに使用されるレディキューを含むことができる。各それぞれの命令ウィンドウ２１０及び２１１に位置するメモリストア２１５及び２１６に記憶された命令は、アトミックに実行されてもよい。ゆえに、実行された命令により影響された可視のアーキテクチャ状態（例えば、レジスタファイル２３０及びメモリなど）に対する更新は、命令がコミットされるまでコア２００内にローカルにバッファリングされてもよい。
【００４０】
制御ユニット２０５は、いつ命令がコミットされるのにレディになるかを決定し、コミット論理を配列し、コミット信号を発行することができる。例えば、命令ブロックのコミットフェーズは、すべてのレジスタ書き込みがバッファリングされ、メモリに対するすべての書き込みがバッファリングされ、かつ分岐ターゲットが計算されたときに、始まってもよい。命令ブロックは、可視のアーキテクチャ状態に対する更新が完了したとき、コミットされてもよい。例えば、命令ブロックは、レジスタ書き込みがレジスタファイルに対して書き込まれ、ストアがロード／ストアユニット又はメモリコントローラに送信され、次の命令ブロックのターゲットアドレスが生成され、かつコミット信号が生成されたときに、コミットされてもよい。制御ユニット２０５はさらに、少なくとも部分的に、それぞれの命令ウィンドウの各々に対する機能ユニット２６０の割り振りを制御する。
【００４１】
制御ユニット２０５は、実行されるべき次の命令ブロックを指し示すターゲットアドレスを出力することができる。ターゲットアドレスは、コミット信号を発行することと同期してか、又はコミット信号を発行する前かのいずれかで、出力されることができる。例えば、ターゲットアドレスは、コミット信号を発行する前にコア２００の外部に（例えば、図１の制御ユニット１６０になど）通信されてもよく、そのため、現在実行している命令ブロックがコミットされる前に、次の命令ブロックの命令の非投機的実行が開始されることができる。有効な信号がターゲットアドレスに関連づけられて、ターゲットアドレスがいつ有効になるかを示すことができる。
【００４２】
図２に示されるように、幾つかの実行パイプラインレジスタ２５５を有する第１のルータ２５０が、命令ウィンドウ２１０及び２１１のいずれかからのデータを機能ユニット２６０の１つ以上に送信するために使用され、機能ユニット２６０には、これらに限られないが、整数ＡＬＵ（算術論理ユニット）（例えば、整数ＡＬＵ２６４及び２６５）、浮動小数点ユニット（例えば、浮動小数点ＡＬＵ２６７）、シフト／ローテート論理（例えば、バレルシフタ２６８）、又は、グラフィックス機能、物理機能、及び他の数学オペレーションを含み得る他の適切な実行ユニットを含むことができる。機能ユニット２６０からのデータは、次いで、実行されている特定の命令の要件に依存して、第２のルータ２７０を通して出力２９０、２９１、及び２９２に対してルーティングされてもよく、オペランドバッファ（例えば、ＬＯＰバッファ２４２及び／又はＲＯＰバッファ２４３）にルーティングされて戻されてもよく、あるいは、別の機能ユニットに対してフィードバックされてもよい。第２のルータ２７０は、メモリ命令を発行するために使用できるロード／ストアキュー２７５と、コアに入力され又はコアからメモリに出力されているデータを記憶するデータキャッシュ２７７と、ロード／ストアパイプラインレジスタ２７８とを含むことができる。
【００４３】
コアは、制御出力２９５をさらに含み、制御出力２９５は、例えば、命令ウィンドウ２１５又は２１６のうち１つ以上のための命令のうちすべての実行がいつ完了したかを示すために使用される。命令ブロックの実行が完了したとき、命令ブロックは「コミットされた」として指定され、次に、制御出力２９５からの信号をブロックベースプロセッサ１００内の他のコアが及び／又は制御ユニットが使用して、他の命令ブロックのスケジューリング、フェッチング、及び実行を開始することができる。第１のルータ２５０及び第２のルータ２７０の双方は、命令に対してデータを（例えば、命令ブロック内の他の命令のためのオペランドとして）返信することができる。
【００４４】
当業者に容易に理解されるように、個々のコア２００内のコンポーネントは図２に示されるものに限られず、特定用途の要件に従って変動してもよい。例えば、ブロックベースプロセッサの特定のターゲットにされた用途に依存して、コアはより少ない又はより多い命令ウィンドウを有してもよく、単一の命令デコーダが２つ以上の命令ウィンドウにより共有されてもよく、使用される機能ユニットの数及びタイプが変動してもよい。命令コアでのリソースを選択すること及び割り振ることに適用される他の考慮には、性能要件、エネルギー使用要件、集積回路ダイ、処理テクノロジー、及び／又はコストが含まれる。
【００４５】
プロセッサコア１１０の命令ウィンドウ（例えば、命令ウィンドウ２１０）及び制御論理２０５内のリソースの設計及び割り振りによって、プロセッサ性能においてトレードオフがなされ得ることが当業者に容易に明らかになるであろう。面積、クロック周期、能力、及び限定が、個々のコア１１０の実現性能とブロックベースプロセッサ１００のスループットとを実質的に決定する。
【００４６】
命令スケジューラ２０６は、多様な機能性を有することができる。特定のより高い性能の例において、命令スケジューラは、高度に同時的である。例えば、各サイクルで、デコーダは、命令のデコードされたレディ状態とデコードされた命令とを１つ以上の命令ウィンドウに書き込み、発行すべき次の命令を選択し、応答において、バックエンドが、レディイベント  ‐  特定の命令の入力スロット（プレディケート、左オペランド、右オペランド等）をターゲットにしたターゲットレディイベントか、又はすべての命令をターゲットにしたブロードキャストレディイベントかのいずれかを、送信する。命令ごとのレディ状態ビットが、デコードされたレディ状態と共に使用されて、命令が発行するのにレディであると決定することができる。
【００４７】
いくつかの例において、命令スケジューラ２０６は、開示されるテクノロジーに従って命令ブロックの実行をスケジュールするために使用される情報を示すデータを記憶するストレージ（例えば、先入れ先出し（ＦＩＦＯ）キュー、コンテンツアドレッサブルメモリ（ＣＡＭ））を用いて実装される。例えば、命令依存関係、制御の移転、投機、分岐予測、及び／又はデータロード及びストアに関するデータが、命令ブロックをプロセッサコアにマッピングすることにおける決定を容易にするように、ストレージ内に配置される。例えば、命令ブロック依存関係は、ＦＩＦＯ又はＣＡＭに記憶されたタグに関連づけられ、命令ブロックを１つ以上のプロセッサコアにマッピングするために使用される選択論理によって後にアクセスされてもよい。いくつかの例において、命令スケジューラ２０６は、メモリに結合された汎用目的プロセッサを用いて実装され、上記メモリは、命令ブロックをスケジュールするためのデータを記憶するように構成される。いくつかの例において、命令スケジューラ２０６は、上記メモリに結合された特別目的プロセッサを用いて又はブロックベースプロセッサコアを用いて実装される。いくつかの例において、命令スケジューラ２０６は、上記メモリに結合された有限状態マシンとして実装される。いくつかの例において、プロセッサ（例えば、汎用目的プロセッサ又はブロックベースプロセッサコア）上で実行するオペレーティングシステムが、優先順位、予測、及び、命令スケジューラ２０６で命令ブロックを少なくとも部分的にスケジュールするために使用できる他のデータを生成する。当業者に容易に明らかになるように、集積回路、プログラマブル論理、又は他の適切な論理において実装された他の回路構造が、命令スケジューラ２０６のハードウェアを実装するために使用されてもよい。
【００４８】
いくつかの場合、スケジューラ２０６は、まだデコードされておらず、かつ発行されたレディ命令の再発行をさらに抑止しなければならないターゲット命令の、イベントを受け入れる。スケジューラ２０６は、スコアボード２４５を介して、それぞれの命令のレディ状態を更新し、追跡することができる。いくつかの例において、命令は、プレディケートされなくて（non-predicated）もよく、あるいは（真又は偽の条件に基づいて）プレディケートされて（predicated）もよい。プレディケートされた命令は、それが別の命令のプレディケート結果によってターゲットにされ、かつその結果がプレディケート条件にマッチするまで、レディ状態にならない。関連づけられたプレディケートがマッチしない場合、命令は発行しない。いくつかの例において、プレディケートされた命令が、投機的に発行され、実行されてもよい。いくつかの例において、プロセッサは、投機的に発行及び実行された命令が正しく投機されたことを後に確認してもよい。いくつかの例において、誤投機された（misspeculated）発行された命令とその出力を消費するブロック内の命令の特定の推移閉包（transitive  closure）とが再実行されてもよく、あるいは、誤投機された副作用が無効にされてもよい。いくつかの例において、誤投機された命令の発見は、完全なロールバックと命令のブロック全体の再実行とにつながる。
【００４９】
Ｖ．命令ブロックの例示的なストリーム
次に、図３の略図３００を参照し、幾つかの可変長命令ブロック３１１〜３１５（Ａ〜Ｅ）を含むブロックベース命令のストリームの部分３１０が例示される。命令のストリームは、ユーザアプリケーション、システムサービス、又は任意の他の適切な使用法を実装するために使用されてよい。図３に示される例において、各命令ブロックは命令ヘッダで始まり、命令ヘッダの後に可変数の命令が続く。例えば、命令ブロック３１１は、ヘッダ３２０と２０個の命令３２１とを含む。例示される特定の命令ヘッダ３２０は、幾つかのデータフィールドを含み、該データフィールドは、命令ブロック内の命令の実行を部分的に制御し、さらに、例えば分岐予測、投機的実行、遅延評価、及び／又は他の手法を含む向上させた性能改良手法を可能にする。命令ヘッダ３２０は、該ヘッダが命令ヘッダであって命令でないことを示すＩＤビットをさらに含む。命令ヘッダ３２０は、命令ブロックサイズの指標をさらに含む。命令ブロックサイズは、１よりもより大きい命令のチャンクにおけるもの、例えば、命令ブロック内に含まれる４命令のチャンクの数であってもよい。換言すると、ブロックのサイズは、命令ブロックサイズを規定することに対して割り振られたヘッダ空間を圧縮するように４ビット分シフトされる。こうして、０のサイズ値は、ブロックヘッダの後に４つの命令が続く最小サイズの命令ブロックを示す。いくつかの例において、命令ブロックは、バイト数として、ワード数として、ｎワードチャンクの数として、アドレスとして、アドレスオフセットとして、又は命令ブロックのサイズを説明するための他の適切な表現を用いて表現される。いくつかの例において、命令ブロックサイズは、命令ブロックヘッダ及び／又はフッタ内の終端ビットパターンによって示される。
【００５０】
命令ブロックヘッダ３２０は、実行フラグをさらに含むことができ、上記実行フラグは、特別な命令実行要件を示す。例えば、特定の用途に依存して、特定の命令ブロックについて、分岐予測又はメモリ依存予測が抑止されてもよい。
【００５１】
開示されるテクノロジーのいくつかの例において、命令ヘッダ３２０は、エンコードされたデータが命令ヘッダであることを示す１つ以上の識別ビットを含む。例えば、いくつかのブロックベースプロセッサＩＳＡにおいて、最小有効ビット（least  significant  bit）空間内の単一のＩＤビットが、有効な命令ブロックの先頭を示すように、２進数値の１に常に設定される。他の例において、異なるビットエンコーディングが識別ビットのために使用されてもよい。いくつかの例において、命令ヘッダ３２０は、関連づけられた命令ブロックがエンコードされたＩＳＡの特定のバージョンを示す情報を含む。
【００５２】
ブロック命令ヘッダは、例えば分岐予測、制御フロー決定、及び／又は不良ジャンプ検出における使用のための、幾つかのブロックエグジットタイプをさらに含むことができる。エグジットタイプ（exit  type）は、分岐命令のタイプが何であるかを示すことができ、例えば、メモリ内の次の連続した命令ブロックを指し示す順次分岐命令、オフセットに対して計算されたメモリアドレスにおける別の命令ブロックへの分岐であるオフセット命令、サブルーチンコール、又はサブルーチンリターンである。命令ヘッダ内に分岐エグジットタイプをエンコードすることにより、分岐予測器が、同じ命令ブロック内の分岐命令がフェッチされ、かつ／あるいはデコードされる前に、少なくとも部分的にオペレーションを始めることができる。
【００５３】
命令ブロックヘッダ３２０は、オペレーションを記憶するために割り当てられたロードストアキュー識別子を識別するストアマスク（store  mask）をさらに含む。命令ブロックヘッダは、関連づけられた命令ブロックがいずれのグローバルレジスタに書き込むことになるかを識別する書き込みマスク（write  mask）をさらに含むことができる。関連づけられたレジスタファイルは、命令ブロックが完了し得る前に、各エントリに対する書き込みを受信しなければならない。いくつかの例において、ブロックベースプロセッサアーキテクチャは、スカラー命令だけでなくさらに単一命令複数データ（single-instruction  multiple-data）（ＳＩＭＤ）命令を含み、単一の命令内でより多数のデータオペランドを用いたオペレーションを可能にすることができる。
【００５４】
ＶＩ．例示的なブロック命令ターゲットエンコーディング
図４は、Ｃ言語ソースコードの２つの部分４１０及び４１５と（アセンブリ言語における）そのそれぞれの命令ブロック４２０及び４２５との例を表す略図４００であり、ブロックベース命令が如何にしてそのターゲットを明示的にエンコードすることができるかを例示する。高水準のＣ言語ソースコードは、そのターゲットがブロックベースプロセッサであるコンパイラにより、低水準のアセンブリ言語及びマシンコードに翻訳されることができる。高水準言語は、プログラマがプログラムの機能性に焦点をあてることができるように、下層のコンピュータアーキテクチャの詳細の多くを抽象化することができる。対照的に、マシンコードは、それがコンピュータのハードウェアリソースを用いてターゲットコンピュータ上で実行され得るように、ターゲットコンピュータのＩＳＡに従ってプログラムをエンコードする。アセンブリ言語は、マシンコードの、人間により読み取り可能な形式である。
【００５５】
この例において、最初の２つのＲＥＡＤ命令４３０及び４３１は、ＡＤＤ命令４３２の右（Ｔ［２Ｒ］）及び左（Ｔ［２Ｌ］）オペランドをそれぞれターゲットにする。例示されるＩＳＡにおいて、上記読み出し命令は、グローバルレジスタファイル（例えば、レジスタファイル１６０）から読み出す唯一の命令である。しかしながら、任意の命令がグローバルレジスタファイルをターゲットにしてよい。ＡＤＤ命令４３２が双方のレジスタ読み出しの結果を受信したとき、この命令はレディになり、実行することになる。
【００５６】
ＴＬＥＩ（テスト・レス・ザン・イコール・イミディエート（test-less-than-equal-immediate））命令４３３がその単一の入力オペランドをＡＤＤから受信したとき、この命令はレディになり、実行されることになる。次いで、テストは、ブロードキャストチャネルをリッスンしているすべての命令に対してチャネル１（Ｂ［１Ｐ］）上でブロードキャストされるプレディケートオペランドを作成する。この例において、上記リッスンしている命令は、２つのプレディケートされた分岐命令（ＢＲＯ＿Ｔ（真の場合に分岐する）４３４及びＢＲＯ＿Ｆ（偽の場合に分岐する）４３５）である。マッチしたプレディケート値を受信する分岐が、始動することになる。
【００５７】
命令ブロック４２０の依存グラフ４４０が、命令ノードのアレイ４５０並びにその対応するオペランドターゲット４５５及び４５６としてさらに例示される。これは、ブロック命令４２０と、対応する命令ウィンドウエントリと、命令により表現される下層のデータフローグラフとの間の対応を例示する。ここで、デコードされた命令ＲＥＡＤ４３０及びＲＥＡＤ４３１は、これらが入力依存関係を有さないので、発行するのにレディである。これらが発行し、実行するとき、レジスタＲ６及びＲ７から読み出された値がＡＤＤ４３２の右及び左オペランドバッファに書き込まれ、ＡＤＤ４３２の右及び左オペランドの「レディ」をマークづける。結果として、ＡＤＤ４３２命令はレディになり、ＡＬＵに対して発行し、実行し、その和がＴＬＥＩ４３３の左オペランドに書き込まれる。
【００５８】
比較として、従来のアウトオブオーダＲＩＳＣ又はＣＩＳＣプロセッサは、さらなるハードウェアの複雑さ、電力、面積、並びに低減したクロック周波数及び性能を用いて、実行時に依存グラフを動的に構築する。しかしながら、依存グラフはコンパイル時に静的に分かり、ＥＤＧＥコンパイラがＩＳＡを通しての命令間の作成者‐消費者（producer-consumer）関係を直接エンコードし、これらを動的に再発見することからマイクロアーキテクチャを解放することができる。このことは、潜在的に、より簡素なマイクロアーキテクチャを可能にし、面積、電力、並びにブースト周波数及び性能を低減させることができる。
【００５９】
ＶＩＩ．例示的なブロックベース命令フォーマット
図５は、命令ヘッダ５１０、一般的命令（generic  instruction）５２０、及び分岐命令５３０のための命令フォーマットの一般化された例を示す略図である。命令ヘッダ又は命令の各々は、ビット数に従ってラベルづけされる。例えば、命令ヘッダ５１０は、４つの３２ビットワードを含み、その最小有効ビット（ｌｓｂ）（ビット０）から最大でその最大有効ビット（most  significant  bit）（ｍｓｂ）（ビット１２７）までラベルづけされる。図示されるように、命令ヘッダは、書き込みマスクフィールド、ストアマスクフィールド、幾つかのエグジットタイプフィールド、幾つかの実行フラグフィールド、命令ブロックサイズフィールド、及び命令ヘッダＩＤビット（命令ヘッダの最小有効ビット）を含む。
【００６０】
コンパイラが、命令ヘッダ５１０のエグジットタイプフィールドを用いて１つ以上の分岐エグジットタイプをエンコードすることができる。分岐エグジットタイプは、次の命令ブロックのアドレスを計算するために、命令ブロックを実行するプロセッサコアにより生成された信号と共に使用されてもよい。例えば、プロセッサコアは、分岐が行われることが分かるとすぐ、分岐識別子及びターゲットアドレスを生成することができる。ターゲットアドレスは、命令ブロックがコミットされる前に生成されることができ、そのため、より早期の命令ブロックがコミットする前に、次の命令ブロックが開始されることができる。一実施形態において、１８ビットがエグジットタイプフィールドのために予約されることができ、そのため、１及び６の間で、異なる３ビットのエグジットタイプがヘッダの中にエンコードされることができる。実行時、命令ブロックを実行するプロセッサコアは、６つのエグジットタイプフィールドのうちいずれを使用すべきかを分岐識別子信号を介して示すことができる。分岐識別子に対応するエグジットタイプフィールドとコアからのターゲットアドレスとが使用されて、次の命令ブロックのアドレスを計算することができる。
【００６１】
この実施形態においては、３ビットフィールドの中にエンコードできる６つの分岐エグジットタイプが存在し、分岐エグジットタイプは、ヌル、順次（sequential）、オフセット、間接（indirect）、コール、及びリターンである。分岐エグジットタイプのヌルは、このフィールドに関連づけられた分岐がないことを示すことができる。所与の命令ブロックについて６つのとり得る分岐がエンコードされ得るが、いくつかの命令ブロックが６つより少ない分岐を有してもよい。例えば、特定の命令ブロックが１つの分岐ターゲットだけ有してもよく、ゆえに、第１の分岐エグジットタイプフィールドのみが非ヌルであり、他の５つのフィールドはヌルであることになる。別の例として、特定の命令ブロックが２つの分岐ターゲットを有してもよく、第１の分岐エグジットタイプフィールドは第１のプレディケート結果に対応することができ、第２の分岐エグジットタイプフィールドは第２のプレディケート結果に対応することができ、他の４つのフィールドはヌルであることになる。
【００６２】
分岐エグジットタイプの順次は、この分岐に関連づけられた次の命令ブロックのターゲットアドレスが現在の命令ブロックに直接続く命令ブロックのアドレスであることを示すことができる。例えば、命令の順次ストリームが命令ウィンドウ内の命令の最大数を超える場合、この命令の順次ストリームは、メモリ内に連続的に記憶できる複数の命令ブロックに分けられることになる。（末尾の命令ブロック以外の）命令ブロックの各々の分岐エグジットタイプは順次エグジットタイプであることになり、そのため、実行の間、異なる命令ブロックの命令は順次的に実行することができる。別の例として、命令ブロックが、潜在的に、異なるそれぞれのターゲットアドレスを有する複数の分岐のうち１つを取ってもよい。分岐のうち１つが次の順次命令ブロックに対してである場合、その分岐に関連づけられた分岐エグジットタイプは順次タイプとしてエンコードされることができる。
【００６３】
分岐エグジットタイプのオフセットは、分岐に関連づけられた次の命令ブロックのターゲットアドレスが、現在実行している命令ブロックからのオフセットであることを示すことができる。オフセットは、例えば分岐が反復的な又はループする構造に起因するときなどは、コンパイル時に知ることができ、あるいは、オフセットは、命令ブロックの実行の間に受信された計算又は入力に依存してもよい。命令ブロックの実行の間、関連づけられた分岐についてプロセッサコアにより生成されたターゲットアドレスは、プロセッサコア上で実行している命令ブロックのアドレスに対して加算されるべきオフセットとして解釈されることになる。別法として、オフセットは、プロセッサコア上で実行している命令ブロックに順次的に続く命令ブロックのアドレスに対して加算されてもよい。
【００６４】
分岐エグジットタイプの間接は、分岐に関連づけられた次の命令ブロックのターゲットアドレスが命令ブロック内で命令によって決定されることを示すことができる。例えば、アドレスは、ロード命令を介してメモリから来てもよく、あるいは命令ブロック内で算定されてもよい。ターゲットアドレスを記憶するメモリアドレスは、コンパイル時に知ることができ、あるいは命令ブロックの実行の間に受信された計算又は入力に依存してもよい。命令ブロックの実行の間、関連づけられた分岐についてプロセッサコアにより生成されたアドレスは、次の命令ブロックのターゲットアドレスを記憶したメモリアドレスとして解釈されることになる。
【００６５】
分岐エグジットタイプのコールは、分岐に関連づけられた次の命令ブロックのターゲットアドレスがサブルーチンのアドレスであることを示すことができる。サブルーチンのアドレスは、コンパイル時に知ることができ、あるいは、例えばアドレスが命令ブロックの実行の間に受信された計算又は入力に依存するときなどは、実行時に生成されてもよい。命令ブロックの実行の間、関連づけられた分岐についてプロセッサコアにより生成されたターゲットアドレスは、サブルーチンの先頭のメモリアドレスとして解釈されることになる。このアドレスは、例えば分岐予測器などの制御論理によって保存されてもよい。詳細には、分岐予測器は、サブルーチンのリターンアドレスを記憶するための１つ以上のリンクレジスタ又はスタックを含むことができる。分岐予測器は、リンクレジスタ値又はスタックのトップを使用して、リターンエグジットタイプを有する命令ブロックのターゲットアドレスを予測することができる。
【００６６】
分岐エグジットタイプのリターンは、分岐に関連づけられた次の命令ブロックのターゲットアドレスが、プロセッサコア上で実行されているサブルーチンのリターンアドレスであることを示すことができる。サブルーチンのリターンアドレスは、サブルーチンがコールされたとき、実行時に生成される。一実施形態において、リターンアドレスは制御論理によってのみ維持されることができ、実行の間にプロセッサコアにより生成されたターゲットアドレスは無視されることができる。別の実施形態において、サブルーチンの命令ブロックはリターンアドレスを維持することができ、関連づけられた分岐についてプロセッサコアにより生成されたターゲットアドレスは、サブルーチンからのリターンアドレスとして解釈されることになる。プロセッサコア上で動作している命令ブロックにより生成されたターゲットアドレスは、リンクレジスタに記憶されたアドレスと比較されてもよい。
【００６７】
他の分岐エグジットタイプ及び分岐情報が可能であり、命令ブロックのそれぞれのヘッダ内により多い又はより少ないビットでエンコードされてもよいことが理解されるべきである。例えば、コンパイラがプログラムの静的解析からターゲットアドレスを生成することができるときなどに、分岐情報は、予め決定されたターゲットアドレスを含んでもよい。別の例として、分岐エグジットタイプは、複数回実行され得るブロックを示すように、ループ、ループ先頭（begin-loop）、又はループ末尾（end-loop）であってもよく、ループタイプは、ブロックがそれ自体にループバックし得ること（単一ブロックループ）を示すことができ、ループ先頭タイプは、マルチブロックループの先頭ブロックを示すことができ、ループ末尾タイプは、マルチブロックループの末尾ブロックを示すことができる。分岐情報は、例えば、ループが固定回数実行されるかどうかと、ループが何回実行されるかとを含んでもよい。
【００６８】
コンパイラは、命令ヘッダ５１０の「Ｘフラグ」フィールドを用いて実行フラグをエンコードすることができる。Ｘフラグは、命令ブロックについての任意の特別な実行要件をエンコードするために使用できる。要件は、命令ブロック内で使用される任意の特別なハードウェアリソース（例えば、コアが異なるモードを有するとき、又は異なるタイプのコアがブロックベースプロセッサ上で利用可能であるときなど）、ブロックベースプロセッサの制御論理に対するコンパイラヒント又はコマンド、及び／又はデバッグ機能性を規定することができる。一実施形態において、フラグは、ベクトルモードで構成されたコアを使用すること、分岐予測器を抑止すること、メモリ依存予測器を抑止すること、ブロック同期が必要とされること、ブロックの後にブレークすること、及びブロックの前にブレークすることを示すためのビットを含むことができる。他の実行フラグが可能であり、それぞれの命令ブロックのヘッダ内でエンコードされてもよいことが理解されるべきである。
【００６９】
例示される一般的ブロック命令５２０は、１つの３２ビットワードとして記憶され、オペコードフィールド、プレディケートフィールド、ブロードキャストＩＤフィールド（ＢＩＤ）、第１のターゲットフィールド（Ｔ１）、及び第２のターゲットフィールド（Ｔ２）を含む。ターゲットフィールドよりもより多くの消費者を有する命令について、コンパイラは、ムーブ（move）命令を用いてファンアウト（fanout）ツリーを構築することができ、あるいはコンパイラは、ブロードキャストに対して高ファンアウト命令を割り当ててもよい。ブロードキャストは、軽量ネットワークを通じてオペランドをコア内の任意数の消費者命令に送信することをサポートする。ブロードキャスト識別子が、一般的ブロック命令５２０内にエンコードされてもよい。
【００７０】
一般的命令５２０により概説された一般的命令フォーマットは、ブロックベースプロセッサにより処理されるいくつか又はすべての命令を表すことができるが、ＩＳＡの特定の一例についてでさえ、命令フィールドのうち１つ以上が特定の命令について一般的フォーマットから逸脱し得ることを当業者は容易に理解するであろう。オペコードフィールドは、命令５２０、例えばメモリ読み出し／書き込み、レジスタロード／ストア、加算、減算、乗算、除算、シフト、ローテート、システムオペレーション、又は他の適切な命令などによって実行されるオペレーションを規定する。プレディケートフィールドは、命令が実行されることになる条件を規定する。例えば、プレディケートフィールドは、値「真」を規定することができ、命令は、対応する条件フラグが規定されたプレディケート値にマッチした場合のみ実行されることになる。いくつかの例において、プレディケートフィールドは、プレディケートを比較するためにいずれが使用されるかを少なくとも部分的に規定し、他の例において、実行は、前の命令（例えば、命令ブロック内の先行した命令）により設定されたフラグに基づいてプレディケートされる（predicated  on）。いくつかの例において、プレディケートフィールドは、命令が常時実行されるか、あるいは決して実行されないことを規定することができる。こうして、プレディケートフィールドの使用は、分岐命令の数を低減することによって、より高密度のオブジェクトコード、向上させたエネルギー効率、及び向上させたプロセッサ性能を可能にすることができる。
【００７１】
ターゲットフィールドＴ１及びＴ２は、ブロックベース命令の結果が送信される命令を規定する。例えば、命令スロット５のＡＤＤ命令が、その算定された結果がスロット３及び１０の命令に送信されることを規定することができる。特定の命令及びＩＳＡに依存して、例示されたターゲットフィールドのうち一方又は双方が他の情報で置換されてもよく、例えば、第１のターゲットフィールドＴ１が、即値オペランドで置換でき、さらなるオペコードで置換でき、２つのターゲットを規定できる等である。
【００７２】
分岐命令５３０は、オペコードフィールド、プレディケートフィールド、ブロードキャストＩＤフィールド（ＢＩＤ）、及びオフセットフィールドを含む。オペコード及びプレディケートフィールドは、フォーマット及び機能において、一般的命令に関して説明されたものと同様である。オフセットは、いくつかの例において４命令ブロックで表現され、こうして、分岐が実行され得るメモリアドレス範囲を拡大することができる。一般的命令５２０及び分岐命令５３０で示されるプレディケートは、命令ブロック内の命令で有向非巡回グラフ（ＤＡＧ）を形成するために使用されてもよい。例えば、特定の命令の実行が、前の命令（例えば、２つのオペランドの比較）の結果に基づいてプレディケートされてもよい。プレディケートが偽である場合、命令は、上記特定の命令によって計算された値をコミットしないことになる。プレディケート値が、必要なプレディケート値にマッチしない場合、命令は発行しない。例えば、ＢＲＯ＿Ｆ（プレディケートされた偽）命令は、該命令が偽のプレディケート値を送信された場合、発行することになる。
【００７３】
本明細書において用いられるとき、用語「分岐命令」は、相対メモリ位置に対してプログラム実行を変更することに限定されず、絶対的又はシンボリックなメモリ位置に対するジャンプ、サブルーチンコール及びリターン、並びに実行フローを修正し得る他の命令をさらに含むことが容易に理解されるべきである。いくつかの例において、実行フローは、システムレジスタ（例えば、プログラムカウンタＰＣ又は命令ポインタ）の値を変更することにより修正され、他の例において、実行フローは、メモリ内の指定された位置に記憶された値を修正することにより変更されてもよい。いくつかの例において、ジャンプレジスタ分岐命令は、レジスタ内に記憶されたメモリ位置に対してジャンプするために使用される。いくつかの例において、サブルーチンコール及びリターンは、ジャンプ及びリンク並びにジャンプレジスタ命令を用いてそれぞれ実装される。
【００７４】
ＶＩＩＩ．例示的なコンパイラ手法
図６は、ブロックベースコンピュータアーキテクチャに対してコンパイルするための例示的な方法６００を例示するフローチャートである。６１０において、コンパイラは、命令ブロックにグループ化された命令ストリームを生成することができる。コンパイラは、高水準のソースコード（Ｃ、Ｃ＋＋、又はＪａｖａなど）を、ターゲットにされたブロックベースプロセッサ上で実行可能である低水準のマシンコードに翻訳することができる。マシンコードは、コンピュータのハードウェアリソースとコードの制御フローとに従ってグループ化できる命令の順次ストリームとして生成されることができる。例えば、生成されたマシンコードは、複数の基本ブロックを含むことができる。基本ブロックは、制御がブロックの最初の命令でのみブロックに入ることができ、かつ制御が基本ブロックの最後の命令でのみブロックを出ることができるコードのブロックであってもよい。ゆえに、基本ブロックは、一緒に実行される命令のシーケンスである。所与の命令ブロックは、該命令ブロックがＩＳＡの制約とターゲットにされたコンピュータのハードウェアリソースとの範囲内で実行され得る限り、単一の基本ブロック、基本ブロックの一部、又は複数の基本ブロックであってもよい。
【００７５】
命令ブロックのサイズ及び内容に対する制約には、例えば、プロセッサコアの命令ウィンドウの最大サイズ、レジスタアクセスの最大数、ロード／ストアアクセスの最大数、及び分岐の最大数を含むことができる。命令ブロック内の命令の数は、プロセッサコアの命令ウィンドウ内で実行できる命令の数を超えることはできない。ゆえに、命令の最大数は、ターゲットプロセッサの命令ウィンドウのサイズに依存して、１２８、６４、又は３２命令であってもよい。いくつかの基本ブロックが、命令ウィンドウより小さい可能性がある。コアをより効率的に使用するために、組み合わせられた基本ブロック間の分岐をデータフロー命令に変換することによって、小さい基本ブロックが１つ以上の他の基本ブロックと組み合わせられてもよい。詳細には、第１の基本ブロックから第２の基本ブロック（マージされるべき基本ブロック）への分岐が、プレディケートを計算するための命令に変換されてもよく、第２の基本ブロックの命令が、上記プレディケート計算の結果に基づいてプレディケートされてもよい。別法として、いくつかの基本ブロックが、命令ウィンドウより大きい可能性があり、ゆえに、これら基本ブロックは、命令ブロックが最大命令ウィンドウサイズより大きくなくなるように、複数の命令ブロックに区分されてもよい。基本ブロックはまた、基本ブロックが所与の命令ウィンドウのレジスタ又はロード／ストアアクセスの数を超える場合に、複数の命令ブロックに区分されてもよい。
【００７６】
６２０において、所与の命令ブロックの１つ以上のエグジットタイプ及び／又はコンパイラヒントが決定されることができる。例えば、各々の潜在的な分岐の分岐エグジットタイプ及び分岐情報、例えば予め決定されたターゲットアドレス及び反復カウントなどが、決定されてもよい。上記で図５を参照して説明されたように、エグジットタイプの例は、命令ブロックから抜け出す制御フローに依存して、ヌル、順次、オフセット、間接、コール、又はリターンであってもよい。単一の分岐又は複数の分岐が、所与の命令ブロックから出るのに可能であり得（例えば、複数の基本ブロックが所与の命令ブロックに組み合わせられるときなど）、しかし、分岐のうち１つのみが、命令ブロックの実行の間に取られることになる。潜在的分岐の各々は、異なるエグジットタイプを有することができる。潜在的分岐の各々は、識別子を割り当てられてもよく、分岐に対応するエグジットタイプが、識別子に対応するフィールド内にエンコードされてもよい。例えば、分岐０のエグジットタイプがフィールド０にエンコードされてもよく、分岐１のエグジットタイプがフィールド１にエンコードされてもよい。
【００７７】
６３０において、所与の命令ブロックのヘッダが生成されることができる。ヘッダは、所与の命令ブロックのエグジットタイプと任意のコンパイラヒントとを含むことができる。図５における命令ヘッダ５１０は、命令ヘッダの一例である。ヘッダは、命令ヘッダ５１０により示されるように固定されたサイズのものであってもよく、あるいは、ヘッダは、可変サイズであってもよい。例えば、命令ブロックのターゲットアドレスが静的に計算され得る場合、ヘッダは、予め決定されたターゲットアドレスを含むように拡張されてもよい。ヘッダのサイズは、例えば、ヘッダの最初のワードのうち１つ以上のビット内にエンコードされてもよい。
【００７８】
６４０において、ターゲットアドレス計算が、所与の命令ブロックの中でより早期に早められる（advanced）ことができる。ターゲットアドレス計算を早めることにより、ターゲットアドレス計算が早められない場合より早く、次の命令ブロックがフェッチされ、実行されることができる。ゆえに、現在の命令ブロックは潜在的に次の命令ブロックと並列で実行されることができ、ブロックベースプロセッサの性能が潜在的に増大し得る。このことは従来のＩＳＡと対照をなし、従来のＩＳＡでは、一般に、基本ブロック内で実行された最後の命令が次の基本ブロックのターゲットアドレスに対する分岐である（又は、ループの場合には同じ基本ブロックの先頭に戻る）ことになる。いくつかのＩＳＡは、１つ又は複数の分岐遅延スロットを公開することがあり、そのため、分岐命令は、埋めることができる遅延スロット数だけ最後の命令に先行することになる。しかしながら、分岐遅延スロットの数はプロセッサのパイプライン段階の数より少なくあるべきであり、典型的に１つ、時に２つであるため、分岐遅延スロットの使用は限定される。ゆえに、従来のＩＳＡにおいて、制御フローは、基本ブロックの末尾又は末尾のかなり近くまで、実行中の基本ブロックから転換される（diverted）ことができず、なぜならば、フェッチ及びデコード論理がシリアル化ポイントとして動作するからである。
【００７９】
しかしながら、複数のプロセッサコア及び／又は命令ウィンドウを含むブロックベースプロセッサは、潜在的に、所与の命令ウィンドウのターゲットアドレス計算がブロックの末尾から切り離され、より早期の実行時間に引き上げられ又は早められることを可能にすることができる。例えば、ターゲットアドレスが計算された後、所与の命令ブロックが、その割り当てられたプロセッサコアリソースを用いて実行を継続することができる間、ターゲットアドレスで始まる次の命令ブロックが、同じ又は異なるプロセッサコアの異なるリソース上で開始される。こうして、命令ストリームはアトミックに実行される命令ブロックにグループ化され、かつこれら命令ブロックを実行することに対して並列的なリソースが提供されるため、ブロックベースプロセッサのターゲットアドレス計算は、分岐遅延スロットを用いて可能であるよりも、所与の命令ブロック内でより早期に早められ、より多くのワークが並列で実行されることを潜在的に可能にすることができる。例えば、ブロックベースアーキテクチャにおいて、ターゲットアドレス計算は、ターゲットアドレスを計算することが命令ブロックの他の命令に依存しない場合、命令ブロックの最初の命令に早められてもよい。
【００８０】
図７は、命令ブロック７００の様々な態様を例示し、コンパイラが如何にしてターゲットアドレス計算を命令ブロック７００内でより早期に早めることができるかの例を示す。命令ブロック７００は、ヘッダ７１０、データ指向命令７２０、及び制御指向命令７３０を含むことができる。データ指向命令７２０には、データを計算し、入力データを受信し、かつ／あるいは出力データを生成する命令を含むことができる。例えば、データ指向命令７２０が使用されて、データに対して数学的又は論理的オペレーションを実行し、入力デバイス、レジスタ、又はメモリからデータを読み出し、かつ／あるいは出力デバイス、レジスタ、又はメモリにデータを書き込むことができる。制御指向命令７３０には、例えばいずれの命令ブロックが実行されるか、どの順序で実行されるかなどの、プログラムの制御フローを決定する命令を含むことができる。例示の容易さのため、データ指向命令７２０及び制御指向命令７３０は、命令ブロック７００内で別個の命令ブロックとして例示される。しかしながら、データ指向及び制御指向命令は、命令ブロック７００内で相互に混合されてもよいことが理解されるべきである。さらに、いくつかの命令が、データ指向命令７２０及び制御指向命令７３０の双方の特性を有してもよい。例えば、いくつかの制御フロー判断が、計算の後、又はデータが入力された後の、データ値に依存する。
【００８１】
コンパイラは、互いに対して相対的な順序でプログラムの命令を出すことができる。いくつかの場合、命令間の相対的実行順序は、適当なプログラムオペレーションのために維持されなければならない。例えば、いくつかの命令は、他の命令により消費される結果を作成する。消費する命令は作成する命令の結果を使用するため、消費する命令は作成する命令に対してデータ依存的である。ゆえに、作成する命令は、消費する命令の前に実行されなければならない。別の例として、いくつかの命令は、他の命令が実行されるかどうかを決定し、あるいは制御する。制御する命令の結果が、制御される命令が実行されるかどうかを決定するため、制御される命令は、制御する命令に対して制御依存的である。別法として、いくつかの命令は、これら命令の実行が互いに対して影響を有さないとき、互いから独立であってもよい。独立した命令は、機能性における変更なく複数の異なる順序で実行できる。
【００８２】
命令ブロック７００は、ターゲットアドレス０を計算する命令７５０を含むことができ、コンパイラは、命令７５０を命令ブロック７００の中でより早期に早めることができる。ターゲットアドレスは、実行すべき次の命令ブロックの先頭アドレスを決定するために使用できる。各命令ブロックは、１つ以上のエグジットポイントを含むことができ、それぞれのエグジットポイントは、異なるターゲットアドレスを指し示すことができる。
【００８３】
特定の一例として、例えば基本ブロックが命令ウィンドウよりもより多くの命令を有するときなど、命令ブロックは基本ブロックの一部であってもよい。命令ブロック７００が基本ブロックの一部であるとき、実行すべき次の命令ブロックは当該命令ブロックのシーケンス内の次の命令ブロックであるため、１つのエグジットポイントのみ存在する。ターゲットアドレスは、次の順次の命令ブロックのアドレスとして、コンパイル時に計算されることができる。ゆえに、ターゲットアドレスは、順次のエグジットタイプを用いてヘッダ７１０内で識別されることができる。換言すると、ターゲットアドレスの計算は、（弧７５２で示されるように）ヘッダ７１０に早められることができ、そのため、ターゲットアドレスは、ヘッダ７１０がデコードされるとき、命令ブロックの他の命令が実行される前に、計算されることができる。ターゲットアドレス計算をヘッダに早めることにより、ヘッダがデコードされるとすぐに次の命令ブロックが非投機的にフェッチされることができる。
【００８４】
命令ブロック７００が単一の基本ブロックであるとき、命令ブロック７００から抜け出す１つ以上のターゲットアドレスが存在することがある。例えば、命令ブロック７００は、基本ブロックが無条件の分岐、例えばサブルーチンコールなどで終了するとき、単一のターゲットアドレスを有することがある。ターゲットアドレスがコンパイル時に分かる場合、弧７５２で示されるように、分岐の情報がヘッダ７１０に早められることができる。しかしながら、ターゲットアドレス計算が命令ブロック７００内で実行される命令、例えば制御指向命令７３０などに依存する場合、ターゲットアドレス計算とそれが依存する命令とは、弧７５４で示されるように、データ指向命令７２０のすべての前に早められることができる。別法として、ターゲットアドレス計算とそれが依存する命令とは、データ指向命令７２０のうちいくつかの前に早められてもよい。例えば、現在の命令ブロック７００のいくつか又はすべてのメモリロード命令が、ターゲットアドレスを計算することの前へ優先順位づけられてもよく、そのため、次の命令ブロックのために命令がフェッチされる前に、現在のブロックのメモリアクセスが実行される。
【００８５】
命令ブロック７００は、複数のそれぞれの潜在的なターゲットアドレスを計算するための複数の命令（例えば、７５０、７７０）を含むことができ、コンパイラは、命令７５０、７７０のうち１つ以上を命令ブロック７００の中でより早期に早めることができる。例えば、条件付き分岐が、条件が真の場合にあるターゲットアドレスに、条件が偽の場合に異なるターゲットアドレスにプログラムをフローさせることができる。例えば、そのソースコードは、
if  (condition  0)  {
perform  instructions  predicated  on  condition  0;  call  sub-routine  0}
else  {
perform  instructions  predicated  on  condition  1;  call  sub-routine  1}
で規定することができ、ここで、条件１（condition  1）は、条件０（condition  0）の逆である。ブロックベースアーキテクチャにおいて、条件又はプレディケートは、１つの命令内で、例えば制御指向命令７３０内などで、評価されることができる。制御依存命令は、評価の結果に基づいてプレディケートされてもよい。特定の一例として、制御指向命令７３０の中のテスト命令が、条件０についてテストすることができる。条件０が評価された後、条件０が真である場合に、条件０に基づいてプレディケートされた命令７４０と、ターゲットアドレス０を計算する命令７５０とが、実行されることができる。条件０が真でない（例えば、条件１が真である）場合、条件１に基づいてプレディケートされた命令７６０と、ターゲットアドレス１を計算する命令７７０とが、実行されることができる。弧７５６で示されるように、コンパイラは、ターゲットアドレス０を計算する命令７５０を、条件０に基づいてプレディケートされた命令７４０のうちいくつか又はすべてよりもより早期に早めることができる。詳細には、コンパイラは、命令７５０とそれが依存する命令とを、命令７５０から独立であるプレディケートされた命令７４０のすべての前へ早めることができる。同様に、弧７７２で示されるように、コンパイラは、ターゲットアドレス１を計算する命令７７０を、条件１に基づいてプレディケートされた命令７６０のうちいくつか又はすべてよりもより早期に早めることができる。
【００８６】
コンパイルの後、命令は、コンピュータ読取可能メモリ内に記憶でき、そのため、命令は、プログラムを実行するためにブロックベースプロセッサより取得されることができる。下記の例は、ブロックベースプロセッサ上での実行を説明する。
【００８７】
ＩＸ．ターゲットアドレスに対する早期アクセスを提供する例
図８は、ブロックベースコンピュータアーキテクチャ上での命令の実行を制御する方法８００の一例を例示するフローチャートである。例えば、方法８００は、ブロックベースプロセッサの制御論理が使用することができる。制御論理は、例えば、ブロックベースプロセッサに対して外部のコントローラ内に実装されてもよく、ブロックベースプロセッサの用途特定ハードウェア（例えば、特別目的制御ユニット又は分散論理ゲートなど）内に実装されてもよく、あるいはブロックベースプロセッサの１つ以上のプロセッサコア内でコードとして実行されてもよい。方法８００は、制御論理に次の命令ブロックのターゲットアドレスに対する早期アクセスを提供するために使用でき、そのため、複数の命令ブロックが、並列で非投機的に実行することができる。
【００８８】
８１０において、第１の命令ブロックの命令ヘッダがフェッチされ、少なくとも部分的にデコードされる。例えば、第１の命令ブロックは、メモリシステムからフェッチされてもよく、上記メモリシステムには、命令キャッシュ、統合された命令／データレベル１（Ｌ１）キャッシュ、レベル２（Ｌ２）キャッシュ、及び／又はメインメモリ（例えば、オンチップメモリ及び／又は外部メモリなど）を含むことができる。命令ヘッダには、命令ブロックのサイズと１つ以上のエグジットタイプとを含むことができ、各々のエグジットタイプは、命令ブロックからの潜在的な分岐に対応する。第１の命令ブロックが、第１の命令ブロックの先頭アドレスで始まるメモリからフェッチされる。第１の命令ブロックのサイズが第１の命令ブロックの先頭アドレスに対して加算されて、次の順次の命令ブロックの先頭アドレスを計算することができる。第１の命令ブロックのサイズは、第１の命令ブロックがどこにマッピングされ得るかを決定するために、利用可能リソースのリストと比較されてもよい。
【００８９】
８２０において、第１の命令ブロックは、ブロックベースプロセッサのプロセッサコアにマッピングされることができる。マッピングされた命令ブロックは、所与のプロセッサコア上で実行するように現在割り当てられているブロックである。ブロックベースプロセッサには、有限数の同種又は異種のプロセッサコアが含まれる。典型的なプログラムは、プロセッサコアに適合し得るよりもより多くの命令ブロックを有することがある。ゆえに、プログラムのそれぞれの命令ブロックは、一般に、プロセッサコアをプログラムの他の命令ブロックと共有することになる。換言すると、所与のコアは、プログラムの実行の間、いくつかの異なる命令ブロックの命令を実行することができる。有限数のプロセッサコアを有することはまた、プロセッサコアのすべてが命令ブロックを実行していてビジーで、かつ新しいコアがディスパッチに利用可能でないとき、プログラムの実行がストールし、あるいは遅延される可能性があることを意味する。プロセッサコアが利用可能になったとき、命令ブロックのインスタンスがプロセッサコアにマッピングされることができる。
【００９０】
制御論理は、いずれの命令ブロックがいずれのプロセッサコア上で実行されるかと、命令ブロックがいつ実行されるかとを割り当てる、命令ブロックスケジューラを含むことができる。マッピングは様々なファクタに基づいてよく、例えば、実行のために使用されるターゲットエネルギー、プロセッサコアの数及び構成、プロセッサコアの現在の及び／又は前の使用量、プログラムの動的フロー、投機的実行が可能にされるかどうか、投機的ブロックが実行される信頼度レベル、並びに他のファクタなどである。命令ブロックのインスタンスは、現在利用可能であるプロセッサコアに（例えば、それ上で命令ブロックが現在実行されていないときなどに）マッピングされることができる。一実施形態において、命令ブロックのインスタンスは、現在ビジーであるプロセッサコアに（例えば、コアが命令ブロックの別のインスタンスを実行しているときなどに）マッピングされてもよく、後からマッピングされたインスタンスは、より早期にマッピングされたインスタンスが完了したときに始まってもよい。別の例として、命令ブロックのインスタンスは、プロセッサコア内の空いた命令ウィンドウにマッピングされてもよい。
【００９１】
命令ブロックが特定のプロセッサコアにマッピングされたとき、命令ブロックはインフライト（in-flight）である。インフライトの命令ブロックは、ブロックベースプロセッサの特定のコアをターゲットにしたブロックであり、このブロックは、特定のプロセッサコア上で投機的か又は非投機的かのいずれかで実行されることになり、あるいは実行されている。ブロックは、実行している命令ブロックにより提供されるワーク（work）をプログラムが使用することがブロックのマッピングの間に分かるとき、非投機的に実行する。ブロックは、実行している命令ブロックにより提供されるワークをプログラムが使用するか、あるいは使用しないかどうかがブロックのマッピングの間に分からないとき、投機的に実行する。ブロックを投機的に実行することは、例えば、仮に投機的ブロックのワークが使用されるであろうことが分かった後又は分かったときにブロックが開始されることになる場合よりも、より早期にブロックが開始されるときなどに、性能を潜在的に増大させることができる。しかしながら、投機的に実行することは、例えば、投機的ワークがプログラムにより使用されないときなどに、プログラムを実行するときに使用されるエネルギーを潜在的に増大させる可能性がある。
【００９２】
命令ブロックが特定のプロセッサコアにマッピングされた後、命令ブロックは、この特定プロセッサコアによりフェッチされ、デコードされ、実行されることができる。フェッチすることには、命令ブロックの命令をメモリから特定プロセッサコアのバッファ又はレジスタにロードすることを含むことができる。フェッチすることは、プロセッサコアがパイプライン化されているとき、デコードすること及び実行することと重なってもよい。命令ブロックの命令がプロセッサコアにロードされたとき、命令ブロックはプロセッサコア上に存在する。命令ブロックは、命令ブロックのうちすべてでなくいくつかの命令がロードされたとき、部分的に存在する。命令ブロックは、命令ブロックのすべての命令がロードされたとき、フルに存在する。命令ブロックは、プロセッサコアがリセットされるか、あるいは異なる命令ブロックがプロセッサコアにフェッチされるまで、プロセッサコア上に存在することになる。デコードすることには、フェッチされた命令を比較的コンパクトなマシンコードから、プロセッサコアのハードウェアリソースを制御するために使用できるよりコンパクトでない表現に変形することを含むことができる。デコードされた命令は、プロセッサコアの命令ウィンドウ内に記憶され、命令のオペランドがレディになったとき、及びコアのリソースが命令を実行するのに利用可能になったときに、実行されることができる。一般に、コアが、コアの外部のアーキテクチャ状態が更新されることになるコミットフェーズに入るまで、コア上で実行する命令は、コアのローカルの状態のみ更新する。しかしながら、次の命令ブロックのターゲットアドレスを生成する命令は、命令ブロックがコミットされる前に制御論理と通信することができる。詳細には、次の命令ブロックのターゲットアドレスと分岐識別子とが、命令ブロックがコミットされる前に制御論理に対して通信されることができる。例えば、ブロックのターゲットアドレスが、オフセット付き分岐又はオフセット付きコールの命令により決定されるとき、ターゲットアドレスは、命令ブロックがデコードされたときに決定されてもよい。
【００９３】
８３０において、第１の命令ブロックからのターゲットアドレス（及び、分岐識別子）は、第１の命令ブロックがコミットする前に制御論理で受信することができる。受信したターゲットアドレスは、分岐識別子に対応するエグジットタイプに従って解釈されることになり、そのため、第２の命令ブロックの先頭アドレスが計算されることができる。例えば、ターゲットアドレスは、受信した分岐識別子に対応するエグジットタイプに依存して、オフセット又はサブルーチンアドレスとして解釈されてもよい。第２の命令ブロックは、プログラム順序において次の命令ブロックであり、ゆえに、非投機的な命令ブロックである。
【００９４】
８４０において、第２の命令ブロックの命令の実行が、開始されることができる。第２の命令ブロックの実行を開始することには、第２の命令ブロックをブロックベースアーキテクチャのＬ１キャッシュにプリフェッチすること、第２の命令ブロックのヘッダをプリフェッチすること、第２の命令ブロックのヘッダをデコードすること、第２の命令ブロックをプロセッサコアにマッピングすること、第２の命令ブロックをブロックベースアーキテクチャの第２のコアの命令ウィンドウにフェッチすること、第２の命令ブロックをブロックベースアーキテクチャの第１のコアの命令ウィンドウにフェッチすること、第２のコアにロードされた第２の命令ブロックをリフレッシュすること、第２の命令ブロックの１つ以上の命令をデコードすること、及び／又は、第２の命令ブロックの１つ以上の命令をデコード及び／又は実行することを含むことができる。命令ブロックは、命令ブロックの反復につき１つのエグジットポイントにのみ続くため、次の命令ブロックのフェッチ及び実行は、ひとたび取られたエグジットポイントのプレディケートが決定されると、命令ブロック内の他の命令が実行中である場合でさえ、開始することができる。例えば、プレディケートされた及び／又はプレディケートされていないレジスタ及び／又はメモリの書き込みが、次の命令ブロックに対する分岐を決定的に取った後でさえ、行われ続けてもよい。
【００９５】
命令ブロックは、例えば、命令ブロックがサブルーチン又はループの本体を実行するようにマッピングされたときなどに、繰り返し実行されることがある。第２の命令ブロックは、ブロックベースプロセッサのコア内にすでに存在する可能性があり、ゆえに、コアをリフレッシュすることで、第２の命令ブロックを再フェッチ及び再デコードするために使用されるであろう時間及びエネルギーを節減する可能性がある。本明細書において用いられるとき、命令ブロックリフレッシュ又はプロセッサコアリフレッシュは、プロセッサコアが該プロセッサコア上に存在する１つ以上の命令ブロックを再実行することが可能であることを意味する。一実施形態において、コアをリフレッシュすることには、１つ以上の命令ブロックのアクティブレディ状態をリセットすることを含むことができる。ゆえに、ブロックがリフレッシュされるとき、アクティブレディ状態がクリアされる間、デコードされた命令とデコードされたレディ状態とは維持されることができる。命令ブロックがループ又は繰り返されるサブルーチンの一部であるとき、又は、投機的ブロックが終端され、かつ再実行されることになるとき、同じプロセッサコア上で命令ブロックを再実行することが望ましい可能性がある。リフレッシュする判断は、プロセッサコア自体によって（連続的な再使用）、あるいはプロセッサコアの外部によって（非連続的な再使用）、例えば命令ブロックスケジューリングを実行する制御論理などによって行われてもよい。
【００９６】
８５０において、共有されたリソースに対するアクセス要求が、より古い及び／又は非投機的な命令ブロックがより新しい及び／又はより投機的な命令ブロックよりも共有されたリソースに対してのより高い優先順位を有するように、優先順位づけられることができる。一例として、制御論理は、最も古い実行命令ブロックを追跡し、該命令ブロックが共有リソースにアクセスすることを要求したときに該命令ブロックに優先順位を常に与えることができる。より新しい実行命令ブロックが非投機的又は投機的であり得ることに対し、最も古い実行命令ブロックは非投機的である。より新しい実行命令ブロックは、ラウンドロビン、ランダム、又は他のアルゴリズムを用いて、共有リソースに対する優先順位を与えられてもよい。別の例として、制御論理は、各命令ブロックのタイムスタンプを生成し、共有リソースに対するアクセスを要求する最も古い命令ブロックに優先順位を常に与えてもよい。より新しい及び／又はより投機的な命令ブロックを上回ってより古い及び／又は非投機的な命令ブロックを優先順位づけることにより、より古い命令ブロックはより速く完了することができ、そのため、データ依存関係がより早期に解決されることができ、新しい命令ブロックが使用するようにリソースが解放されることができる。さらに、共有リソースに対するアクセスが使用され、かつアボートされた投機的命令で無駄にされないという高い見込みがある。共有リソースには、例えば、キャッシュ、レジスタファイル、メモリサブシステム、入力ポート、出力ポート、特別目的コア若しくはアクセラレータ、及び／又は他の様々なリソースを含むことができる。
【００９７】
下記は、方法８００が如何にして使用され得るかの一例である。命令ブロック１がフェッチされることができ、ヘッダが少なくとも部分的にデコードされることができる（８１０）。例えば、ヘッダは、命令ブロック１がどれほど大きいかを示すことができ、そのため、ヘッダは、命令ブロックのための十分な記憶キャパシティを有するプロセッサコアにマッピングされることができる。命令ブロック１は、第１のプロセッサコアにマッピングされることができる（８２０）。命令ブロック１は、命令ブロック２に対するオフセット付き分岐命令を含むことができる。命令ブロック１が第１のプロセッサコアに最初フェッチされたとき、分岐のオフセットはまだわからない。しかしながら、命令ブロック１のターゲットアドレスは、命令ブロックがコミットする前に、例えば命令がデコードされているとき又は命令の実行の間などに、決定されることができる（８３０）。特定の一例として、分岐命令は、命令ブロック１の唯一の分岐であり得る。分岐命令がプレディケートされない場合、ターゲットアドレスは分岐命令のデコードの間に分かることになる。分岐命令が、命令ブロック内で計算された値に基づいてプレディケートされる場合、潜在的なターゲットアドレスはデコードの後に知ることができ、実際のターゲットアドレスはプレディケートを計算した後に分かることになる。しかしながら、プレディケートを計算することを待機することよりむしろ、分岐予測器が、潜在的なターゲットアドレスを用いて、プレディケートが計算される前に、取られる分岐を予測してもよく、命令ブロック２の投機的実行を開始することができる。ゆえに、命令ブロック２は、現在のコア内の別の命令ウィンドウ内か、又は第２のコア内かのいずれかで、先に動作することができる。分岐予測器が正しく予測した場合、命令ブロック２は動作を継続することができ、命令ブロック１がコミットされた後にコミットされ得る。分岐予測器が間違って予測した場合、命令ブロック２はそれをコミットすることなくアボートされることができる。
【００９８】
図９〜図１０は、ブロックベースアーキテクチャの異なる構成及びオペレーションの例を例示する。例は、ターゲットアドレスに対する早期アクセスを提供することに関連づけられた様々な態様を例示する。図９は、複数の処理コア９０５と制御論理９２０とメモリシステムとを含むブロックベースのアーキテクチャ９００を示す。コア９０５のうち複数のコアがメモリシステムにアクセスするよう試みることができるため、メモリシステムはブロックベースのアーキテクチャの共有リソースである。メモリシステムは、クロスバー９３０、レベル１キャッシュ（Ｌ１＄）９４０、レベル２キャッシュ（Ｌ２＄）９５０、及びメインメモリ９１０を含むことができる。クロスバー９３０は、コアとＬ１キャッシュ９４０との間でデータをルーティングするために使用できる。クロスバー９３０及びＬ１キャッシュ９４０の異なる実装が、Ｌ１キャッシュ９４０に対するより多くの又はより少ない同時アクセスを可能にすることができる。一実施形態において、クロスバー９３０は、メモリアクセスがＬ１キャッシュ９４０の異なるバンクに対してであるとき、複数のコアがＬ１キャッシュ９４０に同時にアクセスすることを可能にすることができる。例えば、Ｌ１キャッシュは、各コアに関連付けられたバンクを有することができる。別の実施形態において、クロスバー９３０は、単一のコアのみが所与の時間にＬ１キャッシュ９４０にアクセスできるようにしてもよい。
【００９９】
いくつかの実施形態において、制御論理９２０は、下記のうち１つ以上を用いて少なくとも部分的に実装できる：ハードワイヤード有限状態マシン、プログラマブルマイクロコード、プログラマブルゲートアレイ、又は他の適切な制御回路。一実施形態において、制御論理９２０は、例えば命令ブロックスケジューリングなどの、ブロックベースアーキテクチャ９００の制御機能を実行する命令ブロックを実行するプロセッサコア９０５のうちの１つであり得る。別の実施形態において、ソフトウェアコードを実行する外部のプロセッサが、ブロックベースアーキテクチャ９００の制御機能と通信し、該制御機能を実行するために使用されてもよい。
【０１００】
プログラムの命令９１２は、命令ブロック（Ａ〜Ｅ）にグループ化され、メインメモリ９１０に記憶されることができる。命令ブロックアドレステーブル９１４が、命令ブロックの先頭アドレスを記憶することができる。命令ブロックは、Ｌ１キャッシュ９４０とＬ２キャッシュ９５０とにコピーされることができ、そのため、コア９０５と制御論理９２０とはブロックに対してより高速のアクセスを有する。
【０１０１】
プログラムは、制御論理９２０の命令ブロックスケジューラ９２５がコア１にプログラムの第１の命令ブロック（Ａ）をマッピングし、そのローディングを開始したとき、実行を開始することができ、コア１において、命令ブロックＡは実行を開始することができる。命令ブロックスケジューラ９２５は、命令ブロックがいずれのコアにマッピングされたかに関する情報を記憶する命令ブロックマッピングテーブル９１６を維持することにより、コアのレジデンシ（residency）を追跡することができる。命令ブロックマッピングテーブル９１６は、（例示されるように）メモリ９１０に、又はソフトウェアによりアクセス可能でない別のメモリ構造（例えば、制御論理９２０のキャッシュなど）内に記憶できる。命令ブロックスケジューラ９２５は、命令ブロックの命令ヘッダをフェッチし、デコードすることができる。ヘッダ情報は、命令ブロックのサイズと、次の命令ブロックのアドレスを計算する方法に関する情報（例えば、１つ以上のエグジットタイプフィールド）とを決定するために使用できる。
【０１０２】
コア１でのブロックＡの実行の間、ブロックＡがコミットされる前に、次の命令ブロックに対応するターゲットアドレスがブロックＡにより生成され、制御論理９２０に通信されることができる。次の命令ブロックのアドレスは、受信したターゲットアドレスと、ブロックＡのヘッダのエグジットタイプフィールドとに基づいて計算できる。次の命令ブロックのアドレスが計算されたとき、制御論理９２０は、次の命令ブロックの実行を開始することができる。例えば、プログラムの次の命令ブロックはブロックＢであり得、制御論理９２０は命令ブロックＢの実行を開始することができる。
【０１０３】
ブロックＢの実行を開始することには、ブロックＢをＬ１キャッシュ９３０にプリフェッチすること、ブロックＢのヘッダをフェッチすること、ブロックＢのヘッダをデコードすること、ブロックＢをコア９０５のうち１つにマッピングすること、ブロックＢをコア９０５のうち１つ（例えば、コア２、又はコア１の使用されていないウィンドウなど）にフェッチすること、ブロックＢをリフレッシュすること（それがコア９０５のうち１つにすでに存在した場合）、ブロックＢの１つ以上の命令をデコードすること、及び／又はブロックＢの１つ以上の命令をデコード及び／又は実行することを含むことができる。例えば、ブロックＢは、コア２にマッピングされ、ロードされることができ、コア２において、ブロックＢは、ブロックＡと同時に実行するように開始することができる。ゆえに、ブロックＡ及びＢは、ブロックＡがブロックＢのアドレスに対する早期アクセスを提供したため、並列に実行することができる。ブロックを並列に実行することにより、プログラムは、仮にブロックが順次的に実行される場合より速く完了することができる。
【０１０４】
制御論理９２０は、プログラムのブロックの投機的実行を開始するために使用できる分岐予測器（図示されていない）を含むことができる。例えば、分岐予測器は、ブロックＣをコア３にマッピングし、そのためコア３がメモリ９１０からブロックＣの命令をフェッチすることを開始できることにより、命令ブロックＣの実行を開始することができる。
【０１０５】
異なるコア９０５にロードされたブロックの各々は、例えばメモリシステムなどの共有リソースに対するアクセスを要求することができる。例えば、ブロックＡ及びＢが、ブロックＣの命令フェッチと同時にメモリからのデータを要求してもよい。制御論理９２０は、共有されたリソースに対するアクセスを、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る上記リソースに対しての優先順位を有するように、優先順位づけるように構成されることができる。この例において、ブロックＡ及びＢは非投機的に実行しており、ブロックＢは投機的に実行している。ブロックＡは最も古いブロックであり、ブロックＢは、ブロックＢがブロックＡにより開始されたのでブロックＡより新しく、ブロックＣは、最も新しいブロックである。ブロックＡが最も古い非投機的ブロックであるため、ブロックＡはブロックＢ及びＣを上回る優先順位を有することができる。ブロックＢはブロックＣより古いため、さらに、ブロックＣが投機的である一方でブロックＢは非投機的であるため、ブロックＢはブロックＣを上回る優先順位を有することができる。
【０１０６】
プログラム実行は、プログラムが完了するまで、この方式で継続することができる。制御論理９２０は、１つのプログラム又は複数のプログラムのいずれかがブロックベースアーキテクチャ９００上で動作することができるように構成できる。例えば、制御論理９２０は、各プロセス又はスレッドがコア９０５のサブセットに割り振られることができるようにコア９０５を区分してもよい。
【０１０７】
図１０は、ブロックベースアーキテクチャ１０００が図９のメモリシステムとは別様に編成されたメモリシステムを使用できることを例示する。詳細には、図１０は、複数の処理コア１００５と制御論理１０２０とメモリシステムとを含むブロックベースアーキテクチャ１０００を示す。メモリシステムは、各それぞれのコアのプライベートレベル１キャッシュ（Ｌ１＄）１０３０〜１０３４、クロスバー１０４０、レベル２キャッシュ（Ｌ２＄）１０５０、及びメインメモリ１０１０を含むことができる。ここで、クロスバー１０４０は、プライベートＬ１キャッシュ１０３０〜１０３４とＬ２キャッシュ１０３０との間でデータをルーティングするために使用できる。クロスバー１０４０とＬ２キャッシュ１０５０との異なる実装が、Ｌ２キャッシュ１０５０に対してのより多くの又はより少ない同時アクセスを可能にすることができる。一実施形態において、クロスバー１０４０は、メモリアクセスがＬ２キャッシュ１０５０の異なるバンクに対してであるとき、複数のＬ１キャッシュがＬ２キャッシュ１０５０に同時にアクセスすることを可能にすることができる。例えば、Ｌ２キャッシュは、各Ｌ１キャッシュに関連づけられたバンクを有することができる。別の実施形態において、クロスバー１０４０は、単一のＬ１キャッシュのみが所与の時間にＬ２キャッシュ１０５０にアクセスできるようにしてもよい。
【０１０８】
図９及び図１０のメモリシステムは、ブロックベースアーキテクチャで使用できる多くのとり得るメモリシステムのうち２つのみを例示していることが理解されるべきである。バリエーションには、異なる数又はレベルのキャッシュ、異なるキャッシュ編成（例えば、別個の命令及びデータキャッシュを提供することなど）、レベル間の異なるコネクティビティ、及び当分野で知られる他のメモリアーキテクチャを含むことができる。
【０１０９】
Ｘ．例示的なコンピューティング環境
図１１は、ブロックベースプロセッサにおける不良ジャンプ検出を含む説明された実施形態、手法、及びテクノロジーが実装され得る適切なコンピューティング環境１１００の一般化された例を示す。例えば、コンピューティング環境１１００は、本明細書において説明される分岐命令ターゲット位置を検証するための開示された手法を実装することができる。
【０１１０】
コンピューティング環境１１００は、本テクノロジーが多様な汎用目的又は特別目的のコンピューティング環境に実装され得るので、本テクノロジーの使用法又は機能性の範囲に関していかなる限定も示唆するようには意図されない。例えば、開示されるテクノロジーは、他のコンピュータシステム構成で実装されてもよく、該コンピュータシステム構成には、ハンドヘルドデバイス、マルチプロセッサシステム、プログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどが含まれる。開示されるテクノロジーはまた、分散コンピューティング環境で実現されてもよく、これにおいてタスクは、通信ネットワークを通じてリンクされたリモートの処理デバイスにより実行される。分散コンピューティング環境において、プログラムモジュール（ブロックベース命令ブロックの実行可能命令を含む）は、ローカル及びリモート双方のメモリ記憶デバイスに位置し得る。
【０１１１】
図１１を参照し、コンピューティング環境１１００は、少なくとも１つのブロックベース処理ユニット１１１０及びメモリ１１２０を含む。図１１において、この最も基本的な構成１１３０が破線内に含まれる。ブロックベース処理ユニット１１１０は、コンピュータ実行可能命令を実行し、実際の又は仮想のプロセッサであり得る。マルチ処理システムにおいて、複数の処理ユニットがコンピュータ実行可能命令を実行して処理パワーを増大させ、そのようなものとして、複数のプロセッサが同時に動作することができる。メモリ１１２０は、揮発メモリ（例えば、レジスタ、キャッシュ、ＲＡＭ）、不揮発メモリ（例えば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ等）、又は上記２つのうち何らかの組み合わせであり得る。メモリ１１２０は、例えば、本明細書に説明されるテクノロジーを実施することができるソフトウェア１１８０、イメージ、及びビデオを記憶することができる。コンピューティング環境は、さらなる特徴を有してもよい。例えば、コンピューティング環境１１００は、ストレージ１１４０、１つ以上の入力デバイス１１５０、１つ以上の出力デバイス１１６０、及び１つ以上の通信接続１１７０を含む。バス、コントローラ、又はネットワークなどの相互接続メカニズム（図示されていない）が、コンピューティング環境１１００のコンポーネントを相互接続する。典型的に、オペレーティングシステムソフトウェア（図示されていない）が、コンピューティング環境１１００内で実行する他のソフトウェアのオペレーティング環境を提供し、コンピューティング環境１１００のコンポーネントのアクティビティを協調する。
【０１１２】
ストレージ１１４０は、取外し可能又は取外し不能であり得、ストレージ１１４０には、磁気ディスク、磁気テープ若しくはカセット、ＣＤ‐ＲＯＭ、ＣＤ‐ＲＷ、ＤＶＤ、又は、情報を記憶するために使用でき、かつコンピューティング環境１１００内でアクセスできる任意の他の媒体を含むことができる。ストレージ１１４０は、本明細書において説明されるテクノロジーを実装するために使用できるソフトウェア１１８０の命令、プラグインデータ、及びメッセージを記憶する。
【０１１３】
入力デバイス１１５０は、タッチ入力デバイス、例えばキーボード、キーパッド、マウス、タッチスクリーンディスプレイ、ペン、又はトラックボールなど、音声入力デバイス、スキャニングデバイス、又は、コンピューティング環境１１００に入力を提供する他のデバイスであり得る。オーディオについて、入力デバイス１１５０は、アナログ若しくデジタル形式でオーディオ入力を受け入れるサウンドカード若しくは同様のデバイス、又は、コンピューティング環境１１００にオーディオサンプルを提供するＣＤ‐ＲＯＭリーダであってもよい。出力デバイス１１６０は、ディスプレイ、プリンタ、スピーカー、ＣＤライタ、又は、コンピューティング環境１１００から出力を提供する他のデバイスであり得る。
【０１１４】
通信接続１１７０は、別のコンピューティングエンティティに対しての通信媒体（例えば、接続ネットワーク）を通じた通信を可能にする。通信媒体は、コンピュータ実行可能命令、圧縮されたグラフィックス情報、ビデオ、又は他のデータなどの情報を変調されたデータ信号で伝達する。通信接続１１７０は、有線の接続（例えば、メガビット又はギガビットイーサネット（登録商標）、Ｉｎｆｉｎｉｂａｎｄ、電気又は光ファイバ接続を通じたファイバチャネル）に限定されず、無線テクノロジー（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＷｉＦｉ（登録商標）（ＩＥＥＥ８０２．１１ａ／ｂ／ｎ）、ＷｉＭａｘ（登録商標）、セルラー、衛星、レーザ、赤外線を介したＲＦ接続）と開示されたエージェント、ブリッジ、及びエージェントデータ消費者にネットワーク接続を提供するための他の適切な通信接続とをさらに含む。仮想ホスト環境において、通信接続は、仮想ホストにより提供される仮想化されたネットワーク接続であってもよい。
【０１１５】
開示された方法のいくつかの実施形態は、開示されたテクノロジーのうちすべて又は一部をコンピューティングクラウド１１９０に実装するコンピュータ実行可能命令を用いて実行されてもよい。例えば、開示されたコンパイラ及び／又はブロックベースプロセッササーバは、コンピューティング環境１１３０内に位置し、あるいは、開示されたコンパイラは、コンピューティングクラウド１１９０に位置するサーバ上で実行されてもよい。いくつかの例において、開示されたコンパイラは、従来の中央処理ユニット（例えば、ＲＩＳＣ又はＣＩＳＣプロセッサ）上で実行される。
【０１１６】
コンピュータ読取可能媒体は、コンピューティング環境１１００内でアクセスできる任意の利用可能媒体である。限定でなく例として、コンピューティング環境１１００を用いて、コンピュータ読取可能媒体には、メモリ１１２０及び／又はストレージ１１４０が含まれる。容易に理解されるであろうように、用語のコンピュータ読取可能記憶媒体には、メモリ１２０及びストレージ１１４０などのデータストレージの媒体が含まれ、変調されたデータ信号などの送信媒体は含まれない。
【０１１７】
Ｘ．開示されたテクノロジーのさらなる例
開示された構成要件のさらなる例が、上記で論じられた例に従ってここに論じられる。
【０１１８】
一実施形態において、ブロックベースコンピューティングシステムが、複数のプロセッサコアと制御論理とを含む。複数のプロセッサコアは、第１の命令ブロックの命令を実行し、かつ第１の命令ブロックがコミットされる前に第２の命令ブロックのターゲットアドレスを生成するように構成された第１のプロセッサコアを含む。制御論理は、第１の命令ブロックがコミットされる前に、第２の命令ブロックのターゲットアドレスを受信し、かつ第２の命令ブロックの非投機的実行を開始するように構成される。ブロックベースコンピューティングシステムは、複数のプロセッサコアにより共有されたリソースをさらに含んでもよい。制御論理は、上記共有されたリソースに対するアクセスを、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る上記リソースに対しての優先順位を有するように、優先順位づけるようにさらに構成されてもよい。複数のプロセッサコアにより共有されたリソースは、例えば、キャッシュ、レジスタファイル、又はメモリであり得る。第２の命令ブロックの非投機的実行を開始することは、第１の命令ブロックのヘッダ内にエンコードされたエグジットタイプ情報に少なくとも部分的に基づいてもよい。複数のプロセッサコアのそれぞれのプロセッサコアは、プライベート命令キャッシュを含んでもよい。第２の命令ブロックの実行を開始することは、第２の命令ブロックを複数のプロセッサコアのうち第２のコアにロードすることを含んでもよい。第１の命令ブロックは、第１のコアの第１の命令ウィンドウにロードされてもよい。第２の命令ブロックの実行を開始することは、第２の命令ブロックを第１のコアの第２の命令ウィンドウにロードすることを含んでもよい。
【０１１９】
一実施形態において、ブロックベースアーキテクチャにおいて分岐を実行する方法が、ブロックベースアーキテクチャの第１のコアを用いて第１の命令ブロックの１つ以上の命令を実行することと、第１の命令ブロックがコミットされる前に、第２の命令ブロックの命令の非投機的実行を開始することと、を含む。方法は、第１の命令ブロックの命令のプレディケートを評価し、プレディケート評価に少なくとも部分的に基づいて、上記開始することを実行することをさらに含んでもよい。方法は、第１の命令ブロックの命令ヘッダに記憶されたエグジットタイプ情報を評価することと、エグジットタイプ情報に少なくとも部分的に基づいて上記開始することを実行することと、をさらに含んでもよい。開始された、非投機的実行は、第２の命令ブロックをブロックベースアーキテクチャのＬ１キャッシュにプリフェッチすることを含んでもよい。開始された、非投機的実行は、第２の命令ブロックをブロックベースアーキテクチャの第２のコアの命令ウィンドウにフェッチすることを含んでもよい。開始された、非投機的実行は、第２の命令ブロックをブロックベースアーキテクチャの第１のコアの命令ウィンドウにフェッチすることを含む。第２の命令ブロックは、上記開始することの前にブロックベースアーキテクチャの第２のコアにロードされてもよく、開始された、非投機的実行は、第２のコアにロードされた第２の命令ブロックをリフレッシュすることを含んでもよい。開始された、非投機的実行は、第２の命令ブロックのヘッダをプリフェッチすることを含んでもよい。開始された、非投機的実行は、第２の命令ブロックのヘッダをプリフェッチすることを含んでもよい。方法は、ブロックベースアーキテクチャの共有されたリソースに対するアクセス要求を、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る上記共有されたリソースに対しての優先順位を有するように、優先順位づけることをさらに含んでもよい。共有されたリソースは、例えば、キャッシュ、レジスタファイル、又はメモリサブシステムであり得る。
【０１２０】
一実施形態において、コンピュータ読取可能記憶デバイス又はメモリが、ソースコードをブロックベースコンピュータアーキテクチャ上で実行可能であるマシンコードにコンパイルする方法をプロセッサに実行させる命令を有する。命令は、ブロックベースコンピュータアーキテクチャ上で実行可能なマシンコード命令のストリームを生成することをプロセッサにさせる命令を含み、マシンコード命令のストリームは複数の命令ブロックに分割される。命令は、複数の命令ブロックのそれぞれの命令ブロックのエグジットタイプを決定することをプロセッサにさせる命令を含む。命令は、それぞれの命令ブロックのエグジットタイプをそれぞれの命令ブロックのヘッダ内にエンコードすることをプロセッサにさせる命令を含む。命令は、それぞれの命令ブロック内の分岐ターゲットアドレスを計算する命令を早めることをプロセッサにさせる命令をさらに含んでもよい。エグジットタイプは、下記タイプのうち少なくとも１つ以上を含んでもよい：ヌル、順次、オフセット、間接、コール、又はリターン。
【０１２１】
開示された対象事項の原理が適用され得る多くのとり得る実施形態を考慮し、例示された実施形態は単に好適な例であり、特許請求の範囲をこれら好適な例に限定するものとみなされるべきではないことが認識されるべきである。むしろ、請求される対象事項の範囲は下記の請求項により定義される。ゆえに、これら請求項の範囲内に入るすべてを我々の発明として請求する。
【図１】
2018519602.tif 000003
【図２】
2018519602.tif 000004
【図３】
2018519602.tif 000005
【図４】
2018519602.tif 000006
【図５】
2018519602.tif 000007
【図６】
2018519602.tif 000008
【図７】
2018519602.tif 000009
【図８】
2018519602.tif 000010
【図９】
2018519602.tif 000011
【図１０】
2018519602.tif 000012
【図１１】
2018519602.tif 000013
【国際調査報告】
2018519602.tif 000014
2018519602.tif 000015
2018519602.tif 000016