JP2014504770A - 同一のデータ条件に依存する、隣接する命令の実行の制御 - Google Patents

同一のデータ条件に依存する、隣接する命令の実行の制御 Download PDF

Info

Publication number
JP2014504770A
JP2014504770A JP2013552260A JP2013552260A JP2014504770A JP 2014504770 A JP2014504770 A JP 2014504770A JP 2013552260 A JP2013552260 A JP 2013552260A JP 2013552260 A JP2013552260 A JP 2013552260A JP 2014504770 A JP2014504770 A JP 2014504770A
Authority
JP
Japan
Prior art keywords
data
instruction
instructions
condition
processor
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.)
Granted
Application number
JP2013552260A
Other languages
English (en)
Other versions
JP6267513B2 (ja
Inventor
デイヴィッド リード、アラステア
Original Assignee
エイアールエム リミテッド
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 エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2014504770A publication Critical patent/JP2014504770A/ja
Application granted granted Critical
Publication of JP6267513B2 publication Critical patent/JP6267513B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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/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
    • 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/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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • 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/30069Instruction skipping instructions, e.g. SKIP
    • 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/30094Condition code generation, e.g. Carry, Zero flag
    • 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
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/30018Bit or string 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/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

Landscapes

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

Abstract

命令のストリームをデコードするように構成される命令デコーダと、デコードされた命令のストリームを処理するように構成されるデータプロセッサと、を有し、命令のストリーム内の複数の隣接する命令に応答して、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、処理装置の状態を変化させず、プロセッサは、データ条件が満たされるかどうかの判定を開始し、複数の隣接する命令の処理を開始し、データ条件が満たされていないという判定に応答して、未だ実行されていない複数の隣接する命令のうちの任意の中間の命令を実行せずに、複数の隣接する命令後に実行されるべき次の命令にスキップし、次の命令において実行を継続するように構成される、データ処理装置が、開示される。

Description

本技術分野は、データ処理装置に関し、特に、その実行がデータ条件に依存する、述語付き命令の処理に関する。
その実行が特定のデータ条件に依存する、条件付き命令は、公知である。例えば、場所xおよびy内に記憶された2つの値を比較し、xがy以上である場合にそれらを加算し、xがy未満である場合にそれらを相互から減算する、「CMP x y, ADDGE, SUBLT」等の命令がある。
複数のデータ要素に関して演算を行うベクトル命令が、より一般的となりつつある。それらは、多くの場合、マスクを使用して、どの要素が処理されるべきかを制御する。例えば、マスク10000001を使用する8要素ベクトル記憶命令の実行は、2つの要素(最初および最後)のみ記憶するであろう。マスクをこのように使用する、ベクトル化コードを書くときの一般的最適化は、一連の命令すべてが、同一のマスクによって制御されることを認識し、マスクがゼロである場合、これらの命令の全部を迂回する分岐を挿入する、すなわち、この場合、命令のいずれも、何もしないことになるようにすることである。したがって、コードは、以下のようになるであろう。

VCMP D0,D1,D2 ;D1およびD2を比較し、結果マスクをD0に入れる
VTEST D0 ;D0内の全ビットがゼロであるかどうかを試験する
BEQL1 ;マスクがゼロである場合、次の10個の演算にスキップする
D0→VOP1 ;マスクD0の制御下、ベクトル演算1を行う
D0→VOP2 ;マスクD0の制御下、ベクトル演算2を行う



D0→VOP10 ;マスクD0の制御下、ベクトル演算10を行う

L1
これは、マスクが頻繁にゼロである場合、試験および分岐は、2つの命令のみ費やし、分岐がなかった場合に行われたであろう10個の命令を行う必要性を回避することになり、非常に有効である。しかしながら、この先行技術のアプローチに関する問題は、分岐が行われるべきかどうかについて、2つのデータ値D1およびD2に依存するという点において、データ依存であることである。データ依存分岐は、非常に予測困難であって、したがって、分岐予測を使用して、演算を加速する場合、分岐は、多くの場合、誤予測され得、分岐が行われるべきではなかったときに行われるべきであると予測された場合には、機械の状態は、分岐が行われる前の状態にロールバックされる必要があるであろう。ベクトル処理を行うとき、ある時点において、機械の状態を保存することは、データワードの長さのため、面積の点において高価となる。
条件付き命令実行の性能を改善できることが望ましいであろう。
本発明の第1の態様は、命令のストリームをデコードするように構成される命令デコーダと、前記デコードされた命令のストリームを処理するように構成されるデータプロセッサとを備え、前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリーム内の複数の隣接する命令を識別するように構成され、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させず、前記複数の隣接する命令の識別に応答して、前記データプロセッサは、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を開始し、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続するように構成される、データ処理装置を提供する。
本発明は、すべて、同一の条件に依存する、条件付きで実行された命令を有し、条件が充足されないとき、その実行が、データ処理装置の状態に影響を及ぼさない場合、条件が判定される前に、これらの命令の処理を開始することができ、これらの命令が、実行されるべきではないことが見出される場合、本時点において、これらの命令の最後にスキップすることができることを認識する。この点において、データ処理装置の状態が変化しないことは、データレジスタ内に記憶されたデータ値が変化されないことを意味するために使用され、したがって、命令は、記憶される任意の値を上書きせず、したがって、実行されるべきではなかった場合、状態回復は、行われる必要はない。この点において、命令の実行は、プログラムカウンタおよび恐らくキャッシュの値等を変化させるであろうが、しかしながら、実行された命令の宛先レジスタ内の値に変化は存在せず、したがって、命令が、実行されるべきではなかったときに実行された場合、ロールバックは要求されず、その実行は、将来的命令の実行に影響を及ぼさないであろう。したがって、状態回復が要求されない場合、状態を不変のままとして見なすことができる。
したがって、付加的回復ステップを行う必要性の短所を伴うことなく、関連付けられた性能および電力利点とともに、いくつかの命令の実行のスキップの利点を達成することができる。本「スキップ」ステップを処理するために要求される、付加的回路と関連付けられたわずかなオーバーヘッドが存在することに留意されたい。
いくつかの実施形態では、データ処理装置は、データ記憶をさらに備え、前記データ処理装置は、前記複数の隣接する命令に応答して、標的場所として、前記複数の隣接する命令の実行後実行されるべき前記次の命令の場所を識別する識別子を前記データ記憶内に記憶し、スキップフラグを前記データ記憶内に設定し、前記スキップフラグは、前記プロセッサに、前記データ条件が満たされていないことに応答して、前記プロセッサが、プログラムカウンタを前記標的場所に対応するアドレスで更新すべきであることを示す。
命令のスキップは、いくつかの方法で実装されることができるが、いくつかの実施形態では、複数の隣接する命令の検出は、プロセッサをトリガし、スキップフラグを設定し、標的場所の指示を記憶し、スキップフラグは、プロセッサに、条件が満たされていないことが判定されるとき、標的場所にスキップすることができることを示す。すなわち、複数の隣接する命令の実行を停止することができ、標的場所における命令の実行を継続することができ、その時点で実行されていない隣接する命令のいずれも、実行されず、現段階において、それらが依存する条件が充足されないことを把握する。
いくつかの実施形態では、前記次の命令の場所を識別する前記識別子は、アドレスを備える。
命令の実行がスキップすべき標的場所は、いくつかの方法で示されることができ、いくつかの実施形態では、単に、アドレスを備える。これが該当する場合、プログラムカウンタは、単に、本情報に関して更新されることができる。他の実施形態では、情報は、隣接する命令の数を識別する識別子として記憶される場合があり、その場合、カウンタは、本値に関して更新されることができ、命令が実行されるたびにデクリメントされることができ、条件が充足されていないと判定される時点で、プログラムカウンタは、カウンタからの情報を使用して、更新されることができる。
いくつかの実施形態では、前記複数の隣接する命令は、ベクトルデータ要素を処理するためのベクトル命令を備え、各ベクトル命令は、前記ベクトルデータ要素内のどの要素が処理されるかを制御するマスクを備え、前記データ条件が満たされていないことは、ゼロを備える前記マスクが、処理されるべきデータ要素がないことを示す。
本技法は、ベクトル命令と併用されるとき、特に、有利である。ベクトルデータ要素を処理するとき、分岐命令を使用して、条件付き命令を中心として分岐させようとした場合、任意の誤予測を考慮するために、分岐におけるプロセッサの状態が、記憶される必要があるであろう。ベクトルデータ要素によって、本状態の記憶は、これらのデータ要素が大きくなるにつれて、非常にコストがかかる。したがって、本技法は、常に、ロールバックの必要性を回避するため、ベクトルデータ要素と併用されるとき、非常に有利である。
ベクトルデータ要素の処理は、多くの場合、ベクトルデータ要素内のどの要素が処理されるべきかを制御する、ベクトルマスクを使用して制御される。マスクがすべてゼロである場合、これは、いずれの要素も処理されるべきではないことを示す。したがって、本発明の実施形態は、データ条件として、ゼロではないマスクを有することができる。したがって、データ条件が満たされていない場合、マスクはすべてゼロであって、この時点において、命令の実行が、プロセッサの状態を変化させず、実際、要求されないことを把握し、未だ実行されていないこれらの命令のいずれもスキップすることができる。また、実行されたが、要求されなかった任意の中間命令が、プロセッサの状態を変化させておらず、したがって、状態のロールバックは、必要とされないことが把握される。
いくつかの実施形態では、前記複数の隣接する命令は、複数の命令を備え、それぞれ、同一の述語を備え、前記述語は、前記データ条件を判定し、前記述語が満たされていることに応答して、前記命令のみ完了し、任意の記憶されたデータ値を更新し、前記データ処理装置は、前記複数の隣接する命令の処理を開始し、前記データ条件が満たされていないという判定に応答して、記憶されたデータ値が更新されないように、前記複数の隣接する命令の実行を終了し、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続く次の命令にスキップし、前記次の命令における実行を継続するように構成される。
本技法はまた、述語に依存して実行する命令との併用に好適である。いったん述語条件が満たされると判定されると、そのような命令のみ完了し、プロセッサの状態を更新する。しかしながら、述語の結果が把握される前に、データの処理を開始する。したがって、これらの命令はまた、条件または述語の結果が把握される前に、実行されることができる。述語が満たされていない場合、記憶するためのその計算のいずれも書き込んでおらず、したがって、プロセッサの状態は、変化せず、その実行を開始しているが、いずれの状態もロールバックされる必要はない。したがって、複数のこれらの命令が、相互に隣接する場合、それらの処理を開始し、述語条件が満たされていないことの判定に応答して、複数の隣接する命令の実行を終了し、それらに続く次の命令にスキップすることが有利である。
いくつかの実施形態では、前記データ処理装置はさらに、データ記憶および検出回路を備え、前記検出回路は、前記データ条件が満たされていないということに依存する、条件付き分岐命令の検出に応答して、前記複数の隣接する命令を迂回して前方に分岐し、前記標的場所として、前記分岐命令の標的場所を示す値を前記データ記憶内に記憶し、前記スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記分岐を行うべきではないという前記スキップフラグに応答し、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の実行を開始し、前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所に依存した値に設定する。
本願の導入に記載されるように、これらの複数の隣接する命令に対処する従来の方法は、それらを中心として分岐させることである。したがって、データ処理装置がデータ条件に続いて、複数のこれらの隣接する命令に依存する条件付き分岐命令を検出するように構成される場合、分岐を行うのではなく、スキッププロシージャを引き起こすことが有利であり得る。したがって、分岐を行い、分岐が誤予測される場合に備えて、状態を記憶する必要がある代わりに、データ処理装置は、命令のパターンを認識し、条件が満たされるかどうかを判定するとき、条件が満たされていない場合、これらの隣接する命令の最後にスキップすることができる一方、条件が満たされる場合、単に、隣接する命令の全部の実行に進み、スキップフラグをクリアするように、スキップフラグを設定した隣接する命令の処理を開始する。
いくつかの実施形態では、前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される。
いくつかの実施形態では、条件付き分岐命令は、ベクトル値を条件とする。そのような場合、プロセッサは、ベクトル試験命令を実行することによって、データ条件が満たされるかどうかの判定を開始し、次いで、複数の隣接する命令の実行を開始するであろう。ベクトル試験命令からの結果が受信されると、条件が満たされていないことを示す場合、プロセッサは、隣接する命令の最後にスキップし、次の命令からの処理を継続するであろう。
いくつかの実施形態では、前記データ処理装置は、データ記憶および検出回路をさらに備え、前記検出回路は、前記データ条件に依存する条件付き分岐命令の検出に応答して、前記複数の隣接する命令の開始へと後方に分岐し、前記標的場所として、前記データ記憶内に1だけインクリメントされた前記分岐命令の場所を記憶し、スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記分岐を行うべきという前記スキップフラグに応答して、前記データ条件が満たされたかどうかを判定し、前記複数の隣接する命令の実行を開始し、前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所として前記データ記憶内に記憶された値に依存する値に設定する。
本発明の実施形態はまた、同一の条件を条件とする隣接する命令のストリングが、後方分岐によって分岐される場合の後方分岐を解決するために使用することができる。この場合、処理装置が、本命令パターンを認識し、分岐を行い、隣接する命令の実行を開始するであろう。しかしながら、いったん条件が満たされるかどうか判定されると、条件が満たされていない場合、隣接する命令の実行を停止し、行った分岐に続く、プログラムストリーム内の後続命令において、実行を継続するであろう。
再び、条件付き分岐命令が、ベクトルを条件とする場合、プロセッサは、ベクトルの値を試験する、ベクトル試験命令を実行することによって、データ条件が満たされるかどうかを判定する。
いくつかの実施形態では、データ処理装置はさらに、データ記憶および検出回路をさらに備え、前記検出回路は、前記データ条件が前記命令に従うことに依存する、前記複数の隣接する命令を示す命令の検出に応答し、前記命令は、前記データ条件と、完了されるべき各命令に対して満たされるべきかどうかの指示とを備え、前記標的場所として、前記複数の命令に続いて、前記次の命令の場所を識別する識別子を記憶し、スキップフラグ値を前記データ記憶内に設定し、前記プロセッサは、前記データ条件が満たされていないという判定に応答して、前記スキップフラグに応答して、前記標的場所にスキップする。
いくつかの実施形態では、スキップ機能を実装することが有利であろう場合、命令パターンの検出のために提供される検出回路が存在する。
いくつかの実施形態では、前記データ条件が満たされているという判定に応答して、前記プロセッサは、前記複数の隣接する命令の実行を継続し、前記スキップフラグをクリアするように構成される。
プロセッサが、データ条件が満たされることを判定する場合、複数の隣接する命令は、実行される必要があり、その場合、プロセッサは、それらの実行を継続し、スキップフラグをクリアする。
いくつかの実施形態では、前記データ条件が判定される前に、前記隣接する命令の全部を実行することに応じて、前記プロセッサは、前記スキップフラグをクリアするように構成される。
さらに、データ条件が、全隣接する命令が実行される前に、判定されない場合、プロセッサが、スキップすべきかどうかと、この場合、スキップフラグがクリアされるべきかどうかに関しても、もはや関連性はない。
本発明の第2の態様は、標的レジスタおよびデータ条件レジスタを指定する、少なくとも1つのスキップ命令をデコードするように構成される命令デコーダと、前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサと、を備え、前記データプロセッサは、前記デコードされた少なくとも1つのスキップ命令に応答して、前記データ条件の判定を開始し、前記命令ストリーム内の後続命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定する、データ処理装置を提供する。
データプロセッサは、命令パターンを検出するスキップ命令の機能性を生成することができるが、いくつかの実施形態では、スキップ命令は、プロセッサが、デコードし、実行し、次いで、スキップ機能性を行う、実際の命令である。
いくつかの実施形態では、前記命令デコーダは、前記少なくとも1つのスキップ命令に応答して、スキップフラグを前記データ記憶内に設定する。
デコーダは、いくつかの方法において、スキップ命令に対応してもよいが、いくつかの実施形態では、プロセッサに、データ条件に関する判定の結果を待機しており、いったんその結果を有し、条件が満たされていない場合、スキップ機能を行う必要があることを示す、スキップフラグを設定する。
本発明の第3の態様は、標的レジスタおよびデータ条件レジスタを指定する、少なくとも1つのループ命令をデコードするように構成される命令デコーダと、前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサとを備え、前記データプロセッサは、前記デコードされた少なくとも1つのループ命令に応答し、前記データ条件の判定を開始し、前記ループの開始時に、前記プログラムカウンタを以前に実行された命令のアドレスに設定し、前記命令ストリーム内の命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定する、データ処理装置を提供する。
利用可能であり得る付加的命令は、ループ命令であって、これは、いったんそれらが依存する条件が満たされていないと判定すると、後方分岐を行う、隣接する命令をスキップすることを可能にする。
本発明の第4の態様は、データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、前記アプリケーション内の複数の命令を分析することと、スキップ命令に続いて、複数の隣接する命令を含む、命令のストリームを生成することであって、その実行は、同一のデータ条件に依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、前記スキップ命令は、標的アドレスを指定し、前記標的アドレスは、前記隣接する命令および前記データ条件に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサによって実行されると、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を開始するよう、前記データプロセッサを制御することと、前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続いて、次の命令にスキップし、前記次の命令における実行を継続することと、前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することとを備える、方法を提供する。
コンパイラもまた、コードを分析し、すべて、同一のデータ条件に依存する複数の隣接する命令が存在することの判定に応答して、スキップ命令を生成することができ、その実行は、データ条件が満たされていない場合、プロセッサの状態を変化させないであろう。このように、コンパイラは、プロセッサによって実行される前に、コードの最適化を提供する。
本発明の第5の態様は、データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、前記アプリケーション内の複数の命令を分析することと、複数の隣接する命令の第1の命令のアドレスを指定するループ命令を含む、命令のストリームを生成し、その実行が、同一のデータ条件に依存し、データ条件が満たされていないときのその実行が、データレジスタ内に記憶された値を変化させない命令を備える、前記複数の隣接する命令にジャンプすることと、前記ループ命令は、前記データ条件および標的アドレスを指定し、前記標的アドレスは、前記ループ命令に続く次の命令のアドレスであって、前記ループ命令が、前記データプロセッサによって実行されると、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令にジャンプし、その処理を開始する、前記データプロセッサを制御することと、前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記標的アドレスによって指定される前記命令にスキップし、前記命令において、実行を継続することと、前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することとを備える、方法を提供する。
コンパイラはまた、複数の隣接する条件付き命令への後方分岐の検出に応答して、ループ命令を生成してもよい。再び、これは、そのような命令を処理するプロセッサの性能を改善することができる。
本発明の第6の態様は、本発明の第5または第6の態様に従って、方法を行うための装置を制御するためのコンピュータプログラム製品を提供する。
本発明の第7の態様は、データを処理する方法であって、命令のストリームをデコードすることと、前記デコードされた命令のストリームを処理することと、前記命令のストリーム内の複数の隣接する命令に応答して、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、前記データ条件が満たされているかどうかの判定を開始することと、前記複数の隣接する命令の処理を開始することと、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続することとを備える、方法を提供する。
本発明の第8の態様は、データ処理装置上で実行するコンピュータプログラムによって提供される仮想機械であって、本発明の第1の態様のデータ処理装置に従って、命令実行環境を提供する仮想機械を提供する。
本発明の前述および他の目的、特徴、ならびに利点は、付随の図面と関連して読まれる、例証的実施形態の以下の発明を実施するための形態から明白となるであろう。
本発明のある実施形態による、データ処理装置を示す。 スキップ命令の実施例を示す。 スキップ命令の実施例を示す。 ループ命令の実施例を示す。 命令パターンスポッティングモードにある処理装置によって入力される状態を示す。 本発明のある実施形態による、コンパイラを図式的に示す。 本発明のさらなる実施形態による、データ処理装置を示す。 本発明のある実施形態による、スキップ演算を行うための方法におけるステップを図示する、流れ図を示す。 本発明のある実施形態による、ループ演算を行うための方法におけるステップを図示する、流れ図を示す。 ループおよびスキップ命令の生成を含む、プログラムをコンパイルする方法におけるステップを示す。 本発明のある実施形態の仮想機械実装を示す。
図1は、本発明のある実施形態による、命令ストリームを処理するためのデータ処理装置10を示す。データ処理装置10は、処理されるべき命令を記憶するための命令キャッシュ12を有する。これらの命令は、プログラムカウンタ40内の値に依存して、フェッチユニット14によってフェッチされる。フェッチされた命令は、デコードするために、命令デコーダ16に送信され、次いで、並列実行パイプライン18のうちの1つによって実行される。フェッチユニット、デコードユニット、および実行パイプラインは、命令を処理するための処理回路30を形成する。また、命令の実行を制御する制御値を保持するレジスタを備える、データ記憶20と、さらに、命令の実行によって処理されるデータ値を記憶するためのレジスタを備える、データ記憶35とが存在する。データ記憶20およびデータ記憶35は、いくつかの実施形態では、単一のレジスタバンクを形成し得ることに留意されたい。
本発明のある実施形態では、フェッチされた命令は、スキップ命令を含み、そのスキップ命令には、ベクトルマスクが0ではないことをそのすべての条件とする、複数のベクトル命令が続く。ベクトルマスクが0である場合、複数のベクトル命令に応答する、データ要素のいずれに関しても演算は行われない。スキップ命令は、ベクトルマスクを含有するレジスタを識別する、1つのレジスタ識別子と、標的アドレス、すなわち命令ストリーム内の複数のベクトル命令の最後に続く命令のアドレスである、命令アドレスとを含有する。
スキップ命令をデコードするとき、デコーダは、標的アドレスの値をレジスタ22内に、およびベクトルマスクレジスタのアドレスをレジスタ23内に書き込み、スキップフラグをレジスタ21内に設定する。スキップフラグは、処理回路30に、スキップが保留中であって、データ条件が満たされていないことが判定される場合、この場合ではベクトルマスクレジスタがゼロを含有する場合には、プログラムカウンタ40が、標的レジスタ22内の値に設定されるべきであることを示す。
したがって、スキップ命令に応答して、デコーダは、これらの値をデータ記憶20内に書き込み、パイプライン18のうちの1つは、ベクトルマスクレジスタの値をチェックしそれが0であるかどうかを確認する、ベクトル試験命令を実行する。そして、連続する条件付きベクトル命令の最初の条件付きベクトル命令が、並列パイプライン18の別の1つ内で実行される。デコードおよびフェッチユニットは、ベクトル試験演算が、ベクトルマスクの結果を判定するまで、これらの連続する命令のフェッチおよびデコードを継続する。ベクトルマスクが0である場合、プログラムカウンタは、スキップ命令の標的値に設定され、これが、フェッチされる次の命令となる。ベクトルマスクが0ではない場合、データ記憶20内のスキップ命令に応答して設定されたスキップフラグは、そのようにリセットされ、連続する命令はすべて、実行される。
ベクトルマスクが0である場合、ベクトルマスクレジスタの値が判定されている間、いくつかの実行される必要のない命令が実行され得るが、ベクトルマスクが0であるということは、いずれの要素もこれらの演算から記憶されないことを意味し、したがって、状態を回復する必要なく、プロセッサは単に、標的命令にスキップすることができるという点で、レジスタ35内のデータ値は上書きされず、プロセッサの状態は変化されないことに留意されたい。
図2aおよび2bは、スキップ命令の実施例と、プロセッサがそれをどのように実装するかを示す。例えば、SKIP P,Lは、条件Pに依存する、アドレスLへの選択的分岐を示す。
スキップ命令に続いて、プロセッサが条件Pを直ちに解決することができる場合、プロセッサは、アドレスLに直ちに分岐を行うであろう。プロセッサが条件を直ちに解決できない場合、値Pを条件とする、後続の命令の実行を継続するであろう。プロセッサは、以下の3つのレジスタを修正することによって、未解決のスキップを有することを「記憶する」。pending_skipを真に設定することによって、スキップフラグレジスタを修正する。Lを分岐する先のアドレスとして、それをLに設定することによって、target_skipレジスタを修正し、register_skipを、この場合ベクトルマスクレジスタであるPに設定する。
図2bは、プロセッサが本命令に対してどのように作用するかを示す。保留中のスキップフラグが設定されている(pending_skip=true)間に、プログラムカウンタがスキップ命令の標的アドレスに到達する場合、この時点において全ての連続する命令が実行されているので、スキップフラグは(pending_skip=false)にリセットされ、したがって、スキップは、もはや保留中ではない。さらに、スキップ命令が依存する条件が解決される場合、この場合においてはすなわちベクトルマスクレジスタが0である場合は、プログラムカウンタは、target_skipアドレスに設定され、全ての中間の連続する命令はスキップされる。この時点において、スキップフラグは、再び、falseにリセットされる。
保留中のスキップフラグを設定し、その条件が満たされない命令をプロセッサが処理しないことを許可することは、プロセッサの性能を改善するであろうが、これは本質的ではなく、これらの命令がスキップされない場合でも、プロセッサは、依然として、正確に実行するであろうことに留意されたい。したがって、プロセッサは、任意の時点において、スキップフラグをリセットすることができる。条件が満たされるかどうかを判定するための比較を行うことが困難であって、したがって、それを条件とする命令の前に行われる可能性が低い場合に、これを行うことになるかもしれない。これは、スキップフラグをリセットすることによって、プロセッサが、標的アドレス、ベクトルマスク、およびフラグを記憶するレジスタを解放するのと平行して行われる。
前述の実施例では、スキップ命令はアドレスを指定したが、むしろ、スキップすべき命令の数または命令バイトの数を指定し得ることに留意されたい。本実装が使用された場合、スキップ命令の実行に応答して、カウンタはこの数に設定され、実行される連続する命令の各命令に対してデクリメントされるであろう。カウンタが0に到達すると、スキップ領域を出たことになり、スキップフラグがリセットされる。しかしながら、カウンタが0に到達せず、ベクトルマスクが0であることが見出された場合、カウンタ内に残された数の命令はスキップされ、言い換えると、プログラムカウンタは、その値だけインクリメントされるであろう。
述語レジスタのアドレスを指定する代わりに、ベクトルマスクのために使用されるグローバルレジスタが存在する場合もあろう。この場合、スキップ命令が、常時、本レジスタを参照していることがわかっているため、スキップ命令内でレジスタを指定する必要はないであろう。
図3は、スキップ命令の一変形であるVLOOP命令と、この命令が有する挙動を示す。
この場合、対象のコードは、マスクがすべて0になるまで反復するループである。本コードは、後方分岐を使用するため、前述のスキップコードに対していくつかの重要な点において異なり、この場合、我々は、分岐が行われると推測しなければならず、これは、再び、マスクが0ではないということを推測することに対応する。図2においてスキップ命令のために使用されたのと同一のレジスタが、(図4に示されるように)ターゲットレジスタおよび述語レジスタを示す目的でVLOOP命令のために再び使用されるが、スキップ命令ではなく、VLOOPが保留中であることを示すために、異なるフラグが設定される。スキップ命令におけるのと同様に、いったん述語がすべてゼロであると判定されると、プロセッサはターゲットアドレスにスキップする。このとき、VLOOPフラグは、falseにリセットされる。
すぐ上の実施例では、スキップおよびループ演算は、新しい命令であったという点において、アーキテクチャ的に実装された。それらはまた、デコーダの早期段階またはプリデコーダが、同一の述語によって制御される一連の演算をスポッティングすることができるように、マイクロアーキテクチャ式にも実装することができ、もし条件が満たされないならばアーキテクチャ状態はその演算により変化しないという場合には、スキップまたはループ演算のいずれかを実装し得る。この種のパターンのスポッティングは、特に、本願の導入で与えられたような、グローバルレジスタに依存し、グローバルレジスタが、一義的に0に等しい場合に、すべて無演算命令のように挙動するベクトル命令にとって単純であることに留意されたい。
図4は、処理装置10が、本パターンスポッティングモードで動作するであろう、異なる状態を図式的に図示する。例えば、フェッチユニット14は、命令をフェッチし、デコード16の早期段階で、特定のパターンコードを検出するであろう。本実施例では、プロセッサは、通常の「a」状態で動作しており、特定のベクトルマスクレジスタPをテストするベクトル試験演算VTESTの検出に応答して、register_skip22をこのベクトルマスク値に設定する。次いで、状態bに進む。後続の命令が通常の命令である場合は、この時点において、スポッティングしている命令パターンがそこにないことを認識して、ルート*に沿って状態aに戻るであろう。しかしながら、述語レジスタPに依存する分岐命令が存在する場合は、target_skipレジスタ23を分岐の標的値、言い換えればLに設定し、状態cに進むであろう。状態cでは、ベクトルマスクレジスタの値が判定されるまで、ベクトルマスクレジスタに依存する連続する演算を処理するであろう。ベクトルマスクレジスタの値が0であれば、プログラムカウンタを標的スキップの値に設定することによって、状態dに進むであろう。次いで、このアドレスの命令を実行し、通常の状態aに戻るであろう。連続する命令の演算中に、ベクトルマスクが0ではないか、あるいはプログラムカウンタが標的スキップを上回って上昇したことが見出された場合は、*によって印されたルートに沿って、通常の状態aに戻るであろう。
図5は、本発明のある実施形態による、コンパイラ50を示す。コンパイラ50は、プログラマによって書かれたプログラムを受け取り、それをプロセッサによって処理されるコードに変える。これを行うとき、より効率的に実行するように、コードを最適化するステップを行う。本発明のある実施形態では、図4について記述されたデコーダの早期段階によって実行されるものと同様のパターンマッチングステップを行い、適宜スキップまたはループ機能を行うプロセスを制御するコードを生成する。
スキップ機能が併用され得るさらなる命令は、種々の演算が特定の条件に依存して実行されるべきであることを示す、Thumb IT命令である。例えば、ITTTGE命令は、ある値が別の値以上である場合に、次の3つの演算が行われるべきであることを示す。これらの演算の結果は、条件の結果が把握されるまで、書き戻されないので、スキップフラグが設定され、最初の3つの演算が完了する前に条件GEが満たされなかったと判定された場合は、プロセッサは、第4の演算にスキップし得る。
図6は、データ処理装置10の別の実施形態を示しており、保留中のベクトルマスクを記憶するように構成されるレジスタバンク20内にレジスタ24が存在する。したがって、skipおよびVLOOP命令は、ベクトルマスクレジスタを指定しない。本実施形態では、標的アドレスをレジスタ内に設定するのではなく、スキップ命令のためのベクトルマスクのような条件に条件付けられた命令の数が、カウンタ42内に設定される。これらの命令のそれぞれが実行されるにつれて、信号がカウンタに送信され、デクリメントされる。条件付き命令が依然として実行されている間に条件が満たされないと判定される場合、プログラムカウンタ40は、カウンタ42内の値をそれに加算することによって、更新される。
図7は、本発明のある実施形態による、命令ストリームを処理するための方法におけるステップを図示する、流れ図を示す。命令ストリームはデコードされ、デコーダは、同一のデータ条件に依存し、前述のデータ条件が満たされていないときは、その実行によりデータプロセッサの状態が変化しない、複数の命令を検出する。この検出に応答して、または他の実施形態では、スキップ命令のデコードに応答して、デコーダはスキップフラグを設定し、スキップ演算の標的アドレスを標的アドレスレジスタに書き込む。この標的アドレスは、デコーダがスキップ命令をデコードする場合にスキップ命令内で指定されるか、または同一のデータ条件に依存する複数の命令を検出する場合には、これらの命令に続く命令のアドレスである。
プロセッサは、次いで、結果データ条件が未だ判定されていないかどうかを判定する。判定されていない場合、隣接する条件付き命令の第1の命令が実行される。次いで、プログラムカウンタが標的アドレスを上回っているかどうか判定され、そうではない場合、条件が依然として判定されていなければ、後続の条件付き命令が実行され、プログラムカウンタが再びチェックされる。
ある時点において、条件の結果が判定され、それが満たされる場合は、スキップフラグがリセットされ、条件付き命令の実行は継続される。条件が満たされていない場合は、プログラムは、プログラムカウンタを標的アドレスに設定することによって、標的アドレスにスキップし、スキップフラグはリセットされる。
しかしながら、条件の結果が判定される前に、プログラムカウンタが標的アドレスに到達する場合には、スキップフラグはリセットされ、命令ストリームの実行は、通常の方法で継続する。
図8は、複数の条件付き命令への後方ジャンプを含む命令ストリームを処理するための方法におけるステップを図示する、流れ図を示す。命令ストリームはデコードされ、デコーダは、同一のデータ条件に依存し、前述のデータ条件が満たされていないときは、その実行によりデータプロセッサの状態が変化しない複数の命令への、後方ジャンプを検出する。この検出に応答して、または他の実施形態では、ループ命令のデコードに応答して、デコーダはVLOOPフラグを設定し、ループ演算の標的アドレスを標的アドレスレジスタに書き込む。この標的アドレスは、1ずつインクリメントされる、現在のプログラムカウンタである。
プロセッサは、次いで、最初の条件付き命令へ後方ジャンプする。次いで、条件結果が未だ判定されていないかどうかが判定される。判定されていない場合、次の条件付き命令が実行され、再び、判定される。条件が判定され、それが満たされている場合は、VLOOPフラグはリセットされ、条件付き命令の実行が継続する。満たされていない場合は、プログラムは標的アドレスにジャンプし、VLOOPフラグをリセットする。条件付き命令が実行されている間に条件が判定されない場合は、標的アドレスへの後方分岐が、プログラムストリーム内で生じ、この時点において、VLOOPフラグは、リセットされるであろう。これらのステップは、図示されない。
図9は、プログラムをコンパイルする方法におけるステップを示す。プログラム内の命令は、分析され、同一のデータ条件に依存し、その実行がプロセッサの状態を変化させない、複数の隣接する条件付き命令が存在するかどうか判定される。もしこれらが検出される場合は、これらの命令への後方分岐が存在するかどうか判定される。存在しない場合は、スキップ命令が生成され、複数の条件付き命令がその後に続く命令ストリーム内に配置される。後方分岐が存在する場合、ループ命令が生成される。
図10は、使用され得る仮想機械実装を図示する。前述の実施形態は、関係技法をサポートする具体的な処理ハードウェアを動作させるための装置および方法の観点から、本発明を実装するが、また、ハードウェアデバイスのいわゆる仮想機械実装を提供することも可能である。これらの仮想機械実装は、仮想機械プログラム510をサポートするホストオペレーティングシステム520を実行するホストプロセッサ530上で実行される。典型的には、合理的速度で実行される仮想機械実装を提供するために大型の強力なプロセッサが要求されるが、そのようなアプローチは、互換性または再利用の理由から、別のプロセッサにネイティブなコードを実行することを所望するときなどの特定の状況においては、正当化され得る。仮想機械プログラム510は、仮想機械プログラム510によってモデル化されるデバイスである実際のハードウェアによって提供されるであろう、アプリケーションプログラムインターフェースと同一のアプリケーションプログラム500にアプリケーションプログラムインターフェースを提供する。したがって、前述のメモリアクセスの制御を含むプログラム命令は、仮想機械プログラム510を使用して、仮想機械ハードウェアとのその相互作用をモデル化するために、アプリケーションプログラム500の内部から実行されてもよい。
本発明の例証的な実施形態が、付随の図面を参照して、本明細書に詳細に説明されたが、本発明は、それらのそのとおりの実施形態に限定されるものではなく、添付の請求項によって定義されるように、本発明の範囲および精神から逸脱することなく、種々の変更および修正が、当業者によってもたらされ得ることを理解されたい。例えば、以下の従属請求項の特徴の種々の組み合わせが、本発明の範囲から逸脱することなく、独立請求項の特徴とともに実施され得る。
本発明の第1の態様は、命令のストリームをデコードするように構成される命令デコーダと、前記デコードされた命令のストリームを処理するように構成されるデータプロセッサとを備え、前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリーム内の複数の隣接する命令を識別するように構成され、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させず、前記複数の隣接する命令の識別に応答して、前記データプロセッサは、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始し、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続するように構成される、データ処理装置を提供する。
本発明の第4の態様は、データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、前記アプリケーション内の複数の命令を分析することと、前記複数の命令が、その実行が同一のデータ条件に依存し、前記データ条件が満たされないときは、データレジスタ内に記憶された値を変化させない複数の隣接する命令を含むかを検出することと、もし、前記複数の命令が前記複数の隣接する命令を含むならば、前記複数の隣接する命令がその後に続くスキップ命令を含む一連の命令を生成することと、前記スキップ命令は、標的アドレスを指定し、前記標的アドレスは、前記隣接する命令および前記データ条件に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサによって実行されると、前記データ条件が満たされているかどうかの判定を開始し、前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始するよう、前記データプロセッサを制御することと、前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続いて、次の命令にスキップし、前記次の命令における実行を継続することと、前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することとを備える、方法を提供する。
本発明の第7の態様は、データを処理する方法であって、命令のストリームをデコードすることと、前記デコードされた命令のストリームを処理することと、前記命令のストリーム内の複数の隣接する命令に応答して、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、前記データ条件が満たされているかどうかの判定を開始することと、前記複数の隣接する命令の処理を、前記データ条件が満たされているか否かの判定を待つことなしに開始することと、前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せず、前記データレジスタ内の前記値を回復せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続することとを備える、方法を提供する。

Claims (21)

  1. 命令のストリームをデコードするように構成される命令デコーダと、
    前記デコードされた命令のストリームを処理するように構成されるデータプロセッサと、を備え、
    前記データプロセッサは、前記命令のストリームを分析し、前記命令のストリーム内の複数の隣接する命令を識別するように構成され、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させず、前記複数の隣接する命令の識別に応答して、前記データプロセッサは、
    前記データ条件が満たされているかどうかの判定を開始し、
    前記複数の隣接する命令の処理を開始し、
    前記データ条件が満たされていないという判定に応答して、
    未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続する、
    ように構成されるデータ処理装置。
  2. 前記データ処理装置は、データ記憶をさらに備え、前記データ処理装置は、前記複数の隣接する命令に応答して、標的場所として、前記複数の隣接する命令の実行後実行されるべき前記次の命令の場所を識別する識別子を前記データ記憶内に記憶し、スキップフラグを前記データ記憶内に設定し、前記スキップフラグは、前記プロセッサに、前記データ条件が満たされていないことに応答して、前記プロセッサが、プログラムカウンタを前記標的場所に対応するアドレスで更新すべきであることを示す、請求項1に記載のデータ処理装置。
  3. 前記次の命令の場所を識別する前記識別子は、アドレスを備える、請求項2に記載のデータ処理装置。
  4. 前記複数の隣接する命令は、ベクトルデータ要素を処理するためのベクトル命令を備え、各ベクトル命令は、前記ベクトルデータ要素内のどの要素が処理されるかを制御するマスクを備え、前記データ条件が満たされていないことは、ゼロを備える前記マスクが、処理されるべきデータ要素がないことを示す、前記請求項のいずれか1つに記載のデータ処理装置。
  5. 前記複数の隣接する命令は、複数の命令を備え、それぞれ、同一の述語を備え、前記述語は、前記データ条件を判定し、前記述語が満たされていないことは、前記データ条件が満たされていないことに相当し、前記述語が満たされていることに応答して、前記命令のみ完了し、任意の記憶されたデータ値を更新し、前記データ処理装置は、
    前記複数の隣接する命令の処理を開始し、
    前記データ条件が満たされていないという判定に応答して、
    記憶されたデータ値が更新されないように、前記複数の隣接する命令の実行を終了し、
    未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続く次の命令にスキップし、前記次の命令における実行を継続する、
    ように構成される、請求項1から3のいずれか1つに記載のデータ処理装置。
  6. 前記データ処理装置は、データ記憶および検出回路をさらに備え、
    前記検出回路は、前記データ条件が満たされていないということに依存する、条件付き分岐命令の検出に応答して、前記複数の隣接する命令を迂回して前方に分岐し、
    前記標的場所として、前記分岐命令の標的場所を示す値を前記データ記憶内に記憶し、前記スキップフラグ値を前記データ記憶内に設定し、
    前記プロセッサは、前記分岐を行うべきではないという前記スキップフラグに応答し、前記データ条件が満たされているかどうかの判定を開始し、
    前記複数の隣接する命令の実行を開始し、
    前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所に依存した値に設定する、
    請求項2または3に記載のデータ処理装置。
  7. 前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの前記判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される、請求項6に記載のデータ処理装置。
  8. 前記データ処理装置は、データ記憶および検出回路をさらに備え、
    前記検出回路は、前記データ条件に依存する条件付き分岐命令の検出に応答して、前記複数の隣接する命令の開始へと後方に分岐し、
    前記標的場所として、前記データ記憶内に1だけインクリメントされた前記分岐命令の場所を記憶し、スキップフラグ値を前記データ記憶内に設定し、
    前記プロセッサは、前記分岐を行うべきという前記スキップフラグに応答して、前記データ条件が満たされたかどうかを判定し、
    前記複数の隣接する命令の実行を開始し、
    前記データ条件が満たされていないという判定に応答して、プログラムカウンタを前記標的場所として前記データ記憶内に記憶された値に依存する値に設定する、
    請求項2または3に記載のデータ処理装置。
  9. 前記条件付き分岐命令は、ベクトル値を条件とし、前記プロセッサは、前記ベクトルの値を試験するベクトル試験命令を実行することによって、前記データ条件が満たされているかどうかの前記判定を開始し、前記ベクトル値が、所定の値を備えるという判定に応答して、前記データ条件が満たされていないと判定される、請求項8に記載のデータ処理装置。
  10. データ記憶および検出回路をさらに備え、
    前記検出回路は、前記データ条件が前記命令に従うことに依存する、前記複数の隣接する命令を示す命令の検出に応答し、前記命令は、前記データ条件と、完了されるべき各命令に対して満たされるべきかどうかの指示とを備え、
    前記標的場所として、前記複数の命令に続いて、前記次の命令の場所を識別する識別子を記憶し、スキップフラグ値を前記データ記憶内に設定し、
    前記プロセッサは、前記データ条件が満たされていないという判定に応答して、前記スキップフラグに応答して、前記標的場所にスキップする、
    請求項2または3に記載のデータ処理装置。
  11. 前記データ条件が満たされているという判定に応答して、前記プロセッサは、前記複数の隣接する命令の実行を継続し、前記スキップフラグをクリアするように構成される、請求項2または3に記載のデータ処理装置。
  12. 前記データ条件が判定される前に、前記隣接する命令の全部を実行することに応じて、前記プロセッサは、前記スキップフラグをクリアするように構成される、請求項2または3に記載のデータ処理装置。
  13. 標的レジスタおよびデータ条件レジスタを指定する、少なくとも1つのスキップ命令をデコードするように構成される命令デコーダと、
    前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサと、
    を備え、前記データプロセッサは、前記デコードされた少なくとも1つのスキップ命令に応答して、前記データ条件の判定を開始し、前記命令ストリーム内の後続命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定するデータ処理装置。
  14. 前記データ処理装置は、データ記憶を備え、
    前記命令デコーダは、前記少なくとも1つのスキップ命令に応答して、スキップフラグを前記データ記憶内に設定する、請求項13に記載のデータ処理装置。
  15. 標的レジスタおよびデータ条件レジスタを指定する、少なくとも1つのループ命令をデコードするように構成される命令デコーダと、
    前記命令デコーダによって制御されるデータ処理演算を行うように構成されるデータプロセッサと、を備え、
    前記データプロセッサは、前記デコードされた少なくとも1つのループ命令に応答し、前記データ条件の判定を開始し、前記ループの開始時に、前記プログラムカウンタを以前に実行された命令のアドレスに設定し、前記命令ストリーム内の命令の処理を開始し、前記データ条件が所定の結果を有していないという判定に応答して、プログラムカウンタを前記標的レジスタ内に記憶された値に依存する値に設定するデータ処理装置。
  16. データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、
    前記アプリケーション内の複数の命令を分析することと、
    スキップ命令に続いて、複数の隣接する命令を含む、命令のストリームを生成することであって、その実行は、同一のデータ条件に依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、
    前記スキップ命令は、標的アドレスを指定し、前記標的アドレスは、前記隣接する命令および前記データ条件に続く次の命令のアドレスであって、前記スキップ命令は、前記データプロセッサによって実行されると、
    前記データ条件が満たされているかどうかの判定を開始し、
    前記複数の隣接する命令の処理を開始するよう、
    前記データプロセッサを制御することと、
    前記データ条件が満たされているという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令に続いて、次の命令にスキップし、前記次の命令における実行を継続することと、
    前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することと、
    を備える方法。
  17. データプロセッサによって実行するためのアプリケーションをコンパイルする方法であって、
    前記アプリケーション内の複数の命令を分析することと、
    複数の隣接する命令の第1の命令のアドレスを指定するループ命令を含む、命令のストリームを生成し、その実行が、同一のデータ条件に依存し、データ条件が満たされていないときのその実行が、データレジスタ内に記憶された値を変化させない命令を備える、前記複数の隣接する命令にジャンプすることと、
    前記ループ命令は、前記データ条件および標的アドレスを指定し、前記標的アドレスは、前記ループ命令に続く次の命令のアドレスであって、前記ループ命令は、前記データプロセッサによって実行されると、
    前記データ条件が満たされているかどうかの判定を開始し、
    前記複数の隣接する命令にジャンプし、その処理を開始するよう、
    前記データプロセッサを制御することと、
    前記データ条件が満たされているという判定に応答して、 未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記標的アドレスによって指定される前記命令にスキップし、前記命令において、実行を継続することと、
    前記データ条件が満たされていないという判定に応答して、前記複数の隣接する命令の実行を継続することと、
    を備える方法。
  18. データプロセッサ上で実行されると、請求項16に記載の方法のステップを行う前記データプロセッサを制御するように演算可能である、スキップ命令を備える、コンピュータプログラムを記憶するコンピュータプログラム製品。
  19. データプロセッサ上で実行されると、請求項17に記載の方法のステップを行う前記データプロセッサを制御するように演算可能である、ループ命令を備える、コンピュータプログラムを記憶するコンピュータプログラム製品。
  20. データを処理する方法であって、
    命令のストリームをデコードすることと、
    前記デコードされた命令のストリームを処理することと、
    前記命令のストリーム内の複数の隣接する命令に応答し、その実行は、データ条件が満たされているということに依存し、その実行は、データ条件が満たされていないとき、データレジスタ内に記憶された値を変化させないことと、
    前記データ条件が満たされているかどうかの判定を開始することと、
    前記複数の隣接する命令の処理を開始することと、
    前記データ条件が満たされていないという判定に応答して、未だ実行されていない前記複数の隣接する命令のうちの任意の中間の命令を実行せずに、前記複数の隣接する命令後に実行されるべき次の命令にスキップし、前記次の命令における実行を継続することと、
    を備える方法。
  21. データ処理装置上で実行するコンピュータプログラムによって提供される仮想機械であって、請求項1に記載の前記データ処理装置に従って、命令実行環境を提供する、仮想機械。
JP2013552260A 2011-02-07 2012-01-26 同一のデータ条件に依存する、隣接する命令の実行の制御 Active JP6267513B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/929,667 US9176737B2 (en) 2011-02-07 2011-02-07 Controlling the execution of adjacent instructions that are dependent upon a same data condition
US12/929,667 2011-02-07
PCT/GB2012/050161 WO2012107737A1 (en) 2011-02-07 2012-01-26 Controlling the execution of adjacent instructions that are dependent upon a same data condition

Publications (2)

Publication Number Publication Date
JP2014504770A true JP2014504770A (ja) 2014-02-24
JP6267513B2 JP6267513B2 (ja) 2018-01-24

Family

ID=45614861

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013552260A Active JP6267513B2 (ja) 2011-02-07 2012-01-26 同一のデータ条件に依存する、隣接する命令の実行の制御

Country Status (10)

Country Link
US (1) US9176737B2 (ja)
EP (1) EP2673703B1 (ja)
JP (1) JP6267513B2 (ja)
KR (1) KR101827747B1 (ja)
CN (1) CN103348318B (ja)
BR (1) BR112013019824B1 (ja)
GB (1) GB2501211B (ja)
IL (1) IL227476A (ja)
MY (1) MY160644A (ja)
WO (1) WO2012107737A1 (ja)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9335997B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using a wrapping rotate previous instruction in the macroscalar architecture
US9342304B2 (en) 2008-08-15 2016-05-17 Apple Inc. Processing vectors using wrapping increment and decrement instructions in the macroscalar architecture
US9335980B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using wrapping propagate instructions in the macroscalar architecture
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
US9389860B2 (en) 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
US9626185B2 (en) * 2013-02-22 2017-04-18 Apple Inc. IT instruction pre-decode
US9348589B2 (en) 2013-03-19 2016-05-24 Apple Inc. Enhanced predicate registers having predicates corresponding to element widths
US9817663B2 (en) 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9830153B2 (en) * 2014-06-20 2017-11-28 Netronome Systems, Inc. Skip instruction to skip a number of instructions on a predicate
US9519482B2 (en) * 2014-06-20 2016-12-13 Netronome Systems, Inc. Efficient conditional instruction having companion load predicate bits instruction
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10175988B2 (en) * 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
GB2540941B (en) * 2015-07-31 2017-11-15 Advanced Risc Mach Ltd Data processing
US10055208B2 (en) * 2015-08-09 2018-08-21 Oracle International Corporation Extending a virtual machine instruction set architecture
CN107179935B (zh) * 2016-03-11 2021-01-29 华为技术有限公司 一种指令执行方法及虚拟机
KR101699491B1 (ko) * 2016-03-29 2017-01-24 주식회사 포워드벤처스 기능 사용법 표시 장치, 방법, 및 컴퓨터 프로그램
CN107329936A (zh) * 2016-04-29 2017-11-07 北京中科寒武纪科技有限公司 一种用于执行神经网络运算以及矩阵/向量运算的装置和方法
US11726979B2 (en) 2016-09-13 2023-08-15 Oracle International Corporation Determining a chronological order of transactions executed in relation to an object stored in a storage system
US10860534B2 (en) 2016-10-27 2020-12-08 Oracle International Corporation Executing a conditional command on an object stored in a storage system
US10956051B2 (en) 2016-10-31 2021-03-23 Oracle International Corporation Data-packed storage containers for streamlined access and migration
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10884746B2 (en) * 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
GB2571996B (en) * 2018-03-16 2020-09-09 Advanced Risc Mach Ltd Branch target variant of branch-with-link instruction
CN111124500B (zh) * 2019-12-12 2022-03-08 浪潮(北京)电子信息产业有限公司 一种指令执行方法、装置、设备及存储介质
US11886883B2 (en) 2021-08-26 2024-01-30 International Business Machines Corporation Dependency skipping in a load-compare-jump sequence of instructions by incorporating compare functionality into the jump instruction and auto-finishing the compare instruction

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02227731A (ja) * 1989-01-13 1990-09-10 Internatl Business Mach Corp <Ibm> データ処理システム
JPH04137169A (ja) * 1990-09-28 1992-05-12 Nec Corp 情報処理装置
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
JPH10320380A (ja) * 1997-05-20 1998-12-04 Kofu Nippon Denki Kk ベクトル処理装置
JPH1185516A (ja) * 1997-07-14 1999-03-30 Matsushita Electric Ind Co Ltd 分岐予測方法およびプロセッサ
US6918032B1 (en) * 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US20100262813A1 (en) * 2009-04-14 2010-10-14 International Business Machines Corporation Detecting and Handling Short Forward Branch Conversion Candidates

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2273377A (en) 1992-12-11 1994-06-15 Hughes Aircraft Co Multiple masks for array processors
WO2004001584A2 (en) * 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
US8904155B2 (en) * 2006-03-17 2014-12-02 Qualcomm Incorporated Representing loop branches in a branch history register with multiple bits

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02227731A (ja) * 1989-01-13 1990-09-10 Internatl Business Mach Corp <Ibm> データ処理システム
JPH04137169A (ja) * 1990-09-28 1992-05-12 Nec Corp 情報処理装置
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
JPH10320380A (ja) * 1997-05-20 1998-12-04 Kofu Nippon Denki Kk ベクトル処理装置
JPH1185516A (ja) * 1997-07-14 1999-03-30 Matsushita Electric Ind Co Ltd 分岐予測方法およびプロセッサ
US6918032B1 (en) * 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US20100262813A1 (en) * 2009-04-14 2010-10-14 International Business Machines Corporation Detecting and Handling Short Forward Branch Conversion Candidates

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6015030072; SUGATeCH: '分岐予測とパイプラインの関係はいかなるものか?' C MAGAZINE 第18巻,第1号, 20060101, Pages:98〜102, ソフトバンククリエイティブ株式会社 *

Also Published As

Publication number Publication date
GB2501211B (en) 2016-08-17
US20120204007A1 (en) 2012-08-09
CN103348318B (zh) 2016-08-17
EP2673703A1 (en) 2013-12-18
WO2012107737A1 (en) 2012-08-16
KR101827747B1 (ko) 2018-03-22
MY160644A (en) 2017-03-15
EP2673703B1 (en) 2019-08-28
JP6267513B2 (ja) 2018-01-24
GB2501211A (en) 2013-10-16
KR20140014143A (ko) 2014-02-05
IL227476A (en) 2017-05-29
BR112013019824B1 (pt) 2021-06-15
IL227476A0 (en) 2013-09-30
CN103348318A (zh) 2013-10-09
BR112013019824A2 (pt) 2020-08-04
US9176737B2 (en) 2015-11-03
GB201313488D0 (en) 2013-09-11

Similar Documents

Publication Publication Date Title
JP6267513B2 (ja) 同一のデータ条件に依存する、隣接する命令の実行の制御
JP5889986B2 (ja) 実行された命令の結果を選択的にコミットするためのシステムおよび方法
TWI740844B (zh) 用於資料處理的方法、設備、及電腦程式
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
JP4718901B2 (ja) 命令実行装置、デバッグ方法、デバッグ装置及びデバッグプログラム
JP6971220B2 (ja) スプライス演算を行うための装置および方法
US10776124B2 (en) Handling exceptional conditions for vector arithmetic instruction
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
JP2010526392A (ja) システムおよびパイプラインプロセッサにおける条件命令実行の加速のためのローカル条件コードレジスタの使用方法
TW201737066A (zh) 程式迴圈控制
TW201734768A (zh) 分支指令
TW201737060A (zh) 程式迴圈控制
KR100316710B1 (ko) 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치
EP3198400B1 (en) Dependency-prediction of instructions
JP3900359B2 (ja) パイプライン化されたプロセッサ及び命令ループ実行方法
KR20070108936A (ko) 조건부 명령어가 실행되지 않을 경우 소스 오퍼랜드를대기하는 것을 중지하는 방법
KR102379886B1 (ko) 벡터 명령 처리
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
JP3748191B2 (ja) 計算機とその制御方法
WO2007048988A1 (en) A data processing apparatus and method for handling procedure call instructions

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150119

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150629

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150728

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151028

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20160331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160729

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20160809

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20161014

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170901

R150 Certificate of patent or registration of utility model

Ref document number: 6267513

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