JP6469120B2 - セグメント化された演算を実行するためのデータ処理装置及び方法 - Google Patents

セグメント化された演算を実行するためのデータ処理装置及び方法 Download PDF

Info

Publication number
JP6469120B2
JP6469120B2 JP2016549398A JP2016549398A JP6469120B2 JP 6469120 B2 JP6469120 B2 JP 6469120B2 JP 2016549398 A JP2016549398 A JP 2016549398A JP 2016549398 A JP2016549398 A JP 2016549398A JP 6469120 B2 JP6469120 B2 JP 6469120B2
Authority
JP
Japan
Prior art keywords
segment
vector
segmented
data
data elements
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016549398A
Other languages
English (en)
Other versions
JP2017505491A (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 JP2017505491A publication Critical patent/JP2017505491A/ja
Application granted granted Critical
Publication of JP6469120B2 publication Critical patent/JP6469120B2/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/3001Arithmetic 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/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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/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
    • 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/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]
    • G06F9/38873Iterative single instructions 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/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/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、セグメント化された演算を実行するためのデータ処理装置及び方法に関する。
データ処理装置の性能を改善するための1つの知られた技法は、ベクトル演算の実行をサポートする回路を提供することである。ベクトル演算は少なくとも1つのベクトル・オペランドについて実行され、各ベクトル・オペランドは複数のデータ要素を含む。そして、ベクトル演算の実行は、ベクトル・オペランド内の様々なデータ要素にわたり、1つの演算を繰り返し施すことを伴う。
ベクトル演算の実行をサポートする通常のデータ処理システムには、ベクトル・オペランドを保管するためにベクトル・レジスタ・ファイルが備わる。よって、例えば、ベクトル・レジスタ・ファイル内の各ベクトル・レジスタは複数のデータ要素を含むベクトル・オペランドを保管し得る。
一定の実装例では、ベクトル・オペランド内の様々なデータ要素に、並列して演算を実行するために、複数の並列処理レーンを備えるベクトル処理回路(しばしば、SIMD(Single Instruction Multiple Data)処理回路と呼ばれる)を備えることもまた知られている。
ベクトル演算を使用することにより、それと等価な一連のスカラー演算のパフォーマンスとの比較においてパフォーマンス上の著しい利益が実現可能である。
ベクトル処理回路の複数の異なるレーン内で並列処理できるようにベクトル化することが可能な一定のタイプの演算のためにベクトル処理回路を効率的に利用できるようにすることは困難である。例えば、ループの繰り返しごとに実行される演算は多々あるが、繰り返しの各回でそれらの演算によって処理されるデータ要素の数が、繰り返しの各回で処理されるデータ要素の数に規則性がないように変化する可能性がある。繰り返しの各回について、ベクトル処理回路のそれぞれのレーン内で様々なデータ要素の処理が可能ではあり得るが、このことは、ベクトル処理回路の利用可能レーンの有効利用に必ずしもつながらない。例えば、ベクトル処理回路がN本の並列処理レーンを有するとして、実際には、多くの場合で繰り返しのうち何回かについてはN個より少ないデータ要素が処理され、ベクトル処理回路の非効率的な利用につながることもある。さらに、繰り返しの各回でデータ要素が不規則であるという性質に起因して、繰り返しの任意の回で何本のレーンが必要になるか正確には分からないので、ベクトル処理回路をさらに効率的に利用することは実際的ではないと、これまでは考えられてきた。
そのような不規則な数のデータ要素を処理する必要のあるアルゴリズムの1つの実例は、疎行列の各行について多くの乗算結果を生成するために第1のデータ要素の疎行列を第2のデータ要素のベクトルに乗算する、疎行列乗算アルゴリズムである。各行内の乗算結果は次に、各行の結果を得るために累算される。しかしながら、各行について生成される乗算結果の数は疎行列の各行における0ではないデータ要素の数に依存するので、乗算結果の数は異なる行の間で極めて著しく異なる可能性がある。任意の特定の行について乗算結果を累算するために必要な累算演算はベクトル処理回路のレーンを使用して実行されるのに適するが、繰り返しの任意の特定の回について必要なレーンの数は変動し、その結果ベクトル処理回路の利用効率が著しく低くなる傾向にあり、それによって、このような演算を実行するときのベクトル処理回路のパフォーマンス及びエネルギー消費の両方に影響する。
疎行列ベクトル乗算などの不規則な問題の解決についての試みでは、最近、スループット指向のプロセッサ又はグラフィックス処理ユニット(GPU)の使用が注目されている。GPUは計算をメモリ・アクセスと重複させて遅延を見えなくすることに非常に優れているが、データ構造の不規則性が計算負荷の不均衡として現れる場合には問題が生じる。その結果、この試みが成功するのは、特別なデータ形式が使用される場合、又は例えば、根底にある物理問題がモデル化されて適切な構造の疎行列が得られる場合に限られる。
下記に、不規則なデータ構造を取り扱うための技法について説明された様々な文献の実例を示す。
Shubhabrata Sengupta、「Efficient Primitives and Algorithms for Many-core architectures」、PhD Thesis、2010年 G. E. Blelloch、J. C. Hardwick、J. Sipelstein、M. Zagha、S. Chatterjee、「Implementation of a Portable Nested Data-Parallel Language」、Journal of Parallel and Distributed Computing、Volume 21、Issue 1、1994年4月 B. Ren、G. Agrawal、J. R. Larus、T. Mytkowicz、T. Poutanen、W. Schulte、「SIMD Parallelization of Applications that Traverse Irregular Data Structures」、2013年 M. Billeter、O. Olsson、U. Assarsson、「Efficient Stream Compaction on Wide SIMD Many-Core Architectures」、Conference on High Performance Graphics予稿集、2009年
ベクトル処理回路の利用効率を改善して、例えば前述した不規則なデータ構造などの様々なデータのセットを取り扱うときに並列処理レーンをより効率的に利用できるようにするための機構を提供することが望ましい。
第1の態様から見れば、本発明は、ベクトル・オペランドを保存するように構成されるベクトル・レジスタ・ストアと、N本の並列処理レーンを提供し、指定されたベクトル・オペランドが提供するN個までのデータ要素にセグメント化された演算を実行するように構成されるベクトル処理回路であって、各データ要素が前記N本のレーンのうち1つに割り当てられ、前記N個までのデータ要素が複数のセグメントを形成し、セグメント化された演算の実行が各セグメントのデータ要素について別個の演算を実行することを含み、前記別個の演算が、関連するセグメントのデータ要素を含むレーン間の相互作用を伴う、ベクトル処理回路と、異なるセグメントからのデータ要素を含むレーン間の相互作用を防ぐために、複数のセグメント記述子を含む入力ベクトル・オペランドを指定する記述子計算命令に応答して、前記複数のセグメントのそれぞれの間の境界を維持する前記セグメント化された演算の実行時にベクトル処理回路によって使用されるレーンごとの述語情報を生成するように構成された述語生成回路とを含む、データ処理装置を提供する。
本発明によれば、述語生成回路は記述子計算命令に応答して、入力された複数のセグメント記述子を考慮しながら、レーンごとの述語情報を生成する。ベクトル処理回路は次に、2つ以上のセグメントを形成するN個までのデータ要素(Nは並列処理レーンの数)にセグメント化された演算を実行するように準備される。セグメント化された演算を実行することによって、異なるセグメントからのデータ要素を含むレーン間の相互作用を回避しつつ、各セグメントのデータ要素に別個の演算を実行できるように、レーンごとの述語情報が、それらの各セグメント間の境界が維持されるために、使用される。
セグメント化された演算は通常、A、A+B、A+B+C、A+B+C+D(ここでA、B、C及びDは別個のレーンに割り当てられるデータ要素)などのデータ要素への一連の演算の適用を表す結果を生成する。要素が計算される順序は(結合性を仮定すれば)関係ないが、結果のベクトルは入力要素の順序に基づく数学的シーケンスを表す。レーンごとの述語情報がなければ、数学的シーケンスはN個までのデータ要素の全セットに適用されることになるが、レーンごとの述語情報のおかげで、各セグメント内で別個の数学的シーケンスが生成されるように、隣接するセグメント間の境界が維持される。
一実施例では、各セグメントについて実行される別個の演算は本質的に同一の演算であり、レーンごとの述語情報を使用して維持されるそれぞれの境界により、各セグメント内で別個に実行される。各セグメントで実行される別個の演算の一部として発生する「レーン間の相互作用」は通常、少なくとも2つの異なるレーンによって与えられる要素に係るバイナリ演算を伴う。そのような演算には、計算、データ移動(例えば最小/最大)又は代入(例えば飽和加算/飽和減算)などが含まれ得る。レーンごとの述語情報により、隣接するレーン間のそのような相互作用がセグメント境界で防がれる。
本発明の技法によれば、ベクトル処理回路で1回又は複数回の繰り返しを通して個別にセグメントを処理する必要はなく、代わりに、複数セグメントからのデータ要素に演算を行うためにベクトル処理回路で1回の繰り返しをさせるようにすることにより、N本の並列処理レーンのより効率的な利用が実現し得る。これは、複数セグメント間の境界の維持を可能にするレーンごとの述語情報を得る、記述子計算命令の実行によって可能である。
そのような手法により、各種の広範な演算を実行する際のパフォーマンス向上と消費エネルギー節約の両方が得られる。これは、各セグメント内のデータ要素の数が不規則な複数のセグメントから成るデータ構造を処理するときに、ベクトル処理回路のより効率的な利用を可能にするために特に良く適している。
一実施例では、ベクトル処理回路は複数のパイプライン段を備え、前記複数のセグメントのそれぞれの間の境界を維持するために、複数のパイプライン段のそれぞれで実行される計算を制御するためにレーンごとの述語情報を利用するように構成される。よって、そのような実施例では、異なるセグメントからのデータ要素を含むレーン間の一切の相互作用を防ぐために、レーンごとの述語情報が、各パイプライン段で実行される計算を管理するために使用される。
一実施例では、各パイプライン段において、ベクトル処理回路は、異なるセグメントからのデータ要素を含むレーン間の相互作用を防ぐために、前記レーンごとの述語情報に従って1つ又は複数の計算を選択的に無効化するように構成される。よって、一実施例では、ベクトル処理回路はN本の並列処理レーンに割り当てられたN個のデータ要素にわたってセグメント化されていないバージョンの演算を実行できるようにする回路要素を含んでもよいが、レーンごとの述語情報を使用すれば、セグメント化されていないバージョンの演算の中で実行されるであろう演算の1つ又は複数が、演算を、各セグメント内のデータ要素に対してセグメント化された形で実行することができるように、無効化される。
ベクトル処理回路がレーンごとの述語情報をどのように使用するかは実施例により異なってもよい。しかし、一実施例では、1つ又は複数のパイプライン段のそれぞれについて、ベクトル処理回路は、そのパイプライン段でどの計算を無効化するかを特定する制御データを得るために、レーンごとの述語情報に論理演算を実行するように構成される。特定の一実施例では、述語生成回路によって生成されたレーンごとの述語情報は、最初の繰り返し回では「無加工で」使用されるが、後続の繰り返しでは、そのような後続の繰り返しのために必要な制御データが得るために、レーンごとの述語情報をシフトしたバージョンと論理和演算される。
レーンごとの述語情報は様々な形をとることができる。一実施例では、各レーンのためのバイナリ値を含む。ある特定の一構成では、バイナリ値は、あるセグメントの最後のデータ要素が割り当てられた個々のレーンを特定するために第1の値に設定され、その他のすべてのレーンについては第2の値に設定される。よって、実例として、レーンごとの述語情報内の論理1の値の各出現が、それに割り振られたデータ要素がセグメントの終わりを示すレーンを特定するように、第1の値が論理1の値で、第2の値が論理0の値であってもよい。よって、第1の値は、N本の並列処理レーン内で各セグメントの終わりを特定するためのポインタとして効率よく使用される。
しかしながら、レーンごとの述語情報をそのようにして指定する必要はない。例えば、別の実施例では、バイナリ値は、あるセグメントのデータ要素を含むレーンを特定するために第1の値に設定され、隣接するセグメントのデータ要素を含むレーンを特定するために第2の値に設定される。よって、レーンごとの述語情報は、N本の並列処理レーンの中のセグメントのそれぞれを特定するように、一連の第1の値と一連の第2の値が交互になる。3つ以上のセグメントが特定される場合には、隣接する個々のセグメントは、バイナリ値の変遷によって示されるであろう。個々のセグメントについて、同じ値のバイナリ値の数はセグメント内のデータ要素の総数を特定する。
一実施例では、セグメントがデータ要素をもたないと定めることが可能である。一実施例では、そのようなセグメントは事実上、レーンごとの述語情報によって特定することはできない。その代わり、一実施例では、複数のセグメント記述子が、データ要素をもたないセグメントが少なくとも1つ存在することを示す場合に、述語生成回路が制御フィールドを設定するようにさらに構成される。制御フィールドは様々な方法で設定することができる。例えば、データ要素をもたないセグメントが少なくとも1つ存在することを特定するためにフラグを設定してもよいし、ある値をCPUの汎用レジスタに保存することもできる。
ベクトル処理回路が制御フィールドの設定にどのように次に応答するかは実施例によって異なり得る。実際には、いくつかの実施例では、ベクトル処理回路が制御フィールドの設定に応答して何の処置を実行する必要もないかもしれない。しかし、一実施例では、ベクトル処理回路は制御フィールドが設定されていることに応答して、セグメント化された演算に関連した追加の処理のステップを実行する。
特定の一実施例では、追加処理のステップは、複数のセグメント記述子からデータ要素をもたない個々のセグメントの位置を特定することと、セグメント化された演算によって生成された結果データ内のその位置に所定のデータ値を挿入することとを含む。
フラグによって制御フィールドが実装される実施例では、フラグは、データ要素をもたないセグメントが少なくとも1つ存在することを示す目的のみに提供される専用フラグであってもよい。或いは、別個の専用フラグが提供される必要はなく、例えばキャリー・フラグなどの既存のフラグを使用してもよい。さらに、ゼロ長のセグメントの位置などの付随情報を保持するために追加のフラグを使用することもできる。
一実施例ではセグメント化された演算は入力されたデータとして指定されたベクトル・オペランドのデータ要素のみをとり得るが、別の実施例ではセグメント化された演算はキャリーイン・スカラー値をさらに指定してもよく、セグメント化された演算を実行すると、結果データ要素のベクトルとキャリーアウト・スカラー値とが得られる。よって、例えば、セグメント化された演算の実行中の適切な時点において最初のセグメントに関連するレーンのそれぞれにキャリーイン・スカラー値を伝えることによって、指定されたベクトル・オペランドによって提供されるデータ要素に対してベクトル処理回路内で実行される計算に、そのキャリーイン・スカラー値が組み込まれる。結果データ要素のベクトルを生成することに加えて、キャリーアウト・スカラー値もまた得られる。いくつかの状況では、キャリーアウト・スカラー値は、キャリーアウト値が存在しないことを特定するのに使用される中立値に設定されてもよい。
しかしながら、別の実施例では、キャリーアウト値をプロセスの別の繰り返しのキャリーイン値として使用することができる。具体的には、一実施例において、ベクトル処理回路がセグメント化された命令に応答してセグメント化された演算を実行し、データ処理装置が、N個を超えるデータ要素を含むデータ要素のセットに対してセグメント化された演算を実行するように記述子計算命令とセグメント化された命令とを複数回繰り返して実行するように構成され、ある繰り返しの回でセグメント化された演算を実行して得られたキャリーアウト・スカラー値は、次の繰り返しでセグメント化された演算を実行するためのキャリーイン・スカラー値として使用される。これによって、大きなデータセットに演算を実行しながら、必要な繰り返しのすべての実行の間、ベクトル処理回路のリソースをより効率的に利用できるようになる。セグメントが2回以上の繰り返しにまたがる場合には、そのセグメントのデータ要素に関して演算を継続して実行することができるように次回の繰り返しに適切な値を伝えられるよう、ある繰り返しの最後に得られるキャリーアウト・スカラー値を次回の繰り返しのキャリーイン・スカラー値として使用することができる。
そのような取り決めにおいては、各セグメント内のデータ要素の数が不規則であってもベクトル処理回路の有効利用が実現される。
一実施例では、セグメントは、ネスティングされたループ内の所定ループの繰り返しの各回に関連するデータ要素を特定する。所定のループは、例えばネスティングされたループの内側のループであってもよい。
一実施例では、ベクトル処理回路は、疎行列の各行について複数の乗算結果を得るために、第1のデータ要素の疎行列に第2のベクトル要素のベクトルを乗算して。疎行列乗算演算を実行するように構成され、前記乗算結果はセグメント化された演算を実行する対象となる前記データ要素のセットを形成し、各セグメントは疎行列内の行のうちの1つの乗算結果を含む。これは、各セグメントに提供されるデータ要素の数が不規則であるとおそらく考えられる特定の例示的シナリオを表す。
セグメント化された演算は様々な形をとることができるが、一実施例では各セグメント内の乗算結果に累算演算を実行する。
記述子計算命令への入力として提供されるセグメント記述子は様々な形をとることができる。一実施例ではセグメント記述子は、各セグメントの終わりか各セグメントの始まりのいずれかへのポインタを提供し、別の実施例ではセグメント記述子は各セグメントの長さを特定する。セグメント記述子が各セグメントの長さを特定する場合には、現在のセグメントの終わりを直前のセグメントに相対するオフセットに基づいて計算することができる。
セグメント記述子は任意の適切なデータ型で提供されてよい。一実施例では、それらは符号付き整数を含み、特定の一実施例では各セグメント記述子は32ビットの符号付き整数で表される。
そのような符号付き整数がセグメント記述子として使用される一実施例では、記述子計算命令とセグメント化された命令との繰り返しの各回に、先行する繰り返しの間にその先行する繰り返しのためのレーンごとの述語情報を生成するために使用されたいかなるセグメント記述子も削除するように、入力ベクトル・オペランドが更新される。これにより使用済みのセグメント記述子が廃棄され、後の繰り返しで再考慮されないことが確実にされる。
一実施例では、述語生成回路は、現在の繰り返しのためのレーンごとの述語情報を生成する前に、現在の繰り返しのために提供された複数のセグメント記述子から、先行するすべての繰り返しによって処理されたデータ要素の総数に等しい値を減算するように構成される。特定の一実施例では、最後の繰り返し回を除く繰り返しの各回でN個のデータ要素が処理され、したがって、修正済みのセグメント記述子を生成し、次にそれを使用してレーンごとの予測情報を生成するために、複数のセグメント記述子からNの倍数が減算される。これにより、現在の繰り返し回に存在するいずれのセグメント境界も特定するために、現在の繰り返し回のための適切な並列処理レーンにセグメント記述子を対応付けることができる。
セグメント化された演算は様々な形をとることができるが、一実施例では、セグメント化されたスキャン演算又はセグメント化された縮約演算のどちらかである。スキャン演算に従って、漸増する数のデータ要素に特定されたバイナリ演算が繰り返し実行される。バイナリ演算は、例えば、加算演算、乗算演算、最小値検出演算、最大値検出演算などの様々な形をとることができる。スキャン演算を実行した結果、そのそれぞれは様々な数のデータ要素に対してのバイナリ演算の適用に関連する、一連の結果を有するベクトルが生成される。特定の実例として、スキャン演算はバイナリ演算として加算演算を指定してもよく、そのようなスキャン加算(scan add)命令は、プレフィックス・サム(prefix sum)演算と呼ばれることもある。
縮約(reduction)演算はスキャン演算に類似するが、最後のスキャン結果のみが出力として保持される(したがって中間のスキャン結果を保持する必要はなく、いつかの実施例では計算する必要もない)。
述語生成回路によって生成されたレーンごとの述語情報を、セグメント化された演算の実施の間にベクトル処理回路が続いて使用するために保持することができる方法はいくつもある。一実施例では、レーンごとの述語情報を保管するために専用のレジスタが提供されてもよい。しかしながら、別の実施例では、複数の述語レジスタを提供する述語レジスタ・ファイルを装置がさらに備え、複数の述語レジスタのうち、レーンごとの述語情報を保管する1つを指定するように記述子計算命令が構成される。よって、記述子計算命令の中で、使用される特定の予測レジスタを直接特定することができる。
第2の態様から見れば、本発明は、ベクトル・オペランドを保存するように構成されるベクトル・レジスタ・ストアと、N本の並列処理レーンを提供するベクトル処理回路とを有するデータ処理装置内でセグメント化された演算を実行する方法であって、ベクトル処理回路内で、指定されたベクトル・オペランドが提供するN個までのデータ要素にセグメント化された演算を実行することであって、各データ要素が前記N本のレーンのうち1つに割り当てられ、前記N個までのデータ要素が複数のセグメントを形成し、セグメント化された演算の実行が各セグメントのデータ要素に別個の演算を実行することを含み、前記別個の演算が、関連するセグメントのデータ要素を含むレーン間の相互作用を伴う、実行することと、異なるセグメントからのデータ要素を含むレーン間の相互作用を防ぐために、複数のセグメント記述子を含む入力ベクトル・オペランドを指定する記述子計算命令に応答して、前記複数セグメントのそれぞれの間の境界を維持する前記セグメント化された演算の実行時にベクトル処理回路によって使用されるレーンごとの述語情報を生成することとを含む、方法を提供する。
第3の態様から見れば、本発明は、ベクトル・オペランドを保存するベクトル・レジスタ保存手段と、N本の並列処理レーンを提供し、指定されたベクトル・オペランドが提供するN個までのデータ要素にセグメント化された演算を実行するベクトル処理手段であって、各データ要素が前記N本のレーンのうち1つに割り当てられ、前記N個までのデータ要素が複数のセグメントを形成し、セグメント化された演算の実行が各セグメントのデータ要素に別個の演算を実行することを含み、前記別個の演算が、関連するセグメントのデータ要素を含むレーン間の相互作用を伴う、ベクトル処理手段と、異なるセグメントからのデータ要素を含むレーン間の相互作用を防ぐために、複数のセグメント記述子を含む入力ベクトル・オペランドを指定する記述子計算命令に応答して、前記複数セグメントのそれぞれの間の境界を維持する前記セグメント化された演算の実行時にベクトル処理手段によって使用されるレーンごとの述語情報を生成する述語生成手段とを含む、データ処理装置を提供する。
第4の態様から見れば、本発明は、本発明の第1の態様によるデータ処理装置に対応するプログラム命令のための仮想マシン実行環境を提供するようにコンピュータを制御するためのコンピュータ・プログラムを、非一時的な形で保管するコンピュータ・プログラム製品を提供する。
添付の図面に示されるとおりのその実施例を参照しながら、単なる実例として、本発明についてさらに説明する。
一実施例によって、入力ベクトル・オペランドを指定する記述子計算(compute descriptor)命令の実行によってレーンごとの述語情報が生成される様子の概略を示す。 一実施例によってセグメント化されたスキャン演算を実行するために、レーンごとの述語情報を使用する様子の概略を示す。 一実施例によるデータ処理装置のブロック線図。 一実施例によって、図3の装置を使用してデータ要素のセットをセグメント化された演算にかける方法のフロー図。 一実施例による図4Aの任意選択のフラグ評価ステップを、より詳細に示す。 レーンごとの述語情報を生成するために、一実施例によって、記述子計算ユニット150内に提供される構成要素を示す。 任意選択のフラグを生成するために、一実施例によって、記述子計算ユニット150内に提供される構成要素を示す。 一実施例によって、図3の装置を使用して疎行列乗算が実行され得る様子を概略的に示す。 一実施例によって、レーンごとの述語情報及び繰り返しの各回についてのフラグを生成するために、パックされた記述子のセットが複数の繰り返しの間、使用される様子を概略的に示す。 一実施例によってセグメント化された縮約(reduction)演算を実行するために、レーンごとの述語情報が使用され得る様子を示す。 一実施例によって記述子計算命令内に提供されるフィールドを概略的に示す。 一実施例によってセグメント化された縮約命令内に提供されるフィールドを概略的に示す。 一実施例によるデータ処理装置の仮想マシン実装を概略的に示す。
図1は、一実施例による、記述子計算(compute descriptor)演算の実行の概略を示す。具体的には、一実施例において、データ処理装置内の述語生成回路は、データ処理装置のベクトル処理回路により、セグメント化された演算を次いで実行するのに使用されるレーンごとの述語情報15を生成するために、複数のセグメント記述子を含む入力ベクトル・オペランド10を指定する記述子計算命令に応答するように構成されている。一実施例では、図1に示されるように、入力ベクトル・レジスタ10が一連の符号なしデータ値を含み、特定の一実施例では、入力ベクトル・レジスタは一連の8つの32ビットの符号なし値を含む。この実施例では、符号なし値はそれぞれセグメントの終わりを表す。
この実例では、ベクトル処理回路は8本の並列処理のレーンを提供し、よって、任意の特定の繰り返し回において一連の8個までのデータ要素にセグメント化された演算を実行することができると仮定されている。通常、セグメント化された演算はデータ要素の特定の入力ベクトル・オペランドを指定するセグメント化された命令に応答して、各データ要素がベクトル処理回路内の並列処理のレーンの1つに割り当てられた状態で、実行される。
一連の符号なし32ビット値を指定する記述子計算命令の入力ベクトル・オペランドについての考察に戻ると、最初の符号なし値11の値は1であり、最初のセグメントがデータ要素位置1で終わることを示している。これにより、レーンごとの述語情報15(本明細書ではマスクとも呼ぶ)の第2ビット16が1に等しく設定される。同様に、入力オペランド10内の2つ目の符号なし32ビット値12の値は6であり、次のセグメントがデータ要素位置6で終わることを示す。これによって、マスク15内のビット17が1に等しく設定される。しかし、次の符号なし値13は8より大きい値(この場合の値は9)を有するので、1回の繰り返し回でベクトル処理回路によって処理可能なデータ要素の数の範囲外にある。したがって、入力オペランド10内の3つ目以降の符号なし値は、現在の繰り返し回では無視される。マスク内で、入力オペランド10の内容により論理1の値に等しく設定されなかった任意のビット位置は、図1に示されるように、0に等しく設定される値を有する。入力オペランド10内の残りの符号なし値は、図7を参照しながら実例として詳細に考察するように、後続の繰り返し回で使用することができる。
一実施例では、記述子計算命令を実行すると、マスク15に加えて、フラグ20の値も操作される。フラグの状態は、入力オペランド・レジスタ10内の2つの連続する符号なし値の値が同じであるか否かを示し、これは、データ要素をもたないセグメントの存在を示す。一実施例では、このフラグは入力ベクトル・レジスタ10内の2つの連続する要素が等しいときに論理1の値に設定されるが、それ以外のときは論理0の値にクリアされる。したがって、図1の実例では、フラグ20は論理0の値にクリアされる。いくつかの実施例ではアルゴリズム/プログラマはこのフラグを無視すると決めてもよいが、一実施例では、例えば図4Bを参照しながら後に考察するように、別途の扱いを必要とする入力ベクトルを特定するために使用される。
図2は、一実施例によって、図1で生成されたマスク15を使用してベクトル処理回路内でセグメント化されたスキャン演算を実行する様子の概略を示す図である。この実例では、スキャン(scan)演算はそのバイナリ演算として加算(add)演算を指定する。値x0、x1、x2…の一連の入力を考えると、スキャン加算(scan add)の適用により、下記の、一連の結果y0、y1、y2…が得られる。
y0=x0
y1=x0+x1
y2=x0+x1+x2
図2に示される実例では、入力ソース・ベクトル・オペランド25はv0からv7の8つのデータ要素を含む。セグメント化しない場合は、これらの8つのデータ要素にスキャン加算演算を実行すると、加算演算が各レーン内の増え続ける数のデータ要素に実行され、入力データ要素v7を含む最後のレーンでは、得られる結果は8つのデータ要素v0からv7のすべての和を表すよう、ベクトル処理回路の並列処理の8本のレーンのそれぞれにわたって繰り返して加算演算が適用されることが理解されよう。
しかしながら、記載された実施例によれば、ベクトル処理回路の動作はマスク15、具体的には、セグメントの終わりを特定するマスク内の論理1の値のそれぞれが提供されることによって修正される。したがって、最初のセグメントがベクトル要素v0及びv1を含み、そして2個目のセグメントはベクトル要素v2、v3、v4、v5、v6を含む。最後のベクトル要素v7は、入力ベクトル・オペランド25によって表されるベクトル長8の中で終わらない3個目のセグメントに含まれる。
図2に示されるように、セグメント化されたスキャン演算は、分離した4つの部分27、32、42、及び57で実行される。最初の部分27では、部分27内の2本の破線で示された計算が無効化されるように入力マスク15が使用される。したがって、残りの加算演算の実行により、入力ベクトル25が中間形式30に変換される。
スキャン演算32の次の部分では、新しいマスク35を得るために、マスクとそれ自体を1ビットだけシフトしたバージョンとの論理和を行って修正されたマスクが実行される。ここで新しいマスク35によってスキャン演算の2番目の部分32内の破線で示された3つの演算が無効化され、その結果として、残りの加算演算の実行により、中間ベクトル40が得られる。
スキャン演算の3番目の部分42では、マスク35とそれ自体を2ビットだけシフトしたバージョンとの論理和を実行することによって、さらに修正されたマスク45が得られる。これは3番目の部分42内の破線で示された3つの計算を無効化し、結果、中間ベクトル50が得られる。
スキャン演算の最後の部分57は、最初のセグメントの各レーン内のデータ要素にスカラー入力を加算することを伴う。この実例では、最初のセグメントはレーン0とレーン1のみにデータ要素をもつので、スカラー・オペランド55は他のいずれのレーンにも伝播されない。これにより結果のベクトル60が得られる。加えて、レーン7はベクトル要素v7を含み、これは終わっていない3個目のセグメントの一部であり、よって、ベクトル要素v7はキャリーアウト・スカラー値65として出力される。そして、キャリーアウト・スカラー値65を、セグメント化されたスキャンの次の繰り返し回のキャリーイン・スカラー値として使用することができ、その後に続く任意のそのような繰り返し回のために、既に使用済みの記述子値「1」及び「6」を除いた修正済み入力ベクトル・オペランドに基づいて記述子計算命令をさらに実行することによって、新しいマスクが生成される。セグメント化されたスキャン処理の後続の繰り返し回のためにマスクを生成するプロセスについては、図7を参照しながら後述する。
図3は、一実施例によるデータ処理装置を示す。装置によって実行されるべき命令が命令キュー100に置かれており、ここからデコード回路105に渡される。デコード回路は、発行キュー110内に置かれる特定の、マイクロオペレーション(micro-ops)と呼ばれることもある制御情報を生成するために命令をデコードする。次に発行キューが、受け取られた命令によって指定される演算を実行させるために、適切な制御情報を装置内の関連する処理ユニットにディスパッチする。
図示される実例には複数のベクトル処理ユニット115が備わり、これらのユニットはスキャンユニット120、算術論理演算ユニット(ALU)125、積和演算(MAC)ユニット130、浮動小数点ユニット(FPU)135及び、記述子計算ユニット150を含む。したがって、発行キュー110内で特定された浮動小数点演算は処理のためにFPU135に転送され、乗算及び/又は積和演算はMACユニット130に渡され、標準の算術演算はALU125に渡される。スキャンユニット120自体は別の算術論理演算ユニットによって形成されてもよいし、記載される実施例のスキャン演算を実行するために準備される専用ユニットであってもよい。一実施例では、スキャンユニット120とALU125との間で転送経路を使用しながら必要なセグメント化されたスキャン演算を実行するために、スキャンユニット120とALU125を組み合わせて使用してもよい。よって、例えば、いくつかのレーン内(その数は、実行される繰り返し回で並列処理レーン内のどこに最初のセグメント境界があるかに依存する)のベクトル要素にスカラー値が加算されるスキャン演算の最後の部分57を行うために、ALUを使用してもよい。
記述子計算ユニット150は、上記で考察した記述子計算命令を実行するために使用され、一実施例では、結果のマスクが述語レジスタ・ファイル155内の述語レジスタの1つに保管されるように構成される。述語レジスタは予め定められていてもよいし、又は、記述子計算命令の1つのフィールド内で特定されてもよい。記述子計算命令の実行によってフラグも操作される場合には、記述子計算ユニット150はフラグ160への書き込みアクセスを有する。スキャンユニット120(及び、任意選択でALU125)は次に、前述のセグメント化されたスキャン演算を実行するときには述語レジスタ・ファイル155及びフラグ160へのアクセスを有する。
ベクトル処理ユニット115によって要求される様々な入力オペランドは、ベクトル・レジスタ・ファイル140内のレジスタから読み込まれる。加えて、それぞれのユニット(出力が述語レジスタ・ファイルに保管される記述子計算ユニットを除く)によって生成される結果オペランドは通常、ベクトル・レジスタ・ファイル140内の目的地レジスタに書き戻される。ロード命令及びストア命令は、オペランド・データがメモリからベクトル・レジスタ・ファイル140の指定されたレジスタにロードされるか、又は1つ若しくは複数のベクトル・レジスタの現在の内容をメモリに書き戻すために、対応するロード演算又はストア演算がベクトル・ロード/ストア・ユニット(LSU)145によって実行されるように使用される。
図4Aは、一実施例によって、記述子計算命令及び関連するセグメント化されたスキャン命令を複数回繰り返して実行することにより、1組のデータ要素にセグメント化されたスキャン演算を実行するよう図3のデータ処理装置が構成される様子を示すフロー図である。図4Aのステップ200に示されるように、パラメータNはセグメント化されたスキャン演算を実行するために使用されるSIMD処理ユニット内の並列処理レーンの数を示す。別の実施例では、スキャンユニットは、例えばスキャン演算の最後の部分57をALU125に委託することによってセグメント化されたスキャン演算を実行するために、ALU125と組み合わせて使用されてもよいが、図3の実例では、このSIMD処理ユニットはスキャンユニット120の形をとる。図2に示される実例などの特定の一実施例では、Nは8に等しい。
これも図4Aのステップ200に示されるように、パラメータXは処理されるデータ要素セット内のデータ要素の総数を特定する。この実例では、XはNより大きいと仮定され、したがって、すべてのデータ要素を処理するためには、スキャンユニットで複数回の繰り返しを実行することが必要になる。ステップ200で、最後に、ポインタPが0に等しく設定される。
ステップ205で、最初のN個のデータ要素が取得される。これは通常、そのベクトル・オペランドが、あるセグメント化されたスキャン命令の入力オペランドとして指定されることに先立って、ベクトル・レジスタ・ファイル140のベクトル・レジスタのうち1つにそれらのN個のデータ要素が保管されることによって起こる。
ステップ210で、ポインタPから始まるN個の記述子要素がベクトル・レジスタVにロードされる。一実施例では、ベクトル・レジスタVはベクトル・レジスタ・ファイル140内のベクトル・レジスタのうち1つであり、記述子計算命令の入力オペランドとして指定される。上記で図1を参照しながら考察したように、一実施例では、それぞれの記述子要素は符号付き32ビット値の形をとる。
上記で図1を参照しながら考察したように、マスク、及び任意選択でフラグ値を生成するために、ステップ210に続いて、記述子計算ユニット150内でベクトル・レジスタVをソース・オペランドとして使用して記述子計算命令が実行される。後に図7の考察で明らかになるように、ベクトル・レジスタV内の記述子要素を使用する前に、セグメント化されたスキャンプロセスの先行する繰り返しによって処理されたデータ要素の総数に等しい値が記述子要素から減算される。したがって、第1の繰り返し回では、処理されたデータ要素がなく、記述子要素は修正されずに使用される。ベクトル長を8と仮定して(すなわち、SIMDユニット内に8本の並列処理のレーンがあるとして)、以前の繰り返しの各回で、並列処理のそれらのレーン内で8つのデータ要素が処理されるなら、第2の繰り返し回では入力された記述子要素から8の値が減算され、第3の繰り返し回では記述子要素から16の値が減算され、以下同様である。修正された記述子要素に基づいて、上記で図1を参照しながら考察した方法を使用してマスクが生成される。
一実施例では、この減算プロセスは記述子計算命令の実行の一部として組み込まれているが、別の実施例では、一度、記述子計算命令が実行されると、入力ベクトル・オペランド内で指定されるように記述子要素を修正する必要がなくなるように、ベクトル・レジスタ・ファイル140内のベクトル・レジスタVを、そのベクトル・レジスタが記述子計算命令の入力オペランドとして指定される前に修正するように、別の命令を使用してもよいことが理解されよう。
ステップ215に続いて、ステップ220で、例えば、上記で図2を参照しながら考察したように、セグメントの分離を維持するためにマスクを使用して、SIMD処理ユニット内でセグメント化された演算が実行される。一実施例では、処理すべきデータ要素を含むベクトル・オペランドをスキャン命令の1つの入力で指定し、セグメント化されたスキャン演算を実行するときに使用されるべきマスクを含む述語レジスタを別の入力で指定して、スキャンユニット120(及び、任意選択でALU125)に必要なスキャン演算を実行させるために、セグメント化されたスキャン命令が使用される。
ステップ225には、後に図4Bを参照しながら考察するように、任意選択のフラグ評価ステップがあり、このステップを実行するか否かは、記述子計算命令がフラグ160のうちの1つの値を操作するのに使用されるか否かに依存する。
ステップ230で、次に、X個すべてのデータ要素が処理されたか判断され、もしまだであれば、次にプロセスは、セグメント・カウント値Cが計算されるステップ235に進む。具体的には、セグメント・カウントCは、終了したばかりの繰り返し回で処理されたセグメントの数を特定する。図1の実例で考えると、その繰り返し回についてはCは2に等しく設定されることになる。
ステップ235に続いて、パラメータPがセグメント・カウントCの値だけ増加される。その後、ステップ245で、例えば、データ要素を、ベクトル・レジスタ・ファイル140内の、次のセグメント化されたスキャン命令の入力オペランドとして指定される、1つのベクトル・レジスタにロードすることによって、次のN個のデータ要素が取得される。その後、プロセスはステップ210に戻る。この時点で、ポインタPからベクトル・レジスタVにロードされるN個の記述子要素は、ステップ240で計算されたポインタPの修正後の値に依存している。
すべてのデータ要素の処理されるまで上記のプロセスが繰り返され、その後、プロセスがステップ250で終了する。最後の繰り返し回では、処理されるデータ要素はN個より少ないステップ245があり得ることに留意されたい。この場合、残りのデータ要素がロードされるベクトル・レジスタは、ベクトル・オペランドの残りのデータ要素を埋めるために、いくつかのダミーデータを含んでもよい。また、スキャンユニット120(及びALU125)内の並列処理の一定のレーンを無効化して、アクティブなデータに演算を実行しない、レーン内での処理要素をオフにするために、述語制御情報を使用することも可能である。
図4Bは、一実施例による任意選択のフラグ評価ステップ225を示すフロー図である。ステップ260で、直前のステップ215で記述子計算命令の実行によってフラグが設定されたか判断される。設定されていない場合は、処置は必要ない。しかし、フラグが設定されていた場合は、現在の繰り返し回についてベクトル・レジスタVの中のN個の記述子要素から、各ゼロ長のセグメントの位置が判断される。一実施例では、ゼロ長のセグメントはそれぞれ、同じ値をもつ2つの連続した記述子要素の存在によって示される。任意の特定されたゼロ長のセグメントについて、ステップ270で、ステップ220で実行されたセグメント化された演算の出力の中の各ゼロ長のセグメントの位置に所定の値(例えば、論理0の値)が挿入される。よって、前述の図1及び図2の実例を考えると、入力レジスタ10が最初の3つの記述子要素として値1、1、及び6を有するなら、セグメント化されたスキャン演算は図2に示されるように実行されるが、ステップ270で、最初のセグメントの最後のデータ要素に関連して得られた値、すなわちv1+v0+sの値と、2個目のセグメントの合計に対して得られた値との間に所定の値が挿入される。
所定の値は論理0の値である必要はなく、特定の実装に対して適切な任意の他の所定の値であってもよいことが理解されよう。さらに、必要に応じて、所定の値の挿入以外に、追加の/代替の処置を呼び出すために、フラグの存在を使用することができる。例えば、ゼロ長のセグメントの存在が、予想外であって、入力データの生成におけるエラーの兆候である場合には、例外又はアボートを実行することもできる。
図5Aは、一実施例によって、記述子要素の入力オペランドからマスクを生成するために、図3の記述子計算ユニット150内に提供されてもよい構成要素を示す。図5Aに示されるように、ベクトル・オペランドは8つの記述子要素(記述子要素0〜7として示される)を含み、各記述子要素の符号なし32ビット値が、対応する回路ブロック300、305、310、315に入力されると仮定される。8本の並列処理レーンだとすると、各符号なし32ビット値の下位3ビットのみが、回路300、305、310、315のそれぞれの中でデコーダブロック325によって検査される必要がある。それらの3ビットに基づいてデコーダは、それらの下位3ビットの値によって示されるセグメントの終わりの位置を特定するために、多くても1つのビットが設定される、8ビットのマスク値を出力する。
加えて、残りのビット3〜30が、それらのビットがすべて0に設定されていれば論理1の値を提供するNORゲートを通して渡される。これは具体的には、符号なし32ビット値が0から7の範囲にあるのでデコーダからの出力が有効であり、よって現在の8本の並列処理レーン内のセグメント境界を特定することを示す。
NORゲート320からの論理1の値の出力により、デコーダ325からの出力がマルチプレクサ330から出力される。しかし、記述子要素のビット3〜30のいずれかがセットされていればNORゲート320から論理0の値が出力され、マルチプレクサ330はその出力として8つの論理0の値を含むデフォルトのマスクを選択する。
異なる回路ブロック300、305、310、315によって生成されたマスクはすべて次に、セグメント化されたスキャン演算を実行するときに使用されるマスクを生成するために、ORゲート340を使用して論理OR演算にかけられる。
図5Bは、隣接するセグメント記述子が同じ値を有する状況において任意選択でフラグを設定するために、記述子計算ユニット150内に提供されてもよい回路を示す。具体的に、回路はセグメント記述子の入力ベクトル・オペランド内の最初の2つの記述子を比較するように示されているが、セグメント記述子の他の隣接するペアのそれぞれについて同じ回路を繰り返すことができることが理解されよう。下位3ビットのみを比較する必要があり、対応するビットがセグメント記述子のペアから関連するXNORゲート350、355、360に入力される。理解されるように、各XNORゲートは、その入力の両方が同一である場合にのみ論理1の値を出力する。XNORゲート350、355、360からの出力がすべて3つとも論理1であれば、これは比較対象である両方のセグメント記述子の下位3ビットが同一であることを示す。検討中である2つのセグメント記述子のために図5Aの関連するマスク生成回路によって生成された有効要素情報が、XNORゲートからの出力と共にANDゲート370に次に入力される資格信号(qualifying signal)を生成するために、NANDゲート365を通して渡される。したがって、両方のセグメント記述子の下位3ビットが同一で、且つ、両方のセグメント記述子に対して有効な要素信号が生成されていれば、ANDゲート370からの出力は論理1の値になることが理解されよう。その他の場合はすべて、論理0の値になる。セグメント記述子の隣接するペアを評価するために使用された各回路からの出力は、次にORゲート375に入力され、これらの回路のいずれかがそれぞれのANDゲート370から出力される論理1を得る場合、フラグが次に設定される。
図5A及び5Bの実例において、繰り返しの各回の間に8本の並列処理レーンのすべてがデータ要素の処理に使用されると仮定されることに留意されたい。しかし、別の実施例では、入力ベクトルが8個より少ない有効なデータ要素を含むように、命令によって考慮されるアクティブなデータ要素の数を制限できるようにレーンごとの述語が提供されてもよい。そのような場合は、マスク及びフラグを生成するときにORゲート340、375への一定の入力を無効にするために、述語情報を利用する追加の構成要素が必要になることが理解されよう。この技法は、例えば、適合アルゴリズムを扱うときにセグメント境界を(動的に)修正するために使用することができる。
図6は、記載される実施例のセグメント化された演算を使用してもよいアルゴリズムの実例を示す。具体的には、図6は、結果415が生成するために、データ要素の配列405にベクトル410が乗算される、疎行列乗算アルゴリズムを示す。具体的に、行列405の各行について、その行内のアクティブなデータ要素にベクトル410内の対応するベクトル要素が乗算され、各行に1つの結果が得るために乗算結果が次に累算される。メモリ内で、配列405を形成するデータは一連のデータ値400として表現されてもよい。論理0の値は通常、(例えば、疎行列にYaleフォーマットを使用する場合、)明示的にはメモリに格納されないことに留意されたい。
記載される実施例のセグメント化された演算手法を使用するとき、ベクトル乗算演算はすべて、セグメント化された演算に対するデータ要素のセットとしてブロック415に含まれる様々な乗算結果を得るために実行される。しかしながら、この段階では、それらの結果の累算はまだ実行されていない。その代わりに、累算は、記述子計算命令及び関連するセグメント化された命令の複数の繰り返しを通して実行することができる。
図6に示される実例では、ベクトル処理回路は4本の並列処理レーンを備えると仮定され、よって、繰り返しの各回では4つまでのデータ要素をベクトル処理回路に入力することができる。繰り返しの各回でデータ要素がどのように消費されるかが、縦の破線がデータ要素が4つのデータ要素ブロックに分けられる様子を示し、縦の実線420、425、430、435、440が特定される必要があるセグメント境界を特定して、図6の下部半分に概略的に示される。これによって、繰り返しの最初の回の間では、記述子計算命令がセグメント境界420を特定するために実行され、次にベクトル処理回路が、最初のセグメントに対して最初の3本のレーン内のデータ要素の累算を生成するために、セグメント化された演算を実行する。次に4本目のレーン内のデータ要素が未修正のまま渡されて、次回の繰り返しへのキャリーイン・スカラー値として入力されるために、キャリーアウト・スカラー値として出力される。次の繰り返し回では、記述子計算命令を実行するとセグメント境界425が特定される。したがって、セグメント化された演算のこの繰り返し回の間では、2個目のセグメントの結果を生成するために、最初の繰り返し回からのキャリーアウト・スカラー値によって形成されるキャリーイン・スカラー値に1本目のレーンのデータ要素が加算される。さらに、2本目、3本目、及び4本目のレーン内のデータ要素が、3回目の繰り返しでキャリーイン・スカラー値としての使用のためのキャリーアウト・スカラー値として次に渡される結果を得るために、一緒に累算される。
3回目の繰り返しでは、記述子計算命令を実行すると、3つのセグメント境界430、435、440が特定される。そして、セグメント化された演算を実行する間、1本目のレーンのデータ要素が、3個目のセグメントの結果を生成するために、キャリーイン・スカラー値に加算され、それと別に、レーン2及び3のデータ要素が、4個目のセグメントの結果を生成するために、一緒に加算される。4本目のレーンのデータ要素は未修正のまま渡されて5個目のセグメントの結果を形成し、そして、この繰り返し回にはキャリーアウト・スカラー値はない。
最後に、4回目の繰り返しではアクティブなデータ要素はただ1つであり、この要素が、6個目のセグメントの結果を形成するために、未修正のままで渡される。
その結果、ベクトル処理回路を通した4回の繰り返しのみを使用して、参照番号415によって集合的に示される6つの累算結果のそれぞれが生成されていることが理解されよう。
図7は、繰り返しの各回について必要なマスク及びフラグ値を生成するために、パックされた記述子のセット500が複数の繰り返しの間に使用される様子を示す。最初の繰り返し回の間に、メモリに保管されているパックされた記述子のセット500から一連の8つのセグメント記述子を入力ベクトル・オペランド505にロードするために、一跨ぎロード(unit stride load)演算が実行される。次に、先行する繰り返しによって処理されたデータ要素の総数をこれらのセグメント記述子の値から減算するために、減算演算が使用される。最初の繰り返し回の間では、それ以前にデータ要素は処理されていないので、このプロセスの間に調節は行われず、その結果ベクトル・オペランド510はベクトル・オペランド505から変更されない。マスク515及びフラグ520を生成するために、次に記述子計算命令が実行される。このプロセスについては図1を参照しながら前述した。このプロセスの結果、参照番号525で示されるように、最初の2つのセグメント記述子「1」及び「6」が使用され、したがって、その事実を示すためにポインタが更新される。
したがって、2回目の繰り返しの間には、一跨ぎロードは、セット500から、3つ目の記述子「9」から始めてさらに8つの記述子530をロードする。前回の繰り返しの間には8つのデータ要素はマスク515を使用して処理されたと仮定され、よって、修正されたオペランド535をもたらすように、各セグメント記述子から値8が減算される。この修正されたオペランドは次に、マスク540及び関連するフラグ545を生成するように、記述子計算命令によって使用される。図7から分かるように、最初の3つのセグメント記述子がこのプロセスの間に使用され、その結果、参照番号550で示されるように、これらの3つのセグメント記述子をその後の考慮の対象から除外するために、ポインタが更新される。オペランド530を修正されたオペランド535に変換するために実行される減算は、記述子計算命令が実行される前に別の命令によって実行することもできることに留意されたい。その場合は、記述子計算命令によって特定されるベクトル・レジスタは、修正されたセグメント記述子535を既に含む。或いは、記述子計算命令そのものが、指定されたベクトル・レジスタから入力セグメント記述子530を取得した後に減算を行ってもよい。
3回目の繰り返しで、一連のセグメント記述子555がベクトル・レジスタにロードされ、次にベクトル長の2倍の減算が、セグメント記述子の個々の値から16が減算され、修正された入力ベクトル・オペランド560を得るために、実行される。この場合、セグメント記述子の値はそれぞれベクトル長よりも長く、したがって、マスク565のすべてのビットはクリアされる。フラグ570は論理0の値のままとなる。ベクトル処理回路は次に、3回目の繰り返しに与えられる8つのデータ要素について、これらのデータ要素のすべてが同一のセグメント内に含まれるので、全幅の演算を実行する。参照番号575で示されるように、セグメント記述子は使用されないので、ポインタは更新されない。
したがって、4回目の繰り返しでも同じ8つのセグメント記述子のセットが入力オペランド・レジスタ580にロードされるが、(先行する3回の繰り返しで、それぞれ8つのデータ要素を処理したので)今回は24の値が減算される。その結果が、修正された入力ベクトル・オペランド585となる。その修正されたベクトル・オペランドを使用して記述子計算命令が実行されると、結果としてマスク590が生成される。加えて、使用されたセグメント記述子のうち2つが同じ値を有するので、フラグ595がセットされる。
すべてのデータ要素の処理されるまで、パックされた記述子の残りのそれぞれについて前述のプロセスが反復され得る。
図7では説明を簡単にするために、記述子は繰り返しの各回で再ロードされると仮定したが、メモリからロードを繰り返す必要を避けることもでき、その代わりに、先行する繰り返しで消費されたセグメント記述子を置き換えるために必要な追加のセグメント記述子のみをロードするように、ロード演算を修正することができる。
図2ではセグメント化されたスキャン演算を実行したが、別の実施例では、図8に示されるようにセグメント化された縮約演算を実行する。図8を図2と比較すると分かるように、マスクは同じ方法で生成されて使用されるが、演算の最後に、各セグメントの最上レーン内の値のみが保持される。したがって、最初のセグメントについては結果v1+v0+sが結果ベクトル600の最初の要素位置605に保存される。同様に、結果v6+v5+v4+v3+v2が2番目の要素位置610に保存される。最後のレーン、つまりv7の内容が、後続の繰り返し回での使用のために、キャリーアウト・スカラー値615に出力される。説明を簡単にするために、セグメント化された縮約演算はセグメント化されたスキャン演算に準じて中途の累算演算をすべて実行するとして示されているが、これらの中間計算のすべてを実行する必要はないことは理解されよう。
図8に示される最後のステップに従って結果を動かすとき、述語を使用して、不要な結果を含むすべてのレーンを非アクティブ化することができる。さらに、キャリー値は、最上レーンが特定セグメントの最後のレーンを表さない場合にのみ維持される。その代わり、記述子計算命令によって特定される最後のセグメントが完了した場合は、キャリー値がないことを特定するためにキャリー値が中立値に等しく設定される。
図9は、一実施例によって記述子計算命令内に提供されるフィールドを概略的に示す図である。オペコード700は、命令が記述子計算命令であることを特定する。述語ソース・フィールド705は、一定のセグメント記述子を考慮から除外するために使用されてもよい任意選択フィールドである。ベクトル・ソース・フィールド710は、例えば前述の実例を使用すれば8つのセグメント記述子である、複数のセグメント記述子を含むベクトル・レジスタを特定する。述語目的地レジスタ715は、述語レジスタ・ファイル155の中の、記述子計算演算によって生成されたマスクが保存される述語レジスタを特定する。
図10は、一実施例によってセグメント化された縮約命令(又は、実際にはセグメント化されたスキャン命令)内に提供されるフィールドを概略的に示す図である。オペコード720は命令がセグメント化された縮約(又はスキャン)命令であることを特定する。述語ソース0のフィールド730は、その前に実行された記述子計算命令によって生成されたマスクが保存されている述語レジスタを特定する。述語ソース1のフィールド725は、ベクトル処理回路内の1つ又は複数の並列処理レーンを無効化するために特定される追加の述語情報を特定することができる任意選択のフィールドである。フィールド735はキャリーイン・スカラー値を含むスカラー・レジスタを特定し、フィールド740はキャリーアウト・スカラー値が保存される目的地レジスタを特定する。一実施例では、これらの2つのレジスタは同じレジスタとして設定することができ、それによって命令内の一定のエンコーディング空間を開放することができる。
最後に、フィールド745はセグメント化された命令によって処理されるソース・データ要素を含むベクトル・ソース・レジスタを特定し、同様にフィールド750は結果が保存される目的地レジスタを特定する。スカラーのソース及び目的地レジスタと同様に、これらのベクトルのソース及び目的地レジスタも同じレジスタであると設定することができ、それによって命令内のエンコーディング空間を節約することができる。さらに、2つの述語ソース・フィールド725、730の内容は、セグメント化された縮約命令を発行する前に、単一の述語マスクに統合させることができる。例えば、記述子計算命令の実行によって得られるマスクは、別の述語マスクとの論理積をとって、次に述語レジスタの1つに保存される、修正されたマスクを生成してもよく、その修正されたマスクが次にセグメント化された縮約命令によって参照される。
図11は、使用され得る仮想マシンへの実装を示す。前述した実施例は、関連する技法をサポートする特定の処理ハードウェアを操作するための装置及び方法に関して本発明を実装するが、ハードウェア機器の、いわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシン・プログラム810をサポートするホスト・オペレーティング・システム820を、通常、実行するホスト・プロセッサ830上で実行する。しばしば、妥当な速度で実行する仮想マシン実装を提供するためには大型の強力なプロセッサが必要とされるが、そのような手法も、互換性又は再利用の理由から別のプロセッサに特有のコードを実行することが要望されるときなどの一定の状況では合理的な場合もある。仮想マシン・プログラム810は、そのような実物のハードウェア機器によるプログラムの実行によって得られるのと同じ結果を得るように、アプリケーション・プログラム(又はオペレーティング・システム)800を実行することができる。よって、前述した記述子計算命令及びセグメント化され阿多命令を含むプログラム命令は、仮想マシン・プログラム810を使用してアプリケーション・プログラム800の中から実行されてもよい。
上記の考察から明らかになるように、記述子計算命令を使用することによってレーンごとの述語情報の生成が可能になり、N本の並列処理レーンを備えるベクトル処理回路内でセグメント化された演算を実行することが可能になる。特に、レーンごとの述語情報の使用を通して、ベクトル処理回路の並列処理レーンのより適切な利用が実現され、SIMDデータ経路内で一定の演算をより効率的に実行することが可能になる。そのような手法の恩恵を得られ得る演算は多種にわたり、一実例として、様々な特定されるセグメントが、ネスティングされたループ内の所定ループの繰り返しの各回に関連するデータ要素を含むことがある、ネスティングされたループに基づくアルゴリズムがある。記載されたセグメント化された演算の手法から恩恵を得られ得るアルゴリズムの一実例として疎行列乗算について説明したが、そのようなセグメント化された演算手法を使用して、SIMDデータ経路内で同様により効率的に実行することができるアルゴリズムが他に多くあることが理解されよう。
一実施例では、記述子計算命令の入力ベクトル・オペランド内のセグメント記述子はそれぞれ、ポインタ表現を使用する、すなわち個々の値がセグメントの終わりを示すが、別の手法では、セグメント記述子はそれぞれ、直前のセグメントからのオフセットに基づいて現在のセグメントの終わりが計算されるように、セグメントの長さを特定してもよい。
記述子計算命令によって生成された出力マスクは、専用のベクトル・マスク・レジスタに保存されてもよいし、別の実施例では、図3を参照しながら考察したように、述語レジスタ・ファイル155内の特定された述語レジスタに保存されてもよい。さらに別の実施例では、ベクトル・レジスタは、ベクトル・レジスタ内の各ベクトル要素がマスクのうち1つを特定するように、複数の繰り返しのためのマスクを保存するために使用されてもよい。さらに別の代替手段として、セグメント化された演算によって処理されるベクトル・オペランドの対応するデータ要素に対するマスク値(0又は1)をマスクの各ビットが表すように、各マスクを保存するためにスカラー・レジスタを使用することもできる。
さらに、記載された実施例では、マスク内でセグメントの終わりを特定するために論理1の値を使用した(この形式は、複数のセグメント化された命令間で値を伝播させるために特に適することが判明した)が、別の実施例では、セグメントの始まりを印すために論理1の値を使用してもよいし、1の連続(最初のセグメント)と0の連続(2番目のセグメント)、さらに1の連続(3番目のセグメント)、というように交互に使用することによって隣接するセグメントを互いに識別してもよい。
上記で考察したように、フラグ値のセット及びクリアは任意選択である。記載された実施例では、フラグをセットするか判断するときに隣接するセグメント記述子を比較するが、この技法は連続するセグメント記述子の検討に限定される必要はなく、別の実施例では代わりに、フラグをセットするか判断するときに特定の入力オペランド内のすべてのセグメント記述子を互いに比較することもできる。フラグ値を保存するために専用のフラグを導入してもよいし、或いは、既存のフラグ(例えばキャリー・フラグ)を再利用することも可能としてよい。
本明細書では特定の実施例について説明したが、本発明がそれらに限定されず、それらへの多くの修正及び追加が本発明の範囲内で行われてもよいことが理解されよう。例えば、本発明の範囲から逸脱することなく、下記の従属クレームの特徴の様々な組み合わせが、独立クレームの特徴とともにされてもよい。

Claims (27)

  1. ベクトル・オペランドを保存するように構成されるベクトル・レジスタ・ストアと、
    N本の並列処理レーンを提供し、指定されたベクトル・オペランドが提供するN個までのデータ要素にセグメント化された演算を実行するように構成されるベクトル処理回路であって、各データ要素が前記N本のレーンのうち1つに割り当てられ、前記N個までのデータ要素が複数のセグメントを形成し、前記セグメント化された演算の実行が各セグメントの当該データ要素に別個の演算を実行することを含み、前記別個の演算が、前記関連するセグメントの当該データ要素を含む前記レーン間の相互作用を伴う、ベクトル処理回路と、
    異なるセグメントからのデータ要素を含むレーン間の相互作用を防ぐために、複数のセグメント記述子を含む入力ベクトル・オペランドを指定する記述子計算命令に応答して、前記複数のセグメントのそれぞれの間の境界を維持する前記セグメント化された演算の実行時に前記ベクトル処理回路によって使用されるレーンごとの述語情報を生成するように構成された述語生成回路と
    を含む、データ処理装置。
  2. 前記ベクトル処理回路が複数のパイプライン段を備え、前記複数セグメントのそれぞれの間の前記境界を維持するために、前記複数のパイプライン段のそれぞれで実行される計算を制御するために前記レーンごとの述語情報を利用するように構成される、請求項1に記載のデータ処理装置。
  3. 各パイプライン段において、前記ベクトル処理回路は、異なるセグメントからのデータ要素を含むレーン間の相互作用を防ぐために、前記レーンごとの述語情報に従って1つ又は複数の計算を選択的に無効化するように構成される、請求項2に記載のデータ処理装置。
  4. 1つ又は複数の前記パイプライン段のそれぞれについて、前記ベクトル処理回路は、そのパイプライン段でどの計算を無効化するかを特定する制御データを得るために、前記レーンごとの述語情報に論理演算を実行するように構成される、請求項3に記載のデータ処理装置。
  5. 前記レーンごとの述語情報が各レーンのためのバイナリ値を含む、請求項1から4までのいずれか一項に記載のデータ処理装置。
  6. 前記バイナリ値が、あるセグメントの最後のデータ要素が割り当てられた個々のレーンを特定するために第1の値に設定され、その他のすべてのレーンについては第2の値に設定される、請求項5に記載のデータ処理装置。
  7. 前記バイナリ値が、あるセグメントのデータ要素を含むレーンを特定するために第1の値に設定され、隣接するセグメントのデータ要素を含むレーンを特定するために第2の値に設定される、請求項5に記載のデータ処理装置。
  8. 前記複数のセグメント記述子が、データ要素をもたないセグメントが少なくとも1つ存在することを示す場合に、前記述語生成回路が制御フィールドを設定するようにさらに構成される、請求項1から7までのいずれか一項に記載のデータ処理装置。
  9. 前記ベクトル処理回路が、前記制御フィールドが設定されていることに応答して、前記セグメント化された演算に関連した追加の処理のステップを実行する、請求項8に記載のデータ処理装置。
  10. 前記追加処理のステップが、前記複数のセグメント記述子からデータ要素をもたない個々のセグメントの位置を特定することと、前記セグメント化された演算によって生成された結果データ内のその位置に所定のデータ値を挿入することとを含む、請求項9に記載のデータ処理装置。
  11. 前記セグメント化された演算がキャリーイン・スカラー値をさらに指定し、前記セグメント化された演算を実行すると結果データ要素のベクトルとキャリーアウト・スカラー値とが得られる、請求項1から10までのいずれか一項に記載のデータ処理装置。
  12. 前記ベクトル処理回路がセグメント化された命令に応答して前記セグメント化された演算を実行し、前記データ処理装置が、N個を超えるデータ要素を含むデータ要素のセットに対して前記セグメント化された演算を実行するように前記記述子計算命令と前記セグメント化された命令とを複数回繰り返して実行するように構成され、ある繰り返しの回で前記セグメント化された演算を実行して得られた前記キャリーアウト・スカラー値が、次の繰り返しで前記セグメント化された演算を実行するための前記キャリーイン・スカラー値として使用される、請求項11に記載のデータ処理装置。
  13. 前記ベクトル処理回路がセグメント化された命令に応答して前記セグメント化された演算を実行し、前記データ処理装置が、N個を超えるデータ要素を含むデータ要素のセットに対して前記セグメント化された演算を実行するように前記記述子計算命令と前記セグメント化された命令とを複数回繰り返して実行するように構成され、前記データ要素のセットが複数のセグメントを含む、請求項1から12までのいずれか一項に記載のデータ処理装置。
  14. 前記セグメントのそれぞれの内のデータ要素の数が不規則である、請求項13に記載のデータ処理装置。
  15. 前記セグメントが、ネスティングされたループ内の所定ループの繰り返しの各回に関連するデータ要素を特定する、請求項13又は14に記載のデータ処理装置。
  16. 前記ベクトル処理回路が、疎行列の各行について複数の乗算結果を得るために、第1のデータ要素の疎行列に第2のベクトル要素のベクトルを乗算する、疎行列乗算演算を実行するように構成され、前記乗算結果が前記セグメント化された演算を実行する対象となる前記データ要素のセットを形成し、各セグメントが前記疎行列の前記行のうち1つの前記乗算結果を含む、請求項13から15までのいずれか一項に記載のデータ処理装置。
  17. 前記セグメント化された演算が各セグメント内の前記乗算結果に累算演算を実行する、請求項16に記載のデータ処理装置。
  18. 前記セグメント記述子が、各セグメントの終わり及び各セグメントの始まりのうち1つへのポインタを提供する、請求項1から17までのいずれか一項に記載のデータ処理装置。
  19. 前記セグメント記述子が各セグメントの長さを特定する、請求項1から17までのいずれか一項に記載のデータ処理装置。
  20. 前記複数のセグメント記述子が符号付き整数を含む、請求項1から19までのいずれか一項に記載のデータ処理装置。
  21. 前記複数のセグメント記述子が符号付き整数を含み、
    繰り返しの各回に、先行する繰り返しの間に前記先行する繰り返しのためのレーンごとの述語情報を生成するために使用されたいかなるセグメント記述子も削除するように、前記入力ベクトル・オペランドが更新される、請求項13から20までのいずれか一項に記載のデータ処理装置。
  22. 前記述語生成回路が、現在の繰り返しのための前記レーンごとの述語情報を生成する前に、前記現在の繰り返しのために提供された前記複数のセグメント記述子から、先行するすべての繰り返しによって処理されたデータ要素の総数に等しい値を減算するように構成される、請求項21に記載のデータ処理装置。
  23. 前記セグメント化された演算が、セグメント化されたスキャン演算とセグメント化された縮約演算のいずれか1つである、請求項1から22までのいずれか一項に記載のデータ処理装置。
  24. 複数の述語レジスタを提供する述語レジスタ・ファイルをさらに備え、前記記述子計算命令が前記レーンごとの述語情報が保管される前記述語レジスタのうちの1つを指定するように構成される、請求項1から23までのいずれか一項に記載のデータ処理装置。
  25. ベクトル・オペランドを保存するように構成されるベクトル・レジスタ・ストアと、N本の並列処理レーンを提供するベクトル処理回路とを有するデータ処理装置内でセグメント化された演算を実行する方法であって、
    前記ベクトル処理回路内で、指定されたベクトル・オペランドが提供するN個までのデータ要素にセグメント化された演算を実行することであって、各データ要素が前記N本のレーンのうち1つに割り当てられ、前記N個までのデータ要素が複数のセグメントを形成し、前記セグメント化された演算の実行が各セグメントの当該データ要素に別個の演算を実行することを含み、前記別個の演算が、前記関連するセグメントの当該データ要素を含む前記レーン間の相互作用を伴う、実行することと、
    異なるセグメントからのデータ要素を含むレーン間の相互作用を防ぐために、複数のセグメント記述子を含む入力ベクトル・オペランドを指定する記述子計算命令に応答して、前記複数のセグメントのそれぞれの間の境界を維持する前記セグメント化された演算の実行時に前記ベクトル処理回路によって使用されるレーンごとの述語情報を生成することとを含む、方法。
  26. ベクトル・オペランドを保存するベクトル・レジスタ保存手段と、
    N本の並列処理レーンを提供し、指定されたベクトル・オペランドが提供するN個までのデータ要素にセグメント化された演算を実行するベクトル処理手段であって、各データ要素が前記N本のレーンのうち1つに割り当てられ、前記N個までのデータ要素が複数のセグメントを形成し、前記セグメント化された演算の実行が各セグメントの当該データ要素に別個の演算を実行することを含み、前記別個の演算が、前記関連するセグメントの当該データ要素を含む前記レーン間の相互作用を伴う、ベクトル処理手段と、
    異なるセグメントからのデータ要素を含むレーン間の相互作用を防ぐために、複数のセグメント記述子を含む入力ベクトル・オペランドを指定する記述子計算命令に応答して、前記複数セグメントのそれぞれの間の境界を維持する前記セグメント化された演算の実行時に前記ベクトル処理手段によって使用されるレーンごとの述語情報を生成する述語生成手段と
    を含む、データ処理装置。
  27. 請求項1から24までのいずれか一項に記載のデータ処理装置に対応するプログラム命令のための仮想マシン実行環境を提供するようにコンピュータを制御するためのコンピュータ・プログラムを、非一時的な形で保管するコンピュータ・プログラム製品。
JP2016549398A 2014-02-07 2015-01-21 セグメント化された演算を実行するためのデータ処理装置及び方法 Active JP6469120B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/175,268 US9557995B2 (en) 2014-02-07 2014-02-07 Data processing apparatus and method for performing segmented operations
US14/175,268 2014-02-07
PCT/GB2015/050132 WO2015118299A1 (en) 2014-02-07 2015-01-21 A data processing apparatus and method for performing segmented operations

Publications (2)

Publication Number Publication Date
JP2017505491A JP2017505491A (ja) 2017-02-16
JP6469120B2 true JP6469120B2 (ja) 2019-02-13

Family

ID=52450513

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016549398A Active JP6469120B2 (ja) 2014-02-07 2015-01-21 セグメント化された演算を実行するためのデータ処理装置及び方法

Country Status (5)

Country Link
US (1) US9557995B2 (ja)
JP (1) JP6469120B2 (ja)
CN (1) CN105960630B (ja)
GB (1) GB2537533B (ja)
WO (1) WO2015118299A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220206792A1 (en) * 2020-12-24 2022-06-30 Intel Corporation Methods, systems, and apparatuses to optimize partial flag updating instructions via dynamic two-pass execution in a processor

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2514397B (en) * 2013-05-23 2017-10-11 Linear Algebra Tech Ltd Corner detection
US10514911B2 (en) 2014-11-26 2019-12-24 International Business Machines Corporation Structure for microprocessor including arithmetic logic units and an efficiency logic unit
US9733899B2 (en) * 2015-11-12 2017-08-15 Arm Limited Lane position information for processing of vector
GB2545248B (en) 2015-12-10 2018-04-04 Advanced Risc Mach Ltd Data processing
GB2548600B (en) * 2016-03-23 2018-05-09 Advanced Risc Mach Ltd Vector predication instruction
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
EP3340037B1 (en) 2016-12-22 2019-08-28 ARM Limited A data processing apparatus and method for controlling vector memory accesses
US10908898B2 (en) * 2017-02-17 2021-02-02 Intel Corporation Vector instruction for accumulating and compressing values based on input mask
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
US11360770B2 (en) 2017-03-20 2022-06-14 Intel Corporation Systems, methods, and apparatuses for zeroing a matrix
US10628157B2 (en) * 2017-04-21 2020-04-21 Arm Limited Early predicate look-up
EP3499362B1 (en) * 2017-12-13 2022-11-30 ARM Limited Vector add-with-carry instruction
US10572409B1 (en) * 2018-05-10 2020-02-25 Xilinx, Inc. Sparse matrix processing circuitry
GB2580068B (en) * 2018-12-20 2021-02-24 Advanced Risc Mach Ltd Generating a vector predicate summary
US11392316B2 (en) * 2019-05-24 2022-07-19 Texas Instruments Incorporated System and method for predication handling
CN110727412B (zh) * 2019-09-14 2022-01-07 无锡江南计算技术研究所 一种基于掩码的混合浮点乘法低功耗控制方法及装置
CN113495849A (zh) * 2020-04-08 2021-10-12 慧荣科技股份有限公司 物理层的数据流切割装置及方法
CN113806246A (zh) * 2020-06-16 2021-12-17 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
US20230056246A1 (en) * 2021-08-03 2023-02-23 Micron Technology, Inc. Parallel matrix operations in a reconfigurable compute fabric
WO2023015560A1 (en) * 2021-08-13 2023-02-16 Huawei Technologies Co.,Ltd. Systems and methods for sparsity-aware vector processing in general purpose cpus
US11740899B2 (en) * 2021-08-31 2023-08-29 Micron Technology, Inc. In-memory associative processing system
GB2616601B (en) * 2022-03-11 2024-05-08 Advanced Risc Mach Ltd Sub-vector-supporting instruction for scalable vector instruction set architecture
US20230305846A1 (en) * 2022-03-24 2023-09-28 Intel Corporation Processor hardware and instructions for vectorized fused and-xor
CN117459268B (zh) * 2023-10-25 2024-08-23 合芯科技(苏州)有限公司 基于硬件式访问权限管理的计算系统、方法及总线设备

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6189094B1 (en) * 1998-05-27 2001-02-13 Arm Limited Recirculating register file
US7877573B1 (en) 2007-08-08 2011-01-25 Nvidia Corporation Work-efficient parallel prefix sum algorithm for graphics processing units
US8243083B1 (en) 2007-12-04 2012-08-14 Nvidia Corporation System, method, and computer program product for converting a scan algorithm to a segmented scan algorithm in an operator-independent manner
US20090172348A1 (en) 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
WO2011156247A2 (en) * 2010-06-11 2011-12-15 Massachusetts Institute Of Technology Processor for large graph algorithm computations and matrix operations
US20120113133A1 (en) * 2010-11-04 2012-05-10 Shpigelblat Shai System, device, and method for multiplying multi-dimensional data arrays
US8762655B2 (en) 2010-12-06 2014-06-24 International Business Machines Corporation Optimizing output vector data generation using a formatted matrix data structure
US8924693B2 (en) * 2011-01-21 2014-12-30 Apple Inc. Predicting a result for a predicate-generating instruction when processing vector instructions

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220206792A1 (en) * 2020-12-24 2022-06-30 Intel Corporation Methods, systems, and apparatuses to optimize partial flag updating instructions via dynamic two-pass execution in a processor
US12039329B2 (en) * 2020-12-24 2024-07-16 Intel Corporation Methods, systems, and apparatuses to optimize partial flag updating instructions via dynamic two-pass execution in a processor

Also Published As

Publication number Publication date
GB201610070D0 (en) 2016-07-27
GB2537533A (en) 2016-10-19
CN105960630A (zh) 2016-09-21
GB2537533B (en) 2021-02-17
CN105960630B (zh) 2019-08-02
US9557995B2 (en) 2017-01-31
JP2017505491A (ja) 2017-02-16
WO2015118299A1 (en) 2015-08-13
US20150227367A1 (en) 2015-08-13

Similar Documents

Publication Publication Date Title
JP6469120B2 (ja) セグメント化された演算を実行するためのデータ処理装置及び方法
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
TWI501148B (zh) 條件式比較指令
TWI471801B (zh) 降低於一處理器之積和熔加運算(fma)單元中之功率消耗的技術
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
CN109074256B (zh) 在执行向量操作时管理地址冲突的装置及方法
US9965275B2 (en) Element size increasing instruction
US20180307489A1 (en) Apparatus and method for performing multiply-and-accumulate-products operations
JP2019511056A (ja) 複素数乗算命令
US11003447B2 (en) Vector arithmetic and logical instructions performing operations on different first and second data element widths from corresponding first and second vector registers
EP3336692A1 (en) Replicate partition instruction
US11977884B2 (en) Replicate elements instruction
JP7324754B2 (ja) ベクトル・キャリー付き加算命令
TWI531966B (zh) 計算裝置、計算方法及非暫態機器可讀儲存媒體
CN110914801A (zh) 在数据处理设备中的向量交叉
US11630667B2 (en) Dedicated vector sub-processor system
US20220326956A1 (en) Processor embedded with small instruction set
JP2022131311A (ja) ベクトル演算装置、ベクトル演算方法及びプログラム
WO2023199014A1 (en) Technique for handling data elements stored in an array storage
WO2023199015A1 (en) Technique for handling data elements stored in an array storage
JPH1185469A (ja) 並列演算装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180112

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181128

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190115

R150 Certificate of patent or registration of utility model

Ref document number: 6469120

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