(57)【要約】【課題】実行開始に際して反復回数が未知であるような内側反復演算を含む外側反復演算を実行するプログラムをベクトル化可能に変換する。【解決手段】プログラム変換装置２０は、反復回数が実行開始時に未知である内側反復演算２３１を含む外側反復演算２３０を実行するプログラム２３において、外側反復演算２３０が１回反復するたびに実行される個々の内側反復演算２３１に関して、演算を継続するか否かを表す継続指示情報２１０を、内側反復演算２３１を継続するか否かを決定する条件に基づいて生成する生成部２１と、継続指示情報２１０に基づいて内側反復演算２３１及び外側反復演算２３０が実行されるように、プログラム２３を変更する変更部２２と、を備える。【選択図】      図５
2020135464.tif 000002
【特許請求の範囲】
【請求項１】
反復回数が実行開始に際して未知である内側反復演算を含む外側反復演算を実行するプログラムにおいて、前記外側反復演算における１回の反復が実行されるのに応じて実行される個々の前記内側反復演算に対して、演算を継続するか否かを表す継続指示情報を、前記内側反復演算を継続するか否かを決定する条件に基づいて生成する生成手段と、
前記継続指示情報に基づいて前記内側反復演算及び前記外側反復演算が実行されるように、前記プログラムを変更する変更手段と、
を備えるプログラム変換装置。
【請求項２】
前記生成手段は、前記内側反復演算と前記外側反復演算とに基づいて、前記継続指示情報を生成する生成反復演算を生成し、
前記変更手段は、前記内側反復演算及び前記外側反復演算を、前記生成反復演算と、前記継続指示情報に基づく前記内側反復演算を実行する実行反復演算と、前記継続指示情報に基づいて前記外側反復演算を継続するか否かを判定する判定反復演算とに変換する、
請求項１に記載のプログラム変換装置。
【請求項３】
前記変更手段は、前記生成反復演算と前記実行反復演算と前記判定反復演算とを含む変換後反復演算を、反復回数を指定しない反復演算として生成するとともに、前記変換後反復演算を終了するか否かを判定する処理を含む前記判定反復演算を生成する、
請求項２に記載のプログラム変換装置。
【請求項４】
前記生成手段は、前記外側反復演算の反復回数を配列の大きさとする配列変数を、前記継続指示情報として生成する、
請求項２または請求項３のいずれか一項に記載のプログラム変換装置。
【請求項５】
前記生成手段は、前記継続指示情報として生成した配列変数に対する初期設定を行う処理を含む前記生成反復演算を生成する、
請求項４に記載のプログラム変換装置。
【請求項６】
前記生成手段は、前記内側反復演算において参照される変数であって、前記外側反復演算の反復によって異なる値を示す、前記条件に関わる前記変数を、配列変数に拡張し、当該配列変数を用いて前記継続指示情報を生成する、
請求項２乃至請求項５のいずれか一項に記載のプログラム変換装置。
【請求項７】
前記生成手段は、前記変数を拡張した配列変数に対する初期設定を行う処理を含む前記生成反復演算を生成する、
請求項６に記載のプログラム変換装置。
【請求項８】
前記プログラムを構文解析することによって、前記プログラムが実行する前記外側反復演算が、反復回数が実行開始時に未知である前記内側反復演算を含むことを検出する検出手段をさらに備える、
請求項１乃至請求項７のいずれか一項に記載のプログラム変換装置。
【請求項９】
情報処理装置によって、
反復回数が実行開始に際して未知である内側反復演算を含む外側反復演算を実行するプログラムにおいて、前記外側反復演算における１回の反復が実行されるのに応じて実行される個々の前記内側反復演算に対して、演算を継続するか否かを表す継続指示情報を、前記内側反復演算を継続するか否かを決定する条件に基づいて生成し、
前記継続指示情報に基づいて前記内側反復演算及び前記外側反復演算が実行されるように、前記プログラムを変更する、
を備えるプログラム変換方法。
【請求項１０】
反復回数が実行開始に際して未知である内側反復演算を含む外側反復演算を実行するプログラムにおいて、前記外側反復演算における１回の反復が実行されるのに応じて実行される個々の前記内側反復演算に対して、演算を継続するか否かを表す継続指示情報を、前記内側反復演算を継続するか否かを決定する条件に基づいて生成する生成処理と、
前記継続指示情報に基づいて前記内側反復演算及び前記外側反復演算が実行されるように、前記プログラムを変更する変更処理と、
をコンピュータに実行させるためのプログラム変換のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、ベクトル演算を適用できるように、プログラムをベクトル化可能に変換する技術に関する。
【背景技術】
【０００２】
科学技術計算分野等においては、ベクトル演算器を備えたスーパーコンピュータ等がベクトル演算を行うことによって、高速な演算処理を実現する。ベクトル演算とは、例えば配列変数により表されるデータに対して、同様の演算をパイプライン処理により行う演算のことである。気象予測や製造業におけるシミューレーションなどの分野においては、膨大な演算をより高速に行うことが要求されるので、ベクトル演算をより高速に実行可能とするようにプログラムをベクトル化可能に変換する技術に対する期待が高まってきている。但し、「ベクトル化」とは、プログラムのソースコードをコンパイルすることによって、ベクトル演算命令のオブジェクトコードを生成することである。
【０００３】
このような技術に関連する技術として、特許文献１には、打ち切り判定処理を含むループを有するプログラムであっても、ベクトル演算器を有する情報処理装置が高速に実行することが可能なプログラムに変換するプログラム変換装置が開示されている。この装置が変換の対象とするのは、第１処理が順番に処理される第１ループ処理が複数回繰り返される第２ループ処理が含まれるプログラムである。このプログラムにおいては、当該順番に対して第１処理にて連続していない記憶領域にアクセスする処理を第１ループ処理が含み、さらに、条件が成り立つか否かに応じて第２ループ処理を終了する判定処理を第２ループ処理が含んでいる。この装置は、これらのループ処理を、第２ループ処理に関する繰り返し処理が第１の回数分に亘って繰り返される第３ループ処理と、第３ループ処理にて第２の回数分に亘って繰り返される第４ループ処理とに変換する。この装置は、第１ループ処理が第２の回数分に亘って繰り返される処理と、当該判定処理が第２の回数分に亘って繰り返される処理とが第１の回数分に亘って繰り返される処理に変換する。この装置は、第１処理及び当該判定処理を、第４ループ処理ごとに異なる記憶領域であって、第４ループ処理における処理順に連続している記憶領域にアクセスされる処理に変換する。そしてこの装置は、第４ループ処理と第１ループ処理との処理順序を入れ替える。
【０００４】
また、特許文献２には、ループの繰り返し数が、最大ベクトル長よりも小さな２重ループであっても、実行効率の高いベクトルプロセッサ向けの目的プログラムを制限なく生成するコンパイラが開示されている。このコンパイラは、外側ループと内側ループとの２重ループを有するソースプログラムの内側ループの繰り返し数Ｎがソースプログラムの最大ベクトル長ＶＬの１/２以下である場合、２重ループを、以下の第１及び第２のループによる２重ループに変換する。第１のループは、Ｎの要素の演算を行うベクトル演算をループ本体とし、外側ループの繰り返し数Ｍを、ＶＬをＮで割った値とＭとのどちらか小さな値で割った余りの値を繰り返し数とする。第２のループは、ＶＬをＮで割った値とＭとのどちらか小さな値にＮを乗じた値の要素の演算を行うベクトル演算をループ本体とし、Ｍを、ＶＬをＮで割った値とＭとのどちらか小さな値で割った値を繰り返し数とする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１７／１１９３７８号
【特許文献２】特開２００９−０７００７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
反復回数（ループ回数）が、プログラムの実行開始に際して未知（不定）であるような内側反復演算（内側ループ演算）を含む外側反復演算（外側ループ演算）を実行するプログラムをベクトル化することは一般的に困難である。例えば図２に例示するようなプログラムでは、０００３行目から０００５行目により表される内側反復演算の反復回数は、変数ａが示す値と「ｔｈｒeａｔｈｏｌｄ」が示す値との大小関係に依存するので、プログラムの実行開始時点においては未知であり、このようなプログラムをベクトル化することは困難である。即ち、反復回数が未知であるような内側反復演算を含む外側反復演算を実行するプログラムをベクトル化可能に変換できるようにすることが課題である。上述した特許文献１及び２が示す技術では、この課題を解決するは困難である。本願発明の主たる目的は、この課題を解決するプログラム変換装置等を提供することである。
【課題を解決するための手段】
【０００７】
本願発明の一態様に係るプログラム変換装置は、反復回数が実行開始に際して未知である内側反復演算を含む外側反復演算を実行するプログラムにおいて、前記外側反復演算における１回の反復が実行されるのに応じて実行される個々の前記内側反復演算に対して、演算を継続するか否かを表す継続指示情報を、前記内側反復演算を継続するか否かを決定する条件に基づいて生成する生成手段と、前記継続指示情報に基づいて前記内側反復演算及び前記外側反復演算が実行されるように、前記プログラムを変更する変更手段と、を備える。
【０００８】
上記目的を達成する他の見地において、本願発明の一態様に係るプログラム変換方法は、情報処理装置によって、反復回数が実行開始に際して未知である内側反復演算を含む外側反復演算を実行するプログラムにおいて、前記外側反復演算における１回の反復が実行されるのに応じて実行される個々の前記内側反復演算に対して、演算を継続するか否かを表す継続指示情報を、前記内側反復演算を継続するか否かを決定する条件に基づいて生成し、前記継続指示情報に基づいて前記内側反復演算及び前記外側反復演算が実行されるように、前記プログラムを変更する。
【０００９】
また、上記目的を達成する更なる見地において、本願発明の一態様に係るプログラム変換のプログラムは、反復回数が実行開始に際して未知である内側反復演算を含む外側反復演算を実行するプログラムにおいて、前記外側反復演算における１回の反復が実行されるのに応じて実行される個々の前記内側反復演算に対して、演算を継続するか否かを表す継続指示情報を、前記内側反復演算を継続するか否かを決定する条件に基づいて生成する生成処理と、前記継続指示情報に基づいて前記内側反復演算及び前記外側反復演算が実行されるように、前記プログラムを変更する変更処理と、をコンピュータに実行させる。
【００１０】
更に、本願発明は、係るプログラム変換のプログラム（コンピュータプログラム）が格納された、コンピュータ読み取り可能な、不揮発性の記録媒体によっても実現可能である。
【発明の効果】
【００１１】
本願発明は、実行開始に際して反復回数が未知であるような内側反復演算を含む外側反復演算を実行するプログラムをベクトル化可能に変換することを可能とする。
【図面の簡単な説明】
【００１２】
【図１】本願発明の第１の実施形態に係るプログラム変換装置１０の構成を示すブロック図である。
【図２】変換前プログラム１４１を例示する図である。
【図３】本願発明の第１の実施形態に係る変換後プログラム１４２を例示する図である。
【図４Ａ】本願発明の第１の実施形態に係るプログラム変換装置１０の動作を示すフローチャート（１／２）である。
【図４Ｂ】本願発明の第１の実施形態に係るプログラム変換装置１０の動作を示すフローチャート（２／２）である。
【図５】本願発明の第２の実施形態に係るプログラム変換装置２０の構成を示すブロック図である。
【図６】本願発明の各実施形態に係るプログラム変換装置を実行可能な情報処理装置９００の構成を示すブロック図である。
【発明を実施するための形態】
【００１３】
以下、本願発明の実施の形態について図面を参照して詳細に説明する。
【００１４】
＜第１の実施形態＞
図１は、本願発明の第１の実施の形態に係るプログラム変換装置１０の構成を示すブロック図である。プログラム変換装置１０は、生成部１１、変更部１２、検出部１３、及び、記憶部１４を備えている。
【００１５】
記憶部１４は、メモリあるいは磁気ディスク等の記憶デバイスである。記憶部１４は、プログラム変換装置１０の内部に備えられなくてもよく、例えば、プログラム変換装置１０と通信可能に接続された外部の装置に備えられてもよい。
【００１６】
記憶部１４は、変換前プログラム１４１及び変換後プログラム１４２を記憶している。本実施形態に係るプログラム変換装置１０は、一般的にはベクトル化することが困難である変換前プログラム１４１に対してベクトル化可能に変換する処理を行い、ベクトル化可能に変換した結果を変換後プログラム１４２として記憶部１４に格納する。
【００１７】
図２は、変換前プログラム１４１を例示する図である。図３は、本実施形態に係る変換後プログラム１４２を例示する図である。変換前プログラム１４１及び変換後プログラム１４２は、一例として、プログラム言語であるＦｏｒｔｒａｎを用いて記述されたプログラムである。本実施形態では以降、プログラム変換装置１０が、図２に例示する変換前プログラム１４１に対してベクトル化可能に変換する処理を行った結果として、図３に例示する変換後プログラム１４２を生成する場合を例にして、プログラム変換装置１０の動作を説明する。
【００１８】
図１に示す検出部１３は、変換前プログラム１４１を構文解析することによって、変換前プログラム１４１が実行する外側ループ処理（外側反復演算）が、ループ回数（反復回数）が未知（不定）である内側ループ処理（内側反復演算）を含むことを検出する。尚、プログラムにおけるループ処理の構造を構文解析することは、周知の技術を適用可能であるので、本願ではその詳細な説明を省略する。
【００１９】
図２に例示する変換前プログラム１４１は、０００３行目から０００５行目により表される内側ループ処理（以降、内側ループＢと称する）を含む、０００１行目から０００７行目により表される外側ループ処理（以降、外側ループＡと称する）を実行するプログラムである。
【００２０】
内側ループＢのループ回数は、０００３行目に示す通り、変数ａが示す値と「ｔｈｒeａｔｈｏｌｄ」が示す値との大小関係に依存する。そして０００２行目に示す通り、変数ａには、外側ループＡによる１回のループ処理が行われるごとに、配列変数ａｒｒａｙ＿ｉｎ（ｉ）が代入されるので、変数ａは示す値は、外側ループＡによる１回のループ処理が行われるごとに異なる。但し、変数ｉは、０００１行目に示す通り、１からｎ（ｎは任意の自然数）のいずれかの整数である。このように、変換前プログラム１４１の実行開始時において、内側ループＢのループ回数は未知である。
【００２１】
検出部１３は、変換前プログラム１４１における外側ループＡが、ループ回数が実行開始時に未知である内側ループＢを含むことを検出したことを、生成部１１及び変更部１２に通知する。生成部１１及び変更部１２は、検出部１３から上述した通知を受けた場合、変換前プログラム１４１を後述するベクトル化可能に変換する処理を行う対象とする。
【００２２】
生成部１１は、図２に例示する変換前プログラム１４１の０００３及び０００４行目を構文解析することによって、変数ａが、内側ループＢにおいて参照される変数であることを検知する。生成部１１は、変換前プログラム１４１の０００１及び０００２行目を構文解析することによって、変数ａが、外側ループＡによる１回のループ処理が行われるごとに、異なる値を示すことを検知する。生成部１１は、変換前プログラム１４１の０００３行目を構文解析することによって、変数ａが、内側ループＢを継続するか否かを決定する条件に関わる変数であることを検知する。
【００２３】
生成部１１は、変数ａに関して上述した通り検知した場合、図３に例示する変換後プログラム１４２の０００１行目に示す通り、変数ａを配列変数に拡張する。生成部１１はこの際、配列変数に拡張した配列変数ａ（ｉ）の配列の大きさを、外側ループＡのループ回数であるｎに設定する。
【００２４】
生成部１１は、変換前プログラム１４１の０００１及び０００２行目に基づいて、配列変数ａ（ｉ）に対する初期設定を行う処理を、図３に例示する変換後プログラム１４２の０００４乃至０００６行目に示す通り生成する。即ち、変換後プログラム１４２は、配列変数ａ（１）乃至ａ（ｎ）の初期設定値として、配列変数ａｒｒａｙ＿ｉｎ（１）乃至ａｒｒａｙ＿ｉｎ（ｎ）を設定する。
【００２５】
生成部１１は、また、外側ループＡによる１回のループ処理が行われるごとに実行される個々の内側ループＢに関して、演算を継続するか否かを表すマスク配列変数ｃ（ｉ）（継続指示情報）を、図３に例示する変換後プログラム１４２の０００２行目に示す通り定義（生成）する。生成部１１はこの際、マスク配列変数ｃ（ｉ）の配列の大きさを、外側ループＡのループ回数であるｎに設定する。
【００２６】
生成部１１は、図３に例示する変換後プログラム１４２の０００７乃至０００９行目に示す通り、マスク配列変数ｃ（ｉ）に対する初期設定を行う処理を生成する。生成部１１は、より具体的には、０００８行目に示す通り、マスク配列変数ｃ（ｉ）を「０」に初期設定する処理を生成する。但し、マスク配列変数ｃ（ｉ）が「０」であることは、外側ループＡによる１回のループ処理が行われるごとに実行される個々の内側ループＢに関して、演算を継続する（即ち、演算に対するマスクを行わない）ことを示すこととする。
【００２７】
生成部１１は、図２に例示する外側ループＡ及び内側ループＢに基づいて、マスク配列変数ｃ（ｉ）に値を設定する（継続指示情報を生成する）生成反復演算を、図３に例示する変換後プログラム１４２の００１６乃至００２０行目に示す通り生成する。即ち、生成部１１は、マスク配列変数ｃ（ｉ）が「０」であり、かつ、配列変数ａ（ｉ）が「ｔｈｒｅａｔｈｏｌｄ」以下である場合に、マスク配列変数ｃ（ｉ）に「１」を設定する処理を生成する。但し、マスク配列変数ｃ（ｉ）が「１」であることは、外側ループＡによる１回のループ処理が行われるごとに実行される個々の内側ループＢに関して、演算を終了する（即ち、演算に対するマスクを行う）ことを示すこととする。
【００２８】
尚、図３に例示する変換後プログラム１４２の０００４乃至０００６行目が示す配列変数ａ（ｉ）に対する初期設定を行う処理、及び、変換後プログラム１４２の０００７乃至０００９行目が示すマスク配列変数ｃ（ｉ）に対する初期設定を行う処理も、上述した生成反復演算の一部と見なすことができる。
【００２９】
図１に示す変更部１２は、図２に例示する変換前プログラム１４１における外側ループＡ及び内側ループＢに基づいて、マスク配列変数ｃ（ｉ）が示す値に応じて内側ループＢを実行する実行反復演算を、図３に例示する変換後プログラム１４２の００１１乃至００１５行目に示す通り生成する。即ち、変更部１２は、マスク配列変数ｃ（ｉ）が「０」である場合に、図２に例示する変換前プログラム１４１の０００４行目が示す演算、即ち、配列変数ａ（ｉ）を実数「２．０」で除算する演算を生成する。但し、変換前プログラム１４１の０００４行目、及び、変換後プログラム１４２の００１３行目が示す「ｄ０」は、Ｆｏｒｔｒａｎにおける倍精度実数を表す。
【００３０】
変更部１２は、また、図２に例示する変換前プログラム１４１における外側ループＡ及び内側ループＢに基づいて、マスク配列変数ｃ（ｉ）が示す値に応じて外側ループＡを継続するか否かを判定する判定反復演算を、図３に例示する変換後プログラム１４２の００１０、及び、００２１乃至００２８行目に示す通り生成する。即ち、変更部１２は、変換後プログラム１４２の００１０及び００２８行目に示す通り、００１１乃至００１５行目に示す実行反復演算と、００１６乃至００２０行目に示す生成反復演算と、００２１乃至００２７行目に示す判定反復演算と、を含むループ処理（変換後反復演算）を、反復回数を指定しないループ処理（無限ループ）として生成する。
【００３１】
そして、変更部１２は、マスク配列変数ｃ（ｉ）の要素のうちの少なくともいずれかが「０」（要継続）を示す場合に値が「０」となる変数ｄｏｎｅを導入する。変更部１２は、変数ｄｏｎｅが「１」となる（即ち、マスク配列変数ｃ（ｉ）の全ての要素が「１」（継続不要）を示す）場合に、上述した無限ループから抜けるようにするための判定反復演算を生成する。
【００３２】
変更部１２は、また、図２に例示する変換前プログラム１４１における０００６行目に基づいて、配列変数ａｒｒａｙ＿ｏｕｔ（１）乃至ａｒｒａｙ＿ｏｕｔ（ｎ）に、配列変数ａ（１）乃至ａ（ｎ）が示す値を格納する処理を、図３に例示する変換後プログラム１４２の００２９乃至００３１行目に示す通り生成する。
【００３３】
変更部１２は、上述した手順によって、図２に例示する変換前プログラム１４１を、図３に例示する変換後プログラム１４２に変換し、生成した変換後プログラム１４２を記憶部１４に格納する。
【００３４】
次に図４Ａ及び４Ｂのフローチャートを参照して、本実施形態に係るプログラム変換装置１０の動作（処理）について詳細に説明する。
【００３５】
検出部１３は、記憶部１４に記憶されている変換前プログラム１４１を構文解析し、ループ回数が変換前プログラム１４１の実行開始時において未知である内側ループを含む外側ループが存在するか確認する（ステップＳ１０１）。ループ回数が未知である内側ループを含む外側ループが存在しない場合（ステップＳ１０２でＮｏ）、全体の処理は終了する。ループ回数が未知である内側ループを含む外側ループが存在する場合（ステップＳ１０２でＹｅｓ）、生成部１１及び変更部１２は、変換前プログラム１４１を、ベクトル化可能に変換する処理を行う対象に設定する（ステップＳ１０３）。
【００３６】
生成部１１は、個々の内側ループに関して演算を継続するか否かを表すマスク配列変数を、変換後プログラム１４２において定義する（ステップＳ１０４）。生成部１１は、変換後プログラム１４２において、外側ループによる１回のループ処理が行われるごとに異なる値を示す内側ループ内の変数であって、内側ループに関して演算を継続するか否かを決定する条件に関わる変数を、配列変数に拡張する（ステップＳ１０５）。
【００３７】
生成部１１は、変換後プログラム１４２において、変換前プログラム１４１における内側ループと外側ループとに基づいて、マスク配列変数に値を設定する生成反復演算を生成する（ステップＳ１０６）。変更部１２は、変換前プログラム１４１に基づいて、変換後プログラム１４２において、マスク配列変数に基づく内側ループを実行する実行反復演算を生成する（ステップＳ１０７）。変更部１２は、変換前プログラム１４１に基づいて、変換後プログラム１４２において、マスク配列変数に基づいて外側ループを継続するか否かを判定する判定反復演算を生成する（ステップＳ１０８）。
【００３８】
変更部１２は、変換前プログラム１４１における内側ループと外側ループとを、変換後プログラム１４２における生成反復演算と実行反復演算と判定反復演算とに変換する（ステップＳ１０９）。変更部１２は、変換後プログラム１４２において、生成反復演算と実行反復演算と判定反復演算とを含む変換後反復演算を無限ループとして生成する（ステップＳ１１０）。変更部１２は、変換後プログラム１４２において、無限ループを終了するか否かを判定する処理を、判定反復演算に追加する（ステップＳ１１１）。
【００３９】
変更部１２は、変換前プログラム１４１をベクトル化可能に変換した変換後プログラム１４２を記憶部１４に格納し（ステップＳ１１２）、全体の処理は終了する。
【００４０】
尚、図４Ａ及び４Ｂに示すフローチャートにおいて、各ステップが行われる順番は、上述した順番に限定されない。本実施形態に係るプログラム変換装置１０は、例えば、ステップＳ１０４とステップＳ１０５を行う順番を逆にしてもよい。
【００４１】
本実施形態に係るプログラム変換装置１０は、実行開始に際して反復回数が未知であるような内側反復演算を含む外側反復演算を実行するプログラムをベクトル化可能に変換することができる。その理由は、プログラム変換装置１０は、ループ回数（反復回数）が実行開始時に未知である内側ループＢを含む外側ループＡを実行する変換前プログラム１４１において、マスク配列変数ｃ（ｉ）（継続指示情報）を、内側ループＢを継続するか否かを決定する条件に基づいて生成し、マスク配列変数ｃ（ｉ）に基づいて、内側ループＢ及び外側ループＡが実行されるように変換前プログラム１４１を変更するからである。
【００４２】
以下に、本実施形態に係るプログラム変換装置１０によって実現される効果について、詳細に説明する。
【００４３】
例えば図２に例示するような、反復回数がプログラムの実行開始時点において未知（不定）であるような内側反復演算を含む外側反復演算を実行するプログラムをベクトル化することは一般的に困難であり、このようなプログラムをベクトル化可能に変換できるようにすることが課題である。
【００４４】
このような課題に対して、本実施形態に係るプログラム変換装置１０は、生成部１１と、変更部１２とを備え、例えば、図１乃至図４Ｂを参照して上述した通り動作する。即ち、生成部１１は、ループ回数が実行開始に際して未知である内側ループＢを含む外側ループＡを実行する変換前プログラム１４１において、外側ループＡにおける１回の反復が実行されるのに応じて実行される個々の内側ループＢに対して、演算を継続するか否かを表すマスク配列変数ｃ（ｉ）（継続指示情報）を、内側ループＢを継続するか否かを決定する条件に基づいて生成する。そして、変更部１２は、マスク配列変数ｃ（ｉ）に基づいて内側ループＢ及び外側ループＡが実行されるように、変換前プログラム１４１を変更する。
【００４５】
即ち、本実施形態に係るプログラム変換装置１０は、マスク配列変数ｃ（ｉ）を導入することによって、変換前プログラム１４１におけるループ回数が実行開始時に未知である内側ループＢを含む外側ループＡを、変換後プログラム１４２における、マスク配列変数ｃ（ｉ）を用いた反復演算（マスク付き処理）に変換する。変換後プログラム１４２に含まれる、上述した生成反復演算、実行反復演算、及び、判定反復演算は、図３に例示する通り、外側ループＡのループ回数ｎを配列の大きさとして有する配列変数ａ（ｉ）とマスク配列変数ｃ（ｉ）とに関する演算であって、そのループ回数は、ｎという既知の値である。したがって、本実施形態に係るプログラム変換装置１０は、実行開始時に反復回数が未知であるような内側反復演算を含む外側反復演算を実行するプログラムをベクトル化可能に変換することができる。
【００４６】
また、本実施形態に係るプログラム変換装置１０は、上述した生成反復演算と実行反復演算と判定反復演算とを含む変換後反復演算を、反復回数を指定しない反復演算（無限ループ）として生成するとともに、当該変換後反復演算を終了するか否かを判定する処理を含む当該判定反復演算を生成する。これにより、本実施形態に係るプログラム変換装置１０は、実行開始時に反復回数が未知であるような内側反復演算を含む外側反復演算を実行するプログラムを、確実かつ適切にベクトル化可能に変換することができる。
【００４７】
＜第２の実施形態＞
図５は、本願発明の第２の実施形態に係るプログラム変換装置２０の構成を示すブロック図である。
【００４８】
本実施形態に係るプログラム変換装置２０は、生成部２１、及び、変更部２２を備える。
【００４９】
生成部２１は、反復回数が実行開始に際して未知である内側反復演算２３１を含む外側反復演算２３０を実行するプログラム２３を処理対象とする。生成部２１は、プログラム２３において、外側反復演算２３０における１回の反復が実行されるのに応じて実行される個々の内側反復演算２３１に対して、演算を継続するか否かを表す継続指示情報２１０を、内側反復演算２３１を継続するか否かを決定する条件に基づいて生成する。
【００５０】
変更部２２は、継続指示情報２１０に基づいて内側反復演算２３１及び外側反復演算２３０が実行されるように、プログラム２３を変更する。
【００５１】
本実施形態に係るプログラム変換装置２０は、実行開始に際して反復回数が未知であるような内側反復演算を含む外側反復演算を実行するプログラムをベクトル化可能に変換することができる。その理由は、プログラム変換装置２０は、反復回数が実行開始時に未知である内側反復演算２３１を含む外側反復演算２３０を実行するプログラム２３において、継続指示情報２１０を、内側反復演算２３１を継続するか否かを決定する条件に基づいて生成し、継続指示情報２１０に基づいて、内側反復演算２３１及び外側反復演算２３０が実行されるようにプログラム２３を変更するからである。
【００５２】
＜ハードウェア構成例＞
上述した各実施形態において図１、及び、図５に示したプログラム変換装置における各部は、専用のＨＷ（ＨａｒｄＷａｒｅ）（電子回路）によって実現することができる。また、図１、及び、図５において、少なくとも、下記構成は、ソフトウェアプログラムの機能（処理）単位（ソフトウェアモジュール）と捉えることができる。
・生成部１１及び２１、
・変更部１２及び２２、
・検出部１３。
【００５３】
但し、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。この場合のハードウェア環境の一例を、図６を参照して説明する。
【００５４】
図６は、本願発明の各実施形態に係るプログラム変換装置を実行可能な情報処理装置９００（コンピュータ）の構成を例示的に説明する図である。即ち、図６は、図１、及び、図５に示したプログラム変換装置を実現可能なコンピュータ（情報処理装置）の構成であって、上述した実施形態における各機能を実現可能なハードウェア環境を表す。
【００５５】
図６に示した情報処理装置９００は、構成要素として下記を備えている。
・ＣＰＵ（Ｃｅｎｔｒａｌ＿Ｐｒｏｃｅｓｓｉｎｇ＿Ｕｎｉｔ）９０１、
・ＲＯＭ（Ｒｅａｄ＿Ｏｎｌｙ＿Ｍｅｍｏｒｙ）９０２、
・ＲＡＭ（Ｒａｎｄｏｍ＿Ａｃｃｅｓｓ＿Ｍｅｍｏｒｙ）９０３、
・ハードディスク（記憶装置）９０４、
・通信インタフェース９０５、
・バス９０６（通信線）、
・ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ＿Ｄｉｓｃ＿Ｒｅａｄ＿Ｏｎｌｙ＿Ｍｅｍｏｒｙ）等の記録媒体９０７に格納されたデータを読み書き可能なリーダライタ９０８、
・モニターやスピーカ、キーボード等の入出力インタフェース９０９。
【００５６】
即ち、上記構成要素を備える情報処理装置９００は、これらの構成がバス９０６を介して接続された一般的なコンピュータである。情報処理装置９００は、ＣＰＵ９０１を複数備える場合もあれば、マルチコアにより構成されたＣＰＵ９０１を備える場合もある。
【００５７】
そして、上述した実施形態を例に説明した本願発明は、図６に示した情報処理装置９００に対して、次の機能を実現可能なコンピュータプログラムを供給する。その機能とは、その実施形態の説明において参照したブロック構成図（図１、及び、図５）における上述した構成、或いはフローチャート（図４Ａ及び４Ｂ）の機能である。本願発明は、その後、そのコンピュータプログラムを、当該ハードウェアのＣＰＵ９０１に読み出して解釈し実行することによって達成される。また、当該装置内に供給されたコンピュータプログラムは、読み書き可能な揮発性のメモリ（ＲＡＭ９０３）、または、ＲＯＭ９０２やハードディスク９０４等の不揮発性の記憶デバイスに格納すれば良い。
【００５８】
また、前記の場合において、当該ハードウェア内へのコンピュータプログラムの供給方法は、現在では一般的な手順を採用することができる。その手順としては、例えば、ＣＤ−ＲＯＭ等の各種記録媒体９０７を介して当該装置内にインストールする方法や、インターネット等の通信回線を介して外部よりダウンロードする方法等がある。そして、このような場合において、本願発明は、係るコンピュータプログラムを構成するコード或いは、そのコードが格納された記録媒体９０７によって構成されると捉えることができる。
【００５９】
以上、上述した実施形態を模範的な例として本願発明を説明した。しかしながら、本願発明は、上述した実施形態には限定されない。即ち、本願発明は、本願発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【符号の説明】
【００６０】
１０    プログラム変換装置
１１    生成部
１２    変更部
１３    検出部
１４    記憶部
１４１    変換前プログラム
１４２    変換後プログラム
２０    プログラム変換装置
２１    生成部
２１０    継続指示情報
２２    変更部
２３    プログラム
２３０    外側反復演算
２３１    内側反復演算
９００    情報処理装置
９０１    ＣＰＵ
９０２    ＲＯＭ
９０３    ＲＡＭ
９０４    ハードディスク（記憶装置）
９０５    通信インタフェース
９０６    バス
９０７    記録媒体
９０８    リーダライタ
９０９    入出力インタフェース
【図１】
2020135464.tif 000003
【図２】
2020135464.tif 000004
【図３】
2020135464.tif 000005
【図４Ａ】
2020135464.tif 000006
【図４Ｂ】
2020135464.tif 000007
【図５】
2020135464.tif 000008
【図６】
2020135464.tif 000009