JP2018519602A - 連続ブロックの並列実行を有するブロックベースアーキテクチャ - Google Patents
連続ブロックの並列実行を有するブロックベースアーキテクチャ Download PDFInfo
- Publication number
- JP2018519602A JP2018519602A JP2017566304A JP2017566304A JP2018519602A JP 2018519602 A JP2018519602 A JP 2018519602A JP 2017566304 A JP2017566304 A JP 2017566304A JP 2017566304 A JP2017566304 A JP 2017566304A JP 2018519602 A JP2018519602 A JP 2018519602A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- block
- instructions
- instruction block
- core
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 54
- 230000000977 initiatory effect Effects 0.000 claims abstract description 12
- 238000005516 engineering process Methods 0.000 abstract description 46
- 238000012545 processing Methods 0.000 description 22
- 238000004891 communication Methods 0.000 description 18
- 238000004364 calculation method Methods 0.000 description 17
- 239000000872 buffer Substances 0.000 description 10
- 238000013507 mapping Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 6
- 230000001419 dependent effect Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 239000000835 fiber Substances 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 206010000210 abortion Diseases 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- -1 bridge Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000003863 physical function Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000002459 sustained effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3846—Speculative instruction execution using static prediction, e.g. branch taken strategy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
Abstract
ブロックベースプロセッサアーキテクチャにおいてターゲットアドレスに対する早期アクセスを提供することについて、システム、方法、及びコンピュータ読取可能ストレージが開示される。開示されるテクノロジーの一例において、ブロックベースアーキテクチャにおいて分岐を実行する方法が、ブロックベースアーキテクチャの第1のコアを用いて第1の命令ブロックの1つ以上の命令を実行することを含むことができる。方法は、第1の命令ブロックがコミットされる前に、第2の命令ブロックの命令の非投機的実行を開始することを含むことができる。
Description
マイクロプロセッサは、関連するプロセッサ命令セットアーキテクチャ(ISA)における変更がほとんどない状態で、ムーアの法則により予測された継続したトランジスタスケーリングのため、トランジスタ数、集積回路コスト、製造資本、クロック周波数、及びエネルギー効率における継続的な進歩の恩恵を受けてきた。しかしながら、この40年にわたり半導体産業を推進してきたフォトリソグラフィックのスケーリングから実現される恩恵は減速しつつあり、あるいは逆転さえしつつある。縮小命令セットコンピューティング(RISC)アーキテクチャは、長年の間、プロセッサ設計において支配的パラダイムであった。アウトオブオーダスーパースカラ実装は、面積又は性能における持続した向上を提示していない。したがって、プロセッサISAにおける向上が性能向上を拡大する十二分な機会が存在する。
ブロックベースプロセッサ命令セットアーキテクチャ(BB‐ISA)においてターゲットアドレスに対する早期アクセスを提供することについて、方法、装置、及びコンピュータ読取可能記憶デバイスが開示される。解決策のために説明される手法及びツールは、プロセッサ性能を潜在的に向上させることができ、互いに対して別個に、又は様々な組み合わせで実装できる。下記でより十分に説明されるように、説明される手法及びツールは、デジタルシグナルプロセッサ、マイクロプロセッサ、特定用途向け集積回路(ASIC)、ソフトプロセッサ(例えば、再構成可能論理を用いてフィールドプログラマブルゲートアレイ(FPGA)で実装されたマイクロプロセッサコア)、プログラマブル論理、又は他の適切な論理回路において実装できる。当業者に容易に明らかになるように、開示されるテクノロジーは、様々なコンピューティングプラットフォームにおいて実装でき、該コンピューティングプラットフォームには、これらに限られないが、サーバ、メインフレーム、セルフォン、スマートフォン、PDA、ハンドヘルドデバイス、ハンドヘルドコンピュータ、タッチスクリーンタブレットデバイス、タブレットコンピュータ、ウェアラブルコンピュータ、及びラップトップコンピュータが含まれる。
開示されるテクノロジーのいくつかの例において、ブロックベースコンピューティングシステムは、複数のプロセッサコアと制御論理とを含むことができる。プロセッサコアは、第1の命令ブロックの命令を実行し、かつ第1の命令ブロックがコミットされる前に第2の命令ブロックのターゲットアドレスを生成するように構成された第1のプロセッサコアを含むことができる。制御論理は、第1の命令ブロックがコミットされる前に第2の命令ブロックのターゲットアドレスを受信し、かつ第2の命令ブロックの実行を開始するように構成できる。開始された、第2の命令ブロックの実行は、第1の命令ブロックのヘッダ内にエンコードされたエグジットタイプ情報に少なくとも部分的に基づくことができる。
本発明の概要は、下記で発明の詳細な説明においてさらに説明される概念のうちの選択物を簡素化された形式で紹介するために提供される。本発明の概要は、請求される対象事項の重要な特徴又は必須の特徴を識別するようには意図されず、請求される対象事項の範囲を限定するために使用されるようにも意図されない。開示される対象事項についての前述及び他の目的、特徴、及び利点が、添付図面を参照して進む下記の詳細な説明から明らかになるであろう。
I.概論
本開示は、いかなる方法でも限定するように意図されない代表的な実施形態の文脈で説明される。
本開示は、いかなる方法でも限定するように意図されない代表的な実施形態の文脈で説明される。
本出願において用いられるとき、単数形“a”、“an”、及び“the”は、文脈が別段明確に示さない限り、複数形を含む。さらに、用語“includes”は、“comprises”を意味する。さらに、用語「結合された」は、アイテムを一緒に結合又はリンクする機械的、電気的、磁気的、光学的、及び他の実際的方法を包含し、結合されたアイテム間における中間要素の存在を除外しない。さらに、本明細書において用いられるとき、用語「及び/又は」は、フレーズ内の任意の1つのアイテム又はアイテムの組み合わせを意味する。
本明細書に説明されるシステム、方法、及び装置は、いかなる方法でも限定するとみなされるべきではない。代わりに、本開示は、単体で、並びに互いの様々なコンビネーション及びサブコンビネーションで、様々な開示される実施形態のすべての新規及び非自明の特徴及び態様に向けられる。開示されるシステム、方法、及び装置は、いかなる特定の態様若しくは特徴又はこれらの組み合わせにも限定されず、開示される事物及び方法は、いずれか1つ以上の特定の利点が存在し又は問題が解決されることを必要としない。さらに、開示される実施形態のいかなる特徴又は態様も、互いの様々なコンビネーション及びサブコンビネーションで使用できる。
開示される方法のうちいくつかについてのオペレーションが、簡便な提示のために特定の順序で説明されるが、この説明の仕方は、下記で説明される特定の言語により特定の順序付けが必要とされない限り、再配置を包含することが理解されるべきである。例えば、順次的に説明されたオペレーションが、いくつかの場合、再配置され、あるいは同時に実行されてもよい。さらに、簡素化のため、添付された図面は、開示される事物及び方法が他の事物及び方法と関連して使用できる様々な方法を示さないことがある。さらに、本説明は時に、「作成する」、「生成する」、「表示する」、「受信する」、「出す」、「検証する」、「実行する」、及び「開始する」などの用語を使用して、開示される方法を説明する。これら用語は、実行される実際のオペレーションの高水準の説明である。これら用語に対応する実際のオペレーションは、特定の実装に依存して変動することになり、当業者によって容易に認識できる。
本開示の装置又は方法を参照して本明細書に提示されるオペレーションの理論、科学的原理、又は理論的説明は、より良い理解を目的として提供されており、範囲を限定するようには意図されない。別記の請求項における装置及び方法は、こうしたオペレーション理論により説明される仕方で機能する装置及び方法に限定されない。
開示される方法のいずれも、1つ以上のコンピュータ読取可能媒体(例えば、1つ以上の光学媒体ディスク、揮発メモリコンポーネント(DRAM又はSRAMなど)、又は不揮発メモリコンポーネント(ハードドライブなど)などの、コンピュータ読取可能媒体)上に記憶され、かつコンピュータ(例えば、任意の市販のコンピュータであり、スマートフォン、又はコンピューティングハードウェアを含む他のモバイルデバイスが含まれる)上で実行されるコンピュータ実行可能命令として実装できる。開示される手法を実施するコンピュータ実行可能命令のうち任意のもの、並びに開示される実施形態の実施の間に作成及び使用される任意のデータは、1つ以上のコンピュータ読取可能媒体(例えば、コンピュータ読取可能記憶媒体)に記憶できる。コンピュータ実行可能命令は、例えば、専用ソフトウェアアプリケーション、又は、ウェブブラウザ若しくは他のソフトウェアアプリケーション(リモートコンピューティングアプリケーションなど)を介してアクセス若しくはダウンロードされるソフトウェアアプリケーションの、一部であってもよい。こうしたソフトウェアは、例えば、単一のローカルコンピュータ上で(例えば、任意の適切な市販のコンピュータ上で実行するエージェントとして)、又は1つ以上のネットワークコンピュータを用いてネットワーク環境内で(例えば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバネットワーク(クラウドコンピューティングネットワークなど)、又は他のこうしたネットワークを介して)実行できる。
明りょうさのため、ソフトウェアベースの実装のうち特定の選択された態様のみが説明される。当分野において周知である他の詳細は省略される。例えば、開示されるテクノロジーはいかなる特定のコンピュータ言語又はプログラムにも限定されないことが理解されるべきである。例えば、開示されるテクノロジーは、C、C++、Java(登録商標)、又は任意の他の適切なプログラミング言語で書かれたソフトウェアにより実装できる。同様に、開示されるテクノロジーは、任意の特定のコンピュータ又はハードウェアのタイプに限定されない。適切なコンピュータ及びハードウェアの特定のタイプは周知であり、本開示において詳細に説明される必要はない。
さらに、ソフトウェアベースの実施形態のうち任意のもの(例えば、開示される方法のうち任意のものをコンピュータに実行させるコンピュータ実行可能命令を含む)が、適切な通信手段を通してアップロードされ、ダウンロードされ、あるいはリモートからアクセスされてもよい。こうした適切な通信手段には、例えば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル(ファイバ光ケーブルを含む)、磁気通信、電磁通信(RF、マイクロ波、及び赤外線通信を含む)、電子通信、又は他のこうした通信手段が含まれる。
II.開示技術への導入
スーパースカラアウトオブオーダアーキテクチャは、レジスタをリネームし、データフロー順序で命令をスケジュールし、誤投機(miss-speculation)の後にクリーンアップし、正確な例外のためにインオーダで結果をリタイアさせる(retire)ために、相当な回路リソースを採用している。これは、高価なエネルギー消費回路、例えば、深い多ポートのレジスタファイル、ウェークアップをスケジュールするデータフロー命令のための多ポートのコンテンツアクセシブルメモリ(CAM)、並びに多ワイドバスマルチプレクサ及びバイパスネットワークなどを含み、これらのすべてがリソースを多量に要する。例えば、マルチリードマルチライトRAMのFPGAベースの実装は、複製、マルチサイクルオペレーション、クロック二重化、バンクインターリービング、ライブ値テーブル、及び他の高価な手法の混合を典型的に必要とする。
スーパースカラアウトオブオーダアーキテクチャは、レジスタをリネームし、データフロー順序で命令をスケジュールし、誤投機(miss-speculation)の後にクリーンアップし、正確な例外のためにインオーダで結果をリタイアさせる(retire)ために、相当な回路リソースを採用している。これは、高価なエネルギー消費回路、例えば、深い多ポートのレジスタファイル、ウェークアップをスケジュールするデータフロー命令のための多ポートのコンテンツアクセシブルメモリ(CAM)、並びに多ワイドバスマルチプレクサ及びバイパスネットワークなどを含み、これらのすべてがリソースを多量に要する。例えば、マルチリードマルチライトRAMのFPGAベースの実装は、複製、マルチサイクルオペレーション、クロック二重化、バンクインターリービング、ライブ値テーブル、及び他の高価な手法の混合を典型的に必要とする。
開示されるテクノロジーは、プロセッサハードウェア及び関連づけられたソフトウェアの双方における相当な複雑さとオーバーヘッドとを回避すると同時に、高い命令レベル並列性(ILP)、アウトオブオーダ(OoO)、スーパースカラ実行を含む手法の適用を通してエネルギー効率及び/又は性能強化を実現することができる。開示されるテクノロジーのいくつかの例において、複数のプロセッサコアを含むブロックベースプロセッサ(block-based processor)が、面積効率及びエネルギー効率の良い高ILP実行のために設計されたエクスプリシットデータグラフエグゼキューション(Explicit Data Graph Execution)(EDGE) ISAを使用する。いくつかの例において、EDGEアーキテクチャ及び関連コンパイラの使用は、レジスタリネーミング、CAM、及び複雑さの多くを巧みに解決する。いくつかの例において、ブロックベースプロセッサのそれぞれのコアは、繰り返し実行される可能性があるフェッチ及びデコードされた命令を記憶し、あるいはキャッシュすることができ、フェッチ及びデコードされた命令は、低減させた電力及び/又は増大させた性能を潜在的に達成するために再使用できる。
開示されるテクノロジーの特定の例において、EDGE ISAは、C及びC++などのメインストリームプログラミング言語をサポートすると同時に、レジスタリネーミング、データフロー解析、誤投機リカバリ、及びインオーダリタイアメントを含む1つ以上の複雑なアーキテクチャ特徴の必要を潜在的に除外することができる。開示されるテクノロジーの特定の例において、ブロックベースプロセッサは、2つ以上の命令のうち複数をアトミックブロックとして実行する。ブロックベース命令が、プログラムデータフロー及び/又は命令フローのセマンティクスをより明示的な形で表現するために使用され、向上させたコンパイラ及びプロセッサ性能を可能にすることができる。開示されるテクノロジーの特定の例において、EDGE ISAは、不適当な制御フロー命令の検出を向上させるために使用できるプログラム制御フローに関する情報を含み、これにより、性能を増大させ、メモリリソースを節減し、かつ/あるいはエネルギーを節減する。
開示されるテクノロジーのいくつかの例において、命令ブロック内に編成される命令は、アトミックにフェッチされ、実行され、コミットされる。ブロック内部の命令はデータフロー順序で実行され、このことはレジスタリネーミングを使用することを低減させ、あるいは除外し、電力効率の良いOoO実行を提供する。コンパイラは、ISAを通したデータ依存関係を明示的にエンコードするために使用され、実行時に依存関係を再発見することでプロセッサコア制御論理に負担をかけることを低減させ、あるいは除外することができる。プレディケートされた実行を用いて、ブロック内の分岐はデータフロー命令に変換されることができ、メモリ依存関係以外の依存関係は直接のデータ依存関係に限定されることができる。開示されるターゲット形式エンコーディング手法は、ブロック内の命令がそのオペランドをオペランドバッファを介して直接通信することを可能にし、電力を大量消費するマルチポートの物理レジスタファイルに対するアクセスを低減させる。いくつかの例において、後の命令ブロックの命令は、より早期の命令ブロックの命令がコミットされる前に非投機的に実行できる。
命令ブロック間で、命令は、メモリ及びレジスタを用いて通信することができる。ゆえに、ハイブリッドなデータフロー実行モデルを利用することにより、EDGEアーキテクチャは、必要不可欠なプログラミング言語及び順次のメモリセマンティクスを依然としてサポートし、しかし望ましくはさらに、インオーダの電力効率及び複雑さに近い状態でアウトオブオーダ実行の恩恵を享受することができる。
関連分野における当業者に容易に理解されるように、開示されるテクノロジーの実装の範囲は、様々な面積、性能、及び電力のトレードオフと共に可能である。
III.例示的なブロックベースプロセッサ
図1は、開示されるテクノロジーのいくつかの例において実装できるブロックベースプロセッサ100のブロック図10である。プロセッサ100は、命令セットアーキテクチャ(ISA)に従って命令のアトミックブロックを実行するように構成され、上記ISAは、レジスタモデル、ブロックベース命令により実行される幾つかの定義されたオペレーション、メモリモデル、割り込み、及び他のアーキテクチャ特徴を含むプロセッサオペレーションの幾つかの態様を説明する。ブロックベースプロセッサは、プロセッサコア111を含む複数の処理コア110を含む。
図1は、開示されるテクノロジーのいくつかの例において実装できるブロックベースプロセッサ100のブロック図10である。プロセッサ100は、命令セットアーキテクチャ(ISA)に従って命令のアトミックブロックを実行するように構成され、上記ISAは、レジスタモデル、ブロックベース命令により実行される幾つかの定義されたオペレーション、メモリモデル、割り込み、及び他のアーキテクチャ特徴を含むプロセッサオペレーションの幾つかの態様を説明する。ブロックベースプロセッサは、プロセッサコア111を含む複数の処理コア110を含む。
図1に示されるように、プロセッサコアは、コアインターコネクト120を介して互いに接続される。コアインターコネクト120は、コア110の個々のコアとメモリインターフェース140と入力/出力(I/O)インターフェース145とにおけるデータ及び制御信号を搬送する。コアインターコネクト120は、電気的、光学的、磁気的、又は他の適切な通信テクノロジーを用いて信号を送信し、受信することができ、特定の所望される構成に依存して、幾つかの異なるトポロジに従って配置された通信接続を提供することができる。例えば、コアインターコネクト120は、クロスバー、バス、ポイントツーポイントバス、又は他の適切なトポロジを有することができる。いくつかの例において、コア110のうち任意の1つが、他のコアのうち任意のものに接続されてもよく、他の例において、いくつかのコアが他のコアのサブセットにのみ接続される。例えば、各コアは、最も近い4、8、又は20の近隣コアにのみ接続されてもよい。コアインターコネクト120が使用されて、コアへの及びコアからの入力/出力データを送信し、さらに、コアへの及びコアからの制御信号及び他の情報信号を送信することができる。例えば、コア110の各々は、それぞれのコアの各々により現在実行されている命令の実行ステータスを示すセマフォを受信し、送信することができる。いくつかの例において、コアインターコネクト120は、コア110とメモリシステムとを接続するワイヤとして実装され、他の例において、コアインターコネクトは、インターコネクトワイヤ上でデータ信号を多重化する回路、アクティブ信号ドライバ及びリピータを含むスイッチ及び/又はルーティングコンポーネント、又は他の適切な回路を含むことができる。開示されるテクノロジーのいくつかの例において、プロセッサ100内で、及びプロセッサ100へ/から送信される信号は、フルスイングの電気デジタル信号に限定されず、プロセッサは、差動信号、パルス信号、又はデータ及び制御信号を送信する他の適切な信号を含むように構成されてもよい。
図1の例において、プロセッサのメモリインターフェース140は、さらなるメモリ、例えばプロセッサ100以外の別の集積回路上に位置するメモリに接続するために使用される、インターフェース論理を含む。図1に示されるように、外部のメモリシステム150が、L2キャッシュ152及びメインメモリ155を含む。いくつかの例において、L2キャッシュはスタティックRAM(SRAM)を用いて実装でき、メインメモリ155はダイナミックRAM(DRAM)を用いて実装できる。いくつかの例において、メモリシステム150は、プロセッサ100の他のコンポーネントと同じ集積回路上に含まれる。いくつかの例において、メモリインターフェース140は、レジスタファイル及び/又はプロセッサ100を使用することなくメモリ内のデータのブロックの転送を可能にするダイレクトメモリアクセス(DMA)コントローラを含む。いくつかの例において、メモリインターフェースは、仮想メモリの割り振りを管理し、利用可能なメインメモリ155を拡張する。
I/Oインターフェース145は、他のコンポーネントに対する入力及び出力信号、例えば、ハードウェア割り込み、システム制御信号、ペリフェラルインターフェース、コプロセッサ制御及び/又はデータ信号(例えば、グラフィックス処理ユニット、浮動小数点コプロセッサ、物理処理ユニット、デジタルシグナルプロセッサ、又は他のコプロセシングコンポーネントのための信号)、クロック信号、セマフォ、又は他の適切なI/O信号などを受信及び送信する回路を含む。I/O信号は、同期的であってもよく、あるいは非同期的であってもよい。いくつかの例において、I/Oインターフェースのすべて又は一部が、メモリインターフェース140と関連してメモリマップドI/O手法を用いて実装される。
ブロックベースプロセッサ100は、制御ユニット160をさらに含むことができる。制御ユニット160は、プロセッサ100のオペレーションを監督する。制御ユニット160により実行できるオペレーションには、命令処理を実行するためのコアの割り振り及び割り振り解除(de-allocation)と、コア、レジスタファイル、メモリインターフェース140、及び/又はI/Oインターフェース145のうち任意のものの間における入力データ及び出力データの制御と、実行フローの修正と、分岐命令のターゲット位置、命令ヘッダ、及び制御フロー内の他の変更を検証することとを含むことができる。制御ユニット160は、ハードウェア割り込みをさらに処理し、特別なシステムレジスタ、例えば1つ以上のレジスタファイルに記憶されたプログラムカウンタの、読み出し及び書き込みを制御することができる。開示されるテクノロジーのいくつかの例において、制御ユニット160は、処理コア110のうち1つ以上を用いて少なくとも部分的に実装され、他の例において、制御ユニット160は、非ブロックベース処理コア(例えば、メモリに結合された汎用目的RISC処理コア)を用いて実装される。いくつかの例において、制御ユニット160は、下記のうち1つ以上を用いて少なくとも部分的に実装される:ハードワイヤード有限状態マシン、プログラマブルマイクロコード、プログラマブルゲートアレイ、又は他の適切な制御回路。別の例において、制御ユニット機能性は、コア110のうち1つ以上により実行されてもよい。
制御ユニット160は、命令ブロックをプロセッサコア110に割り振るために使用されるスケジューラを含む。本明細書において用いられるとき、スケジューラ割り振りは、命令ブロックマッピングを開始すること、命令ブロックをフェッチすること、デコードすること、実行すること、コミットすること、アボートすること、アイドル状態にすること、及びリフレッシュすることを含む、命令ブロックのオペレーションを指令することを参照する。プロセッサコア110は、命令ブロックマッピングの間、命令ブロックに割り当てられる。列挙された命令オペレーションの段階は例示目的のものであり、開示されるテクノロジーのいくつかの例において、特定のオペレーションが組み合わせられ、省略され、複数のオペレーションに分離されてもよく、あるいはさらなるオペレーションが追加されてもよい。
ブロックベースプロセッサ100は、クロック生成器170をさらに含み、クロック生成器170は、1つ以上のクロック信号をプロセッサ内の様々なコンポーネント(例えば、コア110、インターコネクト120、メモリインターフェース140、及びI/Oインターフェース145)に分配する。開示されるテクノロジーのいくつかの例において、コンポーネントのすべてが共通クロックを共有し、他の例において、異なるコンポーネントが異なるクロックを、例えば、異なるクロック周波数を有するクロック信号を使用する。いくつかの例において、クロックの一部がゲート制御されて、プロセッサコンポーネントのうちいくつかが使用されていないときの電力節減を可能にする。いくつかの例において、クロック信号は、固定の、一定の周波数及びデューティサイクルの信号を生成する位相ロックループ(PLL)を用いて生成される。クロック信号を受信する回路は、単一のエッジ(例えば、立ち上がりエッジ)上でトリガされることができ、他の例において、受信回路の少なくともいくつかが、立ち上がり及び立ち下がりクロックエッジによってトリガされる。いくつかの例において、クロック信号は、光学的に又は無線で送信されてもよい。
IV.例示的なブロックベースプロセッサコア
図2は、開示されるテクノロジーの特定の例で使用できるブロックベースプロセッサ100の例示的なマイクロアーキテクチャ、特に、ブロックベースプロセッサコアのうち1つのインスタンスをさらに詳細化したブロック図200である。説明の容易さのために、例示的なブロックベースプロセッサコアは、5つの段階、すなわち、命令フェッチ(IF)、デコード(DC)、オペランドフェッチ、実行(EX)、及びメモリ/データアクセス(LS)を用いて例示される。しかしながら、例示されるマイクロアーキテクチャに対する修正、例えば、段階を追加すること/削除すること、オペレーションを実行するユニットを追加すること/削除すること、及び他の実装詳細などが、ブロックベースプロセッサの特定の用途に適するように修正されてもよいことを当業者は容易に理解するであろう。
図2は、開示されるテクノロジーの特定の例で使用できるブロックベースプロセッサ100の例示的なマイクロアーキテクチャ、特に、ブロックベースプロセッサコアのうち1つのインスタンスをさらに詳細化したブロック図200である。説明の容易さのために、例示的なブロックベースプロセッサコアは、5つの段階、すなわち、命令フェッチ(IF)、デコード(DC)、オペランドフェッチ、実行(EX)、及びメモリ/データアクセス(LS)を用いて例示される。しかしながら、例示されるマイクロアーキテクチャに対する修正、例えば、段階を追加すること/削除すること、オペレーションを実行するユニットを追加すること/削除すること、及び他の実装詳細などが、ブロックベースプロセッサの特定の用途に適するように修正されてもよいことを当業者は容易に理解するであろう。
図2に示されるように、プロセッサコア111は、制御ユニット205を含み、制御ユニット205は、制御信号を生成してコアオペレーションを統制し、命令スケジューラ206を用いてコア内の命令のフローをスケジュールする。制御ユニット205及び/又は命令スケジューラ206により実行できるオペレーションには、命令処理を実行するためのコアの割り振り及び割り振り解除と、コア、レジスタファイル、メモリインターフェース140、及び/又はI/Oインターフェース145のうち任意のものの間における入力データ及び出力データの制御とを含むことができる。制御ユニット205は、ハードウェア割り込みをさらに処理し、特別なシステムレジスタ、例えば1つ以上のレジスタファイルに記憶されたプログラムカウンタの、読み出し及び書き込みを制御することができる。開示されるテクノロジーの他の例において、制御ユニット205及び/又は命令スケジューラ206は、非ブロックベース処理コア(例えば、メモリに結合された汎用目的RISC処理コア)を用いて実装される。いくつかの例において、制御ユニット205及び/又は命令スケジューラ206は、下記のうち1つ以上を用いて少なくとも部分的に実装される:ハードワイヤード有限状態マシン、プログラマブルマイクロコード、プログラマブルゲートアレイ、又は他の適切な制御回路。
例示的な処理コア111は、2つの命令ウィンドウ210及び211を含み、これらの各々は、命令ブロックを実行するように構成できる。開示されるテクノロジーのいくつかの例において、命令ブロックは、命令ブロックヘッダと複数の1つ以上の命令とを含むブロックベースプロセッサ命令のアトミックな集合である。以下でさらに論じられるように、命令ブロックヘッダは、命令ブロック内の複数の命令のうち1つ以上についてのセマンティクスをさらに定義するために使用できる情報を含む。使用される特定のISA及びプロセッサハードウェアに依存して、命令ブロックヘッダは、さらに、命令の実行の間に、及び、例えば命令及び/又はデータの早期フェッチング、向上させた分岐予測、投機的実行、向上させたエネルギー効率、及び向上させたコードコンパクト性を可能にすることによって命令ブロックを実行する性能を向上させるために、使用されてもよい。他の例において、異なる数の命令ウィンドウが可能であり、例えば、1つ、4つ、8つ、又は他の数の命令ウィンドウなどである。
命令ウィンドウ210及び211の各々は、インターコネクトバス及び命令キャッシュ227に接続する入力ポート220、221、及び222のうち1つ以上から命令及びデータを受信することができ、同様に、上記インターコネクトバス及び命令キャッシュ227は、命令デコーダ228及び229に接続される。さらなる制御信号が、さらなる入力ポート225上でさらに受信されてもよい。命令デコーダ228及び229の各々は、命令ブロックの命令ヘッダ及び/又は命令をデコードし、デコードされた命令を、各それぞれの命令ウィンドウ210及び211に位置するメモリストア215及び216内に記憶する。
プロセッサコア111は、L1(レベル1)キャッシュ235に結合されたレジスタファイル230をさらに含む。レジスタファイル230は、ブロックベースプロセッサアーキテクチャ内に定義されたレジスタのデータを記憶し、1つ以上の読み出しポート及び1つ以上の書き込みポートを有することができる。例えば、レジスタファイルは、レジスタファイル内の個々のレジスタからデータを読み出すための複数の読み出しポートを有するだけでなく、レジスタファイルにデータを記憶するための2つ以上の書き込みポートも含んでもよい。いくつかの例において、単一の命令ウィンドウ(例えば、命令ウィンドウ210)が、一時にレジスタファイルの1つのポートにのみアクセスすることができ、他の例において、命令ウィンドウ210は、1つの読み出しポート及び1つの書き込みポートにアクセスすることができ、あるいは2つ以上の読み出しポート及び/又は書き込みポートに同時にアクセスすることができる。いくつかの例において、レジスタファイル230は64個のレジスタを含み、該レジスタの各々はデータの32ビットのワードを保持することができる。(本出願は、別段規定されない限り、データの32ビットをワードとして参照する。)いくつかの例において、レジスタファイル230内のレジスタのいくつかが特別な目的に対して割り振られてもよい。例えば、レジスタのいくつかがシステムレジスタとして専用されてもよく、上記システムレジスタの例には、定数値(例えば、すべてゼロのワード)、実行されているプログラムスレッドの現在のアドレスを示すプログラムカウンタ(PC)、物理コア番号、論理コア番号、コア割り当てトポロジ、コア制御フラグ、プロセッサトポロジ、又は他の適切な専用の目的を記憶するレジスタが含まれる。いくつかの例において、複数のプログラムカウンタレジスタが存在し、1つ又は各々のプログラムカウンタが、1つ以上のプロセッサコア及び/又はプロセッサにわたる複数の実行スレッドの同時実行を可能にする。いくつかの例において、プログラムカウンタは、レジスタファイル内のレジスタとしての代わりに、指定されたメモリ位置として実装される。いくつかの例において、システムレジスタの使用は、オペレーティングシステム又は他の監督コンピュータ命令によって制限されてもよい。いくつかの例において、レジスタファイル230は、フリップフロップのアレイとして実装され、他の例において、レジスタファイルは、ラッチ、SRAM、又は他の形式のメモリストレージを用いて実装されてもよい。所与のプロセッサ、例えばプロセッサ100のISA仕様は、レジスタファイル230内のレジスタが如何にして定義され、使用されるかを規定する。
いくつかの例において、プロセッサ100は、複数のプロセッサコアにより共有されるグローバルレジスタファイルを含む。いくつかの例において、プロセッサコアに関連づけられた個々のレジスタファイルは、プロセッサISA及び構成に依存して、静的に又は動的に、より大きいファイルを形成するように組み合わせられてもよい。
図2に示されるように、命令ウィンドウ210のメモリストア215は、幾つかのデコードされた命令241、左オペランド(LOP)バッファ242、右オペランド(ROP)バッファ243、及び命令スコアボード245を含む。開示されるテクノロジーのいくつかの例において、命令ブロックの各命令は、図2に示されるように、デコードされた命令と左及び右オペランドとスコアボードデータとの行へ分解される。デコードされた命令241は、ビットレベル制御信号として記憶された、部分的に又はフルにデコードされたバージョンの命令を含むことができる。オペランドバッファ242及び243は、オペランド(例えば、レジスタファイル230から受信したレジスタ値、メモリから受信したデータ、命令内に符号化された即値オペランド、より早期に発行された命令により計算されたオペランド、又は他のオペランド値)を、そのそれぞれのデコードされた命令が実行するのにレディになる(ready)まで記憶する。命令オペランドは、レジスタファイルでなくオペランドバッファ242及び243から読み出される。
第2の命令ウィンドウ211のメモリストア216は、メモリストア215と同様の命令情報(デコードされた命令、オペランド、及びスコアボード)を記憶するが、簡素化のために図2中に示されない。命令ブロックは、ISA制約を受けて、及び制御ユニット205により指令されるように、第1の命令ウィンドウに関して同時に又は順次的に第2の命令ウィンドウ211により実行できる。
開示されるテクノロジーのいくつかの例において、フロントエンドパイプライン段階のIF及びDCは、バックエンドパイプライン段階(IS、EX、LS)から切り離されて動作することができる。一実施形態において、制御ユニットは、クロックサイクルにつき2つの命令を命令ウィンドウ210及び211の各々へフェッチし、デコードすることができる。別の実施形態において、制御ユニットは、クロックサイクルにつき1つ、4つ、又は別の数の命令を対応する数の命令ウィンドウへフェッチし、デコードしてもよい。制御ユニット205は、各々のデコードされた命令の入力(例えば、各それぞれの命令のプレディケート(predicate(s))及びオペランド)のレディ状態をスコアボード245を用いて監視するように命令ウィンドウデータフロースケジューリング論理を提供する。特定のデコードされた命令のための入力のすべてがレディになったとき、この命令は、発行するのにレディである。制御論理205は、次いで、各サイクルで1つ以上の次の命令(例えば、最も低く番号づけられたレディ命令)の実行を開始し、そのデコードされた命令及び入力オペランドが、実行のために機能ユニット260のうち1つ以上に送信される。デコードされた命令は、幾つかのレディイベントをさらにエンコードしていてもよい。制御論理205内のスケジューラは、これら及び/又は他のソースからのイベントを受け入れ、ウィンドウ内の他の命令のレディ状態を更新する。こうして、実行は進み、プロセッサコア111のレディのゼロ入力命令、ゼロ入力命令によりターゲットにされた命令などで始まる。
デコードされた命令241は、これらが命令ウィンドウ210のメモリストア215内に配置されるのと同じ順序で実行する必要はない。むしろ、デコードされた命令の依存関係を追跡するために命令スコアボード245が使用され、依存関係が満たされるとき、関連づけられた個々のデコードされた命令が実行のためにスケジュールされる。例えば、依存関係がそれぞれの命令について満たされているとき、それぞれの命令に対する参照がレディキューへプッシュされてもよく、命令が、レディキューから先入れ先出し(FIFO)順序でスケジュールされてもよい。スコアボード245に記憶された情報には、これらに限られないが、関連づけられた命令の実行のプレディケート(例えば、プレディケートビットが計算されることを命令が待機しているかどうか、及び、プレディケートビットが真又は偽である場合に命令が実行されるかどうかなど)、命令に対するオペランドの可用性、又は、関連づけられた個々の命令を実行する前に必要とされる他の前提条件を含むことができる。
一実施形態において、スコアボード245は、命令デコーダ231により初期化されるデコードされたレディ状態と、命令の実行の間に制御ユニット205により初期化されるアクティブレディ状態とを含むことができる。例えば、デコードされたレディ状態は、それぞれの命令がデコードされたか、おそらくはブロードキャストチャネルを介してプレディケート及び/又はいくつかのオペランドを待つか、あるいは即座に発行するのにレディであるかどうかをエンコードしていてもよい。デコードされたアクティブ状態は、それぞれの命令がプレディケート及び/又はいくつかのオペランドを待つか、発行するのにレディであるか、あるいはすでに発行されたかどうかをエンコードしていてもよい。デコードされたレディ状態は、ブロックリセット又はブロックリフレッシュでクリアされることができる。新しい命令ブロックに分岐すると、デコードされたレディ状態及びデコードされたアクティブ状態はクリアされる(ブロック又はコアリセット)。しかしながら、命令ブロックがコア上で再実行されるとき、例えば、命令ブロックが分岐してそれ自体に戻るとき(ブロックリフレッシュ)など、アクティブレディ状態のみがクリアされる。ブロックリフレッシュは、即座に(命令ブロックがそれ自体に分岐するとき)、あるいは幾つかの他の介在命令ブロックを実行した後、発生する可能性がある。ゆえに、命令ブロックのデコードされたレディ状態は、ブロックの命令を再フェッチ及びデコードすることが必要でなくなるように保存されることができる。したがって、ブロックリフレッシュが使用されて、ループ及び他の繰り返しプログラム構造における時間及びエネルギーを節減することができる。
各命令ウィンドウ内に記憶される命令の数は、命令ブロック内の命令の数に一般に対応する。いくつかの例において、命令ブロック内の命令の数は、32、64、128、1024、又は別の命令数であってもよい。開示されるテクノロジーのいくつかの例において、命令ブロックは、一プロセッサコア内の複数の命令ウィンドウにわたり割り振られる。いくつかの例において、命令ウィンドウ210、211は、複数の命令ブロックが単一のプロセッサコア上で実行され得るように論理的に区分されてもよい。例えば、1つ、2つ、4つ、又は別の数の命令ブロックが1つのコア上で実行されてもよい。それぞれの命令ブロックは、互いに対して同時に又は順次的に実行されてもよい。
命令は、プロセッサコア111内に位置する制御ユニット205を用いて割り振られ、スケジュールされることができる。制御ユニット205は、メモリからの命令のフェッチング、命令のデコーディング、ひとたび命令がそれぞれの命令ウィンドウにロードされたときの命令の実行、プロセッサコア111への/からのデータフロー、並びにプロセッサコアにより入力及び出力される制御信号を調整する。例えば、制御ユニット205は、上記で説明されたように、命令をスケジュールするのに使用されるレディキューを含むことができる。各それぞれの命令ウィンドウ210及び211に位置するメモリストア215及び216に記憶された命令は、アトミックに実行されてもよい。ゆえに、実行された命令により影響された可視のアーキテクチャ状態(例えば、レジスタファイル230及びメモリなど)に対する更新は、命令がコミットされるまでコア200内にローカルにバッファリングされてもよい。
制御ユニット205は、いつ命令がコミットされるのにレディになるかを決定し、コミット論理を配列し、コミット信号を発行することができる。例えば、命令ブロックのコミットフェーズは、すべてのレジスタ書き込みがバッファリングされ、メモリに対するすべての書き込みがバッファリングされ、かつ分岐ターゲットが計算されたときに、始まってもよい。命令ブロックは、可視のアーキテクチャ状態に対する更新が完了したとき、コミットされてもよい。例えば、命令ブロックは、レジスタ書き込みがレジスタファイルに対して書き込まれ、ストアがロード/ストアユニット又はメモリコントローラに送信され、次の命令ブロックのターゲットアドレスが生成され、かつコミット信号が生成されたときに、コミットされてもよい。制御ユニット205はさらに、少なくとも部分的に、それぞれの命令ウィンドウの各々に対する機能ユニット260の割り振りを制御する。
制御ユニット205は、実行されるべき次の命令ブロックを指し示すターゲットアドレスを出力することができる。ターゲットアドレスは、コミット信号を発行することと同期してか、又はコミット信号を発行する前かのいずれかで、出力されることができる。例えば、ターゲットアドレスは、コミット信号を発行する前にコア200の外部に(例えば、図1の制御ユニット160になど)通信されてもよく、そのため、現在実行している命令ブロックがコミットされる前に、次の命令ブロックの命令の非投機的実行が開始されることができる。有効な信号がターゲットアドレスに関連づけられて、ターゲットアドレスがいつ有効になるかを示すことができる。
図2に示されるように、幾つかの実行パイプラインレジスタ255を有する第1のルータ250が、命令ウィンドウ210及び211のいずれかからのデータを機能ユニット260の1つ以上に送信するために使用され、機能ユニット260には、これらに限られないが、整数ALU(算術論理ユニット)(例えば、整数ALU264及び265)、浮動小数点ユニット(例えば、浮動小数点ALU267)、シフト/ローテート論理(例えば、バレルシフタ268)、又は、グラフィックス機能、物理機能、及び他の数学オペレーションを含み得る他の適切な実行ユニットを含むことができる。機能ユニット260からのデータは、次いで、実行されている特定の命令の要件に依存して、第2のルータ270を通して出力290、291、及び292に対してルーティングされてもよく、オペランドバッファ(例えば、LOPバッファ242及び/又はROPバッファ243)にルーティングされて戻されてもよく、あるいは、別の機能ユニットに対してフィードバックされてもよい。第2のルータ270は、メモリ命令を発行するために使用できるロード/ストアキュー275と、コアに入力され又はコアからメモリに出力されているデータを記憶するデータキャッシュ277と、ロード/ストアパイプラインレジスタ278とを含むことができる。
コアは、制御出力295をさらに含み、制御出力295は、例えば、命令ウィンドウ215又は216のうち1つ以上のための命令のうちすべての実行がいつ完了したかを示すために使用される。命令ブロックの実行が完了したとき、命令ブロックは「コミットされた」として指定され、次に、制御出力295からの信号をブロックベースプロセッサ100内の他のコアが及び/又は制御ユニットが使用して、他の命令ブロックのスケジューリング、フェッチング、及び実行を開始することができる。第1のルータ250及び第2のルータ270の双方は、命令に対してデータを(例えば、命令ブロック内の他の命令のためのオペランドとして)返信することができる。
当業者に容易に理解されるように、個々のコア200内のコンポーネントは図2に示されるものに限られず、特定用途の要件に従って変動してもよい。例えば、ブロックベースプロセッサの特定のターゲットにされた用途に依存して、コアはより少ない又はより多い命令ウィンドウを有してもよく、単一の命令デコーダが2つ以上の命令ウィンドウにより共有されてもよく、使用される機能ユニットの数及びタイプが変動してもよい。命令コアでのリソースを選択すること及び割り振ることに適用される他の考慮には、性能要件、エネルギー使用要件、集積回路ダイ、処理テクノロジー、及び/又はコストが含まれる。
プロセッサコア110の命令ウィンドウ(例えば、命令ウィンドウ210)及び制御論理205内のリソースの設計及び割り振りによって、プロセッサ性能においてトレードオフがなされ得ることが当業者に容易に明らかになるであろう。面積、クロック周期、能力、及び限定が、個々のコア110の実現性能とブロックベースプロセッサ100のスループットとを実質的に決定する。
命令スケジューラ206は、多様な機能性を有することができる。特定のより高い性能の例において、命令スケジューラは、高度に同時的である。例えば、各サイクルで、デコーダは、命令のデコードされたレディ状態とデコードされた命令とを1つ以上の命令ウィンドウに書き込み、発行すべき次の命令を選択し、応答において、バックエンドが、レディイベント ‐ 特定の命令の入力スロット(プレディケート、左オペランド、右オペランド等)をターゲットにしたターゲットレディイベントか、又はすべての命令をターゲットにしたブロードキャストレディイベントかのいずれかを、送信する。命令ごとのレディ状態ビットが、デコードされたレディ状態と共に使用されて、命令が発行するのにレディであると決定することができる。
いくつかの例において、命令スケジューラ206は、開示されるテクノロジーに従って命令ブロックの実行をスケジュールするために使用される情報を示すデータを記憶するストレージ(例えば、先入れ先出し(FIFO)キュー、コンテンツアドレッサブルメモリ(CAM))を用いて実装される。例えば、命令依存関係、制御の移転、投機、分岐予測、及び/又はデータロード及びストアに関するデータが、命令ブロックをプロセッサコアにマッピングすることにおける決定を容易にするように、ストレージ内に配置される。例えば、命令ブロック依存関係は、FIFO又はCAMに記憶されたタグに関連づけられ、命令ブロックを1つ以上のプロセッサコアにマッピングするために使用される選択論理によって後にアクセスされてもよい。いくつかの例において、命令スケジューラ206は、メモリに結合された汎用目的プロセッサを用いて実装され、上記メモリは、命令ブロックをスケジュールするためのデータを記憶するように構成される。いくつかの例において、命令スケジューラ206は、上記メモリに結合された特別目的プロセッサを用いて又はブロックベースプロセッサコアを用いて実装される。いくつかの例において、命令スケジューラ206は、上記メモリに結合された有限状態マシンとして実装される。いくつかの例において、プロセッサ(例えば、汎用目的プロセッサ又はブロックベースプロセッサコア)上で実行するオペレーティングシステムが、優先順位、予測、及び、命令スケジューラ206で命令ブロックを少なくとも部分的にスケジュールするために使用できる他のデータを生成する。当業者に容易に明らかになるように、集積回路、プログラマブル論理、又は他の適切な論理において実装された他の回路構造が、命令スケジューラ206のハードウェアを実装するために使用されてもよい。
いくつかの場合、スケジューラ206は、まだデコードされておらず、かつ発行されたレディ命令の再発行をさらに抑止しなければならないターゲット命令の、イベントを受け入れる。スケジューラ206は、スコアボード245を介して、それぞれの命令のレディ状態を更新し、追跡することができる。いくつかの例において、命令は、プレディケートされなくて(non-predicated)もよく、あるいは(真又は偽の条件に基づいて)プレディケートされて(predicated)もよい。プレディケートされた命令は、それが別の命令のプレディケート結果によってターゲットにされ、かつその結果がプレディケート条件にマッチするまで、レディ状態にならない。関連づけられたプレディケートがマッチしない場合、命令は発行しない。いくつかの例において、プレディケートされた命令が、投機的に発行され、実行されてもよい。いくつかの例において、プロセッサは、投機的に発行及び実行された命令が正しく投機されたことを後に確認してもよい。いくつかの例において、誤投機された(misspeculated)発行された命令とその出力を消費するブロック内の命令の特定の推移閉包(transitive closure)とが再実行されてもよく、あるいは、誤投機された副作用が無効にされてもよい。いくつかの例において、誤投機された命令の発見は、完全なロールバックと命令のブロック全体の再実行とにつながる。
V.命令ブロックの例示的なストリーム
次に、図3の略図300を参照し、幾つかの可変長命令ブロック311〜315(A〜E)を含むブロックベース命令のストリームの部分310が例示される。命令のストリームは、ユーザアプリケーション、システムサービス、又は任意の他の適切な使用法を実装するために使用されてよい。図3に示される例において、各命令ブロックは命令ヘッダで始まり、命令ヘッダの後に可変数の命令が続く。例えば、命令ブロック311は、ヘッダ320と20個の命令321とを含む。例示される特定の命令ヘッダ320は、幾つかのデータフィールドを含み、該データフィールドは、命令ブロック内の命令の実行を部分的に制御し、さらに、例えば分岐予測、投機的実行、遅延評価、及び/又は他の手法を含む向上させた性能改良手法を可能にする。命令ヘッダ320は、該ヘッダが命令ヘッダであって命令でないことを示すIDビットをさらに含む。命令ヘッダ320は、命令ブロックサイズの指標をさらに含む。命令ブロックサイズは、1よりもより大きい命令のチャンクにおけるもの、例えば、命令ブロック内に含まれる4命令のチャンクの数であってもよい。換言すると、ブロックのサイズは、命令ブロックサイズを規定することに対して割り振られたヘッダ空間を圧縮するように4ビット分シフトされる。こうして、0のサイズ値は、ブロックヘッダの後に4つの命令が続く最小サイズの命令ブロックを示す。いくつかの例において、命令ブロックは、バイト数として、ワード数として、nワードチャンクの数として、アドレスとして、アドレスオフセットとして、又は命令ブロックのサイズを説明するための他の適切な表現を用いて表現される。いくつかの例において、命令ブロックサイズは、命令ブロックヘッダ及び/又はフッタ内の終端ビットパターンによって示される。
次に、図3の略図300を参照し、幾つかの可変長命令ブロック311〜315(A〜E)を含むブロックベース命令のストリームの部分310が例示される。命令のストリームは、ユーザアプリケーション、システムサービス、又は任意の他の適切な使用法を実装するために使用されてよい。図3に示される例において、各命令ブロックは命令ヘッダで始まり、命令ヘッダの後に可変数の命令が続く。例えば、命令ブロック311は、ヘッダ320と20個の命令321とを含む。例示される特定の命令ヘッダ320は、幾つかのデータフィールドを含み、該データフィールドは、命令ブロック内の命令の実行を部分的に制御し、さらに、例えば分岐予測、投機的実行、遅延評価、及び/又は他の手法を含む向上させた性能改良手法を可能にする。命令ヘッダ320は、該ヘッダが命令ヘッダであって命令でないことを示すIDビットをさらに含む。命令ヘッダ320は、命令ブロックサイズの指標をさらに含む。命令ブロックサイズは、1よりもより大きい命令のチャンクにおけるもの、例えば、命令ブロック内に含まれる4命令のチャンクの数であってもよい。換言すると、ブロックのサイズは、命令ブロックサイズを規定することに対して割り振られたヘッダ空間を圧縮するように4ビット分シフトされる。こうして、0のサイズ値は、ブロックヘッダの後に4つの命令が続く最小サイズの命令ブロックを示す。いくつかの例において、命令ブロックは、バイト数として、ワード数として、nワードチャンクの数として、アドレスとして、アドレスオフセットとして、又は命令ブロックのサイズを説明するための他の適切な表現を用いて表現される。いくつかの例において、命令ブロックサイズは、命令ブロックヘッダ及び/又はフッタ内の終端ビットパターンによって示される。
命令ブロックヘッダ320は、実行フラグをさらに含むことができ、上記実行フラグは、特別な命令実行要件を示す。例えば、特定の用途に依存して、特定の命令ブロックについて、分岐予測又はメモリ依存予測が抑止されてもよい。
開示されるテクノロジーのいくつかの例において、命令ヘッダ320は、エンコードされたデータが命令ヘッダであることを示す1つ以上の識別ビットを含む。例えば、いくつかのブロックベースプロセッサISAにおいて、最小有効ビット(least significant bit)空間内の単一のIDビットが、有効な命令ブロックの先頭を示すように、2進数値の1に常に設定される。他の例において、異なるビットエンコーディングが識別ビットのために使用されてもよい。いくつかの例において、命令ヘッダ320は、関連づけられた命令ブロックがエンコードされたISAの特定のバージョンを示す情報を含む。
ブロック命令ヘッダは、例えば分岐予測、制御フロー決定、及び/又は不良ジャンプ検出における使用のための、幾つかのブロックエグジットタイプをさらに含むことができる。エグジットタイプ(exit type)は、分岐命令のタイプが何であるかを示すことができ、例えば、メモリ内の次の連続した命令ブロックを指し示す順次分岐命令、オフセットに対して計算されたメモリアドレスにおける別の命令ブロックへの分岐であるオフセット命令、サブルーチンコール、又はサブルーチンリターンである。命令ヘッダ内に分岐エグジットタイプをエンコードすることにより、分岐予測器が、同じ命令ブロック内の分岐命令がフェッチされ、かつ/あるいはデコードされる前に、少なくとも部分的にオペレーションを始めることができる。
命令ブロックヘッダ320は、オペレーションを記憶するために割り当てられたロードストアキュー識別子を識別するストアマスク(store mask)をさらに含む。命令ブロックヘッダは、関連づけられた命令ブロックがいずれのグローバルレジスタに書き込むことになるかを識別する書き込みマスク(write mask)をさらに含むことができる。関連づけられたレジスタファイルは、命令ブロックが完了し得る前に、各エントリに対する書き込みを受信しなければならない。いくつかの例において、ブロックベースプロセッサアーキテクチャは、スカラー命令だけでなくさらに単一命令複数データ(single-instruction multiple-data)(SIMD)命令を含み、単一の命令内でより多数のデータオペランドを用いたオペレーションを可能にすることができる。
VI.例示的なブロック命令ターゲットエンコーディング
図4は、C言語ソースコードの2つの部分410及び415と(アセンブリ言語における)そのそれぞれの命令ブロック420及び425との例を表す略図400であり、ブロックベース命令が如何にしてそのターゲットを明示的にエンコードすることができるかを例示する。高水準のC言語ソースコードは、そのターゲットがブロックベースプロセッサであるコンパイラにより、低水準のアセンブリ言語及びマシンコードに翻訳されることができる。高水準言語は、プログラマがプログラムの機能性に焦点をあてることができるように、下層のコンピュータアーキテクチャの詳細の多くを抽象化することができる。対照的に、マシンコードは、それがコンピュータのハードウェアリソースを用いてターゲットコンピュータ上で実行され得るように、ターゲットコンピュータのISAに従ってプログラムをエンコードする。アセンブリ言語は、マシンコードの、人間により読み取り可能な形式である。
図4は、C言語ソースコードの2つの部分410及び415と(アセンブリ言語における)そのそれぞれの命令ブロック420及び425との例を表す略図400であり、ブロックベース命令が如何にしてそのターゲットを明示的にエンコードすることができるかを例示する。高水準のC言語ソースコードは、そのターゲットがブロックベースプロセッサであるコンパイラにより、低水準のアセンブリ言語及びマシンコードに翻訳されることができる。高水準言語は、プログラマがプログラムの機能性に焦点をあてることができるように、下層のコンピュータアーキテクチャの詳細の多くを抽象化することができる。対照的に、マシンコードは、それがコンピュータのハードウェアリソースを用いてターゲットコンピュータ上で実行され得るように、ターゲットコンピュータのISAに従ってプログラムをエンコードする。アセンブリ言語は、マシンコードの、人間により読み取り可能な形式である。
この例において、最初の2つのREAD命令430及び431は、ADD命令432の右(T[2R])及び左(T[2L])オペランドをそれぞれターゲットにする。例示されるISAにおいて、上記読み出し命令は、グローバルレジスタファイル(例えば、レジスタファイル160)から読み出す唯一の命令である。しかしながら、任意の命令がグローバルレジスタファイルをターゲットにしてよい。ADD命令432が双方のレジスタ読み出しの結果を受信したとき、この命令はレディになり、実行することになる。
TLEI(テスト・レス・ザン・イコール・イミディエート(test-less-than-equal-immediate))命令433がその単一の入力オペランドをADDから受信したとき、この命令はレディになり、実行されることになる。次いで、テストは、ブロードキャストチャネルをリッスンしているすべての命令に対してチャネル1(B[1P])上でブロードキャストされるプレディケートオペランドを作成する。この例において、上記リッスンしている命令は、2つのプレディケートされた分岐命令(BRO_T(真の場合に分岐する)434及びBRO_F(偽の場合に分岐する)435)である。マッチしたプレディケート値を受信する分岐が、始動することになる。
命令ブロック420の依存グラフ440が、命令ノードのアレイ450並びにその対応するオペランドターゲット455及び456としてさらに例示される。これは、ブロック命令420と、対応する命令ウィンドウエントリと、命令により表現される下層のデータフローグラフとの間の対応を例示する。ここで、デコードされた命令READ430及びREAD431は、これらが入力依存関係を有さないので、発行するのにレディである。これらが発行し、実行するとき、レジスタR6及びR7から読み出された値がADD432の右及び左オペランドバッファに書き込まれ、ADD432の右及び左オペランドの「レディ」をマークづける。結果として、ADD432命令はレディになり、ALUに対して発行し、実行し、その和がTLEI433の左オペランドに書き込まれる。
比較として、従来のアウトオブオーダRISC又はCISCプロセッサは、さらなるハードウェアの複雑さ、電力、面積、並びに低減したクロック周波数及び性能を用いて、実行時に依存グラフを動的に構築する。しかしながら、依存グラフはコンパイル時に静的に分かり、EDGEコンパイラがISAを通しての命令間の作成者‐消費者(producer-consumer)関係を直接エンコードし、これらを動的に再発見することからマイクロアーキテクチャを解放することができる。このことは、潜在的に、より簡素なマイクロアーキテクチャを可能にし、面積、電力、並びにブースト周波数及び性能を低減させることができる。
VII.例示的なブロックベース命令フォーマット
図5は、命令ヘッダ510、一般的命令(generic instruction)520、及び分岐命令530のための命令フォーマットの一般化された例を示す略図である。命令ヘッダ又は命令の各々は、ビット数に従ってラベルづけされる。例えば、命令ヘッダ510は、4つの32ビットワードを含み、その最小有効ビット(lsb)(ビット0)から最大でその最大有効ビット(most significant bit)(msb)(ビット127)までラベルづけされる。図示されるように、命令ヘッダは、書き込みマスクフィールド、ストアマスクフィールド、幾つかのエグジットタイプフィールド、幾つかの実行フラグフィールド、命令ブロックサイズフィールド、及び命令ヘッダIDビット(命令ヘッダの最小有効ビット)を含む。
図5は、命令ヘッダ510、一般的命令(generic instruction)520、及び分岐命令530のための命令フォーマットの一般化された例を示す略図である。命令ヘッダ又は命令の各々は、ビット数に従ってラベルづけされる。例えば、命令ヘッダ510は、4つの32ビットワードを含み、その最小有効ビット(lsb)(ビット0)から最大でその最大有効ビット(most significant bit)(msb)(ビット127)までラベルづけされる。図示されるように、命令ヘッダは、書き込みマスクフィールド、ストアマスクフィールド、幾つかのエグジットタイプフィールド、幾つかの実行フラグフィールド、命令ブロックサイズフィールド、及び命令ヘッダIDビット(命令ヘッダの最小有効ビット)を含む。
コンパイラが、命令ヘッダ510のエグジットタイプフィールドを用いて1つ以上の分岐エグジットタイプをエンコードすることができる。分岐エグジットタイプは、次の命令ブロックのアドレスを計算するために、命令ブロックを実行するプロセッサコアにより生成された信号と共に使用されてもよい。例えば、プロセッサコアは、分岐が行われることが分かるとすぐ、分岐識別子及びターゲットアドレスを生成することができる。ターゲットアドレスは、命令ブロックがコミットされる前に生成されることができ、そのため、より早期の命令ブロックがコミットする前に、次の命令ブロックが開始されることができる。一実施形態において、18ビットがエグジットタイプフィールドのために予約されることができ、そのため、1及び6の間で、異なる3ビットのエグジットタイプがヘッダの中にエンコードされることができる。実行時、命令ブロックを実行するプロセッサコアは、6つのエグジットタイプフィールドのうちいずれを使用すべきかを分岐識別子信号を介して示すことができる。分岐識別子に対応するエグジットタイプフィールドとコアからのターゲットアドレスとが使用されて、次の命令ブロックのアドレスを計算することができる。
この実施形態においては、3ビットフィールドの中にエンコードできる6つの分岐エグジットタイプが存在し、分岐エグジットタイプは、ヌル、順次(sequential)、オフセット、間接(indirect)、コール、及びリターンである。分岐エグジットタイプのヌルは、このフィールドに関連づけられた分岐がないことを示すことができる。所与の命令ブロックについて6つのとり得る分岐がエンコードされ得るが、いくつかの命令ブロックが6つより少ない分岐を有してもよい。例えば、特定の命令ブロックが1つの分岐ターゲットだけ有してもよく、ゆえに、第1の分岐エグジットタイプフィールドのみが非ヌルであり、他の5つのフィールドはヌルであることになる。別の例として、特定の命令ブロックが2つの分岐ターゲットを有してもよく、第1の分岐エグジットタイプフィールドは第1のプレディケート結果に対応することができ、第2の分岐エグジットタイプフィールドは第2のプレディケート結果に対応することができ、他の4つのフィールドはヌルであることになる。
分岐エグジットタイプの順次は、この分岐に関連づけられた次の命令ブロックのターゲットアドレスが現在の命令ブロックに直接続く命令ブロックのアドレスであることを示すことができる。例えば、命令の順次ストリームが命令ウィンドウ内の命令の最大数を超える場合、この命令の順次ストリームは、メモリ内に連続的に記憶できる複数の命令ブロックに分けられることになる。(末尾の命令ブロック以外の)命令ブロックの各々の分岐エグジットタイプは順次エグジットタイプであることになり、そのため、実行の間、異なる命令ブロックの命令は順次的に実行することができる。別の例として、命令ブロックが、潜在的に、異なるそれぞれのターゲットアドレスを有する複数の分岐のうち1つを取ってもよい。分岐のうち1つが次の順次命令ブロックに対してである場合、その分岐に関連づけられた分岐エグジットタイプは順次タイプとしてエンコードされることができる。
分岐エグジットタイプのオフセットは、分岐に関連づけられた次の命令ブロックのターゲットアドレスが、現在実行している命令ブロックからのオフセットであることを示すことができる。オフセットは、例えば分岐が反復的な又はループする構造に起因するときなどは、コンパイル時に知ることができ、あるいは、オフセットは、命令ブロックの実行の間に受信された計算又は入力に依存してもよい。命令ブロックの実行の間、関連づけられた分岐についてプロセッサコアにより生成されたターゲットアドレスは、プロセッサコア上で実行している命令ブロックのアドレスに対して加算されるべきオフセットとして解釈されることになる。別法として、オフセットは、プロセッサコア上で実行している命令ブロックに順次的に続く命令ブロックのアドレスに対して加算されてもよい。
分岐エグジットタイプの間接は、分岐に関連づけられた次の命令ブロックのターゲットアドレスが命令ブロック内で命令によって決定されることを示すことができる。例えば、アドレスは、ロード命令を介してメモリから来てもよく、あるいは命令ブロック内で算定されてもよい。ターゲットアドレスを記憶するメモリアドレスは、コンパイル時に知ることができ、あるいは命令ブロックの実行の間に受信された計算又は入力に依存してもよい。命令ブロックの実行の間、関連づけられた分岐についてプロセッサコアにより生成されたアドレスは、次の命令ブロックのターゲットアドレスを記憶したメモリアドレスとして解釈されることになる。
分岐エグジットタイプのコールは、分岐に関連づけられた次の命令ブロックのターゲットアドレスがサブルーチンのアドレスであることを示すことができる。サブルーチンのアドレスは、コンパイル時に知ることができ、あるいは、例えばアドレスが命令ブロックの実行の間に受信された計算又は入力に依存するときなどは、実行時に生成されてもよい。命令ブロックの実行の間、関連づけられた分岐についてプロセッサコアにより生成されたターゲットアドレスは、サブルーチンの先頭のメモリアドレスとして解釈されることになる。このアドレスは、例えば分岐予測器などの制御論理によって保存されてもよい。詳細には、分岐予測器は、サブルーチンのリターンアドレスを記憶するための1つ以上のリンクレジスタ又はスタックを含むことができる。分岐予測器は、リンクレジスタ値又はスタックのトップを使用して、リターンエグジットタイプを有する命令ブロックのターゲットアドレスを予測することができる。
分岐エグジットタイプのリターンは、分岐に関連づけられた次の命令ブロックのターゲットアドレスが、プロセッサコア上で実行されているサブルーチンのリターンアドレスであることを示すことができる。サブルーチンのリターンアドレスは、サブルーチンがコールされたとき、実行時に生成される。一実施形態において、リターンアドレスは制御論理によってのみ維持されることができ、実行の間にプロセッサコアにより生成されたターゲットアドレスは無視されることができる。別の実施形態において、サブルーチンの命令ブロックはリターンアドレスを維持することができ、関連づけられた分岐についてプロセッサコアにより生成されたターゲットアドレスは、サブルーチンからのリターンアドレスとして解釈されることになる。プロセッサコア上で動作している命令ブロックにより生成されたターゲットアドレスは、リンクレジスタに記憶されたアドレスと比較されてもよい。
他の分岐エグジットタイプ及び分岐情報が可能であり、命令ブロックのそれぞれのヘッダ内により多い又はより少ないビットでエンコードされてもよいことが理解されるべきである。例えば、コンパイラがプログラムの静的解析からターゲットアドレスを生成することができるときなどに、分岐情報は、予め決定されたターゲットアドレスを含んでもよい。別の例として、分岐エグジットタイプは、複数回実行され得るブロックを示すように、ループ、ループ先頭(begin-loop)、又はループ末尾(end-loop)であってもよく、ループタイプは、ブロックがそれ自体にループバックし得ること(単一ブロックループ)を示すことができ、ループ先頭タイプは、マルチブロックループの先頭ブロックを示すことができ、ループ末尾タイプは、マルチブロックループの末尾ブロックを示すことができる。分岐情報は、例えば、ループが固定回数実行されるかどうかと、ループが何回実行されるかとを含んでもよい。
コンパイラは、命令ヘッダ510の「Xフラグ」フィールドを用いて実行フラグをエンコードすることができる。Xフラグは、命令ブロックについての任意の特別な実行要件をエンコードするために使用できる。要件は、命令ブロック内で使用される任意の特別なハードウェアリソース(例えば、コアが異なるモードを有するとき、又は異なるタイプのコアがブロックベースプロセッサ上で利用可能であるときなど)、ブロックベースプロセッサの制御論理に対するコンパイラヒント又はコマンド、及び/又はデバッグ機能性を規定することができる。一実施形態において、フラグは、ベクトルモードで構成されたコアを使用すること、分岐予測器を抑止すること、メモリ依存予測器を抑止すること、ブロック同期が必要とされること、ブロックの後にブレークすること、及びブロックの前にブレークすることを示すためのビットを含むことができる。他の実行フラグが可能であり、それぞれの命令ブロックのヘッダ内でエンコードされてもよいことが理解されるべきである。
例示される一般的ブロック命令520は、1つの32ビットワードとして記憶され、オペコードフィールド、プレディケートフィールド、ブロードキャストIDフィールド(BID)、第1のターゲットフィールド(T1)、及び第2のターゲットフィールド(T2)を含む。ターゲットフィールドよりもより多くの消費者を有する命令について、コンパイラは、ムーブ(move)命令を用いてファンアウト(fanout)ツリーを構築することができ、あるいはコンパイラは、ブロードキャストに対して高ファンアウト命令を割り当ててもよい。ブロードキャストは、軽量ネットワークを通じてオペランドをコア内の任意数の消費者命令に送信することをサポートする。ブロードキャスト識別子が、一般的ブロック命令520内にエンコードされてもよい。
一般的命令520により概説された一般的命令フォーマットは、ブロックベースプロセッサにより処理されるいくつか又はすべての命令を表すことができるが、ISAの特定の一例についてでさえ、命令フィールドのうち1つ以上が特定の命令について一般的フォーマットから逸脱し得ることを当業者は容易に理解するであろう。オペコードフィールドは、命令520、例えばメモリ読み出し/書き込み、レジスタロード/ストア、加算、減算、乗算、除算、シフト、ローテート、システムオペレーション、又は他の適切な命令などによって実行されるオペレーションを規定する。プレディケートフィールドは、命令が実行されることになる条件を規定する。例えば、プレディケートフィールドは、値「真」を規定することができ、命令は、対応する条件フラグが規定されたプレディケート値にマッチした場合のみ実行されることになる。いくつかの例において、プレディケートフィールドは、プレディケートを比較するためにいずれが使用されるかを少なくとも部分的に規定し、他の例において、実行は、前の命令(例えば、命令ブロック内の先行した命令)により設定されたフラグに基づいてプレディケートされる(predicated on)。いくつかの例において、プレディケートフィールドは、命令が常時実行されるか、あるいは決して実行されないことを規定することができる。こうして、プレディケートフィールドの使用は、分岐命令の数を低減することによって、より高密度のオブジェクトコード、向上させたエネルギー効率、及び向上させたプロセッサ性能を可能にすることができる。
ターゲットフィールドT1及びT2は、ブロックベース命令の結果が送信される命令を規定する。例えば、命令スロット5のADD命令が、その算定された結果がスロット3及び10の命令に送信されることを規定することができる。特定の命令及びISAに依存して、例示されたターゲットフィールドのうち一方又は双方が他の情報で置換されてもよく、例えば、第1のターゲットフィールドT1が、即値オペランドで置換でき、さらなるオペコードで置換でき、2つのターゲットを規定できる等である。
分岐命令530は、オペコードフィールド、プレディケートフィールド、ブロードキャストIDフィールド(BID)、及びオフセットフィールドを含む。オペコード及びプレディケートフィールドは、フォーマット及び機能において、一般的命令に関して説明されたものと同様である。オフセットは、いくつかの例において4命令ブロックで表現され、こうして、分岐が実行され得るメモリアドレス範囲を拡大することができる。一般的命令520及び分岐命令530で示されるプレディケートは、命令ブロック内の命令で有向非巡回グラフ(DAG)を形成するために使用されてもよい。例えば、特定の命令の実行が、前の命令(例えば、2つのオペランドの比較)の結果に基づいてプレディケートされてもよい。プレディケートが偽である場合、命令は、上記特定の命令によって計算された値をコミットしないことになる。プレディケート値が、必要なプレディケート値にマッチしない場合、命令は発行しない。例えば、BRO_F(プレディケートされた偽)命令は、該命令が偽のプレディケート値を送信された場合、発行することになる。
本明細書において用いられるとき、用語「分岐命令」は、相対メモリ位置に対してプログラム実行を変更することに限定されず、絶対的又はシンボリックなメモリ位置に対するジャンプ、サブルーチンコール及びリターン、並びに実行フローを修正し得る他の命令をさらに含むことが容易に理解されるべきである。いくつかの例において、実行フローは、システムレジスタ(例えば、プログラムカウンタPC又は命令ポインタ)の値を変更することにより修正され、他の例において、実行フローは、メモリ内の指定された位置に記憶された値を修正することにより変更されてもよい。いくつかの例において、ジャンプレジスタ分岐命令は、レジスタ内に記憶されたメモリ位置に対してジャンプするために使用される。いくつかの例において、サブルーチンコール及びリターンは、ジャンプ及びリンク並びにジャンプレジスタ命令を用いてそれぞれ実装される。
VIII.例示的なコンパイラ手法
図6は、ブロックベースコンピュータアーキテクチャに対してコンパイルするための例示的な方法600を例示するフローチャートである。610において、コンパイラは、命令ブロックにグループ化された命令ストリームを生成することができる。コンパイラは、高水準のソースコード(C、C++、又はJavaなど)を、ターゲットにされたブロックベースプロセッサ上で実行可能である低水準のマシンコードに翻訳することができる。マシンコードは、コンピュータのハードウェアリソースとコードの制御フローとに従ってグループ化できる命令の順次ストリームとして生成されることができる。例えば、生成されたマシンコードは、複数の基本ブロックを含むことができる。基本ブロックは、制御がブロックの最初の命令でのみブロックに入ることができ、かつ制御が基本ブロックの最後の命令でのみブロックを出ることができるコードのブロックであってもよい。ゆえに、基本ブロックは、一緒に実行される命令のシーケンスである。所与の命令ブロックは、該命令ブロックがISAの制約とターゲットにされたコンピュータのハードウェアリソースとの範囲内で実行され得る限り、単一の基本ブロック、基本ブロックの一部、又は複数の基本ブロックであってもよい。
図6は、ブロックベースコンピュータアーキテクチャに対してコンパイルするための例示的な方法600を例示するフローチャートである。610において、コンパイラは、命令ブロックにグループ化された命令ストリームを生成することができる。コンパイラは、高水準のソースコード(C、C++、又はJavaなど)を、ターゲットにされたブロックベースプロセッサ上で実行可能である低水準のマシンコードに翻訳することができる。マシンコードは、コンピュータのハードウェアリソースとコードの制御フローとに従ってグループ化できる命令の順次ストリームとして生成されることができる。例えば、生成されたマシンコードは、複数の基本ブロックを含むことができる。基本ブロックは、制御がブロックの最初の命令でのみブロックに入ることができ、かつ制御が基本ブロックの最後の命令でのみブロックを出ることができるコードのブロックであってもよい。ゆえに、基本ブロックは、一緒に実行される命令のシーケンスである。所与の命令ブロックは、該命令ブロックがISAの制約とターゲットにされたコンピュータのハードウェアリソースとの範囲内で実行され得る限り、単一の基本ブロック、基本ブロックの一部、又は複数の基本ブロックであってもよい。
命令ブロックのサイズ及び内容に対する制約には、例えば、プロセッサコアの命令ウィンドウの最大サイズ、レジスタアクセスの最大数、ロード/ストアアクセスの最大数、及び分岐の最大数を含むことができる。命令ブロック内の命令の数は、プロセッサコアの命令ウィンドウ内で実行できる命令の数を超えることはできない。ゆえに、命令の最大数は、ターゲットプロセッサの命令ウィンドウのサイズに依存して、128、64、又は32命令であってもよい。いくつかの基本ブロックが、命令ウィンドウより小さい可能性がある。コアをより効率的に使用するために、組み合わせられた基本ブロック間の分岐をデータフロー命令に変換することによって、小さい基本ブロックが1つ以上の他の基本ブロックと組み合わせられてもよい。詳細には、第1の基本ブロックから第2の基本ブロック(マージされるべき基本ブロック)への分岐が、プレディケートを計算するための命令に変換されてもよく、第2の基本ブロックの命令が、上記プレディケート計算の結果に基づいてプレディケートされてもよい。別法として、いくつかの基本ブロックが、命令ウィンドウより大きい可能性があり、ゆえに、これら基本ブロックは、命令ブロックが最大命令ウィンドウサイズより大きくなくなるように、複数の命令ブロックに区分されてもよい。基本ブロックはまた、基本ブロックが所与の命令ウィンドウのレジスタ又はロード/ストアアクセスの数を超える場合に、複数の命令ブロックに区分されてもよい。
620において、所与の命令ブロックの1つ以上のエグジットタイプ及び/又はコンパイラヒントが決定されることができる。例えば、各々の潜在的な分岐の分岐エグジットタイプ及び分岐情報、例えば予め決定されたターゲットアドレス及び反復カウントなどが、決定されてもよい。上記で図5を参照して説明されたように、エグジットタイプの例は、命令ブロックから抜け出す制御フローに依存して、ヌル、順次、オフセット、間接、コール、又はリターンであってもよい。単一の分岐又は複数の分岐が、所与の命令ブロックから出るのに可能であり得(例えば、複数の基本ブロックが所与の命令ブロックに組み合わせられるときなど)、しかし、分岐のうち1つのみが、命令ブロックの実行の間に取られることになる。潜在的分岐の各々は、異なるエグジットタイプを有することができる。潜在的分岐の各々は、識別子を割り当てられてもよく、分岐に対応するエグジットタイプが、識別子に対応するフィールド内にエンコードされてもよい。例えば、分岐0のエグジットタイプがフィールド0にエンコードされてもよく、分岐1のエグジットタイプがフィールド1にエンコードされてもよい。
630において、所与の命令ブロックのヘッダが生成されることができる。ヘッダは、所与の命令ブロックのエグジットタイプと任意のコンパイラヒントとを含むことができる。図5における命令ヘッダ510は、命令ヘッダの一例である。ヘッダは、命令ヘッダ510により示されるように固定されたサイズのものであってもよく、あるいは、ヘッダは、可変サイズであってもよい。例えば、命令ブロックのターゲットアドレスが静的に計算され得る場合、ヘッダは、予め決定されたターゲットアドレスを含むように拡張されてもよい。ヘッダのサイズは、例えば、ヘッダの最初のワードのうち1つ以上のビット内にエンコードされてもよい。
640において、ターゲットアドレス計算が、所与の命令ブロックの中でより早期に早められる(advanced)ことができる。ターゲットアドレス計算を早めることにより、ターゲットアドレス計算が早められない場合より早く、次の命令ブロックがフェッチされ、実行されることができる。ゆえに、現在の命令ブロックは潜在的に次の命令ブロックと並列で実行されることができ、ブロックベースプロセッサの性能が潜在的に増大し得る。このことは従来のISAと対照をなし、従来のISAでは、一般に、基本ブロック内で実行された最後の命令が次の基本ブロックのターゲットアドレスに対する分岐である(又は、ループの場合には同じ基本ブロックの先頭に戻る)ことになる。いくつかのISAは、1つ又は複数の分岐遅延スロットを公開することがあり、そのため、分岐命令は、埋めることができる遅延スロット数だけ最後の命令に先行することになる。しかしながら、分岐遅延スロットの数はプロセッサのパイプライン段階の数より少なくあるべきであり、典型的に1つ、時に2つであるため、分岐遅延スロットの使用は限定される。ゆえに、従来のISAにおいて、制御フローは、基本ブロックの末尾又は末尾のかなり近くまで、実行中の基本ブロックから転換される(diverted)ことができず、なぜならば、フェッチ及びデコード論理がシリアル化ポイントとして動作するからである。
しかしながら、複数のプロセッサコア及び/又は命令ウィンドウを含むブロックベースプロセッサは、潜在的に、所与の命令ウィンドウのターゲットアドレス計算がブロックの末尾から切り離され、より早期の実行時間に引き上げられ又は早められることを可能にすることができる。例えば、ターゲットアドレスが計算された後、所与の命令ブロックが、その割り当てられたプロセッサコアリソースを用いて実行を継続することができる間、ターゲットアドレスで始まる次の命令ブロックが、同じ又は異なるプロセッサコアの異なるリソース上で開始される。こうして、命令ストリームはアトミックに実行される命令ブロックにグループ化され、かつこれら命令ブロックを実行することに対して並列的なリソースが提供されるため、ブロックベースプロセッサのターゲットアドレス計算は、分岐遅延スロットを用いて可能であるよりも、所与の命令ブロック内でより早期に早められ、より多くのワークが並列で実行されることを潜在的に可能にすることができる。例えば、ブロックベースアーキテクチャにおいて、ターゲットアドレス計算は、ターゲットアドレスを計算することが命令ブロックの他の命令に依存しない場合、命令ブロックの最初の命令に早められてもよい。
図7は、命令ブロック700の様々な態様を例示し、コンパイラが如何にしてターゲットアドレス計算を命令ブロック700内でより早期に早めることができるかの例を示す。命令ブロック700は、ヘッダ710、データ指向命令720、及び制御指向命令730を含むことができる。データ指向命令720には、データを計算し、入力データを受信し、かつ/あるいは出力データを生成する命令を含むことができる。例えば、データ指向命令720が使用されて、データに対して数学的又は論理的オペレーションを実行し、入力デバイス、レジスタ、又はメモリからデータを読み出し、かつ/あるいは出力デバイス、レジスタ、又はメモリにデータを書き込むことができる。制御指向命令730には、例えばいずれの命令ブロックが実行されるか、どの順序で実行されるかなどの、プログラムの制御フローを決定する命令を含むことができる。例示の容易さのため、データ指向命令720及び制御指向命令730は、命令ブロック700内で別個の命令ブロックとして例示される。しかしながら、データ指向及び制御指向命令は、命令ブロック700内で相互に混合されてもよいことが理解されるべきである。さらに、いくつかの命令が、データ指向命令720及び制御指向命令730の双方の特性を有してもよい。例えば、いくつかの制御フロー判断が、計算の後、又はデータが入力された後の、データ値に依存する。
コンパイラは、互いに対して相対的な順序でプログラムの命令を出すことができる。いくつかの場合、命令間の相対的実行順序は、適当なプログラムオペレーションのために維持されなければならない。例えば、いくつかの命令は、他の命令により消費される結果を作成する。消費する命令は作成する命令の結果を使用するため、消費する命令は作成する命令に対してデータ依存的である。ゆえに、作成する命令は、消費する命令の前に実行されなければならない。別の例として、いくつかの命令は、他の命令が実行されるかどうかを決定し、あるいは制御する。制御する命令の結果が、制御される命令が実行されるかどうかを決定するため、制御される命令は、制御する命令に対して制御依存的である。別法として、いくつかの命令は、これら命令の実行が互いに対して影響を有さないとき、互いから独立であってもよい。独立した命令は、機能性における変更なく複数の異なる順序で実行できる。
命令ブロック700は、ターゲットアドレス0を計算する命令750を含むことができ、コンパイラは、命令750を命令ブロック700の中でより早期に早めることができる。ターゲットアドレスは、実行すべき次の命令ブロックの先頭アドレスを決定するために使用できる。各命令ブロックは、1つ以上のエグジットポイントを含むことができ、それぞれのエグジットポイントは、異なるターゲットアドレスを指し示すことができる。
特定の一例として、例えば基本ブロックが命令ウィンドウよりもより多くの命令を有するときなど、命令ブロックは基本ブロックの一部であってもよい。命令ブロック700が基本ブロックの一部であるとき、実行すべき次の命令ブロックは当該命令ブロックのシーケンス内の次の命令ブロックであるため、1つのエグジットポイントのみ存在する。ターゲットアドレスは、次の順次の命令ブロックのアドレスとして、コンパイル時に計算されることができる。ゆえに、ターゲットアドレスは、順次のエグジットタイプを用いてヘッダ710内で識別されることができる。換言すると、ターゲットアドレスの計算は、(弧752で示されるように)ヘッダ710に早められることができ、そのため、ターゲットアドレスは、ヘッダ710がデコードされるとき、命令ブロックの他の命令が実行される前に、計算されることができる。ターゲットアドレス計算をヘッダに早めることにより、ヘッダがデコードされるとすぐに次の命令ブロックが非投機的にフェッチされることができる。
命令ブロック700が単一の基本ブロックであるとき、命令ブロック700から抜け出す1つ以上のターゲットアドレスが存在することがある。例えば、命令ブロック700は、基本ブロックが無条件の分岐、例えばサブルーチンコールなどで終了するとき、単一のターゲットアドレスを有することがある。ターゲットアドレスがコンパイル時に分かる場合、弧752で示されるように、分岐の情報がヘッダ710に早められることができる。しかしながら、ターゲットアドレス計算が命令ブロック700内で実行される命令、例えば制御指向命令730などに依存する場合、ターゲットアドレス計算とそれが依存する命令とは、弧754で示されるように、データ指向命令720のすべての前に早められることができる。別法として、ターゲットアドレス計算とそれが依存する命令とは、データ指向命令720のうちいくつかの前に早められてもよい。例えば、現在の命令ブロック700のいくつか又はすべてのメモリロード命令が、ターゲットアドレスを計算することの前へ優先順位づけられてもよく、そのため、次の命令ブロックのために命令がフェッチされる前に、現在のブロックのメモリアクセスが実行される。
命令ブロック700は、複数のそれぞれの潜在的なターゲットアドレスを計算するための複数の命令(例えば、750、770)を含むことができ、コンパイラは、命令750、770のうち1つ以上を命令ブロック700の中でより早期に早めることができる。例えば、条件付き分岐が、条件が真の場合にあるターゲットアドレスに、条件が偽の場合に異なるターゲットアドレスにプログラムをフローさせることができる。例えば、そのソースコードは、
if (condition 0) {
perform instructions predicated on condition 0; call sub-routine 0}
else {
perform instructions predicated on condition 1; call sub-routine 1}
で規定することができ、ここで、条件1(condition 1)は、条件0(condition 0)の逆である。ブロックベースアーキテクチャにおいて、条件又はプレディケートは、1つの命令内で、例えば制御指向命令730内などで、評価されることができる。制御依存命令は、評価の結果に基づいてプレディケートされてもよい。特定の一例として、制御指向命令730の中のテスト命令が、条件0についてテストすることができる。条件0が評価された後、条件0が真である場合に、条件0に基づいてプレディケートされた命令740と、ターゲットアドレス0を計算する命令750とが、実行されることができる。条件0が真でない(例えば、条件1が真である)場合、条件1に基づいてプレディケートされた命令760と、ターゲットアドレス1を計算する命令770とが、実行されることができる。弧756で示されるように、コンパイラは、ターゲットアドレス0を計算する命令750を、条件0に基づいてプレディケートされた命令740のうちいくつか又はすべてよりもより早期に早めることができる。詳細には、コンパイラは、命令750とそれが依存する命令とを、命令750から独立であるプレディケートされた命令740のすべての前へ早めることができる。同様に、弧772で示されるように、コンパイラは、ターゲットアドレス1を計算する命令770を、条件1に基づいてプレディケートされた命令760のうちいくつか又はすべてよりもより早期に早めることができる。
if (condition 0) {
perform instructions predicated on condition 0; call sub-routine 0}
else {
perform instructions predicated on condition 1; call sub-routine 1}
で規定することができ、ここで、条件1(condition 1)は、条件0(condition 0)の逆である。ブロックベースアーキテクチャにおいて、条件又はプレディケートは、1つの命令内で、例えば制御指向命令730内などで、評価されることができる。制御依存命令は、評価の結果に基づいてプレディケートされてもよい。特定の一例として、制御指向命令730の中のテスト命令が、条件0についてテストすることができる。条件0が評価された後、条件0が真である場合に、条件0に基づいてプレディケートされた命令740と、ターゲットアドレス0を計算する命令750とが、実行されることができる。条件0が真でない(例えば、条件1が真である)場合、条件1に基づいてプレディケートされた命令760と、ターゲットアドレス1を計算する命令770とが、実行されることができる。弧756で示されるように、コンパイラは、ターゲットアドレス0を計算する命令750を、条件0に基づいてプレディケートされた命令740のうちいくつか又はすべてよりもより早期に早めることができる。詳細には、コンパイラは、命令750とそれが依存する命令とを、命令750から独立であるプレディケートされた命令740のすべての前へ早めることができる。同様に、弧772で示されるように、コンパイラは、ターゲットアドレス1を計算する命令770を、条件1に基づいてプレディケートされた命令760のうちいくつか又はすべてよりもより早期に早めることができる。
コンパイルの後、命令は、コンピュータ読取可能メモリ内に記憶でき、そのため、命令は、プログラムを実行するためにブロックベースプロセッサより取得されることができる。下記の例は、ブロックベースプロセッサ上での実行を説明する。
IX.ターゲットアドレスに対する早期アクセスを提供する例
図8は、ブロックベースコンピュータアーキテクチャ上での命令の実行を制御する方法800の一例を例示するフローチャートである。例えば、方法800は、ブロックベースプロセッサの制御論理が使用することができる。制御論理は、例えば、ブロックベースプロセッサに対して外部のコントローラ内に実装されてもよく、ブロックベースプロセッサの用途特定ハードウェア(例えば、特別目的制御ユニット又は分散論理ゲートなど)内に実装されてもよく、あるいはブロックベースプロセッサの1つ以上のプロセッサコア内でコードとして実行されてもよい。方法800は、制御論理に次の命令ブロックのターゲットアドレスに対する早期アクセスを提供するために使用でき、そのため、複数の命令ブロックが、並列で非投機的に実行することができる。
図8は、ブロックベースコンピュータアーキテクチャ上での命令の実行を制御する方法800の一例を例示するフローチャートである。例えば、方法800は、ブロックベースプロセッサの制御論理が使用することができる。制御論理は、例えば、ブロックベースプロセッサに対して外部のコントローラ内に実装されてもよく、ブロックベースプロセッサの用途特定ハードウェア(例えば、特別目的制御ユニット又は分散論理ゲートなど)内に実装されてもよく、あるいはブロックベースプロセッサの1つ以上のプロセッサコア内でコードとして実行されてもよい。方法800は、制御論理に次の命令ブロックのターゲットアドレスに対する早期アクセスを提供するために使用でき、そのため、複数の命令ブロックが、並列で非投機的に実行することができる。
810において、第1の命令ブロックの命令ヘッダがフェッチされ、少なくとも部分的にデコードされる。例えば、第1の命令ブロックは、メモリシステムからフェッチされてもよく、上記メモリシステムには、命令キャッシュ、統合された命令/データレベル1(L1)キャッシュ、レベル2(L2)キャッシュ、及び/又はメインメモリ(例えば、オンチップメモリ及び/又は外部メモリなど)を含むことができる。命令ヘッダには、命令ブロックのサイズと1つ以上のエグジットタイプとを含むことができ、各々のエグジットタイプは、命令ブロックからの潜在的な分岐に対応する。第1の命令ブロックが、第1の命令ブロックの先頭アドレスで始まるメモリからフェッチされる。第1の命令ブロックのサイズが第1の命令ブロックの先頭アドレスに対して加算されて、次の順次の命令ブロックの先頭アドレスを計算することができる。第1の命令ブロックのサイズは、第1の命令ブロックがどこにマッピングされ得るかを決定するために、利用可能リソースのリストと比較されてもよい。
820において、第1の命令ブロックは、ブロックベースプロセッサのプロセッサコアにマッピングされることができる。マッピングされた命令ブロックは、所与のプロセッサコア上で実行するように現在割り当てられているブロックである。ブロックベースプロセッサには、有限数の同種又は異種のプロセッサコアが含まれる。典型的なプログラムは、プロセッサコアに適合し得るよりもより多くの命令ブロックを有することがある。ゆえに、プログラムのそれぞれの命令ブロックは、一般に、プロセッサコアをプログラムの他の命令ブロックと共有することになる。換言すると、所与のコアは、プログラムの実行の間、いくつかの異なる命令ブロックの命令を実行することができる。有限数のプロセッサコアを有することはまた、プロセッサコアのすべてが命令ブロックを実行していてビジーで、かつ新しいコアがディスパッチに利用可能でないとき、プログラムの実行がストールし、あるいは遅延される可能性があることを意味する。プロセッサコアが利用可能になったとき、命令ブロックのインスタンスがプロセッサコアにマッピングされることができる。
制御論理は、いずれの命令ブロックがいずれのプロセッサコア上で実行されるかと、命令ブロックがいつ実行されるかとを割り当てる、命令ブロックスケジューラを含むことができる。マッピングは様々なファクタに基づいてよく、例えば、実行のために使用されるターゲットエネルギー、プロセッサコアの数及び構成、プロセッサコアの現在の及び/又は前の使用量、プログラムの動的フロー、投機的実行が可能にされるかどうか、投機的ブロックが実行される信頼度レベル、並びに他のファクタなどである。命令ブロックのインスタンスは、現在利用可能であるプロセッサコアに(例えば、それ上で命令ブロックが現在実行されていないときなどに)マッピングされることができる。一実施形態において、命令ブロックのインスタンスは、現在ビジーであるプロセッサコアに(例えば、コアが命令ブロックの別のインスタンスを実行しているときなどに)マッピングされてもよく、後からマッピングされたインスタンスは、より早期にマッピングされたインスタンスが完了したときに始まってもよい。別の例として、命令ブロックのインスタンスは、プロセッサコア内の空いた命令ウィンドウにマッピングされてもよい。
命令ブロックが特定のプロセッサコアにマッピングされたとき、命令ブロックはインフライト(in-flight)である。インフライトの命令ブロックは、ブロックベースプロセッサの特定のコアをターゲットにしたブロックであり、このブロックは、特定のプロセッサコア上で投機的か又は非投機的かのいずれかで実行されることになり、あるいは実行されている。ブロックは、実行している命令ブロックにより提供されるワーク(work)をプログラムが使用することがブロックのマッピングの間に分かるとき、非投機的に実行する。ブロックは、実行している命令ブロックにより提供されるワークをプログラムが使用するか、あるいは使用しないかどうかがブロックのマッピングの間に分からないとき、投機的に実行する。ブロックを投機的に実行することは、例えば、仮に投機的ブロックのワークが使用されるであろうことが分かった後又は分かったときにブロックが開始されることになる場合よりも、より早期にブロックが開始されるときなどに、性能を潜在的に増大させることができる。しかしながら、投機的に実行することは、例えば、投機的ワークがプログラムにより使用されないときなどに、プログラムを実行するときに使用されるエネルギーを潜在的に増大させる可能性がある。
命令ブロックが特定のプロセッサコアにマッピングされた後、命令ブロックは、この特定プロセッサコアによりフェッチされ、デコードされ、実行されることができる。フェッチすることには、命令ブロックの命令をメモリから特定プロセッサコアのバッファ又はレジスタにロードすることを含むことができる。フェッチすることは、プロセッサコアがパイプライン化されているとき、デコードすること及び実行することと重なってもよい。命令ブロックの命令がプロセッサコアにロードされたとき、命令ブロックはプロセッサコア上に存在する。命令ブロックは、命令ブロックのうちすべてでなくいくつかの命令がロードされたとき、部分的に存在する。命令ブロックは、命令ブロックのすべての命令がロードされたとき、フルに存在する。命令ブロックは、プロセッサコアがリセットされるか、あるいは異なる命令ブロックがプロセッサコアにフェッチされるまで、プロセッサコア上に存在することになる。デコードすることには、フェッチされた命令を比較的コンパクトなマシンコードから、プロセッサコアのハードウェアリソースを制御するために使用できるよりコンパクトでない表現に変形することを含むことができる。デコードされた命令は、プロセッサコアの命令ウィンドウ内に記憶され、命令のオペランドがレディになったとき、及びコアのリソースが命令を実行するのに利用可能になったときに、実行されることができる。一般に、コアが、コアの外部のアーキテクチャ状態が更新されることになるコミットフェーズに入るまで、コア上で実行する命令は、コアのローカルの状態のみ更新する。しかしながら、次の命令ブロックのターゲットアドレスを生成する命令は、命令ブロックがコミットされる前に制御論理と通信することができる。詳細には、次の命令ブロックのターゲットアドレスと分岐識別子とが、命令ブロックがコミットされる前に制御論理に対して通信されることができる。例えば、ブロックのターゲットアドレスが、オフセット付き分岐又はオフセット付きコールの命令により決定されるとき、ターゲットアドレスは、命令ブロックがデコードされたときに決定されてもよい。
830において、第1の命令ブロックからのターゲットアドレス(及び、分岐識別子)は、第1の命令ブロックがコミットする前に制御論理で受信することができる。受信したターゲットアドレスは、分岐識別子に対応するエグジットタイプに従って解釈されることになり、そのため、第2の命令ブロックの先頭アドレスが計算されることができる。例えば、ターゲットアドレスは、受信した分岐識別子に対応するエグジットタイプに依存して、オフセット又はサブルーチンアドレスとして解釈されてもよい。第2の命令ブロックは、プログラム順序において次の命令ブロックであり、ゆえに、非投機的な命令ブロックである。
840において、第2の命令ブロックの命令の実行が、開始されることができる。第2の命令ブロックの実行を開始することには、第2の命令ブロックをブロックベースアーキテクチャのL1キャッシュにプリフェッチすること、第2の命令ブロックのヘッダをプリフェッチすること、第2の命令ブロックのヘッダをデコードすること、第2の命令ブロックをプロセッサコアにマッピングすること、第2の命令ブロックをブロックベースアーキテクチャの第2のコアの命令ウィンドウにフェッチすること、第2の命令ブロックをブロックベースアーキテクチャの第1のコアの命令ウィンドウにフェッチすること、第2のコアにロードされた第2の命令ブロックをリフレッシュすること、第2の命令ブロックの1つ以上の命令をデコードすること、及び/又は、第2の命令ブロックの1つ以上の命令をデコード及び/又は実行することを含むことができる。命令ブロックは、命令ブロックの反復につき1つのエグジットポイントにのみ続くため、次の命令ブロックのフェッチ及び実行は、ひとたび取られたエグジットポイントのプレディケートが決定されると、命令ブロック内の他の命令が実行中である場合でさえ、開始することができる。例えば、プレディケートされた及び/又はプレディケートされていないレジスタ及び/又はメモリの書き込みが、次の命令ブロックに対する分岐を決定的に取った後でさえ、行われ続けてもよい。
命令ブロックは、例えば、命令ブロックがサブルーチン又はループの本体を実行するようにマッピングされたときなどに、繰り返し実行されることがある。第2の命令ブロックは、ブロックベースプロセッサのコア内にすでに存在する可能性があり、ゆえに、コアをリフレッシュすることで、第2の命令ブロックを再フェッチ及び再デコードするために使用されるであろう時間及びエネルギーを節減する可能性がある。本明細書において用いられるとき、命令ブロックリフレッシュ又はプロセッサコアリフレッシュは、プロセッサコアが該プロセッサコア上に存在する1つ以上の命令ブロックを再実行することが可能であることを意味する。一実施形態において、コアをリフレッシュすることには、1つ以上の命令ブロックのアクティブレディ状態をリセットすることを含むことができる。ゆえに、ブロックがリフレッシュされるとき、アクティブレディ状態がクリアされる間、デコードされた命令とデコードされたレディ状態とは維持されることができる。命令ブロックがループ又は繰り返されるサブルーチンの一部であるとき、又は、投機的ブロックが終端され、かつ再実行されることになるとき、同じプロセッサコア上で命令ブロックを再実行することが望ましい可能性がある。リフレッシュする判断は、プロセッサコア自体によって(連続的な再使用)、あるいはプロセッサコアの外部によって(非連続的な再使用)、例えば命令ブロックスケジューリングを実行する制御論理などによって行われてもよい。
850において、共有されたリソースに対するアクセス要求が、より古い及び/又は非投機的な命令ブロックがより新しい及び/又はより投機的な命令ブロックよりも共有されたリソースに対してのより高い優先順位を有するように、優先順位づけられることができる。一例として、制御論理は、最も古い実行命令ブロックを追跡し、該命令ブロックが共有リソースにアクセスすることを要求したときに該命令ブロックに優先順位を常に与えることができる。より新しい実行命令ブロックが非投機的又は投機的であり得ることに対し、最も古い実行命令ブロックは非投機的である。より新しい実行命令ブロックは、ラウンドロビン、ランダム、又は他のアルゴリズムを用いて、共有リソースに対する優先順位を与えられてもよい。別の例として、制御論理は、各命令ブロックのタイムスタンプを生成し、共有リソースに対するアクセスを要求する最も古い命令ブロックに優先順位を常に与えてもよい。より新しい及び/又はより投機的な命令ブロックを上回ってより古い及び/又は非投機的な命令ブロックを優先順位づけることにより、より古い命令ブロックはより速く完了することができ、そのため、データ依存関係がより早期に解決されることができ、新しい命令ブロックが使用するようにリソースが解放されることができる。さらに、共有リソースに対するアクセスが使用され、かつアボートされた投機的命令で無駄にされないという高い見込みがある。共有リソースには、例えば、キャッシュ、レジスタファイル、メモリサブシステム、入力ポート、出力ポート、特別目的コア若しくはアクセラレータ、及び/又は他の様々なリソースを含むことができる。
下記は、方法800が如何にして使用され得るかの一例である。命令ブロック1がフェッチされることができ、ヘッダが少なくとも部分的にデコードされることができる(810)。例えば、ヘッダは、命令ブロック1がどれほど大きいかを示すことができ、そのため、ヘッダは、命令ブロックのための十分な記憶キャパシティを有するプロセッサコアにマッピングされることができる。命令ブロック1は、第1のプロセッサコアにマッピングされることができる(820)。命令ブロック1は、命令ブロック2に対するオフセット付き分岐命令を含むことができる。命令ブロック1が第1のプロセッサコアに最初フェッチされたとき、分岐のオフセットはまだわからない。しかしながら、命令ブロック1のターゲットアドレスは、命令ブロックがコミットする前に、例えば命令がデコードされているとき又は命令の実行の間などに、決定されることができる(830)。特定の一例として、分岐命令は、命令ブロック1の唯一の分岐であり得る。分岐命令がプレディケートされない場合、ターゲットアドレスは分岐命令のデコードの間に分かることになる。分岐命令が、命令ブロック内で計算された値に基づいてプレディケートされる場合、潜在的なターゲットアドレスはデコードの後に知ることができ、実際のターゲットアドレスはプレディケートを計算した後に分かることになる。しかしながら、プレディケートを計算することを待機することよりむしろ、分岐予測器が、潜在的なターゲットアドレスを用いて、プレディケートが計算される前に、取られる分岐を予測してもよく、命令ブロック2の投機的実行を開始することができる。ゆえに、命令ブロック2は、現在のコア内の別の命令ウィンドウ内か、又は第2のコア内かのいずれかで、先に動作することができる。分岐予測器が正しく予測した場合、命令ブロック2は動作を継続することができ、命令ブロック1がコミットされた後にコミットされ得る。分岐予測器が間違って予測した場合、命令ブロック2はそれをコミットすることなくアボートされることができる。
図9〜図10は、ブロックベースアーキテクチャの異なる構成及びオペレーションの例を例示する。例は、ターゲットアドレスに対する早期アクセスを提供することに関連づけられた様々な態様を例示する。図9は、複数の処理コア905と制御論理920とメモリシステムとを含むブロックベースのアーキテクチャ900を示す。コア905のうち複数のコアがメモリシステムにアクセスするよう試みることができるため、メモリシステムはブロックベースのアーキテクチャの共有リソースである。メモリシステムは、クロスバー930、レベル1キャッシュ(L1$)940、レベル2キャッシュ(L2$)950、及びメインメモリ910を含むことができる。クロスバー930は、コアとL1キャッシュ940との間でデータをルーティングするために使用できる。クロスバー930及びL1キャッシュ940の異なる実装が、L1キャッシュ940に対するより多くの又はより少ない同時アクセスを可能にすることができる。一実施形態において、クロスバー930は、メモリアクセスがL1キャッシュ940の異なるバンクに対してであるとき、複数のコアがL1キャッシュ940に同時にアクセスすることを可能にすることができる。例えば、L1キャッシュは、各コアに関連付けられたバンクを有することができる。別の実施形態において、クロスバー930は、単一のコアのみが所与の時間にL1キャッシュ940にアクセスできるようにしてもよい。
いくつかの実施形態において、制御論理920は、下記のうち1つ以上を用いて少なくとも部分的に実装できる:ハードワイヤード有限状態マシン、プログラマブルマイクロコード、プログラマブルゲートアレイ、又は他の適切な制御回路。一実施形態において、制御論理920は、例えば命令ブロックスケジューリングなどの、ブロックベースアーキテクチャ900の制御機能を実行する命令ブロックを実行するプロセッサコア905のうちの1つであり得る。別の実施形態において、ソフトウェアコードを実行する外部のプロセッサが、ブロックベースアーキテクチャ900の制御機能と通信し、該制御機能を実行するために使用されてもよい。
プログラムの命令912は、命令ブロック(A〜E)にグループ化され、メインメモリ910に記憶されることができる。命令ブロックアドレステーブル914が、命令ブロックの先頭アドレスを記憶することができる。命令ブロックは、L1キャッシュ940とL2キャッシュ950とにコピーされることができ、そのため、コア905と制御論理920とはブロックに対してより高速のアクセスを有する。
プログラムは、制御論理920の命令ブロックスケジューラ925がコア1にプログラムの第1の命令ブロック(A)をマッピングし、そのローディングを開始したとき、実行を開始することができ、コア1において、命令ブロックAは実行を開始することができる。命令ブロックスケジューラ925は、命令ブロックがいずれのコアにマッピングされたかに関する情報を記憶する命令ブロックマッピングテーブル916を維持することにより、コアのレジデンシ(residency)を追跡することができる。命令ブロックマッピングテーブル916は、(例示されるように)メモリ910に、又はソフトウェアによりアクセス可能でない別のメモリ構造(例えば、制御論理920のキャッシュなど)内に記憶できる。命令ブロックスケジューラ925は、命令ブロックの命令ヘッダをフェッチし、デコードすることができる。ヘッダ情報は、命令ブロックのサイズと、次の命令ブロックのアドレスを計算する方法に関する情報(例えば、1つ以上のエグジットタイプフィールド)とを決定するために使用できる。
コア1でのブロックAの実行の間、ブロックAがコミットされる前に、次の命令ブロックに対応するターゲットアドレスがブロックAにより生成され、制御論理920に通信されることができる。次の命令ブロックのアドレスは、受信したターゲットアドレスと、ブロックAのヘッダのエグジットタイプフィールドとに基づいて計算できる。次の命令ブロックのアドレスが計算されたとき、制御論理920は、次の命令ブロックの実行を開始することができる。例えば、プログラムの次の命令ブロックはブロックBであり得、制御論理920は命令ブロックBの実行を開始することができる。
ブロックBの実行を開始することには、ブロックBをL1キャッシュ930にプリフェッチすること、ブロックBのヘッダをフェッチすること、ブロックBのヘッダをデコードすること、ブロックBをコア905のうち1つにマッピングすること、ブロックBをコア905のうち1つ(例えば、コア2、又はコア1の使用されていないウィンドウなど)にフェッチすること、ブロックBをリフレッシュすること(それがコア905のうち1つにすでに存在した場合)、ブロックBの1つ以上の命令をデコードすること、及び/又はブロックBの1つ以上の命令をデコード及び/又は実行することを含むことができる。例えば、ブロックBは、コア2にマッピングされ、ロードされることができ、コア2において、ブロックBは、ブロックAと同時に実行するように開始することができる。ゆえに、ブロックA及びBは、ブロックAがブロックBのアドレスに対する早期アクセスを提供したため、並列に実行することができる。ブロックを並列に実行することにより、プログラムは、仮にブロックが順次的に実行される場合より速く完了することができる。
制御論理920は、プログラムのブロックの投機的実行を開始するために使用できる分岐予測器(図示されていない)を含むことができる。例えば、分岐予測器は、ブロックCをコア3にマッピングし、そのためコア3がメモリ910からブロックCの命令をフェッチすることを開始できることにより、命令ブロックCの実行を開始することができる。
異なるコア905にロードされたブロックの各々は、例えばメモリシステムなどの共有リソースに対するアクセスを要求することができる。例えば、ブロックA及びBが、ブロックCの命令フェッチと同時にメモリからのデータを要求してもよい。制御論理920は、共有されたリソースに対するアクセスを、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る上記リソースに対しての優先順位を有するように、優先順位づけるように構成されることができる。この例において、ブロックA及びBは非投機的に実行しており、ブロックBは投機的に実行している。ブロックAは最も古いブロックであり、ブロックBは、ブロックBがブロックAにより開始されたのでブロックAより新しく、ブロックCは、最も新しいブロックである。ブロックAが最も古い非投機的ブロックであるため、ブロックAはブロックB及びCを上回る優先順位を有することができる。ブロックBはブロックCより古いため、さらに、ブロックCが投機的である一方でブロックBは非投機的であるため、ブロックBはブロックCを上回る優先順位を有することができる。
プログラム実行は、プログラムが完了するまで、この方式で継続することができる。制御論理920は、1つのプログラム又は複数のプログラムのいずれかがブロックベースアーキテクチャ900上で動作することができるように構成できる。例えば、制御論理920は、各プロセス又はスレッドがコア905のサブセットに割り振られることができるようにコア905を区分してもよい。
図10は、ブロックベースアーキテクチャ1000が図9のメモリシステムとは別様に編成されたメモリシステムを使用できることを例示する。詳細には、図10は、複数の処理コア1005と制御論理1020とメモリシステムとを含むブロックベースアーキテクチャ1000を示す。メモリシステムは、各それぞれのコアのプライベートレベル1キャッシュ(L1$)1030〜1034、クロスバー1040、レベル2キャッシュ(L2$)1050、及びメインメモリ1010を含むことができる。ここで、クロスバー1040は、プライベートL1キャッシュ1030〜1034とL2キャッシュ1030との間でデータをルーティングするために使用できる。クロスバー1040とL2キャッシュ1050との異なる実装が、L2キャッシュ1050に対してのより多くの又はより少ない同時アクセスを可能にすることができる。一実施形態において、クロスバー1040は、メモリアクセスがL2キャッシュ1050の異なるバンクに対してであるとき、複数のL1キャッシュがL2キャッシュ1050に同時にアクセスすることを可能にすることができる。例えば、L2キャッシュは、各L1キャッシュに関連づけられたバンクを有することができる。別の実施形態において、クロスバー1040は、単一のL1キャッシュのみが所与の時間にL2キャッシュ1050にアクセスできるようにしてもよい。
図9及び図10のメモリシステムは、ブロックベースアーキテクチャで使用できる多くのとり得るメモリシステムのうち2つのみを例示していることが理解されるべきである。バリエーションには、異なる数又はレベルのキャッシュ、異なるキャッシュ編成(例えば、別個の命令及びデータキャッシュを提供することなど)、レベル間の異なるコネクティビティ、及び当分野で知られる他のメモリアーキテクチャを含むことができる。
X.例示的なコンピューティング環境
図11は、ブロックベースプロセッサにおける不良ジャンプ検出を含む説明された実施形態、手法、及びテクノロジーが実装され得る適切なコンピューティング環境1100の一般化された例を示す。例えば、コンピューティング環境1100は、本明細書において説明される分岐命令ターゲット位置を検証するための開示された手法を実装することができる。
図11は、ブロックベースプロセッサにおける不良ジャンプ検出を含む説明された実施形態、手法、及びテクノロジーが実装され得る適切なコンピューティング環境1100の一般化された例を示す。例えば、コンピューティング環境1100は、本明細書において説明される分岐命令ターゲット位置を検証するための開示された手法を実装することができる。
コンピューティング環境1100は、本テクノロジーが多様な汎用目的又は特別目的のコンピューティング環境に実装され得るので、本テクノロジーの使用法又は機能性の範囲に関していかなる限定も示唆するようには意図されない。例えば、開示されるテクノロジーは、他のコンピュータシステム構成で実装されてもよく、該コンピュータシステム構成には、ハンドヘルドデバイス、マルチプロセッサシステム、プログラマブル家庭用電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどが含まれる。開示されるテクノロジーはまた、分散コンピューティング環境で実現されてもよく、これにおいてタスクは、通信ネットワークを通じてリンクされたリモートの処理デバイスにより実行される。分散コンピューティング環境において、プログラムモジュール(ブロックベース命令ブロックの実行可能命令を含む)は、ローカル及びリモート双方のメモリ記憶デバイスに位置し得る。
図11を参照し、コンピューティング環境1100は、少なくとも1つのブロックベース処理ユニット1110及びメモリ1120を含む。図11において、この最も基本的な構成1130が破線内に含まれる。ブロックベース処理ユニット1110は、コンピュータ実行可能命令を実行し、実際の又は仮想のプロセッサであり得る。マルチ処理システムにおいて、複数の処理ユニットがコンピュータ実行可能命令を実行して処理パワーを増大させ、そのようなものとして、複数のプロセッサが同時に動作することができる。メモリ1120は、揮発メモリ(例えば、レジスタ、キャッシュ、RAM)、不揮発メモリ(例えば、ROM、EEPROM、フラッシュメモリ等)、又は上記2つのうち何らかの組み合わせであり得る。メモリ1120は、例えば、本明細書に説明されるテクノロジーを実施することができるソフトウェア1180、イメージ、及びビデオを記憶することができる。コンピューティング環境は、さらなる特徴を有してもよい。例えば、コンピューティング環境1100は、ストレージ1140、1つ以上の入力デバイス1150、1つ以上の出力デバイス1160、及び1つ以上の通信接続1170を含む。バス、コントローラ、又はネットワークなどの相互接続メカニズム(図示されていない)が、コンピューティング環境1100のコンポーネントを相互接続する。典型的に、オペレーティングシステムソフトウェア(図示されていない)が、コンピューティング環境1100内で実行する他のソフトウェアのオペレーティング環境を提供し、コンピューティング環境1100のコンポーネントのアクティビティを協調する。
ストレージ1140は、取外し可能又は取外し不能であり得、ストレージ1140には、磁気ディスク、磁気テープ若しくはカセット、CD‐ROM、CD‐RW、DVD、又は、情報を記憶するために使用でき、かつコンピューティング環境1100内でアクセスできる任意の他の媒体を含むことができる。ストレージ1140は、本明細書において説明されるテクノロジーを実装するために使用できるソフトウェア1180の命令、プラグインデータ、及びメッセージを記憶する。
入力デバイス1150は、タッチ入力デバイス、例えばキーボード、キーパッド、マウス、タッチスクリーンディスプレイ、ペン、又はトラックボールなど、音声入力デバイス、スキャニングデバイス、又は、コンピューティング環境1100に入力を提供する他のデバイスであり得る。オーディオについて、入力デバイス1150は、アナログ若しくデジタル形式でオーディオ入力を受け入れるサウンドカード若しくは同様のデバイス、又は、コンピューティング環境1100にオーディオサンプルを提供するCD‐ROMリーダであってもよい。出力デバイス1160は、ディスプレイ、プリンタ、スピーカー、CDライタ、又は、コンピューティング環境1100から出力を提供する他のデバイスであり得る。
通信接続1170は、別のコンピューティングエンティティに対しての通信媒体(例えば、接続ネットワーク)を通じた通信を可能にする。通信媒体は、コンピュータ実行可能命令、圧縮されたグラフィックス情報、ビデオ、又は他のデータなどの情報を変調されたデータ信号で伝達する。通信接続1170は、有線の接続(例えば、メガビット又はギガビットイーサネット(登録商標)、Infiniband、電気又は光ファイバ接続を通じたファイバチャネル)に限定されず、無線テクノロジー(例えば、Bluetooth(登録商標)、WiFi(登録商標)(IEEE802.11a/b/n)、WiMax(登録商標)、セルラー、衛星、レーザ、赤外線を介したRF接続)と開示されたエージェント、ブリッジ、及びエージェントデータ消費者にネットワーク接続を提供するための他の適切な通信接続とをさらに含む。仮想ホスト環境において、通信接続は、仮想ホストにより提供される仮想化されたネットワーク接続であってもよい。
開示された方法のいくつかの実施形態は、開示されたテクノロジーのうちすべて又は一部をコンピューティングクラウド1190に実装するコンピュータ実行可能命令を用いて実行されてもよい。例えば、開示されたコンパイラ及び/又はブロックベースプロセッササーバは、コンピューティング環境1130内に位置し、あるいは、開示されたコンパイラは、コンピューティングクラウド1190に位置するサーバ上で実行されてもよい。いくつかの例において、開示されたコンパイラは、従来の中央処理ユニット(例えば、RISC又はCISCプロセッサ)上で実行される。
コンピュータ読取可能媒体は、コンピューティング環境1100内でアクセスできる任意の利用可能媒体である。限定でなく例として、コンピューティング環境1100を用いて、コンピュータ読取可能媒体には、メモリ1120及び/又はストレージ1140が含まれる。容易に理解されるであろうように、用語のコンピュータ読取可能記憶媒体には、メモリ120及びストレージ1140などのデータストレージの媒体が含まれ、変調されたデータ信号などの送信媒体は含まれない。
X.開示されたテクノロジーのさらなる例
開示された構成要件のさらなる例が、上記で論じられた例に従ってここに論じられる。
開示された構成要件のさらなる例が、上記で論じられた例に従ってここに論じられる。
一実施形態において、ブロックベースコンピューティングシステムが、複数のプロセッサコアと制御論理とを含む。複数のプロセッサコアは、第1の命令ブロックの命令を実行し、かつ第1の命令ブロックがコミットされる前に第2の命令ブロックのターゲットアドレスを生成するように構成された第1のプロセッサコアを含む。制御論理は、第1の命令ブロックがコミットされる前に、第2の命令ブロックのターゲットアドレスを受信し、かつ第2の命令ブロックの非投機的実行を開始するように構成される。ブロックベースコンピューティングシステムは、複数のプロセッサコアにより共有されたリソースをさらに含んでもよい。制御論理は、上記共有されたリソースに対するアクセスを、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る上記リソースに対しての優先順位を有するように、優先順位づけるようにさらに構成されてもよい。複数のプロセッサコアにより共有されたリソースは、例えば、キャッシュ、レジスタファイル、又はメモリであり得る。第2の命令ブロックの非投機的実行を開始することは、第1の命令ブロックのヘッダ内にエンコードされたエグジットタイプ情報に少なくとも部分的に基づいてもよい。複数のプロセッサコアのそれぞれのプロセッサコアは、プライベート命令キャッシュを含んでもよい。第2の命令ブロックの実行を開始することは、第2の命令ブロックを複数のプロセッサコアのうち第2のコアにロードすることを含んでもよい。第1の命令ブロックは、第1のコアの第1の命令ウィンドウにロードされてもよい。第2の命令ブロックの実行を開始することは、第2の命令ブロックを第1のコアの第2の命令ウィンドウにロードすることを含んでもよい。
一実施形態において、ブロックベースアーキテクチャにおいて分岐を実行する方法が、ブロックベースアーキテクチャの第1のコアを用いて第1の命令ブロックの1つ以上の命令を実行することと、第1の命令ブロックがコミットされる前に、第2の命令ブロックの命令の非投機的実行を開始することと、を含む。方法は、第1の命令ブロックの命令のプレディケートを評価し、プレディケート評価に少なくとも部分的に基づいて、上記開始することを実行することをさらに含んでもよい。方法は、第1の命令ブロックの命令ヘッダに記憶されたエグジットタイプ情報を評価することと、エグジットタイプ情報に少なくとも部分的に基づいて上記開始することを実行することと、をさらに含んでもよい。開始された、非投機的実行は、第2の命令ブロックをブロックベースアーキテクチャのL1キャッシュにプリフェッチすることを含んでもよい。開始された、非投機的実行は、第2の命令ブロックをブロックベースアーキテクチャの第2のコアの命令ウィンドウにフェッチすることを含んでもよい。開始された、非投機的実行は、第2の命令ブロックをブロックベースアーキテクチャの第1のコアの命令ウィンドウにフェッチすることを含む。第2の命令ブロックは、上記開始することの前にブロックベースアーキテクチャの第2のコアにロードされてもよく、開始された、非投機的実行は、第2のコアにロードされた第2の命令ブロックをリフレッシュすることを含んでもよい。開始された、非投機的実行は、第2の命令ブロックのヘッダをプリフェッチすることを含んでもよい。開始された、非投機的実行は、第2の命令ブロックのヘッダをプリフェッチすることを含んでもよい。方法は、ブロックベースアーキテクチャの共有されたリソースに対するアクセス要求を、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る上記共有されたリソースに対しての優先順位を有するように、優先順位づけることをさらに含んでもよい。共有されたリソースは、例えば、キャッシュ、レジスタファイル、又はメモリサブシステムであり得る。
一実施形態において、コンピュータ読取可能記憶デバイス又はメモリが、ソースコードをブロックベースコンピュータアーキテクチャ上で実行可能であるマシンコードにコンパイルする方法をプロセッサに実行させる命令を有する。命令は、ブロックベースコンピュータアーキテクチャ上で実行可能なマシンコード命令のストリームを生成することをプロセッサにさせる命令を含み、マシンコード命令のストリームは複数の命令ブロックに分割される。命令は、複数の命令ブロックのそれぞれの命令ブロックのエグジットタイプを決定することをプロセッサにさせる命令を含む。命令は、それぞれの命令ブロックのエグジットタイプをそれぞれの命令ブロックのヘッダ内にエンコードすることをプロセッサにさせる命令を含む。命令は、それぞれの命令ブロック内の分岐ターゲットアドレスを計算する命令を早めることをプロセッサにさせる命令をさらに含んでもよい。エグジットタイプは、下記タイプのうち少なくとも1つ以上を含んでもよい:ヌル、順次、オフセット、間接、コール、又はリターン。
開示された対象事項の原理が適用され得る多くのとり得る実施形態を考慮し、例示された実施形態は単に好適な例であり、特許請求の範囲をこれら好適な例に限定するものとみなされるべきではないことが認識されるべきである。むしろ、請求される対象事項の範囲は下記の請求項により定義される。ゆえに、これら請求項の範囲内に入るすべてを我々の発明として請求する。
Claims (15)
- 第1の命令ブロックの命令を実行し、かつ前記第1の命令ブロックがコミットされる前に第2の命令ブロックのターゲットアドレスを生成するように構成された第1のプロセッサコアを含む複数のプロセッサコアと、
前記第1の命令ブロックがコミットされる前に、前記第2の命令ブロックの前記ターゲットアドレスを受信し、かつ前記第2の命令ブロックの非投機的実行を開始するように構成された制御論理と、
を含むブロックベースコンピューティングシステム。 - 前記複数のプロセッサコアにより共有されたリソース、をさらに含み、前記制御論理は、前記共有されたリソースに対するアクセスを、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る前記リソースに対しての優先順位を有するように、優先順位づけるようにさらに構成される、請求項1に記載のブロックベースコンピューティングシステム。
- 前記第2の命令ブロックの非投機的実行を開始することは、前記第1の命令ブロックのヘッダ内にエンコードされたエグジットタイプ情報に少なくとも部分的に基づく、請求項1又は2のうちいずれか1項に記載のブロックベースコンピューティングシステム。
- 前記第2の命令ブロックの実行を開始することは、前記第2の命令ブロックを前記複数のプロセッサコアのうち第2のコアにロードすることを含む、請求項1乃至3のうちいずれか1項に記載のブロックベースコンピューティングシステム。
- 前記第1の命令ブロックは、前記第1のコアの第1の命令ウィンドウにロードされ、前記第2の命令ブロックの実行を開始することは、前記第2の命令ブロックを前記第1のコアの第2の命令ウィンドウにロードすることを含む、請求項1乃至4のうちいずれか1項に記載のブロックベースコンピューティングシステム。
- ブロックベースアーキテクチャにおいて分岐を実行する方法であって、
前記ブロックベースアーキテクチャの第1のコアを用いて第1の命令ブロックの1つ以上の命令を実行することと、
前記第1の命令ブロックがコミットされる前に、第2の命令ブロックの命令の非投機的実行を開始することと、
を含む方法。 - 前記第1の命令ブロックの前記命令のプレディケートを評価することと、
前記プレディケート評価に少なくとも部分的に基づいて、前記開始することを実行することと、
をさらに含む請求項6に記載の方法。 - 前記第1の命令ブロックの命令ヘッダ内に記憶されたエグジットタイプ情報を評価することと、
前記エグジットタイプ情報に少なくとも部分的に基づいて、前記開始することを実行することと、
をさらに含む請求項6又は7のうちいずれか1項に記載の方法。 - 前記開始された、非投機的実行は、前記第2の命令ブロックを前記ブロックベースアーキテクチャのL1キャッシュにプリフェッチすることを含む、請求項6乃至8のうちいずれか1項に記載の方法。
- 前記開始された、非投機的実行は、前記第2の命令ブロックを前記ブロックベースアーキテクチャの第2のコアの命令ウィンドウにフェッチすることを含む、請求項6乃至9のうちいずれか1項に記載の方法。
- 前記第2の命令ブロックは、前記開始することの前に前記ブロックベースアーキテクチャの第2のコアにロードされ、前記開始された、非投機的実行は、前記第2のコアにロードされた前記第2の命令ブロックをリフレッシュすることを含む、請求項6乃至10のうちいずれか1項に記載の方法。
- 前記開始された、非投機的実行は、前記第2の命令ブロックのヘッダをプリフェッチすることを含む、請求項6乃至11のうちいずれか1項に記載の方法。
- 前記ブロックベースアーキテクチャの共有されたリソースに対するアクセス要求を、より古い非投機的命令ブロックがより新しい非投機的命令ブロック及び投機的命令ブロックを上回る前記共有されたリソースに対しての優先順位を有するように、優先順位づけること、
をさらに含む請求項6乃至12のうちいずれか1項に記載の方法。 - ブロックベースアーキテクチャのための命令を有するコンピュータ読取可能記憶デバイス又はメモリであって、前記命令は前記ブロックベースアーキテクチャにより実行されると前記ブロックベースアーキテクチャに請求項6乃至13のうちいずれか1項に記載の方法を実行させる、コンピュータ読取可能記憶デバイス又はメモリ。
- ソースコードをブロックベースコンピュータアーキテクチャ上で実行可能なマシンコードにコンパイルする方法をプロセッサに実行させる命令を有するコンピュータ読取可能記憶デバイス又はメモリであって、前記命令は、
前記プロセッサに、前記ブロックベースコンピュータアーキテクチャ上で実行可能なマシンコード命令のストリームを生成させる命令であって、前記マシンコード命令のストリームは複数の命令ブロックに分割される、命令と、
前記プロセッサに、前記複数の命令ブロックのそれぞれの命令ブロックのエグジットタイプを決定させる命令と、
前記プロセッサに、それぞれの命令ブロックの前記エグジットタイプを前記それぞれの命令ブロックのヘッダ内にエンコードさせる命令と、
を含むコンピュータ読取可能記憶デバイス又はメモリ。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/752,636 | 2015-06-26 | ||
US14/752,636 US20160378488A1 (en) | 2015-06-26 | 2015-06-26 | Access to target address |
PCT/US2016/038854 WO2016210031A1 (en) | 2015-06-26 | 2016-06-23 | Block-based architecture with parallel execution of successive blocks |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018519602A true JP2018519602A (ja) | 2018-07-19 |
Family
ID=56369217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017566304A Pending JP2018519602A (ja) | 2015-06-26 | 2016-06-23 | 連続ブロックの並列実行を有するブロックベースアーキテクチャ |
Country Status (15)
Country | Link |
---|---|
US (1) | US20160378488A1 (ja) |
EP (2) | EP3314401B1 (ja) |
JP (1) | JP2018519602A (ja) |
KR (1) | KR20180021812A (ja) |
CN (1) | CN107810478A (ja) |
AU (1) | AU2016281603A1 (ja) |
BR (1) | BR112017024351A2 (ja) |
CA (1) | CA2986061A1 (ja) |
CL (1) | CL2017003263A1 (ja) |
CO (1) | CO2017013272A2 (ja) |
HK (1) | HK1246442A1 (ja) |
IL (1) | IL256171A (ja) |
MX (1) | MX2017016200A (ja) |
PH (1) | PH12017550128A1 (ja) |
WO (1) | WO2016210031A1 (ja) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10346168B2 (en) | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US11755484B2 (en) | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
US10409606B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Verifying branch targets |
US9940136B2 (en) | 2015-06-26 | 2018-04-10 | Microsoft Technology Licensing, Llc | Reuse of decoded instructions |
US10169044B2 (en) | 2015-06-26 | 2019-01-01 | Microsoft Technology Licensing, Llc | Processing an encoding format field to interpret header information regarding a group of instructions |
US10409599B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Decoding information about a group of instructions including a size of the group of instructions |
US9946548B2 (en) | 2015-06-26 | 2018-04-17 | Microsoft Technology Licensing, Llc | Age-based management of instruction blocks in a processor instruction window |
US10175988B2 (en) | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
US10191747B2 (en) | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
US9952867B2 (en) | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
US10095519B2 (en) | 2015-09-19 | 2018-10-09 | Microsoft Technology Licensing, Llc | Instruction block address register |
US11531552B2 (en) * | 2017-02-06 | 2022-12-20 | Microsoft Technology Licensing, Llc | Executing multiple programs simultaneously on a processor core |
CN109101276B (zh) | 2018-08-14 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 在cpu中执行指令的方法 |
US10824429B2 (en) | 2018-09-19 | 2020-11-03 | Microsoft Technology Licensing, Llc | Commit logic and precise exceptions in explicit dataflow graph execution architectures |
CN109783143B (zh) * | 2019-01-25 | 2021-03-09 | 贵州华芯通半导体技术有限公司 | 用于流水线指令流的控制方法和控制设备 |
US20210096861A1 (en) * | 2019-10-01 | 2021-04-01 | Higon Austin R&D Center | System and method to prefetch pointer based structures |
CN112882753A (zh) * | 2019-11-29 | 2021-06-01 | 中科寒武纪科技股份有限公司 | 程序运行方法及装置 |
CN111506520B (zh) * | 2020-07-01 | 2020-09-22 | 腾讯科技(深圳)有限公司 | 一种地址生成的方法、相关装置以及存储介质 |
CN117707619A (zh) * | 2023-11-02 | 2024-03-15 | 上海攸化技术管理咨询有限公司 | 指令的编码方式、运算单元、运算模块及运算方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69327688T2 (de) * | 1992-08-12 | 2000-09-07 | Advanced Micro Devices, Inc. | Befehlsdecoder |
US5832297A (en) * | 1995-04-12 | 1998-11-03 | Advanced Micro Devices, Inc. | Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations |
GB2393274B (en) * | 2002-09-20 | 2006-03-15 | Advanced Risc Mach Ltd | Data processing system having an external instruction set and an internal instruction set |
US7882339B2 (en) * | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
JP4339371B2 (ja) * | 2007-03-22 | 2009-10-07 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置および情報処理方法 |
WO2013081556A1 (en) * | 2011-12-01 | 2013-06-06 | National University Of Singapore | Polymorphic heterogeneous multi-core architecture |
US9182986B2 (en) * | 2012-12-29 | 2015-11-10 | Intel Corporation | Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region |
US9594700B2 (en) * | 2013-04-17 | 2017-03-14 | Nvidia Corporation | Speculative memory controller |
-
2015
- 2015-06-26 US US14/752,636 patent/US20160378488A1/en not_active Abandoned
-
2016
- 2016-06-23 EP EP16736333.2A patent/EP3314401B1/en active Active
- 2016-06-23 BR BR112017024351A patent/BR112017024351A2/pt not_active Application Discontinuation
- 2016-06-23 MX MX2017016200A patent/MX2017016200A/es unknown
- 2016-06-23 CA CA2986061A patent/CA2986061A1/en not_active Abandoned
- 2016-06-23 CN CN201680037706.2A patent/CN107810478A/zh not_active Withdrawn
- 2016-06-23 AU AU2016281603A patent/AU2016281603A1/en not_active Abandoned
- 2016-06-23 JP JP2017566304A patent/JP2018519602A/ja active Pending
- 2016-06-23 KR KR1020187001900A patent/KR20180021812A/ko unknown
- 2016-06-23 EP EP19218262.4A patent/EP3660668A1/en not_active Withdrawn
- 2016-06-23 WO PCT/US2016/038854 patent/WO2016210031A1/en active Application Filing
-
2017
- 2017-11-08 PH PH12017550128A patent/PH12017550128A1/en unknown
- 2017-12-07 IL IL256171A patent/IL256171A/en unknown
- 2017-12-19 CL CL2017003263A patent/CL2017003263A1/es unknown
- 2017-12-21 CO CONC2017/0013272A patent/CO2017013272A2/es unknown
-
2018
- 2018-05-07 HK HK18105888.4A patent/HK1246442A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
US20160378488A1 (en) | 2016-12-29 |
CL2017003263A1 (es) | 2018-06-29 |
EP3314401A1 (en) | 2018-05-02 |
WO2016210031A1 (en) | 2016-12-29 |
AU2016281603A1 (en) | 2017-11-30 |
PH12017550128A1 (en) | 2018-02-26 |
MX2017016200A (es) | 2018-03-01 |
IL256171A (en) | 2018-02-28 |
CA2986061A1 (en) | 2016-12-29 |
EP3314401B1 (en) | 2020-02-12 |
CO2017013272A2 (es) | 2018-03-20 |
BR112017024351A2 (pt) | 2018-07-31 |
EP3660668A1 (en) | 2020-06-03 |
HK1246442A1 (zh) | 2018-09-07 |
KR20180021812A (ko) | 2018-03-05 |
CN107810478A (zh) | 2018-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3314401B1 (en) | Block-based architecture with parallel execution of successive blocks | |
EP3350712B1 (en) | Register read/write ordering | |
CN107810480B (zh) | 根据性能度量的指令块分配 | |
EP3314398B1 (en) | Reuse of decoded instruction blocks in a block based architecture | |
US11681531B2 (en) | Generation and use of memory access instruction order encodings | |
US10936316B2 (en) | Dense read encoding for dataflow ISA | |
US10095519B2 (en) | Instruction block address register | |
US10445097B2 (en) | Multimodal targets in a block-based processor | |
US10198263B2 (en) | Write nullification | |
US20170083319A1 (en) | Generation and use of block branch metadata | |
US20170083320A1 (en) | Predicated read instructions | |
US10061584B2 (en) | Store nullification in the target field | |
US20170083330A1 (en) | Multi-nullification | |
US20170083325A1 (en) | Dynamic generation of null instructions | |
EP3350690B1 (en) | Implicit program order | |
WO2017048645A1 (en) | Multimodal targets in a block-based processor |