JP6708335B2 - ユーザレベルの分岐及び結合を行うプロセッサ、方法、システム、及び命令 - Google Patents

ユーザレベルの分岐及び結合を行うプロセッサ、方法、システム、及び命令 Download PDF

Info

Publication number
JP6708335B2
JP6708335B2 JP2017539015A JP2017539015A JP6708335B2 JP 6708335 B2 JP6708335 B2 JP 6708335B2 JP 2017539015 A JP2017539015 A JP 2017539015A JP 2017539015 A JP2017539015 A JP 2017539015A JP 6708335 B2 JP6708335 B2 JP 6708335B2
Authority
JP
Japan
Prior art keywords
user
processor
instruction
level
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.)
Active
Application number
JP2017539015A
Other languages
English (en)
Other versions
JP2018509687A (ja
Inventor
ベン−キキ、オレン
パルド、イラン
ディー. ロビソン、アーチ
ディー. ロビソン、アーチ
エイチ. カウニー、ジェームズ
エイチ. カウニー、ジェームズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2018509687A publication Critical patent/JP2018509687A/ja
Application granted granted Critical
Publication of JP6708335B2 publication Critical patent/JP6708335B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Description

本明細書で説明される実施形態は、概してプロセッサに関する。具体的には、本明細書で説明される実施形態は、概してプロセッサ内の並列処理に関する。
1つ又は複数のプロセッサを有するコンピュータシステム及び他の電子デバイスの性能を向上させるのに用いられている手法の1つが、並列処理である。並列処理は一般に、1つより多くのハードウェアスレッド、コア、中央処理装置、プロセッサ、あるいはプログラム又は複数のスレッドを実行する他のプロセッサ要素を同時に使用することを意味する。並列処理は、プログラムを並列に実行するそのようなプロセッサ要素がより多く存在するので、プログラムをより速く実行することを可能にするのに役立つことができる。
本発明は、以下の説明と、実施形態を示すのに用いられる添付図面とを参照することで、最も良く理解され得る。その図面は以下の通りである。
プロセッサの実施形態のブロック図である。 ユーザレベルの分岐命令の実施形態と、複数のユーザレベルの同期及び終了命令の実施形態とを用いて実装された分岐結合の論理構成に関する例を示す図である。 スレッドに同期バリアで待機させるよう動作するユーザレベルの分岐命令の実施形態を用いた、分岐結合コードのブロック図である。 ユーザレベルの分岐命令と、スレッドに同期バリアで待機させるよう動作する別個のユーザレベルの同期及び結合命令との実施形態を用いた、分岐結合コードのブロック図である。 好適な一対の同種のプロセッサ要素に関する、例示的な実施形態のブロック図である。 好適な一対の異種のプロセッサ要素に関する、例示的な実施形態のブロック図である。 ユーザレベルの分岐命令の実施形態を実行するプロセッサに関する、例示的な実施形態のブロック図である。 ユーザレベルの同期及び終了命令の実施形態を実行するプロセッサに関する、例示的な実施形態のブロック図である。 インオーダパイプラインの実施形態と、レジスタリネーミング・アウトオブオーダ発行/実行パイプラインの実施形態とを示すブロック図である。 実行エンジンユニットに結合されたフロントエンドユニットを含み、実行エンジンユニット及びフロントエンドユニットの両方がメモリユニットに結合されたプロセッサコアの実施形態のブロック図である。 オンダイ相互接続ネットワークへの接続に加え、レベル2(L2)キャッシュのローカルサブセットを有する単一のプロセッサコアに関する実施形態のブロック図である。 図10Aのプロセッサコアの一部を拡大して見た実施形態のブロック図である。 1つより多くのコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサに関する実施形態のブロック図である。 コンピュータアーキテクチャの第1の実施形態に関するブロック図である。 コンピュータアーキテクチャの第2の実施形態に関するブロック図である。 コンピュータアーキテクチャの第3の実施形態に関するブロック図である。 コンピュータアーキテクチャの第4の実施形態に関するブロック図である。 本発明の実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換する、ソフトウェア命令変換器の使用に関するブロック図である。
ユーザレベルの分岐命令(例えば、ユーザレベルの分岐命令、ユーザレベルの分岐及び同期結合命令)、ユーザレベルの同期及び終了命令、ユーザレベルの同期及び終了命令、これらの命令を実行又は遂行するプロセッサ、これらの命令を実行又は遂行するときにプロセッサにより実行される方法、及び、これらの命令を実行又は遂行する1つ又は複数のプロセッサを組み込むシステムが、本明細書に開示される。以下の説明では、多くの具体的な詳細が明記される(例えば、具体的な命令オペレーション、プロセッサ構成、マイクロアーキテクチャの詳細、オペレーションの順序など)。しかし、これらの具体的な詳細を用いずに、実施形態は実施されてよい。他の例では、よく知られた回路、構造、及び手法は、本明細書の理解をあいまいにしないように、詳細に示されてはいない。
図1は、プロセッサ100の実施形態のブロック図である。いくつかの実施形態では、プロセッサは、汎用プロセッサ(例えば、デスクトップ、ラップトップ、スマートフォン、又は他のコンピュータに用いられるタイプの汎用マイクロプロセッサ又は中央処理装置(CPU))であってよい。あるいは、プロセッサは専用プロセッサであってもよい。好適な専用プロセッサの例には、限定されないが、グラフィックスプロセッサ、コプロセッサ、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、及びコントローラ(例えば、マイクロコントローラ)が含まれる。プロセッサは、様々な複合命令セット計算(CISC)アーキテクチャ、縮小命令セット計算(RISC)アーキテクチャ、超長命令語(VLIW)アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのいずれかを有することができ、あるいは異なるアーキテクチャの組み合わせを有することもできる。
プロセッサは、第1のプロセッサ要素102と、複数の追加のプロセッサ要素114とを有する。第1のプロセッサ要素及び追加のプロセッサ要素は、1つ又は複数のバス又は他の相互接続112(例えば、1つ又は複数のリング、トーラス、メッシュなど)により共に接続されてよく、又はそうでなければ結合されてよい。示されるように、複数の追加のプロセッサ要素は、第1の追加のプロセッサ要素114−1から第Nの追加のプロセッサ要素114−Nまでを含むことができる。追加のプロセッサ要素の数は、特定の実装に適切な任意の必要な数を表すことができる。例として、追加のプロセッサ要素の数は、2個から数百個程度の範囲、又はいくつかの場合では10個から約200個の範囲、又はいくつかの場合では20個から約200個の範囲、又はいくつかの場合では10個より多く、20個より多く、又は30個より多くてよいが、本発明の範囲はそのように限定されてはいない。1つの例として、約40個から約200個の範囲であってよいが、これは必須ではない。いくつかの実施形態では、第1のプロセッサ要素102、及び追加のプロセッサ要素114のそれぞれは、単一の集積回路ダイ又は他の半導体基板上に全て配置されてよい。あるいは、追加のプロセッサ要素114のうちのいくつか又は全ては、第1のプロセッサ要素とは異なるダイ又は他の半導体基板上に任意に配置されてもよく、第1のプロセッサ要素と同じ集積回路パッケージ内に任意に含まれてもよい。いくつかの実施形態では、追加のプロセッサ要素114は、一般にドライバ、ミドルウェアなどを通してのみアクセスされ得るグラフィックスカード、GPGPU、又は他のそのような別個のデバイスを表さなくてよい。
第1のプロセッサ要素102と追加のプロセッサ要素114のそれぞれとに好適なプロセッサ要素の例には、限定されないが、コア、ハードウェアスレッド、スレッドユニット、スレッドスロット、コンテキスト又はアーキテクチャ状態及びプログラムカウンタ(当技術分野において命令ポインタとも呼ばれる)を格納するよう動作するロジック、状態を格納しコードに別個に関連付けられるよう動作するロジック、及び他の論理プロセッサが含まれる。コアという用語は、集積回路上に位置し、独立したアーキテクチャ状態(例えば実行状態)を維持することができるロジックを指すのに用いられることが多く、ロジック内でアーキテクチャ状態が専用の実行リソース及び特定の他のリソースに関連付けられる。これに対して、ハードウェアスレッドという用語は、集積回路上に位置し、独立したアーキテクチャ状態を維持することができるロジックを指すのに用いられることが多く、ロジック内でアーキテクチャ状態が実行リソース又は特定の他のリソースへのアクセスを共有する。いくつかの実行リソース又は特定の他のリソースが、2つ又はそれより多くのアーキテクチャ状態に共有され、他の実行リソース又は特定の他のリソースが、1つのアーキテクチャ状態に特化されている場合、コアという用語及びハードウェアスレッドという用語のそのような用法の間の境界線はあいまいな場合がある。それにもかかわらず、コア、ハードウェアスレッド、及び他のプロセッサ要素は、ソフトウェアによって、個々の論理プロセッサ又はプロセッサ要素とみなされることが多い。概して、スレッド、プロセッサ、又はワークロードは、コア、ハードウェアスレッド、又は他のプロセッサ要素のそれぞれにスケジューリングされてよく、またコア、ハードウェアスレッド、又は他のプロセッサ要素のそれぞれに別個に関連付けられてよい。
第1のプロセッサ要素102は命令セット104を有する。複数の追加のプロセッサ要素114のそれぞれも、対応する命令セット116を有する。第1のプロセッサ要素の命令セット104は、追加のプロセッサ要素それぞれの命令セット116と同じであってよく、又はそれとは異なってもよい(例えば、いくつかの重複する命令及びいくつかの重複しない命令を有することができる)。命令セットは、それぞれのプロセッサ要素の命令セットアーキテクチャ(ISA)の一部であり、プロセッサ要素が実行するよう動作するネイティブな命令を含む。命令セットの命令は、マクロ命令、機械レベルの命令、又はアセンブリ言語命令を表すことがある。
第1のプロセッサ要素の命令セット104には、ユーザレベルの分岐命令106が含まれる。いくつかの実施形態では、ユーザレベルの分岐命令106は、同期及び結合機能を省くことができる(例えば、同期及び結合機能は、別個のユーザレベルの同期及び結合命令、又はそのような機能を実装する複数の他の命令により提供されてよい)。他の実施形態では、命令106は、同期及び結合機能を組み込むユーザレベルの分岐及び同期結合命令であってよい。追加のプロセッサ要素それぞれの命令セット116には、ユーザレベルの同期及び終了命令118が含まれる。ユーザレベルの分岐命令及びユーザレベルの同期及び終了命令は、非特権レベル又はユーザレベルの実行で実行されてよいユーザレベルの命令である。命令セットのそれぞれには、1つ又は複数の非ユーザレベルの命令又は特権命令(不図示)も任意に含まれてよく、これらの命令は、非特権レベル又はユーザレベルの実行で実行されなくてよい。むしろ、非ユーザレベルの命令又は特権命令は、非ユーザレベル又は少なくとも部分的に特権レベルの実行(例えばリング0)でのみ実行されてよく、これらの命令は、オペレーティングシステム、ハイパーバイザ、仮想マシンマネージャ、あるいは他の特権エンティティ又は管理エンティティに確保されてよい。
いくつかの実施形態では、ユーザレベルの分岐命令106及びユーザレベルの同期及び終了命令118は、ユーザが分岐及び結合の論理構成をユーザレベルのアプリケーション又はソフトウェアに実装することを可能にしてよい。分岐及び結合の論理構成では、ソフトウェアの所与の部分(例えば、所与のソフトウェアスレッド)の実行は、ソフトウェアの複数の並列実行(例えば、複数のデータ並列ワークロード又は並列ソフトウェアスレッド)に分岐(ブランチ又はフォーク)することができ、続いて、これらの複数の並列実行は終了又はイールド(yield)してマージ又は結合することができ、その後、ソフトウェアの所与の部分(例えば、所与のソフトウェアスレッド)の実行は再開することができる。いくつかの実施形態では、ユーザレベルの分岐命令106は、複数の追加のプロセッサ要素114のそれぞれで並列に実行されるソフトウェアの部分の開始場所を指定する、区別する、又はそうでなければ示すよう動作することができ、ユーザレベルの同期及び終了命令118は、ソフトウェアの部分の終了場所を指定する、区別する、又はそうでなければ示すよう動作することができる。
第1のプロセッサ要素は、第1の復号ユニット108を有することができる。ユーザレベルの分岐命令は、第1の復号ユニット108に提供されてよい。第1の復号ユニットは、ユーザレベルの分岐命令を復号するよう動作することができる。いくつかの実施形態では、ユーザレベルの分岐命令は、少なくとも1つの命令アドレスを明示的に指定する、又はそうでなければ示すことができる。いくつかの実施形態では、命令は、追加のプロセッサ要素のそれぞれで並列に実行されるコードの部分の最初の命令又は開始命令を表す単一の命令アドレスを指定する、又はそうでなければ示すことができ、その命令部分で、追加のプロセッサ要素のそれぞれは開始する。他の実施形態では、命令は、複数の潜在的に/任意に異なる命令アドレスを指定することができ(例えば、それぞれが命令アドレスのベクトル値を有する1つ又は複数のベクトルレジスタを指定することができる)、その命令アドレスは、追加のプロセッサ要素のうちの別々の1つにより、それぞれ用いられ得る(例えば、各プロセッサ要素は異なる命令アドレスにおいて、データ並列ワークロードの異なる部分で並列に働き始めることができる)。第1のプロセッサ要素は、復号ユニットに結合されるユーザレベルのスレッド分岐モジュール110も有することができる。ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令を実行又は実装する1つ又は複数の実行ユニット又は他の実行ロジックを表すことができる。いくつかの実施形態では、ユーザレベルのスレッド分岐モジュール110は、プログラム制御フローに分岐(ブランチ又はフォーク)を生じさせるユーザレベルの分岐命令106に応答することができる(例えば、ユーザレベルの分岐命令が復号されたことに応答する、及び/又は、ユーザレベルの分岐命令から復号されるか、そうでなければユーザレベルの分岐命令から生成される1つ又は複数の制御信号に応答する)。いくつかの実施形態では、ユーザレベルのスレッド分岐モジュール110は、ユーザレベルの分岐命令に応答して、複数の追加のプロセッサ要素114のそれぞれを、命令のセット又はソフトウェアの一部を並列に実行するように構成するよう動作することができるか、そうでなければ、複数の追加のプロセッサ要素114のそれぞれにそうさせるよう動作することができる。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、ユーザレベルの分岐命令106により示される少なくとも1つの命令アドレスの1つにおいて、実行を開始するよう構成されてよく、そうでなければ、実行を開始するようにさせられてよい。前述したように、いくつかの実施形態では、命令は単一のアドレスを示すことができ、他の実施形態では、複数の潜在的に/任意に異なるアドレス(例えば、1つ又は複数のベクトル値のアドレス)を示すことができる。いくつかの実施形態では、ユーザレベルの分岐命令は、固定(static or fixed)数の追加のプロセッサ要素を暗黙に示すことができる(例えば、利用可能な追加のプロセッサ要素の全てが用いられてよい)。あるいは、ユーザレベルの分岐命令は、自由に選択できる数の追加のプロセッサ要素を明示的に指定するか、そうでなければ示すことができ、その数は動的に割り当てられてよい(例えば、追加のプロセッサ要素の総数のうち1つ又は複数は、並列ソフトウェアを実行するのに用いられなくてよい)。
複数の追加のプロセッサ要素114のそれぞれは、ユーザレベルの同期及び終了命令118を実行するよう動作することができる。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、ユーザレベルの同期及び終了命令を復号する対応した復号ユニット120を有することができる。いくつかの実施形態では、追加のプロセッサ要素114のそれぞれは、対応する復号ユニット120に結合した対応するユーザレベルの同期スレッド終了モジュール122を有することができる。ユーザレベルの各同期スレッド終了モジュール122は、ユーザレベルの同期及び終了命令118を実行又は実装する1つ又は複数の実行ユニット又は他の実行ロジックを表すことができる。いくつかの実施形態では、ユーザレベルの各同期スレッド終了モジュール122は、ユーザレベルの同期及び終了命令118に応答して(例えば、命令が復号されたことに応答して、及び/又は、命令から復号されるか、そうでなければ命令から生成される1つ又は複数の制御信号に応答して)、プログラム制御フローの同期結合又は同期マージに備えて、対応するプロセッサ要素(当該モジュールはそこに含まれる)を、対応するスレッド又は実行の同期終了を実行するように構成するよう動作することができるか、そうでなければ、対応するプロセッサ要素にそうさせるよう動作することができる。いくつかの実施形態では、各プロセッサ要素114は、ユーザレベルの同期及び終了命令118を実行する場合、第1のプロセッサ要素上で実行されるソフトウェアスレッド又はソフトウェアの他の部分に戻る同期制御フロー及び同期バリアの両方を実装することができる。いくつかの実施形態では、各プロセッサ要素114は、ユーザレベルの同期及び終了命令を実行する場合、追加命令の実行を中止して、他の追加のプロセッサ要素114のそれぞれが対応するユーザレベルの同期及び終了命令を実行する(例えば、同期バリアに到達する)まで、(例えば、同期バリアにおいて)待機することができる。次に、いくつかの実施形態では、追加のプロセッサ要素の全てが、その対応するユーザレベルの同期及び終了命令を実行した場合、プログラム制御フローの結合又はマージが実行されてよく、また制御フローは、第1のプロセッサ要素102上で実行されるソフトウェアの部分にある適切な命令に戻ることができる。1つの態様では、追加のプロセッサ要素上の並列実行は全て終えることができ、実行は第1のプロセッサ要素上でだけ継続することができる。
有利には、ユーザレベルの分岐命令、並びにユーザレベルの同期及び終了命令は、ユーザ、プログラマ、又はコンパイラが、分岐及び結合の論理構成又はユーザレベルのアプリケーションのセマンティックスを明示的にプログラムする又は実装することを可能にできるユーザレベルのアーキテクチャメカニズムを表すことができる。分岐及び結合の論理構成は、オペレーティングシステム(又は他の管理上のシステムソフトウェア)に管理されたスレッドへのシステムコールを含むソフトウェアの実行時間で定義される必要はなく、このことは、一般に、(例えば、メッセージングなどに起因する)高いオーバーヘッドを有する傾向があり、その結果、一般に、比較的大きいワークロード、又は並列に実行されているコードの部分(例えば、粗粒度の並列処理)に実際には限定される傾向がある。むしろ、これらのユーザレベルの分岐命令並びにユーザレベルの同期及び終了命令を用いることで、分岐及び結合を実行するために、オペレーティングシステム又は他の管理上のシステムソフトウェアが介入する必要性はなくてよく、及び/又はそれに従う必要性はなくてよい。
さらに、いくつかの実施形態では、追加のプロセッサ要素上で実行される並列実行(例えば、並列ソフトウェアスレッド)は、オペレーティングシステム又は他の管理上のシステムソフトウェアによって直接管理されなくてもよい。1つの態様では、追加のプロセッサ要素上で実行される並列実行(例えば、並列ソフトウェアスレッド)は、オペレーティングシステム又は他の管理上のシステムソフトウェアには任意に見えなくてよく、又は少なくとも実質的に見えなくてもよい(例えば、これらの並列実行が追加のプロセッサ要素上で実行されていることを、OSは認識しなくてもよい)。それに対し、いくつかの実施形態では、第1のプロセッサ要素上で実行される、ユーザレベルの分岐命令106を有したスレッド又はソフトウェアの部分は、管理上のシステムソフトウェア(例えば、オペレーティングシステムのスレッドスケジューラモジュール)によって、第1のプロセッサ要素102上にスケジューリングされた可能性があり、管理上のシステムソフトウェアには見えてよく、管理上のシステムソフトウェアによって管理されてよい。結果として、ユーザレベルの分岐命令並びにユーザレベルの同期及び終了命令は、そのような並列実行に一般に予想されるオーバーヘッドの量を削減するのに役立つことができる。1つの態様では、ユーザレベルの分岐命令及びユーザレベルの同期及び終了命令は、代わりにオペレーティングシステム(又は他の管理上のシステムソフトウェア)へのコールによるソフトウェア実行時間を介して、スレッドがスケジューリングされて管理されるならば、概して有用であろうと考えられるよりも小さいワークロード又はコードの部分を並列で効率的に実行する(例えば、より細かい粒度の並列処理)のに、任意に/潜在的に用いられてよい。
プロセッサ100の詳細な例示的な実施形態が示され説明されたが、様々な代替的な実施形態も考えられる。いくつかの実施形態では、プロセッサは、ユーザレベルの分岐命令を実行することができるが、ユーザレベルの同期及び終了命令を任意に実装しなくてもよい。例えば、プロセッサは、ユーザレベルの分岐命令106を含む命令セットを有する第1のプロセッサ要素102を任意に有してよいが、追加のプロセッサ要素114は、説明されたユーザレベルの同期及び終了命令118を省いた命令セットを有してよい。他の実施形態では、プロセッサは、ユーザレベルの同期及び終了命令を実装してよいが、ユーザレベルの分岐命令を任意に実装しなくてもよい。例えば、プロセッサは、説明されたユーザレベルの同期及び終了命令118を含む命令セットを有する追加のプロセッサ要素114を任意に有してよいが、第1のプロセッサ要素102は、説明されたユーザレベルの分岐命令106を任意に省いた命令セットを有してよい。いくつかの実施形態では、ユーザレベルの同期及び終了命令の代わりに、ユーザレベルの終了命令が、同期機能又は能力を用いずに任意に実装されてよい。例えば、別個の(例えば、異なるオペコードを有する)命令が同期機能を実装するのに用いられてよく、また同期能力を省いたユーザレベルの終了命令と組み合わせて用いられてよい。他の変形形態が、本開示の利益を得る当業者には明らかであろう。
説明をあいまいにしないために、簡略化されたプロセッサ100が示され説明された。しかし、プロセッサは他のコンポーネントを任意に含むことができる。例えば、様々な異なる実施形態が、図9A〜図11のいずれかについて示され説明されるコンポーネントの様々な異なる組み合わせ及び構成を含むことができる。プロセッサのコンポーネントの全てが、動作することを可能にするために、共に接続又は結合されてよい。
図2は、ユーザレベルの分岐命令206の実施形態、及びユーザレベルの複数の同期及び終了命令218の実施形態を用いて実装される分岐結合の論理構成230に関する例を示す図である。分岐結合の論理構成はマスターソフトウェアスレッド232を含み、これは、第1のプロセッサ要素(例えば、第1のプロセッサ要素102)上で実行されてよい。マスターソフトウェアスレッドは、ユーザレベルの分岐命令206を含む。いくつかの実施形態では、ユーザレベルの分岐命令は、少なくとも1つのアドレス(例えば、命令のセットの開始命令のアドレスであり、これは、複数の追加のプロセッサ要素のそれぞれにおいて並列に実行される)を明示的に指定することができる、又はそうでなければ示すことができる。例えば、様々な実施形態では、ユーザレベルの分岐命令は、少なくとも1つのアドレスを明示的に指定する、又はそうでなければ示す(例えば、少なくとも1つのオフセットを当該アドレスに提供する、又はそうでなければ当該アドレスを示す)少なくとも1つの値を有するレジスタ(例えば、アーキテクチャ上の汎用レジスタ)を明示的に指定するフィールドを有してよく、少なくとも1つのアドレスを明示的に指定する、又はそうでなければ示す少なくとも1つの値を有するメモリ位置を明示的に指定し、少なくとも1つのアドレスを明示的に指定する、又はそうでなければ示す少なくとも1つの値を有するレジスタを暗黙に示すフィールドを有してよく、あるいは、少なくとも1つのアドレスを明示的に指定する、又はそうでなければ示す少なくとも1つの値を提供する即値を有する。
ユーザレベルの分岐命令206は(例えば、第1のプロセッサ要素により)実行された場合、第1のプロセッサ要素に、複数の追加のプロセッサ要素(例えば、追加のプロセッサ要素114)のうちの別々の1つのそれぞれで、複数のヘルパーソフトウェアスレッド236の実行を並列に開始できるプログラム制御フローに分岐(ブランチ又はフォーク)234を生成させ、スケジューリングさせ、そうでなければ構成させることができ、又はそうでなければ分岐234を生じさせることができる。
複数のヘルパーソフトウェアスレッドは、第1のヘルパーソフトウェアスレッド236−1から第Nのヘルパーソフトウェアスレッド236−Nまでを含むことができ、ヘルパーソフトウェアスレッドの数は、特定の実装に適切な任意の必要な数であってよい(例えば、2個から約100個の場合がある)。例として、ヘルパーソフトウェアスレッドは、多くの異なるタイプのプロシージャ又はワークロード、例えば、グラフィックス、オーディオ、信号処理、科学計算、トランザクション、データベース処理、あるいは様々な他のプロシージャ又はワークロードなどを表すことができる。いくつかの実施形態では、ヘルパーソフトウェアスレッドのそれぞれは、ユーザレベルの分岐命令により示される単一の命令アドレスにおいて、同じ命令235の異なる対応するインスタンスを実行することで開始することができる。例えば、ユーザレベルの分岐命令は、対応するヘルパーソフトウェアスレッド236を実行するのに用いられている複数の追加のプロセッサ要素のうちの別々の1つにそれぞれ対応することができる複数のプログラムカウンタ(例えばレジスタ)のそれぞれに、同じ命令アドレスが格納されるようにさせることができる。プログラムカウンタは、当技術分野において、命令ポインタとしても知られている。あるいは、異なる命令アドレスは命令により示されてよく、異なる命令アドレスはプログラムカウンタに格納されてよく、異なる対応する命令は異なるプロセッサ要素により最初に実行されてよい。各ヘルパーソフトウェアスレッドが、その対応する開始命令235を実行した後に、これらのヘルパーソフトウェアスレッドは、異なる順序の命令を任意に/潜在的に実行することができる(例えば、異なる分岐を取ることができる、異なるようにジャンプする又は動き回ることができる、異なるプロシージャコールを行うことができるなど)。有利には、これらの並列ヘルパーソフトウェアスレッドは、データスループット及び/又は性能を高めるのに役立つことができる。例えば、並列ヘルパーソフトウェアスレッドのそれぞれは、並列化可能又はスレッド化可能なワークロード、例えば、グラフィックスワークロード、科学計算ワークロードなどの異なる部分を処理することができる。ワークロード全体に関連した全てのタスクを順に実行する必要があるマスタースレッドではなく、並列ヘルパーソフトウェアスレッドが、ワークロード全体の異なる部分を少なくとも部分的に並列に実行することができる。
ある時点で、ヘルパーソフトウェアスレッド236のうち1つを並列に実行している各プロセッサ要素は、ユーザレベルの同期及び終了命令218の対応するインスタンスを実行することができる。例えば、第1のヘルパーソフトウェアスレッドは、第1のユーザレベルの同期及び終了命令218−1を含むことができ、第Nのヘルパーソフトウェアスレッドは、第Nのユーザレベルの同期及び終了命令218−Nを含むことができる。これらのユーザレベルの同期及び終了命令は、異なるヘルパーソフトウェアスレッドが実行される様々な方法(例えば、分岐、ジャンプなど)に部分的に依存して、異なる時間に実行されてよい。いくつかの実施形態では、ユーザレベルの同期及び終了命令218は、同期バリア238を構成するよう動作してよく、そうでなければ同期バリア238を生じさせるよう動作してよい。いくつかの実施形態では、プロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令218の実行に応答して、対応するヘルパーソフトウェアスレッド236のさらなる命令実行を中止することができ、またヘルパーソフトウェアスレッド236を実行するのに用いられているその他のプロセッサ要素の全てが、その対応するユーザレベルの同期及び終了命令218を実行するまで、同期バリア238で待機することができる(例えば、対応するプログラムカウンタは進まなくてよい)。次に、その他のプロセッサ要素の全てが、その対応するユーザレベルの同期及び終了命令218を実行した場合、最後に実行されたユーザレベルの同期及び終了命令218は、制御フローにおいて、並列ヘルパーソフトウェアスレッド236の実行を終わらせ、マスタースレッド232の適切な結合アドレスにおいて命令242を継続して実行させることができる同期マージ又は同期結合240を生じさせることができる。
図3は、実行を中止し、暗黙の同期バリア338で待機するようマスタースレッド332を構成するよう動作する、又はそうでなければマスタースレッド332にそうさせるよう動作するユーザレベルの分岐及び同期結合命令306の実施形態を含む分岐結合コード330のブロック図である。マスタースレッド332は、第1のプロセッサ要素(例えば、プロセッサ要素102)上で動作することができる。マスタースレッドは、ユーザレベルの分岐及び同期結合命令306を含む。ユーザレベルの分岐及び同期結合命令は、実行されると、複数の並列ヘルパーソフトウェアスレッド336がそれぞれ、複数の追加のプロセッサ要素(例えば、追加のプロセッサ要素114)のうちの別々の1つで動作するよう開始され得る制御フローに分岐(ブランチ又はフォーク)334を構成することができ、又はそうでなければ分岐(ブランチ又はフォーク)334を生じさせることができる。この実施形態では、ユーザレベルの分岐及び同期結合命令はまた、実行されると、マスターソフトウェアスレッド332を実行するプロセッサ要素を、マスターソフトウェアスレッド332のさらなる命令の実行を中止し、暗黙の同期バリア338での待機をさらに実行し、その後、プロセッサ要素ユーザレベルの分岐及び同期結合命令(例えば、元のプログラム順序で、ユーザレベルの分岐及び同期結合命令306の直後に続く命令350)により決定される命令アドレスで結合を行うよう構成することができ、又は、そうでなければマスターソフトウェアスレッド332を実行するプロセッサ要素にそうさせることができる。
いくつかの実施形態では、ユーザレベルの分岐及び同期結合命令は単一の命令アドレスを示すことができ、並列ヘルパーソフトウェアスレッド336のそれぞれは、同じ命令335の対応するインスタンスで実行を開始することができ、その対応するインスタンスは、ユーザレベルの分岐命令306により指定されるか、そうでなければ示される単一の命令アドレスに位置する。並列ヘルパーソフトウェアスレッドのそれぞれは、次に、(例えば、異なる分岐、ジャンプ、プロシージャコールなどに起因して)潜在的に異なるさらなる命令のセットを実行することができる。あるいは、ユーザレベルの分岐命令は、複数の潜在的に/任意に異なる命令アドレスを示すことができ、並列ヘルパーソフトウェアスレッドのそれぞれは、任意に/潜在的に異なる命令アドレスで実行を開始することができる。最終的に、並列ヘルパーソフトウェアスレッドのそれぞれは、通常異なる時間で、ユーザレベルの同期及び終了命令318の対応するインスタンスを実行することができる。プロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を実行する場合、対応するヘルパーソフトウェアスレッドのさらなる命令の実行を中止することができ、さらなる実行は、マスターソフトウェアスレッド332により監視されている同じ暗黙の同期バリア338で待機することができる。その他の並列ヘルパーソフトウェアスレッドのそれぞれが全て、その対応するユーザレベルの同期及び終了命令を実行した場合、その対応するユーザレベルの同期及び終了命令を実行する最後のプロセッサ要素は、適切な結合アドレス(例えば、ユーザレベルの分岐及び同期結合命令により決定される結合命令アドレス)に戻る制御フローにマージ又は結合340を構成することができる、又はそうでなければそれを生じさせることができる。並列ヘルパーソフトウェアスレッドのそれぞれの実行は、終了することができる。再開されるマスターソフトウェアスレッド332*の実行は、マスタースレッドのユーザレベルの分岐及び同期結合命令の直後に続く命令350を用いて継続することができる。この実施形態において、暗黙という用語は、暗黙の同期バリアに用いられるが、それは、当該同期バリアが、明示的な同期バリアを作成するのに用いられている別個の命令の代わりに、ユーザレベルの分岐及び同期結合命令にとっては暗黙であるか、又は本来備わっているからである。
図4は、ユーザレベルの分岐命令406と、マスタースレッド432を、実行を中止し、明示的な同期バリア438で待機するよう構成すべく動作する、又はそうでなければマスタースレッド432にそうさせるよう動作する、別個のユーザレベルの同期及び結合命令452との実施形態を含む分岐結合コード430のブロック図である。
マスタースレッド432は、第1のプロセッサ要素(例えば、プロセッサ要素102)上で動作することができる。マスタースレッドは、ユーザレベルの分岐命令406を含む。ユーザレベルの分岐命令は、実行されると、複数の並列ヘルパーソフトウェアスレッド436がそれぞれ、複数の追加のプロセッサ要素(例えば、追加のプロセッサ要素114)のうちの別々の1つで動作するよう開始され得る制御フローに分岐(ブランチ又はフォーク)434を構成することができる、又はそうでなければ分岐(ブランチ又はフォーク)434を生じさせることができる。この実施形態では、ユーザレベルの分岐命令406は、実行されると、マスターソフトウェアスレッド432を実行しているプロセッサ要素にさらなる命令の実行を中止させることも、同期バリアで待機させることもしない。むしろ、プロセッサ要素は、マスタースレッドにおいて元のプログラム順序でユーザレベルの分岐命令406の直後にある命令450を含むマスターソフトウェアスレッドの1つ又は複数のさらなる命令を継続して実行することができる。
マスターソフトウェアスレッドは、ユーザレベルの同期及び結合命令452も含むことができる。ユーザレベルの同期及び結合命令は、実行されると、マスターソフトウェアスレッドを実行するプロセッサ要素を、マスターソフトウェアスレッドのさらなる命令の実行を中止し、再開される実行のために、明示的な同期バリア438で待機するよう構成すべく動作することができる、又はそうでなければマスターソフトウェアスレッドを実行するプロセッサ要素にそうさせるよう動作することができる。いくつかの実施形態では、ユーザレベルの同期及び結合命令452は、ユーザレベルの分岐命令406と異なるオペコードを有することができる。いくつかの実施形態では、ユーザレベルの同期及び結合命令452は、ユーザレベルの同期及び終了命令418と同じオペコードを有することができる。他の実施形態では、ユーザレベルの同期及び結合命令452は、ユーザレベルの同期及び終了命令418と異なるオペコードを有することができる。
いくつかの実施形態では、ユーザレベルの分岐命令は、単一の命令アドレスを任意に示すことができ、並列ヘルパーソフトウェアスレッド436のそれぞれは、同じ命令435の対応するインスタンスで実行を開始することができ、その対応するインスタンスは、ユーザレベルの分岐命令406により指定されるか、そうでなければ示される単一の命令アドレスに位置する。並列ヘルパーソフトウェアスレッドのそれぞれは、次に、(例えば、異なる分岐、ジャンプ、プロシージャコールなどに起因して)潜在的に異なるさらなる命令のセットを実行することができる。あるいは、ユーザレベルの分岐命令は、複数の潜在的に/任意に異なる命令アドレスを示すことができ、並列ヘルパーソフトウェアスレッドのそれぞれは、任意に/潜在的に異なる命令アドレスで実行を開始することができる。最終的に、並列ヘルパーソフトウェアスレッドのそれぞれは、通常異なる時間で、ユーザレベルの同期及び終了命令418の対応するインスタンスを実行することができる。プロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を実行する場合、対応するヘルパーソフトウェアスレッドのさらなる命令の実行を中止することができ、さらなる実行は、ユーザレベルの同期及び結合命令452に起因して、マスターソフトウェアスレッド432により監視されている同じ明示的な同期バリア438で待機することができる。その他の並列ヘルパーソフトウェアスレッドのそれぞれが全て、その対応するユーザレベルの同期及び終了命令を実行した場合、その対応するユーザレベルの同期及び終了命令を実行する最後のプロセッサ要素は、制御フローに同期マージ又は同期結合440を構成することができる、又はそうでなければそれを生じさせることができる。並列ヘルパーソフトウェアスレッドのそれぞれの実行は、終了することができる。再開されるマスターソフトウェアスレッド432*の実行は、例えば、マスタースレッドにおいて元のプログラム順序でユーザレベルの同期及び結合命令452の直後に続く命令454など、ユーザレベルの同期及び結合命令により決定される適切な結合アドレスにおいて命令を継続することができる。
前述したように、第1のプロセッサ要素(例えば、第1のプロセッサ要素102)は、ユーザレベルの分岐命令(例えば、ユーザレベルの分岐命令106)の実施形態を実行することができ、複数の追加のプロセッサ要素(例えば、追加のプロセッサ要素114)のそれぞれは、ユーザレベルの同期及び終了命令(例えば、ユーザレベルの同期及び終了命令118)の実施形態を実行することができる。いくつかの実施形態では、同種のプロセッサ要素が、第1のプロセッサ要素と、追加のプロセッサ要素のそれぞれとに用いられてよい。他の実施形態では、第1のプロセッサ要素は、追加のプロセッサ要素のそれぞれと比べて、異種又は異なる設計を有することができる。
図5は、ユーザレベルの分岐命令を含むシリアルスレッドを実行するのに適した第1のプロセッサ要素502と、ユーザレベルの同期及び終了命令を含む複数の並列スレッドのうちの1つを実行するのに適した追加のプロセッサ要素514とを含む、一対の同種のプロセッサ要素560に関する例示的な実施形態のブロック図である。一対の同種のプロセッサ要素は、実質的に同一であってよい。例えば、同種のプロセッサ要素のそれぞれは、同一の設計を用いたコア、ハードウェア、スレッドなどであってよい。いくつかの実施形態では、第1のプロセッサ要素及び追加のプロセッサ要素の両方は、同じ命令セット504を有することができ、第1のプロセッサ要素及び追加のプロセッサ要素の両方は、アーキテクチャ機能562(例えば、アーキテクチャレジスタ、データタイプなど)の同じセットを有することができ、また第1のプロセッサ要素及び追加のプロセッサ要素の両方は、同じマイクロアーキテクチャ564を有することができる。
あるいは、同種のプロセッサ要素を用いるのではなく、異種のプロセッサ要素を用いることに利点がある場合がある。例えば、シリアルスレッドを実行するプロセッサ要素とは異なるように、並列スレッドを実行するプロセッサ要素を設計又は最適化することが有利である場合がある。図6は、ユーザレベルの分岐命令を含むシリアルスレッドを実行するのに適した第1のプロセッサ要素602と、ユーザレベルの同期及び終了命令を含む複数の並列スレッドのうちの1つを実行するのに適した追加のプロセッサ要素614とを含む、一対の異種のプロセッサ要素668に関する例示的な実施形態のブロック図である。
異種のプロセッサ要素は、異なる実施形態の様々な点で異なっていてよい。示されるように、いくつかの実施形態では、第1のプロセッサ要素の命令セット604は、追加のプロセッサ要素の命令セット616と任意に異なっていてよい。例えば、両方の命令セットは重複する命令670のセットを含むことができるが、第1のプロセッサ要素の命令セットは、追加のプロセッサ要素の命令セット616に含まれていない1つ又は複数の重複しない命令671を任意に含むことができる、及び/又は、追加のプロセッサ要素の命令セットは、第1のプロセッサ要素の命令セット604に含まれていない1つ又は複数の重複しない命令672のセットを任意に含むことができる。1つの例として、いくつかの実施形態では、追加のプロセッサ要素614(すなわち、並列スレッド及びユーザレベルの同期及び終了命令を実行するもの)は任意に、ユーザレベル又は非特権レベルの実行特権のみに専用であってよい。そのような実施形態では、追加のプロセッサ要素は、第1のプロセッサ要素の命令セットに含まれる全ての特権レベル又は非ユーザレベルの命令を任意に省くことができる。他の実施形態では、命令セットは、様々な点で異なっていてよい。例えば、並列スレッドを対象とした所与のタイプのコードを実行するのに必要ではない命令はいずれも、追加のプロセッサ要素の命令セットから任意に省かれてよい。
示されるように、いくつかの実施形態では、第1のプロセッサ要素のマイクロアーキテクチャ664は、追加のプロセッサ要素のマイクロアーキテクチャ674と任意に異なっていてよい。例えば、いくつかの実施形態では、第1のプロセッサ要素のマイクロアーキテクチャは、命令実行レイテンシの削減を重視するよう任意に設計されてよく、追加のプロセッサ要素のマイクロアーキテクチャは、実行レイテンシの削減をあまり重視せず、むしろスループットの増加を重視するよう任意に設計されてよい。例えば、レイテンシを削減するために、アウトオブオーダ実行及び/又は他の精巧なメカニズムが任意に利用されてよい。しかし、アウトオブオーダ実行リソース及び他のそのような精巧なリソースは、最大並列スループットを実現するプロセッサを設計する能力と競合しやすい場合がある。例えば、各コアが、アウトオブオーダ及び/又は他の精巧なリソースを収容するには比較的大きい場合、そのようなリソースを省いたより小さいコアの数と比較して、これらのより大きいコアのより少数が、同じサイズのダイ上に合致することができる場合がある。代わりに、より小さいコアのより多くがダイ上に含まれていた場合、より多くのスレッドを実行することで、これらのスレッドのそれぞれがより高いレイテンシを有していても、より高いスループットが実現される場合がある。そのようなスレッドが多く存在する場合、スレッドを実行状態にしておくことが、個々のスレッドのレイテンシを削減させるよりも重要になる。また、アウトオブオーダ実行リソースは、同じスループットに対してより多くの電力を消費しやすい場合がある。
したがって、いくつかの実施形態では、第1のプロセッサ要素のマイクロアーキテクチャは任意に、アウトオブオーダ実行のマイクロアーキテクチャであってよく、追加のプロセッサ要素のマイクロアーキテクチャは任意に、インオーダのマイクロアーキテクチャ、実質的にインオーダのマイクロアーキテクチャ、又は少なくとも第1のプロセッサ要素のマイクロアーキテクチャより著しくインオーダのマイクロアーキテクチャであってよい。いくつかの実施形態では、第1のプロセッサ要素のマイクロアーキテクチャは、1つ又は複数のアウトオブオーダ実行リソース675を含むことができ、追加のプロセッサ要素のマイクロアーキテクチャは、そのようなアウトオブオーダ実行リソースを任意に省く(677)ことができる。そのようなアウトオブオーダリソースの例には、限定されないが、リザベーションステーション、命令バッファ、又は、命令をその入力オペランドが利用可能になるまで格納する他の命令キュー、命令を実行ユニットにアウトオブオーダで発行するアウトオブオーダ発行ユニット、命令を並べ替えてその結果を元のプログラム順序に戻すリオーダバッファ又は他の命令バッファ又はキュー、及びアウトオブオーダで実行された命令の結果を元のプログラム順序のアーキテクチャ状態にコミットするコミットユニットが含まれる。様々な実施形態では、第1のプロセッサ要素(すなわち、ユーザレベルの分岐命令を実行するもの)はコミットユニットを有することができるが、追加のプロセッサ要素(すなわち、ユーザレベルの同期及び終了命令を実行するもの)はそれを有していなくてもよく、及び/又は、第1のプロセッサ要素はリオーダバッファを有することができるが、追加のプロセッサ要素はそれを有していなくてもよく、及び/又は、第1のプロセッサ要素はリザベーションステーションを有することができるが、追加のプロセッサ要素はそれを有していなくてもよい。いくつかの実施形態では、第1のプロセッサ要素は比較的低い平均命令実行レイテンシを有することができ、追加のプロセッサ要素は比較的高い平均命令実行レイテンシを有することができる。
別の例として、いくつかの実施形態では、ユーザレベルの分岐命令(例えば、マスタースレッド)を有する1つのタイプのコードを実行するのに必要とされる、又はそうするのに比較的役立つが、ユーザレベルの同期及び終了命令(例えば、並列ヘルパースレッドのうちの1つ)を有する別のタイプのコードを実行するのに必要とされず、そうするのにそれほど役立つものでもない、1つ又は複数のマイクロアーキテクチャリソースは、第1のプロセッサ要素602に任意に含まれてよいが、追加のプロセッサ要素614から任意に省かれてよい。いくつかの実施形態では、異なるタイプのコード又はオブジェクトは、第1のプロセッサ要素を対象としてよく、それに応じて追加のプロセッサ要素及びそのマイクロアーキテクチャは異なってよい。いくつかの実施形態では、追加のプロセッサ要素のマイクロアーキテクチャは、簡略化されたスレッド相互依存及び/又は順序化リソース678を任意に含むことができ、これは第1のプロセッサ要素のマイクロアーキテクチャのスレッド相互依存及び/又は順序化リソース676に対して任意に簡略化されてよい。1つの態様では、第1のプロセッサ要素及び追加のプロセッサ要素の両方は、共有メモリにアクセスすることに関連した順序化ルールに従う必要があり得るが、追加のプロセッサ要素はインオーダであるか、アウトオブオーダの第1のプロセッサ要素より少なくともインオーダであり得るので、そのような共有メモリアクセスの順序化ルールを実施する追加のプロセッサ要素内のメカニズムは、簡略化されてよい。換言すれば、アウトオブオーダの第1のプロセッサ要素で必要となることが多い複雑性は、インオーダ又はよりインオーダの追加のプロセッサ要素から任意に省かれてよい。例えば、メモリアクセスフェンス命令(例えば、ストアフェンス命令、ロードフェンス命令、メモリフェンス命令など)を実装するメカニズムは、追加のプロセッサ要素では、第1のプロセッサ要素のメカニズムに対して任意に簡略化されてよい。他の実施形態では、第1のプロセッサ要素のマイクロアーキテクチャに含まれる他のマイクロアーキテクチャリソースは、並列コード(例えば、並列ヘルパースレッド)がこれらのリソースを必要としない、又はこれらのリソースを有することでそれほど大きな利益を得ない場合、追加のプロセッサ要素のマイクロアーキテクチャから任意に省かれてよい。
別の例として、いくつかの実施形態では、追加のプロセッサ要素(例えば、追加のプロセッサ要素614を含む)は、第1のプロセッサ要素602により共有されないリソースを共有することができ、及び/又は追加のプロセッサ要素(例えば、追加のプロセッサ要素614を含む)は、第1のプロセッサ要素602より大きな程度でリソースを共有することができる。1つの例として、いくつかの実施形態では、より多数の追加のプロセッサ要素614がデコーダを共有することができ、より少数の第1のプロセッサ要素602がデコーダを共有することができる。例えば、様々な実施形態では、1個から約10個、又は1個から約5個の第1のプロセッサ要素602がデコーダを共有することができ、10個から300個、又は20個から300個、又は50個から300個の追加のプロセッサ要素614がデコーダを共有することができる。いくつかの実施形態では、追加のプロセッサ要素614は復号された命令のキャッシュを利用することができ、通常、追加のプロセッサ要素がほとんどの場合に同じ又は類似の命令を実行することができるので、復号された命令はキャッシュにすでに存在することがあり、そのため、より異種のコードを実行する第1のプロセッサ要素に概して有用であろうと考えられるよりも多数の追加のプロセッサ要素によってデコーダが利用されてよい。
別の例として、いくつかの実施形態では、より多数の追加のプロセッサ要素614が最下位レベルのキャッシュ又はレベル1(L1)キャッシュを共有することができ、このキャッシュは、最下位レベルのキャッシュ又はレベル1(L1)キャッシュを共有する複数の第1のプロセッサ要素又は要素602と比較して、実行ユニットに最も近い。例えば、様々な実施形態では、1個から8個、又は1個から4個の第1のプロセッサ要素602がL1キャッシュを共有することができ、10個を超える、又は20個を超える追加のプロセッサ要素がL1キャッシュを共有することができる。
図7は、ユーザレベルの分岐命令706の実施形態を実行するプロセッサ700に関する、例示的な実施形態のブロック図である。プロセッサは,第1のプロセッサ要素702と、第1の追加のプロセッサ要素714−1から第Nの追加のプロセッサ要素714−Nまでを含む複数の追加のプロセッサ要素714とを含む。第1のプロセッサ要素は、命令フェッチユニット781を有する。フェッチユニットは、第1のプロセッサ要素のプログラムカウンタ783からの、フェッチする次の命令のインジケーションに基づいて、例えばメモリからユーザレベルの分岐命令をフェッチすることができる。ユーザレベルの分岐命令は、マクロ命令、アセンブリ言語命令、機械語命令、あるいは第1のプロセッサ要素の命令セットの他の命令又は制御信号を表すことができる。いくつかの実施形態では、ユーザレベルの分岐命令は、少なくとも1つの命令アドレスを(例えば、1つ又は複数のフィールド、又は一連のビットによって)明示的に指定する、又はそうでなければ示す(例えば、暗黙に示す)ことができる。前述した命令アドレスを示す様々な方法が好適である。
フェッチユニットは、ユーザレベルの分岐命令を復号ユニット708に提供することができる。復号ユニットは、ユーザレベルの分岐命令を復号することができる。復号ユニットは、1つ又は複数の比較的低水準の命令又は制御信号(例えば、1つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、復号された命令又は制御信号など)を出力することができ、それらが、比較的高水準のユーザレベルの分岐命令を反映する、表す、及び/又は比較的高水準のユーザレベルの分岐命令から得られる。いくつかの実施形態では、復号ユニットは、ユーザレベルの分岐命令を受信する1つ又は複数の入力機構(例えば、ポート、相互接続、インタフェース)と、そこに結合され、ユーザレベルの分岐命令を認識して復号する命令認識及び復号ロジックと、そこに結合され、低水準の命令又は制御信号を出力する1つ又は複数の出力機構(例えば、ポート、相互接続、インタフェース)とを含むことができる。復号ユニットは、様々な異なるメカニズムを用いて実装されてよく、それらのメカニズムには、限定されないが、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、及び復号ユニットを実装するのに適した他のメカニズムが含まれる。
ユーザレベルのスレッド分岐モジュール710が、復号ユニット708に結合される。ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令を実行又は実装する1つ又は複数の実行ユニットを表すことができる。ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令を表す、及び/又はユーザレベルの分岐命令から得られる、1つ又は複数の復号された命令、あるいはそうでなければ変換された命令又は制御信号を受信することができる。ユーザレベルのスレッド分岐モジュール及び/又はプロセッサは、(例えば、ユーザレベルの分岐命令から復号された1つ又は複数の命令又は制御信号に応答して)ユーザレベルの分岐命令を実行するよう動作する具体的なロジック又は特定のロジック(例えば、トランジスタ、集積回路、あるいはファームウェア(例えば、不揮発性メモリに格納された命令)及び/又はソフトウェアと組み合わされる可能性のある他のハードウェア)を含むことができる。ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令に応答して、及び/又はその結果として(例えば、命令から復号された1つ又は複数の命令又は制御信号に応答して)、複数の追加のプロセッサ要素714のそれぞれを、ユーザレベルの分岐命令により示される1つ又は複数の命令アドレスから始めて、命令を並列に実行するよう構成すべく動作してよい。
いくつかの実施形態では、命令に応答するユーザレベルのスレッド分岐モジュールは、第1のプロセッサ要素、及び追加のプロセッサ要素それぞれの両方にアクセス可能な1つ又は複数の記憶位置785に、1つ又は複数の命令アドレス786を格納することができる。示されるように、いくつかの実施形態では、命令アドレス786−1から786−Nは、並列処理に用いられる追加のプロセッサ要素714−1から714−Nのそれぞれのために任意に格納されてよい。前述したように、いくつかの実施形態では、同じ単一のアドレスが追加のプロセッサ要素それぞれのために格納されてよく、他の実施形態では、潜在的に/任意に異なる命令アドレス(例えば、ベクトルレジスタの異なるデータ要素からのもの)が追加のプロセッサ要素それぞれのために格納されてよい。追加のプロセッサ要素のそれぞれは、1つ又は複数の命令アドレス786にアクセスして、その命令アドレスから並列処理を始めることができる。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、この命令アドレスを、対応するプログラムカウンタ又は命令ポインタにコピー又は格納することができる。あるいは、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令に応答して、このアドレスを直接、プログラムカウンタ又は命令ポインタのそれぞれに格納するよう動作することができる。
第1のプロセッサ要素は、アーキテクチャ状態784も有する。いくつかの実施形態では、アーキテクチャ状態784は、1つ又は複数のアーキテクチャレジスタ、例えば、汎用レジスタ、パックドデータレジスタ、浮動小数点レジスタ、ステータスレジスタなどのコンテンツ又は値を、可能性として第1のプロセッサ要素の他のアーキテクチャ状態と共に含むことができる。いくつかの実施形態では、命令に応答するユーザレベルのスレッド分岐モジュールは、アーキテクチャ状態784の一部又は全ての1つ又は複数のコピーを、アーキテクチャ状態787として、1つ又は複数の記憶位置785に格納することができる。1つの実施形態では、アーキテクチャ状態は、前述したように、プロセッサのアーキテクチャレジスタの1つ又は複数のセットの値又はコンテンツを含むことができる。示されるように、いくつかの実施形態では、アーキテクチャ状態787−1から787−Nの異なる対応したコピーが、並列処理に用いられる追加のプロセッサ要素714−1から714−Nのそれぞれのために任意に格納されてよい。続いて、追加のプロセッサ要素のそれぞれは、アーキテクチャ状態の1つ又は複数のセットにアクセスして、そのアーキテクチャ状態を並列処理に用いることができる。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、このアーキテクチャ状態を、追加のプロセッサ要素のそれぞれに対応するローカルストレージ、例えば、アーキテクチャレジスタの複製セット、1つ又は複数のキャッシュ(例えば、レジスタキャッシュ)、あるいは他のローカルストレージデバイスなどに、任意にコピー又は格納することができる。
別の実施形態には、別のタイプの記憶位置785が好適である。好適な記憶位置の例には、限定されないが、第1のプロセッサ要素の1つ又は複数のレジスタ、追加のプロセッサ要素の1つ又は複数のレジスタ、第1のプロセッサ要素と追加のプロセッサ要素のそれぞれとによって共有されるメモリのメモリ位置など、及びこれらの組み合わせが含まれる。いくつかの実施形態では、記憶位置は、第1のプロセッサ要素と追加のプロセッサ要素のそれぞれとによって共有され、並列処理制御データ構造体を実装するのに用いられる、ユーザがアドレス可能なメモリ空間の1つ又は複数のメモリ位置を表すことができる。いくつかの実施形態では、この並列処理制御データ構造体は、オペレーティングシステムにより用いられるプロシージャコールスタックから分かれている。いくつかの実施形態では、この並列処理制御データ構造体は、第1のプロセッサ要素、及び追加のプロセッサ要素それぞれの両方にアクセス可能であってよく、第1のプロセッサ要素と追加のプロセッサ要素のそれぞれとの間で、特定の実装に必要な様々な異なるタイプの制御及びデータを受け渡すのに用いられてよい。あるいは、様々な他のタイプの記憶位置が、代わりに任意に用いられてもよい。
いくつかの実施形態では、1つ又は複数の命令アドレス、及びアーキテクチャ状態の1つ又は複数のセットが格納された後に、ユーザレベルのスレッド分岐モジュールが、命令に応答して、追加のプロセッサ要素のそれぞれを起動(activate or initiate)し、並列処理を始めるために1つ又は複数の制御信号を送信することができる。あるいは、他の実施形態では、この追加のオペレーションは、他の基準(例えば、プログラムカウンタ又は記憶位置785にプログラムされている値、記憶位置785にプログラムされているアーキテクチャ状態など)に基づいて推測され得るので、任意に省かれてもよい。いくつかの実施形態では、これらの追加のプロセッサ要素を起動して並列処理を実行するために、オペレーティングシステムからの創出を必要としなくてよく、またオペレーティングシステムに従う必要もなくてよい。
いくつかの実施形態では、ユーザレベルの分岐命令は任意に、スレッドに同期バリアを課してもよく、又は第1のプロセッサ要素に他のコード実行を課してもよいが、これは必須ではない(例えば、別個のユーザレベルの同期及び結合命令が任意に用いられてよい)。示されるように、そのような実施形態では、第1のプロセッサ要素は、同期結合モジュール782を任意に含むことができる。同期結合モジュールは、復号ユニットに結合されてよい。いくつかの実施形態では、ユーザレベルの分岐命令に応答して、同期結合モジュールは、プログラムカウンタ783をフリーズする、又はそうでなければプログラムカウンタにインクリメントを中止させるよう動作することができる。これにより、スレッド及び/又は第1のプロセッサ要素によるさらなる命令の実行を中止させることができる。示されるように、同期結合モジュールは、同期バリア機構788に結合されてよい。複数の追加のプロセッサ要素もそれぞれ、同期バリア機構に結合されてよい。追加のプロセッサ要素のそれぞれは、ユーザレベルの同期及び終了命令を実行する場合、同期バリア機構内の対応する状態を更新することができる。1つの例として、同期バリア機構は、追加のプロセッサ要素のうちの1つが、そのユーザレベルの同期及び終了命令を実行するたびに、インクリメントされるかデクリメントされるカウンタであってよい。別の例として、同期バリア機構は、追加のプロセッサ要素のそれぞれに対して対応する異なるビットを有するレジスタを含むことができ、対応するビットは、追加のプロセッサ要素のそれぞれがそのユーザレベルの同期及び終了命令を実行する場合、特定の実装に必要なようにセットされるかクリアされてよい。同期結合モジュール782は、同期バリア機構内の状態を監視することができ、追加のプロセッサ要素の全てがその対応するユーザレベルの同期及び終了命令を実行したことを状態が示す場合、プログラムカウンタ783にインクリメントを再開させることができる。次にフェッチユニットはさらなる命令をフェッチすることができ、この命令は、スレッド、又はコードの他の部分が第1のプロセッサ要素により継続して実行されるので、復号され実行されてよい。
図8は、ユーザレベルの同期及び終了命令818の実施形態を実行するプロセッサ800に関する、例示的な実施形態のブロック図である。プロセッサは、ユーザレベルの同期及び終了命令を実行する追加のプロセッサ要素814を含む。プロセッサは、(例えば、限定されるものではないが、ユーザレベルの同期及び終了命令(例えば、命令706)を先に実行した可能性がある)第1のプロセッサ要素802も含む。追加のプロセッサ要素は、追加のプロセッサ要素のプログラムカウンタ883からの、フェッチする次の命令のインジケーションに基づいて、(例えば、メモリから)ユーザレベルの同期及び終了命令をフェッチすることができる命令フェッチユニット881を有する。ユーザレベルの同期及び終了命令は、マクロ命令、アセンブリ言語命令、機械語命令、あるいは追加のプロセッサ要素の命令セットの他の命令又は制御信号を表すことができる。
フェッチユニットは、ユーザレベルの同期及び終了命令を復号ユニット808に提供することができる。復号ユニットは、ユーザレベルの同期及び終了命令818を復号することができる。復号ユニットは、1つ又は複数の比較的低水準の命令又は制御信号(例えば、1つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、復号された命令又は制御信号など)を出力することができ、それらが、比較的高水準のユーザレベルの同期及び終了命令を反映する、表す、及び/又は比較的高水準のユーザレベルの分岐命令から得られる。復号ユニットは、本明細書で説明される他のデコーダと同じ手法を用いて実装されてよい。
ユーザレベルの同期スレッド終了ユニット、つまりモジュール890が、復号ユニット808の出力に結合される。ユーザレベルの同期スレッド終了モジュールは、ユーザレベルの同期及び終了命令を実行又は実装する1つ又は複数の実行ユニットを表すことができる。ユーザレベルの同期スレッド終了モジュールは、ユーザレベルの同期及び終了命令を表す、及び/又はユーザレベルの同期及び終了命令から得られる、1つ又は複数の復号された命令、あるいはそうでなければ変換された命令又は制御信号を受信することができる。ユーザレベルの同期スレッド終了モジュール及び/又はプロセッサは、(例えば、ユーザレベルの同期及び終了命令から復号された1つ又は複数の命令又は制御信号に応答して)ユーザレベルの同期及び終了命令を実行するよう動作する具体的なロジック又は特定のロジック(例えば、トランジスタ、集積回路、あるいはファームウェア(例えば、不揮発性メモリに格納された命令)及び/又はソフトウェアと組み合わされる可能性のある他のハードウェア)を含むことができる。ユーザレベルの同期スレッド終了モジュールは、ユーザレベルの同期及び終了命令に応答して及び/又はその結果として(例えば、命令から復号された1つ又は複数の命令又は制御信号に応答して)、さらなる命令の実行を中止し、また他の全ての追加のプロセッサ要素(例えば、同じユーザレベルの分岐命令によって開始されたもの)が、その対応するユーザレベルの同期及び終了命令を実行するまで、及び/又は同期バリアに到達するまで、同期バリアにおいて待機する追加のプロセッサ要素を構成する、それを生じさせる、又はそうでなければそれをもたらすよう動作することができる。いくつかの実施形態では、これは、さらなる命令がフェッチされることも処理されることもないように、プログラムカウンタをフリーズ又は停止させるために、信号891をプログラムカウンタ883に送信する、又はそうでなければ提供する同期スレッド終了モジュールを含むことができる。いくつかの実施形態では、これは、追加のプロセッサ要素がそのユーザレベルの同期及び結合命令を実行していること、及び/又は同期バリアに到達したことを示すために、信号892を任意の同期バリア機構888に送信する、又はそうでなければ提供する同期スレッド終了モジュールを含むことができる。前述したように、バリア機構を実装する異なる方法が可能であり、その方法には、例えば、追加のプロセッサ要素の異なるいくつかに異なるビットを有するレジスタ、インクリメント又はデクリメントするカウンタなどがある。
いくつかの実施形態では、追加のプロセッサ要素が、所与のユーザレベルの分岐命令により起動された、同期バリアに到達する全ての追加のプロセッサ要素のうちの最後である場合、ユーザレベルの同期スレッド終了モジュールは、追加のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行した後に、第1のプロセッサ要素上のスレッドに制御を戻すよう動作することができる。例えば、いくつかの実施形態では、バリアに到達する最後の追加のプロセッサ要素の同期スレッド終了モジュールは、追加のプロセッサ要素の全てがバリアに到達したこと、結合が完了し、第1のプロセッサ要素上のスレッド実行が再開することを示すために、信号893を第1のプロセッサ要素に任意に送信する、又はそうでなければ提供することができる。他の実施形態では、第1のプロセッサ要素は任意に、同期バリア内の状態を監視することができる、又は起動された追加のプロセッサ要素の全てが同期バリアに到達したときに、同期バリアから信号を受信することができる。
追加のプロセッサ要素は、アーキテクチャ状態884を有することができる。アーキテクチャ状態は、前述したアーキテクチャ状態のタイプ、例えば、汎用レジスタ、パックドデータレジスタ、浮動小数点レジスタ、ステータスレジスタ、命令ポインタなどを含むことができる。示されるように、いくつかの実施形態では、アーキテクチャ状態は、1つ又は複数のいわゆるスティッキーフラグ(例えば、スティッキーエラーフラグ)894を含むことができる。例として、これらのスティッキーフラグは、スティッキー浮動小数点状態フラグ、又は、例えば、ゼロ除算フラグ、無効演算フラグ、デノーマルフラグなどのエラーフラグを含むことができる。1つの具体例として、スティッキーフラグは、x86プロセッサのMXCSRレジスタ内にスティッキー浮動小数点エラーフラグを含むことができる。これらのフラグは、セットされると、可能性のあるエラー状態が十分に調査され、適切であれば解決されるまで、一般にクリアされることはないという、比較的スティッキーな意味である。スティッキーフラグは、キャリーフラグ、オーバーフローフラグ、ゼロフラグ、及び他の算術フラグのような非スティッキーフラグと対比される。
いくつかの実施形態では、ユーザレベルの同期スレッド終了モジュールは、ユーザレベルの同期及び終了命令に応答して、エラー状態情報、及び/又は追加のプロセッサ要素が直面した1つ又は複数のエラー状態のインジケーションを第1のプロセッサ要素に伝達するよう動作することができる。いくつかの実施形態では、エラー状態情報は、スティッキーフラグ894のうちの1つ又は複数に関連付けられてよく、及び/又はそれらのフラグを含むか又は示してもよい。そのようなスティッキーフラグ又はエラー状態情報を第1のプロセッサ要素に伝達すること、又は示すことは、第1のプロセッサ要素がスティッキーフラグ又は他のエラー状態情報を解析し、必要に応じて適切な対応を取ることを可能にするのに役立つことができる。このエラー状態情報は、異なる実施形態では異なる方法で伝達されてよく、また示されてもよい。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、そのような情報の別個のセットを第1のプロセッサ要素に伝達することができる。他の実施形態では、そのような情報をマージしたセット又は組み合わせたセットが、第1のプロセッサ要素に伝達されてよい。1つの例として、追加のプロセッサ要素のそれぞれがその同期及び終了命令を実行するとき、追加のプロセッサ要素のそれぞれは、このエラー状態情報を第1のプロセッサ要素に直接伝達できる。典型的には、第1のプロセッサ要素は、その対応するアーキテクチャレジスタにエラー状態情報を取り込み、次に当該情報を適宜処理することができる。
別の例として、追加のプロセッサ要素のそれぞれがその同期及び終了命令を実行すると、追加のプロセッサ要素のそれぞれは、追加のプロセッサ要素及び第1のプロセッサ要素にアクセス可能な記憶位置885に、このエラー状態情報を信号897で知らせる、又はそうでなければ伝達することができる。異なるタイプの記憶位置が異なる実施形態に好適である。好適な記憶位置の例には、限定されないが、追加のプロセッサ要素の1つ又は複数のレジスタ、第1のプロセッサ要素の1つ又は複数のレジスタ、第1のプロセッサ要素と追加のプロセッサ要素とによって共有されるメモリの1つ又は複数のメモリ位置など、及びこれらの組み合わせが含まれる。いくつかの実施形態では、記憶位置は、第1のプロセッサ要素と追加のプロセッサ要素のそれぞれとによって共有され、並列処理制御データ構造体を実装するのに用いられる、ユーザがアドレス可能なメモリ空間の1つ又は複数のメモリ位置を表すことができる。いくつかの実施形態では、この並列処理制御データ構造体は、オペレーティングシステムにより用いられるプロシージャコールスタックから分かれていてよい。いくつかの実施形態では、この並列処理制御データ構造体は、第1のプロセッサ要素、及び追加のプロセッサ要素それぞれの両方にアクセス可能であってよく、第1のプロセッサ要素と追加のプロセッサ要素のそれぞれとの間で、特定の実装に必要な様々な異なるタイプの制御及びデータを受け渡すのに用いられてよい。あるいは、様々な他のタイプの記憶位置が、代わりに任意に用いられてもよい。
このエラー状態情報の別個のセットが追加のプロセッサ要素それぞれの記憶位置885に格納されてよく、あるいは、このエラー状態情報を組み合わせた又はマージした単一のセットが記憶位置に保持され格納されてもよい。例えば、エラー状態情報をマージした又は組み合わせたセットは、所与のスティッキーエラー状態フラグが追加のプロセッサ要素のいずれかにセットされた場合、所与のスティッキーエラー状態フラグをセットすることができる。換言すれば、累積エラー状態情報の単一のセットが、追加のプロセッサ要素のいずれかの任意のエラー状態を表しながら保持されてよく、この累積エラー状態情報の単一のセットは、第1のプロセッサ要素に伝達されてよい。これらは、ほんのいくつかの説明のための実例である。エラー状態情報を伝達する他の方法も考えられる。いくつかの実施形態では、ユーザレベルの同期及び結合命令に応答する追加のプロセッサ要素は、記憶位置885、例えば、共有のユーザメモリ空間などに実行の結果896を保存又は格納することもできる。
[例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ]
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサに実装されてよい。例えば、そのようなコアの実装は、1)汎用計算を対象とした汎用インオーダコア、2)汎用計算を対象とした高性能汎用アウトオブオーダコア、3)グラフィックス及び/又は科学(スループット)計算を主に対象とした専用コアを含んでよい。異なるプロセッサの実装には、1)汎用計算を対象とした1つ又は複数の汎用インオーダコア、及び/又は、汎用計算を対象とした1つ又は複数の汎用アウトオブオーダコアを含むCPU、並びに2)グラフィックス及び/又は科学(スループット)を主に対象とした1つ又は複数の専用コアを含むコプロセッサが含まれてよい。そのような異なるプロセッサによって異なるコンピュータシステムアーキテクチャがもたらされ、そこには次のものが含まれる。つまり、1)CPUとは別個のチップに搭載されたコプロセッサ、2)CPUと同じパッケージ内の別個のダイに搭載されたコプロセッサ、3)CPUと同じダイに搭載されたコプロセッサ(この場合、そのようなコプロセッサは統合グラフィックスロジック及び/又は科学(スループット)ロジックなどの専用ロジック、又は専用コアと呼ばれることがある)、及び4)説明されたCPU(アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある)、上述のコプロセッサ、及び追加機能を同じダイ上に含み得るシステムオンチップである。例示的なコアアーキテクチャが次に説明され、その後に、例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
[例示的なコアアーキテクチャ]
[インオーダコア及びアウトオブオーダコアのブロック図]
図9Aは、本発明の実施形態に従い、例示的なインオーダパイプライン及び例示的なレジスタリネーミング・アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図9Bは、本発明の実施形態に従い、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図9A〜図9Bの実線枠は、インオーダパイプライン及びインオーダコアを示し、任意追加の破線枠は、レジスタリネーミング・アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
図9Aにおいて、プロセッサパイプライン900は、フェッチステージ902、レングス復号ステージ904、復号ステージ906、割り当てステージ908、リネーミングステージ910、スケジューリング(ディスパッチ又は発行としても知られる)ステージ912、レジスタ読み出し/メモリ読み出しステージ914、実行ステージ916、ライトバック/メモリ書き込みステージ918、例外処理ステージ922、及びコミットステージ924を含む。
図9Bは、実行エンジンユニット950に結合されたフロントエンドユニット930を含むプロセッサコア990を示し、両方ともメモリユニット970に結合されている。コア990は、縮小命令セット計算(RISC)コア、複合命令セット計算(CISC)コア、超長命令語(VLIW)コア、あるいはハイブリッド又は代替的なコアタイプであってよい。さらに別の選択肢として、コア990は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット(GPGPU)コア、グラフィックスコアなどの専用コアであってもよい。
フロントエンドユニット930は、命令キャッシュユニット934に結合された分岐予測ユニット932を含み、命令キャッシュユニット934は命令トランスレーションルックアサイドバッファ(TLB)936に結合され、命令トランスレーションルックアサイドバッファ(TLB)936は命令フェッチユニット938に結合され、命令フェッチユニット938は復号ユニット940に結合されている。復号ユニット940(又はデコーダ)は、複数の命令を復号し、1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成し得る。これらは、元の命令から復号され、又は別の方法で元の命令を反映し、又は元の命令から導出される。復号ユニット940は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などが含まれる。1つの実施形態では、コア990は、特定のマクロ命令用のマイクロコードを(例えば、復号ユニット940の中に、そうでなければフロントエンドユニット930内に)格納するマイクロコードROM又は他の媒体を含む。復号ユニット940は、実行エンジンユニット950内のリネーム/アロケータユニット952に結合されている。
実行エンジンユニット950は、リタイアメントユニット954と、1つ又は複数のスケジューラユニット956のセットとに結合されたリネーム/アロケータユニット952を含む。スケジューラユニット956は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット956は、物理レジスタファイルユニット958に結合されている。物理レジスタファイルユニット958のそれぞれは、1つ又は複数の物理レジスタファイルを表し、そのそれぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)など、1つ又は複数の異なるデータタイプを格納する。1つの実施形態では、物理レジスタファイルユニット958は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット958は、リタイアメントユニット954が重ねられており、レジスタリネーミング及びアウトオブオーダ実行が(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、並びにレジスタマップ及びレジスタのプールを用いるなどして)実装され得る様々な方法を示す。リタイアメントユニット954及び物理レジスタファイルユニット958は、実行クラスタ960に結合されている。実行クラスタ960は、1つ又は複数の実行ユニット962のセットと、1つ又は複数のメモリアクセスユニット964のセットとを含む。実行ユニット962は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行してよい。いくつかの実施形態は、特定の機能又は機能のセットに専用の複数の実行ユニットを含んでよく、他の実施形態は、1つのみの実行ユニット、又は全ての機能を全てが実行する複数の実行ユニットを含んでもよい。特定の実施形態は、特定のタイプのデータ/オペレーションに対して別個のパイプラインを形成するので、スケジューラユニット956、物理レジスタファイルユニット958、及び実行クラスタ960は、可能性として複数であると示されている(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプラインはそれぞれ、独自のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット964を有する特定の実施形態が実装される)。別個のパイプラインが用いられる場合、これらのパイプラインのうち1つ又は複数がアウトオブオーダ発行/実行であってよく、残りがインオーダであってもよいことも理解されるべきである。
メモリアクセスユニット964のセットがメモリユニット970に結合され、メモリユニット970は、レベル2(L2)キャッシュユニット976に結合されたデータキャッシュユニット974に結合されたデータTLBユニット972を含む。1つの例示的な実施形態において、メモリアクセスユニット964は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらのそれぞれはメモリユニット970内のデータTLBユニット972に結合されている。命令キャッシュユニット934は、メモリユニット970内のレベル2(L2)キャッシュユニット976にさらに結合される。L2キャッシュユニット976は、1つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーミング・アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン900を以下のように実装してよい。すなわち、1)命令フェッチ938がフェッチステージ902及びレングス復号ステージ904を実行する。2)復号ユニット940が復号ステージ906を実行する。3)リネーム/アロケータユニット952が割り当てステージ908及びリネーミングステージ910を実行する。4)スケジューラユニット956がスケジュールステージ912を実行する。5)物理レジスタファイルユニット958及びメモリユニット970がレジスタ読み出し/メモリ読み出しステージ914を実行する。実行クラスタ960が実行ステージ916を実行する。6)メモリユニット970及び物理レジスタファイルユニット958がライトバック/メモリ書き込みステージ918を実行する。7)様々なユニットが例外処理ステージ922に関与し得る。8)リタイアメントユニット954及び物理レジスタファイルユニット958がコミットステージ924を実行する。
コア990は、本明細書で説明される命令を含む1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンに追加された、いくつかの拡張を有する)、MIPS Technologies(カリフォルニア州、サニーベール)のMIPS命令セット、ARM Holdings(カリフォルニア州、サニーベール)のARM命令セット(NEONなどの任意の追加拡張を有する))をサポートしてよい。1つの実施形態では、コア990はパックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
コアはマルチスレッディング(オペレーション又はスレッドからなる2つ又はそれより多くの並列セットを実行)をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する)、又はこれらの組み合わせ(例えば、タイムスライスフェッチ及び復号、並びにそれ以降のIntel(登録商標)ハイパースレッディング・テクノロジーなどの同時マルチスレッディング)を含む様々な方法でサポートしてよいことが理解されるべきである。
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことが理解されるべきである。示されたプロセッサの実施形態はまた、別々の命令キャッシュユニット934とデータキャッシュユニット974、並びに共有L2キャッシュユニット976を含むが、代替的な実施形態は、命令及びデータの両方に対して、例えばレベル1(L1)内部キャッシュ又は複数のレベルの内部キャッシュなど、単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュ及び外部キャッシュの組み合わせを含んでよく、外部キャッシュはコア及び/又はプロセッサの外部に存在する。あるいは、全てのキャッシュが、コア及び/又はプロセッサの外部にあってもよい。
[具体的な例示的インオーダコアアーキテクチャ]
図10A〜図10Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを含む)の1つになるであろう。論理ブロックは、用途に応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通じて、何らかの固定機能ロジック、メモリI/Oインタフェース、及び他の必要なI/Oロジックと通信する。
図10Aは、本発明の実施形態による、オンダイ相互接続ネットワーク1002への接続に加え、レベル2(L2)キャッシュのローカルサブセット1004を有する単一のプロセッサコアのブロック図である。1つの実施形態では、命令デコーダ1000はパックドデータ命令セット拡張を用いてx86命令セットをサポートする。L1キャッシュ1006によって、キャッシュメモリからスカラユニット及びベクトルユニットへの低レイテンシアクセスが可能となる。1つの実施形態では、(設計を簡略化するために)スカラユニット1008及びベクトルユニット1010が、別々のレジスタセット(それぞれ、複数のスカラレジスタ1012及び複数のベクトルレジスタ1014)を用い、これらの間で転送されるデータはメモリに書き込まれ、その後、レベル1(L1)キャッシュ1006から読み戻されるが、本発明の代替的な実施形態は、異なる手法を用いてよい(例えば、単一のレジスタセットを用いる、又は書き込み及び読み戻しを行うことなく、2つのレジスタファイル間でのデータ転送を可能にする通信経路を含む)。
L2キャッシュのローカルサブセット1004は、別個のローカルサブセットに分割されるグローバルL2キャッシュの一部であり、プロセッサコアごとに1つである。各プロセッサコアは、独自のL2キャッシュのローカルサブセット1004に直接アクセスする経路を有する。プロセッサコアにより読み出されたデータは、L2キャッシュのサブセット1004に格納され、他のプロセッサコアが独自のローカルL2キャッシュのサブセットにアクセスするのと並行して、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、独自のL2キャッシュのサブセット1004に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向性であり、プロセッサコア、L2キャッシュ、及び他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータ経路は、一方向当たり1012ビット幅である。
図10Bは、本発明の実施形態による図10Aのプロセッサコアの一部に関する拡大図である。図10Bは、L1キャッシュ1004の一部であるL1データキャッシュ1006Aと、ベクトルユニット1010及びベクトルレジスタ1014に関するより詳細とを含む。具体的には、ベクトルユニット1010は16幅のベクトル処理ユニット(VPU)(16幅のALU1028を参照)であり、整数命令、単精度浮動小数点命令、及び倍精度浮動小数点命令のうち1つ又は複数を実行する。VPUは、スウィズルユニット1020を用いたレジスタ入力のスウィズル処理、数値変換ユニット1022A〜1022Bを用いた数値変換、並びに複製ユニット1024を用いたメモリ入力の複製をサポートする。書き込みマスクレジスタ1026は、結果として生じるベクトル書き込みをプレディケートする(predicating)ことを可能にする。
[統合メモリコントローラ及びグラフィックスを有するプロセッサ]
図11は、本発明の実施形態に従って、1つより多くのコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサ1100のブロック図である。図11の実線枠は、単一のコア1102A、システムエージェント1110、1つ又は複数のバスコントローラユニット1116のセットを有するプロセッサ1100を示し、任意追加の破線枠は、複数のコア1102A〜1102N、システムエージェントユニット1110内にある1つ又は複数の統合メモリコントローラユニット1114のセット、及び専用ロジック1108を有する代替のプロセッサ1100を示す。
したがって、プロセッサ1100の異なる実装は、1)専用ロジック1108が統合グラフィックス及び/又は科学(スループット)ロジック(1つ又は複数のコアを含んでよい)であり、コア1102A〜1102Nが1つ又は複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)であるCPU、2)コア1102A〜1102Nが、グラフィックス及び/又は科学(スループット)を主に対象とした多数の専用コアであるコプロセッサ、並びに3)コア1102A〜1102Nが多数の汎用インオーダコアであるコプロセッサを含んでよい。したがって、プロセッサ1100は汎用プロセッサ、コプロセッサであってよく、あるいは専用プロセッサ、例えばネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットの多数統合コア(MIC)コプロセッサ(30個又はそれより多くのコアを含む)、組み込みプロセッサなどであってもよい。プロセッサは、1つ又は複数のチップ上に実装されてよい。プロセッサ1100は、例えば、BiCMOS、CMOS、又はNMOSなどの多数のプロセス技術のいずれかを用いる1つ又は複数の基板の一部であってよく、及び/又は当該基板上に実装されてもよい。
メモリ階層は、コア内にある1つ又は複数のレベルのキャッシュと、共有キャッシュユニット1106のセットあるいは1つ又は複数の共有キャッシュユニット1106と、統合メモリコントローラユニット1114のセットに結合された外部メモリ(不図示)とを含む。共有キャッシュユニット1106のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなど、1つ又は複数の中間レベルのキャッシュ、又は他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はこれらの組み合わせを含んでよい。1つの実施形態では、リングベースの相互接続ユニット1112が、統合グラフィックスロジック1108、共有キャッシュユニット1106のセット、及びシステムエージェントユニット1110/統合メモリコントローラユニット1114を相互接続するが、代替的な実施形態は、このようなユニットを相互接続するのに任意の数の周知手法を用いてよい。1つの実施形態では、1つ又は複数のキャッシュユニット1106と、コア1102A〜1102Nとの間でコヒーレンシが維持される。
いくつかの実施形態では、コア1102A〜1102Nのうち1つ又は複数がマルチスレッディング可能である。システムエージェント1110は、コア1102A〜1102Nを調整し動作させるこうしたコンポーネントを含む。システムエージェントユニット1110は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでよい。PCUは、コア1102A〜1102N及び統合グラフィックスロジック1108の電力状態を管理するのに必要なロジック及びコンポーネントであってよく、又は当該ロジック及び当該コンポーネントを含んでもよい。ディスプレイユニットは、外部接続された1つ又は複数のディスプレイを駆動するためのものである。
コア1102A〜1102Nは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア1102A〜1102Nのうち2つ又はそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセット又は別の命令セットだけを実行することが可能であってもよい。
[例示的なコンピュータアーキテクチャ]
図12〜図15は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ型PC、デスクトップ型PC、ハンドヘルド型PC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルド型デバイス、及び様々な他の電子デバイス向けの当技術分野において知られる他のシステム設計及び構成も適している。概して、本明細書に開示されるプロセッサ及び/又は他の実行ロジックを組み込むことが可能である多様なシステム又は電子デバイスが一般に適している。
ここで図12を参照すると、本発明の1つの実施形態によるシステム1200のブロック図が示されている。システム1200は、1つ又は複数のプロセッサ1210、1215を含んでよく、これらはコントローラハブ1220に結合されている。1つの実施形態では、コントローラハブ1220は、グラフィックスメモリコントローラハブ(GMCH)1290と、入力/出力ハブ(IOH)1250(これは別個のチップ上にあってよい)とを含む。GMCH1290は、メモリ及びグラフィックスコントローラを含み、これらにメモリ1240及びコプロセッサ1245が結合されている。IOH1250は入力/出力(I/O)デバイス1260をGMCH1290に結合する。あるいは、メモリ及びグラフィックスコントローラの一方又は両方が、(本明細書で説明されるように)プロセッサ内に統合され、メモリ1240及びコプロセッサ1245は、プロセッサ1210と、IOH1250と共に単一チップに入ったコントローラハブ1220とに直接結合される。
任意的な性質の追加のプロセッサ1215は、図12に破線で示されている。各プロセッサ1210、1215は、本明細書で説明される処理コアのうち1つ又は複数を含んでよく、何らかのバージョンのプロセッサ1100であってよい。
メモリ1240は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、又はこの2つの組み合わせであってよい。少なくとも1つの実施形態では、コントローラハブ1220は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPath相互接続(QPI)などのポイントツーポイントインタフェース、又は同種の接続1295を介してプロセッサ1210、1215と通信する。
1つの実施形態では、コプロセッサ1245は、例えば、ハイスループットMICプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。1つの実施形態では、コントローラハブ1220は統合グラフィックスアクセラレータを含んでよい。
物理リソース1210と1215との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む広範な価値基準に関して、様々な差異が存在し得る。
1つの実施形態では、プロセッサ1210は、一般的タイプのデータ処理オペレーションを制御する命令を実行する。この命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ1210は、これらのコプロセッサ命令を、付属のコプロセッサ1245が実行すべきタイプの命令であると認識する。したがって、プロセッサ1210は、これらのコプロセッサ命令(又はコプロセッサ命令を表す制御信号)をコプロセッサバス又は他の相互接続を使ってコプロセッサ1245に発行する。コプロセッサ1245は、受信したコプロセッサ命令を受け付けて実行する。
ここで図13を参照すると、本発明の実施形態による、より詳細な第1の例示的なシステム1300のブロック図が示されている。図13に示されるように、マルチプロセッサシステム1300はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1350を介して結合される第1のプロセッサ1370と、第2のプロセッサ1380とを含む。プロセッサ1370及び1380のそれぞれは、何らかのバージョンのプロセッサ1100であってよい。本発明の1つの実施形態では、プロセッサ1370及び1380はそれぞれ、プロセッサ1210及び1215であり、コプロセッサ1338はコプロセッサ1245である。別の実施形態では、プロセッサ1370及び1380はそれぞれ、プロセッサ1210及びコプロセッサ1245である。
プロセッサ1370及び1380は、統合メモリコントローラ(IMC)ユニット1372及び1382をそれぞれ含んで示されている。プロセッサ1370はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1376及び1378を含み、同様に第2のプロセッサ1380はP−Pインタフェース1386及び1388を含む。プロセッサ1370、1380は、ポイントツーポイント(P−P)インタフェース1350を介し、P−Pインタフェース回路1378、1388を用いて情報を交換してよい。図13に示されるように、IMC1372及び1382は、プロセッサをそれぞれのメモリ、すなわちメモリ1332及びメモリ1334に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
プロセッサ1370、1380はそれぞれ、個々のP−Pインタフェース1352、1354を介し、ポイントツーポイントインタフェース回路1376、1394、1386、1398を用いてチップセット1390と情報を交換してよい。チップセット1390は、高性能インタフェース1339を介してコプロセッサ1338と任意に情報を交換してよい。1つの実施形態では、コプロセッサ1338は、例えば、ハイスループットMICプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
共有キャッシュ(不図示)がどちらかのプロセッサに含まれても、又は両方のプロセッサの外部に含まれてもよく、さらにP−P相互接続を介してこれらのプロセッサに接続されてもよい。これにより、プロセッサが低電力モードに入っている場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
チップセット1390は、インタフェース1396を介して第1のバス1316に結合されてよい。1つの実施形態では、第1のバス1316は、ペリフェラル・コンポーネント・インターコネクト(PCI)バス、あるいはPCIエクスプレスバス又は別の第3世代I/O相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
図13に示されるように、第1のバス1316を第2のバス1320に結合するバスブリッジ1318と共に、様々なI/Oデバイス1314が第1のバス1316に結合されてよい。1つの実施形態では、1つ又は複数の追加のプロセッサ1315が第1のバス1316に結合される。追加のプロセッサとは、コプロセッサ、ハイスループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータ、又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又はその他のプロセッサなどである。1つの実施形態では、第2のバス1320はローピンカウント(LPC)バスであってよい。様々なデバイスが第2のバス1320に結合されてよく、1つの実施形態では、そのようなデバイスには例えば、キーボード及び/又はマウス1322、通信デバイス1327、及びストレージユニット1328が含まれ、ストレージユニットには、命令/コード及びデータ1330を含み得るディスクドライブ又は他の大容量ストレージデバイスなどがある。さらに、オーディオI/O1324が第2のバス1320に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図13のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装してよい。
ここで図14を参照すると、本発明の実施形態による、より詳細な第2の例示的なシステム1400のブロック図が示されている。図13及び図14内の同様の要素は同様の参照番号を有しており、図13の特定の態様が、図14の他の態様をあいまいにしないように、図14から省略されている。
図14は、プロセッサ1370、1380が、統合メモリを含み、またI/O制御ロジック(「CL」)1372及び1382をそれぞれ含んでよいことを示す。したがって、CL1372、1382は統合メモリコントローラユニットを含み、且つI/O制御ロジックを含む。図14は、メモリ1332、1334だけがCL1372、1382に結合されているのでなく、I/Oデバイス1414もまた、制御ロジック1372、1382に結合されていることを示している。レガシI/Oデバイス1415がチップセット1390に結合されている。
ここで図15を参照すると、本発明の実施形態によるSoC1500のブロック図が示されている。図11の同種の要素は、同様の参照番号を有している。また、破線枠は、より高度なSoCにおける任意の機能である。図15において、相互接続ユニット1502が、1つ又は複数のコア1102A〜1102N及び共有キャッシュユニット1106のセットを含むアプリケーションプロセッサ1510と、システムエージェントユニット1110と、バスコントローラユニット1116と、統合メモリコントローラユニット1114と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及び映像プロセッサを含み得るコプロセッサ1520のセットあるいは1つ又は複数のコプロセッサ1520と、スタティックランダムアクセスメモリ(SRAM)ユニット1530と、ダイレクトメモリアクセス(DMA)ユニット1532と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット1540とに結合されている。1つの実施形態では、コプロセッサ1520は専用プロセッサを含み、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサなどがある。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサと、ストレージシステム(揮発性メモリ及び不揮発性メモリ、及び/又は記憶素子を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを有するプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
図13に示されるコード1330などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成する命令を入力するのに適用されてよい。出力情報は、1つ又は複数の出力デバイスに既知の方法で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信すべく、高水準の手続き型又はオブジェクト指向型プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械語で実装されてよい。実際には、本明細書で説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されない。どのような場合でも、言語はコンパイラ型言語又はインタプリタ型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的な命令により実装されてよく、当該命令は、機械により読み出された場合、本明細書で説明される手法を実行すべく機械にロジックを作成させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体(「テープ」)に格納され、ロジック又はプロセッサを実際に作成する製造装置にロードすべく、様々な顧客又は製造施設に供給されてよい。
そのような機械可読記憶媒体は、限定されることなく、機械又は装置により製造される又は形成される非一時的な有形の構成の物品を含んでよく、そのような物品には、ハードディスクや、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク・リードオンリメモリ(CD−ROM)、コンパクトディスク・リライタブル(CD−RW)、及び光磁気ディスクを含むその他のタイプのディスク、半導体デバイスとして、例えば、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)やスタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)など、磁気カード又は光カード、又は電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体を含む。
したがって、本発明の実施形態はまた、命令を含んだ、又はハードウェア記述言語(HDL)などの設計データを含んだ非一時的な有形の機械可読媒体を含む。HDLは、本明細書で説明される構造、回路、装置、プロセッサ、及び/又はシステム機能を定義する。そのような実施形態はまた、プログラム製品と呼ばれ得る。
[エミュレーション(バイナリ変換、コードモーフィングなどを含む)]
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するのに命令変換器が用いられてよい。例えば命令変換器は、ある命令を、コアによって処理される1つ又は複数の他の命令に翻訳(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)、モーフィング、エミュレーション、又は別の方法で変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上にあっても、プロセッサ外にあっても、又は一部がプロセッサ上にあり且つ一部がプロセッサ外にあってもよい。
図16は、本発明の実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。図示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図16は、高水準言語1602のプログラムがx86コンパイラ1604を用いてコンパイルされ、少なくとも1つのx86命令セットコアを搭載するプロセッサ1616によってネイティブに実行され得るx86バイナリコード1606を生成し得ることを示す。少なくとも1つのx86命令セットコアを搭載するプロセッサ1616は、少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサと実質的に同じ結果を実現するために、(1)Intel(登録商標)x86命令セットコアの命令セットの大部分、又は(2)少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサ上で動作することを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ1604は、追加のリンケージ処理をしてもしなくても、少なくとも1つのx86命令セットコアを搭載するプロセッサ1616上で実行され得るx86バイナリコード1606(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図16は、高水準言語1602のプログラムが、別の命令セットコンパイラ1608を用いてコンパイルされ、少なくとも1つのx86命令セットコアを搭載しないプロセッサ1614(例えば、MIPS Technologies(カリフォルニア州、サニーベール)のMIPS命令セットを実行するコア、及び/又は、ARM Holdings(カリフォルニア州、サニーベール)のARM命令セットを実行するコアを搭載したプロセッサ)によりネイティブに実行され得る別の命令セットバイナリコード1610を生成し得ることを示す。命令変換器1612は、x86バイナリコード1606を、x86命令セットコアを搭載しないプロセッサ1614によりネイティブに実行され得るコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード1610と同じになる可能性は低い。なぜなら、これが実現できる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器1612は、エミュレーション、シミュレーション、又はその他の処理を通じて、x86命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがx86バイナリコード1606を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
図2〜図6のいずれかについて説明された構成要素、機能、及び詳細は、図1、図7、及び図8のいずれにも任意に適用されてよい。さらに、装置のいずれかについて説明された構成要素、機能、及び詳細は、方法のいずれにも任意に適用されてよく、これらの構成要素、機能、及び詳細は、実施形態において、そのような装置により実行されてよく、及び/又はそのような装置を用いて実行されてよい。本明細書で説明されたプロセッサのいずれも、本明細書で開示されたコンピュータシステム(例えば、図12〜図15)のいずれかに含まれてよい。いくつかの実施形態では、コンピュータシステムは、相互接続、相互接続に結合されたプロセッサ、及び相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)を含むことができる。あるいは、DRAMの代わりに、リフレッシュされる必要がない他のタイプの揮発性メモリが用いられてよく、又はフラッシュメモリが用いられてよい。
本明細書及び特許請求の範囲において、「結合」及び/又は「接続」という用語が、それらの派生語と共に、用いられたことがある。これらの用語は、互いの同義語であるとは意図されていない。むしろ、実施形態において、「接続」は、2つ又はそれより多くの要素が、互いに直接に物理的接触及び/又は電気的接触していることを示すのに用いられてよい。「結合」は、2つ又はそれより多くの要素が、互いに直接に物理的接触及び/又は電気的接触をしていることを意味することができる。しかし、「結合」は、2つ又はそれより多くの要素が互いに直接に接触していないが、それでもまだ互いに協同している、又は相互作用していることも意味することができる。例えば、復号ユニットは、スレッドスケジューラモジュール及び/又は同期モジュールと、間にある1つ又は複数のユニット、モジュール、又は他の構成要素を介して結合されてよい。図において、矢印は、接続及び結合を示すのに用いられている。
明細書及び/又は特許請求の範囲において、「ロジック」、「ユニット」、「モジュール」、又は「コンポーネント」という用語が用いられたことがある。これらの用語のそれぞれは、ハードウェア、ファームウェア、ソフトウェア、又はこれらの様々な組み合わせを指すのに用いられてよい。例示的な実施形態において、これらの用語のそれぞれは、集積回路、特定用途向け集積回路、アナログ回路、デジタル回路、プログラム式論理デバイス、命令を含んだメモリデバイスなど、及びこれらの様々な組み合わせを指すことができる。いくつかの実施形態では、これらは、少なくともいくつかのハードウェア(例えば、トランジスタ、ゲート、他の回路コンポーネントなど)を含むことができる。
「及び/又は」という用語が用いられたことがある。本明細書で用いられる場合、「及び/又は」という用語は、一方又は他方、あるいは両方を意味する(例えば、A及び/又はBは、A又はB、あるいはA及びBの両方を意味する)。
上記の説明では、実施形態の完全な理解を提供するために、具体的な詳細が明記された。しかし、これらの具体的な詳細のいくつかを用いずに、他の実施形態が実施されてよい。本発明の範囲は、上述した具体例によって決定されるのではなく、以下の特許請求の範囲のみによって決定される。他の例では、よく知られた回路、構造、デバイス、及びオペレーションは、本明細書の理解をあいまいにしないために、ブロック図の形態で、及び/又は詳細を用いずに示されている。適切とみなされる場合、参照番号又は参照番号の末尾部分が、図の間で、対応する要素又は類似の要素を示すために繰り返されており、これらの要素は、別に明記される場合、又は別の方法ではっきりと明らかである場合を除いて、類似の特徴又は同じ特徴を任意に有することができる。
特定のオペレーションがハードウェア要素により実行されてよく、あるいは機械実行可能命令又は回路実行可能命令で具現化されてよく、これらは、オペレーションを実行する命令でプログラムされた機械、回路、又はハードウェア要素(例えば、プロセッサ、プロセッサの一部、回路など)を生じさせる、及び/又はもたらすのに用いられてよい。これらのオペレーションは、ハードウェアとソフトウェアとの組み合わせでも、任意に実行されてよい。プロセッサ、機械、回路、又はハードウェアは、特定の回路又は特殊な回路を含むことができ、あるいは他のロジック(例えば、ファームウェア及び/又はソフトウェアと組み合わされる可能性のあるハードウェア)が、命令を実行及び/又は処理し、命令に応答して結果を格納するよう動作する。
いくつかの実施形態は、機械可読媒体を含む製造品(例えば、コンピュータプログラム製品)を含む。この媒体は、機械が可読な形態で情報を提供する、例えば格納するメカニズムを含むことができる。機械可読媒体は、機械により実行された場合、及び/又は機械により実行されたとき、本明細書に開示される1つ又は複数のオペレーション、方法、又は手法を実行する機械を、機械に実行させる及び/又はもたらすようにさせるよう動作する命令又は一連の命令を提供してよく、又は機械可読媒体上に格納させてよい。
いくつかの実施形態では、機械可読媒体は、非一時的機械可読記憶媒体を含むことができる。例えば、非一時的機械可読記憶媒体には、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、光データストレージデバイス、CD−ROM、磁気ディスク、光磁気ディスク、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイスなどが含まれてよい。非一時的機械可読記憶媒体は、一時的に伝搬される信号から構成されない。いくつかの実施形態では、記憶媒体は、固形物を含む有形の媒体を含むことができる。
好適な機械の例には、限定されないが、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路などが含まれる。好適な機械のさらに他の例には、プロセッサ、デジタル論理回路、又は集積回路を含んだ、コンピュータシステム又は他の電子デバイスが含まれる。そのようなコンピュータシステム又は電子デバイスの例には、限定されないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータ及びスイッチ)、モバイルインターネットデバイス(MID)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラが含まれる。
本明細書全体にわたる、例えば「1つの実施形態」、「ある実施形態」、「1つ又は複数の実施形態」、「いくつかの実施形態」への言及は、特定の特徴が本発明の実施に含まれてよいが、必ずしも含まれる必要がないことを示している。同様に、本明細書では、本開示を簡素化する目的及び様々な発明的側面の理解を助ける目的で、様々な特徴が、単一の実施形態、図、又はそれらの説明に共にグループ化されることがある。しかし、開示される本方法は、本発明が各請求項に明確に記載されるよりも多くの特徴を必要とするという意図を反映していると解釈されるべきではない。むしろ、以下の特許請求の範囲が反映するように、発明的側面は、開示された単一の実施形態の全ての特徴より少なくなっている。したがって、詳細な説明に続く特許請求の範囲は、本明細書により、この詳細な説明に明確に組み込まれており、各請求項は、本発明の別個の実施形態として独立している。
[例示的な実施形態]
以下の例は、さらなる実施形態に関する。これらの例の詳細は、1つ又は複数の実施形態のどこでも用いられてよい。
例1は、複数のプロセッサ要素と、ソフトウェアスレッドのユーザレベルの分岐命令を実行する第1のプロセッサ要素とを含む、プロセッサ又は他の装置である。第1のプロセッサ要素は、ユーザレベルの分岐命令を復号するデコーダを含む。ユーザレベルの分岐命令は、少なくとも1つの命令アドレスを示す。第1のプロセッサ要素は、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成するユーザレベルのスレッド分岐モジュールも含む。
例2は例1に記載のプロセッサを含み、ここで、デコーダは、単一の命令アドレスを任意に示すユーザレベルの分岐命令を復号し、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、任意の単一の命令アドレスを格納する。
例3は例1に記載のプロセッサを含み、ここで、デコーダは、複数の異なる命令アドレスを任意に示すユーザレベルの分岐命令を復号し、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、複数の異なる命令アドレスのうちの別々の1つを任意に格納する。
例4は、例1から3のいずれか1つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、第1のプロセッサ要素のアーキテクチャ状態のコピーを複数のプロセッサ要素のそれぞれに任意に提供する。
例5は例4に記載のプロセッサを含み、ここで、アーキテクチャ状態のコピーを複数のプロセッサ要素のそれぞれに提供することは、複数のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のメモリ位置のそれぞれに、アーキテクチャ状態のコピーを格納することを任意に含む。
例6は、例1から5のいずれか1つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のそれぞれを、管理上のシステムソフトウェアから任意に介入されることなく、命令を並列に実行するよう構成する。
例7は、例1から6のいずれか1つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、第1のプロセッサ要素に任意に、ソフトウェアスレッドの命令の実行を中止させ、同期バリアにおいて任意に待機させる。
例8は、例1から6のいずれか1つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは任意に、ユーザレベルの分岐命令が復号されたことに応答して、第1のプロセッサ要素に、ソフトウェアスレッドの命令の実行を中止させることはない。
例9は、例1から8のいずれか1つに記載のプロセッサを含み、ここで、複数のプロセッサ要素のそれぞれは対応するユーザレベルの同期及び終了命令を実行し、複数のプロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を復号するデコーダを含み、ユーザレベルの同期スレッド終了モジュールは、対応するユーザレベルの同期及び終了命令が復号されたことに応答して、ユーザレベルの同期スレッド終了モジュールが中に含まれる、対応するプロセッサ要素に、さらなる命令の実行を中止させ、複数のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行するまで待機させ、複数のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行した後に、第1のプロセッサ要素上で実行されるソフトウェアスレッドの第2の命令へ制御を移行させる。
例10は例9に記載のプロセッサを含み、ここで、それぞれのユーザレベルの同期スレッド終了モジュールは、対応するユーザレベルの同期及び終了命令が復号されたことに応答して、1つ又は複数のフラグに関連付けられた1つ又は複数のエラー状態のインジケーションを第1のプロセッサ要素に任意に伝達する。
例11は、例1から10のいずれか1つに記載のプロセッサを含み、ここで、第1のプロセッサ要素は、複数のプロセッサ要素それぞれの命令セットにも含まれる命令を含む命令セットを任意に有する。
例12は、例1から11のいずれか1つに記載のプロセッサを含み、ここで、第1のプロセッサ要素は、複数のプロセッサ要素のそれぞれよりも低い平均命令実行レイテンシを任意に有する。
例13は、例1から11のいずれか1つに記載のプロセッサを含み、ここで、第1のプロセッサ要素は、複数のプロセッサ要素それぞれのマイクロアーキテクチャと比べて、命令実行がよりアウトオブオーダであるマイクロアーキテクチャを任意に有する。
例14は、例1から11のいずれか1つに記載のプロセッサを含み、ここで、第1のプロセッサ要素は、元のプログラム順序のアーキテクチャ状態に対してアウトオブオーダで実行されたはずの命令の結果をコミットするコミットユニットを任意に有し、複数のプロセッサ要素のそれぞれはコミットユニットを有していない。
例15は、例1から11のいずれか1つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のうちの任意で少なくとも20個のそれぞれに、命令を並列に実行するよう構成し、複数のプロセッサ要素の少なくとも20個は全て、単一のデコーダを共有する。
例16は、例1から11のいずれか1つに記載のプロセッサを含み、分岐を予測する分岐予測ユニットと、分岐予測ユニットに結合され、ユーザレベルの分岐命令を含む命令をプリフェッチする命令プリフェッチユニットと、命令プリフェッチユニットに結合され、命令を格納するレベル1(L1)命令キャッシュと、データを格納するL1データキャッシュと、データ及び命令を格納するレベル2(L2)キャッシュと、復号ユニット、L1命令キャッシュ、及びL2キャッシュに結合され、ユーザレベルの分岐命令をL1命令キャッシュ及びL2キャッシュのうちの1つからフェッチし、ユーザレベルの分岐命令を復号ユニットに提供する命令フェッチユニットと、レジスタをリネームするレジスタリネームユニットと、実行のためにユーザレベルの分岐命令から復号された1つ又は複数のオペレーションをスケジューリングするスケジューラと、コミットユニットとをさらに含む。
例17は、第1のプロセッサ要素において、ソフトウェアスレッドのユーザレベルの分岐命令を受信する段階を含む、プロセッサにおける方法である。ユーザレベルの分岐命令は、少なくとも1つの命令アドレスを示す。本方法は、ユーザレベルの分岐命令に応答して、第1のプロセッサ要素を用いて、複数の追加のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する段階も含む。複数の追加のプロセッサ要素のそれぞれは、ユーザレベルの分岐命令により示された少なくとも1つの命令アドレスのうちのある命令アドレスにおいて、命令を実行し始める。
例18は例17に記載の方法を含み、ここで、受信する段階は、単一の命令アドレスを示すユーザレベルの分岐命令を受信する段階を含み、構成する段階は、複数の追加のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、単一の命令アドレスを格納する段階を含む。
例19は例17に記載の方法を含み、ここで、受信する段階は、複数の命令アドレスを示すユーザレベルの分岐命令を受信する段階を含み、構成する段階は、複数の追加のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のプログラムカウンタのうちの別々の1つに、複数の命令アドレスのそれぞれを格納する段階を含む。
例20は、例17から19のいずれか1つに記載の方法を含み、ここで、構成する段階は、複数の追加のプロセッサ要素それぞれのために、第1のプロセッサ要素のアーキテクチャ状態のコピーを格納する段階を含む。
例21は、例17から20のいずれか1つに記載の方法を含み、ここで、構成する段階は、複数の追加のプロセッサ要素のそれぞれを、管理上のシステムソフトウェアから介入されることなく、命令を並列に実行するよう構成する第1のプロセッサ要素を含む。
例22は、例17から21のいずれか1つに記載の方法を含み、第1のプロセッサ要素が、ユーザレベルの分岐命令の実行に応答して、ソフトウェアスレッドの命令実行を中止し、同期バリアにおいて待機する段階をさらに含む。
例23は、例17から22のいずれか1つに記載の方法を含み、複数の追加のプロセッサ要素のそれぞれが、対応するユーザレベルの同期及び終了命令の実行に応答して、さらなる命令の実行を中止する段階と、複数の追加のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行するまで待機する段階と、複数の追加のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行した後に、ソフトウェアスレッドの第2の命令へ制御を移行する段階とをさらに含む。
例24は例23に記載の方法を含み、複数の追加のプロセッサ要素のそれぞれが、対応するユーザレベルの同期及び終了命令の実行に応答して、エラー状態情報を第1のプロセッサ要素に伝達する段階をさらに含む。
例25は、例17から24のいずれか1つに記載の方法を含み、複数の追加のプロセッサ要素のそれぞれが、第1のプロセッサ要素の命令セットに含まれる命令を復号する段階をさらに含む。
例26は、例17から25のいずれか1つに記載の方法を含み、第1のプロセッサ要素において命令をアウトオブオーダで実行する段階と、複数の追加のプロセッサ要素のそれぞれにおいて命令を順番に実行する段階とをさらに含む。
例27は、相互接続と相互接続に結合されたプロセッサとを含んだ、命令を処理するコンピュータシステム又は他のシステムであり、プロセッサは、複数のプロセッサ要素と、ソフトウェアスレッドのユーザレベルの分岐命令を実行する第1のプロセッサ要素とを含み、ユーザレベルの分岐命令は少なくとも1つの命令アドレスを示し、第1のプロセッサ要素は、ユーザレベルの分岐命令に応答して、複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成し、ダイナミックランダムアクセスメモリ(DRAM)は相互接続に結合され、少なくとも1つのユーザレベルの分岐命令を含むコードを格納する。
例28は例27に記載のシステムを含み、ここで、第1のプロセッサ要素は、複数のプロセッサ要素それぞれのマイクロアーキテクチャに比べて、命令実行がよりアウトオブオーダであるマイクロアーキテクチャを有し、第1のプロセッサ要素は、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のうちの少なくとも20個のそれぞれを、命令を並列に実行するよう構成する。
例29は、非一時的機械可読記憶媒体を含む製造品であり、非一時的機械可読記憶媒体はユーザレベルの分岐命令を格納し、ユーザレベルの分岐命令は少なくとも1つの命令アドレスを示し、ユーザレベルの分岐命令は、プロセッサの第1のプロセッサ要素により実行された場合、ユーザレベルの分岐命令に応答して、プロセッサの複数の追加のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成することを含むオペレーションを第1のプロセッサ要素に実行させ、複数の追加のプロセッサ要素のそれぞれは、ユーザレベルの分岐命令により示された少なくとも1つの命令アドレスのうちのある命令アドレスにおいて命令を実行し始め、複数の追加のプロセッサ要素のそれぞれは、第1のプロセッサ要素のアウトオブオーダ命令実行パイプラインよりも多くのインオーダ命令実行パイプラインを有する。
例30は例29に記載の製造品を含み、実行された場合に、複数の追加のプロセッサ要素のうちのある追加のプロセッサ要素が、さらなる命令の実行を中止すること、及び複数の追加のプロセッサ要素のそれぞれが同期バリアに到達するまで、同期バリアにおいて待機することを含むオペレーションを、追加のプロセッサ要素に実行させるという、ユーザレベルの同期及び終了命令をさらに含む。
例31は、例17から26のいずれか1つに記載の方法を実行するよう働く又は動作するプロセッサ又は他の装置である。
例32は、例17から26のいずれか1つに記載の方法を実行するための手段を含むプロセッサ又は他の装置である。
例33は、例17から26のいずれか1つに記載の方法を実行するためのモジュール、及び/又はユニット、及び/又はロジック、及び/又は回路、及び/又は手段の任意の組み合わせを含むプロセッサである。
例34は、任意の非一時的機械可読媒体を含む製造品であり、当該非一時的機械可読媒体は、プロセッサ、コンピュータシステム、電子デバイス、又は他の機械により実行された場合、及び/又は実行された時、例17から21のいずれか1つに記載の方法を機械に実行させるよう動作する命令を任意に格納する、又はそうでなければ提供する。
例35は、バス又は他の相互接続を含むコンピュータシステム又は他の電子デバイスであり、例1から16のいずれか1つに記載のプロセッサは相互接続に結合され、任意のダイナミックランダムアクセスメモリ(DRAM)、任意のスタティックRAM、任意のフラッシュメモリ、任意のグラフィックスコントローラ又はチップ、任意のビデオカード、任意の無線通信チップ、任意の無線送受信機、任意の移動体通信用グローバルシステム(GSM(登録商標))アンテナ、任意のコプロセッサ(例えば、CISCコプロセッサ)、任意のオーディオデバイス、任意のオーディオ入力デバイス、任意のオーディオ出力デバイス、任意のビデオ入力デバイス(例えば、ビデオカメラ)、任意のネットワークインタフェース、任意の通信インタフェース、任意の永続性メモリ(例えば、任意の相変化メモリ、メモリスタなど)、及びこれらの組み合わせから選択される1つ又は複数のコンポーネントが相互接続に結合される。
例36は、実質的に本明細書で説明されたような任意のユーザレベルの分岐命令を実行する(例えば、当該命令を実行するコンポーネントを有する、又は当該命令を実行するよう動作する)プロセッサ又は他の装置である。
例37は、実質的に本明細書に説明されたような任意のユーザレベルの同期及び終了命令を実行する(例えば、当該命令を実行するコンポーネントを有する、又は当該命令を実行するよう動作する)プロセッサ又は他の装置である。
例38は、第1の命令セットの命令を復号する復号ユニットを有するプロセッサを含む、コンピュータシステム又は他の電子デバイスである。プロセッサは、1つ又は複数の実行ユニットも有する。電子デバイスは、プロセッサに結合されたストレージデバイスも含む。ストレージデバイスは第1の命令を格納し、第1の命令は、実質的に本明細書に開示された命令(例えば、ユーザレベルの分岐命令、又はユーザレベルの同期及び結合命令)のいずれであってもよく、第2の命令セットからのものでもよい。ストレージデバイスは、第1の命令を第1の命令セットの1つ又は複数の命令に変換する命令も格納する。第1の命令セットの1つ又は複数の命令は、プロセッサにより実行された場合、第1の命令により指定されたオペレーションをプロセッサに実行させる。
例39は、実質的に本明細書で説明されたプロセッサ又は他の装置である。
例40は、実質的に本明細書で説明された任意の方法を実行するよう動作するプロセッサ又は他の装置である。

Claims (26)

  1. 複数のプロセッサ要素と、
    ソフトウェアスレッドのユーザレベルの分岐命令を実行する第1のプロセッサ要素と
    を備え、前記第1のプロセッサ要素は、
    前記ユーザレベルの分岐命令を復号するデコーダであって、前記ユーザレベルの分岐命令は、少なくとも1つの命令アドレスを示す、デコーダと、
    前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成するユーザレベルのスレッド分岐モジュールと
    を含み、
    前記複数のプロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を実行し、前記複数のプロセッサ要素のそれぞれは、
    前記対応するユーザレベルの同期及び終了命令を復号するデコーダと、
    前記対応するユーザレベルの同期及び終了命令が復号されたことに応答して、ユーザレベルの同期スレッド終了モジュールが中に含まれる、前記対応するプロセッサ要素に、
    さらなる命令の実行を中止させ、
    前記複数のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行するまで待機させ、
    前記複数のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行した後に、前記第1のプロセッサ要素上で実行される前記ソフトウェアスレッドの第2の命令へ制御を移行させる
    ユーザレベルの同期スレッド終了モジュールと
    を含む、
    プロセッサ。
  2. それぞれのユーザレベルの同期スレッド終了モジュールは、前記対応するユーザレベルの同期及び終了命令が復号されたことに応答して、1つ又は複数のフラグに関連付けられた1つ又は複数のエラー状態のインジケーションを前記第1のプロセッサ要素に伝達する、
    請求項に記載のプロセッサ。
  3. 複数のプロセッサ要素と、
    ソフトウェアスレッドのユーザレベルの分岐命令を実行する第1のプロセッサ要素と
    を備え、前記第1のプロセッサ要素は、
    前記ユーザレベルの分岐命令を復号するデコーダであって、前記ユーザレベルの分岐命令は、少なくとも1つの命令アドレスを示す、デコーダと、
    前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成するユーザレベルのスレッド分岐モジュールと
    を含み、
    前記第1のプロセッサ要素は、元のプログラム順序のアーキテクチャ状態に対してアウトオブオーダに実行されたはずの命令の結果をコミットするコミットユニットを有し、前記複数のプロセッサ要素のそれぞれはコミットユニットを有していない、
    ロセッサ。
  4. 前記デコーダは、単一の命令アドレスを示す前記ユーザレベルの分岐命令を復号し、前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、前記単一の命令アドレスを格納する、
    請求項1から3の何れか一項に記載のプロセッサ。
  5. 前記デコーダは、複数の異なる命令アドレスを示す前記ユーザレベルの分岐命令を復号し、前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、前記複数の異なる命令アドレスのうちの別々の1つを格納する、
    請求項1から3の何れか一項に記載のプロセッサ。
  6. 前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記第1のプロセッサ要素のアーキテクチャ状態のコピーを前記複数のプロセッサ要素のそれぞれに提供する、
    請求項1から5の何れか一項に記載のプロセッサ。
  7. 前記アーキテクチャ状態の前記コピーを前記複数のプロセッサ要素のそれぞれに提供することは、前記複数のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のメモリ位置のそれぞれに、前記アーキテクチャ状態のコピーを格納することを含む、
    請求項に記載のプロセッサ。
  8. 前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、管理上のシステムソフトウェアから介入されることなく、前記命令を並列に実行するよう前記複数のプロセッサ要素のそれぞれを構成する、
    請求項1から7の何れか一項に記載のプロセッサ。
  9. 前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記第1のプロセッサ要素に、
    前記ソフトウェアスレッドの命令実行を中止させ、
    同期バリアで待機させる、
    請求項1から8の何れか一項に記載のプロセッサ。
  10. 前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記第1のプロセッサ要素に、前記ソフトウェアスレッドの命令実行を中止させることはない、
    請求項に記載のプロセッサ。
  11. 前記第1のプロセッサ要素は、前記複数のプロセッサ要素のそれぞれよりも低い平均命令実行レイテンシを有する、
    請求項1から10のいずれか一項に記載のプロセッサ。
  12. 前記第1のプロセッサ要素は、前記複数のプロセッサ要素それぞれのマイクロアーキテクチャに比べて、命令実行がよりアウトオブオーダであるマイクロアーキテクチャを有する、
    請求項1から1のいずれか一項に記載のプロセッサ。
  13. 前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のうちの少なくとも20個のそれぞれを、前記命令を並列に実行するように構成し、前記複数のプロセッサ要素のうちの前記少なくとも20個は全て、単一のデコーダを共有する、
    請求項1から1のいずれか一項に記載のプロセッサ。
  14. プロセッサにおける方法であって、
    第1のプロセッサ要素において、ソフトウェアスレッドのユーザレベルの分岐命令を受信する段階であって、前記ユーザレベルの分岐命令は少なくとも1つの命令アドレスを示す、段階と、
    前記ユーザレベルの分岐命令に応答して、前記第1のプロセッサ要素を用いて、複数の追加のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する段階であって、前記複数の追加のプロセッサ要素のそれぞれは、前記ユーザレベルの分岐命令により示された前記少なくとも1つの命令アドレスのうちのある命令アドレスにおいて命令を実行し始める、段階と
    前記複数の追加のプロセッサ要素のそれぞれが、対応するユーザレベルの同期及び終了命令の実行に応答して、
    さらなる命令の実行を中止する段階と、
    前記複数の追加のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行するまで待機する段階と、
    前記複数の追加のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行した後に、前記ソフトウェアスレッドの第2の命令へ制御を移行する段階と
    を備える
    方法。
  15. プロセッサにおける方法であって、
    第1のプロセッサ要素において、ソフトウェアスレッドのユーザレベルの分岐命令を受信する段階であって、前記ユーザレベルの分岐命令は少なくとも1つの命令アドレスを示す、段階と、
    前記ユーザレベルの分岐命令に応答して、前記第1のプロセッサ要素を用いて、複数の追加のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する段階であって、前記複数の追加のプロセッサ要素のそれぞれは、前記ユーザレベルの分岐命令により示された前記少なくとも1つの命令アドレスのうちのある命令アドレスにおいて命令を実行し始める、段階と
    を備え
    前記第1のプロセッサ要素は、元のプログラム順序のアーキテクチャ状態に対してアウトオブオーダに実行されたはずの命令の結果をコミットするコミットユニットを有し、前記複数の追加のプロセッサ要素のそれぞれはコミットユニットを有していない
    方法。
  16. 受信する段階は、単一の命令アドレスを示す前記ユーザレベルの分岐命令を受信する段階を含み、構成する段階は、前記複数の追加のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、前記単一の命令アドレスを格納する段階を含む、
    請求項14または15に記載の方法。
  17. 受信する段階は、複数の命令アドレスを示す前記ユーザレベルの分岐命令を受信する段階を含み、構成する段階は、前記複数の追加のプロセッサ要素のうちの別々の1つにそれぞれ対応する複数のプログラムカウンタのうちの別々の1つに、前記複数の命令アドレスのそれぞれを格納する段階を含む、
    請求項14または15に記載の方法。
  18. 構成する段階は、前記複数の追加のプロセッサ要素それぞれのために、前記第1のプロセッサ要素のアーキテクチャ状態のコピーを格納する段階を含む、
    請求項14から17の何れか一項に記載の方法。
  19. 構成する段階は、前記第1のプロセッサ要素が前記複数の追加のプロセッサ要素のそれぞれを、管理上のシステムソフトウェアから介入されることなく、前記命令を並列に実行するよう構成する段階を含み、さらに、
    前記第1のプロセッサ要素において、命令をアウトオブオーダで実行する段階と、
    前記複数の追加のプロセッサ要素のそれぞれにおいて、命令を順番に実行する段階と
    を含む、
    請求項14から18の何れか一項に記載の方法。
  20. 請求項14から19のいずれか一項に記載の方法を実行するよう動作する
    プロセッサ
  21. 請求項14から19のいずれか一項に記載の方法を実行するための手段を備える
    プロセッサ
  22. 請求項14から19のいずれか一項に記載の方法をプロセッサに実行させる
    プログラム。
  23. 相互接続と、前記相互接続に結合された請求項1から1のいずれか一項に記載のプロセッサと、前記相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)とを備える、
    電子デバイス。
  24. 複数のプロセッサ要素と、
    ソフトウェアスレッドのユーザレベルの分岐命令を実行する第1のプロセッサ要素と
    を備え、前記第1のプロセッサ要素は、
    前記ユーザレベルの分岐命令を復号するための手段であって、前記ユーザレベルの分岐命令は少なくとも1つの命令アドレスを示す、手段と、
    前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する手段と
    を含み、
    前記複数のプロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を実行し、前記複数のプロセッサ要素のそれぞれは、
    前記対応するユーザレベルの同期及び終了命令を復号する手段と、
    前記対応するユーザレベルの同期及び終了命令が復号されたことに応答して、ユーザレベルの同期スレッド終了のための手段が中に含まれる、前記対応するプロセッサ要素に、
    さらなる命令の実行を中止させ、
    前記複数のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行するまで待機させ、
    前記複数のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行した後に、前記第1のプロセッサ要素上で実行される前記ソフトウェアスレッドの第2の命令へ制御を移行させる
    ユーザレベルの同期スレッド終了のための手段と
    を含む、
    プロセッサ。
  25. 複数のプロセッサ要素と、
    ソフトウェアスレッドのユーザレベルの分岐命令を実行する第1のプロセッサ要素と
    を備え、前記第1のプロセッサ要素は、
    前記ユーザレベルの分岐命令を復号するための手段であって、前記ユーザレベルの分岐命令は少なくとも1つの命令アドレスを示す、手段と、
    前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する手段と
    を含み、
    前記第1のプロセッサ要素は、元のプログラム順序のアーキテクチャ状態に対してアウトオブオーダに実行されたはずの命令の結果をコミットするコミットユニットを有し、前記複数のプロセッサ要素のそれぞれはコミットユニットを有していない、
    プロセッサ。
  26. 請求項2に記載のプログラムを格納する、
    コンピュータ可読記憶媒体。
JP2017539015A 2015-03-27 2016-02-05 ユーザレベルの分岐及び結合を行うプロセッサ、方法、システム、及び命令 Active JP6708335B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/671,475 US9747108B2 (en) 2015-03-27 2015-03-27 User-level fork and join processors, methods, systems, and instructions
US14/671,475 2015-03-27
PCT/US2016/016700 WO2016160125A1 (en) 2015-03-27 2016-02-05 User-level fork and join processors, methods, systems, and instructions

Publications (2)

Publication Number Publication Date
JP2018509687A JP2018509687A (ja) 2018-04-05
JP6708335B2 true JP6708335B2 (ja) 2020-06-10

Family

ID=56975369

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017539015A Active JP6708335B2 (ja) 2015-03-27 2016-02-05 ユーザレベルの分岐及び結合を行うプロセッサ、方法、システム、及び命令

Country Status (7)

Country Link
US (1) US9747108B2 (ja)
EP (1) EP3274816B1 (ja)
JP (1) JP6708335B2 (ja)
KR (2) KR20230020590A (ja)
CN (1) CN107408036B (ja)
TW (1) TWI628594B (ja)
WO (1) WO2016160125A1 (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9965185B2 (en) 2015-01-20 2018-05-08 Ultrata, Llc Utilization of a distributed index to provide object memory fabric coherency
WO2016118620A1 (en) 2015-01-20 2016-07-28 Ultrata Llc Object memory data flow triggers
US9886210B2 (en) 2015-06-09 2018-02-06 Ultrata, Llc Infinite memory fabric hardware implementation with router
US10698628B2 (en) 2015-06-09 2020-06-30 Ultrata, Llc Infinite memory fabric hardware implementation with memory
US9971542B2 (en) 2015-06-09 2018-05-15 Ultrata, Llc Infinite memory fabric streams and APIs
EP3387547B1 (en) 2015-12-08 2023-07-05 Ultrata LLC Memory fabric software implementation
WO2017100292A1 (en) 2015-12-08 2017-06-15 Ultrata, Llc. Object memory interfaces across shared links
US10241676B2 (en) 2015-12-08 2019-03-26 Ultrata, Llc Memory fabric software implementation
US10235063B2 (en) 2015-12-08 2019-03-19 Ultrata, Llc Memory fabric operations and coherency using fault tolerant objects
US10387154B2 (en) * 2016-03-14 2019-08-20 International Business Machines Corporation Thread migration using a microcode engine of a multi-slice processor
US10318356B2 (en) * 2016-03-31 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
US10387152B2 (en) * 2017-07-06 2019-08-20 Arm Limited Selecting branch instruction execution paths based on previous branch path performance
GB2569274B (en) 2017-10-20 2020-07-15 Graphcore Ltd Synchronization amongst processor tiles
GB2569269B (en) 2017-10-20 2020-07-15 Graphcore Ltd Synchronization in a multi-tile processing arrangement
GB2569273B (en) 2017-10-20 2020-01-01 Graphcore Ltd Synchronization in a multi-tile processing arrangement
CN109117260B (zh) * 2018-08-30 2021-01-01 百度在线网络技术(北京)有限公司 一种任务调度方法、装置、设备和介质
EP3674939A1 (en) * 2018-12-31 2020-07-01 SafeNet, Inc. Method, system and device for managing an execution of a program relating to part or all of a first application
US11157283B2 (en) * 2019-01-09 2021-10-26 Intel Corporation Instruction prefetch based on thread dispatch commands
KR20210003370A (ko) 2019-07-02 2021-01-12 삼성전자주식회사 하드웨어 로직을 이용하여 통신 오버헤드를 감소시킨 스토리지 장치
GB2595303A (en) * 2020-05-22 2021-11-24 Advanced Risc Mach Ltd Profiling of sampled operations processed by processing circuitry
FR3121249B1 (fr) * 2021-03-29 2024-03-08 Vitesco Technologies Procédé d’implémentation d’un module logiciel défini par un graphe orienté non cyclique non imbriqué en environnement multi-cœur
US11704860B2 (en) 2021-05-14 2023-07-18 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11875444B2 (en) 2021-05-14 2024-01-16 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11830123B2 (en) 2021-05-14 2023-11-28 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11908064B2 (en) * 2021-05-14 2024-02-20 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11853764B2 (en) 2021-05-14 2023-12-26 Nvidia Corporation Accelerated processing via a physically based rendering engine
US20220391264A1 (en) * 2021-06-03 2022-12-08 Nvidia Corporation Techniques for efficiently synchronizing multiple program threads

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1990014629A2 (en) * 1989-05-26 1990-11-29 Massachusetts Institute Of Technology Parallel multithreaded data processing system
US5812811A (en) * 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
JP2000305795A (ja) 1999-04-20 2000-11-02 Nec Corp 並列処理装置
US6651163B1 (en) * 2000-03-08 2003-11-18 Advanced Micro Devices, Inc. Exception handling with reduced overhead in a multithreaded multiprocessing system
JP3702814B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
CN1842770A (zh) * 2003-08-28 2006-10-04 美普思科技有限公司 一种在处理器中挂起和释放执行过程中计算线程的整体机制
US7321965B2 (en) 2003-08-28 2008-01-22 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US9189230B2 (en) * 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US8719819B2 (en) * 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
DE112005003401T5 (de) 2005-01-19 2007-12-20 Intel Corporation, Santa Clara Datenkommunikationsverfahren und -Vorrichtung
CN100492296C (zh) * 2005-04-12 2009-05-27 松下电器产业株式会社 处理器
US8010969B2 (en) 2005-06-13 2011-08-30 Intel Corporation Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
DE102007025397B4 (de) * 2007-05-31 2010-07-15 Advanced Micro Devices, Inc., Sunnyvale System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
CN101344843B (zh) * 2007-07-10 2012-11-21 北京简约纳电子有限公司 一种指令级并行处理方法
US8769207B2 (en) * 2008-01-16 2014-07-01 Via Technologies, Inc. Caching method and apparatus for a vertex shader and geometry shader
JP5462259B2 (ja) * 2008-07-16 2014-04-02 シズベル インターナショナル エス.アー. トラックおよびトラックサブセットグループ化の方法および装置
JP2011090592A (ja) * 2009-10-26 2011-05-06 Sony Corp 情報処理装置とその命令デコーダ
US8667253B2 (en) * 2010-08-04 2014-03-04 International Business Machines Corporation Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register
US8561070B2 (en) * 2010-12-02 2013-10-15 International Business Machines Corporation Creating a thread of execution in a computer processor without operating system intervention
WO2012093488A1 (ja) * 2011-01-07 2012-07-12 富士通株式会社 スケジューリング方法、およびマルチコアプロセッサシステム
US9213551B2 (en) * 2011-03-11 2015-12-15 Oracle International Corporation Return address prediction in multithreaded processors
US9582287B2 (en) 2012-09-27 2017-02-28 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US9542193B2 (en) * 2012-12-28 2017-01-10 Intel Corporation Memory address collision detection of ordered parallel threads with bloom filters
US9361116B2 (en) 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US10140129B2 (en) 2012-12-28 2018-11-27 Intel Corporation Processing core having shared front end unit
US9053025B2 (en) 2012-12-28 2015-06-09 Intel Corporation Apparatus and method for fast failure handling of instructions
US20140189333A1 (en) 2012-12-28 2014-07-03 Oren Ben-Kiki Apparatus and method for task-switchable synchronous hardware accelerators
US9417873B2 (en) 2012-12-28 2016-08-16 Intel Corporation Apparatus and method for a hybrid latency-throughput processor
US10346195B2 (en) 2012-12-29 2019-07-09 Intel Corporation Apparatus and method for invocation of a multi threaded accelerator
EP3690641B1 (en) * 2013-05-24 2024-02-21 Coherent Logix Incorporated Processor having multiple parallel address generation units
US20150007196A1 (en) 2013-06-28 2015-01-01 Intel Corporation Processors having heterogeneous cores with different instructions and/or architecural features that are presented to software as homogeneous virtual cores

Also Published As

Publication number Publication date
EP3274816A1 (en) 2018-01-31
KR20230020590A (ko) 2023-02-10
CN107408036A (zh) 2017-11-28
EP3274816A4 (en) 2018-11-07
CN107408036B (zh) 2021-08-31
US20160283245A1 (en) 2016-09-29
US9747108B2 (en) 2017-08-29
EP3274816B1 (en) 2020-03-25
TWI628594B (zh) 2018-07-01
KR20170130383A (ko) 2017-11-28
KR102496402B1 (ko) 2023-02-06
TW201702866A (zh) 2017-01-16
JP2018509687A (ja) 2018-04-05
WO2016160125A1 (en) 2016-10-06

Similar Documents

Publication Publication Date Title
JP6708335B2 (ja) ユーザレベルの分岐及び結合を行うプロセッサ、方法、システム、及び命令
US11494194B2 (en) Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
JP6526609B2 (ja) プロセッサ
JP6143872B2 (ja) 装置、方法、およびシステム
US10031765B2 (en) Instruction and logic for programmable fabric hierarchy and cache
CN108885586B (zh) 用于以有保证的完成将数据取出到所指示的高速缓存层级的处理器、方法、系统和指令
US10127039B2 (en) Extension of CPU context-state management for micro-architecture state
KR20200002606A (ko) 데이터 표현들 사이의 코히어런트 가속 변환을 위한 장치 및 방법
US9323535B2 (en) Instruction order enforcement pairs of instructions, processors, methods, and systems
CN108701101B (zh) 处理器系统管理中断事件的基于仲裁器的串行化
US20160378471A1 (en) Instruction and logic for execution context groups for parallel processing

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171003

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190131

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191217

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200407

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200421

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200512

R150 Certificate of patent or registration of utility model

Ref document number: 6708335

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250