(57)【特許請求の範囲】
【請求項１】
ソースプログラムを解析した後にベクトル化しベクトルレジスタ割付けを行って展開された中間言語に最適化を行う言語処理システムにおいて、
対象ループの外側にプレローディングの対象と判別されたベクトルレジスタに所定のベクトルデータをプレローディングするローディング命令を生成するとともに、対象ループの後部に前記対象と判別されたベクトルレジスタに所定のベクトルデータをプレローディングするローディング命令を生成する手段と、
前記プレローディングの対象となったベクトルレジスタをテーブルを用いてループの外で定義しループの中で使うように管理する手段と、
を備えたことを特徴とする言語処理システム。
【請求項２】
ソースプログラムを解析した後にベクトル化しベクトルレジスタ割付けを行って展開された中間言語に最適化を行う言語処理システムにおいて、
ループを取り出し処理対象のループのときベクトルデータの処理を行うベクトル制御範囲を取り出す制御範囲取出手段と、
ベクトル制御範囲内で定義されるベクトルデータレジスタおよびマスクレジスタの番号をテーブルに登録処理する第１のテーブル登録処理手段と、
中間言語を取り出し処理対象の中間言語のときプレローディング対象となるベクトルデータレジスタおよびマスクレジスタを判別するプレローディング対象判別手段と、
ループの外側に１要素の配列データを対象とされたベクトルデータレジスタおよびマスクレジスタにプレローディングするローディング命令を生成する第１のプレローディング命令生成手段と、
ループの最後に次の要素の配列データから最後の配列データまでを前記ベクトルデータレジスタおよびマスクレジスタにプレローディングするローディング命令を生成する第２のプレローディング命令生成手段と、
プレローディングに使用した前記ベクトルデータレジスタおよびマスクレジスタの番号をテーブルに登録処理する第２のテーブル登録処理手段と、
を備えたことを特徴とする言語処理システム。
【請求項３】
請求項２記載の言語処理システムにおいて、
前記制御範囲取出手段でベクトル制御範囲を取り出す前に前記ベクトルデータレジスタおよびマスクレジスタの番号を登録処理するテーブルを初期化するテーブル初期化手段を有することを特徴とする言語処理システム。
【請求項４】
請求項２記載の言語処理システムにおいて、
前記第１，第２のプレローディング命令生成手段でローディング命令を生成した後に、ループ内にあるオリジナルのローディング命令を削除するオリジナルローディング命令削除手段を有することを特徴とする言語処理システム。
【請求項５】
ソースプログラムを解析した後にベクトル化しベクトルレジスタ割付けを行って展開された中間言語に最適化を行うためのローディングプログラムを記録した記録媒体において、
対象ループの外側にプレローディングの対象と判別されたベクトルレジスタに所定のベクトルデータをプレローディングするローディング命令を生成するとともに、対象ループの後部に前記対象と判別されたベクトルレジスタに所定のベクトルデータをプレローディングするローディング命令を生成する手順、
前記プレローディングの対象となったベクトルレジスタをテーブルを用いてループの外で定義しループの中で使うように管理する手順、
を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項６】
ソースプログラムを解析した後にベクトル化しベクトルレジスタ割付けを行って展開された中間言語に最適化を行うためのローディングプログラムを記録した記録媒体において、
ループを取り出し処理対象のループのときベクトルデータの処理を行うベクトル制御範囲を取り出す制御範囲取出手順、
ベクトル制御範囲内で定義されるベクトルデータレジスタおよびマスクレジスタの番号をテーブルに登録処理する第１のテーブル登録処理手順、
中間言語を取り出し処理対象の中間言語のときプレローディング対象となるベクトルデータレジスタおよびマスクレジスタを判別するプレローディング対象判別手順、
ループの外側に１要素の配列データを対象とされたベクトルデータレジスタおよびマスクレジスタにプレローディングするローディング命令を生成する第１のプレローディング命令生成手順、
ループの最後に次の要素の配列データから最後の配列データまでを前記ベクトルデータレジスタおよびマスクレジスタにプレローディングするローディング命令を生成する第２のプレローディング命令生成手順、
プレローディングに使用した前記ベクトルデータレジスタおよびマスクレジスタの番号をテーブルに登録処理する第２のテーブル登録処理手順、
を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項７】
請求項６記載のローディングプログラムを記録した記録媒体において、
前記制御範囲取出手順でベクトル制御範囲を取り出す前に前記ベクトルデータレジスタおよびマスクレジスタの番号を登録処理するテーブルを初期化するテーブル初期化手順を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項８】
請求項６記載のローディングプログラムを記録した記録媒体において、
前記第１，第２のプレローディング命令生成手順でプレローディング命令を生成した後に、ループ内にあるオリジナルのローディング命令を削除するオリジナルローディング命令削除手順を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムの実行性能を大幅に向上させることができる言語処理システムおよびローディングプログラムを記録した媒体に関する。
コンパイラにおいては、ソースプログラム解析部でソースプログラムを解析し、中間言語に展開し、ベクトル化部でベクトル化し、ベクトルレジスタ割付け部でベクトルレジスタ割付けを行い、最適化部で展開された中間言語に対して最適化を行う。
【０００２】
ベクトル演算は、スカラー演算に比べて極めて高速である。このような、いわゆるベクトル計算機の能力を最大限に引き出すために、プログラムのうちベクトル演算により実行される部分の割合、すなわちベクトル化率を高めることが重要な要件である。このため、ベクトル化を不可とする要因は、できる限り少なくする。
【０００３】
さらに、実行時間を短縮するためには、ベクトル化部でベクトル化した後に、展開された中間言語に対して最適化を行うことが必要である。最適化により命令をより良く配列することで実行性能を高めることが要望されている。
【０００４】
【従来の技術】
従来の言語処理システムの処理例を図１２に示す。
図１２において、サブルーチンｓｕｂは、仮引数として、ａ，ｂ，ｃ，ｎを有し、整数型４バイトで次元数として２次元（ｎ×ｎ）の配列データａ，ｂ，ｃであることを宣言している。ａ（ｉ，ｊ）＝ｂ（ｉ，ｊ）＋ｃ（ｉ，ｊ）＊ｓで示す演算を、まずｉが１からｎまで行い、次に、ｊが１からｎまで行う。
【０００５】
図１３に示すような演算が行われる。なお、Ｓは定数でないスカラ変数を示す。ここで計算機の能力を最大限に引き出すために、ｉでベクトル化し、ｊが１からｎまで演算を行う。
ＶＬＯＡＤ  ＶＴ１，ｃ（１〜ｎ，ｊ）では、ｃの配列データをベクトルデータレジスタＶＴ１にローディングする。
【０００６】
図１４（Ａ）は、ベクトルデータレジスタＶＴ１を示し、ベクトルデータレジスタＶＴ１には、ｃ（１，ｊ），ｃ（２，ｊ），ｃ（３，ｊ）・・・ｃ（ｎ，ｊ）が格納される。
ＶＭＵＬＴ  ＶＴ２，ｓ，ＶＴ１では、ベクトルデータレジスタＶＴ１にｓを乗算してベクトルデータレジスタＶＴ２に格納する。
【０００７】
図１４（Ｂ）はベクトルデータレジスタＶＴ２を示し、ベクトルデータレジスタＶＴ２には、ｃ（１，ｊ）＊ｓ，ｃ（２，ｊ）＊ｓ，ｃ（３，ｊ）＊ｓ・・・ｃ（ｎ，ｊ）＊ｓが格納される。
ＶＬＯＡＤ  ＶＴ３，ｂ（１〜ｎ，ｊ）では、ｂの配列データをベクトルデータレジスタＶＴ３にローディングする。
【０００８】
図１４（Ｃ）はベクトルデータレジスタＶＴ３を示し、ベクトルデータレジスタＶＴ３には、ｂ（１，ｊ），ｂ（２，ｊ），ｂ（３，ｊ）・・・ｂ（ｎ，ｊ）が格納される。
ＶＡＤＤ  ＶＴ４，ＶＴ２，ＶＴ３では、ベクトルデータレジスタＶＴ２とベクトルデータレジスタＶＴ３を加算して、ベクトルデータレジスタＶＴ４に格納する。
【０００９】
図１５（Ａ）はベクトルデータレジスタＶＴ４を示し、ｃ（１，ｊ）＊ｓ＋ｂ（１，ｊ），ｃ（２，ｊ）＊ｓ＋ｂ（２，ｊ），ｃ（３，ｊ）＊ｓ＋ｂ（３，ｊ）・・・ｃ（ｎ，ｊ）＊ｓ＋ｂ（ｎ，ｊ）が格納される。
ＶＳＴＯＲＥ  ａ（１〜ｎ，ｊ），ＶＴ４では、ベクトルデータレジスタＶＴ４をａのデータ格納領域に格納する。
【００１０】
図１５（Ｂ）はａのデータ格納領域を示し、ａのデータ格納領域にはｃ（１，１）＊ｓ＋ｂ（１，１），ｃ（２，１）＊ｓ＋ｂ（２，１），ｃ（３，１）＊ｓ＋ｂ（３，１）・・・ｃ（ｎ，１）＊ｓ＋ｂ（ｎ，１）がそれぞれ格納され、最後の列の最後のデータ格納領域にはｃ（ｎ，ｎ）＊ｓ＋ｂ（ｎ，ｎ）が格納される。ｃの配列データおよびｂの配列データをローディングする命令ＶＬＯＡＤは、ループ内に生成されている。
【００１１】
【発明が解決しようとする課題】
しかしながら、このような従来の言語処理システムにあっては、次のような問題があった。
図１６（Ａ）は問題点を説明する説明図である。
図１６（Ａ）において、ＶＬ１，ＶＬ２，ＶＬ３はローディング命令、ＶＭ１，ＶＭ２，ＶＭ３は乗算命令、ＶＡ１，ＶＡ２，ＶＡ３は加算命令、ＶＳＴ１，ＶＳＴ２，ＶＳＴ３はストア命令をそれぞれ示し、ａはローディング命令ＶＬ１が立ち上がるまでの時間を、ｂはループスタート、ｃはループエンドを示す。
【００１２】
図１６（Ａ）では明示されていないが、ローディング命令を他の命令と並列して実行することができなかった。また、ベクトルデータのローディング命令の立ち上がりに時間ａを他の命令とオーバラップして実行することができなかった。さらにループスタートｂで示すようにローディングの立ち上がり時間が、そのままループの実行性能として計上されてしまう。その結果、図１６（Ａ）のｄに示すように、実行時間が長くなり、実行性能が悪化するという問題があった。
【００１３】
本発明は、このような従来の問題点に鑑みてなされたものであって、実行時間を短縮し、実行性能を向上させることができる言語処理システムおよびローディングプログラムを格納した媒体を提供することを目的とする。
【００１４】
【課題を解決するための手段】
この目的を達成するために、本発明は、図１のように構成する。
請求項１の発明は、ソースプログラムを解析した後にベクトル化しベクトルレジスタ割付けを行って展開された中間言語に最適化を行う言語処理システムにおいて、
対象ループの外側にプレローディングの対象と判別されたベクトルレジスタに所定のベクトルデータをプレローディングするローディング命令を生成するとともに、対象ループの後部に前記対象と判別されたベクトルレジスタに所定のベクトルデータをプレローディングするローディング命令を生成する手段２６Ａと、
前記プレローディングの対象となったベクトルレジスタをテーブルを用いてループの外で定義しループの中で使うように管理する手段２６Ｂと、を備える。
【００１５】
請求項２の発明は、ソースプログラムを解析した後にベクトル化しベクトルレジスタ割付けを行って展開された中間言語に最適化を行う言語処理システムにおいて、
ループを取り出し処理対象のループのときベクトルデータの処理を行うベクトル制御範囲を取り出す制御範囲取出手段２６Ｄと、
ベクトル制御範囲内で定義されるベクトルデータレジスタおよびマスクレジスタの番号をテーブルに登録処理する第１のテーブル登録処理手段２６Ｅと、
中間言語を取り出し処理対象の中間言語のときプレローディング対象となるベクトルデータレジスタおよびマスクレジスタを判別するプレローディング対象判別手段２６Ｆと、
ループの外側に１要素の配列データを対象とされたベクトルデータレジスタおよびマスクレジスタにプレローディングするローディング命令を生成する第１のプレローディング命令生成手段２６Ｇと、
ループの最後に次の要素の配列データから最後の配列データまでを前記ベクトルデータレジスタおよびマスクレジスタにプレローディングするローディング命令を生成する第２のプレローディング命令生成手段２６Ｈと、
プレローディングに使用した前記ベクトルデータレジスタおよびマスクレジスタの番号をテーブルに登録処理する第２のテーブル登録処理手段２６Ｊと、を備える。
【００１６】
請求項３の発明は、前記制御範囲取出手段２６Ｄでベクトル制御範囲を取り出す前に前記ベクトルデータレジスタおよびマスクレジスタの番号を登録処理するテーブルを初期化するテーブル初期化手段を有する。
請求項４の発明は、前記第１，第２のプレローディング命令生成手段２６Ｇ，２６Ｈでプレローディング命令を生成した後に、ループ内にあるオリジナルのローディング命令を削除するオリジナルローディング命令削除手段を有する。
【００１７】
請求項５の発明は、ソースプログラムを解析した後にベクトル化しベクトルレジスタ割付けを行って展開された中間言語に最適化を行うためのローディングプログラムを記録した媒体において、
対象ループの外側にプレローディングの対象と判別されたベクトルレジスタに所定のベクトルデータをプレローディングするローディング命令を生成するとともに、対象ループの後部に前記対象と判別されたベクトルレジスタに所定のベクトルデータをプレローディングするローディング命令を生成する手段２６Ａと、
前記プレローディングの対象となったベクトルレジスタをテーブルを用いてループの外で定義しループの中で使うように管理する手段２６Ｂと、を備える。
【００１８】
請求項６の発明は、ソースプログラムを解析した後にベクトル化しベクトルレジスタ割付けを行って展開された中間言語に最適化を行うためのローディングプログラムを記録した媒体において、
ループを取り出し処理対象のループのときベクトルデータの処理を行うベクトル制御範囲を取り出す制御範囲取出手段２６Ｄと、
ベクトル制御範囲内で定義されるベクトルデータレジスタおよびマスクレジスタの番号をテーブルに登録処理する第１のテーブル登録処理手段２６Ｅと、
中間言語を取り出し処理対象の中間言語のときプレローディング対象となるベクトルデータレジスタおよびマスクレジスタを判別するプレローディング対象判別手段２６Ｆと、
ループの外側に１要素の配列データを対象とされたベクトルデータレジスタおよびマスクレジスタにプレローディングするローディング命令を生成する第１のプレローディング命令生成手段２６Ｇと、
ループの最後に次の要素の配列データから最後の配列データまでを前記ベクトルデータレジスタおよびマスクレジスタにプレローディングするローディング命令を生成する第２のプレローディング命令生成手段２６Ｈと、
プレローディングに使用した前記ベクトルデータレジスタおよびマスクレジスタの番号をテーブルに登録処理する第２のテーブル登録処理手段２６Ｊと、を備える。
【００１９】
請求項７の発明は、ローディングプログラムを記録した媒体において、
前記制御範囲取出手段２６Ｄでベクトル制御範囲を取り出す前に前記ベクトルデータレジスタおよびマスクレジスタの番号を登録処理するテーブルを初期化するテーブル初期化手段を有する。
請求項８の発明は、ローディングプログラムを記録した媒体において、
前記第１，第２のプレローディング命令生成手段２６Ｇ，２６Ｈでプレローディング命令を生成した後に、ループ内にあるオリジナルのローディング命令を削除するオリジナルローディング命令削除手段を有する。
【００２０】
このような構成を備えた本発明によれば、ローディング命令を他の命令と並行して実行することができる。また、ベクトルデータのローディングの立ち上がり時間を、他の命令とオーバラップさせることができる。また、ループの外のローディング命令の実行時間はループ開始前に命令が終了しているためループの実行時間として計上されない。
【００２１】
さらに、ベクトルレジスタを増加して使用する必要がなく、ローディングの回数を減少することができる。その結果、実行時間を短縮することができ、実行性能を向上させることができる。
【００２２】
【発明の実施の形態】
図２は本発明の一実施形態を示すブロック図である。
図２において、１はＣＰＵであり、ＣＰＵ１には主記憶装置２、外部記憶装置３、ライブラリ装置４および端末５がそれぞれ接続されている。主記憶装置２内には第１のデータ格納領域６、第２のデータ格納領域７、第３のデータ格納領域８、変数格納領域９などがそれぞれ設けられている。
【００２３】
第１のデータ格納領域６には演算された結果としての例えばｎ×ｎ個の配列データａが格納される。第２のデータ格納領域７には例えばｎ×ｎ個の配列データｂが格納されている。第２のデータ格納領域７からは演算ごとに配列データｂが読み出される。第３のデータ格納領域８には、例えばｎ×ｎ個の配列データｃが格納されている。第３のデータ格納領域８からは演算ごとに配列データｃが読み出される。変数格納領域９には例えば定数ではないスカラ変数ｓが予め格納されている。このスカラ変数を用いて演算を行うごとにスカラ変数ｓを変数格納領域９から読み出される。
【００２４】
ＣＰＵ１内には、複数の例えば１〜２５６個のベクトルレジスタ１０、複数の例えば１〜２５６個のスカラレジスタ１１がそれぞれ設けられている。ベクトルレジスタ１０はベクトル演算のために設けられ、ベクトルデータレジスタとマスクレジスタよりなる。スカラレジスタ１１はスカラ演算のために設けられている。ライブラリ装置４内には、例えばソースプログラムより展開された中間言語が格納されることがある。
【００２５】
外部記憶装置３は、ディスク装置よりなり、言語処理システムとしてのコンパイラ１２、ソースプログラム１３、オブジェクトプログラム１４などがそれぞれ格納されている。
コンパイラ１２にはベクトルデータレジスタテーブル１５、マスクレジスタテーブル１６、ローディングプログラム１７が設けられている。ベクトルデータレジスタテーブル１５はベクトルデータレジスタの制御のために設けられ、マスクレジスタテーブル１６はマスクレジスタの制御のために設けられている。ローディングプログラム１７は展開された中間言語に対してプレローディングの最適化を行う。ソースプログラム１３はコンパイラ１２により翻訳処理がなされ、その後、オブジェクトプログラム１４が生成される。
【００２６】
図３はベクトルレジスタ１０の構成例を示す図である。
図３において、ベクトルレジスタ１０は、ベクトルデータレジスタ１８とマスクレジスタ１９とにより構成されている。マスクレジスタ１９は条件式、例えばｉｆ（Ｘ．ＮＥ．Ｏ）が成立するとオンとなって、演算が行われる。演算が行われるごとにその演算結果は、ベクトルデータレジスタ１８に格納される。
【００２７】
図４（Ａ）はベクトルデータレジスタテーブル１５の構成例を示す図、図４  （Ｂ）はマスクレジスタテーブル１６の構成例を示す図である。
ベクトルデータレジスタテーブル１５は、ベクトルデータレジスタ１８の例えば１〜２５６番に対応する区画１５Ａを有し、ベクトルデータレジスタ１８をオン、オフ制御する。ベクトルデータレジスタテーブル１５は初期化のときすべてオフになり、ベクトル制御範囲内で定義されるベクトルデータレジスタ１８の番号、また、プレローディングに使用したベクトルデータレジスタ１８の番号がオンとして登録処理される。
【００２８】
マスクレジスタテーブル１６は、マスクレジスタ１９の例えば１〜２５６番に対応する区画１６Ａを有し、マスクレジスタ１９をオン、オフ制御する。マスクレジスタテーブル１６は、初期化のときすべてオフとなり、ベクトル制御範囲で定義されるマスクレジスタ１９の番号、また、プレローディングに使用したマスクレジスタ１９の番号がオンとして登録処理される。
【００２９】
図５はコンパイラ１２の構成例を示す図である。
図５において、コンパイラ１２はソースプログラム解析部２０、最適化部２１、コード生成部２２、テーブル１５，１６により構成される。最適化部２１は、前記ローディングプログラム１７の内容を構成している。ソースプログラム解析部２０はソースプログラム１３の構文を解析して中間言語に展開する。最適化部２１は、ベクトル化部２３と最適化実施部２４により構成される。
【００３０】
コード生成部２２は最適化された中間言語からコードを生成し、アセンブラを出力する。その後、オブジェクトプログラム１４が生成される。最適化実施部２４は、ベクトルレジスタ割付け部２５とプレローディング実施部２６により構成される。ソースプログラム解析部２０で構文が解析され、中間言語に展開されて、ベクトル化部２３によりベクトル化され、ベクトルレジスタ割付け部２５によりベクトルレジスタ割付けが行われた後に中間言語に対してプレローディング実施部２６により最適化が行われる。
【００３１】
プレローディング実施部２６は、対象ループの外側にプレローディングの対象と判別されたベクトルレジスタ１０に所定のベクトルデータをプレローディングするローディング命令を生成するとともに、対象ループの後部に対象と判別されたベクトルレジスタ１０に所定のベクトルデータをプレローディングするローディング命令を生成する手段２６Ａと、プレローディングの対象となったベクトルレジスタ１０をベクトルデータレジスタテーブル１５、マスクレジスタテーブル１６を用いてループの外で定義しループの中で使うように管理する手段２６Ｂを備える。
【００３２】
前者の手段２６Ａは、ベクトルデータのプレローディングの最適化を行い、後者の手段２６Ｂは、ループの外でベクトルレジスタ１０を定義し、ループの中で使うことでベクトルレジスタ１０のグローバル化を行う。
図６はプレローディング実施部２６の構成例を示す図である。
図６において、プレローディング実施部２６は、テーブル初期化手段としてのテーブル初期化部２６Ｃ、制御範囲取出手段としての制御範囲取出部２６Ｄ、第１のテーブル登録処理手段としての第１のテーブル登録処理部２６Ｅ、プレローディング対象判別手段としてのプレローディング対象判別部２６Ｆ、第１のプレローディング命令生成手段としての第１のプレローディング命令生成部２６Ｇ、第２のプレローディング命令生成手段としての第２のプレローディング命令生成部２６Ｈ、オリジナルローディング命令削除手段としてのオリジナルローディング命令削除部２６Ｉおよび第２のテーブル登録処理手段としての第２のテーブル登録処理部２６Ｊにより構成される。
【００３３】
なお、ベクトルデータのプレローディング最適化を行う手段２６Ａは、制御範囲取出部２６Ｄ、第１のプレローディング命令生成部２６Ｇ、第２のプレローディング命令生成部２６Ｈおよびオリジナルローディング命令削除部２６Ｉにより構成され、ベクトルレジスタ１０のグローバル化を行う手段２６Ｂは、テーブル初期化部２６Ｃ、第１のテーブル登録処理部２６Ｅ、プレローディング対象判別部２６Ｆ、第２のテーブル登録処理部２６Ｊにより構成される。
【００３４】
テーブル初期化部２６Ａは、制御範囲取出部２６Ｄでベクトル制御範囲を取り出す前にベクトルデータレジスタ１８およびマスクレジスタ１９の番号を登録処理するベクトルデータレジスタテーブル１６、マスクレジスタテーブル１６を初期化する。
制御範囲取出部２６Ｄは、ループを取り出し、処理対象のループのときベクトルデータの処理を行うベクトル制御範囲を取り出す。第１のテーブル登録処理部２６Ｅは、ベクトル制御範囲内で定義されるベクトルデータレジスタ１８およびマスクレジスタ１９の番号をベクトルデータレジスタテーブル１５，マスクレジスタテーブル１６に登録処理する。
【００３５】
プレローディング対象判別部２６Ｆは、中間言語を取り出し、処理対象の中間言語のときプレローディング対象となるベクトルデータレジスタ１８およびマスクレジスタ１９を判別する。
第１のプレローディング命令生成部２６Ｇは、ループの外側に１要素の配列データを対象とされたベクトルデータレジスタ１８およびマスクレジスタ１９にプレローディングするローディング命令を生成する。
【００３６】
第２のプレローディング命令生成部２６Ｈは、ループの最後に次の要素の配列データから最後の配列データまでをベクトルデータレジスタ１８およびマスクレジスタ１９にプレローディングするローディング命令を生成する。
オリジナルローディング命令削除部２６Ｉは、第１，第２のプレローディング命令生成部２６Ｇ，２６Ｈでプレローディング命令を生成した後に、ループ内にあるオリジナルのローディング命令を削除する。
【００３７】
第２のテーブル登録処理部２６Ｊは、プレローディングに使用したベクトルデータレジスタ１８およびマスクレジスタ１９の番号をベクトルデータレジスタテーブル１５、マスクレジスタテーブル１６に登録処理する。
図７はプレローディング実施部２６による実施例を示す図である。
図７において、ループの外側にｃ（１〜ｎ，１）およびｂ（１〜ｎ，１）の配列データをローディングするローディング命令を生成する。ＶＬＯＡＤ  ＶＴ１，ｃ（１〜ｎ，１）では、ｃの１要素の配列データをベクトルデータレジスタＶＴ１にローディングするローディング命令を生成する。図８（Ａ）に示すように、ベクトルデータレジスタＶＴ１に第２のデータ格納領域７からｃの配列データを読み出して、ｃ（１，１），ｃ（２，１），ｃ（３，１）・・・ｃ（ｎ，１）のように順次ローディングする。
【００３８】
次に、ＶＬＯＡＤ  ＶＴ３，ｂ（１〜ｎ，１）では、ｂの１要素の配列データをベクトルデータレジスタＶＴ３にローディングするローディング命令を生成する。図８（Ｂ）に示すように、ベクトルデータレジスタＶＴ３に、第３のデータ格納領域８からｂの配列データを読み出して、ｂ（１，１），ｂ（２，１），ｂ（３，１）・・・ｂ（ｎ，１）のように順次ローディングする。
【００３９】
次に、ｄｏ  ｊ＝１，ｎでは、ｊが１からｎまで演算を行う。
次に、ＶＭＵＬＴ  ＶＴ２，ｓ，ＶＴ１では、ベクトルデータレジスタＶＴ１にスカラ変数ｓを乗算してベクトルデータレジスタＶＴ２に格納する乗算命令を生成する。図９（Ａ）に示すように、ベクトルデータレジスタＶＴ２には、  ｃ（１，ｊ）＊ｓ，ｃ（２，ｊ）＊ｓ，ｃ（３，ｊ）＊ｓ・・・ｃ（ｎ，ｊ）＊ｓが順次格納される。
【００４０】
次に、ＶＡＤＤ  ＶＴ４，ＶＴ２，ＶＴ３では、ベクトルデータレジスタＶＴ２とベクトルデータレジスタＶＴ３を加算してベクトルレジスタＶＴ４に格納する加算命令を生成する。図９（Ｂ）に示すように、ベクトルデータレジスタＶＴ４には、ｃ（１，ｊ）＊ｓ＋ｂ（１，ｊ），ｃ（２，ｊ）＊ｓ＋ｂ（２，ｊ），ｃ（３，ｊ）＊ｓ＋ｂ（３，ｊ）・・・ｃ（ｎ，ｊ）＊ｓ＋ｂ（ｎ，ｊ）が格納される。
【００４１】
次に、ＶＳＴＯＲＥ  ａ（１〜ｎ，ｊ），ＶＴ４では、ベクトルデータレジスタＶＴ４を演算して得られる配列データａとしてストアするストア命令を生成する。図９（Ｃ）に示すようにａ（１〜ｎ，ｊ）が格納される第１のデータ格納領域６には第１行に、  ｃ（１，１）＊ｓ＋ｂ（１，１），ｃ（２，１）＊ｓ＋ｂ（２，１），ｃ（３，１）＊ｓ＋ｂ（３，１）・・・ｃ（ｎ，１）＊ｓ＋ｂ（ｎ，１）が格納される。
【００４２】
また、第１のデータ格納領域６には、第２列目の配列データが格納され、その後に、第ｎ列目の最後にｃ（ｎ，ｎ）＊ｓ＋ｂ（ｎ，ｎ）が格納される。
次に、ループの最後にｃ（ｎ，ｊ＋１）およびｂ（ｎ，ｊ＋１）をベクトルデータレジスタＶＴ１、ベクトルデータレジスタＶＴ３にローディングするローディング命令を生成する。
【００４３】
ＶＬＯＡＤ  ＶＴ１，ｃ（１〜ｎ，ｊ＋１）では、ｃの次の要素から最後の要素までの配列データをベクトルデータレジスタＶＴ１にローディングするローディング命令を生成する。ベクトルデータレジスタＶＴ１は、図１０（Ａ）に示すように、ループの外にローディングされたｃ（１，１），ｃ（２，１），ｃ（３，１）・・・ｃ（ｎ，１）から図１０（Ｂ）に示すように、次の要素では、    ｃ（１，２），ｃ（２，２），（３，２）・・・ｃ（ｎ，２）となり、さらに、図１０（Ｃ）に示すように、最後の要素では、  ｃ（１，ｎ），ｃ（２，ｎ），ｃ（３，ｎ）・・・ｃ（ｎ，ｎ）のように配列データが格納される。
【００４４】
ＶＬＯＡＤ  ＶＴ３，ｂ（１〜ｎ，ｊ＋１）では、ｂの次の要素から最後の要素までの配列データをベクトルレジスタＶＴ３にローディングするローディング命令を生成する。ベクトルデータレジスタＶＴ３は、図１０（Ｄ）に示すように、ループの外にローディングされたｂ（１，１），ｂ（２，１）・・・ｂ（ｎ，１）から図１０（Ｅ）に示すように、次の要素ではｂ（１，２），ｂ（２，２），ｂ（３，２）・・・ｂ（ｎ，２）となり、さらに、図１０（Ｆ）に示すように、最後の要素ではｂ（１，ｎ），ｂ（２，ｎ），ｂ（３，ｎ）・・・ｂ（ｎ，ｎ）のように配列データが格納される。
【００４５】
このように、ループの外でベクトルデータレジスタＶＴ１，ＶＴ３を定義し、ループ中でベクトルデータレジスタＶＴ１，ＶＴ３を使用している。こうして、ベクトルデータレジスタＶＴ１，ＶＴ３のグローバル化を図っている。
図１１はプレローディング実施部２６の処理を説明するフローチャートである。
【００４６】
図１１において、まず、ステップＳ１でベクトルデータレジスタテーブル１５およびマスクレジスタテーブル１６を初期化する。すなわち、ソースプログラム２７をソースプログラム解析部２０で解析し、中間言語に展開し、ベクトル化部２３でベクトル化し、ベクトルレジスタ割付け部２４でベクトルレジスタ割付けを行った後に、図４（Ａ）に示すベクトルレジスタテーブル１５をすべてオフとし、また、図４（Ｂ）に示すマスクレジスタテーブル１６をすべてオフにする。
【００４７】
次に、ステップＳ２でループを取り出す。例えば、図１２において、ｄｏ〜ｅｎｄｄｏで示すループを取り出す。次に、ステップＳ３で取り出したループが処理対象ループであるか否かを判別する。処理対象ループであるときは、ステップＳ４に進み、処理対象のループでないときは、ステップＳ１４に進んで次のループがあるか判別する。図１２において、ｄｏ  ｊ＝１，ｎ〜ｅｎｄｄｏのループは、処理対象ループであると判別してステップＳ４に進む。
【００４８】
ステップＳ４でベクトル制御範囲取出部２６Ｄによりベクトル制御範囲を取り出し、ステップＳ５で処理対象のベクトル制御範囲であるか判別する。処理対象のベクトル制御範囲であるときは、ステップＳ６に進み、処理対象のベクトル制御範囲でないときは、ステップＳ１３に進み次のベクトル制御範囲があるか判別する。例えば、図１２において、ベクトル制御範囲としてＶＬＯＡＤ〜ＶＳＴＯＲＥを取り出し、処理対象ベクトルであると判別したときは、ステップＳ６に進む。
【００４９】
ステップＳ６ではベクトル制御範囲内で定義されるベクトルデータレジスタ１８、マスクレジスタ１９の番号をベクトルデータレジスタテーブル１５、マスクレジスタテーブル１６に登録処理する。
図４（Ａ）に示すように第１のテーブル登録処理部２６Ｅによりベクトル制御範囲内で定義されるベクトルデータレジスタ１８として、ベクトルデータレジスタＶＴ１〜ＶＴ４を登録するため、ベクトルデータレジスタテーブル１５の１〜４番の区画１５Ａをオンにする。なお、図１２の例では、マスクレジスタ１９は用いられないので、図４（Ｂ）に示すように、マスクレジスタテーブル１６はオンにならない。
【００５０】
次に、ステップＳ７でソースプログラム解析部２０で解析され、展開された中間言語を取り出し、ステップＳ８で処理対象の中間言語であるか否かを判別する。
処理対象の中間言語であるときは、ステップＳ９に進み、処理対象の中間言語でないときは、ステップＳ１３に進み、次の中間言語があるか否かを判別する。例えば、図１２に示すように、ＶＬＯＡＤ，ＶＭＵＬＴ，ＶＬＯＡＤ，ＶＡＤＤ，ＶＳＴＯＲＥを中間言語として取り出し、これらが処理対象の中間言語であると判別したときは、ステップＳ９に進む。
【００５１】
ステップＳ９では、プレローディング対象可能なベクトルデータレジスタ１８、マスクレジスタ１９を判別する。例えば、図１２において、プレローディング対象判別部２６Ｆは、ベクトルデータレジスタＶＴ１，ＶＴ３をプレローディング対象と判別し、マスクレジスタ１９は、使用されていないので、プレローディングの対象外であると判別する。プレローディング対象のベクトルデータレジスタ１８、マスクレジスタ１９がないときは、ステップＳ１２に進み、次の中間言語があるか否かを判別する。
【００５２】
ステップＳ１０ではプレローディングを実施する。ループの前にローディング命令を生成し、ループの後部にローディング命令を生成し、オリジナルローディング命令を削除する。
例えば、図７に示すように、第１のプレローディング命令生成部２６Ｇにより、ループの外側にｃの１要素の配列データをベクトルデータレジスタＶＴ１にローディングするローディング命令を生成し、ｂの１要素の配列データをベクトルデータレジスタＶＴ３にローディングするローディング命令を生成する。また第２のプレローディング命令生成部２６Ｈにより、ループの外部にｃの次の要素から最後の要素までの配列データをベクトルデータレジスタＶＴ１にローディングするローディング命令を生成し、ｂの次の要素から最後の要素までの配列データをベクトルデータレジスタＶＴ３にローディングするローディング命令を生成する。
【００５３】
また、オリジナルローディング命令削除部２６Ｉによりオリジナルローディング命令を削除する。例えば、図１２のＶＬＯＡＤ  ＶＴ１  ｃ（１〜ｎ，ｊ），ＶＬＯＡＤ  ＶＴ３  ｂ（１〜ｎ，ｊ）のようなオリジナルローディング命令を削除する。
次に、ステップＳ１１でプレローディングに使用したベクトルデータレジスタ１８、マスクレジスタ１９の番号をベクトルデータレジスタテーブル１５、マスクレジスタテーブル１６に登録処理する。
【００５４】
図７の場合、プレローディングにベクトルデータレジスタＶＴ１，ＶＴ３を使用し、マスクレジスタには使用していないので、第２のテーブル登録処理部２６Ｊにより、図４（Ａ）に示すベクトルデータレジスタテーブル１５の１番、３番を重ねてオンする。
図４（Ｂ）のマスクレジスタテーブル１６は、プレローディングにマスクレジスタ１６を使用していないので、オフのままである。
【００５５】
次に、ステップＳ１２で次の中間言語があるか否か判別し、あるときは、ステップＳ７に戻って次の中間言語を取り出し、ないときは、ステップＳ１３に進む。
ステップＳ１３では次のベクトル制御範囲があるか否かを判別し、あるときは、ステップＳ４に戻って、次のベクトル制御範囲を取り出し、ないときはステップＳ１４に進む。
【００５６】
ステップＳ１４では次のループがあるか否かを判別し、あるときはステップＳ２に戻って次のループを取り出して、ないときは終了とする。
なお、ベクトルデータレジスタテーブル１５、マスクレジスタテーブル１６を初期化するステップＳ１、ベクトル制御範囲内で定義されるベクトルデータレジスタ１８、マスクレジスタ１９の番号をベクトルデータレジスタテーブル１５、マスクレジスタテーブル１６に登録処理するステップＳ６、プレローディング対象可能なベクトルデータレジスタ１８、マスクレジスタ１９を判別するステップＳ８およびプレローディングに使用したベクトルデータレジスタ１８、マスクレジスタ１９の番号をベクトルデータレジスタテーブル１５、マスクレジスタテーブル１６に登録処理するステップＳ１１は、ベクトルレジスタ１８のグローバル化を行うためのステップである。
【００５７】
これらのステップＳ１，６，９，１１は、ベクトルデータのプレローディング最適化の一部分として動作する。
次に、図１６（Ｂ）は従来例（Ａ）と対比して示した作用効果の説明図である。
図１６（Ｂ）において、この例では明示していないが、ローディング命令と他の命令を並行して実行することができる。また、図１６（Ｂ）のａは２回目のローディング命令（ＶＬ２）が立ち上がる時間を示し、この立ち上がり時間ａにおいてｇに示すように、このローディング命令（ＶＬ２）と他の命令、例えば乗算命令（ＶＭ１）、加算命令（ＶＡ１）、ストア命令（ＶＳＴ１）をオーバラップさせることができる。
【００５８】
また、ｅに示すように、ループスタートｂ時にはローディング命令（ＶＬ１）は終了しているため、ループ時間として計上されない。さらにループの外でベクトルレジスタ１０を定義し、ループの中で使うため、ベクトルレジスタ１０の数を増加する必要がなく、ベクトルデータをローディングする回数も少なくなるので、実行時間を短縮することができる。したがって、実行時間ｄをｆに示す時間だけ短縮することができる。その結果、実行性能を向上させることができる。
【００５９】
【発明の効果】
以上説明してきたように、本発明によれば、ループの前にローディング命令を生成するとともにループの後部にローディング命令を生成してプレローディング最適化を行い、ベクトルレジスタをテーブルを用いて管理し、ベクトルレジスタのグローバル化を行うため、実行時間を短縮することができ、実行性能を向上させることができる。
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】本発明の一実施形態を示すブロック図
【図３】ベクトルレジスタの構成例を示す図
【図４】ベクトルデータレジスタテーブルとマスクレジスタテーブルの構成例を示す図
【図５】コンパイラの構成例を示す図
【図６】プレローディング実施部の構成例を示す図
【図７】プレローディング実施部の処理例を示す図
【図８】ベクトルデータレジスタＶＴ１，３を示す図
【図９】ベクトルデータレジスタＶＴ２，４および第１のデータ格納領域を示す図
【図１０】ベクトルデータレジスタＶＴ１，３の変化を示す図
【図１１】プレローディング実施部の処理を説明するフローチャート
【図１２】従来のコンパイラの処理を示す図
【図１３】従来のスカラ展開を示す図
【図１４】従来のベクトルデータレジスタＶＴ１，２，３を示す図
【図１５】従来のベクトルデータレジスタＶＴ４および得られる配列データを示す図
【図１６】ｊが３回転する場合の従来例と本発明の作用効果を対比して説明する説明図
【符号の説明】
１：ＣＰＵ
２：主記憶装置
３：外部記憶装置
４：ライブラリ装置
５：端末
６：第１のデータ格納領域
７：第２のデータ格納領域
８：第３のデータ格納領域
９：変数格納領域
１０：ベクトルレジスタ
１１：スカラレジスタ
１２：コンパイラ
１３：ソースプログラム
１４：オブジェクトプログラム
１５：ベクトルデータレジスタテーブル
１５Ａ，１６Ａ：区画
１６：マスクレジスタテーブル
１７：ローディングプログラム
１８：ベクトルデータレジスタ
１９：マスクレジスタ
２０：ソースプログラム解析部
２１：最適化部
２２：コード生成部
２３：ベクトル化部
２４：最適化実施部
２５：ベクトルレジスタ割付け部
２６：プレローディング実施部
２６Ａ：プレローディングの最適化を行う手段
２６Ｂ：ベクトルレジスタのグローバル化を行う手段
２６Ｃ：テーブル初期化部（テーブル初期化手段）
２６Ｄ：制御範囲取出部（制御範囲取出手段）
２６Ｅ：第１のテーブル登録処理部（第１のテーブル登録処理手段）
２６Ｆ：プレローディング対象判別部（プレローディング対象判別手段）
２６Ｇ：第１のプレローディング命令生成部（第１のプレローディング命令生成手段）
２６Ｈ：第２のプレローディング命令生成部（第２のプレローディング命令生成手段）
２６Ｉ：オリジナルローディング命令削除部（オリジナルローディング命令削除手段）
２６Ｊ：第２のテーブル登録処理部（第２のテーブル登録処理手段）
【図１】
0003802980.tif 000002
【図２】
0003802980.tif 000003
【図３】
0003802980.tif 000004
【図４】
0003802980.tif 000005
【図５】
0003802980.tif 000006
【図６】
0003802980.tif 000007
【図７】
0003802980.tif 000008
【図８】
0003802980.tif 000009
【図９】
0003802980.tif 000010
【図１０】
0003802980.tif 000011
【図１１】
0003802980.tif 000012
【図１２】
0003802980.tif 000013
【図１３】
0003802980.tif 000014
【図１４】
0003802980.tif 000015
【図１５】
0003802980.tif 000016
【図１６】
0003802980.tif 000017