JP7186212B2 - データ処理装置におけるベクトル・インタリーブ - Google Patents

データ処理装置におけるベクトル・インタリーブ Download PDF

Info

Publication number
JP7186212B2
JP7186212B2 JP2020501160A JP2020501160A JP7186212B2 JP 7186212 B2 JP7186212 B2 JP 7186212B2 JP 2020501160 A JP2020501160 A JP 2020501160A JP 2020501160 A JP2020501160 A JP 2020501160A JP 7186212 B2 JP7186212 B2 JP 7186212B2
Authority
JP
Japan
Prior art keywords
vector
data items
positions
input data
source register
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
JP2020501160A
Other languages
English (en)
Other versions
JP2020527797A (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 JP2020527797A publication Critical patent/JP2020527797A/ja
Application granted granted Critical
Publication of JP7186212B2 publication Critical patent/JP7186212B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • 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/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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros

Description

本開示はデータ処理装置に関する。より詳細には、データ処理装置が実行することができるベクトル処理演算に関する。
入力データ項目のセットに対してデータ処理演算を実施するデータ処理装置において、入力データ項目を、ベクトルの幅にわたるデータ項目の群が同一のデータ処理に並列にかけられる、ベクトル化されたやり方で処理することができれば、例えばこれらが次から次へと処理されるシーケンシャルな処理手法を取る場合に比べて、より高い処理効率及びスループットが得られる。それにもかかわらず、データ処理をソース・レジスタからの入力データ項目に適用し、その結果をデスティネーション・レジスタに格納するベクトル化された手法は、過度な複雑性 を伴わずに実用的なデータ処理装置が提供される場合、実施することのできるデータ処理の種類、及びこれらのデータ処理演算のオペランドを形成する入力データ項目の組合せに一定の限定を課すことがあり、ベクトル化された手法の有利性を価値のないものする可能性がある。
Robert Bedichek、「Some Efficient Architecture Simulation Techniques」、1990年冬季USENIX Conference、53~63頁
一実例の実施例において、命令をデコードするための命令デコーダ回路と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路とを備える装置があり、命令デコーダ回路は、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、第1のソース・レジスタからの入力データ項目の第1のセットを取り出すことと、第2のソース・レジスタからの入力データ項目の第2のセットを取り出すことと、入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対(つい(または「ペア」))に対してデータ処理演算を実施して結果データ項目のセットを生成することと、結果データ項目のセットを結果データ・ベクトルとしてデスティネーション・レジスタに格納することであって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納される、格納することとを行うためのベクトル・インタリーブ処理を実行するようデータ処理回路を制御するための制御信号を生成する。
別の実例の実施例において、データ処理装置を動作させる方法があり、方法は、命令をデコードするステップと、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するステップと、装置の第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、第1のソース・レジスタからの入力データ項目の第1のセットを取り出すことと、第2のソース・レジスタからの入力データ項目の第2のセットを取り出すことと、入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成することと、結果データ項目のセットを結果データ・ベクトルとしてデスティネーション・レジスタに格納することであって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納される、格納することとを含むベクトル・インタリーブ処理を実行するよう装置のデータ処理回路を制御するための制御信号を生成するステップとを含む。
別の実例の実施例において、装置があり、装置は、命令をデコードする手段と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用する手段と、装置の第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、第1のソース・レジスタからの入力データ項目の第1のセットを取り出すための手段と、第2のソース・レジスタからの入力データ項目の第2のセットを取り出すための手段と、入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成するための手段と、結果データ項目のセットを結果データ・ベクトルとしてデスティネーション・レジスタに格納するための手段であって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納される、格納するための手段とを含むベクトル・インタリーブ処理を実行するよう装置のデータ処理回路を制御するための制御信号を生成する手段とを含む。
別の実例の実施例において、命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムがあり、コンピュータ・プログラムは、命令をデコードするための命令デコード・プログラム・ロジックと、入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む入力データ・ベクトル構造体への命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックとを含み、命令デコード・プログラム・ロジックは、第1のソース・データ構造体、第2のソース・データ構造体、及びデスティネーション・データ構造体を指定するベクトル・インタリーブ命令に応答して、第1のソース・データ構造体からの入力データ項目の第1のセットを取り出すことと、第2のソース・データ構造体からの入力データ項目の第2のセットを取り出すことと、入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成することと、結果データ項目のセットを結果データ・ベクトル構造体としてデスティネーション・データ構造体に格納することであって、第1のソース・データ構造体内容依存性を有する第1のソース・データ構造体依存結果データ項目はデスティネーション・データ・ベクトル構造体内の交互する位置の第1のセット内に格納され、第2のソース・データ構造体内容依存性を有する第2のソース・データ構造体依存結果データ項目はデスティネーション・データ・ベクトル構造体内の交互する位置の第2のセット内に格納される、格納することとを行うためのベクトル・インタリーブ処理を実行するようデータ処理プログラム・ロジックを制御するための制御信号を生成する。
別の実例の実施例において、上で言及したコンピュータ・プログラムを非一時的に記憶するコンピュータ可読記憶媒体がある。
本技法は、その実施例を参照して添付の図面に図示されるように、単に実例としてさらに説明される。
本技法の様々な実例を具現化し得るデータ処理装置を概略的に示す図である。 2つのソース・レジスタのそれぞれから得られる要素対に対してデータ処理を実施し、これらをインタリーブされるやり方でデスティネーション・レジスタに書き込むためのデータ処理回路を概略的に示す図である。 図2Aの実例におけるレジスタの要素について、実例の内容を示す図である。 第1及び第2のソース・レジスタから得られるデータ要素対に対してデータ処理演算を実施し、それぞれのソース・レジスタからの結果をインタリーブされるやり方でデスティネーション・レジスタに書き込むためのデータ処理回路であり、デスティネーション・レジスタに書き込まれる要素のデータ・サイズを指定することができるデータ処理回路を概略的に示す図である。 図3Aの実例における要素の実例の内容を示す図である。 ソース・レジスタの1つがやはりデスティネーション・レジスタを与える実例におけるデータ処理回路を概略的に示す図である。 図4Aの実例における実例の内容を示す図である。 命令が選択的に一定の処理を有効化/無効化するために使用される述語値を指定する一実例におけるデータ処理回路及びレジスタを示す図である。 図5Aの実例におけるレジスタの要素の実例の内容、及び対応する述語値を与える図である。 データ処理演算にかけられる入力データ項目の対が、第1及び第2のソース・レジスタの対角線上で隣接する要素から得られる一実例におけるデータ処理回路を概略的に示す図である。 本技法のいくつかの命令が使用される、実例の多項式乗算のデータ処理コンテキストにおいて使用されるいくつかの定義を示す図である。 図7の多項式乗算の実例のレジスタ内容を、この多項式乗算を実行するために本技法によって与えられる命令の実例のシーケンスと併せてステップごとに示す図である。 一実施例の方法における、一連のステップを示す図である。 一実施例の方法で取られる一連のステップを示す図である。 一実施例において、シミュレータ実装形態を提供するシステムのコンポーネントを概略的に示す図である。
少なくともいくつかの実施例は装置を提供し、装置は、命令をデコードするための命令デコーダ回路と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路とを備え、命令デコーダ回路は、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、第1のソース・レジスタからの入力データ項目の第1のセットを取り出すことと、第2のソース・レジスタからの入力データ項目の第2のセットを取り出すことと、入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成することと、結果データ項目のセットを結果データ・ベクトルとしてデスティネーション・レジスタに格納することであって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納される、格納することとを行うためのベクトル・インタリーブ処理を実行するようデータ処理回路を制御するための制御信号を生成する。
本技法は、処理される入力データ項目及び生成される結果データ項目が同じ場所に配置されるベクトル処理手法において、処理の効率性及び必須のハードウェアの複雑性の低減を得ることを実現する。例えば、処理レーン(内部では独立したデータ処理が行われる)が十分定義され十分制約される実装形態において、そのような同じ場所での配置が達成される。換言すると、これは、データ処理演算の必要とされるオペランドをまとめるための、及び得られるデータ項目をデスティネーション・レジスタ内で必要とされる位置に移送するための、必要とされるハードウェアの複雑性が限定されることを意味している。このコンテキストにおいて、本技法はベクトル・インタリーブ命令を提供することが有用であることを見出しており、ベクトル・インタリーブ命令は一方で選択された入力データ項目対が第1及び第2のソース・レジスタから取り出される入力データ項目の第1及び第2のセットから得られるようにし、また他方では、第1のソース・レジスタ依存結果データ項目がデスティネーション・レジスタ内の交互する位置に格納され、且つ第2のソース・レジスタ依存結果データ項目がやはりデスティネーション・レジスタ内の交互する位置に格納されるべく、結果データ項目がそれらのソース・レジスタ依存性に応じてデスティネーション・レジスタに格納されるようにする。この構成により、定義され、順に結果データ項目が書き込まれるデスティネーション・レジスタ内の交互する位置にある入力データ項目の特定の対において、有用な程度の柔軟性が可能となる。実際、本技法は、データ処理演算がコアである対を超えて1つ又は複数の追加的なオペランドを有することができる点において、入力データ項目の厳密な対に限定されない。それにもかかわらず、この手法は、設けられ得るハードウェアをサポートすることにおいて過剰な複雑性を避けて、上で言及したベクトル化されたデータ処理に関与する関連する要素の同じ場所への配置をさらに提供するが、さらなる関連付けられるデータ処理演算が(例えば、内容を並べ替える、又はシャッフルするために)必要とされない有用なデータ処理が実行されることをなお可能にする。実装されるベクトル化されたデータ処理の有用な効率性及びスループットはこのようにサポートされる。
上で言及したように、選択されるデータ項目対は様々な有用な方法で定義することができるが、いくつかの実施例において、入力データ項目の第1及び第2のセットから得られる選択された入力データ項目対は、第1のソース・レジスタ内の入力データ項目の隣接対から形成される入力データ項目対の第1のセット、及び第2のソース・レジスタ内の入力データ項目の隣接対から形成される入力データ項目対の第2のセットを含む。したがって、隣接要素(入力データ項目)の対は第1及び第2のソース・レジスタの両方から得られ、これはデータ処理のこれらの入力データ項目オペランドが有用に同じ場所に配置されていることを意味しているが、さらにはそれらから生成された結果データ項目がデスティネーション・レジスタ内の他の項目でインタリーブされる場合、実行されているベクトル化されたデータ処理の効率性及びスループットをさらにサポートして、デスティネーション・レジスタの利用を(完全に「パック」されるという点において)最大にする。
このデスティネーション・レジスタの完全な利用を確実にする1つの方法は、第1のソース・レジスタ内容から導いた結果データ項目を、第2のソース・レジスタ内容から導いた結果データ項目でインタリーブすることであり、したがって、いくつかの実施例において、デスティネーション・データ・ベクトル内の交互する位置の第1のセットはデスティネーション・データ・ベクトル内の交互する位置の第2のセットと交互になる。いくつかの実施例において、交互する位置の第1のセットはデスティネーション・データ・ベクトル内の位置の偶数番号セットであり、交互する位置の第2のセットはデスティネーション・データ・ベクトル内の位置の奇数番号セットである。代替的に、他の実施例において、交互する位置の第1のセットはデスティネーション・データ・ベクトル内の位置の奇数番号セットであり、交互する位置の第2のセットはデスティネーション・データ・ベクトル内の位置の偶数番号セットである。
しかしながら、他の実施例において選択される入力データ対は様々に定義することができ、いくつかの実施例において、入力データ項目の第1及び第2のセットから得られる選択された入力データ項目対は、第2のソース・レジスタ内の交互する入力データ項目と対にされる、第1のソース・レジスタ内の交互する入力データ項目から形成される対角の入力データ項目対を含む。換言すると、そのような実施例において、入力データ項目対は、対のうち1つの入力データ項目は第1のソース・レジスタから由来し、一方で対のうち他方の入力データ項目は第2のソース・レジスタから由来しているという点において、第1及び第2のソース・レジスタにまたがっている。さらには、この対は、第1のソース・レジスタから得られる入力データ項目がそのソース・レジスタ内で第2のソース・レジスタから得られる入力データ項目に対してずれた位置にあり、このずれは1つのデータ項目位置であるという意味で「対角」的である。したがって、第1のソース・レジスタからの交互する入力データ項目は、隣接するデータ項目場所から得られる第2のソース・レジスタにおける交互する入力データ項目と対にされる。様々なデータ処理のコンテキストは、この「対角の入力データ項目対」手法から利益を得ることができるが、そのいくつかの実例について以下でより明らかとなろう。
したがって、すべての結果データ項目が第1のソース・レジスタ及び第2のソース・レジスタの両方に依存しているいくつかの実施例において、第1のソース・レジスタ依存結果データ項目及び第2のソース・レジスタ依存結果データ項目によって定義されるセットは同一であり、したがっていくつかの実施例において、第1のソース・レジスタ依存結果データ項目及び第2のソース・レジスタ依存結果データ項目は結果データ項目の同一のセットであり、交互する位置の第1のセット及び交互する位置の第2のセットはデスティネーション・データ・ベクトル内の交互する位置の同一のセットである。ひいては、結果データ項目が格納されるデスティネーション・データ・ベクトル内の位置の観点から、このような実施例において、したがってこれは上で言及した交互する位置の第1のセット及び交互する位置の第2のセットはデスティネーション・データ・ベクトル内の交互する位置と同一のセットであることを意味している。
したがって、このような実施例において、これは交互する位置のさらなるセット(すなわち結果データ項目が格納されない位置)が他のデータ項目でポピュレートするために利用可能であることを意味している。これらは、実施される特定のベクトル化されたデータ処理の利益が何であるかによって様々な方法で選択することができるが、いくつかの実施例において、交互する位置の第1のセット及び交互する位置の第2のセットは、先行するデータ項目のセットがデスティネーション・データ・ベクトル内に留まる位置のさらなるセットと交互になり、この場合先行するデータ項目のセットは、データ処理回路がベクトル・インタリーブ処理を開始する前にデスティネーション・データ・ベクトル内の位置のさらなるセットに存在する。換言すると、ベクトル・インタリーブ処理によって変更されない(修正されないままである)、デスティネーション・データ・ベクトル内に先行するデータ項目のセットがある。
要求に応じて、デスティネーション・データ・ベクトル内の位置の第1及び第2のセットは、いくつかの実施例において、位置の第1のセットはデスティネーション・データ・ベクトル内の位置の偶数番号セットであり、位置のさらなるセットは、デスティネーション・データ・ベクトル内の位置の奇数番号セットであるように選ぶことができることが認識されよう。代替的に、他の実施例において、位置の第1のセットはデスティネーション・データ・ベクトル内の位置の奇数番号セットであり、位置のさらなるセットはデスティネーション・データ・ベクトル内の位置の偶数番号セットである。
同様に、第1及び第2のソース・レジスタから取り出される交互する入力データ項目はそれらに関連付けられる等価な選択を有し、したがって、いくつかの実施例において、第1のソース・レジスタ内の交互する入力データ項目は第1のソース・レジスタ内の位置の偶数番号セットから取り出され、第2のソース・レジスタ内の交互する入力データ項目は第2のソース・レジスタ内の位置の奇数番号セットから取り出されることがやはり認識されよう。代替的に、他の実施例において、第1のソース・レジスタ内の交互する入力データ項目は第1のソース・レジスタ内の位置の奇数番号セットから取り出され、第2のソース・レジスタ内の交互する入力データ項目は第2のソース・レジスタ内の位置の偶数番号セットから取り出される。
入力データ項目に対して実施される特定のデータ処理演算は様々な形態を取ることができるが、様々な実施例において、データ処理演算は算術演算、論理演算、又はシフト演算である。ベクトル化されたデータ処理のベクトル化される「レーン」の制約を尊重して実行するよう適切に構成される、あらゆるそのような演算を選ぶことができる。
いくつかの実施例において、ベクトル・インタリーブ命令で指定されるデスティネーション・レジスタは第1及び第2のソース・レジスタとは別個のレジスタであるが、いくつかの実施例において、ベクトル・インタリーブ命令で指定されるデスティネーション・レジスタは第1のソース・レジスタ及び第2のソース・レジスタのうちの1つである。これにより、そのソース・レジスタのデータ項目のうち少なくともいくつかが、このレジスタへの結果データ項目のセットの格納によって上書きされる、少なくとも部分的に「相殺的な」手法を取ることができる。
本技法は、いくつかの実施例においてベクトル・インタリーブ命令が入力データ・ベクトル内の個々の位置に対応する述語ビットを含む述語値をさらに指定し、且つデータ処理回路が述語値内の設定解除された述語ビットにさらに応答して入力データ項目の第1のセットの入力データ項目及び設定解除された述語ビットに対応するベクトル・インタリーブ処理内の入力データ項目の第2のセットの関与を抑制するという点において、ベクトル・インタリーブ命令に応答して実行されるベクトル化されたデータ処理に対する設定可能性の態様をさらに提供する。したがって、さらなる具体的な制御を、述語値のうちある述語ビットを設定する又は設定解除する効率的なメカニズムによって、処理にこのように適用することができる。この述語値はベクトル・インタリーブ命令においていくつかの方法で、インタリーブ命令それ自身内の即値として、又は記憶場所、例えばその中で述語値が見つかるようなさらなるレジスタを示すベクトル・インタリーブ命令によってのいずれかで、指定することができる。
本技法にとって別の程度の柔軟性は、ベクトル・インタリーブ命令が入力データ項目の第1のセットの第1のデータ項目サイズ、入力データ項目の第2のセットの第2のデータ項目サイズ、及び結果データ項目のセットの結果データ項目サイズをさらに指定する実施例に与えられる。この手法は、第1及び第2のソース・レジスタから取り出された具体的な入力データ項目を制御すること、並びにデスティネーション・レジスタに格納される結果データ項目の具体的なフォーマットを制御することを可能にするために全体的に有用であるだけではなく、これらのレーンを適切に尊重するデータ・サイズを指定することによって処理をベクトル化されたレーン内で維持しようとするコンテキストにおいて特定の適用可能性を見出すことができる。
これは、例えば結果データ項目をナローにすることを含むことができるが、逆に結果データ項目を(入力データ項目に対して)拡大させることを含むこともあり、したがって、例えば精度を損ねない「キャリー無し」乗算を実行できるようにしており、すなわち計算におけるすべての情報を保存しており、これはあるコンテキスト、例えば暗号技術において重要であり得る。
それによって、いくつかの実施例において、入力データ項目の第2のセットの第1のデータ項目サイズ及び第2のデータ項目サイズは、結果データ項目のセットの結果データ項目サイズよりも小さい。代替的に、他の実施例において、入力データ項目の第2のセットの第1のデータ項目サイズ及び第2のデータ項目サイズは、結果データ項目のセットの結果データ項目サイズよりも大きい。
少なくともいくつかの実施例は、データ処理装置を動作させる方法を提供し、方法は、命令をデコードするステップと、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するステップと、装置の第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、第1のソース・レジスタからの入力データ項目の第1のセットを取り出すことと、第2のソース・レジスタからの入力データ項目の第2のセットを取り出すことと、入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成することと、結果データ項目のセットを結果データ・ベクトルとしてデスティネーション・レジスタに格納することであって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納される、格納することとを含むベクトル・インタリーブ処理を実行するよう装置のデータ処理回路を制御するための制御信号を生成するステップとを含む。
少なくともいくつかの実施例は、装置を提供し、装置は、命令をデコードする手段と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用する手段と、装置の第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、第1のソース・レジスタからの入力データ項目の第1のセットを取り出すための手段と、第2のソース・レジスタからの入力データ項目の第2のセットを取り出すための手段と、入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成するための手段と、結果データ項目のセットを結果データ・ベクトルとしてデスティネーション・レジスタに格納するための手段であって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納される、格納するための手段とを含むベクトル・インタリーブ処理を実行するよう装置のデータ処理回路を制御するための制御信号を生成する手段とを含む。
少なくともいくつかの実施例は、命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムを提供し、コンピュータ・プログラムは、命令をデコードするための命令デコード・プログラム・ロジックと、入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む入力データ・ベクトル構造体への命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックとを含み、命令デコード・プログラム・ロジックは、第1のソース・データ構造体、第2のソース・データ構造体、及びデスティネーション・データ構造体を指定するベクトル・インタリーブ命令に応答して、第1のソース・データ構造体からの入力データ項目の第1のセットを取り出すことと、第2のソース・データ構造体からの入力データ項目の第2のセットを取り出すことと、入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成することと、結果データ項目のセットを結果データ・ベクトル構造体としてデスティネーション・データ構造体に格納することであって、第1のソース・データ構造体内容依存性を有する第1のソース・データ構造体依存結果データ項目はデスティネーション・データ・ベクトル構造体内の交互する位置の第1のセット内に格納され、第2のソース・データ構造体内容依存性を有する第2のソース・データ構造体依存結果データ項目はデスティネーション・データ・ベクトル構造体内の交互する位置の第2のセット内に格納される、格納することとを行うためのベクトル・インタリーブ処理を実行するようデータ処理プログラム・ロジックを制御するための制御信号を生成する。
少なくともいくつかの実施例は、上で言及したコンピュータ・プログラムを非一時的に記憶するコンピュータ可読記憶媒体を提供する。
いくつかの特定の実施例を次に図面を参照して説明する。
図1は本技法の様々な実例を具現化し得るデータ処理装置10を概略的に図示している。装置は、それが実行する一連の命令に応答してデータ項目に対してデータ処理演算を実施するデータ処理回路12を備える。これらの命令は、データ処理装置がアクセス権を有するメモリ14から取り出され、当業者に馴染みのあるやり方でこの目的のためにフェッチ回路16が設けられる。さらには、フェッチ回路16によって取り出された命令は命令デコーダ回路18を通過し、命令デコーダ回路18は、処理回路12並びにレジスタ20のセット、及びロード/ストア・ユニット22の、設定及び動作の様々な態様を制御するように構成される制御信号を生成する。一般的に、データ処理回路12はパイプライン様式に構成することができるが、その詳細は本技法に関連性がない。当業者であれば図1が表す全体的な構成には馴染みがあるが、そのさらなる詳細な説明は、単に簡略化のためここでは省略する。図1から分かるように、レジスタ20はそれぞれ複数のデータ要素についての記憶装置を備え、それによって処理回路はデータ処理演算を指定されたレジスタ内の指定されたデータ要素に適用することができるか、又はデータ処理演算を指定されたレジスタ内の指定されたデータ要素の群(「ベクトル」)に適用することができる。特に、図示されるデータ処理装置はベクトル化されたデータ処理演算のパフォーマンスに関連しており、特にベクトル・インタリーブ命令の実行にとって、レジスタ20に保持されるデータ要素の観点から、そのさらなる説明をいくつかの具体的な実施例を参照して以下でより詳細に与える。命令の実行においてデータ処理回路12によって必要とされるデータ値、及びそれらのデータ処理命令の結果として生成されるデータ値は、ロード/ストア・ユニット22によって、メモリ14に書き込まれ、メモリ14から読み出される。図1のメモリ14は一般的に、本技法の命令を記憶することができるコンピュータ可読記憶媒体の実例として、典型的には処理回路がその後に実行する所定の命令のシーケンスの一部(「プログラム」)として、見なされ得ることにも留意されたい。しかしながら処理回路は、RAM内の、ROM内の、ネットワーク・インターフェースを介して、などの、様々な異なるソースからそのようなプログラムにアクセスすることができる。本開示は、処理回路12が実行することができる様々な新規な命令を説明しており、これらの命令の実行などをサポートするために以下の図面はこれらの命令の性質、データ処理回路における変形例のさらなる説明を与える。
図2Aは、一実施例における、レジスタ及びデータ処理回路を概略的に図示している。この実例では、ソース・レジスタ30(ソース0)及びソース・レジスタ32(ソース1)並びにデスティネーション・レジスタ34が示されている。この3つのレジスタのセットは、図示される処理を実行させる(コンポーネント間の適当な接続を可能にすることによって)ベクトル・インタリーブ命令で指定される。示されるように、入力データ要素の対が第1及び第2のソース・レジスタ内の隣接位置から取り出され、これらは個々の「演算」(OP:Operation)回路36、38、40、及び42内でそれぞれに対して実行されるデータ処理演算へのオペランドを与えている。データ処理回路のこれらの項目によって実行される特定の演算は、様々な形態を取ることができるが、図2Aで示される処理に対応する3つのレジスタの個々の位置においてデータ項目の実例の内容によって図2Bで示されるように、この実例では演算は排他的ORである。しかしながら、他の実例では演算はあらゆる種類の算術演算(例えば、加算、乗算など)、論理演算(例えば、AND、ORなど)、又はシフト演算(左又は右、またあらゆる適切な数のビット位置による)であり得る。データ演算回路からデスティネーション・レジスタ34へ向かう結果データ経路によって示されるように、この処理によって生成される結果データ項目は、入力データ対の由来元であるソース・レジスタに依存してデスティネーション・レジスタ内の交互する位置に格納される。したがって、示される実例では、ソース・レジスタ30からの結果データ項目は、奇数番号の位置1及び3に格納され、一方でソース・レジスタ32から得られる結果データ項目は偶数番号の位置0及び2に格納される。これは、これらの奇数及び偶数の位置が反転するべく様々に設定されるベクトル・インタリーブ命令に応じて、様々に与えられ得ることを理解されたい。最後に、図2A及び図2Bのレジスタのそれぞれは、データ入力値の2つの対がそれぞれのソース・レジスタから得られ、4つの結果データ項目がデスティネーション・レジスタに書き込まれることを示すよう図示されるが、図面の左手方面に向かう線の延長がこのベクトル化されたデータ処理のコンテキストにおいては、図示される処理のさらなる繰り返しが、提供される装置のベクトル処理能力の幅にわたって与えられ得ることを図示することに留意されたい。
図3Aは、図2A及び図2Bで示された実施例に類似する実施例におけるデータ処理回路及びレジスタを概略的に図示している。第1のソース・レジスタ40及び第2のソース・レジスタ42(ソース・レジスタ0及び1)並びにデスティネーション・レジスタ44が示されている。必要とされるデータ処理演算(「OP」)46、48、50、及び52を実行するためのデータ処理回路がやはり示されている。この実例では図3Bで与えられる実例の内容によって図示されるように、演算は乗算である。先のように、この演算は、必要とされるあらゆる選ばれた算術、論理、又はシフト演算であることができる。図3Aと図2Aとの違いは、図3Aはそれぞれのソース・レジスタから取り出されるそれぞれのデータ項目のサイズが、デスティネーション・レジスタ内に格納されたそれぞれ得られる結果データ値のサイズの半分である「拡大」演算の実施を図示していることである。ここでは入力データ項目がダブル(d)であり、且つ結果データ項目がクワッド(q)である実例を与える。これはバイナリ型浮動小数点形式であるため、ダブルの入力データ項目はそれぞれ64ビット値、一方クワッド値はそれぞれ128ビット値である。これにより、この実例の演算が乗算である場合、図3Bの実例の内容をやはり参照して、示されている実例のデータ処理を実行することができ、したがって、この手法により拡大する、情報を損ねないキャリー無しの乗算を実行することが可能となる。また図3Aの具体的な実例において、ダブルはソース・レジスタ内のそれぞれ128ビットのデータ項目の下位半分から得られ、これはこのデータ処理をトリガするベクトル・インタリーブ命令において指定可能であることにやはり留意されたい。データ項目の上位半分を得ることができる逆の実例もやはり与えることができる。一実例において、命令はこれをサポートするために2つの形式、「T」形式(上位半分の内容を使用させる)、及び「B」形式(下位半分の内容を使用させる)で提供される。事実、本技法は、データ項目のサイズをそのようなフォーマット、例えば、8ビットのバイト、16ビットのハーフ、32ビットのシングル、64ビットのダブル、及び128ビットのクワッド、の広い範囲にわたって指定可能である、ベクトル・インタリーブ命令を提供する。そのようなソース・レジスタの能力及びデータ処理回路の向上として、さらなる拡張がもちろん可能である。図3A及び図3Bの実例が拡大するデータ処理演算を与える場合、逆の機能もまた提供され、適切なデータ処理演算についてより狭い結果データ項目がより幅のあるソース・レジスタ入力データ項目から生成されることにやはり留意されたい。
図4Aは、第1のソース・レジスタ60及びデスティネーション・レジスタでもある第2のソース・レジスタ62の、2つのレジスタのみが使用される別の実例を示している。換言すると、演算回路64、66、68、及び70のデータ処理によって生成される結果データ値は、ソース・レジスタ62に格納し戻される。それによって、この実例は、第2のソース・レジスタ62の内容が、結果データ項目がそれを上書きしてしまうと失われる点において「相殺的」であると言うことができる。このセット・アップについての実例の内容を図4Bに与えるが、ソース0の内容を示し、またデータ処理の前後両方のソース1の内容を示している。この実例において、データ処理はXOR演算であるが、上述の他の実例におけるように、これは必要とされるあらゆる種類の算術、論理、又はシフト演算であることができる。
図5Aはさらなる実例の実施例を概略的に図示している。この実例ではソース・レジスタ80、及び82並びにデスティネーション・レジスタ84が示されている。加えて、この実例では述語値86もやはり示されている。この述語値は命令内で即値として指定することができるか、又はデータ処理装置内でのその記憶場所、例えば別のレジスタによって指定することができる。述語値のビット位置とデータ処理のレーンとの間に対応関係がある点において、データ処理に対する述語値の効果を図5Aに見ることができる。したがって、述語値の2つのビットが設定(1)され、且つ2つのビットが設定解除(0)される場合、これはデータ処理回路項目88、90、92、94、96、98、100及び102によって実施される処理を適宜効果的に切り替える。具体的には、示される実例では、項目90、94、98及び102によってはどの処理も実施されず、一方88、92、96及び100は図2A、図3A、及び図4Aを参照して上述したように演算を行う。図5Aで示される実例では、図5Bで図示されるように、処理はXOR演算であるが、先のようにあらゆる算術、論理、又はシフト演算を同様に実施することができる。したがって、実際、デスティネーション・レジスタの内容は、アクティブなデータ処理回路(OPユニット)から結果データ項目を受信するそれらの位置において修正されるだけであり、図5Aにおいてはデスティネーション・レジスタ内の修正されない位置はハッチングされている。図5Bはデータ処理の前後両方のデスティネーション・レジスタの内容を示しており、ある位置の内容が変化しないことを実証している。
図6は、入力データ項目の対に対して異なる手法が取られる、さらなる実例の構成を概略的に図示している。ソース・レジスタ110、及び112並びにデスティネーション・レジスタ114が示されている。この実例において、対は2つのソース・レジスタにまたがっており、すなわち1つの入力オペランド・データ項目は第1のソース・レジスタから得られ、一方別の入力オペランド・データ項目は他のソース・レジスタから得られる。したがって、図6の実例では、データ項目A0及びA2は第1のソース・レジスタから得られ、第2のソース・レジスタからのデータ項目B1及びB3と個々に対にされる。これらはデータ処理回路114及び116へ入力を与え、記されているようにXOR演算を実施するものと分かる(以前の実例のように、この演算は様々に定義することができる)。データ処理回路のこれらの2つの項目によって生成される結果データ項目は、デスティネーション・レジスタ114内で、実行されるデータ処理によって変更されないままであるデスティネーション・レジスタ114内の位置の第2のセットでインタリーブされる、2つの位置に格納される。図6の実例に関して、第1のソース・レジスタからの入力データ項目を与える偶数番号位置の選択と、第2のソース・レジスタ内の入力データ項目を与える奇数番号位置とは反転することができる、すなわち奇数番号項目が第1のソース・レジスタから由来し、偶数番号項目が第2のソース・レジスタから由来することを理解されたい。同様に、結果データ項目を書き込む偶数番号位置の選択は、代わりにデスティネーション・レジスタ内の変更されないデータ項目を有する奇数番号位置のセットになるように選択されてもよく、この時もちろん偶数番号位置を占有している。所与の命令内の適切なフラグによって、又はそれぞれのバージョン用に別個に定義される命令によってのいずれかで、すべてのこれらの並べ替えをサポートする命令を提供することができる。
次に、図7及び図8は、多項式乗算のコンテキストにおいて使用される本技法の一実例の実施例を図示して説明している。ここで、本技法は特に排他的OR演算を指定するベクトル・インタリーブ命令を提供し、さらにはこの排他的OR演算は図8の実例でEORBT及びEORTBと称される2つのフォーマットで提供され、ここで最後の2文字「B」及び「T」は「bottom」及び「top」を指しており、要するに所与のデータ項目の下位半分及び上位半分であり、以下でより詳細に説明されるようなこれらが扱われるべきやり方を示している。これらの特定の命令は(ガロア域において)多項式乗算を加速するために有益である。さらに、この実例はキャリー無しの乗算の1つである。したがって、図7で示されるいくつかの定義で始まり、以下の通りになるようカラツバ手法が取られる:
{X1,X0}*{Y1,Y0}=H_128{P1,P0^P1^Q1^R1},
L_128{Q1^P0^Q0^R0,Q0}
ここで:
{P1,P0}=X1*Y1
{Q1,Q0}=X0*Y0
{R1,R0}=(X0^X1)*(Y0^Y1)
さらに、ベクトルzX及びzYを定義する:
zX={.....X1,X0} and zY={.....Y1,Y0}
次の命令シーケンス(上で言及したEORTB及びEORBT命令を使用して)を使用して、次いで必要な計算を実行することができる。
PMULLB z1.q,zY.d,zX.d //z1={.....Q1,Q0}
PMULLT z2.q,zY.d,zX.d //z2={.....P1,P0}
EORBT zX.q,zX.d,zX.d
EORBT zY.q,zY.d,zY.d
PMULLB z3.q,zX.d,zY.d //z3={.....R1,R0}
EOR z3.d,z3.d,z2.d
EOR z3.d,z3.d,z1.d //z3={.....P1^Q1^R1,P0^Q0^R0}
EORTB z1.q,z1.d,z3.d
EORBT z2.q,z2.d,z3.d
したがって、それぞれ128ビット幅の乗算の256ビットの結果は、レジスタz1とz2との間で分割され、z1は下位128ビットを含み、z2は上位128ビットを含むことに留意されたい。これは、例えば最小ベクトル長が128ビットである実装形態において効率的に機能し、したがって、この実例の命令(コード)のシーケンスはそのようなシステム内のあらゆる所与のベクトル長で機能することができる。図8はレジスタzX、zY、z1、z2及びz3の、これらの命令が実行されてこれらの個々の下位128ビット(最終的にレジスタz1に入る)及び上位128ビット(最終的にレジスタz2に入る)を生成する際の、個々のデータ項目の内容を示す。
図9は、装置により本技法のベクトル・インタリーブ命令に遭遇する場合の、一実施例の方法で取られるステップのシーケンスを示す。フローは、ステップ200から始まると考えることができるが、ここで命令デコーダ回路によって受信された命令のシーケンス内の次の命令がデコードされる。次いでステップ202で、これがベクトル・インタリーブ命令かどうか判断される。ベクトル・インタリーブ命令でない場合、フローはステップ204に進み、この他の種類の命令が適当に処理される(本明細書は他のタイプの命令は考慮しない)。しかしながら、ステップ202でこれがベクトル・インタリーブ命令であると分かると、フローはステップ206に進み、ここで入力データ項目が第1のソース・レジスタから取り出され、ステップ208で入力データ項目が第2のソース・レジスタから取り出される。先行する図面の説明を読んでいるため、ステップ206及び208は順序良く実行される必要がなく、実際に典型的には並列に実行され、図9では単純化のためにこれを順次的な様式で図示するだけであることが理解されよう。ステップ210において、このベクトル・インタリーブ命令によって定義されるデータ処理演算を、ベクトル・インタリーブ命令によって定義されるような入力データ項目の対を使用して実行され、ステップ212において、遭遇する特定のタイプのベクトル・インタリーブ命令に適当なように結果データ項目がデスティネーション・レジスタ内の交互する位置に格納される。次にフローは、ステップ200に戻る。
図10は別の実施例の方法で取られるステップのシーケンスを示しており、異なるタイプのベクトル・インタリーブ命令に遭遇し得る実施例のさらなる詳細を与える。フローはステップ220から始まり、命令デコーダ回路によって受信されたうちの次の命令がデコードされる。これがベクトル・インタリーブ命令ではないと分かると(ステップ222)、フローはステップ224を介して進み、この他のタイプの命令が適当に処理される(やはり、これは本開示が考慮するところではない)。これがベクトル・インタリーブ命令である場合、フローはステップ224に進み、これがベクトル・インタリーブ命令の「対方向(pairwise)」、又は「対角(diagonal)」のスタイルかどうか判断される。これが対方向のベクトル・インタリーブ命令である場合、フローはステップ226に進み、データ項目の対の第1のセットが第1のソース・レジスタから取り出され、データ項目の対の第2のセットが第2のソース・レジスタから取り出される(命令で指定される通り)。ステップ228において、これらの対は命令によって指定される必要とされる処理演算にかけられる。ステップ230において、データ項目の第1の対の結果はデスティネーション・レジスタ内の奇数位置に格納され、一方でデータ項目の対の第2のセットからの結果はデスティネーション・レジスタ内の偶数位置に格納される。ステップ230のカッコ内で示すように、この奇数と偶数の選択は反転することができる(例えば、対方向命令の2つの変数によって)。次にフローは、ステップ220に戻る。ステップ224に戻って考えると、代わりにこれが対角のベクトル・インタリーブ命令である場合、フローはステップ224からステップ232に進み、第1及び第2のソース・レジスタ内の対角線上で隣接する位置からの入力データ項目の対が取り出され、ステップ234においてこれらはベクトル・インタリーブ命令によって定義されるデータ処理演算にかけられる。次いでステップ236においてデータ処理演算の結果はデスティネーション・レジスタ内の奇数位置に格納され、偶数位置を修正されないままとする(変更無し)。図10のステップ236においてカッコ付きの語句「偶数」及び「奇数」は、この奇数と偶数の選択は反転することができる(例えば、対角命令の2つの変数によって)ことを示している。次にフローは、ステップ220に戻る。
図11は使用され得るシミュレータの実装形態を図示している。先に説明された実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本発明を実装している一方、本明細書で説明される実施例にしたがっており、コンピュータ・プログラムの使用を通じて実装される命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、しばしばシミュレータと称される。シミュレータ・コンピュータ・プログラムの種類としては、エミュレータ、仮想マシン、モデル、及びダイナミック・バイナリ変換器を含むバイナリ変換器が挙げられる。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティングシステム720を実行させ、シミュレータ・プログラム710をサポートする、ホスト・プロセッサ730上で実行することができる。いくつかの構成において、ハードウェアと提供される命令実行環境との間に複数のシミュレーションのレイヤ、及び/又は同一のホスト・プロセッサ上に設けられる複数の別個の命令実行環境があってもよい。歴史的には、適度な速度で実行するシミュレータ実装形態を提供するためにパワーのあるプロセッサが要求されてきたが、そのような手法は一定の状況下で正当化されてもよく、例えば互換性又は再使用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。例えば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加的な機能性を伴う命令実行環境を提供すること、又は典型的には異なるハードウェア・アーキテクチャに関連付けられる命令実行環境を提供することができる。シミュレーションの概略はRobert Bedichek、「Some Efficient Architecture Simulation Techniques」、1990年冬季USENIX Conference、53~63頁に示されている。
ある程度、その実施例は特定のハードウェア構築物又は特徴を参照して以前に説明されており、シミュレートされる実施例においては、等価な機能性が適切なソフトウェア構築物又は特徴によって提供され得る。例えば、特定の回路がコンピュータ・プログラム・ロジックとしてシミュレートされる実施例に実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアが、ソフトウェア・データ構造体としてシミュレートされた実施例に実装されてもよい。以前に説明された実施例において参照されるハードウェア要素の1つ又は複数がホスト・ハードウェアに存在する構成(例えば、ホスト・プロセッサ730)において、いくつかのシミュレートされる実施例は適切であればホスト・ハードウェアを利用することができる。
シミュレータ・プログラム710はコンピュータ可読記憶媒体(非一時的媒体であってもよい)に記憶することができ、ターゲット・コード700(アプリケーション、オペレーティング・システム、及びハイパーバイザを含み得る)にプログラム・インターフェース(命令実行環境)を提供するが、ターゲット・コード700はシミュレータ・プログラム710によってモデリングされるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同一のものである。したがって、上述のベクトル・インタリーブ命令を含むターゲット・コード700のプログラム命令は、命令実行環境内からシミュレータ・プログラム710を使用して実行することができ、それによって、上で議論した装置2のハードウェア特徴を実際には有していないホスト・コンピュータ730がこれらの特徴をエミュレートすることができる。
簡単で全体的な概要としては、データ処理装置におけるベクトル・インタリーブ技法が装置、命令、装置を動作させる方法、及び仮想マシン実装形態を含んで開示される。ベクトル・インタリーブ命令は、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定する。入力データ項目の第1のセットは第1のソース・レジスタから取り出され、入力データ項目の第2のセットは第2のソース・レジスタから取り出される。データ処理演算は、入力データ項目の第1及び第2のセットから得られる選択された入力データ項目対に対して実施され、結果データ項目のセットを生成し、結果データ・ベクトルとしてデスティネーション・レジスタ内に格納される。第1のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第1のセットに格納され、第2のソース・レジスタ依存結果データ項目はデスティネーション・データ・ベクトル内の交互する位置の第2のセットに格納される。
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び趣旨を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組合せが可能である。

Claims (22)

  1. 命令をデコードするための命令デコーダ回路と、
    入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路と
    を備え、
    前記命令デコーダ回路は、第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、
    前記第1のソース・レジスタからの入力データ項目の第1のセットを取り出すことと、
    前記第2のソース・レジスタからの入力データ項目の第2のセットを取り出すことと、
    前記入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成することと、
    前記結果データ項目のセットを結果データ・ベクトルとして前記デスティネーション・レジスタに格納することであって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目は前記デスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、当該第1のセットの前記交互する位置は前記第1のソース・レジスタ依存結果データ項目が格納されていない位置と交互する位置であり、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目は前記デスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納され、当該第2のセットの前記交互する位置は前記第2のソース・レジスタ依存結果データ項目が格納されていない位置と交互する位置である、格納することと
    を行うためのベクトル・インタリーブ処理を実行するよう前記データ処理回路を制御するための制御信号を生成する、装置。
  2. 前記入力データ項目の第1及び第2のセットから得られる前記選択された入力データ項目対は、
    前記第1のソース・レジスタ内の入力データ項目の隣接対から形成される入力データ項目対の第1のセット、及び
    前記第2のソース・レジスタ内の入力データ項目の隣接対から形成される入力データ項目対の第2のセット
    を含む、請求項1に記載の装置。
  3. 前記デスティネーション・データ・ベクトル内の前記交互する位置の第1のセットは前記デスティネーション・データ・ベクトル内の前記交互する位置の第2のセットと交互になる、請求項2に記載の装置。
  4. 前記交互する位置の第1のセットは前記デスティネーション・データ・ベクトル内の位置の偶数番号セットであり、前記交互する位置の第2のセットは前記デスティネーション・データ・ベクトル内の位置の奇数番号セットである、請求項3に記載の装置。
  5. 前記交互する位置の第1のセットは前記デスティネーション・データ・ベクトル内の位置の奇数番号セットであり、前記交互する位置の第2のセットは前記デスティネーション・データ・ベクトル内の位置の偶数番号セットである、請求項3に記載の装置。
  6. 前記入力データ項目の第1及び第2のセットから得られる前記選択された入力データ項目対は、前記第2のソース・レジスタ内の交互する入力データ項目と対にされる、前記第1のソース・レジスタ内の交互する入力データ項目から形成される対角の入力データ項目対を含む、請求項1に記載の装置。
  7. 前記第1のソース・レジスタ依存結果データ項目及び前記第2のソース・レジスタ依存結果データ項目は結果データ項目の同一のセットであり、前記交互する位置の第1のセット及び前記交互する位置の第2のセットは前記デスティネーション・データ・ベクトル内の交互する位置の同一のセットである、請求項6に記載の装置。
  8. 前記交互する位置の第1のセット及び前記交互する位置の第2のセットは、先行するデータ項目のセットが前記デスティネーション・データ・ベクトル内に留まる位置のさらなるセットと交互になり、前記先行するデータ項目のセットは、前記データ処理回路が前記ベクトル・インタリーブ処理を開始する前に前記デスティネーション・データ・ベクトル内の前記位置のさらなるセットに存在する、請求項6又は7に記載の装置。
  9. 前記位置の第1のセットは前記デスティネーション・データ・ベクトル内の位置の偶数番号セットであり、前記位置のさらなるセットは前記デスティネーション・データ・ベクトル内の位置の奇数番号セットである、請求項8に記載の装置。
  10. 前記位置の第1のセットは前記デスティネーション・データ・ベクトル内の位置の奇数番号セットであり、前記位置のさらなるセットは前記デスティネーション・データ・ベクトル内の位置の偶数番号セットである、請求項8に記載の装置。
  11. 前記第1のソース・レジスタ内の前記交互する入力データ項目は前記第1のソース・レジスタ内の位置の偶数番号セットから取り出され、前記第2のソース・レジスタ内の前記交互する入力データ項目は前記第2のソース・レジスタ内の位置の奇数番号セットから取り出される、請求項6から10までのいずれかに記載の装置。
  12. 前記第1のソース・レジスタ内の前記交互する入力データ項目は前記第1のソース・レジスタ内の位置の奇数番号セットから取り出され、前記第2のソース・レジスタ内の前記交互する入力データ項目は前記第2のソース・レジスタ内の位置の偶数番号セットから取り出される、請求項6から10までのいずれかに記載の装置。
  13. 前記データ処理演算は算術演算、論理演算、又はシフト演算である、請求項1から12までのいずれかに記載の装置。
  14. 前記ベクトル・インタリーブ命令で指定される前記デスティネーション・レジスタは前記第1のソース・レジスタ及び前記第2のソース・レジスタのうちの1つである、請求項1から13までのいずれかに記載の装置。
  15. 前記ベクトル・インタリーブ命令は前記入力データ・ベクトル内の前記個々の位置に対応する述語ビットを含む述語値をさらに指定し、且つ前記データ処理回路は前記述語値内の設定解除された述語ビットにさらに応答して前記入力データ項目の第1のセットの入力データ項目及び前記設定解除された述語ビットに対応する前記ベクトル・インタリーブ処理内の前記入力データ項目の第2のセットの関与を抑制する、請求項1から14までのいずれかに記載の装置。
  16. 前記ベクトル・インタリーブ命令は前記入力データ項目の第1のセットの第1のデータ項目サイズ、前記入力データ項目の第2のセットの第2のデータ項目サイズ、及び前記結果データ項目のセットの結果データ項目サイズをさらに指定する、請求項1から15までのいずれかに記載の装置。
  17. 前記入力データ項目の第2のセットの前記第1のデータ項目サイズ及び前記第2のデータ項目サイズは、前記結果データ項目のセットの前記結果データ項目サイズよりも小さい、請求項16に記載の装置。
  18. 前記入力データ項目の第2のセットの前記第1のデータ項目サイズ及び前記第2のデータ項目サイズは、前記結果データ項目のセットの前記結果データ項目サイズよりも大きい、請求項16に記載の装置。
  19. データ処理装置を動作させる方法であって、
    命令をデコードするステップと、
    入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用するステップと、
    前記装置の第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、
    前記第1のソース・レジスタからの入力データ項目の第1のセットを取り出すことと、
    前記第2のソース・レジスタからの入力データ項目の第2のセットを取り出すことと、
    前記入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成することと、
    前記結果データ項目のセットを結果データ・ベクトルとして前記デスティネーション・レジスタに格納することであって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目は前記デスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、当該第1のセットの前記交互する位置は前記第1のソース・レジスタ依存結果データ項目が格納されていない位置と交互する位置であり、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目は前記デスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納され、当該第2のセットの前記交互する位置は前記第2のソース・レジスタ依存結果データ項目が格納されていない位置と交互する位置である、格納することと
    を含むベクトル・インタリーブ処理を実行するよう前記装置のデータ処理回路を制御するための制御信号を生成するステップと
    を含む、方法。
  20. 装置であって、
    命令をデコードする手段と、
    入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用する手段と、
    前記装置の第1のソース・レジスタ、第2のソース・レジスタ、及びデスティネーション・レジスタを指定するベクトル・インタリーブ命令に応答して、
    前記第1のソース・レジスタからの入力データ項目の第1のセットを取り出すための手段と、
    前記第2のソース・レジスタからの入力データ項目の第2のセットを取り出すための手段と、
    前記入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成するための手段と、
    前記結果データ項目のセットを結果データ・ベクトルとして前記デスティネーション・レジスタに格納するための手段であって、第1のソース・レジスタ内容依存性を有する第1のソース・レジスタ依存結果データ項目は前記デスティネーション・データ・ベクトル内の交互する位置の第1のセット内に格納され、当該第1のセットの前記交互する位置は前記第1のソース・レジスタ依存結果データ項目が格納されていない位置と交互する位置であり、第2のソース・レジスタ内容依存性を有する第2のソース・レジスタ依存結果データ項目は前記デスティネーション・データ・ベクトル内の交互する位置の第2のセット内に格納され、当該第2のセットの前記交互する位置は前記第2のソース・レジスタ依存結果データ項目が格納されていない位置と交互する位置である、格納するための手段と
    を含むベクトル・インタリーブ処理を実行するよう前記装置のデータ処理回路を制御するための制御信号を生成する手段と
    を含む、装置。
  21. 命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
    命令をデコードするための命令デコード・プログラム・ロジックと、
    入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトル構造体への前記命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックと
    を含み、
    前記命令デコード・プログラム・ロジックは、第1のソース・データ構造体、第2のソース・データ構造体、及びデスティネーション・データ構造体を指定するベクトル・インタリーブ命令に応答して、
    前記第1のソース・データ構造体からの入力データ項目の第1のセットを取り出すことと、
    前記第2のソース・データ構造体からの入力データ項目の第2のセットを取り出すことと、
    前記入力データ項目の第1及び第2のセットから得られる少なくとも選択された入力データ項目対に対してデータ処理演算を実施して結果データ項目のセットを生成することと、
    前記結果データ項目のセットを結果データ・ベクトル構造体として前記デスティネーション・データ構造体に格納することであって、第1のソース・データ構造体内容依存性を有する第1のソース・データ構造体依存結果データ項目は前記デスティネーション・データ・ベクトル構造体内の交互する位置の第1のセット内に格納され、当該第1のセットの前記交互する位置は前記第1のソース・データ構造体依存結果データ項目が格納されていない位置と交互する位置であり、第2のソース・データ構造体内容依存性を有する第2のソース・データ構造体依存結果データ項目は前記デスティネーション・データ・ベクトル構造体内の交互する位置の第2のセット内に格納され、当該第2のセットの前記交互する位置は前記第2のソース・データ構造体依存結果データ項目が格納されていない位置と交互する位置である、格納することと
    を行うためのベクトル・インタリーブ処理を実行するよう前記データ処理プログラム・ロジックを制御するための制御信号を生成する、コンピュータ・プログラム。
  22. 請求項21に記載の前記コンピュータ・プログラムを非一時的に記憶するコンピュータ可読記憶媒体。
JP2020501160A 2017-07-20 2018-07-02 データ処理装置におけるベクトル・インタリーブ Active JP7186212B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1711707.8A GB2564853B (en) 2017-07-20 2017-07-20 Vector interleaving in a data processing apparatus
GB1711707.8 2017-07-20
PCT/GB2018/051854 WO2019016508A1 (en) 2017-07-20 2018-07-02 INTERLACING VECTORS IN A DATA PROCESSING APPARATUS

Publications (2)

Publication Number Publication Date
JP2020527797A JP2020527797A (ja) 2020-09-10
JP7186212B2 true JP7186212B2 (ja) 2022-12-08

Family

ID=59771758

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020501160A Active JP7186212B2 (ja) 2017-07-20 2018-07-02 データ処理装置におけるベクトル・インタリーブ

Country Status (9)

Country Link
US (1) US11093243B2 (ja)
EP (1) EP3655852B1 (ja)
JP (1) JP7186212B2 (ja)
KR (1) KR102591988B1 (ja)
CN (1) CN110914801B (ja)
GB (1) GB2564853B (ja)
IL (1) IL271636B2 (ja)
TW (1) TWI766056B (ja)
WO (1) WO2019016508A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449336B2 (en) 2019-05-24 2022-09-20 Texas Instmments Incorporated Method of storing register data elements to interleave with data elements of a different register, a processor thereof, and a system thereof
US20240004648A1 (en) * 2022-07-02 2024-01-04 Intel Corporation Vector unpack based on selection information

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005174297A (ja) 2003-12-09 2005-06-30 Arm Ltd Simd処理における多重化操作

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7301541B2 (en) * 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5845112A (en) 1997-03-06 1998-12-01 Samsung Electronics Co., Ltd. Method for performing dead-zone quantization in a single processor instruction
US6418529B1 (en) * 1998-03-31 2002-07-09 Intel Corporation Apparatus and method for performing intra-add operation
US6211892B1 (en) * 1998-03-31 2001-04-03 Intel Corporation System and method for performing an intra-add operation
US6115812A (en) * 1998-04-01 2000-09-05 Intel Corporation Method and apparatus for efficient vertical SIMD computations
US6324638B1 (en) * 1999-03-31 2001-11-27 International Business Machines Corporation Processor having vector processing capability and method for executing a vector instruction in a processor
US7624138B2 (en) * 2001-10-29 2009-11-24 Intel Corporation Method and apparatus for efficient integer transform
US20030167460A1 (en) * 2002-02-26 2003-09-04 Desai Vipul Anil Processor instruction set simulation power estimation method
US9146738B2 (en) * 2002-03-30 2015-09-29 Hewlett-Packard Development Company, L.P. Interleaving bits of multiple instruction results in a single destination register
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
US9557994B2 (en) * 2004-07-13 2017-01-31 Arm Limited Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US7555514B2 (en) * 2006-02-13 2009-06-30 Atmel Corportation Packed add-subtract operation in a microprocessor
US8255446B2 (en) * 2006-12-12 2012-08-28 Arm Limited Apparatus and method for performing rearrangement and arithmetic operations on data
JP2009048532A (ja) * 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
US8078836B2 (en) * 2007-12-30 2011-12-13 Intel Corporation Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits
GB2484654B (en) * 2010-10-12 2013-10-09 Advanced Risc Mach Ltd Conditional selection of data elements
PL3422178T3 (pl) * 2011-04-01 2023-06-26 Intel Corporation Przyjazny dla wektorów format instrukcji i jego wykonanie
US9021233B2 (en) * 2011-09-28 2015-04-28 Arm Limited Interleaving data accesses issued in response to vector access instructions
CN103999037B (zh) * 2011-12-23 2020-03-06 英特尔公司 用于响应于单个指令来执行横向相加或相减的系统、装置和方法
US9459865B2 (en) * 2011-12-23 2016-10-04 Intel Corporation Systems, apparatuses, and methods for performing a butterfly horizontal and cross add or substract in response to a single instruction
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9785437B2 (en) * 2014-12-23 2017-10-10 Intel Corporation Method and apparatus for performing a vector bit reversal and crossing
US10013253B2 (en) * 2014-12-23 2018-07-03 Intel Corporation Method and apparatus for performing a vector bit reversal
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
CN105335247B (zh) * 2015-09-24 2018-04-20 中国航天科技集团公司第九研究院第七七一研究所 高可靠系统芯片中Cache的容错结构及其容错方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005174297A (ja) 2003-12-09 2005-06-30 Arm Ltd Simd処理における多重化操作

Also Published As

Publication number Publication date
CN110914801A (zh) 2020-03-24
IL271636B1 (en) 2023-07-01
JP2020527797A (ja) 2020-09-10
US11093243B2 (en) 2021-08-17
GB2564853A (en) 2019-01-30
CN110914801B (zh) 2023-10-24
GB201711707D0 (en) 2017-09-06
WO2019016508A1 (en) 2019-01-24
IL271636B2 (en) 2023-11-01
IL271636A (en) 2020-02-27
EP3655852B1 (en) 2023-09-13
EP3655852A1 (en) 2020-05-27
GB2564853B (en) 2021-09-08
US20210026629A1 (en) 2021-01-28
KR20200028965A (ko) 2020-03-17
TW201917710A (zh) 2019-05-01
KR102591988B1 (ko) 2023-10-20
TWI766056B (zh) 2022-06-01

Similar Documents

Publication Publication Date Title
JP2020527778A (ja) レジスタ・ベースの行列乗算
JP7253492B2 (ja) データ処理装置における乗累算
JP2020508513A (ja) データ処理装置における拡大算術計算
JP7148526B2 (ja) データ処理装置におけるベクトルによる要素演算
JP7186212B2 (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
JP6818010B2 (ja) ベクトル長クエリ命令
JP7324754B2 (ja) ベクトル・キャリー付き加算命令
TWI773783B (zh) 用於基於暫存器的複數處理的設備、方法、積體電路、電腦程式及電腦可讀取儲存媒體
TW202340947A (zh) 用於處置儲存在陣列儲存器中之資料元素之技術
TW202349232A (zh) 用於執行外積操作之技術
TW202340948A (zh) 用於處置儲存在陣列儲存器中之資料元素之技術
TW202305588A (zh) 用於向量組合指令之處理設備、方法、及電腦程式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220729

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221031

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20221128

R150 Certificate of patent or registration of utility model

Ref document number: 7186212

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150