(57)【特許請求の範囲】
【請求項１】
高級言語で記述されたソースプログラムから、ベクトル命令を含んだ中間言語を生成する中間言語生成手段と、
該中間言語生成手段により生成された中間言語に含まれる各ベクトル命令に対して、該ベクトル命令の実行条件に応じてオブジェクトプログラムの実行時に設定される制御フラグの値を参照し、該制御フラグの値に応じて当該ベクトル命令を実行しないように無効化する無効化命令を設定する無効化命令設定手段と、
該無効化命令設定手段により無効化命令が設定された中間言語から、オブジェクトプログラムを生成するオブジェクトプログラム生成手段と、
を含んで構成されたことを特徴とするコンパイル処理装置。
【請求項２】
前記無効化命令設定手段は、前記無効化命令の実行時間が、前記中間言語生成手段により生成された中間言語に含まれるベクトル命令の実行時間より短いときに、無効化命令を設定する構成である請求項１記載のコンパイル処理装置。
【請求項３】
前記無効化命令設定手段は、
条件分岐式における各節の必要性に応じて、無効化命令を設定する第１の設定手段と、
ベクトル命令の演算対象となる配列の領域外へのアクセスを防止するように、無効化命令を設定する第２の設定手段と、
飛越し命令を削除するように、無効化命令を設定する第３の設定手段と、
の少なくとも１つを含んだ構成である請求項１又は請求項２に記載のコンパイル処理装置。
【請求項４】
前記無効化命令は、計算機のハードウエア命令である請求項１〜請求項３のいずれか１つに記載のコンパイル処理装置。
【請求項５】
前記中間言語生成手段は、ベクトルマスク方式，組込み関数インライン展開方式，ベクトルプレローディング方式，排他関係ブロック方式のうち、少なくとも１つの方式によりベクトル命令を含んだ中間言語を生成する構成である請求項１〜請求項４のいずれか１つに記載のコンパイル処理装置。
【請求項６】
高級言語で記述されたソースプログラムから、ベクトル命令を含んだ中間言語を生成する中間言語生成工程と、
該中間言語生成工程により生成された中間言語に含まれる各ベクトル命令に対して、該ベクトル命令の実行条件に応じてオブジェクトプログラムの実行時に設定される制御フラグの値を参照し、該制御フラグの値に応じて当該ベクトル命令を実行しないように無効化する無効化命令を設定する無効化命令設定工程と、
該無効化命令設定工程により無効化命令が設定された中間言語から、オブジェクトプログラムを生成するオブジェクトプログラム生成工程と、
をコンピュータが実行することを特徴とするコンパイル処理方法。
【請求項７】
高級言語で記述されたソースプログラムから、ベクトル命令を含んだ中間言語を生成する中間言語生成機能と、
該中間言語生成機能により生成された中間言語に含まれる各ベクトル命令に対して、該ベクトル命令の実行条件に応じてオブジェクトプログラムの実行時に設定される制御フラグの値を参照し、該制御フラグの値に応じて当該ベクトル命令を実行しないように無効化する無効化命令を設定する無効化命令設定機能と、
該無効化命令設定機能により無効化命令が設定された中間言語から、オブジェクトプログラムを生成するオブジェクトプログラム生成機能と、
をコンピュータに実現させるためのコンパイル処理プログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、高級言語により記述されたソースプログラムから、ベクトル処理方式の計算機用のオブジェクトプログラムを生成するコンパイル処理技術に関し、特に、プログラムの実行性能を向上する最適化技術に関する。
【０００２】
【従来の技術】
従来から、スーパーコンピュータ等では、行列等の演算を高速で行うために、オペランドが単一の要素（スカラー）だけではなく、データの配列（ベクトル）である命令を実行することができるベクトル処理方式が採用されている。そして、ベクトル処理方式の計算機においては、如何に少ないベクトル命令により演算を行うかが、ソフトウエアから見た高速化の重要な要件の１つとなっている。
【０００３】
このため、従来では、ソースプログラムからオブジェクトプログラムを生成する際、条件分岐処理やループ処理等を高速に実行することを目的として、ベクトルマスク方式等の最適化技術が種々提案されてきた。
【０００４】
【発明が解決しようとする課題】
しかしながら、従来のベクトルマスク方式では、条件分岐処理に代わって、マスクレジスタにより配列要素の選択的な演算を行う構成であるため、処理不要であるベクトル命令も実行されていた。このため、処理に時間がかかり、プログラムの実行性能が低下してしまうおそれがあった。
【０００５】
そこで、本発明は以上のような従来の問題点に鑑み、ベクトル命令を無効化するハードウエア命令を備えることにより、処理不要であるベクトル命令の実行を防止して、プログラムの実行性能を向上する最適化技術を提供することを目的とする。
【０００６】
【課題を解決するための手段】
このため、請求項１記載の発明は、高級言語で記述されたソースプログラムから、ベクトル命令を含んだ中間言語を生成する中間言語生成手段と、該中間言語生成手段により生成された中間言語に含まれる各ベクトル命令に対して、該ベクトル命令の実行条件に応じてオブジェクトプログラムの実行時に設定される制御フラグの値を参照し、該制御フラグの値に応じて当該ベクトル命令を実行しないように無効化する無効化命令を設定する無効化命令設定手段と、該無効化命令設定手段により無効化命令が設定された中間言語から、オブジェクトプログラムを生成するオブジェクトプログラム生成手段と、を含んでコンパイル処理装置を構成したことを特徴とする。
【０００７】
ここで、「高級言語」とは、ＦＯＲＴＲＡＮ，ＣＯＢＯＬ，ＰＬ／Ｉ，ＡＬＧＯＬ，ＢＡＳＩＣ等の自然言語や数式により近い様式で、プログラムが記述できるように作られたプログラム言語をいう。また、「ベクトル命令」とは、行列等の演算を高速で行うために、オペランドがデータの配列（ベクトル）である命令をいう。さらに、「ベクトル命令の実行条件」とは、ベクトル命令が実行される条件をいい、例えば、条件分岐式における各節の実行の有無が該当する。
【０００８】
かかる構成によれば、ソースプログラムから生成された中間言語に含まれる各ベクトル命令に対して、ベクトル命令の実行条件に応じて、ベクトル命令を無効化する無効化命令が設定される。そして、無効化命令が設定された中間言語から、オブジェクトプログラムが生成される。従って、ベクトル命令の実行条件を適切に規定することで、例えば、不必要なベクトル命令の実行が防止され、実行速度の向上によるプログラムの実行性能が向上する。
【０００９】
請求項２記載の発明は、前記無効化命令設定手段は、前記無効化命令の実行時間が、前記中間言語生成手段により生成された中間言語に含まれるベクトル命令の実行時間より短いときに、無効化命令を設定することを特徴とする。
【００１０】
かかる構成によれば、ベクトル命令を無効化する無効化命令は、無効化命令を設定することにより実行時間が短くなる場合に設定されるため、プログラムの実行時間が長くなることが防止される。
【００１１】
請求項３記載の発明は、前記無効化命令設定手段は、条件分岐式における各節の必要性に応じて、無効化命令を設定する第１の設定手段と、ベクトル命令の演算対象となる配列の領域外へのアクセスを防止するように、無効化命令を設定する第２の設定手段と、飛越し命令を削除するように、無効化命令を設定する第３の設定手段と、の少なくとも１つを含んだ構成であることを特徴とする。
【００１２】
かかる構成によれば、条件分岐式の各節のうち実行が不必要である節に対して無効化命令を設定すれば、実行速度が向上する。また、配列の領域外へのアクセスを防止するように無効化命令を設定すれば、プログラムの異常終了が防止される。さらに、飛越し命令を削除するように無効化命令を設定すれば、例えば、パイプライン処理における処理効率が向上する。
【００１３】
請求項４記載の発明は、前記無効化命令は、計算機のハードウエア命令であることを特徴とする。
かかる構成によれば、無効化命令を実行しても、ソフトウエア的に処理する必要がなく、無効化命令の実行による実行速度の低下が防止される。
【００１４】
請求項５記載の発明は、前記中間言語生成手段は、ベクトルマスク方式，組込み関数インライン展開方式，ベクトルプレローディング方式，排他関係ブロック方式のうち、少なくとも１つの方式によりベクトル命令を含んだ中間言語を生成することを特徴とする。
【００１５】
かかる構成によれば、種々の方式によりベクトル命令を含んだ中間言語が生成されるため、多くのベクトル命令に対して無効化命令が設定されることとなり、さらなる実行速度の向上、異常終了の防止及び処理効率の向上が図られる。
【００１６】
請求項６記載の発明は、高級言語で記述されたソースプログラムから、ベクトル命令を含んだ中間言語を生成する中間言語生成工程と、該中間言語生成工程により生成された中間言語に含まれる各ベクトル命令に対して、該ベクトル命令の実行条件に応じてオブジェクトプログラムの実行時に設定される制御フラグの値を参照し、該制御フラグの値に応じて当該ベクトル命令を実行しないように無効化する無効化命令を設定する無効化命令設定工程と、該無効化命令設定工程により無効化命令が設定された中間言語から、オブジェクトプログラムを生成するオブジェクトプログラム生成工程と、を含んでコンパイル処理方法を構成したことを特徴とする。
【００１７】
かかる構成によれば、ソースプログラムから生成された中間言語に含まれる各ベクトル命令に対して、ベクトル命令の実行条件に応じて、ベクトル命令を無効化する無効化命令が設定される。そして、無効化命令が設定された中間言語から、オブジェクトプログラムが生成される。従って、ベクトル命令の実行条件を適切に規定することで、例えば、不必要なベクトル命令の実行が防止され、実行速度の向上によるプログラムの実行性能が向上する。
【００１８】
請求項７記載の発明は、高級言語で記述されたソースプログラムから、ベクトル命令を含んだ中間言語を生成する中間言語生成機能と、該中間言語生成機能により生成された中間言語に含まれる各ベクトル命令に対して、該ベクトル命令の実行条件に応じてオブジェクトプログラムの実行時に設定される制御フラグの値を参照し、該制御フラグの値に応じて当該ベクトル命令を実行しないように無効化する無効化命令を設定する無効化命令設定機能と、該無効化命令設定機能により無効化命令が設定された中間言語から、オブジェクトプログラムを生成するオブジェクトプログラム生成機能と、を実現するためのコンパイル処理プログラムを記録媒体に記録したことを特徴とする。
【００１９】
ここで、「記録媒体」とは、電子情報を確実に記録でき、かつ、必要に応じて確実に取り出し可能なものをいい、例えば、磁気テープ、磁気ディスク、磁気ドラム、ＩＣカード、ＣＤ−ＲＯＭ等の可搬記録媒体が該当する。
【００２０】
かかる構成によれば、中間言語生成機能と、無効化命令設定機能と、オブジェクトプログラム生成機能と、を実現するためのコンパイル処理プログラムが記録媒体に記録される。従って、かかる記録媒体があれば、一般的な計算機を利用して、本発明に係るコンパイル処理装置を容易に構築することが可能となる。
【００２１】
【発明の実施の形態】
以下、添付された図面を参照して本発明を詳述する。
図１は、本発明に係るコンパイル処理装置の全体構成を示す。コンパイル処理装置は、少なくとも、中央処理装置（ＣＰＵ）とメモリとを備えた計算機上に構築され、メモリにロードされたプログラムに従って動作する。
【００２２】
コンパイル処理装置１０は、ソースプログラム解析部２０と、ベクトル命令生成部３０と、ベクトル命令最適化部４０と、オブジェクト生成部５０と、を含んで構成される。
【００２３】
ソースプログラム解析部２０は、ハードディスク装置等の外部記憶装置から、ＦＯＲＴＲＡＮ等の高級言語で記述されたソースプログラムファイル６０を読み込み、これを解析して中間言語と呼ばれる内部コードに展開する。ここで、ソースプログラム解析部２０により展開された中間言語は、ベクトル命令（詳細は後述する）を含んでいないスカラ命令により構成される。
【００２４】
ベクトル命令生成部３０は、ベクトルマスク生成部３２と、組込み関数インライン展開部３４と、ベクトルプレローディング生成部３６と、排他関係ブロック生成部３８と、を含んで構成される。そして、ベクトル命令生成部３０は、展開された中間言語を解析して、配列に対する演算処理を一括して行なうベクトル命令を生成し、その結果を中間言語に設定する。
【００２５】
なお、ソースプログラム解析部２０及びベクトル命令生成部３０により、中間言語生成手段，中間言語生成工程及び中間言語生成機能が構成される。
ベクトルマスク生成部３２は、図２に示すように、ソースプログラム中にベクトル化対象となる条件分岐式（ＩＦ文）があり、かつ、ベクトルマスク方式が有効であるときに、図３に示すようなベクトル命令を生成する。なお、ソースプログラムは、ＦＯＲＴＲＡＮで記述され、ソースプログラム中の「・・・・・・・・・・」は、何らかの命令が記述されているものとする（以下同様）。
【００２６】
組込み関数インライン展開部３４は、図４に示すように、ソースプログラム中にベクトル化対象となる組込み関数（ライブラリ関数「dexp」）があり、かつ、インライン展開が有効であるときに、組込み関数に代えて、図５に示すようなベクトル命令を生成する。
【００２７】
ベクトルプレローディング生成部３６は、図６に示すように、ソースプログラム中にベクトル化対象となるループ処理（ＤＯループ）があり、かつ、ベクトルプレローディングが有効であるときに、図７に示すようなベクトル命令を生成する。
【００２８】
排他関係ブロック生成部３８は、図８に示すように、ソースプログラム中にベクトル化対象となるループ処理（ＤＯループ）があり、かつ、そのループ処理内に排他関係にあるブロック（ＩＦ文におけるＴＨＥＮ節とＥＬＳＥ節）があるときに、図９に示すようなベクトル命令を生成する。
【００２９】
なお、以上説明したベクトルマスク生成部３２，組込み関数インライン展開部３４，ベクトルプレローディング生成部３６及び排他関係ブロック生成部３８は、従来技術と同等なベクトル命令を生成する。このようにして生成されたベクトル命令は、「発明が解決しようとする課題」で述べたように、次のような問題点を有する。
【００３０】
即ち、図３に示すベクトルマスク方式、及び、図５に示す組込み関数インライン展開方式では、マスクレジスタmr1,mr2 に基づいて、配列要素に対する選択的な演算を行なっているため、マスクレジスタmr1,mr2 の全要素が同一である場合には、不必要なベクトル命令も実行されてしまうこととなる。このため、処理速度が低下し、プログラムの実行性能に影響するおそれがある。また、図７に示すベクトルプレローディング方式では、配列の領域外をアクセスしてしまい、プログラムが異常終了してしまうおそれがある。このため、信頼性が低下し、プログラムの実行性能に影響するおそれがある。さらに、図９に示す排他関係ブロック方式では、繰返し処理中に飛越し命令が実行されるため、例えば、パイプライン処理における処理効率が低下し、プログラムの実行性能に影響するおそれがある。
【００３１】
ベクトル命令最適化部４０は、無効化情報設定部４２と、無効化情報解析部４４と、無効化命令設定部４６と、を含んで構成される。そして、ベクトル命令最適化部４０は、ベクトル命令を含んだ中間言語を解析して、プログラムの実行性能を向上する最適化を行い、その結果を中間言語に設定する。
【００３２】
なお、ベクトル命令最適化部４０により、無効化命令設定手段，無効化命令設定工程及び無効化命令設定機能が構成される。
無効化情報設定部４２は、簡単な条件（詳細は後述する）に基づいて中間言語を解析して、無効化できるベクトル命令の候補を抽出し、その情報（無効化情報）を中間言語に設定する。なお、無効化情報設定部４２は、ベクトルマスク方式，組込み関数インライン展開方式，ベクトルプレローディング方式及び排他関係ブロック方式ごとに、図１０〜図１３に示すフローチャートに従って、無効化情報の設定を行う。
【００３３】
図１０は、ベクトルマスク方式における無効化情報の設定処理を示す。
ステップ１（図では「Ｓ１」と略記する。以下同様）では、中間言語を解析して、ループ処理部分を取り出す。
【００３４】
ステップ２では、取り出されたループ処理部分がベクトルマスク方式のＩＦ文に相当するものか否かを判定する。この判定は、ＩＦ文がどういう方法でベクトル化されたかを調べることにより行われ、具体的には、ベクトル命令生成時に中間言語に設定された情報に基づいて行われる。そして、ベクトルマスク方式のＩＦ文であればステップ３へと進み（Ｙｅｓ）、ベクトルマスク方式のＩＦ文でなければステップ５へと進む（Ｎｏ）。
【００３５】
ステップ３では、簡単な条件に基づいて、ベクトル命令を無効化することが有効であるか否かを判定する。ここで、簡単な条件とは、例えば、ＩＦ文におけるＴＨＥＮ節とＥＬＳＥ節との走行確率，条件式の内容等をいう。そして、無効化が有効であればステップ４へと進み（Ｙｅｓ）、無効化が有効でなければステップ５へと進む（Ｎｏ）。
【００３６】
ステップ４では、無効化情報を中間言語に設定する。
ステップ５では、無効化情報の設定処理が終了したか否か、即ち、中間言語の最後まで解析が行われたか否かを判定する。そして、設定処理が終了したと判定されれば処理を終了し（Ｙｅｓ）、設定処理が終了していないと判定されればステップ１へと戻る（Ｎｏ）。
【００３７】
図１１は、組込み関数インライン展開方式における無効化情報の設定処理を示す。
ステップ１１では、中間言語を解析して、ループ処理部分を取り出す。
【００３８】
ステップ１２では、取り出されたループ処理部分がベクトル化された組込み関数であるか否かを判定する。この判定は、ベクトルマスク方式における判定のように、ベクトル命令生成時に中間言語に設定された情報に基づいて行われる。そして、組込み関数であればステップ１３へと進み（Ｙｅｓ）、組込み関数でなければステップ１５へと進む（Ｎｏ）。
【００３９】
ステップ１３では、簡単な条件に基づいて、ベクトル命令を無効化することが有効であるか否かを判定する。ここで、簡単な条件とは、例えば、無効化が有効である関数か否か等をいう。そして、無効化が有効であればステップ１４へと進み（Ｙｅｓ）、無効化が有効でなければステップ１５へと進む（Ｎｏ）。
【００４０】
ステップ１４では、無効化情報を中間言語に設定する。
ステップ１５では、無効化情報の設定処理が終了したか否か、即ち、中間言語の最後まで解析が行われたか否かを判定する。そして、設定処理が終了したと判定されれば処理を終了し（Ｙｅｓ）、設定処理が終了していないと判定されればステップ１１へと戻る（Ｎｏ）。
【００４１】
なお、図１０及び図１１の処理が、第１の設定手段の一部に相当する。
図１２は、ベクトルプレローディング方式における無効化情報の設定処理を示す。
【００４２】
ステップ２１では、中間言語を解析して、ループ処理部分を取り出す。
ステップ２２では、取り出されたループ処理部分がプレローディングされたループであるか否かを判定する。この判定は、ベクトルマスク方式における判定のように、ベクトル命令生成時に中間言語に設定された情報に基づいて行われる。そして、プレローディングされたループであればステップ２３へと進み（Ｙｅｓ）、プレローディングされたループでなければステップ２５へと進む（Ｎｏ）。
【００４３】
ステップ２３では、簡単な条件に基づいて、ベクトル命令を無効化することが有効であるか否かを判定する。ここで、簡単な条件とは、例えば、ループの繰返し回数等をいう。そして、無効化が有効であればステップ２４へと進み（Ｙｅｓ）、無効化が有効でなければステップ２５へと進む（Ｎｏ）。
【００４４】
ステップ２４では、無効化情報を中間言語に設定する。
ステップ２５では、無効化情報の設定処理が終了したか否か、即ち、中間言語の最後まで解析が行われたか否かを判定する。そして、設定処理が終了したと判定されれば処理を終了し（Ｙｅｓ）、設定処理が終了していないと判定されればステップ２１へと戻る（Ｎｏ）。
【００４５】
なお、図１２の処理が、第２の設定手段の一部に相当する。
図１３は、排他関係ブロック方式における無効化情報の設定処理を示す。
ステップ３１では、中間言語を解析して、ループ処理部分を取り出す。
【００４６】
ステップ３２では、取り出されたループ処理部分が排他関係にあるブロックのものであるか否かを判定する。この判定は、ベクトルマスク方式における判定のように、ベクトル命令生成時に中間言語に設定された情報に基づいて行われる。そして、排他関係にあるブロックであればステップ３３へと進み（Ｙｅｓ）、排他関係にあるブロックでなければステップ３５へと進む（Ｎｏ）。
【００４７】
ステップ３３では、簡単な条件に基づいて、ベクトル命令を無効化することが有効であるか否かを判定する。ここで、簡単な条件とは、例えば、ループの繰返し回数等をいう。そして、無効化が有効であればステップ３４へと進み（Ｙｅｓ）、無効化が有効でなければステップ３５へと進む（Ｎｏ）。
【００４８】
ステップ３４では、無効化情報を中間言語に設定する。
ステップ３５では、無効化情報の設定処理が終了したか否か、即ち、中間言語の最後まで解析が行われたか否かを判定する。そして、設定処理が終了したと判定されれば処理を終了し（Ｙｅｓ）、設定処理が終了していないと判定されればステップ３１へと戻る（Ｎｏ）。
【００４９】
なお、図１３の処理が、第３の設定手段の一部に相当する。
このような図１０〜図１３の処理によれば、ベクトル命令を無効化することが有効であるか否かの簡単な判定が行われ、無効化が有効であると判定されたベクトル命令を示す無効化情報が中間言語に設定される。即ち、中間言語から無効化を行うベクトル命令の候補が抽出されることとなる。
【００５０】
無効化情報解析部４４は、無効化情報が設定された中間言語を解析して、実際にベクトル命令を無効化するか否かを決定する。
無効化命令設定部４６は、無効化情報解析部４４により無効化すると決定されたベクトル命令に対して、中間言語にベクトル命令を無効化するハードウエア命令を設定する。
【００５１】
ここで、ベクトル命令を無効とするハードウエア命令として、例えば、次のような２つのハードウエア命令を実装する。
（Ｉ）ベクトル制御レジスタの制御フラグ設定命令
vsetcf    GR,cf ＿pos
GR    ：汎用レジスタ（スカラレジスタ）
cf＿pos ：ベクトル制御レジスタの制御フラグ位置
機能  ：GRが０であれば、位置cf＿pos のフラグを０にする
GRが０以外であれば、位置cf＿pos のフラグを１にする
（II）ベクトル命令の無効化命令
vnlfy     cf＿pos
cf＿pos ：ベクトル制御レジスタの制御フラグ位置
機能  ：位置cf＿pos のフラグが０であれば、無効化しない
位置cf＿pos のフラグが１であれば、無効化する
そして、このようなハードウエア命令を用いて、次のようにしてベクトル命令を無効化する。
【００５２】
load    GR,1                    ・・・・(1)
vsetcf  GR,2                    ・・・・(2)
vadd    vr1,vr2,vr3 & vnlfy 2   ・・・・(3)
即ち、命令(1) により、汎用レジスタGRが１に設定される。命令(2) により、ベクトル制御レジスタの位置２（cf＿pos ）のフラグが１に設定される。そして、命令(3) のvnlfy 命令により、ベクトル制御レジスタの位置２のフラグが参照され、このフラグが１であることより、vadd命令が無効化される。
【００５３】
なお、本実施形態では、ベクトル命令を無効化するハードウエア命令として、「vsetcf命令」及び「vnlfy 命令」を使用したが、ベクトル命令を無効化できる命令であれば如何なる命令であってもよい。但し、プログラムの実行性能を阻害しないためにも、できるだけ少ない命令でベクトル命令を無効化できることが望ましい。
【００５４】
図１４は、無効化情報解析部４４及び無効化命令設定部４６における処理を示す。なお、図１４の処理が、第１の設定手段，第２の設定手段及び第３の設定手段に相当する。
【００５５】
ステップ４１では、中間言語から無効化情報を取り出す。
ステップ４２では、ベクトル化された中間言語数，配列要素数，ベクトル長等を考慮して、ベクトル命令を無効化するか否かを決定する。そして、ベクトル命令を無効化するのであればステップ４３へと進み（Ｙｅｓ）、ベクトル命令を無効化しないのであればステップ４４へと進む（Ｎｏ）。
【００５６】
ステップ４３では、ベクトル命令を無効化する命令を中間言語に設定する。
ステップ４４では、全ての無効化情報に対して、ベクトル命令を無効化するか否か、即ち、中間言語の最後まで処理が行われたか否かが判定される。そして、全ての無効情報に対する判定が終了したならば処理を終了し（Ｙｅｓ）、無効情報に対する判定が終了していなければステップ４１へと戻る（Ｎｏ）。
【００５７】
このようにすれば、無効情報が設定された中間言語に基づいて、実際にベクトル命令を無効化するか否かが決定される。この決定は、ベクトル化された命令とそれを無効化する命令との実行速度の差異を考慮して行われる。従って、ベクトル命令を無効化する命令を設定することにより、実行速度が低下することを防止でき、プログラムの実行性能を確実に向上することができる。
【００５８】
図１５〜図１８は、夫々、ベクトルマスク生成方式，組込み関数インライン展開方式，ベクトルプレローディング方式及び排他関係ブロック方式により設定される無効化命令を示す。
【００５９】
代表例として、図１５のベクトルマスク生成方式により設定された命令について、簡単に説明する。
命令(1) では、配列ａがベクトルレジスタvr0 にロードされる。
【００６０】
命令(2) では、配列ｂがベクトルレジスタvr1 にロードされる。
命令(3) では、汎用レジスタgr20に数値０が代入される。
命令(4) では、ベクトルレジスタvr0 （配列ａ）の各要素の値が汎用レジスタgr20の内容（数値０）より大きいか否かが比較され、その真偽がマスクレジスタmr1 に設定される。
【００６１】
命令(5) では、マスクレジスタmr1 の内容が反転され、その結果がマスクレジスタmr2 に設定される。
命令(6) では、マスクレジスタmr1 の真である要素数が計数され、その結果が汎用レジスタgr28に設定される。
【００６２】
命令(7) では、汎用レジスタgr28の内容が０であるか否かが比較され、その真偽が汎用レジスタgr19に設定される。
命令(8) では、汎用レジスタgr19の内容に基づいて、ベクトル制御レジスタの位置１のフラグが設定される。
【００６３】
命令(9) では、vnlfy 命令により、ベクトル制御レジスタの位置１のフラグが参照され、フラグが１であれば、vstore命令が無効化される。
命令(10)では、命令(8) と同様に、ベクトル制御レジスタの位置１のフラグが１であれば、ベクトル命令が無効化される。
【００６４】
命令(11)では、マスクレジスタmr2 の真である要素数が計数され、その結果が汎用レジスタgr29に設定される。
命令(12)では、汎用レジスタgr29の内容が０であるか否かが比較され、その真偽が汎用レジスタgr30に設定される。
【００６５】
命令(13)では、汎用レジスタgr30の内容に基づいて、ベクトル制御レジスタの位置２のフラグが設定される。
命令(14)では、vnlfy 命令により、ベクトル制御レジスタの位置２のフラグが参照され、フラグが１であれば、vstore命令が無効化される。
【００６６】
命令(15)では、命令(14)と同様に、ベクトル制御レジスタの位置２のフラグが１であれば、ベクトル命令が無効化される。
このような命令によれば、例えば、配列ａの全要素が０であれば、命令(4)、(6) 〜(8) により、ベクトル制御レジスタの位置１のフラグが０に設定される。一方、命令(5)、(11)〜(13)により、ベクトル制御レジスタの位置２のフラグが１に設定される。従って、図２に示すソースプログラムの「ＴＨＥＮ節」に相当する命令(9) 及び(10)が無効化され、プログラムの実行性能を向上することができる。
【００６７】
オブジェクト生成部５０は、ベクトル命令及びその無効化命令が設定された中間言語から、オブジェクトプログラムを生成する。そして、生成されたオブジェクトプログラムは、外部記憶装置にオブジェクトプログラムファイル７０として保存される。
【００６８】
なお、オブジェクト生成部５０により、オブジェクトプログラム生成手段，オブジェクトプログラム生成工程及びオブジェクトプログラム生成機能が構成される。
【００６９】
以上説明したコンパイル処理装置１０によれば、先ず、ソースプログラム解析部２０により、ソースプログラムから中間言語が展開される。そして、ベクトル命令生成部３０により、展開された中間言語に対して、ベクトルマスク方式，組込み関数インライン展開方式，ベクトルプレローディング方式及び排他関係ブロック方式のベクトル命令が設定される。その後、ベクトル命令最適化部４０により、中間言語に対して、無効化情報の設定、実際に無効化するか否かの決定、及び、無効化命令の設定が行われる。そして、無効化命令の設定が行われた中間言語から、オブジェクト生成部５０により、オブジェクトプログラムが生成される。
【００７０】
最終的に生成されたオブジェクトプログラムをベクトル処理方式の計算機上で実行すれば、不必要なベクトル命令の実行，配列の領域外へのアクセス，飛越し命令による処理効率の低下等が抑制される。従って、実行速度の向上，異常終了の回避等が行われ、プログラムの実行性能を向上することができる。
【００７１】
なお、本実施形態では、中間言語をベクトル化する方式として、ベクトルマスク方式，組込み関数インライン展開方式，ベクトルプレローディング方式及び排他関係ブロック方式について説明したが、他の方式により中間言語をベクトル化してもよい。また、種々のベクトル化方式の中から、例えば、コンパイルオプションにより、少なくとも１つの方式を選択できるようにしてもよい。
【００７２】
このような機能を実現するプログラムを、例えば、磁気テープ，磁気ディスク，磁気ドラム，ＩＣカード，ＣＤ−ＲＯＭ等の可搬記録媒体に記録しておけば、本発明に係るコンパイル処理プログラムを市場に流通させることができる。そして、かかる記録媒体を取得した者は、例えば、一般的な計算機を利用して、本発明に係るコンパイル処理装置を容易に構築することができる。
【００７３】
【発明の効果】
以上説明したように、請求項１又は請求項６に記載の発明によれば、ベクトル命令の最適化が行われ、プログラムの実行性能を向上することができる。
【００７４】
請求項２記載の発明によれば、不適切な無効化命令の設定による実行速度の低下を防止することができる。
請求項３記載の発明によれば、実行速度の向上，プログラムの異常終了の防止，パイプライン処理等における処理効率の向上を通して、プログラムの実行性能を向上することができる。
【００７５】
請求項４記載の発明によれば、無効化命令の実行による実行速度の低下を防止することができる。
請求項５記載の発明によれば、さらなる実行速度の向上、プログラムの異常終了の防止及び処理効率の向上を図ることができる。
【００７６】
請求項７記載の発明によれば、請求項１又は請求項６に記載の発明の効果に加え、本発明に係るコンパイル処理プログラムを流通させることができる。そして、かかるコンパイル処理プログラムが記録された記録媒体があれば、一般的な計算機を利用して、本発明に係るコンパイル処理装置を容易に構築することができる。
【図面の簡単な説明】
【図１】本発明に係るコンパイル処理装置の構成図である。
【図２】ベクトルマスク方式によるベクトル化の対象となるソースプログラムの一例である。
【図３】ベクトルマスク方式により生成されたベクトル命令の一例である。
【図４】組込み関数インライン展開方式によるベクトル化の対象となるソースプログラムの一例である。
【図５】組込み関数インライン展開方式により生成されたベクトル命令の一例である。
【図６】ベクトルプレローディング方式によるベクトル化の対象となるソースプログラムの一例である。
【図７】ベクトルプレローディング方式により生成されたベクトル命令の一例である。
【図８】排他関係ブロック方式によるベクトル化の対象となるソースプログラムの一例である。
【図９】排他関係ブロック方式により生成されたベクトル命令の一例である。
【図１０】ベクトルマスク方式による無効化情報の設定処理を示すフローチャートである。
【図１１】組込み関数インライン展開方式による無効化情報の設定処理を示すフローチャートである。
【図１２】ベクトルプレローディング方式による無効化情報の設定処理を示すフローチャートである。
【図１３】排他関係ブロック方式による無効化情報の設定処理を示すフローチャートである。
【図１４】無効化情報の解析及び無効化命令の設定処理を示すフローチャートである。
【図１５】ベクトルマスク方式によるベクトル命令に対して設定された無効化命令の一例である。
【図１６】組込み関数インライン展開方式によるベクトル命令に対して設定された無効化命令の一例である。
【図１７】ベクトルプレローディング方式によるベクトル命令に対して設定された無効化命令の一例である。
【図１８】排他関係ブロック方式によるベクトル命令に対して設定された無効化命令の一例である。
【符号の説明】
１０・・・コンパイル処理装置
２０・・・ソースプログラム解析部
３０・・・ベクトル命令生成部
３２・・・ベクトルマスク生成部
３４・・・組込み関数インライン展開部
３６・・・ベクトルプレローディング生成部
３８・・・排他関係ブロック生成部
４０・・・ベクトル命令最適化部
４２・・・無効化情報設定部
４４・・・無効化情報解析部
４６・・・無効化命令設定部
５０・・・オブジェクト生成部
６０・・・ソースプログラムファイル
７０・・・オブジェクトプログラムファイル
【図１】
0004458568.tif 000002
【図２】
0004458568.tif 000003
【図３】
0004458568.tif 000004
【図４】
0004458568.tif 000005
【図５】
0004458568.tif 000006
【図６】
0004458568.tif 000007
【図７】
0004458568.tif 000008
【図８】
0004458568.tif 000009
【図９】
0004458568.tif 000010
【図１０】
0004458568.tif 000011
【図１１】
0004458568.tif 000012
【図１２】
0004458568.tif 000013
【図１３】
0004458568.tif 000014
【図１４】
0004458568.tif 000015
【図１５】
0004458568.tif 000016
【図１６】
0004458568.tif 000017
【図１７】
0004458568.tif 000018
【図１８】
0004458568.tif 000019