(57)【要約】【課題】パラメータの最適化が容易な計算装置を提供する。【解決手段】計算装置１は、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれているプログラムが入力されると、指定子によって指定される領域とパラメータとについての、実測による最適化を実行するためのプログラムを生成するプログラム生成部６を備えている。例えば、プログラム生成部６は、指定子によって指定される領域を含むようなサブプログラムと、サブプログラムをパラメータごとに呼び出して実際の所要時間を計測するための実測ルーチンと、実測ルーチンにて計測した所要時間から最適なパラメータを推定するための推定ルーチンとを作成する。【選択図】  図１
2004355144.tif 000002
【特許請求の範囲】
【請求項１】
入力されるプログラムに含まれるパラメータの最適化を行うための計算装置において、
最適化を行う上記プログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成するプログラム生成部を備えていることを特徴とする計算装置。
【請求項２】
上記プログラム生成部は、入力される上記プログラムから上記指定子によって指定される上記領域と上記パラメータとを抽出する指定子解析手段と、上記指定子解析手段にて抽出された上記領域を含むサブプログラムを生成し、上記サブプログラムを呼び出して、上記パラメータについての実測による最適化を実行するためのメインプログラムを生成する、プログラム作成手段とを含んでいることを特徴とする、請求項１に記載の計算装置。
【請求項３】
上記プログラム作成手段は、上記メインプログラムから呼び出す、または上記メインプログラムに含ませるための、上記パラメータごとに上記サブプログラムを呼び出して所要時間を計測する実測ルーチンと、上記実測ルーチンにて計測した上記所要時間を用いて最適なパラメータを推定する推定ルーチンとを作成することを特徴とする請求項２に記載の計算装置。
【請求項４】
上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムを生成することを特徴とする請求項３に記載の計算装置。
【請求項５】
上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムか、または、上記ループ内において上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムかのいずれかを、上記指定子に応じて選択して生成することを特徴とする請求項３に記載の計算装置。
【請求項６】
上記パラメータごとに計測した上記所要時間を近似するためのコスト定義関数を含むコスト定義関数ライブラリを備えていることを特徴とする請求項３ないし５のいずれか１項に記載の計算装置。
【請求項７】
計測した上記所要時間を、上記コスト定義関数ライブラリ中に含まれるコスト定義関数の全てを順次用いて近似して、そのうちから最も近似精度のよいコスト定義関数を選択するコスト定義関数決定部を備えていることを特徴とする請求項６に記載の計算装置。
【請求項８】
上記指定子解析手段にて抽出した上記領域と上記パラメータとを記憶するチューニング情報データベースを有しており、
上記プログラム作成手段と上記コスト定義関数決定部とが、上記チューニング情報データベースを参照して上記領域または上記パラメータを取得することを特徴とする請求項７に記載の計算装置。
【請求項９】
計算装置に入力されるプログラムに含まれるパラメータの最適化を行うための計算方法において、
最適化を行う上記プログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成する工程と、
上記生成する工程にて得た上記プログラムを実行して最適化を行う工程とを含んでいることを特徴とする計算方法。
【請求項１０】
上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムを生成することを特徴とする請求項９に記載の計算方法。
【請求項１１】
上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムか、または上記ループ内にて上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムかのいずれかを、上記指定子に応じて選択して生成することを特徴とする請求項９に記載の計算方法。
【請求項１２】
コンピュータを、請求項１ないし８のいずれか１項に記載の計算装置の各手段として動作させるためのプログラム。
【請求項１３】
請求項１２に記載のプログラムをコンピュータ読み取り可能に記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムに含まれるパラメータの最適化を行うための計算装置、計算方法、プログラムおよび記録媒体に関するものである。
【０００２】
【従来の技術】
従来、コンピュータのような計算装置において、実行するソフトウェアプログラムを最適化する際には、最適化するためのパラメータをユーザが指定して、そのパラメータについての最適化処理をユーザが順次手作業で指示するようになっていた。
【０００３】
例えば、ユーザは、プログラムについてチューニング（最適化）すべきパラメータを、手作業で登録する。さらには、実際に最適化を行うために、例えば、チューニングを行うための前処理、実際のチューニング方法、およびチューニングしたパラメータの利用のための処理などについて、コンピュータに対してそれぞれ指示する必要がある。
【０００４】
なお、このようなチューニングを行うための構成の一例として、日本国の公開特許公報「特開２０００−２７６４５４号公報（公開日：２０００年１０月６日）」には、パラメータを調節してインストールを行う機能を有するソフトウェアの構成方法が記載されている。
【０００５】
【特許文献１】
特開２０００−２７６４５４号公報
【０００６】
【発明が解決しようとする課題】
しかしながら、上述の従来の構成によれば、パラメータを最適化する際に、開発時間と開発費用の増大、機能拡張性の低さ、およびバグ混入の可能性の高さなどの問題を生ずる。
【０００７】
すなわち、従来の構成によれば、パラメータの登録の後にも、実際にパラメータの最適化を達成するために、種々の設定が必要となる。したがって、パラメータを最適化する際には、開発時間と開発費用の増大、機能拡張性の低さ、およびバグ混入の可能性の高さなどの問題を生ずることになる。
【０００８】
また、例えば、最適なパラメータ推定のための最適化問題求解処理において、設定を手作業で行うため、通常は単一のコスト定義関数による推定機能しか実現されない。このため、パラメータ推定機能が低いという問題も生ずる。
【０００９】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、パラメータの最適化が容易な計算装置、計算方法、プログラムおよび記録媒体を提供することにある。
【００１０】
【課題を解決するための手段】
本発明に係る計算装置は、上記課題を解決するために、入力されるプログラムに含まれるパラメータの最適化を行うための計算装置において、最適化を行う上記プログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成するプログラム生成部を備えていることを特徴としている。
【００１１】
この計算装置は、入力されるプログラムについての最適化を行うものである。より詳細には、この計算装置は、入力されるプログラムに所定の指定子が含まれてことを検出すると、それに応じて、このプログラムの最適化を実際に実行するためのプログラムを生成するプログラム生成部を備えている。プログラム生成部は、この指定子によって指定される領域についての最適化を、指定子によって指定されるパラメータについて行うための新たなプログラムを生成する。なお、パラメータの指定には、どの変数を指定するかというパラメータの種類だけでなく、パラメータの範囲の指定が含まれていてもよい。また、プログラムの生成には、プログラムの書き換えをも含むものとする。
【００１２】
例えば、プログラム生成部は、指定子によって指定される領域を含むようなサブプログラムを作成する。例えば、指定子によって、パラメータとしてのループアンローリング段数の最適化が指定され、指定される領域がループ処理である場合には、引数として指定されるループアンローリング段数に応じたループ処理を実行するサブプログラムを作成する。すなわち、サブプログラムとは、例えば調節するためのパラメータを引数として有しており、指定子によって指定された領域についての処理をこのパラメータに応じて実行するプログラムである。また、このサブプログラムをパラメータごとに呼び出して実際の所要時間を計測するための実測ルーチンを作成する。また、実測ルーチンにて計測した所要時間から最適なパラメータを推定するための推定ルーチンを作成する。
【００１３】
このため、この計算装置に対して、所定の指定子を記載したプログラムを入力すれば、このプログラムの指定した領域を指定したパラメータについて最適化するためのプログラムを得ることができる。
【００１４】
計算装置は、プログラム生成部の生成したプログラムを実行形式に翻訳するコンパイラを備えていてもよい。また、計算装置は、実行形式を実行するプロセッサを備えていてもよく、コンパイラの生成した実行形式をプロセッサにて実行して実際に最適化を行ってもよい。または、計算装置は、プログラム生成部の生成したプログラムを外部の他の計算装置に送信して、実行形式への翻訳および実際の最適化を行うようにしてもよい。いずれにせよ、本発明に係る計算装置は、所定の形式のプログラムを入力すると、このプログラムから新たなプログラムを生成するプログラム生成部を備えていればよい。
【００１５】
例えば、プログラム生成部の生成したサブプログラム、実測ルーチン、推定ルーチンが、計算装置において実行可能形式に翻訳され、実測ルーチン、推定ルーチンが実行されれば、最適なパラメータを得ることができる。
【００１６】
ここで、従来の計算装置は、入力されるプログラムの最適化を行う場合には、処理の各段階において、ユーザによる所定の指示が必要となっていた。このため、設定に時間を要し、開発時間と開発費用とを増大させていた。また、ユーザによる設定には種々の制約があり、便利なものとはいえないため、機能拡張性も低くなっていた。また、ユーザによる設定にミスが含まれて、バグが混入する可能性があった。
【００１７】
なお、上記の計算装置を、自動チューニング機能を付加したプログラムを生成する生成手段を備えたプログラミング言語処理装置である、と表現することもできる。
【００１８】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記プログラム生成部は、入力される上記プログラムから上記指定子によって指定される上記領域と上記パラメータとを抽出する指定子解析手段と、上記指定子解析手段にて抽出された上記領域を含むサブプログラムを生成し、上記サブプログラムを呼び出して、上記パラメータについての実測による最適化を実行するためのメインプログラムを生成する、プログラム作成手段とを含んでいることを特徴としている。
【００１９】
この構成によって、上述の本発明に係る計算装置を実現できる。例えば、メインプログラムには、サブプログラムをパラメータごとに呼び出して実際の所要時間を計測するための実測ルーチンと、実測ルーチンにて計測した所要時間から最適なパラメータを推定するための推定ルーチンとを含ませればよい。
【００２０】
なお、ここでいうメインプログラムは、いわゆるメインルーチンに限るものではなく、メインルーチンから呼び出されるサブルーチンをも含むものであってもよい。すなわち、上述のように、サブプログラムとは、最適化を行うための領域を抽出して生成したものであり、例えば最適化するためのパラメータを引数としてその領域についての処理を実行するものであるので、メインプログラムはそのサブプログラムを呼び出すものであればよい。したがって、メインルーチンに限るものではなく、メインルーチンから呼び出されるサブルーチンが、メインプログラムとして、上述のサブプログラムを呼び出す構成であってもよい。
【００２１】
また、プログラム作成手段がメインプログラムとサブプログラムとを作成する順序は、どのようなものであってもよく、例えばサブプログラムを作成した後にメインプログラムを作成してもよいし、または例えばメインプログラムを作成した後にサブプログラムを作成してもよい。
【００２２】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記プログラム作成手段は、上記メインプログラムから呼び出す、または上記メインプログラムに含ませるための、上記パラメータごとに上記サブプログラムを呼び出して所要時間を計測する実測ルーチンと、上記実測ルーチンにて計測した上記所要時間を用いて最適なパラメータを推定する推定ルーチンとを作成することを特徴としている。
【００２３】
この構成であれば、実測ルーチンと推定ルーチンとが、メインプログラムから呼び出され、またはメインプログラムに含まれているので、メインプログラムを実行可能形式に翻訳して実行するだけで、最適なパラメータを得ることができる。なお、指定子には、推定ルーチンにて用いる、最適なパラメータを近似によって推定するための近似関数の指定が含まれていてもよい。
【００２４】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムを生成することを特徴としている。
【００２５】
ここで、実測ルーチンにおいては、上述のように、パラメータごとにサブプログラムを呼び出して所要時間を計測するため、この所要時間の計測に時間が必要となる。
【００２６】
そこで、上記構成のように、メインプログラムとして、ループの外側でループよりも前において、実測ルーチンを呼び出すものを作成する。したがって、最適化の際の実測ルーチンの呼び出し回数を減らすことができるので、実測に要する時間を削減できる。すなわち、ループの内部にて毎回実測ルーチンが実行されることがないので、その分だけ最適化に要する時間を短縮できる。
【００２７】
また、推定ルーチンについても、実測ルーチンをループの外にて呼び出すのであれば、ループの内部にて呼び出す必要がないので、同様にループの外にて呼び出すようにすればよい。
【００２８】
このために、プログラム作成手段は、例えばメインプログラムの先頭において実測ルーチンおよび推定ルーチンを呼び出すようなメインプログラムを生成する構成であってもよい。この構成であれば、上記の計算装置を確実に実現できる。
【００２９】
なお、上記計算装置を、実行時のパラメータチューニングにおいて、該当する領域を含むサブプログラムを呼び出す前に行うチューニング方式を有する構成のソフトウェア構成方式を実行する計算装置である、と表現することもできる。
【００３０】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムか、または、上記ループ内において上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムかのいずれかを、上記指定子に応じて選択して生成することを特徴としている。
【００３１】
この構成であれば、最適化の際の実測ルーチンおよび推定ルーチンの呼び出し回数を減らすか、または通常の最適化を行うかを、指定子に応じて切り替えることができる。
【００３２】
すなわち、例えば最適化の対象となるサブプログラムの領域における変数が、上述のサブプログラムを呼び出すループ内において確定する場合には、指定子を適切なものに設定して、ループ内において実測・推定ルーチンを呼び出す通常の最適化を行うようにすればよい。
【００３３】
また、例えばサブプログラムの領域における変数が、上述のサブプログラムを呼び出すループ前において確定している場合には、このループ前に実測・推定ルーチンを呼び出すようにして最適化を行えば、最適化に要する時間を削減できる。
【００３４】
なお、上記計算装置を、実行時のパラメータチューニングにおいて、該当する領域を含むサブプログラムを呼び出す前に行うチューニング方式と、該当する領域が実行される時に行うチューニング方式の２方式に分離する構成のソフトウェア構成方式を実行する計算装置である、と表現することもできる。
【００３５】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記パラメータごとに計測した上記所要時間を近似するためのコスト定義関数を含むコスト定義関数ライブラリを備えていることを特徴としている。
【００３６】
この構成であれば、例えば、このコスト定義関数ライブラリに含まれるコスト定義関数を用いて、所望の近似を行うことができる。
【００３７】
また、例えば、指定子に、推定ルーチンにて用いる近似関数の指定が含まれている場合には、この指定された近似関数をコスト定義関数ライブラリ中から探して用いるようにしてもよい。
【００３８】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、計測した上記所要時間を、上記コスト定義関数ライブラリ中に含まれるコスト定義関数の全てを順次用いて近似して、そのうちから最も近似精度のよいコスト定義関数を選択するコスト定義関数決定部を備えていることを特徴としている。
【００３９】
この構成であれば、例えば指定子に推定ルーチンにて用いる近似関数の指定を含めない場合であっても、最適な近似関数を得ることができる。
【００４０】
また、指定子にて指定した近似関数がコスト定義関数ライブラリ中に含まれていない場合であっても、上記構成のように精度のよい近似関数を選択できる。
【００４１】
本発明に係る計算装置は、上記指定子解析手段にて抽出した上記領域と上記パラメータとを記憶するチューニング情報データベースを有しており、上記プログラム作成手段と上記コスト定義関数決定部とが、上記チューニング情報データベースを参照して上記領域または上記パラメータを取得することを特徴としている。
【００４２】
この構成であれば、指定子解析手段にて抽出した領域とパラメータとをチューニング情報データベースに記憶しておくので、プログラム作成手段とコスト定義関数決定部とが領域またはパラメータを用いる際に、チューニング情報データベースを参照すればよく、その度に領域またはパラメータを抽出する必要がない。
【００４３】
本発明に係る計算方法は、上記課題を解決するために、計算装置に入力されるプログラムに含まれるパラメータの最適化を行うための計算方法において、最適化を行う上記プログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成する工程と、上記生成する工程にて得た上記プログラムを実行して最適化を行う工程とを含んでいることを特徴としている。
【００４４】
この計算方法を例えばコンピュータのような計算装置にて実行すれば、上述の計算装置を実現できる。なお、上述の計算方法を、自動チューニング機能を付加したソフトウェアを生成するステップを備えた、プログラミング言語処理方法である、と表現することもできる。
【００４５】
本発明に係る計算方法は、上記課題を解決するために、上記構成において、上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムを生成することを特徴としている。
【００４６】
このようにすれば、ループの外側でループよりも前に実測・推測を実行し、ループの内部において毎回実測・推測を実行することがないので、その分だけ最適化に要する時間を短縮できる。
【００４７】
本発明に係る計算方法は、上記課題を解決するために、上記構成において、上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムか、または上記ループ内にて上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムかのいずれかを、上記指定子に応じて選択して生成することを特徴としている。
【００４８】
この構成であれば、ループの外側でループよりも前に実測・推測を実行するか、またはループの内部において毎回実測・推測を実行するかを、指定子の設定によって簡単に切り替えることができる。指定子は、例えばサブプログラムによって実現される、対象となる問題の性質に応じて選択すればよい。
【００４９】
また、上述の計算方法を、上述の計算装置の有する自動チューニング機能を付加したプログラムを生成するステップを備えた、プログラミング言語処理方法である、と表現することもできる。
【００５０】
また、上述の計算方法を用いて、自動チューニング機能を有するプログラムを生成する生成手段を備えたプログラミング言語処理装置を実現してもよい。
【００５１】
本発明に係るプログラムは、上記課題を解決するために、上記構成において、コンピュータを、上述のいずれかに記載の計算装置の各手段として動作させることを特徴としている。
【００５２】
このプログラムを用いれば、上述の計算装置を実現できる。なお、このプログラムを使用する方法を、上述の言語処理装置を利用するために行う、プログラムの利用形態である、と表現することもできる。
【００５３】
本発明に係る記録媒体は、上記課題を解決するために、上記構成において、上述のプログラムをコンピュータ読み取り可能に記録したことを特徴としている。
【００５４】
この記録媒体のプログラムをコンピュータにて読み取って実行すれば、上述の計算装置を実現できる。なお、この記録媒体を、自動チューニング機能を付加したソフトウェアを生成する生成手段として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体である、と表現することもできる。
【００５５】
【発明の実施の形態】
〔実施の形態１〕
本発明の一実施の形態について図１ないし図１７に基づいて説明すると以下の通りである。
【００５６】
本実施形態の計算装置は、所定の形式の計算機言語（プログラム）から、パラメータの最適化（チューニング）が容易となるような他のプログラムを生成する、プログラム生成部を備えた構成である。また、プログラムを実行形式に翻訳するコンパイラを備えている。
【００５７】
計算装置１は、図１に示すように、プロセッサ２、ユーザライブラリ３、パラメータ調整層４、パラメータ情報ファイル５、プログラム生成部６およびコンパイラ７を含んでいる。
【００５８】
また、計算装置１は、図示しない記録媒体を備えている。計算装置１は、例えば、外部から入力される図示しないパラメータを用いてライブラリ３中のサブルーチンを呼び出して、計算を行う。計算結果は図示しない表示装置に出力される。
【００５９】
プロセッサ２は、計算を行うため計算処理部である。プロセッサ２は、図示しないｎｐｒｏｃｓ個のプロセッサを内部に備えている。計算装置１は、プロセッサ２の複数のプロセッサを用いて、並列計算装置として機能する。
【００６０】
ライブラリ３は、数値計算ライブラリである。ライブラリ３は少なくとも一つ以上のサブルーチンを含んでいる。本実施形態のライブラリ３は、図１６に示すように、内部に複数のサブルーチン３ａ〜３ｋを備えている。この図１６は、図１に示す計算装置１の一部を示すものである。
【００６１】
このライブラリ３やサブルーチン３ａ〜３ｋには、なんらかの方法（専用記述言語など）を用いて、パラメータを記述してアクセスする。このパラメータのうちの一部は、例えば外部からユーザによってライブラリ３へ直接入力される。また、パラメータの他の一部は、ライブラリ３内で使われる。また、パラメータのさらに他の一部は、パラメータ調整層４を介してライブラリ３に入力される。
【００６２】
このライブラリ３は、ユーザによって開発された数値計算ライブラリであるが、これに限るものではなく、例えばライブラリ開発者によって開発されたシステムライブラリであってもよい。このような、ＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）などの計算機環境やＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などであらかじめ用意されているライブラリ等についても、ソフトウェアインタフェースさえ周知であれば、ユーザやライブラリ開発者がパラメータ記述を行うことによって、パラメータ調整層４にパラメータ情報を引き渡すことができる。
【００６３】
なお、ライブラリの備えるサブルーチンの内容、個数などについては、特に限定されない。また、計算装置１には、ライブラリ以外のプログラムが備えられていてもよく、そのプログラムによって他の機能が実現されてもよい。
【００６４】
パラメータ調整層４は、ライブラリ３の用いるパラメータを調整する調整装置として機能する。パラメータ調整層４は、ライブラリ３に入力するパラメータの一部を調整した上で、ライブラリ３に入力する。パラメータ調整層４は、インストール時最適化層（Ｉｎｓｔａｌｌａｔｉｏｎ  Ｏｐｔｉｍｉｚａｔｉｏｎ  Ｌａｙｅｒ：ＩＯＬ）４ａ、実行前最適化層（Ｂｅｆｏｒｅ  Ｅｘｅｃｕｔｉｏｎ−ｉｎｖｏｃａｔｉｏｎ  Ｏｐｔｉｍｉｚａｔｉｏｎ  Ｌａｙｅｒ：ＢＥＯＬ）４ｂおよび実行時最適化層（Ｒｕｎ−ｔｉｍｅ  Ｏｐｔｉｍｉｚａｔｉｏｎ  Ｌａｙｅｒ：ＲＯＬ）４ｃを含んでいる。これらの各層の機能については後述する。
【００６５】
パラメータ情報ファイル５は、パラメータ調整層４において調整されたパラメータを保存するためのファイルである。
【００６６】
なお、本実施形態の計算装置１において、ライブラリ３は、図示しない記録媒体に記録されたプログラムが読み取られ、実行されることによって実現される機能である。また、パラメータ調整層４も、図示しない記録媒体に記録されたプログラムが読み取られ、実行されることによって実現される機能である。
【００６７】
プログラム生成部６は、所定の形式のプログラムから、パラメータの最適化を容易に実行できるような他のプログラムを生成するものである。プログラム生成部６の詳細については後述する。
【００６８】
コンパイラ７は、プログラムを実行形式に翻訳するものである。本実施形態のコンパイラ７は、プログラム生成部６にて生成されたプログラムを実行形式に翻訳する。コンパイラ７は、翻訳した実行形式をプロセッサ２へと出力する。プロセッサ２にて、実行形式を実行すると、後述するように、実際にパラメータの最適化を行うことができる。
【００６９】
なお、このプログラム生成部６・コンパイラ７は、計算装置１において、図示しない記録媒体に記録されたプログラムが読み取られ、実行されることによって実現される機能である。
【００７０】
ここで、プログラム生成部６の詳細について説明する。プログラム生成部６は、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれているプログラムが入力されると、指定子によって指定される領域とパラメータとについての、実測による最適化を実行するためのプログラムを生成する。プログラム生成部６は、図２に示すように、指定子解析手段８、プログラム作成手段９、およびコスト定義関数決定手段１０を含んでいる。
【００７１】
指定子解析手段８は、指定子が含まれるプログラムを解析し、指定子で指定されるパラメータと、指定子で指定されるプログラムの一部分（以下、チューニング領域（領域）と呼ぶ。）とを抽出するためのものである。
【００７２】
指定子解析手段８は指定子解析部８ａを含んでおり、プログラム生成部６に入力されるプログラムは、まず指定子解析部８ａへと入力される。指定子解析部８ａが、プログラムからパラメータとチューニング領域とを抽出して、コスト定義関数決定手段１０のチューニング情報データベース１０ａに含まれる、パラメータ１０ｄ・チューニング領域集合１０ｅへとそれぞれ出力する。このように、指定子解析部８ａは指定子からパラメータを抽出する。また、指定子から、最適化を行う際の処理の内容を抽出する。また、チューニング領域を抽出して、必要に応じて所定の処理を行う。
【００７３】
ここで、図３において、抽象的なレベルで記述しているプログラム（Ｓｕｂｒｏｕｔｉｎｅ  ｘｘｘ（））は、最適化するべきチューニング領域を含んでいるプログラムの一例である。ここで、図中で「チューニング領域」として示すのが、チューニング領域の一例である。また、「指定子の始め」、「指定子の終わり」として示すのが、指定子の一例である。本実施形態のチューニング領域は、指定子の始め、指定子の終わりによって囲まれた領域である。しかしながら、これに限るものではなく、例えば指定子の始めとその始めの位置からの行数によって指定することもできる。
【００７４】
なお、この例では、Ｆｏｒｔｒａｎ言語を用いてプログラムの一例を記述しているが、本発明はこれに限るものではなく、他の任意の計算機言語を用いるものであってもよい。この場合であっても、処理は同様となる。例えば、関数型計算機言語（Ｃ言語、Ｃ＋＋言語など）を用いて記載されたプログラムにおいても、本発明による処理の本質は同じとなる。また、プログラム中の日本語による記載は、特に断らない場合は、具体的なプログラムの一例ではなく、プログラムによって実現するべき制御動作を抽象的に日本語で表現したものである。また、プログラム中の日本語が、プログラム中のコメントを表す場合もある。
【００７５】
チューニング領域の一例を、図４（ａ）に示す。この図４（ａ）に示すプログラムが、指定子によって囲まれており、指定子によって最適化の方法としてアンローリングが指定されている場合を考える。この場合には、指定子解析部８ａは、図４（ｂ）に示すようなプログラムを生成し、その情報をプログラム作成手段９に引き渡す。すなわち、アンローリング指定子のように、チューニング領域に記載されたプログラムに一定の処理を施し、新たなチューニング領域とする処理が指定される場合には、指定子解析部８ａにてその処理を行った後、その情報をプログラム作成手段９に引き渡す。また、指定子によって指定された処理が、プログラムに対する変更を特に必要としない場合には、指定子解析部８ａは、抽出したチューニング領域をそのままプログラム作成手段９に引き渡す。
【００７６】
また、指定子解析部８ａは、例えば指定子から抽出したパラメータを、図１に示すパラメータ調整層４などに入力することもできる。パラメータ調整層４の有するインストール時最適化層４ａ、実行前最適化層４ｂ、および実行時最適化層４ｃは、指定されたチューニングのタイミング（インストール時、実行前、実行時）に応じて、それぞれ指定子で指定されたパラメータとチューニング領域を分けて、別々に以降の機構に引き渡し、処理を行うことが可能である。この点については後述する。ここでは、簡単のために、まず任意の一つのタイミングにて処理が行われるものとして説明する。
【００７７】
プログラム作成手段９は、指定子解析手段８にて抽出された領域を含むサブプログラムを生成し、パラメータについての実測による最適化をこのサブプログラムを呼び出して実行するメインプログラムを生成するものである。プログラム作成手段９は、自動チューニング機能を付加するためのメインプログラムを作成するメインプログラム作成部９ａ、チューニング情報データベース１０ａ上のチューニング領域を含むサブプログラム群を作成するサブプログラム作成部９ｂ、および自動チューニング機能を達成するための処理プログラムを作成するチューニング機能付加部９ｃを含んでいる。
【００７８】
メインプログラム作成部９ａは、指定子解析手段８を介したプログラムに、チューニング（最適化）機能を付加する。例えば、メインプログラム作成部９ａは、図３に示すプログラムの一例から、図５（ａ）に示すような、最適化を行うためのメインプログラムを作成する。
【００７９】
このメインプログラムは、実行時に「自動チューニングする」と指定して実行した場合には、後述する自動チューニングサブルーチンを呼び出し、パラメータの最適化を行う。また、「自動チューニングする」と指定しない場合には、図３に示すプログラムと同様の内容が実行される。この際、既にパラメータの最適化がなされている場合には、その結果を参照して実行するようになっている。
【００８０】
また、メインプログラム作成部９ａは、例えば図３に示すプログラムの一例であるサブルーチンを、図５（ｂ）に示すようなサブルーチン（Ｓｕｂｒｏｕｔｉｎｅ  ｘｘｘ（））に書き換える。
【００８１】
なお、この例においては、図３に示す、プログラムの一例としてのサブルーチン中に指定子を記述しているが、メインプログラム中に指定子を記述したとしても、メインプログラム作成部９ａは上述と同様の処理を行う。
【００８２】
サブプログラム作成部９ｂは、メインプログラム作成部９ａによって書き換えられた図５（ｂ）に示すサブルーチンに対応する、図５（ｃ）に示すようなサブルーチン（Ｓｕｂｒｏｕｔｉｎｅ  Ｓｕｂ＿Ａ（Ｊ））を新たに作成する。この図５（ｃ）に示すサブルーチンは、処理対象のチューニング領域のみをサブルーチン化したものであり、チューニング情報データベース１０ａのチューニング領域集合１０ｅを参照して作成される。
【００８３】
このサブプログラム作成部９ｂにて作成した図５（ｃ）に示すサブルーチンは、メインプログラム作成部９ａによって書き換えられた、図５（ｂ）に示すサブルーチンから呼び出されるようになっている。また、サブプログラム作成部９ｂにて作成したサブルーチンは、後述するチューニング機能付加部９ｃにて作成されるサブルーチンからも呼び出されるようになっている。
【００８４】
次に、チューニング機能付加部９ｃは、メインプログラム作成部９ａによって作成された図５（ａ）に示すメインルーチンに対応する、図５（ｄ）に示す自動チューニング機能を達成するためのサブルーチン（自動チューニングサブルーチン）を作成する。ここで、チューニング機能付加部９ｃは、後述するコスト定義関数決定手段１０から入力されるコスト関数を用いるようになっている。ここでは、計算の所要時間を、指定されたコスト関数で近似するものとする。コスト定義関数決定手段１０の詳細については後述する。プログラム作成部９は、得られたプログラムを図１に示すコンパイラ７に出力する。
【００８５】
ここで、図５（ｄ）に示す関数Ｆ（Ｉ）は、図３に示すプログラムに記載された指定子から作成される関数である。より詳細には、Ｆ（Ｉ）は、測定用ループのインデックスＩと、チューニング領域Ａをサブルーチン化する際にパラメータ化したパラメータの値Ｊとを１対１対応させる関数である。なお、この関数Ｆ（Ｉ）は、コスト定義関数決定手段１０によってサンプリングされたサンプリング点のみを含むようになっていてもよい。
【００８６】
また、図５（ｄ）に示すプログラムは、時間を計測するための測定用ループ（Ｉループ）（実測ルーチン）を含んでいる。この一例では、測定用ループ中に、サブプログラム作成部９ｂにて作成したサブルーチン（Ｓｕｂｒｏｕｔｉｎｅ  Ｓｕｂ＿Ａ（Ｊ））の呼び出しを付加するようになっている。これによって、測定用ループによって、例えばコストとしての所要時間を計測することができる。
【００８７】
また、図５（ｄ）に示すプログラムは、計測した時間を用いて最適なパラメータを推定する、「パラメータ推定処理（ａ）」（推定ルーチン）を含んでいる。これによって、最適なパラメータを得ることができる。また、ここで得たパラメータは（プログラム生成部６の）外部の（例えばパラメータ情報ファイル５のような）記憶媒体に保存するようになっている。なお、パラメータ推定処理（ａ）の詳細については後述する。
【００８８】
以上に概略を説明したように、本実施形態のプログラム生成部６は、図３に示すような、指定子を含むプログラムから、図５（ａ）〜（ｄ）のような、最適化のための設定を含んだプログラムを生成できる。特に、プログラム作成手段９は、メインプログラムから呼び出す、またはメインプログラムに含ませるための、パラメータごとにサブプログラムを呼び出して所要時間を計測する実測ルーチンと、実測ルーチンにて計測した所要時間を用いて最適なパラメータを推定する推定ルーチンとを作成する。
【００８９】
なお、プログラム生成部６に、指定子に囲まれた領域（チューニング領域）が複数あるプログラムが入力された場合においても、上述と同様の処理が行われる。例えば、図３において、チューニング領域Ｂがチューニング領域Ａの下部に追加された場合、図５（ａ）（ｂ）（ｄ）において、それぞれ、チューニング領域Ａの処理部分の下部に同様の処理部分が付加される。また、図５（ｃ）と同様のサブルーチンが新たに作成される。
【００９０】
なお図５（ｄ）に示す測定用ループ、パラメータ推定処理（ａ）、および図５（ｂ）に示すパラメータ推定処理（ｂ）の呼び出しは、チューニング機能付加部９ｃによって、それぞれのプログラムに付加される。より詳細には、後述するコスト定義関数決定手段１０のコスト定義関数決定部１０ｃにて決定されたコスト定義関数などに応じて、チューニング機能付加部９ｃが所定の処理をするようになっている。
【００９１】
ここで、コスト定義関数決定手段１０について説明する。コスト定義関数決定手段１０は、チューニング情報データベース１０ａ、コスト定義関数ライブラリ１０ｂおよびコスト定義関数決定部１０ｃを含んでいる。
【００９２】
チューニング情報データベース１０ａは、パラメータ１０ｄとチューニング領域集合１０ｅとを含んでいる。チューニング情報データベース１０ａは、指定子解析手段８で解析された、チューニングに必要なパラメータ１０ｄ、および最適化の対象となるプログラムの一部分（サブプログラム）としてのチューニング領域集合１０ｅを保存するためのものである。このチューニング情報データベース１０ａには、プログラム作成手段９とコスト定義関数決定部１０ｃとがアクセスして、保存されたパラメータ１０ｄ、チューニング領域集合１０ｅを得るようになっている。
【００９３】
コスト定義関数ライブラリ１０ｂは、コスト定義関数を記録しているライブラリである。このコスト定義関数は、システムの開発者、計算装置１のユーザなどが、自由に登録／削除できるようになっている。コスト定義関数ライブラリ１０ｂは、複数のコスト定義関数を含んでおり、例えば線形多項式１０ｆを含んでいる。このコスト定義関数は、例えば、パラメータごとに計測した所要時間を近似するために用いられる。
【００９４】
コスト定義関数決定部１０ｃは、指定子に記載されたパラメータ推定処理の方式を決定する部分である。このパラメータ推定処理として、コスト定義関数決定部１０ｃは、以下のコスト定義関数決定処理、サンプル点決定処理、パラメータ推定処理（ａ）、パラメータ推定処理（ｂ）、および測定用ループ処理に関する自動チューニング付加処理を行う。これに応じて、チューニング機能付加部９ｃが、各プログラムに対して上述した所定の処理をするようになっている。
【００９５】
まず始めに、コスト定義関数決定部１０ｃは、コスト定義関数決定処理を行う。この場合、コスト定義関数決定部１０ｃは、指定子中に記載されたコスト定義関数の指定に基づいて、コスト定義関数を決定する。
【００９６】
本実施形態においては、ユーザによる指定子中でのコスト定義関数の指定は、例えば、コスト定義関数ライブラリ１０ｂに含まれている関数を指定することによって行われる。また、ユーザによって、コスト定義関数ライブラリ１０ｂに含まれない関数が指定された場合には、計算装置１のプログラム生成部６が、コスト定義関数を所定の方式で決定（自動決定）することもある。
【００９７】
コスト定義関数ライブラリ１０ｂに含まれている関数が指定された場合には、コスト定義関数決定部１０ｃは、その指定された関数そのものをコスト定義関数ライブラリ１０ｂから選択し、チューニング機能付加部９ｃにそのコスト関数を引き渡す。そして、チューニング機能付加部９ｃがプログラムを生成する。
【００９８】
一方、以下で説明するように、コスト定義関数ライブラリ１０ｂに含まれていない関数が指定された場合には、本実施形態においては、チューニング情報データベース１０ａに登録されている対象のチューニング領域について、コスト定義関数ライブラリ１０ｂに登録されている関数を順次試行して、所要時間を実測して誤差評価を行う。その評価結果から、最も精度が良く、誤差が少ないコスト定義関数を採用し、チューニング機能付加部９ｃに引き渡す。そして、チューニング機能付加部９ｃがプログラムを生成する。なお、関数について試行を行い、所要時間を実測する際には、指定子でパラメータの定義域が指定されている場合は、その定義域全てについて行う。また、指定子でパラメータの定義域が指定されていない場合には、自動生成されるパラメータの上限値を参照し、その上限値まで全ての値について行う。このように、コスト定義関数決定部１０ｃが、計測した所要時間を、コスト定義関数ライブラリ１０ｂ中に含まれるコスト定義関数の全てを順次用いて近似して、そのうちから最も近似精度のよいコスト定義関数を選択する構成であってもよい。
【００９９】
ここで、コスト定義関数決定処理の一例を、図６に概略を示す。コスト定義関数決定部１０ｃは、Ｓ１１にて、指定子に記載されている関数が、コスト定義関数ライブラリ１０ｂに含まれている関数であるか否かを判別する。ここで、例えばユーザによって自動設定要求がなされている場合は、指定された関数がコスト定義関数ライブラリ１０ｂに含まれていないものと判別することにする。
【０１００】
Ｓ１１において指定子に記載されている関数がコスト定義関数ライブラリ１０ｂに含まれている関数である場合には、Ｓ１２に進み、コスト定義関数ライブラリ１０ｂから指定された関数を取り出してＳ１３に進む。Ｓ１３においては、コスト定義関数決定部１０ｃは、取り出した関数をチューニング機能付加部９ｃに引き渡して処理を終了する。例えば、指定子に線形多項式が記載されている場合には、コスト定義関数決定部１０ｃは、コスト定義関数ライブラリ１０ｂの線形多項式１０ｆを、チューニング機能付加部９ｃに引き渡す。
【０１０１】
一方、Ｓ１１において例えば自動設定要求がなされており、指定子に記載されている関数がコスト定義関数ライブラリ１０ｂに含まれていないものと判別された場合には、Ｓ１４に進む。この場合には、指定子に記載されている関数を用いることができないため、Ｓ１４以下では、コスト定義関数ライブラリ１０ｂ中に含まれるコスト定義関数のうち、例えば最も精度の高い関数を選択するための処理を行う。
【０１０２】
Ｓ１４において、コスト定義関数決定部１０ｃは、チューニング情報データベース１０ａのチューニング領域集合１０ｅから、対応するチューニング領域を取り出し、Ｓ１５に進む。Ｓ１５においては、取り出したチューニング領域に、測定用処理部の付加として、図１０に示すような（Ｉについての）ループを設定し、Ｓ１６に進む。Ｓ１６では、コスト定義関数ライブラリ１０ｂ中に含まれる全てのコスト定義関数について、精度の確認が済んでいるか否かを判別する。
【０１０３】
Ｓ１６において精度の確認が済んでいないと判別された場合には、Ｓ１７に進んで、コスト定義関数ライブラリ１０ｂ中に含まれている、未だ精度を確認していないコスト定義関数を一つ選択する。Ｓ１７の次のＳ１８では、選択したコスト定義関数を用いて精度を評価する。Ｓ１８の次のＳ１９では、既に評価を行ったコスト定義関数による精度と、Ｓ１８において得られた精度とを比較して、Ｓ１８において得られた精度の方が良い場合には、最も精度の高いコスト定義関数の候補として、Ｓ１７にて選択したコスト定義関数を採用してＳ１６に進む。
【０１０４】
一方、Ｓ１６において全ての関数について精度の確認が済んでいると判別された場合には、Ｓ１３に進んで、最も精度の高いコスト定義関数をチューニング機能付加部９ｃに引き渡す。以上に説明したＳ１１〜Ｓ１９によってコスト定義関数決定処理の一例が実現される。
【０１０５】
次に、コスト定義関数決定部１０ｃは、実際に時間計測する場合に最適なものとなるようなサンプル点を決定するための、サンプル点決定処理を行う。
【０１０６】
例えば、ユーザによって指定子中にサンプリング点が指定されている場合には、サンプル点決定処理として、その指定されたサンプリング点を用いるように決定してもよい。また、例えばユーザによって指定子中にサンプリング点が指定されていない場合には、サンプル点決定処理として、適当なサンプリング点の集合を、誤差が少なくなるように定義域中から選択してもよい。
【０１０７】
または、例えばユーザによって指定子中にサンプリング点が指定されている場合であっても、サンプル点決定処理として、以下のように、指定されたサンプリング点のうちから、適当なサンプリング点の部分集合を、誤差が少なくなるように定義域中から選択してもよい。
【０１０８】
例えば、コスト定義関数決定部１０ｃは、図７に示すように、Ｓ２０にて指定子中の定義域を確認してＳ２１に進む。Ｓ２１では、指定子中の定義域の集合から、所定の方法でその集合の部分集合Ｓを抽出する。この部分集合Ｓとしては、その集合自身を選択してもよい。または、所定の方法として、乱数によって集合から部分集合Ｓを選択してもよい。または、集合から部分集合Ｓを選択するために、例えば遺伝的アルゴリズム（ＧＡ）を用いて選択してもよく、また過去の統計を利用してもよく、もしくは何らかの評価式を用いて決定してもよい。
【０１０９】
Ｓ２１の次のＳ２２では、対応するチューニング領域について、ここで選択した部分集合Ｓに含まれるパラメータを指定して精度を測定する。Ｓ２２の次のＳ２３では、Ｓ２２にて測定した精度が、以前のサンプル点決定処理において測定した精度よりもよければ、Ｓ２１にて選択した部分集合Ｓを、サンプル点の集合Ｏに設定する。Ｓ２４において、予め指定した試行回数が終了したか否かを判別し、終了していない場合にはＳ２１に進み、終了している場合にはＳ２５に進む。Ｓ２５では、Ｓ２３にて得た集合Ｏをサンプル点とする。このようにして、定義域が設定されている場合であっても、所定の精度を保ちつつ、さらに処理が少なくなるようにサンプリング点を決定して、さらに処理を早くできる。
【０１１０】
ここで、サンプリング点決定処理の一例について説明する。ここでは、固有値計算処理における主ループのアンローリングに関する最適化の場合について説明する。コスト定義関数としては線形５次多項式を利用し、最適化問題の解法としては最小二乗法を利用する。また、サンプル点として、サンプル点１は指定子中で指定したもので、［１−６、８、１６］とする。また、サンプル点２は自動設定したもので、［１−１６］とする。また、以下の表１において、推定パラメータ１はサンプル点１を用いてパラメータ推定したものであり、推定パラメータ２はサンプル点２を用いてパラメータ推定したものである。
【０１１１】
表１は、国産スーパコンピュータ（計算機Ａとする。）によって得られた結果を示すものである。また、表２は、国産スーパコンピュータ（計算機Ｂとする。）によって得られた結果を示すものである。また、表３は、ＰＣクラスタ（計算機Ｃとする。）によって得られた結果を示すものである。
【０１１２】
【表１】
2004355144.tif 000003
【０１１３】
【表２】
2004355144.tif 000004
【０１１４】
【表３】
2004355144.tif 000005
【０１１５】
表１から、本発明に係る方法（再生方法）によって自動設定されるサンプリング点（サンプル点２）のほうが、計算機Ｃにおいて高いパラメータ推定精度を得る。したがって、本発明の機構におけるサンプル点自動決定処理による効果は大きいといえる。
【０１１６】
次に、コスト定義関数決定部１０ｃは、自動チューニング付加処理を順次行う。この自動チューニング付加処理は、パラメータ推定処理（ａ）、パラメータ推定処理（ｂ）、および測定用ループ処理を含んでいる。
【０１１７】
パラメータ推定処理（ａ）は、サンプリング点決定処理で決まったサンプリング点、およびそのサンプリング点に対する実行時間を入力することで、コスト定義関数決定処理で決定したコスト定義関数を基にして、適切な最適化問題を解くプログラムを生成するための処理である。生成されたプログラムは、チューニング機能付加部９ｃの生成するプログラムから、パラメータ推定処理（ａ）として呼びだされる。
【０１１８】
このパラメータ推定処理（ａ）においては、図８に示すように、Ｓ２６にてサンプリング点決定処理で決まったサンプリング点、およびそのサンプリング点についての実行時間を得て、Ｓ２７に進む。例えば、図５（ｄ）に示すプログラムにおいては、測定用ループの後にパラメータ推定処理（ａ）が行われるため、測定用ループによって測定された値を得る。
【０１１９】
Ｓ２７では、コスト定義関数決定処理で決定したコスト定義関数を基にして、適切な最適化問題を解く。Ｓ２７の次のＳ２８では、推定による適切なパラメータ、およびコスト定義関数の係数情報を得る。以上のような処理によって、推定による適切なパラメータを得ることができる。なお、ここで示すフローチャートは、パラメータ推定処理（ａ）の一例を示すものであり、これに限るものではない。また、パラメータ推定処理（ａ）を実現するプログラムは、例えばこの図８に示す各処理を実行するものであればよく、詳細は問わない。
【０１２０】
次に、パラメータ推定処理（ｂ）は、パラメータ推定処理（ａ）にて自動決定されたコスト定義関数の係数情報を入力とすることで、コスト定義関数決定処理で決定したコスト定義関数を基にして、適切な最適化問題を解く。これによって、最適と推定されるパラメータを決定する処理のプログラムを自動生成する。生成されたプログラムは、チューニング機能付加部９ｃの生成するプログラムから、パラメータ推定処理（ｂ）として呼びだされる。
【０１２１】
パラメータ推定処理（ｂ）においては、例えば図９に示すように、Ｓ２９にてパラメータ推定処理（ａ）で決定されたコスト定義関数の係数情報を得る。例えば、図５（ａ）（ｂ）（ｄ）で示すプログラムの一例においては、自動チューニングを行ってパラメータ推定処理（ａ）が行われた後に、パラメータ推定処理（ｂ）が行われるので、このようにコスト定義関数の係数情報を得ることができる。
【０１２２】
Ｓ２９の次のＳ３０では、コスト定義関数決定部で決定されたコスト定義関数からのコスト情報を用いて、最適なパラメータを決定し、Ｓ３１に進む。Ｓ３１では、推定による適切なパラメータを得る。このように、Ｓ２９〜Ｓ３１の処理によって、推定による適切なパラメータを得ることができる。なお、ここで示すフローチャートは、パラメータ推定処理（ｂ）の一例を示すものであり、これに限るものではない。また、パラメータ推定処理（ｂ）を実現するプログラムは、例えばこの図９に示す各処理を実行するものであればよく、詳細は問わない。
【０１２３】
次に、測定用ループ処理は、図１０に示すように、サンプル点決定処理で決定されたサンプル点の個数に応じた測定用ループを形成するものである。
【０１２４】
以上に説明した、パラメータ推定処理（ａ）、パラメータ推定処理（ｂ）、および測定用ループ処理によって、自動生成されたプログラムは、チューニング機能付加部９ｃに送られる。これらのプログラムは、チューニング機能付加部９ｃによって生成されたプログラムから呼び出される。
【０１２５】
ここで、計算装置１による処理について、具体例を参照して説明する。計算装置１は、以下のようにプログラムを生成して最適化を行う。ここでは、一例として、計算機言語として、Ｆｏｒｔｒａｎ９０言語を用いている場合について説明する。また、本実施形態のユーザは、ＭＰＩ（ＭｅｓｓａｇｅＰａｓｓｉｎｇＩｎｔｅｒｆａｃｅ）を計算機環境として利用している。しかしながら、本発明はこれに限るものではない。なお以下に説明する、生成された計算機言語は、本実施形態の説明のためのものであり、本発明はこれに限るものではない。また、本実施形態の説明用に特化したものであり、本実施形態の計算装置１によって生成される計算機言語と厳密に同一ではないことに注意する。
【０１２６】
この計算装置をユーザが用いる際には、図１１に示すように、Ｓ３５にてユーザが所定の形式のプログラムを計算装置１に入力する。ここで、所定の形式のプログラムとは指定子にて最適化するべきパラメータなどを指定したものである。
【０１２７】
ここで、このＳ３５においてユーザによって入力されるプログラムの一例を、図１２に示す。このプログラムは、行列積の処理をＦｏｒｔｒａｎ９０言語で記述したプログラムであって、指定子を記述して自動チューニング機能の付加を指示した一例である。なお、図１２に示す例において、『！ＡＢＣＬｉｂ＄』にて始まる行が、指定子に相当する。
【０１２８】
上記の例では、９行目の指定子『ｖａｒｉｅｄ  （ｉ）  ｆｒｏｍ  １  ｔｏ  ８』にて、１段から８段までパラメータ（ｉ）についてアンローリング指定（＝パラメータ化）をするように指定されている。１１行目から１７行目までは、チューニング領域に相当する。１０行目の指定子『ｆｉｔｔｉｎｇ  ｐｏｌｙｎｏｍｉａｌ  ５』は、コスト定義関数ライブラリ内に登録されている５次線形多項式（ｆｉｔｔｉｎｇ  ｐｏｌｙｎｏｍｉａｌ  ５）の利用を指定する。また、１０行の指定子『ｓａｍｐｌｅｄ  （１−３，６，８）』は、サンプリング点〔１−３，６，８〕についてパラメータ推定を行うことを指定する。これらの指定子の情報から、自動チューニング機能を付加した計算機言語を自動生成する。
【０１２９】
Ｓ３６においては、計算装置１のプログラム生成部６が、入力されたプログラムから、パラメータの調整に適したプログラムを生成する。プログラム生成部６は、生成したプログラムを、Ｓ３７にてコンパイラ７に出力する。
【０１３０】
ここで、Ｓ３６においてプログラム生成部６が生成したプログラムの一例を、図１３（ａ）（ｂ）、図１４（ａ）（ｂ）として示す。
【０１３１】
図１３（ａ）は、図１２のプログラムからプログラム生成部６が生成したメインプログラムを示す。図１３（ｂ）は、図１２のプログラムからプログラム生成部６が生成した自動チューニング用プログラムを示す。また、図１４（ａ）と（ｂ）とを一体としたプログラムは、プログラム生成部６が図１２のプログラムから生成した、チューニング領域を含むサブルーチンである。
【０１３２】
Ｓ３８においては、コンパイラ７が、プログラムを実行形式に翻訳して、プロセッサ２に入力する。Ｓ３９においては、プロセッサ２が翻訳された実行形式を実行して、最適なパラメータを得て、例えばパラメータ情報ファイル５に出力する。以上のようにして、計算装置１を用いれば、指定子によってパラメータを指定したプログラムを入力することによって、そのプログラムについて容易に最適化を行うことができる。
【０１３３】
以上のように、本実施形態に係る計算装置１は、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれているプログラムが入力されると、指定子によって指定される領域とパラメータとについての、実測による最適化を実行するためのプログラムを生成するプログラム生成部６を備えている。したがって、パラメータの最適化を容易に行うことができる。
【０１３４】
また、以上のように、本発明は、プログラム中の任意の箇所において自動チューニング機能を付加するためのプログラム利用形態、プログラミング言語処理装置、プログラミング言語処理方法、および記録媒体に関するものである。
【０１３５】
ここで、従来の構成によれば、パラメータの登録の後にも、実際にパラメータの最適化を達成するために、種々の設定が必要となる。したがって、パラメータを最適化する際には、開発時間と開発費用の増大、機能拡張性の低さ、およびバグ混入の可能性の高さなどの問題を生ずることになる。
【０１３６】
そこで本発明では、最終的に利用者が必要となる計算機言語を用いて自動的に自動チューニング処理を付加する指定子（ディレクティブ）を利用し、かつその指定子で記述されたプログラムに対する処理機構を解決手段として用いることで、上述の問題を解決した。
【０１３７】
例えば、上述の実施形態のように、自動チューニング機能を付加したプログラム生成を自動的に行うので、自動チューニング機能を付加したソフトウェアにおおいて、開発時間と開発費用の増大を防止し、低い機能拡張性を生じさせず、また、高いバグ混入の可能性にいたることがない。
【０１３８】
また、パラメータ調整のための最適化問題求解処理において、本発明の計算装置に搭載したコスト定義関数ライブラリとコスト定義関数決定部の機能によって、複数のコスト定義関数から誤差が最小となるコスト定義関数の自動選択、およびサンプリング点の自動選択が可能となる。
【０１３９】
このことから、上述の実施形態のように、パラメータ推定のための最適化問題求解処理において、従来のような、手作業で実装するために単一のコスト定義関数による推定機能しか実現できず、このため低いパラメータ推定精度を生じていた、といった問題を解決できる。これによって、従来から問題となっている、パラメータ推定機能が低い、という問題を解決できる。
【０１４０】
なお、以下では、指定子解析部８ａが、指定子から抽出したパラメータを、図１に示すパラメータ調整層４へと入力した場合の処理について説明する。このように、パラメータ調整層４が自動チューニングの種類ごとに分けられた処理の付加をしてもよい。また、プログラム生成部６にて付加される自動チューニング機能は、パラメータ調整層４の指示によるものであるとみなすこともできる。
【０１４１】
計算装置１を用いてユーザがライブラリ３を実行する際には、所望のサブルーチン３ａに対して適当なパラメータを設定した上で実行指示をする。
【０１４２】
ここで、サブルーチン３ａに対して設定されるパラメータには、計算装置１の実行性能のみを変化させて、ライブラリ３のサブルーチン３ａの出力を変化させないパラメータが含まれる。以下では、このようなパラメータを、性能情報パラメータ（Ｐｅｒｆｏｒｍａｎｃｅ  Ｐａｒａｍｅｔｅｒｓ  ：ＰＰ）と呼ぶ。
【０１４３】
また、サブルーチン３ａに対して設定されるパラメータのうち、計算装置１の実行性能とライブラリ３のサブルーチン３ａの出力とを共に変化させるようなパラメータを、以下では基本情報（Ｂａｓｉｃ  Ｐａｒａｍｅｔｅｒｓ  ：ＢＰ）パラメータと呼ぶ。
【０１４４】
例えば、数値計算ライブラリに含まれるサブルーチン３ａが、行列の固有値を計算する固有値計算サブルーチンであるとする。このとき、所望の行列の実体や、その行列のサイズなどは、基本情報パラメータＢＰに相当する。また、計算装置１の行列計算におけるループアンローリング段数は、性能情報パラメータＰＰに相当する。
【０１４５】
計算装置１においては、与えられた基本情報パラメータＢＰを用いて、性能パラメータＰＰを最適化することによって、所望の結果を最小の時間で得ることができる。性能情報パラメータＰＰ、基本情報パラメータＢＰは、パラメータ調整層４を介してライブラリ３に入力される。性能情報パラメータＰＰおよび基本情報パラメータＢＰ以外のパラメータは、計算装置１の外部からライブラリ３に直接入力されるか、またはライブラリ３の内部で用いられる。
【０１４６】
本実施形態のパラメータ調整層４は、図１５に示すように、調整可能なパラメータである性能情報パラメータＰＰを最適化するために、インストール時最適化層４ａ、実行前最適化層４ｂ、実行時最適化層４ｃの各層を備えている。各層４ａ〜４ｃはパラメータを自身で保持することはなく、パラメータ情報ファイル５に保存する。
【０１４７】
インストール時最適化層（ＩＯＬ）４ａは、ライブラリ３のインストール時に最適化を行う。
【０１４８】
インストール時最適化層４ａは、例えば図１７（ａ）に示すように、ライブラリ３のインストール時に（Ｓ１）、性能情報パラメータＰＰのうちの一部であるインストール時最適化パラメータ（ＩＯＰ）を最適化し（Ｓ２）、得られたパラメータ（ＩＯＰ）をパラメータ情報ファイル５に出力する。
【０１４９】
なお、ライブラリ３のインストール時には、通常は、基本情報パラメータＢＰが定まっていることはない。このため、インストール時最適化層４ａは、例えば基本情報パラメータＢＰの値を適当にサンプリングして、そのサンプリングした抽出点ごとに、適当に定義したコスト定義関数を最小化するパラメータを決定する。そして、適当なモデル式によって、サンプリングした抽出点と抽出点との間のデータについて補間する。
【０１５０】
実行前最適化層（ＢＥＯＬ）４ｂは、ユーザが指定する特定パラメータ（例えば問題サイズなど）の指定後に最適化を行う。
【０１５１】
実行前最適化層４ｂは、基本情報パラメータＢＰの入力に応じて、これを用いて、性能情報パラメータＰＰのうちの一部である実行前最適化パラメータＢＥＯＰを最適化する。例えば図１７（ｂ）に示すように、ユーザ指定パラメータとしての基本情報パラメータＢＰの定義（入力）に応じて（Ｓ４）、パラメータ情報ファイル５のパラメータ（ＩＯＰ）を参照して（Ｓ５）、最適化を行い（Ｓ６）、得られた最適化パラメータ（ＢＥＯＰ）をパラメータ情報ファイル５に出力する。
【０１５２】
なお、実行前最適化層４ｂは、ユーザによって指定された基本情報パラメータＢＰを用いて、最適なパラメータを得るために、実測にて試行をする。
【０１５３】
実行時最適化層（ＲＯＬ）４ｃは、インストール時最適化層４ａまたは実行前最適化層４ｂの少なくとも一方によるパラメータ最適化が終了した後で、かつ対象のライブラリ（やルーチン）の実行時に、最適化を行う。
【０１５４】
実行時最適化層４ｃは、例えば図１７（ｃ）に示すように、ライブラリ３（ライブラリ３のサブルーチン３ａ）の実行指示を検出すると（Ｓ８）、既に設定された性能情報パラメータＰＰを参照して（Ｓ９）、この性能情報パラメータＰＰによる計算が所望の精度を満たしていないときには、最適化を再度行う（Ｓ１０）。Ｓ１０においては、計算が所望の精度を満たすような、最適なパラメータＰＰが得られるまで計算を繰り返す。
【０１５５】
このように、実行時最適化層４ｃは、既に設定された性能情報パラメータＰＰを参照して、例えば十分な精度が得られるような所定の場合には、最適化のための計算を行わない。
【０１５６】
以上のように、本実施形態のパラメータ調整層４においては、インストール時最適化層４ａにて最適化したパラメータ情報ＩＯＰは、パラメータ情報ファイル５に保存され、実行前最適化層４ｂと実行時最適化層４ｃとで参照可能となっている。また、実行前最適化層４ｂにて最適化したパラメータ情報ＢＥＯＰは、パラメータ情報ファイル５に保存され、実行時最適化層４ｃで参照可能となっている。
【０１５７】
ここで、性能情報パラメータＰＰの各要素は、パラメータ（ＩＯＰ）、パラメータ（ＢＥＯＰ）、パラメータ（ＲＯＰ）の各集合のうちの少なくとも一つに含まれている。すなわち、性能情報パラメータＰＰの各要素は、パラメータ調整層４の各層４ａ〜４ｃのために、重複を許して、３つの部分集合（ＩＯＰ、ＢＥＯＰ、ＲＯＰ）に分解される。これを式で表現すると、以下のようになる。
ＰＰパラメータ＝ＩＯＰ  ∪  ＢＥＯＰ  ∪  ＲＯＰ          …（式１）
したがって、本実施形態の計算装置１は、パラメータ調整層４を用いて、性能情報パラメータＰＰに含まれる全ての要素を、上述したタイミングのいずれかにて最適化できる。
【０１５８】
特に、本実施形態の計算装置１は、問題に応じた例えば行列サイズ（ｎ）のような基本情報パラメータＢＰが定まると、実際の計算の実行前の時点で最適化を行う実行前最適化層４ｂを備えている。これによって、従来の計算装置よりも正確な最適化が可能となる。
【０１５９】
ここで、従来の自動チューニングソフトウェアの構成方式では、例えば図１８（ａ）に示すようにソフトウェアインストール時にパラメータ最適化を行うもの、または例えば図１８（ｂ）に示すようにライブラリ実行時にパラメータ最適化を行うもの、のみ存在していた。これらのソフトウェア構成方式では、汎用的な処理に適用できない、パラメータ調整が不十分となる場合がある、という問題がある。また図１８（ａ）（ｂ）から分かるように、従来の自動チューニングではパラメータは１種類であった。
【０１６０】
そこで本発明においては、より汎用的な処理においてパラメータ調整が適用でき、かつ従来よりも高度なパラメータ調整機構を有するソフトウェア構成方式によって課題の解決をねらうものである。
【０１６１】
特に、本実施形態の計算装置１は、問題に応じた例えば行列サイズ（ｎ）のような基本情報パラメータＢＰが定まると、実際の計算の実行前の時点で最適化を行う実行前最適化層４ｂを備えている。これによって、従来の計算装置のような、ＩＯＬ、またはＲＯＬ単独の場合よりもより正確な最適化が可能となる。
【０１６２】
次に、上述した構成のプログラム、コンピュータなどについて、その特徴点を説明する。
【０１６３】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する手順と、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う手順とを含んでいることを特徴としている。
【０１６４】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
【０１６５】
上記プログラムが実行されたコンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【０１６６】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【０１６７】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【０１６８】
すなわち、ライブラリの内容を数式として表したときに、数式中の変数として表現されるパラメータが、基本情報パラメータに相当する。また、数式中に現れず、または数式において単なる媒介変数として現れるパラメータが、性能情報パラメータに相当する。このため、例えば性能情報パラメータを変化させたとしても、数式によって得られる結果（ライブラリの出力）は変わらない。
【０１６９】
その後、コンピュータは、ライブラリの実際の実行の前に、基本情報パラメータを用いて性能情報パラメータの最適化を行う。より詳細には、例えば基本情報パラメータを用い、性能情報パラメータのそれぞれの値について試行計算を行って、実行コストを予め実測する。これによって、確実に最適な性能情報パラメータを得ることができる。
【０１７０】
ここで、従来の最適化のためのプログラムの一例は、例えばライブラリのインストール時に性能情報パラメータの最適化を行う。この場合、例えば行列のサイズのような基本情報パラメータが定まっていないため、所定の誤差を含んだ、なんらかの推定モデルによって、最適な性能情報パラメータを推測する。
【０１７１】
また、従来の最適化のためのプログラムの他の一例は、例えばライブラリの実行時に性能情報パラメータの最適化を行う。この場合には、性能情報パラメータを最適化するための計算時間が、ライブラリの実行コストに計上されてしまう。このため、最適化のために十分な時間を取れずに、最適なパラメータが得られない虞れがある。
【０１７２】
そこで、本発明に係る上述のプログラムのように、実際の計算の前に、実行コストを予め実測して、最適な性能情報パラメータを得るようにする。これによって、より精密かつ確実なパラメータ調整が可能となる。また、プログラムの実行前において、計算所要時間を予測できる。
【０１７３】
なお、本発明に係るプログラムを、ユーザが知りうる情報が定まった地点でのパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【０１７４】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリのインストール時に上記性能情報パラメータの最適化を行う初期設定手順と、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する検出手順と、上記初期設定手順において設定された上記性能情報パラメータを参照して、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う前調整手順とを含んでいることを特徴としている。
【０１７５】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
【０１７６】
上記プログラムが実行されたコンピュータは、ライブラリのインストール時に、性能情報パラメータの最適化を行う。この場合、例えば行列のサイズのような基本情報パラメータが定まっていないため、所定の誤差を含んだ、なんらかの推定モデルによって、最適な性能情報パラメータを推測する。
【０１７７】
また、コンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【０１７８】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【０１７９】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【０１８０】
その後、コンピュータは、ライブラリの実際の実行の前に、インストール時に設定された性能情報パラメータを参照して、基本情報パラメータを用いて性能情報パラメータの最適化を行う。より詳細には、例えば基本情報パラメータを用い、性能情報パラメータのそれぞれの値について試行計算を行って、実行コストを予め実測する。特に、インストール時に設定された性能情報パラメータの最適値周辺の値のみについて、試行計算を行うようにしてもよい。これによって、試行計算の回数を削減して、最適な性能情報パラメータを得ることができる。このように、より精密かつ確実なパラメータ調整が可能となる。
【０１８１】
なお、本発明に係るプログラムを、ソフトウェアのインストール時、およびユーザが知りうる情報が定まった地点でのソフトウェアの実行前、のパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【０１８２】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する検出手順と、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う前調整手順と、上記ライブラリの実行の際に、既に設定された上記性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしていないときには、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を再度行う再調整手順とを含んでいることを特徴としている。
【０１８３】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
【０１８４】
上記プログラムが実行されたコンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【０１８５】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【０１８６】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【０１８７】
その後、コンピュータは、ライブラリの実際の実行の前に、基本情報パラメータを用いて性能情報パラメータの最適化を行う。より詳細には、例えば基本情報パラメータを用い、性能情報パラメータのそれぞれの値について試行計算を行って、実行コストを予め実測する。これによって、確実に最適な性能情報パラメータを得ることができる。
【０１８８】
また、コンピュータは、ライブラリの実際の実行の際に、既に設定された性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしているか否かを試行により判別する。そして、所望の精度を満たしていないときには、基本情報パラメータを用いて性能情報パラメータの最適化を再度実行する。そして、所望の精度を得ることのできる性能情報パラメータを用いて、ライブラリを実行する。
【０１８９】
このように、実際の計算の前に、実行コストを予め実測して、最適な性能情報パラメータを得るようにする。基本情報パラメータの変更がないときには、予め設定した性能情報パラメータを用いてライブラリを実行できる。また、基本情報パラメータの変更があるときでも、所望の精度が得られる場合には、パラメータの最適化のための計算をせずに、ライブラリを実行できる。したがって、実行時におけるパラメータの最適化に要する時間を不要として、ライブラリの実行コスト（計算時間）を増大させない。また、ライブラリの実行の前に精度を確認するので、より精密かつ確実なパラメータ調整が可能となる。
【０１９０】
なお、本発明に係るプログラムを、ユーザが知りうる情報が定まった地点でのソフトウェアの実行前、およびソフトウェア実行時、のパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【０１９１】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリのインストール時に上記性能情報パラメータの最適化を行う初期設定手順と、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する検出手順と、上記ライブラリの実行の際に、既に設定された上記性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしていないときには、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を再度行う再調整手順とを含んでいることを特徴としている。
【０１９２】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
上記プログラムが実行されたコンピュータは、ライブラリのインストール時に、性能情報パラメータの最適化を行う。この場合、例えば行列のサイズのような基本情報パラメータが定まっていないため、所定の誤差を含んだ、なんらかの推定モデルによって、最適な性能情報パラメータを推測する。
【０１９３】
また、コンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【０１９４】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【０１９５】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【０１９６】
また、コンピュータは、ライブラリの実際の実行の際に、既に設定された性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしているか否かを試行により判別する。そして、所望の精度を満たしていないときには、基本情報パラメータを用いて性能情報パラメータの最適化を再度実行する。そして、所望の精度が得られる性能情報パラメータを用いて、ライブラリを実行する。
【０１９７】
このように、実際の計算の前に、性能情報パラメータを設定しておく。実際の計算の際に、その性能情報パラメータによって所望の精度が得られる場合には、パラメータの最適化のための計算をせずに、ライブラリを実行できる。したがって、実行時におけるパラメータの最適化に要する時間を不要として、ライブラリの実行コスト（計算時間）を増大させない。また、ライブラリの実行の前に精度を確認するので、より精密かつ確実なパラメータ調整が可能となる。
【０１９８】
なお、本発明に係るプログラムを、ソフトウェアのインストール時、およびソフトウェア実行時、のパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【０１９９】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリのインストール時に上記性能情報パラメータの最適化を行う初期設定手順と、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する検出手順と、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う前調整手順と、上記ライブラリの実行の際に、既に設定された上記性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしていないときには、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を再度行う再調整手順とを含んでいることを特徴としている。
【０２００】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
【０２０１】
上記プログラムが実行されたコンピュータは、ライブラリのインストール時に、性能情報パラメータの最適化を行う。この場合、例えば行列のサイズのような基本情報パラメータが定まっていないため、所定の誤差を含んだ、なんらかの推定モデルによって、最適な性能情報パラメータを推測する。
【０２０２】
また、コンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【０２０３】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【０２０４】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【０２０５】
その後、コンピュータは、ライブラリの実際の実行の前に、インストール時に設定された性能情報パラメータを参照して、基本情報パラメータを用いて性能情報パラメータの最適化を行う。より詳細には、例えば基本情報パラメータを用い、性能情報パラメータのそれぞれの値について試行計算を行って、実行コストを予め実測する。特に、インストール時に設定された性能情報パラメータの最適値周辺の値のみについて、試行計算を行うようにしてもよい。これによって、試行計算の回数を削減して、最適な性能情報パラメータを得ることができる。このように、より精密かつ確実なパラメータ調整が可能となる。
【０２０６】
また、コンピュータは、ライブラリの実際の実行の際に、既に設定された性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしているか否かを試行により判別する。そして、所望の精度を満たしていないときには、基本情報パラメータを用いて性能情報パラメータの最適化を再度実行する。そして、所望の精度が得られる性能情報パラメータを用いて、ライブラリを実行する。
【０２０７】
このように、実際の計算の前に、実行コストを予め実測して、最適な性能情報パラメータを得るようにする。基本情報パラメータの変更がないときには、予め設定した性能情報パラメータを用いてライブラリを実行できる。また、基本情報パラメータの変更があるときでも、所望の精度が得られる場合には、パラメータの最適化のための計算をせずに、ライブラリを実行できる。したがって、実行時におけるパラメータの最適化に要する時間を不要として、ライブラリの実行コスト（計算時間）を増大させない。また、ライブラリの実行の前に精度を確認するので、より精密かつ確実なパラメータ調整が可能となる。
【０２０８】
なお、本発明に係るプログラムを、ソフトウェアのインストール時、ユーザが知りうる情報が定まった地点でのソフトウェアの実行前、およびソフトウェア実行時、の３階層のパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【０２０９】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータについて最適化する機能を上記コンピュータに実現させるためのプログラムにおいて、上記性能情報パラメータの各要素を、上記ライブラリのインストール時に最適化を行うパラメータの第１の集合、上記ライブラリの実行の前に最適化を行うパラメータの第２の集合、または上記ライブラリの実行の際に最適化を行うパラメータの第３の集合のうちの少なくとも一つに含まれるように設定して、第１の集合の要素を最適化する機能と、第２の集合の要素を最適化する機能と、第３の集合の要素を最適化する機能とを上記コンピュータに実現させることを特徴としている。
【０２１０】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、並列計算機を用いる場合のループアンローリング段数が、性能情報パラメータに相当する。
【０２１１】
上記プログラムが実行されたコンピュータにおいては、性能情報パラメータが、ライブラリのインストール時に最適化を行うパラメータの第１の集合、ライブラリの実行の前に最適化を行うパラメータの第２の集合、またはライブラリの実行の際に最適化を行うパラメータの第３の集合のうちの少なくとも一つに含まれるように設定される。
【０２１２】
ここで、性能情報パラメータが何らかの意味で最適化可能であるならば、インストール時、ライブラリ実行前、ライブラリ実行の際のいずれかにおいて最適化することは、常に可能である。また、性能情報パラメータを、上述の第１〜第３のうちから選択された少なくとも一つ以上の集合に含まれるように設定する具体的な構成には、ある程度任意性があるが、その構成はどのように選択してもよい。
【０２１３】
そして、コンピュータは、第１〜第３の集合について、それぞれ最適化を行う。したがって、性能情報パラメータの全てが最適化可能となり、汎用な処理に適用できる。すなわち、複数のルーチンを含んだライブラリ全体に対する最適化が可能となる。
【０２１４】
一方、従来の最適化法は、ソフトウェアインストール時にパラメータ最適化を行うもの、またはライブラリ実行時にパラメータ最適化を行うもの、のいずれか一方しかなかった。このため、問題によっては、インストール時にしか最適化できない、または実行時にしか最適化できないものがあるので、全ての問題に対して汎用することができなかった。
【０２１５】
なお、本発明に係るプログラムを、最適化すべきパラメータに関して、インストール時、実行前、実行時の３種のパラメータに分離し、それぞれのパラメータ最適化を行うソフトウェアである、と表現することもできる。
【０２１６】
本発明に係る記録媒体は、上記課題を解決するための、上述のいずれかのプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【０２１７】
この記録媒体がコンピュータにて読み取られると、上述のいずれかのプログラムがコンピュータにて実行される。したがって、上述のプログラムと同様の効果を得ることができる。
【０２１８】
なお、記録媒体の構成としては、ハードディスク、ＣＤ  ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などに限るものではなく、どのような記録媒体であってもよい。
【０２１９】
また、本発明に係るコンピュータは、上記課題を解決するために、上述の記録媒体を備えている構成である。
【０２２０】
このコンピュータにて上述の記録媒体を読み取りすると、上述のいずれかのプログラムがコンピュータにて実行される。したがって、上述のプログラムと同様の効果を得ることができる。
【０２２１】
なお、このコンピュータは、コンピュータ内に複数のプロセッサを有する並列計算装置であってもよいし、または、複数のコンピュータがネットワークに接続されて複数のプロセッサを有する計算装置として機能する分散計算装置であってもよい。
【０２２２】
また、上述のコンピュータは、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの調整を行う調整方法において、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する手順と、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う手順とを含んでいる調整方法を実行するものである、と表現することもできる。
【０２２３】
また、上述のコンピュータは、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの調整を行う調整方法において、上記ライブラリの実行の際に、既に設定された上記性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしていないときには、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を再度行う再調整手順を含んでいる調整方法を実行するものである、と表現することもできる。
【０２２４】
また、上述のコンピュータは、上記調整方法を実行することによって、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を行う調整装置として機能する。また、上述のコンピュータは、上述のプログラムとライブラリとを備えた計算装置として機能する。
【０２２５】
なお、上述の構成において、性能情報パラメータの最適化とは、性能情報パラメータの全てを最適化するものではなく、最適化が可能なもののうち、適当なものについて最適化を行うことを意味する。
【０２２６】
〔実施の形態２〕
本発明の他の実施の形態について、図１９ないし図２７に基づいて説明する。本実施形態の計算装置は、実施の形態１にて説明した、図１に示す計算装置１と同様の構成を有しており、以下では簡単のため計算装置１として参照する。
【０２２７】
計算装置１は、所定の形式の計算機言語（プログラム）から、パラメータの最適化（チューニング）が容易となるような他のプログラムを生成する、プログラム生成部６を備えた構成である。また、プログラムを実行形式に翻訳するコンパイラ７を備えている。
【０２２８】
本実施形態の計算装置１のプログラム生成部６は、メインプログラムの実行の際に最適化を行うために、メインプログラムの先頭において実測ルーチンおよび推定ルーチンを呼び出すようなメインプログラムを生成する構成である。また、計算装置１のプログラム生成部６は、指定子に応じて、サブプログラムを呼び出しているループ中において、実測ルーチンおよび推定ルーチンを呼び出すようなメインプログラムを生成こともできる。
【０２２９】
以下では、計算装置１の動作の概略について説明した後に、より具体的な実施例について説明する。
【０２３０】
図１および図２に示すように、本実施形態の計算装置１においても、指定子を記述したプログラムを用いて、自動チューニング機構の付加されたプログラムが生成される。そして、このプログラムを実行することによって、プログラムに含まれるパラメータの最適化を実行できる。
【０２３１】
より詳細には、計算装置１の有するプログラム生成部６は、図２に示すように、指定子解析手段８、プログラム作成手段９、およびコスト定義関数決定手段１０を含んでいる。そして、実施の形態１と同様に、指定子を記述したプログラムが処理されて、新たなプログラムが生成される。このプログラムの生成とは、プログラムの書き換えをも含むものとする。
【０２３２】
本実施形態においては、指定子解析手段８、プログラム作成手段９の構成・動作は、実施の形態１と異なるものとなっている。この点について、以下で図面を参照してより詳細に説明をする。
【０２３３】
図１９（ａ）（ｂ）には、計算装置１の処理の対象となる、指定子の記述されたプログラムの一例を示す。
【０２３４】
図１９（ｂ）に示すサブルーチンｘｘｘは、指定子の記述された、最適化するべきチューニング領域Ｂを有するプログラムの一例である。また、図１９（ａ）に示すメインルーチンは、そのサブルーチンｘｘｘを呼び出している。
【０２３５】
なお、図１９（ａ）（ｂ）は、それぞれ本実施形態の説明のために必要な箇所のみを特に示した一例であり、例えばサブルーチンｘｘｘには図１９（ｂ）に示すように他の領域が含まれていてもよいし、また例えばメインルーチンにも図示しない他の領域、他の処理が含まれていてもよい。また、プログラム中の日本語による記載は、特に断らない場合は、具体的なプログラムの一例ではなく、プログラムによって実現するべき制御動作を抽象的に日本語で表現したものである。また、プログラム中の日本語が、プログラム中のコメントを表す場合もある。
【０２３６】
ここで、指定子解析手段８の有する指定子解析部８ａは、上述の実施の形態のように、自動チューニングの種類（インストール時、実行起動前）ごとに、指定子で指定されたパラメータとチューニング領域を分け、別々に以降の機構に引き渡し、処理を行うことが可能である。また、指定子解析部８ａは、本実施形態にて説明するように、自動チューニングの種類として、実行時の自動チューニングを行うこともできる。
【０２３７】
より詳細には、指定子解析部８ａは、図１９（ｂ）に示すような実行時最適化を指示する指定子の有無を判別するとともに、実行時最適化において起動時に最適化を行うか、または実行時最適化において該当部分実行時に最適化を行うかのいずれかを指定する指定子についても判別を行うようになっている。
【０２３８】
また、この指定子解析部８ａは、指定子に基づいて判別した情報を、図２に示すプログラム作成手段９のメインプログラム作成部９ａとサブプログラム作成部９ｂとに通知する。そして、プログラム作成手段９は、上述の指定子に応じた処理を行う。
【０２３９】
ここで、上述の実施の形態において、インストール時の最適化を指定する指定子ｉｎｓｔａｌｌに対応するものとして、例えば実行時最適化を指定する指定子の一例としてｄｙｎａｍｉｃを用いることができる。また、実行時最適化において、例えば起動時に最適化を行うための指定子の一例としてｉｎｉｔを用いることができ、また、該当部分実行時に最適化を行うための指定子の一例としてはｈｅｒｅを用いることができる。
【０２４０】
なお、以下に説明する例では、プログラムをＦｏｒｔｒａｎ言語を用いて記述しているが、本発明はこれに限るものではなく、任意の関数型計算機言語（Ｃ言語、Ｃ＋＋言語など）を用いて記載されたプログラムにおいても、本発明による処理の本質は同じとなる。したがって、本発明の処理は、計算機言語の違いによる影響を受けない。
【０２４１】
以下では、指定子としてｉｎｉｔを用いる方式１（起動時実行方式）と、指定子としてｈｅｒｅを用いる方式２（該当部分実行方式）とに分けて説明をする。
【０２４２】
まず、方式１においては、図１９（ｂ）に示す実行時最適化指定子として、ｄｙｎａｍｉｃとｉｎｉｔが指定されているものとする。このとき、このプログラムの入力に応じて、計算装置１の指定子解析部８ａ・メインプログラム作成部９ａ・サブプログラム作成部９ｂが、図２０（ａ）に示すようなメインプログラム、図２０（ｂ）に示すようなプログラム、図２０（ｃ）に示すような実測・推定ルーチンを生成する。また、ここでは、図示していないが、チューニング領域Ｂについて、最適化するためのパラメータを引数としてチューニング領域Ｂを実行するプログラムを、サブプログラムとして作成する。
【０２４３】
一方、方式２においては、図１９（ｂ）に示す実行時最適化指定子として、ｄｙｎａｍｉｃとｈｅｒｅが指定されているものとする。このとき、このプログラムの入力に応じて、計算装置１の指定子解析部８ａ・メインプログラム作成部９ａ・サブプログラム作成部９ｂが、図２１（ａ）に示すようなメインプログラム、図２１（ｂ）に示すようなプログラム、図２１（ｃ）に示すような実測・推定ルーチンを生成する。また、ここでは、図示していないが、チューニング領域Ｂについて、最適化するためのパラメータを引数としてチューニング領域Ｂを実行するプログラムを、サブプログラムとして作成する。
【０２４４】
なお、図１９（ａ）（ｂ）においては、サブルーチン中に指定子を記述した例について説明しているが、これに限るものではない。方式１、方式２のいずれにおいても、メインルーチン中に指定子を記述した場合であっても、最適化するためのチューニング領域についてサブプログラムを作成し、メインプログラムとしてのメインルーチンから呼び出すようにするという点で、同様の処理がなされる。
【０２４５】
以上に概略を説明したように、方式１にて生成したプログラムは図２０（ａ）に示すようにメインプログラムの先頭に実測・推定ルーチンとしてのＡｕｔｏ＿ｘｘｘの呼び出しがある一方、方式２にて生成したプログラムは図２１（ａ）に示すようにチューニング領域の直前に実測・推定ルーチンとしてのＡｕｔｏ＿ｘｘｘの呼び出しがある。この違いによって、後述するように、実測・推定ルーチンの実行による最適化のための時間が大きく異なることになる。
【０２４６】
以下では、サブプログラムのより詳細な一例を参照して、より具体的な実施例について説明する。ここでは、実施例として、疎行列連立一次方程式の解法で用いられる反復解法の１つである、共役勾配法（ＣＧ法：Ｃｏｎｊｕｇａｔｅ  Ｇｒａｄｉｅｎｔ）への適用例について説明する。
【０２４７】
ＣＧ法とは、疎行列Ａと右辺ベクトルｂとが与えられたときに、連立一次方程式Ａｘ＝ｂを満たす解ベクトルｘを求めるための方法である。このような解法はいろいろ知られているが、ＣＧ法は反復解法と呼ばれる解法の一つである。このＣＧ法においては、反復回数（後述するＩループの繰り返し回数）は疎行列Ａの数値的特徴に依存して決まることになるため、反復回数は「問題依存」すると呼ばれる。
【０２４８】
まず、ＣＧ法のサブルーチンにおける疎行列一ベクトル積計算部分に、方式２（該当部分実行方式）の実行時自動チューニングを指定した適用例について説明する。
【０２４９】
図２２は、符号Ｃ７で示す疎行列一ベクトル積演算処理（ｑ＾（Ｉ）＝Ａ  ｐ＾（Ｉ））に対して、方式２の実行時自動チューニングを行う指定子（ｄｙｎａｍｉｃ，  ｈｅｒｅ）が指定されている。
【０２５０】
ここで、図２２の内容について簡単に説明をする。まず、図２２に示される各変数について、説明をする。図２２に示すＡは、疎行列を表しており、連立一次方程式の係数行列に相当する。Ａは、例えば１次元配列を用いて実装されることが多い。また、ｂは１次元配列のｎ次元ベクトルであり、連立一次方程式の右辺ベクトルに相当する。
【０２５１】
また、Ｉループ（Ｉについてのループ）におけるスカラーの値は下付きの「  ＿」で示している。Ｉループにおけるベクトルの値は、上付きの「  ＾  」で表記している。またベクトルの転置を、「Ｔ」で表す。例えば、ｐ＿（Ｉ）はＩループでのスカラーｐの値を示し、ｐ＾（Ｉ）はＩループでのベクトルｐの値を示し、ｐ＾（Ｉ）ＴはＩループでのべクトルｐの転置べクトルの値を示す。なお、このＩループの反復回数は、上述のように問題依存するため、この図２２では特に示していない。
【０２５２】
また、プログラム作成用補助配列として、ｚ＾（Ｉ−１）、ｒ＾（Ｉ−１）、Ｍ、ｐ＾（Ｉ−１）、ｑ＾（Ｉ）を用いる。また、プログラム作成用補助変数（スカラー）として、ｐ＿（Ｉ−１）、ｂｅｔａ＿（Ｉ−１）、ａ＿Ｉを用いる。ここで、ｚ＾（Ｉ−１）、ｒ＾（Ｉ−１）、ｐ＾（Ｉ−１）、ｑ＾（Ｉ）は、ｎ次元ベクトルの１次元配列である。また、Ｍは疎行列であり、例えば１次元配列によって実装されることが多い。また、ｐ＿（Ｉ−１）、ｂｅｔａ＿（Ｉ−１）、ａ＿Ｉは、倍精度実数のスカラーである。
【０２５３】
また、図２２の符号Ｃ１にて示す処理は、プログラムのコメントである。与えられたベクトルｂ、  ｘ＾（０）を用いて、行列Ａとベクトルｘとのベクトル積  Ａｘ＾（０）とベクトルｂとの差を演算して、ｒ＾（０）を計算する。
【０２５４】
符号Ｃ２の処理は、与えられた疎行列Ｍ、ベクトルｒ＾（Ｉ−１）を用いて、ベクトルｚ＾（Ｉ−１）を求めることを意味する。この求解には、ＣＧ法の反復回数を減少させるようなＭを作成し、ベクトルｚを求めるような処理を行うための、ある種の数値計算アルゴリズムの利用が必要となる。このようなアルゴリズムについては、通常ＣＧ法において用いられているものを用いることができる。詳細については説明を省略する。
【０２５５】
符号Ｃ３の処理は、与えられた転置ベクトルｒ＾（Ｉ−１）Ｔ  とベクトルｚ＾（Ｉ−１）との内積演算をすることで、スカラーｐ＿（Ｉ−１）を計算することを意味する。
【０２５６】
符号Ｃ４の処理は、ベクトルのコピーを行うことを意味する。
【０２５７】
符号Ｃ５の処理は、与えられたスカラーｐ＿（Ｉ−１）とｐ＿（Ｉ−２）との除算から、スカラーｂｅｔａ＿（Ｉ−１）を計算することを意味する。
【０２５８】
符号Ｃ６の処理は、与えられたベクトルｚ＾（Ｉ−１）、スカラーｂｅｔａ＿（Ｉ−１）、ベクトルｐ＾（Ｉ−１）から、ベクトルｐ＾（Ｉ）を計算することを意味する。このために、スカラー・ベクトル積ｂｅｔａ＿（Ｉ−１）  ｐ＾（Ｉ−１）の演算結果であるベクトルと、ベクトルｚ＾（Ｉ−１）との加算処理が必要となっている。
【０２５９】
符号Ｃ７の処理は、疎行列Ａとベクトルｐ＾（Ｉ）との疎行列・ベクトル積をすることで、ベクトルｑ＾（Ｉ）を計算することを意味する。
【０２６０】
符号Ｃ８の処理は、ベクトルの転置ｐ＾（Ｉ）Ｔと、ベクトルｑ＾（Ｉ）との内積計算の結果のスカラー値と、スカラー値ｐ＿（Ｉ−１）との除算をすることで、スカラー値ａ＿Ｉを計算することを意味する。
【０２６１】
符号Ｃ９の処理は、スカラー値ａ＿Ｉと、ベクトルｐ＾（Ｉ）との積の結果のベクトルと、ベクトルｘ＾（Ｉ−１）とを加算することで、ベクトルｘ＾（Ｉ）を計算することを意味する。
【０２６２】
符号Ｃ１０の処理は、スカラー値ａ＿Ｉと、ベクトルｑ＾（Ｉ）との積の結果のベクトルと、ベクトルｒ＾（Ｉ−１）とを演算することで、ベクトルｒ＾（Ｉ−１）を計算することを意味する。
【０２６３】
また、符号Ｃ１０の後に示す、末尾の「収束を確かめ、必要なら繰り返す」との処理は、収束判定結果が十分であれば、Ｉループでの反復を中断して、ｅｎｄｄｏ以降の部分に分岐することを意味する。ここで、収束を計算する方法はいろいろあり、どのようなものを用いてもよい。例えば、一般的な処理方式として、Ａｘ＝ｂについてＣＧ法で計算中のｘに対してｒ＝｜Ａｘ−ｂ｜を計算して、ｒが十分に小さいかどうかを検査すればよい。
【０２６４】
なお、上述の符号Ｃ７で示す疎行列一ベクトル積演算処理は、より具体的には、図２３に示すようなプログラムに相当するものである。
【０２６５】
ここで、図２３においては、疎行列Ａとベクトルｘとの疎行列・ベクトル積演算の具体的なコードを示すために、疎行列Ａを表現するためのデータ構造を実現する配列（情報を維持する配列）として、Ａｖａｌ（Ｊ）、ｒｏｗ＿ｐｔｒ（Ｉ），ｃｏｌ＿ｉｎｄ（Ｊ）を用いている。また、疎行列Ａと行列・ベクトル積演算をするために必要な、ベクトルｘの要素として、ｘ（ｃｏｌ＿ｉｎｄ（Ｊ））を用いている。
【０２６６】
より詳細には、Ａｖａｌ（Ｊ）は、疎行列Ａの数値である、倍精度実数値が格納されている、１次元配列を意味する。また、ｃｏｌ＿ｉｎｄ（Ｊ）は、整数の１次元行列であり、疎行列Ａの非零要素がある列の番号が収納されている。したがって、ｘ（ｃｏｌ＿ｉｎｄ（Ｊ））によって、疎行列Ａの非零要素に対応するベクトルｘの要素を返すことができる。
【０２６７】
また、ｒｏｗ＿ｐｔｒ（Ｉ）には、疎行列Ａの非零要素がある行の番号が収納されている。これら、ｒｏｗ＿ｐｔｒ（Ｉ）、ｃｏｌ＿ｉｎｄ（Ｊ）の値は、疎行列Ａが確定する段階で設定される。したがって、これらの値は、ライブラリ呼び出しの地点で定まっている、静的な値である。言い換えると、これらの値は、ＣＧ法をプログラムする際の補助配列における値のように、ＣＧ法のプログラム中で動的に決まる値ではない。
【０２６８】
ここで、図２２に示す指定子は、図２３で示されるコードの最内ループ（Ｊループ）に対し、アンローリング処理をする自動チューニングを指定している。
【０２６９】
このループ長は、変数配列ｒｏｗ＿ｐｔｒ（Ｉ）、ｒｏｗ＿ｐｔｒ（Ｉ＋１）で指定されていることから、ループ長は固定ではない。また一般的に、実行時にならないとこの変数配列の値は決まらない。したがって、本適用例は、実行時自動チューニングのみ指定できる一例といえる。
【０２７０】
そして、図２３に示すプログラムに対して、図２２に示すような実行時自動チューニングでのアンローリング指定によって、このチューニング領域は、図２４に示すようなサブプログラムとなる。すなわち、図２３の疎行列−ベクトル積コードが図２４に示すように、１段ないし８段のアンローリング段数を有するプログラムに書き換えられる。なお、図２４において符号ｄ１で示す領域は、アンローリング段数が３段ないし７段の領域を省略して示すものである。
【０２７１】
また、計算装置１によって、図２５（ａ）に示すようなメインプログラム、図２５（ｂ）に示すようなプログラム、図２５（ｃ）に示すような実測・推定ルーチンが作成される。なお図２５（ａ）〜（ｃ）に示すプログラムコードは、本適用例説明のために簡略化したコードであり、実際に生成されるコードとは同一ではない。例えば、各プログラムは、さらに図示しない他の処理を含んでいてもよいことはもちろんである。
【０２７２】
このように、方式２においては、図２４に示した８段アンローリングのコードの実行時問を、図２２で示した該当部分が実行される度に測定し、最適な段数を求めるようになっている。
【０２７３】
次に、方式１（起動時実行方式）の実行時自動チューニングを指定した適用例について説明する。
【０２７４】
図２６は、方式２における図２２に相当する、最適化するためのプログラムを示すものである。この方式２においては、後述するように、ＣＧ法のサブルーチンが起動される前に一度だけ図２４によるコードの実行時間を測定し、あとは該当部分で最適なアンローリング段数であるパラメータ値（Ｊ＿ｖａｌの値）を参照するコードを自動生成する。
【０２７５】
ここで、図２６と図２２とは、指定子の指定（ｉｎｉｔかｈｅｒｅか）が異なるのみであり、他は同様であるので、ここでは説明を省略する。
【０２７６】
そして、図２６のプログラムに対するアンローリング指定によって、図２２と同様に、チューニング領域は図２４に示すようなサブプログラムとなる。
【０２７７】
そして、計算装置１によって、図２７（ａ）に示すようなメインプログラム、図２７（ｂ）に示すようなプログラム、図２７（ｃ）に示すような実測・推定ルーチンが作成される。なお図２７（ａ）〜（ｃ）に示すプログラムコードは、本適用例説明のために簡略化したコードであり、実際に生成されるコードとは同一ではない。例えば、各プログラムは、さらに図示しない他の処理を含んでいてもよいことはもちろんである。
【０２７８】
次に、方式１、方式２を用いてチューニングを行った結果について説明をする。
【０２７９】
方式１（図２６）・方式２（図２２）における、ＣＧ法の反復回数、すなわち、図２６・図２２におけるＩループの繰り返し回数を１００回であるとする。なお、この反復回数は、実際には解くべき疎行列の数値的特徴に応じて決まる、問題依存する量である。
【０２８０】
また疎行列−ベクトル積演算以外の実行時間を、１反復あたり０．５秒とする。さらに各パラメータチェック（アンローリング段数の決定）のために要する時問、すなわち疎行列−ベクトル積演算１回当たりの時問、を１秒とする。これは、より詳細には、図２４に記載のＳｕｂ＿ＳＭＶＣＧに特定の値の引数Ｊ＿ｖａｌを指定して実行させる、ｃａｌｌ  Ｓｕｂ＿ＳＭＶＣＧ（Ｊ＿ｖａｌ）の実行時間に相当する。
【０２８１】
このとき、方式１（起動時実行方式）における実行時間の見積もりは、以下のようになる。まず、メインルーチンにおいて、Ａｕｔｏ＿ＣＧからＳｕｂ＿ＳＭＶＣＧが８回呼び出される（１秒×８）。また、Ｓｕｂ＿ＣＧのループ内において、Ａｕｔｏ＿ＣＧではなくＳｕｂ＿ＳＭＶＣＧが呼び出され（１秒）、さらにその他の演算が実行される（０．５秒）。このループが１００回実行される。これによって、１５８秒必要となる。
【０２８２】
また方式２（該当部分実行方式）における実行時間の見積もりは、Ｓｕｂ＿ＣＧのループ内においては、Ａｕｔｏ＿ＣＧからＳｕｂ＿ＳＭＶＣＧが８回呼び出され（１秒×８）、さらにその他の演算が実行される（０．５秒）。また、Ｊ固定のＳｕｂ＿ＳＭＶＣＧ（Ｊ）が実行される（１秒）。このループが１００回実行される。これによって、９５０秒必要となる。
【０２８３】
したがって、見積もられる実行時間としては、方式１では１５８秒であるのに対して、方式２では９５０秒となる。したがって、方式１は方式２に比べ、９５０／１５８＝約６倍高速となる。以上のように、この例の場合は、方式１による方が、方式２に比べて約５〜８倍だけ高速となる。
【０２８４】
ここで、一般的に、間題の数値特性が厳しくなる、難しい問題になるほど、反復回数は増加する。このため、上述の見積もりによれば、問題が難しくなるほど、方式１と方式２との実行時間の差は大きくなるといえる。したがって、方式１は、パラメータのチューニング時間を含まざるを得ない実行時のパラメータ最適化処理において、実際の実行時間の観点から非常に有効であるといえる。以上の適用例のように、方式１の利点は大きい。
【０２８５】
このように、実行時自動チューニング処理を、該当領域が含まれるサブルーチンの実行前に１度行うように分離する方式の適用により、従来から実行時自動チューニングにおいて問題となっていた、（１）冗長な最適化処理を繰り返す点、（２）上記（１）の理由から最適化処理の時間が長くなる点の各問題を解決することができる。
【０２８６】
なお、実施の形態２と上述の実施の形態１との関係について、説明を補足する。例えば、実施形態１における図１３と、実施形態２における図２０とは、同一のものではない。
【０２８７】
まず、実施の形態１記載の例および処理結果は、インストール時方式、実行前方式を指定した場合の処理に限定されており、実行時方式を指定した場合の処理については記載がない。すなわち、実施の形態２の図２１に記載の（Ｓｕｂ＿ｘｘｘ中でのＡｕｔｏ＿ｘｘｘの呼び出し）などに相当するものは、実施の形態１においては具体的な実施例としては記載していない。実施の形態１における図１３は、インストール時方式、実行前方式を指定した場合の処理に関するものである。
【０２８８】
また、実施の形態１においても、チューニング領域の指定場所について、メインルーチン中やサブルーチン中など、その場所は限定されない。すなわち、実施の形態１においても、メインルーチンからではなく、メインプログラムとしてのサブルーチンからの呼び出しが可能である。
【０２８９】
また、実施の形態１において実行時最適化を指定する場合は、実施の形態２の方式２に相当し、例えば図２１と同様のコードが生成される。すなわち、実行時方式を指定する場合には、一般的に、実行時にならないとパラメータのチューニングができない理由があるので、その処理の特殊性から、図２１と同一のコードを生成する必要がある、ということになる。
【０２９０】
一方、実施の形態２における方式１では、実施の形態１とは異なり、チューニング領域の指定がメインルーチンまたはサブルーチンのどちらに存在しようとも、例えばＡｕｔｏ＿ｘｘｘのような自動チューニングルーチンの呼び出しを、強制的にメインプログラムの先頭に移動させる。より詳細には、自動チューニングルーチンの呼び出しを、サブプログラムを呼び出しているループ（Ｉループ）の前に移動させる。すなわち、方式１は、実測・推定ルーチンをメインルーチンから直接呼び出すようにするか、またはメインルーチンから呼び出されるサブルーチンにおいて呼び出すようにするかを切り替えるものではない。
【０２９１】
上述のように、方式１と方式２とでは、実行時間が大きく異なることから、実行時方式においては、問題の性質に応じて、方式１の図２０をより好ましいものとして用いることができる。
【０２９２】
以上のように、本発明は、例えばコンピュータに蓄えられたプログラムにおけるパラメータの最適化、コンピュータを実行させるためのプログラム、記録媒体およびコンピュータに関するものである。特に、上述の実施の形態２は、実行時自動チューニングにおける高速最適化方式に関するものである。
【０２９３】
ここで、ソフトウェアの性能を高めるための自動チューニングの種類は、その最適化を行うタイミングにより、インストール時、実行起動前、および実行時の３種に分類できる。この３種の自動チューニングのうち、もっとも最適化のための時問を考慮しなくてはならない処理が、実行時の自動チューニングである。実行時の自動チューニングを行う揚合には、上述の実施の形態のように、自動チューニングの対象領域であるサブプログラム、もしくはプログラムの一部分が実行された時に、パラメータのチューニングを行う方式が知られている。
【０２９４】
しかしながら上述の構成によれば、（１）冗長な最適化処理を繰り返す、（２）上記（１）の理由から最適化処理の時間が長い、という間題を生ずる。
【０２９５】
そこで、上述のように、実行時最適化の指示において、該当部分を含むサブルーチン等の起動時（呼び出し前）に１度だけ行う処理（方式１）、および該当箇所が呼ばれた時に行う処理（方式２）の２方式に処理を分離して指定することで問題の解決を図る。すなわち、例えばサブプログラム自身が反復回数の多いループの中から呼び出されている場合、ループ内のサブプログラムの呼び出し直前に最適化するか、またはこのループの外側において呼び出して最適化するかを切り替えることができるようにする。なお、実施の形態２における発明機能の利用形態、および処理機構の概略は上述したように、実施の形態１と同様である。
【０２９６】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても、本発明の技術的範囲に含まれる。
【０２９７】
上述の具体的な実施形態または実施例は、あくまでも、本発明の技術内容を明らかにするものであって、本発明はそのような具体例にのみ限定して狭義に解釈されるべきものではなく、特許請求の範囲に示した範囲で種々の変更が可能であり、変更した形態も本発明の技術的範囲に含まれる。
【０２９８】
【発明の効果】
本発明に係る計算装置は、以上のように、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成するプログラム生成部を備えている構成である。
【０２９９】
それゆえ、この計算装置に対して、所定の指定子を記載したプログラムを入力すれば、このプログラムの指定した領域を指定したパラメータについて最適化するためのプログラムを得ることができるという効果を奏する。
【０３００】
本発明に係る計算装置は、以上のように、上記構成において、上記プログラム生成部は、入力される上記プログラムから上記指定子によって指定される上記領域と上記パラメータとを抽出する指定子解析手段と、上記指定子解析手段にて抽出された上記領域を含むサブプログラムを生成し、上記サブプログラムを呼び出して、上記パラメータについての実測による最適化を実行するためのメインプログラムを生成する、プログラム作成手段とを含んでいる構成である。
【０３０１】
それゆえ、この構成によって、上述の本発明に係る計算装置を実現できるという効果を奏する。
【０３０２】
本発明に係る計算装置は、以上のように、上記構成において、上記プログラム作成手段は、上記メインプログラムから呼び出す、または上記メインプログラムに含ませるための、上記パラメータごとに上記サブプログラムを呼び出して所要時間を計測する実測ルーチンと、上記実測ルーチンにて計測した上記所要時間を用いて最適なパラメータを推定する推定ルーチンとを作成する構成である。
【０３０３】
それゆえ、この構成であれば、実測ルーチンと推定ルーチンとが、メインプログラムから呼び出され、またはメインプログラムに含まれているので、メインプログラムを実行可能形式に翻訳して実行するだけで、最適なパラメータを得ることができるという効果を奏する。
【０３０４】
本発明に係る計算装置は、以上のように、上記構成において、上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムを生成する構成である。
【０３０５】
それゆえ、ループの内部にて毎回実測ルーチンが実行されることがないので、その分だけ最適化に要する時間を短縮できるという効果を奏する。
【０３０６】
本発明に係る計算装置は、以上のように、上記構成において、上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムか、または、上記ループ内において上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムかのいずれかを、上記指定子に応じて選択して生成する構成である。
【０３０７】
それゆえ、最適化の際の実測ルーチンおよび推定ルーチンの呼び出し回数を減らすか、または通常の最適化を行うかを、指定子に応じて切り替えることができるという効果を奏する。
【０３０８】
本発明に係る計算装置は、以上のように、上記構成において、上記パラメータごとに計測した上記所要時間を近似するためのコスト定義関数を含むコスト定義関数ライブラリを備えている構成である。
【０３０９】
それゆえ、この構成であれば、例えば、このコスト定義関数ライブラリに含まれるコスト定義関数を用いて、所望の近似を行うことができるという効果を奏する。
【０３１０】
本発明に係る計算装置は、以上のように、上記構成において、計測した上記所要時間を、上記コスト定義関数ライブラリ中に含まれるコスト定義関数の全てを順次用いて近似して、そのうちから最も近似精度のよいコスト定義関数を選択するコスト定義関数決定部を備えている構成である。
【０３１１】
それゆえ、この構成であれば、例えば指定子に推定ルーチンにて用いる近似関数の指定を含めない場合であっても、最適な近似関数を得ることができるという効果を奏する。
【０３１２】
本発明に係る計算装置は、上記指定子解析手段にて抽出した上記領域と上記パラメータとを記憶するチューニング情報データベースを有しており、上記プログラム作成手段と上記コスト定義関数決定部とが、上記チューニング情報データベースを参照して上記領域または上記パラメータを取得する構成である。
【０３１３】
それゆえ、プログラム作成手段とコスト定義関数決定部とが領域またはパラメータを用いる際に、チューニング情報データベースを参照すればよく、その度に領域またはパラメータを抽出する必要がないという効果を奏する。
【０３１４】
本発明に係る計算方法は、以上のように、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成する工程と、上記生成する工程にて得た上記プログラムを実行して最適化を行う工程とを含んでいる構成である。
【０３１５】
それゆえ、この計算方法を例えばコンピュータのような計算装置にて実行すれば、上述の計算装置を実現できるという効果を奏する。
【０３１６】
本発明に係る計算方法は、以上のように、上記構成において、上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムを生成する構成である。
【０３１７】
それゆえ、ループの内部において毎回実測・推測を実行することがないので、その分だけ最適化に要する時間を短縮できるという効果を奏する。
【０３１８】
本発明に係る計算方法は、以上のように、上記構成において、上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムか、または上記ループ内にて上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムかのいずれかを、上記指定子に応じて選択して生成する構成である。
【０３１９】
それゆえ、ループの外側でループよりも前に実測・推測を実行するか、またはループの内部において毎回実測・推測を実行するかを、指定子の設定によって簡単に切り替えることができるという効果を奏する。
【０３２０】
本発明に係るプログラムは、以上のように、上記構成において、コンピュータを、上述のいずれかに記載の計算装置の各手段として動作させる構成である。
【０３２１】
それゆえ、このプログラムを用いれば、上述の計算装置を実現できるという効果を奏する。
【０３２２】
本発明に係る記録媒体は、以上のように、上記構成において、上述のプログラムをコンピュータ読み取り可能に記録した構成である。
【０３２３】
それゆえ、この記録媒体のプログラムをコンピュータにて読み取って実行すれば、上述の計算装置を実現できるという効果を奏する。
【図面の簡単な説明】
【図１】本発明に係る計算装置の概略構成を示すブロック図である。
【図２】上記計算装置のプログラム生成部の構成を示すブロック図である。
【図３】上記計算装置に入力されるプログラムの一例を示す図である。
【図４】（ａ）は上記プログラムのチューニング領域の一具体例を示す図であり、（ｂ）は（ａ）に示すチューニング領域が上記プログラム生成部によって処理されて得られるプログラムの一例を示す図である。
【図５】（ａ）は図３に示すプログラムから上記プログラム生成部によって生成されるメインプログラムの一例を示す図であり、（ｂ）は図３に示すプログラムが上記プログラム生成部によって書き換えられた一例を示す図であり、（ｃ）は図３に示すプログラムから上記プログラム生成部によって生成されるサブプログラムの一例を示す図であり、（ｄ）は図３に示すプログラムから上記プログラム生成部によって生成されるチューニング用プログラムの一例を示す図である。
【図６】上記プログラム生成部による、コスト定義関数決定処理の一例を示すフローチャートである。
【図７】上記プログラム生成部による、サンプリング点決定処理の一例を示すフローチャートである。
【図８】上記プログラム生成部による、パラメータ推定処理（ａ）の一例を示すフローチャートである。
【図９】上記プログラム生成部による、パラメータ推定処理（ｂ）の一例を示すフローチャートである。
【図１０】上記プログラム生成部による、測定用ループ処理の一例を示すフローチャートである。
【図１１】上記計算装置による処理の概略を示すフローチャートである。
【図１２】上記計算装置に入力されるプログラムの他の一例を示す図である。
【図１３】（ａ）は図１２に示すプログラムから上記プログラム生成部によって生成されるメインプログラムの一例を示す図であり、（ｂ）は図１２に示すプログラムから上記プログラム生成部によって生成されるチューニング用プログラムの一例を示す図である。
【図１４】（ａ）は図１２に示すプログラムが上記プログラム生成部によって書き換えられ、生成されるサブプログラムの一例の一部を示す図であり、（ｂ）は（ａ）とは異なる一部を示す図である。
【図１５】上記計算装置の一部を示すブロック図である。
【図１６】上記計算装置の他の一部を示すブロック図である。
【図１７】（ａ）はインストール時最適化の手順を示すフローチャートであり、（ｂ）はライブラリ実行前最適化の手順を示すフローチャートであり、（ｃ）はライブラリ実行時最適化の手順を示すフローチャートである。
【図１８】（ａ）は従来のコンピュータの一例の一部を示すブロック図であり、（ｂ）は従来のコンピュータの他の一例の一部を示すブロック図である。
【図１９】（ａ）は上記計算装置に入力されるプログラムのさらに他の一例の一部を示す図であり、（ｂ）は上記プログラムの（ａ）とは異なる一部を示す図である。
【図２０】（ａ）は図１９（ａ）（ｂ）に示すプログラムから上記プログラム生成部によって生成されるメインプログラムの一例を示す図であり、（ｂ）は図１９（ａ）（ｂ）に示すプログラムから上記プログラム生成部によって書き換えられたプログラムの一例を示す図であり、（ｃ）は図１９（ａ）（ｂ）に示すプログラムから上記プログラム生成部によって生成されるチューニング用プログラムの一例を示す図である。
【図２１】（ａ）は図１９（ａ）（ｂ）に示すプログラムから上記プログラム生成部によって生成されるメインプログラムの他の一例を示す図であり、（ｂ）は図１９（ａ）（ｂ）に示すプログラムから上記プログラム生成部によって書き換えられたプログラムの他の一例を示す図であり、（ｃ）は図１９（ａ）（ｂ）に示すプログラムから上記プログラム生成部によって生成されるチューニング用プログラムの他の一例を示す図である。
【図２２】上記計算装置に入力されるプログラムのさらに他の一例を示す図である。
【図２３】図２２に示すプログラムの一部をより具体的に記載した一例を示す図である。
【図２４】図２２および図２３に示すプログラムから生成されるサブプログラムの一例を示す図である。
【図２５】（ａ）は上記プログラム生成部によって生成されるメインプログラムの他の一例を示す図であり、（ｂ）は上記プログラム生成部によって書き換えられたプログラムの他の一例を示す図であり、（ｃ）は上記プログラムから上記プログラム生成部によって生成されるチューニング用プログラムの他の一例を示す図である。
【図２６】上記計算装置に入力されるプログラムの、図２２とは異なる一例を示す図である。
【図２７】（ａ）は上記プログラム生成部によって生成されるメインプログラムのさらに他の一例を示す図であり、（ｂ）は上記プログラム生成部によって書き換えられたプログラムのさらに他の一例を示す図であり、（ｃ）は上記プログラムから上記プログラム生成部によって生成されるチューニング用プログラムのさらに他の一例を示す図である。
【符号の説明】
１        計算装置
２        プロセッサ
３        ユーザライブラリ（ライブラリ）
４        パラメータ調整層
５        パラメータ情報ファイル
６        プログラム生成部
８        指定子解析手段
９        プログラム作成手段
１０      コスト定義関数決定手段
１０ａ    チューニング情報データベース
１０ｂ    コスト定義関数ライブラリ
１０ｃ    コスト定義関数決定部
【図１】
2004355144.tif 000006
【図２】
2004355144.tif 000007
【図３】
2004355144.tif 000008
【図４】
2004355144.tif 000009
【図５】
2004355144.tif 000010
【図６】
2004355144.tif 000011
【図７】
2004355144.tif 000012
【図８】
2004355144.tif 000013
【図９】
2004355144.tif 000014
【図１０】
2004355144.tif 000015
【図１１】
2004355144.tif 000016
【図１２】
2004355144.tif 000017
【図１３】
2004355144.tif 000018
【図１４】
2004355144.tif 000019
【図１５】
2004355144.tif 000020
【図１６】
2004355144.tif 000021
【図１７】
2004355144.tif 000022
【図１８】
2004355144.tif 000023
【図１９】
2004355144.tif 000024
【図２０】
2004355144.tif 000025
【図２１】
2004355144.tif 000026
【図２２】
2004355144.tif 000027
【図２３】
2004355144.tif 000028
【図２４】
2004355144.tif 000029
【図２５】
2004355144.tif 000030
【図２６】
2004355144.tif 000031
【図２７】
2004355144.tif 000032