JP2018518775A - 分離されるプロセッサ命令ウィンドウとオペランドバッファ - Google Patents
分離されるプロセッサ命令ウィンドウとオペランドバッファ Download PDFInfo
- Publication number
- JP2018518775A JP2018518775A JP2017565975A JP2017565975A JP2018518775A JP 2018518775 A JP2018518775 A JP 2018518775A JP 2017565975 A JP2017565975 A JP 2017565975A JP 2017565975 A JP2017565975 A JP 2017565975A JP 2018518775 A JP2018518775 A JP 2018518775A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- block
- instruction block
- window
- instructions
- 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
- 239000000872 buffer Substances 0.000 title claims abstract description 45
- 238000000926 separation method Methods 0.000 claims abstract description 7
- 238000000034 method Methods 0.000 claims description 58
- 238000013507 mapping Methods 0.000 claims description 10
- 238000003491 array Methods 0.000 abstract description 2
- 238000012545 processing Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 13
- 238000009826 distribution Methods 0.000 description 9
- 230000003139 buffering effect Effects 0.000 description 5
- 238000012856 packing Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000007620 mathematical function Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 241000761456 Nops Species 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit 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
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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
- G06F9/381—Loop buffering
-
- 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
- G06F9/384—Register renaming
-
- 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/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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
- Logic Circuits (AREA)
- Storage Device Security (AREA)
Abstract
命令ブロックベースのマイクロアーキテクチャにおけるプロセッサコアは、命令ウィンドウとオペランドバッファが独立のオペレーションについて分離されるように構成され、ブロック内の命令は、オペランドバッファ内に維持される制御ビットやオペランド等のリソースに結び付けられていない。代わりに、ブロック内の命令及びリソースの中でポインタが確立され、その結果、これらのポインタに従うことにより、リフレッシュされた命令ブロック(すなわち、命令キャッシュから再フェッチすることなく再使用される命令ブロック)について、制御状態を確立することができる。オペランド空間からの命令ウィンドウのそのような分離は、オペランドと制御ビットが予め検証されるため、特に、(例えばタイトなループを使用するプログラムコードを実行するときに)リフレッシュが利用される多数のコアアレイにおいて、より大きなプロセッサ効率を提供することができる。
Description
命令セットアーキテクチャ(ISAs:instruction set architectures)及びプロセッサの設計者は、電力と性能のトレードオフを行う。例えば設計者が、より高い性能を伝える命令を有するISAを選択する場合、プロセッサによる電力消費も同様に高くなる可能性がある。あるいは、設計者が、より低い電力消費の命令を有するISAを選択する場合、性能が低くなる可能性がある。電力消費は、算術論理演算ユニット(ALU:arithmetic logic unit)、キャッシュライン又はレジスタのように、実行中に命令によって使用されるプロセッサのハードウェアリソースの量に結び付けられることがある。より大量のそのようなハードウェアリソースの使用は、より高い電力消費という代償を払ってより高い性能を伝えることがある。あるいは、より少量のハードウェアリソースの使用は、より低い性能という代償を払ってより低い電力消費をもたらすことがある。コンパイラを使用して、高レベルコードをコンパイルして、ISA及びプロセッサアーキテクチャと互換性のある命令にすることができる。
命令ブロックベースのマイクロアーキテクチャにおけるプロセッサコアは、命令ウィンドウとオペランドバッファが独立のオペレーションについて分離されるように構成され、ブロック内の命令は、オペランドバッファ内に維持される制御ビットやオペランド等のリソースに厳密には結び付けられていない。代わりに、ブロック内の命令及びリソースの中でポインタが確立され、その結果、これらのポインタに従うことにより、リフレッシュされた命令ブロック(すなわち、命令キャッシュから再フェッチすることなく再使用される命令ブロック)について、制御状態を確立することができる。オペランド空間からの命令ウィンドウのそのような分離は、特に、(例えばタイトなループを使用するプログラムコードを実行するときに)リフレッシュが利用される多数のコアアレイ(multiple core arrays)において、より大きなプロセッサ効率を提供することができる。なぜなら、オペランドと制御ビットが予め検証(pre-validated)されるからである。
この発明の概要は、以下に発明の詳細な説明で更に説明される概念の選択を簡略化した形で紹介するために提供される。この発明の概要は、特許請求に係る主要な特徴又は本質的特徴を特定するようには意図されておらず、特許請求に係る主題の範囲を画定する際の助けとして用いられるようにも意図されていない。更に、特許請求に係る主題は、本開示のいずれかの部分で示される不都合な点のいずれか又は全てを解決する実装に限定されない。
図面において、同様の参照数字は同様の要素を示す。別段の定めがない限り、要素はスケーリングされて描かれていない。
図1は、本発明の命令ブロックの年代ベースの管理(age-based management)を利用することができる例示のコンピューティング環境100を示す。環境はコンパイラ105を含み、コンパイラ105を利用して、プログラム115から、符号化されたマシン実行可能命令110を生成してよい。命令110をプロセッサアーキテクチャ120によって処理することができる。プロセッサアーキテクチャ120は、例えば4個と128個の命令の間を含め、可変なサイズの命令のブロックを処理するように構成される。
プロセッサアーキテクチャ120は、典型的に、(代表的に参照数字125によって示される)複数のプロセッサコアをタイル化された構成で含む。複数のプロセッサコアは、オンチップネットワーク(図示せず)によって相互接続され、更に(代表的に参照数字130によって示される)1つ以上のレベル2(L2)キャッシュと相互運用される。コア及びキャッシュの数字及び構成は実装によって変化する可能性があるが、物理コアを、プログラム115のランタイム中に「コンポージング(composing)」と呼ばれるプロセスで一緒にマージして、より多くの処理電力をプログラム実行に充てることを可能にすることができる1つ以上の大きな論理プロセッサにすることができる。あるいは、プログラム実行が適切なスレッドレベルの並列性をサポートするとき、独立に機能し、独立のスレッドからの命令を実行するように、コア125を、「デコンポージング(decomposing)」と呼ばれるプロセスで分割することができる。
図2は、例示のプロセッサコア125の一部の簡略化されたブロック図である。図示されるように、プロセッサコア125は、フロントエンド制御ユニット202、命令キャッシュ204、分岐予測器(branch predictor)206、命令デコーダ108、命令ウィンドウ210、左オペランドバッファ212、右オペランドバッファ214、算術論理演算ユニット(ALU)216、別のALU218、レジスタ220及びロード/ストアキュー(load/store queue)222を含んでよい。場合によっては、(矢印で示される)バスがデータ及び命令を担持してよく、一方、他の場合には、バスがデータ(例えばオペランド)又は制御信号を担持してもよい。例えばフロントエンド制御ユニット202は、制御信号のみを担持するバスを介して、他の制御ネットワークと通信してもよい。図2は、プロセッサコア125について、特定の配置構成で配置される或る数の例示のコンポーネントを示しているが、特定の実装の必要性に応じて異なるように配置されるより多くの又はより少ないコンポーネントが存在してもよい。
フロントエンド制御ユニット202は、プロセッサコア及び回路を通る情報の流れを制御してその中の活動を調整するように構成される回路を含んでよい。フロントエンド制御ユニット202は、プロセッサコアが取り得る動作構成の各々を状態が列挙する、有限状態マシン(FSM:finite state machine)を実装する回路も含んでよい。(以下で説明される)オペコード及び/又は他の入力(例えばハードウェアレベル信号)を使用して、フロントエンド制御ユニット202内のFSM回路は、次の状態を決定して出力を制御することができる。
したがって、フロントエンド制御ユニット202は、命令デコーダ208により処理するために、命令キャッシュ204から命令をフェッチすることができる。フロントエンド制御ユニット202は、制御ネットワーク又はバス上で、制御情報をプロセッサコア125の他の部分と交換してもよい。例えばフロントエンド制御ユニットは、バックエンド制御ユニット224と制御情報を交換してもよい。一部の実装では、フロントエンド制御ユニットとバックエンド制御ユニットが単一の制御ユニットに統合されてもよい。
フロントエンド制御ユニット202は、プロセッサアーキテクチャ120(図1)の様々なコア及び他の部分のコントロールを調整及び管理してもよい。したがって、例えば命令のブロックが、複数のコア上で同時に実行していることがあり、フロントエンド制御ユニット202は、命令の様々なブロックの実行のために、必要に応じて、制御ネットワークを介して制御情報を他のコアと交換して同期を確実にすることができる。
フロントエンド制御ユニット202は更に、アトミックに実行される命令ブロックに関する制御情報及びメタ情報を処理してよい。例えばフロントエンド制御ユニット202は、命令ブロックに関連付けられるブロックヘッダを処理することができる。以下でより詳細に議論されるように、ブロックヘッダは、命令ブロックに関する制御情報及び/又はメタ情報を含んでもよい。したがって、フロントエンド制御ユニット202は、ブロックヘッダ内の様々なフィールドを処理するよう、組合せロジック、状態マシン及びフリップフロップ等の一時ストレージユニットを含むことができる。
フロントエンド制御ユニット202202は、単一の命令及び複数の命令をクロックサイクルごとにフェッチして復号してよい。復号された命令は、プロセッサコアハードウェア内にバッファとして実装される命令ウィンドウ210に格納されてよい。命令ウィンドウ210は、一部の実装では、命令スケジューラ230をサポートすることができる。命令スケジューラ230は、プレディケーション(predications)(叙述)及びオペランドのような各々の復号された命令の入力のレディ状態(ready state)を維持してよい。例えばその入力(もしあれば)の全ての準備が完了(ready)しているとき、所与の命令が命令スケジューラ230によって起こされて、発行する準備ができる。
命令が発行される前に、その命令によって必要とされる全てのオペランドが、必要に応じて左オペランドバッファ212及び/又は右オペランドバッファ214に格納されてよい。命令のオペコードに依存して、ALU216及び/又はALU218又は他の機能ユニットを使用して、オペレーションがオペランドに対して実行されてよい。ALUの出力は、オペランドバッファに格納されるか、1つ以上のレジスタ220内に格納されてよい。データフロー順で発行するストアオペレーション(store operations)は、命令ブロックがコミットするまで、ロード/ストアキュー222内にキューされてよい。命令のブロックがコミットするとき、ロード/ストアキュー222は、コミットされたブロックのストアをメモリに書き込んでよい。分岐予測器206は、分岐終了タイプ(branch exit types)に関するブロックヘッダ情報を処理し、分岐予測を作成する際にその情報を要因として含めてよい。
上記のように、プロセッサアーキテクチャ120は典型的に、フェッチされ、実行され、アトミックにコミットされるブロック内に編成される命令を利用する。したがって、プロセッサコアは、ひとまとめに単一のブロックに属している命令をフェッチし、これらをプロセッサコアの内部の実行リソースにマップし、命令を実行し、その結果をアトミックなやり方でコミットしてよい。プロセッサは、全ての命令の結果をコミットするか、全体のブロックの実行を無効にしてよい。ブロックの内部の命令は、データフロー順に実行してよい。加えて、プロセッサは、ブロックの内部の命令が、メッセージ又は他の適切な形の通信を使用して相互に直接通信することを許容してよい。したがって、結果を生じる命令は、結果をレジスタファイルに書き込む代わりに、その結果を使用するブロック内の別の命令にその結果を通信してよい。例として、レジスタR1及びR2に格納された値を加算(add)する命令は、以下の表1に示されるように表されてよい:
このように、ソースオペランドは命令では指定されず、代わりに、それらのソースオペランドは、ADD命令をターゲットとする命令によって指定される。コンパイラ105(図1)は、命令110のコンパイル中にコントロール及びデータ依存性を明示的に符号化することができ、これにより、ランタイムにこれらの依存性を再発見することからプロセッサコアを解放することができる。この結果、これらの命令の実行中に、プロセッサの負荷を低減し、エネルギをセーブすることができるので有利である。例として、コンパイラは、全てのコントロール依存性をデータフロー命令に変換するプレディケーションを使用してもよい。これらの技術を使用して、電力を多く必要とする(power-hungry)レジスタファイルへのアクセス数を減らすことができる。以下の表2は、そのような命令のための汎用命令フォーマットの例を示す。
各命令は、32ビット、64ビット又は別のサイズのように適切なサイズであってよい。表2に示される例では、各命令は、OPCODE(オペコード)フィールド、PR(プレディケーション)フィールド、BID(ブロードキャストID)フィールド、XOP(拡張オペコード(extended OPCODE))フィールド、TARGET1フィールド及びTARGET2フィールドを含んでよい。オペコードフィールドは、命令又は命令のブロックについて、加算(add)、読み出し(read)、書込み(write)又は乗算(multiply)等の一意のオペレーションコードを指定してよい。PR(プレディケーション)フィールドは、命令に関連付けられる任意のプレディケーションを指定してよい。例えば2ビットのPRフィールドは、以下のように使用されてよい:00−プレディケート付でない(not predicated)、01−リザーブ(reserved)、10−プレディケートが偽(predicated on false)及び11−プレディケートが真(predicated on true)。したがって、例えば比較の結果が真である場合にのみ命令が実行する場合、その命令は、その比較を実行する別の命令の結果に対してプレディケートされてよい。BID(ブロードキャストID)フィールドは、ブロック内の任意の数のコンシューマ命令(consumer instructions)に対してオペランドを送ることをサポートすることができる。2ビットのBIDフィールドは、命令がそのオペランドのうちの1つを受け取るブロードキャストチャネルを符号化するために使用されてよい。XOP(拡張オペコード)フィールドは、オペコードのタイプを拡張することをサポートすることができる。TARGET1及びTARGET2フィールドは、最大で2つまでのターゲット命令を符号化することを許容することができる。ターゲットフィールドは、プロデューサ命令(producer instruction)の結果のコンシューマ命令を指定することができ、したがって命令間の直接通信を許容する。
各命令ブロックは、ブロックに関連する制御情報及び/又はメタ情報等のように、命令ブロックに関連付けられる特定の情報を有することがある。この情報は、プロセッサアーキテクチャ120における実行のために命令110へのプログラムのコンパイル中にコンパイラ105によって生成されてよい。この情報の一部が、命令ブロックのコンパイル中にコンパイラによって抽出されてよく、次いで、ランタイム中に命令の性質を検査する。
加えて、命令ブロックに関連付けられる情報は、メタ情報であってもよい。例えばそのような情報は、特別命令(special instructions)を使用して、あるいは命令ブロックに関連付けられる関連情報を有する可能性があるレジスタ又は他のメモリに関連するターゲット符号化(target encoding)を提供する命令を使用して、プロセッサコアに提供されてよい。特別命令の場合、そのような命令のオペコードフィールドを使用して、命令ブロックに関連する情報を伝えることができる。別の例では、そのような情報は、プロセッサ状態語(PSW:processor status word)の一部として維持されてもよい。例えばこの情報は、有利には、プロセッサが命令ブロックをより効率的に実行することを助けることができる。
ブロックヘッダ、特別命令、メモリ参照位置(memory referenced locations)、プロセッサ状態語(PSW)又はこれらの様々な組合せを使用して、様々なタイプの情報をプロセッサコアに提供することができる。例示の命令ブロックヘッダ300が図3に示されている。この説明的な例では、ブロックヘッダ300は128ビットであり、ブロックのプログラムカウンタからオフセット0で始まる。各フィールドのそれぞれの開始及び終了も示されている。フィールドを以下の表3で説明する。
図3に図示され、表3に説明されるブロックヘッダは、複数のフィールドを含むが、これは例示であるように意図されており、特定の実装に他のフィールド配置が利用されてよい。
説明的な例では、コンパイラ105(図1)は、ブロックヘッダ内に含めるため又は特定の命令のために情報を選択してよく、そのような情報を、命令の性質に基づいて及び/又は高性能若しくは低電力といった処理要件の性質に基づいて、プロセッサコアに提供することができる。これは、有利には、性能と電力消費との間のトレードオフのより最適なバランシングを可能にすることができる。多数のコアを伴う高性能演算のような特定のタイプの処理アプリケーションにとって、大量の情報が望ましいオプションである可能性がある。あるいは、モノのインターネット(IoT:Internet of Things)で使用される組込みプロセッサ、モバイルデバイス、ウェアラブルデバイス、ヘッドマウントディスプレイ(HMD)デバイス又は他の組込み演算タイプのアプリケーションといった他のタイプの処理アプリケーションにとっては、より少ない情報が望ましいオプションである可能性がある。
ブロックヘッダ又は特別命令を使用して通信される情報の範囲を、ブロック内の命令の性質に応じて調整することができる。例えば命令ブロックが、循環するように実行されるループを含む場合、そのブロックに関連付けられる制御情報をカプセル化するために、より広範な情報が必要とされる可能性がある。追加の制御情報は、プロセッサコアがループをより効率的に実行することを可能にし、これにより性能を改善することができる。
あるいは、めったに実行されない命令ブロックが存在する場合、次いで比較的少ない情報で十分であり得る。例えば命令ブロックが、幾つかのプレディケート制御ループ(predicated control loops)を含む場合、より多くの情報が必要とされることがある。同様に、命令ブロックがかなりの命令レベルの並列性を有する場合、ブロックヘッダ又は特別命令の一部として、より多くの情報が必要とされることがある。
ブロックヘッダ又は特別命令内の追加の制御情報を使用して、例えば命令ブロックにおける命令レベルの並列性を効率的に利用することができる。命令ブロックが幾つかの分岐予測を含む場合、より多くの情報が必要とされることがある。分岐予測に関する追加の制御情報は、結果としてパイプラインのフラッシュ(flushes)を減らすことができるため、典型的には、更なる効率性でコードの実行を強化することになる。
ブロックヘッダ内のフィールドに対応する機能性を組み合わせてもよく、あるいは更に分割してもよいことに留意されたい。同様に、特別命令は、図3及び表3に示されるフィールドのうちのいずれか1つに関連する情報を提供してよく、あるいはそのようなフィールドからの情報を組み合わせてもよい。例えば図3及び表3の例示的なブロックヘッダは、別個のIDフィールドとSIZEフィールドを含むが、これらの2つのフィールドを単一のフィールドに組み合わせてもよい。
同様に、単一の特別命令は、復号されるとき、命令ブロックのサイズに関する情報及びIDフィールド内の情報を提供することがある。別段の記載がない限り、特別命令は命令ブロックのどの場所に含まれてもよい。例えばBLOCK_SIZE #size命令は、命令ブロックのサイズの値を含む即値フィールドを含んでよい。即値フィールドは、サイズ情報を提供する整数値を含んでよい。あるいは、即値フィールドは、サイズ情報に関連する符号化された値を含んでよく、その結果、例えばロジック、レジスタ、メモリ又はコードストリームのうちの1つを使用して表現され得るサイズテーブル内の値をルックアップすることによって、符号化された値を復号することにより、サイズ情報を取得することができる。別の例では、BLOCK_ID #id特別命令がブロックID番号を伝達することができる。
別個の数学的関数又はメモリベースのテーブルは、ブロックIDをブロックヘッダのメモリアドレスにマップしてもよい。このような命令の一部として伝達されるブロックIDは、命令の各ブロックに一意であり得る。別の例では、BLOCK_HDR_ID #id命令が、ブロックヘッダID番号を伝達してもよい。別個の数学的関数又はメモリベースのテーブルが、ブロックIDをブロックヘッダのメモリアドレスにマップしてもよい。そのような命令の一部として伝達されるブロックIDは、同じヘッダ構造を有する幾つかの命令ブロック又はフィールドによって共有されてもよい。
別の例では、BLOCK_INFO #size、#exit types、#store mask、#write mask命令が、列挙される命令のフィールドに関する情報を提供してもよい。これらのフィールドは、表3に関して上述したフィールドのいずれか1つに対応し得る。所与の実装の要件に応じて、他の変更をブロックヘッダ構造及びフォーマット及び特別命令に行ってもよい。例えば命令のブロックの特性に関連する情報を含む追加のフィールドを提供してもよい。命令ブロックの実行の頻度に基づいて特定のフィールドを含めることができる。
ブロックヘッダ構造に含まれるフィールド、あるいは特別命令又は前述の他の機構を介して提供される情報は、特定のプロセッサ又はプロセッサファミリーの公的に利用可能な標準命令セットアーキテクチャ(ISA)の一部とすることができる。フィールドのサブセットは、ISAに対する専用の拡張(proprietary extension)であってもよい。フィールド内の特定のビット値はプロセッサの標準ISAの一部であってよいが、フィールド内の特定の他のビット値は専用の機能を提供してよい。この例示的なフィールドは、ISA設計者が、専用の拡張に関連付けられる性質及び機能を完全に開示することなく、ISAに専用の拡張を追加することを可能にする。したがって、この例では、ISA設計者によって配布されるコンパイラツールは、フィールド内の専用ビット値、完全に別個の専用フィールド又は特別命令をサポートするであろう。そのようなフィールドの使用は、特定のプロセッサ設計に専用のハードウェア・アクセラレータに特に関連する可能性がある。したがって、プログラムは、ブロックヘッダーフィールド又は認識不可能な特別命令を含んでよいが、プログラムは更に、フィールドを解読するか命令を復号するためのレシピを含んでよい。
コンパイラ105(図1)は、メタ情報及び制御情報を含め、命令ブロックに関する情報を生成するために、典型的には1つ以上のプロセッサコアによってアトミックに実行するよう構成される命令ブロックを処理することができる。一部のプログラムは、1つのISAのみについて、例えばモノのインターネットのためのプロセッサ、モバイルデバイス、HMDデバイス、ウェアラブルデバイス又は他の組込みコンピューティング環境で使用されるISAについてコンパイルされ得る。コンパイラは、命令ブロックに関連する情報を生成するために、静的コード分析又はコードプロファイリング等の技術を採用してよい。場合によっては、コンパイラは、命令ブロックの特性及びその実行頻度等の要因を考慮してもよい。命令ブロックの関連する特性は、これらに限定されないが、例えば(1)命令レベル並列性、(2)ループ数、(3)プレディケート制御命令(predicated control instructions)の数及び(4)分岐予測の数が含まれ得る。
図4は、プロセッサコア内に配置される命令ウィンドウで命令ブロックを管理するための例示の方法400のフローチャートである。特段の記載がない限り、図4のフローチャート内の方法又はステップ、並びに図面に示され、下述される他のフローチャートの方法又はステップは、特定の順序又はシーケンスに制限されない。加えて、これらの方法又はステップの一部は同時に生じるか実行される可能性があり、所与の実装では、そのような実装の要件に依存して、方法又はステップの必ずしも全てが実施される必要はなく、一部の方法又はステップが任意選択で利用されてよい。同様に、一部の実装では、オーバーヘッドを減らすために一部のステップが省略されてよいが、例えばこれは脆性の増加につながることがある。任意の所与の適用で実装され得る様々な特徴、コスト、オーバーヘッド、性能又はロバスト性のトレードオフは、典型的に、設計的選択の問題と考えられてよい。
ステップ405において、フェッチされる命令ブロックの年代(age)が、例えば年代ベクトル(age vector)を使用して明示的に追跡される。したがって、典型的に年代を暗黙的に追跡するために使用される命令ウィンドウにおける命令ブロックの順序(すなわち、位置)を使用するのではなく、制御ユニットは、明示的状態を維持する。命令ブロックの年代順のリストが、ステップ410において維持される。命令ブロックの優先度(一部の場合にはコンパイラによって優先度が決定され得る場合)も追跡されてよく、一部の実装では、命令ブロックの優先度順リストも維持されてよい。
ステップ415において、処理用の命令ブロックが識別されると、年代順リストを検索して、一致する命令ブロックを見つける。一部の実装では、優先度順リストも一致について検索されてもよい。一致する命令ブロックが見つかった場合、次いで、ステップ420において、命令キャッシュから再フェッチする必要なく、命令ブロックをリフレッシュすることができ、このことは、プロセッサコアの効率性を改善することができる。そのようなリフレッシュは、例えばプログラムがタイトなループで実行し、命令がこれら自体に戻るよう(back on themselves)分岐するという状況で、命令ブロックの再使用を可能にする。そのような効率の向上は、複数のプロセッサコアが大きなスケールアレイへとコンポーズされるときに構成されてもよい。命令ブロックをリフレッシュするとき、命令はその場所に残され、オペランドバッファ及びロード/ストアキュー内の有効ビットのみがクリアにされる。
命令ブロックに対する一致が見つからない場合、年代順リスト(又は優先度順リスト)を再び利用して、新たな命令ブロックについての命令ウィンドウ内のスロットをオープンするためにコミットすることができる命令ブロックを見つけることができる。例えば最も古い命令ブロック又は最も優先度の低い命令ブロックを、コミットしてもよい(優先度の高いブロックは、将来の再使用の可能性があるので、バッファされたままであることが望ましいことがある)。ステップ425において、新たな命令ブロックが、利用可能なスロットにマッピングされる。ブロック内の命令と該命令に関連付けられるリソースの全てとを一度に(すなわち、ひとまとめに)フェッチするバルク割り当てプロセス(bulk allocation process)を使用して、命令ブロックを割り当てることができる。
ステップ430において、新たな命令ブロックが実行され、その結果、その命令ブロックの命令がアトミックにコミットされる。ステップ435において、他の命令ブロックを、従来のリオーダバッファと同様の方法で年代順に実行し、これらの命令ブロックのそれぞれの命令を、アトミックな方法でコミットしてよい。
図5は、命令ブロックベースのマイクロアーキテクチャによって実行され得る例示の方法500のフローチャートである。ステップ505において、プロセッサコア内の制御ユニットは、フェッチされた命令ブロックを、連続置換(contiguous replacement)又は非連続置換(non-contiguous replacement)のいずれかでバッファさせる。ステップ510において、連続命令ブロック置換では、バッファを循環バッファのように操作することができる。ステップ515において、非連続命令ブロック置換では、命令ブロックをアウトオブオーダーで置換してよい。例えばステップ520において、明示的年代ベースの追跡を実行することができ、その結果、上述と同様な方法で、命令ブロックを、追跡した年代に基づいてコミットして置換する。ステップ525において、優先度も追跡することができ、追跡した優先度を使用して、命令ブロックをコミットして置換してもよい。
図6は、プロセッサコア内に配置される制御ユニットによって実行され得る例示の方法600のフローチャートである。ステップ605において、バッファされた命令ブロックの状態を追跡し、ステップ610において、追跡した状態を使用して命令ブロックのリストが維持される。例えば状態は、年代、優先度、あるいは特定の実装要件に応じた他の情報又はコンテキストを含むことができる。ステップ615において、マッピングのための命令ブロックが識別されると、ステップ620に示されるように、一致についてリストをチェックする。ステップ625において、リストからの一致する命令ブロックが、再フェッチすることなく、リフレッシュされる。一致する命令ブロックがリスト内で見つからないとき、次いで、ステップ630において、上述と同様の方法で、命令ブロックを命令キャッシュからフェッチして、命令ウィンドウ内の利用可能なスロットにマップする。
図7は、プロセッサコア内に配置される命令ウィンドウにおいて命令ブロックを管理するための例示の方法700のフローチャートである。ステップ705において、命令ブロックサイズのサイズテーブルがプロセッサコア内で維持される。サイズテーブルを、様々な方法で、例えばロジック、レジスタ、メモリ、コードストリーム又はたの適切な構造を使用して表すことができる。ステップ710において、命令ブロックのヘッダ内に符号化されたインデックスが読み出される。命令ブロックは、1つ以上の復号された命令を含む。したがって、図3及び表3に示されるサイズフィールドを使用して命令ブロックサイズをハードコードするのではなく、このフィールドを使用して、サイズテーブルに対するインデックスを符号化又は格納してよい。すなわち、インデックスは、サイズウィンドウ内のエントリに対するポインタとして機能してよく、特定のサイズを命令ブロックに関連付けることを可能にすることができる。
サイズテーブルに含まれるサイズエントリの数は、実装によって変化する可能性がある。より多数のサイズエントリを使用して、更なる粒度(more granularity)を可能にすることができる。これは、所与のプログラムに関連付けられる命令ブロックサイズの比較的広範な分布が存在するが、典型的な実装ではオーバーヘッドの増加という代償を払う場合に、有利であり得る。場合によっては、全体的な命令パッキング密度(instruction packing density)を最適化する方法で命令ブロックサイズの特定の分布をカバーして、no opsを最小にするように、コンパイラが、テーブル内に含まれるサイズの数を選択することができる。ステップ715において、インデックスを使用して、サイズテーブルから命令ブロックサイズをルックアップする。ステップ720において、命令ブロックは、そのサイズに基づいて命令ウィンドウ内の利用可能なスロットにマップされる。
一部の実装では、ステップ725に示されるように、命令ウィンドウは、例えば2つ以上の異なるサイズを使用する2つ以上のサブウィンドウにセグメント化されてよい。セグメント化されたサブウィンドウのそのようなバリエーションは、命令ブロックサイズの所与の分布についての適応(accommodation)を可能にすることができ、命令パッキング密度を更に高めることができる。セグメンテーションは、一部のシナリオでは動的に実行されてもよい。
図8は、命令ブロックベースのマイクロアーキテクチャによって実行され得る例示の方法800のフローチャートである。ステップ805において、サイズテーブルが実装される。上述のように、サイズテーブルは、ロジック、レジスタ、メモリ、コードストリーム又は他の適切な構造を使用して実装されてよく、所与のプログラムによって利用される命令ブロックの分布において一般的に利用されるものに対応するサイズを含んでよい。ステップ810において、サイズテーブル内のエントリを参照するポインタについて命令ブロックヘッダが検査される。ステップ815において、テーブルエントリによって識別されたサイズを使用して、命令ウィンドウ内の命令ブロックの配置を決定する。
ステップ820において、命令ブロックに関連付けられるリソースがバルク割り当て(bulk allocated)される。命令ブロックヘッダ内で指定される制限は、ステップ825において命令ウィンドウ内に命令ブロックをマッピングするときに使用される。これらは、例えばアライメントに対する制限、及び命令ブロックをバッファするための命令ウィンドウのキャパシティに対する制限を含んでよい。ステップ830において、命令ウィンドウ内の命令ブロックの順序が制御ユニットによって追跡され、一部の状況では、ブロックはアウトオブオーダーでコミットされてよい。例えばブロックが命令ウィンドウ内のブロックの位置に基づいて処理される命令ブロックの循環バッファを使用するのではなく、多用される(heavily used)又は特に重要な命令ブロックがアウトオブオーダーで処理されるように、ブロックに優先順位を付けることができ、これは、処理効率を高めることができる。
ステップ835において、命令ブロックの年代を明示的に追跡することができ、一部の場合には、このように明示的に追跡した年代に基づいて、命令ブロックをコミットすることができる。命令ブロックは、ステップ840においてリフレッシュされる(すなわち、命令キャッシュから命令ブロックを再フェッチする必要なく再使用される)。
図9は、プロセッサコア内に配置される制御ユニットによって実行され得る例示の命令900のフローチャートである。ステップ905において、命令ウィンドウは、上述したものと同様の方法で2つ以上の異なるサイズを有する複数のセグメントで構成される。ステップ910において、ブロック命令ヘッダが、その中に符号化されたインデックスについて検査される。ステップ915において、インデックスを使用してサイズテーブル内でルックアップを実行し、ステップ920において、命令ブロックが、サイズルックアップに基づいて、そのブロックの特定のサイズに適切な命令ウィンドウセグメントに配置される。ステップ925において、命令ブロックに関連付けられるリソースが、バルク割り当てを使用してフェッチされる。
図10は、プロセッサコア内に配置される命令ウィンドウにおいて命令ブロックを管理するための例示の方法1000のフローチャートである。ステップ1005において、命令ブロックは命令キャッシュから命令ウィンドウへマップされる。命令ブロックは、1つ以上の復号された命令を含む。ステップ1010において、命令ブロック内の命令の各々に関連付けられるリソースが割り当てられる。リソースは典型的に、制御ビットとオペランドを含み、バルク割り当てプロセスを使用して割り当てが実行されてよい。バルク割り当てプロセスでは、リソースの全てがひとまとめに取得又はフェッチされる。
リソース及び命令を密結合する代わりに、命令ウィンドウ及びオペランドバッファは分離(decouple)され、その結果、ステップ1015に示されるように、リソース及びブロック内の復号された命令の中で、1つ以上のポインタを維持することにより、これらを独立に操作することができる。ステップ1020において、命令ブロックがリフレッシュされる(すなわち、命令キャッシュからの命令ブロックを再フェッチする必要なく、再使用される)と、次いで、ステップ1025において、ポインタに従うことによりリソースを再使用することができ、元の制御状態に戻ることができる。
そのような分離は、特に、典型的に生じるような再フェッチを伴わずに命令ブロックがリフレッシュされるとき、例えばプログラムがタイトなループで実行して命令が繰り返し利用されるときに、向上したプロセッサコア効率を提供することができる。ポインタを通して制御状態を確立することにより、処理サイクル及び他のコストの追加の支出なしに、リソースは、効率的に予め検証(pre-validated)される。複数のプロセッサコアが1つの大きなスケールのアレイへとコンポーズされるときに、そのような効率の向上も構成され得る。
図11は、命令ブロックベースのマイクロアーキテクチャによって実行され得る例示の方法1100のフローチャートである。ステップ1105において、新たな命令ブロックが、コミットされた命令ブロックを置換する方法で、命令ブロックが命令ウィンドウへマップされる。マッピングは、ステップ1110で示されるように、例えばアライメントに対する制限、及び命令ブロックをバッファするための命令ウィンドウのキャパシティに対する制限等のように、命令ブロックのヘッダ内で指定される様々な制限の対象となることがある。ステップ1115において、新たな命令ブロックについてリソースが割り当てられ、この割り当ては典型的には、上述のようにバルク割り当てプロセスを使用して実装される。
ステップ1120において、命令ウィンドウ内の命令ブロックの順序が制御ユニットによって追跡され、一部の状況ではブロックは、アウトオブオーダーでコミットされてよい。例えば命令ウィンドウ内のブロックの位置に基づいてブロックが処理される命令ブロックの循環バッファを使用するのではなく、多用される又は特に重要な命令ブロックがアウトオブオーダーで処理されるように、ブロックに優先順位を付けることができ、これは、処理効率を高めることができる。
ステップ1125において、命令ウィンドウがオペランドバッファから分離され、その結果、例えば命令のブロックとオペランドのブロックは独立に(すなわち、命令とオペランドとの間の厳格な対応を使用することなく)管理される。上記のように、分離は、命令ブロックがリフレッシュされるときに、リソースが予め検証されることを可能にすることによって効率を向上させる。
図12は、プロセッサコア内に配置される制御ユニットによって実行され得る例示の方法1200のフローチャートである。ステップ1205において、命令ウィンドウが、1つ以上の命令ブロックをバッファリングするために維持される。命令ブロック内の命令に関連付けられるリソースをバッファリングするために、ステップ1210において、1つ以上のオペランドバッファが維持される。上記のように、リソースは、典型的に制御ビットとオペランドを含む。ステップ1215において、命令及びリソースの中でポインタを使用して状態を追跡する。
ブロック1220において、命令ブロックがリフレッシュされるとき、ポインタに従って、追跡された状態に戻ることができる。ステップ1225において、命令ブロックがコミットするとき、オペランドバッファ内の制御ビットがクリアされて、新たなポインタが設定される。上述の方法と同様に、ステップ1230において、命令ウィンドウとオペランドバッファが分離されて、その結果、命令のブロック及びオペランドのブロックが、制御ユニットによって非対応ベース(non-corresponding basis)で維持される。
図13は、プロセッサコア内に配置される命令ウィンドウにおいて命令ブロックを管理するための例示の方法1300のフローチャートである。ステップ1305において、ブロック内の命令と、該命令に関連付けられるリソースの全てが一度に(すなわち、ひとまとめに)フェッチされるバルク割り当てプロセスを使用して、命令ブロックが割り当てられる。命令とリソースが小さなチャンクで繰り返しフェッチされる従来のアーキテクチャとの比較では、このバルク割り当ては、ブロック内の命令の全てを同時かつ一貫して管理することを可能にし、これはプロセッサコアのオペレーションの効率を改善することができる。この改善は、所与のプログラミング構造(例えば分岐を最小化するもの)によりコンパイラが比較的大きな命令ブロックを生成することが可能になる状況において、更に一層顕著なものとなり得る。例えば実装によっては、命令ブロックは最大で128個の命令を含んでよい。
また、命令ブロックのバルク割り当ては、プログラムがタイトなループで実行して、命令がこれら自体に戻るよう分岐するときに、典型的に起こるような再フェッチを行うことなく命令ブロックが再使用される、リフレッシュ機能を通して、プロセッサコアの効率を高める。そのような効率の向上は、複数のコアが1つの大きなスケールアレイにコンポーズされるときにも構成され得る。命令ブロックをリフレッシュするとき、命令は元の場所に残され、オペランドバッファ及びロード/ストアキュー内の有効ビットのみがクリアされる。これは、リフレッシュされた命令ブロックのフェッチが全体的にバイパスされることを可能にする。
命令ブロックのバルク割り当ては、命令及びリソースのグループが定位置にあるときに、更なる処理効率も可能にする。例えばオペランド及び明示的なメッセージがブロック内のある命令から別の命令に送信されてよい。そのような機能は従来的なアーキテクチャでは可能にされない。なぜなら、1つの命令は、まだ割り当てられていない別の命令に何も送ることができないからである。定数を生成する命令は、オペランドバッファ内の値をピン留めすることもでき、その結果、これらはリフレッシュ後も有効なままであり、命令ブロックを実行するたびに再生成される必要がない。
ステップ1310において、命令ブロックが命令ウィンドウ内にマップされるとき、これらは、ステップ1315において、マッピングポリシーによって適用され得る制約、ブロックヘッダ内で指定される制限又はその双方の対象となる。場合によっては、ポリシーは、所与のプログラムの特定の要件に応じてコンパイラによって設定されることが可能である。指定される制限は、例えばアライメントに対する制限、及び命令ブロックをバッファするための命令ウィンドウのキャパシティに対する制限を含むことができる。
ステップ1320において、一部の実装では、命令ウィンドウを、同じサイズ又は異なるサイズのサブウィンドウにセグメント化することができる。命令ブロックサイズは、所与のプログラムについてランダム又は不均一に分配されることが多いので、セグメント化されたサブウィンドウにおけるそのようなバリエーションは、命令ブロックサイズの所与の分布を、より効率的に適応させることができ、これにより、命令ウィンドウ内の命令パッキング密度を高めることができる。また、セグメンテーションは、一部のシナリオでは、プロセッサコアによって現在処理されているブロックサイズの分布に応じて動的に実行されてもよい。
一部の実装では、命令ブロックヘッダは、インデックスを符号化するか、ロジック、レジスタ、メモリ又はコードストリームのうちの1つを使用して実装されるサイズテーブルへのポインタを含んでもよい。サイズテーブルは命令ブロックサイズエントリを含むことができ、その結果、ステップ1325において、このテーブルから命令ブロックサイズをルックアップすることができる。符号化されたインデックス及びサイズテーブルの使用は、利用可能なブロックサイズにおける更なる粒度を与えることにより、命令ブロック内の命令パッキング密度を高めることができ、例えばブロックが比較的少数の命令を含むときに分岐を実装する際に、nops(ノーオペレーション)の発生を低減することができる。
図14は、命令ブロックベースのマイクロアーキテクチャによって実行され得る例示の方法1400のフローチャートである。ステップ1405において、プロセッサコア内の制御ユニットは、命令ブロックを処理するためのポリシーを適用する。ステップ1410において、命令と全ての関連するリソースとが一度にフェッチされる上述のバルク割り当てプロセスを使用して、命令ブロックを割り当てる。ステップ1415において、命令ブロックは、命令ウィンドウにマッピングされ、そのマッピングは、アライメントに対する制限及び命令ブロックをバッファするための命令ウィンドウのキャパシティに対する制限のように、命令ブロックのヘッダ内で指定される様々な制限の対象となり得る。
ステップ1420において、制御ユニットによって命令ウィンドウ内の命令ブロックの順序を追跡することを含むポリシーが適用されてよい。例えば命令ウィンドウ内のブロックの位置に基づいてブロックが処理される、命令ブロックの循環バッファを使用するのではなく、ブロックは、一部の状況では、アウトオブオーダーでコミットされてよい。ステップ1425において、(一部のシナリオではコンパイラによって指定され得る)優先度に基づいてブロックを処理することを含むポリシーが適用されてよく、その結果、多用される又は特に重要なブロックが、アウトオブオーダーで処理され、更に処理効率を向上させることができる。
ステップ1430において、命令ブロックの年代を明示的に追跡することを含むポリシーが適用されてよく、場合によっては、そのように明示的に追跡した年代に基づいて命令ブロックをコミットすることができる。ステップ1435において、命令ウィンドウ(又はウィンドウのセグメント)内で適切にサイズ調整されるスロットの利用可能性に従って命令ブロックをマッピングすることを含むポリシーが適用されてよい。ステップ1440において、循環バッファを使用して命令ブロックを命令ウィンドウへマッピングすることを含むポリシーが適用されてよい。
実装によっては、プロセッサコアの効率を更に高めるために、ポリシーの様々な組合せを利用してもよい。例えば制御ユニットはポリシーの中を動的にトグルして、所与の命令ブロック又は命令ブロックのグループについてより最適なオペレーションを提供するポリシーを適用してよい。例えば一部のシナリオでは、命令ブロックが連続的方法で順番に処理される循環バッファリング技術を使用することがより効率的であり得る。他のシナリオでは、アウトオブオーダー及び年代ベースの処理が、より最適なオペレーションを提供することがある。
図15は、プロセッサコア内に配置される制御ユニットによって実行され得る例示の方法1500のフローチャートである。ステップ1505において、上述と同様な方法で2つ以上の異なるサイズを有する複数のセグメントで命令ウィンドウが構成される。ステップ1510において命令ブロックがフェッチされ、ステップ1515において命令ブロックに関連付けられる全てのリソースがフェッチされる。
ステップ1520において、ウィンドウ内の命令密度を最大にするウィンドウの適切なセグメント内に、命令ブロックが配置される。例えばコンパイラが、(例えばプログラム分岐等を実装するために)低い命令カウント(low instruction count)で比較的多数のブロックを含むブロックサイズの分布を生成する場合、命令ウィンドウは、小さな命令ブロックのために特別にサイズ調整されるセグメントを有してよい。同様に、(例えば科学及び同様の適用のために)比較的多数の高い命令カウントのブロックが存在する場合、次いでセグメントは、そのような大きな命令ブロックのために特別にサイズ調整されてよい。命令ウィンドウセグメントのサイジングを、特定のサイズ分布に応じて調整するか、あるいは一部の状況では分布が変化するときに動的に調整することができる。ブロック1525において、命令ブロックは、上述のように命令ブロックヘッダ内で指定される制限の対象となり得る。
本願の分離されるプロセッサ命令ウィンドウとオペランドバッファの様々な例示の実施形態が次に説明のために提示されるが、全ての実施形態の包括的なリストとして提示されるものではない。一例は、プロセッサ内に配置される命令ウィンドウにおいて命令ブロックを管理するための方法であって:命令キャッシュからの1つ以上の復号された命令を含む命令ブロックを、命令ウィンドウへマッピングするステップと;命令ブロックのためにリソースを割り当てるステップであって、リソースは、命令ブロック内の1つ以上の復号された命令の各々に関連付けられる制御ビットとオペランドを含む、ステップと;リソース及び命令ブロック内の1つ以上の復号された命令の中で1つ以上のポインタを維持するステップと;命令キャッシュから命令ブロックを再フェッチすることなく、命令ブロックをリフレッシュするステップと;1つ以上のポインタに従うことによりリソースを再使用するステップと;を有する。別の例において、方法は、命令キャッシュからフェッチされる各命令ブロックについて、バルク割り当てを実行して、命令ブロック内の1つ以上の復号された命令の各々に関連付けられるリソースを取得するステップを更に含む。別の例において、方法は、命令ブロックがリフレッシュされるときにリソースが予め検証されるように、命令ウィンドウから分離されるオペランドバッファ内にオペランド及び制御ビットを維持するステップを更に含む。別の例において、制御ビットは、オペランドのレディネス・ステータス(operand readiness status)を含む。別の例において、リソースはオペコードを含む。別の例において、方法は、プログラムに基づいて命令ブロックを利用するステップと、プログラムの実行が、プログラムされたループを使用して行われるときに命令ブロックをリフレッシュするステップとを更に含む。
更なる例は、命令ブロックベースのマイクロアーキテクチャを含み:制御ユニットと;1つ以上のオペランドバッファと;制御ユニットのコントロール下にあるように、復号された命令ブロックを格納するように構成される命令ウィンドウと;を有し、コントロールは、新たな命令ブロックがコミットされた命令ブロックを置き換えるように、命令ブロックを命令ウィンドウにマップし、新たな命令ブロックのためにリソースを割り当て、リソースが制御ビット又はオペランドを含み、1つ以上のオペランドバッファから命令ウィンドウを分離し、命令ブロックがリフレッシュされるときにリソースが予め検証されるよう、命令のブロックとオペランドのブロックを独立に管理する、動作を含む。別の例において、命令ブロックベースのマイクロアーキテクチャは、命令ブロックのヘッダ内で指定される制限に基づいて、命令ブロックをマップする構成を更に含む。別の例では、命令ブロックベースのマイクロアーキテクチャにおいて、指定される制限は、アライメント制限又は命令ウィンドウの命令ブロックキャパシティ制限のうちの一方を含む。別の例において、命令ブロックベースのマイクロアーキテクチャは、命令ウィンドウ内の命令ブロックの順序を追跡し、命令ブロックをアウトオブオーダーでコミットする構成を更に含む。別の例において、命令ブロックベースのマイクロアーキテクチャは、複数のプロセッサコアがコンポーズ又はデコンポーズされることを可能にする、オンチップネットワーク(on-chip network)を更に含む。別の例において、命令ブロックベースのマイクロアーキテクチャは、複数のプロセッサコアがコンポーズされるときに、論理命令ウィンドウと1つ以上の論理オペランドバッファとの間の分離を維持する構成を更に含む。別の例において、命令ブロックベースのマイクロアーキテクチャは、複数のプロセッサコアがデコンポーズされるときに、論理命令ウィンドウと1つ以上の論理オペランドバッファとの間の分離を維持する構成を更に含む。別の例において、命令ブロックベースのマイクロアーキテクチャは、命令キャッシュから命令ブロックを再フェッチすることなく、命令ブロックをリフレッシュする構成を更に含む。
更なる例は、命令ブロック管理のための方法を実行するよう構成される、プロセッサ内に配置される制御ユニットを含み、上記方法は、1つ以上の命令ブロックをバッファするための命令ウィンドウを維持することと;1つ以上の命令ブロックのためのリソースをバッファするための1つ以上のオペランドバッファを維持することと;命令ブロック及びバッファされたリソースの中でポインタを使用して状態を追跡することと;命令ブロックをリフレッシュするときに、ポインタに従って、追跡された状態を再使用することを含む。別の例において、制御ユニットは、命令ブロックをコミットするときに、制御ビットをクリアすることと、新たなポインタを設定することを更に含む。別の例において、制御ユニットは、命令のブロック及びオペランドのブロックが非対応ベースで維持されるように、命令ブロックを1つ以上のオペランドバッファから分離することを更に含む。別の例において、制御ユニットは、命令ブロック内の命令の全てについてリソースが取得されるよう、バッファされたリソースをまとめて(in bulk)割り当てることを更に含む。別の例において、制御ユニットは、複数のプロセッサコアを包含する論理命令ウィンドウを維持することを更に含む。別の例において、制御ユニットは更に、複数のプロセッサコアを包含する論理オペランドバッファを維持することと、命令ブロックが再フェッチすることなくリフレッシュされるときに状態が予め検証されることを可能にするよう、論理オペランドバッファを論理命令ウィンドウから更に分離することを含む。
上述の主題は、例示のために提供されるものにすぎず、限定として解釈されるべきではない。図示され説明される例示の実施形態及び適用に従わずに、特許請求の範囲で説明される本開示の真の精神及び範囲から逸脱することなく、本明細書で説明される主題に対して様々な修正及び変更を行ってもよい。
Claims (14)
- プロセッサ内に配置される命令ウィンドウにおいて命令ブロックを管理するための方法であって:
命令キャッシュからの1つ以上の復号された命令を含む命令ブロックを、前記命令ウィンドウへマッピングするステップと;
前記命令ブロックのためにリソースを割り当てるステップであって、前記リソースは、前記命令ブロック内の前記1つ以上の復号された命令の各々に関連付けられる制御ビットとオペランドを含む、ステップと;
前記リソース及び前記命令ブロック内の前記1つ以上の復号された命令の中で1つ以上のポインタを維持するステップと;
前記命令キャッシュから前記命令ブロックを再フェッチすることなく、前記命令ブロックをリフレッシュするステップと;
前記1つ以上のポインタに従うことにより前記リソースを再使用するステップと;
を有する、方法。 - 前記命令キャッシュからフェッチされる各命令ブロックについて、バルク割り当てを実行して、前記命令ブロック内の前記1つ以上の復号された命令の各々に関連付けられるリソースを取得するステップ、
を更に含む、請求項1に記載の方法。 - 命令ブロックがリフレッシュされるときに前記リソースが予め検証されるように、前記命令ウィンドウから分離されるオペランドバッファ内にオペランド及び制御ビットを維持するステップ、
を更に含む、請求項1に記載の方法。 - 前記制御ビットは、オペランドのレディネス・ステータスを含む、
請求項3に記載の方法。 - 前記リソースはオペコードを含む、
請求項1に記載の方法。 - プログラムに基づいて命令ブロックを利用するステップと、前記プログラムの実行が、プログラムされたループを使用して行われるときに前記命令ブロックをリフレッシュするステップと、
を更に含む、請求項5に記載の方法。 - 命令ブロックベースのマイクロアーキテクチャであって:
制御ユニットと;
1つ以上のオペランドバッファと;
前記制御ユニットのコントロール下にあるように、復号された命令ブロックを格納するように構成される命令ウィンドウと;を有し、前記コントロールは、
新たな命令ブロックがコミットされた命令ブロックを置き換えるように、命令ブロックを前記命令ウィンドウにマップし、
前記新たな命令ブロックのためにリソースを割り当て、前記リソースが制御ビット又はオペランドを含み、
前記1つ以上のオペランドバッファから前記命令ウィンドウを分離し、命令ブロックがリフレッシュされるときにリソースが予め検証されるよう、命令のブロックとオペランドのブロックを独立に管理する、
動作を含む、命令ブロックベースのマイクロアーキテクチャ。 - 前記命令ブロックのヘッダ内で指定される制限に基づいて、前記命令ブロックをマップする構成を更に含む、
請求項7に記載の命令ブロックベースのマイクロアーキテクチャ。 - 前記指定される制限は、アライメント制限又は前記命令ウィンドウの命令ブロックキャパシティ制限のうちの一方を含む、
請求項8に記載の命令ブロックベースのマイクロアーキテクチャ。 - 前記命令ウィンドウ内の前記命令ブロックの順序を追跡し、命令ブロックをアウトオブオーダーでコミットする構成を更に含む、
請求項7に記載の命令ブロックベースのマイクロアーキテクチャ。 - 複数のプロセッサコアがコンポーズ又はデコンポーズされることを可能にする、オンチップネットワークを更に含む、
請求項7に記載の命令ブロックベースのマイクロアーキテクチャ。 - 前記複数のプロセッサコアがコンポーズされるときに、論理命令ウィンドウと1つ以上の論理オペランドバッファとの間の分離を維持する構成を更に含む、
請求項11に記載の命令ブロックベースのマイクロアーキテクチャ。 - 前記複数のプロセッサコアがデコンポーズされるときに、論理命令ウィンドウと1つ以上の論理オペランドバッファとの間の分離を維持する構成を更に含む、
請求項11に記載の命令ブロックベースのマイクロアーキテクチャ。 - 命令キャッシュから前記命令ブロックを再フェッチすることなく、前記命令ブロックをリフレッシュする構成を更に含む、
請求項7に記載の命令ブロックベースのマイクロアーキテクチャ。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/752,724 | 2015-06-26 | ||
US14/752,724 US10346168B2 (en) | 2015-06-26 | 2015-06-26 | Decoupled processor instruction window and operand buffer |
PCT/US2016/038850 WO2016210027A1 (en) | 2015-06-26 | 2016-06-23 | Decoupled processor instruction window and operand buffer |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018518775A true JP2018518775A (ja) | 2018-07-12 |
Family
ID=56369215
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017565975A Pending JP2018518775A (ja) | 2015-06-26 | 2016-06-23 | 分離されるプロセッサ命令ウィンドウとオペランドバッファ |
Country Status (16)
Country | Link |
---|---|
US (2) | US10346168B2 (ja) |
EP (1) | EP3314399B1 (ja) |
JP (1) | JP2018518775A (ja) |
KR (1) | KR102502780B1 (ja) |
CN (1) | CN107810476B (ja) |
AU (1) | AU2016281599A1 (ja) |
BR (1) | BR112017024301A2 (ja) |
CA (1) | CA2986266A1 (ja) |
CL (1) | CL2017003310A1 (ja) |
CO (1) | CO2017013252A2 (ja) |
HK (1) | HK1246443A1 (ja) |
IL (1) | IL256168A (ja) |
MX (1) | MX2017016197A (ja) |
PH (1) | PH12017550124A1 (ja) |
TW (1) | TW201712533A (ja) |
WO (1) | WO2016210027A1 (ja) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10191747B2 (en) | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
US10175988B2 (en) | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
US11755484B2 (en) | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
US10346168B2 (en) | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US9952867B2 (en) * | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
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 |
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 |
US9720693B2 (en) * | 2015-06-26 | 2017-08-01 | Microsoft Technology Licensing, Llc | Bulk allocation of instruction blocks to a processor instruction window |
US9946548B2 (en) | 2015-06-26 | 2018-04-17 | Microsoft Technology Licensing, Llc | Age-based management of instruction blocks in a processor instruction window |
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 |
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 |
US10824429B2 (en) * | 2018-09-19 | 2020-11-03 | Microsoft Technology Licensing, Llc | Commit logic and precise exceptions in explicit dataflow graph execution architectures |
CN112000420B (zh) * | 2020-11-02 | 2021-01-15 | 武汉中科通达高新技术股份有限公司 | 一种数据处理方法和装置 |
US11630668B1 (en) * | 2021-11-18 | 2023-04-18 | Nxp B.V. | Processor with smart cache in place of register file for providing operands |
US20240111654A1 (en) * | 2022-09-29 | 2024-04-04 | Intel Corporation | Hybrid performance monitoring unit (pmu) enumeration |
CN115617402B (zh) * | 2022-11-18 | 2023-04-07 | 北京数渡信息科技有限公司 | 一种适用于通用处理器的解耦合分支预测方法及装置 |
Family Cites Families (307)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5142631A (en) | 1989-02-03 | 1992-08-25 | Digital Equipment Corporation | System for queuing individual read or write mask and generating respective composite mask for controlling access to general purpose register |
US5333280A (en) | 1990-04-06 | 1994-07-26 | Nec Corporation | Parallel pipelined instruction processing system for very long instruction word |
US5446904A (en) | 1991-05-17 | 1995-08-29 | Zenith Data Systems Corporation | Suspend/resume capability for a protected mode microprocessor |
US5363495A (en) | 1991-08-26 | 1994-11-08 | International Business Machines Corporation | Data processing system with multiple execution units capable of executing instructions out of sequence |
US5333283A (en) | 1991-10-29 | 1994-07-26 | International Business Machines Corporation | Case block table for predicting the outcome of blocks of conditional branches having a common operand |
TW226016B (ja) | 1991-12-30 | 1994-07-01 | Sterling Winthrop Inc | |
EP0636256B1 (en) | 1992-03-31 | 1997-06-04 | Seiko Epson Corporation | Superscalar risc processor instruction scheduling |
US5346345A (en) * | 1992-07-31 | 1994-09-13 | Ford Motor Company | High-force linear motor assembly using tandem axes |
DE69327688T2 (de) | 1992-08-12 | 2000-09-07 | Advanced Micro Devices, Inc. | Befehlsdecoder |
US6735685B1 (en) | 1992-09-29 | 2004-05-11 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
US5628021A (en) | 1992-12-31 | 1997-05-06 | Seiko Epson Corporation | System and method for assigning tags to control instruction processing in a superscalar processor |
US5966539A (en) | 1994-03-01 | 1999-10-12 | Digital Equipment Corporation | Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis |
AU3412295A (en) | 1994-09-01 | 1996-03-22 | Gary L. Mcalpine | A multi-port memory system including read and write buffer interfaces |
US5666506A (en) | 1994-10-24 | 1997-09-09 | International Business Machines Corporation | Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle |
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 |
US5933642A (en) | 1995-04-17 | 1999-08-03 | Ricoh Corporation | Compiling system and method for reconfigurable computing |
US6112019A (en) | 1995-06-12 | 2000-08-29 | Georgia Tech Research Corp. | Distributed instruction queue |
US5790822A (en) | 1996-03-21 | 1998-08-04 | Intel Corporation | Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor |
US5920724A (en) | 1996-03-28 | 1999-07-06 | Intel Corporation | Software pipelining a hyperblock loop |
US5799167A (en) | 1996-05-15 | 1998-08-25 | Hewlett-Packard Company | Instruction nullification system and method for a processor that executes instructions out of order |
US5796997A (en) | 1996-05-15 | 1998-08-18 | Hewlett-Packard Company | Fast nullify system and method for transforming a nullify function into a select function |
US5903750A (en) | 1996-11-20 | 1999-05-11 | Institute For The Development Of Emerging Architectures, L.L.P. | Dynamic branch prediction for branch instructions with multiple targets |
US6542998B1 (en) | 1997-02-08 | 2003-04-01 | Pact Gmbh | Method of self-synchronization of configurable elements of a programmable module |
US6286135B1 (en) | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
US5983337A (en) | 1997-06-12 | 1999-11-09 | Advanced Micro Devices, Inc. | Apparatus and method for patching an instruction by providing a substitute instruction or instructions from an external memory responsive to detecting an opcode of the instruction |
US5845103A (en) | 1997-06-13 | 1998-12-01 | Wisconsin Alumni Research Foundation | Computer with dynamic instruction reuse |
US6044222A (en) | 1997-06-23 | 2000-03-28 | International Business Machines Corporation | System, method, and program product for loop instruction scheduling hardware lookahead |
US5943501A (en) | 1997-06-27 | 1999-08-24 | Wisconsin Alumni Research Foundation | Multiple processor, distributed memory computer with out-of-order processing |
US5930158A (en) | 1997-07-02 | 1999-07-27 | Creative Technology, Ltd | Processor with instruction set for audio effects |
US7272703B2 (en) | 1997-08-01 | 2007-09-18 | Micron Technology, Inc. | Program controlled embedded-DRAM-DSP architecture and methods |
US6185675B1 (en) | 1997-10-24 | 2001-02-06 | Advanced Micro Devices, Inc. | Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks |
US6182210B1 (en) | 1997-12-16 | 2001-01-30 | Intel Corporation | Processor having multiple program counters and trace buffers outside an execution pipeline |
US6058438A (en) | 1998-02-06 | 2000-05-02 | Hewlett-Packard Company | Method and apparatus for performing high speed data transfers between a host memory and a geometry accelerator of a graphics machine |
US6055623A (en) | 1998-04-07 | 2000-04-25 | International Business Machine Corporation | Specialized millicode instruction for editing functions |
US6164841A (en) | 1998-05-04 | 2000-12-26 | Hewlett-Packard Company | Method, apparatus, and product for dynamic software code translation system |
US6988183B1 (en) | 1998-06-26 | 2006-01-17 | Derek Chi-Lan Wong | Methods for increasing instruction-level parallelism in microprocessors and digital system |
US6212622B1 (en) | 1998-08-24 | 2001-04-03 | Advanced Micro Devices, Inc. | Mechanism for load block on store address generation |
EP0992894A1 (en) | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Apparatus and method for loop execution |
US6275919B1 (en) | 1998-10-15 | 2001-08-14 | Creative Technology Ltd. | Memory storage and retrieval with multiple hashing functions |
US7529907B2 (en) | 1998-12-16 | 2009-05-05 | Mips Technologies, Inc. | Method and apparatus for improved computer load and store operations |
JP3565314B2 (ja) | 1998-12-17 | 2004-09-15 | 富士通株式会社 | 分岐命令実行制御装置 |
US6477683B1 (en) | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
GB2348305A (en) | 1999-03-24 | 2000-09-27 | Int Computers Ltd | Instruction execution mechanism |
US6453344B1 (en) | 1999-03-31 | 2002-09-17 | Amdahl Corporation | Multiprocessor servers with controlled numbered of CPUs |
US6438671B1 (en) | 1999-07-01 | 2002-08-20 | International Business Machines Corporation | Generating partition corresponding real address in partitioned mode supporting system |
US6523110B1 (en) | 1999-07-23 | 2003-02-18 | International Business Machines Corporation | Decoupled fetch-execute engine with static branch prediction support |
US6513109B1 (en) | 1999-08-31 | 2003-01-28 | International Business Machines Corporation | Method and apparatus for implementing execution predicates in a computer processing system |
JP2001092662A (ja) | 1999-09-22 | 2001-04-06 | Toshiba Corp | プロセッサコア及びこれを用いたプロセッサ |
US7051188B1 (en) | 1999-09-28 | 2006-05-23 | International Business Machines Corporation | Dynamically redistributing shareable resources of a computing environment to manage the workload of that environment |
US6651125B2 (en) | 1999-09-28 | 2003-11-18 | International Business Machines Corporation | Processing channel subsystem pending I/O work queues based on priorities |
US6986137B1 (en) | 1999-09-28 | 2006-01-10 | International Business Machines Corporation | Method, system and program products for managing logical processors of a computing environment |
AU7622400A (en) | 1999-10-01 | 2001-05-10 | Sun Microsystems, Inc. | A method for precise trap handling in case of speculative and out-of-order loads |
EP1102163A3 (en) | 1999-11-15 | 2005-06-29 | Texas Instruments Incorporated | Microprocessor with improved instruction set architecture |
US6779100B1 (en) | 1999-12-17 | 2004-08-17 | Hewlett-Packard Development Company, L.P. | Method and device for address translation for compressed instructions |
US6732203B2 (en) | 2000-01-31 | 2004-05-04 | Intel Corporation | Selectively multiplexing memory coupling global bus data bits to narrower functional unit coupling local bus |
US6725335B2 (en) | 2000-02-09 | 2004-04-20 | Hewlett-Packard Development Company, L.P. | Method and system for fast unlinking of a linked branch in a caching dynamic translator |
US6732260B1 (en) | 2000-03-06 | 2004-05-04 | Intel Corporation | Presbyopic branch target prefetch method and apparatus |
US6615340B1 (en) | 2000-03-22 | 2003-09-02 | Wilmot, Ii Richard Byron | Extended operand management indicator structure and method |
US6918032B1 (en) | 2000-07-06 | 2005-07-12 | Intel Corporation | Hardware predication for conditional instruction path branching |
US6654860B1 (en) | 2000-07-27 | 2003-11-25 | Advanced Micro Devices, Inc. | Method and apparatus for removing speculative memory accesses from a memory access queue for issuance to memory or discarding |
US7069555B1 (en) | 2000-09-29 | 2006-06-27 | Microsoft Corporation | Super-region instruction scheduling and code generation for merging identical instruction into the ready-to-schedule instruction |
US6934254B2 (en) | 2001-01-18 | 2005-08-23 | Motorola, Inc. | Method and apparatus for dynamically allocating resources in a communication system |
US7032217B2 (en) | 2001-03-26 | 2006-04-18 | Intel Corporation | Method and system for collaborative profiling for continuous detection of profile phase transitions |
US6957435B2 (en) | 2001-04-19 | 2005-10-18 | International Business Machines Corporation | Method and apparatus for allocating processor resources in a logically partitioned computer system |
US7453899B1 (en) | 2001-05-08 | 2008-11-18 | Lsi Corporation | Field programmable network application specific integrated circuit and a method of operation thereof |
US6965982B2 (en) | 2001-06-29 | 2005-11-15 | International Business Machines Corporation | Multithreaded processor efficiency by pre-fetching instructions for a scheduled thread |
US7002956B2 (en) | 2001-07-05 | 2006-02-21 | International Business Machines Corporation | Network addressing method and system for localizing access to network resources in a computer network |
US7353287B2 (en) | 2001-09-26 | 2008-04-01 | Adobe Systems Incorporated | Marked foreign data blocks |
WO2003038645A2 (en) | 2001-10-31 | 2003-05-08 | University Of Texas | A scalable processing architecture |
EP1313012A1 (en) | 2001-11-15 | 2003-05-21 | Texas Instruments France | Java DSP acceleration by byte-code optimization |
JP2003162411A (ja) | 2001-11-28 | 2003-06-06 | Hitachi Ltd | データプロセッサ |
US7228402B2 (en) | 2002-01-02 | 2007-06-05 | Intel Corporation | Predicate register file write by an instruction with a pending instruction having data dependency |
US7055021B2 (en) | 2002-02-05 | 2006-05-30 | Sun Microsystems, Inc. | Out-of-order processor that reduces mis-speculation using a replay scoreboard |
US7032101B2 (en) | 2002-02-26 | 2006-04-18 | International Business Machines Corporation | Method and apparatus for prioritized instruction issue queue in a processor |
US6877059B2 (en) | 2002-03-29 | 2005-04-05 | Emc Corporation | Communications architecture for a high throughput storage processor |
WO2003088048A1 (en) | 2002-04-08 | 2003-10-23 | University Of Texas System | Non-uniform cache apparatus, systems, and methods |
WO2004001584A2 (en) | 2002-06-24 | 2003-12-31 | Ante Vista Gmbh | A method for executing structured symbolic machine code on a microprocessor |
JP3804941B2 (ja) | 2002-06-28 | 2006-08-02 | 富士通株式会社 | 命令フェッチ制御装置 |
JP4243463B2 (ja) | 2002-08-19 | 2009-03-25 | 株式会社半導体理工学研究センター | 命令スケジューリングのシミュレーション方法とシミュレーションシステム |
US7296259B2 (en) | 2002-09-11 | 2007-11-13 | Agere Systems Inc. | Processor system with cache-based software breakpoints |
US6934828B2 (en) | 2002-09-17 | 2005-08-23 | Intel Corporation | Decoupling floating point linear address |
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 |
US7299458B2 (en) | 2002-10-31 | 2007-11-20 | Src Computers, Inc. | System and method for converting control flow graph representations to control-dataflow graph representations |
US20040123078A1 (en) | 2002-12-24 | 2004-06-24 | Hum Herbert H | Method and apparatus for processing a load-lock instruction using a scoreboard mechanism |
US20040139299A1 (en) | 2003-01-14 | 2004-07-15 | International Business Machines Corporation | Operand forwarding in a superscalar processor |
US7210127B1 (en) | 2003-04-03 | 2007-04-24 | Sun Microsystems | Methods and apparatus for executing instructions in parallel |
US7055007B2 (en) * | 2003-04-10 | 2006-05-30 | Arm Limited | Data processor memory circuit |
US7284100B2 (en) | 2003-05-12 | 2007-10-16 | International Business Machines Corporation | Invalidating storage, clearing buffer entries, and an instruction therefor |
US6996698B2 (en) | 2003-05-12 | 2006-02-07 | International Business Machines Corporation | Blocking processing restrictions based on addresses |
US7349968B2 (en) | 2003-07-31 | 2008-03-25 | International Business Machines Corporation | Method, system and program product for asynchronously processing requests |
CN1842770A (zh) | 2003-08-28 | 2006-10-04 | 美普思科技有限公司 | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 |
US7207038B2 (en) | 2003-08-29 | 2007-04-17 | Nokia Corporation | Constructing control flows graphs of binary executable programs at post-link time |
US7539974B2 (en) | 2003-10-24 | 2009-05-26 | Microsoft Corporation | Scalable synchronous and asynchronous processing of monitoring rules |
US7310722B2 (en) | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
US8607209B2 (en) | 2004-02-04 | 2013-12-10 | Bluerisc Inc. | Energy-focused compiler-assisted branch prediction |
US7500087B2 (en) | 2004-03-09 | 2009-03-03 | Intel Corporation | Synchronization of parallel processes using speculative execution of synchronization instructions |
EP1731998A1 (en) | 2004-03-29 | 2006-12-13 | Kyoto University | Data processing device, data processing program, and recording medium containing the data processing program |
US7392524B2 (en) | 2004-04-06 | 2008-06-24 | International Business Machines Corporation | Method, system, and storage medium for managing computer processing functions |
EP1870814B1 (en) | 2006-06-19 | 2014-08-13 | Texas Instruments France | Method and apparatus for secure demand paging for processor devices |
US7334143B2 (en) | 2004-04-19 | 2008-02-19 | Hewlett-Packard Development Company, L.P. | Computer power conservation apparatus and method that enables less speculative execution during light processor load based on a branch confidence threshold value |
US8719837B2 (en) * | 2004-05-19 | 2014-05-06 | Synopsys, Inc. | Microprocessor architecture having extendible logic |
US8607241B2 (en) | 2004-06-30 | 2013-12-10 | Intel Corporation | Compare and exchange operation using sleep-wakeup mechanism |
US7571284B1 (en) | 2004-06-30 | 2009-08-04 | Sun Microsystems, Inc. | Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor |
US7873776B2 (en) | 2004-06-30 | 2011-01-18 | Oracle America, Inc. | Multiple-core processor with support for multiple virtual processors |
US7685354B1 (en) | 2004-06-30 | 2010-03-23 | Sun Microsystems, Inc. | Multiple-core processor with flexible mapping of processor cores to cache banks |
US8230252B2 (en) | 2004-07-20 | 2012-07-24 | Hewlett-Packard Development Company, L.P. | Time of day response |
US8166282B2 (en) | 2004-07-21 | 2012-04-24 | Intel Corporation | Multi-version register file for multithreading processors with live-in precomputation |
US7606995B2 (en) | 2004-07-23 | 2009-10-20 | Hewlett-Packard Development Company, L.P. | Allocating resources to partitions in a partitionable computer |
US7747992B2 (en) | 2004-08-23 | 2010-06-29 | Intel Corporation | Methods and apparatus for creating software basic block layouts |
US7748001B2 (en) | 2004-09-23 | 2010-06-29 | Intel Corporation | Multi-thread processing system for detecting and handling live-lock conditions by arbitrating livelock priority of logical processors based on a predertermined amount of time |
US8015392B2 (en) | 2004-09-29 | 2011-09-06 | Intel Corporation | Updating instructions to free core in multi-core processor with core sequence table indicating linking of thread sequences for processing queued packets |
JP4345630B2 (ja) | 2004-09-29 | 2009-10-14 | ソニー株式会社 | 情報処理装置、割り込み処理制御方法、並びにコンピュータ・プログラム |
JP4982971B2 (ja) | 2004-09-29 | 2012-07-25 | ソニー株式会社 | 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム |
US7552318B2 (en) | 2004-12-17 | 2009-06-23 | International Business Machines Corporation | Branch lookahead prefetch for microprocessors |
US8756605B2 (en) | 2004-12-17 | 2014-06-17 | Oracle America, Inc. | Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline |
US8151092B2 (en) | 2005-01-12 | 2012-04-03 | International Business Machines Corporation | Control signal memoization in a multiple instruction issue microprocessor |
US7853777B2 (en) | 2005-02-04 | 2010-12-14 | Mips Technologies, Inc. | Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions |
US7380038B2 (en) | 2005-02-04 | 2008-05-27 | Microsoft Corporation | Priority registers for biasing access to shared resources |
US7805574B2 (en) | 2005-02-09 | 2010-09-28 | International Business Machines Corporation | Method and cache system with soft I-MRU member protection scheme during make MRU allocation |
US7152155B2 (en) | 2005-02-18 | 2006-12-19 | Qualcomm Incorporated | System and method of correcting a branch misprediction |
US7526633B2 (en) | 2005-03-23 | 2009-04-28 | Qualcomm Incorporated | Method and system for encoding variable length packets with variable instruction sizes |
US7447882B2 (en) | 2005-04-20 | 2008-11-04 | Arm Limited | Context switching within a data processing system having a branch prediction mechanism |
US7581082B2 (en) | 2005-05-13 | 2009-08-25 | Texas Instruments Incorporated | Software source transfer selects instruction word sizes |
US7673119B2 (en) | 2005-05-13 | 2010-03-02 | Texas Instruments Incorporated | VLIW optional fetch packet header extends instruction set space |
JP4322232B2 (ja) | 2005-06-14 | 2009-08-26 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム |
US7882339B2 (en) | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
US7779213B2 (en) | 2005-08-29 | 2010-08-17 | The Invention Science Fund I, Inc | Optimization of instruction group execution through hardware resource management policies |
US7437518B2 (en) | 2005-09-07 | 2008-10-14 | Intel Corporation | Hiding conflict, coherence completion and transaction ID elements of a coherence protocol |
US7412353B2 (en) | 2005-09-28 | 2008-08-12 | Intel Corporation | Reliable computing with a many-core processor |
US7490224B2 (en) | 2005-10-07 | 2009-02-10 | International Business Machines Corporation | Time-of-life counter design for handling instruction flushes from a queue |
JP4720436B2 (ja) | 2005-11-01 | 2011-07-13 | 株式会社日立製作所 | リコンフィギュラブルプロセッサまたは装置 |
US7716577B2 (en) | 2005-11-14 | 2010-05-11 | Oracle America, Inc. | Method and apparatus for hardware XML acceleration |
KR100806274B1 (ko) | 2005-12-06 | 2008-02-22 | 한국전자통신연구원 | 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법 |
US7475225B2 (en) | 2005-12-30 | 2009-01-06 | Intel Corporation | Method and apparatus for microarchitecture partitioning of execution clusters |
US7565654B2 (en) | 2006-01-10 | 2009-07-21 | National Instruments Corporation | Programmatic control of tasks in a programmable logic controller |
JP4923240B2 (ja) | 2006-01-17 | 2012-04-25 | 国立大学法人東京工業大学 | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム |
US8510596B1 (en) | 2006-02-09 | 2013-08-13 | Virsec Systems, Inc. | System and methods for run time detection and correction of memory corruption |
US7350027B2 (en) | 2006-02-10 | 2008-03-25 | International Business Machines Corporation | Architectural support for thread level speculative execution |
US8266413B2 (en) | 2006-03-14 | 2012-09-11 | The Board Of Trustees Of The University Of Illinois | Processor architecture for multipass processing of instructions downstream of a stalled instruction |
US7802073B1 (en) | 2006-03-29 | 2010-09-21 | Oracle America, Inc. | Virtual core management |
US20070239965A1 (en) | 2006-03-31 | 2007-10-11 | Saul Lewites | Inter-partition communication |
US8010953B2 (en) | 2006-04-04 | 2011-08-30 | International Business Machines Corporation | Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine |
US8327115B2 (en) | 2006-04-12 | 2012-12-04 | Soft Machines, Inc. | Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode |
JP4849606B2 (ja) | 2006-04-28 | 2012-01-11 | 株式会社日立製作所 | 制御フロー誤り検出方法、データ処理装置、及びコンパイラ |
US7958396B2 (en) | 2006-05-19 | 2011-06-07 | Microsoft Corporation | Watchdog processors in multicore systems |
US8473724B1 (en) | 2006-07-09 | 2013-06-25 | Oracle America, Inc. | Controlling operation of a processor according to execution mode of an instruction sequence |
US7461241B2 (en) | 2006-07-31 | 2008-12-02 | International Business Machines Corporation | Concurrent physical processor reassignment method |
US8032734B2 (en) | 2006-09-06 | 2011-10-04 | Mips Technologies, Inc. | Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor |
EP2523101B1 (en) | 2006-11-14 | 2014-06-04 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
US8028131B2 (en) | 2006-11-29 | 2011-09-27 | Intel Corporation | System and method for aggregating core-cache clusters in order to produce multi-core processors |
US20080148020A1 (en) | 2006-12-13 | 2008-06-19 | Luick David A | Low Cost Persistent Instruction Predecoded Issue and Dispatcher |
US7624254B2 (en) | 2007-01-24 | 2009-11-24 | Qualcomm Incorporated | Segmented pipeline flushing for mispredicted branches |
WO2008090665A1 (ja) | 2007-01-25 | 2008-07-31 | Nec Corporation | プログラム並列化方法及び装置 |
US8181168B1 (en) | 2007-02-07 | 2012-05-15 | Tilera Corporation | Memory access assignment for parallel processing architectures |
US7719532B2 (en) | 2007-02-09 | 2010-05-18 | International Business Machines Corporation | Efficient and flexible data organization for acceleration data structure nodes |
JP4339371B2 (ja) | 2007-03-22 | 2009-10-07 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置および情報処理方法 |
US20080235493A1 (en) | 2007-03-23 | 2008-09-25 | Qualcomm Incorporated | Instruction communication techniques for multi-processor system |
US20080250227A1 (en) | 2007-04-04 | 2008-10-09 | Linderman Michael D | General Purpose Multiprocessor Programming Apparatus And Method |
US7853950B2 (en) | 2007-04-05 | 2010-12-14 | International Business Machines Corporarion | Executing multiple threads in a processor |
JP4987555B2 (ja) | 2007-04-27 | 2012-07-25 | 株式会社東芝 | 情報処理装置、および情報処理システム |
JP2008299790A (ja) * | 2007-06-04 | 2008-12-11 | Digital Electronics Corp | マイクロプロセッサ |
JP5084355B2 (ja) | 2007-06-07 | 2012-11-28 | キヤノン株式会社 | フロー処理実行装置、フロー処理実行方法及びプログラム |
US8161476B2 (en) | 2007-07-04 | 2012-04-17 | International Business Machines Corporation | Processor exclusivity in a partitioned system |
US8180997B2 (en) | 2007-07-05 | 2012-05-15 | Board Of Regents, University Of Texas System | Dynamically composing processor cores to form logical processors |
US8447911B2 (en) | 2007-07-05 | 2013-05-21 | Board Of Regents, University Of Texas System | Unordered load/store queue |
CN101344843B (zh) | 2007-07-10 | 2012-11-21 | 北京简约纳电子有限公司 | 一种指令级并行处理方法 |
JP2009026106A (ja) | 2007-07-20 | 2009-02-05 | Oki Electric Ind Co Ltd | 命令コード圧縮方法と命令フェッチ回路 |
US8225315B1 (en) | 2007-07-23 | 2012-07-17 | Oracle America, Inc. | Virtual core management |
US9710384B2 (en) | 2008-01-04 | 2017-07-18 | Micron Technology, Inc. | Microprocessor architecture having alternative memory access paths |
US8006070B2 (en) | 2007-12-05 | 2011-08-23 | International Business Machines Corporation | Method and apparatus for inhibiting fetch throttling when a processor encounters a low confidence branch instruction in an information handling system |
US9529592B2 (en) | 2007-12-27 | 2016-12-27 | Intel Corporation | Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation |
US8146094B2 (en) | 2008-02-01 | 2012-03-27 | International Business Machines Corporation | Guaranteeing delivery of multi-packet GSM messages |
US7877586B2 (en) | 2008-02-01 | 2011-01-25 | International Business Machines Corporation | Branch target address cache selectively applying a delayed hit |
US7921278B2 (en) | 2008-03-10 | 2011-04-05 | International Business Machines Corporation | Early exit processing of iterative refinement algorithm using register dependency disable |
US7885967B2 (en) | 2008-05-30 | 2011-02-08 | Red Hat, Inc. | Management of large dynamic tables |
US8321850B2 (en) | 2008-06-06 | 2012-11-27 | Vmware, Inc. | Sharing and persisting code caches |
US8565065B2 (en) | 2008-06-23 | 2013-10-22 | Qualcomm Incorporated | Methods and systems for utilizing a multicast/broadcast CID scheduling MAC management message |
WO2010026485A1 (en) | 2008-09-08 | 2010-03-11 | Bridgeco Ag | Very long instruction word architecture with multiple data queues |
WO2010043401A2 (en) | 2008-10-15 | 2010-04-22 | Martin Vorbach | Data processing device |
US8612698B2 (en) | 2008-10-31 | 2013-12-17 | Intel Corporation | Replacement policy for hot code detection |
US20100146209A1 (en) | 2008-12-05 | 2010-06-10 | Intellectual Ventures Management, Llc | Method and apparatus for combining independent data caches |
US8127119B2 (en) | 2008-12-05 | 2012-02-28 | The Board Of Regents Of The University Of Texas System | Control-flow prediction using multiple independent predictors |
JP2010198131A (ja) | 2009-02-23 | 2010-09-09 | Renesas Electronics Corp | プロセッサシステム、及びプロセッサシステムの動作モード切り替え方法 |
US8380964B2 (en) | 2009-04-03 | 2013-02-19 | International Business Machines Corporation | Processor including age tracking of issue queue instructions |
US9489207B2 (en) | 2009-04-14 | 2016-11-08 | International Business Machines Corporation | Processor and method for partially flushing a dispatched instruction group including a mispredicted branch |
US8438547B2 (en) | 2009-05-05 | 2013-05-07 | Freescale Semiconductor, Inc. | Address translation trace message generation for debug |
US8214831B2 (en) | 2009-05-05 | 2012-07-03 | International Business Machines Corporation | Runtime dependence-aware scheduling using assist thread |
US20100325395A1 (en) | 2009-06-19 | 2010-12-23 | Doug Burger | Dependence prediction in a memory system |
US8533436B2 (en) | 2009-06-26 | 2013-09-10 | Intel Corporation | Adaptively handling remote atomic execution based upon contention prediction |
US8433885B2 (en) | 2009-09-09 | 2013-04-30 | Board Of Regents Of The University Of Texas System | Method, system and computer-accessible medium for providing a distributed predicate prediction |
US10698859B2 (en) | 2009-09-18 | 2020-06-30 | The Board Of Regents Of The University Of Texas System | Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture |
US20110078424A1 (en) | 2009-09-30 | 2011-03-31 | International Business Machines Corporation | Optimizing program code using branch elimination |
US8464002B2 (en) | 2009-10-14 | 2013-06-11 | Board Of Regents Of The University Of Texas System | Burst-based cache dead block prediction |
WO2011067896A1 (en) | 2009-12-02 | 2011-06-09 | Mush-A Co., Ltd. | Data processing apparatus, data processing system, packet, recording medium, storage device, and data processing method |
JP5057256B2 (ja) | 2009-12-02 | 2012-10-24 | 株式会社Mush−A | データ処理装置、データ処理システムおよびデータ処理方法 |
CN102096579B (zh) | 2009-12-11 | 2013-10-16 | 陈罡 | 一种嵌入式自适应模糊微处理器的组成与结构 |
CN102117198B (zh) | 2009-12-31 | 2015-07-15 | 上海芯豪微电子有限公司 | 一种分支处理方法 |
WO2011079942A1 (en) | 2009-12-28 | 2011-07-07 | Hyperion Core, Inc. | Optimisation of loops and data flow sections |
GB201001621D0 (en) | 2010-02-01 | 2010-03-17 | Univ Catholique Louvain | A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms |
US8850166B2 (en) | 2010-02-18 | 2014-09-30 | International Business Machines Corporation | Load pair disjoint facility and instruction therefore |
US8434074B2 (en) | 2010-02-24 | 2013-04-30 | Intel Corporation | Register allocation with SIMD architecture using write masks |
US8667260B2 (en) | 2010-03-05 | 2014-03-04 | International Business Machines Corporation | Building approximate data dependences with a moving window |
JP2011209904A (ja) | 2010-03-29 | 2011-10-20 | Sony Corp | 命令フェッチ装置、および、プロセッサ |
KR101664108B1 (ko) | 2010-04-13 | 2016-10-11 | 삼성전자주식회사 | 멀티 코어의 동기화를 효율적으로 처리하기 위한 하드웨어 가속 장치 및 방법 |
US8290994B2 (en) | 2010-05-05 | 2012-10-16 | International Business Machines Corporation | Obtaining file system view in block-level data storage systems |
US8201024B2 (en) | 2010-05-17 | 2012-06-12 | Microsoft Corporation | Managing memory faults |
US8639945B2 (en) | 2010-05-25 | 2014-01-28 | Via Technologies, Inc. | Branch and switch key instruction in a microprocessor that fetches and decrypts encrypted instructions |
US8555038B2 (en) | 2010-05-28 | 2013-10-08 | Oracle International Corporation | Processor and method providing instruction support for instructions that utilize multiple register windows |
JP5707011B2 (ja) | 2010-06-18 | 2015-04-22 | ボード・オブ・リージエンツ,ザ・ユニバーシテイ・オブ・テキサス・システム | 統合分岐先・述語予測 |
US10241799B2 (en) | 2010-07-16 | 2019-03-26 | Qualcomm Incorporated | Out-of-order command execution with sliding windows to maintain completion statuses |
US20120030451A1 (en) | 2010-07-28 | 2012-02-02 | Broadcom Corporation | Parallel and long adaptive instruction set architecture |
US9052890B2 (en) | 2010-09-25 | 2015-06-09 | Intel Corporation | Execute at commit state update instructions, apparatus, methods, and systems |
US8904115B2 (en) | 2010-09-28 | 2014-12-02 | Texas Instruments Incorporated | Cache with multiple access pipelines |
US9836304B2 (en) | 2010-11-15 | 2017-12-05 | Advanced Micro Devices, Inc. | Cumulative confidence fetch throttling |
US9552206B2 (en) | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
US8589892B2 (en) | 2010-11-21 | 2013-11-19 | International Business Machines Corporation | Verification of speculative execution |
US8612726B2 (en) | 2010-12-07 | 2013-12-17 | King Fahd University Of Petroleum And Minerals | Multi-cycle programmable processor with FSM implemented controller selectively altering functional units datapaths based on instruction type |
US9164772B2 (en) | 2011-02-04 | 2015-10-20 | Qualcomm Incorporated | Hybrid queue for storing instructions from fetch queue directly in out-of-order queue or temporarily in in-order queue until space is available |
US9176737B2 (en) | 2011-02-07 | 2015-11-03 | Arm Limited | Controlling the execution of adjacent instructions that are dependent upon a same data condition |
CN108376097B (zh) | 2011-03-25 | 2022-04-15 | 英特尔公司 | 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段 |
KR101966712B1 (ko) | 2011-03-25 | 2019-04-09 | 인텔 코포레이션 | 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트 |
US8909941B1 (en) | 2011-03-31 | 2014-12-09 | Xilinx, Inc. | Programmable integrated circuit and a method of enabling the detection of tampering with data provided to a programmable integrated circuit |
US9619301B2 (en) | 2011-04-06 | 2017-04-11 | Telefonaktiebolaget L M Ericsson (Publ) | Multi-core memory model and speculative mode processor management |
CN102221987B (zh) | 2011-05-11 | 2014-10-01 | 西安电子科技大学 | 基于嵌入式专用指令集处理器的指令集编码方法 |
US9652243B2 (en) | 2011-06-29 | 2017-05-16 | International Business Machines Corporation | Predicting out-of-order instruction level parallelism of threads in a multi-threaded processor |
US20130024676A1 (en) | 2011-07-19 | 2013-01-24 | Glew Andrew F | Control flow integrity |
CN102306094B (zh) | 2011-08-16 | 2014-03-26 | 北京北大众志微系统科技有限责任公司 | 实现现代处理器间接转移预测的装置及方法 |
US9697002B2 (en) | 2011-10-03 | 2017-07-04 | International Business Machines Corporation | Computer instructions for activating and deactivating operands |
CN102364431B (zh) * | 2011-10-20 | 2014-09-10 | 北京北大众志微系统科技有限责任公司 | 一种实现读指令执行的方法及装置 |
WO2013081556A1 (en) | 2011-12-01 | 2013-06-06 | National University Of Singapore | Polymorphic heterogeneous multi-core architecture |
US8639882B2 (en) | 2011-12-14 | 2014-01-28 | Nvidia Corporation | Methods and apparatus for source operand collector caching |
US9442861B2 (en) | 2011-12-20 | 2016-09-13 | Intel Corporation | System and method for out-of-order prefetch instructions in an in-order pipeline |
US9607017B2 (en) | 2011-12-23 | 2017-03-28 | The Arizona Board Of Regents On Behalf Of The University Of Arizona | Methods of micro-specialization in database management systems |
US20160041827A1 (en) | 2011-12-23 | 2016-02-11 | Jesus Corbal | Instructions for merging mask patterns |
CN102566974B (zh) | 2012-01-14 | 2014-03-26 | 哈尔滨工程大学 | 基于同时多线程的取指控制方法 |
US9304776B2 (en) | 2012-01-31 | 2016-04-05 | Oracle International Corporation | System and method for mitigating the impact of branch misprediction when exiting spin loops |
US9348775B2 (en) | 2012-03-16 | 2016-05-24 | Analog Devices, Inc. | Out-of-order execution of bus transactions |
WO2013156825A1 (en) | 2012-04-20 | 2013-10-24 | Freescale Semiconductor, Inc. | A computer system and a method for generating an optimized program code |
US8930678B2 (en) | 2012-04-26 | 2015-01-06 | Intel Corporation | Instruction and logic to length decode X86 instructions |
CN104583936B (zh) | 2012-06-15 | 2019-01-04 | 英特尔公司 | 具有组成按序从存储器进行读取的加载的存储器一致性模型中的乱序加载的信号量方法和系统 |
US8880638B2 (en) | 2012-06-18 | 2014-11-04 | International Business Machines Corporation | Distributed image cache for servicing virtual resource requests in the cloud |
US9160815B2 (en) | 2012-06-28 | 2015-10-13 | Intel Corporation | Method and apparatus for virtual machine interoperability |
CN105760265B (zh) | 2012-06-29 | 2019-11-05 | 英特尔公司 | 用于测试事务性执行状态的指令和逻辑 |
KR101964927B1 (ko) | 2012-07-17 | 2019-04-03 | 삼성전자 주식회사 | 캐싱 프록시 방법 및 장치 |
GB2505884B (en) | 2012-09-12 | 2015-06-03 | Imagination Tech Ltd | Dynamically resizable circular buffers |
US9063721B2 (en) | 2012-09-14 | 2015-06-23 | The Research Foundation For The State University Of New York | Continuous run-time validation of program execution: a practical approach |
US9400650B2 (en) | 2012-09-28 | 2016-07-26 | Intel Corporation | Read and write masks update instruction for vectorization of recursive computations over interdependent data |
US20140095847A1 (en) | 2012-09-28 | 2014-04-03 | Doron Orenstein | Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading |
US9710276B2 (en) | 2012-11-09 | 2017-07-18 | Advanced Micro Devices, Inc. | Execution of instruction loops using an instruction buffer |
US8930760B2 (en) | 2012-12-17 | 2015-01-06 | International Business Machines Corporation | Validating cache coherency protocol within a processor |
US9619229B2 (en) | 2012-12-27 | 2017-04-11 | Intel Corporation | Collapsing of multiple nested loops, methods and instructions |
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 |
US9361111B2 (en) | 2013-01-09 | 2016-06-07 | Arm Limited | Tracking speculative execution of instructions for a register renaming data store |
US10223124B2 (en) | 2013-01-11 | 2019-03-05 | Advanced Micro Devices, Inc. | Thread selection at a processor based on branch prediction confidence |
GB2514956B (en) | 2013-01-21 | 2015-04-01 | Imagination Tech Ltd | Allocating resources to threads based on speculation metric |
US9354884B2 (en) | 2013-03-13 | 2016-05-31 | International Business Machines Corporation | Processor with hybrid pipeline capable of operating in out-of-order and in-order modes |
US9891924B2 (en) | 2013-03-15 | 2018-02-13 | Intel Corporation | Method for implementing a reduced size register view data structure in a microprocessor |
US20140281622A1 (en) | 2013-03-15 | 2014-09-18 | Mahesh Wagh | Method, apparatus, and system for improving resume times for root ports and root port integrated endpoints |
US9886277B2 (en) | 2013-03-15 | 2018-02-06 | Intel Corporation | Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources |
US9811342B2 (en) | 2013-03-15 | 2017-11-07 | Intel Corporation | Method for performing dual dispatch of blocks and half blocks |
US9632825B2 (en) | 2013-03-15 | 2017-04-25 | Intel Corporation | Method and apparatus for efficient scheduling for asymmetrical execution units |
US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
WO2014143042A1 (en) | 2013-03-15 | 2014-09-18 | Intel Corporation | Path profiling using hardware and software combination |
US9195606B2 (en) | 2013-03-15 | 2015-11-24 | Intel Corporation | Dead block predictors for cooperative execution in the last level cache |
US9471318B2 (en) | 2013-03-15 | 2016-10-18 | International Business Machines Corporation | System management and instruction counting |
US10241793B2 (en) | 2013-03-15 | 2019-03-26 | Analog Devices Global | Paralleizing loops in the presence of possible memory aliases |
JP6086230B2 (ja) | 2013-04-01 | 2017-03-01 | 日本電気株式会社 | 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法 |
US9594700B2 (en) | 2013-04-17 | 2017-03-14 | Nvidia Corporation | Speculative memory controller |
WO2014189510A1 (en) | 2013-05-23 | 2014-11-27 | Intel Corporation | Techniques for detecting return-oriented programming |
US9792252B2 (en) | 2013-05-31 | 2017-10-17 | Microsoft Technology Licensing, Llc | Incorporating a spatial array into one or more programmable processor cores |
GB2515076B (en) | 2013-06-13 | 2020-07-15 | Advanced Risc Mach Ltd | A data processing apparatus and method for handling retrieval of instructions from an instruction cache |
US10372527B2 (en) | 2013-07-15 | 2019-08-06 | Intel Corporation | Method of encoding data |
GB2510655B (en) | 2013-07-31 | 2015-02-25 | Imagination Tech Ltd | Prioritizing instructions based on type |
US9507404B2 (en) | 2013-08-28 | 2016-11-29 | Via Technologies, Inc. | Single core wakeup multi-core synchronization mechanism |
US20150074355A1 (en) | 2013-09-12 | 2015-03-12 | Lsi Corporation | Efficient caching of file system journals |
CN103473508B (zh) | 2013-09-17 | 2016-07-27 | 肖楠 | 操作系统内核运行时安全验证方法 |
US9547496B2 (en) | 2013-11-07 | 2017-01-17 | Microsoft Technology Licensing, Llc | Energy efficient multi-modal instruction issue |
CN104731718A (zh) * | 2013-12-24 | 2015-06-24 | 上海芯豪微电子有限公司 | 一种缓存系统和方法 |
CN103744644B (zh) | 2014-01-13 | 2017-03-01 | 上海交通大学 | 采用四核结构搭建的四核处理器系统及数据交换方法 |
US9448936B2 (en) | 2014-01-13 | 2016-09-20 | Apple Inc. | Concurrent store and load operations |
US9785441B2 (en) | 2014-05-29 | 2017-10-10 | Mill Computing, Inc. | Computer processor employing instructions with elided nop operations |
US9830159B2 (en) | 2014-06-02 | 2017-11-28 | International Business Machines Corporation | Suspending branch prediction upon entering transactional execution mode |
CN104310225A (zh) | 2014-08-19 | 2015-01-28 | 中国十七冶集团有限公司 | 建筑起重机械安全控制装置 |
US20160055004A1 (en) | 2014-08-21 | 2016-02-25 | Edward T. Grochowski | Method and apparatus for non-speculative fetch and execution of control-dependent blocks |
CN104239047B (zh) | 2014-10-13 | 2017-10-24 | 深圳市神州海纳科技有限公司 | 一种信息采集的方法及其装置 |
US9875106B2 (en) | 2014-11-12 | 2018-01-23 | Mill Computing, Inc. | Computer processor employing instruction block exit prediction |
US9569613B2 (en) | 2014-12-23 | 2017-02-14 | Intel Corporation | Techniques for enforcing control flow integrity using binary translation |
CN104637288B (zh) | 2014-12-31 | 2019-03-08 | 小米科技有限责任公司 | 指令组确定方法和装置 |
US20160274915A1 (en) | 2015-03-20 | 2016-09-22 | Qualcomm Incorporated | PROVIDING LOWER-OVERHEAD MANAGEMENT OF DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPs), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA |
US20160328237A1 (en) | 2015-05-07 | 2016-11-10 | Via Alliance Semiconductor Co., Ltd. | System and method to reduce load-store collision penalty in speculative out of order engine |
US9952867B2 (en) | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
US20160378491A1 (en) | 2015-06-26 | 2016-12-29 | Microsoft Technology Licensing, Llc | Determination of target location for transfer of processor control |
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 |
US9946548B2 (en) | 2015-06-26 | 2018-04-17 | Microsoft Technology Licensing, Llc | Age-based management of instruction blocks in a processor instruction window |
US10191747B2 (en) | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
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 |
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 |
US9720693B2 (en) | 2015-06-26 | 2017-08-01 | Microsoft Technology Licensing, Llc | Bulk allocation of instruction blocks to a processor instruction window |
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 |
US20160378488A1 (en) | 2015-06-26 | 2016-12-29 | Microsoft Technology Licensing, Llc | Access to target address |
US10175988B2 (en) | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
US10095519B2 (en) | 2015-09-19 | 2018-10-09 | Microsoft Technology Licensing, Llc | Instruction block address register |
US20170083343A1 (en) | 2015-09-19 | 2017-03-23 | Microsoft Technology Licensing, Llc | Out of order commit |
US9830152B2 (en) | 2015-12-22 | 2017-11-28 | Qualcomm Incorporated | Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor |
US10223118B2 (en) | 2016-03-24 | 2019-03-05 | Qualcomm Incorporated | Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor |
-
2015
- 2015-06-26 US US14/752,724 patent/US10346168B2/en active Active
-
2016
- 2016-06-04 TW TW105117721A patent/TW201712533A/zh unknown
- 2016-06-23 WO PCT/US2016/038850 patent/WO2016210027A1/en active Application Filing
- 2016-06-23 EP EP16736331.6A patent/EP3314399B1/en active Active
- 2016-06-23 MX MX2017016197A patent/MX2017016197A/es unknown
- 2016-06-23 AU AU2016281599A patent/AU2016281599A1/en not_active Abandoned
- 2016-06-23 KR KR1020177036876A patent/KR102502780B1/ko active IP Right Grant
- 2016-06-23 CN CN201680037470.2A patent/CN107810476B/zh active Active
- 2016-06-23 CA CA2986266A patent/CA2986266A1/en not_active Abandoned
- 2016-06-23 BR BR112017024301A patent/BR112017024301A2/pt not_active Application Discontinuation
- 2016-06-23 JP JP2017565975A patent/JP2018518775A/ja active Pending
-
2017
- 2017-11-08 PH PH12017550124A patent/PH12017550124A1/en unknown
- 2017-12-07 IL IL256168A patent/IL256168A/en unknown
- 2017-12-21 CO CONC2017/0013252A patent/CO2017013252A2/es unknown
- 2017-12-21 CL CL2017003310A patent/CL2017003310A1/es unknown
-
2018
- 2018-05-07 HK HK18105889.3A patent/HK1246443A1/zh unknown
-
2019
- 2019-06-24 US US16/450,172 patent/US11048517B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
TW201712533A (zh) | 2017-04-01 |
CO2017013252A2 (es) | 2018-01-16 |
CL2017003310A1 (es) | 2018-06-22 |
HK1246443A1 (zh) | 2018-09-07 |
US20190310852A1 (en) | 2019-10-10 |
CN107810476B (zh) | 2021-02-23 |
CA2986266A1 (en) | 2016-12-29 |
KR102502780B1 (ko) | 2023-02-22 |
EP3314399B1 (en) | 2022-04-20 |
WO2016210027A1 (en) | 2016-12-29 |
CN107810476A (zh) | 2018-03-16 |
KR20180020985A (ko) | 2018-02-28 |
US20160378479A1 (en) | 2016-12-29 |
EP3314399A1 (en) | 2018-05-02 |
MX2017016197A (es) | 2018-03-01 |
IL256168A (en) | 2018-02-28 |
US11048517B2 (en) | 2021-06-29 |
BR112017024301A2 (pt) | 2018-07-24 |
AU2016281599A1 (en) | 2017-11-30 |
PH12017550124A1 (en) | 2018-02-26 |
US10346168B2 (en) | 2019-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11048517B2 (en) | Decoupled processor instruction window and operand buffer | |
EP3314402B1 (en) | Age-based management of instruction blocks in a processor instruction window | |
EP3314406B1 (en) | Allocation of instruction blocks to a processor instruction window | |
US9952867B2 (en) | Mapping instruction blocks based on block size | |
US10521239B2 (en) | Microprocessor accelerated code optimizer | |
US20140344554A1 (en) | Microprocessor accelerated code optimizer and dependency reordering method | |
US10409599B2 (en) | Decoding information about a group of instructions including a size of the group of instructions | |
CN114174985A (zh) | 在基于块的指令集架构中高扇出通信的高效编码 |