JP2017199045A - プロセッサ及びデータ並び替え方法 - Google Patents

プロセッサ及びデータ並び替え方法 Download PDF

Info

Publication number
JP2017199045A
JP2017199045A JP2014178462A JP2014178462A JP2017199045A JP 2017199045 A JP2017199045 A JP 2017199045A JP 2014178462 A JP2014178462 A JP 2014178462A JP 2014178462 A JP2014178462 A JP 2014178462A JP 2017199045 A JP2017199045 A JP 2017199045A
Authority
JP
Japan
Prior art keywords
data
instruction
register
vector
bit
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.)
Pending
Application number
JP2014178462A
Other languages
English (en)
Inventor
宙輝 林
Hiroki Hayashi
宙輝 林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Intellectual Property Management Co Ltd
Original Assignee
Panasonic Intellectual Property Management Co Ltd
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 Panasonic Intellectual Property Management Co Ltd filed Critical Panasonic Intellectual Property Management Co Ltd
Priority to JP2014178462A priority Critical patent/JP2017199045A/ja
Priority to PCT/JP2015/003589 priority patent/WO2016035240A1/ja
Publication of JP2017199045A publication Critical patent/JP2017199045A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】データ並び替え命令を、処理サイクル数を増加させずに、かつ、レジスタに無駄な領域を発生させずに実行するプロセッサを提供する。
【解決手段】演算対象データを格納するレジスタと、データ並び替え命令を解読する命令デコーダと、レジスタに格納された演算対象データから所定数のデータ要素を切り出すデータ切り出し部A(0501)と、データ切り出し部B(0502)と、切り出された部分データを連結するデータ連結部0503と、を備え、データ切り出し部A(0501)とデータ切り出し部B(0502)は、演算対象データから、データ並び替え命令で指定され、かつ、演算対象データにおける同じ位置にある所定数のデータ要素を切り出す。演算対象データからの切り出しと切り出されたデータの連結とは、1個のデータ並び替え命令が命令デコーダで解読されたことに対応して実行される。
【選択図】図5

Description

本開示は、プロセッサ及びデータ並び替え方法に関する。
SIMD(Single Instruction Multiple Date)プロセッサでは、レジスタに格納された連続したデータ要素に対して演算が行われる。このとき、演算対象データが1つのレジスタに格納されていない場合には、演算前に、データ並び替え命令によって1つのレジスタにデータを集める処理が必要となる。そのようなデータ並び替え命令として、例えば、バイトアライン命令がある。
特許文献1には、2つのレジスタに格納されたそれぞれのベクタデータを連結して、命令で指定された位置から、元のベクタデータと同じサイズのベクタデータを切り出すバイトアライン命令が記載されている。図1にそのバイトアライン命令の動作を示す。バイトアライン命令では、レジスタRaに格納された4バイトのバイトベクタ{a0,a1,a2,a3}とレジスタRbに格納された4バイトのバイトベクタ{b0,b1,b2,b3}とを入力として、命令に応じて、入力された2つのバイトベクタを連結したデータから、任意の位置から始まる4バイトのベクタデータの切り出しを行い、その結果をレジスタRcに格納する。図1の(a)では、「valn1 Rc,Ra,Rb」命令により、レジスタRaの1バイト目の位置から4バイトのバイトベクタ{a1,a2,a3,b0}が切り出されて、レジスタRcに格納される。図1の(b)では、「valn2 Rc,Ra,Rb」命令により、レジスタRaの2バイト目の位置から4バイトのバイトベクタ{a2,a3,b0,b1}が切り出されて、レジスタRcに格納される。図1の(c)では、「valn3 Rc,Ra,Rb」命令により、レジスタRaの3バイト目の位置から4バイトのバイトベクタ{a3,b0,b1,b2}が切り出され、レジスタRcに格納される。
特開2004−13185号公報
しかしながら、近年、64ビット長のように、レジスタのサイズが大きくなってきており、切り出したデータを格納するレジスタに不要なデータも含まれてしまうことがある。不要なデータが含まれたレジスタを無駄なく使用するためには、不要なデータと他のレジスタに格納された有効なデータとを並び替える命令がさらに必要になり、処理サイクル数が増加するという課題がある。
そこで、本開示は、データ並び替え命令を、処理サイクル数を増加させずに、かつ、レジスタに無駄な領域を発生させずに実行できるプロセッサ及びデータ並び替え方法を提供する。
本開示のプロセッサは、複数のデータ要素の並びから構成される演算対象データを処理するプロセッサであって、前記演算対象データを含むデータを格納する複数のレジスタと、少なくとも1つの前記演算対象データを格納する、前記複数のレジスタのうちの少なくとも1つを指定するデータ並び替え命令を解読する命令デコーダと、前記少なくとも1つの演算対象データのそれぞれに対応して設けられ、それぞれ、前記データ並び替え命令によって指定された前記複数のレジスタのうちの少なくとも1つに格納された対応する前記演算対象データから、所定数のデータ要素を切り出して部分データを生成する、複数のデータ切り出し部と、前記複数のデータ切り出し部で生成された複数の前記部分データを連結するデータ連結部と、を備え、前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令で指定された位置、かつ、前記演算対象データにおける同じ位置にある前記所定数のデータ要素を切り出し、前記複数のデータ切り出し部による切り出しと前記データ連結部による連結とは、1個の前記データ並び替え命令が前記命令デコーダで解読されたことに対応して、実行される。
また、本開示のデータ並び替え方法は、複数のデータ要素の並びから構成される演算対象データを処理するプロセッサによるデータ並び替え方法であって、前記プロセッサは、前記演算対象データを含むデータを格納する複数のレジスタと、命令デコーダと、複数のデータ切り出し部と、データ連結部とを備え、前記データ並び替え方法は、前記命令デコーダが、少なくとも1つの前記演算対象データを格納する少なくとも1つの前記レジスタを指定するデータ並び替え命令を解読する命令デコードステップと、前記複数のデータ切り出し部が、前記少なくとも1つの演算対象データのそれぞれに対して、前記データ並び替え命令によって指定された前記少なくとも1つのレジスタに格納された対応する前記演算対象データから、所定数のデータ要素を切り出して部分データを生成するデータ切り出しステップと、前記データ連結部が、前記複数のデータ切り出し部で生成された前記複数の部分データを連結するデータ連結ステップと、を含み、前記データ切り出しステップでは、前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令で指定され、かつ、前記演算対象データにおける同じ位置にある前記所定数のデータ要素を切り出し、前記データ切り出しステップでの切り出しと前記データ連結ステップでの連結とは、1個の前記データ並び替え命令が前記命令デコーダで解読されたことに対応して、実行される。
本開示のプロセッサ及びデータ並び替え方法によれば、処理サイクル数を増加させずに、かつ、レジスタに無駄な領域を発生させずに、データ並び替え命令が実行される。
本開示のプロセッサ及びデータ並び替え方法によれば、処理サイクル数を増加させずに、かつ、レジスタに無駄な領域を発生させずに、データ並び替え命令が実行される。
特許文献1に記載のバイトアライン命令の動作を示す図 実施の形態1のプロセッサの構成図 レジスタファイルが持つレジスタの一覧図 Rレジスタ、XDレジスタ及びXQレジスタの関係を示す図 データ並び替え器の構成図 実施の形態1のプロセッサが扱うベクタデータの一覧図 「valnpX.8 XDc,XDa,XDb」命令(valnpX.8のXは0〜4)の動作を示す図 「valnpX.16 XDc,XDa,XDb」命令(valnpX.16のXは0〜2)の動作を示す図 「valnpX.32 XDc,XDa,XDb」命令(valnpX.16のXは0〜1)の動作を示す図 「valnp.8 XDc,XDa,XDb,Imm」命令、「valnp.8 XDc,XDa,XDb,XALNx」命令及び「valnpiX.8 XDc,XDa,XDb,XALNx」命令の動作を示す図 実施の形態1と従来とのデータの並び替えの処理を示す図 実施の形態2のプロセッサの構成図 実施の形態2のデータ並び替え器の構成図 「valnqX.8 XDe,Ra,Rb,Rc,Rd」命令(valnqX.8のXは0〜2)の動作を示す図 実施の形態3のプロセッサの構成図 実施の形態3のデータ並び替え器の構成図 「valnpX.8 XDb,XQa」命令(valnpX.8のXは0〜4)の動作を示す図 実施の形態4のプロセッサの構成図 実施の形態4のデータ並び替え器の構成図 「valnqX.8 XDc,XDa,XDb」命令(valnqX.8のXは0〜2)の動作を示す図 実施の形態5のプロセッサの構成図 実施の形態5のデータ並び替え器の構成図 「valnpshfl2.8 XDd,XDa,XDb,XDc」命令の動作を示す図
以下、適宜図面を参照しながら、実施の形態を詳細に説明する。但し、必要以上に詳細な説明は省略する場合がある。例えば、既によく知られた事項の詳細説明や実質的に同一の構成に対する重複説明を省略する場合がある。これは、以下の説明が不必要に冗長になるのを避け、当業者の理解を容易にするためである。
なお、発明者は、当業者が本開示を十分に理解するために添付図面及び以下の説明を提供するのであって、これらによって特許請求の範囲に記載の主題を限定することを意図するものではない。
(実施の形態1)
以下、図2〜11を用いて、実施の形態1を説明する。
[1−1.構成]
図2は、実施の形態1のプロセッサの構成図である。
図2において、本実施の形態のプロセッサは、命令メモリ0201、命令フェッチ部0202、命令デコーダ0203、レジスタファイル0204、メモリアクセス部0205、データ並び替え器0206、ALU(算術論理演算器)0207、乗算器0208、バレルシフタ0209及びデータメモリ0210を備える。なお、本開示のプロセッサが持つ演算器は一例であり、一部の演算器がない構成や、これ以外の演算器がある構成も考えられる。例えば、プロセッサが持つ演算器としては、除算器、指数・対数演算器、三角関数演算器及び平方根演算器などが考えられる。
命令メモリ0201は、本演算装置の動作を指示する命令を格納するメモリである。命令フェッチ部0202は、次に実行する命令を命令メモリ0201から取得し、取得した命令を命令デコーダ0203に出力する。命令デコーダ0203は、命令フェッチ部0202が出力した命令を解読し、命令を実行する演算器を決定し、演算器群内のメモリアクセス部0205、データ並び替え器0206、ALU0207、乗算器0208及びバレルシフタ0209のうち、少なくとも1つに実行制御信号を出力する。メモリアクセス部0205は、命令デコーダ0203からの実行制御信号に従って、データメモリ0210からデータを取得してレジスタファイル0204に出力するか、レジスタファイル0204からデータを取得してデータメモリ0210に出力する。データ並び替え器0206は、レジスタファイル0204からデータを取得してデータの並び替えを行い、結果をレジスタファイル0204に出力する。ALU0207は、レジスタファイル0204からデータを取得して算術論理演算を行い、結果をレジスタファイル0204に出力する。乗算器0208は、レジスタファイル0204からデータを取得して乗算演算を行い、結果をレジスタファイル0204に出力する。バレルシフタ0209は、レジスタファイル0204からデータを取得してシフト演算を行い、結果をレジスタファイル0204に出力する。レジスタファイル0204は、演算器群内の各演算器が出力するデータを保持するレジスタである。データメモリ0210は、本プロセッサで演算に必要なデータを格納するメモリである。なお、命令メモリ0201とデータメモリ0210は、それぞれ個別のメモリに実装されてもよいし、1つのメモリを共用する形で実装されてもよい。
図3は、レジスタファイル0204が持つレジスタの一覧図である。レジスタファイル0204は、汎用レジスタとXALNレジスタとで構成される。図3の(a)は、レジスタファイル0204を構成する汎用レジスタの一覧図である。図3の(b)は、レジスタファイル0204を構成するXALNレジスタの一覧図である。汎用レジスタは、演算器に入力するデータや、演算結果を格納するためのレジスタである。汎用レジスタは、32本の32ビットのRレジスタ(R0〜R31)、32本の64ビットのXDレジスタ(XD0〜XD31)、16本の128ビットのXQレジスタ(XQ0〜XQ30)の3種類があり、この3種類のレジスタの実体は同じである。つまり、レジスタに格納されるデータサイズにより、Rレジスタ、XDレジスタ及びXQレジスタは使い分けられる。XALNレジスタは、XALN0〜XALN3の4本の4ビットレジスタで、特定の命令のデータ切り出し位置を指定するパラメータを格納するレジスタである。
図4の(a)は、Rレジスタ、XDレジスタ及びXQレジスタの関係を示す図である。図4の(b)は、XDレジスタ及びXQレジスタの関係を示す図である。この3種類のレジスタの実体は同じなので、例えば、XD0を読み出すと、XQ0の[127:64]ビット目のデータを読み出すことができ、XD1を読み出すとXQ0の[63:0]ビット目のデータを読み出すことができる。同様に、R0を読み出すとXD0の[63:32]ビット目のデータを読み出すことができ、R1を読み出すとXD0の[31:0]ビット目のデータを読み出すことができる。ただし、Rレジスタと対応するXDレジスタは図4の(a)に示されるようにXD0〜XD15までで、図4の(b)に示されるようにXD16〜XD31はRレジスタとは対応しない。
図5は、データ並び替え器0206の構成図である。図5において、データ並び替え器0206は、データ切り出し部A0501、データ切り出し部B0502及びデータ連結部0503を備え、命令デコーダ0203からの実行制御信号に従って動作する。命令メモリ0201に格納されたデータ並び替え命令が命令デコーダ0203で解読されることで、命令デコーダ0203からの実行制御信号は、データ並び替え器0206へ送られる。ここで、データ並び替え命令は、演算対象データである入力データAを格納するレジスタと演算対象データである入力データBを格納するレジスタとをレジスタファイル0204から指定する命令である。つまり、データ並び替え命令が命令デコーダ0203で解読されることによって出力される実行制御信号に従って、データ並べ替え器0206は、入力データAと入力データBとをレジスタファイル0204から取得する。
データ切り出し部A0501は、レジスタファイル0204から取得した入力データAに対応して設けられ、入力データAから所定数(ここでは、入力データAのデータ要素数の半分)のデータ要素の切り出しを行う。データ切り出し部B0502は、レジスタファイル0204から取得した入力データBに対応して設けられ、入力データBから所定数(ここでは、入力データBのデータ要素数の半分)のデータ要素の切り出しを行う。データ連結部0503は、データ切り出し部A0501及びデータ切り出し部B0502で切り出された2つの部分データを連結し、データ並び替え器0206から出力する。
[1−2.動作]
以上のように構成された本実施の形態のプロセッサについて、その動作を以下に説明する。
図6は、本実施の形態のプロセッサが扱うベクタデータの一覧図である。本プロセッサでは32ビットベクタ、64ビットベクタ、128ビットベクタの3種類のベクタデータを扱う。なお、ここで説明するベクタデータの種類は、以降の実施の形態においても同様である。
図6の(a)は、32ビットベクタを示す図である。32ビットベクタは、Rレジスタに格納され、4個の8ビットのデータ要素で構成されるバイトベクタと、2個の16ビットのデータ要素で構成されるハーフワードベクタとの2つがある。
図6の(b)は、64ビットベクタを示す図である。64ビットベクタは、XDレジスタに格納され、8個の8ビットのデータ要素で構成されるバイトベクタと、4個の16ビットのデータ要素で構成されるハーフワードベクタと、2個の32ビットのデータ要素で構成されるワードベクタとの3つがある。
図6の(c)は、128ビットベクタを示す図である。128ビットベクタは、XQレジスタに格納され、16個の8ビットのデータ要素で構成されるバイトベクタと、8個の16ビットのデータ要素で構成されるハーフワードベクタと、4個の32ビットのデータ要素で構成されるワードベクタと、2個の64ビットのデータ要素で構成されるダブルワードベクタとの4つがある。
なお、それぞれのデータ要素は、ビット幅が一致すればどのようなデータも格納してもよい。例えば、整数、固定小数点数、浮動小数点数などがそれぞれのデータ要素に格納される。
図7は、「valnpX.8 XDc,XDa,XDb」命令(valnpX.8のXは0〜4)の動作を示す図である。つまり、図7の(a)は「valnp0.8 XDc,XDa,XDb」命令の動作を示す図である。図7の(b)は「valnp1.8 XDc,XDa,XDb」命令の動作を示す図である。図7の(c)は「valnp2.8 XDc,XDa,XDb」命令の動作を示す図である。図7の(d)は「valnp3.8 XDc,XDa,XDb」命令の動作を示す図である。図7の(e)は「valnp4.8 XDc,XDa,XDb」命令の動作を示す図である。
図7で示される「valnpX.8 XDc,XDa,XDb」命令は、命令デコーダ0203で解読され、データ並び替え器0206で実行されるデータ並び替え命令である。「valnpX.8」の「8」は演算対象データがバイトベクタであることを示す。レジスタXDaに格納された64ビットのバイトベクタ{a0,a1,a2,a3,a4,a5,a6,a7}と、レジスタXDbに格納された64ビットのバイトベクタ{b0,b1,b2,b3,b4,b5,b6,b7}とを入力として、命令デコーダ0203からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、64ビットのベクタデータが生成され、生成された64ビットのベクタデータはレジスタXDcに格納される。具体的には、以下の動作が行われる。
「valnpX.8 XDc,XDa,XDb」命令が、命令デコーダ0203で解読されると、命令デコーダ0203からの実行制御信号に従って、演算対象データが格納されたレジスタXDaとレジスタXDbとが指定される。次に、レジスタXDaに格納された演算対象データである64ビットのバイトベクタから、この64ビットのバイトベクタに対応するデータ切り出し部A0501は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。また、レジスタXDbに格納された演算対象データである64ビットのバイトベクタから、この64ビットのバイトベクタに対応するデータ切り出し部B0502は、元の64ビットのバイトベクタから半分のサイズである32ビットのベクタデータを切り出す。次に、切り出された2つのベクタデータを、データ連結部0503は連結して64ビットのベクタデータを生成する。最後に、生成された64ビットのベクタデータはレジスタXDcに格納される。
データ切り出し部A0501とデータ切り出し部B0502とは、それぞれ、対応する演算対象データから、データ並び替え命令のオペコードで指定される位置にあるデータ要素を切り出す。つまり、データ切り出し部A0501とデータ切り出し部B0502とでのデータ切り出し位置は、「valnpX.8 XDc,XDa,XDb」命令のオペコード「valnpX.8」のXで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される64ビットのバイトベクタの同じ位置となる。具体的には、以下の動作が行われる。
「valnp0.8」命令では、それぞれのバイトベクタのMSBから0バイト目の位置からベクタデータが切り出される。
「valnp1.8」命令では、それぞれのバイトベクタのMSBから1バイト目の位置からベクタデータが切り出される。
「valnp2.8」命令では、それぞれのバイトベクタのMSBから2バイト目の位置からベクタデータが切り出される。
「valnp3.8」命令では、それぞれのバイトベクタのMSBから3バイト目の位置からベクタデータが切り出される。
「valnp4.8」命令では、それぞれのバイトベクタのMSBから4バイト目の位置からベクタデータが切り出される。
次に、図8は、「valnpX.16 XDc,XDa,XDb」(valnpX.16のXは0〜2)命令の動作を示す図である。つまり、図8の(a)は「valnp0.16 XDc,XDa,XDb」命令の動作を示す図である。図8の(b)は「valnp1.16 XDc,XDa,XDb」命令の動作を示す図である。図8の(c)は「valnp2.16 XDc,XDa,XDb」命令の動作を示す図である。
図8で示される「valnpX.16 XDc,XDa,XDb」命令は、命令デコーダ0203で解読され、データ並び替え器0206で実行されるデータ並び替え命令である。「valnpX.16」の「16」は演算対象データがハーフワードベクタであることを示す。レジスタXDaに格納された64ビットのハーフワードベクタ{a0,a1,a2,a3}と、レジスタXDbに格納された64ビットのハーフワードベクタ{b0,b1,b2,b3}とを入力として、命令デコーダ0203からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、64ビットのベクタデータが生成され、生成された64ビットのベクタデータはレジスタXDcに格納される。具体的には、以下の動作が行われる。
「valnpX.16 XDc,XDa,XDb」命令が、命令デコーダ0203で解読されると、命令デコーダ0203からの実行制御信号に従って、演算対象データが格納されたレジスタXDaとレジスタXDbとが指定される。次に、レジスタXDaに格納された演算対象データである64ビットのハーフワードベクタから、この64ビットのハーフワードベクタに対応するデータ切り出し部A0501は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。また、レジスタXDbに格納された演算対象データである64ビットのハーフワードベクタから、この64ビットのハーフワードベクタに対応するデータ切り出し部B0502は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。次に、切り出された2つのベクタデータを、データ連結部0503は連結して64ビットのベクタデータを生成する。生成された64ビットのベクタデータはレジスタXDcに格納される。
データ切り出し部A0501とデータ切り出し部B0502とでのデータ切り出し位置は、「valnpX.16 XDc,XDa,XDb」命令のオペコード「valnpX.16」のXで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される64ビットのハーフワードベクタの同じ位置となる。具体的には、以下の動作が行われる。
「valnp0.16」命令ではそれぞれのハーフワードベクタのMSBから0ハーフワード目の位置からベクタデータが切り出される。
「valnp1.16」命令ではそれぞれのハーフワードベクタのMSBから1ハーフワード目の位置からベクタデータが切り出される。
「valnp2.16」命令ではそれぞれのハーフワードベクタのMSBから2ハーフワード目の位置からベクタデータが切り出される。
次に、図9は、「valnpX.32 XDc,XDa,XDb」(valnpX.16のXは0〜1)命令の動作を示す図である。つまり、図9の(a)は「valnp0.32 XDc,XDa,XDb」命令の動作を示す図である。図9の(b)は「valnp1.32 XDc,XDa,XDb」命令の動作を示す図である。
図9で示される「valnpX.32 XDc,XDa,XDb」命令は、命令デコーダ0203で解読され、データ並び替え器0206で実行されるデータ並び替え命令である。「valnpX.32」の「32」は演算対象データがワードベクタであることを示す。レジスタXDaに格納された64ビットのワードベクタ{a0,a1}と、レジスタXDbに格納された64ビットのワードベクタ{b0,b1}とを入力として、命令デコーダ0203からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、64ビットのベクタデータが生成され、生成された64ビットのベクタデータはレジスタXDcに格納される。具体的には、以下の動作が行われる。
「valnpX.32 XDc,XDa,XDb」命令が、命令デコーダ0203で解読されると、命令デコーダ0203からの実行制御信号に従って、演算対象データが格納されたレジスタXDaとレジスタXDbとが指定される。次に、レジスタXDaに格納された演算対象データである64ビットのワードベクタから、この64ビットのワードベクタに対応するデータ切り出し部A0501は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。また、レジスタXDbに格納された演算対象データである64ビットのワードベクタから、この64ビットのワードベクタに対応するデータ切り出し部B0502は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。次に、切り出された2つのベクタデータを、データ連結部0503は連結して64ビットのベクタデータを生成する。生成された64ビットのベクタデータはレジスタXDcに格納される。
データ切り出し部A0501とデータ切り出し部B0502とでのデータ切り出し位置は、「valnpX.32 XDc,XDa,XDb」命令のオペコード「valnpX.32」のXで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される64ビットのワードベクタの同じ位置となる。具体的には、以下の動作が行われる。
「valnp0.32」命令ではそれぞれのワードベクタのMSBから0ワード目の位置からデータが切り出される。
「valnp1.32」命令ではそれぞれのワードベクタのMSBから1ワード目の位置からデータが切り出される。
なお、図7〜9で示される命令では、データ切り出し位置はオペコードで指定されたが、オペコードに限らず、即値オペランド(ここでは、Imm)やレジスタオペランド(ここでは、XALNx)で指定されても構わない。
図10は、「valnp.8 XDc,XDa,XDb,Imm」命令、「valnp.8 XDc,XDa,XDb,XALNx」命令及び「valnpiX.8 XDc,XDa,XDb,XALNx」命令の動作を示す図である。
図10では、例として、即値オペランドImm、及び、レジスタオペランドXALNxに格納された値に2が指定されており、図10で示されるそれぞれの命令では、具体的には、以下の動作が行われる。
レジスタXDaに格納された64ビットのバイトベクタ{a0,a1,a2,a3,a4,a5,a6,a7}と、レジスタXDbに格納された64ビットのバイトベクタ{b0,b1,b2,b3,b4,b5,b6,b7}とから、元の64ビットの半分のサイズである32ビットのベクタデータは、それぞれのバイトベクタのMSBから2バイト目の位置から切り出される。次に、切り出された2つのベクタデータ{a2,a3,a4,a5}と{b2,b3,b4,b5}とは、連結されて64ビットのベクタデータ{a2,a3,a4,a5,b2,b3,b4,b5}になる。最後に、連結された64ビットのベクタデータはレジスタXDcに格納される。
ここで、図10で示される「valnp.8 XDc,XDa,XDb,Imm」命令では、データ切り出し位置はオペコードではなく、データ並び替え命令の即値オペランドで指定される。例えば、Immオペランドに2が指定されると、図10に示されるように、それぞれのバイトベクタのMSBから2バイト目の位置から、ベクタデータが切り出される。
また、図10で示される「valnp.8 XDc,XDa,XDb,XALNx」命令では、データ切り出し位置は、オペコードではなく切り出し位置レジスタであるレジスタオペランドに格納される値で指定される。この命令では、データ切り出し部A0501と切り出し部B0502とは、それぞれ、対応する演算対象データから、レジスタオペランドXALNxに格納された値で指定される位置にあるデータ要素を切り出す。例えば、レジスタXALNxに2が格納されると、図10に示されるように、それぞれのバイトベクタのMSBから2バイト目の位置から、ベクタデータが切り出される。なお、64ビットのバイトベクタはデータ要素数が8個であるため、レジスタXALNxに3ビットを超える(つまり、8以上の)値が格納された場合は、3ビットを超えたビットを捨てた値(つまり、格納された値を8で割った余り)の位置にあるデータ要素が切り出される。例えば、レジスタXALNxに9が格納されると、それぞれのバイトベクタのMSBから9を8で割った余りである1バイト目の位置から、ベクタデータが切り出される。
また、図10で示される「valnpiX.8 XDc,XDa,XDb,XALNx」命令(valnpiX.8のXは1〜7)では、「valnp.8 XDc,XDa,XDb,XALNx」命令と同じようにデータが切り出されて連結される。なお、「valnpiX.8 XDc,XDa,XDb,XALNx」命令では、「valnp.8 XDc,XDa,XDb,XALNx」命令と同じように、64ビットのバイトベクタはデータ要素数が8個であるため、レジスタXALNxに、3ビットを超える値が格納された場合は、3ビットを超えたビットを捨てた値の位置にあるデータ要素が切り出される。その後、オペコードの「valnpiX.8」のXで指定された値を、レジスタXALNxの格納された値は加算される。つまり、「valnpiX.8 XDc,XDa,XDb,XALNx」命令が実行されると、レジスタXALNxに格納された値はXで指定された値により変更される。そして、次にレジスタXALNxが使用されるデータ並び替え命令では、レジスタXALNxに格納された値で指定されるデータ切り出し位置は、Xで指定された所望のデータ切り出し位置となる。なお、レジスタXALNxは4ビット幅であり4ビットを超える(つまり、16以上の)値を格納できないため、レジスタXALNxにXで指定された値が加算されて16以上となった値が格納される場合は、4ビットを超えたビットを捨てた値(つまり、Xで指定された値が加算された値を16で割った余り)がレジスタXALNxに格納される。例えば、レジスタXALNxに15が格納されており、Xで2が指定された場合、加算後の値は、レジスタXALNxに格納された15にXで指定された2が加算され17となる。しかし、加算後の値の17はレジスタXALNxが格納できる4ビットを超えるため、17を16で割った余りである1がレジスタXALNxに格納される。
なお、図10で示される命令はバイトベクタを入力とした命令であるが、図8〜9に示される命令のように、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。この命令では、図8〜9に示される命令と同じデータが生成されるが、データ切り出し位置がオペコードではなく、即値オペランドImm、及び、レジスタオペランドXALNxに格納された値で指定される点が異なる。また、64ビットのハーフワードベクタはデータ要素数が4個であるため、レジスタXALNxに2ビットを超える(つまり、4以上の)値が格納された場合は、2ビットを超えたビットを捨てた値(つまり、格納された値を4で割った余り)の位置にあるデータ要素が切り出される。また、64ビットのワードベクタはデータ要素数が2個であるため、レジスタXALNxに1ビットを超える(つまり、2以上の)値が格納された場合は、1ビットを超えたビットを捨てた値(つまり、格納された値を2で割った余り)の位置にあるデータ要素が切り出される。
また図10で示されるレジスタオペランドXALNxを使用した命令では、データ切り出し位置の値を格納するレジスタとしてレジスタXALNxが指定されたが、これ以外のレジスタが指定されても良い。例えば、Rレジスタ、XDレジスタ、XQレジスタが指定されても良い。また、データ切り出し位置の値を格納するレジスタが1つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
また、図7〜9で示される命令は、3つのレジスタオペランドXDa,XDb,XDcのレジスタ番号a,b,cをそれぞれ別々に指定できる命令であるが、一部のレジスタオペランドのレジスタ番号は連番でなければならないという制約を持つ命令でも良い。例えば、レジスタXDaとレジスタXDbとは連番でなければならないという制約を加えられた命令では、もとのレジスタXDaとレジスタXDbとをそれぞれレジスタXDaとレジスタXDa+1とし、さらに、もとのレジスタXDcをレジスタXDbとしても良い。具体的には、図7で示される「valnpX.8 XDc,XDa,XDb」命令、図8で示される「valnpX.16 XDc,XDa,XDb」命令及び図9で示される「valnpX.32 XDc,XDa,XDb」命令はこの制約が加えられると、それぞれ「valnpX.8 XDb,XDa,XDa+1」命令、「valnpX.16 XDb,XDa,XDa+1」命令及び「valnpX.32 XDb,XDa,XDa+1」命令となる。こうすることで、a,bの2つのレジスタ番号で3つのレジスタオペランドは表現される。つまり、命令コードにおいてレジスタオペランドを表現するために必要なビット長は減らされるので、命令コード長は抑えられる。これによって、命令メモリ0201のサイズは小さくなるので、命令メモリのコストは削減される。
また、図7〜10で示される命令では、データ切り出し位置は、MSBからの位置で指定されているが、LSBからの位置で指定されても良い。
また、本実施の形態のプロセッサは、演算対象データとして64ビットベクタのベクタデータを扱ったが、32ビットベクタ及び128ビットベクタのベクタデータを扱っても良い。
[1−3.効果等]
本開示の実施の形態1のプロセッサでは、2つのレジスタに格納されたそれぞれのベクタデータから元の半分のサイズのデータを切り出し、切り出した2つのデータを連結する一連の処理を1命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
図11は、実施の形態1と従来とのデータの並び替えの処理を示す図である。つまり、図11の(a)は、実施の形態1の「valnp1.16 XDc,XDa0,XDb0」命令の動作を示す図である。図11の(b)は、従来の「valn1 XDa2,XDa0,XDa1」命令の動作を示す図である。図11の(c)は、従来の「valn1 XDb2,XDb0,XDb1」命令の動作を示す図である。図11の(d)は、従来のレジスタXDa2とレジスタXDb2とを結合する命令の動作を示す図である。
図11の(a)で示される命令では、レジスタXDa0に格納されたベクタデータ{a0,a1,a2,a3}とレジスタXDb0に格納されたベクタデータ{b1,b2,b3,b4}とから、元の半分のサイズのデータが、MSBから1ハーフワード目の位置から切り出される。次に、切り出された2つのデータは連結されてベクタデータ{a1,a2,b1,b2}になる。最後に、連結されたベクタデータはレジスタXDcに格納される。図11の(a)で示される命令では、これら一連の動作は1命令で実行されている。
しかし、従来では、図11の(a)で示されるベクタデータ{a1,a2,b1,b2}を生成するために、図11の(b)〜(d)で示される命令がそれぞれ実行される。
つまり、図11の(b)で示される「valn1 XDa2,XDa0,XDa1」命令によりベクタデータ{a1,a2,a3,a4}が生成され、次に、図11の(c)で示される「valn1 XDb2,XDb0,XDb1」命令によりベクタデータ{b1,b2,b3,b4}が生成され、最後に、図11の(d)で示されるレジスタXDa2とレジスタXDb2とを結合する命令によりベクタデータ{a1,a2,b1,b2}が生成される。具体的には、以下の動作が行われる。
図11の(b)で示される「valn1 XDa2,XDa0,XDa1」命令では、レジスタXDa0に格納されたベクタデータ{a0,a1,a2,a3}とレジスタXDa1に格納されたベクタデータ{a4,a5,a6,a7}とは連結される。次に、連結されて生成されたベクタデータ{a0,a1,a2,a3,a4,a5,a6,a7}のMSBから1ハーフワード目の位置からベクタデータは切り出される。切り出されたベクタデータ{a1,a2,a3,a4}は、レジスタXDa2に格納される。
次に、図11の(c)で示される「valn1 XDb2,XDb0,XDb1」命令では、レジスタXDb0に格納されたベクタデータ{b0,b1,b2,b3}とレジスタXDb1に格納されたベクタデータ{b4,b5,b6,b7}とは連結される。次に、連結されて生成されたベクタデータ{b0,b1,b2,b3,b4,b5,b6,b7}のMSBから1ハーフワード目の位置からベクタデータは切り出される。切り出されたベクタデータ{b1,b2,b3,b4}は、レジスタXDb2に格納される。
最後に、図11の(d)で示されるレジスタXDa2とレジスタXDb2とを結合する命令では、レジスタXDa2に格納されたベクタデータ{a1,a2,a3,a4}の上位2ハーフワードとレジスタXDb2に格納されたベクタデータ{b1,b2,b3,b4}の上位2ハーフワードとが連結されることで、ベクタデータ{a1,a2,b1,b2}が生成される。生成されたベクタデータは、レジスタXDcに格納される。
このように、例えば、データ{a0,a1,a2,a3}とデータ{b0,b1,b2,b3}とのうちのデータ{a1,a2}と{b1,b2}とに、同一の演算を実行するために、1つのレジスタに格納されたデータ{a1,a2,b1,b2}が生成されるが、従来のプロセッサでは、このようなデータを生成するために、上述した3つの命令が必要となる。一方、実施の形態1のプロセッサでは、演算が実行されるデータのみを切り出して切り出したデータを連結する、一連の処理を1命令で実行することができる。これにより、データの並び替えの処理サイクル数が削減されるので、処理速度を向上することができる。
(実施の形態2)
以下、図12〜14を用いて、実施の形態2を説明する。
[2−1.構成]
図12は、実施の形態2のプロセッサの構成図である。
図12において、本実施の形態のプロセッサは、データ並び替え器0206の代わりにデータ並び替え器1206を備え、命令デコーダ0203の代わりに命令デコーダ1203を備える点が、実施の形態1のプロセッサと異なる。それ以外の構成要素は実施の形態1のプロセッサと同じであるため、同じ符号をつけて説明は省略する。
命令デコーダ1203は、本実施の形態で説明する命令を解読し、データ並び替え器1206を含む演算器群に実行制御信号を出力する点が実施の形態1の命令デコーダ0203と異なる。
図13は、データ並び替え器1206の構成図である。図13において、データ並び替え器1206は、データ切り出し部A1301、データ切り出し部B1302、データ切り出し部C1303、データ切り出し部D1304及びデータ連結部1305を備え、命令デコーダ1203からの実行制御信号に従って動作する。命令メモリ0201に格納されたデータ並び替え命令が命令デコーダ1203で解読されることで、命令デコーダ1203からの実行制御信号は、データ並び替え器1206へ送られる。ここで、データ並び替え命令は、演算対象データである入力データA〜Dそれぞれを格納するそれぞれのレジスタをレジスタファイル0204から指定する命令である。つまり、データ並び替え命令が命令デコーダ1203で解読されることによって出力される実行制御信号に従って、データ並べ替え器1206は、入力データA〜Dをレジスタファイル0204から取得する。データ並び替え器1206は、データ切り出し部が2つではなく4つ持つ点と、入力データが2つではなく4つである点が実施の形態1のデータ並び替え器0206と異なる。
データ切り出し部A1301は、レジスタファイル0204から取得した入力データAに対応して設けられ、入力データAから所定数(ここでは、入力データAのデータ要素数の半分)のデータ要素の切り出しを行う。データ切り出し部B1302は、レジスタファイル0204から取得した入力データBに対応して設けられ、入力データBから所定数(ここでは、入力データBのデータ要素数の半分)のデータ要素の切り出しを行う。データ切り出し部C1303は、入力データCに対応して設けられ、レジスタファイル0204から取得した入力データCから所定数(ここでは、入力データCのデータ要素数の半分)のデータ要素の切り出しを行う。データ切り出し部D1304は、入力データDに対応して設けられ、レジスタファイル0204から取得した入力データDから所定数(ここでは、入力データDのデータ要素数の半分)のデータ要素の切り出しを行う。データ連結部1305は、データ切り出し部A1301、データ切り出し部B1302、データ切り出し部C1303及びデータ切り出し部D1304で切り出された4つの部分データを連結し、データ並び替え器1206から出力する。
[2−2.動作]
以上のように構成された本開示のプロセッサについて、その動作を以下に説明する。
図14は、「valnqX.8 XDe,Ra,Rb,Rc,Rd」命令(valnqX.8のXは0〜2)の動作を示す図である。つまり、図14の(a)は「valnq0.8 XDe,Ra,Rb,Rc,Rd」命令の動作を示す図である。図14の(b)は「valnq1.8 XDe,Ra,Rb,Rc,Rd」命令の動作を示す図である。図14の(c)は「valnq2.8 XDe,Ra,Rb,Rc,Rd」命令の動作を示す図である。
図14で示される「valnqX.8 XDe,Ra,Rb,Rc,Rd」命令は、命令デコーダ1203で解読され、データ並び替え器1206で実行されるデータ並び替え命令である。「valnqX.8」の「8」は演算対象データがバイトベクタであることを示す。レジスタRaに格納された32ビットのバイトベクタ{a0,a1,a2,a3}と、レジスタRbに格納された32ビットのバイトベクタ{b0,b1,b2,b3}と、レジスタRcに格納された32ビットのバイトベクタ{c0,c1,c2,c3}と、レジスタRdに格納された32ビットのバイトベクタ{d0,d1,d2,d3}とを入力として、命令デコーダ1203からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、64ビットのベクタデータが生成され、生成された64ビットのベクタデータはレジスタXDeに格納される。具体的には、以下の動作が行われる。
「valnqX.8 XDe,Ra,Rb,Rc,Rd」命令が、命令デコーダ1203で解読されると、命令デコーダ1203からの実行制御信号に従って、演算対象データが格納されたレジスタRa〜Rdが指定される。次に、レジスタRaに格納された演算対象データである32ビットのバイトベクタから、この32ビットのバイトベクタに対応するデータ切り出し部A1301は、元の32ビットの半分のサイズである16ビットのベクタデータを切り出す。また、レジスタRbに格納された演算対象データである32ビットのバイトベクタから、この32ビットのバイトベクタに対応するデータ切り出し部B1302は、元の32ビットの半分のサイズである16ビットのベクタデータを切り出す。また、レジスタRcに格納された演算対象データである32ビットのバイトベクタから、この32ビットのバイトベクタに対応するデータ切り出し部C1303は、元の32ビットの半分のサイズである16ビットのベクタデータを切り出す。また、レジスタRdに格納された演算対象データである32ビットのバイトベクタから、この32ビットのバイトベクタに対応するデータ切り出し部D1304は、元の32ビットの半分のサイズである16ビットのベクタデータを切り出す。次に、切り出された4つのベクタデータを、データ連結部1305は連結して64ビットのベクタデータを生成する。生成された64ビットのベクタデータはレジスタXDeに格納される。
データ切り出し部A1301とデータ切り出し部B1302とデータ切り出し部C1303とデータ切り出し部D1304とでのデータ切り出し位置は、「valnqX.8 XDe,Ra,Rb,Rc,Rd」命令のオペコード「valnqX.8」のXで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される32ビットのバイトベクタの同じ位置となる。具体的には、以下の動作が行われる。
「valnq0.8」命令では、それぞれのバイトベクタのMSBから0バイト目の位置からベクタデータが切り出される。
「valnq1.8」命令では、それぞれのバイトベクタのMSBから1バイト目の位置からベクタデータが切り出される。
「valnq2.8」命令では、それぞれのバイトベクタのMSBから2バイト目の位置からベクタデータが切り出される。
なお、図14で示される命令はバイトベクタを入力とした命令であるが、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。
また、図14で示される命令では、データ切り出し位置はオペコードで指定されたが、即値オペランドで指定されても良い。例えば、「valnq.8 XDc,XDa,XDb,Imm」命令でも良い。この命令ではデータ切り出し位置は即値オペランドImmで指定される。例えば、Immオペランドに0が指定されるとMSBから0バイト目の位置から、Immオペランドに1が指定されるとMSBから1バイト目の位置から、ベクタデータが切り出される。
また、図10で示される命令のように、レジスタオペランドで指定されたレジスタに格納された値でデータ切り出し位置が指定されても良い。例えば、データ切り出し位置の値は、XALNレジスタ、Rレジスタ、XDレジスタ及びXQレジスタに格納される。また、データ切り出し位置の値を格納するレジスタが1つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
また、図14で示される命令は、5つのレジスタオペランドRa,Rb,Rc,Rd,XDeのレジスタ番号a,b,c,d,eをそれぞれ別々に指定できる命令であるが、一部のレジスタオペランドのレジスタ番号は連番でなければならないという制約を持つ命令でも良い。例えば、レジスタRaとレジスタRb、レジスタRcとレジスタRdは連番でなければならないという制約を加えられた命令は、もとのレジスタRaとレジスタRbとをそれぞれレジスタRaとレジスタRa+1とし、もとのレジスタRcとレジスタRdとをそれぞれレジスタRbとレジスタRb+1とし、さらに、もとのレジスタXDeをレジスタXDcとすることで、「valnqX.8 XDc,Ra,Ra+1,Rb,Rb+1」命令となっても良い。こうすることで、a,b,cの3つのレジスタ番号で5つのレジスタオペランドは表現される。つまり、命令コードにおいてレジスタオペランドを表現するために必要なビット長は減らされるので、命令コード長は抑えられる。これによって、命令メモリ0201のサイズは小さくなるので、命令メモリのコストは削減される。
また、図14で示される命令では、データ切り出し位置は、MSBからの位置で指定されているが、LSBからの位置で指定されても良い。
また、本実施の形態のプロセッサは、演算対象データとして32ビットベクタのベクタデータを扱ったが、64ビットベクタのベクタデータを扱っても良い。
[2−3.効果等]
本開示の実施の形態2のプロセッサでは、4つのレジスタに格納されたそれぞれのベクタデータから元の半分のサイズのデータを切り出し、切り出した4つのデータを連結する一連の処理を1命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
(実施の形態3)
以下、図15〜17を用いて、実施の形態3を説明する。
[3−1.構成]
図15は、実施の形態3のプロセッサの構成図である。
図15において、本実施の形態のプロセッサは、データ並び替え器0206の代わりにデータ並び替え器1506を備え、命令デコーダ0203の代わりに命令デコーダ1503を備える点が、実施の形態1のプロセッサと異なる。それ以外の構成要素は実施の形態1のプロセッサと同じであるため、同じ符号をつけて説明は省略する。
命令デコーダ1503は、本実施の形態で説明する命令を解読し、データ並び替え器1506を含む演算器群に実行制御信号を出力する点が実施の形態1の命令デコーダ0203と異なる。
図16は、データ並び替え器1506の構成図である。図16において、データ並び替え器1506は、データ切り出し部A1601、データ切り出し部B1602及びデータ連結部1603を備え、命令デコーダ1503からの実行制御信号に従って動作する。命令メモリ0201に格納されたデータ並び替え命令が命令デコーダ1503で解読されることで、命令デコーダ1503からの実行制御信号は、データ並び替え器1506へ送られる。ここで、データ並び替え命令は、2つの演算対象データを含む入力データAを格納するレジスタをレジスタファイル0204から指定する命令である。つまり、データ並び替え命令が命令デコーダ1503で解読されることによって出力される実行制御信号に従って、データ並べ替え器1506は、入力データAをレジスタファイル0204から取得する。データ並び替え器1506は、データ並び替え器0206と同じく2つのデータ切り出し部を持つが、入力データが2つではなく1つである点が実施の形態1のデータ並び替え器0206と異なる。
データ切り出し部A1601は、入力データAに含まれる2つの演算対象データのうち一方の演算対象データに対応して設けられる。また、データ切り出し部B1602は、入力データAに含まれる2つの演算対象データのうち他方の演算対象データに対応して設けられる。データ切り出し部A1601及びデータ切り出し部B1602は、それぞれ対応する演算対象データから所定数(ここでは、演算対象データそれぞれのデータ要素数の半分)のデータ要素の切り出しを行う。データ連結部1603は、データ切り出し部A1601及びデータ切り出し部B1602で切り出された2つのデータを連結し、データ並び替え器1506から出力する。
[3−2.動作]
以上のように構成された本実施の形態のプロセッサについて、その動作を以下に説明する。
図17は、「valnpX.8 XDb,XQa」命令(valnpX.8のXは0〜4)の動作を示す図である。つまり、図17の(a)は「valnp0.8 XDb,XQa」命令の動作を示す図である。図17の(b)は「valnp1.8 XDb,XQa」命令の動作を示す図である。図17の(c)は「valnp2.8 XDb,XQa」命令の動作を示す図である。図17の(d)は「valnp3.8 XDb,XQa」命令の動作を示す図である。図17の(e)は「valnp4.8 XDb,XQa」命令の動作を示す図である。
図17で示される「valnpX.8 XDb,XQa」命令は、命令デコーダ1503で解読され、データ並び替え器1506で実行されるデータ並び替え命令である。「valnpX.8」の「8」は演算対象データがバイトベクタであることを示す。レジスタXQaに格納された128ビットのバイトベクタ{a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15}を入力として、命令デコーダ1503からの実行制御信号に従って、ベクタデータから、データ要素は切り出される。このように、64ビットのベクタデータは生成され、生成された64ビットのベクタデータはレジスタXDbに格納される。具体的には、以下の動作が行われる。
「valnpX.8 XDb,XQa」命令が、命令デコーダ1503で解読されると、命令デコーダ1503からの実行制御信号に従って、2つの演算対象データが格納されたレジスタXQaが指定される。次に、レジスタXQaに格納された128ビットのバイトベクタの上位半分の64ビットのバイトベクタ{a0,a1,a2,a3,a4,a5,a6,a7}から、この64ビットのバイトベクタに対応するデータ切り出し部A1601は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。同時に、レジスタXQaに格納された128ビットのバイトベクタの下位半分の64ビットのバイトベクタ{a8,a9,a10,a11,a12,a13,a14,a15}から、この64ビットのバイトベクタに対応するデータ切り出し部B1602は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。そして、切り出された2つのベクタデータを、データ連結部1603は連結して64ビットのベクタデータを生成し、生成された64ビットのベクタデータはレジスタXDbに格納される。
データ切り出し部A1601とデータ切り出し部B1602とでのデータ切り出し位置は、「valnpX.8 XDb,XQa」命令のオペコード「valnpX.8」のXで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される64ビットのバイトベクタの同じ位置となる。具体的には、以下の動作が行われる。
「valnp0.8」命令では、それぞれのバイトベクタのMSBから0バイト目の位置からベクタデータが切り出される
「valnp1.8」命令では、それぞれのバイトベクタのMSBから1バイト目の位置からベクタデータが切り出される。
「valnp2.8」命令では、それぞれのバイトベクタのMSBから2バイト目の位置からベクタデータが切り出される。
「valnp3.8」命令では、それぞれのバイトベクタのMSBから3バイト目の位置からベクタデータが切り出される。
「valnp4.8」命令では、それぞれのバイトベクタのMSBから4バイト目の位置からベクタデータが切り出される。
なお、図17で示される命令はバイトベクタを入力とした命令であるが、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。
また、図17で示される命令では、データ切り出し位置はオペコードで指定されたが、即値オペランドで指定されても良い。例えば、「valnp.8 XDb,XQa,Imm」命令でも良い。この命令ではデータ切り出し位置は即値オペランドImmで指定される。例えば、Immオペランドに0が指定されるとMSBから0バイト目の位置から、Immオペランドに1が指定されるとMSBから1バイト目の位置から、ベクタデータが切り出される。
また、図10で示される命令のように、レジスタオペランドで指定されたレジスタに格納された値でデータ切り出し位置が指定されても良い。例えば、データ切り出し位置の値は、XALNレジスタ、Rレジスタ、XDレジスタ及びXQレジスタに格納される。またデータ切り出し位置の値を格納するレジスタが1つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
また、図17で示される命令では、データ切り出し位置は、MSBからの位置で指定されているが、LSBからの位置で指定されても良い。
また、図17で示される命令では、演算対象データを含む128ビットのバイトベクタは、上位半分と下位半分の2つの演算対象データに分けられたが、2つ以上の演算対象データに分けられても良い。例えば、128ビットのバイトベクタは、4つの32ビットの演算対象データに分けられ、32ビットのバイトベクタそれぞれから、元の32ビットの半分のサイズである16ビットのベクタデータを切り出されても良い。
また、本実施の形態のプロセッサは、複数の演算対象データを含む入力データとして128ビットベクタのベクタデータを扱ったが、32ビットベクタ及び64ビットベクタのベクタデータを扱っても良い。
[3−3.効果等]
本開示の実施の形態3のプロセッサでは、1つのレジスタに格納されたベクタデータから元の4分の1のサイズのデータを2つ切り出し、切り出した2つのデータを連結する一連の処理を1命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
(実施の形態4)
以下、図18〜20を用いて、実施の形態4を説明する。
[4−1.構成]
図18は、実施の形態4のプロセッサの構成図である。
図18において、本実施の形態のプロセッサは、データ並び替え器1206の代わりにデータ並び替え器1906を備え、命令デコーダ1203の代わりに命令デコーダ1903を備える点が、実施の形態2のプロセッサと異なる。それ以外の構成要素は実施の形態2のプロセッサと同じであるため、同じ符号をつけて説明は省略する。
命令デコーダ1903は、本実施の形態で説明する命令を解読し、データ並び替え器1906を含む演算器群に実行制御信号を出力する点が実施の形態2の命令デコーダ1203と異なる。
図19は、データ並び替え器1906の構成図である。図19において、データ並び替え器1906は、データ切り出し部A2001、データ切り出し部B2002、データ切り出し部C2003、データ切り出し部D2004及びデータ連結部2005を備え、命令デコーダ1903からの実行制御信号に従って動作する。命令メモリ0201に格納されたデータ並び替え命令が命令デコーダ1903で解読されることで、命令デコーダ1903からの実行制御信号は、データ並び替え器1906へ送られる。ここで、データ並び替え命令は、2つの演算対象データを含む入力データAを格納するレジスタと2つの演算対象データを含む入力データBを格納するレジスタとをレジスタファイル0204から指定する命令である。つまり、データ並び替え命令が命令デコーダ1903で解読されることによって出力される実行制御信号に従って、データ並べ替え器1906は、入力データAと入力データBとをレジスタファイル0204から取得する。データ並び替え器1906は、データ並び替え器1206と同じく4つのデータ切り出し部を持つが、入力データが4つではなく2つである点が実施の形態2のデータ並び替え器1206と異なる。
データ切り出し部A2001は、入力データAに含まれる2つの演算対象データのうち一方の演算対象データに対応して設けられる。また、データ切り出し部B2002は、入力データAに含まれる2つの演算対象データのうち他方の演算対象データに対応して設けられる。データ切り出し部A2001及びデータ切り出し部B2002は、それぞれ対応する演算対象データから所定数(ここでは、演算対象データそれぞれのデータ要素数の半分)のデータ要素の切り出しを行う。データ切り出し部C2003は、入力データBに含まれる2つの演算対象データのうち一方の演算対象データに対応して設けられる。また、データ切り出し部D2004は、入力データBに含まれる2つの演算対象データのうち他方の演算対象データに対応して設けられる。データ切り出し部C2003及びデータ切り出し部D2004は、それぞれ対応する演算対象データから所定数(ここでは、演算対象データそれぞれのデータ要素数の半分)のデータの切り出しを行う。データ連結部2005は、データ切り出し部A2001、データ切り出し部B2002、データ切り出し部C2003及びデータ切り出し部D2004で切り出された4つのデータを連結し、データ並び替え器1906から出力する。
[4−2.動作]
以上のように構成された本実施の形態のプロセッサについて、その動作を以下に説明する。
図20は、「valnqX.8 XDc,XDa,XDb」命令(valnqX.8のXは0〜2)の動作を示す図である。つまり、図20の(a)は「valnq0.8 XDc,XDa,XDb」命令の動作を示す図である。図20の(b)は「valnq1.8 XDc,XDa,XDb」命令の動作を示す図である。図20の(c)は「valnq2.8 XDc,XDa,XDb」命令の動作を示す図である。
図20で示される「valnqX.8 XDc,XDa,XDb」命令は、命令デコーダ1903で解読され、データ並び替え器1906で実行されるデータ並び替え命令である。「valnqX.8」の「8」は演算対象データがバイトベクタであることを示す。レジスタXDaに格納された64ビットのバイトベクタ{a0,a1,a2,a3,a4,a5,a6,a7}とレジスタXDbに格納された64ビットのバイトベクタ{b0,b1,b2,b3,b4,b5,b6,b7}とを入力として、命令デコーダ1903からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、64ビットのベクタデータは生成され、生成された64ビットのベクタデータはレジスタXDcに格納される。具体的には、以下の動作が行われる。
「valnqX.8 XDc,XDa,XDb」命令が、命令デコーダ1903で解読されると、命令デコーダ1903からの実行制御信号に従って、2つの演算対象データが格納されたレジスタXDa及びレジスタXDbが指定される。次に、レジスタXDaに格納された64ビットのバイトベクタの上位半分の32ビットのバイトベクタ{a0,a1,a2,a3}から、この32ビットのバイトベクタに対応するデータ切り出し部A2001は、元の32ビットの半分のサイズである16ビットのベクタデータを切り出す。また、レジスタXDaに格納された64ビットのバイトベクタの下位半分の32ビットのバイトベクタ{a4,a5,a6,a7}から、この32ビットのバイトベクタに対応するデータ切り出し部B2002は、元の32ビットの半分のサイズである16ビットのベクタデータを切り出す。また、レジスタXDbに格納された64ビットのバイトベクタの上位半分の32ビットのバイトベクタ{b0,b1,b2,b3}から、この32ビットのバイトベクタに対応するデータ切り出し部C2003は、元の32ビットの半分のサイズである16ビットのベクタデータを切り出す。また、レジスタXDbに格納された64ビットのバイトベクタの下位半分の32ビットのバイトベクタ{b4,b5,b6,b7}から、この32ビットのバイトベクタに対応するデータ切り出し部D2004は、元の32ビットの半分のサイズである16ビットのベクタデータを切り出す。次に、切り出された4つのベクタデータを、データ連結部2005は連結して64ビットのベクタデータを生成する。生成された64ビットのベクタデータはレジスタXDcに格納される。
データ切り出し部A2001とデータ切り出し部B2002とデータ切り出し部C2003とデータ切り出し部D2004とでのデータ切り出し位置は、「valnqX.8 XDc,XDa,XDb」命令のオペコード「valnqX.8」のXで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される32ビットのバイトベクタの同じ位置となる。具体的には、以下の動作が行われる。
「valnq0.8」命令では、それぞれのバイトベクタのMSBから0バイト目の位置からベクタデータが切り出される。
「valnq1.8」命令では、それぞれのバイトベクタのMSBから1バイト目の位置からベクタデータが切り出される。
「valnq2.8」命令では、それぞれのバイトベクタのMSBから2バイト目の位置からベクタデータが切り出される。
なお、図20で示される命令はバイトベクタを入力とした命令であるが、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。
また、図20で示される命令では、データ切り出し位置はオペコードで指定されたが、即値オペランドで指定されても良い。例えば、「valnq.8 XDc,XDa,XDb,Imm」命令でも良い。この命令ではデータ切り出し位置は即値オペランドImmで指定される。例えば、Immオペランドに0が指定されるとMSBから0バイト目の位置から、Immオペランドに1が指定されるとMSBから1バイト目の位置から、ベクタデータが切り出される。
また、図10で示される命令のように、レジスタオペランドで指定されたレジスタに格納された値でデータ切り出し位置が指定されても良い。例えば、データ切り出し位置の値は、XALNレジスタ、Rレジスタ、XDレジスタ、XQレジスタに格納される。またデータ切り出し位置の値を格納するレジスタが1つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
また、図20で示される命令は、3つのレジスタオペランドXDa,XDb,XDcのレジスタ番号a,b,cをそれぞれ別々に指定できる命令であるが、一部のレジスタオペランドのレジスタ番号は連番でなければならないという制約を持つ命令でも良い。例えば、レジスタXDaとレジスタXDbとは連番でなければならないという制約を加えられた命令は、もとのレジスタXDaとレジスタXDbとをそれぞれレジスタXDaとレジスタXDa+1とし、さらに、もとのレジスタXDcをレジスタXDbとすることで、「valnqX.8 XDb,XDa,XDa+1」命令となっても良い。こうすることで、a,bの2つのレジスタ番号で3つのレジスタオペランドは表現される。つまり、命令コードにおいてレジスタオペランドを表現するために必要なビット長は減らされるので、命令コード長は抑えられる。これによって、命令メモリ0201のサイズは小さくなるので、命令メモリのコストは削減される。
また、図20で示される命令では、データ切り出し位置は、MSBからの位置で指定されているが、LSBからの位置で指定されても良い。
また、図20で示される命令では、演算対象データを含む64ビットのバイトベクタは、上位半分と下位半分の2つの演算対象データに分けられたが、2つ以上の演算対象データに分けられても良い。例えば、64ビットのバイトベクタは、4つの16ビットの演算対象データに分けられ、16ビットのバイトベクタそれぞれから、元の16ビットの半分のサイズである8ビットのベクタデータを切り出されても良い。
また、本実施の形態のプロセッサは、複数の演算対象データを含む入力データとして64ビットベクタのベクタデータを扱ったが、32ビットベクタ及び128ビットベクタのベクタデータを扱っても良い。
[4−3.効果等]
本開示の実施の形態4のプロセッサでは、2つのレジスタに格納されたそれぞれのベクタデータから元の4分の1のサイズのデータを2つ切り出し、切り出した4つのデータを連結する一連の処理を1命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
(実施の形態5)
以下、図21〜23を用いて、実施の形態5を説明する。
[5−1.構成]
図21は、実施の形態5のプロセッサの構成図である。
図21において、本実施の形態のプロセッサは、データ並び替え器0206の代わりにデータ並び替え器2206を備え、命令デコーダ0203の代わりに命令デコーダ2203を備える点が、実施の形態1のプロセッサと異なる。それ以外の構成要素は実施の形態1のプロセッサと同じであるため、同じ符号をつけて説明は省略する。
命令デコーダ2203は、本実施の形態で説明する命令を解読し、データ並び替え器2206を含む演算器群に実行制御信号を出力する点が実施の形態1の命令デコーダ0203と異なる。
図22は、データ並び替え器2206の構成図である。図22において、データ並び替え器2206は、データ切り出し部A0501、データ切り出し部B0502、データ連結部0503及びパターン指定シャッフル部2304を備え、命令デコーダ2203からの実行制御信号に従って動作する。パターン指定シャッフル部2304以外の構成要素は、実施の形態1のデータ並び替え器0206と同じであるため、同じ符号をつけて説明は省略する。
パターン指定シャッフル部2304は、レジスタファイル0204から取得したパターン指定レジスタに格納された入力データCの値に従って、データ連結部0503から出力されたベクタデータをデータ要素単位にシャッフルして、データ並び替え器2206から出力する。
[5−2.動作]
以上のように構成された本実施の形態のプロセッサについて、その動作を以下に説明する。
図23は、「valnpsfhlX.8 XDd,XDa,XDb,XDc」命令の1つで、オペコードの「valnpsfhlX.8」のXに2が指定された「valnpsfhl2.8 XDd,XDa,XDb,XDc」命令の動作を示す図である。「valnpsfhlX.8 XDd,XDa,XDb,XDc」命令が、命令デコーダ2203で解読され、データ並び替え器2206で実行されるデータ並び替え命令である。「valnpsfhlX.8」の「8」は演算対象データがバイトベクタであることを示す。レジスタXDaに格納された64ビットのバイトベクタ{a0,a1,a2,a3,a4,a5,a6,a7}とレジスタXDbに格納された64ビットのバイトベクタ{b0,b1,b2,b3,b4,b5,b6,b7}とを入力として、命令デコーダ2203からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、64ビットのベクタデータは生成され、さらにパターン指定レジスタであるレジスタXDcに格納された64ビットのバイトベクタの値に従って、生成された64ビットのベクタデータはデータ要素単位にシャッフルされてレジスタXDdに格納される。
以下に、「valnpsfhlX.8 XDd,XDa,XDb,XDc」命令の動作を具体的に説明する。まず、レジスタXDaに格納された演算対象データである64ビットのバイトベクタから、この64ビットのバイトベクタに対応するデータ切り出し部A0501は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。また、レジスタXDbに格納された演算対象データである64ビットのバイトベクタから、この64ビットのバイトベクタに対応するデータ切り出し部B0502は、元の64ビットの半分のサイズである32ビットのベクタデータを切り出す。次に、切り出された2つのベクタデータを、データ連結部0503は連結して64ビットのベクタデータを生成する。データ切り出し部A0501とデータ切り出し部B0502とでのデータ切り出し位置は、オペコードの「valnpsfhlX.8」のXで指定される。図23では、Xに2が指定された命令の動作を示しており、データ切り出し部A0501とデータ切り出し部B0502とはMSBから2バイト目の位置からベクタデータが切り出される。これにより、データ連結部0503が生成した64ビットのベクタデータは{a2,a3,a4,a5,b2,b3,b4,b5}となる。以上の動作は、データ並び替え器0206で実行される図7で示される実施の形態1の「valnpX.8 XDc,XDa,XDb」命令と同じであるため、これ以上の詳細な説明は省略する。
図23で示される命令では、さらに、パターン指定シャッフル部2304において、レジスタXDcに格納された64ビットのバイトベクタの各データ要素の値をインデックスとするパターンで、データ連結部0503で生成された64ビットのベクタデータは、データ要素単位でシャッフルされる。このように、シャッフルされ生成されたベクタデータはレジスタXDdに格納される。ここで、シャッフルとは、インデックスの値をiとして、データ連結部0503が生成したベクタデータのMSBからi番目の位置のデータ要素を、そのインデックスの対応するデータ要素の位置にコピーする処理である。図23では、レジスタXDcに格納された64ビットのバイトベクタが{2,1,1,7,3,6,0,5}である場合の動作を示している。具体的には、以下の動作が行われる。
レジスタXDcのMSBから0バイト目の位置のデータ要素が2であるから、データ連結部0503が生成したベクタデータのMSBから2番目のデータ要素であるa4が、レジスタXDdのMSBから0番目の位置にコピーされる。
また、レジスタXDcのMSBから1バイト目の位置のデータ要素が1であるから、データ連結部0503が生成したベクタデータのMSBから1番目のデータ要素であるa3が、レジスタXDdのMSBから1番目の置にコピーされる。
また、レジスタXDcのMSBから2バイト目の位置のデータ要素が1であるから、データ連結部0503が生成したベクタデータのMSBから1番目のデータ要素であるa3が、レジスタXDdのMSBから2番目の位置にコピーされる。
また、レジスタXDcのMSBから3バイト目の位置のデータ要素が7であるから、データ連結部0503が生成したベクタデータのMSBから7番目のデータ要素であるb5が、レジスタXDdのMSBから3番目の位置にコピーされる。
また、レジスタXDcのMSBから4バイト目の位置のデータ要素が3であるから、データ連結部0503が生成したベクタデータのMSBから3番目のデータ要素であるa5が、レジスタXDdのMSBから4番目の位置にコピーされる。
また、レジスタXDcのMSBから5バイト目の位置のデータ要素が6であるから、データ連結部0503が生成したベクタデータのMSBから6番目のデータ要素であるb4が、レジスタXDdのMSBから5番目の位置にコピーされる。
また、レジスタXDcのMSBから6バイト目の位置のデータ要素が0であるから、データ連結部0503が生成したベクタデータのMSBから0番目のデータ要素であるa2が、レジスタXDdのMSBから6番目の位置にコピーされる。
また、レジスタXDcのMSBから7バイト目の位置のデータ要素が5であるから、データ連結部0503が生成したベクタデータのMSBから5番目のデータ要素であるb3が、レジスタXDdのMSBから7番目の位置にコピーされる。
このように、レジスタXDdに格納されるベクタデータ{a4,a3,a3,b5,a5,b4,a2,b3}は生成される。なお、レジスタXDdにコピーされるデータ要素の位置は、データ連結部0503が生成したベクタデータのMSBからの位置が指定されているが、LSBからの位置が指定されても良い。
なお、図23で示される命令はバイトベクタを入力とした命令であるが、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。
また、図23で示される命令では、データ切り出し位置はオペコードで指定されたが、即値オペランドで指定されても良い。例えば、「valnpsfhlX.8 XDd,XDa,XDb,XDc,Imm」命令でも良い。この命令ではデータ切り出し位置は即値オペランドImmで指定される。例えば、Immオペランドに0が指定されるとMSBから0バイト目の位置から、Immオペランドに1が指定されるとMSBから1バイト目の位置から、ベクタデータが切り出される。
また、図10で示される命令のように、レジスタオペランドで指定されたレジスタに格納された値でデータ切り出し位置が指定されても良い。例えば、データ切り出し位置の値は、XALNレジスタ、Rレジスタ、XDレジスタ、XQレジスタに格納される。またデータ切り出し位置の値を格納するレジスタが1つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
また、図23で示される命令は、4つのレジスタオペランドXDa,XDb,XDc,XDdのレジスタ番号a,b,c,dをそれぞれ別々に指定できる命令であるが、一部のレジスタオペランドのレジスタ番号は連番でなければならないという制約を持つ命令でも良い。例えば、レジスタXDaとレジスタXDbは連番でなければならないという制約を加えられた命令は、もとのレジスタXDaとレジスタXDbとをそれぞれレジスタXDaとレジスタXDa+1とし、さらに、もとのレジスタXDc,XDdをそれぞれレジスタXDb,XDcとすることで、「valnpsfhlX.8 XDc,XDa,XDa+1,XDb」命令となっても良い。こうすることで、a,b,cの3つのレジスタ番号で4つのレジスタオペランドは表現される。つまり、命令コードにおいてレジスタオペランドを表現するために必要なビット長は減らされるので、命令コード長は抑えられる。これによって、命令メモリ0201のサイズは小さくなるので、命令メモリのコストは削減される。
また、図23で示される命令では、データ切り出し位置は、MSBからの位置で指定されているが、LSBからの位置で指定されても良い。
また、図23で示される命令では、図7で示される実施の形態1の「valnpX.8 XDc,XDa,XDb」命令と、「valnpX.8 XDc,XDa,XDb」命令で生成されたベクタデータをパターン指定レジスタに格納されたデータの値に従ってデータ要素単位にシャッフルする動作と、が組み合わされて、これら一連の処理は1命令で実行される。しかし、このシャッフルする動作と組み合わされる命令は、実施の形態1の「valnpX.8 XDc,XDa,XDb」命令だけに限らない。例えば、図14で示される実施の形態2の「valnqX.8 XDe,Ra,Rb,Rc,Rd」命令、図17で示される実施の形態3の「valnpX.8 XDb,XQa」命令又は図20で示される実施の形態4の「valnqX.8 XDc,XDa,XDb」命令との組み合わせでも良い。
[5−3.効果等]
本開示の実施の形態5のプロセッサでは、2つのレジスタに格納されたそれぞれのベクタデータから元の半分のサイズのデータを切り出し、切り出した2つのデータを連結して、さらにシャッフルする一連の処理を1命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
なお、以上の実施の形態1〜5では、複数のデータ要素から構成されたデータとして、ベクタデータを扱ったが、本開示のプロセッサが扱うデータはベクタデータに限らず単にデータであっても良い。
以上のように、本開示における技術の例示として、実施の形態を説明した。そのために、添付図面及び詳細な説明を提供した。
したがって、添付図面及び詳細な説明に記載された構成要素の中には、課題解決のために必須な構成要素だけでなく、上記実装を例示するために、課題解決のためには必須でない構成要素も含まれ得る。そのため、それらの必須ではない構成要素が添付図面や詳細な説明に記載されていることをもって、直ちに、それらの必須ではない構成要素が必須であるとの認定をするべきではない。
また、上述の実施の形態は、本開示における技術を例示するためのものであるから、特許請求の範囲又はその均等の範囲において種々の変更、置き換え、付加、省略などを行うことができる。
本開示は、プロセッサとして有用である。具体的には、ビデオコーデック用のプロセッサなどに、本開示は適用可能である。
0201 命令メモリ
0202 命令フェッチ部
0203,1203,1503,1903,2203 命令デコーダ
0204 レジスタファイル
0205 メモリアクセス部
0206,1206,1506,1906,2206 データ並び替え器
0207 ALU(算術論理演算器)
0208 乗算器
0209 バレルシフタ
0210 データメモリ
0501,1301,1601,2001 データ切り出し部A
0502,1302,1602,2002 データ切り出し部B
0503,1305,1603,2005 データ連結部
1303,2003 データ切り出し部C
1304,2004 データ切り出し部D
2304 パターン指定シャッフル部

Claims (9)

  1. 複数のデータ要素の並びから構成される演算対象データを処理するプロセッサであって、
    前記演算対象データを含むデータを格納する複数のレジスタと、
    少なくとも1つの前記演算対象データを格納する、前記複数のレジスタのうちの少なくとも1つを指定するデータ並び替え命令を解読する命令デコーダと、
    前記少なくとも1つの演算対象データのそれぞれに対応して設けられ、それぞれ、前記データ並び替え命令によって指定された前記複数のレジスタのうちの少なくとも1つに格納された対応する前記演算対象データから、所定数のデータ要素を切り出して部分データを生成する、複数のデータ切り出し部と、
    前記複数のデータ切り出し部で生成された複数の前記部分データを連結するデータ連結部と、を備え、
    前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令で指定された位置、かつ、前記演算対象データにおける同じ位置にある前記所定数のデータ要素を切り出し、
    前記複数のデータ切り出し部による切り出しと前記データ連結部による連結とは、1個の前記データ並び替え命令が前記命令デコーダで解読されたことに対応して、実行される
    プロセッサ。
  2. 前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、当該演算対象データのデータ要素数の半分のデータ要素を切り出す
    請求項1記載のプロセッサ。
  3. 前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令のオペコードで指定される前記位置にある前記所定数のデータ要素を切り出す
    請求項1又は2記載のプロセッサ。
  4. 前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令の即値オペランドで指定される前記位置にある前記所定数のデータ要素を切り出す
    請求項1又は2記載のプロセッサ。
  5. さらに、
    前記複数のデータ切り出し部で切り出すデータ要素の位置を示す値を格納する切り出し位置レジスタを備え、
    前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ切り出し位置レジスタに格納された値で指定される前記位置にある前記所定数のデータ要素を切り出す
    請求項1又は2記載のプロセッサ。
  6. 前記データ並び替え命令は、複数の前記演算対象データを格納する1つの前記レジスタを指定し、
    前記複数のデータ切り出し部は、それぞれ、前記データ並び替え命令によって指定された前記1つのレジスタに格納された対応する前記演算対象データから、前記所定数のデータ要素を切り出して前記部分データを生成する
    請求項1〜5のいずれか1項に記載のプロセッサ。
  7. 前記データ並び替え命令は、前記複数の演算対象データを格納する複数の前記レジスタを指定し、
    前記複数のデータ切り出し部は、それぞれ、前記データ並び替え命令によって指定された前記複数のレジスタに格納された対応する前記演算対象データから、前記所定数のデータ要素を切り出して前記部分データを生成する
    請求項1〜5のいずれか1項に記載のプロセッサ。
  8. さらに、
    前記データ連結部で生成された連結データをデータ要素単位で並び替えるパターンを指定するパターンデータを格納するパターン指定レジスタと
    前記パターン指定レジスタに格納された前記パターンデータで指定されるパターンで前記連結データを並び替えるパターン指定シャッフル部と、を備える
    請求項1〜7のいずれか1項に記載のプロセッサ。
  9. 複数のデータ要素の並びから構成される演算対象データを処理するプロセッサによるデータ並び替え方法であって、
    前記プロセッサは、前記演算対象データを含むデータを格納する複数のレジスタと、命令デコーダと、複数のデータ切り出し部と、データ連結部とを備え、
    前記データ並び替え方法は、
    前記命令デコーダが、少なくとも1つの前記演算対象データを格納する少なくとも1つの前記レジスタを指定するデータ並び替え命令を解読する命令デコードステップと、
    前記複数のデータ切り出し部が、前記少なくとも1つの演算対象データのそれぞれに対して、前記データ並び替え命令によって指定された前記少なくとも1つのレジスタに格納された対応する前記演算対象データから、所定数のデータ要素を切り出して部分データを生成するデータ切り出しステップと、
    前記データ連結部が、前記複数のデータ切り出し部で生成された前記複数の部分データを連結するデータ連結ステップと、を含み、
    前記データ切り出しステップでは、前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令で指定され、かつ、前記演算対象データにおける同じ位置にある前記所定数のデータ要素を切り出し、
    前記データ切り出しステップでの切り出しと前記データ連結ステップでの連結とは、1個の前記データ並び替え命令が前記命令デコーダで解読されたことに対応して、実行される
    データ並び替え方法。
JP2014178462A 2014-09-02 2014-09-02 プロセッサ及びデータ並び替え方法 Pending JP2017199045A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014178462A JP2017199045A (ja) 2014-09-02 2014-09-02 プロセッサ及びデータ並び替え方法
PCT/JP2015/003589 WO2016035240A1 (ja) 2014-09-02 2015-07-16 プロセッサ及びデータ並び替え方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014178462A JP2017199045A (ja) 2014-09-02 2014-09-02 プロセッサ及びデータ並び替え方法

Publications (1)

Publication Number Publication Date
JP2017199045A true JP2017199045A (ja) 2017-11-02

Family

ID=55439331

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014178462A Pending JP2017199045A (ja) 2014-09-02 2014-09-02 プロセッサ及びデータ並び替え方法

Country Status (2)

Country Link
JP (1) JP2017199045A (ja)
WO (1) WO2016035240A1 (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000231552A (ja) * 1999-02-08 2000-08-22 Nec Corp 高速フーリエ変換方法
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
EP1607858A1 (en) * 2004-06-16 2005-12-21 Koninklijke Philips Electronics N.V. Bit-plane extraction operation
US20070226469A1 (en) * 2006-03-06 2007-09-27 James Wilson Permutable address processor and method
US9086872B2 (en) * 2009-06-30 2015-07-21 Intel Corporation Unpacking packed data in multiple lanes

Also Published As

Publication number Publication date
WO2016035240A1 (ja) 2016-03-10

Similar Documents

Publication Publication Date Title
JP6699845B2 (ja) 方法及びプロセッサ
JP4480997B2 (ja) Simd整数乗算上位丸めシフト
TWI544406B (zh) 浮點捨入處理器
JP6526175B2 (ja) ビットシャッフルプロセッサ、方法、システム、および命令
JP6711480B2 (ja) ベクトルインデックスロードおよびストアのための方法および装置
TWI489381B (zh) 多暫存器散布指令
TWI506539B (zh) 十進位浮點資料邏輯提取的方法與設備
JP2014160500A5 (ja)
TWI637276B (zh) 執行向量位元混洗的方法與裝置
KR102508075B1 (ko) 인덱스 및 즉치로 벡터 치환을 수행하기 위한 방법 및 장치
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP2017539014A (ja) ベクトルビット反転およびクロスを実行するための方法および装置
JP2017539013A (ja) 競合検出を実行するための方法および装置
TW201810030A (zh) 在z順序曲線中計算下一點的座標的向量指令
JP6738579B2 (ja) 命令フローを最適化するチェックを実行するための装置および方法
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
JP2018500654A (ja) ベクトルビット反転を実行するための方法および装置
KR20170097015A (ko) 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치
TWI603289B (zh) 用以從三維座標計算三維z曲線指標的機器階層指令
JP2017534982A (ja) 4d座標から4dのz曲線インデックスを計算するための機械レベル命令
WO2016035240A1 (ja) プロセッサ及びデータ並び替え方法
JP2018500666A (ja) ベクトルビットギャザーを実行するための方法および装置
KR20170099864A (ko) 마스크 값을 압축하기 위한 방법 및 장치
TWI617977B (zh) 用於執行自旋迴路跳位的裝置及方法