JP5612148B2 - ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制 - Google Patents

ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制 Download PDF

Info

Publication number
JP5612148B2
JP5612148B2 JP2013049602A JP2013049602A JP5612148B2 JP 5612148 B2 JP5612148 B2 JP 5612148B2 JP 2013049602 A JP2013049602 A JP 2013049602A JP 2013049602 A JP2013049602 A JP 2013049602A JP 5612148 B2 JP5612148 B2 JP 5612148B2
Authority
JP
Japan
Prior art keywords
vector
instruction
execution
elements
result
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
JP2013049602A
Other languages
English (en)
Other versions
JP2013175201A (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.)
Apple Inc
Original Assignee
Apple Inc
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 Apple Inc filed Critical Apple Inc
Publication of JP2013175201A publication Critical patent/JP2013175201A/ja
Application granted granted Critical
Publication of JP5612148B2 publication Critical patent/JP5612148B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • 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
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch 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 or look ahead
    • 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 or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Quality & Reliability (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、プロセッサに関するもので、より特定すれば、述語付き分岐命令の分岐予測ミス中のベクトル命令の実行に関する。
分岐予測は、最も近代的なプロセッサでは珍しくなくなった。後方分岐は、高度に予測可能であるが、前方分岐は、処理されているデータの性質に基づいて、充分予測できたりできなかったりする。
ベクトル命令を処理する幾つかのプロセッサは、ベクトルの要素が変更されるか又はそれらの非変更値を維持するかコントロールするために計算を遂行するときマスキング述語化を使用する。より詳細には、述語ベクトルは、ベクトルの個々の要素が変更されるかどうかコントロールする。あるケースでは、述語ベクトルが全てゼロを含むときに述語付き命令の周りで分岐するために分岐命令が使用される。これは、一般的に、分岐が正確に予測されるときの状況では電力及び性能に対する改善となる。
分岐が予測ミスとなるときの従来のベクトルプロセッサでは、プロセッサパイプラインが典型的にフラッシュされ、分岐ターゲットアドレスのような異なるアドレスから新たな命令がフェッチされる。しかしながら、この形式の従来の分岐ミス振舞いは、不必要であり、無駄である。
分岐予測ミス振舞いを抑制するための方法の種々の実施形態が開示される。一般的に述べると、述語ベクトルがナルであるとの決定に応答してコントロールのフローを命令の周りで分岐させる条件付き分岐命令が非実行であると予測する方法が意図される。しかしながら、予測が誤りであるという検出に応答して、予測ミス振舞いが禁止される。
1つの実施形態において、この方法は、プログラム命令実行のコントロールのフローが条件付きフローコントロール命令の実行に応答して変更されないと予測する予測を発生することを含む。条件付きフローコントロール命令は、述語ベクトルの1つ以上の要素の各々がナルであるとの決定に応答してコントロールのフローを変更する。更に、この方法は、予測が誤りであることを検出し、そして予測が誤りであるとの検出に応答して予測ミス振舞いを禁止することを含む。
1つの特定の実施形態では、予測ミス振舞いを禁止することは、条件付きフローコントロール命令の予測ミス経路内に入るプログラム命令を実行することを含む。
別の特定の実施形態では、予測ミス振舞いを禁止することは、フローコントロール命令と命令ターゲットとの間でプログラム順にプログラム命令をプロセッサの実行パイプラインからフラッシュするのを禁止することを含む。
コンピュータシステムの一実施形態のブロック図である。 図1に示すプロセッサの一実施形態を更に詳細に示すブロック図である。 プログラムコードループの規範的パラレル化を示す図である。 例1に示すループのスカラー実行中の変数状態のシーケンスを示す図である。 例1のループのマクロスカラーベクトル化プログラムコードのための実行の進行を示す図である。 プログラムソースコードのベクトル化の一実施形態を示す図である。 プログラムソースコードのベクトル化の一実施形態を示す図である。 非推論的ベクトル化プログラムコードの一実施形態を示す図である。 推論的ベクトル化プログラムコードの別の実施形態を示す図である。 述語付き分岐命令の分岐予測ミス中の図2のプロセッサの一実施形態の動作を示すフローチャートである。
添付図面には特定の実施形態が例示され、これについて以下に詳細に述べる。しかしながら、添付図面及び以下の詳細な説明は、特定の特徴について1つの実施形態しか説明されなくても、請求項を、ここに開示する特定の実施形態に限定するものでないことを理解されたい。逆に、本開示の利益を得る当業者に明らかな全ての変更、等効物及び代替え物を網羅することを意図している。本開示に与えられる特徴の例は、単なる例示に過ぎず、特に指示のない限り、それに限定されるものではない。
本出願全体にわたって使用される「〜してもよい(may)」という語は、許すという意味(即ち、〜の潜在性があるという意味)で使用されるもので、強制の意味(即ち、〜しなければならないという意味)ではない。同様に、「含む(include)」、「含んでいる(including)」及び「含む(includes)」という語は、含むことを意味するが、それに限定されない。
種々のユニット、回路又は他のコンポーネントは、1つ又は複数のタスクを遂行するように「構成される」ものとして述べる。この点について、「構成される」とは、動作中に1つ又は複数のタスクを遂行する「回路を有する」ことを一般的に意味する構造を広く表現するものである。従って、ユニット/回路/コンポーネントは、そのユニット/回路/コンポーネントが現在オンでなくても、タスクを遂行するように構成することができる。一般的に、「構成される」に対応する構造を形成する回路は、ハードウェア回路を含む。同様に、種々のユニット/回路/コンポーネントは、説明の便宜上、1つ又は複数のタスクを遂行するものとして説明されてもよい。そのような説明は、「構成される」という句を含むものと解釈されねばならない。1つ以上のタスクを遂行するように構成されたユニット/回路/コンポーネントを表現する場合に、そのユニット/回路/コンポーネントに関して35U.S.C.§112、第6節の解釈を引用しないことが明確に意図される。
本開示の範囲は、ここに取り上げる問題のいずれか又は全部を軽減するかどうかに関わらず、ここに(明示的又は暗示的に)開示する特徴、又は特徴の組み合わせ、或いはそれを一般化したものを包含する。従って、新規な請求項は、本出願(又はその優先権を主張する出願)の起訴中に、そのような特徴の組み合わせへと組織化されてもよい。特に、請求の範囲を参照すれば、従属請求項からの特徴を独立請求項の特徴と組み合わせてもよいし、又、各独立請求項からの特徴を、単に請求の範囲に列挙された特定の組み合わせではなく適当な仕方で組み合わせてもよい。
コンピュータシステムの概略
図1を参照すれば、コンピュータシステムの一実施形態のブロック図が示されている。コンピュータシステム100は、プロセッサ102と、レベル2(L2)キャッシュ106と、メモリ108と、大量記憶装置110とを備えている。図示されたように、プロセッサ102は、レベル1(L1)キャッシュ104を備えている。コンピュータシステム100では、特定のコンポーネントを示して説明するが、別の実施形態では、異なるコンポーネント及び異なる数のコンポーネントがコンピュータシステム100に存在してもよいことに注意されたい。例えば、コンピュータシステム100は、メモリハイアラーキー(例えば、メモリ108及び/又は大量記憶装置110)を含まなくてもよい。それとは別に、L2キャッシュ106は、プロセッサ102の外部に示されているが、他の実施形態では、L2キャッシュ106がプロセッサ102の内部にあってもよいことが意図される。更に、そのような実施形態では、レベル3(L3)キャッシュ(図示せず)が使用されてもよいことに注意されたい。加えて、コンピュータシステム100は、グラフィックプロセッサ、ビデオカード、ビデオ捕獲装置、ユーザインターフェイス装置、ネットワークカード、光学ドライブ、及び/又は他の周辺装置を備え、これらは、バス、ネットワーク、又は別の適当な通信チャンネル(明瞭化のために全て図示せず)を使用してプロセッサ102に結合される。
種々の実施形態において、プロセッサ102は、計算動作を遂行する汎用プロセッサを表わす。例えば、プロセッサ102は、マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はフィールドプログラマブルゲートアレイ(FPGA)のような中央処理ユニット(CPU)である。しかしながら、以下に詳細に述べるように、プロセッサ102は、ベクトル処理のための1つ以上のメカニズム(例えば、ベクトル実行ユニット)を含む。図2の説明に関連してプロセッサ102の規範的なベクトル実行ユニットを以下に詳細に述べる。
大量記憶装置110、メモリ108、L2キャッシュ106及びL1キャッシュ104は、プロセッサ102のデータ及び命令を記憶するメモリハイアラーキーを総体的に形成する記憶装置である。より詳細には、大量記憶装置110は、ディスクドライブ又は大型フラッシュメモリユニットのような大容量の不揮発性メモリで、アクセス時間が長いが、L1キャッシュ104、L2キャッシュ106、及びメモリ108は、小型で、アクセス時間が短い。これら高速半導体メモリは、頻繁に使用されるデータのコピーを記憶する。メモリ108は、メモリ装置のダイナミックランダムアクセスメモリ(DRAM)ファミリーのメモリ装置を表わす。メモリ108のサイズは、典型的に、L1キャッシュ104及びL2キャッシュ106より大きいが、L1キャッシュ104及びL2キャッシュ106は、典型的に、装置のスタティックランダムアクセスメモリ(SRAM)ファミリーの小型装置を使用して具現化される。ある実施形態では、L2キャッシュ106、メモリ108、及び大量記憶装置110は、コンピュータシステム100の1つ以上のプロセッサ間で共有される。
ある実施形態では、メモリハイアラーキーの装置(即ち、L1キャッシュ104、等)は、サイクルごとに複数のキャッシュラインにアクセス(即ち、読み取り及び/又は書き込み)することができる。これらの実施形態は、非隣接メモリアドレスへのポインタ又はアレイインデックスのベクトルに基づいて生じるメモリアクセスをより有効に処理できるようにする。
以下に述べるデータ構造及びプログラム命令(即ち、コード)は、コンピュータシステム(例えば、コンピュータシステム100)により使用するためのコード及び/又はデータを記憶できる任意の装置又は記憶媒体である非一時的コンピュータ読み取り可能な記憶装置に記憶されることに注意されたい。一般的に述べると、非一時的コンピュータ読み取り可能な記憶装置は、揮発性メモリ、不揮発性メモリ、磁気及び光学記憶装置、例えば、ディスクドライブ、磁気テープ、コンパクトディスク(CD)、デジタル多様性ディスク又はデジタルビデオディスク(DVD)、或いは現在知られている又は今後開発されるコンピュータ読み取り可能な媒体を記憶できる他の媒体を含むが、これらに限定されない。従って、大量記憶装置110、メモリ108、L2キャッシュ106、及びL1キャッシュ104は、全て、非一時的コンピュータ読み取り可能な記憶装置の例である。
プロセッサ
図2は、図1のプロセッサの一実施形態の付加的な細部を示すブロック図である。図2に示す実施形態において、プロセッサ102は、多数のパイプライン段を含むが、簡潔化のために、図2には全部が示されていない。従って、図示されたように、プロセッサ102は、L1キャッシュ104、命令フェッチユニット201、分岐予測ユニット210、予測ミスユニット212、整数実行ユニット202、フローティングポイント実行ユニット206、及びベクトル実行ユニット204を備えている。整数実行ユニット202、フローティングポイント実行ユニット206及びベクトル実行ユニット204は、グループとして交換可能に「実行ユニット」も称されることに注意されたい。
種々の実施形態において、実行ユニットは、論理演算、数学演算又はビット演算のような計算動作を、例えば、関連形式のオペランドに対して遂行する。より詳細には、整数実行ユニット202は、整数オペランドを伴う計算動作を遂行し、フローティングポイント実行ユニット206は、フローティングポイントオペランドを伴う計算動作を遂行し、そしてベクトル実行ユニット204は、ベクトルオペランドを伴う計算動作を遂行する。整数実行ユニット及びフローティングポイント実行ユニットは、一般的に、この分野で知られており、簡潔化のためにこれ以上説明しない。上述したように、図2に示すプロセッサ102の実施形態は、特定セットのコンポーネントを含むが、別の実施形態では、プロセッサ102は、異なる個数又は形式の実行ユニット、機能的ユニット、及びパイプライン段、例えば、実行ユニットに結合される命令デコードユニット、スケジューラ又は予約ステーション、再順序付けバッファ、メモリマネージメントユニット、I/Oインターフェイス、等を含むことが意図される。
ベクトル実行ユニット204は、複数のデータ要素に対して同じ演算をパラレルに遂行するという点で、古典的な意味の単一命令多データ(SIMD)実行ユニットを表わす。しかしながら、ある実施形態では、ここに述べるベクトル命令は、SIMD命令の他の具現化とは異なる。例えば、一実施形態において、ベクトル命令により演算されるベクトルの要素は、そのサイズがベクトル内の要素の数と共に変化しない。対照的に、あるSIMD具現化では、データ要素のサイズが、演算されるデータ要素の数と共に変化する(例えば、SIMDアーキテクチャーは、8つの8ビット要素に対する演算をサポートするが、4つの16ビット要素、2つの32ビット要素、等だけである)。1つの実施形態において、ベクトル実行ユニット204は、オペランドのベクトルに含まれるデータ要素の幾つか又は全部に対して演算する。より詳細には、ベクトル実行ユニット204は、ベクトルプログラム命令のベクトルオペランドの異なる要素に対して同時に演算するように構成される。
1つの実施形態において、ベクトル実行ユニット204は、ベクトル実行ユニット204に対してオペランドベクトル及び結果ベクトルを保持できるベクトルレジスタを含むベクトルレジスタファイル(図示せず)を含む。ある実施形態では、ベクトルレジスタファイルに32個のベクトルレジスタがあり、各ベクトルレジスタは、128ビットを含む。しかしながら、別の実施形態では、異なる数のベクトルレジスタ、及び/又はレジスタ当たり異なる数のビットがあってもよい。
ベクトル実行ユニット204は、ベクトルレジスタからオペランドを検索しそしてベクトル命令を実行して、ベクトル実行ユニット204がオペランドベクトルのデータ要素の幾つか又は全部に対して演算をパラレルに遂行するように構成される。例えば、ベクトル実行ユニット204は、ベクトルの要素に対して論理演算、数学演算又はビット演算を遂行することができる。ベクトル実行ユニット204は、命令サイクル当たり1つのベクトル演算を遂行する(が、上述したように、「サイクル」は、ベクトル実行ユニット204の計算動作をトリガー、同期及び/又はコントロールするのに使用される2つ以上のクロックサイクルを含んでもよい)。
1つの実施形態において、ベクトル実行ユニット204は、正の整数をNとすれば、N個のデータ要素(例えば、バイト、ワード、ダブルワード、等)を保持するベクトルをサポートする。これらの実施形態では、ベクトル実行ユニット204は、オペランドベクトルのN個以下のデータ要素に対して演算をパラレルに遂行する。例えば、ベクトルが256ビットの長さである実施形態では、演算されるデータ要素が4バイト要素であり、演算は、データ要素に値を加算することであり、これら実施形態では、ベクトルの多数の要素に値が加算される。Nは、プロセッサ102の異なる具現化に対して異なるものであることに注意されたい。
種々の実施形態において、ベクトル実行ユニット204は、それが演算するオペランドベクトルのデータ要素を動的に制限できるようにする少なくとも1つのコントロール信号を含む。より詳細には、コントロール信号の状態に基づいて、ベクトル実行ユニット204は、ベクトルのデータ要素のいずれか又は全部について選択的に演算する。例えば、ベクトルが512ビットの長さでありそしてデータ要素が4バイト要素に対して演算される実施形態では、コントロール信号は、オペランドベクトルの16個のデータ要素の幾つか又は全部に対して演算が遂行されるのを防止するためにアサートされる。演算が遂行されるオペランドベクトルのデータ要素を「動的に」制限することは、ランタイムの各サイクルに対してコントロール信号を個別にアサートすることを含むことに注意されたい。
ある実施形態では、以下に詳細に述べるように、述語のベクトル又は1つ以上のスカラー述語に含まれた値に基づいて、ベクトル実行ユニット204は、選択されたベクトルデータ要素のみにベクトル演算を適用する。ある実施形態では、結果ベクトルの残りのデータ要素が不変のままであり(「述語化(predication)」とも称される)又はゼロに強制される(「ゼロ化(zeroing)」又は「ゼロ化述語化(zeroing predication)」とも称される)。ある実施形態では、ベクトル実行ユニット204において述語化又はゼロ化のために未使用であるデータ要素処理サブシステム(「レーン(lane)」)が電力及び/又はクロックゲートされ、それにより、ベクトル実行ユニット204における動的な電力消費を減少することができる。
種々の実施形態において、アーキテクチャーは、ベクトル長さ不可知論であり、ランタイムにパラレル性を適応させることができる。より詳細には、命令又は演算がベクトル長さ不可知論であるとき、演算(即ち、命令、等)は、サポートハードウェアにより課せられる限度まで、任意の長さのベクトルを使用して実行される。例えば、ベクトル実行ハードウェアが、8つの個別の4バイト要素を含む(従って、8要素のベクトル長さを有する)ベクトルをサポートする実施形態では、ベクトル長さ不可知論演算が、ベクトルの任意の数の8要素に対して演算する。異なるベクトル長さ(例えば、4要素)をサポートする異なるハードウェア具現化では、ベクトル長さ不可知論演算が、基礎的なハードウェアにより利用できるようにされた異なる数の要素に対して演算する。従って、コンパイラー又はプログラマーは、基礎的なハードウェア(例えば、ベクトル実行ユニット204)によりサポートされるベクトル長さの明確な知識を有する必要がない。そのような実施形態では、特定のベクトル長さに依存する(又はそれを使用する)必要のないプログラムコードを、コンパイラーが作成するか、又はプログラマーが書く。ある実施形態では、プログラムコードにおいて特定のベクトルサイズを指定することが禁止されてもよい。従って、これら実施形態におけるコンパイルされたコード(即ち、バイナリコード)は、より長いベクトルをサポートするプロセッサから性能利得を潜在的に実現しながら、異なるベクトル長さを有する他の実行ユニットにおいて実行される。そのような実施形態では、プロセッサのような所与のハードウェアユニットに対するベクトル長さが、ランタイム中にシステムレジスタから読み取られる。その結果、処理技術が長いベクトルを許すようになるにつれて、レガシーバイナリコードの実行は、ソフトウェア開発者による努力なしに単純にスピードアップする。
一般的に、ベクトル長さは、2の累乗(例えば、2、4、8、等)として具現化されてもよい。しかしながら、ある実施形態では、ベクトル長さは、2の累乗である必要がない。より特定すれば、3、7、又は別の数のデータ要素のベクトルを、2の累乗数のデータ要素をもつベクトルと同様に使用することができる。
種々の実施形態において、ベクトルの各データ要素は、1組のメモリアクセスをパラレルに遂行するためにベクトル実行ユニット204により使用されるアドレスを含む。そのような実施形態では、ベクトルの1つ以上の要素が無効のメモリアドレスを含む場合に、無効のメモリ読み取り動作が生じる。従って、プログラムの終了を招く無効のメモリ読み取り動作は、むしろ、有効アドレスをもつ要素が読み取られ、そして無効アドレスをもつ要素にフラグが立てられるようにして、推論的で且つあと知恵の不法読み取り動作にも関わらず、プログラムの実行を続けられるようにする。
ある実施形態では、プロセッサ102(ひいては、ベクトル実行ユニット204)は、ポインタのベクトルについて動作しそしてそれを使用することができる。そのような実施形態において、ベクトル当たりのデータ要素の数は、データタイプのサイズに関わらず、ベクトル当たりのポインタの数と同じである。メモリに対して動作する命令は、メモリアクセスのサイズを指示するバリアントを有するが、プロセッサレジスタの要素は、ポインタサイズと同じでなければならない。これらの実施形態では、32ビット及び64ビットの両アドレスモードをサポートするプロセッサは、32ビットモードにおいてベクトル当たり2倍の要素を許すように選択でき、より高いスループットを得ることができる。これは、同じ巾のデータ経路を仮定すれば、32ビットアドレッシングに対して明確なスループット効果を暗示する。具現化特有の技術を使用して要件を緩和することができる。例えば、32ビットモードにおいてレジスタのペアリング又は他の特殊なメカニズムを通して倍精度のフローティングポイント数値をサポートすることができる。
1つの実施形態において、分岐予測ユニット210は、条件付き分岐命令に対してフェッチユニット201のための分岐ターゲットプログラムカウンタアドレス(PC)を発生するように構成される。より詳細には、条件付き分岐命令に対して、分岐予測ユニット210は、分岐が行われるか否か予測し、そしてコントロールロジック(図示せず)は、その予測に基づいてフェッチユニット201のPCを発生する。次いで、分岐の予測結果に基づいて推論的に、命令がフェッチされ、発行されそして実行される。種々の実施形態において、分岐予測ユニット210は、種々の予測メカニズムのいずれかを使用して、予測を発生する。例えば、分岐予測ユニット210は、個々の分岐に対して予測状態(例えば、状態マシン、テーブル、カウンタ又は他のデータ構造体)を維持するローカルプレディクタ、集合体において考えられる複数の分岐にわたって予測を行うグローバルプレディクタ、ローカル及びグローバルプレディクタの要素を合成するハイブリッドプレディクタ、或いは他の適当な解決策を使用する。ある実施形態では、分岐予測ユニット210は、実行中に変化する分岐振舞いに動的に適応するプレディクタを使用する(例えば、1つの技術により良好に予測された分岐が異なる技術により良好に予測されるようになったときを検出して適応するために)。
1つの実施形態において、予測ミスユニット212は、分岐予測を誤った(例えば、実行時に分岐の実際の振舞いが分岐の予測された振舞いとは相違し、分岐が予測ミスであったことを指示する)ときを検出するように構成される。更に、予測ミスユニット212は、予測ミスの指示を、実行ユニット202、206及び204、並びに分岐予測ユニット210に与えるように構成される。予測ミスユニット212は、個別のユニットとして示されているが、他の実施形態では、予測ミスユニット212は、分岐予測ユニット210の一部分でもよいし、又はフェッチユニット201の一部分でもよいし、或いは種々の実行ユニット(例えば、202、204及び206)のいずれか又は全部の一部分でもよいことに注意されたい。
上述したように、従来のプロセッサが分岐命令を予測ミスしたとき、パイプラインは、予測ミスした経路において命令がフラッシュされる。というのは、それらの推論的に発行される命令は、誤った推論の観点から、プロセッサの状態を変更することが許されてはならないからである。次いで、フェッチユニットは、正しい非推論的経路に対して命令をフェッチすることができる。しかしながら、このフラッシュ・充填動作にはペナルティがあり、有用な作業を再開できるまでに数百の実行サイクルが要求される。しかしながら、図7の説明に関連して以下に詳細に述べるように、例えば、予測ミスした経路の命令が実行時にも何の作用も及ぼさないように述語化がさせるので、予測ミスしたときに、正しいプロセッサ動作を保証するために予測ミスした経路の命令をフラッシュすることを要求しない幾つかの分岐命令がある。そのような分岐命令は、予測ミスした経路の命令を実行するために被るペナルティが、予測ミスした経路の命令をフラッシュして異なる分岐ターゲットからフェッチするという従来の予測ミス振舞いを許すために被るペナルティより少ない。より詳細には、以下に述べるマクロスカラーアーキテクチャーには、予想ミスした経路の命令の実行を許すように従来の予測ミス振舞いの抑制を可能にする幾つかの命令がある。
マクロスカラーアーキテクチャーの概略
命令セットアーキテクチャー(マクロスカラーアーキテクチャーと称される)及びそのサポートハードウェアは、コンパイル時にパラレル性を完全に決定する必要なく且つ有用なスタティック分析情報を破棄することなく、コンパイラーがループのためのプログラムコードを発生するのを許す。マクロスカラーアーキテクチャーの種々の実施形態を以下に説明する。特に、以下に詳細に述べるように、ループに対してパラレル性を強制せず、むしろ、動的な条件が許す場合にはランタイムにパラレル性を利用できるようにする命令のセットが与えられる。従って、このアーキテクチャーは、コンパイラーにより発生されるコードが、使用するパラレル性の量を切り換えることで、ランタイムの条件に基づいて、ループの繰り返しに対して非パラレル(スカラー)実行とパラレル(ベクトル)実行との間を動的に切り換えできるようにする命令を含む。
従って、このアーキテクチャーは、ループの繰り返しに対して非決定量のベクトルパラレル性を可能にするが、ランタイムにパラレル性を使用することは要求しない命令を与える。より詳細には、このアーキテクチャーは、有効ベクトル長さがランタイム条件に基づいて変化するベクトル長さ不可知論命令のセットを含む。従って、ランタイム依存性がコードの非パラレル実行を要求する場合には、1つの要素の有効ベクトル長さで実行が行われる。同様に、ランタイム条件がパラレル実行を許す場合には、ランタイム依存性(及び基礎的なハードウェアのベクトル長さ)により許される程度までベクトルパラレル的に同じコードが実行される。例えば、ベクトルの8個の要素のうちの2つがパラレルに実行される場合には、プロセッサ102のようなプロセッサが2つの要素をパラレルに実行する。これらの実施形態では、プログラムコードをベクトル長さ不可知論フォーマットで表現することは、既存のシステムには存在しない広範囲のベクトル化機会を可能にする。
種々の実施形態において、コンパイル中に、コンパイラーは、先ず、プログラムコードの所与のループのループ構造を分析し、そしてスタティックな依存性分析を遂行する。次いで、コンパイラーは、スタティックな分析情報を保持しそしてプロセッサ102のようなプロセッサに、例えば、どのようにランタイム依存性を解明しそして最大可能パラレル量でプログラムコードを処理するかを命令するプログラムコードを発生する。より詳細には、コンパイラーは、ループ繰り返しの対応セットをパラレルに遂行するためのベクトル命令を与え、そしてループの繰り返しと繰り返しとの間のデータ依存性がエラーを招くのを防止するためにベクトル命令の実行を動的に制限するベクトルコントロール命令を与える。この解決策は、ランタイム依存性の情報が利用できる場合には、パラレル性の決定をランタイムまで延期し、それにより、ソフトウェア及びプロセッサがパラレル性を動的に変化する条件に適応させられるようにする。プログラムコードループパラレル化の一例が図3に示されている。
図3の左側を参照すれば、パラレル化されていないループの4つの繰り返し(例えば、繰り返し1−4)で実行パターンが示されており、各ループは、命令A−Gを含む。命令を垂直に積み重ねた状態でシリアルな動作が示されている。図3の右側は、ループがパラレル化された形態である。この例では、1つの繰り返し内の各命令は、それ以前の少なくとも1つの命令に依存し、所与の繰り返しの命令と命令との間にスタティックな依存性チェーンがある。従って、所与の繰り返し内の命令は、パラレル化することができない(即ち、所与の繰り返し内の命令A−Gは、その繰り返し内の他の命令に対して常にシリアルに実行される)。しかしながら、別の実施形態では、所与の繰り返し内の命令は、パラレル化可能である。
図3のループの繰り返しと繰り返しとの間の矢印で示されたように、所与の繰り返しにおける命令Eと、その後の繰り返しの命令Dとの間にランタイムデータ依存性の可能性がある。しかしながら、コンパイルの間に、コンパイラーは、それらの命令と命令との間にデータ依存性の可能性があることだけは決定できるが、どの繰り返しにおいて依存性が実際に現れるか見分けることはできない。というのは、この情報は、ランタイムでなければ得られないからである。この例では、実際にランタイムに現れるデータ依存性が1Eから2D及び3Eから4Dへの実線矢印で示されており、一方、ランタイムに現れないデータ依存性が2Eから3Dへの破線矢印を使用して示されている。従って、図示したように、ランタイムデータ依存性は、実際に、第1/第2繰り返し間、及び第3/第4繰り返し間に生じる。
第2と第3の繰り返し間にはデータ依存性が存在しないから、第2及び第3の繰り返しは、安全にパラレル処理される。更に、所与の繰り返しの命令A−C及びF−Gは、繰り返し内にのみ依存性を有し、それ故、所与の繰り返しの命令Aは、他の全ての繰り返しの命令Aとパラレルに実行することができ、又、命令Bは、他の全ての繰り返しの命令Bとパラレルに実行することができ、等々である。しかしながら、第2の繰り返しの命令Dは、第1の繰り返しの命令Eに依存するので、第1の繰り返しにおける命令D及びEは、第2の繰り返しの命令Dを実行できる前に実行されねばならない。
従って、右側のパラレル化されたループでは、そのようなループの繰り返しは、最大のパラレル性を達成すながら、スタティック及びランタイムの両データ依存性を受け容れるように実行される。より詳細には、4つ全部の繰り返しの命令A−C及びF−Gは、パラレルに実行される。しかし、第2の繰り返しにおける命令Dは、第1の繰り返しにおける命令Eに依存するので、第1の繰り返しにおける命令D及びEは、第2の繰り返しの命令Dを実行できる前に、実行されねばならない。しかしながら、第2と第3の繰り返し間にはデータ依存性がないから、それらの繰り返しの命令D及びEは、パラレルに実行することができる。
マクロスカラーアーキテクチャーの例
以下の例は、マクロスカラー動作を紹介し、そしてパラレル化ループ例において図3に示して上述したループのようなベクトル化ループへのその使用を示すものである。理解を容易にするために、これらの例は、C++フォーマットの擬似コードを使用して表わされる。
以下の規範的実施形態は、説明上のものであることに注意されたい。実際の命令及び動作は、アーキテクチャーの理解を助けることを単に意図している。しかしながら、別の実施形態では、命令又は動作は、例えば、よりプリミティブな動作のマイクロコードシーケンスを使用して、又はサブ動作の異なるシーケンスを使用して、異なる仕方で具現化することができる。マクロ動作及びそれに対応する使用モデルに関する情報が不明瞭にならないように、命令の更なる分解は回避されることに注意されたい。
表記
以下の例の説明において、特に指示のない限りベクトル量である変数に対して次のフォーマットが使用される。
p5=a<b;
ベクトルp5の要素は、a<bのテスト結果に基づいて0又は1にセットされる。ベクトルp5は、以下に詳細に述べるように「述語ベクトル(predicate vector)」であることに注意されたい。述語ベクトルを発生する幾つかの命令は、プロセッサ状態フラグを、結果の述語を反映するようにセットもする。例えば、プロセッサ状態フラグ又は条件コードは、FIRST(最初)、LAST(最後)、NONE(なし)、及び/又はALL(全部)フラグを含むことができる。
Figure 0005612148
述語ベクトルp5のアクティブな(即ち、非ゼロの)要素によって指定されるベクトル‘a’の要素のみがb+cの結果を受け取る。aの残りの要素は、不変である。この動作は、「述語化(predication)」と称され、述語ベクトルの前にティルデ
Figure 0005612148
符号を使用して表示される。
!p5;a=b+c;
述語ベクトルp5のアクティブな(即ち、非ゼロの)要素により指定されるベクトル‘a’の要素のみがb+cの結果を受け取る。aの残りの要素は、ゼロにセットされる。この動作は、「ゼロ化(zeroing)」と称され、述語ベクトルの前に感嘆符(“!”)を使用して表示される。
Figure 0005612148
以下の命令は、プロセッサ状態フラグをテストし、そしてそれに応じて分岐する。
x+=VECLEN;
VECLENは、ベクトル当たりの要素の数を通信するマシン値である。この値は、アッセンブラーにより決定されるのではなく、コードを実行するプロセッサによりランタイムに決定される。
//Comment
多数の共通のプログラミング言語と同様に、以下の例は、二重のスラッシュ記号を使用して、コメントを指示する。これらのコメントは、指示されたベクトルに含まれた値に関する情報、又はそれに対応する例において遂行される動作の説明を与えることができる。
これらの例では、他のC++フォーマットの演算子は、それらの従来の意味を保持するが、要素ごとにベクトルにわたって適用される。ファンクションコールが使用される場合には、それらが、行先レジスタに戻される値を与える単一の命令を意味する。理解を簡単にするために、全てのベクトルは、整数のベクトルであるが、別の実施形態では、他のデータフォーマットがサポートされる。
構造的ループ伝搬依存性
以下のコード例1において、従来のベクトルアーキテクチャーを使用する「ベクトル化不能」なプログラムコードループが示されている。(ベクトル化不能であるのに加えて、このループは、データ依存性の微粒子特性のために従来のマルチスレッドアーキテクチャーにおいてマルチスレッド可能でないことにも注意されたい。)明瞭化のために、このループは、ループをベクトル化不能にする基本的なループ伝搬依存性へ蒸留される。
この例では、変数r及びsは、従来のアーキテクチャーを使用するベクトル化を防止するループ伝搬依存性を有する。しかしながら、ループは、条件(A[x]<FACTOR)が常に真であるか又は常に偽であることが分かる限りベクトル化可能であることに注意されたい。これらの仮定は、条件が実行中に変化することが許されたとき(通常のケース)には変化する。この例では簡単化のために、A[]とB[]との間にエイリアシングが存在しないと仮定する。
例1:プログラムコードループ
Figure 0005612148
マクロスカラーアーキテクチャーを使用すると、例1のループは、ベクトルを、条件(A[x]<FACTOR)が変化しないセグメントへと区分化することによりベクトル化することができる。そのようなベクトルを区画化するためのプロセスの例、及び区画化を可能にする命令の例について、以下に述べる。この例について、ここに述べる区画は、条件条項内の命令に適用するだけでよい。A[x]の最初の読み取り、及び最終的な動作B[x]=r+sは、潜在的に最後のループ繰り返しを除いて、全ベクトルにわたり常にパラレルに実行することができる。
マクロスカラーアーキテクチャーに関連して、図2のプロセッサ102のようなベクトルプロセッサの動作を説明するために、ベクトル化コードの命令及び例を図示して説明する。以下の説明は、一般的に、多数の命令を説明し、次いで、それら命令を使用する1つ以上のベクトル化コードサンプルを提示するように、編成される。あるケースでは、特定形式のベクトル化問題が所与の例において調査される。
dest=VectorReadInt(Base、Offset)
VectorReadIntは、メモリ読み取り動作を遂行するための命令である。データサイズ(このケースでは整数)によりスケーリングされるオフセットOffsetのベクトルがスカラーベースアドレスBaseに追加されて、メモリアドレスのベクトルを形成し、これが、次いで、行先ベクトルに読み込まれる。命令が述語又はゼロ化された場合には、アクティブな要素に対応するアドレスのみが読み取られる。ここに述べる実施形態では、無効アドレスへの読み取りは、フォールトとなることが許されるが、そのようなフォールトは、第1のアクティブなアドレスが無効である場合にプログラムの終了を生じるだけである。
VectorWriteInt(Base、Offset、Value)
VectorWriteIntは、メモリ書き込み動作を遂行するための命令である。データサイズ(このケースでは整数)によりスケーリングされるオフセットOffsetのベクトルがスカラーベースアドレスBaseに追加されて、メモリアドレスのベクトルを形成する。値Valueのベクトルがこれらメモリアドレスに書き込まれる。この命令が述語又はゼロ化される場合には、データがアクティブなアドレスのみに書き込まれる。ここに述べる実施形態では、不法アドレスへの書き込みは、常に、フォールトを生じる。
dest=VectorIndex(Start、Increment)
VectorIndexは、Startによって指定されたスカラースタート値からの増分により単調に調整する値のベクトルを発生するための命令である。この命令は、インデックス調整が一定であるときにループインデックス変数を初期化するのに使用される。述語化又はゼロ化が適用されるときには、第1のアクティブな要素は、スタート値を受け取り、そしてその後のアクティブな要素にのみ増分が適用される。例えば、
Figure 0005612148
dest=PropagatePostT(dest、src、pred)
PropagatePostT命令は、predにより決定されたsrcにおけるアクティブな要素の値をdestの後続インアクティブ要素へ伝播する。アクティブな要素、及び第1のアクティブな要素に先行するインアクティブな要素は、destにおいて不変のままである。この命令の目的は、条件付きで計算された値を得て、その条件付きで計算された値を、等価スカラーコードにおいて生じる後続ループ繰り返しへ伝播することである。例えば、
Figure 0005612148
dest=PropagatePriorF(src、pred)
PropagatePriorF命令は、predにより決定されたsrcのインアクティブな要素の値をdestの後続アクティブ要素へ伝播する。インアクティブな要素は、srcからdestへコピーされる。述語の第1の要素がアクティブである場合には、srcの最後の要素がその位置へ伝播される。例えば、
Figure 0005612148
dest=ConditionalStop(pred、deps)
ConditionalStop命令は、述語のベクトルpredを評価し、そしてdepsにより指定されたデータ依存性を意味する隣接述語要素間の遷移を識別する。スカラー値depsは、4ビットのアレイと考えられ、各ビットは、左から右へ処理されるときにpredにおける真/偽要素間の考えられる遷移を指定する。これらのビットは、セットされた場合には、指示された依存性の存在を搬送し、そしてセットされない場合には、依存性の不存在を保証する。それらは、
kTF:述語が真であるところの繰り返しから、述語の値が偽であるところの後続繰り返しへのループ伝搬依存性を意味する。
kFF:述語が偽であるところの繰り返しから、述語の値が偽であるところの後続繰り返しへのループ伝搬依存性を意味する。
kFT:述語が偽であるところの繰り返しから、述語の値が真であるところの後続繰り返しへのループ伝搬依存性を意味する。
kTT:述語が真であるところの繰り返しから、述語の値が真であるところの後続繰り返しへのループ伝搬依存性を意味する。
依存するデータを発生する繰り返しに対応する要素位置は、データに依存する繰り返しに対応する要素位置において行先ベクトルに記憶される。データ依存性が存在しない場合には、その要素において行先ベクトルに0の値が記憶される。それにより得られる依存性インデックスベクトル又はDIVは、依存性を表わす要素−位置インデックスのベクトルを含む。以下に述べる理由で、ベクトルの第1の要素は、要素NO.1である(0ではなく)。
一例として、前記例1のループにおいて依存性について考える。このループでは、条件付き条項の真の繰り返しと偽の繰り返しとの間の遷移が、パラレル性に中断を要求するループ伝搬依存性を表わす。これは、次の命令を使用して取り扱うことができる。
Figure 0005612148
第4の繰り返しで、要求されたデータが発生され、そして第5の繰り返しは、それに依存するので、(DIVである)出力ベクトルp2の位置5に4が記憶される。第6の繰り返しからのデータに依存する第7の繰り返しについても同じことが言える。DIVの他の要素は、依存性の不存在を指示するために0にセットされる。(この例では、ベクトルの第1の要素は、要素NO.1であることに注意されたい。)
dest=GeneratePredicates(Pred、DIV)
GeneratePredicatesは、依存性インデックスベクトルDIVを取り上げ、そしてpredで指示された処理済の以前のグループが与えられると、安全にパラレルに処理できる要素の次のグループに対応する述語を発生する。predの要素がアクティブでない場合には、安全にパラレルに処理できる要素の第1グループに対して述語が発生される。ベクトルの最終要素が処理されたことをPredが指示する場合には、処理すべき要素がないことを指示するインアクティブな述語の結果ベクトルを命令が発生し、そしてZFフラグがセットされる。結果の最後の要素がアクティブであることを指示するためにCFフラグがセットされる。第1の例の値を使用して、GeneratePredicatesは、次のように動作する。
Figure 0005612148
全てゼロの初期化された述語p2から、GeneratePredicatesは、後続ベクトル計算を3つのサブベクトル(即ち、p’、p”及びp”’)へと区分化するp2の新たなインスタンスを発生する。これは、ハードウェアがベクトルをグループで処理できるようにして、ループのデータ依存性に違反するのを回避する。
図4Aは、例1においてループのスカラー実行中の変数状態のシーケンスを示す図である。より詳細には、条件付き表現の方向のランダム化された50/50分布を使用して、例1のループの変数状態の進行が示されている。図4Bは、例1のループのマクロスカラーベクトル化プログラムコードに対する実行の進行を示す図である。図4A及び図4Bにおいて、A[]から読み取られた値は、左へ傾斜したハッシュマークを使用して示され、一方、B[]へ書き込まれる値は、右へ傾斜したハッシュマークを使用して示され、そして(所与の繰り返しにおいてどちらが変化するかに基づいて)“r”又は“s”の値が陰影付けされた背景を使用して示されている。“s”が変化する間に“r”は決して変化せず、そしてその逆もあることが認められる。
全ての値がA[]からパラレルに読み取られるか又はB[]へパラレルに書き込まれることを防止するものはない。というのは、ループ伝搬依存性チェーンに関与する値のセットがないからである。しかしながら、r及びsの計算については、条件付き表現の値が同じままである(即ち、真又は偽のラン)間にのみ要素がパラレルに処理される。このループのプログラムコードの実行に対するこのパターンが図4Bに示されている。この例は、8要素の長さを有するベクトルを使用することに注意されたい。第1のベクトル命令を処理するときには、第1の繰り返しが単独で遂行され(即ち、ベクトル実行ユニット204は、第1のベクトル要素のみを処理し)、一方、繰り返し1−5は、ベクトル実行ユニット204によりパラレルに処理され、次いで、繰り返し6−7がベクトル実行ユニット204によりパラレルに処理される。
図5A及び5Bは、プログラムコードのベクトル化の一実施形態を示す図である。図5Aは、オリジナルソースコードを示し、図5Bは、マクロスカラーアーキテクチャーを使用して遂行される演算を表わすベクトル化コードを示す。図5Bのベクトル化されたコードにおいて、ループ1は、ソースコードからのループであり、一方、ループ2は、サブベクトル区画を処理するベクトル区画化ループである。
この例において、アレイA[]は、全長ベクトルにおいて読み取られて比較される(即ち、N要素のベクトルの場合に、一度にアレイA[]のN個の位置が読み取られる)。ベクトルi2は、ベクトルの区画化をコントロールするDIVである。区画化は、偽と真との間の遷移に対して述語p1を監視することにより決定され、これは、遵守すべきループ伝搬依存性を指示する。述語ベクトルp2は、任意の時間にどの要素を操作すべきか決定する。この特定のループにおいて、p1は、サブベクトル区画の全ての要素に同じ値を有し、それ故、どの変数を更新すべきか決定するために区画の第1の要素をチェックするだけでよい。
変数“s”が更新された後に、PropagatePostT命令は、アクティブなパターンの最終値をベクトルの後続要素へ伝播する。ループの頂部において、PropagatePriorF命令は、最終的なベクトル位置からの“s”の最後の値を、次のパスの準備においてベクトルの全ての要素を横切ってコピーする。変数“r”は、あるケースにおいてPropagatePriorF命令を使用する効率を示す異なる方法を使用して伝播されることに注意されたい。
ソフトウェア推論
先の例では、コントロールフロー判断がループ伝搬依存性とは独立しているので、ベクトル区画化ループを開始する前にベクトル区画を決定することができる。しかしながら、これは、常にそうではない。例2A及び例2Bに示された次の2つのループについて考える。
Figure 0005612148

Figure 0005612148
例2Aにおいて、コントロールフロー判断は、ループ伝搬依存性チェーンとは独立しており、一方、例2Bにおいて、コントロールフロー判断は、ループ伝搬依存性チェーンの一部分である。ある実施形態では、例2Bのループは、“j”の値が不変のままであるという推論を生じさせ、そしてその後に、この予測が誤りであると分かった場合に補償を行う。そのような実施形態では、“j”の値についての推論は、ループのベクトル化を著しく変化させない。
ある実施形態では、コンパイラーは、ループの繰り返しと繰り返しとの間にデータ依存性がないことを常に予測するように構成される。そのような実施形態では、ランタイムデータ依存性が存在するケースにおいて、パラレルに処理されるアクティブな要素のグループは、そのとき安全にパラレルに処理される要素のグループを表わすように減少される。これらの実施形態では、パラレル性が実際には失われていないので、実際に存在する以上のパラレル性を予測ミスするペナルティは、僅かである(即ち、必要に応じて、非パラレルな仕方で、一度に1つの要素で、繰り返しを処理することができる)。これらの実施形態では、パラレル性の実際の量は、その後の段階で単に確認される。
dest=VectorReadIntFF(Base、Offset、pf)
VectorReadIntFFは、VectorReadIntの第1のフォールト変形例である。この命令は、少なくとも第1のアクティブな要素が有効なアドレスである場合には、フォールトを発生しない。無効アドレスに対応する結果は、強制的にゼロにされ、そしてこのデータを使用するその後の命令への述語をマスクするのに使用できるフラグpfが返送される。アドレスの第1のアクティブな要素がアンマップされる場合には、この命令は、フォールトとなり、コンピュータシステム100のバーチャルメモリシステム(図示せず)がそれに対応するページをポピュレートできるようにし、それにより、プロセッサ102が前方に進行し続けることができるよう保証する。
dest=Remaining(Pred)
Remaining命令は、述語のベクトルPredを評価し、そしてベクトルにおける残りの要素を計算する。これは、最後のアクティブな述語に続くインアクティブな述語のセットに対応する。Predにアクティブな要素がない場合には、全てのアクティブな述語のベクトルが返送される。同様に、Predが全てのアクティブな述語のベクトルである場合には、インアクティブな述語のベクトルが返送される。例えば、
Figure 0005612148
図6A及び図6Bは、規範的なベクトル化されたプログラムコードの実施形態を示す図である。より詳細には、図6Aに示すコードサンプルは、例2A(上述した)のコードのベクトル化された形態である。図6Bに示すコードサンプルは、例2Bのコードのベクトル化された形態である。図6Bを参照すれば、A[]の読み取り及びその後の比較は、ベクトル区画化ループ内で移動されている。従って、これらの動作は、“j”の値が変化しないことを仮定(推論)する。“j”を使用した後にのみ、どこで“j”が値を変化するか決定することができる。“j”が更新された後に、残りのベクトル要素は、全ベクトルを通して繰り返すために必要に応じて再計算される。推論コードサンプルにRemaining命令を使用することで、ベクトル区画化ループでどの要素を処理状態に保つかプログラムで決定できるようにした後に、実際に安全に処理される(即ち、解明されないデータ依存性をもたない)要素のサブグループをプログラムで決定することができる。
種々の実施形態において、フォールト許容読み取りサポートが提供される。従って、そのような実施形態では、プロセッサ102は、後で計算に使用される値をロードする試みにおいてベクトル命令(例えば、VectorReadFF)の無効要素からのアドレスを使用してメモリからデータを推論的に読み取ることができる。しかしながら、無効読み取りが生じたことを発見すると、これらの値は、最終的に破棄され、それ故、正しいプログラムの振舞いにとって適切でない。そのような読み取りは、不存在の又は保護されたメモリを参照するので、これらの実施形態は、メモリから誤って読み取られた無効であるが無関係のデータが存在するなかで通常の実行を継続するように構成される。(バーチャルメモリをサポートする実施形態では、これは、それを行う必要を確信するまでページングされないという付加的な利益を有することに注意されたい。)
図6A及び図6Bに示すプログラムループにおいて、条件が真である繰り返しと、その後の繰り返しとの間には、後者の繰り返しに対する述語値に関わらず、ループ伝搬依存性が存在する。これは、ConditionalStop命令のパラメータに反映される。
図6A及び図6Bのサンプルプログラムコードは、非推論的ベクトル区画化と推論的ベクトル区画化との間の差にハイライトを当てる。より詳細には、例2Aでは、メモリが読み取られ、そして述語がConditionalStopの前に計算される。区画化ループは、ConditionalStop命令の後に始まる。しかしながら、例2Bでは、ConditionalStop命令が区画化ループ内で実行され、そして初期の動作を無効にさせる依存性を確認するように働く。両方のケースにおいて、GeneratePredicates命令は、区画化ループの残り部分に対してどの要素が使用されるかコントロールする述語を計算する。
ナル述語における分岐の予想ミス
上述したように、述語ベクトル、ひいては、述語化は、ベクトルのどの要素が所与のベクトル動作により変更されるか又は不変のままであるか決定するのに使用される。述語化は、ベクトル動作の要素ごとに個々にコントロールされるので、ある場合には、ベクトル動作の各要素が述語化され、ベクトル動作が実行されるとき結果ベクトルの要素が実際に変更されないことが考えられる。ベクトル要素が変更されない述語ベクトルは、ナル述語又は空述語とも称される。従って、述語ベクトルがナル又は空である場合には、その述語ベクトルにより述語化される命令の結果が記憶されない。ナル述語で実行される場合に、そのような命令は、何の効果ももたないが、依然、実行リソース(例えば、実行パイプラインのスロット)を消費する。それ故、それらは、実行から完全に安全に省略することができ、有用な仕事を行うための実行リソースを解放することができる。
ある実施形態において、分岐命令の変形例(「空/ナル述語での分岐」命令と称される)は、ナル述語ベクトルにより述語化された命令の周りで分岐するように使用される。そのような分岐命令又は他のフローコントロール命令は、例えば、述語ベクトルの全ての要素がインアクティブ又は「ナル」である場合にプログラムコードのコントロールフローを変更し、その結果、分岐命令の選ばれなかった経路又は「影」にあるプログラム命令は実行されない。従って、ナル述語命令における分岐は、それらの命令をスキップするのに使用され、それらは、ナル述語において実行される必要がない。例えば、次のコードセグメントは、イフ・エルス(if-else)ステートメントを含む。イフ条件が真である結果として遂行される動作は、イフ条件が偽である結果として遂行される動作と相互に排他的である。
Figure 0005612148
例3のコードセグメントのベクトル化を示す規範的コードセグメントが以下の例4に示されている。以下の規範的コードセグメントには、上述した分岐命令が示されている。
Figure 0005612148
例4のコードセグメントにおいて、p1=(条件)は、述語発生命令であり、そして分岐とそれらの各ターゲットとの間の命令は、各分岐の影の中の命令である。空で分岐p1命令は、p1ベクトルがナルであるときに命令の周りで分岐するように使用される。例3のコードセグメントにおいてイフ・エルスステートメントを通して具現化された相互排他性を具現化するため、p1ベクトルは、例4のコードセグメントにおいて補足される。従って、第2の分岐命令においてp1ベクトルの逆の論理的な意味で分岐することにより相互排他性が与えられる。
そのようなフローコントロール命令が行われないことが予測されそしてその予測が誤りであるときに、このシナリオに伴う1つの問題が発生する。上述したように、従来の予測ミス振舞いは、パイプラインをフラッシュしそして新たな命令をパイプラインにフェッチすることを要求する。このシナリオでは、予想ミスした経路における命令の結果が記憶されないので、実際上、これら命令を実行するのに不都合なことはない。命令を実行するペナルティは、典型的に、パイプラインをフラッシュして再充填するペナルティより僅かである。従って、以下に詳細に述べるように、そのようなフローコントロール命令の予測ミスを検出すると、予測ミス振舞いを抑制することができる。
図7は、述語付き分岐命令の分岐予測ミスの間の図2のプロセッサの一実施形態の動作を示すフローチャートである。図2ないし図7を総体的に参照し、図7のブロック701で開始すると、分岐予測ユニット210は、述語ベクトルの要素がナルであるという決定に応答してコントロールのフローを変更する条件付きフローコントロール命令の実行に応答してプログラム命令実行のコントロールのフローが変更されないという予測を発生する。より詳細には、1つの実施形態において、フローコントロール命令は、ナル述語命令において分岐し、そして予測は、分岐非実行(branch not taken)予測となる。
予測ミスユニット212は、分岐予測ミスを検出するように構成される。従って、分岐ミスユニット212は、予測が誤りであることを検出する(ブロック703)。例えば、一実施形態において、予測ミスユニット212は、分岐命令が実行と予測されるか、又は非実行と予測されるか追跡する。分岐命令が実行されると、ベクトル実行ユニットは、分岐条件の評価に基づいて分岐が実際に実行されたか否かの指示を予測ミスユニット212へ与える。予測ミスを検出するのに応答して、予測ミスユニット212は、プロセッサの予測ミス振舞いを禁止する(ブロック705)。一実施形態において、予測ミスユニット212は、予測ミス指示を発生して、その指示をフェッチユニット201、実行ユニット(202、204及び206)及び分岐予測ユニット210へ与えるように構成される。そのような実施形態では、予測ミス分岐からの命令を有する実行ユニットのパイプラインは、フラッシュされることが防止され、従って、分岐命令の予測ミス経路内に入る命令を、マシン状態を変更せずに実行できるようにする。
1つの実施形態において、予測ミスユニット212は、次の条件を満足するとき、即ちナル又は空き述語における分岐が誤って非実行と予測され、空き述語における分岐の条件コードフラグ(CCF)が述語発生命令の結果であり、そして分岐命令と分岐ターゲットとの間の全ての命令が、述語発生命令から生じる述語、又は述語発生命令から生じる述語によりゼロ化述語から導出される述語のいずれかに基づいて述語化されるとき、指示を与えるように構成される。前記条件が満足された場合には、誤って実行された命令がマシンの状態に影響を及ぼすことはない。というのは、それらは、空き述語で実行されており、それ故、良性だからである。
幾つかの実施形態を以上に詳細に説明したが、当業者であれば、前記開示が完全に理解されれば、多数の変更や修正が明らかとなろう。そのような変更や修正は、全て、特許請求の範囲内に網羅されるものとする。
100:コンピュータシステム
102:プロセッサ
104:L1キャッシュ
106:L2キャッシュ
108:メモリ
110:大量記憶装置
201:命令フェッチユニット
202:整数実行ユニット
204:ベクトル実行ユニット
206:フローティングポイント実行ユニット
210:分岐予測ユニット
212:予測ミスユニット

Claims (11)

  1. プログラム命令実行のコントロールのフローが条件付きフローコントロール命令の実行に応答して変更されないと予測する予測を発生する段階であって、前記条件付きフローコントロール命令は、述語ベクトルの1つ以上の要素の各々がナルであるとの決定に応答してコントロールのフローを変更するためのものである段階と、
    前記予測を発生する段階より予測された経路内にあるプログラム命令を実行する段階であって、前記予測された経路は、前記条件付きフローコントロール命令と前記条件付きフローコントロール命令の命令ターゲットの間を示すものであり、前記予測された経路内にある全てのプログラム命令は、前記述語ベクトルを述語とするものである、前記プログラム命令を実行する段階と、
    前記予測が誤りであることを検出する段階と、
    前記予測が誤りであるとの前記検出に応答して予測ミス振舞いを禁止する段階と、
    を備えた方法。
  2. 予測ミス振舞いを禁止する前記段階は、プログラム順における、前記条件付きフローコントロール命令と命令ターゲットの間にあるプログラム命令を、プロセッサの実行パイプラインからフラッシュするのを禁止することを含む、請求項1に記載の方法。
  3. 前記述語ベクトルの1つ以上の前記要素の各々は、当該要素に対応するベクトル要素が特定のベクトル命令の結果を受け取るか、又は、当該要素に対応するベクトル要素を、特定ベクトル命令の実行中に不変のままにするかコントロールするためのものであるか、あるいは、
    前記述語ベクトルの1つ以上の前記要素の各々は、当該要素に対応するベクトル要素が、特定のベクトル命令の結果を受け取るか、又は、当該要素に対応するベクトル要素を、特定のベクトル命令の実行中にゼロの値とするか、コントロールするためのものである、請求項1に記載の方法。
  4. 予測ミス振舞いを禁止する前記段階は、更に、前記条件付きフローコントロール命令により指定された条件コードフラグの状態が述語発生命令の結果であるとの決定を受け取ることに依存する、請求項3に記載の方法。
  5. 前記条件付きフローコントロール命令と前記条件付きフローコントロール命令の命令ターゲットとの間のプログラム命令であって、前記予測を発生する段階により予測された経路内にあるプログラム命令による結果のベクトルの各要素の値が、前記述語ベクトルの対応する要素の値に基づいて制御されるものであり、
    前記述語ベクトルの1つ以上の前記要素の各々は、当該要素に対応する結果のベクトルの要素が、ベクトル命令であるプログラム命令の結果を受け取るか、又は、当該要素に対応する結果のベクトルの要素を、ベクトル命令であるプログラム命令の実行中に不変のままにするか、コントロールするためのものである場合に、
    予測ミス振舞いを禁止する前記段階は実行されるものである、請求項3に記載の方法。
  6. 前記条件付きフローコントロール命令と前記条件付きフローコントロール命令の命令ターゲットとの間のプログラム命令であって、前記予測を発生する段階により予測された経路内にあるプログラム命令による結果のベクトルの各要素の値が、前記述語ベクトルの対応する要素の値に基づいて制御されるものであり、
    前記述語ベクトルの1つ以上の前記要素の各々は、当該要素に対応する結果のベクトルの要素が、ベクトル命令であるプログラム命令の結果を受け取るか、又は、当該要素に対応する結果のベクトルの要素を、ベクトル命令であるプログラム命令の実行中にゼロの値とするか、コントロールするためのものである場合に、
    予測ミス振舞いを禁止する前記段階は実行されるものである、請求項3に記載の方法。
  7. 実行ユニットと、予測ユニットと、予測ミス検出ユニットとを備えたプロセッサであって、
    前記実行ユニットは、ベクトルプログラム命令のベクトルオペランドの異なる要素において同時に動作するように構成された複数の実行パイプラインを含むものであり
    前記予測ユニットは、前記実行ユニットに結合され、そしてフローコントロール命令がプログラム命令実行のコントロールのフローを変更しないとの予測を発生するように構成されるものであり
    前記フローコントロール命令は、述語ベクトルの1つ以上の要素の各々がナルであるとの決定に応答してコントロールのフローを変更するためのものであり
    前記実行ユニットは、前記予測ユニットにより前記フローコントロール命令に関連して予測された経路内にあるプログラム命令を実行するものであり、
    前記予測された経路は、前記フローコントロール命令と前記フローコントロール命令の命令ターゲットの間を示すものであり、
    前記予測された経路内にある全てのプログラム命令は、前記述語ベクトルを述語とするものであり、
    前記予測ミス検出ユニットは、前記予測が誤りであることを検出するよう構成され、前記予測が誤りであるとの前記検出に応答して前記実行パイプラインの予測ミス振舞いを禁止するように構成されるものである、プロセッサ。
  8. 前記述語ベクトルの1つ以上の前記要素の各々は、当該要素に対応するベクトル要素が特定のベクトル命令の結果を受け取るか、又は、当該要素に対応するベクトル要素を、特定ベクトル命令の実行中に不変のままにするかコントロールするためのものであるか、あるいは、
    前記述語ベクトルの1つ以上の前記要素の各々は、当該要素に対応するベクトル要素が、特定のベクトル命令の結果を受け取るか、又は、当該要素に対応するベクトル要素を、特定のベクトル命令の実行中にゼロの値とするか、コントロールするためのものである、請求項7に記載のプロセッサ。
  9. 前記予測ミス検出ユニットは、更に、前記フローコントロール命令により指定された条件コードフラグの状態が述語発生命令の結果であるとの決定を受け取るのに応答して予測ミス振舞いを禁止するように構成される、請求項8に記載のプロセッサ。
  10. 前記フローコントロール命令と前記フローコントロール命令の命令ターゲットとの間のプログラム命令であって、前記予測ユニットにより予測された経路内にあるプログラム命令による結果のベクトルの各要素の値が、前記述語ベクトルの対応する要素の値に基づいて制御されるものであり、かつ、
    前記述語ベクトルの1つ以上の前記要素の各々は、当該要素に対応する結果のベクトルの要素が、ベクトル命令であるプログラム命令の結果を受け取るか、又は、当該要素に対応する結果のベクトルの要素を、ベクトル命令であるプログラム命令の実行中に不変のままにするか、コントロールするためのものであるか、あるいは、
    前記述語ベクトルの1つ以上の前記要素の各々は、当該要素に対応する結果のベクトルの要素が、ベクトル命令であるプログラム命令の結果を受け取るか、又は、当該要素に対応する結果のベクトルの要素を、ベクトル命令の実行中にゼロの値とするか、コントロールするためのものである場合に、
    前記予測ミス検出ユニットは、予測ミス振舞いを禁止するように構成される、請求項9に記載のプロセッサ。
  11. メモリとプロセッサを備えたシステムであって、
    前記メモリは、プログラム命令を記憶するように構成されるものであり
    前記プロセッサは、請求項7〜10のいずれか1項に記載のプロセッサであり、前記メモリに結合される、システム。
JP2013049602A 2012-02-24 2013-02-22 ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制 Active JP5612148B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/404,362 2012-02-24
US13/404,362 US9268569B2 (en) 2012-02-24 2012-02-24 Branch misprediction behavior suppression on zero predicate branch mispredict

Publications (2)

Publication Number Publication Date
JP2013175201A JP2013175201A (ja) 2013-09-05
JP5612148B2 true JP5612148B2 (ja) 2014-10-22

Family

ID=47720430

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013049602A Active JP5612148B2 (ja) 2012-02-24 2013-02-22 ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制

Country Status (7)

Country Link
US (1) US9268569B2 (ja)
EP (1) EP2631785A1 (ja)
JP (1) JP5612148B2 (ja)
KR (1) KR101417597B1 (ja)
CN (1) CN103353834B (ja)
TW (1) TW201349111A (ja)
WO (1) WO2013126228A2 (ja)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9389860B2 (en) 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
US9116686B2 (en) 2012-04-02 2015-08-25 Apple Inc. Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction
US20140189330A1 (en) * 2012-12-27 2014-07-03 Ayal Zaks Optional branches
US9367314B2 (en) * 2013-03-15 2016-06-14 Intel Corporation Converting conditional short forward branches to computationally equivalent predicated instructions
US9817663B2 (en) 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US9348589B2 (en) 2013-03-19 2016-05-24 Apple Inc. Enhanced predicate registers having predicates corresponding to element widths
GB2519108A (en) 2013-10-09 2015-04-15 Advanced Risc Mach Ltd A data processing apparatus and method for controlling performance of speculative vector operations
EP3123301A1 (en) 2014-03-27 2017-02-01 Intel Corporation Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements
US10223119B2 (en) 2014-03-28 2019-03-05 Intel Corporation Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements
US9519482B2 (en) * 2014-06-20 2016-12-13 Netronome Systems, Inc. Efficient conditional instruction having companion load predicate bits instruction
TWI566090B (zh) * 2014-10-17 2017-01-11 Insyde Software Corp Debugging firmware / software to produce tracking systems and methods, recording media and computer program products
GB2540942B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd Contingent load suppression
GB2548600B (en) * 2016-03-23 2018-05-09 Advanced Risc Mach Ltd Vector predication instruction
GB2558220B (en) 2016-12-22 2019-05-15 Advanced Risc Mach Ltd Vector generating instruction
US10503507B2 (en) * 2017-08-31 2019-12-10 Nvidia Corporation Inline data inspection for workload simplification
US11645078B2 (en) * 2019-07-19 2023-05-09 Intel Corporation Detecting a dynamic control flow re-convergence point for conditional branches in hardware
CN111538535B (zh) * 2020-04-28 2021-09-21 支付宝(杭州)信息技术有限公司 一种cpu指令处理方法、控制器和中央处理单元
US11113067B1 (en) * 2020-11-17 2021-09-07 Centaur Technology, Inc. Speculative branch pattern update

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5522053A (en) 1988-02-23 1996-05-28 Mitsubishi Denki Kabushiki Kaisha Branch target and next instruction address calculation in a pipeline processor
US5471593A (en) 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
JPH04137169A (ja) 1990-09-28 1992-05-12 Nec Corp 情報処理装置
JPH04349570A (ja) * 1991-05-28 1992-12-04 Nec Corp 情報処理装置
US5835967A (en) * 1993-10-18 1998-11-10 Cyrix Corporation Adjusting prefetch size based on source of prefetch address
US5682493A (en) * 1993-10-21 1997-10-28 Sun Microsystems, Inc. Scoreboard table for a counterflow pipeline processor with instruction packages and result packages
DE69420540T2 (de) * 1994-01-03 2000-02-10 Intel Corp., Santa Clara Verfahren und Vorrichtung zum Implementieren eines vierstufigen Verzweigungsauflosungssystem in einem Rechnerprozessor
US5687338A (en) * 1994-03-01 1997-11-11 Intel Corporation Method and apparatus for maintaining a macro instruction for refetching in a pipelined processor
US5809271A (en) * 1994-03-01 1998-09-15 Intel Corporation Method and apparatus for changing flow of control in a processor
US5692168A (en) * 1994-10-18 1997-11-25 Cyrix Corporation Prefetch buffer using flow control bit to identify changes of flow within the code stream
US5732253A (en) * 1994-10-18 1998-03-24 Cyrix Corporation Branch processing unit with target cache storing history for predicted taken branches and history cache storing history for predicted not-taken branches
US5740416A (en) * 1994-10-18 1998-04-14 Cyrix Corporation Branch processing unit with a far target cache accessed by indirection from the target cache
US5835951A (en) * 1994-10-18 1998-11-10 National Semiconductor Branch processing unit with target cache read prioritization protocol for handling multiple hits
EP0870228B1 (en) * 1995-10-06 2003-08-13 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5799180A (en) 1995-10-31 1998-08-25 Texas Instruments Incorporated Microprocessor circuits, systems, and methods passing intermediate instructions between a short forward conditional branch instruction and target instruction through pipeline, then suppressing results if branch taken
US6282663B1 (en) 1997-01-22 2001-08-28 Intel Corporation Method and apparatus for performing power management by suppressing the speculative execution of instructions within a pipelined microprocessor
US6182210B1 (en) * 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6157998A (en) * 1998-04-03 2000-12-05 Motorola Inc. Method for performing branch prediction and resolution of two or more branch instructions within two or more branch prediction buffers
JP2000293373A (ja) * 1999-04-12 2000-10-20 Hitachi Ltd 分岐予測装置
US6918032B1 (en) 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US7165169B2 (en) * 2001-05-04 2007-01-16 Ip-First, Llc Speculative branch target address cache with selective override by secondary predictor based on branch instruction type
US20030135719A1 (en) 2002-01-14 2003-07-17 International Business Machines Corporation Method and system using hardware assistance for tracing instruction disposition information
US7155598B2 (en) 2002-04-02 2006-12-26 Ip-First, Llc Apparatus and method for conditional instruction execution
JP3709933B2 (ja) 2002-06-18 2005-10-26 日本電気株式会社 分岐予測による分岐命令高速化方法、およびプロセッサ
US7159103B2 (en) 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
US20050097304A1 (en) * 2003-10-30 2005-05-05 International Business Machines Corporation Pipeline recirculation for data misprediction in a fast-load data cache
US7587580B2 (en) * 2005-02-03 2009-09-08 Qualcomm Corporated Power efficient instruction prefetch mechanism
US7254700B2 (en) * 2005-02-11 2007-08-07 International Business Machines Corporation Fencing off instruction buffer until re-circulation of rejected preceding and branch instructions to avoid mispredict flush
US20060190710A1 (en) 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US7711934B2 (en) * 2005-10-31 2010-05-04 Mips Technologies, Inc. Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US7734901B2 (en) 2005-10-31 2010-06-08 Mips Technologies, Inc. Processor core and method for managing program counter redirection in an out-of-order processor pipeline
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
US7617387B2 (en) * 2006-09-27 2009-11-10 Qualcomm Incorporated Methods and system for resolving simultaneous predicted branch instructions
US7925868B2 (en) * 2007-01-24 2011-04-12 Arm Limited Suppressing register renaming for conditional instructions predicted as not executed
US7624254B2 (en) * 2007-01-24 2009-11-24 Qualcomm Incorporated Segmented pipeline flushing for mispredicted branches
US8271832B2 (en) 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US8209525B2 (en) 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
US8099586B2 (en) * 2008-12-30 2012-01-17 Oracle America, Inc. Branch misprediction recovery mechanism for microprocessors
US8145890B2 (en) 2009-02-12 2012-03-27 Via Technologies, Inc. Pipelined microprocessor with fast conditional branch instructions based on static microcode-implemented instruction state
US20100262813A1 (en) 2009-04-14 2010-10-14 International Business Machines Corporation Detecting and Handling Short Forward Branch Conversion Candidates
JP5423156B2 (ja) * 2009-06-01 2014-02-19 富士通株式会社 情報処理装置及び分岐予測方法
US8458684B2 (en) * 2009-08-19 2013-06-04 International Business Machines Corporation Insertion of operation-and-indicate instructions for optimized SIMD code
US20110047357A1 (en) 2009-08-19 2011-02-24 Qualcomm Incorporated Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions
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
US8555040B2 (en) 2010-05-24 2013-10-08 Apple Inc. Indirect branch target predictor that prevents speculation if mispredict is expected
US9098295B2 (en) * 2011-01-21 2015-08-04 Apple Inc. Predicting a result for an actual instruction when processing vector instructions
US8862861B2 (en) * 2011-05-13 2014-10-14 Oracle International Corporation Suppressing branch prediction information update by branch instructions in incorrect speculative execution path

Also Published As

Publication number Publication date
WO2013126228A3 (en) 2015-06-18
US9268569B2 (en) 2016-02-23
JP2013175201A (ja) 2013-09-05
KR20130097676A (ko) 2013-09-03
KR101417597B1 (ko) 2014-07-09
US20130227251A1 (en) 2013-08-29
CN103353834B (zh) 2016-09-28
EP2631785A1 (en) 2013-08-28
WO2013126228A2 (en) 2013-08-29
TW201349111A (zh) 2013-12-01
CN103353834A (zh) 2013-10-16

Similar Documents

Publication Publication Date Title
JP5612148B2 (ja) ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制
KR101511837B1 (ko) 벡터 분할 루프들의 성능 향상
US9298456B2 (en) Mechanism for performing speculative predicated instructions
US8850162B2 (en) Macroscalar vector prefetch with streaming access detection
US9632775B2 (en) Completion time prediction for vector instructions
US9471324B2 (en) Concurrent execution of heterogeneous vector instructions
US9389860B2 (en) Prediction optimizations for Macroscalar vector partitioning loops
US20130007422A1 (en) Processing vectors using wrapping add and subtract instructions in the macroscalar architecture
US9367309B2 (en) Predicate attribute tracker
US9442734B2 (en) Completion time determination for vector instructions
US20130318332A1 (en) Branch misprediction behavior suppression using a branch optional instruction
US8683178B2 (en) Sharing a fault-status register when processing vector instructions
US9390058B2 (en) Dynamic attribute inference
US9335980B2 (en) Processing vectors using wrapping propagate instructions in the macroscalar architecture
US9335997B2 (en) Processing vectors using a wrapping rotate previous instruction in the macroscalar architecture
US20130024671A1 (en) Processing vectors using wrapping negation instructions in the macroscalar architecture
US20130024656A1 (en) Processing vectors using wrapping boolean instructions in the macroscalar architecture
US20130024655A1 (en) Processing vectors using wrapping increment and decrement instructions in the macroscalar architecture

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140414

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140421

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140722

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: 20140804

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140903

R150 Certificate of patent or registration of utility model

Ref document number: 5612148

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250