(57)【要約】  最適化装置１は、ベクトル演算プロセッサが実行するベクトル演算において、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、分割部２と、分割ベクトル長に基づいて、ベクトル演算に用いるコードを生成する、生成部３と、を有する。
2020148906.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル演算プロセッサが実行するベクトル演算において、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、分割手段と、
前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、生成手段と、
を有することを特徴とする最適化装置。
【請求項２】
請求項１に記載の最適化装置であって、
前記分割手段は、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化装置。
【請求項３】
請求項１に記載の最適化装置であって、
前記分割手段は、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化装置。
【請求項４】
請求項２又は３に記載の最適化装置であって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とする最適化装置。
【請求項５】
請求項１から４のいずれか一つに記載の最適化装置であって、
前記ベクトル演算に用いるコードをコンパイラで生成する場合、前記ベクトル演算に対応するコードを抽出する、抽出手段と、
ことを特徴とする最適化装置。
【請求項６】
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を有することを特徴とする最適化方法。
【請求項７】
請求項６に記載の最適化方法であって、
前記（ａ）のステップにおいて、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化方法。
【請求項８】
請求項６に記載の最適化方法であって、
前記（ａ）のステップにおいて、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化方法。
【請求項９】
請求項７又は８に記載の最適化方法であって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とする最適化方法。
【請求項１０】
請求項６から９のいずれか一つに記載の最適化方法であって、
（ｃ）前記ベクトル演算に用いるコードをコンパイラで生成する場合、前記ベクトル演算に対応するコードを抽出する、ステップを有する
ことを特徴とする最適化方法。
【請求項１１】
コンピュータに、
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を実行させる命令を含むプログラムを記録しているコンピュータ読み取り可能な記録媒体。
【請求項１２】
請求項１１に記載のコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１３】
請求項１１に記載のコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１４】
請求項１２又は１３に記載のコンピュータ読み取り可能な記録媒体であって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１５】
請求項１１から１４のいずれか一つに記載のコンピュータ読み取り可能な記録媒体であって、
前記プログラムが、前記コンピュータに、
（ｃ）前記ベクトル演算に用いるコードをコンパイラで生成する場合、前記ベクトル演算に対応するコードを抽出する、ステップを実行させる命令を更に含む、
プログラムを記録しているコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを最適化する、最適化装置、最適化方法に関し、更には、これらを実現するためのプログラムを記録しているコンピュータ読み取り可能な記録媒体に関する。
【背景技術】
【０００２】
ベクトル演算は、複数のデータに対して、同一の演算を並列に実行することで、演算を高速化する方式である。また、このようなベクトル演算が実行可能なプロセッサにおいて、ベクトル演算に用いる命令は、生成装置（例えば、コードジェネレータ、コンパイラなど）を用いて、プロセッサの最大ベクトル長に基づいて、生成される。【０００３】
最大ベクトル長を用いる理由は、一命令で多くの演算をする方が、演算効率が向上するためである。ところが、最大ベクトル長を用いた場合、ベクトル演算で扱うベクトル長（トータルベクトル長）を最大ベクトル長に分割すると、演算効率が低下する要因となる、短いベクトル長が残る場合がある。【０００４】
そこで、特許文献１によれば、最大ベクトル長（Ｍ）＜トータルベクトル長ＶＬ＜２倍の最大ベクトル長（２Ｍ）のような条件が成立した場合、トータルベクトル長ＶＬを二等分し、二等分したベクトル長ＶＬ１、ＶＬ２を用いることで、演算効率が低下する短いベクトル長を用いたベクトル演算を回避し、演算効率を向上させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−４０７７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示された技術では、上述した条件以外において、ベクトル演算の演算効率を向上させることができない。【０００７】
本発明の目的の一例は、ベクトル演算の演算効率を向上させる、最適化装置、最適化方法、及びコンピュータ読み取り可能な記録媒体を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の一側面における最適化装置は、
ベクトル演算プロセッサが実行するベクトル演算において、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、分割部と、
前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、生成部と、
を有することを特徴とする。【０００９】
また、上記目的を達成するため、本発明の一側面における最適化方法は、
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を有することを特徴とする。【００１０】
更に、上記目的を達成するため、本発明の一側面におけるプログラムを記録したコンピュータ読み取り可能な記録媒体は、
コンピュータに、
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を実行させる命令を含むプログラムを記録していることを特徴とする。
【発明の効果】
【００１１】
以上のように本発明によれば、ベクトル演算の演算効率を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、最適化装置の一例を示す図である。
【図２】図２は、ベクトル長と演算時間と演算効率との関係を示す図である。
【図３】図３は、トータルベクトル長を最大ベクトル長ずつベクトル演算した場合における、ベクトル長と演算効率との関係を示す図である。
【図４】図４は、トータルベクトル長を分割ベクトル長ずつベクトル演算した場合における、ベクトル長と演算効率との関係を示す図である。
【図５】図５は、最適化装置を有するシステムの一例を示す図である。
【図６】図６は、最適化装置を有するシステムの一例を示す図である。
【図７】図７は、ベクトル命令列に基づくコストの決定を説明するための図である。
【図８】図８は、コスト情報のデータ構造の一例を示す図である。
【図９】図９は、チャンクベクトル長を用いて分割ベクトル長を算出する一例を示した図である。
【図１０】図１０は、システムの動作の一例を示す図である。
【図１１】図１１は、システムの動作の一例を示す図である。
【図１２】図１２は、最適化装置を実現するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１３】
（実施の形態）
以下、本発明の実施の形態について、図１から図１２を参照しながら説明する。
【００１４】
［装置構成］
最初に、図１を用いて、本実施の形態における最適化装置１の構成について説明する。図１は、最適化装置の一例を示す図である。
【００１５】
図１に示す最適化装置は、ベクトル演算の演算効率を向上させる装置である。また、図１に示すように、最適化装置１は、分割部２と、生成部３とを有する。
【００１６】
このうち、分割部２は、ベクトル演算プロセッサが実行するベクトル演算において、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する。生成部３は、分割ベクトル長に基づいて、ベクトル演算に用いるコードを生成する。
【００１７】
ここで、ベクトル演算で扱うトータルベクトル長は、ベクトル演算の対象となる全要素の数を示す。最大ベクトル長は、ベクトル演算プロセッサが同時に演算可能な要素の数を示す。演算効率は、ベクトル長／演算時間で表される。所定値は、高効率でベクトル演算ができる演算効率を示す。
【００１８】
このように、本実施の形態においては、ベクトル演算プロセッサは、ベクトル演算の演算効率が所定値以上で、かつ最大ベクトル長以下に分割した分割ベクトル長ずつ、ベクトル演算を実行するので、演算効率を向上させることができる。
【００１９】
その理由について、図２、図３、図４を用いて説明する。図２は、ベクトル長と演算時間と演算効率との関係を示す図である。図２のＡは、ベクトル長と演算時間との関係を示す図である。図２のＢは、ベクトル長と演算効率との関係を示す図である。
【００２０】
まず、ベクトル演算プロセッサにおいては、図２のＡに示すように、ベクトル長により演算時間が異なる。また、図２のＡに示すように、ベクトル長が短くても、演算時間が短くなるわけではない。更に、図２のＢに示すように、演算効率（＝ベクトル長／演算時間）は、ベクトル長が長いほど演算効率がよくなる。更に、図２のＢに示すように、最大ベクトル長以外でも、演算効率がよい場合がある。
【００２１】
図３は、トータルベクトル長を最大ベクトル長ずつベクトル演算した場合における、ベクトル長と演算効率との関係を示す図である。図３のＡ、Ｂは、トータルベクトル長１０２６に対して、最大ベクトル長２５６ずつベクトル演算をした結果、最後に演算効率が低効率のベクトル長２が残り、全体的にベクトル演算の演算効率が低下する場合を示す図である。
【００２２】
対して、図４は、トータルベクトル長を分割ベクトル長ずつベクトル演算した場合における、ベクトル長と演算効率との関係を示す図である。図４のＡ、Ｂは、トータルベクトル長１０２６に対して、分割ベクトル長２２６、２２４、１９２、１９２、１９２ずつベクトル演算をした結果、全体的にベクトル演算の演算効率が低下しない場合を示す図である。
【００２３】
すなわち、演算効率が高効率の分割ベクトル長を用いて、所定値以上の演算効率でベクトル演算を実行することで、図４に示すように、全体的にベクトル演算の演算効率を向上させることができる。
【００２４】
［システム構成］
続いて、図５、図６を用いて、本実施の形態における最適化装置１の構成をより具体的に説明する。図５、図６は、最適化装置を有するシステムの一例を示す図である。
【００２５】
（１）システム５０について説明する。
図５に示す本実施の形態におけるシステム５０は、コードジェネレータ５１とコンパイラ５２とを有する。また、図５に示すコードジェネレータ５１は、最適化装置１を有する。
【００２６】
コードジェネレータ５１は、入力されたデータに基づいてコードを生成する。具体的には、コードジェネレータ５１は、ベクトル演算に用いるパラメータなどを含むデータ５３を取得し、ベクトル演算プロセッサで用いるバイナリ５５を生成するために用いるコード５４を生成する。また、コードジェネレータ５１は、演算効率が所定値以上になるような分割ベクトル長を決定して、決定した分割ベクトル長に基づいて、ベクトル演算用のコードを生成する。
【００２７】
コンパイラ５２は、取得したコード５４に基づいてバイナリ５５を生成する。具体的には、コンパイラ５２は、コードジェネレータ５１が生成したコード５４を用いて、ベクトル演算プロセッサで用いるバイナリ５５を生成する。
【００２８】
（２）システム６０について説明する。
図６に示す本実施の形態におけるシステム６０は、コードジェネレータ６１とコンパイラ６２とを有する。また、図６に示すコンパイラ６２は、最適化装置１を有する。コンパイラ６２は、分割部２、生成部３に加えて、抽出部６４、変更部６５を有する。
【００２９】
コードジェネレータ６１は、入力されたデータに基づいてコードを生成する。具体的には、コードジェネレータ６１は、ベクトル演算に用いるパラメータなどを含むデータ５３を取得し、ベクトル演算プロセッサで用いるバイナリ５５を生成するためのコード６３を生成する。
【００３０】
コンパイラ６２は、取得したコード６３に基づいてバイナリ５５を生成する。具体的には、コンパイラ６２は、コードジェネレータ６１が生成したコード６３を用いて、ベクトル演算プロセッサで用いるバイナリ５５を生成する。
【００３１】
また、コンパイラ６２は、まず、コード６３からベクトル演算で用いるコードを抽出する。続いて、コンパイラ６２は、抽出したコードを用いて、演算効率が所定値以上になるような分割ベクトル長を決定して、決定した分割ベクトル長に基づいて、ベクトル演算に用いるコードを生成する。
【００３２】
その後、コンパイラ６２は、コードジェネレータ６１で生成したコード６３に含まれる抽出したベクトル演算に用いるコードを、コンパイラ６２で生成したベクトル演算に用いるコードに変更して、コード５４を生成する。図５を参照。
【００３３】
具体的に、コンパイラ６２は、コード６３に含まれる、従来のような、最大ベクトル長を用いたベクトル演算に対応するコードを、分割ベクトル長を用いたベクトル演算に対応するコードに変換する。
【００３４】
その後、コンパイラ６２は、コード５４を用いて、ベクトル演算プロセッサで用いるバイナリ５５を生成する。
【００３５】
抽出部６４は、ベクトル演算に用いるコードをコンパイラ６２で生成する場合、まず、ベクトル演算に対応するコードを抽出する。続いて、抽出部６４は、抽出したコードから、分割ベクトル長を決めるために用いるパラメータを抽出する。その後、抽出部６４は、抽出したパラメータを分割部２へ出力する。
【００３６】
変更部６５は、ベクトル演算に用いるバイナリをコンパイラ６２で生成する場合、コードジェネレータ６１で生成したコード６３に含まれる抽出したベクトル演算に用いるコードを、コンパイラ６２で生成したベクトル演算に用いるコードに変更して、コード５４を生成する。その後、変更部６５は、生成したコード５４をコンパイラ６２へ出力する。
【００３７】
最適化について具体的に説明をする。
分割部２は、ベクトル演算に関するパラメータ（例えば、トータルベクトル長、最大ベクトル長など）を取得して、あらかじめ不図示の記憶部に記憶されているコストを表す情報（コスト）を用いて、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する。記憶部は、システム５０又は６０のいずれかに設けてもよいし、システム５０又は６０の外部に設けてもよい。
【００３８】
具体的には、分割部２は、（Ａ）ベクトル長ごとに関連付けたコストを用いて、トータルベクトル長を分割ベクトル長に分割する。又は、分割部２は、（Ｂ）最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、トータルベクトル長を分割ベクトル長に分割する。
【００３９】
コストは、ベクトル長ごとの演算時間に基づいて設定する。具体的には、最小ベクトル長（一要素）から最大ベクトル長までのベクトル長それぞれについて、実験、シミュレーションなどによりベクトル演算を実行し、ベクトル長ごとの演算時間を計測し、計測した演算時間それぞれをベクトル長ごとのコストとする。
【００４０】
なお、ベクトル演算に用いるコードに含まれるベクトル命令列に基づいてコストを決定してもよい。具体的に図７、図８を用いて説明をする。図７は、ベクトル命令列に基づくコストの決定を説明するための図である。図８は、コスト情報のデータ構造の一例を示す図である。
【００４１】
ベクトル命令列とは、例えば、図７に示すような最内ループのベクトル命令列（スカラ命令は省略）が考えられる。また、図７においてベクトル命令は、「ｖｌｄ」「ｐｖｆｍａｄ」である。例えば、図８に示すようなコスト情報８１、８２が考えられる。
【００４２】
また、コスト情報８１、８２を参照して、コスト情報８１、８２のＣｉ（ｉ＝１〜２５６）の最大値を用いて、コスト情報８３を生成し、図７に示したベクトル命令列を含むコード自体のコストとしてもよい。なお、図８の例では、最大値を用いたが、和を用いてもよい。
【００４３】
（Ａ）の分割方法について説明する。
分割部２は、トータルベクトル長ＶＬＴｏｔａｌと、最大ベクトル長ＶＬＭａｘと、ベクトル長ｉ（＝１、２・・・ＶＬＭａｘ）ごとに設定されたコストＣｉとを用いて、分割ベクトル長を決定し、決定した分割ベクトル長ごとの数Ｘｉを算出する。具体的には、分割部２は、数１に示すような整数計画問題を解くことで、分割ベクトル長ごとの数Ｘｉを算出する。
【００４４】
（数１）
変数      ：Ｘｉ（ｉ＝１、２・・・ＶＬＭａｘ）
目的関数  ：ｓｕｍ（Ｃｉ×Ｘｉ）
制約条件  ：Ｘｉ≧０，ｓｕｍ（ｉ×Ｘｉ）＝ＶＬＴｏｔａｌ
【００４５】
例えば、トータルベクトル長ＶＬＴｏｔａｌ＝１０２６で、最大ベクトル長ＶＬＭａｘ＝２５６で、コストＣ１・・・Ｃ１９２＝９．０［ｓ］、コストＣ１９３・・・Ｃ２２４＝１０．０［ｓ］、コストＣ２２５・・・Ｃ２５６＝１０．９［ｓ］である場合においては、数２に示すように、分割ベクトル長ごとに数Ｘｉが算出される。
【００４６】
（数２）
変数      ：Ｘｉ（ｉ＝１、２・・・２５６）
目的関数  ：ｓｕｍ（Ｃｉ×Ｘｉ）
制約条件  ：Ｘｉ≧０，ｓｕｍ（ｉ×Ｘｉ）＝１０２６
分割ベクトル長ごとの数：
Ｘ１８７＝１
Ｘ１８８＝２
Ｘ２０７＝１
Ｘ２５６＝１
【００４７】
すなわち、トータルベクトル長を、分割ベクトル長１８７、１８８、１８８、２０７、２５６に分割する。このようにすることで、ベクトル演算プロセッサは、高効率でベクトル演算を行うことができる。
【００４８】
［変形例］
（Ａ）の変形例として、基準となる分割ベクトル長単位で、トータルベクトル長を分割してもよい。なお、分割において、基準となる分割ベクトル長より小さいベクトル長の余りがでた場合、最大ベクトル長以下になるように、余りのベクトル長を分割して基準となる分割ベクトル長に加える。
【００４９】
例えば、トータルベクトル長ＶＬＴｏｔａｌ＝１０２６を、最大ベクトル長ＶＬＭａｘ＝２５６で、基準となる分割ベクトル長を１９２で分割する。そうすると、トータルベクトル長ＶＬＴｏｔａｌは、１９２、１９２、１９２、１９２、１９２、６６に分割される。
【００５０】
しかし、６６は低効率であるので、１９２に６６を加える（１９２＋６６＝２５８）。ところが、２５８は、最大ベクトル長２５６より大きいので、２５８から２５６を差し引く（２５８−２５６＝２）。そして、他の１９２に２を加えて１９４とする。
【００５１】
すなわち、トータルベクトル長を、分割ベクトル長２５６、１９４、１９２、１９２、１９２に分割する。このようにすることで、ベクトル演算プロセッサは、高効率でベクトル演算を行うことができる。
【００５２】
（Ｂ）の分割方法について説明する。
分割部２は、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、トータルベクトル長を分割ベクトル長に分割する。チャンクベクトル長は、例えば、ベクトルパイプラインの数に基づいて設定する。
【００５３】
分割部２は、トータルベクトル長ＶＬＴｏｔａｌと、最大ベクトル長ＶＬＭａｘと、チャンクベクトル長と、チャンクベクトル長ごとに設定されたコストとを用いて、分割ベクトル長を決定し、決定した分割ベクトル長ごとの数Ｙｊを算出する。
【００５４】
例えば、トータルベクトル長ＶＬＴｏｔａｌ＝１０２６で、最大ベクトル長ＶＬＭａｘ＝２５６で、ベクトルパイプラインの数が３２である場合、チャンクベクトル長の数は８（＝２５６／３２）となる。すなわち、チャンクベクトル長ｊ（＝１・・・８）は、３２、６４、９６、１２８、１６０、１９２、２２４、２５６となる。
【００５５】
また、コストＣｊはチャンクベクトル長ｊごとに設定する。例えば、チャンクベクトル長ｊ（＝１・・・８）ごとに、コストＣ１・・・Ｃ６＝９．０［ｓ］、コストＣ７＝１０．０［ｓ］、コストＣ８＝１０．９［ｓ］を設定する。
【００５６】
なお、チャンクベクトル長ごとのコストは、チャンクベクトル長ごとの演算時間に基づいて設定する。具体的には、最小ベクトル長（一要素）から最大ベクトル長までのチャンクベクトル長それぞれについて、実験、シミュレーションなどによりベクトル演算を実行し、チャンクベクトル長ごとの演算時間を計測し、それらをチャンクベクトル長ごとのコストとする。
【００５７】
続いて、分割部２は、図９、数３に示すように、分割ベクトル長を決定する。図９は、チャンクベクトル長を用いた分割ベクトル長の算出の一例を示した図である。ところで、トータルベクトル長１０２６は、３２で割り切れない（１０２６／３２＝３２余り２）ため、余り２を切り上げて３３とする。
【００５８】
（数３）
変数      ：Ｙｊ（ｊ＝１、２・・・８）
目的関数  ：ｓｕｍ（Ｃｊ×Ｙｊ）
制約条件  ：Ｙｊ≧０，ｓｕｍ（ｊ×Ｙｊ）＝３３
チャンクベクトル長ごとの数：
Ｙ１＝０
Ｙ２＝０
Ｙ３＝０
Ｙ４＝０
Ｙ５＝０
Ｙ６＝３
Ｙ７＝１
Ｙ８＝１
分割ベクトル長ごとの数：
Ｘ１９２＝３
Ｘ２２４＝１
Ｘ２５６＝１  →  Ｘ２２６＝１  ※
※  Ｘ２２６：２５６−（３２−２）＝２２６
【００５９】
すなわち、トータルベクトル長を、分割ベクトル長１９２、１９２、１９２、２２４、２５６に分割する。このようにすることで、ベクトル演算プロセッサは、高効率でベクトル演算を行うことができる。
【００６０】
生成部３は、図５に示すシステム５０又は６０においては、分割部２において決定した分割ベクトル長に基づいて、ベクトル演算に用いるコードを生成する。具体的には、生成部３は、まず、分割部２から分割ベクトル長に関する情報を取得する。続いて、生成部３は、取得した分割ベクトル長に関する情報を用いて、ベクトル演算に用いるコードを生成する。
【００６１】
［装置動作］
次に、本発明の実施の形態における最適化装置の動作について図１０、図１１を用いて説明する。図１０、１１は、システムの動作の一例を示す図である。以下の説明においては、適宜図１から図９を参酌する。また、本実施の形態では、最適化装置を動作させることによって、最適化方法が実施される。よって、本実施の形態における最適化方法の説明は、以下の最適化装置の動作説明に代える。
【００６２】
（１）システム５０の動作について説明する。
図１０を用いて、図５に示したシステム５０における最適化装置１の動作について説明する。図１０に示すように、最初に、コードジェネレータ５１は、入力されたデータ５３に基づいてコードを生成する（ステップＡ１）。具体的には、ステップＡ１において、コードジェネレータ５１は、ベクトル演算に用いるパラメータを含むデータ５３を取得する。ベクトル演算に用いるパラメータは、例えば、トータルベクトル長、最大ベクトル長などを含むデータである。
【００６３】
続いて、コードジェネレータ５１が有する分割部２は、演算効率が所定値以上になるような分割ベクトル長を分割する（ステップＡ２）。具体的には、ステップＡ２において、分割部２は、まず、ベクトル演算に関するパラメータ（例えば、トータルベクトル長、最大ベクトル長など）を取得する。続いて、分割部２は、あらかじめ不図示の記憶部に記憶されているコストを用いて、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する。記憶部は、システム５０又は６０のいずれかに設けてもよいし、システム５０又は６０の外部に設けてもよい。
【００６４】
例えば、ステップＡ２において、分割部２は、（Ａ）ベクトル長ごとに関連付けたコストを用いて、トータルベクトル長を分割ベクトル長に分割する。
【００６５】
又は、ステップＡ２において、分割部２は、（Ｂ）最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、トータルベクトル長を分割ベクトル長に分割する。
【００６６】
続いて、コードジェネレータ５１が有する生成部３は、決定した分割ベクトル長に基づいて、ベクトル演算用のコードを生成する（ステップＡ３）。具体的には、ステップＡ３において、生成部３は、まず、分割部２から分割ベクトル長に関する情報を取得する。続いて、生成部３は、取得した分割ベクトル長に関する情報を用いて、ベクトル演算に用いるコードを生成する。その後、コードジェネレータ５１は、ベクトル演算に用いるコードを含むコード５４を、コンパイラ５２へ出力する。
【００６７】
続いて、コンパイラ５２は、取得したコード５４に基づいてバイナリ５５を生成する。具体的には、コンパイラ５２は、コードジェネレータ５１が生成したコード５４を用いて、ベクトル演算プロセッサで用いるバイナリ５５を生成する（ステップＡ４）。
【００６８】
（２）システム６０の動作について説明する。
図１１を用いて、図８に示したシステム６０における最適化装置１の動作について説明する。図１１に示すように、最初に、コードジェネレータ６１は、入力されたデータ５３に基づいてコードを生成する（ステップＢ１）。具体的には、ステップＢ１において、コードジェネレータ６１は、入力されたパラメータなどを含むデータ５３を取得する。
【００６９】
続いて、コードジェネレータ６１は、ベクトル演算プロセッサで用いるバイナリ５５を生成するために用いられるコード６３を生成する（ステップＢ２）。
【００７０】
続いて、コンパイラ６２は、コードジェネレータ６１からコード６３を取得する（ステップＢ３）。続いて、コンパイラ６２が有する抽出部６４は、ベクトル演算に対応するコードを抽出する（ステップＢ４）。続いて、抽出部６４は、抽出したコードから、分割ベクトル長を決めるために用いるパラメータを抽出する（ステップＢ４）。その後、抽出部６４は、抽出したパラメータを分割部２へ出力する。
【００７１】
続いて、コンパイラ６２が有する分割部２は、ベクトル演算に関するパラメータを取得する（ステップＢ５）。続いて、分割部２は、コストを用いて、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する（ステップＢ６）。
【００７２】
具体的には、ステップＢ６において、分割部２は、まず、ベクトル演算に関するパラメータ（例えば、トータルベクトル長、最大ベクトル長など）を取得する。続いて、分割部２は、あらかじめ不図示の記憶部に記憶されているコストを用いて、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する。記憶部は、システム５０又は６０のいずれかに設けてもよいし、システム５０又は６０の外部に設けてもよい。
【００７３】
例えば、ステップＢ６において、分割部２は、（Ａ）ベクトル長ごとに関連付けたコストを用いて、トータルベクトル長を分割ベクトル長に分割する。
【００７４】
又は、ステップＢ６において、分割部２は、（Ｂ）最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、トータルベクトル長を分割ベクトル長に分割する。
【００７５】
続いて、コンパイラ６２が有する生成部３は、決定した分割ベクトル長に基づいて、ベクトル演算用のコード５４を生成する（ステップＢ７）。具体的には、ステップＢ７において、生成部３は、まず、分割部２から分割ベクトル長などの情報を取得する。続いて、生成部３は、取得した分割ベクトル長などの情報を用いて、ベクトル演算に用いるコードを生成する。
【００７６】
続いて、変更部６５は、コードジェネレータ６１で生成したコード６３に含まれる抽出したベクトル演算に用いるコードを、コンパイラ６２で生成したベクトル演算に用いるコードに変更して、コード５４を生成する（ステップＢ８）。その後、変更部６５は、コード５４をコンパイラ６２へ出力する。
【００７７】
続いて、コンパイラ６２は、コードジェネレータ６１が生成したコード６３を用いて、ベクトル演算プロセッサで用いるバイナリ５５を生成する（ステップＢ９）。
【００７８】
［本実施の形態の効果］
以上のように本実施の形態によれば、ベクトル演算プロセッサは、ベクトル演算の演算効率が所定値以上で、かつ最大ベクトル長以下に分割した分割ベクトル長ずつ、ベクトル演算を実行するので、演算効率を向上させることができる。
【００７９】
また、コストを用いて、ベクトル演算の演算効率が所定値以上で、かつ最大ベクトル長以下に分割した、分割ベクトル長を生成することができる。
【００８０】
［プログラム］
本発明の実施の形態におけるプログラムは、コンピュータに、図１０に示すステップＡ１からＡ４、又は、図１１に示すステップＢ１からＢ９を実行させるプログラムであればよい。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態における最適化装置と最適化方法とを実現することができる。この場合、コンピュータのプロセッサは、図５に示す分割部２、生成部３、又は、図４に示す分割部２、生成部３、抽出部６４、変更部６５として機能し、処理を行なう。
【００８１】
また、本実施の形態におけるプログラムは、複数のコンピュータによって構築されたコンピュータシステムによって実行されてもよい。この場合は、例えば、各コンピュータが、それぞれ、分割部２、生成部３、抽出部６４、変更部６５のいずれかとして機能してもよい。
【００８２】
［物理構成］
ここで、実施の形態におけるプログラムを実行することによって、最適化装置を実現するコンピュータについて図１２を用いて説明する。図１２は、本発明の実施の形態における最適化装置を実現するコンピュータの一例を示すブロック図である。
【００８３】
図１２に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メインメモリ１１２と、記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。なお、コンピュータ１１０は、ＣＰＵ１１１に加えて、又はＣＰＵ１１１に代えて、ＧＰＵ（Graphics Processing Unit）、又はＦＰＧＡ（Field-Programmable Gate Array）を備えていてもよい。
【００８４】
ＣＰＵ１１１は、記憶装置１１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）などの揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであってもよい。
【００８５】
また、記憶装置１１３の具体例としては、ハードディスクドライブの他、フラッシュメモリなどの半導体記憶装置があげられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。
【００８６】
データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【００８７】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）などの汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）などの磁気記録媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記録媒体があげられる。
【００８８】
なお、本実施の形態における最適化装置１は、プログラムがインストールされたコンピュータではなく、各部に対応したハードウェアを用いることによっても実現可能である。更に、最適化装置１は、一部がプログラムで実現され、残りの部分がハードウェアで実現されていてもよい。
【００８９】
［付記］
以上の実施の形態に関し、更に以下の付記を開示する。上述した実施の形態の一部又は全部は、以下に記載する（付記１）から（付記１５）により表現することができるが、以下の記載に限定されるものではない。
【００９０】
（付記１）
ベクトル演算プロセッサが実行するベクトル演算において、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、分割部と、
前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、生成部と、
を有することを特徴とする最適化装置。
【００９１】
（付記２）
付記１に記載の最適化装置であって、
前記分割部は、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化装置。
【００９２】
（付記３）
付記１に記載の最適化装置であって、
前記分割部は、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化装置。
【００９３】
（付記４）
付記２又は３に記載の最適化装置であって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とする最適化装置。
【００９４】
（付記５）
付記１から４のいずれか一つに記載の最適化装置であって、
前記ベクトル演算に用いるコードをコンパイラで生成する場合、前記ベクトル演算に対応するコードを抽出する、抽出部と、
ことを特徴とする最適化装置。
【００９５】
（付記６）
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を有することを特徴とする最適化方法。
【００９６】
（付記７）
付記６に記載の最適化方法であって、
前記（ａ）のステップにおいて、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化方法。
【００９７】
（付記８）
付記６に記載の最適化方法であって、
前記（ａ）のステップにおいて、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化方法。
【００９８】
（付記９）
付記７又は８に記載の最適化方法であって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とする最適化方法。
【００９９】
（付記１０）
付記６から９のいずれか一つに記載の最適化方法であって、
（ｃ）前記ベクトル演算に用いるコードをコンパイラで生成する場合、前記ベクトル演算に対応するコードを抽出する、ステップを有する
ことを特徴とする最適化方法。
【０１００】
（付記１１）
コンピュータに、
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を実行させる命令を含むプログラムを記録しているコンピュータ読み取り可能な記録媒体。
【０１０１】
（付記１２）
付記１１に記載のコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とするコンピュータ読み取り可能な記録媒体。
【０１０２】
（付記１３）
付記１１に記載のコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とするコンピュータ読み取り可能な記録媒体。
【０１０３】
（付記１４）
付記１２又は１３に記載のコンピュータ読み取り可能な記録媒体であって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とするコンピュータ読み取り可能な記録媒体。
【０１０４】
（付記１５）
付記１１から１４のいずれか一つに記載のコンピュータ読み取り可能な記録媒体であって、
前記プログラムが、前記コンピュータに、
（ｃ）前記ベクトル演算に用いるコードをコンパイラで生成する場合、前記ベクトル演算に対応するコードを抽出する、ステップを実行させる命令を更に含む、
プログラムを記録しているコンピュータ読み取り可能な記録媒体。
【０１０５】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【０１０６】
以上のように本発明によれば、ベクトル演算の演算効率を向上させることができる。本発明は、ベクトル演算が必要な分野において有用である。
【符号の説明】
【０１０７】
１  最適化装置
２  分割部
３  生成部
５０  システム
５１  コードジェネレータ
５２  コンパイラ
５３  データ
５４  コード
５５  バイナリ
６０  システム
６１  コードジェネレータ
６２  コンパイラ
６３  コード
６４  抽出部
６５  変更部
１１０  コンピュータ
１１１  ＣＰＵ
１１２  メインメモリ
１１３  記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
【図１】
2020148906.tif 000003
【図２】
2020148906.tif 000004
【図３】
2020148906.tif 000005
【図４】
2020148906.tif 000006
【図５】
2020148906.tif 000007
【図６】
2020148906.tif 000008
【図７】
2020148906.tif 000009
【図８】
2020148906.tif 000010
【図９】
2020148906.tif 000011
【図１０】
2020148906.tif 000012
【図１１】
2020148906.tif 000013
【図１２】
2020148906.tif 000014
【手続補正書】
【提出日】令和3年6月29日(2021.6.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ベクトル演算プロセッサが実行するベクトル演算において、演算効率が所定値以上になるように、トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、分割手段と、
前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、生成手段と、
を有することを特徴とする最適化装置。
【請求項２】
請求項１に記載の最適化装置であって、
前記分割手段は、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化装置。
【請求項３】
請求項１に記載の最適化装置であって、
前記分割手段は、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とする最適化装置。
【請求項４】
請求項２又は３に記載の最適化装置であって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とする最適化装置。
【請求項５】
請求項１から４のいずれか一つに記載の最適化装置であって、
前記ベクトル演算に用いるコードをコンパイラで生成する場合、前記ベクトル演算に対応するコードを抽出する、抽出手段と、
ことを特徴とする最適化装置。
【請求項６】
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を有することを特徴とする最適化方法。
【請求項７】
コンピュータに、
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を実行させる命令を含むプログラム。
【請求項８】
請求項７に記載のプログラムであって、
前記（ａ）のステップにおいて、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とするプログラム。
【請求項９】
請求項７に記載のプログラムであって、
前記（ａ）のステップにおいて、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とするプログラム。
【請求項１０】
請求項８又は９に記載のプログラムであって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とするプログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
本発明は、プログラムを最適化する、最適化装置、最適化方法に関し、更には、これらを実現するためのプログラムに関する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
ベクトル演算の演算効率を向上させる、最適化装置、最適化方法、及びプログラムを提供することにある。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、
コンピュータに、
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を実行させることを特徴とする。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１００
【補正方法】変更
【補正の内容】
【０１００】
（付記１１）
コンピュータに、
（ａ）ベクトル演算プロセッサが実行する、ベクトル演算で用いるトータルベクトル長を、演算効率が所定値以上になるように、前記トータルベクトル長を最大ベクトル長以下の分割ベクトル長に分割する、ステップと、
（ｂ）前記分割ベクトル長に基づいて、前記ベクトル演算に用いるコードを生成する、ステップと、
を実行させる命令を含むプログラム。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１０１
【補正方法】変更
【補正の内容】
【０１０１】
（付記１２）
付記１１に記載のプログラムであって、
前記（ａ）のステップにおいて、ベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とするプログラム。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０１０２
【補正方法】変更
【補正の内容】
【０１０２】
（付記１３）
付記１１に記載のプログラムであって、
前記（ａ）のステップにおいて、最大ベクトル長を基準に分割したチャンクベクトル長ごとに関連付けたコストを用いて、前記トータルベクトル長を前記分割ベクトル長に分割する
ことを特徴とするプログラム。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０１０３
【補正方法】変更
【補正の内容】
【０１０３】
（付記１４）
付記１２又は１３に記載のプログラムであって、
前記コストは、前記コード又はベクトル演算時間に基づいて設定する
ことを特徴とするプログラム。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０１０４
【補正方法】変更
【補正の内容】
【０１０４】
（付記１５）
付記１１から１４のいずれか一つに記載のプログラムであって、
前記プログラムが、前記コンピュータに、
（ｃ）前記ベクトル演算に用いるコードをコンパイラで生成する場合、前記ベクトル演算に対応するコードを抽出する、ステップを実行させる命令を更に含む、
プログラム。
【国際調査報告】
2020148906.tif 000015
2020148906.tif 000016
2020148906.tif 000017