(57)【要約】  集約演算を含む多重ループ処理をベクトル化する。  ベクトル化装置３０は、ソフトウェアの二重ループ処理について、内側ループのループ長が外側ループのループ変数に依存し、二重ループ処理の結果を表す第一配列が内側ループのループ変数をインデックス値として含まない構成を検出する検出部３１と、当該構成が検出された場合に、内側ループのループ長として、固定値を決定する固定値決定部３２と、第一配列の値の算出に用いる第二配列の配列サイズを拡張することにより、二重ループ処理がループ長が当該固定値である内側ループを処理できるようにする拡張部３３と、追加された第二配列の要素に対して要素値を設定することにより、これらの処理が行われる前後において二重ループ処理の結果が等しくなるようにする拡張要素設定部３４と、これらの処理結果に基づいて、ソフトウェアを更新する更新部３５と、を備える。
2017086391.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能な検出手段と、
前記検出手段が前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定する固定値決定手段と、
前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにする拡張手段と、
前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値決定手段及び前記拡張手段による処理が行われる前後において前記二重ループ処理の結果が等しくなるようにする拡張要素設定手段と、
前記固定値決定手段、前記拡張手段、及び、前記拡張要素設定手段による処理結果に基づいて、前記ソフトウェアを更新する更新手段と、
を備えるベクトル化装置。
【請求項２】
前記拡張要素設定手段は、前記二重ループ処理が、前記内側ループによる反復処理によって、１つ以上の前記第二の配列変数に関する演算結果の総和を、前記外側ループの１回ごとに求める場合に、前記第二の配列変数に関する演算結果が０となるように、前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、前記要素値を設定する、
請求項１に記載のベクトル化装置。
【請求項３】
前記拡張要素設定手段は、前記二重ループ処理が、前記内側ループによる反復処理によって、１つ以上の前記第二の配列変数に関する演算結果の総乗を、前記外側ループの１回ごとに求める場合に、前記第二の配列変数に関する演算結果が１となるように、前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、前記要素値を設定する、
請求項１に記載のベクトル化装置。
【請求項４】
前記拡張要素設定手段は、前記内側ループによる反復処理によって、１つの前記第二の配列変数の総和を前記外側ループの１回ごとに求める場合に、前記拡張手段によって新たに追加された前記第二の配列変数の前記要素値として０を設定する、
請求項２に記載のベクトル化装置。
【請求項５】
前記拡張要素設定手段は、前記内側ループによる反復処理によって、１つの前記第二の配列変数の総乗を前記外側ループの１回ごとに求める場合に、前記拡張手段によって新たに追加された前記第二の配列変数の前記要素値として１を設定する、
請求項３に記載のベクトル化装置。
【請求項６】
前記拡張手段は、前記第二の配列変数をインデックス値として含む第三の配列変数が前記第一の配列変数の値の算出に用いられる場合、前記第三の配列変数の配列サイズを拡張し、
前記拡張要素設定手段は、前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、前記拡張手段によって新たに追加された前記第三の配列変数の要素のいずれかを示すインデックス値を設定し、前記拡張手段によって新たに追加された前記第三の配列変数の要素に対して、前記拡張手段による処理が行われる前後において前記二重ループ処理の結果が等しくなるように前記要素値を設定する、
請求項１乃至５のいずれか一項に記載のベクトル化装置。
【請求項７】
前記固定値決定手段は、前記外側ループに応じて値が異なる前記内側ループのループ長の最大値を、前記固定値として決定する、
請求項１乃至６のいずれか一項に記載のベクトル化装置。
【請求項８】
前記固定値決定手段は、前記外側ループのループ長に特定の整数値を乗算することによって求めた値に対する、前記内側ループのループ長の総和の比が、所定の値以上となることを満たす前記特定の整数値の最大値を、前記固定値として決定する、
請求項１乃至６のいずれか一項に記載のベクトル化装置。
【請求項９】
情報処理装置によって、
ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能であり、
前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定し、
前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにし、
前記配列サイズの拡張によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値の決定及び前記配列サイズの拡張が行われる前後において前記二重ループ処理の結果が等しくなるようにし、
前記固定値の決定、前記配列サイズの拡張、及び、前記配列サイズの拡張によって新たに追加された前記第二の配列変数の要素に対する前記要素値の設定に関する処理結果に基づいて、前記ソフトウェアを更新する、
ベクトル化方法。
【請求項１０】
ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能な検出処理と、
前記検出処理が前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定する固定値決定処理と、
前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにする拡張処理と、
前記拡張処理によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値決定処理及び前記拡張処理による処理が行われる前後において前記二重ループ処理の結果が等しくなるようにする拡張要素設定処理と、
前記固定値決定処理、前記拡張処理、及び、前記拡張要素設定処理による処理結果に基づいて、前記ソフトウェアを更新する更新処理と、
をコンピュータに実行させるためのベクトル化プログラムが格納された記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、ソフトウェアに含まれる多重ループ処理をベクトル化する技術に関する。
【背景技術】
【０００２】
ベクトル演算器、あるいは、ＳＩＭＤ（Single Instruction Multiple Data）演算器を用いて高速に演算を行うためには、ベクトル演算命令を有効に適用できるように、ソフトウェア（プログラム）をベクトル化することが重要である。ソフトウェアのベクトル化とは、ベクトル化の対象とするプログラムによって記述されたループ処理（反復処理）から、共通な演算を抽出したり、あるいは、ループ処理に関するループ長（反復回数）を長くしたりする処理などを行うことである。【０００３】
ソフトウェアは、一般的に、二重ループ処理等の多重ループ処理を含むことが多いが、多重ループ処理に関するベクトル化は、単ループ（一重ループ）処理に関するベクトル化と比較して、その処理が複雑である。したがって、多重ループ処理をベクトル化する技術に対する期待が高まっている。【０００４】
このような技術の一例として、特許文献１には、構文解析部、構造解析部、データ依存関係解析部、ループ入れ替え解析部、ベクトルテキスト生成部、及び、コード生成部を備えたコンパイル方式が開示されている。このコンパイル方式は、二重ループ処理をベクトル化するために、二重ループ処理を解析して、二重ループにおける外側ループと内側ループとを入れ換える処理を行う。【０００５】
図２１は、特許文献１が示す技術を備える一般的なベクトル化装置が、二重ループ処理における内側ループと外側ループとを入れ換えることにより、二重ループ処理をベクトル化する例を示す。図２１（ａ）に示す通り、このベクトル化装置がベクトル化する元のプログラムは、外側ループのループ長が１００００、内側ループのループ長が１０である二重ループ処理を含んでいる。この場合、図２１（ａ）に示すプログラムを実行するベクトル演算器は、ループ長が１０である内側ループによるベクトル演算を１００００回行うことになるので、ベクトル演算の効率がよいとはいえない。したがって、このベクトル化装置は、元のプログラムにおける内側ループと外側ループとを入れ換えた、図２１（ｂ）に示すプログラムを生成する。図２１（ｂ）に示すプログラムを実行するベクトル演算器は、ループ長が１００００である内側ループによるベクトル演算を１０回行えばよいので、ベクトル演算の効率が改善される。【０００６】
また、特許文献２には、次元不一致配列検出手段、次元不一致配列複写手段、展開手段、及び、ベクトル化実施手段を備えたベクトル化装置が開示されている。このベクトル化装置は、プログラム内の多重ループ処理に含まれる演算式が使用する複数の配列変数について、次元数が異なる配列変数を検出する。このベクトル化装置は、検出した配列変数について、配列の大きさを均一化したのち、多重ループを単ループに変換する処理を行う。【０００７】
図２２は、特許文献２が示す技術を備える一般的なベクトル化装置が、二重ループを単ループに変換することにより、二重ループ処理をベクトル化する例を示す。図２２（ａ）に示す通り、このベクトル化装置がベクトル化する元のプログラムは、配列の大きさが１００ｘ１００（本願においてｘは乗算を表す）である２次元の配列変数Ｘ及びＹ、及び、配列の大きさが１００である１次元の配列変数Ｚを使用する。このベクトル化装置は、配列変数Ｚの配列の大きさが配列変数Ｘ及びＹと異なることを検出したのち、配列変数Ｚを、配列の大きさが１００ｘ１００である２次元の配列に拡張する。そして、このベクトル化装置は、配列変数Ｘ、Ｙ、及び、Ｚを、大きさが１００ｘ１００である２次元の配列から、大きさが１００００である１次元の配列に変換した図２２（ｂ）に示すプログラムを生成する。【０００８】
また、特許文献３には、二重ループ処理における内側ループのループ長が固定値ではなく外側ループのループ変数の値に依存する場合であっても、二重ループ処理をベクトル化することが可能な、コンパイラのベクトル化処理方式が開示されている。【０００９】
図２３は、特許文献３が示す技術を備える一般的なベクトル化装置が、ベクトル化するプログラムの例を示す。図２３におけるＮＩ及びＮＪは、順に、外側ループのループ長を表す変数、及び、内側ループのループ長を表す配列変数である。図２３に示すプログラムは、内側ループのループ長が固定値ではなく、外側ループのループ変数の値に依存するプログラムである。このベクトル化装置は、外側ループのループ変数に依存した内側ループのループ長がとり得る最大値を求め、内側ループのループ長をその最大値に置き換える。そして、このベクトル化装置は、内側ループのループ長を固定値化した二重ループ処理をベクトル化する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開2001-043209号公報
【特許文献２】特許第3657414号公報
【特許文献３】特開平04-097484号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ベクトル化することが困難なプログラムの１つとして、多重ループ処理において集約演算を行うプログラムがある。このような集約演算を行うプログラムの一例を図２４に示す。図２４に示す二重ループ処理により値が算出される１次元の配列変数Ｘは、内側ループのループ変数ｊ（ｊは０以上の整数）をインデックス値として含まず、外側ループのループ変数ｉ（ｉは０以上の整数）のみをインデックス値として含んでいる。図２４に示す二重ループ処理は、変数ｉがある値の場合において、内側ループの処理を繰り返し実行することにより、２次元の配列変数Ｙの総和を配列変数Ｘとして算出する演算である。このように、配列変数Ｙ（第２の配列変数）に含まれる複数の要素について演算を行った結果を、配列変数Ｘ（第２の配列変数とは異なる第１の配列変数）の何れかの要素とする演算を、本願では「集約演算」と称する。このような集約演算を多重ループ処理により行うプログラムをベクトル化することは一般的に困難であり、特許文献１乃至３は、この問題を解決可能な技術を開示していない。本願発明の主たる目的は、この問題を解決したベクトル化装置を提供することである。
【課題を解決するための手段】
【００１２】
本願発明の一態様に係るベクトル化装置は、ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能な検出手段と、前記検出手段が前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定する固定値決定手段と、前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにする拡張手段と、前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値決定手段及び前記拡張手段による処理が行われる前後において前記二重ループ処理の結果が等しくなるようにする拡張要素設定手段と、前記固定値決定手段、前記拡張手段、及び、前記拡張要素設定手段による処理結果に基づいて、前記ソフトウェアを更新する更新手段と、を備える。【００１３】
上記目的を達成する他の見地において、本願発明の一態様に係るベクトル化方法は、ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能であり、前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定し、前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにし、前記配列サイズの拡張によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値の決定及び前記配列サイズの拡張が行われる前後において前記二重ループ処理の結果が等しくなるようにし、前記固定値の決定、前記配列サイズの拡張、及び、前記配列サイズの拡張によって新たに追加された前記第二の配列変数の要素に対する前記要素値の設定に関する処理結果に基づいて、前記ソフトウェアを更新する。【００１４】
また、上記目的を達成する更なる見地において、本願発明の一態様に係るベクトル化プログラムは、ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能な検出処理と、前記検出処理が前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定する固定値決定処理と、前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにする拡張処理と、前記拡張処理によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値決定処理及び前記拡張処理による処理が行われる前後において前記二重ループ処理の結果が等しくなるようにする拡張要素設定処理と、前記固定値決定処理、前記拡張処理、及び、前記拡張要素設定処理による処理結果に基づいて、前記ソフトウェアを更新する更新処理と、をコンピュータに実行させるためのプログラムである。【００１５】
更に、本願発明は、係るベクトル化プログラム（コンピュータプログラム）が格納された、コンピュータ読み取り可能な、不揮発性の記録媒体によっても実現可能である。
【発明の効果】
【００１６】
本願発明は、第２の配列変数に含まれる複数の要素について演算を行った結果を、第２の配列変数とは異なる第１の配列変数の何れかの要素とする演算（集約演算）を含む多重ループ処理をベクトル化することを可能とする。
【図面の簡単な説明】
【００１７】
【図１】本願発明の第１の実施形態に係るベクトル化装置１０の構成を示すブロック図である。
【図２】本願発明の第１の実施形態に係るソースプログラム２００の例（ソースプログラム２０１）を示す図である。
【図３】本願発明の第１の実施形態に係るソースプログラム２０１における配列の構成を例示する図である。
【図４】本願発明の第１の実施形態に係る拡張部１３によって配列サイズが拡張された、ソースプログラム２０１における配列の構成を例示する図である。
【図５】本願発明の第１の実施形態に係るベクトル化装置１０がソースプログラム２０１から生成したベクトル化されたソースプログラム２１１を示す図である。
【図６】本願発明の第１の実施形態に係るベクトル化されたソースプログラム２１１の二重ループを単ループ化したベクトル化されたソースプログラム２１２を示す図である。
【図７】本願発明の第１の実施形態の第１の変形例に係るソースプログラム２００の第１の例（ソースプログラム２０３）を示す図である。
【図８】本願発明の第１の実施形態の第１の変形例に係るソースプログラム２００の第２の例（ソースプログラム２０４）を示す図である。
【図９】集約演算を行う二重ループの一般的な構成を示す図である。
【図１０】本願発明の第１の実施形態の第１の変形例に係るベクトル化装置１０がソースプログラム２０３から生成した、ベクトル化されたソースプログラム２１３を示す図である。
【図１１】本願発明の第１の実施形態の第１の変形例に係るベクトル化装置１０がソースプログラム２０４から生成した、ベクトル化されたソースプログラム２１４を示す図である。
【図１２】本願発明の第１の実施形態の第１の変形例に係るベクトル化されたソースプログラム２１３の内側ループと外側ループとを入れ換えた、ベクトル化されたソースプログラム２１５を示す図である。
【図１３】本願発明の第１の実施形態の第１の変形例に係るベクトル化されたソースプログラム２１４の内側ループと外側ループとを入れ換えた、ベクトル化されたソースプログラム２１６を示す図である。
【図１４】本願発明の第１の実施形態の第２の変形例に係るソースプログラム２００の例（ソースプログラム２０７）を示す図である。
【図１５】本願発明の第１の実施形態の第２の変形例に係るソースプログラム２０７における配列の構成を例示する図である。
【図１６】本願発明の第１の実施形態の第２の変形例に係るベクトル化装置１０がソースプログラム２０７から生成した、ベクトル化されたソースプログラム２１７を例示する図である。
【図１７】本願発明の第１の実施形態の第２の変形例にベクトル化されたソースプログラム２１７における配列の構成を例示する図である。
【図１８】本願発明の第１の実施形態及びその第１の変形例に係るベクトル化装置１０の動作を示すフローチャートである。
【図１９】本願発明の第２の実施形態に係るベクトル化装置３０の構成を示すブロック図である。
【図２０】本願発明の各実施形態に係るベクトル化装置を実行可能な情報処理装置の構成を例示するブロック図である。
【図２１】二重ループ処理における内側ループと外側ループとを入れ換えることによりベクトル化を行う一般的な例を示す図である。
【図２２】二重ループ処理を単ループ化することによりベクトル化を行う一般的な例を示す図である。
【図２３】内側ループのループ長が外側ループのループ変数の値に依存する二重ループを表す一般的なプログラムの例を示す図である。
【図２４】二重ループにおいて集約演算を行う一般的なプログラムの例を示す図である。
【発明を実施するための形態】
【００１８】
以下、本願発明の実施の形態について図面を参照して詳細に説明する。
【００１９】
＜第１の実施形態＞
図１は、本願発明の第１の実施の形態に係るベクトル化装置１０を概念的に示すブロック図である。ベクトル化装置１０は、記憶装置２０に格納されたソースプログラム２００をベクトル化し、ベクトル化した結果をベクトル化されたソースプログラム２１０として記憶装置２０に格納する装置である。記憶装置２０は、ベクトル化装置１０に内蔵される場合もある。本実施形態に係るベクトル化装置１０は、以下の構成を備えている。
・検出部１１、
・固定値決定部１２、
・拡張部１３、
・拡張要素設定部１４、
・更新部１５。
【００２０】
検出部１１、固定値決定部１２、拡張部１３、拡張要素設定部１４、及び、更新部１５は、電子回路の場合もあれば、コンピュータプログラムとそのコンピュータプログラムに従って動作するプロセッサによって実現される場合もある。
【００２１】
図２は、本実施形態においてベクトル化の対象であるソースプログラム２００の例として、ソースプログラム２０１を示す。図２に示す通り、配列Ｘ、Ｙ、及び、Ｚは２次元の配列（配列変数）であり、配列ＮＪは１次元の配列である。配列Ｘ、Ｙ、及び、Ｚの１次元目の配列サイズ、及び、配列ＮＪの配列サイズはＮＩである。配列Ｘ、Ｙ、及び、Ｚに関するｉ（ｉは０以上の整数）番目の１次元配列であるＸ［ｉ］、Ｙ［ｉ］、及び、Ｚ［ｉ］の２次元目の配列サイズは、配列ＮＪのｉ番目の値であるＮＪ［ｉ］と等しい。図２における「＊」は乗算を表す（以降の図についても同様）。
【００２２】
図１に示す検出部１１は、ソースプログラム２００の構成を解析することによって、ソースプログラム２００に含まれる二重ループ処理の構成が以下の３つの条件を満たす構成であることを検出する。二重ループ処理とは、内側ループと、その内側ループを内包する外側ループとによって構成される繰り返し処理のことである。本実施形態において、検出部１１が行う解析は、例えば、プログラムの構文を定義する情報に基づく構文解析等、既存の技術を用いることとする。
・二重ループ処理の内側ループのループ長が、外側ループのループ変数の値に依存した変動値である。
・二重ループ処理における配列の配列サイズが、二重ループのループ長と等しい。
・二重ループ処理における演算結果の代入先が、二重ループ処理の中で宣言された一時変数を除いて、配列である。
【００２３】
ソースプログラム２０１は、その内側ループのループ長がＮＪ［ｉ］であり外側ループのループ変数ｉの値に依存するので、上述した１番目の条件を満たす。図２に示すソースプログラム２０１における「#pragma array_size」という指示子が示す通り、配列Ｘ、Ｙ、及び、Ｚの配列サイズが、二重ループ処理のループ長と等しいので、ソースプログラム２０１は、上述した２番目の条件を満たす。そして、ソースプログラム２０１の二重ループ処理における演算結果の代入先は配列Ｘ［ｉ］［ｊ］（ｊは０以上の整数）であるので、ソースプログラム２０１は、上述した３番目の条件を満たす。検出部１１は、この検出結果を、固定値決定部１２へ通知する。
【００２４】
図１に示す固定値決定部１２は、検出部１１が、ソースプログラム２００が上述した３つの条件を満たすことを検出した場合、ソースプログラム２００が含む二重ループ処理における内側ループのループ長として、所定の基準に基づく固定値（以下「ＬＬＥＮ」と称する）を決定する。固定値決定部１２は、ＬＬＥＮを、例えば、「二重ループ処理における内側ループのループ長を表す配列の最大値」に決定する。固定値決定部１２は、あるいはＬＬＥＮを、「（内側ループのループ長を表す配列の総和）÷（外側ループのループ長）ｘＮ≧所定の値（例えば０．９）を満たす最大の整数Ｎ」に決定する。すなわちこの場合、固定値決定部１２は、外側ループのループ長に特定の整数値を乗算することによって求めた値に対する、内側ループのループ長の総和の比が、所定の値以上となることを満たす当該特定の整数値の最大値を、ＬＬＥＮとして決定する。あるいは、固定値決定部１２は、ＬＬＥＮを、ソースプログラム２００の中にユーザにより記載された指示文にしたがって決定する。
【００２５】
図３は、ソースプログラム２０１が使用する配列の構成を例示する。図３における塗りつぶされた四角形は、配列Ｘ、Ｙ、及び、Ｚの要素を表す。これらの要素は、個々に、所定の値が設定されていることとする。ここでは、固定値決定部１２は、ＬＬＥＮを、「二重ループ処理における内側ループのループ長を表す配列の最大値」に決定することとする。図３に示す例では、ソースプログラム２０１が含む二重ループ処理における内側ループのループ長を表す配列ＮＪの最大値は４である。したがって、固定値決定部１２は、ＬＬＥＮを４に決定する。固定値決定部１２は、決定したＬＬＥＮの値を、拡張部１３及び更新部１５へ通知する。
【００２６】
図１に示す拡張部１３は、ソースプログラム２００が含む二重ループ処理が、ループ長がＬＬＥＮである内側ループを処理することが可能となるように、当該二重ループ処理が使用する配列の配列サイズを拡張する。
【００２７】
図４は、図２に示すソースプログラム２０１が使用する配列について、拡張部１３が配列サイズを拡張する例を示す。図４における点線により描かれた四角形は、拡張部１３が行う拡張処理によって追加された要素を示す。図３及び４に示す通り、拡張部１３は、配列Ｘ、Ｙ、及び、Ｚについて、拡張処理を行う前の要素を全て含めた状態で、配列サイズをＮＩｘＬＬＥＮに拡張する。拡張部１３は、ソースプログラム２００が含む二重ループ処理が使用する配列に関して拡張処理を行った内容を、拡張要素設定部１４及び更新部１５へ通知する。
【００２８】
図１に示す拡張要素設定部１４は、固定値決定部１２及び拡張部１３による処理が行われる前後において、ソースプログラム２００が含む二重ループ処理の結果が等しくなるように、拡張部１３によって新たに追加された配列の要素に対して、値（要素値）を設定する。ソースプログラム２０１について、拡張部１３によって新たに追加された配列の要素は、二重ループ処理の結果として使用されない要素である。したがって、拡張要素設定部１４は、この場合、新たに追加された配列の要素に対して、どのような要素値を設定してもよい。拡張要素設定部１４は、新たに追加された配列の要素に対して設定した要素値の内容を、更新部１５へ通知する。
【００２９】
図１に示す更新部１５は、固定値決定部１２、拡張部１３、及び、拡張要素設定部１４が行った処理の内容に基づいて、ソースプログラム２００を更新する。図５は、更新部１５がソースプログラム２０１を更新することによって生成した、ベクトル化されたソースプログラム２１１を示す。図５に示す通り、二重ループ処理における内側ループのループ長は、更新部１５によって、図２に示す「ＮＪ［ｉ］」から固定値決定部１２がＬＬＥＮとして決定した「４」に更新されている。更新部１５は、生成したベクトル化されたソースプログラム２１１を、ベクトル化されたソースプログラム２１０として、記憶装置２０へ格納する。
【００３０】
更新部１５は、ベクトル化されたソースプログラム２１１に対して、さらにベクトル最適化処理を行ってもよい。ベクトル化されたソースプログラム２１１では、二重ループ処理における内側ループのループ長が「４」である。この二重ループ処理における外側ループのループ長である「ＮＩ」が「４」よりも十分に大きな値である場合、外側ループによってベクトル演算を行うことによって、演算の効率が向上する。したがって、更新部１５は、ベクトル化されたソースプログラム２１１における二重ループ処理を、図６に示す通り、単ループ処理に変換したベクトル化されたソースプログラム２１２を生成する。更新部１５は、生成したベクトル化されたソースプログラム２１２を、ベクトル化されたソースプログラム２１０として、記憶装置２０へ格納する。
【００３１】
上述した本実施形態では、固定値決定部１２は、ＬＬＥＮを、「二重ループ処理における内側ループのループ長を表す配列の最大値」に設定するので、二重ループ処理が使用する配列の中に、配列サイズがＬＬＥＮより大きい配列は存在しない。しかしながら、固定値決定部１２が、ＬＬＥＮをこれとは異なる基準によって決定した場合、二重ループ処理が使用する配列の中に、配列サイズがＬＬＥＮより大きい配列が存在する場合がある。この場合、更新部１５は、配列サイズがＬＬＥＮより大きい配列について処理を行う二重ループを生成する。
【００３２】
＜第１の実施形態の第１の変形例＞
次に、本実施形態の第１の変形例について詳細に説明する。本実施形態の第１の変形例に係るベクトル化装置１０の構成は図１を参照して上述した通りである。
【００３３】
本変形例において、検出部１１は、ソースプログラム２００を解析することによって、ソースプログラム２００に含まれる二重ループ処理の構成が以下の２つの条件を満たす構成であることを検出する。
・二重ループ処理の内側ループのループ長が、外側ループのループ変数の値に依存した変動値である。
・二重ループ処理の結果を表す第一の配列が、内側ループのループ変数をインデックス値として含まない集約演算である。
【００３４】
図７は、本変形例に係るソースプログラム２００の第１の例として、ソースプログラム２０３を示す。図７に示す通り、配列Ｘ及び配列ＮＪは、１次元の配列であり、配列Ｙは２次元の配列である。ソースプログラム２０３は、変数ｉがある値の場合において、内側ループの処理を繰り返し実行することにより、２次元の配列Ｙ［ｉ］［ｊ］の二乗の総和を配列Ｘ［ｉ］として算出する集約演算である。
【００３５】
図９（ａ）は、配列演算の総和を算出する集約演算を表す二重ループの一般的な構成を示す。図９（ａ）に示す集約演算では、２次元の配列Ｉｎ０、Ｉｎ１等に関する演算ｆによる演算結果について、内側ループを繰り返し実行することにより求めた総和を、１次元の配列Ｏｕｔとして算出する。
【００３６】
図８は、本変形例に係るソースプログラム２００の第２の例として、ソースプログラム２０４を示す。ソースプログラム２０４は、変数ｉがある値の場合において、内側ループの処理を繰り返し実行することにより、２次元の配列Ｙ［ｉ］［ｊ］の総乗を配列Ｘ［ｉ］として算出する集約演算である。
【００３７】
図９（ｂ）は、配列演算の総乗を算出する集約演算を表す二重ループの一般的な構成を示す。図９（ｂ）に示す集約演算では、２次元の配列Ｉｎ０、Ｉｎ１等に関する演算ｆによる演算結果について、内側ループを繰り返し実行することにより求めた総乗を、１次元の配列Ｏｕｔとして算出する。
【００３８】
ソースプログラム２０３（図７）及び２０４（図８）は、これらの２つの条件を満たす。検出部１１は、この判定結果を、固定値決定部１２へ通知する。
【００３９】
固定値決定部１２は、検出部１１が、ソースプログラム２００が上述した２つの条件を満たすことを検出した場合、ソースプログラム２００が含む二重ループ処理における内側ループのループ長として、上述の手順により、ＬＬＥＮを決定する。固定値決定部１２は、ソースプログラム２０３あるいは２０４が使用する配列の構成が例えば図３に示す通りである場合、上述の通り、ＬＬＥＮを「４」に決定する。固定値決定部１２は、ソースプログラム２０３あるいは２０４が使用する配列の構成が図３に示す例とは異なる場合、ＬＬＥＮを例えば「４」ではない別の値に決定する。
【００４０】
拡張部１３は、ソースプログラム２００が含む二重ループ処理が、ループ長がＬＬＥＮである内側ループを処理することが可能となるように、当該二重ループ処理が使用する配列の配列サイズを拡張する。
【００４１】
拡張要素設定部１４は、固定値決定部１２及び拡張部１３による処理が行われる前後において、ソースプログラム２００が含む二重ループ処理の結果が等しくなるように、拡張部１３によって新たに追加された配列の要素に対して、要素値を設定する。ソースプログラム２０３あるいは２０４は、集約演算を行うプログラムであるので、拡張要素設定部１４は、ソースプログラム２０１の場合とは異なり、新たに追加された配列の要素に、適切な値を設定する必要がある。そこで以下の説明では、拡張要素設定部１４が、新たに追加された配列の要素に、適切な値を設定する方法について、詳述する。
【００４２】
拡張要素設定部１４は、二重ループが行う集約演算に応じて、一時変数（以下、「ＰＲＶＡＬ」と称する）に値を設定する。拡張要素設定部１４は、例えばソースプログラム２０３のように、二重ループが行う集約演算が総和を算出する演算である場合、ＰＲＶＡＬを０に設定する。拡張要素設定部１４は、例えばソースプログラム２０４のように、二重ループが行う集約演算が総乗を算出する演算である場合、ＰＲＶＡＬを１に設定する。
【００４３】
拡張要素設定部１４は、図９に示す構成において、ｆ（Ｉｎ０，Ｉｎ１，・・・）の値がＰＲＶＡＬと等しくなるように、拡張部１３によって新たに追加された配列の要素に対して、値を設定する。より具体的には、拡張要素設定部１４は、ソースプログラム２０３について、拡張部１３によって新たに追加された配列の要素に「０」を設定する。拡張要素設定部１４は、ソースプログラム２０４について、拡張部１３によって新たに追加された配列の要素に「１」を設定する。
【００４４】
図１０は、更新部１５がソースプログラム２０３を更新することによって生成した、ベクトル化されたソースプログラム２１３を示す。図１１は、更新部１５がソースプログラム２０４を更新することによって生成した、ベクトル化されたソースプログラム２１４を示す。図１０及び１１に示す通り、二重ループ処理における内側ループのループ長は、更新部１５によって、図７及び８に示す「ＮＪ［ｉ］」からＬＬＥＮに更新されている。
【００４５】
更新部１５は、ベクトル化されたソースプログラム２１３及び２１４に対して、さらにベクトル最適化処理を行ってもよい。ソースプログラム２１３及び２１４に含まれる二重ループ処理における外側ループのループ長であるＮＩがＬＬＥＮよりも十分に大きな値である場合、内側ループと外側ループとを入れ換えることによって、演算の効率が向上する。より具体的には、更新部１５は、図１２に示す通り、図１０に示すベクトル化されたソースプログラム２１３における二重ループ処理について、内側ループと外側ループとを入れ換えることによって生成した、ベクトル化されたソースプログラム２１５を生成する。更新部１５は、図１３に示す通り、図１１に示すベクトル化されたソースプログラム２１４における二重ループ処理について、内側ループと外側ループとを入れ換えることによって生成した、ベクトル化されたソースプログラム２１６を生成する。
【００４６】
次に図１８のフローチャートを参照して、本実施形態（第１の変形例を含む）に係るベクトル化装置１０の動作（処理）について詳細に説明する。
【００４７】
検出部１１は、ソースプログラム２００に含まれる二重ループ処理の構成を解析する（ステップＳ１０１）。二重ループ処理の構成が所定の条件（上述した３つあるいは２つの条件）を満たさない場合（ステップＳ１０２でＮｏ）、全体の処理は終了する。二重ループ処理の構成が所定の条件を満たす場合（ステップＳ１０２でＹｅｓ）、固定値決定部１２は、内側ループのループ長として固定値（ＬＬＥＮ）を決定する（ステップＳ１０３）。
【００４８】
拡張部１３は、二重ループ処理の中に、配列サイズがＬＬＥＮより小さい配列が存在するか確認する（ステップＳ１０４）。配列サイズがＬＬＥＮより小さい配列が存在しない場合（ステップＳ１０５でＮｏ）、処理はステップＳ１０８へ進む。配列サイズがＬＬＥＮより小さい配列が存在する場合（ステップＳ１０５でＹｅｓ）、拡張部１３は、該当する配列の配列サイズを、ＬＬＥＮまで拡張する（ステップＳ１０６）。
【００４９】
拡張要素設定部１４は、内側ループのループ長をＬＬＥＮに決定したのち、配列サイズを拡張する処理が行われる前後において、二重ループ処理の結果が等しくなるように、拡張された配列の要素に対して、要素値を設定する（ステップＳ１０７）。更新部１５は、固定値決定部１２、拡張部１３、及び、拡張要素設定部１４による処理結果に基づき、ソースプログラム２００を更新する（ステップＳ１０８）。更新部１５は、更新したソースプログラム２００をベクトル最適化し、ベクトル化されたソースプログラム２１０として、記憶装置２０へ格納し（ステップＳ１０９）、全体の処理は終了する。
【００５０】
本実施形態に係るベクトル化装置１０は、第２の配列変数に含まれる複数の要素について演算を行った結果を、第２の配列変数とは異なる第１の配列変数の何れかの要素とする演算（集約演算）を含む多重ループ処理をベクトル化することができる。その理由は、ベクトル化装置１０が以下の通りに動作するからである。すなわち、
・固定値決定部１２は、ソースプログラム２００に含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
【００５１】
・拡張部１３は、二重ループ処理が、ループ長が固定値に設定された内側ループを処理することが可能となるように、二重ループ処理が使用する配列の配列サイズを拡張する。
【００５２】
・拡張要素設定部１４は、固定値決定部１２及び拡張部１３による処理が行われる前後において二重ループ処理の結果が等しくなるように、拡張部１３によって新たに追加された配列の要素に対して、要素値を設定する。
【００５３】
以下に、本実施形態及びその第１の変形例に係るベクトル化装置１０によって実現される効果について、詳細に説明する。
【００５４】
多重ループ処理において集約演算（即ち、第２の配列変数に含まれる複数の要素について演算を行った結果を、第２の配列変数とは異なる第１の配列変数の何れかの要素とする演算）を行うソフトウェアをベクトル化することは、その構造の特性から困難である。したがって、ベクトル演算器がこのようなソフトウェアを実行する場合、そのベクトル演算器が有するベクトル演算機能を十分に活かすことができないという問題がある。
【００５５】
これに対して、本実施形態及びその第１の変形例に係るベクトル化装置１０では、検出部１１がソースプログラム２００に集約演算を行う二重ループが含まれることを検出した場合、固定値決定部１２は、内側ループのループ長として、所定の基準に基づく固定値を決定する。拡張部１３は、固定値決定部１２によりループ長が固定値に決定された内側ループを二重ループ処理が処理することが可能となるように、使用される配列の配列サイズを拡張する。拡張要素設定部１４は、拡張部１３によって新たに追加された配列の要素に対して、要素値を設定する。このとき設定される要素値は、固定値決定部１２及び拡張部１３による処理が行われたことによって、ソースプログラム２００の実行結果が変わらない（すなわち、実行結果に影響を及ぼすことがない）ことを満たす値である。そして、更新部１５は、固定値決定部１２、拡張部１３、及び、拡張要素設定部１４による処理結果に基づいて、前記ソフトウェアを更新する。これにより、本実施形態及びその第１の変形例に係るベクトル化装置１０は、集約演算を含む多重ループ処理をベクトル化することができる。
【００５６】
また、本実施形態及びその第１の変形例に係るベクトル化装置１０は、多重ループ処理に含まれる集約演算が、１以上の配列に関する演算結果の総和あるいは総乗を求める場合に応じて、新たに追加した配列の要素に対して、適切に値を設定する。これにより、本実施形態及びその第１の変形例に係るベクトル化装置１０は、集約演算の内容に応じた柔軟な処理を行うことができる。
【００５７】
また、本実施形態及びその第１の変形例に係るベクトル化装置１０では、固定値決定部１２は、内側ループのループ長の最大値を内側ループのループ長として決定する。固定値決定部１２は、あるいは、外側ループのループ長に特定の整数値を乗算することによって求めた値に対する、内側ループのループ長の総和の比が、所定の値以上となることを満たす当該特定の整数値の最大値を、その固定値として決定する。すなわち、本実施形態及びその第１の変形例に係るベクトル化装置１０は、内側ループのループ長を固定値化する際に、柔軟な処理を行うことができる。
【００５８】
上述した本実施形態及びその第１の変形例では、ベクトル化装置１０が、集約演算を含む二重ループ処理に対してベクトル化を行う例を説明したが、ベクトル化装置１０は、集約演算を含む三重以上の多重ループ処理についても、ベクトル化することは可能である。この場合、ベクトル化装置１０は、上述した二重ループ処理に対してベクトル化を行う処理を、複数階層にわたって順次行えばよい。
【００５９】
＜第１の実施形態の第２の変形例＞
次に、本実施形態の第２の変形例について詳細に説明する。本実施形態の第２の変形例に係るベクトル化装置１０の構成は図１を参照して上述した通りである。
【００６０】
図１４は、本変形例に係るソースプログラム２００の例として、ソースプログラム２０７を示す。図１４に示す通り、ソースプログラム２０７は、図９（ａ）に示す二重ループにおける演算ｆの部分を、配列の要素をインデックスとした配列に置き換えた集約演算を含むプログラムである。図１４に示す通り、配列Ｘ、配列ＮＪ、及び、配列Ａは、１次元の配列であり、配列Ｙは２次元の配列である。
【００６１】
図１５は、ソースプログラム２０７が使用する配列の構成を例示する。図１５に示す通り、配列Ｙの構成は、図３に示すソースプログラム２０１が使用する配列Ｙと同様である。配列Ａの要素数は、配列Ｙがとり得る値に応じて定まる値である「ＮＡ」である。
【００６２】
図１６は、ベクトル化装置１０がソースプログラム２０７をベクトル化することにより生成した、ベクトル化されたソースプログラム２１７を示す。図１７は、ベクトル化されたソースプログラム２１７が使用する配列の構成を例示する。
【００６３】
検出部１１、及び、固定値決定部１２は、第１の実施形態の第１の変形例について説明した通り動作する。
【００６４】
拡張部１３は、図１７に示す通り、配列Ｙについて、上述した通り配列サイズを拡張する。拡張部１３は、配列Ａについて、（ＮＡ＋１）番目の要素であるＡ［ＮＡ］を追加する。
【００６５】
拡張要素設定部１４は、固定値決定部１２及び拡張部１３による処理が行われる前後において、ソースプログラム２００が含む二重ループ処理の結果が等しくなるように、拡張部１３によって新たに追加された配列の要素に対して、要素値を設定する。この場合、拡張要素設定部１４は、拡張部１３によって新たに追加された配列Ｙの要素に対して、「ＮＡ」を設定する。拡張要素設定部１４は、拡張部１３によって新たに追加されたＡ［ＮＡ］に「０」を設定する。
【００６６】
更新部１５は、図１６に示す通り、ソースプログラム２０７について、二重ループ処理における内側ループのループ長をＬＬＥＮに更新したのち、内側ループと外側ループとを入れ換えることによって生成した、ベクトル化されたソースプログラム２１７を生成する。
【００６７】
本第２の変形例に係るベクトル化装置１０は、第２の配列変数に含まれる複数の要素について演算を行った結果を、第２の配列変数とは異なる第１の配列変数の何れかの要素とする演算（集約演算）を含む多重ループ処理をベクトル化することができる。その理由は、ベクトル化装置１０が以下の通りに動作するからである。すなわち、
・固定値決定部１２は、ソースプログラム２００に含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
【００６８】
・拡張部１３は、二重ループ処理が、ループ長が固定値に設定された内側ループを処理することが可能となるように、二重ループ処理が使用する配列の配列サイズを拡張する。
【００６９】
・拡張要素設定部１４は、固定値決定部１２及び拡張部１３による処理が行われる前後において二重ループ処理の結果が等しくなるように、拡張部１３によって新たに追加された配列の要素に対して、要素値を設定する。
【００７０】
また、本第２の変形例に係るベクトル化装置１０は、多重ループ処理に含まれる集約演算が、配列の要素をインデックスとした配列を含む演算であっても、使用される配列の配列サイズを適切に拡張し、新たに追加した配列の要素に対して、適切に値を設定する。これにより、本第２の変形例に係るベクトル化装置１０は、集約演算の内容に応じた、より柔軟な処理を行うことができる。
【００７１】
＜第２の実施形態＞
図１９は、第２の実施形態に係るベクトル化装置３０の構成を概念的に示すブロック図である。
【００７２】
本実施形態に係るベクトル化装置３０は、検出部３１、固定値決定部３２、拡張部３３、拡張要素設定部３４、及び、更新部３５を備えている。
【００７３】
検出部３１は、ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、その二重ループ処理の結果を表す第一の配列変数が当該内側ループのループ変数をインデックス値として含まない構成であることを検出することができる。
【００７４】
固定値決定部３２は、検出部３１が上述した構成を検出した場合に、当該内側ループのループ長として、所定の基準に基づく固定値を決定する。
【００７５】
拡張部３３は、第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張する。これにより、拡張部３３は、二重ループ処理が、ループ長が固定値決定部３２により決定された固定値である内側ループを処理できるようにする。
【００７６】
拡張要素設定部３４は、拡張部３３によって新たに追加された第二の配列変数の要素に対して、要素値を設定する。これにより、拡張要素設定部３４は、固定値決定部３２及び拡張部３３による処理が行われる前後において二重ループ処理の結果が等しくなるようにする。
【００７７】
更新部３５は、固定値決定部３２、拡張部３３、及び、拡張要素設定部３４による処理結果に基づいて、当該ソフトウェアを更新する。
【００７８】
本実施形態に係るベクトル化装置３０は、第２の配列変数に含まれる複数の要素について演算を行った結果を、第２の配列変数とは異なる第１の配列変数の何れかの要素とする演算（集約演算）を含む多重ループ処理をベクトル化することができる。その理由は、ベクトル化装置３０が以下の通りに動作するからである。すなわち、
・固定値決定部３２は、ソフトウェアに含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
【００７９】
・拡張部３３は、二重ループ処理が、ループ長が固定値に設定された内側ループを処理することが可能となるように、二重ループ処理が使用する配列の配列サイズを拡張する。
【００８０】
・拡張要素設定部３４は、固定値決定部３２及び拡張部３３による処理が行われる前後において二重ループ処理の結果が等しくなるように、拡張部３３によって新たに追加された配列の要素に対して、要素値を設定する。
【００８１】
＜ハードウェア構成例＞
上述した各実施形態において図１、及び、図１９に示した各部は、専用のＨＷ（ＨａｒｄＷａｒｅ）（電子回路）によって実現することができる。また、図１及び図１９において、少なくとも、下記構成は、ソフトウェアプログラムの機能（処理）単位（ソフトウェアモジュール）と捉えることができる。
・検出部１１及び３１、
・固定値決定部１２及び３２、
・拡張部１３及び３３、
・拡張要素設定部１４及び３４、
・更新部１５及び３５。
【００８２】
但し、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。この場合のハードウェア環境の一例を、図２０を参照して説明する。
【００８３】
図２０は、本願発明の各実施形態に係るベクトル化装置を実行可能な情報処理装置９００（コンピュータ）の構成を例示的に説明する図である。即ち、図２０は、図１及び図１９に示したベクトル化装置を実現可能なコンピュータ（情報処理装置）の構成であって、上述した実施形態における各機能を実現可能なハードウェア環境を表す。
【００８４】
図２０に示した情報処理装置９００は、構成要素として下記を備えている。
・ＣＰＵ（Ｃｅｎｔｒａｌ＿Ｐｒｏｃｅｓｓｉｎｇ＿Ｕｎｉｔ）９０１、
・ＲＯＭ（Ｒｅａｄ＿Ｏｎｌｙ＿Ｍｅｍｏｒｙ）９０２、
・ＲＡＭ（Ｒａｎｄｏｍ＿Ａｃｃｅｓｓ＿Ｍｅｍｏｒｙ）９０３、
・ハードディスク（記憶装置）９０４、
・外部装置との通信インタフェース９０５、
・バス９０６（通信線）、
・ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ＿Ｄｉｓｃ＿Ｒｅａｄ＿Ｏｎｌｙ＿Ｍｅｍｏｒｙ）等の記録媒体９０７に格納されたデータを読み書き可能なリーダライタ９０８、
・入出力インタフェース９０９。
【００８５】
即ち、上記構成要素を備える情報処理装置９００は、これらの構成がバス９０６を介して接続された一般的なコンピュータである。情報処理装置９００は、ＣＰＵ９０１を複数備える場合もあれば、マルチコアにより構成されたＣＰＵ９０１を備える場合もある。
【００８６】
そして、上述した実施形態を例に説明した本願発明は、図２０に示した情報処理装置９００に対して、次の機能を実現可能なコンピュータプログラムを供給する。その機能とは、その実施形態の説明において参照したブロック構成図（図１及び図１９）における上述した構成、或いはフローチャート（図１８）の機能である。本願発明は、その後、そのコンピュータプログラムを、当該ハードウェアのＣＰＵ９０１に読み出して解釈し実行することによって達成される。また、当該装置内に供給されたコンピュータプログラムは、読み書き可能な揮発性のメモリ（ＲＡＭ９０３）またはハードディスク９０４等の不揮発性の記憶デバイスに格納すれば良い。
【００８７】
また、前記の場合において、当該ハードウェア内へのコンピュータプログラムの供給方法は、現在では一般的な手順を採用することができる。その手順としては、例えば、ＣＤ−ＲＯＭ等の各種記録媒体９０７を介して当該装置内にインストールする方法や、インターネット等の通信回線を介して外部よりダウンロードする方法等がある。そして、このような場合において、本願発明は、係るコンピュータプログラムを構成するコード或いは、そのコードが格納された記録媒体９０７によって構成されると捉えることができる。
【００８８】
以上、上述した実施形態を模範的な例として本願発明を説明した。しかしながら、本願発明は、上述した実施形態には限定されない。即ち、本願発明は、本願発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【００８９】
この出願は、２０１５年１１月２０日に出願された日本出願特願２０１５−２２７２５６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００９０】
１０    ベクトル化装置
１１    検出部
１２    固定値決定部
１３    拡張部
１４    拡張要素設定部
１５    更新部
２０    記憶装置
２００    ソースプログラム
２０１    ソースプログラム
２０３    ソースプログラム
２０４    ソースプログラム
２０７    ソースプログラム
２１０    ベクトル化されたソースプログラム
２１１    ベクトル化されたソースプログラム
２１２    ベクトル化されたソースプログラム
２１３    ベクトル化されたソースプログラム
２１４    ベクトル化されたソースプログラム
２１５    ベクトル化されたソースプログラム
２１６    ベクトル化されたソースプログラム
２１７    ベクトル化されたソースプログラム
３０    ベクトル化装置
３１    検出部
３２    固定値決定部
３３    拡張部
３４    拡張要素設定部
３５    更新部
９００    情報処理装置
９０１    ＣＰＵ
９０２    ＲＯＭ
９０３    ＲＡＭ
９０４    ハードディスク（記憶装置）
９０５    通信インタフェース
９０６    バス
９０７    記録媒体
９０８    リーダライタ
９０９    入出力インタフェース
【図１】
2017086391.tif 000003
【図２】
2017086391.tif 000004
【図３】
2017086391.tif 000005
【図４】
2017086391.tif 000006
【図５】
2017086391.tif 000007
【図６】
2017086391.tif 000008
【図７】
2017086391.tif 000009
【図８】
2017086391.tif 000010
【図９】
2017086391.tif 000011
【図１０】
2017086391.tif 000012
【図１１】
2017086391.tif 000013
【図１２】
2017086391.tif 000014
【図１３】
2017086391.tif 000015
【図１４】
2017086391.tif 000016
【図１５】
2017086391.tif 000017
【図１６】
2017086391.tif 000018
【図１７】
2017086391.tif 000019
【図１８】
2017086391.tif 000020
【図１９】
2017086391.tif 000021
【図２０】
2017086391.tif 000022
【図２１】
2017086391.tif 000023
【図２２】
2017086391.tif 000024
【図２３】
2017086391.tif 000025
【図２４】
2017086391.tif 000026
【国際調査報告】
2017086391.tif 000027
2017086391.tif 000028