(57)【要約】【課題】メモリとプロセッサ内の記憶部との間のデータのロード処理又はストア処理を効率的に行うこと。【解決手段】プロセッサは、データ集合に含まれる複数の要素データのそれぞれと対応する複数の記憶部と、複数のデータ集合が格納されたメモリから、隣接する格納領域に格納された複数の要素データを、データ集合ごとにまとめて読み出し、読み出した各要素データを、複数の記憶部のうち当該要素データに対応する記憶部に分類して、データ集合ごとに書き込む制御部と、を備える。【選択図】図１
2015225427.tif 000002
【特許請求の範囲】
【請求項１】
データ集合に含まれる複数の要素データのそれぞれと対応する複数の記憶部と、
複数の前記データ集合が格納されたメモリから、隣接する格納領域に格納された前記複数の要素データを、前記データ集合ごとにまとめて読み出し、前記読み出した各要素データを、前記複数の記憶部のうち当該要素データに対応する記憶部に分類して、前記データ集合ごとに書き込む制御部と、
を備えるプロセッサ。
【請求項２】
前記制御部は、
前記読み出した各要素データについての分類先の各記憶部における書込み位置を、前記データ集合ごとに対応させて書き込む
請求項１に記載のプロセッサ。
【請求項３】
前記制御部は、
前記メモリから読み出された各要素データを、前記メモリにおける前記隣接する格納領域の順序に従って前記複数の記憶部のいずれかに分類し、
前記分類された各要素データを、当該分類先の各記憶部へ書き込む、
請求項２に記載のプロセッサ。
【請求項４】
前記制御部は、
複数のベクトルデータを収集するための命令に応じて、前記データ集合ごとに当該ベクトルデータの数分の連続した前記格納領域から前記複数の要素データを読み出すためのリクエストを前記メモリに対して発行し、
前記リクエストに応じて前記メモリから読み出された各要素データを、当該リクエストごとに前記複数の記憶部のいずれかに分類する
請求項３に記載のプロセッサ。
【請求項５】
前記制御部は、
前記複数のベクトルデータを収集するための命令に応じて、前記リクエストを発行すると共に、前記データ集合ごとに、前記書込み位置を指定し、
前記分類された各要素データを、当該分類先の各記憶部における前記指定された書込み位置へ書き込む
請求項４に記載のプロセッサ。
【請求項６】
前記複数の記憶部は、前記データ集合内の各要素データの前記格納領域に対応した複数のバッファと、各バッファに対応した複数のレジスタとを含み、
前記制御部は、
前記複数のバッファのうち前記格納領域ごとに異なる書込み先のバッファを指定して、当該指定されたバッファに各要素データを分類して書き込み、
前記複数のデータ集合の全てにおける前記複数の要素データの読み出し後に、前記複数のバッファごとに、当該バッファに書き込まれた全要素データを、当該バッファに対応する前記レジスタへまとめて書き込む
請求項２に記載のプロセッサ。
【請求項７】
前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行するベクトル演算部をさらに備える
請求項２に記載のプロセッサ。
【請求項８】
前記ベクトル演算部は、前記複数の記憶部の少なくとも２以上を対象として前記所定の演算を実行する
請求項７に記載のプロセッサ。
【請求項９】
前記複数のデータ集合は、前記複数の要素データをメンバ変数とする構造体であり、
前記複数の記憶部は、前記メンバ変数に対応付けられており、
前記制御部は、
前記読み出した各要素データを、各メンバ変数に対応付けられた前記複数の記憶部に分類して書き込む、
請求項１乃至８のいずれか１項に記載のプロセッサ。
【請求項１０】
複数の領域に区分けされ、それぞれに複数の要素データが格納された複数の記憶部と、
各記憶部の間で対応する領域に格納された各要素データを前記複数の記憶部のそれぞれから読み出し、当該対応する領域ごとに、当該読み出された要素データ同士をまとめてデータ集合とし、当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込む制御部と、
を備えるプロセッサ。
【請求項１１】
前記制御部は、
前記読み出した各要素データについての前記格納領域を、前記複数の記憶部ごとに対応させて書き込む
請求項１０に記載のプロセッサ。
【請求項１２】
前記制御部は、
前記複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記複数の領域ごとに、前記複数の記憶部のそれぞれの前記対応する領域から各要素データを読み出し、
前記複数の領域ごとに、前記対応する領域から読み出された各要素データを統合して前記データ集合とし、
前記複数の領域のそれぞれについて当該ベクトルデータの数分の連続した前記格納領域へ前記統合したデータ集合の各要素データを格納するためのリクエストを前記メモリに対して発行する、
を備える請求項１１に記載のプロセッサ。
【請求項１３】
前記制御部は、
複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記リクエストを発行すると共に、前記複数の領域ごとに、前記領域を指定し、
前記指定された領域を前記対応する領域として前記複数の記憶部のそれぞれから各要素データを読み出す
請求項１２に記載のプロセッサ。
【請求項１４】
前記複数の記憶部は、前記区分された全領域の単位で読み書き可能な複数のレジスタと、各レジスタに対応し、個別の前記領域の単位で読み書き可能な複数のバッファとを含み、
前記制御部は、
前記複数のレジスタのそれぞれに格納された前記複数の要素データの全てを読み出して、各レジスタに対応する各バッファへまとめて書き込み、
各レジスタの間で対応する領域ごとに、各バッファにおける当該領域に格納された各要素データを読み出し、
当該対応する領域ごとに、当該読み出された要素データ同士をまとめて書込み用のデータ集合とし、
当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込む
請求項１１に記載のプロセッサ。
【請求項１５】
前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行し、当該複数の記憶部へ当該所定の演算の結果を書き込むベクトル演算部をさらに備え、
前記制御部は、前記ベクトル演算部による前記所定の演算の結果の書き込み後に、前記読み出しを開始する
請求項１１に記載のプロセッサ。
【請求項１６】
プロセッサが、
メモリ内の隣接する領域に格納された第１及び第２の要素データを、当該メモリからまとめて読み出し、
前記読み出した第１の要素データを第１の記憶部の第１の領域へ、かつ、前記読み出した第２の要素データを第２の記憶部の前記第１の領域に対応する領域へ、それぞれ書き込み、
前記メモリ内の隣接する領域に格納された第３及び第４の要素データを、当該メモリからまとめて読み出し、
前記読み出した第３の要素データを前記第１の記憶部の第２の領域へ、かつ、前記読み出した第４の要素データを前記第２の記憶部の前記第２の領域に対応する領域へ、それぞれ書き込む、
データ収集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ及びデータ収集方法に関し、例えば、メモリに格納された複数のデータ集合の読み込み又は書き込みを行うためのプロセッサ、データ処理装置、データ収集方法及びデータ書き込み方法に関する。
【背景技術】
【０００２】
近年、ベクトル演算を実行可能なプロセッサの開発が進んでいる。ベクトル演算とは、複数のスカラ演算をベクトルデータ同士の一演算として行うものである。そして、特許文献１には、ベクトル演算の前後に実行されるギャザ命令及びスキャタ命令について記載されている。
【０００３】
ギャザ命令とは、データ配列のうち指定された複数のインデックスに対応する各データ値を、メモリ内の対応する領域から収集するための命令である。そして、ギャザ命令により収集された複数のデータ値を、後に続くベクトル演算の入力ベクトルとして用いる。また、スキャタ命令とは、ベクトルデータの各データ値を、データ配列のうち指定されたインデックスに対応するメモリ内の領域に格納するための命令である。そして、スキャタ命令の対象とするベクトルデータには、ベクトル演算により生成された出力ベクトルの各要素を用いることができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１４−５０４４１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ベクトル演算のために上述したギャザ命令又はスキャタ命令を用いた場合、処理時間が長くなり、効率が悪い場合があるという問題点があった。その理由は、データ配列が格納されるメモリの領域への１回のメモリアクセスは、連続した領域にしか行うことができないためである。そのため、メモリアクセス対象の複数のデータ値の格納先におけるメモリの領域が不連続である（離散している）場合には、連続する領域の塊ごとにメモリアクセスを行う必要がある。つまり、ギャザ命令及びスキャタ命令は、それぞれ一命令であるにも関わらず、データ値の格納先によってはメモリアクセス回数が増大し得る。そのため、ベクトル演算の前処理又は後処理の時間が長くなってしまう。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、プロセッサは、メモリとプロセッサ内の記憶部と間で、複数のデータ集合に含まれる複数の要素データの格納順序を入れ替えてロード又はストアをするものである。
【０００８】
なお、上記実施の形態の装置を方法やシステムに置き換えて表現したもの、該装置または該装置の一部の処理をコンピュータに実行せしめるプログラム、該装置を備えた撮像装置なども、本発明の態様としては有効である。
【発明の効果】
【０００９】
前記一実施の形態によれば、メモリとプロセッサ内の記憶部との間のデータのロード処理又はストア処理を効率的に行うことができる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態１にかかるプロセッサを含むデータ処理装置の構成を示すブロック図である。
【図２】本実施の形態１にかかるデータ収集方法の処理の流れを示すフローチャートである。
【図３】本実施の形態１にかかるプロセッサを含むデータ処理装置の他の構成を示すブロック図である。
【図４】本実施の形態２にかかるプロセッサを含むデータ処理装置の構成を示すブロック図である。
【図５】本実施の形態２にかかるデータ書き込み方法の処理の流れを示すフローチャートである。
【図６】本実施の形態２にかかるプロセッサを含むデータ処理装置の他の構成を示すブロック図である。
【図７】本実施の形態３にかかるプロセッサを含むデータ処理装置の構成を示すブロック図である。
【図８】本実施の形態３にかかるギャザ命令の処理の流れを示すフローチャートである。
【図９】本実施の形態３にかかる複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。
【図１０】本実施の形態４にかかるプロセッサを含むデータ処理装置の構成を示すブロック図である。
【図１１】本実施の形態４にかかるスキャタ命令の処理の流れを示すフローチャートである。
【図１２】本実施の形態４にかかる複数のベクトルレジスタへのスキャタ命令の動作の概念を説明するための図である。
【図１３】関連技術におけるギャザ命令の概念を説明するための図である。
【図１４】関連技術におけるスキャタ命令の概念を説明するための図である。
【図１５】関連技術における複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。
【図１６】関連技術における複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。
【図１７】関連技術における複数ワードのロード命令の動作の概念を説明するための図である。
【図１８】関連技術におけるベクトルレジスタ内のデータの並べ替え処理の動作の概念を説明するための図である。
【発明を実施するための形態】
【００１１】
以下では、上述した課題を解決するための手段を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１２】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１３】
＜実施の形態１＞
図１は、本実施の形態１にかかるプロセッサ２０を含むデータ処理装置１０００の構成を示すブロック図である。データ処理装置１０００は、メモリ１０とプロセッサ２０とを備える。メモリ１０は、データ集合１１及び１２等が格納された記憶装置である。メモリ１０は、いわゆる主記憶装置に相当し、プロセッサ２０の外に存在するものである。メモリ１０は、プロセッサ２０との間でメモリバス（不図示）により接続されている。
【００１４】
データ集合１１には、要素データａ１０１及び要素データｂ１０２等の複数のデータが含まれる。ここで、要素データａ１０１と、要素データｂ１０２とは、メモリ１０内の隣接する格納領域に格納されているものとする。また、データ集合１２には、要素データｃ１０３及び要素データｄ１０４等の複数のデータが含まれる。ここで、要素データｃ１０３と、要素データｄ１０４とは、メモリ１０内の隣接する格納領域に格納されているものとする。
【００１５】
プロセッサ２０は、記憶部２１と、記憶部２２と、制御部２３とを備える。記憶部２１及び２２は、例えば、レジスタ、キャッシュメモリ、バッファ等の記憶装置である。記憶部２１は、少なくとも領域２０１及び２０３に区分けされている。そして、記憶部２１は、要素データａ１０１及び要素データｃ１０３に対応付けられている。また、記憶部２２は、少なくとも領域２０２及び２０４に区分けされている。そして、記憶部２２は、要素データｂ１０２及び要素データｄ１０４に対応付けられている。
【００１６】
制御部２３は、メモリ１０から、隣接する格納領域に格納された複数の要素データを、データ集合ごとにまとめて読み出す。ここで、「まとめて読み出す」とは、制御部２３からメモリ１０に対する１回のメモリアクセス処理で複数ワードを読み出すことに相当する。例えば、制御部２３は、メモリ１０から、データ集合１１に含まれる要素データａ１０１及び要素データｂ１０２を１回のメモリアクセス処理で読み出し、データ集合１２に含まれる要素データｃ１０３及び要素データｄ１０４を別の１回のメモリアクセス処理で読み出す。
【００１７】
そして、制御部２３は、読み出した各要素データを、複数の記憶部２１及び２２のうち当該要素データに対応する記憶部に分類して、データ集合ごとに書き込む。例えば、制御部２３は、データ集合１１について読み出された要素データａ１０１を、記憶部２１に分類して書き込み、要素データｂ１０２を記憶部２２に分類して書き込む。また、制御部２３は、データ集合１２について読み出された要素データｃ１０３を、記憶部２１に分類して書き込み、要素データｄ１０４を記憶部２２に分類して書き込む。
【００１８】
図２は、本実施の形態１にかかるデータ収集方法の処理の流れを示すフローチャートである。まず、プロセッサ２０の制御部２３は、メモリ１０内の隣接する領域に格納された第１及び第２の要素データ（例えば、要素データａ１０１及び要素データｂ１０２）を、メモリ１０からまとめて読み出す（Ｓ１１）。
【００１９】
次に、制御部２３は、読み出した第１の要素データを第１の記憶部（例えば、記憶部２１）の第１の領域（例えば、領域２０１）へ書き込む（Ｓ１２）。併せて、制御部２３は、読み出した第２の要素データを第２の記憶部（例えば、記憶部２２）の第１の領域（例えば、領域２０２）へ書き込む（Ｓ１３）。尚、領域２０２は、領域２０１に対応する領域であってもよい。また、制御部２３は、読み出した第２の要素データを記憶部２２の領域２０４へ書き込んでも構わない。
【００２０】
続いて、制御部２３は、メモリ１０内の隣接する領域に格納された第３及び第４の要素データ（例えば、要素データｃ１０３及び要素データｄ１０４）を、メモリ１０からまとめて読み出す（Ｓ１４）。
【００２１】
そして、制御部２３は、読み出した第３の要素データを第１の記憶部の第２の領域（例えば、領域２０３）へ書き込む（Ｓ１５）。併せて、制御部２３は、読み出した第４の要素データを第２の記憶部の第２の領域（例えば、領域２０４）へ書き込む（Ｓ１６）。尚、領域２０４は、領域２０３に対応する領域であってもよい。ここで、制御部２３は、読み出した第３の要素データを、第１の記憶部の領域のうち少なくともステップＳ１２で書き込んだ領域以外に書き込めばよい。同様に、制御部２３は、読み出した第４の要素データを、第２の記憶部の領域のうち少なくともステップＳ１３で書き込んだ領域以外に書き込めばよい。
【００２２】
図３は、本実施の形態１にかかるプロセッサ２０ａを含むデータ処理装置１０００ａの構成を示すブロック図である。プロセッサ２０ａは、図１のプロセッサ２０の構成を３以上のデータ集合のそれぞれからＮ（Ｎは２以上の自然数）ワードをまとめて読み出す場合であり、格納先の記憶部間で領域をウェイとして対応付けられた場合に適用したものである。メモリ１０ａには、Ｑ（Ｑは２以上の自然数。）個のデータ配列（array[0]〜array[Q-1]）が格納されている。各データ配列は、それぞれa,b,...,pの要素データを含む。
【００２３】
プロセッサ２０ａは、制御部２３ａと、レジスタｒｇｋ、ｒｇｋ＋１、・・・、ｒｇｋ＋Ｎ−１（ｋは自然数、Ｎは２以上の自然数）とを備える。ここで、レジスタｒｇｋ〜ｒｇｋ＋Ｎ−１のそれぞれは、複数の領域であるウェイｗ０、ｗ１、・・・、ｗＱ−１に区分けされており、各レジスタ間の同じウェイが対応するものとする。プロセッサ２０ａは、array[0]からＮワードをまとめて読み出し、各要素データをレジスタｒｇｋ〜ｒｇｋ＋Ｎ−１のそれぞれのウェイｗ０に書き込む。また、プロセッサ２０ａは、array[1]からＮワードをまとめて読み出し、各要素データをレジスタｒｇｋ〜ｒｇｋ＋Ｎ−１のそれぞれのウェイｗ１に書き込む。プロセッサ２０ａは、array[2]〜array[Q-1]についても同様に行う。例えば、プロセッサ２０ａは、array[Q-1] からＮワードをまとめて読み出し、各要素データをレジスタｒｇｋ〜ｒｇｋ＋Ｎ−１のそれぞれのウェイｗＱ−１に書き込む。
【００２４】
このように本実施の形態１によれば、例えば、要素データａ１０１と要素データｃ１０３の組や、要素データｂ１０２と要素データｄ１０４の組といった、メモリ１０内では非連続な領域に格納されたデータ群を複数収集する場合でも、データのロード処理の時間を短縮することができる。すなわち、連続（隣接）する領域へのメモリアクセスの結果を、プロセッサ内の第１及び第２の記憶部へ分類して格納することで、個別にメモリアクセスする必要がないためである。また、読み出したデータ群の格納時に対応する記憶部に分類しているため、読み出したデータ群に対する並べ替え処理を別途、実行する必要がない。よって、メモリとプロセッサ内の記憶部との間のデータのロード処理を効率的に行うことができる。
【００２５】
＜実施の形態２＞
図４は、本実施の形態２にかかるプロセッサ２０ｂを含むデータ処理装置２０００の構成を示すブロック図である。データ処理装置２０００は、メモリ１０とプロセッサ２０ｂとを備える。尚、メモリ１０は、図１と同等であるため説明を省略する。
【００２６】
プロセッサ２０ｂは、記憶部２１と、記憶部２２と、制御部２３ｂとを備える。尚、記憶部２１及び２２は、図１と同等の構成である。つまり、記憶部２１は、少なくとも領域２０１及び２０３に区分けされている。また、記憶部２２は、少なくとも領域２０２及び２０４に区分けされている。記憶部２１及び２２には、さらに、予め次のデータが格納されているものとする。すなわち、記憶部２１の領域２０１には要素データａ、領域２０３には要素データｃが格納されている。また、記憶部２２の領域２０２には要素データｂ、領域２０４には要素データｄが格納されている。
【００２７】
制御部２３ｂは、各記憶部２１及び２２の間で対応する領域に格納された各要素データを複数の記憶部２１及び２２のそれぞれから読み出す。ここで、「対応する領域」とは、例えば、記憶部２１の領域２０１と記憶部２２の領域２０２とが対応し、記憶部２１の領域２０３と記憶部２２の領域２０４とが対応するものとする。そのため、例えば、制御部２３ｂは、領域２０１から要素データａ及び領域２０２から要素データｂを読み出す。また、制御部２３ｂは、対応する領域ごとに、当該読み出された要素データ同士をまとめてデータ集合とする。例えば、制御部２３ｂは、要素データａ及び要素データｂをまとめてデータ集合とする。そして、制御部２３ｂは、当該データ集合内の各要素データをメモリ１０内の隣接する格納領域に書き込む。例えば、制御部２３ｂは、要素データａ１０１及び要素データｂ１０２をメモリ１０内のデータ集合１１の要素データａ１０１及び要素データｂ１０２の格納領域に書き込む。尚、制御部２３ｂは、領域２０３及び領域２０４に格納された要素データについても同様にまとめて読み出し、データ集合とし、メモリ１０内のデータ集合１２の隣接する格納領域に書き込む。
【００２８】
図５は、本実施の形態２にかかるデータ書き込み方法の処理の流れを示すフローチャートである。まず、プロセッサ２０ｂの制御部２３ｂは、第１の記憶部（例えば、記憶部２１）の第１の領域（例えば、領域２０１）から第１の要素データ（例えば、要素データａ）を読み出す（Ｓ２１）。併せて、制御部２３ｂは、第２の記憶部（例えば、記憶部２２）の第１の領域（例えば、領域２０２）から第２の要素データ（例えば、要素データｂ）を読み出す（Ｓ２２）。尚、領域２０２は、領域２０１に対応する領域であってもよい。また、制御部２３ｂは、記憶部２２の領域２０４から第２の要素データとして読み出しても構わない。
【００２９】
次に、制御部２３ｂは、第１及び第２の要素データをメモリ１０内の隣接する格納領域にまとめて書き込む（Ｓ２３）。例えば、上述したように、制御部２３ｂは、要素データａをメモリ１０内のデータ集合１１のうち要素データａ１０１の格納領域に、要素データｂを要素データｂ１０２の格納領域に、１回のメモリアクセス処理で書き込む。
【００３０】
続いて、制御部２３ｂは、第１の記憶部の第２の領域（例えば、領域２０３）から第３の要素データ（例えば、要素データｃ）を読み出す（Ｓ２４）。併せて、制御部２３ｂは、第２の記憶部の第２の領域（例えば、領域２０４）から第４の要素データ（例えば、要素データｄ）を読み出す（Ｓ２５）。尚、領域２０４は、領域２０３に対応する領域であってもよい。ここで、制御部２３ｂは、第１の記憶部の領域のうち少なくともステップＳ２１で読み出した領域以外から第３の要素データとして読み出してもよい。同様に、制御部２３ｂは、第２の記憶部の領域のうち少なくともステップＳ２２で読み出した領域以外から第４の要素データとして読み出してもよい。
【００３１】
そして、制御部２３ｂは、第３及び第４の要素データをメモリ１０内の隣接する格納領域にまとめて書き込む（Ｓ２６）。例えば、制御部２３ｂは、要素データｃをメモリ１０内のデータ集合１２のうち要素データｃ１０３の格納領域に、要素データｄを要素データｄ１０４の格納領域に、ステップＳ２３とは別の１回のメモリアクセス処理で書き込む。ここで、ステップＳ２６における書込み先の格納領域は、ステップＳ２３における書込み先の格納領域とは異なるものとする。
【００３２】
図６は、本実施の形態２にかかるプロセッサ２０ｃを含むデータ処理装置２０００ａの構成を示すブロック図である。プロセッサ２０ｃは、図４のプロセッサ２０ｂの構成を３以上のレジスタから読み出し、メモリ１０ａへＮワードをまとめて書き込む場合であり、読み出し元の記憶部（レジスタ）間の領域をウェイとして対応付けられた場合に適用したものである。
【００３３】
プロセッサ２０ｃは、制御部２３ｃと、レジスタｒｇｋ〜ｒｇｋ＋Ｎ−１とを備える。ここで、レジスタｒｇｋ〜ｒｇｋ＋Ｎ−１のそれぞれは、図３と同様である。但し、レジスタｒｇｋ〜ｒｇｋ＋Ｎ−１には、予め、ウェイｗ０〜ｗＱ−１に要素データが格納されているものとする。プロセッサ２０ｃは、レジスタｒｇｋ〜ｒｇｋ＋Ｎ−１からウェイごとにまとめて要素データを読み出し、ウェイごとに読み出された要素データ同士をまとめてデータ集合とする。そして、プロセッサ２０ｃは、当該データ集合内の各要素データをメモリ１０ａ内の隣接する格納領域に書き込む。例えば、プロセッサ２０ｃは、レジスタｒｇｋ〜ｒｇｋ＋Ｎ−１のウェイｗ０からそれぞれ要素データを読み出し、メモリ１０ａのarray[0].a〜array[0].nへ１回のメモリアクセス処理によりＮワードの書き込みを行う。プロセッサ２０ｃは、ウェイｗ１〜ｗＱ−１についても同様に、ウェイごとに要素データを読み出し、ウェイごとに同一のデータ集合の隣接する格納領域に書き込む。
【００３４】
このように本実施の形態２によれば、例えば、要素データａと要素データｂの組や、要素データｃと要素データｄの組といった、複数の記憶部に分かれて保存されているデータ群を一つのデータ集合としてまとめて書き込む場合でも、データのストア処理の時間を短縮することができる。すなわち、異なる記憶部から個別に読み出された各要素データをまとめて連続（隣接）する領域へ書き込むことで、要素データごとに個別にメモリアクセス処理を実行する必要がないためである。また、複数の記憶部の対応する領域から読み出すため、読み出した後に並べ替え処理を実行する必要がない。よって、メモリとプロセッサ内の記憶部との間のデータのストア処理を効率的に行うことができる。
【００３５】
＜実施の形態３＞
ここで、本実施の形態で解決しようとする課題について改めて説明する。まず、複数のメンバ変数を含む構造体のデータが構造体配列としてメモリに連続して格納されているものとする。このとき、複数の構造体配列について同一のメンバ変数同士をベクトル演算する場合がある。このようなベクトルデータをメモリから収集するためには、通常、構造体ごとの各メンバ変数ごとにメモリからの読み出し命令をプロセッサに対して指示しなければならない。また、ベクトル演算の結果としての複数のベクトルデータをメモリに格納するためにも、通常、構造体ごとの各メンバ変数ごとにプロセッサ内のレジスタからメモリへの書き込み命令をプロセッサに対して指示しなければならない。
【００３６】
（既存手法１）
これに対しては、既存手法１として従来からギャザ命令及びスキャタ命令がプロセッサに実装されていることが多い。一般に、ギャザ命令及びスキャタ命令は、プロセッサに対する１回の命令により、プロセッサからメモリに対する複数回のメモリアクセス処理を発行するものである。例えば、以下のような処理の流れになる。
（１）プロセッサは、ギャザ命令を受け付けて、非連続的な領域に格納された各データに対する複数回のメモリアクセス処理を発行し、読み出された各データを１つのレジスタにロードする。
（２）プロセッサは、レジスタにロードされた各データを複数のベクトルデータとしてベクトル演算を適用する。
（３）プロセッサは、スキャタ命令を受け付けて、レジスタの各要素を個別に読み出して、都度、メモリに対して書き込みを行うためのメモリアクセス命令を発行し、読み出された各データを非連続な領域にメモリアドレスに書き込む。
【００３７】
そのため、プロセッサを構成するハードウェアが連続するＮワードを同時にアクセスするためのメモリバンド幅を持っていたとしても、既存手法１では、スキャッタ命令及びギャザ命令により、非連続な領域にあるデータに個別にアクセスするため、バンド幅を十分に活用することができない。よって、既存手法１では、構造体及びメンバ変数の数ごとにメモリアクセス処理が発生し、処理時間が増大し、効率が悪い。
【００３８】
（既存手法２）
既存手法２は、複数ワードのアクセスが可能なバンド幅を活用し、複数ワードのメモリアクセス命令を活用するものである。つまり、既存手法２では、一度、複数ワードのメモリアクセス処理により、メモリの連続した領域に格納されたデータ群を一旦、ベクトルレジスタに格納する。この段階では、各ベクトルレジスタには、構造体単位のデータ群が格納されることになる。そこで、この後、各構造体における同じメンバ変数が同一のベクトルレジスタに格納されるように、並べ替え処理を実行する。このため、ベクトル演算を適用する前後に、ベクトルレジスタ内の並べ替え処理という余計な命令を挿入する必要が生じる。よって、既存手法２でも処理時間が増大し、効率が悪い。
【００３９】
そこで、本実施の形態３では、上述した実施の形態１の構成に、少なくとも次の構成を備えることにより、上述した課題を解決するものである。すなわち、制御部は、前記読み出した各要素データについての前記分類先の各記憶部における書込み位置を、前記データ集合ごとに対応させて書き込むものである。例えば、１回目のメモリアクセスによりメモリから読み出された複数ワードの各要素データを複数の記憶部に分類して格納するが、その際に、同一のウェイに書き込む。そして、以後の各メモリアクセスにより（つまり同一のデータ集合から）同時に読み出された各要素データについても、１回目とは異なるウェイであり、まとめて読み出された要素データ同士は同一のウェイに書き込む。これにより、プロセッサ内の各記憶部に書き込まれたデータ群について、そのままベクトルデータとしてベクトル演算に用いることができ、より効率的なデータ収集を実現できる。
【００４０】
また、前記制御部は、前記メモリから読み出された各要素データを、前記メモリにおける前記隣接する格納領域の順序に従って前記複数の記憶部のいずれかに分類し、前記分類された各要素データを、当該分類先の各記憶部へ書き込むことが望ましい。例えば、構造体のメンバ変数の定義の順序に従ってメモリ内に格納されていた場合、当該定義の順序と分類先の記憶部を対応付ける。これにより、メモリからのデータの読み出し順序と分類先の記憶部との対応付けが容易となり、プロセッサの構成を簡略化することができる。
【００４１】
さらに、前記制御部は、複数のベクトルデータを収集するための命令に応じて、前記データ集合ごとに当該ベクトルデータの数分の連続した前記格納領域から前記複数の要素データを読み出すためのリクエストを前記メモリに対して発行し、前記リクエストに応じて前記メモリから読み出された各要素データを、当該リクエストごとに前記複数の記憶部のいずれかに分類することが望ましい。これにより、例えば、本実施の形態にかかるメモリアクセス及び記憶部への分類をギャザ命令に適用できる。
【００４２】
さらに、前記制御部は、前記複数のベクトルデータを収集するための命令に応じて、前記リクエストを発行すると共に、前記データ集合ごとに、前記書込み位置を指定し、前記分類された各要素データを、当該分類先の各記憶部における前記指定された書込み位置へ書き込むとよい。例えば、書込み位置としてウェイを指定することで、データ集合ごとのメモリアクセスに応じて分類先の記憶部の間で対応する領域に書き込むことが容易となる。
【００４３】
または、前記複数の記憶部は、前記データ集合内の各要素データの前記格納領域に対応した複数のバッファと、各バッファに対応した複数のレジスタとを含み、前記制御部は、前記複数のバッファのうち前記格納領域ごとに異なる書込み先のバッファを指定して、当該指定されたバッファに各要素データを分類して書き込み、前記複数のデータ集合の全てにおける前記複数の要素データの読み出し後に、前記複数のバッファごとに、当該バッファに書き込まれた全要素データを、当該バッファに対応する前記レジスタへまとめて書き込むようにしてもよい。このように、領域ごとに柔軟に書き換えが可能なバッファに対して個別に書き込みを行うことで、領域ごとの細かな書換えが困難なベクトルレジスタに対する書き込み回数を抑制し、処理を効率化できる。
【００４４】
さらに、前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行するベクトル演算部をさらに備えるようにしてもよい。これにより、収集したデータ群をベクトル演算に効率的に用いることができる。
【００４５】
さらに、前記ベクトル演算部は、前記複数の記憶部の少なくとも２以上を対象として前記所定の演算を実行するようにしてもよい。例えば、データ集合内で必ずしも隣接しない領域に格納された要素データに対するベクトル演算を行う場合であっても、ベクトル演算に用いない要素データも含めてまとめて読み出し、当該要素データ自体はベクトル演算の対象外とすることで、複数ワードを読み出すメモリアクセス処理を効率的に活用することができる。
【００４６】
さらに、前記複数のデータ集合は、前記複数の要素データをメンバ変数とする構造体であり、前記複数の記憶部は、前記メンバ変数に対応付けられており、前記制御部は、前記読み出した各要素データを、各メンバ変数に対応付けられた前記複数の記憶部に分類して書き込むことが望ましい。これにより、複数のデータ型を含めて定義される構造体に対するベクトル演算に対しても効率的に実現することができる。
【００４７】
続いて、本実施の形態３にかかる複数のベクトルレジスタへのギャザ命令について以下に具体的に説明する。図７は、本実施の形態３にかかるプロセッサ４０を含むデータ処理装置３０００の構成を示すブロック図である。データ処理装置３０００は、上述した実施の形態１にかかるデータ処理装置１０００の改良例であり、メモリ３０とプロセッサ４０とを備える。メモリ３０は、メモリ１０と同等の構成であり、構造体３１、３２、・・・、３３が格納されている。ここで、構造体３１等は、Ｐ（Ｐは２以上の自然数。）個のメンバ変数を持つ構造体であり、メモリ３０内にＱ（Ｑは２以上の自然数。）個の格納されているものとする。構造体とは、複数のデータ型の変数定義を有する変数である。構造体３１等をＣ言語で記述した場合、例えば、以下のような構造体配列として定義できる。
struct {
int a,
int b,
...
int p;
} z[Q];
そして、メモリ３０には、各構造体のメンバ変数に対応するデータ値が隣接する領域に格納されているものとする。尚、メモリ３０には、その他、プロセッサ４０で実行可能な各種の命令が格納されているものとする。
【００４８】
また、本実施の形態にかかるギャザ命令は、例えば、以下のオペランドを含むものとする。
・読み出し元のメモリの先頭メモリアドレスＡ（例えば、構造体配列の先頭の格納領域に相当する）
・書き込み先の先頭のレジスタ番号ｋ（ｋは、読み出し対象の構造体数Ｑに相当し、ウェイ数Ｗの上限以下の自然数。）
・連続してメモリアクセスするワード数Ｎ（Ｎは、２以上かつＰ以下の自然数）
・メモリアドレスを更新するためのサイズＣ（Ｃは、構造体のサイズＰと同一とする）
【００４９】
プロセッサ４０は、上述した実施の形態１にかかるプロセッサ２０の改良例であり、命令フェッチ回路４１と、命令デコード回路４２と、命令制御回路４３と、演算回路４４と、メモリアクセス制御回路４５と、バッファ群４６と、ベクトルレジスタ群４７とを備える。プロセッサ４０は、１クロックサイクルでＮワードのデータにアクセス可能であるものとする。命令フェッチ回路４１は、メモリ３０から命令を読み出し、命令デコード回路４２へ出力する。命令デコード回路４２は、入力された命令を解析し、解析結果（デコード結果）を命令制御回路４３へ出力する。命令制御回路４３は、入力された命令のデコード結果に基づき、メモリアクセス制御回路４５、ベクトルレジスタ群４７及び演算回路４４に対して適切な信号を出力する。
【００５０】
演算回路４４は、命令制御回路４３からの指示に応じて、ベクトルレジスタ群４７から読み出された複数のベクトルデータに対してベクトル演算を実行し、演算結果をベクトルレジスタ群４７へ書き込む。
【００５１】
バッファ群４６は、バッファ４６１及び４６２を含む。バッファ４６１及び４６２は、それぞれウェイｗ０〜ｗＱ−１の領域に区分けされ、各領域に要素データを格納するための記憶装置である。また、バッファ４６１及び４６２は、ウェイ単位に要素データの更新が可能である。尚、バッファ群４６には、Ｎ個のバッファを含めても良い。
【００５２】
ベクトルレジスタ群４７は、ベクトルレジスタ４７１、４７２、・・・、４７ｎ（ｎは、２以上の自然数。）を含む。ベクトルレジスタ４７１等は、それぞれウェイｗ０〜ｗＱ−１の領域に区分けされ、各領域に要素データを格納するための記憶装置である。つまり、ベクトルレジスタ４７１等は、１エントリでｋワードを格納することができるレジスタファイルである。但し、ベクトルレジスタ４７１等は、演算回路４４によるベクトル演算を高速に実行するため、ウェイ単位での更新はできず、レジスタ単位、つまり、Ｑ個の要素データを一括して更新するものとする。また、ベクトルレジスタ４７１とバッファ４６１とは接続されており、つまり、対応しており、格納された要素データの集合を相互に移動可能である。同様に、ベクトルレジスタ４７２とバッファ４６２とは接続されており、つまり、対応しており、格納された要素データの集合を相互に移動可能である。
【００５３】
メモリアクセス制御回路４５は、プロセッサ４０からメモリ３０へのメモリアクセス処理を制御する回路である。メモリアクセス制御回路４５は、リクエスト発行部４５０と、切替部４５１及び４５２と、データ分類部４５３とを含む。リクエスト発行部４５０は、命令制御回路４３からのメモリ読み込みリクエスト信号ＳＩＧ０を受け付けた場合、ＳＩＧ０に含まれる先頭メモリアドレスＡ及びワード数Ｎを指定した、メモリ３０に対するメモリアクセス（読み出し）のリクエストを発行する。以降、リクエスト発行部４５０は、リクエストの応答を受け付ける度に、メモリアドレスＡにサイズＣを加算して、リクエストを発行する。当該リクエストは指定されたＮワードの隣接する領域に格納された要素データの集合を要求するものである。尚、本実施の形態では、２ワードの読み出しを行うものとする。また、メモリアドレスＡにサイズＣの加算は命令制御回路４３で行っても良い。
【００５４】
データ分類部４５３は、上述したメモリアクセスのリクエストの応答として２ワードの要素データの集合を受け付け、各要素データを切替部４５１又は切替部４５２のいずれかに分類する。データ分類部４５３は、メモリ３０から各要素データが読み出された順序により、分類してもよい。つまり、先に読み出された要素データを切替部４５１へ出力し、次に読み出された要素データを切替部４５２へ出力するなどでも構わない。
【００５５】
切替部４５１及び４５２は、命令制御回路４３からの書き込み先制御信号ＳＩＧ１及びＳＩＧ２の指定に基づき、書込み先のウェイを選択して、データ分類部４５３から受け付けた要素データを書き込む。ここで、切替部４５１は、バッファ４６１と接続され、バッファ４６１内の指定されたウェイｗ０〜ｗＱ−１のいずれかに対して書き込みを行う。同様に、切替部４５２は、バッファ４６２と接続され、バッファ４６２内の指定されたウェイｗ０〜ｗＱ−１のいずれかに対して書き込みを行う。
【００５６】
ここで、命令デコード回路４２がベクトル演算命令をデコードした場合、命令制御回路４３は、ベクトルレジスタ群４７から所定のベクトルデータを読み出し、演算回路４４に対してベクトル演算を指示する。演算回路４４は、指示に基づき、複数のベクトルデータの間のベクトル演算を実行し、演算結果をベクトルレジスタ群４７へ書き込む。
【００５７】
また、命令デコード回路４２が本実施の形態にかかるギャザ命令をデコードした場合、プロセッサ４０は、メモリアクセス制御回路４５を介してメモリ３０との通信を行う。すなわち、命令制御回路４３は、リクエスト発行部４５０に対して、先頭メモリアドレスＡ及びワード数Ｎを指定したメモリ読み込みリクエスト信号ＳＩＧ０を出力する。併せて、命令制御回路４３は、切替部４５１及び４５２に対して、同じウェイ番号Ｗ（レジスタ番号ｋ）を指定した書き込み先制御信号ＳＩＧ１及びＳＩＧ２を出力する。そして、命令制御回路４３は、メモリアクセス制御回路４５がリクエストの応答を受け付ける度に、構造体数であるＱ回、ＳＩＧ０〜ＳＩＧ２を出力する。このとき、命令制御回路４３は、メモリアドレスＡにサイズＣを加算してメモリ読み込みリクエスト信号ＳＩＧ０を出力する。併せて、命令制御回路４３は、ウェイ番号Ｗに１を加算して、加算後のウェイ番号を指定した書き込み先制御信号ＳＩＧ１及びＳＩＧ２を出力する。言い換えると、命令制御回路４３は、ウェイ番号Ｗの最大値までＳＩＧ０〜ＳＩＧ２を繰り返し出力できる。
【００５８】
図８は、本実施の形態３にかかるギャザ命令の処理の流れを示すフローチャートである。また、図９は、本実施の形態３にかかる複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。以下では、図８の説明において、適宜、図９を参照するものとする。
【００５９】
まず、本実施の形態にかかるギャザ命令が設定されたものとする。そして、命令デコード回路４２は当該ギャザ命令をデコードする（Ｓ１０１）。これに伴い、命令制御回路４３は、初期設定を行う。ここでは、先頭メモリアドレスＡは構造体３１のz[0].aの格納先アドレス、レジスタ番号ｋとしてウェイ番号Ｗは“ｗ０”、ワード数Ｎは“２”、メモリアドレスの加算値ＣはＰが初期設定されたものとする。
【００６０】
次に、命令制御回路４３は、ベクトルレジスタ群４７に対して、各ベクトルレジスタから対応するバッファへデータを移動させる指示を行う（Ｓ１０２）。ここでは、ベクトルレジスタ４７１に格納された１エントリのデータ群がバッファ４６１へ格納され、ベクトルレジスタ４７２に格納された１エントリのデータ群がバッファ４６２へ格納される。
【００６１】
続いて、命令制御回路４３は、先頭メモリアドレスＡ及びワード数Ｎを指定したメモリ読み込みリクエスト信号ＳＩＧ０をリクエスト発行部４５０へ出力する。これに伴い、リクエスト発行部４５０は、Ａ及びＮを指定してメモリ３０に対してメモリアクセスのリクエストを発行する（Ｓ１０４）。ここでは、メモリ３０から構造体３１のz[0].a及びz[0].bに格納されたデータ値（以下、単に、z[0].a及びz[0].bと記載する。）が読み出される。つまり、メモリ３０から隣接した領域に格納された２ワードの要素データが読み出される。そして、データ分類部４５３は、読み出されたデータ群をワードごとにバッファへ分類する（Ｓ１０５）。ここでは、データ分類部４５３は、z[0].aを切替部４５１へ出力し、z[0].bを切替部４５２へ出力する。
【００６２】
また、ステップＳ１０３及びＳ１０４と並行して、命令制御回路４３は、ウェイｗ０を指定した書き込み先制御信号ＳＩＧ１及びＳＩＧ２を切替部４５１及び４５２に対して出力する（Ｓ１０５）。
【００６３】
ステップＳ１０３〜Ｓ１０５の後、切替部４５１及び４５２は、分類した各データを各バッファの指定されたウェイＷへ書き込む（Ｓ１０６）。ここでは、切替部４５１は、書き込み先制御信号ＳＩＧ１により指定されたバッファ４６１のウェイｗ０に対してz[0].aを書き込む。また、切替部４５２は、書き込み先制御信号ＳＩＧ２により指定されたバッファ４６２のウェイｗ０に対してz[0].bを書き込む（例えば、図９に示すバッファ４６１及び４６２のウェイｗ０）。
【００６４】
その後、命令制御回路４３は、ウェイ番号ＷがＱ−１であるか否かを判定する（Ｓ１０７）。ここでは、ウェイ番号Ｗが“０”であるため、命令制御回路４３は、Ｗに“１”を加算してｗ１とし、Ａに“Ｐ”を加算する（Ｓ１０８）。
【００６５】
続いて、命令制御回路４３は、ステップＳ１０８の結果に基づいてステップＳ１０３〜Ｓ１０７を実行する。すなわち、リクエスト発行部４５０は、メモリ３０の構造体３２のz[1].aのアドレスから２ワードのデータを読み出すためのリクエストを発行する（Ｓ１０３）。そのため、メモリ３０から構造体３２のz[1].a及びz[1].bが読み出される。そして、データ分類部４５３は、z[1].aを切替部４５１へ出力し、z[1].bを切替部４５２へ出力する（Ｓ１０４）。また、命令制御回路４３は、ウェイｗ１を指定した書き込み先制御信号ＳＩＧ１及びＳＩＧ２を切替部４５１及び４５２に対して出力する（Ｓ１０５）。その後、切替部４５１は、バッファ４６１のウェイｗ１に対してz[1].aを書き込む。また、切替部４５２は、バッファ４６２のウェイｗ１に対してz[1].bを書き込む（Ｓ１０６、例えば、図９に示すバッファ４６１及び４６２のウェイｗ１）。
【００６６】
以後、ステップＳ１０７でウェイ番号ＷがＱ−１であると判定されるまで、ステップＳ１０３〜１０８を繰り返す。そのため、ウェイ番号ＷがＱ−１である場合に、バッファ４６１のウェイｗＱ−１には、z[Q-1].aが書き込まれ、バッファ４６２のウェイｗＱ−１には、z[Q-1].bが書き込まれる（Ｓ１０６、例えば、図９に示すバッファ４６１及び４６２のウェイｗＱ−１）。
【００６７】
そして、ステップＳ１０７でウェイ番号ＷがＱ−１であると判定され、命令制御回路４３は、各バッファのデータを対応するベクトルレジスタへ書き込ませる（Ｓ１０９）。すなわち、バッファ４６１のウェイｗ０からｗＱ−１のz[0].a〜z[Q-1].aがベクトルレジスタ４７１に書き込まれ、バッファ４６２のウェイｗ０からｗＱ−１のz[0].b〜z[Q-1].bがベクトルレジスタ４７２に書き込まれる（例えば、図９に示すベクトルレジスタ４７１及び４７２のウェイｗ０〜ｗＱ−１）。その後、当該処理を終了する。
【００６８】
このように、ステップＳ１０３により、メモリ３０から２ワードの連続した領域からデータを読み出すことになる。つまり、構造体で連続した順序で定義された異なるメンバ変数がまとめて読み出される。
【００６９】
また、ステップＳ１０８で先頭メモリアドレスＡにＣを加算する処理は、Ｃを構造体のサイズＰとすれば、構造体配列のインデックスを一つ分インクリメントしていることに相当する。そのため、次のメモリロードでは、一つ隣の構造体のデータをＮワード分読み込む操作となる。
【００７０】
さらに、ステップＳ１０４及びＳ１０６で読み出した２ワードの要素データを異なるバッファに分類し、かつ、バッファ間で対応するウェイに対して各要素データが格納される。これにより、上述した既存手法２で行っていた並べ替え処理に相当する処理が、データの読み出しから書き込みという一連の処理の中で実現できる。そのため、既存手法２のようなベクトルレジスタ内の並べ替え処理は不要となり、処理時間を短縮できる。つまり、本実施の形態によりベクトルレジスタ毎に共通のメンバ変数を集めることができ、ベクトル演算の適用が容易になる。
【００７１】
ここで、上述した既存手法１について改めて説明する。図１３は、既存手法１におけるギャザ命令の概念を説明するための図である。図１３におけるデータ処理装置９０００は、既存手法１におけるギャザ命令を実現するためのハードウェア構成例を示す。データ処理装置９０００はメモリ１０ａと、プロセッサ９０とを備える。プロセッサ９０は、命令フェッチ回路９１と、命令デコード回路９２と、命令制御回路９３と、演算回路９４と、メモリアクセス制御回路９５と、バッファ９６と、ベクトルレジスタ群９７とを備える。ここで、命令フェッチ回路９１、命令デコード回路９２、演算回路９４、ベクトルレジスタ群９７は、図７と同等であってもよい。バッファ９６は、図７のバッファ４６１と同等の構成である。但し、バッファ９６は一つである。命令制御回路９３は、既存手法１のギャザ命令を受け付けた場合、メモリアクセス制御回路９５に対して、構造体配列数×メンバ変数の数の回数の指示を行う。また、メモリアクセス制御回路９５は、複数ワードをまとめて読み出すが、逐次、一の要素データを残して他を破棄する。以下にその流れを説明する。
【００７２】
図１５及び図１６は、既存手法１における複数のベクトルレジスタへのギャザ命令の動作の概念を説明するための図である。図１５及び図１６は、１クロックサイクルに同時にアクセス可能なメモリバンド幅が６４ビット、４ワード格納できるベクトルレジスタである場合の既存手法１におけるギャザ命令を用いた場合の動作を示したものである。
【００７３】
図１５及び図１６では、ベクトルレジスタ９７は４ワードであるため、既存手法１のギャザ命令は、非連続なメモリ領域に対して４回のメモリ読み出し要求を行う。これは最小でも４サイクルに渡ってメモリ１０ａに対して実施される。メモリ１０ａは１クロックで２ワード読み出し可能だが、ギャザ命令はその内の１ワードしか用いないので、必要のない１ワードは破棄される。ベクトルレジスタ９７に格納されるべき４ワードのデータがプロセッサ９０に返されるまで、先にメモリ１０ａから読み出されたデータはバッファに保持されている。１エントリのデータがバッファ９６に格納されると、ベクトルレジスタ９７に対して書き込みが行われる。具体的には次のような流れになる。
【００７４】
メモリアクセス制御回路９５は、命令制御回路９３からの指示に応じて、メモリ１０ａのarray[0].a及びarray[0].bをまとめて読み出すが、array[0].bを破棄し、array[0].aをバッファ９６のウェイｗ０に格納する。次に、メモリアクセス制御回路９５は、メモリ１０ａのarray[1].a及びarray[1].bをまとめて読み出すが、array[1].bを破棄し、array[1].aをバッファ９６のウェイｗ１に格納する。以後同様に、メモリアクセス制御回路９５は、メモリ１０ａのarray[Q-1].a及びarray[Q-1].bをまとめて読み出し、array[Q-1].bを破棄し、array[Q-1].aをバッファ９６のウェイｗＱ−１に格納する。その後、バッファ９６から１エントリのデータをベクトルレジスタ群９７の該当のレジスタへ書き込む（図１５）。
【００７５】
引き続き、メモリアクセス制御回路９５は、Ｑ回のメモリアクセスを行い、都度、array[0].a〜array[Q-1].aを破棄し、array[0].b〜array[Q-1].bをバッファ９６のウェイｗ０〜ｗＱ−１に格納する。その後、バッファ９６から１エントリのデータをベクトルレジスタ群９７の他の該当のレジスタへ書き込む（図１６）。
【００７６】
このように、既存手法１のギャザ命令を利用する方法は、本実施の形態に比べて、１クロックでメモリ上の複数ワードをロードできるというハードウェア能力を有効活用することができない。図１５及び図１６の場合には、４ワード分のデータを収集するために、少なくとも４サイクル必要になり、その間に活用可能なメモリバンド幅＝４×２ワードのうち、１／２しか活用できていない。
【００７７】
これに対して、本実施の形態にかかるプロセッサ４０では、図１３のバッファ９６に加え、複数ワードのデータをベクトルレジスタの長さの分確保してくために、必要なバッファ数を追加する。つまり、上述したように、同時に２ワードのメモリアクセスが可能であり、かつ、４ワードまでのデータを格納可能なベクトル演算命令を保持しているプロセッサ４０では、２ワード×４ワードの１６ワードを保持しながら並べ替えるためのバッファを用いるものである。
【００７８】
そして、本実施の形態にかかる複数のベクトルレジスタに対するギャザ命令は、連続する２ワードを同時にロードし、同時にロードされた各ワードを異なるバッファ４６１及び４６２に分類し、かつ、構造体ごとに書き込み位置のウェイの指定を変更するものである。そのため、バッファへの格納の段階で、データの並べ替えが同時に完了する。そのため、既存手法１のように、読み出された複数ワードの要素データのうち一つ以外を破棄する必要がない。よって、本実施の形態にかかるギャザ命令は、既存手法１のギャザ命令に比べてメモリバンド幅を有効に活用できる。
【００７９】
尚、上記の条件では、本実施の形態では１命令で８ワードのデータを収集し、そのために必要なメモリアクセスは４回であり、最後のレジスタ書き込みは２回となる。そのため、既存手法１のギャザ命令に比べてメモリアクセス処理の回数を減少させることができ、処理時間を短縮し、効率を高めることができる。
【００８０】
また、上述した既存手法２について改めて説明する。既存手法２は、連続する複数ワードをロードする命令を活用する方法である。図１７は、関連技術における複数ワードのロード命令の動作の概念を説明するための図である。図１７におけるデータ処理装置９０００ａは、既存手法２における複数ワードのロード命令を実現するためのハードウェア構成例を示す。データ処理装置９０００ａは、メモリ１０ａと、プロセッサ９０ａとを備える。プロセッサ９０ａは、プロセッサ９０と比べて、命令制御回路９３及びメモリアクセス制御回路９５が命令制御回路９３ａ及びメモリアクセス制御回路９５ａに置き換わり、バッファ９６に相当するバッファは省略している。
【００８１】
ここでは、１クロックサイクルに同時アクセス可能なメモリバンド幅が６４ビット、４ワード格納できるベクトルレジスタがある場合の、複数ワードをロードする命令を用いた場合の動作の例を述べる。
【００８２】
既存手法２では、まず、プロセッサ９０ａは、連続する複数ワードをロードする命令を利用して、０番目の構造体配列のメンバ変数array[0].a及びarray[0].bを一つのベクトルレジスタ９７に格納する。そして、プロセッサ９０ａは、構造体配列のインデックスを１加算して、複数ワードのロードを繰り返す。ここでは、Ｑ回のロード命令、つまり、最小でもＱクロックサイクルが必要である。
【００８３】
このように、既存手法２では連続した複数ワードをロードするため、ハードウェアのメモリバンド幅を６４ビットまで活用することはできる。既存手法２の場合、連続したデータを一度、同一のベクトルレジスタの連続したウェイに書き込む。そのため、構造体の異なるメンバが同一のベクトルレジスタに格納されてしまい、ベクトル演算の適用が難しくなる。
【００８４】
そこで、データのロードが全て完了した後に、プロセッサ９０ａは、ベクトルレジスタ群９７に格納されたデータに対して並べ替え処理を実行して、同一のベクトルレジスタ中に同一のメンバ変数を集める。図１８は、既存手法２におけるベクトルレジスタ内のデータの並べ替え処理の動作の概念を説明するための図である。
【００８５】
並べ替え処理の開始時は、各ベクトルレジスタにおいて、同一の構造体配列における各メンバ変数が格納されている。そのため、この状態では、ベクトル演算に用いることができない。そこで、各ベクトルレジスタに異なる構造体配列における同一のメンバ変数を格納すべく、並べ替え処理を実行する。このとき、具体的には、バッファに一時的に各ベクトルレジスタのエントリを退避しつつ、ベクトルレジスタの領域ごとにデータの入れ替えを行うことになる。しかも、ベクトルレジスタは、１エントリ単位で更新されるため、各領域ごとのデータの入れ替えには膨大なステップが必要となる。よって、当該並べ替え処理による必要命令数の増加、及び、必要レジスタ数の増加により性能が悪化する可能性が高い。
【００８６】
例えば、既存手法２の上記の例の場合、８ワードのデータをロードするために４命令を発行し、メモリアクセス回数は４回、レジスタ書き込み回数は４回となる。一方、上述したように本実施の形態かかるギャザ命令は、８ワードのデータをロードするために必要な命令発行数は１であり、レジスタ書き込み回数は２回である。つまり、既存手法２にかかる複数ワードロード命令では、同一の結果を得るために４命令が必要であったところ、本実施の形態では１命令を発行するだけである。そのため、本実施の形態にかかるギャザ命令が完了するまでに、当該命令と関係の無い別の演算命令を実行することも可能となる。また、メモリバンド幅を活用することができる。その上、並べ替えに相当する処理もバッファへデータを格納する時点で併せて行われている。このため、並べ替え処理のための命令は不要であり、命令数の増加、必要レジスタ数の増加を防ぎ、既存手法２に比べて性能低下を防ぐことができる。
【００８７】
＜実施の形態４＞
本実施の形態４は、上述した実施の形態２の改良例である。また、上述した既存手法１におけるスキャタ命令や既存手法２における複数ワードのストア命令において発生する課題を解決するものである。尚、既存手法１及び２における課題は、ギャザ命令及び複数ワードのロード命令において発生するものと同等である。
【００８８】
そこで、本実施の形態４では、上述した実施の形態２の構成に、少なくとも次の構成を備えることにより、上述した課題を解決するものである。すなわち、前記制御部は、前記読み出した各要素データについての前記格納領域を、前記複数の記憶部ごとに対応させて書き込むものである。つまり、プロセッサ内の同じ記憶部から読み出された要素データについては、異なるデータ集合の対応する格納領域の位置に書き込むことができる。そのため、ベクトル演算の結果を元の格納位置に戻すことができ、効率的にデータを書き込むことができる。
【００８９】
また、前記制御部は、複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記複数の領域ごとに、前記複数の記憶部のそれぞれの前記対応する領域から各要素データを読み出し、前記複数の領域ごとに、前記対応する領域から読み出された各要素データを統合して前記データ集合とし、前記複数の領域のそれぞれについて当該ベクトルデータの数分の連続した前記格納領域へ前記統合したデータ集合の各要素データを格納するためのリクエストを前記メモリに対して発行することが望ましい。これにより、ベクトル演算の結果を構造体のメンバ変数へ適切に並べ替えて格納することができる。
【００９０】
さらに、前記制御部は、複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記リクエストを発行すると共に、前記複数の領域ごとに、前記領域を指定し、前記指定された領域を前記対応する領域として前記複数の記憶部のそれぞれから各要素データを読み出すとよい。これにより、例えば、本実施の形態にかかる記憶部からの読み出し及びメモリアクセスをスキャタ命令に適用できる。
【００９１】
さらに、前記複数の記憶部は、前記区分された全領域の単位で読み書き可能な複数のレジスタと、各レジスタに対応し、個別の前記領域の単位で読み書き可能な複数のバッファとを含み、前記制御部は、前記複数のレジスタのそれぞれに格納された前記複数の要素データの全てを読み出して、各レジスタに対応する各バッファへまとめて書き込み、各レジスタの間で対応する領域ごとに、各バッファにおける当該領域に格納された各要素データを読み出し、当該対応する領域ごとに、当該読み出された要素データ同士をまとめて書込み用のデータ集合とし、当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込むとよい。これにより、領域ごとに柔軟に読み出しが可能なバッファに対して個別に読み出しを行うことで、領域ごとの細かな読み出しが困難なベクトルレジスタに対する読み出し回数を抑制し、処理を効率化できる。
【００９２】
さらに、前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行し、当該複数の記憶部へ当該所定の演算の結果を書き込むベクトル演算部をさらに備え、前記制御部は、前記ベクトル演算部による前記所定の演算の結果の書き込み後に、前記読み出しを開始するとよい。これにより、ベクトル演算の結果を並べ替え処理の必要なく、効率的に元のメモリへ書き戻すことができる。
【００９３】
続いて、本実施の形態４にかかる複数のベクトルレジスタへのスキャタ命令について以下に具体的に説明する。図１０は、本実施の形態４にかかるプロセッサ４０ａを含むデータ処理装置３０００ａの構成を示すブロック図である。データ処理装置３０００ａは、上述した実施の形態２にかかるデータ処理装置２０００の改良例であり、メモリ３０とプロセッサ４０ａとを備える。メモリ３０は、図７と同等の構成である。
【００９４】
また、本実施の形態にかかるスキャタ命令は、複数のベクトルレジスタｋ〜ｋ＋Ｎ−１のデータをメモリ上に配置された構造体の配列にストアする。本実施の形態にかかるスキャタ命令は、例えば、以下のオペランドを含むものとする。
・書き込み先のメモリの先頭メモリアドレスＡ（例えば、構造体配列の先頭の格納領域に相当する）
・読み出し元の先頭のレジスタ番号ｋ（ｋは、読み出し対象の構造体数Ｑに相当し、ウェイ数Ｗの上限以下の自然数。）
・連続してメモリアクセスするワード数Ｎ（Ｎは、２以上かつＰ以下の自然数）
・メモリアドレスを更新するためのサイズＣ（Ｃは、構造体のサイズＰと同一とする）
【００９５】
プロセッサ４０ａは、上述した実施の形態２にかかるプロセッサ２０ｂの改良例であり、命令フェッチ回路４１と、命令デコード回路４２と、命令制御回路４３ａと、演算回路４４と、メモリアクセス制御回路４５ａと、バッファ群４６と、ベクトルレジスタ群４７とを備える。プロセッサ４０ａは、１クロックサイクルでＮワードのデータにアクセス可能であるものとする。尚、命令フェッチ回路４１、命令デコード回路４２、演算回路４４、バッファ群４６及びベクトルレジスタ群４７は図７と同等である。但し、ベクトルレジスタ群４７のベクトルレジスタ４７１及び４７２には、予め各ウェイに要素データが格納済みであるものとする。例えば、ベクトルレジスタ４７１及び４７２には、所定のベクトル演算の結果が格納されていてもよい。
【００９６】
メモリアクセス制御回路４５ａは、プロセッサ４０ａからメモリ３０へのメモリアクセス処理を制御する回路である。メモリアクセス制御回路４５ａは、リクエスト発行部４５０ａと、切替部４５１ａ及び４５２ａと、データ統合部４５４とを含む。リクエスト発行部４５０ａは、命令制御回路４３ａからのメモリ書き込みリクエスト信号ＳＩＧ３を受け付けた場合、ＳＩＧ３に含まれる先頭メモリアドレスＡ及びワード数Ｎを指定し、データ統合部４５４により生成されたデータ集合を書き込むために、メモリ３０に対するメモリアクセス（書き込み）のリクエストを発行する。以降、リクエスト発行部４５０ａは、リクエストの応答を受け付ける度に、メモリアドレスＡにサイズＣを加算して、リクエストを発行する。当該リクエストは指定されたＮワードの隣接する領域に各要素データを格納させるものである。尚、本実施の形態では、２ワードの書き込みを行うものとする。また、メモリアドレスＡにサイズＣの加算は命令制御回路４３ａで行っても良い。
【００９７】
切替部４５１ａ及び４５２ａは、命令制御回路４３ａからの読み出し元制御信号ＳＩＧ４及びＳＩＧ５の指定に基づき、読み出し元のウェイを選択し、選択したウェイから要素データを読み出す。ここで、切替部４５１ａは、バッファ４６１と接続され、バッファ４６１内の指定されたウェイｗ０〜ｗＱ−１のいずれかから読み出しを行う。同様に、切替部４５２ａは、バッファ４６２と接続され、バッファ４６２内の指定されたウェイｗ０〜ｗＱ−１のいずれかから読み出しを行う。
【００９８】
また、命令デコード回路４２が本実施の形態にかかるスキャタ命令をデコードした場合、プロセッサ４０ａは、メモリアクセス制御回路４５ａを介してメモリ３０との通信を行う。すなわち、命令制御回路４３ａは、切替部４５１ａ及び４５２ａに対して、ウェイ番号Ｗ（レジスタ番号ｋ）を指定した読み出し元制御信号ＳＩＧ４及びＳＩＧ５を出力する。併せて、命令制御回路４３ａは、リクエスト発行部４５０ａに対して、先頭メモリアドレスＡ及びワード数Ｎを指定したメモリ書き込みリクエスト信号ＳＩＧ３を出力する。そして、命令制御回路４３は、メモリアクセス制御回路４５ａがリクエストの応答を受け付ける度に、構造体数Ｑ回、ＳＩＧ３〜ＳＩＧ５を出力する。このとき、命令制御回路４３ａは、メモリアドレスＡにサイズＣを加算してメモリ書き込みリクエスト信号ＳＩＧ３を出力する。併せて、命令制御回路４３ａは、ウェイ番号Ｗに１を加算して読み出し元制御信号ＳＩＧ４及びＳＩＧ５を出力する。言い換えると、命令制御回路４３ａは、ウェイ番号Ｗの最大値までＳＩＧ３〜ＳＩＧ５を繰り返し出力できる。
【００９９】
図１１は、本実施の形態４にかかるスキャタ命令の処理の流れを示すフローチャートである。また、図１２は、本実施の形態４にかかる複数のベクトルレジスタへのスキャタ命令の動作の概念を説明するための図である。以下では、図１１の説明において、適宜、図１２を参照するものとする。
【０１００】
まず、本実施の形態にかかるスキャタ命令が設定されたものとする。そして、命令デコード回路４２は当該スキャタ命令をデコードする（Ｓ２０１）。これに伴い、命令制御回路４３ａは、初期設定を行う。ここでは、先頭メモリアドレスＡは構造体３１のz[0].aの格納先アドレス、レジスタ番号ｋとしてウェイ番号Ｗは“ｗ０”、ワード数Ｎは“２”、メモリアドレスの加算値ＣはＰが初期設定されたものとする。
【０１０１】
次に、命令制御回路４３ａは、ベクトルレジスタ群４７に対して、各ベクトルレジスタから対応するバッファへデータを移動させる指示を行う（Ｓ２０２）。ここでは、ベクトルレジスタ４７１に格納された１エントリのデータ群がバッファ４６１へ格納され、ベクトルレジスタ４７２に格納された１エントリのデータ群がバッファ４６２へ格納される（例えば、図１２に示すバッファ４６１及び４６２のウェイｗ０〜ｗＱ−１）。
【０１０２】
続いて、命令制御回路４３ａは、ウェイｗ０を指定した読み出し元制御信号ＳＩＧ４及びＳＩＧ５を切替部４５１ａ及び４５２ａに対して出力する（Ｓ２０３）。そして、切替部４５１ａ及び４５２ａは、対応する各バッファの指定されたウェイ番号Ｗからそれぞれデータを読み出す（Ｓ２０４）。ここでは、切替部４５１ａは、読み出し元制御信号ＳＩＧ４により指定されたバッファ４６１のウェイｗ０からz[0].aを読み出す。また、切替部４５２ａは、読み出し元制御信号ＳＩＧ５により指定されたバッファ４６２のウェイｗ０からz[0].bを読み出す。
【０１０３】
そして、データ統合部４５４は、読み出されたデータ群をＮワードの書込み用データ列としてグループ化する（Ｓ２０５）。ここでは、データ統合部４５４は、z[0].a及びz[0].bをグループ化して２ワードの書込み用データ列とする。
【０１０４】
続いて、命令制御回路４３ａは、先頭メモリアドレスＡ及びワード数Ｎを指定したメモリ書き込みリクエスト信号ＳＩＧ３をリクエスト発行部４５０ａへ出力する。これに伴い、リクエスト発行部４５０ａは、Ａ及びＮを指定し、データ統合部４５４によりグループ化された書込み用データ列を書き込ませるために、メモリ３０に対してメモリアクセスのリクエストを発行する（Ｓ２０６）。ここでは、メモリ３０の構造体３１のz[0].a及びz[0].bへ書込み用データ列に含まれるz[0].a及びz[0].bのデータ値がそれぞれ書き込まれる。
【０１０５】
その後、命令制御回路４３ａは、ウェイ番号ＷがＱ−１であるか否かを判定する（Ｓ２０７）。ここでは、ウェイ番号Ｗが“０”であるため、命令制御回路４３ａは、Ｗに“１”を加算してｗ１とし、Ａに“Ｐ”を加算する（Ｓ２０８）。
【０１０６】
続いて、命令制御回路４３ａは、ステップＳ２０８の結果に基づいてステップＳ２０３〜Ｓ２０７を実行する。すなわち、命令制御回路４３ａは、ウェイｗ１を指定した読み出し元制御信号ＳＩＧ４及びＳＩＧ５を切替部４５１ａ及び４５２ａに対して出力する（Ｓ２０３）。そして、切替部４５１ａは、読み出し元制御信号ＳＩＧ４により指定されたバッファ４６１のウェイｗ１からz[1].aを読み出す。また、切替部４５２ａは、読み出し元制御信号ＳＩＧ５により指定されたバッファ４６２のウェイｗ１からz[1].bを読み出す（Ｓ２０４）。そして、データ統合部４５４は、z[1].a及びz[1].bをグループ化する（Ｓ２０５）。そして、リクエスト発行部４５０ａは、メモリ３０に対してメモリアクセスのリクエストを発行する（Ｓ２０６）。ここでは、メモリ３０の構造体３２のz[1].a及びz[1].bへ書込み用データ列に含まれるz[1].a及びz[1].bのデータ値がそれぞれ書き込まれる。
【０１０７】
以後、ステップＳ２０７でウェイ番号ＷがＱ−１であると判定されるまで、ステップＳ２０３〜２０８を繰り返す。そのため、ウェイ番号ＷがＱ−１である場合に、メモリ３０の構造体３３のz[Q-1].a及びz[Q-1].bには、バッファ４６１及び４６２のウェイｗＱ−１のデータ値が書き込まれる。そして、ステップＳ２０７でウェイ番号ＷがＱ−１であると判定された場合、当該処理を終了する。
【０１０８】
このように、ステップＳ２０３により読み出し先のウェイを指定することで、ステップＳ２０４において、Ｎ個の別々のベクトルレジスタ（バッファ）の同一のウェイからデータを読み出すことができる。そして、読み出した各要素データをグループ化し、Ｎワードのデータとしてメモリへストアする。
【０１０９】
また、ステップＳ２０６において、Ｎワードの連続した領域へ各要素データを書き込むため、メモリのバンド幅を活用することができる。
【０１１０】
さらに、ベクトル演算の実行後にその結果を構造体配列に格納する際に、明示的な並べ替え命令を利用せずに、構造体のメンバ変数をベクトルレジスタから集めることができ、メモリバンド幅を活用して効率的にデータのストアを実現できる。
【０１１１】
ここで、本実施の形態の実施例として、１クロックサイクルに同時アクセス可能なメモリバンド幅が６４ビット（２ワード）であり、４ワードを格納できるベクトルレジスタの構成において、動作を説明する。
【０１１２】
まず、ベクトルレジスタｋには構造体配列中のメンバ変数a、ベクトルレジスタｋ＋１には構造体配列中のメンバ変数ｂが格納されているとする。ベクトルレジスタｋとｋ＋１のウェイｗ０に格納されているメンバ変数ａ、ｂのペアを、メモリアドレスＡから連続する領域にストアする。次に、メモリアドレスＡにＣを加算し、次の構造体にアドレスを移してから、ベクトルレジスタｋとｋ＋１のウェイｗ１に格納されているメンバ変数ａ、ｂのペアをメモリの連続する領域にストアする。これを、ベクトルレジスタの長さである４ワード分実行する。
【０１１３】
ここで、上述した既存手法１におけるスキャタ命令について改めて説明する。図１４は、既存手法１におけるスキャタ命令の概念を説明するための図である。ベクトルレジスタ９７のデータをメモリ１０ａにスキャッタする場合、４クロックサイクルでハードウェアが提供できるメモリバンド幅×２ワードのうち、１／２しか活用できない。そして、既存手法１におけるスキャッタ命令を利用した場合は、８ワードのデータをロードするために２命令を発行し、メモリアクセス回数は８回(２ワードロードするが１ワード分は破棄するため)、レジスタ書き込み回数は２回となる。
【０１１４】
このことから、本実施の形態におけるスキャタ命令は、既存手法１におけるスキャタ命令を用いた場合に比べて、メモリアクセス回数を削減し、メモリバンド幅を有効活用できる点で優れている。
【０１１５】
また、上述した既存手法２において複数ワードをストアする命令を用いた場合、ロード命令と同様に、並べ替え処理が必要となる。そのため、本実施の形態におけるスキャタ命令は、既存手法２と比べて並べ替え処理が不要であるため、処理時間を短縮でき、処理の効率を高めることができる。
【０１１６】
＜実施の形態５＞
本実施の形態５は、上述した実施の形態３及び４を組み合わせたものである。本実施の形態５にかかるプロセッサは、例えば、上述した図７のプロセッサ４０及び４０ａの構成を備えるものであればよい。また、本実施の形態５にかかるデータ処理装置は、例えば、例えば、上述した図７のデータ処理装置３０００及び３０００ａの構成を備えるものであればよい。つまり、本実施の形態５にかかるプロセッサは、実施の形態３にかかるギャザ命令及び実施の形態４にかかるスキャタ命令を実行可能なものである。尚、本実施の形態５にかかるプロセッサの構成は、プロセッサ４０及び４０ａの構成のうち共通する部分は適宜、同一の構成を用いるとよい。
【０１１７】
例えば、まず、本実施の形態５にかかるプロセッサは、実施の形態３にかかるギャザ命令によりメモリ３０から複数の構造体のうち隣接する格納領域に格納された要素データを収集して、バッファ群４６に分類してウェイ単位に格納し、ベクトルレジスタ群４７内にメンバ変数ごとのデータ列を格納する。これにより、複数のベクトルデータを効率的に収集できる。そして、本実施の形態５にかかるプロセッサは、ベクトルレジスタ群４７を用いてベクトル演算を実行し、その結果をベクトルレジスタ群４７に格納する。その後、本実施の形態５にかかるプロセッサは、実施の形態４にかかるスキャタ命令により、ウェイ単位にバッファから要素データを読み出し、構造体単位に、各要素データを隣接する領域へ格納する。これにより、複数のベクトルデータを効率的にメモリに書き戻すことができる。
【０１１８】
このように、本実施の形態により、構造体配列からのデータをロードし、ベクトル演算を適用する場合や、ベクトル演算を適用した結果のデータを構造体配列にストアする場合において、既存手法１のようなギャザ命令及びスキャタ命令を用いる場合や、既存手法２のような連続領域へのメモリアクセス命令を利用してデータを並べ替える方法に比べて、効率的にメモリアクセスが可能である。
【０１１９】
具体的には、本実施の形態にかかるギャザ命令及びスキャタ命令は、連続した領域に対するメモリアクセスを行い、かつ非連続な領域に対してデータの収集及び書き込みを行うことができる。このため、既存手法２のような連続領域へのメモリアクセス命令を用いた場合のように、ベクトルデータの並べ替え処理を行わず、ベクトル演算を適用することができる。また、連続領域へのデータアクセスを行うため、既存手法１のようなギャザ命令及びスキャタ命令のように、バンド幅を損なうことがなく、有効に活用することができる。以上のことから、本実施の形態５においても、上述した課題を解決し、メモリとプロセッサ内の記憶部との間のデータのロード処理又はストア処理を効率的に行うことができる。
【０１２０】
＜その他の実施の形態＞
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０１２１】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
（付記１）
データ集合に含まれる複数の要素データのそれぞれと対応する複数の記憶部と、
複数の前記データ集合が格納されたメモリから、隣接する格納領域に格納された前記複数の要素データを、前記データ集合ごとにまとめて読み出し、前記読み出した各要素データを、前記複数の記憶部のうち当該要素データに対応する記憶部に分類して、前記データ集合ごとに書き込む制御部と、
を備えるプロセッサ。
（付記２）
前記制御部は、
前記読み出した各要素データについての分類先の各記憶部における書込み位置を、前記データ集合ごとに対応させて書き込む
付記１に記載のプロセッサ。
（付記３）
前記制御部は、
前記メモリから読み出された各要素データを、前記メモリにおける前記隣接する格納領域の順序に従って前記複数の記憶部のいずれかに分類し、
前記分類された各要素データを、当該分類先の各記憶部へ書き込む、
付記２に記載のプロセッサ。
（付記４）
前記制御部は、
複数のベクトルデータを収集するための命令に応じて、前記データ集合ごとに当該ベクトルデータの数分の連続した前記格納領域から前記複数の要素データを読み出すためのリクエストを前記メモリに対して発行し、
前記リクエストに応じて前記メモリから読み出された各要素データを、当該リクエストごとに前記複数の記憶部のいずれかに分類する
付記３に記載のプロセッサ。
（付記５）
前記制御部は、
前記複数のベクトルデータを収集するための命令に応じて、前記リクエストを発行すると共に、前記データ集合ごとに、前記書込み位置を指定し、
前記分類された各要素データを、当該分類先の各記憶部における前記指定された書込み位置へ書き込む
付記４に記載のプロセッサ。
（付記６）
前記複数の記憶部は、前記データ集合内の各要素データの前記格納領域に対応した複数のバッファと、各バッファに対応した複数のレジスタとを含み、
前記制御部は、
前記複数のバッファのうち前記格納領域ごとに異なる書込み先のバッファを指定して、当該指定されたバッファに各要素データを分類して書き込み、
前記複数のデータ集合の全てにおける前記複数の要素データの読み出し後に、前記複数のバッファごとに、当該バッファに書き込まれた全要素データを、当該バッファに対応する前記レジスタへまとめて書き込む
付記２に記載のプロセッサ。
（付記７）
前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行するベクトル演算部をさらに備える
付記２に記載のプロセッサ。
（付記８）
前記ベクトル演算部は、前記複数の記憶部の少なくとも２以上を対象として前記所定の演算を実行する
付記７に記載のプロセッサ。
（付記９）
前記複数のデータ集合は、前記複数の要素データをメンバ変数とする構造体であり、
前記複数の記憶部は、前記メンバ変数に対応付けられており、
前記制御部は、
前記読み出した各要素データを、各メンバ変数に対応付けられた前記複数の記憶部に分類して書き込む、
付記１乃至８のいずれか１項に記載のプロセッサ。
（付記１０）
複数の領域に区分けされ、それぞれに複数の要素データが格納された複数の記憶部と、
各記憶部の間で対応する領域に格納された各要素データを前記複数の記憶部のそれぞれから読み出し、当該対応する領域ごとに、当該読み出された要素データ同士をまとめてデータ集合とし、当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込む制御部と、
を備えるプロセッサ。
（付記１１）
前記制御部は、
前記読み出した各要素データについての前記格納領域を、前記複数の記憶部ごとに対応させて書き込む
付記１０に記載のプロセッサ。
（付記１２）
前記制御部は、
前記複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記複数の領域ごとに、前記複数の記憶部のそれぞれの前記対応する領域から各要素データを読み出し、
前記複数の領域ごとに、前記対応する領域から読み出された各要素データを統合して前記データ集合とし、
前記複数の領域のそれぞれについて当該ベクトルデータの数分の連続した前記格納領域へ前記統合したデータ集合の各要素データを格納するためのリクエストを前記メモリに対して発行する、
を備える付記１１に記載のプロセッサ。
（付記１３）
前記制御部は、
複数のベクトルデータを前記メモリへ格納するための命令に応じて、前記リクエストを発行すると共に、前記複数の領域ごとに、前記領域を指定し、
前記指定された領域を前記対応する領域として前記複数の記憶部のそれぞれから各要素データを読み出す
付記１２に記載のプロセッサ。
（付記１４）
前記複数の記憶部は、前記区分された全領域の単位で読み書き可能な複数のレジスタと、各レジスタに対応し、個別の前記領域の単位で読み書き可能な複数のバッファとを含み、
前記制御部は、
前記複数のレジスタのそれぞれに格納された前記複数の要素データの全てを読み出して、各レジスタに対応する各バッファへまとめて書き込み、
各レジスタの間で対応する領域ごとに、各バッファにおける当該領域に格納された各要素データを読み出し、
当該対応する領域ごとに、当該読み出された要素データ同士をまとめて書込み用のデータ集合とし、
当該データ集合内の各要素データをメモリ内の隣接する格納領域に書き込む
付記１１に記載のプロセッサ。
（付記１５）
前記複数の記憶部の間で対応する書込み位置ごとに所定の演算をまとめて実行し、当該複数の記憶部へ当該所定の演算の結果を書き込むベクトル演算部をさらに備え、
前記制御部は、前記ベクトル演算部による前記所定の演算の結果の書き込み後に、前記読み出しを開始する
付記１１に記載のプロセッサ。
（付記１６）
プロセッサが、
メモリ内の隣接する領域に格納された第１及び第２の要素データを、当該メモリからまとめて読み出し、
前記読み出した第１の要素データを第１の記憶部の第１の領域へ、かつ、前記読み出した第２の要素データを第２の記憶部の前記第１の領域に対応する領域へ、それぞれ書き込み、
前記メモリ内の隣接する領域に格納された第３及び第４の要素データを、当該メモリからまとめて読み出し、
前記読み出した第３の要素データを前記第１の記憶部の第２の領域へ、かつ、前記読み出した第４の要素データを前記第２の記憶部の前記第２の領域に対応する領域へ、それぞれ書き込む、
データ収集方法。
（付記１７）
プロセッサが、
第１の記憶部の第１の領域から第１の要素データを読み出し、
第２の記憶部の前記第１の領域に対応する領域から第２の要素データを読み出し、
前記第１の要素データ及び前記第２の要素データをメモリ内の隣接する格納領域にまとめて書き込み、
前記第１の記憶部の第２の領域から第３の要素データを読み出し、
前記第２の記憶部の前記第２の領域に対応する領域から第４の要素データを読み出し、
前記第３の要素データ及び前記第４の要素データを前記メモリ内の前記格納領域以外の隣接する格納領域にまとめて書き込む、
データ書き込み方法。
（付記１８）
複数のデータ集合が格納されたメモリと、
前記複数のデータ集合のそれぞれに含まれる複数の要素データのそれぞれと対応する複数の記憶部を有するプロセッサとを備え、
前記プロセッサは、
前記メモリから、隣接する格納領域に格納された前記複数の要素データを、前記データ集合ごとにまとめて読み出し、
前記読み出した各要素データを、前記複数の記憶部のうち当該要素データに対応する記憶部に分類して書き込む
データ処理装置。
（付記１９）
メモリと、
複数の領域に区分けされ、それぞれに複数の要素データが格納された複数の記憶部と、各記憶部の間で対応する領域に格納された各要素データを前記複数の記憶部のそれぞれから読み出し、当該対応する領域ごとに、当該読み出された要素データ同士をまとめてデータ集合とし、当該データ集合内の各要素データを前記メモリ内の隣接する格納領域に書き込む制御部と、を備えるプロセッサと、
を備えるデータ処理装置。
【０１２２】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【０１２３】
１０００  データ処理装置
１０００ａ  データ処理装置
２０００  データ処理装置
２０００ａ  データ処理装置
１０  メモリ
１０ａ  メモリ
１１  データ集合
１２  データ集合
１０１  要素データａ
１０２  要素データｂ
１０３  要素データｃ
１０４  要素データｄ
２０  プロセッサ
２０ａ  プロセッサ
２０ｂ  プロセッサ
２０ｃ  プロセッサ
２１  記憶部
２２  記憶部
２０１  領域
２０２  領域
２０３  領域
２０４  領域
２３  制御部
２３ａ  制御部
２３ｂ  制御部
２３ｃ  制御部
ｒｇｋ  レジスタ
ｒｇｋ＋１  レジスタ
ｒｇｋ＋Ｎ−１  レジスタ
ｗ０  ウェイ
ｗ１  ウェイ
ｗＱ−１  ウェイ
３０００  データ処理装置
３０００ａ  データ処理装置
３０  メモリ
３１  構造体
３２  構造体
３３  構造体
４０  プロセッサ
４１  命令フェッチ回路
４２  命令デコード回路
４３  命令制御回路
４３ａ  命令制御回路
４４  演算回路
４５  メモリアクセス制御回路
４５ａ  メモリアクセス制御回路
４５０  リクエスト発行部
４５０ａ  リクエスト発行部
４５１  切替部
４５２  切替部
４５１ａ  切替部
４５２ａ  切替部
４５３  データ分類部
４５４  データ統合部
４６  バッファ群
４６１  バッファ
４６２  バッファ
４７  ベクトルレジスタ群
４７１  ベクトルレジスタ
４７２  ベクトルレジスタ
４７ｎ  ベクトルレジスタ
ＳＩＧ０  メモリ読み込みリクエスト信号
ＳＩＧ１  書き込み先制御信号
ＳＩＧ２  書き込み先制御信号
ＳＩＧ３  メモリ書き込みリクエスト信号
ＳＩＧ４  読み出し元制御信号
ＳＩＧ５  読み出し元制御信号
９０００  データ処理装置
９０００ａ  データ処理装置
９０  プロセッサ
９０ａ  プロセッサ
９１  命令フェッチ回路
９２  命令デコード回路
９３  命令制御回路
９３ａ  命令制御回路
９４  演算回路
９５  メモリアクセス制御回路
９５ａ  メモリアクセス制御回路
９６  バッファ
９７  ベクトルレジスタ群
【図１】
2015225427.tif 000003
【図２】
2015225427.tif 000004
【図３】
2015225427.tif 000005
【図４】
2015225427.tif 000006
【図５】
2015225427.tif 000007
【図６】
2015225427.tif 000008
【図７】
2015225427.tif 000009
【図８】
2015225427.tif 000010
【図９】
2015225427.tif 000011
【図１０】
2015225427.tif 000012
【図１１】
2015225427.tif 000013
【図１２】
2015225427.tif 000014
【図１３】
2015225427.tif 000015
【図１４】
2015225427.tif 000016
【図１５】
2015225427.tif 000017
【図１６】
2015225427.tif 000018
【図１７】
2015225427.tif 000019
【図１８】
2015225427.tif 000020