JP2019517060A - ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法 - Google Patents

ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法 Download PDF

Info

Publication number
JP2019517060A
JP2019517060A JP2018554767A JP2018554767A JP2019517060A JP 2019517060 A JP2019517060 A JP 2019517060A JP 2018554767 A JP2018554767 A JP 2018554767A JP 2018554767 A JP2018554767 A JP 2018554767A JP 2019517060 A JP2019517060 A JP 2019517060A
Authority
JP
Japan
Prior art keywords
vector
execution
address
check
instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018554767A
Other languages
English (en)
Other versions
JP6913693B2 (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 JP2019517060A publication Critical patent/JP2019517060A/ja
Application granted granted Critical
Publication of JP6913693B2 publication Critical patent/JP6913693B2/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/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/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
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

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

Abstract

ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法が提供される。 装置は、ベクトルオペランドを記憶するためにレジスタストアを有し、各ベクトルオペランドは、複数の要素と、命令を実行してこれらの命令により定められる動作を実行するための実行回路とを備える。実行回路は、レジスタストアとメモリとの間でベクトルオペランドを移動させるためにメモリアクセス動作を実行するためのアクセス回路と、ベクトルオペランドを使用してデータ処理動作を実行するための処理回路とを有する。実行回路は、ベクトルループを反復的に実行するようになっていてもよく、各反復中に、実行回路は、命令のシーケンスを実行してベクトルループを実施する。シーケンスは、複数のメモリアドレスを特定するチェック命令を含み、また、実行回路は、チェック命令の実行に応答して、複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定する。ベクトルループのそれぞれの反復ごとに、実行回路は、アドレスハザード状態の不存在を決定するチェック命令の実行に応答し、ベクトルループを実施するべく命令のシーケンスを実行する際にベクトル化のデフォルトレベルを使用する。これに対し、アドレスハザード状態の存在下で、実行回路は、ベクトルループを実施するべく命令のシーケンスを実行する際にベクトル化の低いレベルを使用する。そのような手法は、ベクトルループの各反復中に使用されるベクトル化のレベルを動的に調整するための低レイテンシメカニズムをもたらし、それにより、アドレスハザード状態の存在下で効率的な性能を依然として可能にしつつコードをベクトル化できることが分かってきている。

Description

本技術は、ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法に関する。
データ処理装置の性能を向上させるための1つの既知の技術は、ベクトル演算の実行をサポートするための回路を設けることである。ベクトル演算は少なくとも1つのベクトルオペランドに対して実行され、各ベクトルオペランドは複数の要素を備える。このとき、ベクトル演算の実行は、ベクトルオペランド内の様々な要素にわたって演算を反復的に適用することを伴う。
特定の実施では、ベクトルオペランド内の様々な要素に対して演算を並行して実行するために複数のレーンの並列処理をもたらすベクトル処理回路(しばしば、SIMD(Single Instruction Multiple Data)処理回路と称される)を設けることも知られている。
ベクトル演算の使用により、等価な一連のスカラー演算の性能と比べた際にかなりの性能利点を実現することができる。
SIMDにしたがう伝統的なプログラムは、通常、規則的なメモリアクセスを実行するとともに、しばしば、スカラーコードからベクトルコードへの変換を容易にする線形メモリアドレッシング方式にしたがう。そのような状況では、ループ反復間に依存性がなく、また、ベクトルの要素が同時に処理されるときに想定し得る競合条件が存在しないため、ベクトル化は複雑ではない。残念ながら、性能に関してベクトル化が望まれる多くの現実のプログラムでは、スカラーコードにおいて軽微ではない大きさの依存性が反復間に存在する。そのような場合、コードがベクトル化されれば、ランタイム時に現れ得るアドレス競合の頻度を予測することは困難となり得る。
したがって、コンパイル段階では、控えめな手法をとることがしばしば必要であり、その結果、アドレス競合の存在を正確に予測できなければコードをベクトル化できず、したがって、任意の潜在的な性能向上が犠牲にされる。
アドレスのベクトルにおけるアドレス競合を動的に解析するためのメカニズムを導入しようとする以前の試みは、重大な遅延問題を有しており、そのため、それらの使用から実現されるべき任意の潜在的な利点が制限される可能性がある。
上記問題を軽減するメカニズムを提供することが望ましい。
1つの形態例では、それぞれが複数の要素を含むベクトルオペランドを記憶するためのレジスタストアと、命令によって定められる動作を行うために命令を実行する実行回路であって、レジスタストアとメモリとの間でベクトルオペランドを移動させるためにメモリアクセス動作を行うアクセス回路と、前記ベクトルオペランドを使用してデータ処理動作を行う処理回路とを備える、実行回路とを備え、実行回路がベクトルループを反復的に実行するようになっており、各反復中に、実行回路は、命令のシーケンスを実行してベクトルループを実施するようになっており、前記シーケンスは、複数のメモリアドレスを特定するチェック命令を含み、実行回路は、チェック命令の実行に応答して、複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定し、ベクトルループのそれぞれの反復ごとに、実行回路は、前記アドレスハザード状態の不存在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際にデフォルトレベルのベクトル化を使用するとともに、前記アドレスハザード状態の存在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際に低レベルのベクトル化を使用する、装置が提供される。
別の形態例では、それぞれが複数の要素を含むベクトルオペランドを記憶するためのレジスタストアと、命令によって定められる動作を行うために命令を実行する実行回路であって、レジスタストアとメモリとの間でベクトルオペランドを移動させるためにメモリアクセス動作を行うとともに、前記ベクトルオペランドを使用してデータ処理動作を行う、実行回路とを有する装置でベクトル演算を実行する際にアドレス衝突を管理する方法が提供され、方法は、ベクトルループを反復的に実行し、各反復中に、命令のシーケンスを実行回路内で実行してベクトルループを実施し、前記シーケンスは、複数のメモリアドレスを特定するチェック命令を含み、実行回路は、チェック命令の実行に応答して、複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定し、ベクトルループのそれぞれの反復ごとに、前記アドレスハザード状態の不存在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際にデフォルトレベルのベクトル化を使用するとともに、前記アドレスハザード状態の存在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際に低レベルのベクトル化を使用する。
更に他の形態例では、前述の構成のような装置に対応するプログラム命令のための仮想マシン実行環境を与えるようにコンピュータを制御するコンピュータプログラムを持続的形態で記憶するコンピュータプログラムプロダクトが提供される。
更に別の形態例では、それぞれが複数の要素を含むベクトルオペランドを記憶するためのレジスタストア手段と、命令によって定められる動作を行うために命令を実行するための実行手段であって、レジスタストア手段とメモリとの間でベクトルオペランドを移動させるためにメモリアクセス動作を行うためのアクセス手段と、前記ベクトルオペランドを使用してデータ処理動作を行うための処理手段とを備える、実行手段と、を備え、実行手段がベクトルループを反復的に実行するようになっており、各反復中に、実行手段は、命令のシーケンスを実行してベクトルループを実施するようになっており、前記シーケンスは、複数のメモリアドレスを特定するチェック命令を含み、実行手段は、チェック命令の実行に応答して、複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定し、ベクトルループのそれぞれの反復ごとに、実行手段は、前記アドレスハザード状態の不存在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際にデフォルトレベルのベクトル化を使用するとともに、前記アドレスハザード状態の存在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際に低レベルのベクトル化を使用する、装置が提供される。
添付図面に示される本技術の実施形態に関連して、本技術を単なる一例として更に説明する。
1つの実施形態に係る装置のブロック図である。 1つの実施形態に係る図1の装置を使用するベクトルループの実行を示すフロー図である。 別の実施形態に係る図1の装置を使用するベクトルループの実行を示すフロー図である。 更なる実施形態に係る図1の装置を使用するベクトルループの実行を示すフロー図である。 チェック命令の実行中に必要とされる比較を1つの実施形態にしたがってどのようにグループ化できるのかを概略的に示す。 1つの実施形態に係る、回転子及び比較器を使用して図5に示されるグループ分けにしたがって複数のアドレス比較をどのようにマージするのかを示すブロック図である。 アドレス競合検出が必要とされる関連するアドレスベクトルが連続したメモリアドレスを含む1つの実施形態で使用され得るチェック命令の別の変形例を示すために使用される図である。 アドレス競合検出が必要とされる関連するアドレスベクトルが連続したメモリアドレスを含む1つの実施形態で使用され得るチェック命令の別の変形例を示すために使用される図である。 アドレス競合検出が必要とされる関連するアドレスベクトルが連続したメモリアドレスを含む1つの実施形態で使用され得るチェック命令の別の変形例を示すために使用される図である。 アドレス競合検出が必要とされる関連するアドレスベクトルが連続したメモリアドレスを含む1つの実施形態で使用され得るチェック命令の別の変形例を示すために使用される図である。 アドレス競合検出が必要とされる関連するアドレスベクトルが連続したメモリアドレスを含む1つの実施形態で使用され得るチェック命令の別の変形例を示すために使用される図である。 1つの実施形態に係る、特定のベクトルループ内で使用するためのチェック命令の適切な形態を決定するためにコンパイル動作をどのように実行できるのかを概略的に示すフロー図である。 ベクトルループ内に挿入されるチェック命令のタイプに依存するスカラー実装にわたるベクトル化されたコードの潜在的な高速化を示すグラフである。 1つの実施形態に係るデータ処理装置の仮想マシン実装を概略的に示す。
添付図面を参照して実施形態を論じる前に、以下の実施形態の説明が与えられる。
1つの実施形態では、ベクトルオペランドを記憶するためにレジスタストアを有する装置が提供され、その場合、各ベクトルオペランドは、複数の要素と、命令を実行してこれらの命令により定められる動作を実行するための実行回路とを備える。実行回路は、レジスタストアとメモリとの間でベクトルオペランドを移動させるためにメモリアクセス動作を実行するためのアクセス回路と、ベクトルオペランドを使用してデータ処理動作を実行するための処理回路とを有する。実行回路は、ベクトルループを反復的に実行するようになっていてもよく、また、各反復中に命令のシーケンスを実行してベクトルループを実施するようになっていてもよい。記載された実施形態によれば、シーケンスは、複数のメモリアドレスを特定するチェック命令を含み、また、実行回路は、チェック命令の実行に応答して、複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定する。記載された実施形態によれば、ベクトルループのそれぞれの反復ごとに、実行回路は、アドレスハザードの不存在を決定するチェック命令の実行に応答し、ベクトルループを実施するべく命令のシーケンスを実行する際にベクトル化のデフォルトレベルを使用する。一方、アドレスハザード状態の存在を決定するチェック命令の実行に応じて、実行回路は、ベクトルループを実施するべく命令のシーケンスを実行する際にベクトル化の低いレベルを使用するようになっている。
記載された技術は、ベクトルループの各反復中にアドレスハザード状態の存在又は不存在を動的に決定するための効率的なメカニズムを提供する。この手法は、ベクトルループの任意の特定の反復中に使用されるベクトル化のレベルがベクトルループの反復内でチェック命令を実行する結果により直接に影響され得るようにすることによって、低レイテンシ解決策を提供する。特に、ベクトル化のデフォルトレベルが与えられる状態で、チェック命令の実行がアドレスハザード状態の存在を決定する任意の特定の反復に関し、実行回路は、ベクトル化の低いレベルを直接に使用して、そのアドレスハザード状態に対処し、そのため、メカニズムは、ベクトルループの各反復中に使用されるベクトル化のレベルを動的に切り換えることができる。
そのような手法により、コードをベクトル化することができるとともに、基本的にベクトルループ反復ごとに、結果として生じ得るアドレスハザードに効率的に対処できる。このメカニズムと関連付けられる低レイテンシに起因して、等価なスカラー処理と比べると、ベクトル演算の実行時にアドレス競合が生じ得る様々な状況でかなりの性能利点をもたらすことが分かってきた。使用されるベクトル化のレベルをベクトルループの各反復で動的に変えることができるため、それにより、幾つかの反復がアドレス競合を有し且つ他の反復がアドレス競合を有さない状況で、かなりの性能利点をもたらすことができる。
デフォルトレベルのベクトル化と低レベルのベクトル化とを実施できる方法は多く存在する。1つの実施形態において、実行回路は、アドレスハザード状態の不存在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンス内の第1の複数の命令を実行することによってベクトル化のデフォルトレベルを使用する。一方、実行回路は、アドレスハザード状態の存在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンス内の第2の複数の命令を反復的に実行することによってベクトル化の低レベルを使用する。
したがって、そのような実施形態では、アドレスハザード状態が検出されるときに第2の複数の命令を含む効率的なフォールバックパスを与えることによって、チェック命令の実行結果がループ内の制御フローに直接に影響を及ぼす。フォールバックパスの効率的な付与によって、そのような手法は、さもなければベクトル化できないと見なされるスカラーコードのベクトル化を可能にする。特に、スカラーコードをベクトル化することができ、また、ベクトルループの各反復中のチェック命令の実行により、アドレスハザード状態が検出されるときにはいつでも処理がフォールバックパスに移ることができる。その結果、そのフォールバックパス内の第2の複数の命令の反復実行は、アドレスハザードを回避することによって正しい処理が行われるようにする。
ベクトルループの現在の反復内で使用されるベクトル化のレベルに影響を及ぼすようにチェック命令の実行をもたらすことができる方法は多く存在する。1つの実施形態において、実行回路は、チェック命令の実行に応答して、シーケンス内のその後の命令による参照のために、アドレスハザード状態が存在するかどうかを示す結果データを生成する。
結果データは様々な形態をとることができる。例えば、結果データは、その後の命令による参照のためにシステムレジスタに書き込まれてもよい。或いは、結果データは、実行回路によって参照される状態フラグなどの1つ以上のフラグの更新において直接に表されてもよい。そのような手法によって、その後の命令の動作は、結果データによって更新されるそれらのフラグの現在の状態によって影響され得る。例えば、1つの実施形態では、その後の命令が分岐命令であり、該分岐命令は、実行回路によって実行されると、第1の複数の命令を実行すべきかどうか又は第2の複数の命令を反復的に実行すべきかどうかを決定するために1つ以上のフラグを参照する。したがって、そのような手法によって、分岐命令は、チェック命令を実行する結果として設定されるフラグに応じて第2の複数の命令に条件付きで分岐するようになっていてもよい。そのため、アドレスハザード状態が存在しない場合には、分岐命令の実行により、処理が第1の複数の命令を進めるだけであり、一方、ハザード状態が存在する場合には、分岐命令の実行により、命令フローが第2の複数の命令に分岐し、第2の複数の命令は、その後、ベクトルループの現在の反復によって必要とされる処理を実施するために反復的に実行され得る。
第2の複数の命令は様々な形態をとることができる。1つの実施形態では、これらの命令がスカラー命令を含み、これらのスカラー命令によって実行回路が個々の要素に対して作用し、また、ベクトルループを実施するために必要な第2の複数の命令の反復実行の数は、ベクトル化のデフォルトレベルと関連するベクトルオペランドのアクティブ要素の数に依存する。そのため、単なる一例として、ベクトル化のデフォルトレベルと関連するベクトルオペランド内に8個のアクティブ要素が存在する場合、第2の複数の命令は、ベクトルループの現在の反復を実施するために8回実行されてもよく、各反復中に、第2の複数の命令は、ベクトル化のデフォルトレベルが維持された際、したがって第1の複数の命令が実行された際に実行された並列処理のレーンの1つと関連するスカラー値に作用する。
しかしながら、別の実施形態では、第2の複数の命令がスカラー命令を含まなくてもよく、その代わりに、第2の複数の命令は、ベクトル化のデフォルトレベルと比べて少ない数のベクトル要素に作用するベクトル命令を含んでもよい。例えば、1つの実施形態において、実行回路は、チェック命令の実行に応答して、初期述語値を有するガード述語を生成し、また、第2の複数の命令はベクトル命令を含み、このベクトル命令により、実行回路は、1つ以上のベクトルオペランドの要素のサブセットに同時に作用し、前記サブセットはガード述語によって特定される。第2の複数の命令のそれぞれの反復時、ガード述語の述語値は、任意の先行する反復によって作用される1つ以上のベクトルオペランドの要素を排除するように更新される。そのため、そのような手法によれば、第2の複数の命令を反復的に実行してベクトルループの現在の反復と関連するベクトルオペランドの要素の全てを処理することが依然として必要であるが、第2の複数の命令の各反復では複数の要素が並列に処理される。これにより、ベクトル化のレベルを縮小してアドレスハザード問題を回避することができるが、その一方では、依然としてベクトル化のレベルをベクトルループの現在の反復内で達成できる。
1つの実施形態では、マスター述語を使用してベクトルオペランド内のアクティブ要素を特定することができる。そのため、ベクトル化のデフォルトレベルが使用される場合であっても、ベクトルオペランド内で定められる全ての要素がベクトルループの現在の反復内で処理されるとは限らない場合がある。したがって、アドレスハザード状態の存在下で第2の複数の命令を含むフォールバックパスを採用することが決定される際には、マスター述語によってアクティブ要素であると見なされないベクトルオペランドの任意の要素が作用されないようにすることも重要である。1つの実施形態において、これは、マスター述語によって特定されるアクティブ要素である要素のサブセットを特定するようにガード述語を制約することによって達成される。
前述したような幾つかの実施形態において、低レベルのベクトル化は、別個のフォールバックパスを与えることによって、及び、アドレスハザード状態の存在下でそのフォールバックパスが使用されるようにチェック命令の実行がループ内の制御フローに直接に影響を及ぼすようにすることによって実施されるが、別の実施形態では、そのような別個のフォールバックパスを与える必要がない場合がある。特に、別の実施形態によれば、デフォルトレベルのベクトル化は、第1の数のアクティブ要素を特定し、また、実行回路は、アドレスハザード状態の不存在を決定するチェック命令の実行に応じて、ベクトルループを実施するべく命令のシーケンスを実行する際に第1の数の要素を並列に処理するようになっている。しかしながら、実行回路は、チェック命令の実行に応答して、チェック命令の実行がアドレスハザード状態の存在を決定するときにアクティブ要素の数を第1の数よりも少ないアクティブ要素の第2の数に減らす制御出力を生成し、それにより、実行回路は、ベクトルループを実施するべく命令のシーケンスを実行する際に第2の数の要素を並列に処理することによってベクトル化の低レベルを使用する。
したがって、そのような手法によれば、チェック命令の実行結果に応じて制御フローの変化を引き起こすのではなく、チェック命令の実行を使用して、チェック結果に応じて処理されるアクティブ要素の数を直接に変更することができる。そのため、ベクトルループの各反復中に、処理されたアクティブ要素の数は、その特定の反復に関するチェック命令の結果に応じて変更されてもよい。したがって、アドレスハザード状態が検出されない任意の反復に関しては、デフォルトの第1の数の要素が並列に実行されてもよいが、アドレスハザード状態が検出される任意の反復に関しては、処理がチェック命令の結果によって決定される少ない数のアクティブ要素に関して進んでもよい。これにより、チェック結果は、ベクトルループの各反復中に処理される要素の数を直接に制御することができ、その結果、反復ごとのレベルでベクトル化の程度を動的に調整することができる。
1つの実施形態では、ベクトルループの各反復の開始時に、実行回路は、デフォルトレベルのベクトル化の使用に戻るようになっている。そのため、使用されるベクトル化のレベルにおける任意の縮小がベクトルループの各開始時にリセットされ、それにより、ベクトル化の完全なデフォルトレベルを可能な限り使用することができる。
アドレスハザード状態の存在下で処理されるべきアクティブ要素の第2の数を特定できる方法は多く存在する。1つの実施形態において、チェック命令を実行する際に実行回路によって生成される制御出力は、アクティブ要素の第2の数を形成するアクティブ要素を特定するガード述語を含む。
チェック命令を実行する際に行われるチェック動作の性質は、実施形態に応じて変化し得る。1つの実施形態において、チェック命令は、複数のアクティブアドレス要素を含む少なくとも1つのベクトルオペランドを定め、また、実行回路は、チェック命令の実行時に、それぞれのアクティブアドレス要素とそれぞれの他のアクティブアドレス要素とを比較して、アドレスハザード状態が存在するかどうかを決定するようになっている。
別の実施形態において、チェック命令は、連続するアドレスの第1のシーケンスと関連する第1のアドレスと、連続するアドレスの第2のシーケンスと関連する第2のアドレスとを定めてもよく、また、実行回路は、チェック命令の実行時に、第1のアドレスと第2のアドレスとの間の差に応じてアドレスハザード状態の存在を決定するようになっている。
そのような手法は、アドレス競合を引き起こし得るアドレスの関連するベクトルがそれぞれ連続するアドレスのシーケンスを定める状況で必要な比較を行うための効率的なメカニズムを提供することができる。
計算された差に基づいてアドレスハザード状態の存在を検出できる方法は多く存在する。 例えば、1つの実施形態では、第1のアドレスをx、第2のアドレスをzとすると、差z−xがベクトル長以上であるか或いは負又は0である場合、アドレスハザード状態が存在しないようにすることができる。しかしながら、差z−xがベクトル長よりも小さく0よりも大きい場合には、アドレスハザード状態が生じる。
別の実施形態では、代わりに、第1のアドレスと第2のアドレスとの間の絶対差がベクトル長以上ではない状況を検出するべくチェックを行うことが決定されてもよい。絶対差がベクトル長よりも小さい場合、このことはアドレスハザード状態の存在を示すことができる。しかしながら、z−xの計算の符号付きの整数結果がベクトル長より小さいとともに負又は0に等しいときには実際には競合状態が存在しないため、絶対差に基づくチェックが幾つかの誤検出をもたらす場合があることに留意すべきである。
1つの実施形態において、チェック命令は、実行回路に必要なチェック動作を行わせてベクトルループ反復の残りの処理に直接に影響を及ぼすために必要な結果データを生成させるようになっていてもよいが、別の実施形態では、チェック動作と他の動作とを組み合わせることによって更なる性能向上を得ることができる。例えば、1つの実施形態では、チェック命令がチェック・メモリアクセス命令であり、実行回路は、チェック・メモリアクセス命令の実行に応答してチェック動作を実行し、複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定する一方で、複数のメモリアドレスに関してメモリアクセス動作も行う。
メモリアクセス動作は様々な形態を成すことができる。例えば、メモリアクセス動作は、チェック・メモリアクセス命令によって定められる複数のメモリアドレスを使用してメモリからデータを検索するために使用されるギャザー動作の形態を成すことができる。チェック命令の機能性をメモリアクセス命令とマージすることにより、チェック動作のレイテンシを隠すことができる。また、ある場合には、メモリアクセス動作を行うために必要な処理の一部をチェック動作のために再使用できることも分かる。
チェック動作及びメモリアクセス動作を単一の命令に組み合わせることによって、更なる利点を得ることもできる。例えば、実行回路は、アドレスハザード状態の存在を決定する際に、メモリアクセス動作の任意の残りの部分を終了するようになっていてもよい。したがって、これは、アドレスハザードチェック結果に応じたメモリアクセス動作の幾つかの部分の早期終了を可能にする。そのため、これは、不必要な動作の実行を避けることができ、したがって装置の全体的な効率を向上させることができる。
1つの実施形態において、処理回路は、チェック命令の実行時にチェック動作を行うための専用のチェック回路を備えてもよい。しかしながら、別の実施形態では、そのような専用のチェック回路を設ける必要がない場合があり、代わりに、データ処理動作を実行するために設けられる処理回路内の既存の処理ユニットを再使用して、チェック命令の実行時に必要なチェック動作を行ってもよい。
1つのそのような実施形態では、チェック動作の実行中に必要とされる1つ以上のアドレス比較をマージするために処理ユニット内の回転子回路及び比較器回路が使用される。したがって、処理ユニット内の既存のハードウェアを使用して、チェック動作を行う際に必要なアドレス比較の性能の効率を向上させることができる。
前述したように、幾つかの実施形態では、チェック動作の結果を使用して、ベクトルループ内の1つ以上のその後の命令を実行する際に実行回路によって参照される状態フラグを直接に更新することができる。しかしながら、別の実施形態では、装置がハザードチェック状態レジスタを更に備えていてもよく、実行回路は、チェック命令の実行によって生成される結果データをこのハザードチェック状態レジスタに記憶するようになっている。これは、例えば、命令符号化空間が非常に限られている状況において幾つかの利点をもたらすことができる。例えば、そのような状況では、例えばチェック・メモリアクセス命令の先の例のように、単一の命令を介してチェック動作と他の動作とを組み合わせることが決定されてもよい。このとき、チェック動作が必要でなかった状況ではチェック動作の結果の使用を無視することができる。特に、そのようなシナリオでは、ハザードチェック状態レジスタが結果に伴って更新されるが、その後の命令はハザードチェック状態レジスタを参照せず、したがって、命令の実行は特定のメモリアクセス動作を効果的に行うことができる。したがって、これにより、必要に応じて、単一の命令は、標準的なメモリアクセス動作、又は、関連するアドレス競合チェックを伴うメモリアクセス動作を行うようになることができる。アドレス競合検出を使用することが望まれた状況では、例えば、その後の命令は、ハザードチェック状態スレジスタの内容を読み出して、状態フラグを適切に設定するようになることができ、その後、前述したように分岐命令を実行することができ、この場合、制御フローは、状態フラグがどのように設定されたか、したがって、アドレスハザード状態が検出されたか否かに依存する。他の実施形態では、チェック・メモリアクセス命令が状態フラグを直接に設定することができる。
1つの実施形態では、各ベクトルオペランドがN個の要素を含み、また、N個のアクティブ要素は、実行回路が前記アドレスハザード状態の不在を決定するチェック命令の実行に応答してベクトルループを実施するべく命令のシーケンスを実行する際にN個の要素を並列に処理するようにベクトル化のデフォルトレベルに関連付けられる。したがって、そのような実施形態では、それぞれの定められたベクトルオペランドの全ての要素がアクティブ要素であると見なされて適切な処理を受ける。
しかしながら、別の実施形態では、各ベクトルオペランドがN個の要素を含み、マスター述語がN以下の数の要素をアクティブ要素として特定し、また、ベクトル化のデフォルトレベルは、マスター述語によって特定されるアクティブ要素に対応し、それにより、実行回路は、アドレスハザード状態の不在を決定するチェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際にマスター述語によって特定されるアクティブ要素を並列に処理する。したがって、マスター述語の使用により、各ベクトルオペランド内の定められた要素のサブセットをベクトルループ反復内で処理されるべきアクティブ要素として特定することができる。
幾つかの実施形態では、チェック命令の複数の異なる変形が提供されてもよい。例えば、1つ変形は、アドレスハザード状態が検出されるときにはいつでも1つ以上のフラグをセットするが、どのアドレス要素がアドレスハザードを引き起こしているかについての情報を捉えないようになっていてもよく、一方、他の変形は、アドレス衝突が検出された入力ベクトルの要素内の場所にその値が依存する、ガード述語を生成するようになっていてもよい。本発明者らは、実際に検出されるアドレス衝突の統計的性質に応じて、チェック命令の様々な変形により異なるレベルの性能向上を達成できることを理解した。1つの実施形態において、装置は、命令のシーケンスを実行するときに検出されるアドレスハザード状態に関する情報を維持するようになっていてもよく、この場合、その情報は、経時的なコードの再コンパイルを可能にするべくコンパイラに利用できるようにされる。
特に、1つの実施形態において、装置は、先に実行された命令シーケンスに関するアドレスハザード状態の発生に関連する履歴データを維持するためのカウンタ回路を更に備え、また、実行回路は、複数の異なるタイプのチェック命令を含む命令セットの制御下で動作するようになっている。その後、履歴データをコンパイラが利用できるようにすることにより、コンパイラは、履歴データを考慮に入れてベクトルループ内でどのタイプのチェック命令を使用すべきかを決定することができる。
コンパイラは、静的コンパイラであってもよく、又は、履歴データに応じて実行される命令シーケンスを動的に変更するためにランタイム時に使用される動的コンパイラであってもよい。
履歴データは様々な形態を成すことができる。例えば、1つの実施形態において、履歴データは、所定の期間にわたってアドレスハザード状態の発生をカウントするだけでもよい。別の実施形態において、履歴データは、これに加えて又は代えて、各ベクトル長内で検出されるアドレス競合の数を捉えようとしてもよい。性能を最も向上させるために使用されるチェック命令のタイプが、検出されるアドレス衝突の総数に依存するだけでなく、それらのアドレス衝突が特定のベクトル長内でクラスタリングされるのか或いはベクトルループの反復内でより均一に分配されるのかどうかにも依存して変化し得ることが分かってきた。アドレス衝突の総数及びそれらのアドレス衝突がベクトル長グループ内でどのようにクラスタリングされるのかに関する情報の両方を捉える履歴データを維持することにより、これは、チェック命令の異なる変形を使用して性能を向上させる最良の方法を決定するための適切な情報をコンパイラに与えることができる。
ここで、図面を参照して特定の実施形態を説明する。
前述したように、性能に関してベクトル化が望まれる多くの現実のプログラムでは、スカラーコードにおいて軽微ではない大きさのアドレス依存性が反復間に存在し得る。説明のために、多くの使用ケースが考慮される。最初の使用ケースとして、以下の演算を実行することが望ましいヒストグラム問題が考慮される。
for(x=0;x<SIZE;x++){
A[C[x]]++;
本質的に、演算は、xの一連の値に関して、アドレスを形成するために使用されるようになっている配列Cからデータを取得して、そのアドレスでデータ値Aにアクセスした後、そのデータ値を1だけインクリメントすることを伴う。
競合状態が存在しない(すなわち、アドレス競合がない)ことを保証できる場合には、臨界ループのためのベクトル擬似コードが以下のように表されてもよい。
・オフセットxの配列CからベクトルレジスタzCへの連続読み取りを実行する
・zCのポインタを使用して配列Aから収集し、結果をベクトルレジスタzAに書き込む
・zAの全ての要素に#1を加える
・zCのポインタを使用してベクトルzAを分散する
・ベクトル長だけxをインクリメントする
・xが配列のサイズより小さいかどうかをチェックし、それが当てはまる場合には反復処理を続ける
したがって、ポインタのベクトルは、配列Cから得られて、ベクトルレジスタzCに記憶され、その後、ベクトルレジスタzCの様々なポインタを使用して配列Aからのデータ値が集められる。レジスタzCのポインタを使用して配列Aから得られたデータ値がベクトルレジスタzAにポピュレートされた時点で、数値1が全てのデータ値に加えられ、結果として得られるデータ値がレジスタzCの同じポインタを使用して元のメモリに分散される。このプロセスは、xがもはや演算のために定められる配列のサイズより小さくならなくなるまで繰り返される。
ヒストグラム演算をベクトル化することによってこれが性能を大きく高め得ることが分かる。しかしながら、配列C内の幾つかのエントリが同じアドレス要素を参照する可能性があるとともに、そのようなアドレス衝突がインデックスの単一のベクトル(すなわち、ベクトルループの1回の反復で使用されるアドレスのベクトル)にたまたま存在する場合、前述の手法は、不正確な結果(特に、1つ以上のデータ値が正しい量だけインクリメントされない場合がある)をもたらす。記載された実施形態に関連して以下で更に詳しく説明するように、ベクトル化を完全に避ける代わりに(低性能につながる)、記載された技術は、前述の競合状態をランタイム時に検出できるようにするベクトルループ内のチェック命令を使用し、また、適切な措置がとられる。
2番目の使用ケースとして、以下の演算の実行を必要とするメモリコピー(Memcpy)問題を考慮する。
for(x=0;x<SIZE;x++){
A[x]=B[x];
この演算は、データを1つの配列から他の配列へコピーする。このコードは、通常、ループ内に制御コードがないため、ベクトル化のための良好な候補である。しかしながら、ベクトル化が任意のアドレス競合をもたらすか否か(配列A,Bが重複する場合がある)は不確かであるため、十分なヒントをコンパイラに与えることなくコードを安全にベクトル化することができない。多くの場合、実際にはランタイム時にハザードは存在しないが、コンパイラは、一般に、慎重な手法をとり、曖昧さが存在する場合にはコードをベクトル化せず、それにより、任意の性能向上を犠牲にする。しかしながら、後述するように、本明細書中に記載されるチェック命令の使用を採用することにより、ランタイム時に潜在的なハザードを特定して、適切な是正措置をとることができ、それにより、コンパイル時、コードが実行される際に任意のハザードが発生するか否かが分からないときであっても、ベクトル化の性能向上の利益を享受できる。
記載された実施形態にしたがって与えられるチェック命令を更に詳しく論じる前に、図1を参照して、命令が実行され得る装置について最初に説明する。特に、図1は、1つの実施形態に係るデータ処理装置を示し、この場合、装置により実行されるべき命令は命令キュー100内に配置され、この命令キュー100から命令がデコード回路105に伝えられる。デコード回路は、発行キュー110内に配置される特定の制御情報を生成するために命令をデコードし、そのような制御情報は時としてマイクロ−opsと称される。発行キューは、その後、受けられた命令によって定められる動作が実行されるようにするために、装置の実行回路を形成する関連する処理ユニットに適切な制御情報をディスパッチする。
実行回路は、特定のデータ処理動作を行うための多くの処理ユニットから成る処理回路115と、メモリとベクトルレジスタファイル140との間でいずれかの方向にベクトルオペランドを移動させるために使用されるベクトルロード/ストアユニット(LSU)145とを備えると考えられてもよい。
図1に示される例において、処理回路115は、複数のベクトル処理ユニット120,125,130,135から形成される。したがって、発行キュー110内で特定される浮動小数点演算が処理用の浮動小数点ユニット(FPU)135に転送され、乗算演算及び/又は乗累算演算が乗累算(MAC)ユニット130に伝えられ、及び、標準的な算術演算が算術論理ユニット(ALU)125に伝えられる。アドレスハザード状態が存在するかどうかを決定するために必要なアドレス比較演算を行うべく、以下で更に詳しく論じられるべきチェック命令を実行するために専用チェックユニット120を設けることができる。後述するように、実行されるチェック命令の変形に応じて、必要なアドレス比較演算の結果は、1つ以上のフラグ155を設定させ、及び/又は、述語レジスタファイル150の述語レジスタのうちの1つの述語レジスタ内でガード述語を設定させる。別個の専用のチェックユニットを有する代わりに、処理回路内の既存のユニットのうちの1つを用いて、チェック命令を実行するのに必要な動作を行ってもよい。例えば、後述するように、1つの実施形態では、ALU125を使用して、チェック命令を実行するとともに、それに応じてフラグ155及び/又はガード述語を述語レジスタファイル150内に設定してもよい。
ベクトル処理回路115によって必要とされる様々な入力オペランドは、ベクトルレジスタファイル140内のソースレジスタから読み取られる。加えて、各ユニットによって生成される結果オペランドは、一般に、ベクトルレジスタファイル140内の元の宛先レジスタに記憶される。オペランドデータがメモリからベクトルレジスタファイル140の定められたレジスタにロードされるようにするために、又は、ベクトルレジスタのうちの1つ以上の内容が元のメモリに記憶されるように、ロード・ストア命令を使用して、対応するロード・ストア動作がLSU145によって行われるようにする。
多くのシステムレジスタ160が設けられてもよく、データ処理装置の動作を制御するためにシステムレジスタ160の内容が使用される。以下で更に詳しく説明されるように、1つの実施形態では、フラグ155を直接に設定する代わりに、処理回路により実行される1つ以上のその後の命令によるその後の参照のために、チェック動作の結果がハザードチェック状態レジスタ(HCSR)165内に記憶されてもよい。
以下で更に詳しく論じられるように、装置内でベクトル演算を行う際に検出されるアドレス衝突の数に関する履歴データを維持するために1つ以上のアドレス衝突統計カウンタ170が設けられてもよい。装置に利用可能な命令セットがチェック命令の多くの異なる変形を含む状況では、アドレス衝突に関する適切な統計カウンタを維持することで、これにより、チェック命令のどの変形がより良い性能向上を与える可能性が最も高いのかをコンパイラコードが評価することができ、それにより、コードの再コンパイルが統計カウンタにより維持される履歴データを考慮に入れることができることが分かってきた。これについては、図8及び図9に関連して後述する。
以下に説明される実施形態によれば、図1の装置は、ベクトルループを反復的に実行するようになっていてもよく、また、各反復中に、実行回路は、命令のシーケンスを実行してベクトルループを実施するようになっており、この場合、そのシーケンスは、アドレスハザード状態の存在に関してチェックされるべき複数のメモリアドレスを特定するチェック命令を含む。記載された実施形態によれば、チェック命令の多くの異なる変形が想定される。第1の変形は以下の通りである。
変形1:CHECK Pg,Zn.<T> //flag−setting only
入力オペランドZnは、アドレス要素のベクトルを含むベクトルレジスタを特定する。オペランドPgは、ベクトルオペランドZn内のアドレス要素のいずれがアクティブアドレス要素であるかを特定するために使用されるマスター述語を含む述語レジスタを特定する。アドレス要素は、直接にアドレスを特定してもよく、或いは代わりに、アドレス自体を特定するためにベースアドレスと組み合わされるポインタ/オフセットであってもよい。1つの実施形態において、そのようなマスター述語の指定は任意であってもよく、また、定められたマスター述語が存在しない場合には、ベクトルオペランドZn内の全てのアドレス要素がアクティブアドレス要素であると想定される。最後に、パラメータTは、例えば32ビットデータ、64ビットデータなどのデータタイプを特定する。したがって、これにより、ベクトルオペランド内の各要素のサイズが特定される。チェック命令の実行時に、処理回路115は、アドレス要素のいずれかが同じであるかどうかを決定するために各アクティブアドレス要素とそれぞれの他のアクティブアドレス要素とを比較するとともに、そのような状況を検出する際に、アドレスハザード状態の存在を示す出力を生成する。前述の変形1によれば、出力により、アドレスハザード状態の有無を示す1つ以上の状態フラグ155が設定される。
ここで、図2を参照して、ヒストグラム問題の前述した最初の使用ケースを考慮する際の変形1のチェック命令の使用について更に詳しく説明する。ステップ200では、オフセットxが初期化され、その後、ステップ205において、一連のポインタ(アドレス要素)がオフセットxを用いてベクトルレジスタzCにロードされる。オフセットxを用いてステップ205で行われる連続アドレスロードは、必要に応じてマスター述語情報を考慮に入れることができる。その後、ステップ210において、レジスタzCにロードされたポインタは、前述のチェック命令の実行によってアドレス衝突に関してチェックされ、それに応じてフラグ155が設定される。マスター述語が定められる場合には、任意の非アクティブアドレス要素を排除するためにチェック動作がマスター述語によって制約される。
その後、ステップ215では、フラグがアドレス衝突の存在を示すかどうかが決定される。そうでない場合、このことは、ベクトルレジスタzC内の全てのアクティブアドレス要素が一意的なものであることを示し、したがって、ベクトルループの現在の反復に関してベクトル化のデフォルトレベルを採用することができる。説明のために、8個のアクティブアドレス要素A、B、C、D、E、F、G、Hが存在するものとし、したがって、ベクトル化のデフォルトレベルを採用すると、8個のアドレスの全てが並列に処理される。
したがって、チェック動作の実行によって任意のアドレス衝突の不存在が検出される場合には、プロセスがステップ220に進み、ステップ220では、ベクトルオペランドレジスタzCの全てのアドレスポインタを使用してメモリからデータが収集され、その場合、結果として得られるデータがベクトルレジスタzAに書き込まれる。その後、ステップ225では、ロードされたデータに関して必要な1つのベクトル演算又は複数のベクトル演算が行われ、その結果が元のベクトルレジスタzAに書き込まれる。先のヒストグラム問題を考慮すると、このステップで必要とされるのは、レジスタzAにロードされた各データ値に1を加えることだけであるが、他のタイプの演算のために、1つ以上の異なるベクトル演算を代わりにステップ225で行うことができるのが分かる。望まれる場合には、並列処理の非アクティブレーンに関連するデータを処理しないようにステップ225を制約することができる。例えば、非アクティブレーンと関連する任意の例外の想定し得る発生を回避するためにベクトル演算を行うときにマスター述語を考慮することは有益となり得る。
その後、ステップ230において、ベクトルレジスタzA内のデータは、オペランドレジスタzCの同じアドレスポインタを使用して元のメモリに分散される。マスター述語が定められた場合には、マスター述語によって分散動作が制約される。
この時点で、ベクトルループ反復がデータの8個のレーンを並列に処理し、したがって、8個のアドレスが考慮されたことが分かる。したがって、ステップ235では、オフセットxがベクトル長だけインクリメントされ、その後、ステップ240では、処理すべき任意の更なるデータがあるかどうかが決定される。そうでない場合、プロセスはステップ245で終了するが、処理すべき更なるデータがあるとすると、プロセスは、ステップ205に戻って、ベクトルループの次の反復を行う。
ステップ215において状態フラグがアドレス衝突を示すと決定されれば、図2に記載される実施形態にしたがい、図2の右側に示される一連のステップにより実施されるフォールバックパスに分岐することによって低レベルのベクトル化が使用される。単なる一例として、8個のアドレス要素のシーケンスがA、B、C、D、E、F、C、Hであり、したがって、アドレス要素Cの2つの発生に起因してアドレス競合が存在すると仮定する。この状況では、チェック命令の後に状態分岐命令を実行することによってプロセスをフォールバックパスに分岐させることができ、この場合、分岐命令は、チェック命令の実行によって設定されるフラグがアドレスハザード状態の存在を示す場合にフォールバックパスに分岐する。
ステップ250では、処理のための単一のレーンのみを特定するために述語が初期化される。そのため、最初の反復において、その述語は、ベクトル化のデフォルトレベルにしたがって8個の処理レーンが存在すると仮定すると、「10000000」の値に初期化され得る。その後、ステップ255では、最初の反復において、オペランドレジスタzCから1つのポインタを選択するために述語が使用され、これはアドレスAに対応するポインタを特定する。その後、ステップ260において、そのアドレスによって特定されるスカラーデータ要素がロードされて、必要なベクトル演算(先のヒストグラム問題を考えると、値を1だけインクリメントするなど)が行われ、その後、特定されたポインタを使用して結果が元のメモリに記憶される。
その後、ステップ265では、処理すべき任意の更なるアクティブレーンがあるかどうかが決定され、アクティブレーンの数は定められた任意のマスター述語に依存する。処理すべき更なるアクティブレーンがあると仮定すると、プロセスはステップ270に進み、この場合、述語は、定められた任意のマスター述語を考慮する次のアクティブレーンを特定するように調整される。その後、処理はステップ255に戻る。単なる一例として、マスター述語がアクティブ要素を含むものとして8個の全てのレーンを特定する場合又はマスター述語が定められない場合には、引き続いてそれぞれのアドレス要素ごとにステップ255,260,265のプロセスが8回繰り返され、その後、ステップ265において、処理すべき更なるアクティブレーンが存在しないと決定されるのが分かる。この時点で、処理は、全ベクトルパスに戻り、特に、ステップ235に戻り、このステップでは、オフセットxがベクトル長だけインクリメントされる。この時点では、ベクトルレジスタzC内の全てのアクティブアドレス要素が図2の右側に示されるステップの反復実行により処理されてしまっているため、オフセットxをベクトル長だけインクリメントすることが適切である。その後、プロセスは、ステップ240を介して次のベクトルループ反復に進むことができる。
変形例1のチェック命令によれば、ステップ210が行われる際に、アドレス比較プロセスが幾つかの状況で早期に終了し得るのが分かる。特に、アドレス衝突が検出されると直ぐに、フラグをそれに応じて設定することができ、また、任意の更なるアドレス衝突が存在するかどうかを決定するために任意の更なるアドレス比較を行う必要がない。これにより、非常に効率的なチェックプロセスをもたらすことができる。
更に、フォールバックパスが非常に効率的な態様で実施されるのが分かる。特に、必要なデータがスカラー態様でロードされるが、必要なアドレスの全てがベクトルレジスタzC内で利用できるため、任意のスカラー演算を行って必要なアドレスにロードする必要はなく、また、ステップ250,270に関連して前述した述語を使用して調整することにより、処理されるべき各アクティブアドレス要素を、それらのアドレス要素に関して任意の更なるロード動作を行うことなく順々に特定することができる。
図2のプロセスを様々な方法で実施できることが分かる。しかしながら、完全を期すべく、以下のコードシーケンスは、図2のプロセスを実行するために使用することができる1つの実施例を示す。
mov x1,#0
dup z2.s,#1
pfirst p1.b,p0,p1.b
whilelt p0.s,x1,SIZE
.LloopA:
ld1w z0.s,p0/z,[xC,x1,lsl #2] //Contiguous load into z0
check p0,z0.s
b.ne .Lfallback //Fallback sequence used when
//check fails
ld1w z1.s,p0/z,[x0,z0.s,uxtw] //Gather using z0
add z1.s,p0/z,z1.s,z2.s //Predicated addition
st1w z1.s,p0,[x0,z0.s,uxtw] //Scatter using z0
.Llabel1:
incw x1,ALL //Advance by number of vector
//elements processed
whilelt p0.s,x1,SIZE //Check array limits and trim
//predicate
b.first .LloopA
……
……
.Lfallback:
pfirst p1.b,p0,p1.b
.LfallbackLoop:
lastb x2,p1,z0.s
ldr x3,[x2]
add x3,x3,#1
str x3,[x2]
pnext p1.s,p0,p1.s
b.any .LfallbackLoop
b .Llabel1
チェック命令の第1の変形によれば、アドレス競合の任意の発生により、関連する1又は複数のフラグがセットされ、また、処理がフォールバックパスに分岐するために、この場合、現在のベクトルループ反復が実際にスカラー演算の反復シーケンスによって実施される。 別の実施形態によれば、チェック命令は、単にフラグを設定するだけでなく、更に推し進めることができ、特に、ガード述語を設定して、どのアドレスが競合を引き起こしているのかを正確に特定することができる。図3に関連して後述するように、これはチェック動作の実施に対して幾つかの付加典型的吸着なステップを導入するが、それにより、フォールバックパスを短いベクトル長に作用するベクトル演算の反復実行によって実装することができ、そのため、フォールバックパスをより速く実装できる。したがって、1つの実施形態では、チェック命令の第2の変形が以下の通りである。
変形2:CHECK Pd.<T>,Pg/Z,Zn.<T>//flag−setting with predicate
//generation
この変形において、オペランドZnは、チェック動作が行われるようになっているアドレス要素のベクトルを再び特定し、この場合、タイプ情報Tがそのベクトル内の各要素のサイズを特定する。加えて、変数Pdは、第1のアドレス衝突が発生する要素を含めてこの要素に至るまで要素の第1のセットに属するアクティブ要素を示すべくガード述語情報が記憶されるようになっている結果述語を特定する。この場合も先と同様に、タイプ情報Tは、述語情報の各項目によって管理される各アドレス要素のサイズを特定するために使用される。変形1と同様に、マスター述語は、述語レジスタPgを介して、この例では、結果述語内でマスター述語によって示されるような任意の非アクティブレーンがゼロにされるべきであることを示す「/Z」を介して特定され得る。これは、結果述語が単なるマスター述語のサブセットにしかなり得ないようにする。
図3は、図2に関連して前述した動作と同等の動作を実行するためにベクトルループの各反復を実施するべく行われ得る一連のステップを示すフロー図である。ステップ300,305は、図2のステップ200,205に対応し、したがって、結果として、ベクトルレジスタzCにはオフセットxを使用してメモリから検索される一連のデータ項目がポピュレートされ、この場合、それらのデータ項目のそれぞれがアドレス要素を形成する。ステップ310において、チェック命令の変形2の実行に応じたチェック動作の実行により、ベクトルレジスタzCの各ポインタは、アドレス衝突、それに応じて設定されるべきフラグ、及び、更には、第1の衝突が発生する要素を含めてこの要素に至るまで要素の第1のセットに属するアクティブアドレス要素を示すべく設定されるべきガード述語に関してチェックされる。前述のように、ガード述語を設定する場合には、これがマスター述語によって制約され、したがって、アドレス衝突は、マスター述語によって示されるような非アクティブレーンと関連する任意のアドレス要素に関して見出されない。
その後、プロセスはステップ315に進み、このステップ315では、ベクトルオペランドzCのポインタを使用してデータが収集され、その結果がベクトルレジスタzAに書き込まれる。
ステップ320では、アドレス衝突が見出されたかどうかを示すためにフラグが評価される。そうでない場合、プロセスは、図2のステップ225,230,235,240に対応するステップ325,330,335,340に進む。図2のステップ225と同様に、図3のステップ325中、ベクトル演算は、マスター述語が定められたと仮定すると、マスター述語によって示されるように並列処理のアクティブレーン内にあると見なされるロードされたデータに関してのみ実行されるように制約されてもよい。
ステップ320においてフラグがアドレス衝突の存在を示すと決定される場合、プロセスは、分岐命令の実行により、例えば図2に関連して前述したメカニズムと同じメカニズムを使用してフォールバックパスに分岐する。説明の便宜上、図2に関連して前述した特定の例で見出されたように図3の動作を実行するときに同じアドレス衝突が見出され、そのため、アドレス要素Cが並列処理の第3及び第7のレーンで見出されると仮定する。したがって、プロセスがステップ350に進み、このステップでは、主述語がマスター述語のコピーになるように初期化される。以下の説明の目的のため、マスター述語がp0であり、ガード述語がp1であるとともに、主述語がp2であると仮定する。以下で更に詳しく論じられるように、主述語が作成される理由は、フォールバックパスの各反復中に主述語値が更新されるためであり、また、他の目的のために維持される必要があるマスター述語の値を破損させることが望ましくないからである。
その後、プロセスはステップ355に進み、このステップでは、ベクトル演算がロードされたデータ要素に関して実行され、その結果がレジスタzAに書き込まれる。随意的に、ステップ355の実行は、任意の不要なデータ処理動作が実行されることを避けるべくガード述語を考慮して制約される。しかしながら、他の実施形態では、ベクトル処理回路が配置される態様に起因して、並列処理の全てのレーンに関して演算を実行し、その後、ガード述語を考慮して必要とされない結果を廃棄することも同様に効率的であり得る。
ステップ360では、ガード述語によって特定されるデータ要素に関し、それらのデータ要素がベクトルレジスタzCの関連するポインタを使用して元のメモリに分散される。その後、ステップ365において、処理されたレーンに対応する主述語内の領域がクリアされ、それにより、更新された主述語p2がもたらされる。その後、プロセスはステップ370に進み、このステップでは、処理すべき任意の残りのレーンがあるかどうかが決定される。そうでなければ、処理は全ベクトルパスに戻ることができ、特にプロセスはステップ335に分岐することができる。しかしながら、処理すべきレーンが残っていると仮定すると、次のガード述語を生成するために主述語によって制約されるベクトルオペランドzCのポインタをチェックするべく更なるチェック動作が実行される。例示目的でマスター述語が全ての8個のレーンをアクティブであると見なすとともに、アドレス競合が図3に示されるようになっている、すなわち、アドレス要素がA、B、C、D、E、F、C、Hであると仮定すると、最初のガード述語は「11100000」になる。ステップ355,360,365を通じた第1の反復の後、主述語は「00011111」になるように更新され、したがって、チェックプロセスが新たな主述語によって制約されるステップ375を実行する際には、更なるアドレス競合が見出されないため、これが更新されたガード述語「00011111」を生成する。
ステップ375に続いて、その後、ステップ380では、zCのポインタを使用してデータが収集され、その結果がレジスタzAに書き込まれる。ステップ360で行われる分散動作は必要とされるデータ項目のうちの1つ以上の値を潜在的に変更してしまっているため、ステップ380でデータを再収集する必要があり、したがって、ステップ315において既に収集されてしまったデータに依存することは適切でない。その後、プロセスはステップ355に戻り、このステップでは、フォールバックパスの次の反復が実行される。
以下の文章は、図3のプロセス内で使用される様々な述語の具体的な形態例を説明する。 例示目的で、マスター述語が「11111100」の形態を有すると仮定すると、ベクトル化のデフォルトレベルにしたがって並列処理の8個のレーンがあると想定される。このことは、最後の2つのレーンを除く全てのレーンがアクティブ要素を含むことを特定する。ステップ310においてアドレス競合チェックを行う際には、これが「11100000」の形態の初期ガード述語の生成をもたらすと仮定される。アドレス衝突の存在がステップ320で検出されるとともに、プロセスがフォールバックパスに分岐し、その場合、主述語p2は、マスター述語と等しくなるように初期化され、したがって値「11111100」をとる。フォールバックパスの最初の反復中、ステップ360で分散動作が実行された後、主述語は、ステップ365で更新されて、新たな形態「00011100」をとる、すなわち、処理された最初の3つのレーンをフォールバックパスの最初の反復の結果として無視する。
更なるチェックがステップ375で行われた後、これにより、更新されたガード述語がもたらされる。例示目的で、第5のレーンと第6のレーンとの間で他のアドレス競合が特定され、したがって、ガード述語p1が「00011000」となるように更新されると仮定する。
フォールバックパスの第2の反復中、ステップ360における分散動作に続いて、主述語がステップ365で更新されて「00000100」の形態をとる。残りのアクティブアドレス要素が1つしか存在しないため、ステップ375でその後に実行されるチェックは公称チェックであり、したがって、結果として得られるガード述語は「00000100」の形態を有する。結果として、フォールバックパスの最終反復は、事実上、スカラー反復であり、その後、処理は、次のベクトルループ反復を開始するべく全ベクトルパスに戻る。
図3のプロセスを様々な方法で実施できることは分かるが、図3のプロセスを実施するためのコードシーケンスの一例は以下の通りである。
mov x1,#0
dup z2.s,#1
pfirst p1.b,p0,p1.b
whilelt p0.s,x1,SIZE
.LloopA:
ld1w z0.s,p0/z,[xC,x1,lsl #2] //Contiguous load into z0
check p1.s,p0/z,z0.s
ld1w z1.s,p0/z,[x0,z0.s,uxtw] //Gather using z0
b.ne .Lfallback //Fallback sequence used when
//check fails
add z1.s,p0/z,z1.s,z2.s //Predicated addition
st1w z1.s,p0,[x0,z0.s,uxtw] //Scatter using z0
.Llabel1:
incw x1,ALL //Advance by the number of vector
//elements processed
whilelt p0.s,x1,SIZE //Check array limits and trim
//predicate
b.first .LloopA
……
……
.Lfallback:
mov p2,p0
.LfallbackLoop:
add z1.s,p1/z,z1.s,z2.s //Predicated addition
st1w z1.s,p1,[x0,z0.s,uxtw] //Scatter using z0
bics p2.b,p0/z,p2.b,p1.b //Disable group of lanes which
//have already been processed and set flags
b.none .Llabel1
check p1.s,p2/z,z0.s
ld1w z1.s,p1/z,[x0,z0.s,uxtw] //Gather using z0
b .LfallbackLoop
図2及び図3に関連して示される例のいずれも、ベクトルループの各反復において、検出されたアドレスハザード状態の存在下でフォールバックパスに分岐することによってその反復内で使用されるベクトル化のレベルを選択的に低減することができる。しかしながら、別の実施形態では、別個のフォールバックパスを設けることなくベクトルループの反復内の低レベルのベクトル化を用いることができる。図4は、そのような別の実施形態にしたがって実行されるステップを示すフロー図であり、図4では、変形2のチェック命令が実行されてそれに応じてガード述語を生成すると仮定されている。ステップ400,405,410は、図3のステップ300,305,310に対応するが、ステップ410でフラグをセットする必要は全くない。これは、そのようなフラグの状態に応じてデフォルトレベルのベクトル化を続けるべきかどうか或いはフォールバックパスに分岐すべきかどうかを決定するその後の分岐命令が存在しないからである。
代わりに、プロセスはステップ410の後にステップ415に進み、このステップでは、ベクトルレジスタzCのポインタを使用してメモリからデータ値のベクトルが収集され、その場合、その結果がベクトルレジスタzAに書き込まれる。必要に応じて、1つの実施形態では、ステップ410で生成されるガード述語によって収集動作を制約することができる。
その後、プロセスはステップ420に進み、このステップでは、ベクトル演算がロードされたデータに関して実行され、その後、その結果は元の宛先レジスタzAに書き戻される。この場合も先と同様に、必要に応じて、ガード述語を考慮して演算を制約することができ、それにより、それらの演算は、ガード述語によって特定されるアクティブ要素に関してのみ行われる。
その後、プロセスはステップ425に進み、このステップにおいて、ベクトルレジスタzA内のデータは、ベクトルレジスタzCのポインタを使用して分散されるが、ガード述語によって制約される。したがって、分散動作中に元のメモリに書き込まれる唯一の結果データは、ステップ410で実行されたチェック動作に基づいてガード述語がアクティブであると見なされた処理レーンに関連するのが分かる。そのため、アドレス競合状態の不存在が検出される場合、ベクトル化のデフォルトレベルがステップ415,420,425の実行中に使用され、それにより、全てのアクティブレーンが処理されて任意のマスター述語によってのみ制約されるのが分かる。しかしながら、アドレスハザード状態が検出される場合には、ガード述語を考慮して少なくとも分散動作を制約することによってステップ415,420,425中に低レベルのベクトル化が使用され、それにより、マスター述語によって示されるレーンのサブセットのみがアクティブレーンと見なされる。その後、ステップ430において、オフセットxがガード述語カウントだけインクリメントされる。したがって、ガード述語が3つのアクティブレーンのみを伴う場合には、オフセットxが3だけインクリメントされる。一方、アドレス競合状態が検出されない任意の反復において、ガード述語は、処理されるレーンに制約がないことを効果的に特定し、したがって、そのような反復では、オフセットxがステップ430においてベクトル長だけインクリメントされる。
ステップ435では、処理すべき更なるデータが存在するかどうかが決定され、そうであれば、プロセスがステップ405に戻る。ステップ405では、デフォルトレベルのベクトル化又は低レベルのベクトル化が前の反復で使用されたかどうかにかかわらず、プロセスが常に次の反復のためにデフォルトレベルのベクトル化に逆戻りし、したがって、ベクトルレジスタzCにロードされるポインタの数がベクトル長に依存することに留意すべきである。
ステップ435において処理すべき更なるデータが存在しない決定されると、プロセスがステップ440において終了する。
図4の先の説明では、フラグ設定が何ら必要でないにもかかわらず、実行されるチェック命令が本質的に変形例2と同じであると仮定されているが、別の実施形態では、ガード述語を生成せずに現在の反復中に処理されるべきアクティブ要素の数を示す数を出力として生成するチェック命令の他の変形を使用できる。アドレス競合が検出されない場合、その数は、単に法線ベクトル長を示すにすぎず、したがって、反復内の下流側の処理は、演算に関して定められる任意のマスター述語によって以外、制約されない。しかしながら、アドレス競合状態の存在が検出される場合、その数は、現在の反復において処理されるべきアクティブ要素の減少された数、したがって、その反復のために使用されるべき低レベルのベクトル化を特定する。
先の図に関連して論じられたチェック命令の先の変形に加えて、チェック動作と他の動作とを組み合わせる変形をもたらすこともできる。例えば、1つの実施形態では、チェック動作をメモリアクセス動作と組み合わせることができ、それにより、その単一の命令の実行時、前述のチェック動作がいずれも実行されるが、加えて、その命令によって定められる複数のメモリアドレスを考慮して、メモリアクセス動作が行われる。1つの特定の例として、チェック命令の変形は、本明細書中で変形3と称されて以下に示されるハザード認識ギャザー動作を行うようにもたらされ得る。
変形3:LDCHECK Zd.<T>、Pg/Z、[<Xn | SP>、<Zm>.<T>]
この例において、スカラーレジスタXn又はスタックポインタレジスタSPがベースポインタを含むように使用され、また、このとき、ベクトルレジスタZmはオフセットのベクトルを与え、その場合、タイプフィールドTがベクトルレジスタ内の要素のサイズを特定する。ベクトルレジスタZdは、ギャザー動作のための宛先レジスタを特定し、また、タイプフィールドTは、そのベクトルと共に含まれるデータ要素のサイズを特定する。述語レジスタPgを介してマスター述語を定めることができ、また、「/Z」という表記は、等価なレーンがマスター述語によって非アクティブとしてマーキングされている場合に結果ベクトルZd内の任意のデータ要素がゼロにされることを特定する。
そのようなロードチェック命令を実行する際には、アドレス競合のチェックを処理回路115内で行うことができ、一方、LSU145はギャザー動作を行う。チェック動作の実行とギャザー動作とを重なり合わせることにより、これが更なる性能向上を可能にし得る。そのようなシナリオでは、ギャザー動作及びチェック動作が効果的に二重発行され、それにより、差し迫ったアドレス競合に関する情報は、収集を早期に終了して時間を節約することができる。したがって、そのような実施形態では、ハザードチェック結果に基づいてギャザー動作の早期終了をもたらすオプションがあり、それにより、ハザードが検出された時点で、ギャザー動作のその後の段階が実行されない。幾つかの実施形態では、アドレスチェック動作を支援するべくギャザー動作を実行するのに利用できるハードウェアを利用することも可能であり、それにより、特に効率的な実施が行われる。
そのような複合チェック・ギャザー命令を実行する際には、チェック動作の結果を使用して、前述の実施形態のように、競合状態の有無を示すべくCPU状態フラグを設定することができる。しかしながら、もう1つの方法として、チェック結果を使用して、CPUシステム又は図1に関連して前述したHCSRレジスタ165などの状態レジスタを設定することができる。例えば、HCSRレジスタは、アドレス競合に起因してどのロードアクセスが実行されなかったかに関する情報を与えるようになっていてもよく、また、ブール値、例えば「1」のセットの後に連続する「0」が続く値を含む(ここで、「0」は、衝突が検出された最初のレーンの後のレーンで始まる)。チェックが別個の命令のセットによって実行された場合よりも低いコストで状態ビットをチェックするためにコードを別々に追加することができる。
したがって、アドレス競合の存在下で低レベルのベクトル化を実施するために、状態ビットをチェックし、その後に必要に応じて状態フラグを設定するために状態ビットを使用することができる。
そのような手法の更なる利点は、標準ベクトルロード動作を単に実施することが望まれるとき、すなわち、チェックが必要とされない場合に、同じ命令を使用することもできるという点である。特に、その場合、チェックは依然としてロードと並行して行われ、その場合、結果はHCSRレジスタに書き込まれるが、HCSRレジスタの内容をその後に単に無視できるにすぎない。そのような手法は、命令符号化空間が制限される場合、したがって、望ましい場合がある様々な命令の全てを別々に符号化するのに十分な符号化空間を見つけることが困難である場合に非常に有益となり得る。
変形1,2,3のチェック命令の前述した説明では、単一の入力ベクトルオペランドが与えられるが、別の実施形態では、これらの変形のそれぞれを第2の入力ベクトルオペランドを成すように設計することもできる。これは、例えば、任意のメモリ位置の第1のセットからのギャザー動作が存在するとともに、ロードされて処理されるデータ値がその後に任意のメモリ位置の第2のセットに対する分散動作に与えられる場合に有用となり得る。この使用ケースは、例えば、インプレースデータ変換を実行するアルゴリズム内で起こり得る。
様々な記載されたチェック命令を使用する状況を考慮すると、必要なチェック動作の実行に関与するレイテンシが考慮されてもよい。レイテンシは、実行される必要がある比較に関連し、また、図5では、ベクトル長が6であり、したがってベクトル要素0〜5を含むベクトルに関して様々な比較が強調表示される。ライン500によって示されるように、ベクトル要素5は、ベクトル要素4,3,2,1,0のそれぞれと比較される必要がある。同様に、ライン505によって示されるように、ベクトル要素4は、ベクトル要素3,2,1,0と比較される必要がある。更に、ベクトル要素3は、ライン510によって示されるようにベクトル要素2,1,0と比較される必要があり、一方、ベクトル要素2は、ライン515によって示されるようにベクトル要素1,0と比較される必要がある。最後に、ベクトル要素1は、ライン520によって示されるようにベクトル要素0と比較される必要がある。図5の破線は、比較をどのようにグループ化できるかを示している。所定のベクトル長VLに関して、実行されなければならない比較の数は、(VL−1)×(VL)/2である。したがって、図5に概略的に示されるように、ベクトル長が6の場合、15回の比較が必要である。
しかしながら、変形1のチェック命令の実行と変形2のチェック命令の実行との間にはレイテンシに差がある。特に、変形1を考慮すると、現代のCPU内で既存のデータパスの大部分を使用することができる。特に、図6に示されるように、回転子550を使用して入力の一方を比較器560に供給することができ、その場合、他方の入力はソースベクトルオペランドからくる。そのような手法は、図5にマーキングされるグループ分けを効率的に組み立てて「コンパクトにする」又は「折り畳む」。これは、通常、データがCPU内の整数実行パイプラインに供給されるときに飛行中に実行され得る順列のうちの1つである。この回転子を使用すると、比較的軽量の実装がVL/2に比例するレイテンシを与えることができる。図6に示されるように、このとき、比較器からの出力を使用して、CPU状態フラグ570を設定することができる。前述したチェック命令の変形2は、比較の順序が重要であるため、より高いレイテンシを有し、したがって、ベクトルの各サブセクションをスキャンする必要がある。
処理中のアドレスのベクトルが連続したアドレスに関連する状況に関しては、チェック命令の付加的な変形を作成することができる。特に、「使用ケース2」として前述したメモリコピーシナリオなどの連続するメモリ位置にアクセスする使用ケースにおいて、そのような命令は、必要なアドレス競合チェックを行うためのより効率的なメカニズムを与えることによって有用となり得る。特に、メモリアクセスが連続しているため、チェック命令を実質的に単純化することができる。これは、データが連続するソースアドレス600のベクトルからコピーされるメモリコピー動作を考慮する際に図7Aに示され、この場合、そのデータは、連続する宛先アドレス610のベクトルに書き込まれる。各ベクトルにおける要素の数とそれらの要素のサイズとに依存するベクトル長を知ることにより、スカラーオペランドのみを使用して必要なアドレス競合チェックを行うことができる。特に、チェック命令は、ソースベクトルからのアドレス要素のうちの1つと、宛先ベクトルからの対応するアドレス要素とを特定することができ、1つの実施形態では、第1の要素x,zがチェック動作のために選択されたアドレス要素であると仮定する。ステップ620に示されるように、これらの2つのスカラーアドレス要素が設けられると、チェック動作は、その後、差z−xがベクトル長以上であるか或いは負又は0であるかどうかを決定することができる。そうであれば、ソースアドレス600のベクトルからデータをコピーした後にそのデータを宛先アドレスのベクトル610に書き込むときにアドレス競合が存在しないようにすることができる。しかしながら、差z−xがベクトル長よりも小さく0よりも大きい場合には、アドレス競合が生じる。
ステップ630では、CPU状態フラグを比較の結果に応じて設定して、差z−xがベクトル長よりも小さく0よりも大きい場合にアドレス衝突を特定することができる。
別の実施形態では、実装上の理由から、ステップ620において異なるチェックを実行することが決定されてもよく、また、特に、入力として与えられる2つのスカラーアドレス値間の絶対差がベクトル長さ以上でない状況を検出するべくチェックを実行することが決定されてもよい。絶対差がベクトル長よりも小さい場合には、これが競合の存在を示すことができ、また、それに応じてステップ630において状態フラグを設定することができる。しかしながら、図7Aのステップ620に関連して前述した先の不等式から、絶対差に基づくチェックが幾つかの誤検出をもたらすのが分かる。これは、計算z−xの符号付きの整数結果がベクトル長さよりも小さいとともに負又は0に等しいときに実際に競合条件が存在しないからである。
チェック命令の変形を生成して図7Aで説明したチェックを実行することができ、また、以下の変形4,5は、変形1,2のそれぞれの代わりに与えられるチェック命令のそのような変形である。
変形4:CHECK<T>Pg,Xn,Xm //flag−setting only
変形5:CHECK<T>Pd.<T>,Pg/Z,Xn,Xm //flag−setting with predicate
//generation.
変形4に示されるように、2つのスカラー入力値Xn,Xmが与えられ、これらは、アドレス要素x,zをそれぞれ含むレジスタを特定する。必要に応じて、マスター述語を与えて、アクティブレーンの数を特定することができ、また、データ要素サイズを特定するためにタイプ情報Tが使用され、それにより、ベクトル長VLを計算することができる。述語情報は、有効ベクトル長を計算するときにも使用できる。例えば、図7の例において最後の2つのデータ要素レーンが排除される場合には、有効ベクトル長がアドレス要素サイズの8倍ではなく、有効ベクトル長がアドレス要素サイズの6倍であり、これは、差z−xが関連するベクトル長以上であるか或いは負又は0であるかどうかを決定する際に考慮され得る。
先の変形5は変形4の述語生成バージョンであり、このバージョンは、競合が検出されなければ、例えば差z−xがベクトル長以上であるか或いは負又は0であれば「真」に設定される各アクティブレーンにおける結果を伴う述語を生成する。しかしながら、競合が検出される場合には、差z−xが「y」であると仮定すると、述語は、「真」に設定される「y」個の要素の連続するセットと偽に設定される残りの要素とを伴って生成される。これは、ループのための制御マスクとして使用され得る。
先の述語設定チェックメカニズムは、図7B〜図7Eに一例として示される。図7Bは値の最初のシーケンスを示し、この場合、Aは宛先ポインタであり、Bはソースポインタである。ベクトル長が8である場合、この例では、図7Aのステップ620で実行されるチェックに基づいて競合が検出されるのが分かる。図7Cは、memcpy演算が一連のスカラー演算として行われる場合にメモリの内容がどのようになるのかを示し、したがって、任意のベクトル化された演算形式のために必要な結果を示す。図7Dは、記載された実施形態のチェックメカニズムを採用せずにmemcpy演算がベクトル化された場合に生じるメモリの内容を示す。
最後に、図7Eは、変形5のチェック命令が実行された場合に1つの実施形態で形成されるガード述語を示し、この述語は、各反復中に3つの要素のみが処理されるようにするために使用され、したがって、図7Cに示される結果が得られる。
更に、連続的にロードされている要素がたまたま逆転される場合には特別なチェック命令のための帰結的定義を導き出すことができることに留意すべきである。
図1の装置によって使用するために与えられる命令セットがチェック命令の複数の異なる変形をもたらすときには、コンパイラが多くの対象の作業負荷にとって最良の変形を静的に決定することができない場合がある。前述のチェック命令の異なる変形によって与えられる様々な性能利点をうまく利用するために、前述のアドレス衝突統計カウンタ170を利用することができる。1つの実施形態において、これらのカウンタは、所定のエポックで検出される衝突の総数を特定するためだけでなく、ベクトル内衝突の総数、すなわち、特定のベクトル長内の衝突の数を特定するためにも(或いは代わりに)使用され得る。そのような情報をカウンタ170に記録することで、これにより、ソフトウェアは、アドレスベクトルごとにベクトル内衝突の平均数を推定することができる。その場合、この統計値は、所定の計算作業負荷にとって最良の命令変形を選択するために動的最適化ツール又はインテリジェントなランタイムによって使用され得る。これは、統計カウンタ情報を使用して行われる動的コンパイルプロセスを示す図8のフロー図に関連して一例として示される。
ステップ700において、アドレス衝突統計カウンタは所定のエポック時間にわたって維持される。ステップ705では、所定の時間が経過したかどうかが決定され、そうでない場合、プロセスはステップ700に戻り、このステップでは、装置によって命令シーケンスが実行されるとアドレス衝突カウンタが維持され続ける。所定の時間が経過した時点で、アドレスベクトルごとにベクトル内衝突の平均数を決定するためにアドレス衝突統計カウンタがステップ710で解析される。その後、この情報は、ステップ715で適切なチェック命令を選択するために使用され、その後、その選択されたチェック命令変形は、ステップ720において、任意の関連する命令シーケンス、例えば、図2及び図3の例に関連して前述したフォールバックパス命令と共にコードに挿入される。その後、ステップ725において、ステップ700に戻る前に、カウンタを任意にリセットすることができる。
図9は、そのようなコンパイルプロセスがどのように有用であるのか、特に、異なる変形から得ることができる高速化利点がベクトル内競合を伴うベクトルの割合に応じてどのように異なり得るのかを示すために使用されるグラフである。特に、図9の結果は、発生するベクトル内競合を伴うベクトルの割合に応じた、変形1のチェック命令及び変形2のチェック命令の両方に関するスカラー実装にわたるベクトル化されたコードの潜在的な高速化を示す。変形1に関しては、図2の前述の説明から明らかなように、変形1を採用すると、任意のアドレス衝突によりベクトルループの現在の反復がスカラー演算の反復シーケンスとして実行されるため、単一の曲線750が存在する。しかしながら、変形2の場合、高速化は、特定のベクトル内で検出されるアドレス競合の数に依存する。図9に示される「numparts」値は、現在のベクトルループの反復を実施するために必要な図3のフォールバックパスを通じた反復数を示す。グラフから明らかなように、変形2は、ベクトル内のアドレス衝突の平均回数が少ないとともにベクトル内アドレス衝突の数が増えるにつれ加速が低下する場合に有利である。
なお、ベクトル内に複数の衝突が存在する可能性は、ベクトル長さが増加するにつれて増加し、そのため、より広いベクトルに関しては、変形1のチェック命令がより良くスケーリングし得る。
図10は、使用可能な仮想マシン実装を示す。前述の実施形態は、関連技術をサポートする特定の処理ハードウェアを動作させるための装置及び方法に関して本発明を実施するが、ハードウェアデバイスのいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、通常、仮想マシンプログラム810をサポートするホストオペレーティングシステム820を一般に実行するホストプロセッサ830上で実行する。多くの場合、妥当な速度で実行する仮想マシン実装を提供するには大規模な強力なプロセッサが必要とされるが、そのような手法は、互換性や再利用のために他のプロセッサに固有のコードを実行することが望ましい場合など、特定の状況において正当化されてもよい。仮想マシンプログラム810は、そのような実際のハードウェアデバイスによるプログラムの実行によって与えられるのと同じ結果を与えるために、アプリケーションプログラム(又はオペレーティングシステム)800を実行することができる。したがって、前述のチェック命令を含むプログラム命令は、仮想マシンプログラム810を使用してアプリケーションプログラム800内から実行されてもよい。
前述の実施形態から分かるように、記載されたチェック命令の使用は、不規則又は非線形のメモリアクセスパターンを有するコードがベクトル化されるときに潜在的なメモリ依存性違反の問題に対してオーバヘッドの低い解決策を提供する。記載された技術は、間接的なメモリ参照を有するプログラム、特にそのメモリアクセスが非論理的であることにより競合状態が存在しないことを静的に証明すること或いは更には異なるベクトル長に関してそのようなハザードの平均頻度を決定することが困難又は不可能なプログラムの性能を大幅に向上させることができることが分かってきた。
本出願において、「〜ように構成される」という用語は、装置の要素が所定の動作を実行できる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の配置又は態様を意味する。例えば、装置は、所定の動作を与える専用のハードウェアを有してもよく、或いは、プロセッサ又は他の処理デバイスが機能を果たすようにプログラムされてもよい。「〜ように構成される」は、所定の動作を与えるために装置要素を何らかの方法で変更する必要があることを意味しない。
本発明の例示的な実施形態を添付図面に関連して本明細書中で詳しく説明してきたが、本発明がこれらの正にその実施形態に限定されず、また、添付の特許請求の範囲により規定される発明の範囲及び技術的思想から逸脱することなくこれらの実施形態に様々な変更、追加、及び、修正を当業者により行うことができることが理解されるべきである。例えば、本発明の範囲から逸脱することなく、従属請求項の特徴の様々な組み合わせを独立請求項の特徴と共に行うことができる。

Claims (25)

  1. それぞれが複数の要素を含むベクトルオペランドを記憶するためのレジスタストアと、
    命令によって定められる動作を行うために命令を実行する実行回路であって、前記レジスタストアとメモリとの間で前記ベクトルオペランドを移動させるためにメモリアクセス動作を行うアクセス回路と、前記ベクトルオペランドを使用してデータ処理動作を行う処理回路とを備える、実行回路と、
    を備え、
    前記実行回路がベクトルループを反復的に実行するようになっており、各反復中に、前記実行回路は、命令のシーケンスを実行してベクトルループを実施するようになっており、前記シーケンスは、複数のメモリアドレスを特定するチェック命令を含み、前記実行回路は、前記チェック命令の実行に応答して、前記複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定し、
    前記ベクトルループのそれぞれの反復ごとに、前記実行回路は、前記アドレスハザード状態の不存在を決定する前記チェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際にデフォルトレベルのベクトル化を使用するとともに、前記アドレスハザード状態の存在を決定する前記チェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際に低レベルのベクトル化を使用する、
    装置。
  2. 前記実行回路は、前記アドレスハザード状態の不存在を決定する前記チェック命令の実行に応答し、前記ベクトルループを実施するべく前記命令のシーケンス内の第1の複数の命令を実行することによって前記デフォルトレベルのベクトル化を使用し、
    前記実行回路は、前記アドレスハザード状態の存在を決定する前記チェック命令の実行に応答し、前記ベクトルループを実施するべく前記命令のシーケンス内の第2の複数の命令を反復的に実行することによって前記低レベルのベクトル化を使用する、
    請求項1に記載の装置。
  3. 前記実行回路は、前記チェック命令の実行に応答して、前記シーケンス内のその後の命令による参照のために、前記アドレスハザード状態が存在するかどうかを示す結果データを生成する請求項2に記載の装置。
  4. 前記結果データが1つ以上のフラグを含み、前記その後の命令が分岐命令であり、該分岐命令は、前記実行回路によって実行されると、前記第1の複数の命令を実行すべきかどうか又は前記第2の複数の命令を反復的に実行すべきかどうかを決定するために前記1つ以上のフラグを参照する請求項3に記載の装置。
  5. 前記第2の複数の命令がスカラー命令を含み、これらのスカラー命令によって前記実行回路が個々の要素に対して作用し、前記ベクトルループを実施するために必要な前記第2の複数の命令の反復実行の数は、ベクトル化の前記デフォルトレベルと関連するベクトルオペランドのアクティブ要素の数に依存する請求項2から4のいずれか一項に記載の装置。
  6. 前記実行回路は、前記チェック命令の実行に応答して、初期述語値を有するガード述語を生成し、
    前記第2の複数の命令がベクトル命令を含み、該ベクトル命令によって前記前記実行回路が1つ以上のベクトルオペランドの要素のサブセットに同時に作用し、前記サブセットが前記ガード述語によって特定され、
    前記第2の複数の命令の各反復時に、前記ガード述語の述語値は、任意の先行する反復によって作用される1つ以上のベクトルオペランドの任意の要素を除外するように更新される請求項2から4のいずれか一項に記載の装置。
  7. 前記ガード述語は、マスター述語によって特定されるアクティブ要素である要素のサブセットを特定するように制約される請求項6に記載の装置。
  8. 前記デフォルトレベルのベクトル化が第1の数のアクティブ要素を特定し、前記実行回路は、前記アドレスハザード状態の不存在を決定する前記チェック命令の実行に応答して、前記ベクトルループを実施するべく命令のシーケンスを実行する際に前記第1の数の要素を同時に処理するようになっており、
    前記実行回路は、前記チェック命令の実行に応答して、チェック命令の実行が前記アドレスハザード状態の存在を決定する際にアクティブ要素の数を前記第1の数よりも少ないアクティブ要素の第2の数まで減らす制御出力を生成し、それにより、前記実行回路は、前記ベクトルループを実施するべく命令のシーケンスを実行する際に前記第2の数の要素を並列に処理することによって前記低レベルのベクトル化を使用する請求項1に記載の装置。
  9. 前記ベクトルループの各反復の開始時に、前記実行回路は、デフォルトレベルのベクトル化の使用に戻るようになっている請求項8に記載の装置。
  10. 前記制御出力は、前記第2の数のアクティブ要素を形成するアクティブ要素を特定するガード述語を含む請求項8又は9に記載の装置。
  11. 前記チェック命令は、複数のアクティブアドレス要素を含む少なくとも1つのベクトルオペランドを定め、前記実行回路は、前記チェック命令の実行時に、それぞれのアクティブアドレス要素とそれぞれの他のアクティブアドレス要素とを比較して、前記アドレスハザード状態が存在するかどうかを決定するようになっている請求項1から10のいずれか一項に記載の装置。
  12. 前記チェック命令は、連続するアドレスの第1のシーケンスと関連する第1のアドレスと、連続するアドレスの第2のシーケンスと関連する第2のアドレスとを定め、前記実行回路は、チェック命令の実行時に、前記第1のアドレスと前記第2のアドレスとの間の差に応じて前記アドレスハザード状態の存在を決定するようになっている請求項1から10のいずれか一項に記載の装置。
  13. 前記チェック命令がチェック・メモリアクセス命令であり、前記実行回路は、前記チェック・メモリアクセス命令の実行に応答してチェック動作を実行し、前記複数のメモリアドレス中に前記アドレスハザード状態が存在するかどうかを決定する一方で、前記複数のメモリアドレスに関してメモリアクセス動作も行う請求項1から12のいずれか一項に記載の装置。
  14. 前記実行回路は、前記アドレスハザード状態の存在を決定する際に、メモリアクセス動作の任意の残りの部分を終了するようになっている請求項13に記載の装置。
  15. 前記処理回路は、前記チェック命令の実行時にチェック動作を行うための専用のチェック回路を備える請求項1から14のいずれか一項に記載の装置。
  16. 前記処理回路は、データ処理動作を行うための処理ユニットを備え、前記処理ユニットは、前記チェック命令の実行時にチェック動作を行うために再使用される請求項1から14のいずれか一項に記載の装置。
  17. 前記チェック動作の実行中に必要とされる1つ以上のアドレス比較をマージするために処理ユニット内の回転子回路及び比較器回路が使用される請求項16に記載の装置。
  18. ハザードチェック状態レジスタを更に備え、前記実行回路は、前記チェック命令の実行によって生成される結果データを前記ハザードチェック状態レジスタに記憶するようになっている、請求項3に従属する場合の請求項1から17のいずれか一項に記載の装置。
  19. 前記各ベクトルオペランドがN個の要素を含み、N個の前記アクティブ要素は、前記実行回路が前記アドレスハザード状態の不在を決定するチェック命令の実行に応答して前記ベクトルループを実施するべく命令のシーケンスを実行する際にN個の要素を並列に処理するようにベクトル化の前記デフォルトレベルに関連付けられる請求項1から18のいずれか一項に記載の装置。
  20. 前記各ベクトルオペランドがN個の要素を含み、マスター述語がN以下の数の要素をアクティブ要素として特定し、ベクトル化の前記デフォルトレベルは、前記マスター述語によって特定されるアクティブ要素に対応し、それにより、前記実行回路は、前記アドレスハザード状態の不在を決定するチェック命令の実行に応答して、前記ベクトルループを実施するべく命令のシーケンスを実行する際に前記マスター述語によって特定されるアクティブ要素を並列に処理する請求項1から18のいずれか一項に記載の装置。
  21. 先に実行された命令シーケンスにおける前記アドレスハザード状態の発生に関連する履歴データを維持するためのカウンタ回路を更に備え、
    前記実行回路は、複数の異なるタイプのチェック命令を含む命令セットの制御下で動作するようになっており、
    これにより、前記履歴データをコンパイラが利用できるようにすることで、前記コンパイラは、前記履歴データを考慮してどのタイプのチェック命令をベクトルループ内で使用すべきかを決定することができる請求項1から20のいずれか一項に記載の装置。
  22. 選択された期間にわたり、前記履歴データは、検出されるアドレス衝突の総数及び前記ベクトルオペランドのベクトル長内で検出されるアドレス衝突の数のうちの少なくとも一方を特定する請求項21に記載の装置。
  23. それぞれが複数の要素を含むベクトルオペランドを記憶するためのレジスタストアと、命令によって定められる動作を行うために命令を実行する実行回路であって、前記レジスタストアとメモリとの間で前記ベクトルオペランドを移動させるためにメモリアクセス動作を行うとともに、前記ベクトルオペランドを使用してデータ理動作を行う、実行回路とを有する装置でベクトル演算を実行する際にアドレス衝突を管理する方法であって、前記方法は、
    ベクトルループを反復的に実行し、
    各反復中に、命令のシーケンスを前記実行回路内で実行してベクトルループを実施し、前記シーケンスは、複数のメモリアドレスを特定するチェック命令を含み、前記実行回路は、前記チェック命令の実行に応答して、前記複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定し、
    前記ベクトルループのそれぞれの反復ごとに、前記アドレスハザード状態の不存在を決定する前記チェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際にデフォルトレベルのベクトル化を使用するとともに、前記アドレスハザード状態の存在を決定する前記チェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際に低レベルのベクトル化を使用する、
    方法。
  24. 請求項1から22のいずれか一項に記載の装置に対応するプログラム命令のための仮想マシン実行環境を与えるようにコンピュータを制御するコンピュータプログラムを持続的形態で記憶するコンピュータプログラムプロダクト。
  25. それぞれが複数の要素を含むベクトルオペランドを記憶するためのレジスタストア手段と、
    命令によって定められる動作を行うために命令を実行するための実行手段であって、前記レジスタストア手段とメモリとの間で前記ベクトルオペランドを移動させるためにメモリアクセス動作を行うためのアクセス手段と、前記ベクトルオペランドを使用してデータ処理動作を行うための処理手段とを備える、実行手段と、
    を備え、
    前記実行手段がベクトルループを反復的に実行するようになっており、各反復中に、前記実行手段は、命令のシーケンスを実行してベクトルループを実施するようになっており、前記シーケンスは、複数のメモリアドレスを特定するチェック命令を含み、前記実行手段は、前記チェック命令の実行に応答して、前記複数のメモリアドレス中にアドレスハザード状態が存在するかどうかを決定し、
    前記ベクトルループのそれぞれの反復ごとに、前記実行手段は、前記アドレスハザード状態の不存在を決定する前記チェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際にデフォルトレベルのベクトル化を使用するとともに、前記アドレスハザード状態の存在を決定する前記チェック命令の実行に応答して、ベクトルループを実施するべく命令のシーケンスを実行する際に低レベルのベクトル化を使用する、
    装置。
JP2018554767A 2016-04-26 2017-04-06 ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法 Active JP6913693B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1607261.3 2016-04-26
GB1607261.3A GB2549737B (en) 2016-04-26 2016-04-26 An apparatus and method for managing address collisions when performing vector operations
PCT/GB2017/050960 WO2017187130A1 (en) 2016-04-26 2017-04-06 An apparatus and method for managing address collisions when performing vector operations

Publications (2)

Publication Number Publication Date
JP2019517060A true JP2019517060A (ja) 2019-06-20
JP6913693B2 JP6913693B2 (ja) 2021-08-04

Family

ID=58548749

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018554767A Active JP6913693B2 (ja) 2016-04-26 2017-04-06 ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法

Country Status (9)

Country Link
US (1) US11132196B2 (ja)
EP (1) EP3449356B1 (ja)
JP (1) JP6913693B2 (ja)
KR (1) KR102379894B1 (ja)
CN (1) CN109074256B (ja)
GB (1) GB2549737B (ja)
IL (1) IL262198B (ja)
TW (1) TWI733798B (ja)
WO (1) WO2017187130A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020052862A (ja) * 2018-09-28 2020-04-02 日本電気株式会社 計算機および計算方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10713746B2 (en) 2018-01-29 2020-07-14 Microsoft Technology Licensing, Llc FIFO queue, memory resource, and task management for graphics processing
US10719268B2 (en) * 2018-06-29 2020-07-21 Microsoft Technology Licensing, Llc Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor
US10963252B2 (en) * 2019-05-24 2021-03-30 Texas Instruments Incorporated Vector maximum and minimum with indexing
GB2585202B (en) * 2019-07-01 2021-11-24 Advanced Risc Mach Ltd An apparatus and method for speculatively vectorising program code
CN111158755A (zh) * 2019-11-29 2020-05-15 华东师范大学 用于消除simd向量化程序中缓存缺失的多向量交错执行方法
CN117093268B (zh) * 2023-10-19 2024-01-30 超睿科技(长沙)有限公司 一种向量处理方法、系统、设备及存储介质
CN117891509A (zh) * 2024-03-18 2024-04-16 芯来智融半导体科技(上海)有限公司 数据访存方法、装置、计算机设备和存储介质

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5063497A (en) * 1987-07-01 1991-11-05 Digital Equipment Corporation Apparatus and method for recovering from missing page faults in vector data processing operations
IN169636B (ja) * 1987-07-01 1991-11-23 Digital Equipment Corp
JPH0812661B2 (ja) 1988-04-01 1996-02-07 日本電気株式会社 命令処理順序制御システム
DE69031443T2 (de) * 1989-06-30 1998-04-23 Digital Equipment Corp Verfahren und Anordnung zur Steuerung von Schattenspeichern
US5471628A (en) * 1992-06-30 1995-11-28 International Business Machines Corporation Multi-function permutation switch for rotating and manipulating an order of bits of an input data byte in either cyclic or non-cyclic mode
US6219780B1 (en) * 1998-10-27 2001-04-17 International Business Machines Corporation Circuit arrangement and method of dispatching instructions to multiple execution units
US8019976B2 (en) * 2007-05-14 2011-09-13 Apple, Inc. Memory-hazard detection and avoidance instructions for vector processing
US8078847B2 (en) * 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
US7941584B2 (en) * 2009-03-26 2011-05-10 Arm Limited Data processing apparatus and method for performing hazard detection
US8996845B2 (en) * 2009-12-22 2015-03-31 Intel Corporation Vector compare-and-exchange operation
US9021233B2 (en) * 2011-09-28 2015-04-28 Arm Limited Interleaving data accesses issued in response to vector access instructions
WO2013095606A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for detecting identical elements within a vector register
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
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
US9400650B2 (en) * 2012-09-28 2016-07-26 Intel Corporation Read and write masks update instruction for vectorization of recursive computations over interdependent data
WO2014142972A1 (en) * 2013-03-15 2014-09-18 Intel Corporation Methods and systems to vectorize scalar computer program loops having loop-carried dependences
US10241793B2 (en) * 2013-03-15 2019-03-26 Analog Devices Global Paralleizing loops in the presence of possible memory aliases
CN103279327B (zh) * 2013-04-28 2015-11-25 中国人民解放军信息工程大学 面向异构simd扩展部件的自动向量化方法
US9600280B2 (en) * 2013-09-24 2017-03-21 Apple Inc. Hazard check instructions for enhanced predicate vector operations
GB2519107B (en) * 2013-10-09 2020-05-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing speculative vector access operations
GB2523823B (en) * 2014-03-07 2021-06-16 Advanced Risc Mach Ltd Data processing apparatus and method for processing vector operands
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020052862A (ja) * 2018-09-28 2020-04-02 日本電気株式会社 計算機および計算方法
JP7124608B2 (ja) 2018-09-28 2022-08-24 日本電気株式会社 計算機および計算方法

Also Published As

Publication number Publication date
IL262198B (en) 2020-09-30
GB2549737A (en) 2017-11-01
CN109074256A (zh) 2018-12-21
EP3449356B1 (en) 2020-01-22
KR102379894B1 (ko) 2022-03-30
EP3449356A1 (en) 2019-03-06
KR20180137521A (ko) 2018-12-27
JP6913693B2 (ja) 2021-08-04
US20190114172A1 (en) 2019-04-18
TW201738737A (zh) 2017-11-01
CN109074256B (zh) 2023-02-28
US11132196B2 (en) 2021-09-28
GB2549737B (en) 2019-05-08
TWI733798B (zh) 2021-07-21
WO2017187130A1 (en) 2017-11-02
IL262198A (en) 2018-11-29

Similar Documents

Publication Publication Date Title
EP3449356B1 (en) An apparatus and method for managing address collisions when performing vector operations
KR101511837B1 (ko) 벡터 분할 루프들의 성능 향상
JP5701487B2 (ja) 同期並列スレッドプロセッサにおける間接的な関数呼び出し命令
US9557995B2 (en) Data processing apparatus and method for performing segmented operations
EP2951681B1 (en) Solution to divergent branches in a simd core using hardware pointers
CN108139907B (zh) 向量数据传送指令
US10514919B2 (en) Data processing apparatus and method for processing vector operands
JP6908601B2 (ja) ベクトルロード命令
EP2951682B1 (en) Hardware and software solutions to divergent branches in a parallel pipeline
US20110078418A1 (en) Support for Non-Local Returns in Parallel Thread SIMD Engine
WO2017163024A1 (en) Vector predication instruction
KR100316710B1 (ko) 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치
US11822541B2 (en) Techniques for storing sub-alignment data when accelerating Smith-Waterman sequence alignments
US20230101085A1 (en) Techniques for accelerating smith-waterman sequence alignments

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200221

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210401

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210607

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210712

R150 Certificate of patent or registration of utility model

Ref document number: 6913693

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150