(57)【特許請求の範囲】
【請求項１】
メモリの複数のバンクに第１のバンクアクセス順序でアクセスする第１の処理部と、
前記第1の処理部のアクセスの開始に続いて第２のバンクアクセス順序で前記複数のバンクにアクセスを開始する第２の処理部と、
前記第１の処理部及び前記第２の処理部による前記複数のバンクへのアクセスが競合する場合に、前記第２のバンクアクセス順序を前記競合が生じない第３のバンクアクセス順序に並べ替えて前記第２の処理部を前記複数のバンクにアクセスさせる制御部とを備えることを特徴とするプロセッサ。
【請求項２】
請求項１において、
前記制御部は、前記第３のバンクアクセス順序による前記第２の処理部の前記複数のバンクへのアクセスの開始タイミングを、前記第１の処理部の前記複数のバンクへのアクセスの開始タイミングから１サイクル後に制御することを特徴とするプロセッサ。
【請求項３】
請求項１または２において、
前記第２の処理部は、前記第３のバンクアクセス順序により前記メモリにアクセスして読み出したデータを複数のレジスタに第１のレジスタアクセス順序でアクセスして書き込み、
前記複数のレジスタに第２のレジスタアクセス順序でアクセスし、前記書き込まれたデータを読み出す第３の処理部をさらに有し、
前記制御部は、前記第２のレジスタアクセス順序を、前記第１のレジスタアクセス順序による書き込みが終了したレジスタから順にアクセスするように制御することを特徴とするプロセッサ。
【請求項４】
請求項３において、
前記制御部は、前記第２のバンクアクセス順序と前記第３のバンクアクセス順序とに基づいて前記第２のレジスタアクセス順序を並べ替えることを特徴とするプロセッサ。
【請求項５】
請求項１または２において、
前記第１の処理部は、前記第１のバンクアクセス順序により前記メモリにアクセスして読み出したデータを複数のレジスタに第１のレジスタアクセス順序でアクセスして書き込み、
前記第２の処理部は、前記第３のバンクアクセス順序により前記メモリにアクセスして読み出したデータを前記複数のレジスタに第２のレジスタアクセス順序でアクセスして書き込み、
前記複数のレジスタに第３のレジスタアクセス順序でアクセスし、前記第1及び第２の処理部により書き込まれたデータを読出す第３の処理部をさらに有し、
前記制御部は、前記第３のレジスタアクセス順序を、前記第1及び第２の処理部による書き込みが終了したレジスタから順にアクセスするように制御することを特徴とするプロセッサ。
【請求項６】
複数のレジスタに第１のレジスタアクセス順序でアクセスしてデータを書き込む第１の処理部と、
前記複数のレジスタに第２のレジスタアクセス順序でアクセスして前記書き込まれたデータを読出す第２の処理部と、
前記第２のレジスタアクセス順序を、前記複数のレジスタのうち、読み出すデータの前記第１の処理部による書き込みが終了したレジスタから順にアクセスされる第３のレジスタアクセス順序に並べ替えて、前記第２の処理部に前記複数のレジスタへアクセスさせる制御部とを有するプロセッサ。
【請求項７】
複数のレジスタに第１のレジスタアクセス順序でアクセスしてデータを書き込む第１の処理部と、
前記複数のレジスタに第２のレジスタアクセス順序でアクセスしてデータを書き込む第２の処理部と、
前記複数のレジスタに第３のレジスタアクセス順序でアクセスして前記第１、第２の処理部により書き込まれたデータを読出す第３の処理部と、
前記第３のレジスタアクセス順序を、前記複数のレジスタのうち、読み出すデータの前記第１、第２の処理部による書き込みが終了したレジスタから順にアクセスするように制御する制御部とを有するプロセッサ。
【請求項８】
メモリの複数のバンクに第１のバンクアクセス順序でアクセスする第１の処理部と、前記第1の処理部のアクセスの開始に続いて第２のバンクアクセス順序で前記複数のバンクにアクセスを開始する第２の処理部とを有するプロセッサの制御方法であって、
前記第１の処理部及び前記第２の処理部による前記複数のバンクへのアクセスが競合する場合に、前記第２のバンクアクセス順序を前記競合が生じない第３のバンクアクセス順序に並べ替えて前記第２の処理部を前記複数のバンクにアクセスさせる、
プロセッサの制御方法。
【請求項９】
請求項８において、
前記第２の処理部が、前記第３のバンクアクセス順序により前記メモリにアクセスして読み出したデータを複数のレジスタに第１のレジスタアクセス順序でアクセスして書き込み、
前記プロセッサが、前記複数のレジスタに第２のレジスタアクセス順序でアクセスして前記書き込まれたデータを読み出す第３の処理部をさらに有し、
前記第２のレジスタアクセス順序を、前記第１のレジスタアクセス順序による書き込みが終了したレジスタから順にアクセスするように制御する、
プロセッサの制御方法。
【請求項１０】
請求項８において、
前記第１の処理部が、前記第1のバンクアクセス順序により前記メモリにアクセスして読み出したデータを複数のレジスタに第１のレジスタアクセス順序でアクセスして書き込み、
前記第２の処理部が、前記第３のバンクアクセス順序により前記メモリにアクセスして読み出したデータを前記複数のレジスタに第２のレジスタアクセス順序でアクセスして書き込み、
前記プロセッサが、前記複数のレジスタに第３のレジスタアクセス順序でアクセスして前記第1及び第２の処理部により書き込まれたデータを読出す第３の処理部をさらに有し、
前記第３のレジスタアクセス順序を、前記第1及び第２の処理部による書き込みが終了したレジスタから順にアクセスするように制御する、
プロセッサの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ、及びプロセッサの制御方法に関する。
【背景技術】
【０００２】
ベクトルプロセッサは、データメモリからデータを読み出すロード・ストア命令や、読み出したデータに対する演算処理命令を複数のパイプラインにより並列で実行し、高速なベクトル演算を行う。複数のロード・ストア命令において、同一メモリへのアクセス競合を回避するための方法が提案されている。メモリアクセスの競合回避に関し、たとえば、特許文献１〜３に記載されている。一例では、メモリバンクへのアクセスは、バンクインターリーブ方式で制御される。バンクインターリーブ方式では、連続するアドレスを有する記憶領域を複数のバンクに分割し、連続するアドレスへのアクセスが、バンクごとに時間をずらして行われる。
【０００３】
しかし、バンクインターリーブ方式を採用したとしても、複数のロード・ストア命令において、同一のバンクへのアクセスが競合するバンク競合が発生する。よって、バンク競合を回避するために、競合する命令のうちいずれかの発行を遅らせる（ストールする）ことでバンク競合を回避する方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−１６２０６４号公報
【特許文献２】特開平９−３０５４８７号公報
【特許文献３】特開２００８−１３５８１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ストールが頻繁に生じると、処理効率が低下するので問題となる。
【０００６】
そこで、本発明の目的は、複数のパイプラインを有するプロセッサであって、処理効率を低下させることなくバンク競合を回避できるプロセッサ、及びその制御方法を提供することにある。
【課題を解決するための手段】
【０００７】
上記の目的を達成するための一実施形態におけるプロセッサは、メモリの複数のバンクに第１のバンクアクセス順序でアクセスする第１の処理部と、前記第1の処理部のアクセスの開始に続いて第２のバンクアクセス順序で前記複数のバンクにアクセスを開始する第２の処理部と、前記第１の処理部及び前記第２の処理部による前記複数のバンクへのアクセスが競合する場合に、前記第２のバンクアクセス順序を前記競合が生じない第３のバンクアクセス順序に並べ替えて前記第２の処理部を前記複数のバンクにアクセスさせる制御部とを備える。
【発明の効果】
【０００８】
以下に説明する実施形態によれば、複数のパイプラインを有するプロセッサにおいて、処理効率を低下させることなくバンク競合を回避できる。
【図面の簡単な説明】
【０００９】
【図１】本実施形態におけるプロセッサの構成を説明するための図である。
【図２】データメモリの構成を模式的に示す図である。
【図３】ベクトルレジスタについて説明する図である。
【図４】ロード・ストア命令を実行するベクトルパイプライン動作を説明するための図である。
【図５】バンク競合について説明する図である。
【図６】並べ替え制御部１１４４の構成図である。
【図７】メモリアクセス順序等を説明するための図である。
【図８】バンクアクセス順序の並べ替え手順を示すフローチャート図である。
【図９】４個のスロットによりロード・ストア命令が実行される例を示す図である。
【図１０】レジスタアクセス順序の並べ替えについて説明する図である。
【図１１】アクセス順序制御部６０２の動作を説明するための図である。
【図１２】並べ替え管理フラグに書き込まれる値の例を示す図である。
【図１３】発行タイミング検出について説明する図である。
【図１４】２つのロード・ストア命令に演算命令が依存する場合のシーケンスを示す図である。
【図１５】レジスタアクセス順序の並べ替えの動作手順を示すフローチャート図である。
【発明を実施するための形態】
【００１０】
以下、図面にしたがって本発明の実施の形態について説明する。但し、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１１】
図１は、本実施形態におけるプロセッサの構成を説明するための図である。本実施形態におけるプロセッサの例として、ベクトルプロセッサ１００の構成が示される。ベクトルプロセッサ１００では、命令メモリ１０２に格納された命令に従って、ベクトルパイプライン１０４がデータメモリ１０６に格納されるデータを読み出して各種演算を行う。
【００１２】
ベクトルプロセッサ１００は、命令メモリ１０２、ベクトルパイプライン１０４、データメモリ１０６のほかに、デコーダ１０８、ベクトルレジスタ１１０、スカラレジスタ１１２、バンク競合検出部１１３、及び制御部１１４を有する。ベクトルプロセッサ１００は、たとえば、信号処理用ＬＳＩ（Large Scale Integrated circuit）である。データメモリ１０６は、ベクトルプロセッサ１００の外部に設けてもよい。
【００１３】
命令メモリ１０２は、ベクトルパイプライン１０４に対する各種命令を格納する。各種命令は、データメモリ１０６からデータをベクトルレジスタ１１０に読み出すロード・ストア命令や、ベクトルレジスタ１１０に格納されるデータに対し算術演算などを行う演算命令などである。命令メモリ１０２は、たとえばＳＲＡＭ（Static Random Access Memory）である。
【００１４】
デコーダ１０８は、命令メモリ１０２から命令を読み出してデコードし、デコードした命令をベクトルパイプライン１０４に入力するとともに、ロード・ストア命令でアクセスするデータメモリ１０６のアドレスをスカラレジスタ１１２から読み出し、ベクトルパイプライン１０４に入力する。
【００１５】
データメモリ１０６は、たとえばＤＲＡＭ（Dynamic Random Access Memory）などの大容量メモリである。データメモリ１０６は、記憶領域に連続したアドレスが割り当てられる。記憶領域は、それぞれ入出力ポートを有する複数のバンクに分割される。データメモリ１０６では、バンクインターリーブにより記憶領域にアクセスがなされる。
【００１６】
ベクトルパイプライン１０４は、それぞれロード・ストア命令や演算命令をパイプラインにより実行するスロット１０４０、１０４１、１０４２、及び１０４３を有する。スロット１０４０〜１０４３は、それぞれ、シーケンサｓｅｑ０〜ｓｅｑ３と、演算器ｐｒｃ０〜ｐｒｃ３を有する。スロット１０４０〜１０４３では、それぞれ、シーケンサｓｅｑ０〜ｓｅｑ３による制御のもと、演算器ｐｒｃ０〜ｐｒｃ３が命令を実行する。各スロットが実行する命令と、その実行タイミングは、各命令に応じてシーケンサｓｅｑ０〜ｓｅｑ３により決定される。スロット１０４０〜１０４３が、本実施形態における処理部の例である。
【００１７】
ベクトルプロセッサ１００は、たとえば、命令のフェッチ「ＩＦ」、命令のデコード「ＩＤ」、命令の実行「ＥＸ」、メモリアクセス「ＭＥＭ」、及び実行結果のレジスタ書込み「ＷＢ」のステージにより、命令が実行される。ＩＦ、ＩＤステージは、同一サイクルで実行される。ＩＤステージで、デコードされた命令がスロット１０４０〜１０４３のシーケンサｓｅｑ０〜ｓｅｑ３に入力される。また、ＥＸ〜ＷＢの各ステージでは、ベクトルパイプライン１０４のスロット１０４０〜１０４３により、命令に応じた処理が実行される。ＥＸステージでシーケンサｓｅｑ０〜３から演算器ｐｒｃ０〜ｐｒｃ３に命令が転送され、演算器ｐｒｃ０〜ｐｒｃ３が各命令に応じた処理を実行する。
【００１８】
たとえば、ロード・ストア命令の場合、ＩＦステージで、命令メモリ１０２からロード・ストア命令が読み出される。そして、ＩＤステージで、デコーダ１０８がロード・ストア命令をデコードして、スロット１０４０〜１０４３に入力する。各スロットは、ＥＸステージでデータメモリ１０６にアクセスし、ＭＥＭステージでデータメモリ１０６からデータ要素を読み出し、そして、読み出したデータ要素をＷＢステージでベクトルレジスタ１１０に書き込む。また、演算命令の場合、ＩＦステージで、命令メモリ１０２から演算命令が読み出され、ＩＤステージで演算命令がデコードされてベクトルパイプライン１０４０〜１０４３に入力される。各スロットは、ＥＸステージでベクトルレジスタ１１０からデータ要素を読み出して演算を実行し、ＷＢステージで演算結果をベクトルレジスタ１１０に書き込む。
【００１９】
図２には、データメモリ１０６の構成が模式的に示される。データメモリ１０６は、連続したアドレスが行方向及び列方向に割り当てられた記憶領域１０６０を有する。記憶領域１０６０の各マス目は、１６ビットごとのデータの格納領域を示す。１６ビットごとのデータがデータ要素である。マス目の中の数字は、データ要素の順番を示す。記憶領域１０６０は、それぞれ入出力ポートを有する４個のバンクＢＫ０〜ＢＫ３に分割される。以下、４個のバンクを例に説明がなされるが、バンク数は４個以外であってもよい。各バンクは、８個のデータ要素に対応する１２８ビットのバンク幅を有する。たとえば、行Ｒ１には、バンクＢＫ０に「０」番目〜「７」番目の、バンクＢＫ１に「８」番目〜「１５」番目の、バンクＢＫ１に「１６」番目〜「２３」番目の、そして、バンクＢＫ２に「２４」番目〜「３１」番目のデータ要素が格納される。バンクＢＫ０〜ＢＫ３からは、読出しアドレスが入力される１アクセスで、それぞれ８個のデータ要素が読み出される。
【００２０】
図３は、ベクトルレジスタ１１０について説明する図である。ベクトルレジスタ１１０には、スロット１０４０〜１０４３が演算処理するためのデータメモリ１０６から読み出されたデータ要素が、一時的に格納される。図３（Ａ）に示すように、ベクトルレジスタ１１０の記憶領域１１００は１２８ビットの幅を有し、１つの行アドレスに８個のデータ要素が格納される。記憶領域１１００における各マス目は１６ビット長の格納領域を示し、マス目の中の数字はデータ要素の番号を示す。
【００２１】
図３（Ｂ）には、ベクトルレジスタ１１０における論理ベクトルレジスタ（ＶＲ）番号と物理ベクトルレジスタ（ＶＲ）番号の例が示される。論理ベクトルレジスタ番号は、ロード・ストア命令や演算命令におけるベクトルレジスタ１１０のデータの位置を示す。一方、物理ベクトルレジスタ番号は、ベクトルレジスタ１１０における物理的なデータの位置を示す。論理ベクトルレジスタ番号は、ｖｒ０、ｖｒ１、ｖｒ２、・・・と表わされる。また、それぞれの論理ベクトルレジスタ番号に対応する物理ベクトルレジスタ番号は、ｖｒ[０]、ｖｒ[１]、ｖｒ[２]、・・・と表わされる。物理ベクトルレジスタ番号は、たとえば、図３（Ａ）のデータ要素の番号に対応しており、本実施形態における複数のレジスタの例である。
【００２２】
図４は、ロード・ストア命令を実行するベクトルパイプライン１０４の動作を説明するための図である。図４（Ａ）には、データメモリ１０６におけるアドレス配置が示される。左から右へ、上から下へアドレスが増加する。バンクＢＫ０において、各行のベースアドレスは、０ｘ００、０ｘ４０、０ｘ８０、０ｘＣ０、・・・である。また、バンクＢＫ１〜ＢＫ３の先頭におけるベースアドレスからのオフセット値は、それぞれ、０ｘ１０、０ｘ２０、０ｘ３０である。
【００２３】
図４（Ｂ）には、ロード・ストア命令の処理シーケンスが示される。ここでは、横軸を処理サイクルＣ１、Ｃ２、Ｃ３，・・・として、２個のスロットが実行するロード・ストア命令の例が示される。たとえば、ロード・ストア命令ＬＳ１は、スロット１０４０により実行される。この命令は、「ｖｌｄｈ  ｓｒ２，ｖｒ０」であり、データメモリ１０６の論理アドレス「ｓｒ２」（たとえばバンクＢＫ０の「０ｘ００」）から順次、論理ベクトルレジスタ番号ｖｒ０にデータの読み出しを指示する命令である。また、ロード・ストア命令ＬＳ２は、スロット１０４１により実行される。この命令は、「ｖｌｄｈ  ｓｒ３，ｖｒ１」であり、データメモリ１０６の論理アドレス「ｓｒ３」（たとえば、たとえばバンクＢＫ１の「０ｘ１１０」から、論理ベクトルレジスタ番号ｖｒ１にデータの読み出しを指示する命令である。図４（Ｂ）では、各処理サイクルにおいてアクセスするバンクとアドレスとが示される。また、各処理サイクルは図１で示したパイプラインにおける「ＥＸ」ステージに対応する。なお、ここでは、４つの処理サイクルが１つの命令サイクルに対応する（以下、同様）。
【００２４】
ロード・ストア命令ＬＳ１は、たとえば、処理サイクルＣ１から実行される。まず、スロット１０４０は、サイクルＣ１でバンクＢＫ０のアドレス「０ｘ００」に、サイクルＣ２でバンクＢＫ１のアドレス「０ｘ１０」に、サイクルＣ３でバンクＢＫ２のアドレス「０ｘ２０」に、そして、サイクルＣ４でバンクＢＫ３のアドレス「０ｘ３０」にアクセスする。これに引き続いて、さらに、スロット１０４０は、サイクルＣ５でバンクＢＫ０のアドレス「０ｘ４０」に、サイクルＣ６でバンクＢＫ１のアドレス「０ｘ５０」に、サイクルＣ７でバンクＢＫ２のアドレス「０ｘ６０」に、そして、サイクルＣ８でバンクＢＫ３のアドレス「０ｘ７０」にアクセスする。なお、スロット１０４０がアクセスするデータメモリ１０６のアドレスは、図４（Ａ）で、斜線「／」により示される。
【００２５】
一方、ロード・ストア命令ＬＳ２は、処理サイクルＣ２から実行される。スロット１０４１は、サイクルＣ２でバンクＢＫ０のアドレス「０ｘ１００」に、サイクルＣ３でバンクＢＫ１のアドレス「０ｘ１１０」に、サイクルＣ４でバンクＢＫ２のアドレス「０ｘ１２０」に、そして、サイクルＣ５でバンクＢＫ３のアドレス「０ｘ１３０」にアクセスする。これに引き続いて、さらに、スロット１０４１は、サイクルＣ６でバンクＢＫ０のアドレス「０ｘ１４０」に、サイクルＣ７でバンクＢＫ１のアドレス「０ｘ１５０」に、サイクルＣ８バンクＢＫ２のアドレス「０ｘ１６０」に、そして、サイクルＣ９でバンクＢＫ３のアドレス「０ｘ１７０」にアクセスする。なお、スロット１０４１がアクセスするデータメモリ１０６のアドレスは、図４（Ａ）で、斜線「＼」により示される。
【００２６】
図４（Ｂ）では、スロット１０４０、１０４１が同じサイクルで同じバンクにアクセスすることがない。よって、この場合、バンク競合は生じない。しかし、スロット１０４０、１０４１が同じサイクルで同じバンクにアクセスすると、バンク競合が生じる。かかる場合、制御部１１４が命令の並べ替えを行うことで、処理効率を低下させることなくバンク競合を回避する。
【００２７】
図５は、バンク競合が生じる場合を示す。図５（Ａ）には、図４（Ａ）と同じデータメモリ１０６のアドレスが示される。また、図５（Ｂ）〜（Ｄ）には、ロード・ストア処理のシーケンスが示される。なお、図５（Ｂ）〜（Ｄ）においてロード・ストア命令ＬＳ１、ＬＳ２によりアクセスされるメモリ１０６のアドレスは、図５（Ａ）においてそれぞれ斜線「／」、「＼」で示される。
【００２８】
図５（Ｂ）では、スロット１０４１が実行するロード・ストア命令ＬＳ２において、データメモリ１０６におけるアクセスの開始アドレスが、図４（Ｂ）の場合と異なる。たとえば、スロット１０４１は、サイクルＣ２でバンクＢＫ１のアドレス「０ｘ１１０」へのアクセスを開始し、サイクルごとに、バンクＢＫ２のアドレス「０ｘ１２０」、バンクＢＫ３のアドレス「０ｘ１３０」にアクセスし、さらに引き続き、バンクＢＫ０のアドレス「０ｘ１４０」、バンクＢＫ１のアドレス「０ｘ１５０」、バンクＢＫ２のアドレス「０ｘ１６０」、ＢＫ３のアドレス「０ｘ１７０」、そしてバンクＢＫ０のアドレス「０ｘ１８０」にアクセスする。すなわち、いわゆるラップ（折り返し）パターンでアクセスが行われる。すると、サイクルＣ２〜Ｃ８においてバンク競合が発生する。
【００２９】
ここで、バンク競合をストールにより回避しようとすると、図５（Ｃ）に示すようになる。図５（Ｃ）に示すように、ロード・ストア命令ＬＳ２を１サイクル分ストールすることにより、バンク競合が回避される。しかし、これにより、ロード・ストア命令ＬＳ２の終了がサイクルＣ１０まで遅延する。
【００３０】
そこで、本実施形態では、制御部１１４が、第１の処理部であるスロット１０４０が第１のロード・ストア命令ＬＳ１の実行を開始した後に第２の処理部であるスロット１０４１が第２のロード・ストア命令ＬＳ２の実行を開始するとき、第２の命令における複数のバンクＢＫ０〜ＢＫ３へのバンクアクセス順序を、スロット１０４０、１０４１のバンクへのアクセスが競合しないようなバンクアクセス順序（以下、競合回避バンクアクセス順序という）に並べ替えて、スロット１０４１に第２のロード・ストア命令ＬＳ２を実行させる。
【００３１】
具体的には、図５（Ｄ）に示すように、図５（Ａ）でサイクルＣ５に対応していたバンクＢＫ０のアドレス「０ｘ１４０」へのアクセスをサイクルＣ２で実行し（矢印５１）、サイクルＣ２〜Ｃ４に対応していたＢＫ１のアドレス「０ｘ１１０」、バンクＢＫ２のアドレス「０ｘ１２０」、バンクＢＫ３のアドレス「０ｘ１３０」へのアクセスを、それぞれ１サイクル遅らせる。また、同様に、図５（Ａ）でサイクルＣ９に対応していたバンクＢＫ０のアドレス「０ｘ１８０」へのアクセスをサイクルＣ６で実行し（矢印５２）、サイクルＣ６〜Ｃ８に対応していたＢＫ２のアドレス「０ｘ１５０」、バンクＢＫ２のアドレス「０ｘ１６０」、バンクＢＫ３のアドレス「０ｘ１７０」へのアクセスを、それぞれ１サイクル遅らせる。そうすることで、４つのサイクルのうち、第１〜第３サイクルを１サイクル分ストールさせ、第４サイクルを最初に実行することと等価になる。よって、バンク競合が回避される。このように並べ替えられた競合回避バンクアクセス順序で、ロード・ストア命令ＬＳ２が実行される。このようにして、たとえば図５（Ｂ）との比較において示されるように、ロード・ストア命令ＬＳ２をストールすることなく、すなわち処理効率を低下させることなく、バンク競合を回避することができる。  
【００３２】
図１に戻り、さらに図６を参照しつつ、上記の制御を行う制御部１１４について説明する。制御部１１４は、依存関係検出部１１４２と、並べ替え制御部１１４４と、並べ替えアドレス生成部１１４６とを有する。また、並べ替え制御部１１４４は、図６に示すように、アクセス順序制御部６０２、レジスタ管理部６０４、発行タイミング検出部６０６、並べ替え管理フラグ６０８、６１０、６１２、６１４、及び、レジスタ管理フラグ６１６、６１８、６２０、６２２を有する。図１、図６に示す構成のうち、まず、バンクアクセス順序の並べ替えに関する構成の動作について説明する。
【００３３】
制御部１１４には、デコーダ１０８からデコードされたロード・ストア命令ＬＳ１、ＬＳ２が入力される。また、バンク競合検出部１１３には、デコードされたロード・ストア命令ＬＳ１、ＬＳ２でアクセスするデータメモリ１０６のアドレスが、スカラレジスタ１１２から入力される。バンク競合検出部１１３は、ロード・ストア命令ＬＳ１、ＬＳ２のバンクアクセス順序を解析し、ロード・ストア命令ＬＳ１、ＬＳ２におけるバンク競合を検出する。バンク競合は、各ロード・ストア命令がそれぞれ予定されるタイミングで実行された場合に、各ロード・ストア命令に同じサイクルで同じバンクにアクセスする命令が含まれているときに検出される。バンク競合検出部１１３は、バンク競合を検出すると、これを並べ替え制御部１１４４に通知する。これに応答して、並べ替え制御部１１４４は、ロード・ストア命令ＬＳ２のバンクアクセス順序を、競合回避バンクアクセス順序に並べ替える。
【００３４】
並べ替え制御部１１４４では、アクセス順序制御部６０２が、ロード・ストア命令ＬＳ１、ＬＳ２のバンクアクセス順序を判定する。ロード・ストア命令ＬＳ１、ＬＳ２は、たとえば図７（Ａ）に示すような、データメモリ１０６のアドレスへの、処理サイクルごとのアクセス順序（以下、メモリアクセス順序という）を有する。ここでは、メモリアクセス順序が、各バンクの先頭のベースアドレスからのオフセット値で示される。たとえば、メモリアクセス順序ＭＡ１は、バンクＢＫ０の「０ｘ０」、バンクＢＫ１の「０ｘ１０」、バンクＢＫ２の「０ｘ２０」、そしてバンクＢＫ３の「０ｘ３０」の順序である。また、メモリアクセス順序ＭＡ２は、「０ｘ１０」、「０ｘ２０」、「０ｘ３０」、「０ｘ０」の順序である。さらに、メモリアクセス順序ＭＡ３は、「０ｘ２０」、「０ｘ３０」、「０ｘ０」、「０ｘ１０」の順序である。そして、メモリアクセス順序ＭＡ４は、「０ｘ３０」、「０ｘ０」、「０ｘ１０」、「０ｘ２０」の順序である。アクセス順序制御部６０２は、このようなメモリアクセス順序ＭＡ１〜ＭＡ４から、図７（Ｂ）に示すようなバンクアクセス順序を判定する。たとえば、メモリアクセス順序ＭＡ１に対応するバンクアクセス順序ＢＡ１は、バンクＢＫ０、ＢＫ１、ＢＫ２、ＢＫ３の順序である。また、メモリアクセス順序ＭＡ２に対応するバンクアクセス順序ＢＡ２は、バンクＢＫ１、ＢＫ２、ＢＫ３、ＢＫ０の順序である。さらに、メモリアクセス順序ＭＡ３に対応するバンクアクセス順序ＢＡ３は、バンクＢＫ２、ＢＫ３、ＢＫ０、ＢＫ１の順序である。そして、メモリアクセス順序ＭＡ４に対応するバンクアクセス順序ＢＡ４は、バンクＢＫ３、ＢＫ０、ＢＫ１、ＢＫ２の順序である。
【００３５】
たとえば、図５（Ｂ）の例では、ロード・ストア命令ＬＳ１のバンクアクセス順序はＢＡ１と判定される。また、ロード・ストア命令ＬＳ２のバンクアクセス順序は、ＢＡ２と判定される。よって、アクセス順序制御部６０２は、ロード・ストア命令ＬＳ２のバンクアクセス順序ＢＡ２を、ロード・ストア命令ＬＳ１とバンク競合が生じないような競合回避アクセス順序に並べ替える。競合回避アクセス順序は、最後にアクセスされるバンクを最初にアクセスするように並べ替えた順序である。ここでは、競合回避アクセス順序は、ロード・ストア命令ＬＳ１と同じバンクアクセス順序ＢＫ１になる。そして、アクセス順序制御部６０２は、ロード・ストア命令ＬＳ１と、バンクアクセス順序が並べ替えられたＬＳ２を並べ替えアドレス生成部１１４６に転送する。並べ替えアドレス生成部１１４６は、ロード・ストア命令ＬＳ１、ＬＳ２に基づいて、データメモリ１０６のアクセスされるアドレスを生成して、スロット１１４０、１１４１にそれぞれ入力する。すると、スロット１１４０、１１４１は、ロード・ストア命令ＬＳ１、ＬＳ２に従って、図５（Ｄ）で示したように、それぞれバンクＢＫ０〜ＢＫ３に順次アクセスする。
【００３６】
また、アクセス順序制御部６０２は、各ロード・ストア命令の並べ替え前及び後のバンクアクセス順序を、並べ替え管理フラグ６０８〜６１４に書き込む。たとえば、並べ替え管理フラグ６０８〜６１４には、スロット１０４０〜１０４３で実行されるロード・ストア命令のバンクアクセス順序が書き込まれる。よって、ロード・ストア命令ＬＳ１のバンクアクセス順序ＢＡ１は、並べ替え管理フラグ６０８に書き込まれる。また、ロード・ストア命令ＬＳ２の並べ替え前のバンクアクセス順序ＢＡ１と並べ替え後のバンクアクセス順序ＢＡ２は、並べ替え管理フラグ６１０に書き込まれる。
【００３７】
さらに、レジスタ管理部６０４には、デコーダ１０８からロード・ストア命令の実行状態が入力される。命令の実行状態には、「ＥＸ」、「ＭＥＭ」、「ＷＢ」などのステージごとに、対応する命令がデコードされたことを示す情報が含まれる。レジスタ管理部６０４は、命令の実行状態をレジスタ管理フラグ６１６〜６２２に記録して管理する。この動作については後に詳述する。
【００３８】
図８は、バンクアクセス順序の並べ替え手順を示すフローチャート図である。図８に示す手順は、たとえば、１命令サイクル分の命令がフェッチされるごとに実行される。まず、デコーダ１０８がロード・ストア命令をデコードする（Ｓ８０２）。そして、バンク競合検出部１１３が、バンク競合の有無を判定する（Ｓ８０４）。
【００３９】
バンク競合が検出されない場合（Ｓ８０４のＮｏ）、ロード・ストア命令がベクトルパイプライン１０４で実行される（Ｓ８１２）。たとえば、ロード・ストア命令ＬＳ１は、先行の命令との間でバンク競合が生じない。よって、並べ替えアドレス生成部１１４６が生成するアドレスに対し、ロード・ストア命令ＬＳ１がスロット１０４０により実行される。そして、並べ替え制御部１１４４が、データが書き込まれたベクトルレジスタ１１０のレジスタを管理する（Ｓ８１４）。たとえば、スロット１０４０がロード・ストア命令ＬＳ１のＷＢステージが完了したときに、そのことを示す情報がレジスタ管理フラグ６１６〜６２２のうち６１６に書き込まれる。詳しくは後述するが、ロード・ストア命令ＬＳ１では書き込み先のレジスタが指定されているので、ＷＢステージの完了を把握することで、そのレジスタへの処理完了が管理される。
【００４０】
一方、バンク競合が検出された場合（Ｓ８０４のＹｅｓ）、並べ替え制御部１１４２が、競合回避バンクアクセス順序を決定する（Ｓ８０６）。たとえば、ロード・ストア命令ＬＳ２の場合、ロード・ストア命令ＬＳ１との間でバンク競合が検出される。よって、アクセス順序制御部６０２により、ロード・ストア命令ＬＳ２の競合回避バンクアクセス順序ＢＡ１が決定される。そして、並べ替えアドレス生成部１１４６が、競合回避バンクアクセス順序に対応する並べ替えアドレスを生成する（Ｓ８０８）。そして、アクセス順序制御部６０２が、バンクアクセス順序を管理する（Ｓ８１０）。たとえば、ロード・ストア命令ＬＳ２の並べ替え前と後のバンクアクセス順序が、並べ替え管理フラグ６１０〜６２２のうち６１０に書き込まれる。そして、ロード・ストア命令がベクトルパイプライン１０４で実行される（Ｓ８１２）。たとえば、ロード・ストア命令ＬＳ２がスロット１０４１により実行される。そして、並べ替え制御部１１４４が、データが書き込まれたレジスタを管理する（Ｓ８１４）。
【００４１】
上記のような手順によれば、ストールにより処理効率を低下させることなく、バンク競合を回避できる。
【００４２】
図９は、４個のスロットによりロード・ストア命令が実行される例を示す。図９（Ａ）〜（Ｃ）には、スロット１０４０〜１０４３によるロード・ストア処理ＬＳ１〜ＬＳ４のシーケンスが示される。
【００４３】
図９（Ａ）は、バンク競合が生じる場合のシーケンスを示す。スロット１０４０、１０４１によるロード・ストア命令ＬＳ１、ＬＳ２のシーケンスは、図５（Ｂ）と同じである。すなわち、ロード・ストア命令ＬＳ１を処理するスロット１０４０は、バンクアクセス順序ＢＡ１（ＢＫ０、ＢＫ１、ＢＫ２、ＢＫ３の順序）でデータメモリ１０６にアクセスしてデータの読み出しを行う。また、ロード・ストア命令ＬＳ２を処理するスロット１０４１は、バンクアクセス順序ＢＡ２（ＢＫ１、ＢＫ２、ＢＫ３、ＢＫ０の順序）でデータメモリ１０６にアクセスしてデータの読み出しを行う。
【００４４】
これに加え、スロット１０４２は、ロード・ストア命令ＬＳ３を実行する。ロード・ストア命令ＬＳ３は、「ｖｌｄｈ  ｓｒ４，ｖｒ２」であり、データメモリ１０６の論理アドレス「ｓｒ４」（たとえばバンクＢＫ３の「０ｘ２３０」）から順次、論理ベクトルレジスタ番号ｖｒ２にデータの読み出しを指示する命令である。これに従いスロット１０４２は、バンクアクセス順序ＢＡ４（ＢＫ３、ＢＫ０、ＢＫ１、ＢＫ２の順序）でデータメモリ１０６にアクセスする。すなわち、スロット１０４２は、サイクルＣ３でバンクＢＫ３のアドレス「０ｘ２３０」に、サイクルＣ４でバンクＢＫ０のアドレス「０ｘ２４０」に、サイクルＣ５でバンクＢＫ１のアドレス「０ｘ２５０」に、そして、サイクルＣ６でバンクＢＫ２のアドレス「０ｘ２６０」にアクセスする。さらに、スロット１０４２は、サイクルＣ７でバンクＢＫ３のアドレス「０ｘ２７０」に、サイクルＣ８でバンクＢＫ０のアドレス「０ｘ２８０」に、サイクルＣ９でバンクＢＫ１のアドレス「０ｘ２９０」に、そして、サイクルＣ１０でバンクＢＫ２のアドレス「０ｘ２Ａ０」にアクセスする。
【００４５】
また、スロット１０４３は、ロード・ストア命令ＬＳ４を実行する。ロード・ストア命令ＬＳ４は、「ｖｌｄｈ  ｓｒ５，ｖｒ３」であり、データメモリ１０６の論理アドレス「ｓｒ５」（たとえばバンクＢＫ２の「０ｘ３２０」）から順次、論理ベクトルレジスタ番号ｖｒ３にデータの読み出しを指示する命令である。これに従いスロット１０４３は、バンクアクセス順序ＢＡ３（ＢＫ２、ＢＫ３、ＢＫ０、ＢＫ１の順序）でデータメモリ１０６にアクセスする。たとえば、サイクルＣ４でバンクＢＫ２のアドレス「０ｘ３２０」に、サイクルＣ５でバンクＢＫ３のアドレス「０ｘ３３０」に、サイクルＣ６でバンクＢＫ０のアドレス「０ｘ３４０」に、そして、サイクルＣ７でバンクＢＫ１のアドレス「０ｘ３５０」にアクセスし、さらに引き続いて、サイクルＣ８でバンクＢＫ２のアドレス「０ｘ３６０」に、サイクルＣ９でバンクＢＫ３のアドレス「０ｘ３７０」に、サイクルＣ１０でバンクＢＫ０のアドレス「０ｘ３８０」に、サイクルＣ１１でバンクＢＫ１のアドレス「０ｘ３９０」にアクセスする。
【００４６】
図９（Ａ）では、サイクルＣ２〜Ｃ８で、スロット１０４０、１０４１においてバンク競合が発生している。ここで、ロード・ストア命令ＬＳ２〜ＬＳ４を順次、先のロード・ストア命令とのバンク競合が回避されるまでストールさせると、図９（Ｂ）のようになる。
【００４７】
図９（Ｂ）に示すように、ロード・ストア命令ＬＳ２が１サイクル、ロード・ストア命令ＬＳ３が３命令サイクル、そして、ロード・ストア命令ＬＳ４が６命令サイクルストールされることで、バンク競合が回避される。しかし、そうすることにより、ロード・ストア命令ＬＳ１〜ＬＳ４の終了するタイミングが、サイクルＣ１７まで遅延する。
【００４８】
そこで、本実施形態では、図９（Ｃ）に示すように、スロット１０４０がロード・ストア命令ＬＳ１の実行を開始した後にスロット１０４１がロード・ストア命令ＬＳ２の実行を開始するとき、制御部１１４は、スロット１０４０、１０４１のバンクへのアクセスが競合しないような競合回避バンクアクセス順序に並べ替えて（矢印９１、９２）、スロット１０４１にロード・ストア命令ＬＳ２を実行させる。競合回避アクセス順序は、最後にアクセスされるバンクが最初にアクセスされるような順序である。たとえば、バンクアクセス順序ＢＡ２において最後にアクセスされるバンクＢＫ０が最初にアクセスされるバンクアクセス順序ＢＡ１である。すなわち、ここでは、ロード・ストア命令ＬＳ１と同じバンクアクセス順序になる。ここにおいて、スロット１０４０、１０４１、及び１０４２におけるバンク競合が回避される。
【００４９】
さらに、スロット１０４２がロード・ストア命令ＬＳ３の実行を開始した後にスロット１０４３がロード・ストア命令ＬＳ４の実行を開始するとき、制御部１１４は、ロード・ストア命令ＬＳ４におけるバンクアクセス順序ＢＡ３を、スロット１０４２、１０４３のバンクへのアクセスが競合しないようなバンクアクセス順序、すなわち競合回避バンクアクセス順序に並べ替えて（矢印９３、９４）、スロット１０４３にロード・ストア命令ＬＳ４を実行させる。競合回避アクセス順序は、最後にアクセスされるバンクを最初にアクセスするような順序である。たとえば、バンクアクセス順序ＢＡ４において最後にアクセスされるバンクＢＫ１が最初にアクセスされるようなバンクアクセス順序ＢＡ２である。ここにおいて、スロット１０４０〜１０４３におけるバンク競合が回避される。
【００５０】
図９（Ｃ）では、ロード・ストア命令ＬＳ１〜ＬＳ４が、サイクルＣ１１で終了する。図９（Ｂ）との比較において、６サイクル分、処理を高速化できる。
【００５１】
このように、本実施形態によれば、複数のスロットにおいて、処理効率を低下させることなくバンク競合を回避することができる。
【００５２】
ところで、各ロード・ストア命令では、データメモリ１０６から読み出されるデータを書き込むベクトルレジスタ１１０のレジスタが指定される。たとえば、図９（Ａ）〜（Ｃ）におけるロード・ストア命令ＬＳ１は、論理ベクトルレジスタ番号ｖｒ０を指定し、データメモリ１０６から読み出されるデータ要素を、論理ベクトルレジスタ番号ｖｒ０に対応する物理ベクトルレジスタ番号ｖｒ[０]〜ｖｒ[６３]に書き込むための命令である。また、ロード・ストア命令ＬＳ２は、論理ベクトルレジスタ番号ｖｒ１を指定し、データメモリ１０６から読み出されるデータ要素を論理ベクトルレジスタ番号ｖｒ１に対応する物理ベクトルレジスタ番号ｖｒ[６４]〜ｖｒ[１２７]に書き込むための命令である。さらに、ロード・ストア命令ＬＳ３は、論理ベクトルレジスタ番号ｖｒ２を指定し、データメモリ１０６から読み出されるデータ要素を論理ベクトルレジスタ番号ｖｒ２に対応する物理ベクトルレジスタ番号ｖｒ[１２８]〜ｖｒ[１９１]に書き込むための命令である。そして、ロード・ストア命令ＬＳ４は、論理ベクトルレジスタ番号ｖｒ３を指定し、データメモリ１０６から読み出されるデータ要素を論理ベクトルレジスタ番号ｖｒ３に対応する物理ベクトルレジスタ番号ｖｒ[１９２]〜ｖｒ[２５５]に書き込むための命令である。すると、上記のようにしてロード・ストア命令におけるバンクアクセス順序を並べ替えたときに、ベクトルレジスタ１１０におけるデータ書込みレジスタのアクセス順序が変更される。このことは、ベクトルレジスタ１１０からデータを読み出して演算を行う演算命令の開始タイミングに影響を与える。
【００５３】
そこで、本実施形態における制御部１１４は、ベクトルレジスタ１１０の複数のレジスタにスロット１０４１によるレジスタアクセス順序とは異なるレジスタアクセス順序でアクセスし、スロット１０４１により書き込まれたデータを読出す演算命令をスロット１０４２が実行する場合において、スロット１０４２によるレジスタアクセス順序を、読出しデータのスロット１０４１による書き込みが終了したレジスタから順にアクセスされるようなレジスタアクセス順序に並べ替えて、スロット１０４２に演算命令を実行させる。
【００５４】
図１０は、レジスタアクセス順序の並べ替えについて説明する図である。図１０（Ａ）には、スロット１０４０、１０４１、及び１０４２が、ロード・ストア命令ＬＳ１、ＬＳ２、及び演算命令ＡＬ３を実行する場合のシーケンスが示される。スロット１０４０、１０４１は、ロード・ストア命令ＬＳ１、ＬＳ２を実行して、ベクトルレジスタ１１０にデータ要素を書き込む。スロット１０４２は、スロット１０４１によりベクトルレジスタ１１０に書き込まれたデータを読み出す演算命令ＡＬ３を実行する。演算命令ＡＬ３は、「ｖａｄｄｈ  ｖｒ１，ｖｒ２,ｖｒ３」であり、論理ベクトルレジスタ番号ｖｒ１、ｖｒ２に書き込まれたデータ要素を加算して、加算結果のｖｒ３への書き込みを指示する命令である。
【００５５】
ロード・ストア命令ＬＳ１、ＬＳ２のシーケンスにおいて、スロット１０４０、１０４１によりアクセスされるバンクと、読み出されたデータ要素を書き込むベクトルレジスタ１１０の物理ベクトルレジスタ番号が示される。ここでは、スロット１０４０、１０４１におけるバンク競合を回避するために、ロード・ストア命令ＬＳ２が競合回避バンクアクセス順序に並べ変えられた状態が示される。
【００５６】
たとえば、スロット１０４０は、サイクルＣ１でバンクＢＫ０にアクセスして読み出すデータをベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[０]−[７]に、サイクルＣ２でバンクＢＫ１にアクセスして読み出したデータをベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[８]−[１５]に、サイクルＣ３でバンクＢＫ２にアクセスして読み出したデータをベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[１６]−[２３]に、そして、サイクルＣ４でバンクＢＫ３にアクセスして読み出すデータをベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[２４]−[３１]に書き込む。一方、スロット１０４１は、サイクルＣ２でバンクＢＫ０にアクセスして読み出すデータをベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[８８]−[９５]に、サイクルＣ３でバンクＢＫ１にアクセスして読み出すデータをベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[６４]−[７１]に、サイクルＣ４でバンクＢＫ２にアクセスして読み出すデータをベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[７２]−[７９]に、そして、サイクルＣ５でバンクＢＫ３にアクセスして読み出すデータをベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[８０]−[８７]に書き込む。
【００５７】
また、演算命令ＡＬ３のシーケンスにおいて、スロット１０４２がデータを読み出すためにアクセスする、ベクトルレジスタ１１０の物理ベクトルレジスタ番号が示される。演算命令ＡＬ３では、ベクトルレジスタ１１０において物理ベクトルレジスタ番号の小さい順にアクセスが行われる。よって、ロード・ストア命令ＬＳ２によりアクセスされてデータが書き込まれるベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[６４]−[７１]、ｖｒ [７２]−[７９]、ｖｒ [８０]−[８７]、及びｖｒ [８８]−[９５]に対し、順にアクセスされる。このレジスタアクセス順序は、バンクアクセス順序変更前のロード・ストア命令ＬＳ２におけるレジスタアクセス順序に対応する。
【００５８】
ところで、ロード・ストア命令ＬＳ２におけるデータメモリ１０６へのアクセスは、図１で示した「ＥＸ」ステージで実行される。そして、データメモリ１０６からのデータ読み出しは「ＭＥＭ」ステージで実行され、ベクトルレジスタ１１０への書き込みは「ＷＢ」ステージで実行される。よって、図１０（Ａ）において、ロード・ストア命令ＬＳ２によるベクトルレジスタ１１０へのデータ書き込みは、データメモリ１０６へのアクセスが実行されるサイクルから２サイクル後に終了する。よって、このデータのベクトルレジスタ１１０からの読み出しは、３サイクル後から可能になる。たとえば、物理ベクトルレジスタ番号ｖｒ[６４]−[７１]からのデータの読み出しは、サイクルＣ３の３サイクル後のサイクルＣ６から可能になる。よって、演算命令ＡＬ３によれば、スロット１０４２は、サイクルＣ６でベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[６４]−[７１]から、サイクルＣ７でベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[７２]−[７９]から、サイクルＣ８でベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[８０]−[８７]から、そしてサイクルＣ９でベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[８８]−[９５]からデータ要素を読み出す。よって、演算命令ＡＬ３は、サイクルＣ９で終了する。
【００５９】
ここで、ベクトルレジスタ１１０の物理ベクトルレジスタ番号ｖｒ[８８]−[９５]からのデータ要素の読み出しに着目すると、ロード・ストア命令ＬＳ２のバンクアクセス順序が並べ替えられたことにより、物理ベクトルレジスタ番号ｖｒ[８８]−[９５]へのデータ要素の書込みは、サイクルＣ４で終了する。よって、物理ベクトルレジスタ番号ｖｒ[８８]−[９５]からのデータ要素の読出しは、サイクルＣ５から可能になる。そこで、本実施形態では、図１０（Ｂ）に示されるように、制御部１１４は、演算命令ＡＬ３におけるレジスタアクセス順序を、読出しデータのロード・ストア命令ＬＳ２による書き込みが終了したレジスタから順にアクセスされるようなレジスタアクセス順序、たとえば物理ベクトルレジスタ番号ｖｒ[８８]−[９５]へのアクセスが最初に行われるような順序に並べ替える（矢印１０００）。このようにすることで、演算命令ＡＬ３は、サイクルＣ８で終了する。よって、処理時間が短縮される。
【００６０】
図１０（Ｃ）には、ベクトルレジスタ１１０へのデータ要素の書込みが終了する前に読み出しを行うことにより処理が破綻することを回避する例として、ロード・ストア命令ＬＳ２におけるバンクアクセス順序の並べ替えを管理せずに、演算命令ＡＬ３をストールする場合が示される。ここでは、ロード・ストア命令ＬＳ２の最後の処理サイクルＣ５でアクセスされるデータの書き込みが終了してから、すなわちサイクルＣ８から、演算命令ＡＬ３の実行が開始される。よって、演算命令ＡＬ３の終了は、サイクルＣ１１になる。本実施形態によれば、このような図１０（Ｃ）との比較において、図１０（Ｂ）に示すように、３サイクル処理の終了が早くなる。
【００６１】
ここで、再び図１、及び図６を参照して、レジスタアクセス順序の並べ替えを行う制御部１１４の動作について説明する。
【００６２】
制御部１１４では、依存関係検出部１１４２に、命令メモリ１０２からロード・ストア命令ＬＳ２と演算命令ＡＬ３が入力される。依存関係検出部１１４２は、ロード・ストア命令ＬＳ２と演算命令ＡＬ３とを解析して、ロード・ストア命令ＬＳ２に対する演算命令ＡＬ３の依存関係を検出する。依存関係は、ロード・ストア命令ＬＳ２によりデータを書き込む論理ベクトルレジスタ番号と、演算命令ＡＬ３によりデータを読み出す論理ベクトルレジスタ番号が重複するときに検出される。
【００６３】
依存関係検出部１１４２は、検出結果を並べ替え制御部１１４４に転送する。並べ替え制御部１１４４は、依存関係が検出された場合、上述したロード・ストア命令ＬＳ２のバンクアクセス順序の並べ替えに加え、演算命令ＡＬ３におけるレジスタアクセス順序の並べ替えを行う。さらに、並べ替え制御部１１４４は、レジスタアクセス順序を並べ替えた演算命令ＡＬ３の発行タイミングを決定する。
【００６４】
並べ替え制御部１１４４では、アクセス順序制御部６０２に、ロード・ストア命令ＬＳ２と、演算命令ＡＬ３が入力される。そして、アクセス順序制御部６０２は、ロード・ストア命令ＬＳ２の並べ替え前のバンクアクセス順序と、並べ替え後のバンクアクセス順序とに基づき、演算命令ＡＬ３におけるレジスタアクセス順序の並べ替えを行う。ロード・ストア命令ＬＳ２の並べ替え前のバンクアクセス順序と、並べ替え後のバンクアクセス順序とは、並べ替え管理フラグ６１０から取得される。
【００６５】
図１１は、アクセス順序制御部６０２の動作を説明するための図である。図１１（Ａ）のテーブルには、並べ替え前のバンクアクセス順序と並べ替え後のバンクアクセス順序に対応するレジスタアクセス順序が示される。たとえば、ロード・ストア命令ＬＳ２の並べ替え前のバンクアクセス順序はＢＡ２であり、並べ替え後のバンクアクセス順序はＢＡ１である。よって、これに対応するレジスタアクセス順序は、ＲＡ４である。
【００６６】
図１１（Ｂ）には、ベクトルレジスタ１１０におけるレジスタアクセス順序が示される。図１１（Ｂ）では、論理ベクトルレジスタ番号ｖｒ０における物理ベクトルレジスタ番号ｖｒ[０]−[３１]を例として、８個のデータ要素ずつデータ書込みを行うときの物理ベクトルレジスタ番号のアクセス順序が示される。たとえば、レジスタアクセス順序ＲＡ１は、ｖｒ[０]−[７]、ｖｒ[８]−[１５]、ｖｒ[１６]−[２３]、ｖｒ[２４]−[３１]の順序である。また、レジスタアクセス順序ＲＡ２は、ｖｒ[８]−[１５]、ｖｒ[１６]−[２３]、ｖｒ[２４]−[３１]、 ｖｒ[０]−[７]の順序である。さらに、レジスタアクセス順序ＲＡ３は、ｖｒ[１６]−[２３]、ｖｒ[２４]−[３１]、 ｖｒ[０]−[７]、ｖｒ[８]−[１５]の順序である。そして、レジスタアクセス順序ＲＡ４は、ｖｒ[２４]−[３１]、 ｖｒ[０]−[７]、ｖｒ[８]−[１５]、 ｖｒ[１６]−[２３]の順序である。図１１（Ｂ）によると、たとえば、演算命令ＡＬ３の並べ替えられるレジスタアクセス順序ＲＡ４は、物理ベクトルレジスタ番号ｖｒ[６４]−[９５]において、ｖｒ[８８]−[９５]、ｖｒ[６４]−[７１]、 ｖｒ[７２]−[７９]、ｖｒ[８０]−[８７]の順序である。
【００６７】
アクセス順序制御部６０２は、図１１（Ａ）、（Ｂ）の情報をマップデータ等として予め内部のＲＯＭ（Read Only Memory）などに記憶する。そして、アクセス順序制御部６０２は、図１１（Ａ）、（Ｂ）の情報を用いて、ロード・ストア命令ＬＳ２の並べ替え前後のバンクアクセス順序から、演算命令ＡＬ３におけるレジスタアクセス順序を決定し、その並べ替えを行う。
【００６８】
そして、アクセス順序制御部６０２は、並べ替えたレジスタアクセス順序を並べ替えアドレス生成部１１４６に転送する。並べ替えアドレス生成部１１４６は、レジスタアクセス順序に対応するベクトルレジスタ１１０のアドレスを生成し、演算命令ＡＬ３を実行するスロット１１４２に転送する。
【００６９】
図１２は、並べ替え管理フラグ６０８〜６１４に書き込まれる値の例を示す。図１２（Ａ）は、図１０（Ｂ）で示したシーケンス図である。図１２（Ｂ）には、図１２（Ａ）のシーケンス図に対応して、ロード・ストア命令ＬＳ１を実行するスロット１０４０用の並べ替え管理フラグ６０８、ロード・ストア命令ＬＳ２を実行するスロット１０４１用の並べ替え管理フラグ６１０、及び、演算命令ＡＬ３を実行するスロット１０４２用の並べ替え管理フラグ６１２の例が示される。ロード・ストア命令ＬＳ１はバンクアクセス順序ＢＡ１を有するので、ロード・ストア命令ＬＳ１が実行されるサイクルＣ１〜Ｃ４において、並べ替え管理フラグ６０８にはバンクアクセス順序「ＢＡ１」が書き込まれる。また、ロード・ストア命令ＬＳ２は、バンクアクセス順序がＢＡ２からＢＡ１に変更される。よって、ロード・ストア命令ＬＳ２が実行されるサイクルＣ２〜Ｃ５において、並べ替え管理フラグ６０８には、変更前のバンクアクセス順序「ＢＡ２」と変更後の競合回避バンクアクセス順序「ＢＡ１」が書き込まれる。
【００７０】
そして、サイクルＣ１の時点で、並べ替え管理フラグ６０８が有するバンクアクセス順序「ＢＡ１」と、並べ替え管理フラグ６１０が有する競合回避バンクアクセス順序「ＢＡ１」とに基づき、演算命令ＡＬ３のレジスタアクセス順序がＲＡ１からＲＡ４に変更される。よって、並べ替え管理フラグ６１２にはレジスタアクセス順序「ＲＡ４」が書き込まれる。そして、演算命令ＡＬ３が実行されるサイクルＣ５〜Ｃ８において、並べ替え管理フラグ６１２の値は、レジスタアクセス順序「ＲＡ４」に維持される。
【００７１】
図１、図６に戻る。
【００７２】
並べ替え制御部１１４４は、レジスタアクセス順序を並べ替えた演算命令ＡＬ３の発行タイミングを決定する。レジスタ管理部６０４に、デコーダ１０８からロード・ストア命令の実行状態が入力される。実行状態は、「ＥＸ」ステージ、「ＭＥＭ」ステージ、「ＷＢ」ステージのいずれのステージが実行されたかを示す。レジスタ管理部６０４は、実行状態をレジスタ管理フラグ６１６〜６２２に書き込んで記録する。たとえば、ロード・ストア命令ＬＳ２を実行するスロット１０４１の実行状態は、レジスタ管理フラグ６１６〜６２２のうち６１８に書き込まれる。処理レジスタ管理部６０４は、レジスタ管理フラグ６１６〜６２２の値を、発行タイミング検出部６０６に通知する。そして、発行タイミング検出部６０６は、レジスタ管理フラグ６１６〜６２２の値に基づき、演算命令ＡＬ３の発行タイミングを検出する。
【００７３】
図１３は、発行タイミング検出について説明する図である。図１３（Ａ）は、図１０（Ｂ）と同じシーケンス図である。ここでは、ロード・ストア命令ＬＳ１のバンクアクセス順序に応じてロード・ストア命令ＬＳ２のバンクアクセス順序が並べ替えられ、さらに、ロード・ストア命令ＬＳ２のレジスタアクセス順序に応じて演算命令ＡＬ３のレジスタアクセス順序が並べ替えられた状態が示される。
【００７４】
図１３（Ｂ）には、上記の並べ替えが行われるときの、レジスタ管理フラグの例が示される。ここでは、ロード・ストア命令ＬＳ２を実行するスロット１０４１用のレジスタ管理フラグ６１８が示される。レジスタ管理フラグ６１８は、さらに、ベクトルレジスタ１１０の物理ベクトルレジスタ番号順に、レジスタ管理フラグ６１８−１、６１８−２、６１８−３、及び６１８−４を有する。レジスタ管理フラグ６１８−１は物理ベクトルレジスタ番号ｖｒ[６４]−[７１]に対する処理に、レジスタ管理フラグ６１８−２は物理ベクトルレジスタ番号ｖｒ[７２]−[７９]に対する処理に、レジスタ管理フラグ６１８−３は物理ベクトルレジスタ番号ｖｒ[８０]−[８７]に対する処理に、そして、レジスタ管理フラグ６１８−４は物理ベクトルレジスタ番号ｖｒ[８８]−[９５]に対する処理に、それぞれ対応する。レジスタ管理フラグ６１８−１〜６１８−４は、初期値が「ＯＦＦ」である。そして、レジスタ管理フラグ６１８−１〜６１８−４は、それぞれ対応する物理ベクトルレジスタ番号ｖｒへのデータ要素の書き込みが終了したときに「ＯＮ」が書き込まれる。
【００７５】
図１３（Ａ）に示すように、ロード・ストア命令ＬＳ２では、サイクルＣ２で物理ベクトルレジスタ番号ｖｒ[８８]−[９５]へのデータ読出しのためのバンクアクセスが実行される。すると、２サイクル後のサイクルＣ４のときに「ＷＢ」ステージが実行されてデータがベクトルレジスタ１１０に書き込まれる。よって、サイクルＣ４のときにレジスタ管理フラグ６１８−４は「ＯＮ」になる。同様にして、サイクルＣ３で物理ベクトルレジスタ番号ｖｒ[６４]−[７１]へのデータ読出しのためのバンクアクセスが実行され、２サイクル後のサイクルＣ５のときにデータがベクトルレジスタ１１０に書き込まれる。よって、サイクルＣ５でレジスタ管理フラグ６１８−１は「ＯＮ」になる。また、サイクルＣ４で物理ベクトルレジスタ番号ｖｒ[７２]−[７９]へのデータ読出しのためのバンクアクセスが実行され、２サイクル後のサイクルＣ６のときにデータがベクトルレジスタ１１０に書き込まれる。よって、サイクルＣ６でレジスタ管理フラグ６１８−２は「ＯＮ」になる。そして、サイクルＣ５で物理ベクトルレジスタ番号ｖｒ[８０]−[８７]へのデータ読出しのためのバンクアクセスが実行され、２サイクル後のサイクルＣ７のときにデータがベクトルレジスタ１１０に書き込まれる。よって、サイクルＣ７でレジスタ管理フラグ６１８−３は「ＯＮ」になる。
【００７６】
レジスタ管理部６０４は、発行タイミング検出部６０６に、レジスタ管理フラグ６１６〜６２２の値を転送する。そして、発行タイミング検出部６０６は、レジスタ管理フラグ６１６〜６２２の値が示すロード・ストア命令ＬＳ１およびＬＳ２の実行状態に基づき、発行タイミングを検出する。たとえば、図１３（Ｂ）に示したように、サイクルＣ４でレジスタ管理フラグ６１８−４が「ＯＮ」になると、次のサイクルから演算命令ＡＬ３が実行可能になる。よって、発行タイミング検出部６０６は、サイクルＣ４のときに、発行タイミングを検出する。そして、発行タイミング検出部６０６は、デコーダ１０８に演算命令ＡＬ３の発行を指示する制御信号を伝送する。これに応答して、デコーダ１０８は、サイクルＣ５から実行されるように、スロット１０４２に演算命令ＡＬ３を発行する。
【００７７】
次に、複数のロード・ストア命令に演算命令が依存する例を示す。
【００７８】
図１４は、２つのロード・ストア命令に演算命令が依存する場合のシーケンスを示す。図１４（Ａ）には、ロード・ストア命令ＬＳ１、ＬＳ２、及びＬＳ３がスロット１０４０、１０４１、及び１０４２により実行され、スロット１０４１、１０４２によりベクトルレジスタ１１０に書き込まれたデータを、演算命令ＡＬ４を実行するスロット１０４３が読み出す場合のシーケンスが示される。ここでは、ロード・ストア命令ＬＳ１〜ＬＳ３を実行するスロット１０４０〜１０４２におけるバンク競合を回避するために、ロード・ストア命令ＬＳ２、ＬＳ３がストールされた状態が示される。
【００７９】
ロード・ストア命令ＬＳ１では、バンクアクセス順序ＢＡ１でデータメモリ１０６にアクセスが行われ、ベクトルレジスタ１１０に、レジスタアクセス順序ＲＡ１でデータが書き込まれる。また、ロード・ストア命令ＬＳ２では、バンクアクセス順序ＢＡ２でデータメモリ１０６にアクセスが行われ、ベクトルレジスタ１１０に、レジスタアクセス順序ＲＡ１でデータが書き込まれる。そして、ロード・ストア命令ＬＳ３では、バンクアクセス順序ＢＡ３でデータメモリ１０６にアクセスが行われ、ベクトルレジスタ１１０に、レジスタアクセス順序ＲＡ１でデータが書き込まれる。ここでは、ロード・ストア命令ＬＳ２が１サイクル分ストールされている。また、ロード・ストア命令ＬＳ３が２サイクル分ストールされている。
【００８０】
また、演算命令ＡＬ４は、「ｖａｄｄｈ  ｖｒ０，ｖｒ１,ｖｒ２」であり、論理ベクトルレジスタ番号ｖｒ０、ｖｒ１に書き込まれたデータ要素を加算して、加算結果のｖｒ２への書き込みを指示する命令である。これに従い、スロット１０４３は、ベクトルレジスタ１１０にレジスタアクセス順序ＲＡ１でアクセスしてデータを読み出し、演算を行う。たとえば、最初のサイクルでは、物理ベクトルレジスタ番号ｖｒ[０]、[６３]にアクセスが行われる。物理ベクトルレジスタ番号ｖｒ[０]に書き込まれるデータへのアクセスは、ロード・ストア命令ＬＳ３においてサイクルＣ５で行われる。よって、書込みが終了するのは２サイクル後のＣ７である。一方、物理ベクトルレジスタ番号ｖｒ[６４]に書き込まれるデータへのアクセスは、ロード・ストア命令ＬＳ２においてサイクルＣ３で行われる。よって、書込みが終了するのは２サイクル後のＣ５である。よって、この場合、演算命令ＡＬ４は、遅い方のサイクルＣ７の次のＣ８から開始される。
【００８１】
次に、本実施形態によるシーケンスが、図１４（Ｂ）に示される。図１４（Ｂ）では、ロード・ストア命令ＬＳ２、ＬＳ３が、それぞれ競合回避バンクアクセス順序に並べ替えられた状態が示される。ロード・ストア命令ＬＳ２における競合回避バンクアクセス順序は、当初のバンクアクセス順序ＢＡ２において、最後にアクセスされるバンクＢＫ０が最初にアクセスされるようにする。よって、バンクアクセス順序ＢＡ１になる。また、ロード・ストア命令ＬＳ３における競合回避バンクアクセス順序は、まず、当初のバンクアクセス順序ＢＡ３において、最後にアクセスされるバンクＢＫ１が最初にアクセスされるようにする。すると、並べ替え後のロード・ストア命令ＬＳ２との間でバンク競合が生じる。よって、同様の並べ替えが繰り返される。最終的に、競合回避バンクアクセス順序ＢＡ１になる。このように、最後にアクセスされるバンクが最初にアクセスされるようにする処理を繰り返すことで、競合回避バンクアクセス順序が求められる。
【００８２】
次に、レジスタアクセス順序の並べ替えについて説明する。演算命令ＡＬ４は２つのロード・ストア命令に依存する。複数のロード・ストア命令に演算命令が依存する場合は、並べ替え制御部１１４４の動作が、図１０、図１１において説明した内容とは異なる。この場合、レジスタ管理フラグ６１６〜６２２により、依存するロード・ストア命令の実行状態が管理される。図１４（Ｃ）に、具体例が示される。
【００８３】
図１４（Ｃ）では、ロード・ストア命令ＬＳ２を実行するスロット１０４１用のレジスタ管理フラグ６１８−０〜６１８−３と、ロード・ストア命令ＬＳ３を実行するスロット１０４２用のレジスタ管理フラグ６２０−０〜６２０−３とが示される。ここでは、レジスタ管理フラグ６１８−０は物理ベクトルレジスタ番号ｖｒ[６４]−[７１]に対する処理に、レジスタ管理フラグ６１８−１は物理ベクトルレジスタ番号ｖｒ[７２]−[７９]に対する処理に、レジスタ管理フラグ６１８−２は物理ベクトルレジスタ番号ｖｒ[８０]−[８７]に対する処理に、そして、レジスタ管理フラグ６１８−３は物理ベクトルレジスタ番号ｖｒ[８８]−[９５]に対する処理に、それぞれ対応する。また、レジスタ管理フラグ６２０−０は物理ベクトルレジスタ番号ｖｒ[０]−[７]に対する処理に、レジスタ管理フラグ６２０−１は物理ベクトルレジスタ番号ｖｒ[８]−[１５]に対する処理に、レジスタ管理フラグ６２０−２は物理ベクトルレジスタ番号ｖｒ[１６]−[２３]に対する処理に、そして、レジスタ管理フラグ６２０−３は物理ベクトルレジスタ番号ｖｒ[２４]−[３１]に対する処理に、それぞれ対応する。レジスタ管理フラグ６１８−０〜６１８−３、６２０−０〜６２０−３は、それぞれ対応する物理ベクトルレジスタ番号に対するデータ要素の書き込みが終了するサイクルで、レジスタ管理部６０４により「ＯＮ」が書き込まれる。たとえば、レジスタ管理フラグ６１８−３はサイクルＣ４で、レジスタ管理フラグ６１８−０はサイクルＣ５で、レジスタ管理フラグ６１８はサイクルＣ６で、そして、レジスタ管理フラグ６１８−２はサイクルＣ７で、それぞれ「ＯＮ」になる。また、レジスタ管理フラグ６２０−２はサイクルＣ５で、レジスタ管理フラグ６２０−３はサイクルＣ６で、レジスタ管理フラグ６２０−０はサイクルＣ７で、そして、レジスタ管理フラグ６２０−１はサイクルＣ８で、それぞれ「ＯＮ」になる。
【００８４】
一方、演算命令ＡＬ４の各サイクルでは、物理ベクトルレジスタ番号ｖｒ[０]とｖｒ［６４］、ｖｒ[８]とｖｒ［７２］、ｖｒ[１６]とｖｒ［８０］、・・・というように、「６４」間隔が離れた物理ベクトルレジスタ番号にアクセスされる。これらの物理ベクトルレジスタ番号のペアは、それぞれレジスタ管理フラグのペア６１８−０、６２０−０、ペア６１８−１、６２０−１、ペア６１８−２、６２０−２、及び、ペア６１８−３、６２０−３のいずれかに対応する。よって、レジスタ管理部６０４は、レジスタ管理フラグのペア６１８−０、６２０−０、ペア６１８−１、６２０−１、ペア６１８−２、６２０−２、及び、ペア６１８−３、６２０−３のうちいずれかにおいて、両方とも「ＯＮ」になったときに、演算命令ＡＬ４におけるレジスタアクセス順序を決定する。たとえば、サイクルＣ６でペア６１８−３、６２０−３が、サイクルＣ７でペア６１８−０、６２０−０とペア６１８−２、６２０−２が、そして、サイクルＣ８でペア６１８−１、６２０−１が、それぞれ両方とも「ＯＮ」になる。よって、このなかでもっとも早いサイクルＣ６で、レジスタ管理部６０４は、ペア６１８−３、６２０−３に対応する物理ベクトルレジスタ番号へのアクセスを開始するように、レジスタアクセス順序を並べ替える。そして、次のサイクルＣ７から、並べ替えられた演算命令ＡＬ４が開始される。このときの状態が、図１４（Ｂ）に示される。
【００８５】
レジスタ管理部６０４は、並べ替えたレジスタアクセス順序に対応するベクトルレジスタ１１０のアドレスの生成を、並べ替えアドレス生成部１１４６に指示する信号を出力する。すると、並べ替えアドレス生成部１１４６は、アクセスすべきアドレスを生成して、演算命令ＡＬ４を実行するスロット１０４３に送る。また、レジスタ管理部６０４は、演算命令ＡＬ４の発行を指示する信号を、発行タイミング検出部６０６に伝送する。すると、発行タイミング検出部６０６は、これをデコーダ１０８に転送する。そして、デコーダ１０８は、演算命令ＡＬ４をデコードしてスロット１０４３に送る。これにより、スロット１０４３は、図１４（Ｂ）に示されるタイミングで、演算命令ＡＬ４を実行する。
【００８６】
図１５は、レジスタアクセス順序の並べ替えの動作手順を示すフローチャート図である。
【００８７】
図１５に示す手順は、たとえば、１命令サイクル分の命令がフェッチされるごとに実行される。まず、デコーダ１０８が演算命令をデコードする（Ｓ１５００）。そして、依存関係検出部１１４２が、先行するロード・ストア命令との依存関係を検出する（Ｓ１５０２）。
【００８８】
依存関係が検出されない場合（Ｓ１５０４のＮｏ）、演算命令がベクトルパイプライン１０４で実行される（Ｓ１５２０）。一方、依存関係が検出された場合であって（Ｓ１５０４のＹｅｓ）、依存する先行命令が１つの場合（Ｓ１５０６のＹｅｓ）、アクセス順序制御部６０２は、先行するロード・ストア命令のバンクアクセス順序を参照し（Ｓ１５０８）、演算命令のレジスタアクセス順序を制御する（Ｓ１５１０）。たとえば、アクセス順序制御部６０２がレジスタアクセス順序を並べ替え、レジスタ管理部６０４が処理レジスタ管理フラグ６１６〜６２２に実行状態を書き込む。そして、演算命令が実行される（Ｓ１５２０）。
【００８９】
また、依存関係が検出された場合であって（Ｓ１５０４のＹｅｓ）、依存する先行命令が２つの場合（Ｓ１５０６のＮｏ、Ｓ１５１２のＹｅｓ）、レジスタ管理部６０４は、処理レジスタ管理フラグ６１６〜６２２により処理完了レジスタを監視し（Ｓ１５１４）、レジスタアクセス順序を決定する（Ｓ１５１６）。そして、レジスタ管理部６０４は、レジスタアクセスの完了状況を処理レジスタ管理フラグ６１６〜６２２に書き込んで管理する（Ｓ１５１８）。そして、演算命令が実行される（Ｓ１５２０）。
【００９０】
このようにして、１つ、または２つのロード・ストア命令に演算命令が依存するときであっても、処理が破綻することなく、処理効率低下を回避できる。
【００９１】
以上の実施の形態をまとめると、次の付記のとおりである。
【００９２】
（付記１）
メモリの複数のバンクに第１のバンクアクセス順序でアクセスする第１の処理部と、
前記第1の処理部のアクセスの開始に続いて第２のバンクアクセス順序で前記複数のバンクにアクセスを開始する第２の処理部と、
前記第１の処理部及び前記第２の処理部による前記複数のバンクへのアクセスが競合する場合に、前記第２のバンクアクセス順序を前記競合が生じない第３のバンクアクセス順序に並べ替えて前記第２の処理部を前記複数のバンクにアクセスさせる制御部とを備えることを特徴とするプロセッサ。
【００９３】
（付記２）
付記１において、
前記制御部は、前記第３のバンクアクセス順序による前記第２の処理部の前記複数のバンクへのアクセスの開始タイミングを、前記第１の処理部の前記複数のバンクへのアクセスの開始タイミングから１サイクル後に制御することを特徴とするプロセッサ。
【００９４】
（付記３）
付記１または２において、
前記第２の処理部は、前記第３のバンクアクセス順序により前記メモリにアクセスして読み出したデータを複数のレジスタに第１のレジスタアクセス順序でアクセスして書き込み、
前記複数のレジスタに第２のレジスタアクセス順序でアクセスし、前記書き込まれたデータを読み出す第３の処理部をさらに有し、
前記制御部は、前記第２のレジスタアクセス順序を、前記第１のレジスタアクセス順序による書き込みが終了したレジスタから順にアクセスするように制御することを特徴とするプロセッサ。
【００９５】
（付記４）
付記３において、
前記制御部は、前記第２のバンクアクセス順序と前記第３のバンクアクセス順序とに基づいて前記第２のレジスタアクセス順序を並べ替えることを特徴とするプロセッサ。  
【００９６】
（付記５）
付記１または２において、
前記第１の処理部は、前記第１のバンクアクセス順序により前記メモリにアクセスして読み出したデータを複数のレジスタに第１のレジスタアクセス順序でアクセスして書き込み、
前記第２の処理部は、前記第３のバンクアクセス順序により前記メモリにアクセスして読み出したデータを前記複数のレジスタに第２のレジスタアクセス順序でアクセスして書き込み、
前記複数のレジスタに第３のレジスタアクセス順序でアクセスし、前記第1及び第２の処理部により書き込まれたデータを読出す第３の処理部をさらに有し、
前記制御部は、前記第３のレジスタアクセス順序を、前記第1及び第２の処理部による書き込みが終了したレジスタから順にアクセスするように制御することを特徴とするプロセッサ。
【００９７】
（付記６）
付記５において、
前記制御部は、前記第１、第２の処理部それぞれの前記複数のレジスタへのアクセスを記録し、当該記録に基づいて前記第３のレジスタアクセス順序を決定するプロセッサ。
【００９８】
（付記７）
付記１乃至６のいずれかにおいて、
前記第３のバンクアクセス順序では、前記第２のバンクアクセス順序で最後にアクセスされるバンクが他の前記バンクより先にアクセスされるプロセッサ。
【００９９】
（付記８）
複数のレジスタに第１のレジスタアクセス順序でアクセスしてデータを書き込む第１の処理部と、
前記複数のレジスタに第２のレジスタアクセス順序でアクセスして前記書き込まれたデータを読出す第２の処理部と、
前記第２のレジスタアクセス順序を、前記複数のレジスタのうち、読み出すデータの前記第１の処理部による書き込みが終了したレジスタから順にアクセスされる第３のレジスタアクセス順序に並べ替えて、前記第２の処理部に前記複数のレジスタへアクセスさせる制御部とを有するプロセッサ。
【０１００】
（付記９）
複数のレジスタに第１のレジスタアクセス順序でアクセスしてデータを書き込む第１の処理部と、
前記複数のレジスタに第２のレジスタアクセス順序でアクセスしてデータを書き込む第２の処理部と、
前記複数のレジスタに第３のレジスタアクセス順序でアクセスして前記第１、第２の処理部により書き込まれたデータを読出す第３の処理部と、
前記第３のレジスタアクセス順序を、前記複数のレジスタのうち、読み出すデータの前記第１、第２の処理部による書き込みが終了したレジスタから順にアクセスするように制御する制御部とを有するプロセッサ。
【０１０１】
（付記１０）
付記９において、
前記制御部は、前記第１、第２の処理部それぞれの前記複数のレジスタへのアクセスを記録し、当該記録に基づいて前記第３のレジスタアクセス順序を決定するプロセッサ。
【０１０２】
（付記１１）
メモリの複数のバンクに第１のバンクアクセス順序でアクセスする第１の処理部と、前記第1の処理部のアクセスの開始に続いて第２のバンクアクセス順序で前記複数のバンクにアクセスを開始する第２の処理部とを有するプロセッサの制御方法であって、
前記第１の処理部及び前記第２の処理部による前記複数のバンクへのアクセスが競合する場合に、前記第２のバンクアクセス順序を前記競合が生じない第３のバンクアクセス順序に並べ替えて前記第２の処理部を前記複数のバンクにアクセスさせる、
プロセッサの制御方法
（付記１２）
付記１１において、
前記第２の処理部が、前記第３のバンクアクセス順序により前記メモリにアクセスして読み出したデータを複数のレジスタに第１のレジスタアクセス順序でアクセスして書き込み、
前記プロセッサが、前記複数のレジスタに第２のレジスタアクセス順序でアクセスして前記書き込まれたデータを読み出す第３の処理部をさらに有し、
前記第２のレジスタアクセス順序を、前記第１のレジスタアクセス順序による書き込みが終了したレジスタから順にアクセスするように制御する、
プロセッサの制御方法。
【０１０３】
（付記１３）
付記１１において、
前記第１の処理部が、前記第1のバンクアクセス順序により前記メモリにアクセスして読み出したデータを複数のレジスタに第１のレジスタアクセス順序でアクセスして書き込み、
前記第２の処理部が、前記第３のバンクアクセス順序により前記メモリにアクセスして読み出したデータを前記複数のレジスタに第２のレジスタアクセス順序でアクセスして書き込み、
前記プロセッサが、前記複数のレジスタに第３のレジスタアクセス順序でアクセスして前記第1及び第２の処理部により書き込まれたデータを読出す第３の処理部をさらに有し、
前記第３のレジスタアクセス順序を、前記第1及び第２の処理部による書き込みが終了したレジスタから順にアクセスするように制御する、
プロセッサの制御方法。
【０１０４】
（付記１４）
複数のレジスタに第１のレジスタアクセス順序でアクセスしてデータを書き込む第１の処理部と、前記複数のレジスタに第２のレジスタアクセス順序でアクセスして前記書き込まれたデータを読出す第２の処理部とを有するプロセッサの制御方法であって、
前記第２のレジスタアクセス順序を、前記複数のレジスタのうち、読み出すデータの前記第１の処理部による書き込みが終了したレジスタから順にアクセスされるような第３のレジスタアクセス順序に並べ替えて、前記第２の処理部に前記複数のレジスタへのアクセスを実行させる、
プロセッサの制御方法。
【０１０５】
（付記１５）
複数のレジスタに第１のレジスタアクセス順序でアクセスしてデータを書き込む第１の処理部と、前記複数のレジスタに第２のレジスタアクセス順序でアクセスしてデータを書き込む第２の処理部と、前記複数のレジスタに第３のレジスタアクセス順序でアクセスして前記第１、第２の処理部により書き込まれたデータを読出す第３の処理部とを有するプロセッサの制御方法であって、
前記第３のレジスタアクセス順序を、前記複数のレジスタのうち、読み出すデータの前記第１、第２の処理部による書き込みが終了したレジスタから順にアクセスされるような第４のレジスタアクセス順序に並べ替えて、前記第３の処理部に前記複数のレジスタへのアクセスを実行させる、
プロセッサの制御方法。
【符号の説明】
【０１０６】
１００：ベクトルプロセッサ、  １０６：データメモリ、ＢＫ０〜ＢＫ３：バンク、
１１０：ベクトルレジスタ、  １１４：制御部、  １０４０〜１０４３：スロット、
１１４２：依存関係検出部、  １１４４：並べ替え制御部
【図１】
0005704012.tif 000002
【図２】
0005704012.tif 000003
【図３】
0005704012.tif 000004
【図４】
0005704012.tif 000005
【図５】
0005704012.tif 000006
【図６】
0005704012.tif 000007
【図７】
0005704012.tif 000008
【図８】
0005704012.tif 000009
【図９】
0005704012.tif 000010
【図１０】
0005704012.tif 000011
【図１１】
0005704012.tif 000012
【図１２】
0005704012.tif 000013
【図１３】
0005704012.tif 000014
【図１４】
0005704012.tif 000015
【図１５】
0005704012.tif 000016