JP5413473B2 - ベクトル処理装置およびベクトル処理方法 - Google Patents

ベクトル処理装置およびベクトル処理方法 Download PDF

Info

Publication number
JP5413473B2
JP5413473B2 JP2012045821A JP2012045821A JP5413473B2 JP 5413473 B2 JP5413473 B2 JP 5413473B2 JP 2012045821 A JP2012045821 A JP 2012045821A JP 2012045821 A JP2012045821 A JP 2012045821A JP 5413473 B2 JP5413473 B2 JP 5413473B2
Authority
JP
Japan
Prior art keywords
vector
instruction
storage
storage pointer
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
JP2012045821A
Other languages
English (en)
Other versions
JP2013182420A (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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP2012045821A priority Critical patent/JP5413473B2/ja
Priority to US13/781,945 priority patent/US20130232317A1/en
Publication of JP2013182420A publication Critical patent/JP2013182420A/ja
Application granted granted Critical
Publication of JP5413473B2 publication Critical patent/JP5413473B2/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
    • 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
    • G06F15/8053Vector processors
    • 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
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results

Landscapes

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

Description

本発明はベクトル処理装置およびベクトル処理方法に関し、特にベクトル処理の効率性を向上させることが可能なベクトル処理装置およびベクトル処理方法に関する。
近年のベクトルマシンにおいては、その処理が並列パイプライン化されている。本発明に関連する技術としては、例えば、特許文献1〜5に開示される技術がある。
特表2008−535115号公報 特開平09−198374号公報 特開平08−314897号公報 特開平01−205269号公報 特開昭61−290570号公報
しかしながら、処理が並列パイプライン化されたベクトルマシンでは、この並列度に満たない要素をベクトル処理する場合には、パイプラインをフルに使い切ることがなく、処理効率が低いものになる。また、短ベクトル長のベクトル命令を繰り返すことでは、実行開始時のオーバーヘッドのために処理効率が低いものになる。このため、ベクトル機における通常の長ベクトル処理と比べて、短ベクトル処理では効率よく処理ができないという問題があった。
本発明は、このような問題点を解決するためになされたものであり、ベクトル処理の効率性を向上することができるベクトル処理装置およびベクトル処理方法を提供することを目的とする。
本発明に係るベクトル処理装置は、ベクトルレジスタの使用要素範囲を特定する情報を含むベクトル命令の実行制御を行う命令制御部と、ベクトルレジスタの使用要素の位置を指示する格納ポインタを生成する格納ポインタ生成部と、複数のベクトルレジスタそれぞれが分散配置されて並列処理を実行する複数のベクトルパイプラインを含む命令実行部と、を備え、前記格納ポインタ生成部は、先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、前記複数のベクトルレジスタの特定した使用要素範囲に格納できるように、前記ベクトル命令を参照して前記格納ポインタを制御し、前記命令実行部は、前記格納ポインタ生成部によって生成された前記格納ポインタに従って、前記ベクトルレジスタへの要素の格納を行う。
本発明に係るベクトル処理装置のベクトル処理方法は、先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、複数のベクトルレジスタの特定した使用要素範囲に格納できるように、ベクトル命令を参照して格納ポインタを制御する格納ポインタ生成ステップと、前記格納ポインタに従って、前記ベクトルレジスタへの要素の格納を行う命令実行ステップと、を有する。
本発明により、ベクトル処理の効率性を向上することができるベクトル処理装置およびベクトル処理方法を提供することができる。
実施の形態1にかかるベクトル処理装置の構成を示す図である。 実施の形態1にかかる格納ポインタ生成部の構成を示す図である。 実施の形態1にかかる命令実行部の構成を示す図である。 一般的なベクトルマシンでの処理のようすを説明する図である。 実施の形態1にかかるベクトル処理装置の処理のようすを説明する図である。 実施の形態1にかかるベクトルマシンによる処理の効率性を説明する図である。 本発明にかかるベクトルマシンの本質的部分の構成を示す図である。
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
<発明の実施の形態1>
[構成の説明]
図1は、本実施の形態に係るベクトル処理装置の構成例を示している。ベクトル処理装置は、命令フェッチ部10と、デコーダ部20と、命令制御部30と、格納ポインタ生成部40と、命令実行部50と、メモリ制御部60と、メモリ70と、を備える。
命令フェッチ部10は、メモリ70からプログラムをフェッチし、デコーダ部20に対してベクトル命令を送出する。本実施の形態では、ベクトル命令は、連続格納フラグと、ベクトル命令の対象となるベクトルデータのベクトル長と、を含んでいる。命令に連続してベクトルレジスタにベクトル要素の格納を指示するための情報である。ベクトル処理装置は、このような連続格納フラグを用いることで、ベクトルレジスタの使用要素範囲を特定するとともに、先行命令に連続してベクトルレジスタにベクトル要素の格納を指示することができる。
デコーダ部20は、命令フェッチ部10から入力されたベクトル命令をデコードする。デコーダ部20は、入力されたベクトル命令が連続格納フラグを含むベクトル命令である場合には、命令制御部30に対して、命令(以下、図面においてコマンドとして示す場合がある。)と、連続格納フラグと、ベクトル長と、を送出する。
命令制御部30は、デコーダ部20からの命令と、連続格納フラグと、ベクトル長と、に基づいて、命令の実行制御を行う。具体的には、命令制御部30は、デコーダ部20からの命令(コマンド)と、連続格納フラグと、ベクトル長と、を受け付けると、ベクトル長(以下、図面において、VLとして示す場合がある。)と連続格納フラグを、後述する格納ポインタ生成部40に供給する。
また、命令制御部30は、受け付けた命令(コマンド)の内容がロードなどのメモリアクセスである場合には、メモリ制御部60に対してメモリアクセス指示を行う。命令制御部30は、メモリ制御部60を介して、命令実行部50のベクトルレジスタとメモリ70との間での、命令実行に必要なデータのやりとりを制御する。
また、命令制御部30は、受け付けた命令(コマンド)の内容が命令実行部50のベクトルレジスタへのベクトル要素格納指示、またはベクトル要素読出し指示である場合には、これら指示を実行するための命令(コマンド)を、命令実行部50に対して送出する。
また、命令制御部30は、受け付けた命令(コマンド)の内容が加算などの演算処理である場合には、加算命令を実行するための命令(コマンド)を、命令実行部50に対して送出する。命令制御部30は、命令実行部50に対して、演算器の演算指示を行う。
格納ポインタ生成部40は、命令制御部30から入力されるベクトル長と連続格納フラグに基づいて、ベクトルレジスタの使用要素の位置を指示する格納ポインタを生成する。格納ポインタは、前命令によって命令実行部50のベクトルレジスタに格納したデータ列に連続して、ベクトル要素をベクトルレジスタに格納するために用いられる。格納ポインタは、命令の対象となるベクトルレジスタのベクトル要素の格納位置を示すポインタである。格納ポインタを用いて、命令対象のベクトルレジスタのベクトル要素の開始番号を指示する。
格納ポインタ生成部40の詳細を、図2を用いて説明する。図2は、格納ポインタ生成部40の構成例を示している。格納ポインタ生成部40は、複数のベクトルレジスタ格納ポインタ生成部(ベクトルレジスタ0格納ポインタ生成部400、ベクトルレジスタ1格納ポインタ生成部410、ベクトルレジスタ2格納ポインタ生成部420)を備えている。なお、詳細は後述するが、複数のベクトルレジスタ格納ポインタ生成部それぞれは、命令実行部50の複数のベクトルレジスタそれぞれに対応する。
格納ポインタ生成部40は、連続格納フラグの内容が、命令実行部50のベクトルレジスタにベクトル要素を連続して格納することを指示するものである場合、現在保持している格納ポインタの値を、ベクトルレジスタ格納ポインタの値として、命令実行部50のベクトルレジスタへ送出する。そして、格納ポインタ生成部40は、現在保持している格納ポインタの値にベクトル長(VL)を加え、その値を格納ポインタに保持する。なお、格納ポインタの値が、ベクトルレジスタのワード数を超える場合には、その超過分については、0番目の要素位置から格納を続ける。
なお、連続格納フラグの内容が、命令実行部50のベクトルレジスタにベクトル要素を連続して格納することを指示するものであるか否かは、例えば、命令実行部50のベクトルレジスタにベクトル要素を連続して格納することを指示するものである場合には、連続格納フラグの値を1とし、命令実行部50のベクトルレジスタにベクトル要素を連続して格納することを指示するものでない場合には、連続格納フラグの値を0とすることで、示すことができる。また、連続格納フラグの内容は、ベクトル処理装置によって設定される。
図2において例えば、ベクトルレジスタ0格納ポインタ生成部400は、連続格納フラグの内容が、命令実行部50のベクトルレジスタにベクトル要素を連続して格納することを指示するものである場合、現在保持している格納ポインタ401の値を、ベクトルレジスタ0格納ポインタとして送出する。そして、ベクトルレジスタ0格納ポインタ生成部400は、格納ポインタ401の値にベクトル長(VL)を加え、その値を格納ポインタ401の値として保持する。
一方で、格納ポインタ生成部40は、連続格納フラグの内容が、命令実行部50のベクトルレジスタにベクトル要素を連続して格納することを指示するものでない場合、現在保持している格納ポインタの値に替えて、要素0から開始するという情報(値'0')をベクトルレジスタ格納ポインタの値として、命令実行部50のベクトルレジスタへ送出する。そして、格納ポインタ生成部40は、要素番号0にベクトル長(VL)を加え、その値を格納ポインタに保持する。
図2において例えば、ベクトルレジスタ0格納ポインタ生成部400は、連続格納フラグの内容が、命令実行部50のベクトルレジスタにベクトル要素を連続して格納することを指示するものでない場合、現在保持している格納ポインタ401の値に替えて、要素0から開始するという情報を、ベクトルレジスタ0格納ポインタの値として送出する。そして、ベクトルレジスタ0格納ポインタ生成部400は、要素番号0にベクトル長(VL)を加え、その値を格納ポインタ401の値として保持する。
命令実行部50は、命令制御部30からの命令(ベクトル要素格納指示、ベクトル要素読み出し指示、演算指示を含む)と、格納ポインタ生成部40からの格納ポインタと、に基づいて命令を実行する。命令実行部50は、並列処理を実行する複数のベクトルパイプラインを備えている。各ベクトルパイプランは、複数のベクトルレジスタと、少なくとも1つの演算器と、を含んでいる。複数のベクトルパイプラインのそれぞれに、複数のベクトルレジスタそれぞれが分散配置される。
命令実行部50の詳細を、図3を用いて説明する。図3は、命令実行部50の構成例を示している。命令実行部50は、複数のベクトルパイプライン(図では、ベクトルパイプライン0、VP1、VP2、・・・、VP15として示す。)を備えている。図において、例えばベクトルパイプライン500は、複数のベクトルレジスタ520〜560(図では、VA0、VA1、VA2としてそれぞれ示す。)と、演算器580と、を備えている。なお、他のベクトルパイプライン(VP1、VP2、・・・、VP15)の構成はベクトルパイプライン500と同様であるため、ここではその詳細な説明を省略する。
ベクトルパイプライン500のベクトルレジスタ520に対して、格納ポインタ生成部40のベクトルレジスタ0格納ポインタが入力される。ベクトルレジスタ540に対して、ベクトルレジスタ1格納ポインタが入力される。ベクトルレジスタ560に対して、ベクトルレジスタ2格納ポインタが入力される。
なお、他のベクトルパイプライン(VP1、VP2、・・・、VP15)が有するベクトルレジスタ(VA0、VA1、VA2)それぞれに対しても、格納ポインタ生成部40が有する格納ポインタ(ベクトルレジスタ0格納ポインタ、ベクトルレジスタ1格納ポインタ、ベクトルレジスタ2格納ポインタ)それぞれが入力される。
また、以下の説明においては、説明の簡便化のため、複数のベクトルパイプライン(ベクトルパイプライン0、VP1、VP2、・・・、VP15)それぞれが有するベクトルレジスタ520(VA0)を、"命令実行部50の0番目のベクトルレジスタ"と総称し、複数のベクトルパイプライン(ベクトルパイプライン0、VP1、VP2、・・・、VP15)それぞれが有するベクトルレジスタ540(VA1)を、"命令実行部50の1番目のベクトルレジスタ"と総称し、複数のベクトルパイプライン(ベクトルパイプライン0、VP1、VP2、・・・、VP15)それぞれが有するベクトルレジスタ560(VA1)を、"命令実行部50の2番目のベクトルレジスタ"と総称する場合がある。
ベクトルパイプライン500の複数のベクトルレジスタ520〜560それぞれは、命令制御部30からのベクトル要素格納指示に従い、格納ポインタ生成部40から送られるベクトルレジスタ格納ポインタが示す要素の格納を行う。また、ベクトルレジスタ520〜560それぞれは、命令制御部30からのベクトル要素読出し指示に従い、格納ポインタ生成部40から送られるベクトルレジスタ格納ポインタが示す要素の読出しを行う。
例えば、ベクトルレジスタ520は、命令制御部30からのベクトル要素格納指示に従い、格納ポインタ生成部40からのベクトルレジスタ0格納ポインタが示す要素の格納を行う。また、ベクトル要素読出し指示に従い、ベクトルレジスタ0格納ポインタが示す要素の読出しを行う。
[動作の説明]
続いて以下では、ベクトル処理装置の動作の一例を、図4〜図6を用いて説明する。本実施の形態では、2次元配列の行列和の演算を例に説明し、以下に、この演算処理を実現するためのプログラムの構成例を示す。なお、以下の例では、ループ回数mが、ベクトルマシンのパイプラインの並列度と比較して小さな場合を例に説明する。下記のプログラムは2重のループを用いて構成されている。外側のループはカウンタiを用いたn回のループにより構成され、内側のループはカウンタjを用いたm回のループにより構成されている。
[演算の一例]
for ( i=0 ; i<n ; i++ ) {
for ( j=0 ; j<m ; j++ ) { C[i][j] = A[i][j] + B[i][j] ; }
}
上記プログラムのループ構成に関して、一般的なベクトル機におけるベクトル処理演算では、内側ループjをベクトル命令に置き換えて構成することが多い。以下に、ベクトル命令に置き換えた後のプログラムの構成例を示す。
[ベクトル処理演算の一例:一般的なプログラムの構成例]
iの値を初期化
LOOP:
iの値がnより小さくなければループから脱出
A[i]のアドレスから、m個分のデータをベクトルロードし、ベクトルレジスタ0へ
B[i]のアドレスから、m個分のデータをベクトルロードし、ベクトルレジスタ1へ
ベクトルレジスタ0とベクトルレジスタ1をm回分ベクトル加算し、ベクトルレジスタ2へ
ベクトルレジスタ2の内容を、C[i]のアドレスから、m個分ベクトルストア
LOOPに戻る
一般的なベクトル機でこのようなベクトル処理を演算する際に、mの値が小さな場合には、ベクトルレジスタに格納するベクトル長が短くなってしまい、結果としてベクトル加算の効率が落ちてしまうことがある。
具体的に説明する。例えば最大ベクトル長を256要素とするベクトル処理システムにおいて、そのシステムのマイクロアーキテクチャが、16本のベクトルパイプラインを備える構成例を想定する。一般的に、ベクトルレジスタは、16本のベクトルパイプラインに対して分散して配置される。分散配置される際のルールとしては、例えば、"要素番号を16で剰余したときに値が0となる要素については、16本のベクトルパイプラインのうちで0番目のベクトルパイプラインを用いる。要素番号を16で剰余したときに値が1となる要素については、1番目のベクトルパイプラインを用いる。" という手法が考えられる。
しかし、上記した構成例において例えばmが8である場合には、上記ベクトル処理演算では、上述した全てのベクトル命令(ベクトルロード、ベクトル加算、ベクトルストア)の実行において、16本のベクトルパイプラインのうちで8本のベクトルパイプラインのみしか使用されないことになる。このため、残り8本のベクトルパイプラインでは処理が行われないことになり、処理効率の低下をもたらすことになる(図4に示すように、ベクトルパイプライン0〜ベクトルパイプライン7のみしか使用されず、ベクトルパイプライン8〜ベクトルパイプライン15では処理が行われない。)。
そこで、本実施の形態においては、以下に例示する仕組みを導入することで、複数の短ベクトル処理を、1つの長ベクトル処理としてまとめることを可能とする。具体的には、以下に例示するプログラムの命令列を導入する。
[本実施の形態に係るベクトル処理演算の一例]
iの値を初期化
LOOP:
iの値がnより小さくなければループから脱出
A[i]のアドレスから、m個分のデータをベクトルロードし、ベクトルレジスタ0へ、連続格納フラグが連続格納を示していない・・・命令(1)
A[i+1]のアドレスから、m個分のデータをベクトルロードし、ベクトルレジスタ0へ、連続格納フラグが連続格納を示している・・・命令(2)
B[i]のアドレスから、m個分のデータをベクトルロードし、ベクトルレジスタ1へ、連続格納フラグが連続格納を示していない・・・命令(3)
B[i+1]のアドレスから、m個分のデータをベクトルロードし、ベクトルレジスタ1へ、連続格納フラグが連続格納を示している・・・命令(4)
ベクトルレジスタ0とベクトルレジスタ1を2*m回分ベクトル加算し、ベクトルレジスタ2へ・・・命令(5)
ベクトルレジスタ2の内容を、C[i]のアドレスから、m個分ベクトルストアし、連続格納フラグが連続格納を示していない・・・命令(6)
ベクトルレジスタ2の内容を、C[i+1]のアドレスから、m個分ベクトルストア、連続格納フラグが連続格納を示している・・・命令(7)
iを2インクリメントする
LOOPに戻る
以下、上記プログラムの各命令列に従って、ベクトル処理装置の動作内容を具体的に説明する。プログラム(1)と(2)では、アドレスA[i]とA[i+1]についてのロードが行われる。プログラム(3)と(4)では、アドレスB[i]とB[i+1]についてのロードが行われる。プログラム(5)では、(1)〜(4)でロードされたデータについて、加算処理が行われる。プログラム(6)と(7)では、アドレスC[i]とC[i+1]についてのストアが行われる。
まず、上記プログラムの(1)において、デコーダ部20は、連続格納フラグが連続格納を示していないベクトルロード命令が入力されると、命令とベクトル長mを、命令制御部30へ送出する。
命令制御部30は、連続格納を示していない連続格納フラグと、ベクトル長mと、をベクトルレジスタ0格納ポインタ生成部400へ送出する。
ベクトルレジスタ0格納ポインタ生成部400は、入力された連続格納フラグが連続格納を示していないため、0番目の要素位置から格納を開始するという情報(ベクトルレジスタ0格納ポインタ)を、命令実行部50の対応するベクトルレジスタ(命令実行部50の0番目のベクトルレジスタ)へ送出し、また、格納ポインタ401の現在値としてベクトル長mを保持する。
命令制御部30は、メモリ70に記憶されたデータについて、アドレスA[i]からm個分のデータをロードするようにメモリ制御部60に対して指示を送出する。また、命令制御部30は、命令実行部50の0番目のベクトルレジスタに対して、要素0から格納するように格納指示を送出する。
次に、上記プログラムの(2)において、デコーダ部20は、連続格納フラグが連続格納を示すベクトルロード命令が入力されると、命令と、ベクトル長mと、連続格納フラグと、を命令制御部30へ送出する。
命令制御部30は、連続格納を示す連続格納フラグと、ベクトル長mと、をベクトルレジスタ0格納ポインタ生成部400へ送出する。
ベクトルレジスタ0格納ポインタ生成部400は、入力された連続格納フラグが連続格納を示すため、格納ポインタ401の現在値(m)を、命令実行部50の0番目のベクトルレジスタへ送出し、また、格納ポインタ401の現在値(m)にベクトル長mを加え、その値(m+m=2*m)を、格納ポインタ401に保持する。
命令制御部30は、メモリ70に記憶されたデータについて、アドレスA[i+1]からm個分のデータをロードするようにメモリ制御部60に対して指示を送出する。また、命令制御部30は、命令実行部50の0番目のベクトルレジスタに対して、要素mから格納するように格納指示を送出する。
上記プログラムの(3)と(4)では、データB[i]とB[i+1]に関するロードが行われる。この処理は、上記(1)と(2)における処理と同様であるため、ここではその詳細な説明を省略する。
次に、上記プログラムの(5)において、デコーダ部20は、ベクトル加算命令が入力されると、命令とベクトル長2*mを命令制御部30へ送出する。
命令制御部30は、連続格納を示していない連続格納フラグと、ベクトル長2*mと、をベクトルレジスタ2格納ポインタ生成部420へ送出する。
ベクトルレジスタ2格納ポインタ生成部420は、入力された連続格納フラグが連続格納を示していないため、0番目の要素位置から格納を開始するという情報(ベクトルレジスタ2格納ポインタ)を、命令実行部50の2番目のベクトルレジスタへ送出し、また、格納ポインタ421の値としてベクトル長2*mを保持する。
命令制御部30は、命令実行部50の0番目のベクトルレジスタと、命令実行部50の1番目のベクトルレジスタとに対して、2*m個分の加算指示を送出する。また、命令制御部30は、命令実行部50の2番目のベクトルレジスタに対して、要素0から格納するように格納指示を送出する。
次に、上記プログラム(6)において、デコーダ部20は、連続格納フラグが連続格納を示していないベクトルストア命令が入力されると、命令とベクトル長mを、命令制御部30へ送出する。
命令制御部30は、連続格納を示していない連続格納フラグと、ベクトル長mと、をベクトルレジスタ2格納ポインタ生成部420へ送出する。
ベクトルレジスタ2格納ポインタ生成部420は、連続格納フラグが連続格納を示していないため、0番目の要素位置から格納を開始するという情報(ベクトルレジスタ2格納ポインタ)を、命令実行部50の2番目のベクトルレジスタへ送出し、また、格納ポインタ421の値としてベクトル長mを保持する。
命令制御部30は、要素0からm個分のデータを、メモリ70におけるアドレスC[i]から開始してストアするように、命令実行部50の2番目のベクトルレジスタに対してストア指示(ベクトルレジスタへの読み出し指示)を送出する。
プログラム(7)において、デコーダ部20は、連続格納フラグが連続格納を示すベクトルストア命令が入力されると、命令とベクトル長mと連続格納フラグを命令制御部30へ送出する。
命令制御部30は、ベクトル長mと連続格納フラグをベクトルレジスタ2格納ポインタ生成部420へ送出する。
ベクトルレジスタ2格納ポインタ生成部420は、入力された連続格納フラグが連続格納を示すため、現在の格納ポインタ421の値(m)を命令実行部50の2番目のベクトルレジスタへ送出し、また、格納ポインタ421の現在値(m)にベクトル長mを加え、その値(m+m=2*m)を、格納ポインタ421に保持する。
命令制御部30は、要素mからm個分のデータを、メモリ70におけるアドレスC[i+1]から開始してストアするように、命令実行部50の2番目のベクトルレジスタに対してストア指示(ベクトルレジスタへの読み出し指示)を送出する。
以上説明したように、上記のプログラムの例では、2つの短ベクトルを1つの長ベクトルとしてまとめ、このまとめたベクトルに対してベクトル処理を行っている。したがって、例えばベクトル長mが8である場合には、図5に示すように、ベクトル加算処理において16本すべてのベクトルパイプラインが埋まることになるため、高効率なベクトル処理が可能となる。
具体的には、A[i][0]〜A[i][7]の要素が、ベクトルパイプライン0〜ベクトルパイプライン7のベクトルレジスタにかけてそれぞれ格納され、A[i+1][0]〜A[i+1][7]の要素が、ベクトルパイプライン8〜ベクトルパイプライン15のベクトルレジスタにかけてそれぞれ格納される。また、B[i][0]〜B[i][7]の要素と、B[i+1][0]〜B[i+1][7]の要素と、についても、同様にしてベクトルパイプライン0〜ベクトルパイプライン7と、ベクトルパイプライン8〜ベクトルパイプライン15に格納される。そして、演算結果C[i][0]〜C[i][7]の要素とC[i+1][0]〜C[i+1][7]の要素が、ベクトルパイプライン0〜ベクトルパイプライン7とベクトルパイプライン8〜ベクトルパイプライン15にそれぞれ格納される。
また、各ベクトルレジスタの動作について確認すると、上記した一般的なプログラムの構成例では、図6の上図に示すように、一つの短ベクトル毎に加算が行われていたのに対して、本実施の形態に係るプログラムの構成例によれば、図6の下図に示すように、2つの短ベクトルを1つの長ベクトルにまとめて加算を行う。このため、短ベクトルを対象とする演算においても必要なデータを効率よくロードおよびストアすることができ、演算器の利用効率を向上させることができる。
以上説明したように本実施の形態によれば、ベクトルレジスタの使用要素範囲を特定可能なベクトル命令と、ベクトルレジスタの格納ポインタを制御する格納ポインタ生成部と、を設ける。格納ポインタ生成部は、ベクトル命令を参照して、先行命令の要素に続けて後続のベクトル命令列の要素を、ベクトルレジスタの特定した使用要素範囲に格納できるように、格納ポインタを制御する。
これにより、短ベクトル長である連続したベクトル命令の要素を、単一のベクトルレジスタにまとめて格納することができるため、短ベクトル長の命令であっても演算器へと間断なく要素供給することが可能になり、その結果、演算器の利用効率を向上させることができる。
<発明の実施の形態2>
本実施の形態では、上述した発明の実施の形態1に係るベクトル処理装置の変形例について説明する。上述した実施の形態1では、2つの短ベクトルを1つにまとめて処理する場合を例に説明したが、より多くの短ベクトルを1つにまとめて処理するものとしてもよい。
本実施の形態では、ベクトル命令は、"A[i]のアドレスからm個分のデータをベクトルロードしてベクトルレジスタ0へ格納する短ベクトル処理を複数まとめる"ための連続格納フラグと、"B[i]のアドレスからm個分のデータをベクトルロードしてベクトルレジスタ1へ格納する短ベクトル処理を複数まとめる"ための連続格納フラグと、が付帯した連続格納フラグ付き命令である。そして、本実施の形態に係るベクトル処理装置は、連続して格納する要素数が最大ベクトル長を超えない範囲で、このベクトル命令を繰り返すことができる。
例えば、mが8で、最大ベクトル長が256要素である場合には、最大で32回この命令を繰り返すことができる。これにより、32個の短ベクトルを一つの長ベクトルとしてみなすことができる。このため、ベクトルレジスタ0とベクトルレジスタ1のベクトル加算では、8×32個分のデータを一度に処理することになり、効率性をより向上させたベクトル処理が可能となる。
<その他の実施の形態>
上述した実施の形態1では、ベクトルレジスタへの使用要素範囲を特定する情報として、連続格納フラグとベクトル長を用いる例を示した。しかしながら、ベクトルレジスタへの使用要素範囲を特定するための情報、具体的には、"ベクトルレジスタの格納ポインタを制御するための情報"は、"ベクトルレジスタの使用開始要素番号とベクトル長"を用いることで実現されてもよい。また、"ベクトルレジスタの使用開始要素番号と終了要素番号"を用いることで実現されてもよい。
ここで、図7を参照して、本発明の概要を改めて説明する。図7は、本発明にかかるベクトル処理装置の本質的部分のみを抽出して記載したブロック図である。ベクトル処理装置は、ベクトルレジスタの使用要素範囲を特定する情報を含むベクトル命令の実行制御を行う命令制御部30と、ベクトルレジスタの使用要素の位置を指示する格納ポインタを生成する格納ポインタ生成部40と、複数のベクトルレジスタそれぞれが分散配置されて並列処理を実行する複数のベクトルパイプラインを含む命令実行部50と、を備えている。
格納ポインタ生成部40は、先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、複数のベクトルレジスタの特定した使用要素範囲に格納できるように、ベクトル命令を参照して格納ポインタを制御する。命令実行部50は、格納ポインタ生成部によって生成された格納ポインタに従って、ベクトルレジスタへの要素の格納を行う。
上述した複数の実施の形態は、適宜組み合わせることも可能である。さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
上記の複数の実施の形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
(付記1)
ベクトルレジスタの使用要素範囲を特定する情報を含むベクトル命令の実行制御を行う命令制御部と、
ベクトルレジスタの使用要素の位置を指示する格納ポインタを生成する格納ポインタ生成部と、
複数のベクトルレジスタそれぞれが分散配置されて並列処理を実行する複数のベクトルパイプラインを含む命令実行部と、を備え、
前記格納ポインタ生成部は、先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、前記複数のベクトルレジスタの特定した使用要素範囲に格納できるように、前記ベクトル命令を参照して前記格納ポインタを制御し、
前記命令実行部は、前記格納ポインタ生成部によって生成された前記格納ポインタに従って、前記ベクトルレジスタへの要素の格納を行う、ベクトル処理装置。
(付記2)
前記命令制御部は、前記ベクトルレジスタに要素を連続して格納するか否かを示す連続格納フラグと、前記ベクトル命令の対象となるベクトルデータのベクトル長と、を含むベクトル命令の実行制御を行い、
前記格納ポインタ生成部は、前記連続格納フラグが前記ベクトルレジスタに要素を連続して格納することを示す場合には、現在保持する格納ポインタを前記実行制御部の前記ベクトルレジスタへ送出し、前記ベクトル長に応じて前記保持する格納ポインタを更新する、付記1に記載のベクトル処理装置。
(付記3)
先行ベクトル命令の要素に続けて後続のベクトル命令列の要素を、複数のベクトルレジスタの特定した使用要素範囲に格納できるように、ベクトル命令を参照して格納ポインタを制御する格納ポインタ生成ステップと、
前記格納ポインタに従って、前記ベクトルレジスタへの要素の格納を行う命令実行ステップと、を有するベクトル処理装置のベクトル処理方法。
(付記4)
前記格納ポインタ生成ステップは、前記ベクトルレジスタに要素を連続して格納するか否かを示す連続格納フラグが前記ベクトルレジスタに要素を連続して格納することを示す場合には、現在保持する格納ポインタを前記実行制御部の前記ベクトルレジスタへ送出し、前記ベクトル命令の対象となるベクトルデータのベクトル長に応じて前記保持する格納ポインタを更新する、付記3に記載のベクトル処理装置のベクトル処理方法。
10 命令フェッチ部、
20 デコーダ部、
30 命令制御部、
40 格納ポインタ生成部、
400 ベクトルレジスタ0格納ポインタ生成部、
410 ベクトルレジスタ1格納ポインタ生成部、
420 ベクトルレジスタ2格納ポインタ生成部、
401、411、421 格納ポインタ
50 命令実行部、
500 ベクトルパイプライン、
520、540、560 ベクトルレジスタ、
60 メモリ制御部、
70 メモリ、

Claims (8)

  1. 複数のベクトルパイプラインを有する命令実行部と、
    前記複数のベクトルパイプラインの使用位置を指示する格納ポインタを生成する格納ポインタ生成部と、を有し、
    前記ベクトルパイプラインは、ベクトル命令の対象となる要素を格納するベクトルレジスタを有し、
    前記格納ポインタ生成部は、前記ベクトル命令と共に範囲情報を受け取り、前記命令実行部にて先行ベクトル命令に続けて処理可能な後続の後続ベクトル命令が存在する場合は、前記先行ベクトル命令及び前記後続ベクトル命令の範囲情報に基づき、当該後続ベクトル命令の対象となる各要素が前記先行ベクトル命令の対象となる各要素に続いて所定のベクトルパイプラインのベクトルレジスタに格納されるよう前記格納ポインタを制御し、
    前記命令実行部は、前記格納ポインタに従って、1又は複数のベクトル命令を、前記複数のベクトルパイプラインの一部又は全部により並列処理する
    ベクトル処理装置。
  2. 前記格納ポインタ生成部は、前記ベクトルレジスタに要素を連続して格納するか否かを示す連続格納フラグと、前記ベクトル命令の対象となる要素数を示すベクトル長と、を前記範囲情報として受け取り、前記連続格納フラグ及び前記ベクトル長に基づき前記格納ポインタを生成する
    請求項1記載のベクトル処理装置。
  3. 前記格納ポインタ生成部は、前記連続格納フラグに基づき、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理する場合には、前記先行ベクトル命令におけるベクトル長に前記後続ベクトル命令におけるベクトル長を加算して格納ポインタを更新し、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理しない場合は、先頭の前記ベクトルパイプラインから要素が格納されるよう前記格納ポインタを更新する、
    請求項2記載のベクトル処理装置。
  4. 各ベクトルパイプラインは、複数のベクトルレジスタを有するレジスタ列を有し、
    前記格納ポインタ生成部は、前記連続格納フラグに基づき、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理する場合には、各ベクトルパイプラインのレジスタ列の全ベクトルレジスタに要素が収納されるまで格納ポインタを更新する
    請求項2及び3記載のベクトル処理装置。
  5. 各ベクトルパイプラインは、前記レジスタ列を複数有し、
    前記ベクトル命令に応じて前記ベクトルパイプラインの前記レジスタ列への要素の格納及び/又は前記レジスタ列からの要素の読み出しを制御する命令制御部を有する
    請求項4記載のベクトル処理装置。
  6. ベクトル命令の対象となる要素を格納するベクトルレジスタを有する、複数のベクトルパイプラインによりベクトル命令を処理するベクトル処理方法であって、
    前記複数のベクトルパイプラインの使用位置を指示する格納ポインタを生成する格納ポインタ生成ステップと、
    前記格納ポインタに従って、1又は複数のベクトル命令を、前記複数のベクトルパイプラインの一部又は全部により並列処理する命令実行ステップと、を有し、
    前記格納ポインタ生成ステップでは、前記ベクトル命令と共に範囲情報を受け取り、前記命令実行ステップにて先行ベクトル命令に続けて処理可能な後続の後続ベクトル命令が存在する場合は、前記先行ベクトル命令及び前記後続ベクトル命令の範囲情報に基づき、当該後続ベクトル命令の対象となる各要素が前記先行ベクトル命令の対象となる各要素に続いて所定のベクトルパイプラインのベクトルレジスタに格納されるよう前記格納ポインタが制御される、
    ベクトル処理方法。
  7. 前記格納ポインタ生成ステップでは、前記ベクトルレジスタに要素を連続して格納するか否かを示す連続格納フラグと、前記ベクトル命令の対象となる要素数を示すベクトル長と、を前記範囲情報として受け取り、前記連続格納フラグ及び前記ベクトル長に基づき前記格納ポインタが生成される、
    請求項6記載のベクトル処理方法。
  8. 前記格納ポインタ生成ステップでは、前記連続格納フラグに基づき、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理する場合には、前記先行ベクトル命令におけるベクトル長に前記後続ベクトル命令におけるベクトル長を加算して格納ポインタを更新し、前記後続ベクトル命令を前記先行ベクトル命令に続けて処理しない場合は、先頭の前記ベクトルパイプラインから要素が格納されるよう前記格納ポインタを更新する、
    請求項7記載のベクトル処理方法。
JP2012045821A 2012-03-01 2012-03-01 ベクトル処理装置およびベクトル処理方法 Active JP5413473B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012045821A JP5413473B2 (ja) 2012-03-01 2012-03-01 ベクトル処理装置およびベクトル処理方法
US13/781,945 US20130232317A1 (en) 2012-03-01 2013-03-01 Vector processing apparatus and vector processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012045821A JP5413473B2 (ja) 2012-03-01 2012-03-01 ベクトル処理装置およびベクトル処理方法

Publications (2)

Publication Number Publication Date
JP2013182420A JP2013182420A (ja) 2013-09-12
JP5413473B2 true JP5413473B2 (ja) 2014-02-12

Family

ID=49043510

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012045821A Active JP5413473B2 (ja) 2012-03-01 2012-03-01 ベクトル処理装置およびベクトル処理方法

Country Status (2)

Country Link
US (1) US20130232317A1 (ja)
JP (1) JP5413473B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2536069B (en) * 2015-03-25 2017-08-30 Imagination Tech Ltd SIMD processing module
KR102593320B1 (ko) * 2016-09-26 2023-10-25 삼성전자주식회사 전자 장치, 프로세서 및 그 제어 방법

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5537606A (en) * 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
US6330657B1 (en) * 1999-05-18 2001-12-11 Ip-First, L.L.C. Pairing of micro instructions in the instruction queue
US7802076B2 (en) * 2004-06-24 2010-09-21 Intel Corporation Method and apparatus to vectorize multiple input instructions
JP2006268168A (ja) * 2005-03-22 2006-10-05 Nec Computertechno Ltd ベクトル命令管理回路、ベクトル処理装置、ベクトル命令管理方法、ベクトル処理方法、ベクトル命令管理プログラム、および、ベクトル処理プログラム
US7631171B2 (en) * 2005-12-19 2009-12-08 Sun Microsystems, Inc. Method and apparatus for supporting vector operations on a multi-threaded microprocessor
JP5000248B2 (ja) * 2006-09-27 2012-08-15 エヌイーシーコンピュータテクノ株式会社 情報処理装置、及び情報処理方法
US20090106525A1 (en) * 2007-10-23 2009-04-23 David Arnold Luick Design structure for scalar precision float implementation on the "w" lane of vector unit
US8356162B2 (en) * 2008-03-18 2013-01-15 International Business Machines Corporation Execution unit with data dependent conditional write instructions
US9851977B2 (en) * 2012-12-06 2017-12-26 Kalray Apparatus and method for combining thread warps with compatible execution masks for simultaneous execution and increased lane utilization

Also Published As

Publication number Publication date
JP2013182420A (ja) 2013-09-12
US20130232317A1 (en) 2013-09-05

Similar Documents

Publication Publication Date Title
JP2017097900A5 (ja)
JP2015501946A (ja) 暗号化アルゴリズム内のハッシュ値の生成をサポートするためのsimd命令
TWI764966B (zh) 用於控制矢量記憶體存取之資料處理裝置及方法
US11397583B2 (en) Conditional execution specification of instructions using conditional extension slots in the same execute packet in a VLIW processor
WO2017021675A1 (en) Element size increasing instruction
KR101586770B1 (ko) 데이터 처리 장치
US11681532B2 (en) Method for forming constant extensions in the same execute packet in a VLIW processor
US20120079243A1 (en) Next-instruction-type-field
JP5413473B2 (ja) ベクトル処理装置およびベクトル処理方法
US8055883B2 (en) Pipe scheduling for pipelines based on destination register number
IL256403A (en) Array query length instruction
JP7186212B2 (ja) データ処理装置におけるベクトル・インタリーブ
KR102458467B1 (ko) 벡터 생성 명령
KR102365306B1 (ko) 데이터 처리장치 및 벡터 스캔 연산의 수행방법
JP6237241B2 (ja) 処理装置
JP6555005B2 (ja) 最適化装置、方法およびプログラム
JP2008242947A (ja) 半導体装置
JP2010140398A (ja) データ処理装置及びデータ処理方法
JP2771373B2 (ja) 命令先取り装置
JPH05173785A (ja) 命令先取り装置
JP2015141677A (ja) 処理装置
JP2006251978A (ja) ベクトル演算装置および方法
JP2011145886A (ja) 情報処理装置
JP2007102596A (ja) 中央処理装置
JP2012150589A (ja) 演算装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130611

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130809

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131028

R150 Certificate of patent or registration of utility model

Ref document number: 5413473

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150