JP6253514B2 - プロセッサ - Google Patents

プロセッサ Download PDF

Info

Publication number
JP6253514B2
JP6253514B2 JP2014108852A JP2014108852A JP6253514B2 JP 6253514 B2 JP6253514 B2 JP 6253514B2 JP 2014108852 A JP2014108852 A JP 2014108852A JP 2014108852 A JP2014108852 A JP 2014108852A JP 6253514 B2 JP6253514 B2 JP 6253514B2
Authority
JP
Japan
Prior art keywords
data
element data
memory
read
instruction
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
JP2014108852A
Other languages
English (en)
Other versions
JP2015225427A (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 JP2014108852A priority Critical patent/JP6253514B2/ja
Priority to US14/694,026 priority patent/US10235398B2/en
Priority to EP15167062.7A priority patent/EP2950202A1/en
Priority to CN201510276210.8A priority patent/CN105320469B/zh
Publication of JP2015225427A publication Critical patent/JP2015225427A/ja
Application granted granted Critical
Publication of JP6253514B2 publication Critical patent/JP6253514B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/217Database tuning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90339Query processing by using parallel associative memories or content-addressable memories
    • 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/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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30141Implementation provisions of register files, e.g. ports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/16General purpose computing application
    • G06F2212/163Server or database system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Description

本発明は、プロセッサ及びデータ収集方法に関し、例えば、メモリに格納された複数のデータ集合の読み込み又は書き込みを行うためのプロセッサ、データ処理装置、データ収集方法及びデータ書き込み方法に関する。
近年、ベクトル演算を実行可能なプロセッサの開発が進んでいる。ベクトル演算とは、複数のスカラ演算をベクトルデータ同士の一演算として行うものである。そして、特許文献1には、ベクトル演算の前後に実行されるギャザ命令及びスキャタ命令について記載されている。
ギャザ命令とは、データ配列のうち指定された複数のインデックスに対応する各データ値を、メモリ内の対応する領域から収集するための命令である。そして、ギャザ命令により収集された複数のデータ値を、後に続くベクトル演算の入力ベクトルとして用いる。また、スキャタ命令とは、ベクトルデータの各データ値を、データ配列のうち指定されたインデックスに対応するメモリ内の領域に格納するための命令である。そして、スキャタ命令の対象とするベクトルデータには、ベクトル演算により生成された出力ベクトルの各要素を用いることができる。
特表2014−504418号公報
しかしながら、ベクトル演算のために上述したギャザ命令又はスキャタ命令を用いた場合、処理時間が長くなり、効率が悪い場合があるという問題点があった。その理由は、データ配列が格納されるメモリの領域への1回のメモリアクセスは、連続した領域にしか行うことができないためである。そのため、メモリアクセス対象の複数のデータ値の格納先におけるメモリの領域が不連続である(離散している)場合には、連続する領域の塊ごとにメモリアクセスを行う必要がある。つまり、ギャザ命令及びスキャタ命令は、それぞれ一命令であるにも関わらず、データ値の格納先によってはメモリアクセス回数が増大し得る。そのため、ベクトル演算の前処理又は後処理の時間が長くなってしまう。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
一実施の形態によれば、プロセッサは、メモリとプロセッサ内の記憶部と間で、複数のデータ集合に含まれる複数の要素データの格納順序を入れ替えてロード又はストアをするものである。
なお、上記実施の形態の装置を方法やシステムに置き換えて表現したもの、該装置または該装置の一部の処理をコンピュータに実行せしめるプログラム、該装置を備えた撮像装置なども、本発明の態様としては有効である。
前記一実施の形態によれば、メモリとプロセッサ内の記憶部との間のデータのロード処理又はストア処理を効率的に行うことができる。
本実施の形態1にかかるプロセッサを含むデータ処理装置の構成を示すブロック図である。 本実施の形態1にかかるデータ収集方法の処理の流れを示すフローチャートである。 本実施の形態1にかかるプロセッサを含むデータ処理装置の他の構成を示すブロック図である。 本実施の形態2にかかるプロセッサを含むデータ処理装置の構成を示すブロック図である。 本実施の形態2にかかるデータ書き込み方法の処理の流れを示すフローチャートである。 本実施の形態2にかかるプロセッサを含むデータ処理装置の他の構成を示すブロック図である。 本実施の形態3にかかるプロセッサを含むデータ処理装置の構成を示すブロック図である。 本実施の形態3にかかるギャザ命令の処理の流れを示すフローチャートである。 本実施の形態3にかかる複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。 本実施の形態4にかかるプロセッサを含むデータ処理装置の構成を示すブロック図である。 本実施の形態4にかかるスキャタ命令の処理の流れを示すフローチャートである。 本実施の形態4にかかる複数のベクトルレジスタへのスキャタ命令の動作の概念を説明するための図である。 関連技術におけるギャザ命令の概念を説明するための図である。 関連技術におけるスキャタ命令の概念を説明するための図である。 関連技術における複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。 関連技術における複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。 関連技術における複数ワードのロード命令の動作の概念を説明するための図である。 関連技術におけるベクトルレジスタ内のデータの並べ替え処理の動作の概念を説明するための図である。
以下では、上述した課題を解決するための手段を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
<実施の形態1>
図1は、本実施の形態1にかかるプロセッサ20を含むデータ処理装置1000の構成を示すブロック図である。データ処理装置1000は、メモリ10とプロセッサ20とを備える。メモリ10は、データ集合11及び12等が格納された記憶装置である。メモリ10は、いわゆる主記憶装置に相当し、プロセッサ20の外に存在するものである。メモリ10は、プロセッサ20との間でメモリバス(不図示)により接続されている。
データ集合11には、要素データa101及び要素データb102等の複数のデータが含まれる。ここで、要素データa101と、要素データb102とは、メモリ10内の隣接する格納領域に格納されているものとする。また、データ集合12には、要素データc103及び要素データd104等の複数のデータが含まれる。ここで、要素データc103と、要素データd104とは、メモリ10内の隣接する格納領域に格納されているものとする。
プロセッサ20は、記憶部21と、記憶部22と、制御部23とを備える。記憶部21及び22は、例えば、レジスタ、キャッシュメモリ、バッファ等の記憶装置である。記憶部21は、少なくとも領域201及び203に区分けされている。そして、記憶部21は、要素データa101及び要素データc103に対応付けられている。また、記憶部22は、少なくとも領域202及び204に区分けされている。そして、記憶部22は、要素データb102及び要素データd104に対応付けられている。
制御部23は、メモリ10から、隣接する格納領域に格納された複数の要素データを、データ集合ごとにまとめて読み出す。ここで、「まとめて読み出す」とは、制御部23からメモリ10に対する1回のメモリアクセス処理で複数ワードを読み出すことに相当する。例えば、制御部23は、メモリ10から、データ集合11に含まれる要素データa101及び要素データb102を1回のメモリアクセス処理で読み出し、データ集合12に含まれる要素データc103及び要素データd104を別の1回のメモリアクセス処理で読み出す。
そして、制御部23は、読み出した各要素データを、複数の記憶部21及び22のうち当該要素データに対応する記憶部に分類して、データ集合ごとに書き込む。例えば、制御部23は、データ集合11について読み出された要素データa101を、記憶部21に分類して書き込み、要素データb102を記憶部22に分類して書き込む。また、制御部23は、データ集合12について読み出された要素データc103を、記憶部21に分類して書き込み、要素データd104を記憶部22に分類して書き込む。
図2は、本実施の形態1にかかるデータ収集方法の処理の流れを示すフローチャートである。まず、プロセッサ20の制御部23は、メモリ10内の隣接する領域に格納された第1及び第2の要素データ(例えば、要素データa101及び要素データb102)を、メモリ10からまとめて読み出す(S11)。
次に、制御部23は、読み出した第1の要素データを第1の記憶部(例えば、記憶部21)の第1の領域(例えば、領域201)へ書き込む(S12)。併せて、制御部23は、読み出した第2の要素データを第2の記憶部(例えば、記憶部22)の第1の領域(例えば、領域202)へ書き込む(S13)。尚、領域202は、領域201に対応する領域であってもよい。また、制御部23は、読み出した第2の要素データを記憶部22の領域204へ書き込んでも構わない。
続いて、制御部23は、メモリ10内の隣接する領域に格納された第3及び第4の要素データ(例えば、要素データc103及び要素データd104)を、メモリ10からまとめて読み出す(S14)。
そして、制御部23は、読み出した第3の要素データを第1の記憶部の第2の領域(例えば、領域203)へ書き込む(S15)。併せて、制御部23は、読み出した第4の要素データを第2の記憶部の第2の領域(例えば、領域204)へ書き込む(S16)。尚、領域204は、領域203に対応する領域であってもよい。ここで、制御部23は、読み出した第3の要素データを、第1の記憶部の領域のうち少なくともステップS12で書き込んだ領域以外に書き込めばよい。同様に、制御部23は、読み出した第4の要素データを、第2の記憶部の領域のうち少なくともステップS13で書き込んだ領域以外に書き込めばよい。
図3は、本実施の形態1にかかるプロセッサ20aを含むデータ処理装置1000aの構成を示すブロック図である。プロセッサ20aは、図1のプロセッサ20の構成を3以上のデータ集合のそれぞれからN(Nは2以上の自然数)ワードをまとめて読み出す場合であり、格納先の記憶部間で領域をウェイとして対応付けられた場合に適用したものである。メモリ10aには、Q(Qは2以上の自然数。)個のデータ配列(array[0]〜array[Q-1])が格納されている。各データ配列は、それぞれa,b,...,pの要素データを含む。
プロセッサ20aは、制御部23aと、レジスタrgk、rgk+1、・・・、rgk+N−1(kは自然数、Nは2以上の自然数)とを備える。ここで、レジスタrgk〜rgk+N−1のそれぞれは、複数の領域であるウェイw0、w1、・・・、wQ−1に区分けされており、各レジスタ間の同じウェイが対応するものとする。プロセッサ20aは、array[0]からNワードをまとめて読み出し、各要素データをレジスタrgk〜rgk+N−1のそれぞれのウェイw0に書き込む。また、プロセッサ20aは、array[1]からNワードをまとめて読み出し、各要素データをレジスタrgk〜rgk+N−1のそれぞれのウェイw1に書き込む。プロセッサ20aは、array[2]〜array[Q-1]についても同様に行う。例えば、プロセッサ20aは、array[Q-1] からNワードをまとめて読み出し、各要素データをレジスタrgk〜rgk+N−1のそれぞれのウェイwQ−1に書き込む。
このように本実施の形態1によれば、例えば、要素データa101と要素データc103の組や、要素データb102と要素データd104の組といった、メモリ10内では非連続な領域に格納されたデータ群を複数収集する場合でも、データのロード処理の時間を短縮することができる。すなわち、連続(隣接)する領域へのメモリアクセスの結果を、プロセッサ内の第1及び第2の記憶部へ分類して格納することで、個別にメモリアクセスする必要がないためである。また、読み出したデータ群の格納時に対応する記憶部に分類しているため、読み出したデータ群に対する並べ替え処理を別途、実行する必要がない。よって、メモリとプロセッサ内の記憶部との間のデータのロード処理を効率的に行うことができる。
<実施の形態2>
図4は、本実施の形態2にかかるプロセッサ20bを含むデータ処理装置2000の構成を示すブロック図である。データ処理装置2000は、メモリ10とプロセッサ20bとを備える。尚、メモリ10は、図1と同等であるため説明を省略する。
プロセッサ20bは、記憶部21と、記憶部22と、制御部23bとを備える。尚、記憶部21及び22は、図1と同等の構成である。つまり、記憶部21は、少なくとも領域201及び203に区分けされている。また、記憶部22は、少なくとも領域202及び204に区分けされている。記憶部21及び22には、さらに、予め次のデータが格納されているものとする。すなわち、記憶部21の領域201には要素データa、領域203には要素データcが格納されている。また、記憶部22の領域202には要素データb、領域204には要素データdが格納されている。
制御部23bは、各記憶部21及び22の間で対応する領域に格納された各要素データを複数の記憶部21及び22のそれぞれから読み出す。ここで、「対応する領域」とは、例えば、記憶部21の領域201と記憶部22の領域202とが対応し、記憶部21の領域203と記憶部22の領域204とが対応するものとする。そのため、例えば、制御部23bは、領域201から要素データa及び領域202から要素データbを読み出す。また、制御部23bは、対応する領域ごとに、当該読み出された要素データ同士をまとめてデータ集合とする。例えば、制御部23bは、要素データa及び要素データbをまとめてデータ集合とする。そして、制御部23bは、当該データ集合内の各要素データをメモリ10内の隣接する格納領域に書き込む。例えば、制御部23bは、要素データa101及び要素データb102をメモリ10内のデータ集合11の要素データa101及び要素データb102の格納領域に書き込む。尚、制御部23bは、領域203及び領域204に格納された要素データについても同様にまとめて読み出し、データ集合とし、メモリ10内のデータ集合12の隣接する格納領域に書き込む。
図5は、本実施の形態2にかかるデータ書き込み方法の処理の流れを示すフローチャートである。まず、プロセッサ20bの制御部23bは、第1の記憶部(例えば、記憶部21)の第1の領域(例えば、領域201)から第1の要素データ(例えば、要素データa)を読み出す(S21)。併せて、制御部23bは、第2の記憶部(例えば、記憶部22)の第1の領域(例えば、領域202)から第2の要素データ(例えば、要素データb)を読み出す(S22)。尚、領域202は、領域201に対応する領域であってもよい。また、制御部23bは、記憶部22の領域204から第2の要素データとして読み出しても構わない。
次に、制御部23bは、第1及び第2の要素データをメモリ10内の隣接する格納領域にまとめて書き込む(S23)。例えば、上述したように、制御部23bは、要素データaをメモリ10内のデータ集合11のうち要素データa101の格納領域に、要素データbを要素データb102の格納領域に、1回のメモリアクセス処理で書き込む。
続いて、制御部23bは、第1の記憶部の第2の領域(例えば、領域203)から第3の要素データ(例えば、要素データc)を読み出す(S24)。併せて、制御部23bは、第2の記憶部の第2の領域(例えば、領域204)から第4の要素データ(例えば、要素データd)を読み出す(S25)。尚、領域204は、領域203に対応する領域であってもよい。ここで、制御部23bは、第1の記憶部の領域のうち少なくともステップS21で読み出した領域以外から第3の要素データとして読み出してもよい。同様に、制御部23bは、第2の記憶部の領域のうち少なくともステップS22で読み出した領域以外から第4の要素データとして読み出してもよい。
そして、制御部23bは、第3及び第4の要素データをメモリ10内の隣接する格納領域にまとめて書き込む(S26)。例えば、制御部23bは、要素データcをメモリ10内のデータ集合12のうち要素データc103の格納領域に、要素データdを要素データd104の格納領域に、ステップS23とは別の1回のメモリアクセス処理で書き込む。ここで、ステップS26における書込み先の格納領域は、ステップS23における書込み先の格納領域とは異なるものとする。
図6は、本実施の形態2にかかるプロセッサ20cを含むデータ処理装置2000aの構成を示すブロック図である。プロセッサ20cは、図4のプロセッサ20bの構成を3以上のレジスタから読み出し、メモリ10aへNワードをまとめて書き込む場合であり、読み出し元の記憶部(レジスタ)間の領域をウェイとして対応付けられた場合に適用したものである。
プロセッサ20cは、制御部23cと、レジスタrgk〜rgk+N−1とを備える。ここで、レジスタrgk〜rgk+N−1のそれぞれは、図3と同様である。但し、レジスタrgk〜rgk+N−1には、予め、ウェイw0〜wQ−1に要素データが格納されているものとする。プロセッサ20cは、レジスタrgk〜rgk+N−1からウェイごとにまとめて要素データを読み出し、ウェイごとに読み出された要素データ同士をまとめてデータ集合とする。そして、プロセッサ20cは、当該データ集合内の各要素データをメモリ10a内の隣接する格納領域に書き込む。例えば、プロセッサ20cは、レジスタrgk〜rgk+N−1のウェイw0からそれぞれ要素データを読み出し、メモリ10aのarray[0].a〜array[0].nへ1回のメモリアクセス処理によりNワードの書き込みを行う。プロセッサ20cは、ウェイw1〜wQ−1についても同様に、ウェイごとに要素データを読み出し、ウェイごとに同一のデータ集合の隣接する格納領域に書き込む。
このように本実施の形態2によれば、例えば、要素データaと要素データbの組や、要素データcと要素データdの組といった、複数の記憶部に分かれて保存されているデータ群を一つのデータ集合としてまとめて書き込む場合でも、データのストア処理の時間を短縮することができる。すなわち、異なる記憶部から個別に読み出された各要素データをまとめて連続(隣接)する領域へ書き込むことで、要素データごとに個別にメモリアクセス処理を実行する必要がないためである。また、複数の記憶部の対応する領域から読み出すため、読み出した後に並べ替え処理を実行する必要がない。よって、メモリとプロセッサ内の記憶部との間のデータのストア処理を効率的に行うことができる。
<実施の形態3>
ここで、本実施の形態で解決しようとする課題について改めて説明する。まず、複数のメンバ変数を含む構造体のデータが構造体配列としてメモリに連続して格納されているものとする。このとき、複数の構造体配列について同一のメンバ変数同士をベクトル演算する場合がある。このようなベクトルデータをメモリから収集するためには、通常、構造体ごとの各メンバ変数ごとにメモリからの読み出し命令をプロセッサに対して指示しなければならない。また、ベクトル演算の結果としての複数のベクトルデータをメモリに格納するためにも、通常、構造体ごとの各メンバ変数ごとにプロセッサ内のレジスタからメモリへの書き込み命令をプロセッサに対して指示しなければならない。
(既存手法1)
これに対しては、既存手法1として従来からギャザ命令及びスキャタ命令がプロセッサに実装されていることが多い。一般に、ギャザ命令及びスキャタ命令は、プロセッサに対する1回の命令により、プロセッサからメモリに対する複数回のメモリアクセス処理を発行するものである。例えば、以下のような処理の流れになる。
(1)プロセッサは、ギャザ命令を受け付けて、非連続的な領域に格納された各データに対する複数回のメモリアクセス処理を発行し、読み出された各データを1つのレジスタにロードする。
(2)プロセッサは、レジスタにロードされた各データを複数のベクトルデータとしてベクトル演算を適用する。
(3)プロセッサは、スキャタ命令を受け付けて、レジスタの各要素を個別に読み出して、都度、メモリに対して書き込みを行うためのメモリアクセス命令を発行し、読み出された各データを非連続な領域にメモリアドレスに書き込む。
そのため、プロセッサを構成するハードウェアが連続するNワードを同時にアクセスするためのメモリバンド幅を持っていたとしても、既存手法1では、スキャッタ命令及びギャザ命令により、非連続な領域にあるデータに個別にアクセスするため、バンド幅を十分に活用することができない。よって、既存手法1では、構造体及びメンバ変数の数ごとにメモリアクセス処理が発生し、処理時間が増大し、効率が悪い。
(既存手法2)
既存手法2は、複数ワードのアクセスが可能なバンド幅を活用し、複数ワードのメモリアクセス命令を活用するものである。つまり、既存手法2では、一度、複数ワードのメモリアクセス処理により、メモリの連続した領域に格納されたデータ群を一旦、ベクトルレジスタに格納する。この段階では、各ベクトルレジスタには、構造体単位のデータ群が格納されることになる。そこで、この後、各構造体における同じメンバ変数が同一のベクトルレジスタに格納されるように、並べ替え処理を実行する。このため、ベクトル演算を適用する前後に、ベクトルレジスタ内の並べ替え処理という余計な命令を挿入する必要が生じる。よって、既存手法2でも処理時間が増大し、効率が悪い。
そこで、本実施の形態3では、上述した実施の形態1の構成に、少なくとも次の構成を備えることにより、上述した課題を解決するものである。すなわち、制御部は、前記読み出した各要素データについての前記分類先の各記憶部における書込み位置を、前記データ集合ごとに対応させて書き込むものである。例えば、1回目のメモリアクセスによりメモリから読み出された複数ワードの各要素データを複数の記憶部に分類して格納するが、その際に、同一のウェイに書き込む。そして、以後の各メモリアクセスにより(つまり同一のデータ集合から)同時に読み出された各要素データについても、1回目とは異なるウェイであり、まとめて読み出された要素データ同士は同一のウェイに書き込む。これにより、プロセッサ内の各記憶部に書き込まれたデータ群について、そのままベクトルデータとしてベクトル演算に用いることができ、より効率的なデータ収集を実現できる。
また、前記制御部は、前記メモリから読み出された各要素データを、前記メモリにおける前記隣接する格納領域の順序に従って前記複数の記憶部のいずれかに分類し、前記分類された各要素データを、当該分類先の各記憶部へ書き込むことが望ましい。例えば、構造体のメンバ変数の定義の順序に従ってメモリ内に格納されていた場合、当該定義の順序と分類先の記憶部を対応付ける。これにより、メモリからのデータの読み出し順序と分類先の記憶部との対応付けが容易となり、プロセッサの構成を簡略化することができる。
さらに、前記制御部は、複数のベクトルデータを収集するための命令に応じて、前記データ集合ごとに当該ベクトルデータの数分の連続した前記格納領域から前記複数の要素データを読み出すためのリクエストを前記メモリに対して発行し、前記リクエストに応じて前記メモリから読み出された各要素データを、当該リクエストごとに前記複数の記憶部のいずれかに分類することが望ましい。これにより、例えば、本実施の形態にかかるメモリアクセス及び記憶部への分類をギャザ命令に適用できる。
さらに、前記制御部は、前記複数のベクトルデータを収集するための命令に応じて、前記リクエストを発行すると共に、前記データ集合ごとに、前記書込み位置を指定し、前記分類された各要素データを、当該分類先の各記憶部における前記指定された書込み位置へ書き込むとよい。例えば、書込み位置としてウェイを指定することで、データ集合ごとのメモリアクセスに応じて分類先の記憶部の間で対応する領域に書き込むことが容易となる。
または、前記複数の記憶部は、前記データ集合内の各要素データの前記格納領域に対応した複数のバッファと、各バッファに対応した複数のレジスタとを含み、前記制御部は、前記複数のバッファのうち前記格納領域ごとに異なる書込み先のバッファを指定して、当該指定されたバッファに各要素データを分類して書き込み、前記複数のデータ集合の全てにおける前記複数の要素データの読み出し後に、前記複数のバッファごとに、当該バッファに書き込まれた全要素データを、当該バッファに対応する前記レジスタへまとめて書き込むようにしてもよい。このように、領域ごとに柔軟に書き換えが可能なバッファに対して個別に書き込みを行うことで、領域ごとの細かな書換えが困難なベクトルレジスタに対する書き込み回数を抑制し、処理を効率化できる。
さらに、前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行するベクトル演算部をさらに備えるようにしてもよい。これにより、収集したデータ群をベクトル演算に効率的に用いることができる。
さらに、前記ベクトル演算部は、前記複数の記憶部の少なくとも2以上を対象として前記所定の演算を実行するようにしてもよい。例えば、データ集合内で必ずしも隣接しない領域に格納された要素データに対するベクトル演算を行う場合であっても、ベクトル演算に用いない要素データも含めてまとめて読み出し、当該要素データ自体はベクトル演算の対象外とすることで、複数ワードを読み出すメモリアクセス処理を効率的に活用することができる。
さらに、前記複数のデータ集合は、前記複数の要素データをメンバ変数とする構造体であり、前記複数の記憶部は、前記メンバ変数に対応付けられており、前記制御部は、前記読み出した各要素データを、各メンバ変数に対応付けられた前記複数の記憶部に分類して書き込むことが望ましい。これにより、複数のデータ型を含めて定義される構造体に対するベクトル演算に対しても効率的に実現することができる。
続いて、本実施の形態3にかかる複数のベクトルレジスタへのギャザ命令について以下に具体的に説明する。図7は、本実施の形態3にかかるプロセッサ40を含むデータ処理装置3000の構成を示すブロック図である。データ処理装置3000は、上述した実施の形態1にかかるデータ処理装置1000の改良例であり、メモリ30とプロセッサ40とを備える。メモリ30は、メモリ10と同等の構成であり、構造体31、32、・・・、33が格納されている。ここで、構造体31等は、P(Pは2以上の自然数。)個のメンバ変数を持つ構造体であり、メモリ30内にQ(Qは2以上の自然数。)個の格納されているものとする。構造体とは、複数のデータ型の変数定義を有する変数である。構造体31等をC言語で記述した場合、例えば、以下のような構造体配列として定義できる。
struct {
int a,
int b,
...
int p;
} z[Q];
そして、メモリ30には、各構造体のメンバ変数に対応するデータ値が隣接する領域に格納されているものとする。尚、メモリ30には、その他、プロセッサ40で実行可能な各種の命令が格納されているものとする。
また、本実施の形態にかかるギャザ命令は、例えば、以下のオペランドを含むものとする。
・読み出し元のメモリの先頭メモリアドレスA(例えば、構造体配列の先頭の格納領域に相当する)
・書き込み先の先頭のレジスタ番号k(kは、読み出し対象の構造体数Qに相当し、ウェイ数Wの上限以下の自然数。)
・連続してメモリアクセスするワード数N(Nは、2以上かつP以下の自然数)
・メモリアドレスを更新するためのサイズC(Cは、構造体のサイズPと同一とする)
プロセッサ40は、上述した実施の形態1にかかるプロセッサ20の改良例であり、命令フェッチ回路41と、命令デコード回路42と、命令制御回路43と、演算回路44と、メモリアクセス制御回路45と、バッファ群46と、ベクトルレジスタ群47とを備える。プロセッサ40は、1クロックサイクルでNワードのデータにアクセス可能であるものとする。命令フェッチ回路41は、メモリ30から命令を読み出し、命令デコード回路42へ出力する。命令デコード回路42は、入力された命令を解析し、解析結果(デコード結果)を命令制御回路43へ出力する。命令制御回路43は、入力された命令のデコード結果に基づき、メモリアクセス制御回路45、ベクトルレジスタ群47及び演算回路44に対して適切な信号を出力する。
演算回路44は、命令制御回路43からの指示に応じて、ベクトルレジスタ群47から読み出された複数のベクトルデータに対してベクトル演算を実行し、演算結果をベクトルレジスタ群47へ書き込む。
バッファ群46は、バッファ461及び462を含む。バッファ461及び462は、それぞれウェイw0〜wQ−1の領域に区分けされ、各領域に要素データを格納するための記憶装置である。また、バッファ461及び462は、ウェイ単位に要素データの更新が可能である。尚、バッファ群46には、N個のバッファを含めても良い。
ベクトルレジスタ群47は、ベクトルレジスタ471、472、・・・、47n(nは、2以上の自然数。)を含む。ベクトルレジスタ471等は、それぞれウェイw0〜wQ−1の領域に区分けされ、各領域に要素データを格納するための記憶装置である。つまり、ベクトルレジスタ471等は、1エントリでkワードを格納することができるレジスタファイルである。但し、ベクトルレジスタ471等は、演算回路44によるベクトル演算を高速に実行するため、ウェイ単位での更新はできず、レジスタ単位、つまり、Q個の要素データを一括して更新するものとする。また、ベクトルレジスタ471とバッファ461とは接続されており、つまり、対応しており、格納された要素データの集合を相互に移動可能である。同様に、ベクトルレジスタ472とバッファ462とは接続されており、つまり、対応しており、格納された要素データの集合を相互に移動可能である。
メモリアクセス制御回路45は、プロセッサ40からメモリ30へのメモリアクセス処理を制御する回路である。メモリアクセス制御回路45は、リクエスト発行部450と、切替部451及び452と、データ分類部453とを含む。リクエスト発行部450は、命令制御回路43からのメモリ読み込みリクエスト信号SIG0を受け付けた場合、SIG0に含まれる先頭メモリアドレスA及びワード数Nを指定した、メモリ30に対するメモリアクセス(読み出し)のリクエストを発行する。以降、リクエスト発行部450は、リクエストの応答を受け付ける度に、メモリアドレスAにサイズCを加算して、リクエストを発行する。当該リクエストは指定されたNワードの隣接する領域に格納された要素データの集合を要求するものである。尚、本実施の形態では、2ワードの読み出しを行うものとする。また、メモリアドレスAにサイズCの加算は命令制御回路43で行っても良い。
データ分類部453は、上述したメモリアクセスのリクエストの応答として2ワードの要素データの集合を受け付け、各要素データを切替部451又は切替部452のいずれかに分類する。データ分類部453は、メモリ30から各要素データが読み出された順序により、分類してもよい。つまり、先に読み出された要素データを切替部451へ出力し、次に読み出された要素データを切替部452へ出力するなどでも構わない。
切替部451及び452は、命令制御回路43からの書き込み先制御信号SIG1及びSIG2の指定に基づき、書込み先のウェイを選択して、データ分類部453から受け付けた要素データを書き込む。ここで、切替部451は、バッファ461と接続され、バッファ461内の指定されたウェイw0〜wQ−1のいずれかに対して書き込みを行う。同様に、切替部452は、バッファ462と接続され、バッファ462内の指定されたウェイw0〜wQ−1のいずれかに対して書き込みを行う。
ここで、命令デコード回路42がベクトル演算命令をデコードした場合、命令制御回路43は、ベクトルレジスタ群47から所定のベクトルデータを読み出し、演算回路44に対してベクトル演算を指示する。演算回路44は、指示に基づき、複数のベクトルデータの間のベクトル演算を実行し、演算結果をベクトルレジスタ群47へ書き込む。
また、命令デコード回路42が本実施の形態にかかるギャザ命令をデコードした場合、プロセッサ40は、メモリアクセス制御回路45を介してメモリ30との通信を行う。すなわち、命令制御回路43は、リクエスト発行部450に対して、先頭メモリアドレスA及びワード数Nを指定したメモリ読み込みリクエスト信号SIG0を出力する。併せて、命令制御回路43は、切替部451及び452に対して、同じウェイ番号W(レジスタ番号k)を指定した書き込み先制御信号SIG1及びSIG2を出力する。そして、命令制御回路43は、メモリアクセス制御回路45がリクエストの応答を受け付ける度に、構造体数であるQ回、SIG0〜SIG2を出力する。このとき、命令制御回路43は、メモリアドレスAにサイズCを加算してメモリ読み込みリクエスト信号SIG0を出力する。併せて、命令制御回路43は、ウェイ番号Wに1を加算して、加算後のウェイ番号を指定した書き込み先制御信号SIG1及びSIG2を出力する。言い換えると、命令制御回路43は、ウェイ番号Wの最大値までSIG0〜SIG2を繰り返し出力できる。
図8は、本実施の形態3にかかるギャザ命令の処理の流れを示すフローチャートである。また、図9は、本実施の形態3にかかる複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。以下では、図8の説明において、適宜、図9を参照するものとする。
まず、本実施の形態にかかるギャザ命令が設定されたものとする。そして、命令デコード回路42は当該ギャザ命令をデコードする(S101)。これに伴い、命令制御回路43は、初期設定を行う。ここでは、先頭メモリアドレスAは構造体31のz[0].aの格納先アドレス、レジスタ番号kとしてウェイ番号Wは“w0”、ワード数Nは“2”、メモリアドレスの加算値CはPが初期設定されたものとする。
次に、命令制御回路43は、ベクトルレジスタ群47に対して、各ベクトルレジスタから対応するバッファへデータを移動させる指示を行う(S102)。ここでは、ベクトルレジスタ471に格納された1エントリのデータ群がバッファ461へ格納され、ベクトルレジスタ472に格納された1エントリのデータ群がバッファ462へ格納される。
続いて、命令制御回路43は、先頭メモリアドレスA及びワード数Nを指定したメモリ読み込みリクエスト信号SIG0をリクエスト発行部450へ出力する。これに伴い、リクエスト発行部450は、A及びNを指定してメモリ30に対してメモリアクセスのリクエストを発行する(S104)。ここでは、メモリ30から構造体31のz[0].a及びz[0].bに格納されたデータ値(以下、単に、z[0].a及びz[0].bと記載する。)が読み出される。つまり、メモリ30から隣接した領域に格納された2ワードの要素データが読み出される。そして、データ分類部453は、読み出されたデータ群をワードごとにバッファへ分類する(S105)。ここでは、データ分類部453は、z[0].aを切替部451へ出力し、z[0].bを切替部452へ出力する。
また、ステップS103及びS104と並行して、命令制御回路43は、ウェイw0を指定した書き込み先制御信号SIG1及びSIG2を切替部451及び452に対して出力する(S105)。
ステップS103〜S105の後、切替部451及び452は、分類した各データを各バッファの指定されたウェイWへ書き込む(S106)。ここでは、切替部451は、書き込み先制御信号SIG1により指定されたバッファ461のウェイw0に対してz[0].aを書き込む。また、切替部452は、書き込み先制御信号SIG2により指定されたバッファ462のウェイw0に対してz[0].bを書き込む(例えば、図9に示すバッファ461及び462のウェイw0)。
その後、命令制御回路43は、ウェイ番号WがQ−1であるか否かを判定する(S107)。ここでは、ウェイ番号Wが“0”であるため、命令制御回路43は、Wに“1”を加算してw1とし、Aに“P”を加算する(S108)。
続いて、命令制御回路43は、ステップS108の結果に基づいてステップS103〜S107を実行する。すなわち、リクエスト発行部450は、メモリ30の構造体32のz[1].aのアドレスから2ワードのデータを読み出すためのリクエストを発行する(S103)。そのため、メモリ30から構造体32のz[1].a及びz[1].bが読み出される。そして、データ分類部453は、z[1].aを切替部451へ出力し、z[1].bを切替部452へ出力する(S104)。また、命令制御回路43は、ウェイw1を指定した書き込み先制御信号SIG1及びSIG2を切替部451及び452に対して出力する(S105)。その後、切替部451は、バッファ461のウェイw1に対してz[1].aを書き込む。また、切替部452は、バッファ462のウェイw1に対してz[1].bを書き込む(S106、例えば、図9に示すバッファ461及び462のウェイw1)。
以後、ステップS107でウェイ番号WがQ−1であると判定されるまで、ステップS103〜108を繰り返す。そのため、ウェイ番号WがQ−1である場合に、バッファ461のウェイwQ−1には、z[Q-1].aが書き込まれ、バッファ462のウェイwQ−1には、z[Q-1].bが書き込まれる(S106、例えば、図9に示すバッファ461及び462のウェイwQ−1)。
そして、ステップS107でウェイ番号WがQ−1であると判定され、命令制御回路43は、各バッファのデータを対応するベクトルレジスタへ書き込ませる(S109)。すなわち、バッファ461のウェイw0からwQ−1のz[0].a〜z[Q-1].aがベクトルレジスタ471に書き込まれ、バッファ462のウェイw0からwQ−1のz[0].b〜z[Q-1].bがベクトルレジスタ472に書き込まれる(例えば、図9に示すベクトルレジスタ471及び472のウェイw0〜wQ−1)。その後、当該処理を終了する。
このように、ステップS103により、メモリ30から2ワードの連続した領域からデータを読み出すことになる。つまり、構造体で連続した順序で定義された異なるメンバ変数がまとめて読み出される。
また、ステップS108で先頭メモリアドレスAにCを加算する処理は、Cを構造体のサイズPとすれば、構造体配列のインデックスを一つ分インクリメントしていることに相当する。そのため、次のメモリロードでは、一つ隣の構造体のデータをNワード分読み込む操作となる。
さらに、ステップS104及びS106で読み出した2ワードの要素データを異なるバッファに分類し、かつ、バッファ間で対応するウェイに対して各要素データが格納される。これにより、上述した既存手法2で行っていた並べ替え処理に相当する処理が、データの読み出しから書き込みという一連の処理の中で実現できる。そのため、既存手法2のようなベクトルレジスタ内の並べ替え処理は不要となり、処理時間を短縮できる。つまり、本実施の形態によりベクトルレジスタ毎に共通のメンバ変数を集めることができ、ベクトル演算の適用が容易になる。
ここで、上述した既存手法1について改めて説明する。図13は、既存手法1におけるギャザ命令の概念を説明するための図である。図13におけるデータ処理装置9000は、既存手法1におけるギャザ命令を実現するためのハードウェア構成例を示す。データ処理装置9000はメモリ10aと、プロセッサ90とを備える。プロセッサ90は、命令フェッチ回路91と、命令デコード回路92と、命令制御回路93と、演算回路94と、メモリアクセス制御回路95と、バッファ96と、ベクトルレジスタ群97とを備える。ここで、命令フェッチ回路91、命令デコード回路92、演算回路94、ベクトルレジスタ群97は、図7と同等であってもよい。バッファ96は、図7のバッファ461と同等の構成である。但し、バッファ96は一つである。命令制御回路93は、既存手法1のギャザ命令を受け付けた場合、メモリアクセス制御回路95に対して、構造体配列数×メンバ変数の数の回数の指示を行う。また、メモリアクセス制御回路95は、複数ワードをまとめて読み出すが、逐次、一の要素データを残して他を破棄する。以下にその流れを説明する。
図15及び図16は、既存手法1における複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。図15及び図16は、1クロックサイクルに同時にアクセス可能なメモリバンド幅が64ビット、4ワード格納できるベクトルレジスタである場合の既存手法1におけるギャザ命令を用いた場合の動作を示したものである。
図15及び図16では、ベクトルレジスタ97は4ワードであるため、既存手法1のギャザ命令は、非連続なメモリ領域に対して4回のメモリ読み出し要求を行う。これは最小でも4サイクルに渡ってメモリ10aに対して実施される。メモリ10aは1クロックで2ワード読み出し可能だが、ギャザ命令はその内の1ワードしか用いないので、必要のない1ワードは破棄される。ベクトルレジスタ97に格納されるべき4ワードのデータがプロセッサ90に返されるまで、先にメモリ10aから読み出されたデータはバッファに保持されている。1エントリのデータがバッファ96に格納されると、ベクトルレジスタ97に対して書き込みが行われる。具体的には次のような流れになる。
メモリアクセス制御回路95は、命令制御回路93からの指示に応じて、メモリ10aのarray[0].a及びarray[0].bをまとめて読み出すが、array[0].bを破棄し、array[0].aをバッファ96のウェイw0に格納する。次に、メモリアクセス制御回路95は、メモリ10aのarray[1].a及びarray[1].bをまとめて読み出すが、array[1].bを破棄し、array[1].aをバッファ96のウェイw1に格納する。以後同様に、メモリアクセス制御回路95は、メモリ10aのarray[Q-1].a及びarray[Q-1].bをまとめて読み出し、array[Q-1].bを破棄し、array[Q-1].aをバッファ96のウェイwQ−1に格納する。その後、バッファ96から1エントリのデータをベクトルレジスタ群97の該当のレジスタへ書き込む(図15)。
引き続き、メモリアクセス制御回路95は、Q回のメモリアクセスを行い、都度、array[0].a〜array[Q-1].aを破棄し、array[0].b〜array[Q-1].bをバッファ96のウェイw0〜wQ−1に格納する。その後、バッファ96から1エントリのデータをベクトルレジスタ群97の他の該当のレジスタへ書き込む(図16)。
このように、既存手法1のギャザ命令を利用する方法は、本実施の形態に比べて、1クロックでメモリ上の複数ワードをロードできるというハードウェア能力を有効活用することができない。図15及び図16の場合には、4ワード分のデータを収集するために、少なくとも4サイクル必要になり、その間に活用可能なメモリバンド幅=4×2ワードのうち、1/2しか活用できていない。
これに対して、本実施の形態にかかるプロセッサ40では、図13のバッファ96に加え、複数ワードのデータをベクトルレジスタの長さの分確保してくために、必要なバッファ数を追加する。つまり、上述したように、同時に2ワードのメモリアクセスが可能であり、かつ、4ワードまでのデータを格納可能なベクトル演算命令を保持しているプロセッサ40では、2ワード×4ワードの16ワードを保持しながら並べ替えるためのバッファを用いるものである。
そして、本実施の形態にかかる複数のベクトルレジスタに対するギャザ命令は、連続する2ワードを同時にロードし、同時にロードされた各ワードを異なるバッファ461及び462に分類し、かつ、構造体ごとに書き込み位置のウェイの指定を変更するものである。そのため、バッファへの格納の段階で、データの並べ替えが同時に完了する。そのため、既存手法1のように、読み出された複数ワードの要素データのうち一つ以外を破棄する必要がない。よって、本実施の形態にかかるギャザ命令は、既存手法1のギャザ命令に比べてメモリバンド幅を有効に活用できる。
尚、上記の条件では、本実施の形態では1命令で8ワードのデータを収集し、そのために必要なメモリアクセスは4回であり、最後のレジスタ書き込みは2回となる。そのため、既存手法1のギャザ命令に比べてメモリアクセス処理の回数を減少させることができ、処理時間を短縮し、効率を高めることができる。
また、上述した既存手法2について改めて説明する。既存手法2は、連続する複数ワードをロードする命令を活用する方法である。図17は、関連技術における複数ワードのロード命令の動作の概念を説明するための図である。図17におけるデータ処理装置9000aは、既存手法2における複数ワードのロード命令を実現するためのハードウェア構成例を示す。データ処理装置9000aは、メモリ10aと、プロセッサ90aとを備える。プロセッサ90aは、プロセッサ90と比べて、命令制御回路93及びメモリアクセス制御回路95が命令制御回路93a及びメモリアクセス制御回路95aに置き換わり、バッファ96に相当するバッファは省略している。
ここでは、1クロックサイクルに同時アクセス可能なメモリバンド幅が64ビット、4ワード格納できるベクトルレジスタがある場合の、複数ワードをロードする命令を用いた場合の動作の例を述べる。
既存手法2では、まず、プロセッサ90aは、連続する複数ワードをロードする命令を利用して、0番目の構造体配列のメンバ変数array[0].a及びarray[0].bを一つのベクトルレジスタ97に格納する。そして、プロセッサ90aは、構造体配列のインデックスを1加算して、複数ワードのロードを繰り返す。ここでは、Q回のロード命令、つまり、最小でもQクロックサイクルが必要である。
このように、既存手法2では連続した複数ワードをロードするため、ハードウェアのメモリバンド幅を64ビットまで活用することはできる。既存手法2の場合、連続したデータを一度、同一のベクトルレジスタの連続したウェイに書き込む。そのため、構造体の異なるメンバが同一のベクトルレジスタに格納されてしまい、ベクトル演算の適用が難しくなる。
そこで、データのロードが全て完了した後に、プロセッサ90aは、ベクトルレジスタ群97に格納されたデータに対して並べ替え処理を実行して、同一のベクトルレジスタ中に同一のメンバ変数を集める。図18は、既存手法2におけるベクトルレジスタ内のデータの並べ替え処理の動作の概念を説明するための図である。
並べ替え処理の開始時は、各ベクトルレジスタにおいて、同一の構造体配列における各メンバ変数が格納されている。そのため、この状態では、ベクトル演算に用いることができない。そこで、各ベクトルレジスタに異なる構造体配列における同一のメンバ変数を格納すべく、並べ替え処理を実行する。このとき、具体的には、バッファに一時的に各ベクトルレジスタのエントリを退避しつつ、ベクトルレジスタの領域ごとにデータの入れ替えを行うことになる。しかも、ベクトルレジスタは、1エントリ単位で更新されるため、各領域ごとのデータの入れ替えには膨大なステップが必要となる。よって、当該並べ替え処理による必要命令数の増加、及び、必要レジスタ数の増加により性能が悪化する可能性が高い。
例えば、既存手法2の上記の例の場合、8ワードのデータをロードするために4命令を発行し、メモリアクセス回数は4回、レジスタ書き込み回数は4回となる。一方、上述したように本実施の形態かかるギャザ命令は、8ワードのデータをロードするために必要な命令発行数は1であり、レジスタ書き込み回数は2回である。つまり、既存手法2にかかる複数ワードロード命令では、同一の結果を得るために4命令が必要であったところ、本実施の形態では1命令を発行するだけである。そのため、本実施の形態にかかるギャザ命令が完了するまでに、当該命令と関係の無い別の演算命令を実行することも可能となる。また、メモリバンド幅を活用することができる。その上、並べ替えに相当する処理もバッファへデータを格納する時点で併せて行われている。このため、並べ替え処理のための命令は不要であり、命令数の増加、必要レジスタ数の増加を防ぎ、既存手法2に比べて性能低下を防ぐことができる。
<実施の形態4>
本実施の形態4は、上述した実施の形態2の改良例である。また、上述した既存手法1におけるスキャタ命令や既存手法2における複数ワードのストア命令において発生する課題を解決するものである。尚、既存手法1及び2における課題は、ギャザ命令及び複数ワードのロード命令において発生するものと同等である。
そこで、本実施の形態4では、上述した実施の形態2の構成に、少なくとも次の構成を備えることにより、上述した課題を解決するものである。すなわち、前記制御部は、前記読み出した各要素データについての前記格納領域を、前記複数の記憶部ごとに対応させて書き込むものである。つまり、プロセッサ内の同じ記憶部から読み出された要素データについては、異なるデータ集合の対応する格納領域の位置に書き込むことができる。そのため、ベクトル演算の結果を元の格納位置に戻すことができ、効率的にデータを書き込むことができる。
また、前記制御部は、複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記複数の領域ごとに、前記複数の記憶部のそれぞれの前記対応する領域から各要素データを読み出し、前記複数の領域ごとに、前記対応する領域から読み出された各要素データを統合して前記データ集合とし、前記複数の領域のそれぞれについて当該ベクトルデータの数分の連続した前記格納領域へ前記統合したデータ集合の各要素データを格納するためのリクエストを前記メモリに対して発行することが望ましい。これにより、ベクトル演算の結果を構造体のメンバ変数へ適切に並べ替えて格納することができる。
さらに、前記制御部は、複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記リクエストを発行すると共に、前記複数の領域ごとに、前記領域を指定し、前記指定された領域を前記対応する領域として前記複数の記憶部のそれぞれから各要素データを読み出すとよい。これにより、例えば、本実施の形態にかかる記憶部からの読み出し及びメモリアクセスをスキャタ命令に適用できる。
さらに、前記複数の記憶部は、前記区分された全領域の単位で読み書き可能な複数のレジスタと、各レジスタに対応し、個別の前記領域の単位で読み書き可能な複数のバッファとを含み、前記制御部は、前記複数のレジスタのそれぞれに格納された前記複数の要素データの全てを読み出して、各レジスタに対応する各バッファへまとめて書き込み、各レジスタの間で対応する領域ごとに、各バッファにおける当該領域に格納された各要素データを読み出し、当該対応する領域ごとに、当該読み出された要素データ同士をまとめて書込み用のデータ集合とし、当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込むとよい。これにより、領域ごとに柔軟に読み出しが可能なバッファに対して個別に読み出しを行うことで、領域ごとの細かな読み出しが困難なベクトルレジスタに対する読み出し回数を抑制し、処理を効率化できる。
さらに、前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行し、当該複数の記憶部へ当該所定の演算の結果を書き込むベクトル演算部をさらに備え、前記制御部は、前記ベクトル演算部による前記所定の演算の結果の書き込み後に、前記読み出しを開始するとよい。これにより、ベクトル演算の結果を並べ替え処理の必要なく、効率的に元のメモリへ書き戻すことができる。
続いて、本実施の形態4にかかる複数のベクトルレジスタへのスキャタ命令について以下に具体的に説明する。図10は、本実施の形態4にかかるプロセッサ40aを含むデータ処理装置3000aの構成を示すブロック図である。データ処理装置3000aは、上述した実施の形態2にかかるデータ処理装置2000の改良例であり、メモリ30とプロセッサ40aとを備える。メモリ30は、図7と同等の構成である。
また、本実施の形態にかかるスキャタ命令は、複数のベクトルレジスタk〜k+N−1のデータをメモリ上に配置された構造体の配列にストアする。本実施の形態にかかるスキャタ命令は、例えば、以下のオペランドを含むものとする。
・書き込み先のメモリの先頭メモリアドレスA(例えば、構造体配列の先頭の格納領域に相当する)
・読み出し元の先頭のレジスタ番号k(kは、読み出し対象の構造体数Qに相当し、ウェイ数Wの上限以下の自然数。)
・連続してメモリアクセスするワード数N(Nは、2以上かつP以下の自然数)
・メモリアドレスを更新するためのサイズC(Cは、構造体のサイズPと同一とする)
プロセッサ40aは、上述した実施の形態2にかかるプロセッサ20bの改良例であり、命令フェッチ回路41と、命令デコード回路42と、命令制御回路43aと、演算回路44と、メモリアクセス制御回路45aと、バッファ群46と、ベクトルレジスタ群47とを備える。プロセッサ40aは、1クロックサイクルでNワードのデータにアクセス可能であるものとする。尚、命令フェッチ回路41、命令デコード回路42、演算回路44、バッファ群46及びベクトルレジスタ群47は図7と同等である。但し、ベクトルレジスタ群47のベクトルレジスタ471及び472には、予め各ウェイに要素データが格納済みであるものとする。例えば、ベクトルレジスタ471及び472には、所定のベクトル演算の結果が格納されていてもよい。
メモリアクセス制御回路45aは、プロセッサ40aからメモリ30へのメモリアクセス処理を制御する回路である。メモリアクセス制御回路45aは、リクエスト発行部450aと、切替部451a及び452aと、データ統合部454とを含む。リクエスト発行部450aは、命令制御回路43aからのメモリ書き込みリクエスト信号SIG3を受け付けた場合、SIG3に含まれる先頭メモリアドレスA及びワード数Nを指定し、データ統合部454により生成されたデータ集合を書き込むために、メモリ30に対するメモリアクセス(書き込み)のリクエストを発行する。以降、リクエスト発行部450aは、リクエストの応答を受け付ける度に、メモリアドレスAにサイズCを加算して、リクエストを発行する。当該リクエストは指定されたNワードの隣接する領域に各要素データを格納させるものである。尚、本実施の形態では、2ワードの書き込みを行うものとする。また、メモリアドレスAにサイズCの加算は命令制御回路43aで行っても良い。
切替部451a及び452aは、命令制御回路43aからの読み出し元制御信号SIG4及びSIG5の指定に基づき、読み出し元のウェイを選択し、選択したウェイから要素データを読み出す。ここで、切替部451aは、バッファ461と接続され、バッファ461内の指定されたウェイw0〜wQ−1のいずれかから読み出しを行う。同様に、切替部452aは、バッファ462と接続され、バッファ462内の指定されたウェイw0〜wQ−1のいずれかから読み出しを行う。
また、命令デコード回路42が本実施の形態にかかるスキャタ命令をデコードした場合、プロセッサ40aは、メモリアクセス制御回路45aを介してメモリ30との通信を行う。すなわち、命令制御回路43aは、切替部451a及び452aに対して、ウェイ番号W(レジスタ番号k)を指定した読み出し元制御信号SIG4及びSIG5を出力する。併せて、命令制御回路43aは、リクエスト発行部450aに対して、先頭メモリアドレスA及びワード数Nを指定したメモリ書き込みリクエスト信号SIG3を出力する。そして、命令制御回路43は、メモリアクセス制御回路45aがリクエストの応答を受け付ける度に、構造体数Q回、SIG3〜SIG5を出力する。このとき、命令制御回路43aは、メモリアドレスAにサイズCを加算してメモリ書き込みリクエスト信号SIG3を出力する。併せて、命令制御回路43aは、ウェイ番号Wに1を加算して読み出し元制御信号SIG4及びSIG5を出力する。言い換えると、命令制御回路43aは、ウェイ番号Wの最大値までSIG3〜SIG5を繰り返し出力できる。
図11は、本実施の形態4にかかるスキャタ命令の処理の流れを示すフローチャートである。また、図12は、本実施の形態4にかかる複数のベクトルレジスタへのスキャタ命令の動作の概念を説明するための図である。以下では、図11の説明において、適宜、図12を参照するものとする。
まず、本実施の形態にかかるスキャタ命令が設定されたものとする。そして、命令デコード回路42は当該スキャタ命令をデコードする(S201)。これに伴い、命令制御回路43aは、初期設定を行う。ここでは、先頭メモリアドレスAは構造体31のz[0].aの格納先アドレス、レジスタ番号kとしてウェイ番号Wは“w0”、ワード数Nは“2”、メモリアドレスの加算値CはPが初期設定されたものとする。
次に、命令制御回路43aは、ベクトルレジスタ群47に対して、各ベクトルレジスタから対応するバッファへデータを移動させる指示を行う(S202)。ここでは、ベクトルレジスタ471に格納された1エントリのデータ群がバッファ461へ格納され、ベクトルレジスタ472に格納された1エントリのデータ群がバッファ462へ格納される(例えば、図12に示すバッファ461及び462のウェイw0〜wQ−1)。
続いて、命令制御回路43aは、ウェイw0を指定した読み出し元制御信号SIG4及びSIG5を切替部451a及び452aに対して出力する(S203)。そして、切替部451a及び452aは、対応する各バッファの指定されたウェイ番号Wからそれぞれデータを読み出す(S204)。ここでは、切替部451aは、読み出し元制御信号SIG4により指定されたバッファ461のウェイw0からz[0].aを読み出す。また、切替部452aは、読み出し元制御信号SIG5により指定されたバッファ462のウェイw0からz[0].bを読み出す。
そして、データ統合部454は、読み出されたデータ群をNワードの書込み用データ列としてグループ化する(S205)。ここでは、データ統合部454は、z[0].a及びz[0].bをグループ化して2ワードの書込み用データ列とする。
続いて、命令制御回路43aは、先頭メモリアドレスA及びワード数Nを指定したメモリ書き込みリクエスト信号SIG3をリクエスト発行部450aへ出力する。これに伴い、リクエスト発行部450aは、A及びNを指定し、データ統合部454によりグループ化された書込み用データ列を書き込ませるために、メモリ30に対してメモリアクセスのリクエストを発行する(S206)。ここでは、メモリ30の構造体31のz[0].a及びz[0].bへ書込み用データ列に含まれるz[0].a及びz[0].bのデータ値がそれぞれ書き込まれる。
その後、命令制御回路43aは、ウェイ番号WがQ−1であるか否かを判定する(S207)。ここでは、ウェイ番号Wが“0”であるため、命令制御回路43aは、Wに“1”を加算してw1とし、Aに“P”を加算する(S208)。
続いて、命令制御回路43aは、ステップS208の結果に基づいてステップS203〜S207を実行する。すなわち、命令制御回路43aは、ウェイw1を指定した読み出し元制御信号SIG4及びSIG5を切替部451a及び452aに対して出力する(S203)。そして、切替部451aは、読み出し元制御信号SIG4により指定されたバッファ461のウェイw1からz[1].aを読み出す。また、切替部452aは、読み出し元制御信号SIG5により指定されたバッファ462のウェイw1からz[1].bを読み出す(S204)。そして、データ統合部454は、z[1].a及びz[1].bをグループ化する(S205)。そして、リクエスト発行部450aは、メモリ30に対してメモリアクセスのリクエストを発行する(S206)。ここでは、メモリ30の構造体32のz[1].a及びz[1].bへ書込み用データ列に含まれるz[1].a及びz[1].bのデータ値がそれぞれ書き込まれる。
以後、ステップS207でウェイ番号WがQ−1であると判定されるまで、ステップS203〜208を繰り返す。そのため、ウェイ番号WがQ−1である場合に、メモリ30の構造体33のz[Q-1].a及びz[Q-1].bには、バッファ461及び462のウェイwQ−1のデータ値が書き込まれる。そして、ステップS207でウェイ番号WがQ−1であると判定された場合、当該処理を終了する。
このように、ステップS203により読み出し先のウェイを指定することで、ステップS204において、N個の別々のベクトルレジスタ(バッファ)の同一のウェイからデータを読み出すことができる。そして、読み出した各要素データをグループ化し、Nワードのデータとしてメモリへストアする。
また、ステップS206において、Nワードの連続した領域へ各要素データを書き込むため、メモリのバンド幅を活用することができる。
さらに、ベクトル演算の実行後にその結果を構造体配列に格納する際に、明示的な並べ替え命令を利用せずに、構造体のメンバ変数をベクトルレジスタから集めることができ、メモリバンド幅を活用して効率的にデータのストアを実現できる。
ここで、本実施の形態の実施例として、1クロックサイクルに同時アクセス可能なメモリバンド幅が64ビット(2ワード)であり、4ワードを格納できるベクトルレジスタの構成において、動作を説明する。
まず、ベクトルレジスタkには構造体配列中のメンバ変数a、ベクトルレジスタk+1には構造体配列中のメンバ変数bが格納されているとする。ベクトルレジスタkとk+1のウェイw0に格納されているメンバ変数a、bのペアを、メモリアドレスAから連続する領域にストアする。次に、メモリアドレスAにCを加算し、次の構造体にアドレスを移してから、ベクトルレジスタkとk+1のウェイw1に格納されているメンバ変数a、bのペアをメモリの連続する領域にストアする。これを、ベクトルレジスタの長さである4ワード分実行する。
ここで、上述した既存手法1におけるスキャタ命令について改めて説明する。図14は、既存手法1におけるスキャタ命令の概念を説明するための図である。ベクトルレジスタ97のデータをメモリ10aにスキャッタする場合、4クロックサイクルでハードウェアが提供できるメモリバンド幅×2ワードのうち、1/2しか活用できない。そして、既存手法1におけるスキャッタ命令を利用した場合は、8ワードのデータをロードするために2命令を発行し、メモリアクセス回数は8回(2ワードロードするが1ワード分は破棄するため)、レジスタ書き込み回数は2回となる。
このことから、本実施の形態におけるスキャタ命令は、既存手法1におけるスキャタ命令を用いた場合に比べて、メモリアクセス回数を削減し、メモリバンド幅を有効活用できる点で優れている。
また、上述した既存手法2において複数ワードをストアする命令を用いた場合、ロード命令と同様に、並べ替え処理が必要となる。そのため、本実施の形態におけるスキャタ命令は、既存手法2と比べて並べ替え処理が不要であるため、処理時間を短縮でき、処理の効率を高めることができる。
<実施の形態5>
本実施の形態5は、上述した実施の形態3及び4を組み合わせたものである。本実施の形態5にかかるプロセッサは、例えば、上述した図7のプロセッサ40及び40aの構成を備えるものであればよい。また、本実施の形態5にかかるデータ処理装置は、例えば、例えば、上述した図7のデータ処理装置3000及び3000aの構成を備えるものであればよい。つまり、本実施の形態5にかかるプロセッサは、実施の形態3にかかるギャザ命令及び実施の形態4にかかるスキャタ命令を実行可能なものである。尚、本実施の形態5にかかるプロセッサの構成は、プロセッサ40及び40aの構成のうち共通する部分は適宜、同一の構成を用いるとよい。
例えば、まず、本実施の形態5にかかるプロセッサは、実施の形態3にかかるギャザ命令によりメモリ30から複数の構造体のうち隣接する格納領域に格納された要素データを収集して、バッファ群46に分類してウェイ単位に格納し、ベクトルレジスタ群47内にメンバ変数ごとのデータ列を格納する。これにより、複数のベクトルデータを効率的に収集できる。そして、本実施の形態5にかかるプロセッサは、ベクトルレジスタ群47を用いてベクトル演算を実行し、その結果をベクトルレジスタ群47に格納する。その後、本実施の形態5にかかるプロセッサは、実施の形態4にかかるスキャタ命令により、ウェイ単位にバッファから要素データを読み出し、構造体単位に、各要素データを隣接する領域へ格納する。これにより、複数のベクトルデータを効率的にメモリに書き戻すことができる。
このように、本実施の形態により、構造体配列からのデータをロードし、ベクトル演算を適用する場合や、ベクトル演算を適用した結果のデータを構造体配列にストアする場合において、既存手法1のようなギャザ命令及びスキャタ命令を用いる場合や、既存手法2のような連続領域へのメモリアクセス命令を利用してデータを並べ替える方法に比べて、効率的にメモリアクセスが可能である。
具体的には、本実施の形態にかかるギャザ命令及びスキャタ命令は、連続した領域に対するメモリアクセスを行い、かつ非連続な領域に対してデータの収集及び書き込みを行うことができる。このため、既存手法2のような連続領域へのメモリアクセス命令を用いた場合のように、ベクトルデータの並べ替え処理を行わず、ベクトル演算を適用することができる。また、連続領域へのデータアクセスを行うため、既存手法1のようなギャザ命令及びスキャタ命令のように、バンド幅を損なうことがなく、有効に活用することができる。以上のことから、本実施の形態5においても、上述した課題を解決し、メモリとプロセッサ内の記憶部との間のデータのロード処理又はストア処理を効率的に行うことができる。
<その他の実施の形態>
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
(付記1)
データ集合に含まれる複数の要素データのそれぞれと対応する複数の記憶部と、
複数の前記データ集合が格納されたメモリから、隣接する格納領域に格納された前記複数の要素データを、前記データ集合ごとにまとめて読み出し、前記読み出した各要素データを、前記複数の記憶部のうち当該要素データに対応する記憶部に分類して、前記データ集合ごとに書き込む制御部と、
を備えるプロセッサ。
(付記2)
前記制御部は、
前記読み出した各要素データについての分類先の各記憶部における書込み位置を、前記データ集合ごとに対応させて書き込む
付記1に記載のプロセッサ。
(付記3)
前記制御部は、
前記メモリから読み出された各要素データを、前記メモリにおける前記隣接する格納領域の順序に従って前記複数の記憶部のいずれかに分類し、
前記分類された各要素データを、当該分類先の各記憶部へ書き込む、
付記2に記載のプロセッサ。
(付記4)
前記制御部は、
複数のベクトルデータを収集するための命令に応じて、前記データ集合ごとに当該ベクトルデータの数分の連続した前記格納領域から前記複数の要素データを読み出すためのリクエストを前記メモリに対して発行し、
前記リクエストに応じて前記メモリから読み出された各要素データを、当該リクエストごとに前記複数の記憶部のいずれかに分類する
付記3に記載のプロセッサ。
(付記5)
前記制御部は、
前記複数のベクトルデータを収集するための命令に応じて、前記リクエストを発行すると共に、前記データ集合ごとに、前記書込み位置を指定し、
前記分類された各要素データを、当該分類先の各記憶部における前記指定された書込み位置へ書き込む
付記4に記載のプロセッサ。
(付記6)
前記複数の記憶部は、前記データ集合内の各要素データの前記格納領域に対応した複数のバッファと、各バッファに対応した複数のレジスタとを含み、
前記制御部は、
前記複数のバッファのうち前記格納領域ごとに異なる書込み先のバッファを指定して、当該指定されたバッファに各要素データを分類して書き込み、
前記複数のデータ集合の全てにおける前記複数の要素データの読み出し後に、前記複数のバッファごとに、当該バッファに書き込まれた全要素データを、当該バッファに対応する前記レジスタへまとめて書き込む
付記2に記載のプロセッサ。
(付記7)
前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行するベクトル演算部をさらに備える
付記2に記載のプロセッサ。
(付記8)
前記ベクトル演算部は、前記複数の記憶部の少なくとも2以上を対象として前記所定の演算を実行する
付記7に記載のプロセッサ。
(付記9)
前記複数のデータ集合は、前記複数の要素データをメンバ変数とする構造体であり、
前記複数の記憶部は、前記メンバ変数に対応付けられており、
前記制御部は、
前記読み出した各要素データを、各メンバ変数に対応付けられた前記複数の記憶部に分類して書き込む、
付記1乃至8のいずれか1項に記載のプロセッサ。
(付記10)
複数の領域に区分けされ、それぞれに複数の要素データが格納された複数の記憶部と、
各記憶部の間で対応する領域に格納された各要素データを前記複数の記憶部のそれぞれから読み出し、当該対応する領域ごとに、当該読み出された要素データ同士をまとめてデータ集合とし、当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込む制御部と、
を備えるプロセッサ。
(付記11)
前記制御部は、
前記読み出した各要素データについての前記格納領域を、前記複数の記憶部ごとに対応させて書き込む
付記10に記載のプロセッサ。
(付記12)
前記制御部は、
前記複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記複数の領域ごとに、前記複数の記憶部のそれぞれの前記対応する領域から各要素データを読み出し、
前記複数の領域ごとに、前記対応する領域から読み出された各要素データを統合して前記データ集合とし、
前記複数の領域のそれぞれについて当該ベクトルデータの数分の連続した前記格納領域へ前記統合したデータ集合の各要素データを格納するためのリクエストを前記メモリに対して発行する、
を備える付記11に記載のプロセッサ。
(付記13)
前記制御部は、
複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記リクエストを発行すると共に、前記複数の領域ごとに、前記領域を指定し、
前記指定された領域を前記対応する領域として前記複数の記憶部のそれぞれから各要素データを読み出す
付記12に記載のプロセッサ。
(付記14)
前記複数の記憶部は、前記区分された全領域の単位で読み書き可能な複数のレジスタと、各レジスタに対応し、個別の前記領域の単位で読み書き可能な複数のバッファとを含み、
前記制御部は、
前記複数のレジスタのそれぞれに格納された前記複数の要素データの全てを読み出して、各レジスタに対応する各バッファへまとめて書き込み、
各レジスタの間で対応する領域ごとに、各バッファにおける当該領域に格納された各要素データを読み出し、
当該対応する領域ごとに、当該読み出された要素データ同士をまとめて書込み用のデータ集合とし、
当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込む
付記11に記載のプロセッサ。
(付記15)
前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行し、当該複数の記憶部へ当該所定の演算の結果を書き込むベクトル演算部をさらに備え、
前記制御部は、前記ベクトル演算部による前記所定の演算の結果の書き込み後に、前記読み出しを開始する
付記11に記載のプロセッサ。
(付記16)
プロセッサが、
メモリ内の隣接する領域に格納された第1及び第2の要素データを、当該メモリからまとめて読み出し、
前記読み出した第1の要素データを第1の記憶部の第1の領域へ、かつ、前記読み出した第2の要素データを第2の記憶部の前記第1の領域に対応する領域へ、それぞれ書き込み、
前記メモリ内の隣接する領域に格納された第3及び第4の要素データを、当該メモリからまとめて読み出し、
前記読み出した第3の要素データを前記第1の記憶部の第2の領域へ、かつ、前記読み出した第4の要素データを前記第2の記憶部の前記第2の領域に対応する領域へ、それぞれ書き込む、
データ収集方法。
(付記17)
プロセッサが、
第1の記憶部の第1の領域から第1の要素データを読み出し、
第2の記憶部の前記第1の領域に対応する領域から第2の要素データを読み出し、
前記第1の要素データ及び前記第2の要素データをメモリ内の隣接する格納領域にまとめて書き込み、
前記第1の記憶部の第2の領域から第3の要素データを読み出し、
前記第2の記憶部の前記第2の領域に対応する領域から第4の要素データを読み出し、
前記第3の要素データ及び前記第4の要素データを前記メモリ内の前記格納領域以外の隣接する格納領域にまとめて書き込む、
データ書き込み方法。
(付記18)
複数のデータ集合が格納されたメモリと、
前記複数のデータ集合のそれぞれに含まれる複数の要素データのそれぞれと対応する複数の記憶部を有するプロセッサとを備え、
前記プロセッサは、
前記メモリから、隣接する格納領域に格納された前記複数の要素データを、前記データ集合ごとにまとめて読み出し、
前記読み出した各要素データを、前記複数の記憶部のうち当該要素データに対応する記憶部に分類して書き込む
データ処理装置。
(付記19)
メモリと、
複数の領域に区分けされ、それぞれに複数の要素データが格納された複数の記憶部と、各記憶部の間で対応する領域に格納された各要素データを前記複数の記憶部のそれぞれから読み出し、当該対応する領域ごとに、当該読み出された要素データ同士をまとめてデータ集合とし、当該データ集合内の各要素データを前記メモリ内の隣接する格納領域に書き込む制御部と、を備えるプロセッサと、
を備えるデータ処理装置。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
1000 データ処理装置
1000a データ処理装置
2000 データ処理装置
2000a データ処理装置
10 メモリ
10a メモリ
11 データ集合
12 データ集合
101 要素データa
102 要素データb
103 要素データc
104 要素データd
20 プロセッサ
20a プロセッサ
20b プロセッサ
20c プロセッサ
21 記憶部
22 記憶部
201 領域
202 領域
203 領域
204 領域
23 制御部
23a 制御部
23b 制御部
23c 制御部
rgk レジスタ
rgk+1 レジスタ
rgk+N−1 レジスタ
w0 ウェイ
w1 ウェイ
wQ−1 ウェイ
3000 データ処理装置
3000a データ処理装置
30 メモリ
31 構造体
32 構造体
33 構造体
40 プロセッサ
41 命令フェッチ回路
42 命令デコード回路
43 命令制御回路
43a 命令制御回路
44 演算回路
45 メモリアクセス制御回路
45a メモリアクセス制御回路
450 リクエスト発行部
450a リクエスト発行部
451 切替部
452 切替部
451a 切替部
452a 切替部
453 データ分類部
454 データ統合部
46 バッファ群
461 バッファ
462 バッファ
47 ベクトルレジスタ群
471 ベクトルレジスタ
472 ベクトルレジスタ
47n ベクトルレジスタ
SIG0 メモリ読み込みリクエスト信号
SIG1 書き込み先制御信号
SIG2 書き込み先制御信号
SIG3 メモリ書き込みリクエスト信号
SIG4 読み出し元制御信号
SIG5 読み出し元制御信号
9000 データ処理装置
9000a データ処理装置
90 プロセッサ
90a プロセッサ
91 命令フェッチ回路
92 命令デコード回路
93 命令制御回路
93a 命令制御回路
94 演算回路
95 メモリアクセス制御回路
95a メモリアクセス制御回路
96 バッファ
97 ベクトルレジスタ群

Claims (10)

  1. データ集合に含まれる複数の要素データのそれぞれと対応する複数の記憶部と、
    複数の前記データ集合が格納されたメモリから、隣接する格納領域に格納された前記複数の要素データを、前記データ集合ごとにまとめて読み出し、前記読み出した各要素データを、前記複数の記憶部のうち当該要素データに対応する記憶部に分類して、前記データ集合ごとに書き込む制御部と、
    を備え
    前記制御部は、
    前記読み出した各要素データについての分類先の各記憶部における書込み位置を、前記データ集合ごとに対応させて書き込み、
    前記複数の記憶部は、前記データ集合内の各要素データの前記格納領域に対応した複数のバッファと、各バッファに対応した複数のレジスタとを含み、
    前記複数のバッファのそれぞれは、前記各要素データを格納するための複数の領域を有し、当該領域単位で読み書き可能であり、
    前記複数のレジスタのそれぞれは、前記複数の領域を一括した単位で読み書き可能であり、
    前記制御部は、
    前記複数のバッファのうち前記格納領域ごとに異なる書込み先のバッファを指定して、当該指定されたバッファに各要素データを分類して書き込み、
    前記複数のデータ集合の全てにおける前記複数の要素データの読み出し後に、前記複数のバッファごとに、当該バッファに書き込まれた全要素データを、当該バッファに対応する前記レジスタへまとめて書き込む
    ロセッサ。
  2. 前記制御部は、
    前記メモリから読み出された各要素データを、前記メモリにおける前記隣接する格納領域の順序に従って前記複数の記憶部のいずれかに分類し、
    前記分類された各要素データを、当該分類先の各記憶部へ書き込む、
    請求項に記載のプロセッサ。
  3. 前記制御部は、
    複数のベクトルデータを収集するための命令に応じて、前記データ集合ごとに当該ベクトルデータの数分の連続した前記格納領域から前記複数の要素データを読み出すためのリクエストを前記メモリに対して発行し、
    前記リクエストに応じて前記メモリから読み出された各要素データを、当該リクエストごとに前記複数の記憶部のいずれかに分類する
    請求項に記載のプロセッサ。
  4. 前記制御部は、
    前記複数のベクトルデータを収集するための命令に応じて、前記リクエストを発行すると共に、前記データ集合ごとに、前記書込み位置を指定し、
    前記分類された各要素データを、当該分類先の各記憶部における前記指定された書込み位置へ書き込む
    請求項3に記載のプロセッサ。
  5. 前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行するベクトル演算部をさらに備える
    請求項に記載のプロセッサ。
  6. 前記ベクトル演算部は、前記複数の記憶部の少なくとも2以上を対象として前記所定の演算を実行する
    請求項5に記載のプロセッサ。
  7. 複数の領域に区分けされ、それぞれに複数の要素データが格納された複数の記憶部と、
    各記憶部の間で対応する領域に格納された各要素データを前記複数の記憶部のそれぞれから読み出し、当該対応する領域ごとに、当該読み出された要素データ同士をまとめてデータ集合とし、当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込む制御部と、
    を備え
    前記制御部は、
    前記読み出した各要素データについての前記格納領域を、前記複数の記憶部ごとに対応させて書き込み、
    前記複数の記憶部は、前記区分された全領域の単位で読み書き可能な複数のレジスタと、各レジスタに対応し、個別の前記領域の単位で読み書き可能な複数のバッファとを含み、
    前記制御部は、
    前記複数のレジスタのそれぞれに格納された前記複数の要素データの全てを読み出して、各レジスタに対応する各バッファへまとめて書き込み、
    各レジスタの間で対応する領域ごとに、各バッファにおける当該領域に格納された各要素データを読み出し、
    当該対応する領域ごとに、当該読み出された要素データ同士をまとめて書込み用のデータ集合とし、
    当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込む
    ロセッサ。
  8. 前記制御部は、
    複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記複数の領域ごとに、前記複数の記憶部のそれぞれの前記対応する領域から各要素データを読み出し、
    前記複数の領域ごとに、前記対応する領域から読み出された各要素データを統合して前記データ集合とし、
    前記複数の領域のそれぞれについて当該ベクトルデータの数分の連続した前記格納領域へ前記統合したデータ集合の各要素データを格納するためのリクエストを前記メモリに対して発行する、
    を備える請求項に記載のプロセッサ。
  9. 前記制御部は、
    前記複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記リクエストを発行すると共に、前記複数の領域ごとに、前記領域を指定し、
    前記指定された領域を前記対応する領域として前記複数の記憶部のそれぞれから各要素データを読み出す
    請求項に記載のプロセッサ。
  10. 前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行し、当該複数の記憶部へ当該所定の演算の結果を書き込むベクトル演算部をさらに備え、
    前記制御部は、前記ベクトル演算部による前記所定の演算の結果の書き込み後に、前記読み出しを開始する
    請求項に記載のプロセッサ。
JP2014108852A 2014-05-27 2014-05-27 プロセッサ Active JP6253514B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2014108852A JP6253514B2 (ja) 2014-05-27 2014-05-27 プロセッサ
US14/694,026 US10235398B2 (en) 2014-05-27 2015-04-23 Processor and data gathering method
EP15167062.7A EP2950202A1 (en) 2014-05-27 2015-05-11 Processor and data gathering method
CN201510276210.8A CN105320469B (zh) 2014-05-27 2015-05-26 处理器和数据收集方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014108852A JP6253514B2 (ja) 2014-05-27 2014-05-27 プロセッサ

Publications (2)

Publication Number Publication Date
JP2015225427A JP2015225427A (ja) 2015-12-14
JP6253514B2 true JP6253514B2 (ja) 2017-12-27

Family

ID=53174845

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014108852A Active JP6253514B2 (ja) 2014-05-27 2014-05-27 プロセッサ

Country Status (4)

Country Link
US (1) US10235398B2 (ja)
EP (1) EP2950202A1 (ja)
JP (1) JP6253514B2 (ja)
CN (1) CN105320469B (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9875214B2 (en) * 2015-07-31 2018-01-23 Arm Limited Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers
US20170177352A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Store Operations
US10509726B2 (en) 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations
US20170177363A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Gather Operations
US10019262B2 (en) * 2015-12-22 2018-07-10 Intel Corporation Vector store/load instructions for array of structures
US20170192782A1 (en) * 2015-12-30 2017-07-06 Robert Valentine Systems, Apparatuses, and Methods for Aggregate Gather and Stride
US20170192783A1 (en) * 2015-12-30 2017-07-06 Elmoustapha Ould-Ahmed-Vall Systems, Apparatuses, and Methods for Stride Load
US10289416B2 (en) 2015-12-30 2019-05-14 Intel Corporation Systems, apparatuses, and methods for lane-based strided gather
US10901940B2 (en) 2016-04-02 2021-01-26 Intel Corporation Processors, methods, systems, and instructions to atomically store to memory data wider than a natively supported data width
CN106126195B (zh) * 2016-06-30 2019-01-15 联想(北京)有限公司 一种信息处理方法及电子设备
GB2552154B (en) 2016-07-08 2019-03-06 Advanced Risc Mach Ltd Vector register access
GB2552153B (en) * 2016-07-08 2019-07-24 Advanced Risc Mach Ltd An apparatus and method for performing a rearrangement operation
US10776118B2 (en) * 2016-09-09 2020-09-15 International Business Machines Corporation Index based memory access using single instruction multiple data unit
US10809978B2 (en) * 2017-06-02 2020-10-20 Texas Instruments Incorporated Merge sort accelerator
US20190272175A1 (en) * 2018-03-01 2019-09-05 Qualcomm Incorporated Single pack & unpack network and method for variable bit width data formats for computational machines
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
US10795678B2 (en) * 2018-04-21 2020-10-06 Microsoft Technology Licensing, Llc Matrix vector multiplier with a vector register file comprising a multi-port memory
JP7075067B2 (ja) * 2018-06-22 2022-05-25 日本電気株式会社 ストレージ装置
JP2020004247A (ja) * 2018-06-29 2020-01-09 ソニー株式会社 情報処理装置、情報処理方法およびプログラム
US20200004535A1 (en) * 2018-06-30 2020-01-02 Intel Corporation Accelerator apparatus and method for decoding and de-serializing bit-packed data
US20200097291A1 (en) * 2018-09-24 2020-03-26 Intel Corporation Apparatus and method for tile gather and tile scatter
US10838734B2 (en) 2018-09-24 2020-11-17 Intel Corporation Apparatus and method for processing structure of arrays (SoA) and array of structures (AoS) data
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
CN111949318A (zh) * 2019-05-17 2020-11-17 上海寒武纪信息科技有限公司 指令处理方法、装置及相关产品
WO2020250419A1 (ja) * 2019-06-14 2020-12-17 日本電気株式会社 制御装置、制御方法、及び制御プログラムが格納された非一時的なコンピュータ可読媒体

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1989003091A1 (en) * 1987-09-25 1989-04-06 Hitachi, Ltd. Method of sorting vector data and a vector processor adapted thereto
US20020032710A1 (en) * 2000-03-08 2002-03-14 Ashley Saulsbury Processing architecture having a matrix-transpose capability
US20040236920A1 (en) * 2003-05-20 2004-11-25 Sheaffer Gad S. Methods and apparatus for gathering and scattering data associated with a single-instruction-multiple-data (SIMD) operation
GB2409066B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US20070226469A1 (en) 2006-03-06 2007-09-27 James Wilson Permutable address processor and method
JP5633122B2 (ja) * 2009-06-16 2014-12-03 富士通セミコンダクター株式会社 プロセッサ及び情報処理システム
JP5165662B2 (ja) * 2009-10-27 2013-03-21 株式会社高速屋 ビット列キー分類・分配装置、分類・分配方法及びプログラム
US8972698B2 (en) 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
JP5658556B2 (ja) * 2010-12-24 2015-01-28 富士通株式会社 メモリ制御装置、及びメモリ制御方法
US9274591B2 (en) * 2013-07-22 2016-03-01 Globalfoundries Inc. General purpose processing unit with low power digital signal processing (DSP) mode

Also Published As

Publication number Publication date
CN105320469A (zh) 2016-02-10
US20150347475A1 (en) 2015-12-03
EP2950202A1 (en) 2015-12-02
JP2015225427A (ja) 2015-12-14
CN105320469B (zh) 2019-12-13
US10235398B2 (en) 2019-03-19

Similar Documents

Publication Publication Date Title
JP6253514B2 (ja) プロセッサ
JP6106752B2 (ja) 状態機械エンジンのための結果生成
JP6280121B2 (ja) 状態機械エンジンにおける命令挿入
JP6177418B2 (ja) ステートマシンエンジンによって受信されるデータを提供するための方法及び装置
TWI515669B (zh) 用於狀態機中資料分析之系統與方法
US10203878B2 (en) Near memory accelerator
JP2015533231A (ja) 状態機械エンジンにおいて状態ベクトルデータを使用するための方法およびシステム
US20200401553A1 (en) Devices for time division multiplexing of state machine engine signals
WO2016082362A1 (zh) 数据位宽转换方法、装置和设备
JP2016115092A (ja) 多数の要素からなる配列をソートする装置、方法およびプログラム
US20140317383A1 (en) Apparatus and method for compressing instruction for vliw processor, and apparatus and method for fetching instruction
GB2525613A (en) Reduction of processing duplicates of queued requests
JP5278538B2 (ja) コンパイルシステム、コンパイル方法およびコンパイルプログラム
JP7038608B2 (ja) 半導体装置
US11531869B1 (en) Neural-network pooling
JPWO2019156060A1 (ja) 並列ユニオン制御装置、並列ユニオン制御方法、および並列ユニオン制御用プログラム
WO2016063667A1 (ja) 再構成可能デバイス
JP7408954B2 (ja) メモリ制御方法、メモリ制御装置、プログラム
JPWO2017082323A1 (ja) 分散処理システム、分散処理装置、分散処理方法およびプログラム
JP5659772B2 (ja) 演算処理装置
KR20210100076A (ko) 벡터 술어 요약 생성
US20230289397A1 (en) Fast fourier transform device, digital filtering device, fast fourier transform method, and non-transitory computer-readable medium
WO2022053032A1 (zh) 矩阵计算电路、方法、电子设备及计算机可读存储介质
CN116126750B (zh) 一种基于硬件特性的数据处理的方法及装置
KR102631214B1 (ko) 대규모 언어 모델 추론을 가속화하기 위한 효율적인 데이터 포워딩 방법 및 시스템

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161003

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170620

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170704

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170830

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171128

R150 Certificate of patent or registration of utility model

Ref document number: 6253514

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150