(57)【特許請求の範囲】
【請求項１】
メモリの読み出し単位ごとにそれぞれ異なる記憶手段に記憶するようにインターリーブされた主記憶装置と、
前記主記憶装置から読み出されたデータを一時的に格納するロードバッファと、
前記主記憶装置に対するデータ読み出しリクエストの発行、および前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御するロードバッファ制御手段と、
前記ロードバッファから転送されるデータを格納するベクトルレジスタと、を備え、
前記主記憶装置上の２次元配列の要素が、メモリのアドレスが連続して格納されない次元方向の全ての要素が前記メモリの読み出し単位内での位置が同じになるように予め位置が調整されて前記主記憶装置に格納され、
前記ロードバッファ制御手段は、前記メモリのアドレスが連続して格納されない次元方向へのアクセスを行うベクトルロード命令を受けた場合に、前記リクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置情報と、に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
ベクトル処理装置。
【請求項２】
前記メモリのアドレスが連続して格納されない次元方向の要素数が、前記メモリの読み出し単位の整数倍となるように要素が予め追加されることで、前記２次元配列の要素の位置が予め調整される、
請求項１に記載のベクトル処理装置。
【請求項３】
前記ロードバッファ制御手段は、前記主記憶装置に対するリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置を示す情報と、を対応付けて保持するロードバッファテーブルを有し、当該ロードバッファテーブルを参照して、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
請求項１または２に記載のベクトル処理装置。
【請求項４】
前記ロードバッファ制御手段は、前記主記憶装置に対するリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置を示す情報と、を前記主記憶装置に対して送出し、前記主記憶装置から読み出されて返却されるデータに付加されるこれら情報に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
請求項１または２に記載のベクトル処理装置。
【請求項５】
前記主記憶装置がＳＤＲＡＭを用いて構成される、
請求項１ないし４のいずれか１項に記載のベクトル処理装置。
【請求項６】
主記憶装置上の２次元配列の要素が、メモリのアドレスが連続して格納されない次元方向の全ての要素が前記メモリの読み出し単位内での位置が同じになるように予め位置が調整されて前記主記憶装置に格納されるステップと、
前記メモリのアドレスが連続して格納されない次元方向へのアクセスを行うベクトルロード命令を受けた場合に、前記主記憶装置に対するデータ読み出しリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータのロードバッファでの書き込み位置情報と、に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御するステップと、
を備えるベクトル処理装置のベクトル処理方法。
【請求項７】
前記２次元配列の要素の位置が予め調整されるステップでは、前記メモリのアドレスが連続して格納されない次元方向の要素数が、前記メモリの読み出し単位の整数倍となるように要素が予め追加される、
請求項６に記載のベクトル処理装置のベクトル処理方法。
【請求項８】
前記ロードバッファへの書き込みを制御するステップは、前記主記憶装置に対するリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置を示す情報と、を対応付けて保持し、当該保持した情報を参照して、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
請求項６または７に記載のベクトル処理装置のベクトル処理方法。
【請求項９】
前記ロードバッファへの書き込みを制御するステップは、前記主記憶装置に対するリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置を示す情報と、を前記主記憶装置に対して送出し、前記主記憶装置から読み出されて返却されるデータに付加されるこれら情報に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
請求項６または７に記載のベクトル処理装置のベクトル処理方法。
【請求項１０】
前記主記憶装置がＳＤＲＡＭを用いて構成される、
請求項６ないし９のいずれか１項に記載のベクトル処理装置のベクトル処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトル処理装置およびベクトル処理方法に関し、特に、一定間隔を空けて並んでいる複数の配列要素に対してアクセスを行うベクトル処理装置およびベクトル処理方法に関する。
【背景技術】
【０００２】
非特許文献１に、ベクトル計算機に関するストライドアクセスが記述されている。このベクトル計算機は、ストライドアクセスを行うためのベクトルロード命令を備えている。このベクトルロード命令は、主記憶の２次元行列データのうちで、連続アドレスによってアクセスできない行または列のデータにアクセスしようとする場合に、一定の距離（ストライド）間隔を空けたメモリアドレスの複数の要素にアクセスするものである。
【０００３】
特許文献１には、ベクトル計算機に関して、ワード単位でインターリーブされた主記憶部から複素数の実部および虚部の両方を読み出して、読みだしたデータを２つのロードバッファ、２つのベクトルレジスタにベクトルロードするベクトルロード方法が開示されている。また、特許文献２には、キャッシュメモリを備えたベクトル計算機が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３７８６１８２号
【特許文献２】特開２０１０−８６４９６号公報
【非特許文献】
【０００５】
【非特許文献１】「コンピュータ・アーキテクチャ」、ジョン・ヘネシー、デイビッド・パターソン著、３６４〜３６６ページ、１９９２年１２月２５日発行
【発明の概要】
【発明が解決しようとする課題】
【０００６】
近年、主記憶を構成するＳＤＲＡＭでは、高速化を図るために、１命令によって複数のワードを読み出す技術が用いられるようになった。この結果、１ワード単位で主記憶部をインターリーブさせることが困難になってしまい、主記憶に１命令によってアクセス可能な複数のワード単位で、主記憶部をインターリーブさせる、という手法を採用する必要が生じた。しかし、このような手法を採用すると、連続アドレスへのアクセスではないストライドアクセスを行う場合には、主記憶から１命令で読み出した複数のワードのうちで１ワードのみしか使用されないことになってしまう。
【０００７】
言い換えると、主記憶への１命令によって読み出せるワードの数が多くなったために、１ワードだけを主記憶から読み出すという構成をとることが困難となっている。このため、１ワードだけを必要とするストライドアクセスを行う場合においても、複数のワード（ブロック）を主記憶から読み出すことになってしまう。つまり、主記憶から読み出した複数のワードのうちで、レジスタにロードされるのは１ワードだけであり、その他のワードは使われないことになる。この結果、ストライドアクセス時に本来必要としない不要なアクセスをも含むことになってしまい、メモリアクセスに要する消費電力の増加につながっていた。
【０００８】
また、上記の問題の解決に関して、特許文献２では、キャッシュメモリを設けて、先行のストライドアクセスによって読み出した複数のワードを予めキャッシュメモリに格納しておき、後続のストライドアクセスではキャッシュメモリ上のデータを用いる、という手法が開示されている。しかし、主記憶の容量と比較してキャッシュメモリの容量は小さいため、必要とする全てのデータをキャッシュメモリに格納できるわけではない。また、キャッシュメモリにデータを一旦格納できたとしても、他のメモリアクセスによって追い出されてしまい、後続のストライドアクセス時にはキャッシュメモリ上に既にデータが存在しないことも想定される。
【０００９】
言い換えると、後続のストライドアクセスによってアクセスされるワードを含んだブロックを、前回のストライドアクセスにおいてキャッシュメモリに予め格納しておいたとしても、後続のストライドアクセスが実行される前に、キャッシュメモリ上のブロックが既に追い出されていることも考えられる。このため、仮にキャッシュメモリを設けたとしても、後続のストライドアクセスによって同じブロックを再度、主記憶から読み出す可能性がある。なお、十分な容量のキャッシュメモリを確保することで必要なブロックが追い出されないように保証し、後続のベクトルロード命令によってキャッシュヒットさせることが考えられるが、この場合には、キャッシュメモリの容量の増加につながってしまう。
【００１０】
本発明の第１の目的は、このような問題を解決するためになされたものであり、消費電力の低減が可能なベクトル処理装置およびベクトル処理方法を提供することを目的とするものである。
【課題を解決するための手段】
【００１１】
本発明に係るベクトル処理装置は、メモリの読み出し単位ごとにそれぞれ異なる記憶手段に記憶するようにインターリーブされた主記憶装置と、前記主記憶装置から読み出されたデータを一時的に格納するロードバッファと、前記主記憶装置に対するデータ読み出しリクエストの発行、および前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御するロードバッファ制御手段と、前記ロードバッファから転送されるデータを格納するベクトルレジスタと、を備え、前記主記憶装置上の２次元配列の要素が、メモリのアドレスが連続して格納されない次元方向の全ての要素が前記メモリの読み出し単位内での位置が同じになるように予め位置が調整されて前記主記憶装置に格納され、前記ロードバッファ制御手段は、前記メモリのアドレスが連続して格納されない次元方向へのアクセスを行うベクトルロード命令を受けた場合に、前記リクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置情報と、に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御するものである。
【００１２】
また、本発明に係るベクトル処理装置のベクトル処理方法は、主記憶装置上の２次元配列の要素が、メモリのアドレスが連続して格納されない次元方向の全ての要素が前記メモリの読み出し単位内での位置が同じになるように予め位置が調整されて前記主記憶装置に格納されるステップと、前記メモリのアドレスが連続して格納されない次元方向へのアクセスを行うベクトルロード命令を受けた場合に、前記主記憶装置に対するデータ読み出しリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータのロードバッファでの書き込み位置情報と、に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御するステップと、を備えるものである。
【発明の効果】
【００１３】
本発明によれば、消費電力の低減が可能なベクトル処理装置およびベクトル処理方法を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態１にかかるベクトル処理装置の構成を示す図である。
【図２】実施の形態１にかかるベクトル処理装置の動作を説明するための図である。
【図３】実施の形態１にかかる配列の構成を説明するための図である。
【図４】実施の形態１にかかる配列の要素のアドレスを説明するための図である。
【図５】実施の形態１にかかるベクトル処理装置の動作を説明するための図である。
【図６】本発明にかかるベクトル処理装置の本質的部分を説明するための図である。
【発明を実施するための形態】
【００１５】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
＜発明の実施の形態１＞
［構成の説明］
図１は、本実施の形態に係るベクトル処理装置の構成例を示している。ベクトル処理装置は、ベクトル演算器１と、ベクトルレジスタ２と、演算器クロスバ３と、ロードバッファ４と、ロードバッファ制御部５と、主記憶クロスバ６と、主記憶装置としての主記憶７と、を備えている。
【００１６】
ベクトル演算器１は、ベクトルレジスタ２に格納されているデータを用いてベクトル演算を行う演算器群である。ベクトル演算器１は、通常、複数種類の演算器を備えている。演算結果は、ベクトルレジスタ２に格納される。
【００１７】
ベクトルレジスタ２は、ベクトル演算に用いるベクトルデータを格納するレジスタ群である。ベクトルレジスタ２は、通常、複数個のレジスタを備えている。１つのレジスタ当たり、複数個のデータを格納することができ、最大ベクトル長分の個数のデータを格納することができる。本実施の形態では、最大ベクトル長を１６とした場合を例に説明し、１つのレジスタ当たり、１６個のデータを格納することができる（すなわち、ベクトルレジスタ２に含まれる１つのレジスタあたりの要素数は１６である）。
【００１８】
演算器クロスバ３は、ベクトル演算器１およびベクトルレジスタ２と、ロードバッファ４とを相互に接続するネットワークである。
【００１９】
ロードバッファ４は、主記憶７から読み出されたデータを一時的に格納するためのバッファ群である。本実施の形態では、ロードバッファ４は、複数個のロードバッファ４−１〜４−４を備えている。通常は、１つのベクトルロード命令に対して、ロードバッファ４のうちで１つのロードバッファ４−１〜４−４が用いられる。ロードバッファ４−１〜４−４それぞれの１つ当たりの容量は、ベクトルレジスタ２の１つ当たりの容量と同じである。本実施の形態では、１つのロードバッファ４−１〜４−４当たり、１６個のデータを格納することができる。主記憶７から読み出されるデータは、主記憶７への読み出しリクエストの順序に従って返されるとは限られないため、本実施の形態では、このようなロードバッファ４を用いている。なお、ロードバッファ４を構成するバッファ群の個数は４個に限定されず、主記憶の読み出し単位の数と同じか、またはそれ以上の数とすればよい。
【００２０】
ロードバッファ制御部５は、主記憶７に対する主記憶読み出しリクエストの発行や、主記憶７から読み出されたデータのロードバッファ４への書き込みの制御を行う。本実施の形態では、ロードバッファ制御部５は、ロードバッファテーブル８を備えている。
【００２１】
ロードバッファテーブル８は、主記憶７から返却されたデータを、ロードバッファ４のうちいずれのロードバッファ４−１〜４−４のどの位置に書き込むかを保持する。ロードバッファ制御部５は、ベクトルロード命令を受け付けると、主記憶７の主記憶部７−１〜７−４それぞれに対して主記憶読み出しリクエストの発行を行うが、主記憶部７−１〜７−４に対してリクエストを発行する際に、そのリクエストの識別情報（以下、リクエストIDと呼ぶ）と、そのリクエストの対象となる主記憶部７−１〜７−４からデータが返却された場合に返却データを書き込むロードバッファ４−１〜４−４の書き込み位置を示す情報と、を対応付けてロードバッファテーブル８に保持する。そして、ロードバッファ制御部５は、主記憶部７−１〜７−４から返却されるデータに付加されたリクエストＩＤと、そのリクエストに対して主記憶部７−１〜７−４のそれぞれで何番目に返却された返却データであるかと、に基づいて、ロードバッファテーブル８を参照して、返却データをどのロードバッファ４のどこに書き込むかを判断する。
【００２２】
主記憶クロスバ６は、主記憶部７−１〜７−４とロードバッファ４を相互に接続するネットワークである。
【００２３】
主記憶７は、メモリの読み出し単位ごとにそれぞれ異なる記憶部にインターリーブされている。本実施の形態では、メモリの読み出し単位を４とし、主記憶７が４つの主記憶部７−１〜７−４に分割された場合を例に説明する。すなわち、主記憶７は４つの主記憶部７−１〜７−４を含み、１回のメモリの読み出しによって、４個のデータを読み出すことができる。主記憶７は、例えばＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ ｄｙｎａｍｉｃ ｒａｎｄｏｍ ａｃｃｅｓｓ ｍｅｍｏｒｙ）を用いて構成される。なお、メモリの読み出し単位は主記憶７の構成に応じて決定され、４個に限定されず、２個以上の読み出し単位とすればよい。また、メモリの読み出し単位を複数とすれば、主記憶７の分割の単位は４つに限定されず、１以上の任意の分割の単位としてよい。
【００２４】
主記憶部７−１には、メモリアドレス０〜３のデータ、メモリアドレス１６〜１９のデータ、メモリアドレス３２〜３５のデータ、…が格納される。主記憶部７−２には、メモリアドレス４〜７のデータ、メモリアドレス２０〜２３のデータ、メモリアドレス３６〜３９のデータ、…が格納される。主記憶部７−３には、メモリアドレス８〜１１のデータ、メモリアドレス２４〜２７のデータ、メモリアドレス４０〜４３のデータ、…が格納される。主記憶部７−４には、メモリアドレス１２〜１５のデータ、メモリアドレス２８〜３１のデータ、メモリアドレス４４〜４７のデータ、…が格納される。
【００２５】
主記憶部７−１〜７−４は、それぞれが独立して動作する。主記憶部７−１〜７−４は、主記憶読み出しリクエストをそれぞれ受け取り、読み出したデータを主記憶クロスバ６に送る。本実施の形態では、１クロックあたり最大で４個のデータがロードバッファ４に返却され、ロードバッファ４に書き込まれる。また、主記憶部７−１〜７−４は、受け取ったリクエストのＩＤを返却データに付加し、主記憶クロスバ６に送る。
【００２６】
［動作の説明］
続いて以下では、ベクトル処理装置の動作の一例について、図２〜図５を用いて説明する。
まず、図２を参照して、図１に示したベクトル処理装置において、連続アドレスのデータに対してアクセスするベクトルロードの処理方法について説明する。
【００２７】
図２では、ある時刻において主記憶部７−１〜７−４から読み出されるデータと、主記憶部７−１〜７−４からの読み出しが完了したときにロードバッファ４に格納される内容と、を示している。例えば、時刻Ｔでは、メモリアドレス０、４、８、１２の内容が、主記憶部７−１〜７−４からそれぞれ読み出される。そして、読み出しが完了したときには、メモリアドレス０〜１５の内容がロードバッファ４に格納される。
【００２８】
ベクトルロード命令は、主記憶からベクトルレジスタ２へのデータ転送命令である。本実施の形態では、ベクトルロード命令は、第１〜第４のオペランドを含んでいる。
第１オペランドは、データが格納されるベクトルレジスタ２の個数を指定する。
第２オペランドは、データが格納される先頭のベクトルレジスタ２を指定する。
第３オペランドは、ストライド値を指定する。
第４オペランドは、主記憶上でのデータの読み出しを開始するアドレスを指定する。
【００２９】
ベクトル処理装置は、このベクトルロード命令を用いることで、主記憶上での開始アドレス（第４オペランド）とストライド値（第３オペランド）に基づいてデータの読み出しを行い、ベクトルレジスタ２の先頭ベクトルレジスタ（第２オペランド）から開始して、ベクトルレジスタ２の個数（第１オペランド）分のベクトルレジスタ２の各要素に対して、データの格納を行う。
【００３０】
例えば、第１オペランドに１が指定され、第２オペランドに０番目のベクトルレジスタ２が指定され、第３オペランドに１(８バイト)が指定され、第４オペランドにアドレス０が指定されたベクトルロード命令が実行された場合を仮定する。また、ベクトルロード命令の発行時のベクトル長は１６であり、ベクトルロード命令では１６個のデータが読み出されると想定する。すなわち、ベクトルロード命令によって、１つのロードバッファ４に、アドレスの間隔が１である要素が１６個格納される。
【００３１】
まず、ベクトルロード命令を受けたロードバッファ制御部５は、ロードバッファ４を１つ確保する。そして、ロードバッファ制御部５は、主記憶部７−１〜７−４それぞれに対して、主記憶読み出しリクエストを１つずつ送る。ここで、主記憶読み出しリクエストには、主記憶部７−１〜７−４それぞれでの開始アドレスが付加されている。
【００３２】
主記憶部７−１は、メモリアドレス０〜３の内容を順次読み出して、読み出したデータを主記憶クロスバ６に送る。主記憶部７−２は、メモリアドレス４〜７の内容を順次読み出して、読み出したデータを主記憶クロスバ６に送る。主記憶部７−３は、メモリアドレス８〜１１の内容を順次読み出して、読み出したデータを主記憶クロスバ６に送る。主記憶部７−４は、メモリアドレス１２〜１５の内容を順次読み出して、読み出したデータを主記憶クロスバ６に送る。主記憶クロスバ６は、主記憶部７−１〜７−４からそれぞれ送られたデータを、ロードバッファ４に対して返却する。
【００３３】
ロードバッファ制御部５は、返却データに付加されたリクエストＩＤと、返却データが何番目に返却されたワードであるかと、に基づいて、ロードバッファテーブル８を検索して、主記憶７から返却されたデータをどのロードバッファ４のどこに書き込むかを判断して、ロードバッファ４に書き込む。
【００３４】
ロードバッファ制御部５は、主記憶７からの読み出し対象となった全てのデータ（１６個のデータ）を、ロードバッファ４に全て書き込えたと判断した場合には、第２オペランドで指定された０番目のベクトルレジスタ２に対してデータを転送し、全て転送し終わるとベクトルロード命令を完了する。
【００３５】
次に、図３および図４を参照して、主記憶７上の２次元配列の列に対してアクセスを行うベクトルロード命令に関して、ベクトル命令の実行前に予め行われる前処理方法を説明する。図３は、本実施の形態で用いる２次元配列を示し、アクセスの対象となる主記憶７上のデータを２次元配列の形式で配置している。図３では、１６行１７列の２次元配列を例示している。ここで、２次元配列の行方向において同一行内のデータは、主記憶７上でのメモリアドレスは連続しているものとする。一方で、列方向において同一列内のデータは、主記憶７上でのメモリアドレスは連続していないものとする。つまり、同じ列のデータに対してアクセスする場合には、一定間隔（ストライド）を空けて並んでいる複数の配列要素に対するアクセス（ストライドアクセス）となる。
【００３６】
本実施の形態では、ストライドアクセスのベクトルロード命令を生成するに先立って、２次元配列の列方向において同一列内に位置する全ての要素が、主記憶の読み出し単位内で同一の位置となるように、２次元配列の要素の位置を予め調整する。
【００３７】
２次元配列の調整は、コンパイラによって行われる。コンパイラは、ベクトルロード命令を生成するに先立って、主記憶７でのメモリの読み出し単位と２次元配列の構成に基づいてストライドを決定する。コンパイラは、この決定したストライドに応じて２次元配列の調整を行う。コンパイラは、調整した２次元配列を主記憶部７−１〜７−４に対して配置する。具体的には、例えば、図３に示す２次元配列では、メモリの読み出し単位が４であり、２次元配列の列数が１７であるため、１７より大きな値であって４の倍数である２０をストライドとして決定する。
【００３８】
なお、コンパイラは、メモリの読み出し単位と、２次元配列の構成と、主記憶７−１〜７−４の個数と、に基づいて、ストライドを決定するようにしてもよい。具体的には、例えば、図３に示す２次元配列では、メモリの読み出し単位が４であり、２次元配列の列数が１７であり、主記憶部７−１〜７−４の個数が４であるため、１７より大きな値であって１６の倍数でない値２０をストライドとして決定する。ここで、値１６は、メモリの読み出し単位と主記憶部７−１〜７−４の個数との乗算により求まる値である。
【００３９】
コンパイラは、このようにして求めたストライドに応じて２次元配列の調整を行う。図３に示す２次元配列では、２次元配列の列数が２０となるように、３列分の行列を追加する（図において斜線を用いて示す範囲３０１）。このような行列の追加（パディング）によって、行方向において２次元配列の同一行内の全てのデータをちょうど読み出し単位で扱うことができ、また、列方向において同一列内に位置する全ての要素が、メモリの読み出し単位内で同一の位置に調整される。
【００４０】
図４および図１を用いて、パディング後の２次元配列の各要素と主記憶７の格納アドレスの関係を説明する。図４は、図３に示した２次元配列をパディングして主記憶部７−１〜７−４に対してマッピングした場合に、２次元配列の１列目〜４列目の要素が格納される主記憶部７−１〜７−４のアドレスを示している。なお、主記憶部７−１〜７−４の格納開始メモリアドレスは０とした。また、図４では、図３に示した２次元配列から１列目〜４列目のみを抜き出して表示している。
【００４１】
図４において、各列のそれぞれの要素が、図１に示した主記憶部７−１〜７−１〜７−４のアドレスにマッピングされている。例えば、図４の４列の１行目の要素はそれぞれ、図１の主記憶部７−１のメモリアドレス０、メモリアドレス１、メモリアドレス２、メモリアドレス３にマッピングされる。すなわち、図４の４列の１行目の要素は全て、図１に示した主記憶部７−１に格納されている。また、図４の４列の他の行の４つの要素についても、図１に示した主記憶部７−２〜７−４にそれぞれ格納されている。すなわち、パディング後の２次元配列の１列目から４列目の同一行内のデータが、図１の主記憶７においてちょうどメモリの読み出し単位で配置される。
【００４２】
また、例えば、２次元配列の１列目のデータは主記憶部７−１の１番目のメモリアドレス０となり、２列目のデータは主記憶部７−２の１番目のメモリアドレス２０となり、３列目のデータは主記憶部７−３の１番目のメモリアドレス４０となり、４列目のデータは主記憶部７−４の１番目のメモリアドレス６０となっている。すなわち、２次元配列の各列で同一列内に位置する全ての要素が、メモリの読み出し単位内で同一の位置となる。
【００４３】
図５を用いて、図１に示したベクトル処理装置において、ストライドアクセスするベクトルロードの処理方法を説明する。
図５は、図３に示した２次元配列データのうちで、図４に示した１列目から４列目の要素をベクトルロードした場合における、ベクトルロード方法の処理を説明する図である。このベクトルロードは、データのアクセスは図３の列方向でのアクセスとなることから、ストライドアクセスである。図５では、ある時刻において主記憶部７−１〜７−４から読み出されるデータと、主記憶部７−１〜７−４からの読み出しが完了したときにロードバッファ４（ロードバッファ４−１〜４−４）に格納される内容と、を示している。
例えば、時刻Ｔでは、メモリアドレス０、２０、４０、６０の内容が、主記憶部７−１〜７−４からそれぞれ読み出される。そして、読み出しが完了したときには、ストライドアクセスされた各アドレスの内容が、ロードバッファ４−１〜４−４それぞれに格納される。
【００４４】
また、図５では、実行するベクトルロード命令として、第１オペランドに４が指定され、第２オペランドに０番目のベクトルレジスタ２が指定され、第３オペランドに２０(１６０バイト)が指定され、第４オペランドにアドレス０が指定された場合を想定する。また、ベクトルロード命令の発行時のベクトル長は１６であり、ベクトルロード命令では、１６個のデータが読み出される。すなわち、ベクトルロード命令によって、ロードバッファ４−１〜４−４のそれぞれに、アドレスの間隔が２０である要素が１６個ずつ格納される。
【００４５】
まず、ベクトル命令を受けたロードバッファ制御部５は、ロードバッファ４を４つ確保する（ロードバッファ４−１〜４−４）。そして、主記憶部７−１〜７−４に対して、主記憶読み出しリクエストをそれぞれ４つずつ送る。ここで、主記憶読み出しリクエストには、主記憶部７−１〜７−４それぞれでの開始アドレスが付加されている。
【００４６】
主記憶部７−１は、メモリアドレス０〜３、メモリアドレス８０〜８３、メモリアドレス１６０〜１６３、メモリアドレス２４０〜２４３の内容を順次読み出して、読み出したデータを主記憶クロスバ６に送る。主記憶部７−２は、メモリアドレス２０〜２３、メモリアドレス１００〜１０３、メモリアドレス１８０〜１８３、メモリアドレス２６０〜２６３の内容を順次読み出して、読み出したデータを主記憶クロスバ６に送る。主記憶部７−３は、メモリアドレス４０〜４３、メモリアドレス１２０〜１２３、メモリアドレス２００〜２０３、メモリアドレス２８０〜２８３の内容を順次読み出して、読み出した主記憶クロスバ６に送る。主記憶部７−４は、メモリアドレス６０〜６３、メモリアドレス１４０〜１４３、メモリアドレス２２０〜２２３、メモリアドレス３００〜３０３の内容を順次読み出して、読み出したデータを主記憶クロスバ６に送る。主記憶クロスバ６は、主記憶部７−１〜７−４から順次送られるデータを、ロードバッファ４−１〜４−４に対して返却する。
【００４７】
ロードバッファ制御部５は、データに付加されたリクエストＩＤと、返却データが何番目に返却されたワードであるかと、に基づいて、ロードバッファテーブル８を引いて、主記憶から返却されたデータをどのロードバッファ４のどこに書き込むかを判断して、ロードバッファ４に書き込む。
【００４８】
ロードバッファ制御部５は、主記憶７からの読み出し対象となった全てのデータ（６４個のデータ）を、ロードバッファ４−１〜４−４に全て書き込えたと判断した場合には、第２オペランドで指定された０番目から３番目のベクトルレジスタ２に対してデータを転送し、全て転送し終わるとベクトルロード命令を完了する。
【００４９】
以上説明したように、本実施の形態によれば、ストライドアクセスを行う１個のベクトルロード命令によって、必要とするデータのみをメモリの読み出し単位でロードし、本来必要としない不要なアクセスの発生を防止することができる。このため、ストライドアクセス時のメモリからの読み出し回数を必要最低限の回数に抑制することができる。従って、メモリアクセスに要する消費電力を低減することができる。
さらに、本実施の形態によれば、ストライドアクセスのためにキャッシュメモリを使用せずに済むため、キャッシュメモリの容量を小さくすることができる。
【００５０】
なお、図３に示した２次元配列に対してパディングを行わなかった場合に、どのような結果となるかを以下に簡単に説明する。
パディングを行わなかった場合、例えば、図３の２次元配列の要素のうちで、１行目の１７列目の要素は、２行目の１列目から３列目までの３要素と合わせて、図１の主記憶部７−１にマッピングされる。また、例えば、２行目の４列目の要素は、２行目の５列目から７列目までの３要素と合わせて、図１の主記憶部７−２にマッピングされる。すなわち、ストライドアクセスの対象となる２行目の１列目から３列目までの３要素と、２行目の４列目の要素とが、それぞれ異なる主記憶部７−１〜７−４にマッピングされる。
このようにマッピングされた場合に、図３の２次元配列の１列目から４列目の要素に対するストライドアクセスを考える。すると、ストライドアクセスの対象となる要素（２行目の１列目から４列目の４要素）が、主記憶部７−１と主記憶部７−２とに分かれているために、例えば、主記憶部７−１に含まれる３要素を読み出すためのベクトルロード命令を実行し、さらに、主記憶部７−２に含まれる１要素を読み出すためのベクトルロード命令を実行する必要がある。しかし、主記憶部７−１に含まれる３要素を読み出すためにベクトルロード命令を実行した場合に、必要なのは３要素のみであり、他の１要素は不要な要素である。また、主記憶部７−２に含まれる３要素を読み出すためにベクトルロード命令を実行した場合に、必要なのは１要素のみであり、他の３要素は不要な要素である。すなわち、アクセス対象となる４要素がちょうど主記憶の読み出し単位に全て含まれていないために、メモリから読み出した複数のワードのうちで、レジスタにロードされるのは１ワードだけであり、その他のワードは使われないことになる。この結果、ストライドアクセス時に本来必要としない不要なアクセスをも含むことになってしまい、メモリアクセスに要する消費電力の増加につながってしまう。
【００５１】
＜その他の実施の形態＞
実施の形態１では、"第１の実施の形態では、ロードバッファ制御部５が、返却データに付加されたリクエストＩＤと、返却データが何番目に返却されたワードであるかと、に基づいて、ロードバッファテーブル８を引いて、どのロードバッファ４のどこに書き込むかを判断する"という例を示したが、本発明はこれに限定されない。
【００５２】
例えば、"まず、ロードバッファ制御部５が、読み出したデータを格納するロードバッファの番号と、そのロードバッファの書き込み位置と、を主記憶読み出しリクエストに対して付加する。主記憶部７−１〜７−４が、リクエストに付加されたこれら２つの情報を読み出したデータに付加して、ロードバッファ制御部５に返却する。さらに、ロードバッファ制御部５が、これら付加された情報に基づいて、ロードバッファ４への書き込みを行う。"という構成を採用することもできる。すなわち、ロードバッファ制御部５は、リクエストの識別情報と、そのリクエストにより主記憶７から読み出されるデータのロードバッファ４での書き込み位置情報と、に基づいて、主記憶７から読み出したデータのロードバッファ４への書き込みを制御する。これにより、ロードバッファ制御部５は、ロードバッファテーブル８を有せずとも、本発明の効果を奏することができる。
【００５３】
ここで、図６を参照して、本発明の概要を改めて説明する。図６は、本発明にかかるベクトル処理装置の本質的部分のみを抽出して記載したブロック図である。
図に示すように、ベクトル処理装置は、メモリの読み出し単位ごとにそれぞれ異なる記憶部７−１〜７−４に記憶するようにインターリーブされた主記憶７と、主記憶７から読み出されたデータを一時的に格納するロードバッファ４と、主記憶７に対するデータ読み出しリクエストの発行、および主記憶７から読み出されたデータのロードバッファ４への書き込みを制御するロードバッファ制御部５と、ロードバッファ４から転送されるデータを格納するベクトルレジスタ２と、を備えている。
【００５４】
ここで、主記憶７の２次元配列の要素は、メモリのアドレスが連続して格納されない次元方向の全ての要素がメモリの読み出し単位内での位置が同じになるように予め位置が調整されて主記憶７に格納される。ロードバッファ制御部５は、メモリのアドレスが連続して格納されない次元方向へのアクセスを行うベクトルロード命令を受けた場合に、リクエストの識別情報と、そのリクエストにより主記憶７から読み出されるデータのロードバッファ４での書き込み位置情報と、に基づいて、主記憶７から読み出されたデータのロードバッファ４への書き込みを制御する。
【００５５】
本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【００５６】
上記の実施の形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【００５７】
（付記１）
メモリの読み出し単位ごとにそれぞれ異なる記憶手段に記憶するようにインターリーブされた主記憶装置と、
前記主記憶装置から読み出されたデータを一時的に格納するロードバッファと、
前記主記憶装置に対するデータ読み出しリクエストの発行、および前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御するロードバッファ制御手段と、
前記ロードバッファから転送されるデータを格納するベクトルレジスタと、を備え、
前記主記憶装置上の２次元配列の要素が、メモリのアドレスが連続して格納されない次元方向の全ての要素が前記メモリの読み出し単位内での位置が同じになるように予め位置が調整されて前記主記憶装置に格納され、
前記ロードバッファ制御手段は、前記メモリのアドレスが連続して格納されない次元方向へのアクセスを行うベクトルロード命令を受けた場合に、前記リクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置情報と、に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
ベクトル処理装置。
【００５８】
（付記２）
前記メモリのアドレスが連続して格納されない次元方向の要素数が、前記メモリの読み出し単位の整数倍となるように要素が予め追加されることで、前記２次元配列の要素の位置が予め調整される、
付記１に記載のベクトル処理装置。
【００５９】
（付記３）
前記ロードバッファ制御手段は、前記主記憶装置に対するリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置を示す情報と、を対応付けて保持するロードバッファテーブルを有し、当該ロードバッファテーブルを参照して、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
付記１または２に記載のベクトル処理装置。
【００６０】
（付記４）
前記ロードバッファ制御手段は、前記主記憶装置に対するリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置を示す情報と、を前記主記憶装置に対して送出し、前記主記憶装置から読み出されて返却されるデータに付加されるこれら情報に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
付記１または２に記載のベクトル処理装置。
【００６１】
（付記５）
前記主記憶装置がＳＤＲＡＭを用いて構成される、
付記１ないし４のいずれか１項に記載のベクトル処理装置。
【００６２】
（付記６）
主記憶装置上の２次元配列の要素が、メモリのアドレスが連続して格納されない次元方向の全ての要素が前記メモリの読み出し単位内での位置が同じになるように予め位置が調整されて前記主記憶装置に格納されるステップと、
前記メモリのアドレスが連続して格納されない次元方向へのアクセスを行うベクトルロード命令を受けた場合に、前記主記憶装置に対するデータ読み出しリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータのロードバッファでの書き込み位置情報と、に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御するステップと、
を備えるベクトル処理装置のベクトル処理方法。
【００６３】
（付記７）
前記２次元配列の要素の位置が予め調整されるステップでは、前記メモリのアドレスが連続して格納されない次元方向の要素数が、前記メモリの読み出し単位の整数倍となるように要素が予め追加される、
付記６に記載のベクトル処理装置のベクトル処理方法。
【００６４】
（付記８）
前記ロードバッファへの書き込みを制御するステップは、前記主記憶装置に対するリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置を示す情報と、を対応付けて保持し、当該保持した情報を参照して、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
付記６または７に記載のベクトル処理装置のベクトル処理方法。
【００６５】
（付記９）
前記ロードバッファへの書き込みを制御するステップは、前記主記憶装置に対するリクエストの識別情報と、当該リクエストにより前記主記憶装置から読み出されるデータの前記ロードバッファでの書き込み位置を示す情報と、を前記主記憶装置に対して送出し、前記主記憶装置から読み出されて返却されるデータに付加されるこれら情報に基づいて、前記主記憶装置から読み出されたデータの前記ロードバッファへの書き込みを制御する、
付記６または７に記載のベクトル処理装置のベクトル処理方法。
【００６６】
（付記１０）
前記主記憶装置がＳＤＲＡＭを用いて構成される、
付記６ないし９のいずれか１項に記載のベクトル処理装置のベクトル処理方法。
【符号の説明】
【００６７】
１  ベクトル演算器
２  ベクトルレジスタ
３  演算器クロスバ
４  ロードバッファ
４−１〜４−４  ロードバッファ
５  ロードバッファ制御部
６  主記憶クロスバ
７  主記憶
７−１〜７−４  主記憶部
８  ロードバッファテーブル
３０１    パディングした範囲
【図１】
0005527340.tif 000002
【図２】
0005527340.tif 000003
【図３】
0005527340.tif 000004
【図４】
0005527340.tif 000005
【図５】
0005527340.tif 000006
【図６】
0005527340.tif 000007