(57)【要約】【課題】ベクトルデータ内の複数のデータのそれぞれをシフトさせる複数の要素毎シフト演算を高速に実行することが可能なベクトル演算装置を提供すること。【解決手段】このベクトル演算装置３０は、第１のベクトルデータを格納する第１のベクトルレジスタ３１ａと、第２のベクトルデータを格納する第２のベクトルレジスタ３１ｂと、シフト演算部３６と、を含む。シフト演算部３６は、第１のベクトルデータが含む複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行する。このとき、シフト演算部３６は、第２のベクトルデータが含む複数のデータのそれぞれをシフト量として用いる。【選択図】図１
2009169709.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータを含む第１のベクトルデータを格納する第１のベクトルレジスタと、
前記第１のベクトルデータが含む前記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算手段と、
を備えるベクトル演算装置であって、
複数のデータを含む第２のベクトルデータを格納する第２のベクトルレジスタを備え、
前記シフト演算手段は、前記第２のベクトルデータが含む前記複数のデータのそれぞれを前記シフト量として用いるように構成されたベクトル演算装置。
【請求項２】
請求項１に記載のベクトル演算装置において、
前記シフト演算手段は、
前記シフト量が供給されることにより前記要素毎シフト演算を実行するシフト演算器と、
前記第２のベクトルデータが含む前記複数のデータのそれぞれを前記シフト量として前記シフト演算器へ供給するシフト量供給手段と、
を含むベクトル演算装置。
【請求項３】
請求項１又は請求項２に記載のベクトル演算装置において、
前記第１のベクトルデータが含む複数のデータと、前記第２のベクトルデータが含む複数のデータと、は１対１に対応するように構成されたベクトル演算装置。
【請求項４】
請求項１乃至請求項３のいずれか一項に記載のベクトル演算装置であって、
少なくとも１つのデータを格納するスカラーレジスタを備え、
前記シフト演算手段は、前記スカラーレジスタに格納されたデータと、前記第２のベクトルレジスタに格納された第２のベクトルデータが含む前記複数のデータのそれぞれと、のうちのいずれか一方を前記シフト量として用いるように構成されたベクトル演算装置。
【請求項５】
請求項４に記載のベクトル演算装置において、
前記シフト演算手段は、前記複数の要素毎シフト演算にて用いられる前記シフト量が一定である場合に前記スカラーレジスタに格納されたデータを前記シフト量として用い、一方、当該シフト量が一定でない場合に前記第２のベクトルレジスタに格納された第２のベクトルデータが含む前記複数のデータのそれぞれを前記シフト量として用いるように構成されたベクトル演算装置。
【請求項６】
複数のデータを含む第１のベクトルデータを第１のベクトルレジスタに格納する第１のベクトルデータ格納工程と、
前記第１のベクトルレジスタに格納されている第１のベクトルデータが含む前記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算実行工程と、
を含むベクトル演算方法であって、
前記シフト演算実行工程に先立って、複数のデータを含む第２のベクトルデータを第２のベクトルレジスタに格納する第２のベクトルデータ格納工程を含み、
前記シフト演算実行工程は、前記第２のベクトルレジスタに格納されている第２のベクトルデータが含む前記複数のデータのそれぞれを前記シフト量として用いるように構成されたベクトル演算方法。
【請求項７】
請求項６に記載のベクトル演算方法において、
前記シフト演算実行工程は、前記シフト量が供給されることにより前記要素毎シフト演算を実行するシフト演算器へ、前記格納されている第２のベクトルデータが含む前記複数のデータのそれぞれを当該シフト量として供給するシフト量供給工程を含むベクトル演算方法。
【請求項８】
請求項６又は請求項７に記載のベクトル演算方法において、
前記第１のベクトルデータが含む複数のデータと、前記第２のベクトルデータが含む複数のデータと、は１対１に対応するように構成されたベクトル演算方法。
【請求項９】
ベクトル演算装置に、
複数のデータを含む第１のベクトルデータを第１のベクトルレジスタに格納する第１のベクトルデータ格納手順と、
前記第１のベクトルレジスタに格納されている第１のベクトルデータが含む前記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算実行手順と、
を実行させるためのプログラムであって、
前記シフト演算実行手順に先立って、複数のデータを含む第２のベクトルデータを第２のベクトルレジスタに格納する第２のベクトルデータ格納手順を含み、
前記シフト演算実行手順は、前記第２のベクトルレジスタに格納されている第２のベクトルデータが含む前記複数のデータのそれぞれを前記シフト量として用いるように構成されたプログラム。
【請求項１０】
請求項９に記載のプログラムにおいて、
前記シフト演算実行手順は、前記シフト量が供給されることにより前記要素毎シフト演算を実行するシフト演算器へ、前記格納されている第２のベクトルデータが含む前記複数のデータのそれぞれを当該シフト量として供給するシフト量供給手順を含むプログラム。
【請求項１１】
請求項９又は請求項１０に記載のプログラムにおいて、
前記第１のベクトルデータが含む複数のデータと、前記第２のベクトルデータが含む複数のデータと、は１対１に対応するように構成されたプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトル方式により演算を実行するベクトル演算装置に関する。
【背景技術】
【０００２】
ベクトル方式（ベクトルパイプライン方式）により演算を実行するベクトル演算装置が知られている。この種のベクトル演算装置の一つとして、特許文献１に記載のベクトル演算装置は、ベクトルレジスタとシフト演算器とを備える。このシフト演算器は、ベクトルレジスタに格納されたベクトルデータに含まれる複数のデータのそれぞれを一定のシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行する。
【特許文献１】特開２００６−１７１８２７号公報
【０００３】
従って、このベクトル演算装置は、複数のデータのそれぞれを一定のシフト量だけシフトさせる複数の要素毎シフト演算の実行を指示する命令を受け取った場合、１回の処理（ベクトル処理）によりすべての要素毎シフト演算を実行することができる。即ち、ベクトル演算装置は、複数の要素毎シフト演算を高速に実行することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、シフト量が互いに異なる要素毎シフト演算を含む複数の要素毎シフト演算の実行を指示する命令を上記ベクトル演算装置が受け取った場合、このベクトル演算装置は、１回のベクトル処理によりすべての要素毎シフト演算を実行することはできない。
【０００５】
この場合、例えば、ベクトル演算装置は、シフト量が互いに等しい要素毎シフト演算毎に順に要素毎シフト演算を実行するように構成されることが好適であると考えられる。即ち、このように構成されたベクトル演算装置は、所定の演算処理を、上記複数の要素毎シフト演算にて用いられるシフト量の種類の数（互いに異なるシフト量の数）だけ繰り返すことにより、すべての要素毎シフト演算を実行する。この演算処理は、シフト量を選択し選択したシフト量と同じシフト量だけシフトさせる要素毎シフト演算のみをベクトル方式により実行する処理である。
【０００６】
しかしながら、ベクトル演算装置をこのように構成すると、シフト量の種類の数が多くなるほど、すべての要素毎シフト演算を実行するために要する時間が長くなる。即ち、ベクトルデータ内の複数のデータのそれぞれを、データ毎に異なるシフト量だけシフトさせる複数の要素毎シフト演算を高速に実行することができないという問題があった。
【０００７】
このため、本発明の目的は、上述した課題である「ベクトルデータ内の複数のデータのそれぞれを、データ毎に異なるシフト量だけシフトさせる演算を高速に実行することができないこと」を解決することが可能なベクトル演算装置を提供することにある。
【課題を解決するための手段】
【０００８】
かかる目的を達成するため本発明の一形態であるベクトル演算装置は、
複数のデータを含む第１のベクトルデータを格納する第１のベクトルレジスタと、
上記第１のベクトルデータが含む上記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算手段と、
を備える。
【０００９】
更に、このベクトル演算装置は、複数のデータを含む第２のベクトルデータを格納する第２のベクトルレジスタを備える。
加えて、上記シフト演算手段は、上記第２のベクトルデータが含む上記複数のデータのそれぞれを上記シフト量として用いるように構成される。
【００１０】
また、本発明の他の形態であるベクトル演算方法は、
複数のデータを含む第１のベクトルデータを第１のベクトルレジスタに格納する第１のベクトルデータ格納工程と、
上記第１のベクトルレジスタに格納されている第１のベクトルデータが含む上記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算実行工程と、
を含む。
【００１１】
更に、このベクトル演算方法は、上記シフト演算実行工程に先立って、複数のデータを含む第２のベクトルデータを第２のベクトルレジスタに格納する第２のベクトルデータ格納工程を含む。
加えて、上記シフト演算実行工程は、上記第２のベクトルレジスタに格納されている第２のベクトルデータが含む上記複数のデータのそれぞれを上記シフト量として用いるように構成される。
【００１２】
また、本発明の他の形態であるプログラムは、
ベクトル演算装置に、
複数のデータを含む第１のベクトルデータを第１のベクトルレジスタに格納する第１のベクトルデータ格納手順と、
上記第１のベクトルレジスタに格納されている第１のベクトルデータが含む上記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算実行手順と、
を実行させるためのプログラムである。
【００１３】
更に、このプログラムは、上記シフト演算実行手順に先立って、複数のデータを含む第２のベクトルデータを第２のベクトルレジスタに格納する第２のベクトルデータ格納手順を含む。
加えて、上記シフト演算実行手順は、上記第２のベクトルレジスタに格納されている第２のベクトルデータが含む上記複数のデータのそれぞれを上記シフト量として用いるように構成される。
【発明の効果】
【００１４】
本発明は、以上のように構成されることにより、ベクトルデータ内の複数のデータのそれぞれをシフトさせる複数の要素毎シフト演算を高速に実行することができる。
【発明を実施するための最良の形態】
【００１５】
本発明の一形態であるベクトル演算装置は、
複数のデータを含む第１のベクトルデータを格納する第１のベクトルレジスタと、
上記第１のベクトルデータが含む上記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算手段と、
を備える。
【００１６】
更に、このベクトル演算装置は、複数のデータを含む第２のベクトルデータを格納する第２のベクトルレジスタを備える。
加えて、上記シフト演算手段は、上記第２のベクトルデータが含む上記複数のデータのそれぞれを上記シフト量として用いるように構成される。
【００１７】
これによれば、シフト量が互いに異なる要素毎シフト演算を含む複数の要素毎シフト演算のすべてを、１回の処理（ベクトル処理）により実行することができる。即ち、第１のベクトルデータ内の複数のデータのそれぞれを、データ毎に異なるシフト量だけシフトさせる複数の要素毎シフト演算を高速に実行することができる。
【００１８】
更に、この場合、
上記シフト演算手段は、
上記シフト量が供給されることにより上記要素毎シフト演算を実行するシフト演算器と、
上記第２のベクトルデータが含む上記複数のデータのそれぞれを上記シフト量として上記シフト演算器へ供給するシフト量供給手段と、
を含むことが好適である。
【００１９】
加えて、この場合、上記第１のベクトルデータが含む複数のデータと、上記第２のベクトルデータが含む複数のデータと、は１対１に対応するように構成されることが好適である。
【００２０】
更に、この場合、上記ベクトル演算装置は、
少なくとも１つのデータを格納するスカラーレジスタを備え、
上記シフト演算手段は、上記スカラーレジスタに格納されたデータと、上記第２のベクトルレジスタに格納された第２のベクトルデータが含む上記複数のデータのそれぞれと、のうちのいずれか一方を上記シフト量として用いるように構成されることが好適である。
【００２１】
加えて、この場合、上記シフト演算手段は、上記複数の要素毎シフト演算にて用いられる上記シフト量が一定である場合に上記スカラーレジスタに格納されたデータを上記シフト量として用い、一方、当該シフト量が一定でない場合に上記第２のベクトルレジスタに格納された第２のベクトルデータが含む上記複数のデータのそれぞれを上記シフト量として用いるように構成されることが好適である。
【００２２】
主記憶装置（メモリ）とスカラーレジスタとの間でデータを授受する（ストア／ロードする）ために要する時間は、メモリとベクトルレジスタとの間でデータを授受するために要する時間よりも短い。従って、例えば、シフト量が一定である場合にも、第２のベクトルレジスタに格納されたデータを用いて要素毎シフト演算を実行すると、メモリと第２のベクトルレジスタとの間でデータを授受するために無駄な時間がかかってしまう。
【００２３】
これに対し、上記構成によれば、複数の要素毎シフト演算にて用いられるシフト量が一定である場合には、ベクトル演算装置は、スカラーレジスタに格納されたデータを用いて要素毎シフト演算を実行する。従って、第２のベクトルレジスタに格納されたデータを用いて要素毎シフト演算を実行する場合と比較して、より高速に複数の要素毎シフト演算を実行することができる。
【００２４】
また、本発明の他の形態であるベクトル演算方法は、
複数のデータを含む第１のベクトルデータを第１のベクトルレジスタに格納する第１のベクトルデータ格納工程と、
上記第１のベクトルレジスタに格納されている第１のベクトルデータが含む上記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算実行工程と、
を含む。
【００２５】
更に、このベクトル演算方法は、上記シフト演算実行工程に先立って、複数のデータを含む第２のベクトルデータを第２のベクトルレジスタに格納する第２のベクトルデータ格納工程を含む。
加えて、上記シフト演算実行工程は、上記第２のベクトルレジスタに格納されている第２のベクトルデータが含む上記複数のデータのそれぞれを上記シフト量として用いるように構成される。
【００２６】
この場合、上記シフト演算実行工程は、上記シフト量が供給されることにより上記要素毎シフト演算を実行するシフト演算器へ、上記格納されている第２のベクトルデータが含む上記複数のデータのそれぞれを当該シフト量として供給するシフト量供給工程を含むことが好適である。
【００２７】
加えて、この場合、上記第１のベクトルデータが含む複数のデータと、上記第２のベクトルデータが含む複数のデータと、は１対１に対応するように構成されることが好適である。
【００２８】
また、本発明の他の形態であるプログラムは、
ベクトル演算装置に、
複数のデータを含む第１のベクトルデータを第１のベクトルレジスタに格納する第１のベクトルデータ格納手順と、
上記第１のベクトルレジスタに格納されている第１のベクトルデータが含む上記複数のデータのそれぞれをシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するシフト演算実行手順と、
を実行させるためのプログラムである。
【００２９】
更に、このプログラムは、上記シフト演算実行手順に先立って、複数のデータを含む第２のベクトルデータを第２のベクトルレジスタに格納する第２のベクトルデータ格納手順を含む。
加えて、上記シフト演算実行手順は、上記第２のベクトルレジスタに格納されている第２のベクトルデータが含む上記複数のデータのそれぞれを上記シフト量として用いるように構成される。
【００３０】
この場合、上記シフト演算実行手順は、上記シフト量が供給されることにより上記要素毎シフト演算を実行するシフト演算器へ、上記格納されている第２のベクトルデータが含む上記複数のデータのそれぞれを当該シフト量として供給するシフト量供給手順を含むことが好適である。
【００３１】
加えて、この場合、上記第１のベクトルデータが含む複数のデータと、上記第２のベクトルデータが含む複数のデータと、は１対１に対応するように構成されることが好適である。
【００３２】
上述した構成を有するベクトル演算方法、又は、プログラムの発明であっても、上記ベクトル演算装置と同様の作用を有するために、上述した本発明の目的を達成することができる。
【００３３】
以下、本発明に係る、ベクトル演算装置、ベクトル演算方法及びプログラムの実施形態について図１及び図２を参照しながら説明する。
【００３４】
＜実施形態＞
図１に示したように、実施形態に係るプロセッサ（ＣＰＵ）１は、バスを介してメモリ（主記憶装置）２と接続されている。
ＣＰＵ１は、制御装置１０と、スカラーユニット２０と、複数（本例では、８つ）のベクトルユニット（ベクトル演算装置）３０と、を構成する回路を備える。
【００３５】
制御装置１０は、メモリ２に記憶されている命令を順に読み出す。この命令は、コンパイラによってソースプログラム（例えば、ＦＯＲＴＲＡＮ言語により記述されたプログラム）をオブジェクトプログラムへ変換する（コンパイルする）ことにより生成された命令（本例では、機械語命令）である。
【００３６】
制御装置１０は制御信号送信部１１を含む。制御信号送信部１１は、メモリ２から読み出した命令に基づいて制御信号を生成し、生成した制御信号をスカラーユニット２０及びベクトルユニット３０へ送る。
【００３７】
スカラーユニット２０は、メモリ２との間でデータを授受するキャッシュメモリ２１と、キャッシュメモリ２１との間でデータを授受するスカラーレジスタ２２と、スカラーレジスタ２２との間でデータを授受するスカラー演算部２３と、を含む。
【００３８】
スカラーユニット２０は、スカラーロード命令に基づく制御信号送信部１１からの制御信号に応じて、スカラーロード処理を実行する。スカラーロード処理は、制御信号が表す読み出し先のアドレスにてメモリ２に格納されているデータがキャッシュメモリ２１にも格納されている場合、キャッシュメモリ２１からそのデータを読み出し且つ読み出したデータをスカラーレジスタ２２に格納する処理である。また、スカラーロード処理は、上記データがキャッシュメモリ２１に格納されていない場合、そのデータをメモリ２から読み出し且つ読み出したデータをキャッシュメモリ２１及びスカラーレジスタ２２のそれぞれに格納する処理である。
【００３９】
一方、スカラーユニット２０は、スカラーストア命令に基づく制御信号送信部１１からの制御信号に応じて、スカラーストア処理を実行する。スカラーストア処理は、スカラーレジスタ２２に格納されているデータを読み出し且つ読み出したデータをキャッシュメモリ２１及びメモリ２のそれぞれに格納する処理である。
【００４０】
スカラー演算部２３は、スカラー演算命令に基づく制御信号送信部１１からの制御信号に応じて、スカラー加算処理、スカラー乗算処理、スカラー除算処理、及び、スカラーシフト演算処理のいずれか１つを実行する。
【００４１】
ここで、スカラー加算処理は、下記第１の処理〜第３の処理を含む。第１の処理は、スカラーレジスタ２２に格納されている第１のデータ及び第２のデータを読み出す処理である。第２の処理は、読み出した第１のデータを、読み出した第２のデータに加えたデータを求める処理である。第３の処理は、第２の処理により求められたデータを第３のデータとしてスカラーレジスタ２２に格納する処理である。
【００４２】
また、スカラー乗算処理は、下記第１の処理〜第３の処理を含む。第１の処理及び第３の処理は、スカラー加算処理が含む第１の処理及び第３の処理とそれぞれ同様である。第２の処理は、読み出した第１のデータに、読み出した第２のデータを乗じたデータを求める処理である。
【００４３】
一方、スカラー除算処理は、下記第１の処理〜第３の処理を含む。第１の処理及び第３の処理は、スカラー加算処理が含む第１の処理及び第３の処理とそれぞれ同様である。第２の処理は、読み出した第１のデータを、読み出した第２のデータにより除したデータを求める処理である。
【００４４】
また、スカラーシフト演算処理は、下記第１の処理〜第３の処理を含む。第１の処理及び第３の処理は、スカラー加算処理が含む第１の処理及び第３の処理とそれぞれ同様である。第２の処理は、読み出した第１のデータを、読み出した第２のデータ（が表すシフト量）だけシフトさせたデータを求める処理である。
【００４５】
各ベクトルユニット３０は、ベクトルレジスタ部３１と、複数（本例では、２つ）のロード・ストア部３２と、加算部３３と、乗算部３４と、除算部３５と、シフト演算部（シフト演算手段）３６と、を含む。
【００４６】
ベクトルレジスタ部３１は、ロード・ストア部３２との間でデータを授受する。ベクトルレジスタ部３１は、複数（本例では、３つ）のベクトルレジスタ３１ａ〜３１ｃを含む。各ベクトルレジスタ３１ａ〜３１ｃは、複数のデータを含むベクトルデータを格納する。
【００４７】
また、各ベクトルレジスタ３１ａ〜３１ｃに格納されたベクトルデータ内のデータは所定の順序に従って読み出される。従って、第１のベクトルレジスタ３１ａに格納される第１のベクトルデータが含む複数のデータと、第２のベクトルレジスタ３１ｂに格納される第２のベクトルデータが含む複数のデータと、は１対１に対応している、と言うことができる。
【００４８】
各ロード・ストア部３２は、メモリ２との間でデータを授受する。各ロード・ストア部３２は、ベクトルロード命令に基づく制御信号送信部１１からの制御信号に応じて、ベクトルロード処理をベクトル方式（ベクトルパイプライン方式）により実行する。ベクトルロード処理は、メモリ２に格納されている複数のデータを読み出し且つ読み出した複数のデータをベクトルデータとしてベクトルレジスタ（第１のベクトルレジスタ）３１ａ又はベクトルレジスタ（第２のベクトルレジスタ）３１ｂに格納する処理である。
【００４９】
また、各ロード・ストア部３２は、ベクトルストア命令に基づく制御信号送信部１１からの制御信号に応じて、ベクトルストア処理をベクトル方式により実行する。ベクトルストア処理は、ベクトルレジスタ３１ｃに格納されているベクトルデータを読み出し且つ読み出したベクトルデータが含む複数のデータをメモリ２に格納する処理である。
【００５０】
加算部３３は、ベクトルレジスタ部３１との間でデータを授受する。加算部３３は、ベクトル加算命令に基づく制御信号送信部１１からの制御信号に応じて、ベクトル加算処理をベクトル方式により実行する。ここで、ベクトル加算処理は、下記第１の処理〜第４の処理を含む。第１の処理は、ベクトルレジスタ３１ａに格納されている第１のベクトルデータが含む複数のデータを読み出す処理である。第２の処理は、ベクトルレジスタ３１ｂに格納されている第２のベクトルデータが含む複数のデータを読み出す処理である。
【００５１】
第３の処理は、「読み出した第１のベクトルデータが含む複数のデータのそれぞれ」を、「そのデータに対応づけられ且つ読み出した第２のベクトルデータが含むデータ」に加えたデータを求める（複数の要素毎加算を実行する）処理である。第４の処理は、第３の処理により求められたデータを含む第３のベクトルデータをベクトルレジスタ３１ｃに格納する処理である。
【００５２】
乗算部３４は、ベクトルレジスタ部３１との間でデータを授受する。乗算部３４は、ベクトル乗算命令に基づく制御信号送信部１１からの制御信号に応じて、ベクトル乗算処理をベクトル方式により実行する。ここで、ベクトル乗算処理は、下記第１の処理〜第４の処理を含む。第１の処理、第２の処理及び第４の処理は、加算部３３が実行する第１の処理、第２の処理及び第４の処理とそれぞれ同様である。第３の処理は、「読み出した第１のベクトルデータが含む複数のデータのそれぞれ」に、「そのデータに対応づけられ且つ読み出した第２のベクトルデータが含むデータ」を乗じたデータを求める（複数の要素毎乗算を実行する）処理である。
【００５３】
除算部３５は、ベクトルレジスタ部３１との間でデータを授受する。除算部３５は、ベクトル除算命令に基づく制御信号送信部１１からの制御信号に応じて、ベクトル除算処理をベクトル方式により実行する。ここで、ベクトル除算処理は、下記第１の処理〜第４の処理を含む。第１の処理、第２の処理及び第４の処理は、加算部３３が実行する第１の処理、第２の処理及び第４の処理とそれぞれ同様である。第３の処理は、「読み出した第１のベクトルデータが含む複数のデータのそれぞれ」を、「そのデータに対応づけられ且つ読み出した第２のベクトルデータが含むデータ」により除したデータを求める（複数の要素毎除算を実行する）処理である。
【００５４】
シフト演算部３６は、スカラーレジスタ２２及びベクトルレジスタ部３１との間でデータを授受する。シフト演算部３６は、図２に示したように、シフト量供給部（シフト量供給手段）３６ａと、シフト演算器３６ｂと、を含む。
【００５５】
シフト演算器３６ｂは、シフト量供給部３６ａからシフト量が供給されることにより、ベクトルレジスタ３１ａに格納されている第１のベクトルデータが含む複数のデータのそれぞれを供給されたシフト量だけシフトさせる複数の要素毎シフト演算をベクトル方式により実行するように構成されている。
【００５６】
シフト演算部３６は、第１のベクトルシフト処理命令に基づく制御信号送信部１１からの制御信号に応じて、第１のベクトルシフト演算処理をベクトル方式により実行する。ここで、第１のベクトルシフト演算処理は、下記第１の処理〜第４の処理を含む。
【００５７】
第１の処理は、ベクトルレジスタ３１ａに格納されている第１のベクトルデータが含む複数のデータをシフト演算器３６ｂが読み出す処理である。第２の処理は、シフト量供給部３６ａが、スカラーレジスタ２２に格納されているデータを読み出し、読み出したデータをシフト量としてシフト演算器３６ｂへ供給する処理である。
【００５８】
第３の処理は、シフト演算器３６ｂが、「読み出した第１のベクトルデータが含む複数のデータのそれぞれ」を、「シフト量供給部３６ａから供給されたシフト量」だけシフトさせたデータを求める処理である。即ち、第３の処理は、シフト演算器３６ｂが、「読み出した第１のベクトルデータが含む複数のデータのそれぞれ」を、「シフト量供給部３６ａから供給されたシフト量」だけシフトさせる複数の要素毎シフト演算を実行する処理である。第４の処理は、第３の処理により求められたデータを含む第３のベクトルデータをベクトルレジスタ３１ｃに格納する処理である。
【００５９】
一方、シフト演算部３６は、第２のベクトルシフト処理命令に基づく制御信号送信部１１からの制御信号に応じて、第２のベクトルシフト演算処理をベクトル方式により実行する。ここで、第２のベクトルシフト演算処理は、下記第１の処理〜第４の処理を含む。
【００６０】
第１の処理及び第４の処理は、第１のベクトルシフト演算処理に含まれる第１の処理及び第４の処理とそれぞれ同様である。第２の処理は、シフト量供給部３６ａが、ベクトルレジスタ３１ｂに格納されている第２のベクトルデータに含まれる複数のデータを読み出し、読み出した複数のデータのそれぞれをシフト量としてシフト演算器３６ｂへ供給する処理（シフト量供給工程及びシフト量供給手順）である。
【００６１】
第３の処理は、シフト演算器３６ｂが、「読み出した第１のベクトルデータが含む複数のデータのそれぞれ」を、「シフト量供給部３６ａから供給されたシフト量」だけシフトさせたデータを求める処理である。即ち、第３の処理は、シフト演算器３６ｂが、「読み出した第１のベクトルデータが含む複数のデータのそれぞれ」を、「そのデータに対応づけられ且つシフト量供給部３６ａが読み出した第２のベクトルデータが含む複数のデータのそれぞれ（が表すシフト量）」だけシフトさせる複数の要素毎シフト演算を実行する処理である。
【００６２】
即ち、シフト演算部３６は、第１のベクトルシフト処理命令に基づく制御信号に応じて、スカラーレジスタ２２に格納されたデータをシフト量として用いる。一方、シフト演算部３６は、第２のベクトルシフト処理命令に基づく制御信号に応じて、ベクトルレジスタ３１ｂに格納された第２のベクトルデータが含む複数のデータのそれぞれをシフト量として用いる。
【００６３】
次に、上記のように構成されたＣＰＵ１の作動のうちの本発明に係る作動を主として説明する。
【００６４】
ところで、上述したように、メモリ２に記憶されている命令は、コンパイラによってソースプログラムをオブジェクトプログラムへ変換することにより生成された命令である。このコンパイラは、ソースプログラムのうちの、配列に格納された複数のデータ（被シフトデータ）のそれぞれ（要素）をループ処理によりシフトさせる複数の要素毎シフト演算を表す部分に基づいて、第１のベクトルシフト処理命令群と、第２のベクトルシフト処理命令群と、のいずれか一方を生成する。
【００６５】
具体的には、上記コンパイラは、上記複数の要素毎シフト演算にて用いられるシフト量が一定である場合（複数の要素毎シフト演算にて用いられるシフト量の種類の数が１つである場合）に第１のベクトルシフト処理命令群を生成し、一方、そのシフト量が一定でない場合（複数の要素毎シフト演算にて用いられるシフト量の種類の数が２つ以上である場合）に第２のベクトルシフト処理命令群を生成する。
【００６６】
第１のベクトルシフト処理命令群は、下記第１の命令〜第４の命令を含む。第１の命令は、メモリ２内の被シフトデータを第１のベクトルデータとしてベクトルレジスタ３１ａに格納することを指示するベクトルロード命令である。第２の命令は、メモリ２内のシフト量としてのデータをスカラーレジスタ２２に格納することを指示するスカラーロード命令である。第３の命令は上記第１のベクトルシフト処理命令である。第４の命令は、ベクトルレジスタ３１ｃ内の第３のベクトルデータが含む複数のデータをメモリ２に格納することを指示するベクトルストア命令である。
【００６７】
第２のベクトルシフト処理命令群は、下記第１の命令〜第４の命令を含む。第１の命令及び第４の命令は、上記第１のベクトルシフト処理命令群が含む第１の命令及び第４の命令とそれぞれ同様である。第２の命令は、メモリ２内のシフト量としての複数のデータを第２のベクトルデータとしてベクトルレジスタ３１ｂに格納することを指示するベクトルロード命令である。第３の命令は上記第２のベクトルシフト処理命令である。
【００６８】
先ず、配列に格納された複数のデータ（被シフトデータ）のそれぞれをループ処理により一定のシフト量だけシフトさせる複数の要素毎シフト演算を含むプログラムをＣＰＵ１が実行する場合について説明する。
【００６９】
この場合、ＣＰＵ１の制御装置１０は、第１のベクトルシフト処理命令群が含む上記第１の命令〜第４の命令を順に読み出して実行する。
【００７０】
具体的に述べると、先ず、制御装置１０は、第１の命令（ベクトルロード命令）に基づいて制御信号をロード・ストア部３２へ送る。ロード・ストア部３２は、上記第１の命令に基づく制御信号に応じて、メモリ２内の被シフトデータを第１のベクトルデータとしてベクトルレジスタ３１ａに格納する。
【００７１】
次いで、制御装置１０は、第２の命令（スカラーロード命令）に基づいて制御信号をスカラーユニット２０へ送る。スカラーユニット２０は、上記第２の命令に基づく制御信号に応じて、メモリ２内のシフト量としてのデータをスカラーレジスタ２２に格納する。
【００７２】
そして、制御装置１０は、第３の命令（第１のベクトルシフト処理命令）に基づいて制御信号をシフト演算部３６へ送る。シフト演算部３６は、上記第３の命令に基づく制御信号に応じて、上記第１のベクトルシフト演算処理をベクトル方式により実行する。
【００７３】
次いで、制御装置１０は、第４の命令（ベクトルストア命令）に基づいて制御信号をロード・ストア部３２へ送る。ロード・ストア部３２は、上記第４の命令に基づく制御信号に応じて、ベクトルレジスタ３１ｃ内の第３のベクトルデータが含む複数のデータをメモリ２に格納する。
【００７４】
次に、配列に格納された複数のデータ（被シフトデータ）のそれぞれをループ処理により、データ毎に異なるシフト量だけシフトさせる複数の要素毎シフト演算を含むプログラムをＣＰＵ１が実行する場合について説明する。
【００７５】
この場合、ＣＰＵ１の制御装置１０は、第２のベクトルシフト処理命令群が含む上記第１の命令〜第４の命令を順に読み出して実行する。
【００７６】
具体的に述べると、先ず、制御装置１０は、第１の命令（ベクトルロード命令）に基づいて制御信号をロード・ストア部３２へ送る。ロード・ストア部３２は、上記第１の命令に基づく制御信号に応じて、メモリ２内の被シフトデータを第１のベクトルデータとしてベクトルレジスタ３１ａに格納する（第１のベクトルデータ格納工程及び第１のベクトルデータ格納手順）。
【００７７】
次いで、制御装置１０は、第２の命令（ベクトルロード命令）に基づいて制御信号をロード・ストア部３２へ送る。ロード・ストア部３２は、上記第２の命令に基づく制御信号に応じて、メモリ２内のシフト量としての複数のデータを第２のベクトルデータとしてベクトルレジスタ３１ｂに格納する（第２のベクトルデータ格納工程及び第２のベクトルデータ格納手順）。
【００７８】
そして、制御装置１０は、第３の命令（第２のベクトルシフト処理命令）に基づいて制御信号をシフト演算部３６へ送る。シフト演算部３６は、上記第３の命令に基づく制御信号に応じて、上記第２のベクトルシフト演算処理をベクトル方式により実行する（シフト演算実行工程及びシフト演算実行手順）。
【００７９】
次いで、制御装置１０は、第４の命令（ベクトルストア命令）に基づいて制御信号をロード・ストア部３２へ送る。ロード・ストア部３２は、上記第４の命令に基づく制御信号に応じて、ベクトルレジスタ３１ｃ内の第３のベクトルデータが含む複数のデータをメモリ２に格納する。
【００８０】
以上、説明したように、本発明によるベクトル演算装置の実施形態によれば、シフト量が互いに異なる要素毎シフト演算を含む複数の要素毎シフト演算のすべてを、１回の処理（ベクトル処理）により実行することができる。即ち、第１のベクトルデータ内の複数のデータのそれぞれを、データ毎に異なるシフト量だけシフトさせる複数の要素毎シフト演算を高速に実行することができる。
【００８１】
更に、上記実施形態は、複数の要素毎シフト演算にて用いられるシフト量が一定である場合にスカラーレジスタ２２に格納されたデータをシフト量として用い、一方、当該シフト量が一定でない場合に第２のベクトルレジスタ３１ｂに格納された第２のベクトルデータが含む複数のデータのそれぞれをシフト量として用いる。
【００８２】
即ち、上記実施形態によれば、複数の要素毎シフト演算にて用いられるシフト量が一定である場合には、ベクトルユニット３０は、スカラーレジスタ２２に格納されたデータをシフト量として用いて要素毎シフト演算を実行する。従って、第２のベクトルレジスタ３１ｂに格納されたデータを用いて要素毎シフト演算を実行する場合と比較して、より高速に複数の要素毎シフト演算を実行することができる。
【００８３】
なお、本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、上記実施形態は、スカラーレジスタ２２に格納されたデータと、ベクトルレジスタ３１ｂに格納された第２のベクトルデータが含むデータと、のいずれか一方をシフト量として用いるように構成されていたが、ベクトルレジスタ３１ｂに格納された第２のベクトルデータが含むデータのみをシフト量として用いるように構成されていてもよい。
【００８４】
また、上記実施形態は、複数の要素毎シフト演算にて用いられるシフト量の種類の数が「１」よりも大きい所定の閾値よりも小さいとき、スカラーレジスタ２２に格納されたデータをシフト量として用いるように構成されていてもよい。この場合、上記実施形態は、上記シフト量の種類の数が「１」よりも大きく且つ上記閾値よりも小さいとき、シフト量が互いに等しい要素毎シフト演算毎に順に要素毎シフト演算を実行することにより、すべての要素毎シフト演算を実行するように構成されていることが好適である。
【産業上の利用可能性】
【００８５】
本発明は、ベクトル方式により演算を実行するプロセッサ等に適用可能である。
【図面の簡単な説明】
【００８６】
【図１】本発明の実施形態に係るＣＰＵ及びメモリの概略構成を表す図である。
【図２】図１に示したシフト演算部の概略構成を表す図である。
【符号の説明】
【００８７】
１      ＣＰＵ
２      メモリ
１０    制御装置
１１    制御信号送信部
２０    スカラーユニット
２１    キャッシュメモリ
２２    スカラーレジスタ
２３    スカラー演算部
３０    ベクトルユニット
３１    ベクトルレジスタ部
３１ａ〜３１ｃ  ベクトルレジスタ
３２    ロード・ストア部
３３    加算部
３４    乗算部
３５    除算部
３６    シフト演算部
３６ａ  シフト量供給部
３６ｂ  シフト演算器
【図１】
2009169709.tif 000003
【図２】
2009169709.tif 000004