(57)【特許請求の範囲】
【請求項１】
互いに異なるアドレスに対応づけられた所定サイズのメモリブロックを有するｎ（ｎは２以上の整数）個のメモリバンクを備えたキャッシュメモリに、並び順が決まっているｍ個のデータ要素を転送する情報処理装置であって、
ｎ個のレジスタバンクを有し、前記ｍ個のデータ要素が、前記並び順に前記データ要素単位でインタリーブされて前記ｎ個のレジスタバンクに順番に格納される、格納手段と、
データ要素間のストライドを示すストライド情報と、前記並び順が先頭のデータ要素のアドレスである開始アドレスと、を受け付けると、前記所定サイズを前記ストライドで割って処理サイズを算出し、また、前記開始アドレスがいずれかのメモリブロックの先頭のアドレスと一致するかを判断する制御手段と、
前記ｍ個のデータ要素を、前記並び順が連続しかつ前記処理サイズとｎを乗算した値の数のデータ要素からなる処理グループに分けていき、前記開始アドレスがいずれかのメモリブロックの先頭のアドレスと一致すると判断された場合には、前記ｍ個のデータ要素を前記処理グループに分けるごとに、当該処理グループ内のデータ要素を前記並び順で前記処理サイズの数ごとに分けたブロックデータのそれぞれから、１つずつ、前記データ要素が並列に読み出されて、当該処理グループ内のデータ要素が全て読み出されるように、前記ｎ個のレジスタバンクから並列に前記データ要素を読み出し前記キャッシュメモリに転送する処理手段と、を含む情報処理装置。
【請求項２】
前記処理手段は、前記開始アドレスが、いずれかのメモリブロック内の先頭のアドレスと一致しない場合には、前記ｍ個のデータ要素を前記処理グループに分けるごとに、当該処理グループ内のデータ要素に前記開始アドレスと前記ストライド情報とに基づいてアドレスを割り当てて当該アドレスに基づいて当該処理グループ内のデータ要素を前記メモリブロックのいずれかに対応するｎ＋１個のブロックデータに分けた際に、当該ｎ＋１個のブロックデータの中でアドレスが最も大きい最後部ブロックデータ以外のｎ個のブロックデータのそれぞれから、１つずつ、前記データ要素が並列に読み出され、その後、前記ｎ＋１個のブロックデータのうちアドレスが最も小さい先頭ブロックデータ内のデータ要素が全て読み出されると、前記ｎ＋１個のブロックデータのうち前記先頭ブロックデータ以外のｎ個のブロックデータのそれぞれから、１つずつ、読み出されていない前記データ要素が並列に読み出されて、当該処理グループ内のデータ要素が全て読み出されるように、前記ｎ個のレジスタバンクから並列に前記データ要素を読み出し前記キャッシュメモリに転送する、請求項１に記載の情報処理装置。
【請求項３】
互いに異なるアドレスに対応づけられた所定サイズのメモリブロックを有するｎ（ｎは２以上の整数）個のメモリバンクを備えたキャッシュメモリに、並び順が決まっているｍ個のデータ要素を転送する情報処理装置でのデータ転送方法であって、
前記ｍ個のデータ要素を、前記並び順に前記データ要素単位でインタリーブしてｎ個のレジスタバンクに順番に格納し、
データ要素間のストライドを示すストライド情報と、前記並び順が先頭のデータ要素のアドレスである開始アドレスと、を受け付けると、前記所定サイズを前記ストライドで割って処理サイズを算出し、また、前記開始アドレスがいずれかのメモリブロックの先頭のアドレスと一致するかを判断し、
前記ｍ個のデータ要素を、前記並び順が連続しかつ前記処理サイズとｎを乗算した値の数のデータ要素からなる処理グループに分けていき、前記開始アドレスがいずれかのメモリブロックの先頭のアドレスと一致すると判断された場合には、前記ｍ個のデータ要素を前記処理グループに分けるごとに、当該処理グループ内のデータ要素を前記並び順で前記処理サイズの数ごとに分けたブロックデータのそれぞれから、１つずつ、前記データ要素が並列に読み出されて、当該処理グループ内のデータ要素が全て読み出されるように、前記ｎ個のレジスタバンクから並列に前記データ要素を読み出し前記キャッシュメモリに転送する、データ転送方法。
【請求項４】
前記開始アドレスが、いずれかのメモリブロック内の先頭のアドレスと一致しない場合には、前記ｍ個のデータ要素を前記処理グループに分けるごとに、当該処理グループ内のデータ要素に前記開始アドレスと前記ストライド情報とに基づいてアドレスを割り当てて当該アドレスに基づいて当該処理グループ内のデータ要素を前記メモリブロックのいずれかに対応するｎ＋１個のブロックデータに分けた際に、当該ｎ＋１個のブロックデータの中でアドレスが最も大きい最後部ブロックデータ以外のｎ個のブロックデータのそれぞれから、１つずつ、前記データ要素が並列に読み出され、その後、前記ｎ＋１個のブロックデータのうちアドレスが最も小さい先頭ブロックデータ内のデータ要素が全て読み出されると、前記ｎ＋１個のブロックデータのうち前記先頭ブロックデータ以外のｎ個のブロックデータのそれぞれから、１つずつ、読み出されていない前記データ要素が並列に出力されて、当該処理グループ内のデータ要素が全て出力されるように、前記ｎ個のレジスタバンクから並列に前記データ要素を読み出し前記キャッシュメモリに転送する、請求項３に記載のデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびデータ転送方法に関し、特には、複数のバンク（メモリバンク）を有するキャッシュメモリにデータを転送する情報処理装置およびデータ転送方法に関する。
【背景技術】
【０００２】
情報処理装置であるベクトル計算機は、１マシンクロック（以下、単に「１クロック」と称する）ごとに複数のデータを同時に処理するために、複数のベクトルパイプラインを有している。ベクトル計算機は、１つのベクトル命令で処理されるベクトルデータ内の複数の要素を、複数のベクトルパイプラインのいずれかに格納する。各ベクトルパイプラインは、自己に格納された各要素を処理する。例えば、非特許文献１の２１４ページには、並列パイプラインおよび多重並列パイプラインが図示されている。【０００３】
ベクトルデータのベクトル長が短い場合でも、各ベクトルパイプラインでの処理時間が均等になるように、ベクトルデータは、要素ごとに、各ベクトルパイプラインにインタリーブされて保持される。【０００４】
具体的には、ベクトルパイプラインがＮ個ある場合、ベクトルパイプライン０は、要素０、要素Ｎ、要素２Ｎ、…を処理し、ベクトルパイプライン１は、要素１、要素Ｎ＋１、要素２Ｎ＋１、…を処理し、…、ベクトルパイプラインＮ−１は、要素Ｎ−１、要素２Ｎ−１、要素３Ｎ−１、…を処理することになる。【０００５】
１クロックごとに複数のデータを同時に処理する手法は、データの演算が行われるときだけでなく、データのロードまたはデータのストアが行われるときでも使用される。例えば、ベクトルパイプラインと同じ数の入出力ポートが、キャッシュメモリまたはメモリに設けられ、これら入出力ポートを使用することによって、キャッシュメモリまたはメモリに対して、データのロードまたはデータのストアを行える構成が知られている。【０００６】
主記憶装置では、ベクトルパイプラインの入出力ポートと１対１で対応する入出力ポートごとに、データ格納部が設けられる。【０００７】
アクセスすべき主記憶装置のアドレスが指定されれば、主記憶装置内の入出力ポートと主記憶装置内のデータ格納部とが、一意に決定される。【０００８】
また、一般にベクトル計算機にて使用される主記憶装置では、データが要素ごとにインタリーブされて格納される。これは、ベクトル計算機が、主記憶装置の連続するアドレスに格納された複数のデータをアクセスした場合に、複数のデータ格納部が並列にアクセスされることにより、最大のデータアクセス性能が達成できるようにするためである。【０００９】
上述したベクトル計算機、具体的には、複数のベクトルパイプラインと複数の入出力ポートとを持ったベクトルプロセッサが、特許文献１に開示されている。【００１０】
また、ベクトルレジスタに格納された多数の要素を、連続する複数の要素ごとに、主記憶装置のデータ格納部にインタリーブして格納する方法が、特許文献２に開示されている。【００１１】
このベクトルレジスタは、複数のバンクを有する。各バンクは、ベクトルパイプラインと１対１で対応する。各バンクは、自己と対応するベクトルパイプラインに含まれ、要素（具体的には、要素を構成するデータ）を格納する。各バンクには、連続番号が付与されている。各バンク内の要素は、クロスバスイッチを介して、主記憶装置に転送される。【００１２】
特許文献２に記載のベクトル処理装置は、各バンクにおいて要素の読み出しを開始する位置として、そのバンクに付与された連続番号を用いることによって、各バンクから読み出された要素が、クロスバスイッチの出力ポートで競合するという問題を回避している。【００１３】
一方、ベクトル計算機が利用する主記憶装置にキャッシュメモリを追加して、データへのアクセス時間の短縮および高いスループットを実現することは可能である。【００１４】
キャッシュメモリは、メモリアドレスが連続している複数のデータを、ブロックデータとして格納する。以下では、ブロックデータのメモリアドレスにて規定される記憶領域、すなわち、ブロックデータが格納される記憶領域を「ブロック」と称する。【００１５】
キャッシュメモリは、ブロックのメモリアドレスとブロックの状態とを記憶しているアドレスアレイと、ブロックデータを格納しているデータアレイと、を含む。キャッシュメモリは、リクエストされたメモリアドレスが、アドレスアレイに格納されているかを検索することで、キャッシュメモリが行う処理を決定して動作する。【００１６】
キャッシュメモリが使用された場合、ベクトルデータをストアする処理（以下「ベクトルストア」と称する）のような、メモリアドレスが連続している複数のデータを書き込む処理では、あるブロックに対する複数の書き込みリクエストが、キャッシュメモリに連続して到着することになる。【００１７】
ある書き込みリクエストにてアクセスされるブロックが、１つ前の書き込みリクエストにてアクセスされるブロックと同じ場合には、キャッシュメモリは、アドレスアレイを検索することなく、キャッシュメモリの動作を決定することが可能である。【００１８】
したがって、メモリアドレスが連続するデータの書き込みリクエストが、連続してキャッシュメモリに到着するように、ベクトル計算機が動作すれば、キャッシュメモリがアドレスアレイを検索する時間と消費電力を削減することができる。
【先行技術文献】
【特許文献】
【００１９】
【特許文献１】特開２００５−３８１８５号公報
【特許文献２】国際公開第２００８／１１１５００パンフレット
【非特許文献】
【００２０】
【非特許文献１】シドニー・ファーンバック著「スーパーコンピュータ」（長島重夫訳、1988年、パーソナルメディア社刊）
【発明の概要】
【発明が解決しようとする課題】
【００２１】
特許文献２が開示しているベクトルストア方法では、次のような問題がある。【００２２】
まず、バンクに付与された連続番号を、各バンクにおける要素の読み出しを開始する位置として用いる手法では、各バンクから読み出された要素が、クロスバスイッチの出力ポートで競合することは回避できるが、主記憶装置内の同じデータ格納部に格納される、メモリアドレスが連続する複数の要素が、連続して主記憶装置に書き込まれなくなる。【００２３】
そのため、主記憶装置にキャッシュメモリが付加された場合、同じブロックに格納される複数の要素を連続してキャッシュメモリに書き込むことができず、アドレスアレイを検索する時間および消費電力を削減することができない。例えば、特許文献２の図８に示されたように、１〜７番要素は、０番要素が出力されてから２５クロック分遅れて出力される。【００２４】
図１は、ベクトルパイプライン数が８、キャッシュメモリのブロックサイズが６４Ｂ（バイト）、キャッシュメモリのデータ格納部の数が８の場合に、特許文献２で開示されている手法を実行した場合に生じる問題点を説明するための図である。【００２５】
図１の上半分には、８個のベクトルパイプライン（ベクトルパイプライン０〜７）における１２８個の要素（要素０〜１２７）の配置、さらに言えば、８個のベクトルパイプライン内のバンクにて構成されるベクトルレジスタ８１０における要素０〜１２７の配置が示されている。なお、要素０から要素１２７を、要素の番号順に並べると、ベクトルデータが復元される。【００２６】
図１の下半分には、１クロックごとに、クロスバスイッチ１１１から、キャッシュメモリ内の８個のデータ格納部（データ格納部０〜７）に出力される要素が示されている。図１の下半分において、太字の枠８１１は、キャッシュメモリのブロックの境界を示す。【００２７】
ここで、ベクトルストアの開始アドレスは「０」、ストライドは８Ｂとしている。キャッシュメモリのブロックサイズが６４Ｂであり、ストライドが８Ｂであるため、各データ格納部内の各ブロックには、メモリアドレスが連続する８個の要素、つまり、要素番号が連続する８個の要素が格納される。【００２８】
図１の上半分に示された太字の縦線８０１は、キャッシュメモリのブロックの境界を示している。例えば、要素０〜７までが、キャッシュメモリの同一のブロックに格納される。【００２９】
各ベクトルパイプラインは、読み出しポインタを有する。各読み出しポインタは、ベクトルパイプライン内のバンクから要素を読み出す位置を、図１の上半分に示された読み出し位置０〜１５を用いて指定する。【００３０】
図１の上半分に示された各要素８０２（太字の四角で示されている要素、具体的には、要素０、要素９、要素１８、要素２７、要素３６、要素４５、要素５４、要素６３）は、各ベクトルパイプライン内のバンクから最初に読み出される要素である。【００３１】
最初のクロックが入力されると、以下のような動作が実行される。【００３２】
ベクトルパイプライン０の読み出しポインタは、読み出し位置として「０」を出力する。ベクトルパイプライン１の読み出しポインタは、読み出し位置として「１」を出力する。ベクトルパイプライン２の読み出しポインタは、読み出し位置として「２」を出力する。ベクトルパイプライン３の読み出しポインタは、読み出し位置として「３」を出力する。ベクトルパイプライン４の読み出しポインタは、読み出し位置として「４」を出力する。ベクトルパイプライン５の読み出しポインタは、読み出し位置として「５」を出力する。ベクトルパイプライン６の読み出しポインタは、読み出し位置として「６」を出力する。ベクトルパイプライン７の読み出しポインタは、読み出し位置として「７」を出力する。【００３３】
このため、ベクトルパイプライン０内のバンクからは、読み出し位置「０」に対応する要素０が読み出され、要素０はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン１内のバンクからは、読み出し位置「１」に対応する要素９が読み出され、要素９はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン２内のバンクからは、読み出し位置「２」に対応する要素１８が読み出され、要素１８はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン３内のバンクからは、読み出し位置「３」に対応する要素２７が読み出され、要素２７はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン４内のバンクからは、読み出し位置「４」に対応する要素３６が読み出され、要素３６はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン５内のバンクからは、読み出し位置「５」に対応する要素４５が読み出され、要素４５はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン６内のバンクからは、読み出し位置「６」に対応する要素５４が読み出され、要素５４はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン７内のバンクからは、読み出し位置「７」に対応する要素６３が読み出され、要素６３はクロスバスイッチ１１１に入力される。【００３４】
要素０、要素９、要素１８、要素２７、要素３６、要素４５、要素５４および要素６３は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ内の、データ格納部０、データ格納部１、データ格納部２、データ格納部３、データ格納部４、データ格納部５、データ格納部６、データ格納部７に格納される（図１のｔｉｍｅ１参照）。このため、クロスバスイッチ１１１では出力の競合は発生しない。【００３５】
続いて、２番目のクロックが入力されると、以下のような動作が実行される。【００３６】
ベクトルパイプライン０の読み出しポインタは、読み出し位置として「１」を出力する。ベクトルパイプライン１の読み出しポインタは、読み出し位置として「２」を出力する。ベクトルパイプライン２の読み出しポインタは、読み出し位置として「３」を出力する。ベクトルパイプライン３の読み出しポインタは、読み出し位置として「４」を出力する。ベクトルパイプライン４の読み出しポインタは、読み出し位置として「５」を出力する。ベクトルパイプライン５の読み出しポインタは、読み出し位置として「６」を出力する。ベクトルパイプライン６の読み出しポインタは、読み出し位置として「７」を出力する。ベクトルパイプライン７の読み出しポインタは、読み出し位置として「８」を出力する。【００３７】
このため、ベクトルパイプライン０内のバンクからは要素８が読み出され、要素８はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン１内のバンクからは要素１７が読み出され、要素１７はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン２内のバンクからは要素２６が読み出され、要素２６はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン３内のバンクからは要素３５が読み出され、要素３５はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン４内のバンクからは要素４４が読み出され、要素４４はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン５内のバンクからは要素５３が読み出され、要素５３はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン６内のバンクからは要素６２が読み出され、要素６２はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン７内のバンクからは要素７１が読み出され、要素７１はクロスバスイッチ１１１に入力される。【００３８】
要素８、要素１７、要素２６、要素３５、要素４４、要素５３、要素６２および要素７１は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ内の、データ格納部１、データ格納部２、データ格納部３、データ格納部４、データ格納部５、データ格納部６、データ格納部７、データ格納部０に格納される（図１のｔｉｍｅ２参照）。このため、クロスバスイッチ１１１では出力の競合は発生しない。【００３９】
以下、３番目のクロック〜１６番目のクロックのそれぞれが入力された際には、図１に示すように各ベクトルパイプラインから各要素が読み出される。【００４０】
このように、１つのクロックに応じて各ベクトルパイプラインから読み出される要素は、互いに異なるデータ格納部に格納されるため、クロスバスイッチ１１１での出力の競合が発生しない。そのため、クロスバスイッチ１１１でのベクトルストアの性能低下は発生しない。【００４１】
しかしながら、図１の下半分に示す通り、キャッシュメモリのデータ格納部内の同じブロックに格納される複数の要素が、そのブロックを有するデータ格納部に連続して到着しない場合がある。【００４２】
例えば、データ格納部０では、同じブロックに格納される要素０と要素１〜７とは、互いに８クロック離れて到着する。そして、要素０と要素１〜７の間に、他のブロックに格納される要素７１〜６４が入り込んでいる。【００４３】
このため、同一ブロックに格納される要素が、連続してデータ格納部に到着する場合のように、アドレスアレイを検索する時間および消費電力を削減することができない。【００４４】
次に、特許文献２には、要素０が、同一ブロックにメモリアドレス順に格納される複数の要素のうちの最初の要素となる例だけが示されているが、通常、要素０は、任意のメモリアドレスに書き込むことが可能である。【００４５】
要素０が、ブロックの先頭アドレス以外に書き込まれる場合、単純にバンク番号（ベクトルパイプライン番号）を各バンクの読み出し開始位置として用いる手法では、クロスバスイッチの出力ポートでの要素の競合を完全には回避することができない。このため、ベクトルストアの実行時間が増加する。【００４６】
さらに、キャッシュメモリ内の同じデータ格納部内の異なるブロックに格納される２つの要素が、クロスバスイッチの出力ポートで競合する。このため、場合によると、同一ブロックに格納される要素が、連続してデータ格納部に到着しなくなる。よって、アドレスアレイを検索する時間および消費電力を削減することができなくなる。【００４７】
図２は、ベクトルパイプライン数が８、キャッシュメモリのブロックサイズが６４Ｂ、キャッシュメモリのデータ格納部の数が８の場合に、特許文献２で開示されている手法を実行した場合に生じる問題点を説明するための図である。【００４８】
図２の上半分には、８個のベクトルパイプライン（ベクトルパイプライン０〜７）における１２８個の要素（要素０〜１２７）の配置、さらに言えば、８個のベクトルパイプライン内のバンクにて構成されるベクトルレジスタ９１０における要素０〜１２７の配置が示されている。なお、要素０から要素１２７を、要素の番号順に並べると、ベクトルデータが復元される。【００４９】
図２の下半分には、１クロックごとに、クロスバスイッチ１１１から、キャッシュメモリ内の８個のデータ格納部（データ格納部０〜７）に出力される要素が示されている。【００５０】
ここで、ベクトルストアの開始アドレスは「８」、ストライドは８Ｂとしている。キャッシュメモリのブロックサイズが６４Ｂであり、ストライドが８Ｂであるため、各データ格納部内の各ブロックには、メモリアドレスが連続する８個の要素、つまり、要素番号が連続する８個の要素が格納可能である。【００５１】
図２の上半分に示された太字の縦線９０１は、キャッシュメモリのブロックの境界を示している。例えば、要素７〜１４までが、キャッシュメモリの同一のブロックに格納される。【００５２】
図２の上半分に示された各要素９０２（太字の四角で示されている要素、具体的には、要素０、要素９、要素１８、要素２７、要素３６、要素４５、要素５４、要素６３）は、各ベクトルパイプライン内のバンクから最初に読み出される要素である。【００５３】
最初のクロックが入力されると、以下のような動作が実行される。【００５４】
ベクトルパイプライン０の読み出しポインタは、読み出し位置として「０」を出力する。ベクトルパイプライン１の読み出しポインタは、読み出し位置として「１」を出力する。ベクトルパイプライン２の読み出しポインタは、読み出し位置として「２」を出力する。ベクトルパイプライン３の読み出しポインタは、読み出し位置として「３」を出力する。ベクトルパイプライン４の読み出しポインタは、読み出し位置として「４」を出力する。ベクトルパイプライン５の読み出しポインタは、読み出し位置として「５」を出力する。ベクトルパイプライン６の読み出しポインタは、読み出し位置として「６」を出力する。ベクトルパイプライン７の読み出しポインタは、読み出し位置として「７」を出力する。【００５５】
このため、ベクトルパイプライン０内のバンクからは要素０が読み出され、要素０はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン１内のバンクからは要素９が読み出され、要素９はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン２内のバンクからは要素１８が読み出され、要素１８はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン３内のバンクからは要素２７が読み出され、要素２７はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン４内のバンクからは要素３６が読み出され、要素３６はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン５内のバンクからは要素４５が読み出され、要素４５はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン６内のバンクからは要素５４が読み出され、要素５４はクロスバスイッチ１１１に入力される。また、ベクトルパイプライン７内のバンクからは要素６３が読み出され、要素６３はクロスバスイッチ１１１に入力される。【００５６】
要素０、要素９、要素１８、要素２７、要素３６、要素４５、要素５４および要素６３は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ内の、データ格納部０、データ格納部１、データ格納部２、データ格納部３、データ格納部４、データ格納部５、データ格納部６、データ格納部０に格納される。このため、クロスバスイッチ１１１では、データ格納部０への出力において、要素０と要素６３の競合が発生する。そのため、クロスバスイッチ１１１で、ベクトルストアの性能が低下する。【００５７】
また、図２では、要素０が要素６３よりも先にデータ格納部０に到着しているが、要素０と要素６３の到着順序は、クロスバスイッチ１１１での競合調停の手法に依存する。そのため、同じブロックに格納される要素が連続してデータ格納部に到着することが保証できなくなる。【００５８】
本発明の目的は、上述した課題である、同じブロックに格納される要素が連続してデータ格納部に到着しないことを解決可能な情報処理装置およびデータ転送方法を提供することにある。
【課題を解決するための手段】
【００５９】
本発明の情報処理装置は、互いに異なるアドレスに対応づけられた所定サイズのメモリブロックを有するｎ（ｎは２以上の整数）個のメモリバンクを備えたキャッシュメモリに、並び順が決まっているｍ個のデータ要素を転送する情報処理装置であって、
ｎ個のレジスタバンクを有し、前記ｍ個のデータ要素が、前記並び順に前記データ要素単位でインタリーブされて前記ｎ個のレジスタバンクに順番に格納される、格納手段と、
データ要素間のストライドを示すストライド情報と、前記並び順が先頭のデータ要素のアドレスである開始アドレスと、を受け付けると、前記所定サイズを前記ストライドで割って処理サイズを算出し、また、前記開始アドレスがいずれかのメモリブロックの先頭のアドレスと一致するかを判断する制御手段と、
前記ｍ個のデータ要素を、前記並び順が連続しかつ前記処理サイズとｎを乗算した値の数のデータ要素からなる処理グループに分けていき、前記開始アドレスがいずれかのメモリブロックの先頭のアドレスと一致すると判断された場合には、前記ｍ個のデータ要素を前記処理グループに分けるごとに、当該処理グループ内のデータ要素を前記並び順で前記処理サイズの数ごとに分けたブロックデータのそれぞれから、１つずつ、前記データ要素が並列に読み出されて、当該処理グループ内のデータ要素が全て読み出されるように、前記ｎ個のレジスタバンクから並列に前記データ要素を読み出し前記キャッシュメモリに転送する処理手段と、を含む。【００６０】
本発明のデータ転送方法は、互いに異なるアドレスに対応づけられた所定サイズのメモリブロックを有するｎ（ｎは２以上の整数）個のメモリバンクを備えたキャッシュメモリに、並び順が決まっているｍ個のデータ要素を転送する情報処理装置でのデータ転送方法であって、
前記ｍ個のデータ要素を、前記並び順に前記データ要素単位でインタリーブしてｎ個のレジスタバンクに順番に格納し、
データ要素間のストライドを示すストライド情報と、前記並び順が先頭のデータ要素のアドレスである開始アドレスと、を受け付けると、前記所定サイズを前記ストライドで割って処理サイズを算出し、また、前記開始アドレスがいずれかのメモリブロックの先頭のアドレスと一致するかを判断し、
前記ｍ個のデータ要素を、前記並び順が連続しかつ前記処理サイズとｎを乗算した値の数のデータ要素からなる処理グループに分けていき、前記開始アドレスがいずれかのメモリブロックの先頭のアドレスと一致すると判断された場合には、前記ｍ個のデータ要素を前記処理グループに分けるごとに、当該処理グループ内のデータ要素を前記並び順で前記処理サイズの数ごとに分けたブロックデータのそれぞれから、１つずつ、前記データ要素が並列に読み出されて、当該処理グループ内のデータ要素が全て読み出されるように、前記ｎ個のレジスタバンクから並列に前記データ要素を読み出し前記キャッシュメモリに転送する。
【発明の効果】
【００６１】
本発明によれば、キャッシュメモリにデータ要素を転送して格納する際に、キャッシュメモリがアドレスアレイを検索する時間と消費電力を削減することが可能になる。
【図面の簡単な説明】
【００６２】
【図１】特許文献２に記載の技術の問題点を説明する図である。
【図２】特許文献２に記載の技術の問題点を説明する図である。
【図３】本発明の第１実施形態のベクトルプロセッサを示す図である。
【図４】ベクトルストア制御部および読み出し位置制御部を示す図である。
【図５】読み出し位置制御部での動作を表すフローチャートである。
【図６】アドレス計算部を示す図である。
【図７】ベクトルストアの動作を示す図である。
【図８】ベクトルストアの動作を示す図である。
【図９】ベクトルストアの動作を示す図である。
【発明を実施するための形態】
【００６３】
以下、本発明の一実施形態の情報処理装置であるベクトルプロセッサについて図面を参照して詳細に説明する。なお、本実施形態の情報処理装置は、ベクトルプロセッサに限らず、複数の演算用パイプラインを有し、各演算用パイプラインが格納するデータを、キャッシュメモリ内の複数のバンク（メモリバンク）に転送する情報処理装置であればよい。
【００６４】
図３は、本実施形態のベクトルプロセッサの構成例を示すブロック図である。
【００６５】
図３において、ベクトルプロセッサは、ＣＰＵ（Central  Processing  Unit）１０１を含む。
【００６６】
ＣＰＵ１０１は、命令発行制御部１０２と、ベクトル処理部１０３と、アドレス計算部１０４と、を含む。また、ＣＰＵ１０１は、キャッシュメモリ１０５を介して、主記憶装置１０６に接続されている。
【００６７】
キャッシュメモリ１０５は、複数のデータ格納部１０７−０〜１０７−７を含む。
【００６８】
各データ格納部１０７−０〜１０７−７は、メモリバンクである。各データ格納部１０７−０〜１０７−７は、メモリアドレスが連続する複数個の要素または１つの要素を格納するための格納領域（メモリブロック、以下「ブロック」と称する）を含む。各データ格納部１０７−０〜１０７−７は、複数のブロックを有する。なお、各ブロックのサイズ（所定サイズ）は、６４Ｂである。また、要素のサイズは、８Ｂである。また、メモリアドレスは、６４ｂｉｔである。
【００６９】
本実施形態では、データ格納部１０７−０は、メモリアドレス０〜５６のデータをキャッシュするためのブロック、および、メモリアドレス５１２〜５６８のデータをキャッシュするためのブロックを有する。
【００７０】
データ格納部１０７−１は、メモリアドレス６４〜１２０のデータをキャッシュするためのブロック、および、メモリアドレス５７６〜６３２のデータをキャッシュするためのブロックを有する。
【００７１】
データ格納部１０７−２は、メモリアドレス１２８〜１８４のデータをキャッシュするためのブロック、および、メモリアドレス６４０〜６９６のデータをキャッシュするためのブロックを有する。
【００７２】
データ格納部１０７−３は、メモリアドレス１９２〜２４８のデータをキャッシュするためのブロック、および、メモリアドレス７０４〜７６０のデータをキャッシュするためのブロックを有する。
【００７３】
また、データ格納部１０７−７は、メモリアドレス４４８〜５０４のデータをキャッシュするためのブロック、および、メモリアドレス９６０〜１０１６のデータをキャッシュするためのブロックを有する。
【００７４】
つまり、データ格納部１０７−０〜１０７−７には、所定の記憶領域（６４Ｂ）を有するブロックが、メモリアドレス順にインタリーブされた状態で設定されている。
【００７５】
本実施形態では、メモリバンク数（ｎ）を「８」にしているが、バンク数は２以上の整数、さらに言えば、任意の２のべき乗の数であればよい。
【００７６】
ベクトル処理部１０３は、複数のベクトルパイプライン１０９−０〜１０９−７と、ベクトルストア制御部１１０と、クロスバスイッチ１１１と、を含む。なお、ベクトルパイプライン１０９のサフィックスは、そのベクトルパイプラインに付された「番号」を意味する。
【００７７】
本実施形態では、ベクトルパイプラインの数（ｎ）を「８」としているが、ベクトルパイプラインの数は２以上の整数、さらに言えば、任意の２のべき乗の数であればよい。
【００７８】
各ベクトルパイプライン１０９−０〜１０９−７は、同一構成である。このため、ベクトルパイプライン１０９−０〜１０９−７のうち、ベクトルパイプライン１０９−０について説明を行う。
【００７９】
ベクトルパイプライン１０９−０は、ベクトル演算器１１２−０と、ベクトルレジスタ１１３−０と、を含む。ベクトルレジスタ１１３−０は、読み出し位置制御部１１４−０と、バンク１１３Ａ−０と、を含む。なお、ベクトル演算器１１２とベクトルレジスタ１１３と読み出し位置制御部１１４とバンク１１３Ａの各サフィックスは、それらが含まれるベクトルパイプライン１０９に付された「番号」を意味する。
【００８０】
２５６個の要素（要素０〜２５５）が、バンク１１３Ａ−０〜１１３Ａ−７のいずれかに格納される。なお、要素は、一般的にデータ要素と呼ぶことができる。また、バンク１１３−０〜１１３Ａ−７のそれぞれは、一般的にレジスタバンクと呼ぶことができる。
【００８１】
２５６個の要素は、並び順が決まっている。本実施形態では、２５６個の要素の並び順は、要素０から要素２５５の順である。このため、要素０が、２５６個の要素（要素０〜２５５）のうち、並び順が先頭の要素となる。本実施形態では要素の数ｍとして２５６を用いているが、ｍは２５６に限らない。
【００８２】
本実施形態では、ベクトルパイプライン１０９−０（具体的には、バンク１１３Ａ−０）には、要素８Ｎ（Ｎ＝０、１、２、…、３１）が格納される。ベクトルパイプライン１０９−１（具体的には、バンク１１３Ａ−１）には、要素「８Ｎ＋１」（Ｎ＝０、１、２、…、３１）が格納される。ベクトルパイプライン１０９−２（具体的には、バンク１１３Ａ−２）には、要素「８Ｎ＋２」（Ｎ＝０、１、２、…、３１）が格納される。ベクトルパイプライン１０９−３（具体的には、バンク１１３Ａ−３）には、要素「８Ｎ＋３」（Ｎ＝０、１、２、…、３１）が格納される。ベクトルパイプライン１０９−４（具体的には、バンク１１３Ａ−４）には、要素「８Ｎ＋４」（Ｎ＝０、１、２、…、３１）が格納される。ベクトルパイプライン１０９−５（具体的には、バンク１１３Ａ−５）には、要素「８Ｎ＋５」（Ｎ＝０、１、２、…、３１）が格納される。ベクトルパイプライン１０９−６（具体的には、バンク１１３Ａ−６）には、要素「８Ｎ＋６」（Ｎ＝０、１、２、…、３１）が格納される。また、ベクトルパイプライン１０９−７（具体的には、バンク１１３Ａ−７）には、要素「８Ｎ＋７」（Ｎ＝０、１、２、…、３１）が格納される。
【００８３】
つまり、２５６個の要素が、並び順で要素ごとにインタリーブされて８個のバンク１１３Ａ−０〜１１３Ａ−７に順番に格納されている。
【００８４】
クロスバスイッチ１１１は、８個の入力ポートと８個の出力ポートとを備える。クロスバスイッチ１１１の入力ポート数は、ベクトルパイプライン１０９の個数と同数である。クロスバスイッチ１１１の出力ポート数は、データ格納部１０７の個数と同数である。
【００８５】
ベクトルストアでは、クロスバスイッチ１１１の入力ポートに、アドレス計算部１０４からのメモリアドレスと、ベクトルレジスタ１１３からの要素（書き込みデータ）が入力される。クロスバスイッチ１１１は、メモリアドレスにて決定されるデータ格納部１０７に接続された出力ポートに、メモリアドレスと要素（書き込みデータ）とを出力する。
【００８６】
命令発行制御部１０２は、並び順が先頭の要素０のアドレスである開始アドレス（以下、単に「開始アドレス」と称する）と、要素間（データ要素間）のストライドを示すストライド情報（以下、単に「ストライド」と称する）とを、ベクトルストア制御部１１０と、アドレス計算部１０４と、に提供する。
【００８７】
ベクトルストア制御部１１０は、一般的に制御手段と呼ぶことができる。
【００８８】
ベクトルストア制御部１１０は、命令発行制御部１０２から、ストライドと開始アドレスとを受け付けると、ブロックサイズ（６４Ｂ）をストライドで割って処理サイズ（以下「処理グループのサイズ」と称する）を算出する。また、ベクトルストア制御部１１０は、開始アドレスがいずれかのブロックの先頭のアドレスと一致するかを判断する。
【００８９】
ベクトルストア制御部１１０は、開始アドレスとストライドとに基づいて、各ベクトルレジスタ１１３において要素の読み出しを開始する位置を補正するかどうかを判断する。
【００９０】
例えば、ベクトルストア制御部１１０は、ブロックサイズ（６４Ｂ）と、命令発行制御部１０２からのストライド（例えば、８Ｂ）と、キャッシュメモリ１０５内のバンク数（８個）と、ベクトルパイプライン数（８個）と、に基づいて、処理グループのサイズを決定する。
【００９１】
ベクトルストア制御部１１０は、各ベクトルレジスタ１１３において要素の読み出しを開始する位置を補正するかどうかの判断結果（以下、単に「判断結果」と称する）と、処理グループのサイズとを、各ベクトルレジスタ１１３内の読み出し位置制御部１１４に伝える。ベクトルストア制御部１１０については、後で詳しく説明する。
【００９２】
各読み出し位置制御部１１４は、処理部１１４Ａに含まれる。処理部１１４Ａは、一般的に処理手段と呼ぶことができる。
【００９３】
処理部１１４Ａは、２５６個の要素を、処理グループに分けていく。処理グループは、並び順が連続し、かつ、処理グループのサイズとベクトルレジスタ１１３の個数とを乗算した値の数のデータ要素からなる。
【００９４】
処理部１１４Ａは、開始アドレスがキャッシュメモリ１０５内のいずれかのブロックの先頭のアドレスと一致すると判断された場合には、以下の動作を行う。
【００９５】
処理部１１４Ａは、２５６個の要素を処理グループに分けるごとに、その処理グループ内の要素を並び順に処理グループのサイズごとに分けたときに生成されるブロックデータのそれぞれから、１つずつ、要素が並列に読み出されて、その処理グループ内の要素が全て読み出されるように、８個のバンク１１３Ａから並列に要素を読み出しキャッシュメモリ１０５に転送する。
【００９６】
また、処理部１１４Ａは、開始アドレスが、キャッシュメモリ１０５内のいずれかのブロック内の先頭のアドレスと一致しない場合には、以下の動作を行う。
【００９７】
処理部１１４Ａは、２５６個の要素を処理グループに分けるごとに、その処理グループ内のデータ要素に開始アドレスとストライドとに基づいてアドレスを割り当ててそのアドレスに基づいてその処理グループ内のデータ要素をブロックのいずれかに対応する９個のブロックデータに分けた際に、その９個のブロックデータの中でアドレスが最も大きい最後部ブロックデータ以外の８個のブロックデータのそれぞれから、１つずつ、要素が並列に読み出されていき、その後、９個のブロックデータのうちアドレスが最も小さい先頭ブロックデータ内の要素が全て読み出されると、９個のブロックデータのうち先頭ブロックデータ以外の８のブロックデータのそれぞれから、１つずつ、読み出されていない要素が並列に読み出されて、その処理グループ内の要素が全て読み出されるように、８個のバンク１１３Ａから並列に要素を読み出しキャッシュメモリ１０５に転送する。
【００９８】
各読み出し位置制御部１１４は、ベクトルストア制御部１１０の判断結果と、処理グループのサイズと、バンク１１３Ａの番号と、に基づいて、バンク１１３Ａからキャッシュメモリ１０５に転送される要素（ベクトルのデータ）の読み出し位置を計算する。
【００９９】
各読み出し位置制御部１１４は、その読み出し位置を、アドレス計算部１０４に提供する。
【０１００】
また、各読み出し位置制御部１１４は、バンク１１３Ａにおける読み出し位置から、要素（データ）を読み出して、その要素を書き込みデータとして、クロスバスイッチ１１１の入力ポートに入力する。
【０１０１】
読み出し位置制御部１１４については後で詳しく説明する。
【０１０２】
アドレス計算部１０４は、命令発行制御部１０２からの開始アドレスおよびストライドと、各読み出し位置制御部１１４からの読み出し位置と、に基づいて、書き込みデータがストアされる書き込み用メモリアドレスを計算する。
【０１０３】
アドレス計算部１０４は、書き込み用メモリアドレスを、各ベクトルパイプライン１０９からの書き込みデータと一緒に、クロスバスイッチ１１１の入力ポートに入力する。アドレス計算部１０４については後で詳しく説明する。
【０１０４】
図４は、ベクトルストア制御部１１０と読み出し位置制御部１１４を示した図である。
【０１０５】
図４において、ベクトルストア制御部１１０は、開始アドレスの下位６〜４ｂｉｔのデータを格納する開始アドレスの下位６〜４ｂｉｔレジスタ（以下、単に「開始アドレスレジスタ」と称する）２０１と、ストライドレジスタ２０２と、読み出し開始位置補正計算回路（以下、単に「計算回路」と称する）２０３と、処理グループサイズ決定回路２０４と、を含む。
【０１０６】
開始アドレスレジスタ２０１は、命令発行制御部１０２からの開始アドレスの下位６〜４ビットのデータを格納する。開始アドレスの下位６〜４ビットのデータは、ブロック内での要素０の位置を示す。
【０１０７】
ストライドレジスタ２０２は、命令発行制御部１０２からのストライドを格納する。
【０１０８】
計算回路２０３は、開始アドレスレジスタ２０１内の開始アドレスの下位６〜４ビットのデータと、ストライドレジスタ２０２内のストライドと、に基づいて、表１に示すような計算を行い、読み出し開始位置が補正されるベクトルパイプライン１０９を決定する。
【０１０９】
【表１】
0005423801.tif 000002
計算回路２０３は、各ベクトルパイプライン１０９の読み出し位置制御部１１４に“０”または“１”の補正信号を供給する。本実施形態では、補正信号が“１”であることは、読み出し開始位置の補正を行うことを示す。また、補正信号が“０”であることは、読み出し開始位置の補正を行わないことを示す。
【０１１０】
つまり、計算回路２０３は、開始アドレスがキャッシュメモリ１０５内のいずれかのブロックの先頭のアドレスと一致すると判定すると、全ての読み出し位置制御部１１４に“０”の補正信号を供給する。また、計算回路２０３は、開始アドレスがキャッシュメモリ１０５内のいずれかのブロックの先頭のアドレスと一致しないと判定すると、少なくとも１つの読み出し位置制御部１１４に“１”の補正信号を供給する。
【０１１１】
処理グループサイズ決定回路２０４は、ストライドレジスタ２０２内のストライドに基づいて、表２に示すような計算を行って、処理グループのサイズを決定する。
【０１１２】
表２は、ベクトルパイプライン数が８、キャッシュメモリ１０５内の１ブロックに格納される要素数が８、キャッシュメモリ１０５のバンク数、すなわち、データ格納部１０７の数が８である本実施形態での、各ストライドに対する処理グループのサイズを示す。
【０１１３】
【表２】
0005423801.tif 000003
一般には、
処理グループのサイズ＝
（ブロックあたりの要素数×キャッシュメモリのバンク数）÷ベクトルパイプライン数
なお、ブロックあたりの要素数＝ブロックサイズ÷ストライド
という計算を、処理グループサイズ決定回路２０４が行う。
【０１１４】
処理グループのサイズについては、後で詳しく説明する。
【０１１５】
処理グループサイズ決定回路２０４は、各ベクトルパイプライン１０９内の読み出し位置制御部１１４に、処理グループのサイズを供給する。
【０１１６】
次に、読み出し位置制御部１１４について説明する。
【０１１７】
読み出し位置制御部１１４は、各ベクトルパイプライン１０９に設けられている。読み出し位置制御部１１４は、読み出し開始位置決定回路２０５と、パイプライン番号レジスタ２０６と、読み出し位置オフセットレジスタ２０７と、読み出し位置ベースレジスタ２０８と、デクリメンタ２０９と、モジュロ演算器２１０と、マルチプレクサ（MUX）２１１と、加算器２１２と、マルチプレクサ（MUX）２１３と、加算器２１４と、デクリメンタ２１５と、カウンタ２１６と、有効読み出し位置レジスタ２１８と、比較器２１９と、これらを制御する制御回路２１７と、を含む。
【０１１８】
パイプライン番号レジスタ２０６は、パイプライン番号レジスタ２０６を含むベクトルパイプライン１０９の番号を格納する。
【０１１９】
本実施形態では、ベクトルパイプライン１０９は８個なので、パイプライン番号レジスタ２０６には、「０」〜「７」のいずれかが格納される。
【０１２０】
ベクトルパイプライン１０９−０内のパイプライン番号レジスタ２０６には「０」が格納される。ベクトルパイプライン１０９−１内のパイプライン番号レジスタ２０６には「１」が格納される。
【０１２１】
また、ベクトルパイプライン１０９−２内のパイプライン番号レジスタ２０６には「２」が格納される。ベクトルパイプライン１０９−３内のパイプライン番号レジスタ２０６には「３」が格納される。
【０１２２】
また、ベクトルパイプライン１０９−４内のパイプライン番号レジスタ２０６には「４」が格納される。ベクトルパイプライン１０９−５内のパイプライン番号レジスタ２０６には「５」が格納される。
【０１２３】
また、ベクトルパイプライン１０９−６内のパイプライン番号レジスタ２０６には「６」が格納される。ベクトルパイプライン１０９−７内のパイプライン番号レジスタ２０６には「７」が格納される。
【０１２４】
読み出し開始位置決定回路２０５は、計算回路２０３からの補正信号と、パイプライン番号レジスタ２０６からのパイプライン番号と、に基づいて、読み出し開始位置を決定する。
【０１２５】
読み出し開始位置決定回路２０５は、補正信号が“０”である場合には、読み出し開始位置として、「パイプライン番号」を出力する。読み出し開始位置決定回路２０５は、補正信号が“１”である場合には、読み出し開始位置として、「パイプライン番号−１」を出力する。
【０１２６】
次に、読み出し位置制御部１１４の動作について、図４と図５のフローチャートを参照しながら説明する。
【０１２７】
まず、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１３に「０」を選択させて、読み出し位置ベースレジスタ２０８に「０」を書き込む（ステップ３０１）。
【０１２８】
次に、制御回路２１７は、ベクトルストア制御部１１０からの処理グループのサイズから「１」を引く演算を、デクリメンタ２１５に実行させ、デクリメンタ２１５の出力（処理グループのサイズ−１）を、カウンタ２１６の初期値として設定する（ステップ３０２）。
【０１２９】
そして、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１に、読み出し開始位置決定回路２０５が決定した読み出し開始位置を選択させる。
【０１３０】
続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１が選択した読み出し開始位置に対して処理グループのサイズのモジュロをとる演算を、モジュロ演算器２１０に実行させる。
【０１３１】
続いて、制御回路２１７は、モジュロ演算器２１０の演算結果を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む（ステップ３０３）。
【０１３２】
続いて、加算器２１４は、読み出し位置オフセットレジスタ２０７内の値と、読み出し位置ベースレジスタ２０８内の値と、を加算し、その加算結果を、最初の読み出し位置として用いて、バンク１１３Ａから最初の要素を読み出す。
【０１３３】
また、読み出し位置は、アドレス計算部１０４にも送られる。アドレス計算部１０４は、その読み出し位置と、命令発行制御部１０２からのベクトルストアの開始アドレスおよびストライドと、に基づいて、最初の要素がストアされる書き込み用メモリアドレスを計算し、その計算結果を出力する。
【０１３４】
次に、制御回路２１７は、カウンタ２１６の値が「０」かどうかを調べる（ステップ３０４）。
【０１３５】
カウンタ２１６の値が０でない場合には（ステップ３０５）、制御回路２１７は、読み出し位置オフセットレジスタ２０７内の値から「１」を引く演算を、デクリメンタ２０９に実行させる。
【０１３６】
続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１に、デクリメンタ２０９の出力を選択させる。
【０１３７】
続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１が選択した値に対して、処理グループのサイズのモジュロをとる演算を、モジュロ演算器２１０に実行させる。
【０１３８】
続いて、制御回路２１７は、モジュロ演算器２１０の演算結果を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む（ステップ３０６）。
【０１３９】
続いて、加算器２１４は、読み出し位置オフセットレジスタ２０７内の値と、読み出し位置ベースレジスタ２０８内の値と、を加算し、その加算結果を、次の読み出し位置として用いて、バンク１１３Ａから次の要素を読み出す。
【０１４０】
また、読み出し位置は、アドレス計算部１０４にも送られる。アドレス計算部１０４は、その読み出し位置と、命令発行制御部１０２からのベクトルストアの開始アドレスおよびストライドと、に基づいて、次の要素がストアされる書き込み用メモリアドレスを計算し、その計算結果を出力する。
【０１４１】
次に、制御回路２１７は、カウンタ２１６の値をデクリメントする（ステップ３０７）。そして、制御回路２１７は、カウンタ２１６の値が「０」かどうかを調べる（ステップ３０４）。
【０１４２】
カウンタ２１６の値が「０」の場合には（ステップ３０８）、制御回路２１７は、読み出し位置ベースレジスタ２０８の値に処理グループのサイズを加算する処理を、加算器２１２に実行させ、マルチプレクサ（ＭＵＸ）２１３を介して、その値を、読み出し位置ベースレジスタ２０８に書き込む（ステップ３０９）。
【０１４３】
そして、制御回路２１７は、読み出し位置ベースレジスタ２０８の値が有効な読み出し位置にあるかどうかを調べる（ステップ３１０）。本実施形態では、制御回路２１７は、有効読み出し位置レジスタ２１８の値と、読み出し位置ベースレジスタ２０８の値と、を比較することにより、読み出し位置ベースレジスタ２０８の値が有効な読み出し位置かどうかを判断する。
【０１４４】
読み出し位置ベースレジスタ２０８の値が有効である場合（ステップ３１１）、制御回路２１７は、ステップ３０２に戻る。読み出し位置ベースレジスタ２０８の値が有効でない場合（ステップ３１２）、制御回路２１７は、処理を終了する。
【０１４５】
有効読み出し位置レジスタ２１８には、ベクトル長（要素０から要素２５５を加算することによって形成されるベクトルの長さ）とベクトルパイプライン番号から計算される最大の読み出し位置が格納される。
【０１４６】
比較器２１９は、有効読み出し位置レジスタ２１８の値と、加算器２１４からの読み出し位置と、を比較する。
【０１４７】
読み出し位置が、有効読み出し位置レジスタ２１８の値よりも大きな場合には、比較器２１９は、バンク１１３Ａから読み出された要素が無効であることを示す無効信号を、クロスバスイッチ１１１に出力する。クロスバスイッチ１１１は、無効であることが伝えられた要素を処理しない。
【０１４８】
有効読み出し位置レジスタ２１８に設定される最大の読み出し位置は、以下のような式で計算される。
【０１４９】
ベクトル長ｍｏｄベクトルパイプライン数＜ベクトルパイプライン番号なら、
ベクトル長÷ベクトルパイプライン数−１
ベクトル長  mod  ベクトルパイプライン数  ≧  ベクトルパイプライン番号なら、
ベクトル長÷ベクトルパイプライン数
次に、具体的な値を使って、読み出し位置制御部１１４、特には制御回路２１７の処理を説明する。
【０１５０】
ストライドは「８Ｂ」で、開始アドレスの下位６〜４ビット目が「０００」の場合で、ベクトルパイプライン１０９−１の読み出し制御部１１４での処理を説明する。
【０１５１】
ベクトル長は１２８要素とする。ベクトルパイプラインは８個あるので、有効な読み出し位置レジスタ２１８には「１５」が設定される。
【０１５２】
まず、計算回路２０３は、表１に従って、ベクトルパイプライン１０９−１に、補正信号“０”を出力する。
【０１５３】
また、処理グループサイズ決定回路２０４は、表２に従って、処理グループのサイズとして「８」を出力する。
【０１５４】
まず、制御回路２１７は、読み出し位置ベースレジスタ２０８に、「０」を書き込む（ステップ３０１）。
【０１５５】
続いて、制御回路２１７は、カウンタ２１６に、初期値として「８−１＝７」を設定する（ステップ３０２）。
【０１５６】
補正信号が“０”で、パイプライン番号レジスタ２０６内の値が「１」なので、読み出し開始位置決定回路２０５は、「１」を出力する。
【０１５７】
続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１に、読み出し開始位置決定回路２０５からの「１」を選択させる。
【０１５８】
続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１からの「１」に対して、モジュロ８を行う演算を、モジュロ演算器２１０に実行させる。
【０１５９】
続いて、制御回路２１７は、モジュロ演算器２１０の演算結果「１」を、読み出し位置オフセットレジスタ２０７に書き込む（ステップ３０３）。
【０１６０】
その結果、加算器２１４は、１個目の要素の読み出し位置として、「０＋１＝１」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１６１】
次に、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「７」なので、制御回路２１７は、ステップ３０６に進む。
【０１６２】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「１」から「１」を引いた値「０」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「０」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０１６３】
その結果、加算器２１４は、２個目の要素の読み出し位置として、「０＋０＝０」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１６４】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「７」だったので、カウンタ２１６の値は「６」となる。
【０１６５】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「６」なので、制御回路２１７は、ステップ３０６に進む。
【０１６６】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「０」から「１」を引いた値「−１」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「７」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０１６７】
その結果、加算器２１４は、３個目の要素の読み出し位置として、「０＋７＝７」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１６８】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「６」だったので、カウンタ２１６の値は「５」となる。
【０１６９】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「５」なので、制御回路２１７は、ステップ３０６に進む。
【０１７０】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「７」から「１」を引いた値「６」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「６」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０１７１】
その結果、加算器２１４は、４個目の要素の読み出し位置として、「０＋６＝６」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１７２】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「５」だったので、カウンタ２１６の値は「４」となる。
【０１７３】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「４」なので、制御回路２１７は、ステップ３０６に進む。
【０１７４】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「６」から「１」を引いた値「５」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「５」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０１７５】
その結果、加算器２１４は、５個目の要素の読み出し位置として、「０＋５＝５」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１７６】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「４」だったので、カウンタ２１６の値は「３」となる。
【０１７７】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「３」なので、制御回路２１７は、ステップ３０６に進む。
【０１７８】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「５」から「１」を引いた値「４」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「４」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０１７９】
その結果、加算器２１４は、６個目の要素の読み出し位置として、「０＋４＝４」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１８０】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「３」だったので、カウンタ２１６の値は「２」となる。
【０１８１】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「２」なので、制御回路２１７は、ステップ３０６に進む。
【０１８２】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「４」から「１」を引いた値「３」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「３」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０１８３】
その結果、加算器２１４は、７個目の要素の読み出し位置として、「０＋３＝３」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１８４】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「２」だったので、カウンタ２１６の値は「１」となる。
【０１８５】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「１」なので、制御回路２１７は、ステップ３０６に進む。
【０１８６】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「３」から「１」を引いた値「２」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「２」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０１８７】
その結果、加算器２１４は、８個目の要素の読み出し位置として、「０＋２＝２」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１８８】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「１」だったので、カウンタ２１６の値は「０」となる。
【０１８９】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「０」なので、制御回路２１７は、ステップ３０９に進む。
【０１９０】
ステップ３０９では、制御回路２１７は、読み出し位置ベースレジスタ２０８の値「０」に処理グループのサイズ「８」を加算する演算を、加算器２１２に実行させる。続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１に、加算器２１２の演算結果「８」を選択させ、加算器２１２の演算結果「８」を、読み出し位置ベースレジスタ２０８に書き込む。
【０１９１】
続いて、ステップ３１０で、制御回路２１７は、読み出し位置ベースレジスタ２０８の値が有効かどうかを調べる。読み出し位置ベースレジスタ２０８の値「８」は、有効読み出し位置レジスタ２１８の値「１５」よりも小さいので、制御回路２１７は、読み出し位置ベースレジスタ２０８の値は有効であると判断して、ステップ３０２に進む。
【０１９２】
次に、ステップ３０２で、制御回路２１７は、カウンタ２１６に、初期値として「８−１＝７」を設定する。
【０１９３】
補正信号が“０”で、パイプライン番号レジスタ２０６内の値が「１」なので、読み出し開始位置決定回路２０５は、「１」を出力する。
【０１９４】
続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１に、読み出し開始位置決定回路２０５からの「１」を選択させる。
【０１９５】
続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１からの「１」に対して、モジュロ８を行う演算を、モジュロ演算器２１０に実行させる。
【０１９６】
続いて、制御回路２１７は、モジュロ演算器２１０の演算結果「１」を、読み出し位置オフセットレジスタ２０７に書き込む（ステップ３０３）。
【０１９７】
その結果、加算器２１４は、９個目の要素の読み出し位置として、「８＋１＝９」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０１９８】
次に、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「７」なので、制御回路２１７は、ステップ３０６に進む。
【０１９９】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「１」から「１」を引いた値「０」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「０」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０２００】
その結果、加算器２１４は、１０個目の要素の読み出し位置として、「８＋０＝８」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０２０１】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「７」だったので、カウンタ２１６の値は「６」となる。
【０２０２】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「６」なので、制御回路２１７は、ステップ３０６に進む。
【０２０３】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「０」から「１」を引いた値「−１」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「７」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０２０４】
その結果、加算器２１４は、１１個目の要素の読み出し位置として、「８＋７＝１５」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０２０５】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「６」だったので、カウンタ２１６の値は「５」となる。
【０２０６】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「５」なので、制御回路２１７は、ステップ３０６に進む。
【０２０７】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「７」から「１」を引いた値「６」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「６」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０２０８】
その結果、加算器２１４は、１２個目の要素の読み出し位置として、「８＋６＝１４」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０２０９】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「５」だったので、カウンタ２１６の値は「４」となる。
【０２１０】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「４」なので、制御回路２１７は、ステップ３０６に進む。
【０２１１】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「６」から「１」を引いた値「５」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「５」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０２１２】
その結果、加算器２１４は、１３個目の要素の読み出し位置として、「８＋５＝１３」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０２１３】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「４」だったので、カウンタ２１６の値は「３」となる。
【０２１４】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「３」なので、制御回路２１７は、ステップ３０６に進む。
【０２１５】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「５」から「１」を引いた値「４」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「４」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０２１６】
その結果、加算器２１４は、１４個目の要素の読み出し位置として、「８＋４＝１２」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０２１７】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「３」だったので、カウンタ２１６の値は「２」となる。
【０２１８】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「２」なので、制御回路２１７は、ステップ３０６に進む。
【０２１９】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「４」から「１」を引いた値「３」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「３」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０２２０】
その結果、加算器２１４は、１５個目の要素の読み出し位置として、「８＋３＝１１」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０２２１】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「２」だったので、カウンタ２１６の値は「１」となる。
【０２２２】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「１」なので、制御回路２１７は、ステップ３０６に進む。
【０２２３】
ステップ３０６では、制御回路２１７は、読み出し位置オフセットレジスタ２０７の値「３」から「１」を引いた値「２」に対して、モジュロ演算器２１０を用いて、モジュロ８の演算を行い、その演算結果「２」を、クロックを契機に、読み出し位置オフセットレジスタ２０７に書き込む。
【０２２４】
その結果、加算器２１４は、１６個目の要素の読み出し位置として、「８＋２＝１０」を出力する。なお、有効読み出し位置レジスタ２１８の値は「１５」なので、クロスバスイッチ１１１には、無効信号は送られない。
【０２２５】
次に、ステップ３０７で、制御回路２１７は、カウンタ２１６の値をデクリメントする。カウンタ２１６の値は「１」だったので、カウンタ２１６の値は「０」となる。
【０２２６】
続いて、ステップ３０４で、制御回路２１７は、カウンタ２１６の値と「０」とを比較する。カウンタ２１６の値は「０」なので、制御回路２１７は、ステップ３０９に進む。
【０２２７】
ステップ３０９では、制御回路２１７は、読み出し位置ベースレジスタ２０８の値「８」に処理グループのサイズ「８」を加算する演算を、加算器２１２に実行させる。続いて、制御回路２１７は、マルチプレクサ（ＭＵＸ）２１１に、加算器２１２の演算結果「１６」を選択させ、加算器２１２の演算結果「１６」を、読み出し位置ベースレジスタ２０８に書き込む。
【０２２８】
続いて、ステップ３１０で、制御回路２１７は、読み出し位置ベースレジスタ２０８の値が有効かどうかを調べる。読み出し位置ベースレジスタ２０８の値「１６」は、有効読み出し位置レジスタ２１８の値「１５」よりも大きいので、制御回路２１７は、読み出し位置ベースレジスタ２０８の値は無効であると判断して、処理を終了する。
【０２２９】
図６は、アドレス計算部１０４を示した図である。
【０２３０】
アドレス計算部１０４は、開始アドレスレジスタ４０１と、ストライドレジスタ４０２と、各ベクトルパイプライン１０９と１対１で対応するアドレス計算回路４０３と、を含む。
【０２３１】
本実施形態では、ベクトルパイプライン１０９は８個あるので、アドレス計算回路４０３も８個装備される。
【０２３２】
開始アドレスレジスタ４０１は、命令発行制御部１０２からのベクトルストア命令の開始アドレスを受け取って格納する。
【０２３３】
ストライドレジスタ４０２は、命令発行制御部１０２からのストライドを受け取って格納する。
【０２３４】
アドレス計算回路４０３は、開始アドレスレジスタ４０１の値と、ストライドレジスタ４０２の値と、自回路と対応するベクトルパイプライン１０９内の読み出し位置制御部１１４からの読み出し位置と、を使って、メモリアドレスを計算する。
【０２３５】
アドレス計算回路４０３は、パイプライン番号レジスタ４０４と、オフセット計算回路  ４０５と、加算器４０６と、を含む。
【０２３６】
パイプライン番号レジスタ４０４には、対応するベクトルパイプライン１０９の番号が格納されている。
【０２３７】
本実施形態では、ベクトルパイプライン１０９は、８個なので、パイプライン番号レジスタ４０４には、「０」〜「７」のいずれかが格納される。
【０２３８】
オフセット計算回路４０５は、ストライドと、読み出し位置と、パイプライン番号と、に基づいて、メモリアドレスのオフセットを計算する。
【０２３９】
オフセット計算回路４０５は、次の演算を行ってオフセットを計算する。
【０２４０】
オフセット＝（読み出し位置×ベクトルパイプライン数＋ベクトルパイプライン番号）×ストライド  
加算器４０６は、開始アドレスとオフセットとを加算することにより、メモリアドレスを計算する。
【０２４１】
次に、ベクトルストアについて、図７〜図９を使って説明する。
【０２４２】
図７〜図９の上半分は、８個のベクトルパイプライン（ベクトルパイプライン０〜ベクトルパイプライン７）における１２８個の要素（要素０〜要素１２７）の配置、さらに言えば、８個のベクトルパイプライン内のバンクにて構成されるベクトルレジスタにおける要素０〜要素１２７の配置を示す。なお、要素０から要素１２７を、要素の番号順に並べると、ベクトルデータが復元される。
【０２４３】
図７〜図９の下半分は、１クロックごとに、クロスバスイッチ１１１から、キャッシュメモリ内の８個のデータ格納部（データ格納部０〜データ格納部７）に出力される要素を示す。図７〜図９の下半分において、太字の枠５０４は、キャッシュメモリのブロックの境界を示す。
【０２４４】
まず、図７を参照して、開始アドレスが「０」であり、ストライドが８Ｂである状況でのベクトルストアを説明する。
【０２４５】
図７において、縦線５０１は、キャッシュメモリのブロックの境界を示している。キャッシュメモリのブロックサイズが６４Ｂであり、ストライドが８Ｂであるため、各データ格納部内の各ブロックには、メモリアドレスが連続する８個の要素、つまり、要素番号が連続する８個の要素が格納される。例えば、要素０〜要素７までが、キャッシュメモリ１０５内の同一のブロックに格納される。
【０２４６】
表１では、ストライド８Ｂで、開始アドレスの下位６〜４ビットが「０００」の場合には、読み出し開始位置の補正はなしなので、各読み出し開始位置決定回路２０５は、ベクトルパイプラインの番号を出力する。
【０２４７】
表２では、ストライドが８Ｂの場合、処理グループのサイズは「８」となるので、処理グループサイズ決定回路２０４は、「８」を出力する。
【０２４８】
このため、要素０〜要素１２７は、要素０〜要素６３にて構成される処理グループと、要素６４〜要素１２７にて構成される処理グループと、に分けられる。
【０２４９】
図７の上半分で、太字の四角になっている要素５０２（要素０、要素９、要素１８、要素２７、要素３６、要素４５、要素５４および要素６３）と、要素５０３（要素６４、要素７３、要素８２、要素９１、要素１００、要素１０９、要素１１８および要素１２７）は、各処理グループの読み出し開始要素を示す。
【０２５０】
最初のクロックが入力されると、以下のような動作が実行される。
【０２５１】
読み出し位置制御部１１４−０は、読み出し位置として「０」を出力する。読み出し位置制御部１１４−１は、読み出し位置として「１」を出力する。読み出し位置制御部１１４−２は、読み出し位置として「２」を出力する。読み出し位置制御部１１４−３は、読み出し位置として「３」を出力する。読み出し位置制御部１１４−４は、読み出し位置として「４」を出力する。読み出し位置制御部１１４−５は、読み出し位置として「５」を出力する。読み出し位置制御部１１４−６は、読み出し位置として「６」を出力する。
読み出し位置制御部１１４−７は、読み出し位置として「７」を出力する。
【０２５２】
このため、バンク１１３Ａ−０からは要素０が読み出され、要素０はクロスバスイッチ１１１に入力される。バンク１１３Ａ−１からは要素９が読み出され、要素９はクロスバスイッチ１１１に入力される。バンク１１３Ａ−２からは要素１８が読み出され、要素１８はクロスバスイッチ１１１に入力される。バンク１１３Ａ−３からは要素２７が読み出され、要素２７はクロスバスイッチ１１１に入力される。バンク１１３Ａ−４からは要素３６が読み出され、要素３６はクロスバスイッチ１１１に入力される。バンク１１３Ａ−５からは要素４５が読み出され、要素４５はクロスバスイッチ１１１に入力される。バンク１１３Ａ−６からは要素５４が読み出され、要素５４はクロスバスイッチ１１１に入力される。バンク１１３Ａ−７からは要素６３が読み出され、要素６３はクロスバスイッチ１１１に入力される。
【０２５３】
要素０、要素９、要素１８、要素２７、要素３６、要素４５、要素５４および要素６３は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ１０５内の、データ格納部１０７−０、データ格納部１０７−１、データ格納部１０７−２、データ格納部１０７−３、データ格納部１０７−４、データ格納部１０７−５、データ格納部１０７−６、データ格納部１０７−７に格納される。このため、クロスバスイッチ１１１では出力の競合は発生しない。
【０２５４】
続いて、２番目のクロックが入力されると、２番目のクロックに応じて以下のような動作が実行される。
【０２５５】
読み出し位置制御部１１４−０は、読み出し位置として「７」を出力する。読み出し位置制御部１１４−１は、読み出し位置として「０」を出力する。読み出し位置制御部１１４−２は、読み出し位置として「１」を出力する。読み出し位置制御部１１４−３は、読み出し位置として「２」を出力する。読み出し位置制御部１１４−４は、読み出し位置として「３」を出力する。読み出し位置制御部１１４−５は、読み出し位置として「４」を出力する。読み出し位置制御部１１４−６は、読み出し位置として「５」を出力する。
読み出し位置制御部１１４−７は、読み出し位置として「６」を出力する。
【０２５６】
このため、バンク１１３Ａ−０からは要素５６が読み出され、要素５６はクロスバスイッチ１１１に入力される。バンク１１３Ａ−１からは要素１が読み出され、要素１はクロスバスイッチ１１１に入力される。バンク１１３Ａ−２からは要素１０が読み出され、要素１０はクロスバスイッチ１１１に入力される。バンク１１３Ａ−３からは要素１９が読み出され、要素１９はクロスバスイッチ１１１に入力される。バンク１１３Ａ−４からは要素２８が読み出され、要素２８はクロスバスイッチ１１１に入力される。バンク１１３Ａ−５からは要素３７が読み出され、要素３７はクロスバスイッチ１１１に入力される。バンク１１３Ａ−６からは要素４６が読み出され、要素４６はクロスバスイッチ１１１に入力される。バンク１１３Ａ−７からは要素５５が読み出され、要素５５はクロスバスイッチ１１１に入力される。
【０２５７】
要素５６、要素１、要素１０、要素１９、要素２８、要素３７、要素４６および要素５５は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ１０５内の、データ格納部１０７−７、データ格納部１０７−０、データ格納部１０７−１、データ格納部１０７−２、データ格納部１０７−３、データ格納部１０７−４、データ格納部１０７−５、データ格納部１０７−６に格納される。このため、クロスバスイッチ１１１では出力の競合は発生しない。
【０２５８】
以下、３番目のクロック〜８番目のクロックのそれぞれが入力された際には、図７に示すように各ベクトルパイプラインから各要素が読み出される。
【０２５９】
次に、９番目のクロックが入力された際の動作を説明する。なお、９番目のクロックが入力されると、処理グループが切り替わる。
【０２６０】
９番目のクロックが入力されると、以下のような動作が実行される。
【０２６１】
各ベクトルパイプライン１０９では、制御回路２１７は、読み出し位置ベースレジスタ２０８の値に、処理グループのサイズである「８」を加算する。
【０２６２】
したがって、９番目のクロック〜１６番目のクロックまでは、読み出し位置制御部１１４のそれぞれは、読み出し位置として、「８」〜「１５」を所定の順番に出力する。なお、図７の上半分で、太字の四角になっている要素５０３が９番目のクロックで読み出される要素である。  
このように、１つのクロックに応じて各ベクトルパイプラインから読み出される要素は、互いに異なるデータ格納部に格納されるため、クロスバスイッチ１１１での出力の競合が発生しない。そのため、クロスバスイッチ１１１でのベクトルストアの性能低下は発生しない。
【０２６３】
また、図７の下半分に示したように、キャッシュメモリ１０５内のデータ格納部１０７内の同じブロックに格納される複数の要素は、そのブロックを有するデータ格納部１０７に連続して到着する。そのため、各データ格納部１０７は、同じブロックに格納される複数の要素のうち、そのブロックに最初に到着した要素についてのみアドレスアレイを検索すればよく、効率よく書き込みを行うことが可能になる。
【０２６４】
次に、図８を参照して、開始アドレスが「８」であり、ストライドが８Ｂである状況でのベクトルストアを説明する。
【０２６５】
図８において、縦線６０１は、キャッシュメモリのブロックの境界を示している。例えば、要素７〜要素１４までがキャッシュメモリ１０５内の同一のブロックに格納される。
【０２６６】
表１では、ストライドが８Ｂで、開始アドレスの下位６〜４ビットが「００１」の場合には、読み出し開始位置の補正は、ベクトルパイプライン１０９−７だけで行われる。
【０２６７】
ベクトルパイプライン１０９−０〜１０９−６では、ベクトルパイプライン番号が、読み出し開始位置決定回路２０５から出力される。一方、ベクトルパイプライン１０９−７では、「６」が、読み出し開始位置決定回路２０５から出力される。
【０２６８】
表２では、ストライドが８Ｂの場合、処理グループのサイズは「８」となるので、処理グループサイズ決定回路２０４は、「８」を出力する。
【０２６９】
このため、要素０〜要素１２７は、要素０〜要素６３にて構成される処理グループと、要素６４〜要素１２７にて構成される処理グループと、に分けられる。
【０２７０】
図８の上半分で、太字の四角になっている要素６０２（要素０、要素９、要素１８、要素２７、要素３６、要素４５、要素５４および要素５５）と、要素６０３（要素６４、要素７３、要素８２、要素９１、要素１００、要素１０９、要素１１８および要素１１９）は、各処理グループの読み出し開始要素を示す。
【０２７１】
最初のクロックが入力されると、以下のような動作が実行される。
【０２７２】
読み出し位置制御部１１４−０は、読み出し位置として「０」を出力する。読み出し位置制御部１１４−１は、読み出し位置として「１」を出力する。読み出し位置制御部１１４−２は、読み出し位置として「２」を出力する。読み出し位置制御部１１４−３は、読み出し位置として「３」を出力する。読み出し位置制御部１１４−４は、読み出し位置として「４」を出力する。読み出し位置制御部１１４−５は、読み出し位置として「５」を出力する。読み出し位置制御部１１４−６は、読み出し位置として「６」を出力する。
読み出し位置制御部１１４−７は、読み出し位置として「６」を出力する。
【０２７３】
このため、バンク１１３Ａ−０からは要素０が読み出され、要素０はクロスバスイッチ１１１に入力される。バンク１１３Ａ−１からは要素９が読み出され、要素９はクロスバスイッチ１１１に入力される。バンク１１３Ａ−２からは要素１８が読み出され、要素１８はクロスバスイッチ１１１に入力される。バンク１１３Ａ−３からは要素２７が読み出され、要素２７はクロスバスイッチ１１１に入力される。バンク１１３Ａ−４からは要素３６が読み出され、要素３６はクロスバスイッチ１１１に入力される。バンク１１３Ａ−５からは要素４５が読み出され、要素４５はクロスバスイッチ１１１に入力される。バンク１１３Ａ−６からは要素５４が読み出され、要素５４はクロスバスイッチ１１１に入力される。バンク１１３Ａ−７からは要素５５が読み出され、要素５５はクロスバスイッチ１１１に入力される。
【０２７４】
要素０、要素９、要素１８、要素２７、要素３６、要素４５、要素５４および要素５５は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ１０５内の、データ格納部１０７−０、データ格納部１０７−１、データ格納部１０７−２、データ格納部１０７−３、データ格納部１０７−４、データ格納部１０７−５、データ格納部１０７−６、データ格納部１０７−７に格納される。このため、クロスバスイッチ１１１では出力の競合は発生しない。
【０２７５】
続いて、２番目のクロックが入力されると、以下のような動作が実行される。
【０２７６】
読み出し位置制御部１１４−０は、読み出し位置として「７」を出力する。読み出し位置制御部１１４−１は、読み出し位置として「０」を出力する。読み出し位置制御部１１４−２は、読み出し位置として「１」を出力する。読み出し位置制御部１１４−３は、読み出し位置として「２」を出力する。読み出し位置制御部１１４−４は、読み出し位置として「３」を出力する。読み出し位置制御部１１４−５は、読み出し位置として「４」を出力する。読み出し位置制御部１１４−６は、読み出し位置として「５」を出力する。
読み出し位置制御部１１４−７は、読み出し位置として「５」を出力する。
【０２７７】
このため、バンク１１３Ａ−０からは要素５６が読み出され、要素５６はクロスバスイッチ１１１に入力される。バンク１１３Ａ−１からは要素１が読み出され、要素１はクロスバスイッチ１１１に入力される。バンク１１３Ａ−２からは要素１０が読み出され、要素１０はクロスバスイッチ１１１に入力される。バンク１１３Ａ−３からは要素１９が読み出され、要素１９はクロスバスイッチ１１１に入力される。バンク１１３Ａ−４からは要素２８が読み出され、要素２８はクロスバスイッチ１１１に入力される。バンク１１３Ａ−５からは要素３７が読み出され、要素３７はクロスバスイッチ１１１に入力される。バンク１１３Ａ−６からは要素４６が読み出され、要素４６はクロスバスイッチ１１１に入力される。バンク１１３Ａ−７からは要素４７が読み出され、要素４７はクロスバスイッチ１１１に入力される。
【０２７８】
要素５６、要素１、要素１０、要素１９、要素２８、要素３７、要素４６および要素４７は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ１０５内の、データ格納部１０７−７、データ格納部１０７−０、データ格納部１０７−１、データ格納部１０７−２、データ格納部１０７−３、データ格納部１０７−４、データ格納部１０７−５、データ格納部１０７−６に格納される。このため、クロスバスイッチ１１１では出力の競合は発生しない。
【０２７９】
以下、３番目のクロック〜８番目のクロックのそれぞれが入力された際には、図８に示すように各ベクトルパイプラインから各要素が読み出される。
【０２８０】
次に、９番目のクロックが入力された際の動作を説明する。なお、９番目のクロックが入力されると、処理グループが切り替わる。
【０２８１】
９番目のクロックが入力されると、以下のような動作が実行される。
【０２８２】
各ベクトルパイプライン１０９では、制御回路２１７は、読み出し位置ベースレジスタ２０８の値に、処理グループのサイズである「８」を加算する。
【０２８３】
したがって、９番目のクロック〜１６番目のクロックまでは、読み出し位置制御部１１４のそれぞれは、読み出し位置として、「８」〜「１５」を所定の順番に出力する。なお、図８の上半分で、太字の四角になっている要素６０３が９番目のクロックで読み出される要素である。  
このように、１つのクロックに応じて各ベクトルパイプラインから読み出される要素は、互いに異なるデータ格納部に格納されるため、クロスバスイッチ１１１での出力の競合が発生しない。そのため、クロスバスイッチ１１１でのベクトルストアの性能低下は発生しない。
【０２８４】
また、図８の下半分に示したように、キャッシュメモリ１０５内のデータ格納部１０７内の同じブロックに格納される複数の要素は、そのブロックを有するデータ格納部１０７に連続して到着する。そのため、各データ格納部１０７は、同じブロックに格納される複数の要素のうち、そのブロックに最初に到着した要素についてのみアドレスアレイを検索すればよく、効率よく書き込みを行うことが可能になる。
【０２８５】
次に、図９を参照して、開始アドレスが「０」であり、ストライドが１６Ｂである状況でのベクトルストアを説明する。
【０２８６】
図９において、２本の太字の縦線７０１および７０２は、キャッシュメモリのブロックの境界を示している。例えば、要素４〜要素７までがキャッシュメモリ１０５内の同一のブロックに格納される。
【０２８７】
表１では、ストライド１６Ｂで、開始アドレスの下位６〜４ビットが「０００」の場合には、読み出し開始位置の補正はなしなので、ベクトルパイプライン番号が、読み出し開始位置決定回路２０５から出力される。
【０２８８】
表２では、ストライドが１６Ｂの場合、処理グループのサイズは「４」となるので、処理グループサイズ決定回路２０４は、「４」を出力する。
【０２８９】
このため、要素０〜要素１２７は、要素０〜要素３１にて構成される処理グループと、要素３２〜要素６３にて構成される処理グループと、要素６４〜要素９５にて構成される処理グループと、要素９６〜要素１２７にて構成される処理グループと、に分けられる。
【０２９０】
図９の上半分で、太字の四角になっている要素７０３（要素０、要素９、要素１８、要素２７、要素４、要素１３、要素２２および要素３１）と、要素７０４（要素３２、要素４１、要素５０、要素５９、要素３６、要素４５、要素５４および要素６３）と、要素７０５（要素６４、要素７３、要素８２、要素９１、要素６８、要素７７、要素８６および要素９５）と、要素７０６（要素９６、要素１０５、要素１１４、要素１２３、要素１００、要素１０９、要素１１８および要素１２７）は、各処理グループの読み出し開始要素を示す。
【０２９１】
最初のクロックが入力されると、以下のような動作が実行される。
【０２９２】
読み出し位置制御部１１４−０は、読み出し位置として「０」を出力する。読み出し位置制御部１１４−１は、読み出し位置として「１」を出力する。読み出し位置制御部１１４−２は、読み出し位置として「２」を出力する。読み出し位置制御部１１４−３は、読み出し位置として「３」を出力する。読み出し位置制御部１１４−４は、読み出し位置として「０」を出力する。読み出し位置制御部１１４−５は、読み出し位置として「１」を出力する。読み出し位置制御部１１４−６は、読み出し位置として「２」を出力する。
読み出し位置制御部１１４−７は、読み出し位置として「３」を出力する。
【０２９３】
このため、バンク１１３Ａ−０からは要素０が読み出され、要素０はクロスバスイッチ１１１に入力される。バンク１１３Ａ−１からは要素９が読み出され、要素９はクロスバスイッチ１１１に入力される。バンク１１３Ａ−２からは要素１８が読み出され、要素１８はクロスバスイッチ１１１に入力される。バンク１１３Ａ−３からは要素２７が読み出され、要素２７はクロスバスイッチ１１１に入力される。バンク１１３Ａ−４からは要素４が読み出され、要素４はクロスバスイッチ１１１に入力される。バンク１１３Ａ−５からは要素１３が読み出され、要素１３はクロスバスイッチ１１１に入力される。バンク１１３Ａ−６からは要素２２が読み出され、要素２２はクロスバスイッチ１１１に入力される。バンク１１３Ａ−７からは要素３１が読み出され、要素３１はクロスバスイッチ１１１に入力される。
【０２９４】
要素０、要素９、要素１８、要素２７、要素４、要素１３、要素２２および要素３１は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ１０５内の、データ格納部１０７−０、データ格納部１０７−２、データ格納部１０７−４、データ格納部１０７−６、データ格納部１０７−１、データ格納部１０７−３、データ格納部１０７−５、データ格納部１０７−７に格納される。このため、クロスバスイッチ１１１では出力の競合は発生しない。
【０２９５】
続いて、２番目のクロックが入力されると、２番目のクロックに応じて以下のような動作が実行される。
【０２９６】
読み出し位置制御部１１４−０は、読み出し位置として「３」を出力する。読み出し位置制御部１１４−１は、読み出し位置として「０」を出力する。読み出し位置制御部１１４−２は、読み出し位置として「１」を出力する。読み出し位置制御部１１４−３は、読み出し位置として「２」を出力する。読み出し位置制御部１１４−４は、読み出し位置として「３」を出力する。読み出し位置制御部１１４−５は、読み出し位置として「０」を出力する。読み出し位置制御部１１４−６は、読み出し位置として「１」を出力する。
読み出し位置制御部１１４−７は、読み出し位置として「２」を出力する。
【０２９７】
このため、バンク１１３Ａ−０からは要素２４が読み出され、要素２４はクロスバスイッチ１１１に入力される。バンク１１３Ａ−１からは要素１が読み出され、要素１はクロスバスイッチ１１１に入力される。バンク１１３Ａ−２からは要素１０が読み出され、要素１０はクロスバスイッチ１１１に入力される。バンク１１３Ａ−３からは要素１９が読み出され、要素１９はクロスバスイッチ１１１に入力される。バンク１１３Ａ−４からは要素２８が読み出され、要素２８はクロスバスイッチ１１１に入力される。バンク１１３Ａ−５からは要素５が読み出され、要素５はクロスバスイッチ１１１に入力される。バンク１１３Ａ−６からは要素１４が読み出され、要素１４はクロスバスイッチ１１１に入力される。バンク１１３Ａ−７からは要素２３が読み出され、要素２３はクロスバスイッチ１１１に入力される。
【０２９８】
要素２４、要素１、要素１０、要素１９、要素２８、要素５、要素１４および要素２３は、それぞれ、クロスバスイッチ１１１によって、キャッシュメモリ１０５内の、データ格納部１０７−６、データ格納部１０７−０、データ格納部１０７−２、データ格納部１０７−４、データ格納部１０７−７、データ格納部１０７−１、データ格納部１０７−３、データ格納部１０７−５に格納される。このため、クロスバスイッチ１１１では出力の競合は発生しない。
【０２９９】
以下、３番目のクロック〜４番目のクロックのそれぞれが入力された際には、図９に示すように各ベクトルパイプラインから各要素が読み出される。
【０３００】
次に、５番目のクロックが入力された際の動作を説明する。なお、５番目のクロックが入力されると、処理グループが切り替わる。
【０３０１】
５番目のクロックが入力されると、以下のような動作が実行される。
【０３０２】
各ベクトルパイプライン１０９では、制御回路２１７は、読み出し位置ベースレジスタ２０８の値に、処理グループのサイズである「４」を加算する。
【０３０３】
したがって、５番目のクロック〜８番目のクロックまでは、読み出し位置制御部１１４のそれぞれは、読み出し位置として、「４」〜「７」を所定の順番に出力する。なお、図９の上半分で、太字の四角になっている要素７０４が５番目のクロックで読み出される要素である。  
このように、１つのクロックに応じて各ベクトルパイプラインから読み出される要素は、互いに異なるデータ格納部に格納されるため、クロスバスイッチ１１１での出力の競合が発生しない。そのため、クロスバスイッチ１１１でのベクトルストアの性能低下は発生しない。
【０３０４】
また、図９の下半分に示したように、キャッシュメモリ１０５内のデータ格納部１０７内の同じブロックに格納される複数の要素は、そのブロックを有するデータ格納部１０７に連続して到着する。そのため、各データ格納部１０７は、同じブロックに格納される複数の要素のうち、そのブロックに最初に到着した要素についてのみアドレスアレイを検索すればよく、効率よく書き込みを行うことが可能になる。
【０３０５】
次に、本実施形態の効果を説明する。
【０３０６】
第１の効果は、キャッシュメモリの同じブロックに書き込まれる書き込みデータ（要素）が、連続して、そのブロックを有するキャッシュメモリ内のバンク（メモリバンク、データ格納部）に到着するように制御することで、キャッシュメモリでアドレスアレイを検索する時間と消費電力を削減できることである。
【０３０７】
また、第２の効果は、要素０のアドレスが、ブロックの先頭アドレスでない場合でも、クロスバスイッチでの競合を回避でき、ベクトルストアの処理時間の増加を回避できることである。競合が起こらないため、キャッシュメモリの同じブロックに書き込まれる書き込みデータ（要素）が、連続して、そのブロックを有するキャッシュメモリ内のバンク（メモリバンク、データ格納部）に到着するように制御でき、よって、キャッシュメモリでアドレスアレイを検索する時間と消費電力を削減することが可能になる。
【０３０８】
本実施形態によれば、処理部１１４Ａは、２５６個の要素を、処理グループのサイズに基づいて、処理グループに分けていく。
【０３０９】
処理部１１４Ａは、開始アドレスが、キャッシュメモリ１０５内のいずれかのブロックの先頭のアドレスと一致すると判断された場合には、以下の動作を行う。
【０３１０】
処理部１１４Ａは、２５６個の要素を処理グループに分けるごとに、その処理グループ内の要素を並び順に処理グループのサイズごとに分けたときに生成されるブロックデータのそれぞれから、１つずつ、要素が並列に出力されて、その処理グループ内の要素が全て出力されるように、８個のバンク１１３Ａから並列に要素を読み出しキャッシュメモリ１０５に転送する。
【０３１１】
このため、開始アドレスが、キャッシュメモリ１０５内のいずれかのブロックの先頭のアドレスと一致する場合、キャッシュメモリ１０５の同じブロックに書き込まれる書き込みデータ（要素）が、連続して、キャッシュメモリ１０５の各バンクに到着することが可能になる。よって、キャッシュメモリがアドレスアレイを検索する時間と消費電力を削減することが可能になる。
【０３１２】
また、処理部１１４Ａは、開始アドレスが、キャッシュメモリ１０５内のいずれかのメモリブロック内の先頭のアドレスと一致しない場合には、以下の動作を行う。
【０３１３】
処理部１１４Ａは、２５６個の要素を処理グループに分けるごとに、その処理グループ内の要素を、開始アドレスとストライドとに基づいてキャッシュメモリ１０５内のブロックのいずれかに対応する９個のブロックデータに分けた際に、その９個のブロックデータの中でアドレスが最も大きい最後部ブロックデータ以外の８個のブロックデータのそれぞれから、１つずつ、要素が並列に出力され、その後、９個のブロックデータのうちアドレスが最も小さい先頭ブロックデータ内の要素が全て出力されると、９個のブロックデータのうち先頭ブロックデータ以外の８のブロックデータのそれぞれから、１つずつ、未出力の要素が並列に出力されて、その処理グループ内の要素が全て出力されるように、８個のバンク１１３Ａから並列に要素を読み出しキャッシュメモリ１０５に転送する。
【０３１４】
このため、開始アドレスが、キャッシュメモリ１０５内のいずれかのブロックの先頭のアドレスと一致しない場合も、キャッシュメモリ１０５の同じブロックに書き込まれる書き込みデータ（要素）が、連続して、キャッシュメモリ１０５の各バンクに到着することが可能になり、よって、キャッシュメモリがアドレスアレイを検索する時間と消費電力を削減することが可能になる。
【０３１５】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０３１６】
この出願は、２００９年９月１５日に出願された日本出願特願２００９−２１３２６２を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０３１７】
１０１        ＣＰＵ
１０２        命令発行制御部
１０３        ベクトル処理部
１０４        アドレス計算部
１０５        キャッシュメモリ
１０６        主記憶装置
１０７        データ格納部
１０９        ベクトルパイプライン
１１０        ベクトルストア制御部
１１１        クロスバスイッチ
１１２        ベクトル演算器
１１３        ベクトルレジスタ
１１３Ａ      バンク
１１４        読み出し位置制御部
１１４Ａ      処理部
２０１        開始アドレスレジスタ
２０２        ストライドレジスタ
２０３        読み出し開始位置補正計算回路
２０４        処理グループサイズ決定回路
２０５        読み出し開始位置決定回路
２０６        パイプライン番号レジスタ
２０７        読み出し位置オフセットレジスタ
２０８        読み出し位置ベースレジスタ
２０９        デクリメンタ
２１０        モジュロ演算器
２１１        マルチプレクサ
２１２        加算器
２１３        マルチプレクサ
２１４        加算器
２１５        デクリメンタ
２１６        カウンタ
２１７        制御回路
２１８        有効読み出し位置レジスタ
２１９        比較器
４０１        開始アドレスレジスタ
４０２        ストライドレジスタ
４０３        アドレス計算回路
４０４        パイプライン番号レジスタ
４０５        オフセット計算回路
４０６        加算器
【図１】
0005423801.tif 000004
【図２】
0005423801.tif 000005
【図３】
0005423801.tif 000006
【図４】
0005423801.tif 000007
【図５】
0005423801.tif 000008
【図６】
0005423801.tif 000009
【図７】
0005423801.tif 000010
【図８】
0005423801.tif 000011
【図９】
0005423801.tif 000012