(57)【要約】【課題】ベクトル処理に対して、スカラプロセッサとベクトルプロセッサとによるより良好なバランスでの処理を考慮したコード生成を行うことができ、ベクトル処理の実行時間を最小に抑えることができるベクトル化方式を提供する。【解決手段】スカラ処理と複数の同時実行可能なベクトル処理ユニットでのベクトル処理とのバランスを考慮して、全体の実行時間が最小になるようなコードの生成を可能とする。【選択図】　　図１
2004046747.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサコアと独立して動作可能で、複数の連続したデータに対する演算を同時に処理するベクトル処理を専門に実行するベクトルプロセッサと、前記プロセッサコアにおける通常のスカラ処理を実行するとともに、１つの命令で前記ベクトル処理を実行するＳＩＭＤ命令、および１つの命令に複数の動作を記述して前記ベクトル処理を実行するＶＬＩＷ命令を有するスカラプロセッサとからなるベクトル処理ユニットを含むプロセッサ構成において、前記ベクトル処理を実行するためのベクトルコードを生成するベクトル化方式であって、前記プロセッサ構成における処理実行のためのソースプログラムから前記ベクトル処理用としてベクトル化が可能な部分のコードを抽出するベクトル処理抽出ステップと、前記ベクトル処理抽出ステップで抽出したコードによるベクトル処理に対して、前記ベクトル処理ユニットにおける前記ベクトルプロセッサによるベクトル処理と、前記スカラプロセッサによるベクトル処理とのバランスを解析して、前記ベクトル処理のバランスを全体の実行時間が最小になるように決定するベクトル処理バランス解析ステップと、前記ベクトル処理バランス解析ステップで解析した結果を基に、前記ベクトル処理ユニットがベクトル処理を実行するための前記ベクトルコードを生成するベクトルコード生成ステップとを備えたことを特徴とするベクトル化方式。
【請求項２】
請求項１記載のベクトル化方式であって、前記ベクトル処理バランス解析ステップで、前記ベクトル処理のバランスを決定するに際し、前記ベクトル処理抽出ステップで抽出したコードを基に、それらの処理配分を変数として、前記ベクトルプロセッサでの処理時間と、前記スカラプロセッサでのスカラ処理とベクトル処理の各処理時間とを求め、同時実行する部分の処理時間が等しくなる処理配分を求めることを特徴とするベクトル化方式。
【請求項３】
請求項２記載のベクトル化方式であって、前記ベクトル処理バランス解析ステップで、前記同時実行する部分の処理時間が等しくなる処理配分でのベクトル処理により実行した場合の全体の実行時間と、全てのデータをスカラプロセッサでのベクトル処理により実行した場合の全体の実行時間とを比較し、前記スカラプロセッサで実行した場合の実行時間の方が短かった場合には、前記全てのデータを前記スカラプロセッサでのベクトル処理により実行するように、処理配分を決定することを特徴とするベクトル化方式。
【請求項４】
プロセッサコアと独立して動作可能で、複数の連続したデータに対する演算を同時に処理するベクトル処理を専門に実行するベクトルプロセッサと、前記プロセッサコアにおける通常のスカラ処理を実行するとともに、１つの命令で前記ベクトル処理を実行するＳＩＭＤ命令、および１つの命令に複数の動作を記述して前記ベクトル処理を実行するＶＬＩＷ命令を有するスカラプロセッサとからなるベクトル処理ユニットを含むプロセッサ構成において、前記ベクトル処理を実行するためのベクトルコードを生成するベクトル化方式であって、前記プロセッサ構成における処理実行のためのソースプログラムから前記ベクトル処理用としてベクトル化が可能な部分のコードを抽出するベクトル処理抽出ステップと、前記ベクトル処理抽出ステップで抽出したコードによるベクトル処理に対して、前記ベクトル処理ユニットにおける前記ベクトルプロセッサによるベクトル処理と、前記スカラプロセッサによるベクトル処理とのバランスを解析して、前記ベクトル処理のバランスを全体の実行時間が最小になるように決定するベクトル処理バランス解析ステップと、前記ベクトル処理バランス解析ステップで解析した結果を基に、前記ベクトル処理ユニットがベクトル処理を実行するための前記ベクトルコードを生成するベクトルコード生成ステップとを備えるプログラムを記録したベクトル化記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンパイラ技術において複数の連続データに対するベクトル処理を実行するためのベクトル化方式に関するものである。
【０００２】
【従来の技術】
メモリ上の連続したデータに対して繰り返し演算を行う場合に、同時に実行しても結果が変化しない場合は、これら連続したデータに対する演算を複数回分同時に実行することが可能である。このように複数の連続したデータに対してそれぞれ同時に演算を行う処理をベクトル処理と呼ぶ。
【０００３】
プロセッサにおいて、ベクトル処理を行うユニットをベクトル処理ユニットと呼ぶ。ベクトル処理ユニットのプロセッサ構成の一例として、通常の処理を行うスカラプロセッサとベクトル処理のみを専門で行うベクトルプロセッサとを、複合して持つ構成がある。このような構成の場合、スカラプロセッサとベクトルプロセッサが独立して並列処理動作することが可能な場合が多い。
【０００４】
また、別のベクトル処理ユニットのプロセッサ構成として、スカラプロセッサ内の命令として複数の演算処理を同時に行う構成がある。その代表的なものとしては、１つの命令で複数の異なるデータに対して同一演算を行うＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ−ｓｔｒｅａｍ　ｏｎ　Ｍｕｌｔｉｐｌｅ−Ｄａｔａ−ｓｔｒｅａｍ）命令による処理を行う構成や、１つの命令で複数の命令動作が実行可能なＶＬＩＷ（Ｖｅｒｙ−Ｌｏｎｇ−Ｉｎｓｔｒｕｃｔｉｏｎ−Ｗｏｒｄ）命令による処理を行う構成がある。
【０００５】
一般に、ベクトルプロセッサでは、その処理の並列度が高いが、スカラプロセッサとは独立して動作するため、スカラプロセッサとの間でデータのやりとりを行う場合には、そのやりとりに対する専用の処理が必要である。一方、スカラプロセッサでは、ＳＩＭＤ命令やＶＬＩＷ命令での処理のように、ベクトルプロセッサよりも並列度は低いが、ベクトルプロセッサのようなデータのやりとりに伴う処理が不要となる。
【０００６】
コンパイラでの処理において、配列に対する連続した演算について、ベクトル処理ユニットによるベクトル処理を行うための命令コードを出力することを、一般にベクトル化と呼び、従来は、ベクトル化を行う配列全体を１つの単位としてコード出力を行っていた。
【０００７】
【発明が解決しようとする課題】
しかしながら上記のような従来のベクトル化方式による手法では、コンパイラでの処理において、ベクトル化を行う配列全体を１つの単位としてコード出力を行っており、また、スカラプロセッサとベクトルプロセッサの双方でベクトル処理が可能な場合に、より並列度の高い処理ユニットを使用するようなコードを出力していた。
【０００８】
ところが、上記のような並列度の高い処理ユニットを使用しているなかで、ベクトルプロセッサの演算処理中に並列動作するスカラプロセッサが、ベクトルプロセッサの演算結果を基に演算処理するように、コードが出力された場合には、スカラプロセッサによる演算処理が、ベクトルプロセッサの当該演算が終了するまで待たされることになる。
【０００９】
このような場合、実行時間をより短縮するためには、スカラプロセッサにおいても、ベクトル処理の一部を実行させるなど、スカラプロセッサとベクトルプロセッサとによる処理のバランスを考慮してコード生成を行うようにしなければならないという問題点を有していた。
【００１０】
本発明は、上記従来の問題点を解決するもので、コンパイラでの処理実行の際のベクトル処理に対して、スカラプロセッサとベクトルプロセッサとによるより良好なバランスでの処理を考慮したコード生成を行うことができ、ベクトル処理の実行時間を最小に抑えることができるベクトル化方式を提供する。
【００１１】
【課題を解決するための手段】
上記の課題を解決するために本発明のベクトル化方式は、プロセッサコアと独立して動作可能で、複数の連続したデータに対する演算を同時に処理するベクトル処理を専門に実行するベクトルプロセッサと、前記プロセッサコアにおける通常のスカラ処理を実行するとともに、１つの命令で前記ベクトル処理を実行するＳＩＭＤ命令、および１つの命令に複数の動作を記述して前記ベクトル処理を実行するＶＬＩＷ命令を有するスカラプロセッサとからなるベクトル処理ユニットを含むプロセッサ構成において、前記ベクトル処理を実行するためのベクトルコードを生成するベクトル化方式であって、前記プロセッサ構成における処理実行のためのソースプログラムから前記ベクトル処理用としてベクトル化が可能な部分のコードを抽出するベクトル処理抽出ステップと、前記ベクトル処理抽出ステップで抽出したコードによるベクトル処理に対して、前記ベクトル処理ユニットにおける前記ベクトルプロセッサによるベクトル処理と、前記スカラプロセッサによるベクトル処理とのバランスを解析して、前記ベクトル処理のバランスを全体の実行時間が最小になるように決定するベクトル処理バランス解析ステップと、前記ベクトル処理バランス解析ステップで解析した結果を基に、前記ベクトル処理ユニットがベクトル処理を実行するための前記ベクトルコードを生成するベクトルコード生成ステップとを備えた方法としたことを特徴とする。
【００１２】
以上により、スカラ処理と複数の同時実行可能なベクトル処理ユニットでのベクトル処理とのバランスを考慮して、全体の実行時間が最小になるようなコードを生成することができる。
【００１３】
【発明の実施の形態】
本発明の請求項１に記載のベクトル化方式は、プロセッサコアと独立して動作可能で、複数の連続したデータに対する演算を同時に処理するベクトル処理を専門に実行するベクトルプロセッサと、前記プロセッサコアにおける通常のスカラ処理を実行するとともに、１つの命令で前記ベクトル処理を実行するＳＩＭＤ命令、および１つの命令に複数の動作を記述して前記ベクトル処理を実行するＶＬＩＷ命令を有するスカラプロセッサとからなるベクトル処理ユニットを含むプロセッサ構成において、前記ベクトル処理を実行するためのベクトルコードを生成するベクトル化方式であって、前記プロセッサ構成における処理実行のためのソースプログラムから前記ベクトル処理用としてベクトル化が可能な部分のコードを抽出するベクトル処理抽出ステップと、前記ベクトル処理抽出ステップで抽出したコードによるベクトル処理に対して、前記ベクトル処理ユニットにおける前記ベクトルプロセッサによるベクトル処理と、前記スカラプロセッサによるベクトル処理とのバランスを解析して、前記ベクトル処理のバランスを全体の実行時間が最小になるように決定するベクトル処理バランス解析ステップと、前記ベクトル処理バランス解析ステップで解析した結果を基に、前記ベクトル処理ユニットがベクトル処理を実行するための前記ベクトルコードを生成するベクトルコード生成ステップとを備えた方法とする。
【００１４】
この方法によると、スカラ処理と複数の同時実行可能なベクトル処理ユニットでのベクトル処理とのバランスを考慮して、全体の実行時間が最小になるようなコードの生成を可能とする。
【００１５】
請求項２に記載のベクトル化方式は、請求項１記載のベクトル化方式であって、前記ベクトル処理バランス解析ステップで、前記ベクトル処理のバランスを決定するに際し、前記ベクトル処理抽出ステップで抽出したコードを基に、それらの処理配分を変数として、前記ベクトルプロセッサでの処理時間と、前記スカラプロセッサでのスカラ処理とベクトル処理の各処理時間とを求め、同時実行する部分の処理時間が等しくなる処理配分を求める方法とする。
【００１６】
この方法によると、ベクトル処理のバランス決定に際して、処理配分を変数として、ベクトルプロセッサでのベクトル処理の処理時間と、スカラプロセッサでのスカラ処理およびベクトル処理の処理時間とを求め、同時実行する部分の処理時間が等しくなる処理配分を可能とする。
【００１７】
請求項３に記載のベクトル化方式は、請求項２記載のベクトル化方式であって、前記ベクトル処理バランス解析ステップで、前記同時実行する部分の処理時間が等しくなる処理配分でのベクトル処理により実行した場合の全体の実行時間と、全てのデータをスカラプロセッサでのベクトル処理により実行した場合の全体の実行時間とを比較し、前記スカラプロセッサで実行した場合の実行時間の方が短かった場合には、前記全てのデータを前記スカラプロセッサでのベクトル処理により実行するように、処理配分を決定する方法とする。
【００１８】
この方法によると、全体の処理時間を最小にする処理配分での実行時間と、全てのデータをスカラプロセッサのベクトルユニットで実行した場合の実行時間とを比較し、スカラプロセッサで実行した場合の実行時間の方が短かった場合には、全てのデータをスカラプロセッサのベクトルユニットで行うように処理配分を決定することにより、データ量が少ない場合などにおいて、ベクトルプロセッサを使用した処理により逆に実行時間が長くなってしまわないようにする。
【００１９】
請求項４に記載のベクトル化記憶媒体は、プロセッサコアと独立して動作可能で、複数の連続したデータに対する演算を同時に処理するベクトル処理を専門に実行するベクトルプロセッサと、前記プロセッサコアにおける通常のスカラ処理を実行するとともに、１つの命令で前記ベクトル処理を実行するＳＩＭＤ命令、および１つの命令に複数の動作を記述して前記ベクトル処理を実行するＶＬＩＷ命令を有するスカラプロセッサとからなるベクトル処理ユニットを含むプロセッサ構成において、前記ベクトル処理を実行するためのベクトルコードを生成するベクトル化方式であって、前記プロセッサ構成における処理実行のためのソースプログラムから前記ベクトル処理用としてベクトル化が可能な部分のコードを抽出するベクトル処理抽出ステップと、前記ベクトル処理抽出ステップで抽出したコードによるベクトル処理に対して、前記ベクトル処理ユニットにおける前記ベクトルプロセッサによるベクトル処理と、前記スカラプロセッサによるベクトル処理とのバランスを解析して、前記ベクトル処理のバランスを全体の実行時間が最小になるように決定するベクトル処理バランス解析ステップと、前記ベクトル処理バランス解析ステップで解析した結果を基に、前記ベクトル処理ユニットがベクトル処理を実行するための前記ベクトルコードを生成するベクトルコード生成ステップとを備えるプログラムを記録したものとする。
【００２０】
この記憶媒体によると、スカラ処理と複数の同時実行可能なベクトル処理ユニットでのベクトル処理とのバランスを考慮して、全体の実行時間が最小になるようなコードの生成を可能とする。
【００２１】
以下、本発明の実施の形態を示すベクトル化方式について、図面を参照しながら具体的に説明する。
図１は本実施の形態のベクトル化方式を用いたコンパイラの一構成例を示すブロック図である。図１に示すように、本実施の形態のベクトル化方式を用いたコンパイラにおいて、ベクトル化処理部１００での処理行程として、ベクトル処理抽出ステップＳ１１０と、ベクトル処理バランス解析ステップＳ１２０と、ベクトルコード生成ステップＳ１３０とを有している。
【００２２】
次に、上記の各ステップの機能について、図面を用いて以下に説明する。
ベクトル処理抽出ステップＳ１１０は、第一中間言語Ｄ１１０に対して、繰り返し処理からベクトル化可能な部分を抽出し、ベクトル処理を記述した第二中間言語Ｄ１２０に変換する。第一中間言語Ｄ１１０の例を図２（ａ）に示す。第一中間言語Ｄ１１０は、高級言語におけるループ処理の構造を残したものとなっている。この図ではＢの部分がループによる連続データに対する繰り返し処理になっている。次に第二中間言語Ｄ１２０の例を図２（ｂ）に示す。Ｂの演算がベクトル処理可能であることを示す記述となっている。
【００２３】
なお、ベクトル処理抽出ステップＳ１１０の詳細な説明については、本発明の主眼ではなく公知技術であるので、ここでの説明は省略する。
ベクトル処理バランス解析ステップＳ１２０は、ベクトル処理抽出ステップＳ１１０で解析した第二中間言語Ｄ１２０と、プロセッサ内のベクトル処理ユニットに対応するベクトルユニット情報Ｄ１３０とを基に、ベクトル処理バランス情報Ｄ１４０を求める。
【００２４】
ここで、ベクトル処理ユニットを持つプロセッサの一例を図３に示して、以下に説明する。
図３に示すように、プロセッサ３００は、ベクトル処理ユニットとして、通常の処理を行うスカラプロセッサ３１０と、ベクトル処理を専門で行うベクトルプロセッサ３２０とを持つ。スカラプロセッサ３１０は、通常のスカラ処理を行うためのスカラ命令３３０に加えて、１つの命令で複数データに対する演算を行うＳＩＭＤ命令３４０を持ち、さらにメモリ３５０を持つ。
【００２５】
ベクトルプロセッサ３２０は、ベクトル処理のための命令であるベクトル命令３６０を持ち、さらにスカラプロセッサのメモリ３５０と独立したＶＰメモリ３７０を持つ。ＶＰメモリ３７０は、スカラプロセッサ３１０用のメモリ３５０と直接データの転送を行うことが可能となっている。
【００２６】
ベクトルプロセッサ３２０でベクトル処理を行うための手順は以下のようになっている。
まず、スカラプロセッサ３１０において、ベクトルプロセッサ３２０を起動するための準備処理を行う。準備処理が完了するとベクトルプロセッサ３２０においてベクトル処理を行う。ベクトルプロセッサ３２０によるベクトル処理は、メモリ３５０からＶＰメモリ３７０へのデータ転送、ベクトル命令３６０を用いたベクトル演算処理、ＶＰメモリ３７０からメモリ３５０への演算結果の転送から構成される。
【００２７】
また、ベクトルユニット情報Ｄ１３０は、プロセッサ３００が持つ各ベクトル処理ユニットの構成を数値化したものである。
プロセッサ３００をモデルとして、ベクトル処理バランス解析ステップＳ１２０について説明する。
【００２８】
ベクトル処理バランス解析ステップＳ１２０は、ベクトル処理抽出ステップＳ１１０の出力である第二中間言語Ｄ１２０と、プロセッサが持つベクトル処理ユニットの情報を表すベクトルユニット情報Ｄ１３０とを基に、ベクトル処理バランス情報Ｄ１４０を求める。
【００２９】
図４は、図２（ｂ）の第二中間言語の実行の流れ（Ａ、Ｂ、Ｃ、Ｄ）を示したものである。図中の四角は処理単位を示しており、矢印は実行依存関係を示している。実行順序としては、まずＡを実行する。次にＢとＣを実行するが、ＢとＣは独立しているため、並列に同時実行が可能である。Ｂ、Ｃの実行が終了した後にＤを実行する。ここで、Ｂはベクトル処理が可能となっており、配列の各要素に対する演算を並列に実行することが可能であるとする。
【００３０】
図５（ａ）は従来手法によるベクトル化の例を示しており、図４で示した一連の処理を対象として、プロセッサ３００でベクトル処理したときの処理配分と実行時間を示している。従来手法では、図５（ａ）に示すように、ベクトル化を行う配列全体を１つの単位としていたので、Ｂ全体をベクトルプロセッサで実行するようにしている。図５（ｂ）は、Ａ、Ｂ、Ｃ、Ｄの各処理をどのプロセッサで実行するのかを示している。Ｂをベクトルプロセッサ３２０で処理し、他の処理はスカラプロセッサ３１０のスカラ命令３３０で処理する。
【００３１】
Ｂをベクトルプロセッサ３２０で実行する場合、以下のような４段階の処理となる。
Ｂ１：スカラプロセッサ３１０によるベクトルプロセッサ３２０を起動するための処理
Ｂ２：ＶＰメモリ３７０にデータを転送
Ｂ３：ベクトル命令３６０を用いたベクトル演算処理
Ｂ４：ベクトル演算処理により得られた演算結果をメモリ３５０に転送
これらの処理のうち、スカラプロセッサ３１０ではＢ１を実行し、ベクトルプロセッサ３２０ではＢ２〜Ｂ４を実行する。ここで実際の演算処理を行っているのはＢ３の部分であり、他の部分はベクトルプロセッサ３２０を使用するために必要な処理となっている。
【００３２】
ここで、Ｂ１の処理はベクトル処理を行うデータ量にかかわらず一定の処理時間がかかるとする。Ｂ２〜Ｂ４についてはベクトル処理を行うデータ量に比例して処理時間が大きくなる。ベクトルプロセッサ３２０での処理における横幅は並列度を表しており、この例では８並列でベクトル処理を行う。ＴＡ、ＴＢ１〜ＴＢ４、ＴＣ、ＴＤはそれぞれの処理にかかる時間を示している。さらにＴａｌｌは処理全体にかかる時間、ＴＢＶはＢの処理のうちベクトルプロセッサ３２０で行う処理時間を表す。
【００３３】
スカラプロセッサ３１０とベクトルプロセッサ３２０は独立して動作可能なので、全体の実行時間ＴａｌｌはＴＣとＴＢＶのうちの大きい方に依存することになる。ここで、図５のように、ＴＢＶがＴＣよりも大きい場合、スカラプロセッサ３１０での待ち時間が発生していることがわかる。
【００３４】
本手法では、ベクトル処理バランス解析ステップＳ１２０において、ベクトル処理Ｂの最適な処理配分を決定し、スカラプロセッサ３１０においてもベクトル処理を行うことにより、スカラプロセッサ３１０での待ち時間をなくしている。
【００３５】
ベクトル処理バランス解析ステップＳ１２０について、その動作を図６のフローチャートを用いながら以下に説明する。
ステップ６１０では、ベクトルプロセッサ（ＶＰ）と並列に処理が可能なスカラ処理Ｃの処理時間ＴＣを求める。ステップ６２０では、Ｂの処理配分を変数としたとき、スカラプロセッサ（ＳＰ）に割り当てられた処理の時間ＴＢＳを求める。ステップ６３０では、Ｂの処理配分を変数としたとき、ＶＰに割り当てられた分の処理時間ＴＢＶを求める。
【００３６】
ステップ６４０では、先に求めた処理時間から、ＴＣ＋ＴＢＳ＝ＴＢＶとなるような処理配分を求める。ステップ６５０では、ステップ６４０で求めた処理配分におけるＴＢ１＋ＴＢＶの値と、Ｂの処理を全てスカラプロセッサ３１０のＳＩＭＤ命令３４０で実行した場合の処理時間ＴＢＳを求める。
【００３７】
ステップ６６０では、ステップ６５０で求めた値において、Ｂの処理を全てスカラプロセッサのＳＩＭＤ命令で実行した場合の実行時間が少ないかどうかを条件として比較する。ステップ６７０では、ステップ６６０の条件を満たさない場合であり、処理配分はステップ６４０で求めたものとする。ステップ６８０では、ステップ６６０の条件を満たす場合であり、処理配分は全てスカラプロセッサ３１０のＳＩＭＤ命令３４０で実行するとする。ステップ６９０では、求めた処理配分からベクトル処理バランス情報Ｄ１４０を生成する。
【００３８】
図７（ａ）は、図４で示した一連の処理を対象として、ベクトル処理バランス解析ステップＳ１２０を適用した結果を示している。
Ｂの演算処理は、ベクトル処理バランス解析ステップＳ１２０で求めた処理配分をもとにして分割される。Ｂ３１は分割したＢの演算処理のうち、ベクトルプロセッサ３２０で処理をする分である。同様に、Ｂ３２は分割した演算処理のうち、スカラプロセッサ３１０のＳＩＭＤ命令３４０で処理をする分である。ＴＢＳ＋ＴＣ＝ＴＢＶとなるように処理配分を決定しているため、スカラプロセッサ３１０での待ち時間が発生していないことがわかる。
【００３９】
図７（ｂ）は、図５（ｂ）と同様に、Ａ、Ｂ、Ｃ、Ｄの各処理をどのプロセッサで実行するのかを示している。Ｂをベクトルプロセッサ３２０とスカラプロセッサ３１０のＳＩＭＤ命令３４０の両方で処理し、他の処理はスカラプロセッサ３１０のスカラ命令３３０のみで処理する。表中の二重丸はベクトル処理を分担している部分を示している。
【００４０】
図８（ａ）は、図４で示した一連の処理を対象として、ベクトル処理バランス解析ステップＳ１２０を適用した第二の方式を示している。この方式は、図６のステップ６６０において、Ｂの演算処理をＳＩＭＤ命令のみで実行した方が実行時間が少ない場合である。
【００４１】
図８（ｂ）に示すように、Ｂをスカラプロセッサ３１０のＳＩＭＤ命令３４０のみで処理しており、他の処理はスカラプロセッサ３１０のスカラ命令３３０で処理する。ベクトルコード生成ステップＳ１３０は、ベクトル処理抽出ステップＳ１１０の出力である第二中間言語Ｄ１２０を入力として、ベクトルユニット情報Ｄ１３０と、ベクトル処理バランス解析ステップＳ１２０の出力であるベクトル処理バランス情報Ｄ１４０を用いて、第三中間言語Ｄ１５０を出力する。
【００４２】
なお、本実施の形態で示される方式を実現する装置をフレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどの記録媒体に入れることにより、本実施の形態で示される方式を、コンピュータで実現することができる。
【００４３】
【発明の効果】
以上のように本発明によれば、スカラ処理と複数の同時実行可能なベクトル処理ユニットでのベクトル処理とのバランスを考慮して、全体の実行時間が最小になるようなコードを生成することができる。
【００４４】
また、ベクトル処理のバランス決定に際して、処理配分を変数として、ベクトルプロセッサでのベクトル処理の処理時間と、スカラプロセッサでのスカラ処理およびベクトル処理の処理時間とを求め、同時実行する部分の処理時間が等しくなる処理配分を得ることができる。
【００４５】
また、全体の処理時間を最小にする処理配分での実行時間と、全てのデータをスカラプロセッサのベクトルユニットで実行した場合の実行時間とを比較し、スカラプロセッサで実行した場合の実行時間の方が短かった場合には、全てのデータをスカラプロセッサのベクトルユニットで行うように処理配分を決定することにより、データ量が少ない場合などにおいて、ベクトルプロセッサを使用した処理により逆に実行時間が長くなってしまわないようにすることができる。
【００４６】
以上のため、コンパイラでの処理実行の際のベクトル処理に対して、スカラプロセッサとベクトルプロセッサとによるより良好なバランスでの処理を考慮したコード生成を行うことができ、ベクトル処理の実行時間を最小に抑えることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態のベクトル化方式によるコンパイラの構成例を示すブロック図
【図２】同実施の形態のベクトル化方式における中間言語の例を示す概念図
【図３】同実施の形態のベクトル化方式におけるプロセッサの構成例を示すブロック図
【図４】同実施の形態のベクトル化方式における第二中間言語の処理の流れを示すフロー図
【図５】同実施の形態のベクトル化方式と比較するための従来のベクトル化の動作説明図
【図６】同実施の形態のベクトル化方式におけるベクトル処理バランス解析ステップの処理を示すフロー図
【図７】同実施の形態のベクトル化方式におけるベクトル化の動作説明図
【図８】同実施の形態のベクトル化方式における別のベクトル化の動作説明図
【符号の説明】
１００　　ベクトル化処理部
Ｓ１１０　　ベクトル処理抽出ステップ
Ｓ１２０　　ベクトル処理バランス解析ステップ
Ｓ１３０　　ベクトルコード生成ステップ
Ｄ１１０　　第一中間言語
Ｄ１２０　　第二中間言語
Ｄ１３０　　ベクトルユニット情報
Ｄ１４０　　ベクトル処理バランス情報
Ｄ１５０　　第三中間言語
３００　　プロセッサ
３１０　　スカラプロセッサ
３２０　　ベクトルプロセッサ
３３０　　スカラ命令
３４０　　ＳＩＭＤ命令
３５０　　メモリ
３６０　　ベクトル命令
３７０　　ＶＰメモリ
【図１】
2004046747.tif 000003
【図２】
2004046747.tif 000004
【図３】
2004046747.tif 000005
【図４】
2004046747.tif 000006
【図５】
2004046747.tif 000007
【図６】
2004046747.tif 000008
【図７】
2004046747.tif 000009
【図８】
2004046747.tif 000010