JP6616608B2 - 半導体装置 - Google Patents

半導体装置 Download PDF

Info

Publication number
JP6616608B2
JP6616608B2 JP2015142265A JP2015142265A JP6616608B2 JP 6616608 B2 JP6616608 B2 JP 6616608B2 JP 2015142265 A JP2015142265 A JP 2015142265A JP 2015142265 A JP2015142265 A JP 2015142265A JP 6616608 B2 JP6616608 B2 JP 6616608B2
Authority
JP
Japan
Prior art keywords
register
vector
instruction
additional information
general
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
JP2015142265A
Other languages
English (en)
Other versions
JP2017027149A5 (ja
JP2017027149A (ja
Inventor
優之 木村
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2015142265A priority Critical patent/JP6616608B2/ja
Priority to US15/154,753 priority patent/US20170017489A1/en
Priority to CN201610556654.1A priority patent/CN106354477A/zh
Publication of JP2017027149A publication Critical patent/JP2017027149A/ja
Publication of JP2017027149A5 publication Critical patent/JP2017027149A5/ja
Application granted granted Critical
Publication of JP6616608B2 publication Critical patent/JP6616608B2/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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Description

本開示は半導体装置に関し、例えばベクトル命令を実行するCPUを内蔵する半導体装置に適用することができる。
文字列を処理するために2つのパック化演算対象のデータ要素の各々を比べる単一命令複数データ(SIMD:Single Instruction Multiple Data)命令がある(例えば、米国特許出願公開第2008/0077773号明細書)。SIMD命令はベクトル命令とも呼ばれるので、以下、本開示ではベクトル命令という。
米国特許出願公開第2008/0077773号明細書
配列の中のデータ探索等において、配列の大きさが1つのベクトル命令で扱う要素数を越える場合、ベクトル命令の間にスカラ命令を挟む必要があり、ベクトル命令を効率的に活用することができない。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
本開示のうち、代表的なものの概要を簡単に説明すれば、下記のとおりである。
すなわち、ベクトル命令は、演算結果と別に付加情報を生成し、付加情報をベクトルレジスタとは異なるレジスタに蓄積する。
本開示によれば、ベクトル命令を効率的に活用することができる。
実施形態に係るベクトル命令を説明するためのブロック図。 実施例1に係る半導体装置を説明するためのブロック図。 実施例1に係るベクトル命令を説明するためのブロック図。 挿入動作を説明するための図。 挿入動作を説明するための図。 図3の専用回路の動作を説明するためのブロック図。 比較例に係るベクトル命令を説明するためのブロック図。 比較例に係るベクトル命令を用いて連続する配列での比較動作を説明するための図。 実施例1に係るベクトル命令を用いて連続する配列での比較動作を説明するための図。 実施例2に係るベクトル命令を説明するためのブロック図。 図10の専用レジスタを説明するためのブロック図。 比較例に係るベクトル命令を用いた場合のアルゴリズムを実行する命令の構造を説明するためのブロック図。 比較例に係るベクトル命令を用いてアルゴリズムを実行した場合の実行過程を説明するためのブロック図。 実施例2に係るベクトル命令を用いた場合のアルゴリズムを実行する命令の構造を説明するためのブロック図。 実施例2に係るベクトル命令を用いてアルゴリズムを実行した場合の実行過程を説明するためのブロック図。
以下、実施形態および実施例について、図面を用いて説明する。ただし、以下の説明において、同一構成要素には同一符号を付し繰り返しの説明を省略することがある。
<実施形態>
図1は実施形態に係るベクトル命令を説明するための図である。実施形態に係るベクトル命令はベクトルレジスタでの演算を行うベクトル命令で、ベクトル命令はN個分のデータを同時に演算する。このとき、ベクトル命令はN個の演算結果を生成すると共に、その演算結果に応じて、演算結果を補助するような情報(演算結果のフラグや比較結果などの付加情報)を生成する。
実施形態に係るベクトル命令は第1のベクトルレジスタ(WR[wreg1])の内容と第2のベクトルレジスタ(WR[wreg2])の内容とを演算し、演算結果を第3のベクトルレジスタ(WR[wreg3])に格納し、その演算結果とは別に、付加情報(CC)を生成し、ベクトルレジスタ(WR)101とは別の付加情報(CC)を格納するレジスタ(MPXCC)104に蓄積する命令である。演算結果は、必ずしもベクトルレジスタ(WR)101に格納される必要はない。また、演算結果は第3のベクトルレジスタ(WR[wreg3])に格納されるのではなく、第1のベクトルレジスタ(WR[wreg1])または第2のベクトルレジスタ(WR[wreg2])に格納されてもよい。ベクトルレジスタ(WR)101のそれぞれはN個の要素(w0,w1,・・・,w(N−1))を格納する。
実施形態に係るベクトル命令を実行するデータ処理装置は、ベクトルレジスタ(WR)101とベクトルレジスタ(WR)101の内容を演算するN個の演算器(ALU)102と専用回路103とレジスタ(MPXCC)104とを備える。N個の演算器(ALU)102はそれぞれ付加情報要素(cc0,cc1,・・・,cc(N−1))を生成する。付加情報要素(cc0,cc1,・・・,cc(N−1))は専用回路103で連結され、付加情報(CC)となる。連結とは、任意の複数のビットやビット列を結合し、一つのビット列と扱うことをいう。付加情報要素(cc0,cc1,・・・,cc(N−1))がmビットならば、付加情報(CC)はN*mビットになる。専用回路103は、レジスタ(MPXCC)104の既存の内容を右または左にシフトした上で、空いたビット領域に付加情報(CC)を挿入する。言い換えると、レジスタ(MPXCC)に格納する付加情報(CC)は、レジスタ(MPXCC)104の内容を全て上書きするのではない。レジスタ(MPXCC)104の幅をLビットとすると、L/(N*m)個の付加情報(CC)をレジスタ(MPXCC)104に格納することができる。実施形態に係るベクトル命令は、一命令で演算可能なデータ数を越えた場合でも、ベクトル命令を連続で実行するだけで付加情報をレジスタに蓄積することができる。
以下、付加情報(CC)を格納するレジスタを付加情報格納レジスタ(MPXCC)といい、MPXCCは通常の算術演算に利用される汎用レジスタを用いてもよいし、専用レジスタを用いてもよい。なお、演算結果のデータは、例えば8ビットから64ビットまで等、ベクトル命令の種類に応じて様々である。N個の演算毎に生成されるmビットの付加情報は、フラグであれば通常2〜3ビット、比較演算の結果であれば1ビットである。
図2は実施例1に係る半導体装置の構成を示すブロック図である。実施例1に係る半導体装置100は一つの半導体基板上にデータ処理装置である中央処理装置(CPU)1と記憶装置(メモリ)2とを備える。CPU1はベクトル演算(SIMD演算)を実行することができるユニットを保持している。命令フェッチユニット12はメモリ2から命令をフェッチし、命令発行ユニット13はフェッチした命令をベクトル演算ユニット11に渡し、ベクトル演算ユニット11がその命令を実行する。CPU1はベクトル演算ユニット11以外に、標準的な命令を実行するためのスカラ演算ユニット14やメモリ2をアクセスするメモリアクセスユニット15を持つ。ベクトル演算ユニット11はスカラ演算ユニット14およびメモリアクセスユニット15と接続されており、データの授受やメモリアクセスの代行などを依頼する。メモリ2はベクトル演算ユニット11で実行されるベクトル命令およびスカラ演算ユニット14で実行されるスカラ命令を格納する。ベクトルレジスタ111を用いる命令をベクトル命令ともいい、汎用レジスタ16を用いる命令をスカラ命令ともいう。なお、汎用レジスタ16は、例えば32ビット幅のレジスタを32本(GR[0]〜GR[31])備える。
CPU1は、演算の途中結果を格納するための汎用レジスタ16以外に、CPU1の制御情報やアクセス権限を管理するためのシステムレジスタ17を備える。ベクトル演算ユニット11もシステムレジスタ17を保持しており、通常はベクトル演算の設定情報や、フラグの内容などを保持する。通常命令は汎用レジスタ16をアクセスすることができるが、システムレジスタ17をアクセスすることはできない。システムレジスタアクセス命令を使うことにより汎用レジスタ16の内容をシステムレジスタ17に転送したり、システムレジスタ17の値を汎用レジスタ16に転送したりすることができる。メモリ2はキャッシュメモリ等の揮発性メモリまたはフラッシュメモリ等の電気的に書き換え可能な不揮発性メモリで構成される。
図3は実施例1に係るベクトル命令の機能を説明するためのブロック図である。ベクトル演算ユニット11はベクトルレジスタ(WR)111と演算器(ALU)112と回路113とを備える。ベクトルレジスタ(WR)111のそれぞれは4個の要素(w0,w1,w2,w3)を格納する。したがって、ベクトル演算ユニット11はベクトルレジスタ(WR)111の内容を演算する演算器(ALU)112も4個備える。4個の演算器(ALU)112はそれぞれ付加情報要素(cc0,cc1,cc2,cc3)を生成する。付加情報要素(cc0,cc1,cc2,cc3)は専用回路113で連結され、付加情報(CC)となる。付加情報(CC)は4ビットである。専用回路113は、MPXCCである汎用レジスタ(GR[1])114の既存の内容を右または左にシフトした上で、空いたビット領域に付加情報(CC)を挿入する。言い換えると、汎用レジスタ(GR[1])114に格納する付加情報(CC)は、汎用レジスタ(GR[1])114の内容を全て上書きするのではない。汎用レジスタ(GR[1])114の幅を32ビットとすると、32/4=8個の付加情報(CC)を汎用レジスタ(GR[1])114に格納することができる。本実施例ではMPXCCとして汎用レジスタのうちのGR[1]を使用しているが、これに限定されるものではなく、汎用レジスタであればどのレジスタであってもよい。
実施例1に係るベクトル命令は、2つのベクトルレジスタを用いて演算を行い、その演算結果をベクトルレジスタに書き込むとともに、その演算結果に応じて、演算結果を補助するような付加情報を出力する命令であり、例えば以下に示すような命令である。
cmp1.N order,cond,wreg1,wreg2,wreg3
実施例に係るベクトル命令はベクトルレジスタ(wreg1)の内容とベクトルレジスタ(wreg2)の内容を比較して、その結果をベクトルレジスタ(wreg3)に格納するとともに、暗黙的に指定される汎用レジスタ(GR[1])114に付加情報を格納する。実施例に係るベクトル命令は、比較結果が不一致の場合は0を、比較結果が一致の場合はすべて1を、wreg3に格納する。wreg1、wreg2、wreg3は128ビット長であり、N(=1、2、4)個のデータに分割される。N=1の場合はベクトルレジスタの最下位ワードのw0を使用し、N=2の場合はベクトルレジスタの下位2ワードのw1、w0が使用され、N=4の場合はベクトルレジスタの全体のw3、w2、w1、w0が使用される。1ワードは32ビットであり、w3、w2、w1、w0はそれぞれ32ビットである。実施例に係るベクトル命令は、比較の結果、Nビットの付加情報(CC)を生成し、汎用レジスタ(GR[1])114に挿入する。ここでNビットの付加情報(CC)の挿入は、まず汎用レジスタ(GR[1])の値がNビット右または左にシフトされ、空いた部分に付加情報(CC)が格納されることにより行われる。このとき、「order」によって、汎用レジスタ(GR[1])に対して、付加情報(CC)を上位から挿入(右シフト)するか、下位から挿入(左シフト)するかが指定される。これによりアドレス上位からの検索とアドレス下位からの検索を可能とする。なお、図3では右にシフトする場合を示している。「cond」によって、付加情報のセット条件(=、>、<、≧、≦、≠等)が指定される。
図4および図5は挿入動作を説明する図である。図4はレジスタの下位からデータが挿入される場合であり、図5はレジスタの上位からデータが挿入される場合である。Lビットのレジスタ(sysreg(GR[1]))に対してnビットのデータ挿入が行われる場合、具体的な動作を、Verilog-HDL風の記述で示すと下記のとおりである。
レジスタの下位から挿入される場合(図4):
sysreg[L-1: 0] <= {sysreg[L-n: 0], FLAG[n-1: 0]}
レジスタの上位から挿入される場合(図5):
sysreg[L-1: 0] <= {FLAG[ 0:n-1], sysreg[L-n: 0]}
レジスタの下位からデータが挿入される場合、図4に示すように、Lビットのレジスタ(sysreg)の内容がnビット左にシフトされ、nビットの情報(FLAG)がsysregの下位に格納される。sysregの下位(L−n)ビットとnビットのFLAGとが連結され、sysregの上位nビットは破棄される。レジスタの上位からデータが挿入される場合、図5に示すように、Lビットのレジスタの内容がnビット右にシフトされ、nビットのFLAGがレジスタの上位に格納される。nビットのFLAG とsysregの上位(L−n)ビットとが連結され、sysregの下位nビットは破棄される。
汎用レジスタ(GR[1])114に付加情報を格納するための回路である専用回路113について説明する。図6は図3の専用回路の動作を説明するためのブロック図である。実施例に係るベクトル命令は、演算の結果生成された付加情報要素(cc[3:0])を連結回路1131で連結して付加情報(CC)を生成し、汎用レジスタ(GR[1])114に格納している。汎用レジスタGR[1])114に付加情報(CC)が格納されるためには、一度格納先の汎用レジスタ(GR[1])114からデータパス115を介してレジスタ値が読み込まれ、シフタ1132でシフト処理が行われ、連結回路1133で付加情報(CC)の挿入が行われ、その結果の値が汎用レジスタ(GR[1])114へデータパス116を介して書き戻される。シフタ1132は「order」によって指定される方向(右または左)に「N」で指定される固定値(例えば4ビット)分データをシフトする。
<比較例>
次に、本願発明者が本開示に先立って検討した技術(以下、比較例という。)について説明する。図7は比較例に係るベクトル命令について説明するためのブロック図である。比較例に係るベクトル命令は、2つのベクトルレジスタを用いて演算を行い、その演算結果をベクトルレジスタに書き込むとともに、その演算結果に応じて、演算結果を補助するような情報(演算結果のフラグ、比較結果などの付加情報を処理してインデックス)を出力する命令であり、例えば以下に示すような命令である。
cmp3.N order,cond,wreg1,wreg2,wreg3
比較例に係るベクトル命令は、ベクトルレジスタ(wreg1)とベクトルレジスタ(wreg2)の中身を文字列として、wreg1とwreg2の各要素を比較し、その結果をベクトルレジスタ(wreg3)に格納するとともに、比較結果が成立した最上位/最下位ビットの位置(付加情報)を算出して汎用レジスタ(暗黙的に指定されるレジスタで例えばGR[1])に格納する命令である。つまり、比較例に係るベクトル命令は、比較が初めて成立したビットの位置(結果の位置情報)を汎用レジスタに格納する。
ある配列の中から、条件を満たすデータを探すために、比較結果の付加情報を汎用レジスタに移動させることでシーケンシャルな処理に変換されており、探索に時間がかかる。具体的には、下記に示すような昇順または降順に配置された配列からある境界値を越えた場所を探索する第1のアルゴリズムを、比較例に係るベクトル命令を用いて実現することを考える。なお、本開示では、疑似コードを用いてアルゴリズムを記述する。本疑似コードは、C言語を基本に記載している。先頭が”//”で始まる文はコメントである。
for (i = 0; i < M; i++) {
// array[]は探索する配列、borderは探索すべき境界
if (border > array[i]) return i;
}
図7に示すように、比較例に係るベクトル命令はベクトルレジスタ311の内容を文字列として捉え、ベクトル演算器312を用いて比較を実行し、その結果を専用回路313の連結回路3131によって集める。次に、専用回路313のインデックス生成回路3132は、比較結果の付加情報のビット列でビットが1となった最上位ビットの位置を算出し、インデックスを生成する。そして、その結果は汎用レジスタ(GR[1])314に格納される。また、比較が成立したベクトル要素が1つも存在しない場合、汎用レジスタ(GR[1])314には特別な数値が書き込まれる。比較対象とする文字がベクトルレジスタ311中に存在していたかどうかの確認は、比較例に係るベクトル命令を実行後、汎用レジスタ(GR[1])314を読み取り、汎用レジスタ(GR[1])314が、比較成立したベクトル要素が一つも存在しないことを示す特別な数値であるかをチェックすることにより行われる。この結果を元に次の文字列をベクトルレジスタ311に読み込み比較するかが決められる。これらの処理はスカラ命令を用いて行われる。
このように比較例に係るベクトル命令を利用した場合、比較結果の付加情報から生成される情報はインデックスの情報になっているため、一度の比較毎に汎用レジスタを参照し、探索が成功したか否かが確認される必要がある。つまり、比較例に係るベクトル命令が同時に4個の比較を実行することができる場合(N=4の場合)、アルゴリズムとしては、4個に1回、該当する値が4個の配列中に存在するかをチェックしていることになる。比較例に係るベクトル命令では、インデックスが汎用レジスタに格納されるため、比較命令、分岐命令などのスカラ命令が必要になり、ベクトル命令とスカラ命令が混在し、パイプラインを効率的に活用できない。もし汎用レジスタの内容の確認が行わずに連続して比較例に係るベクトル命令が実行された場合、汎用レジスタの内容は上書きされ、過去のベクトル命令の比較結果の付加情報は引き継がれなくなる。
すなわち、比較例に係るベクトル命令を利用した場合、下記のステップを踏む必要がある。
ステップ1:ANS=0とする。ANSは探索文字のインデックスを示す任意の汎用レジスタである。
ステップ2:比較例に係るベクトル命令を実行する。
ステップ3:GR[1]=4をチェックする。GR[1]=4ならば、ANS=ANS+GR[1]を実行後、ステップ4へ移動する。GR[1]≠4ならばステップ5へ移動する。GR[1]=4は特殊数値で、比較対象の値が存在しなかったことを示す。
ステップ4:次の文字列をベクトルレジスタにロードし、ステップ2へ移動する。
ステップ5:終了。ANS=ANS+GR[1]が探索文字のインデックスになる。
上記のように、比較例に係るベクトル命令では、ベクトル命令以外に多くのスカラ命令が必要である。このようにインデックスの探索のために多くの命令が必要になってしまう原因は、比較例に係るベクトル命令は、前のベクトル命令の比較結果の付加情報を引き継がないため、比較例に係るベクトル命令の比較を実行する毎にスカラ命令によってチェックを行なわなければならない。
また、比較例に係るベクトル命令では、インデックスの格納先を汎用レジスタとしているため、ベクトル命令の結果を取り出してチェックするためには、ベクトル命令によるインデックスの付加情報を汎用レジスタへ書き込み後、スカラ命令による付加情報を汎用レジスタから読み出して演算する必要があり、Read After Write(RAW)ハザードを解決するために待ち合わせ(パイプラインインストール)が発生してしまう。これにより、比較例に係るベクトル命令では、ベクトル命令により比較自身の高速化は果せるものの、実際のアルゴリズムに適用した場合に、効率的にCPUのパイプラインを使えているとは言えない。
実施例1に係る命令では、1命令につきベクトル演算器の数(N個の演算を同時に実行できるならば、Nビット)だけレジスタに結果を挿入することができるようになる。また、ベクトル演算器が4並列でベクトル命令の比較を実行した場合、ベクトル要素毎に1ビット、合計4ビットの比較結果の付加情報が生成される。一方で汎用レジスタ(GR[1])114の幅は32ビットである。これにより、汎用レジスタ(GR[1])114が全て埋まるまで(32要素分の比較を実行するまで)、ベクトル命令による比較を連続して実行できる。すなわち、演算器112の並列数が4であり、汎用レジスタのビット数が32ビットである場合、32/4=8回分ベクトル命令を実行しても、汎用レジスタ(GR[1])内で結果が溢れることがない。一方、比較例に係るベクトル命令は、1命令を実行後すぐに演算結果の判定用のスカラ命令を挿入する必要がある。このため、実施例1に係るベクトル命令は、ベクトル演算命令を連続して実行できる分、比較例に係るベクトル命令よりも効率的に配列内を探索可能である。
例として、
配列A=[0,4,5,10,12,8,16,27,9,1,5,8,1,0,1,1]と、
配列B=[1,3,7,9,15,9,20,13,11,0,3,1,9,0,0,0]と、
を比較例に係るベクトル命令を用いて比較する場合と、実施例に係るベクトル命令を用いて比較する場合について説明する。ベクトル命令の並列度は4とすると、それぞれの配列を4エレメント(要素)ずつロードしていき比較する。このとき、付加情報格納レジスタである汎用レジスタ(GR[1])は初期値0であるとし、A[i]<B[i]ならばフラグ(付加情報要素)は1、それ以外ならばフラグは0とする。
図8は比較例に係るベクトル命令を用いて連続する配列での比較動作を説明するための図である。比較例に係るベクトル命令を用いて比較をするならば、配列A、Bを4要素ずつロードし、最初に比較条件が成立したインデックスを返すことになる。以下、詳細に説明する。
(1)最初の4要素である A=[0,4,5,10], B=[1,3,7,9] がベクトルレジスタにロードされ、比較が実行される。第1要素はベクトルレジスタの最下位ワードに第4要素は最上位ワードに格納される。したがって、wreg1=[10,5,4,0]、wreg2=[9,7,3,1]となり、最下位ワードは比較条件が成立するので、比較結果の付加情報(インデックス)=0となる。
(2)比較結果がベクトルレジスタに格納される。wreg3=[0x0000_0000, 0xffff_ffff, 0x0000_0000, 0xffff_ffff] となる。ここで、「0x」は16進数であることを示す。
(3)汎用レジスタ(GR[1])に付加情報(インデックス)の0が格納される。ここでは、GR[1]=0000_0000_0000_0000 となる。
(4)次の配列A、Bについて上記(1)〜(3)を繰り返す。
第2番目の4要素は、A=[12,8,16,27], B=[15,9,20,13]であるので、wreg1=[27,16,8,12]、wreg2=[13,20,9,15]であり、最下位ワードは比較条件が成立するので、インデックス=0, GR[1]=0x0000となる。
第3番目の4要素は、A=[9,1,5,8], B=[11,0,3,1,]であるので、wreg1=[8,5,1,9]、wreg2=[1,3,0,13]であり、最下位ワードは比較条件が成立するので、インデックス=0, GR[1]=0x0000となる。
第4番目の4要素は、A=[11,0,1,1],B=[9,0,0,0] であるので、wreg1=[1,1,0,11]、wreg2=[0,0,0,9]であり、いずれのワードも比較条件が成立しないので、インデックス=4, GR[1]=0x0004となる。
上述したように、付加情報格納レジスタ(GR[1])の値は常に更新され、前の比較結果の付加情報は残らない。したがって、ベクトル演算による比較を行った直後に、付加情報格納レジスタ(GR[1])の値をチェックする必要がある。なお、比較例に係るベクトル命令は最初に比較条件が成立した要素のインデックスを返すため、比較条件が成立した要素より後の要素の比較結果は付加情報格納レジスタ(GR[1])に反映されない。
図9は実施例1に係るベクトル命令を用いて連続する配列での比較動作を説明するための図である。実施例1に係るベクトル命令では、比較結果の付加情報はビット列として表現され、その結果は付加情報格納レジスタである汎用レジスタ(GR[1])に上または下からプッシュされる。以下、詳細に説明する。
(1)最初の4要素である A=[0,4,5,10], B=[1,3,7,9] がベクトルレジスタにロードされ、比較が実行される。第1要素はベクトルレジスタの最下位ワードに第4要素は最上位ワードに格納される。したがって、wreg1=[10,5,4,0]、wreg2=[9,7,3,1]、比較結果の付加情報(フラグ)=[0,1,0,1] となる。
(2)比較結果がベクトルレジスタに格納される。wreg3=[0x0000_0000, 0xffff_ffff, 0x0000_0000, 0xffff_ffff] となる。ここで、「0x」は16進数であることを示す。
(3)付加情報格納レジスタ(GR[1])の内容が右にシフトされ、GR[1]にフラグの4ビット[0,1,0,1]が挿入される。ここでは、GR[1]の上位から付加情報が挿入されていき、GR[1]=0101_0000_0000_0000 となる。
(4)次の配列A、Bについて上記(1)〜(3)を繰り返す。
第2番目の4要素は、A=[12,8,16,27], B=[15,9,20,13]であるので、wreg1=[27,16,8,12]、wreg2=[13,20,9,15]であり、フラグ=[0,1,1,1], GR[1]=0111_0101_0000_0000となる。
第3番目の4要素は、A=[9,1,5,8], B=[11,0,3,1,] であるので、wreg1=[8,5,1,9]、wreg2=[1,3,0,13]であり、フラグ=[0,0,0,1], GR[1]=0001_0111_0101_0000となる。
第4番目の4要素は、A=[11,0,1,1],B=[9,0,0,0] であるので、wreg1=[1,1,0,11]、wreg2=[0,0,0,9]であり、フラグ=[0,0,0,0], GR[1]=0000_0001_0111_0101となる。
上記の動作により、付加情報格納レジスタ(GR[1])に格納される値は16進数で0x1175 であり、それぞれの比較結果の付加情報の値を示している。
上述したように、実施例1に係るベクトル命令では、前のベクトル命令の比較結果の付加情報は、レジスタ幅の限界により押し出されるまで付加情報格納レジスタ中に保持される。従って、ベクトル命令を連続実行しても、付加情報格納レジスタにその結果が保持できる範囲では、比較結果の付加情報を保存しておくことができる。比較例に係るベクトル命令は、前のベクトル命令の比較結果の付加情報を引き継がないが、実施例1に係るベクトル命令は、付加情報格納レジスタ(GR[1])114に付加情報を蓄積するため、付加情報格納レジスタ(GR[1])114が溢れない限り前のベクトル命令の結果を引き継ぐことができる。
実施例1に係るベクトル命令は、ベクトル命令の演算結果と別に付加情報を生成し、ベクトルレジスタとは異なるレジスタに挿入することで、ベクトル命令で並列に実行可能なデータ数を越えた場合でも、ベクトル命令を連続で実行するだけで結果をレジスタに蓄積することができる。これにより、比較例にようにベクトル命令を1命令実行する毎にスカラ命令によってフラグなどの結果を確認する必要がなく、付加情報格納レジスタが一杯になるまでベクトル命令を実行し、最後に付加情報格納レジスタの確認を行うだけで済む。
実施例1に係るベクトル命令では、汎用レジスタ(GR[1])で付加情報(CC)のレジスタへの挿入を実現するためには、汎用レジスタ(GR[1])の読み出しと書き込みが必要になり、汎用レジスタの待ち合わせが必要になる。すなわち、実施例1に係るベクトル命令が連続する場合、RAWハザードを解決するために待ち合わせが発生してしまう。そこで、実施例2に係るベクトル命令では、付加情報を格納するための専用レジスタと専用回路を持たせる。
図10は実施例2に係るベクトル命令を説明するためのブロック図である。図11は図10の専用レジスタを説明するためのブロック図である。実施例2に係るベクトル命令を実行する半導体装置は、実施例1に係る半導体装置とベクトル演算ユニットの構成が異なるが、それ以外は実施例1と同様である。実施例2に係るベクトル演算ユニット11Aの専用回路113が専用回路213に接続されている点および専用回路213が汎用レジスタ16に接続されている点を除き、実施例1に係るベクトル演算ユニット11と同様である。なお、専用回路213はベクトル演算ユニット11Aの外にあってもよい。専用回路213は専用レジスタ(SR)214とセレクタ217を備える。
実施例2に係るベクトル命令は、2つのベクトルレジスタを用いて演算を行い、その演回路結果をベクトルレジスタに書き込むとともに、その演算結果に応じて、演算結果を補助するような付加情報を出力する命令であり、例えば以下に示すような命令である。
cmp2.N order,cond,wreg1,wreg2,wreg3
実施例2に係るベクトル命令はベクトルレジスタ(wreg1)の内容とベクトルレジスタ(wreg2)の内容を比較して、その結果をベクトルレジスタ(wreg3)に格納するとともに、暗黙的に指定される専用レジスタ(SR)に付加情報を格納する。実施例2に係るベクトル命令は付加情報の格納先を除き、実施例1に係るベクトル命令と同様である。
実施例2に係るベクトル命令は、演算の結果生成された付加情報要素(cc[3:0])を連結回路1131で連結して付加情報(CC)を生成し、専用レジスタ(SR)214に格納する。専用レジスタ(SR)214に付加情報(CC)が格納されるためには、一度格納先の専用レジスタ(SR)214からデータパス215を介してレジスタ値が読み込まれ、シフタ1132でシフト処理が行われ、連結回路1133で付加情報(CC)の挿入が行われ、その結果の値が専用レジスタ(SR)214へデータパス216を介して書き戻される。シフタ1132は「order」によって指定される方向(右または左)に「N」で指定される固定値(例えば4ビット)分データをシフトする。
専用レジスタ(SR)214は、システムレジスタ17と同様に専用レジスタを読み書きする命令(専用レジスタから汎用レジスタに移動する命令、または汎用レジスタから専用レジスタに移動する命令)により読み書きされる。専用レジスタ(SR)214は32ビット幅のデータを同一サイクルの間に読み書きする回路を持っている。したがって、専用レジスタ(SR)214はデータパス215からのデータの読み出しとデータパス218からのデータの書込みを並列して行うことができるので、ベクトル命令が連続した場合のRAWハザードを発生することなく、レジスタの更新が可能となる。
また、付加情報を取り出してチェックするためには、実施例2に係るベクトル命令の直後に専用レジスタから汎用レジスタに移動する命令を実行することになる。専用レジスタ(SR)214はデータパス220からのデータの読み出しとデータパス218からのデータの書込みを並列して行うことができるので、RAMハザードを発生することなく、汎用レジスタ16にデータを読み出すことが可能となる。なお、汎用レジスタから専用レジスタに移動する命令により、データがデータパス219、セレクタ217、データパス218を介して専用レジスタ(SR)214に書き込まれる。
次に、上記した昇順または降順に配置された配列から、ある境界値を越えた場所(インデックス)を探索する第1のアルゴリズムを考える。
上記第1のアルゴリズムを実現するためには、非ベクトル命令を利用して、配列の要素を一つ一つ比較するか、ベクトル命令を用いて、複数の要素を同時に比較する方法が存在する。配列の要素を一つ一つ比較する方法は、非ベクトル命令(ベクトルレジスタを参照せず、基本的に汎用レジスタを用いる命令で、スカラ命令ともいう。)を用いて値を比較していく方法である。一方でベクトル命令を用いる場合、array[]に格納されている値を、複数個同時にborderと比較することができるようになる。第1のアルゴリズムは、下記に示す第2のアルゴリズムに変更できる。なお、簡単化のため、配列の要素Mはベクトル命令の並列数Nの倍数であると仮定している。
// Nワードを同時に実行可能なベクトル演算命令で、Nワードの同時比較を実行する場合
// ベクトルレジスタvborderの全てのwayに、borderの値を格納する。
vborder = {border, border, …, border, border};
for (i = 0;i < M / N; i++) {
// arrayの中から値を取り出し、ベクトルレジスタに格納する
varray = {array[i*N+(N-1)], array[i*N+(N-2)],…, array[i*N+1], array[i*N+0]};
// 比較を実行
vresult = v_compare (vborder, array);
}
上記第2のアルゴリズムで、ベクトル命令を用いてNワードずつ値を比較することができるが、ベクトルレジスタ(vresult)から、比較結果の付加情報が変化した(配列の値がborderよりも大きくなった)場所を探索するためには、多くの命令が必要になる。通常は下記に示すような第3のアルゴリズムを取る。
// Nワードを同時に実行可能なベクトル演算命令で、Nワードの同時比較を実行する場合
// ベクトルレジスタvborderの全てのwayに、borderの値を格納する。
vborder = {border, border, …, border, border};
index = 0;
for (i = 0;i < M / N; i++) {
// arrayの中から値を取り出し、ベクトルレジスタに格納する
varray = {array[i*N+(N-1)], array[i*N+(N-2)],…, array[i*N+1], array[i*N+0]};
// 比較を実行
// vborderとvarrayの各要素を比較し、結果をvresultに格納する。
// flagには、各ベクトル要素のフラグが格納される(Nビット)
vresult = v_compare (vborder, varray, flag);
// ベクトル比較命令にてNワードの比較を実行後
if (全ての演算結果で比較結果不成立 (フラグなどを参照する)) {
//比較の結果、該当するベクトル要素が含まれている場合には脱出する
break;
} else {
index = index + N; // 比較したベクトル列の中にはヒットしなかった。
}
}
// 比較の結果、該当するベクトル要素が含まれている場合、どのベクトル要素から成立しているのかを1つずつ調べる。
for (i = 0; i < N; i++) {
if (flag[i] == 1) {
break;
} else {
index = index + 1;
}
}
例として、昇順の配列A=[0,1,2,4, 5,7,8,10, 12,15,16,20, 22,25,30,31]の中から、値15を越える配列のインデックスを探索する第3のアルゴリズムを比較例に係るベクトル命令を用いる場合について説明する。
図12は比較例に係るベクトル命令を用いた場合のアルゴリズムを実行するための命令の構造を示す図である。図13は比較例に係るベクトル命令を用いてアルゴリズムを実行した場合の実行過程を示す図である。比較例に係るベクトル命令では、比較結果の付加情報の該当するインデックスを汎用レジスタ(GR[1])314に格納する。そして比較結果内に、該当する結果が表われなければ、比較例に係るベクトル命令はインデックスとして4を汎用レジスタ(GR[1])314に格納する。以下、比較例に係るベクトル命令を用いた場合の手順について図13を参照して説明する。ベクトル命令の並列度は4とする。また、比較命令はA[i]>B[i]であれば1、それ以外は0とする。
ステップ1:
if (GR[1]!=4) {
borderを越える値が見つかった
} else {
ANS = ANS + 4
}
(1)ベクトルレジスタ(wreg2)にborderの15が格納され、wreg2=[15,15,15,15]となる。
(2)ベクトルレジスタ(wreg1)に配列A[3-0] の値が格納とされ、wreg1=[4,2,1,0]となる。
(3)wreg1とwreg2とが比較され、インデックス=4、GR=0000_0000_0000_0100 となる。
ステップ2:
if (GR[1]!=4) {
borderを越える値が見つかった
} else {
ANS = ANS + 4
}
(1)ベクトルレジスタ(wreg1)に配列A[7-4] の値が格納され、wreg1=[10,8,7,5] となる。
(2)wreg1とwreg2とが比較され、インデックス=4、GR=0000_0000_0000_0100 となる。
ステップ3:
if (GR[1]!=4) {
borderを越える値が見つかった
ANS = ANS + GR[1] ⇒ ループ終了
}
ANS = ANS + GR[1];
}
(1)ベクトルレジスタ(wreg1)に配列A[11-8] の値が格納され、wreg1=[20,16,15,12]となる。
(2)wreg1とwreg2とが比較され、インデックス=2、GR=0000_0000_0000_0010 となる。
なお、配列A[12-15](ステップ4)については、比較例に係るベクトル命令は実行されない。
比較例に係るベクトル命令は付加情報格納レジスタ(GR[1])314を上書きし、前の結果を保持しないため、比較例に係るベクトル命令を実行する毎にborderを越える値が見つかったどうかの判定を行うスカラ命令を挿入する必要がある。この判定はスカラ演算ユニットの演算器141を用いて行われる。また、汎用レジスタ16はベクトル命令とスカラ命令で交互にアクセスされることになる。このため、ベクトル命令とスカラ命令(4を越えるかどうかの判定)を実行する必要があり、実行効率が低下する。
以上のように、比較例に係るベクトル命令は、複数の値を同時に比較することができるものの、その後に汎用レジスタに移動されたインデックスから比較条件が成立した場所を探さなければならない。第3のアルゴリズムを実行するためには、
汎用レジスタの内容を比較する命令(比較命令)
比較命令の結果に基づいて分岐する分岐命令
が必要になり、ベクトル命令を効率的に活用できていることにはならない。
一方で、実施例2に係るベクトル命令を利用すると、Nワード同時に演算が実行可能な命令だとすると、ceil(M/N)回、実施例2に係るベクトル命令を実行することにより、付加情報格納レジスタにMビットの情報が並び、2進数で 11...10...000 のように並ぶ。付加情報格納レジスタに対して、最上位または最下位から0/1の場所までの数を数える命令を使うことにより、境界値のインデックスを計算することができる。具体的には、下記に示す第4のアルゴリズムに変更される。なお、付加情報格納レジスタとして、ベクトル演算結果の付加情報をKビットまで格納できる専用レジスタ(SR)214を用いる場合である。
vborder = {border, border, …, border, border};
for (i = 0; i < M/K; i++) {
head_idx = i * K;
for (j = 0; j < K/N; j++) {
// arrayの中から値を取り出し、ベクトルレジスタに格納する
varray = {array[head_idx+(N-1)], array[head_idx+(N-2)], … aray[head_idx+0]};
// 比較を実行
vresult = v_compare (vborder, array);
head_idx = head_idx + N;
}
if (専用レジスタ != 0x00) {
goto finish;
}
}
finish:
// search_1_from_right は、1が立っているビットの場所をLSBから順に検索する
// この機能は多くのCPUでは命令として存在する。
one_index = search_1_from_right(専用レジスタ);
return head_idx + one_index;

例として、昇順の配列A=[0,1,2,4, 5,7,8,10, 12,15,16,20, 22,25,30,31]の中から、値15を越える配列のインデックスを探索する第4のアルゴリズムを実施例2に係るベクトル命令を用いる場合について説明する。ここで、M=16、K=16、N=4とする。なお、専用レジスタ(SR)214は32ビット幅であると説明したが、ここでは図面およびその説明を簡単にするために16ビット幅(K=16)としている。
図14は実施例2に係るベクトル命令を用いた場合のアルゴリズムを実行するための命令の構造を示す図である。図15は実施例2に係るベクトル命令を用いてアルゴリズムを実行した場合の実行経過を示す図である。上記アルゴリズムの最内ループにはベクトル命令以外は存在しない。これは、図14の破線で囲まれたベクトル命令に対応する。ベクトル命令は、比較結果の付加情報を格納する専用レジスタ(SR)214が全て埋まるまで(K(=16)ビット分)繰り返して連続で実行することができる。ここでは、K/N(=16/4=4)回実行している。実施例2に係るベクトル命令は、最内ループ内でベクトル命令の結果を汎用レジスタ16に移動する必要はなく、専用レジスタ(SR)314のK(=16)ビット分が満杯になるまで連続して比較を実行することができる。
K(=16)ビット分の比較が完了すると、専用レジスタ(SR)214を評価して、0以外が格納されていれば、borderを越える値が存在していたことを意味する。専用レジスタ(SR)214に0が格納されていれば、比較を実行したK(=16)個の配列には、borderを越える値は存在しなかったということになり、次の配列の場所から比較を再開する(最外ループ)。これは図14の破線で囲まれたスカラ命令に対応する。
以下、実施例2に係るベクトル命令を用いた場合の手順について図15を参照して説明する。ベクトル命令の並列度は4とする。また、比較命令はA[i]>B[i]であれば1、それ以外は0とする。専用レジスタSR=0とする。
ステップ1:
(1)ベクトルレジスタ(wreg2)にborderの15が格納され、wreg2=[15,15,15,15]となる。
(2)ベクトルレジスタ(wreg1)に配列A[3-0] の値が格納され、wreg1=[4,2,1,0] となる。
(3)wreg1とwreg2とが比較され、フラグ=[0,0,0,0]、SR=0000_0000_0000_0000 となる。
ステップ2:
(1)ベクトルレジスタ(wreg1)に配列A[7-4] の値が格納され、wreg1=[10,8,7,5]となる。
(2)wreg1とwreg2とが比較され、フラグ=[0,0,0,0]、SR=0000_0000_0000_0000 となる。
ステップ3:
(1)ベクトルレジスタ(wreg1)に配列A[11-8] の値が格納され、wreg1=[20,16,15,12] となる。
(2)wreg1とwreg2とが比較され、フラグ=[1,1,0,0]、SR=1100_0000_0000_0000 となる。
ステップ4:
(1)ベクトルレジスタ(wreg1)に配列A[15-12] の値が格納され、wreg1=[31,30,25,22] となる。
(2)wreg1とwreg2とが比較され、フラグ=[1,1,1,1]、SR=1111_1100_0000_0000 となる。
以上の処理で、配列A内で値が15を越えた場所で比較結果が反転し、15を越える配列のインデックスは10であることが分かる。これは、専用レジスタの値を汎用レジスタに移動する命令、汎用レジスタの下位ビットから順に1が立っている場所を検出する命令の1命令で実現可能である。
上記の例では、第4のアルゴリズムの内の最内ループを1度だけ実行した例だが、配列Aの大きさ(M)が16より大きくなっても、専用レジスタのサイズ(K=16ビット)が一杯になる毎に専用レジスタの値を汎用レジスタに移動して、比較結果の付加情報を判定する。
以上から、実施例2に係るベクトル命令を用いることにより、付加情報を汎用レジスタに移動する処理が不要となる。最内ループで、比較結果に基づくループ脱出の判定が不要となる。
以上の理由から、実施例2に係るベクトル命令は、ベクトル比較命令を効率的に活用でき、サイクル性能を向上させることができるようになる。また、ベクトル比較の結果を専用レジスタに格納し、専用レジスタにはデータ挿入のための専用回路が組込まれているため、比較命令の実行毎に専用レジスタの値を更新するために読み出し動作をする必要がなく、専用レジスタのRAMハザードを回避することができる。K回に一度、専用レジスタの値が0か否かを確認するときだけ、専用レジスタの読み出し操作が必要になる。
一方、実施例2に係るベクトル命令を用いる場合は、上記のようにKビット分をチェックしてからループを抜けるか判定を行うため、比較例に係るベクトル命令を用いる場合に、スカラ命令を用いて1ワードずつ比較してループ脱出の判定条件を行っている方法とは、トレードオフが存在する。探索する配列が小さい、または、該当するインデックスがKよりも小さい場合は、スカラ命令を用いた方が早くインデックスを探索できる可能性がある。しかし、配列のサイズが大きくなったり、探索するインデックスが大きくなったりすると、Kビット分ずつ比較していく実施例2に係るベクトル命令の方がサイクル性能を向上することができる。
実施例2に係るベクトル命令は、昇順あるいは降順に配置された配列から、ある境界値を越えた場所(インデックス)を探索するアルゴリズムを高速化することができる。
以上、本発明者によってなされた発明を実施形態および実施例に基づき具体的に説明したが、本発明は、上記実施形態および実施例に限定されるものではなく、種々変更可能であることはいうまでもない。
例えば、実施例では、半導体装置にCPUとメモリを内蔵している例を説明したが、メモリはCPUが内蔵される半導体装置とは別の半導体装置に内蔵するようにしてもよい。実施例では、CPUにベクトル演算ユニットを内蔵している例を説明したが、ベクトル演算ユニットはCPUの外に置いてもよい。実施例では専用レジスタを32ビット幅として説明したが、16ビット幅や64ビット幅等他のビット幅であってもよい。実施例では汎用レジスタを32ビット幅として説明したが、16ビット幅や64ビット幅等他のビット幅であってもよい。実施例ではベクトルレジスタを128ビット幅として説明したが、64ビット幅や256ビット幅等他のビット幅であってもよい。実施例ではベクトル演算ユニットの演算器を4個として説明したが、8個等他の個数であってもよい。
<実施態様>
以下、実施態様について付記する。
(付記1)
ベクトル命令を実行可能なデータ処理装置を備える半導体装置であって、
前記データ処理装置は、前記ベクトル命令を実行した演算処理の結果から付加情報を生成し、
前記データ処理装置は付加情報格納レジスタを備え、
前記付加情報格納レジスタは、前記ベクトル命令に基づいて前記付加情報を表すビット数分だけシフトされて空いた部分に前記付加情報を表すビットを連結し格納する
半導体装置。
(付記2)
(付記1)に記載の半導体装置において、
前記付加情報格納レジスタは、複数回の前記データ処理装置の実行によって生成された前記付加情報を表すビットを格納する。
1・・・中央処理装置(CPU)
11・・・ベクトル演算ユニット
101・・・ベクトルレジスタ
102・・・演算器
103・・・専用回路
104・・・付加情報格納レジスタ
111・・・ベクトルレジスタ
112・・・演算器
113・・・専用回路
114・・・付加情報格納レジスタ(汎用レジスタ)
1131・・・連結回路
1132・・・シフタ
1133・・・連結回路
12・・・命令フェッチユニット
13・・・命令発行ユニット
14・・・スカラ演算ユニット
15・・・メモリアクセスユニット
16・・・汎用レジスタ
17・・・システムレジスタ
18・・・コミットユニット
2・・・記憶装置(メモリ)
11A・・・ベクトル演算ユニット
213・・・専用回路
214・・・付加情報格納レジスタ(専用レジスタ)
217・・・セレクタ

Claims (20)

  1. 半導体装置はベクトル命令およびスカラ命令を実行可能なデータ処理装置を備え、
    前記データ処理装置は、第1および第2のベクトルレジスタと、汎用レジスタまたは専用レジスタと、を有し、
    前記ベクトル命令は、前記第1のベクトルレジスタの内容と前記第2のベクトルレジスタの内容とを要素ごとに演算し、要素ごとの演算結果に基づく付加情報を連結し、前記汎用レジスタまたは前記専用レジスタの内容を右または左にシフトし、シフトによって空いた部分に連結した付加情報を挿入して、前記汎用レジスタまたは前記専用レジスタに前記付加情報を蓄積する命令であり、
    前記データ処理装置は、1度目のベクトル命令実行、第1の連結した付加情報を前記汎用レジスタまたは前記専用レジスタに保存し、前記1度目の実行に連続する2度目の前記ベクトル命令の実行で、第2の連結した付加情報を前記汎用レジスタまたは前記専用レジスタにさらに保存し、前記第1の連結した付加情報および前記第2の連結した付加情報に基づいて前記スカラ命令を実行するよう構成される。
  2. 請求項1の半導体装置において、
    前記第1および第2のベクトルレジスタはそれぞれN個の要素を格納可能であり、
    前記データ処理装置は前記N個の要素の演算を並列に実行可能であり、N個の付加情報を生成するよう構成される。
  3. 請求項2の半導体装置において、
    前記ベクトル命令は前記第1のベクトルレジスタの内容と前記第2のベクトルレジスタの内容を比較する命令であり、
    前記付加情報は比較結果に基づくフラグであり、比較条件に合致する場合1または0になり、比較条件に合致しない場合は0または1になる。
  4. 請求項3の半導体装置において、
    前記ベクトル命令は、前記右または左のシフトと、前記比較条件と、並列に演算する要素数と、を明示的に指定することが可能であり、前記汎用レジスタまたは前記専用レジスタは暗黙的に指定されるよう構成される。
  5. 請求項4の半導体装置において、
    さらに、第3のベクトルレジスタを有し、
    前記ベクトル命令は、前記演算結果を前記第3のベクトルレジスタに格納する命令である。
  6. 請求項5の半導体装置において、
    Nは1から4であり、1要素は32ビットの幅であり、
    前記第1、第2および第3のベクトルレジスタはそれぞれ128ビットの幅であり、
    前記汎用レジスタおよび前記専用レジスタは32ビットの幅であり、
    前記データ処理装置は、4個のベクトル命令を連続実行するごとに前記スカラ命令を実行するよう構成される。
  7. 請求項2の半導体装置において、
    前記N個の付加情報はNビットの幅であり、
    前記汎用レジスタおよび前記専用レジスタは、Mビット(N×2以上の自然数)の幅であり、
    前記データ処理装置は、M÷N以下の数のベクトル命令を連続実行して、それぞれのベクトル命令の実行で生成された付加情報を、前記汎用レジスタまたは前記専用レジスタに順次格納することで全て保持し、前記汎用レジスタまたは前記専用レジスタに保持された前記付加情報に基づいて前記スカラ命令を実行するよう構成される。
  8. 請求項2の半導体装置において、さらに、
    前記付加情報を連結する第1の連結回路と、
    前記汎用レジスタまたは前記専用レジスタの内容を右または左にシフトするシフト回路と、
    前記第1の連結回路の出力と前記シフト回路の出力とを連結する第2の連結回路と、
    を備える。
  9. 請求項8の半導体装置において、
    前記専用レジスタはデータの読む込みと書込みが並列して行うことが可能であるよう構成される。
  10. 請求項9の半導体装置において、
    前記スカラ命令は前記専用レジスタの内容を前記汎用レジスタに転送する命令および前記汎用レジスタの下位ビットまたは上位ビットから最初に1または0がある場所を検出する命令を含む。
  11. 半導体装置は、
    ベクトル命令およびスカラ命令を実行可能な中央処理装置と、
    前記ベクトル命令および前記スカラ命令を格納可能な記憶装置と、
    を備え、
    前記中央処理装置は、
    第1、第2および第3のベクトルレジスタと、
    汎用レジスタと、
    専用レジスタと、
    を備え、
    前記ベクトル命令は、第1のベクトルレジスタの内容と第2のベクトルレジスタの内容とを要素ごとに比較し、比較結果を前記第3のベクトルレジスタに格納し、要素ごとの比較結果に基づく付加情報を連結し、前記汎用レジスタまたは前記専用レジスタの内容を右または左にシフトし、シフトによって空いた部分に連結した付加情報を挿入して、前記汎用レジスタまたは前記専用レジスタに前記付加情報を蓄積する命令であり、
    前記中央処理装置は、1度目のベクトル命令実行、第1の連結した付加情報を前記汎用レジスタまたは前記専用レジスタに保存し、前記1度目の実行に連続する2度目の前記ベクトル命令の実行で、第2の連結した付加情報を前記汎用レジスタまたは前記専用レジスタにさらに保存し、前記第1の連結した付加情報および前記第2の連結した付加情報に基づいて前記スカラ命令を実行するよう構成される。
  12. 請求項11の半導体装置において、
    前記第1、第2および第3のベクトルレジスタはそれぞれN個の要素を格納可能であり、
    前記中央処理装置は前記N個の要素の比較を並列に実行可能であり、N個の付加情報を生成するよう構成される。
  13. 請求項11の半導体装置において、
    Nは1から4であり、1要素は32ビットの幅であり、
    前記第1、第2および第3のベクトルレジスタはそれぞれ128ビットの幅であり、
    前記汎用レジスタおよび前記専用レジスタは32ビットの幅であり、
    前記中央処理装置は、4個のベクトル命令を連続実行するごとに前記スカラ命令を実行するよう構成される。
  14. 請求項12の半導体装置において、
    前記N個の付加情報はNビットの幅であり、
    前記汎用レジスタおよび前記専用レジスタは、Mビット(N×2以上の自然数)の幅であり、
    前記中央処理装置は、M÷N以下の数のベクトル命令を連続実行して、それぞれのベクトル命令の実行で生成された付加情報を、前記汎用レジスタまたは前記専用レジスタに順次格納することで全て保持し、前記汎用レジスタまたは前記専用レジスタに保持された前記付加情報に基づいて前記スカラ命令を実行するよう構成される。
  15. 請求項12の半導体装置において、
    前記付加情報は比較結果に基づくフラグであり、比較条件に合致する場合1または0になり、比較条件に合致しない場合は0または1になる。
  16. 請求項15の半導体装置において、
    前記ベクトル命令は、前記右または左のシフトと、前記比較条件と、並列に演算する要素数と、を明示的に指定することが可能であり、前記汎用レジスタまたは前記専用レジスタは暗黙的に指定されるよう構成される。
  17. 請求項16の半導体装置において、さらに、
    前記付加情報を連結する第1の連結回路と、
    前記汎用レジスタまたは前記専用レジスタの内容を右または左にシフトするシフト回路と、
    前記第1の連結回路の出力と前記シフト回路の出力とを連結する第2の連結回路と、
    を備える。
  18. 請求項17の半導体装置において、
    前記専用レジスタはデータの読む込みと書込みが並列して行うことが可能であるよう構成される。
  19. 請求項11の半導体装置において、
    前記スカラ命令は前記専用レジスタの内容を前記汎用レジスタに転送する命令および前記汎用レジスタの下位ビットまたは上位ビットから最初に1または0がある場所を検出する命令を含む。
  20. 請求項19の半導体装置において、
    前記中央処理装置は、
    前記ベクトル命令を実行するベクトル演算ユニットと、
    前記スカラ命令を実行するスカラ演算ユニットと、
    を備える。
JP2015142265A 2015-07-16 2015-07-16 半導体装置 Active JP6616608B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2015142265A JP6616608B2 (ja) 2015-07-16 2015-07-16 半導体装置
US15/154,753 US20170017489A1 (en) 2015-07-16 2016-05-13 Semiconductor device
CN201610556654.1A CN106354477A (zh) 2015-07-16 2016-07-14 半导体器件

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015142265A JP6616608B2 (ja) 2015-07-16 2015-07-16 半導体装置

Publications (3)

Publication Number Publication Date
JP2017027149A JP2017027149A (ja) 2017-02-02
JP2017027149A5 JP2017027149A5 (ja) 2018-07-05
JP6616608B2 true JP6616608B2 (ja) 2019-12-04

Family

ID=57775035

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015142265A Active JP6616608B2 (ja) 2015-07-16 2015-07-16 半導体装置

Country Status (3)

Country Link
US (1) US20170017489A1 (ja)
JP (1) JP6616608B2 (ja)
CN (1) CN106354477A (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US11409692B2 (en) * 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11157287B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
US10740098B2 (en) * 2018-02-06 2020-08-11 International Business Machines Corporation Aligning most significant bits of different sized elements in comparison result vectors
JP6981329B2 (ja) * 2018-03-23 2021-12-15 日本電信電話株式会社 分散深層学習システム
GB2601466A (en) * 2020-02-10 2022-06-08 Xmos Ltd Rotating accumulator

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0616287B2 (ja) * 1982-09-29 1994-03-02 株式会社日立製作所 マスク付きベクトル演算処理装置
JPS6327975A (ja) * 1986-07-22 1988-02-05 Hitachi Ltd ベクトル演算制御方式
JPH01271875A (ja) * 1988-04-22 1989-10-30 Nec Corp ベクトル演算制御方式
JPH04342067A (ja) * 1991-05-20 1992-11-27 Nec Software Ltd ベクトル演算装置
US5801975A (en) * 1996-12-02 1998-09-01 Compaq Computer Corporation And Advanced Micro Devices, Inc. Computer modified to perform inverse discrete cosine transform operations on a one-dimensional matrix of numbers within a minimal number of instruction cycles
US6976049B2 (en) * 2002-03-28 2005-12-13 Intel Corporation Method and apparatus for implementing single/dual packed multi-way addition instructions having accumulation options
US7293056B2 (en) * 2002-12-18 2007-11-06 Intel Corporation Variable width, at least six-way addition/accumulation instructions
US7565514B2 (en) * 2006-04-28 2009-07-21 Freescale Semiconductor, Inc. Parallel condition code generation for SIMD operations
US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
JP4228241B2 (ja) * 2006-12-13 2009-02-25 ソニー株式会社 演算処理装置
US9092213B2 (en) * 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation

Also Published As

Publication number Publication date
CN106354477A (zh) 2017-01-25
JP2017027149A (ja) 2017-02-02
US20170017489A1 (en) 2017-01-19

Similar Documents

Publication Publication Date Title
JP6616608B2 (ja) 半導体装置
US4860197A (en) Branch cache system with instruction boundary determination independent of parcel boundary
FI80532B (fi) Centralenhet foer databehandlingssystem.
CN104838357B (zh) 向量化方法、系统及处理器
KR100956970B1 (ko) 프로세서에서의 마스킹된 저장 동작들을 위한 시스템 및방법
US7177876B2 (en) Speculative load of look up table entries based upon coarse index calculation in parallel with fine index calculation
KR100346515B1 (ko) 수퍼파이프라인된수퍼스칼라프로세서를위한임시파이프라인레지스터파일
KR20110055629A (ko) 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공
JPH11504458A (ja) スーパースカラマイクロプロセッサにおける分岐予測正確度向上のための装置および方法
JP5834997B2 (ja) ベクトルプロセッサ、ベクトルプロセッサの処理方法
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
JPH04245540A (ja) 条件付き分岐を有するプログラムの効率的実行をするためのコンピュータシステム
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
US9965275B2 (en) Element size increasing instruction
KR20180066146A (ko) 벡터 데이터 전송 명령어
US20050203928A1 (en) Register move instruction for section select of source operand
JPH063584B2 (ja) 情報処理装置
TWI740851B (zh) 用於向量負載指示之資料處理設備、方法及電腦程式
US20110302394A1 (en) System and method for processing regular expressions using simd and parallel streams
CN106610817A (zh) 用于采取vliw处理器中的相同执行数据包中的常数扩展槽指定或扩展常数位数的方法
KR900010587A (ko) 생산라인의 고성능 명령어 실행방법 및 장치
US7600102B2 (en) Condition bits for controlling branch processing
EP3340038A1 (en) Processor instructions for determining two minimum and two maximum values
US20040044885A1 (en) Performing repeat string operations
JPS6049340B2 (ja) 分岐命令先取り方式

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180525

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180525

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190319

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190515

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190806

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191003

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191108

R150 Certificate of patent or registration of utility model

Ref document number: 6616608

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150