TOP > 国内特許検索 > 計算装置、計算方法、プログラムおよび記録媒体 > 明細書

明細書 :計算装置、計算方法、プログラムおよび記録媒体

発行国 日本国特許庁(JP)
公報種別 特許公報(B2)
特許番号 特許第4565201号 (P4565201)
公開番号 特開2004-355144 (P2004-355144A)
登録日 平成22年8月13日(2010.8.13)
発行日 平成22年10月20日(2010.10.20)
公開日 平成16年12月16日(2004.12.16)
発明の名称または考案の名称 計算装置、計算方法、プログラムおよび記録媒体
国際特許分類 G06F   9/45        (2006.01)
FI G06F 9/44 322F
請求項の数または発明の数 9
全頁数 48
出願番号 特願2003-149701 (P2003-149701)
出願日 平成15年5月27日(2003.5.27)
優先権出願番号 2003092592
優先日 平成15年3月28日(2003.3.28)
優先権主張国 日本国(JP)
審査請求日 平成18年2月10日(2006.2.10)
特許権者または実用新案権者 【識別番号】503360115
【氏名又は名称】独立行政法人科学技術振興機構
発明者または考案者 【氏名】片桐 孝洋
個別代理人の代理人 【識別番号】110000338、【氏名又は名称】特許業務法人原謙三国際特許事務所
【識別番号】100080034、【弁理士】、【氏名又は名称】原 謙三
【識別番号】100113701、【弁理士】、【氏名又は名称】木島 隆一
【識別番号】100116241、【弁理士】、【氏名又は名称】金子 一郎
審査官 【審査官】稲垣 良一
参考文献・文献 特開平6-250877(JP,A)
特開2000-276454(JP,A)
板倉 憲一 他,並列プログラム自動最適化ツールTEA Expertの実並列計算機における評価,情報処理学会研究報告,社団法人情報処理学会,1998年 8月 4日,Vol.99,No.66,pp.17-22
佐藤 三久 他,自動適応並列プログラム性能最適化ツールTEA Expert,情報処理学会研究報告,社団法人情報処理学会,1998年 8月 7日,Vol.98,No.72,pp.13-18
片桐 孝洋 他,自動チューニング機構が並列数値計算ライブラリに及ぼす効果,情報処理学会論文誌,社団法人情報処理学会,2001年11月15日,Vol.42,No.SIG 12(HPS 4),pp.60-76
和田 清美 他,並列化コンパイラにおける組合せ並列化技術,情報処理学会研究報告,社団法人情報処理学会,2003年 1月31日,Vol.2003,No.10,pp.1-6
調査した分野 G06F 9/45
G06F 9/44
JSTPlus(JDreamII)
特許請求の範囲 【請求項1】
入力されるプログラムに含まれるパラメータの最適化を行うための、コスト定義関数ライブラリを備えた計算装置において、
最適化の対象となる領域と最適化の対象となるパラメータとコスト定義関数とを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域内のコード、及び、上記指定子によって指定される上記パラメータを当該プログラムから抽出する指定子解析手段と、
上記コスト定義関数ライブラリに含まれる、上記パラメータを変数とする多項式であるコスト定義関数の中から、上記指定子により指定されたコスト定義関数を選択するコスト定義関数選択手段と、
上記指定子によって指定される上記領域内のコード、又は、上記指定子によって指定される上記領域内のコードに上記指定子により指定されるアンローリング処理を施すことにより得られたコードを含み、かつ、上記指定子によって指定される上記領域外のコードを含まないサブプログラムと、上記サブプログラムを呼び出して上記指定子によって指定される上記パラメータについての実測による最適化を実行するためのメインプログラムとを生成するプログラム生成手段と、を備え、
上記プログラム生成手段は、上記メインプログラムから呼び出す、又は、上記メインプログラムに含ませるための、上記パラメータごとに上記サブプログラムを呼び出して所要時間を計測する実測ルーチンと、上記コスト定義選択手段により選択されたコスト定義関数の係数を、上記実測ルーチンにて計測した上記所要時間を最良近似するように最小二乗法により定めるとともに、係数の定められたコスト定義関数の値を最小化する上記パラメータの値を推定する推定ルーチンとを作成する、
ことを特徴とする計算装置。
【請求項2】
上記プログラム生成手段は、上記入力されるプログラムにおいて上記指定子により指定される上記領域内のコードを、上記サブプログラムを呼び出すためのコードに置き換えることによって新たなプログラムを生成するとともに、上記実測ルーチンおよび上記推定ルーチンを呼び出すためのコードの後に、上記新たなプログラムを呼び出すためのコードを含むメインプログラムを生成する、ことを特徴とする請求項に記載の計算装置。
【請求項3】
上記指定子により指定されたコスト定義関数が上記コスト定義関数ライブラリに含まれていない場合、上記コスト定義関数選択手段は、上記実測ルーチンにて計測した上記所要時間を最良近似するよう、上記コスト定義関数ライブラリに含まれる各コスト定義関数の係数を最小二乗法により定めるとともに、係数の定められたコスト定義関数のうちから最も近似精度のよいコスト定義関数を選択する
ことを特徴とする請求項1又は2に記載の計算装置。
【請求項4】
上記領域と上記パラメータとを記憶するチューニング情報データベースを有しており、
上記プログラム生成手段と上記コスト定義関数決定手段とが、上記チューニング情報データベースを参照して上記領域または上記パラメータを取得することを特徴とする請求項に記載の計算装置。
【請求項5】
指定子解析手段プログラム生成手段、コスト定義関数選択手段、および、コスト定義関数ライブラリを備えた計算装置に入力されるプログラムに含まれるパラメータの最適化を行うための計算方法において、
最適化の対象となる領域と最適化の対象となるパラメータとコスト定義関数とを指定する指定子が含まれている上記プログラムが入力されると、上記指定子解析手段が、上記指定子によって指定される上記領域内のコード、及び、上記指定子によって指定される上記パラメータを当該プログラムから抽出する指定子解析工程と、
上記コスト定義関数選択手段が、上記コスト定義関数ライブラリに含まれる、上記パラメータを変数とする多項式であるコスト定義関数の中から、上記指定子により指定されたコスト定義関数を選択するコスト定義関数選択工程と、
上記プログラム生成手段が、上記指定子によって指定される上記領域内のコード、又は、上記指定子によって指定される上記領域内のコードに上記指定子により指定されるアンローリング処理を施すことにより得られたコードを含み、かつ、上記指定子によって指定される上記領域外のコードを含まないサブプログラムと、上記サブプログラムを呼び出して上記指定子によって指定される上記パラメータについての実測による最適化を実行するためのメインプログラムとを生成するプログラム生成工程と、を含み、
上記プログラム生成工程において、上記プログラム生成手段は、上記メインプログラムから呼び出す、または上記メインプログラムに含ませるための、上記パラメータごとに上記サブプログラムを呼び出して所要時間を計測する実測ルーチンと、上記実測ルーチンにて計測した上記所要時間を最良近似するよう、上記コスト定義関数選択工程にて選択されたコスト定義関数の係数を最小二乗法により定めるとともに、係数の定められたコスト定義関数の値を最小化する上記パラメータの値を推定する推定ルーチンとを作成する、ことを特徴とする計算方法。
【請求項6】
上記プログラム生成工程において、上記プログラム生成手段は、上記入力されるプログラムにおいて上記指定子により指定される上記領域内のコードを、上記サブプログラムを呼び出すためのコードに置き換えることによって新たなプログラムを生成するとともに、上記実測ルーチンおよび上記推定ルーチンを呼び出すためのコードの後に、上記新たなプログラムを呼び出すためのコードを含むメインプログラムを生成する、ことを特徴とする請求項に記載の計算方法。
【請求項7】
上記指定子により指定されたコスト定義関数が上記コスト定義関数ライブラリに含まれていない場合、上記コスト定義関数選択工程において、上記コスト定義関数選択手段が、上記実測ルーチンにて計測した上記所要時間を最良近似するよう、上記コスト定義関数ライブラリに含まれる各コスト定義関数の係数を最小二乗法により定めるとともに、係数の定められたコスト定義関数のうちから最も近似精度のよいコスト定義関数を選択する、
ことを特徴とする請求項5又は6に記載の計算方法。
【請求項8】
コンピュータを、請求項1からのいずれか1項に記載の計算装置の各手段として動作させるためのプログラム。
【請求項9】
請求項に記載のプログラムをコンピュータ読み取り可能に記録した記録媒体。
発明の詳細な説明
【0001】
【発明の属する技術分野】
本発明は、プログラムに含まれるパラメータの最適化を行うための計算装置、計算方法、プログラムおよび記録媒体に関するものである。
【0002】
【従来の技術】
従来、コンピュータのような計算装置において、実行するソフトウェアプログラムを最適化する際には、最適化するためのパラメータをユーザが指定して、そのパラメータについての最適化処理をユーザが順次手作業で指示するようになっていた。
【0003】
例えば、ユーザは、プログラムについてチューニング(最適化)すべきパラメータを、手作業で登録する。さらには、実際に最適化を行うために、例えば、チューニングを行うための前処理、実際のチューニング方法、およびチューニングしたパラメータの利用のための処理などについて、コンピュータに対してそれぞれ指示する必要がある。
【0004】
なお、このようなチューニングを行うための構成の一例として、日本国の公開特許公報「特開2000-276454号公報(公開日:2000年10月6日)」には、パラメータを調節してインストールを行う機能を有するソフトウェアの構成方法が記載されている。
【0005】
【特許文献1】
特開2000-276454号公報
【0006】
【発明が解決しようとする課題】
しかしながら、上述の従来の構成によれば、パラメータを最適化する際に、開発時間と開発費用の増大、機能拡張性の低さ、およびバグ混入の可能性の高さなどの問題を生ずる。
【0007】
すなわち、従来の構成によれば、パラメータの登録の後にも、実際にパラメータの最適化を達成するために、種々の設定が必要となる。したがって、パラメータを最適化する際には、開発時間と開発費用の増大、機能拡張性の低さ、およびバグ混入の可能性の高さなどの問題を生ずることになる。
【0008】
また、例えば、最適なパラメータ推定のための最適化問題求解処理において、設定を手作業で行うため、通常は単一のコスト定義関数による推定機能しか実現されない。このため、パラメータ推定機能が低いという問題も生ずる。
【0009】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、パラメータの最適化が容易な計算装置、計算方法、プログラムおよび記録媒体を提供することにある。
【0010】
【課題を解決するための手段】
本発明に係る計算装置は、上記課題を解決するために、入力されるプログラムに含まれるパラメータの最適化を行うための計算装置において、最適化を行う上記プログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成するプログラム生成部を備えていることを特徴としている。
【0011】
この計算装置は、入力されるプログラムについての最適化を行うものである。
より詳細には、この計算装置は、入力されるプログラムに所定の指定子が含まれてことを検出すると、それに応じて、このプログラムの最適化を実際に実行するためのプログラムを生成するプログラム生成部を備えている。プログラム生成部は、この指定子によって指定される領域についての最適化を、指定子によって指定されるパラメータについて行うための新たなプログラムを生成する。なお、パラメータの指定には、どの変数を指定するかというパラメータの種類だけでなく、パラメータの範囲の指定が含まれていてもよい。また、プログラムの生成には、プログラムの書き換えをも含むものとする。
【0012】
例えば、プログラム生成部は、指定子によって指定される領域を含むようなサブプログラムを作成する。例えば、指定子によって、パラメータとしてのループアンローリング段数の最適化が指定され、指定される領域がループ処理である場合には、引数として指定されるループアンローリング段数に応じたループ処理を実行するサブプログラムを作成する。すなわち、サブプログラムとは、例えば調節するためのパラメータを引数として有しており、指定子によって指定された領域についての処理をこのパラメータに応じて実行するプログラムである。また、このサブプログラムをパラメータごとに呼び出して実際の所要時間を計測するための実測ルーチンを作成する。また、実測ルーチンにて計測した所要時間から最適なパラメータを推定するための推定ルーチンを作成する。
【0013】
このため、この計算装置に対して、所定の指定子を記載したプログラムを入力すれば、このプログラムの指定した領域を指定したパラメータについて最適化するためのプログラムを得ることができる。
【0014】
計算装置は、プログラム生成部の生成したプログラムを実行形式に翻訳するコンパイラを備えていてもよい。また、計算装置は、実行形式を実行するプロセッサを備えていてもよく、コンパイラの生成した実行形式をプロセッサにて実行して実際に最適化を行ってもよい。または、計算装置は、プログラム生成部の生成したプログラムを外部の他の計算装置に送信して、実行形式への翻訳および実際の最適化を行うようにしてもよい。いずれにせよ、本発明に係る計算装置は、所定の形式のプログラムを入力すると、このプログラムから新たなプログラムを生成するプログラム生成部を備えていればよい。
【0015】
例えば、プログラム生成部の生成したサブプログラム、実測ルーチン、推定ルーチンが、計算装置において実行可能形式に翻訳され、実測ルーチン、推定ルーチンが実行されれば、最適なパラメータを得ることができる。
【0016】
ここで、従来の計算装置は、入力されるプログラムの最適化を行う場合には、処理の各段階において、ユーザによる所定の指示が必要となっていた。このため、設定に時間を要し、開発時間と開発費用とを増大させていた。また、ユーザによる設定には種々の制約があり、便利なものとはいえないため、機能拡張性も低くなっていた。また、ユーザによる設定にミスが含まれて、バグが混入する可能性があった。
【0017】
なお、上記の計算装置を、自動チューニング機能を付加したプログラムを生成する生成手段を備えたプログラミング言語処理装置である、と表現することもできる。
【0018】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記プログラム生成部は、入力される上記プログラムから上記指定子によって指定される上記領域と上記パラメータとを抽出する指定子解析手段と、上記指定子解析手段にて抽出された上記領域を含むサブプログラムを生成し、上記サブプログラムを呼び出して、上記パラメータについての実測による最適化を実行するためのメインプログラムを生成する、プログラム作成手段とを含んでいることを特徴としている。
【0019】
この構成によって、上述の本発明に係る計算装置を実現できる。例えば、メインプログラムには、サブプログラムをパラメータごとに呼び出して実際の所要時間を計測するための実測ルーチンと、実測ルーチンにて計測した所要時間から最適なパラメータを推定するための推定ルーチンとを含ませればよい。
【0020】
なお、ここでいうメインプログラムは、いわゆるメインルーチンに限るものではなく、メインルーチンから呼び出されるサブルーチンをも含むものであってもよい。すなわち、上述のように、サブプログラムとは、最適化を行うための領域を抽出して生成したものであり、例えば最適化するためのパラメータを引数としてその領域についての処理を実行するものであるので、メインプログラムはそのサブプログラムを呼び出すものであればよい。したがって、メインルーチンに限るものではなく、メインルーチンから呼び出されるサブルーチンが、メインプログラムとして、上述のサブプログラムを呼び出す構成であってもよい。
【0021】
また、プログラム作成手段がメインプログラムとサブプログラムとを作成する順序は、どのようなものであってもよく、例えばサブプログラムを作成した後にメインプログラムを作成してもよいし、または例えばメインプログラムを作成した後にサブプログラムを作成してもよい。
【0022】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記プログラム作成手段は、上記メインプログラムから呼び出す、または上記メインプログラムに含ませるための、上記パラメータごとに上記サブプログラムを呼び出して所要時間を計測する実測ルーチンと、上記実測ルーチンにて計測した上記所要時間を用いて最適なパラメータを推定する推定ルーチンとを作成することを特徴としている。
【0023】
この構成であれば、実測ルーチンと推定ルーチンとが、メインプログラムから呼び出され、またはメインプログラムに含まれているので、メインプログラムを実行可能形式に翻訳して実行するだけで、最適なパラメータを得ることができる。なお、指定子には、推定ルーチンにて用いる、最適なパラメータを近似によって推定するための近似関数の指定が含まれていてもよい。
【0024】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムを生成することを特徴としている。
【0025】
ここで、実測ルーチンにおいては、上述のように、パラメータごとにサブプログラムを呼び出して所要時間を計測するため、この所要時間の計測に時間が必要となる。
【0026】
そこで、上記構成のように、メインプログラムとして、ループの外側でループよりも前において、実測ルーチンを呼び出すものを作成する。したがって、最適化の際の実測ルーチンの呼び出し回数を減らすことができるので、実測に要する時間を削減できる。すなわち、ループの内部にて毎回実測ルーチンが実行されることがないので、その分だけ最適化に要する時間を短縮できる。
【0027】
また、推定ルーチンについても、実測ルーチンをループの外にて呼び出すのであれば、ループの内部にて呼び出す必要がないので、同様にループの外にて呼び出すようにすればよい。
【0028】
このために、プログラム作成手段は、例えばメインプログラムの先頭において実測ルーチンおよび推定ルーチンを呼び出すようなメインプログラムを生成する構成であってもよい。この構成であれば、上記の計算装置を確実に実現できる。
【0029】
なお、上記計算装置を、実行時のパラメータチューニングにおいて、該当する領域を含むサブプログラムを呼び出す前に行うチューニング方式を有する構成のソフトウェア構成方式を実行する計算装置である、と表現することもできる。
【0030】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムか、または、上記ループ内において上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムかのいずれかを、上記指定子に応じて選択して生成することを特徴としている。
【0031】
この構成であれば、最適化の際の実測ルーチンおよび推定ルーチンの呼び出し回数を減らすか、または通常の最適化を行うかを、指定子に応じて切り替えることができる。
【0032】
すなわち、例えば最適化の対象となるサブプログラムの領域における変数が、上述のサブプログラムを呼び出すループ内において確定する場合には、指定子を適切なものに設定して、ループ内において実測・推定ルーチンを呼び出す通常の最適化を行うようにすればよい。
【0033】
また、例えばサブプログラムの領域における変数が、上述のサブプログラムを呼び出すループ前において確定している場合には、このループ前に実測・推定ルーチンを呼び出すようにして最適化を行えば、最適化に要する時間を削減できる。
【0034】
なお、上記計算装置を、実行時のパラメータチューニングにおいて、該当する領域を含むサブプログラムを呼び出す前に行うチューニング方式と、該当する領域が実行される時に行うチューニング方式の2方式に分離する構成のソフトウェア構成方式を実行する計算装置である、と表現することもできる。
【0035】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、上記パラメータごとに計測した上記所要時間を近似するためのコスト定義関数を含むコスト定義関数ライブラリを備えていることを特徴としている。
【0036】
この構成であれば、例えば、このコスト定義関数ライブラリに含まれるコスト定義関数を用いて、所望の近似を行うことができる。
【0037】
また、例えば、指定子に、推定ルーチンにて用いる近似関数の指定が含まれている場合には、この指定された近似関数をコスト定義関数ライブラリ中から探して用いるようにしてもよい。
【0038】
本発明に係る計算装置は、上記課題を解決するために、上記構成において、計測した上記所要時間を、上記コスト定義関数ライブラリ中に含まれるコスト定義関数の全てを順次用いて近似して、そのうちから最も近似精度のよいコスト定義関数を選択するコスト定義関数決定部を備えていることを特徴としている。
【0039】
この構成であれば、例えば指定子に推定ルーチンにて用いる近似関数の指定を含めない場合であっても、最適な近似関数を得ることができる。
【0040】
また、指定子にて指定した近似関数がコスト定義関数ライブラリ中に含まれていない場合であっても、上記構成のように精度のよい近似関数を選択できる。
【0041】
本発明に係る計算装置は、上記指定子解析手段にて抽出した上記領域と上記パラメータとを記憶するチューニング情報データベースを有しており、上記プログラム作成手段と上記コスト定義関数決定部とが、上記チューニング情報データベースを参照して上記領域または上記パラメータを取得することを特徴としている。
【0042】
この構成であれば、指定子解析手段にて抽出した領域とパラメータとをチューニング情報データベースに記憶しておくので、プログラム作成手段とコスト定義関数決定部とが領域またはパラメータを用いる際に、チューニング情報データベースを参照すればよく、その度に領域またはパラメータを抽出する必要がない。
【0043】
本発明に係る計算方法は、上記課題を解決するために、計算装置に入力されるプログラムに含まれるパラメータの最適化を行うための計算方法において、最適化を行う上記プログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成する工程と、上記生成する工程にて得た上記プログラムを実行して最適化を行う工程とを含んでいることを特徴としている。
【0044】
この計算方法を例えばコンピュータのような計算装置にて実行すれば、上述の計算装置を実現できる。なお、上述の計算方法を、自動チューニング機能を付加したソフトウェアを生成するステップを備えた、プログラミング言語処理方法である、と表現することもできる。
【0045】
本発明に係る計算方法は、上記課題を解決するために、上記構成において、上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムを生成することを特徴としている。
【0046】
このようにすれば、ループの外側でループよりも前に実測・推測を実行し、ループの内部において毎回実測・推測を実行することがないので、その分だけ最適化に要する時間を短縮できる。
【0047】
本発明に係る計算方法は、上記課題を解決するために、上記構成において、上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムか、または上記ループ内にて上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムかのいずれかを、上記指定子に応じて選択して生成することを特徴としている。
【0048】
この構成であれば、ループの外側でループよりも前に実測・推測を実行するか、またはループの内部において毎回実測・推測を実行するかを、指定子の設定によって簡単に切り替えることができる。指定子は、例えばサブプログラムによって実現される、対象となる問題の性質に応じて選択すればよい。
【0049】
また、上述の計算方法を、上述の計算装置の有する自動チューニング機能を付加したプログラムを生成するステップを備えた、プログラミング言語処理方法である、と表現することもできる。
【0050】
また、上述の計算方法を用いて、自動チューニング機能を有するプログラムを生成する生成手段を備えたプログラミング言語処理装置を実現してもよい。
【0051】
本発明に係るプログラムは、上記課題を解決するために、上記構成において、コンピュータを、上述のいずれかに記載の計算装置の各手段として動作させることを特徴としている。
【0052】
このプログラムを用いれば、上述の計算装置を実現できる。なお、このプログラムを使用する方法を、上述の言語処理装置を利用するために行う、プログラムの利用形態である、と表現することもできる。
【0053】
本発明に係る記録媒体は、上記課題を解決するために、上記構成において、上述のプログラムをコンピュータ読み取り可能に記録したことを特徴としている。
【0054】
この記録媒体のプログラムをコンピュータにて読み取って実行すれば、上述の計算装置を実現できる。なお、この記録媒体を、自動チューニング機能を付加したソフトウェアを生成する生成手段として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体である、と表現することもできる。
【0055】
【発明の実施の形態】
〔実施の形態1〕
本発明の一実施の形態について図1ないし図17に基づいて説明すると以下の通りである。
【0056】
本実施形態の計算装置は、所定の形式の計算機言語(プログラム)から、パラメータの最適化(チューニング)が容易となるような他のプログラムを生成する、プログラム生成部を備えた構成である。また、プログラムを実行形式に翻訳するコンパイラを備えている。
【0057】
計算装置1は、図1に示すように、プロセッサ2、ユーザライブラリ3、パラメータ調整層4、パラメータ情報ファイル5、プログラム生成部6およびコンパイラ7を含んでいる。
【0058】
また、計算装置1は、図示しない記録媒体を備えている。計算装置1は、例えば、外部から入力される図示しないパラメータを用いてライブラリ3中のサブルーチンを呼び出して、計算を行う。計算結果は図示しない表示装置に出力される。
【0059】
プロセッサ2は、計算を行うため計算処理部である。プロセッサ2は、図示しないnprocs個のプロセッサを内部に備えている。計算装置1は、プロセッサ2の複数のプロセッサを用いて、並列計算装置として機能する。
【0060】
ライブラリ3は、数値計算ライブラリである。ライブラリ3は少なくとも一つ以上のサブルーチンを含んでいる。本実施形態のライブラリ3は、図16に示すように、内部に複数のサブルーチン3a~3kを備えている。この図16は、図1に示す計算装置1の一部を示すものである。
【0061】
このライブラリ3やサブルーチン3a~3kには、なんらかの方法(専用記述言語など)を用いて、パラメータを記述してアクセスする。このパラメータのうちの一部は、例えば外部からユーザによってライブラリ3へ直接入力される。また、パラメータの他の一部は、ライブラリ3内で使われる。また、パラメータのさらに他の一部は、パラメータ調整層4を介してライブラリ3に入力される。
【0062】
このライブラリ3は、ユーザによって開発された数値計算ライブラリであるが、これに限るものではなく、例えばライブラリ開発者によって開発されたシステムライブラリであってもよい。このような、MPI(Message Passing Interface)などの計算機環境やOS(Operating System)などであらかじめ用意されているライブラリ等についても、ソフトウェアインタフェースさえ周知であれば、ユーザやライブラリ開発者がパラメータ記述を行うことによって、パラメータ調整層4にパラメータ情報を引き渡すことができる。
【0063】
なお、ライブラリの備えるサブルーチンの内容、個数などについては、特に限定されない。また、計算装置1には、ライブラリ以外のプログラムが備えられていてもよく、そのプログラムによって他の機能が実現されてもよい。
【0064】
パラメータ調整層4は、ライブラリ3の用いるパラメータを調整する調整装置として機能する。パラメータ調整層4は、ライブラリ3に入力するパラメータの一部を調整した上で、ライブラリ3に入力する。パラメータ調整層4は、インストール時最適化層(Installation Optimization Layer:IOL)4a、実行前最適化層(Before Execution-invocation Optimization Layer:BEOL)4bおよび実行時最適化層(Run-time Optimization Layer:ROL)4cを含んでいる。これらの各層の機能については後述する。
【0065】
パラメータ情報ファイル5は、パラメータ調整層4において調整されたパラメータを保存するためのファイルである。
【0066】
なお、本実施形態の計算装置1において、ライブラリ3は、図示しない記録媒体に記録されたプログラムが読み取られ、実行されることによって実現される機能である。また、パラメータ調整層4も、図示しない記録媒体に記録されたプログラムが読み取られ、実行されることによって実現される機能である。
【0067】
プログラム生成部6は、所定の形式のプログラムから、パラメータの最適化を容易に実行できるような他のプログラムを生成するものである。プログラム生成部6の詳細については後述する。
【0068】
コンパイラ7は、プログラムを実行形式に翻訳するものである。本実施形態のコンパイラ7は、プログラム生成部6にて生成されたプログラムを実行形式に翻訳する。コンパイラ7は、翻訳した実行形式をプロセッサ2へと出力する。プロセッサ2にて、実行形式を実行すると、後述するように、実際にパラメータの最適化を行うことができる。
【0069】
なお、このプログラム生成部6・コンパイラ7は、計算装置1において、図示しない記録媒体に記録されたプログラムが読み取られ、実行されることによって実現される機能である。
【0070】
ここで、プログラム生成部6の詳細について説明する。プログラム生成部6は、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれているプログラムが入力されると、指定子によって指定される領域とパラメータとについての、実測による最適化を実行するためのプログラムを生成する。プログラム生成部6は、図2に示すように、指定子解析手段8、プログラム作成手段9、およびコスト定義関数決定手段10を含んでいる。
【0071】
指定子解析手段8は、指定子が含まれるプログラムを解析し、指定子で指定されるパラメータと、指定子で指定されるプログラムの一部分(以下、チューニング領域(領域)と呼ぶ。)とを抽出するためのものである。
【0072】
指定子解析手段8は指定子解析部8aを含んでおり、プログラム生成部6に入力されるプログラムは、まず指定子解析部8aへと入力される。指定子解析部8aが、プログラムからパラメータとチューニング領域とを抽出して、コスト定義関数決定手段10のチューニング情報データベース10aに含まれる、パラメータ10d・チューニング領域集合10eへとそれぞれ出力する。このように、指定子解析部8aは指定子からパラメータを抽出する。また、指定子から、最適化を行う際の処理の内容を抽出する。また、チューニング領域を抽出して、必要に応じて所定の処理を行う。
【0073】
ここで、図3において、抽象的なレベルで記述しているプログラム(Subroutine xxx())は、最適化するべきチューニング領域を含んでいるプログラムの一例である。ここで、図中で「チューニング領域」として示すのが、チューニング領域の一例である。また、「指定子の始め」、「指定子の終わり」として示すのが、指定子の一例である。本実施形態のチューニング領域は、指定子の始め、指定子の終わりによって囲まれた領域である。しかしながら、これに限るものではなく、例えば指定子の始めとその始めの位置からの行数によって指定することもできる。
【0074】
なお、この例では、Fortran言語を用いてプログラムの一例を記述しているが、本発明はこれに限るものではなく、他の任意の計算機言語を用いるものであってもよい。この場合であっても、処理は同様となる。例えば、関数型計算機言語(C言語、C++言語など)を用いて記載されたプログラムにおいても、本発明による処理の本質は同じとなる。また、プログラム中の日本語による記載は、特に断らない場合は、具体的なプログラムの一例ではなく、プログラムによって実現するべき制御動作を抽象的に日本語で表現したものである。また、プログラム中の日本語が、プログラム中のコメントを表す場合もある。
【0075】
チューニング領域の一例を、図4(a)に示す。この図4(a)に示すプログラムが、指定子によって囲まれており、指定子によって最適化の方法としてアンローリングが指定されている場合を考える。この場合には、指定子解析部8aは、図4(b)に示すようなプログラムを生成し、その情報をプログラム作成手段9に引き渡す。すなわち、アンローリング指定子のように、チューニング領域に記載されたプログラムに一定の処理を施し、新たなチューニング領域とする処理が指定される場合には、指定子解析部8aにてその処理を行った後、その情報をプログラム作成手段9に引き渡す。また、指定子によって指定された処理が、プログラムに対する変更を特に必要としない場合には、指定子解析部8aは、抽出したチューニング領域をそのままプログラム作成手段9に引き渡す。
【0076】
また、指定子解析部8aは、例えば指定子から抽出したパラメータを、図1に示すパラメータ調整層4などに入力することもできる。パラメータ調整層4の有するインストール時最適化層4a、実行前最適化層4b、および実行時最適化層4cは、指定されたチューニングのタイミング(インストール時、実行前、実行時)に応じて、それぞれ指定子で指定されたパラメータとチューニング領域を分けて、別々に以降の機構に引き渡し、処理を行うことが可能である。この点については後述する。ここでは、簡単のために、まず任意の一つのタイミングにて処理が行われるものとして説明する。
【0077】
プログラム作成手段9は、指定子解析手段8にて抽出された領域を含むサブプログラムを生成し、パラメータについての実測による最適化をこのサブプログラムを呼び出して実行するメインプログラムを生成するものである。プログラム作成手段9は、自動チューニング機能を付加するためのメインプログラムを作成するメインプログラム作成部9a、チューニング情報データベース10a上のチューニング領域を含むサブプログラム群を作成するサブプログラム作成部9b、および自動チューニング機能を達成するための処理プログラムを作成するチューニング機能付加部9cを含んでいる。
【0078】
メインプログラム作成部9aは、指定子解析手段8を介したプログラムに、チューニング(最適化)機能を付加する。例えば、メインプログラム作成部9aは、図3に示すプログラムの一例から、図5(a)に示すような、最適化を行うためのメインプログラムを作成する。
【0079】
このメインプログラムは、実行時に「自動チューニングする」と指定して実行した場合には、後述する自動チューニングサブルーチンを呼び出し、パラメータの最適化を行う。また、「自動チューニングする」と指定しない場合には、図3に示すプログラムと同様の内容が実行される。この際、既にパラメータの最適化がなされている場合には、その結果を参照して実行するようになっている。
【0080】
また、メインプログラム作成部9aは、例えば図3に示すプログラムの一例であるサブルーチンを、図5(b)に示すようなサブルーチン(Subroutine xxx())に書き換える。
【0081】
なお、この例においては、図3に示す、プログラムの一例としてのサブルーチン中に指定子を記述しているが、メインプログラム中に指定子を記述したとしても、メインプログラム作成部9aは上述と同様の処理を行う。
【0082】
サブプログラム作成部9bは、メインプログラム作成部9aによって書き換えられた図5(b)に示すサブルーチンに対応する、図5(c)に示すようなサブルーチン(Subroutine Sub_A(J))を新たに作成する。この図5(c)に示すサブルーチンは、処理対象のチューニング領域のみをサブルーチン化したものであり、チューニング情報データベース10aのチューニング領域集合10eを参照して作成される。
【0083】
このサブプログラム作成部9bにて作成した図5(c)に示すサブルーチンは、メインプログラム作成部9aによって書き換えられた、図5(b)に示すサブルーチンから呼び出されるようになっている。また、サブプログラム作成部9bにて作成したサブルーチンは、後述するチューニング機能付加部9cにて作成されるサブルーチンからも呼び出されるようになっている。
【0084】
次に、チューニング機能付加部9cは、メインプログラム作成部9aによって作成された図5(a)に示すメインルーチンに対応する、図5(d)に示す自動チューニング機能を達成するためのサブルーチン(自動チューニングサブルーチン)を作成する。ここで、チューニング機能付加部9cは、後述するコスト定義関数決定手段10から入力されるコスト関数を用いるようになっている。ここでは、計算の所要時間を、指定されたコスト関数で近似するものとする。コスト定義関数決定手段10の詳細については後述する。プログラム作成部9は、得られたプログラムを図1に示すコンパイラ7に出力する。
【0085】
ここで、図5(d)に示す関数F(I)は、図3に示すプログラムに記載された指定子から作成される関数である。より詳細には、F(I)は、測定用ループのインデックスIと、チューニング領域Aをサブルーチン化する際にパラメータ化したパラメータの値Jとを1対1対応させる関数である。なお、この関数F(I)は、コスト定義関数決定手段10によってサンプリングされたサンプリング点のみを含むようになっていてもよい。
【0086】
また、図5(d)に示すプログラムは、時間を計測するための測定用ループ(Iループ)(実測ルーチン)を含んでいる。この一例では、測定用ループ中に、サブプログラム作成部9bにて作成したサブルーチン(Subroutine Sub_A(J))の呼び出しを付加するようになっている。これによって、測定用ループによって、例えばコストとしての所要時間を計測することができる。
【0087】
また、図5(d)に示すプログラムは、計測した時間を用いて最適なパラメータを推定する、「パラメータ推定処理(a)」(推定ルーチン)を含んでいる。これによって、最適なパラメータを得ることができる。また、ここで得たパラメータは(プログラム生成部6の)外部の(例えばパラメータ情報ファイル5のような)記憶媒体に保存するようになっている。なお、パラメータ推定処理(a)の詳細については後述する。
【0088】
以上に概略を説明したように、本実施形態のプログラム生成部6は、図3に示すような、指定子を含むプログラムから、図5(a)~(d)のような、最適化のための設定を含んだプログラムを生成できる。特に、プログラム作成手段9は、メインプログラムから呼び出す、またはメインプログラムに含ませるための、パラメータごとにサブプログラムを呼び出して所要時間を計測する実測ルーチンと、実測ルーチンにて計測した所要時間を用いて最適なパラメータを推定する推定ルーチンとを作成する。
【0089】
なお、プログラム生成部6に、指定子に囲まれた領域(チューニング領域)が複数あるプログラムが入力された場合においても、上述と同様の処理が行われる。例えば、図3において、チューニング領域Bがチューニング領域Aの下部に追加された場合、図5(a)(b)(d)において、それぞれ、チューニング領域Aの処理部分の下部に同様の処理部分が付加される。また、図5(c)と同様のサブルーチンが新たに作成される。
【0090】
なお図5(d)に示す測定用ループ、パラメータ推定処理(a)、および図5(b)に示すパラメータ推定処理(b)の呼び出しは、チューニング機能付加部9cによって、それぞれのプログラムに付加される。より詳細には、後述するコスト定義関数決定手段10のコスト定義関数決定部10cにて決定されたコスト定義関数などに応じて、チューニング機能付加部9cが所定の処理をするようになっている。
【0091】
ここで、コスト定義関数決定手段10について説明する。コスト定義関数決定手段10は、チューニング情報データベース10a、コスト定義関数ライブラリ10bおよびコスト定義関数決定部10cを含んでいる。
【0092】
チューニング情報データベース10aは、パラメータ10dとチューニング領域集合10eとを含んでいる。チューニング情報データベース10aは、指定子解析手段8で解析された、チューニングに必要なパラメータ10d、および最適化の対象となるプログラムの一部分(サブプログラム)としてのチューニング領域集合10eを保存するためのものである。このチューニング情報データベース10aには、プログラム作成手段9とコスト定義関数決定部10cとがアクセスして、保存されたパラメータ10d、チューニング領域集合10eを得るようになっている。
【0093】
コスト定義関数ライブラリ10bは、コスト定義関数を記録しているライブラリである。このコスト定義関数は、システムの開発者、計算装置1のユーザなどが、自由に登録/削除できるようになっている。コスト定義関数ライブラリ10bは、複数のコスト定義関数を含んでおり、例えば線形多項式10fを含んでいる。このコスト定義関数は、例えば、パラメータごとに計測した所要時間を近似するために用いられる。
【0094】
コスト定義関数決定部10cは、指定子に記載されたパラメータ推定処理の方式を決定する部分である。このパラメータ推定処理として、コスト定義関数決定部10cは、以下のコスト定義関数決定処理、サンプル点決定処理、パラメータ推定処理(a)、パラメータ推定処理(b)、および測定用ループ処理に関する自動チューニング付加処理を行う。これに応じて、チューニング機能付加部9cが、各プログラムに対して上述した所定の処理をするようになっている。
【0095】
まず始めに、コスト定義関数決定部10cは、コスト定義関数決定処理を行う。この場合、コスト定義関数決定部10cは、指定子中に記載されたコスト定義関数の指定に基づいて、コスト定義関数を決定する。
【0096】
本実施形態においては、ユーザによる指定子中でのコスト定義関数の指定は、例えば、コスト定義関数ライブラリ10bに含まれている関数を指定することによって行われる。また、ユーザによって、コスト定義関数ライブラリ10bに含まれない関数が指定された場合には、計算装置1のプログラム生成部6が、コスト定義関数を所定の方式で決定(自動決定)することもある。
【0097】
コスト定義関数ライブラリ10bに含まれている関数が指定された場合には、コスト定義関数決定部10cは、その指定された関数そのものをコスト定義関数ライブラリ10bから選択し、チューニング機能付加部9cにそのコスト関数を引き渡す。そして、チューニング機能付加部9cがプログラムを生成する。
【0098】
一方、以下で説明するように、コスト定義関数ライブラリ10bに含まれていない関数が指定された場合には、本実施形態においては、チューニング情報データベース10aに登録されている対象のチューニング領域について、コスト定義関数ライブラリ10bに登録されている関数を順次試行して、所要時間を実測して誤差評価を行う。その評価結果から、最も精度が良く、誤差が少ないコスト定義関数を採用し、チューニング機能付加部9cに引き渡す。そして、チューニング機能付加部9cがプログラムを生成する。なお、関数について試行を行い、所要時間を実測する際には、指定子でパラメータの定義域が指定されている場合は、その定義域全てについて行う。また、指定子でパラメータの定義域が指定されていない場合には、自動生成されるパラメータの上限値を参照し、その上限値まで全ての値について行う。このように、コスト定義関数決定部10cが、計測した所要時間を、コスト定義関数ライブラリ10b中に含まれるコスト定義関数の全てを順次用いて近似して、そのうちから最も近似精度のよいコスト定義関数を選択する構成であってもよい。
【0099】
ここで、コスト定義関数決定処理の一例を、図6に概略を示す。コスト定義関数決定部10cは、S11にて、指定子に記載されている関数が、コスト定義関数ライブラリ10bに含まれている関数であるか否かを判別する。ここで、例えばユーザによって自動設定要求がなされている場合は、指定された関数がコスト定義関数ライブラリ10bに含まれていないものと判別することにする。
【0100】
S11において指定子に記載されている関数がコスト定義関数ライブラリ10bに含まれている関数である場合には、S12に進み、コスト定義関数ライブラリ10bから指定された関数を取り出してS13に進む。S13においては、コスト定義関数決定部10cは、取り出した関数をチューニング機能付加部9cに引き渡して処理を終了する。例えば、指定子に線形多項式が記載されている場合には、コスト定義関数決定部10cは、コスト定義関数ライブラリ10bの線形多項式10fを、チューニング機能付加部9cに引き渡す。
【0101】
一方、S11において例えば自動設定要求がなされており、指定子に記載されている関数がコスト定義関数ライブラリ10bに含まれていないものと判別された場合には、S14に進む。この場合には、指定子に記載されている関数を用いることができないため、S14以下では、コスト定義関数ライブラリ10b中に含まれるコスト定義関数のうち、例えば最も精度の高い関数を選択するための処理を行う。
【0102】
S14において、コスト定義関数決定部10cは、チューニング情報データベース10aのチューニング領域集合10eから、対応するチューニング領域を取り出し、S15に進む。S15においては、取り出したチューニング領域に、測定用処理部の付加として、図10に示すような(Iについての)ループを設定し、S16に進む。S16では、コスト定義関数ライブラリ10b中に含まれる全てのコスト定義関数について、精度の確認が済んでいるか否かを判別する。
【0103】
S16において精度の確認が済んでいないと判別された場合には、S17に進んで、コスト定義関数ライブラリ10b中に含まれている、未だ精度を確認していないコスト定義関数を一つ選択する。S17の次のS18では、選択したコスト定義関数を用いて精度を評価する。S18の次のS19では、既に評価を行ったコスト定義関数による精度と、S18において得られた精度とを比較して、S18において得られた精度の方が良い場合には、最も精度の高いコスト定義関数の候補として、S17にて選択したコスト定義関数を採用してS16に進む。
【0104】
一方、S16において全ての関数について精度の確認が済んでいると判別された場合には、S13に進んで、最も精度の高いコスト定義関数をチューニング機能付加部9cに引き渡す。以上に説明したS11~S19によってコスト定義関数決定処理の一例が実現される。
【0105】
次に、コスト定義関数決定部10cは、実際に時間計測する場合に最適なものとなるようなサンプル点を決定するための、サンプル点決定処理を行う。
【0106】
例えば、ユーザによって指定子中にサンプリング点が指定されている場合には、サンプル点決定処理として、その指定されたサンプリング点を用いるように決定してもよい。また、例えばユーザによって指定子中にサンプリング点が指定されていない場合には、サンプル点決定処理として、適当なサンプリング点の集合を、誤差が少なくなるように定義域中から選択してもよい。
【0107】
または、例えばユーザによって指定子中にサンプリング点が指定されている場合であっても、サンプル点決定処理として、以下のように、指定されたサンプリング点のうちから、適当なサンプリング点の部分集合を、誤差が少なくなるように定義域中から選択してもよい。
【0108】
例えば、コスト定義関数決定部10cは、図7に示すように、S20にて指定子中の定義域を確認してS21に進む。S21では、指定子中の定義域の集合から、所定の方法でその集合の部分集合Sを抽出する。この部分集合Sとしては、その集合自身を選択してもよい。または、所定の方法として、乱数によって集合から部分集合Sを選択してもよい。または、集合から部分集合Sを選択するために、例えば遺伝的アルゴリズム(GA)を用いて選択してもよく、また過去の統計を利用してもよく、もしくは何らかの評価式を用いて決定してもよい。
【0109】
S21の次のS22では、対応するチューニング領域について、ここで選択した部分集合Sに含まれるパラメータを指定して精度を測定する。S22の次のS23では、S22にて測定した精度が、以前のサンプル点決定処理において測定した精度よりもよければ、S21にて選択した部分集合Sを、サンプル点の集合Oに設定する。S24において、予め指定した試行回数が終了したか否かを判別し、終了していない場合にはS21に進み、終了している場合にはS25に進む。S25では、S23にて得た集合Oをサンプル点とする。このようにして、定義域が設定されている場合であっても、所定の精度を保ちつつ、さらに処理が少なくなるようにサンプリング点を決定して、さらに処理を早くできる。
【0110】
ここで、サンプリング点決定処理の一例について説明する。ここでは、固有値計算処理における主ループのアンローリングに関する最適化の場合について説明する。コスト定義関数としては線形5次多項式を利用し、最適化問題の解法としては最小二乗法を利用する。また、サンプル点として、サンプル点1は指定子中で指定したもので、[1-6、8、16]とする。また、サンプル点2は自動設定したもので、[1-16]とする。また、以下の表1において、推定パラメータ1はサンプル点1を用いてパラメータ推定したものであり、推定パラメータ2はサンプル点2を用いてパラメータ推定したものである。
【0111】
表1は、国産スーパコンピュータ(計算機Aとする。)によって得られた結果を示すものである。また、表2は、国産スーパコンピュータ(計算機Bとする。)によって得られた結果を示すものである。また、表3は、PCクラスタ(計算機Cとする。)によって得られた結果を示すものである。
【0112】
【表1】
JP0004565201B2_000002t.gif
【0113】
【表2】
JP0004565201B2_000003t.gif
【0114】
【表3】
JP0004565201B2_000004t.gif
【0115】
表1から、本発明に係る方法(再生方法)によって自動設定されるサンプリング点(サンプル点2)のほうが、計算機Cにおいて高いパラメータ推定精度を得る。したがって、本発明の機構におけるサンプル点自動決定処理による効果は大きいといえる。
【0116】
次に、コスト定義関数決定部10cは、自動チューニング付加処理を順次行う。この自動チューニング付加処理は、パラメータ推定処理(a)、パラメータ推定処理(b)、および測定用ループ処理を含んでいる。
【0117】
パラメータ推定処理(a)は、サンプリング点決定処理で決まったサンプリング点、およびそのサンプリング点に対する実行時間を入力することで、コスト定義関数決定処理で決定したコスト定義関数を基にして、適切な最適化問題を解くプログラムを生成するための処理である。生成されたプログラムは、チューニング機能付加部9cの生成するプログラムから、パラメータ推定処理(a)として呼びだされる。
【0118】
このパラメータ推定処理(a)においては、図8に示すように、S26にてサンプリング点決定処理で決まったサンプリング点、およびそのサンプリング点についての実行時間を得て、S27に進む。例えば、図5(d)に示すプログラムにおいては、測定用ループの後にパラメータ推定処理(a)が行われるため、測定用ループによって測定された値を得る。
【0119】
S27では、コスト定義関数決定処理で決定したコスト定義関数を基にして、適切な最適化問題を解く。S27の次のS28では、推定による適切なパラメータ、およびコスト定義関数の係数情報を得る。以上のような処理によって、推定による適切なパラメータを得ることができる。なお、ここで示すフローチャートは、パラメータ推定処理(a)の一例を示すものであり、これに限るものではない。また、パラメータ推定処理(a)を実現するプログラムは、例えばこの図8に示す各処理を実行するものであればよく、詳細は問わない。
【0120】
次に、パラメータ推定処理(b)は、パラメータ推定処理(a)にて自動決定されたコスト定義関数の係数情報を入力とすることで、コスト定義関数決定処理で決定したコスト定義関数を基にして、適切な最適化問題を解く。これによって、最適と推定されるパラメータを決定する処理のプログラムを自動生成する。生成されたプログラムは、チューニング機能付加部9cの生成するプログラムから、パラメータ推定処理(b)として呼びだされる。
【0121】
パラメータ推定処理(b)においては、例えば図9に示すように、S29にてパラメータ推定処理(a)で決定されたコスト定義関数の係数情報を得る。例えば、図5(a)(b)(d)で示すプログラムの一例においては、自動チューニングを行ってパラメータ推定処理(a)が行われた後に、パラメータ推定処理(b)が行われるので、このようにコスト定義関数の係数情報を得ることができる。
【0122】
S29の次のS30では、コスト定義関数決定部で決定されたコスト定義関数からのコスト情報を用いて、最適なパラメータを決定し、S31に進む。S31では、推定による適切なパラメータを得る。このように、S29~S31の処理によって、推定による適切なパラメータを得ることができる。なお、ここで示すフローチャートは、パラメータ推定処理(b)の一例を示すものであり、これに限るものではない。また、パラメータ推定処理(b)を実現するプログラムは、例えばこの図9に示す各処理を実行するものであればよく、詳細は問わない。
【0123】
次に、測定用ループ処理は、図10に示すように、サンプル点決定処理で決定されたサンプル点の個数に応じた測定用ループを形成するものである。
【0124】
以上に説明した、パラメータ推定処理(a)、パラメータ推定処理(b)、および測定用ループ処理によって、自動生成されたプログラムは、チューニング機能付加部9cに送られる。これらのプログラムは、チューニング機能付加部9cによって生成されたプログラムから呼び出される。
【0125】
ここで、計算装置1による処理について、具体例を参照して説明する。計算装置1は、以下のようにプログラムを生成して最適化を行う。ここでは、一例として、計算機言語として、Fortran90言語を用いている場合について説明する。また、本実施形態のユーザは、MPI(MessagePassingInterface)を計算機環境として利用している。しかしながら、本発明はこれに限るものではない。なお以下に説明する、生成された計算機言語は、本実施形態の説明のためのものであり、本発明はこれに限るものではない。また、本実施形態の説明用に特化したものであり、本実施形態の計算装置1によって生成される計算機言語と厳密に同一ではないことに注意する。
【0126】
この計算装置をユーザが用いる際には、図11に示すように、S35にてユーザが所定の形式のプログラムを計算装置1に入力する。ここで、所定の形式のプログラムとは指定子にて最適化するべきパラメータなどを指定したものである。
【0127】
ここで、このS35においてユーザによって入力されるプログラムの一例を、図12に示す。このプログラムは、行列積の処理をFortran90言語で記述したプログラムであって、指定子を記述して自動チューニング機能の付加を指示した一例である。なお、図12に示す例において、『!ABCLib$』にて始まる行が、指定子に相当する。
【0128】
上記の例では、9行目の指定子『varied (i) from 1 to 8』にて、1段から8段までパラメータ(i)についてアンローリング指定(=パラメータ化)をするように指定されている。11行目から17行目までは、チューニング領域に相当する。10行目の指定子『fitting polynomial 5』は、コスト定義関数ライブラリ内に登録されている5次線形多項式(fitting polynomial 5)の利用を指定する。また、10行の指定子『sampled (1-3,6,8)』は、サンプリング点〔1-3,6,8〕についてパラメータ推定を行うことを指定する。これらの指定子の情報から、自動チューニング機能を付加した計算機言語を自動生成する。
【0129】
S36においては、計算装置1のプログラム生成部6が、入力されたプログラムから、パラメータの調整に適したプログラムを生成する。プログラム生成部6は、生成したプログラムを、S37にてコンパイラ7に出力する。
【0130】
ここで、S36においてプログラム生成部6が生成したプログラムの一例を、図13(a)(b)、図14(a)(b)として示す。
【0131】
図13(a)は、図12のプログラムからプログラム生成部6が生成したメインプログラムを示す。図13(b)は、図12のプログラムからプログラム生成部6が生成した自動チューニング用プログラムを示す。また、図14(a)と(b)とを一体としたプログラムは、プログラム生成部6が図12のプログラムから生成した、チューニング領域を含むサブルーチンである。
【0132】
S38においては、コンパイラ7が、プログラムを実行形式に翻訳して、プロセッサ2に入力する。S39においては、プロセッサ2が翻訳された実行形式を実行して、最適なパラメータを得て、例えばパラメータ情報ファイル5に出力する。以上のようにして、計算装置1を用いれば、指定子によってパラメータを指定したプログラムを入力することによって、そのプログラムについて容易に最適化を行うことができる。
【0133】
以上のように、本実施形態に係る計算装置1は、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれているプログラムが入力されると、指定子によって指定される領域とパラメータとについての、実測による最適化を実行するためのプログラムを生成するプログラム生成部6を備えている。したがって、パラメータの最適化を容易に行うことができる。
【0134】
また、以上のように、本発明は、プログラム中の任意の箇所において自動チューニング機能を付加するためのプログラム利用形態、プログラミング言語処理装置、プログラミング言語処理方法、および記録媒体に関するものである。
【0135】
ここで、従来の構成によれば、パラメータの登録の後にも、実際にパラメータの最適化を達成するために、種々の設定が必要となる。したがって、パラメータを最適化する際には、開発時間と開発費用の増大、機能拡張性の低さ、およびバグ混入の可能性の高さなどの問題を生ずることになる。
【0136】
そこで本発明では、最終的に利用者が必要となる計算機言語を用いて自動的に自動チューニング処理を付加する指定子(ディレクティブ)を利用し、かつその指定子で記述されたプログラムに対する処理機構を解決手段として用いることで、上述の問題を解決した。
【0137】
例えば、上述の実施形態のように、自動チューニング機能を付加したプログラム生成を自動的に行うので、自動チューニング機能を付加したソフトウェアにおおいて、開発時間と開発費用の増大を防止し、低い機能拡張性を生じさせず、また、高いバグ混入の可能性にいたることがない。
【0138】
また、パラメータ調整のための最適化問題求解処理において、本発明の計算装置に搭載したコスト定義関数ライブラリとコスト定義関数決定部の機能によって、複数のコスト定義関数から誤差が最小となるコスト定義関数の自動選択、およびサンプリング点の自動選択が可能となる。
【0139】
このことから、上述の実施形態のように、パラメータ推定のための最適化問題求解処理において、従来のような、手作業で実装するために単一のコスト定義関数による推定機能しか実現できず、このため低いパラメータ推定精度を生じていた、といった問題を解決できる。これによって、従来から問題となっている、パラメータ推定機能が低い、という問題を解決できる。
【0140】
なお、以下では、指定子解析部8aが、指定子から抽出したパラメータを、図1に示すパラメータ調整層4へと入力した場合の処理について説明する。このように、パラメータ調整層4が自動チューニングの種類ごとに分けられた処理の付加をしてもよい。また、プログラム生成部6にて付加される自動チューニング機能は、パラメータ調整層4の指示によるものであるとみなすこともできる。
【0141】
計算装置1を用いてユーザがライブラリ3を実行する際には、所望のサブルーチン3aに対して適当なパラメータを設定した上で実行指示をする。
【0142】
ここで、サブルーチン3aに対して設定されるパラメータには、計算装置1の実行性能のみを変化させて、ライブラリ3のサブルーチン3aの出力を変化させないパラメータが含まれる。以下では、このようなパラメータを、性能情報パラメータ(Performance Parameters :PP)と呼ぶ。
【0143】
また、サブルーチン3aに対して設定されるパラメータのうち、計算装置1の実行性能とライブラリ3のサブルーチン3aの出力とを共に変化させるようなパラメータを、以下では基本情報(Basic Parameters :BP)パラメータと呼ぶ。
【0144】
例えば、数値計算ライブラリに含まれるサブルーチン3aが、行列の固有値を計算する固有値計算サブルーチンであるとする。このとき、所望の行列の実体や、その行列のサイズなどは、基本情報パラメータBPに相当する。また、計算装置1の行列計算におけるループアンローリング段数は、性能情報パラメータPPに相当する。
【0145】
計算装置1においては、与えられた基本情報パラメータBPを用いて、性能パラメータPPを最適化することによって、所望の結果を最小の時間で得ることができる。性能情報パラメータPP、基本情報パラメータBPは、パラメータ調整層4を介してライブラリ3に入力される。性能情報パラメータPPおよび基本情報パラメータBP以外のパラメータは、計算装置1の外部からライブラリ3に直接入力されるか、またはライブラリ3の内部で用いられる。
【0146】
本実施形態のパラメータ調整層4は、図15に示すように、調整可能なパラメータである性能情報パラメータPPを最適化するために、インストール時最適化層4a、実行前最適化層4b、実行時最適化層4cの各層を備えている。各層4a~4cはパラメータを自身で保持することはなく、パラメータ情報ファイル5に保存する。
【0147】
インストール時最適化層(IOL)4aは、ライブラリ3のインストール時に最適化を行う。
【0148】
インストール時最適化層4aは、例えば図17(a)に示すように、ライブラリ3のインストール時に(S1)、性能情報パラメータPPのうちの一部であるインストール時最適化パラメータ(IOP)を最適化し(S2)、得られたパラメータ(IOP)をパラメータ情報ファイル5に出力する。
【0149】
なお、ライブラリ3のインストール時には、通常は、基本情報パラメータBPが定まっていることはない。このため、インストール時最適化層4aは、例えば基本情報パラメータBPの値を適当にサンプリングして、そのサンプリングした抽出点ごとに、適当に定義したコスト定義関数を最小化するパラメータを決定する。そして、適当なモデル式によって、サンプリングした抽出点と抽出点との間のデータについて補間する。
【0150】
実行前最適化層(BEOL)4bは、ユーザが指定する特定パラメータ(例えば問題サイズなど)の指定後に最適化を行う。
【0151】
実行前最適化層4bは、基本情報パラメータBPの入力に応じて、これを用いて、性能情報パラメータPPのうちの一部である実行前最適化パラメータBEOPを最適化する。例えば図17(b)に示すように、ユーザ指定パラメータとしての基本情報パラメータBPの定義(入力)に応じて(S4)、パラメータ情報ファイル5のパラメータ(IOP)を参照して(S5)、最適化を行い(S6)、得られた最適化パラメータ(BEOP)をパラメータ情報ファイル5に出力する。
【0152】
なお、実行前最適化層4bは、ユーザによって指定された基本情報パラメータBPを用いて、最適なパラメータを得るために、実測にて試行をする。
【0153】
実行時最適化層(ROL)4cは、インストール時最適化層4aまたは実行前最適化層4bの少なくとも一方によるパラメータ最適化が終了した後で、かつ対象のライブラリ(やルーチン)の実行時に、最適化を行う。
【0154】
実行時最適化層4cは、例えば図17(c)に示すように、ライブラリ3(ライブラリ3のサブルーチン3a)の実行指示を検出すると(S8)、既に設定された性能情報パラメータPPを参照して(S9)、この性能情報パラメータPPによる計算が所望の精度を満たしていないときには、最適化を再度行う(S10)。S10においては、計算が所望の精度を満たすような、最適なパラメータPPが得られるまで計算を繰り返す。
【0155】
このように、実行時最適化層4cは、既に設定された性能情報パラメータPPを参照して、例えば十分な精度が得られるような所定の場合には、最適化のための計算を行わない。
【0156】
以上のように、本実施形態のパラメータ調整層4においては、インストール時最適化層4aにて最適化したパラメータ情報IOPは、パラメータ情報ファイル5に保存され、実行前最適化層4bと実行時最適化層4cとで参照可能となっている。また、実行前最適化層4bにて最適化したパラメータ情報BEOPは、パラメータ情報ファイル5に保存され、実行時最適化層4cで参照可能となっている。
【0157】
ここで、性能情報パラメータPPの各要素は、パラメータ(IOP)、パラメータ(BEOP)、パラメータ(ROP)の各集合のうちの少なくとも一つに含まれている。すなわち、性能情報パラメータPPの各要素は、パラメータ調整層4の各層4a~4cのために、重複を許して、3つの部分集合(IOP、BEOP、ROP)に分解される。これを式で表現すると、以下のようになる。
PPパラメータ=IOP ∪ BEOP ∪ ROP …(式1)
したがって、本実施形態の計算装置1は、パラメータ調整層4を用いて、性能情報パラメータPPに含まれる全ての要素を、上述したタイミングのいずれかにて最適化できる。
【0158】
特に、本実施形態の計算装置1は、問題に応じた例えば行列サイズ(n)のような基本情報パラメータBPが定まると、実際の計算の実行前の時点で最適化を行う実行前最適化層4bを備えている。これによって、従来の計算装置よりも正確な最適化が可能となる。
【0159】
ここで、従来の自動チューニングソフトウェアの構成方式では、例えば図18(a)に示すようにソフトウェアインストール時にパラメータ最適化を行うもの、または例えば図18(b)に示すようにライブラリ実行時にパラメータ最適化を行うもの、のみ存在していた。これらのソフトウェア構成方式では、汎用的な処理に適用できない、パラメータ調整が不十分となる場合がある、という問題がある。また図18(a)(b)から分かるように、従来の自動チューニングではパラメータは1種類であった。
【0160】
そこで本発明においては、より汎用的な処理においてパラメータ調整が適用でき、かつ従来よりも高度なパラメータ調整機構を有するソフトウェア構成方式によって課題の解決をねらうものである。
【0161】
特に、本実施形態の計算装置1は、問題に応じた例えば行列サイズ(n)のような基本情報パラメータBPが定まると、実際の計算の実行前の時点で最適化を行う実行前最適化層4bを備えている。これによって、従来の計算装置のような、IOL、またはROL単独の場合よりもより正確な最適化が可能となる。
【0162】
次に、上述した構成のプログラム、コンピュータなどについて、その特徴点を説明する。
【0163】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する手順と、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う手順とを含んでいることを特徴としている。
【0164】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
【0165】
上記プログラムが実行されたコンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【0166】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【0167】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【0168】
すなわち、ライブラリの内容を数式として表したときに、数式中の変数として表現されるパラメータが、基本情報パラメータに相当する。また、数式中に現れず、または数式において単なる媒介変数として現れるパラメータが、性能情報パラメータに相当する。このため、例えば性能情報パラメータを変化させたとしても、数式によって得られる結果(ライブラリの出力)は変わらない。
【0169】
その後、コンピュータは、ライブラリの実際の実行の前に、基本情報パラメータを用いて性能情報パラメータの最適化を行う。より詳細には、例えば基本情報パラメータを用い、性能情報パラメータのそれぞれの値について試行計算を行って、実行コストを予め実測する。これによって、確実に最適な性能情報パラメータを得ることができる。
【0170】
ここで、従来の最適化のためのプログラムの一例は、例えばライブラリのインストール時に性能情報パラメータの最適化を行う。この場合、例えば行列のサイズのような基本情報パラメータが定まっていないため、所定の誤差を含んだ、なんらかの推定モデルによって、最適な性能情報パラメータを推測する。
【0171】
また、従来の最適化のためのプログラムの他の一例は、例えばライブラリの実行時に性能情報パラメータの最適化を行う。この場合には、性能情報パラメータを最適化するための計算時間が、ライブラリの実行コストに計上されてしまう。このため、最適化のために十分な時間を取れずに、最適なパラメータが得られない虞れがある。
【0172】
そこで、本発明に係る上述のプログラムのように、実際の計算の前に、実行コストを予め実測して、最適な性能情報パラメータを得るようにする。これによって、より精密かつ確実なパラメータ調整が可能となる。また、プログラムの実行前において、計算所要時間を予測できる。
【0173】
なお、本発明に係るプログラムを、ユーザが知りうる情報が定まった地点でのパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【0174】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリのインストール時に上記性能情報パラメータの最適化を行う初期設定手順と、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する検出手順と、上記初期設定手順において設定された上記性能情報パラメータを参照して、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う前調整手順とを含んでいることを特徴としている。
【0175】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
【0176】
上記プログラムが実行されたコンピュータは、ライブラリのインストール時に、性能情報パラメータの最適化を行う。この場合、例えば行列のサイズのような基本情報パラメータが定まっていないため、所定の誤差を含んだ、なんらかの推定モデルによって、最適な性能情報パラメータを推測する。
【0177】
また、コンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【0178】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【0179】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【0180】
その後、コンピュータは、ライブラリの実際の実行の前に、インストール時に設定された性能情報パラメータを参照して、基本情報パラメータを用いて性能情報パラメータの最適化を行う。より詳細には、例えば基本情報パラメータを用い、性能情報パラメータのそれぞれの値について試行計算を行って、実行コストを予め実測する。特に、インストール時に設定された性能情報パラメータの最適値周辺の値のみについて、試行計算を行うようにしてもよい。これによって、試行計算の回数を削減して、最適な性能情報パラメータを得ることができる。このように、より精密かつ確実なパラメータ調整が可能となる。
【0181】
なお、本発明に係るプログラムを、ソフトウェアのインストール時、およびユーザが知りうる情報が定まった地点でのソフトウェアの実行前、のパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【0182】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する検出手順と、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う前調整手順と、上記ライブラリの実行の際に、既に設定された上記性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしていないときには、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を再度行う再調整手順とを含んでいることを特徴としている。
【0183】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
【0184】
上記プログラムが実行されたコンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【0185】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【0186】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【0187】
その後、コンピュータは、ライブラリの実際の実行の前に、基本情報パラメータを用いて性能情報パラメータの最適化を行う。より詳細には、例えば基本情報パラメータを用い、性能情報パラメータのそれぞれの値について試行計算を行って、実行コストを予め実測する。これによって、確実に最適な性能情報パラメータを得ることができる。
【0188】
また、コンピュータは、ライブラリの実際の実行の際に、既に設定された性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしているか否かを試行により判別する。そして、所望の精度を満たしていないときには、基本情報パラメータを用いて性能情報パラメータの最適化を再度実行する。そして、所望の精度を得ることのできる性能情報パラメータを用いて、ライブラリを実行する。
【0189】
このように、実際の計算の前に、実行コストを予め実測して、最適な性能情報パラメータを得るようにする。基本情報パラメータの変更がないときには、予め設定した性能情報パラメータを用いてライブラリを実行できる。また、基本情報パラメータの変更があるときでも、所望の精度が得られる場合には、パラメータの最適化のための計算をせずに、ライブラリを実行できる。したがって、実行時におけるパラメータの最適化に要する時間を不要として、ライブラリの実行コスト(計算時間)を増大させない。また、ライブラリの実行の前に精度を確認するので、より精密かつ確実なパラメータ調整が可能となる。
【0190】
なお、本発明に係るプログラムを、ユーザが知りうる情報が定まった地点でのソフトウェアの実行前、およびソフトウェア実行時、のパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【0191】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリのインストール時に上記性能情報パラメータの最適化を行う初期設定手順と、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する検出手順と、上記ライブラリの実行の際に、既に設定された上記性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしていないときには、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を再度行う再調整手順とを含んでいることを特徴としている。
【0192】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
上記プログラムが実行されたコンピュータは、ライブラリのインストール時に、性能情報パラメータの最適化を行う。この場合、例えば行列のサイズのような基本情報パラメータが定まっていないため、所定の誤差を含んだ、なんらかの推定モデルによって、最適な性能情報パラメータを推測する。
【0193】
また、コンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【0194】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【0195】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【0196】
また、コンピュータは、ライブラリの実際の実行の際に、既に設定された性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしているか否かを試行により判別する。そして、所望の精度を満たしていないときには、基本情報パラメータを用いて性能情報パラメータの最適化を再度実行する。そして、所望の精度が得られる性能情報パラメータを用いて、ライブラリを実行する。
【0197】
このように、実際の計算の前に、性能情報パラメータを設定しておく。実際の計算の際に、その性能情報パラメータによって所望の精度が得られる場合には、パラメータの最適化のための計算をせずに、ライブラリを実行できる。したがって、実行時におけるパラメータの最適化に要する時間を不要として、ライブラリの実行コスト(計算時間)を増大させない。また、ライブラリの実行の前に精度を確認するので、より精密かつ確実なパラメータ調整が可能となる。
【0198】
なお、本発明に係るプログラムを、ソフトウェアのインストール時、およびソフトウェア実行時、のパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【0199】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を、上記コンピュータに実行させるためのプログラムにおいて、上記ライブラリのインストール時に上記性能情報パラメータの最適化を行う初期設定手順と、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する検出手順と、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う前調整手順と、上記ライブラリの実行の際に、既に設定された上記性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしていないときには、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を再度行う再調整手順とを含んでいることを特徴としている。
【0200】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。
【0201】
上記プログラムが実行されたコンピュータは、ライブラリのインストール時に、性能情報パラメータの最適化を行う。この場合、例えば行列のサイズのような基本情報パラメータが定まっていないため、所定の誤差を含んだ、なんらかの推定モデルによって、最適な性能情報パラメータを推測する。
【0202】
また、コンピュータは、ライブラリの実際の実行の前に、例えばユーザからの基本情報パラメータの入力を検出することによって、基本情報パラメータが定まった地点を検出する。
【0203】
ここで、基本情報パラメータとは、実行性能とライブラリの出力とを共に変化させるパラメータである。
【0204】
例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、行列のサイズ、行列の実体などが、基本情報パラメータに相当する。また、例えば並列計算機を用いる場合のループアンローリング段数は、性能情報パラメータに相当する。
【0205】
その後、コンピュータは、ライブラリの実際の実行の前に、インストール時に設定された性能情報パラメータを参照して、基本情報パラメータを用いて性能情報パラメータの最適化を行う。より詳細には、例えば基本情報パラメータを用い、性能情報パラメータのそれぞれの値について試行計算を行って、実行コストを予め実測する。特に、インストール時に設定された性能情報パラメータの最適値周辺の値のみについて、試行計算を行うようにしてもよい。これによって、試行計算の回数を削減して、最適な性能情報パラメータを得ることができる。このように、より精密かつ確実なパラメータ調整が可能となる。
【0206】
また、コンピュータは、ライブラリの実際の実行の際に、既に設定された性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしているか否かを試行により判別する。そして、所望の精度を満たしていないときには、基本情報パラメータを用いて性能情報パラメータの最適化を再度実行する。そして、所望の精度が得られる性能情報パラメータを用いて、ライブラリを実行する。
【0207】
このように、実際の計算の前に、実行コストを予め実測して、最適な性能情報パラメータを得るようにする。基本情報パラメータの変更がないときには、予め設定した性能情報パラメータを用いてライブラリを実行できる。また、基本情報パラメータの変更があるときでも、所望の精度が得られる場合には、パラメータの最適化のための計算をせずに、ライブラリを実行できる。したがって、実行時におけるパラメータの最適化に要する時間を不要として、ライブラリの実行コスト(計算時間)を増大させない。また、ライブラリの実行の前に精度を確認するので、より精密かつ確実なパラメータ調整が可能となる。
【0208】
なお、本発明に係るプログラムを、ソフトウェアのインストール時、ユーザが知りうる情報が定まった地点でのソフトウェアの実行前、およびソフトウェア実行時、の3階層のパラメータ最適化機能を有するソフトウェアである、と表現することもできる。
【0209】
本発明に係るプログラムは、上記課題を解決するために、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータについて最適化する機能を上記コンピュータに実現させるためのプログラムにおいて、上記性能情報パラメータの各要素を、上記ライブラリのインストール時に最適化を行うパラメータの第1の集合、上記ライブラリの実行の前に最適化を行うパラメータの第2の集合、または上記ライブラリの実行の際に最適化を行うパラメータの第3の集合のうちの少なくとも一つに含まれるように設定して、第1の集合の要素を最適化する機能と、第2の集合の要素を最適化する機能と、第3の集合の要素を最適化する機能とを上記コンピュータに実現させることを特徴としている。
【0210】
このプログラムは、コンピュータにおける例えば数値計算ライブラリのようなライブラリの実行コストを最適化するために用いられるプログラムである。実行コストとは、例えば実行に要する計算資源、計算時間である。このプログラムは、ライブラリのパラメータのうち、実行性能のみを変化させてライブラリの出力を変化させない性能情報パラメータの値を、ライブラリの実行コストが最適なものとなるように調整する。例えば数値計算ライブラリのうちの、行列の固有値計算ライブラリにおいては、並列計算機を用いる場合のループアンローリング段数が、性能情報パラメータに相当する。
【0211】
上記プログラムが実行されたコンピュータにおいては、性能情報パラメータが、ライブラリのインストール時に最適化を行うパラメータの第1の集合、ライブラリの実行の前に最適化を行うパラメータの第2の集合、またはライブラリの実行の際に最適化を行うパラメータの第3の集合のうちの少なくとも一つに含まれるように設定される。
【0212】
ここで、性能情報パラメータが何らかの意味で最適化可能であるならば、インストール時、ライブラリ実行前、ライブラリ実行の際のいずれかにおいて最適化することは、常に可能である。また、性能情報パラメータを、上述の第1~第3のうちから選択された少なくとも一つ以上の集合に含まれるように設定する具体的な構成には、ある程度任意性があるが、その構成はどのように選択してもよい。
【0213】
そして、コンピュータは、第1~第3の集合について、それぞれ最適化を行う。したがって、性能情報パラメータの全てが最適化可能となり、汎用な処理に適用できる。すなわち、複数のルーチンを含んだライブラリ全体に対する最適化が可能となる。
【0214】
一方、従来の最適化法は、ソフトウェアインストール時にパラメータ最適化を行うもの、またはライブラリ実行時にパラメータ最適化を行うもの、のいずれか一方しかなかった。このため、問題によっては、インストール時にしか最適化できない、または実行時にしか最適化できないものがあるので、全ての問題に対して汎用することができなかった。
【0215】
なお、本発明に係るプログラムを、最適化すべきパラメータに関して、インストール時、実行前、実行時の3種のパラメータに分離し、それぞれのパラメータ最適化を行うソフトウェアである、と表現することもできる。
【0216】
本発明に係る記録媒体は、上記課題を解決するための、上述のいずれかのプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【0217】
この記録媒体がコンピュータにて読み取られると、上述のいずれかのプログラムがコンピュータにて実行される。したがって、上述のプログラムと同様の効果を得ることができる。
【0218】
なお、記録媒体の構成としては、ハードディスク、CD ROM(Read Only Memory)などに限るものではなく、どのような記録媒体であってもよい。
【0219】
また、本発明に係るコンピュータは、上記課題を解決するために、上述の記録媒体を備えている構成である。
【0220】
このコンピュータにて上述の記録媒体を読み取りすると、上述のいずれかのプログラムがコンピュータにて実行される。したがって、上述のプログラムと同様の効果を得ることができる。
【0221】
なお、このコンピュータは、コンピュータ内に複数のプロセッサを有する並列計算装置であってもよいし、または、複数のコンピュータがネットワークに接続されて複数のプロセッサを有する計算装置として機能する分散計算装置であってもよい。
【0222】
また、上述のコンピュータは、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの調整を行う調整方法において、上記ライブラリの上記パラメータに含まれる、実行性能と上記ライブラリの出力とを共に変化させる基本情報パラメータが定まった地点を検出する手順と、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を行う手順とを含んでいる調整方法を実行するものである、と表現することもできる。
【0223】
また、上述のコンピュータは、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの調整を行う調整方法において、上記ライブラリの実行の際に、既に設定された上記性能情報パラメータを参照して、この性能情報パラメータによる計算が所望の精度を満たしていないときには、上記基本情報パラメータを用いて上記性能情報パラメータの最適化を再度行う再調整手順を含んでいる調整方法を実行するものである、と表現することもできる。
【0224】
また、上述のコンピュータは、上記調整方法を実行することによって、コンピュータに備えられたライブラリのパラメータに含まれる、実行性能のみを変化させて上記ライブラリの出力を変化させない性能情報パラメータの最適化を行う調整装置として機能する。また、上述のコンピュータは、上述のプログラムとライブラリとを備えた計算装置として機能する。
【0225】
なお、上述の構成において、性能情報パラメータの最適化とは、性能情報パラメータの全てを最適化するものではなく、最適化が可能なもののうち、適当なものについて最適化を行うことを意味する。
【0226】
〔実施の形態2〕
本発明の他の実施の形態について、図19ないし図27に基づいて説明する。本実施形態の計算装置は、実施の形態1にて説明した、図1に示す計算装置1と同様の構成を有しており、以下では簡単のため計算装置1として参照する。
【0227】
計算装置1は、所定の形式の計算機言語(プログラム)から、パラメータの最適化(チューニング)が容易となるような他のプログラムを生成する、プログラム生成部6を備えた構成である。また、プログラムを実行形式に翻訳するコンパイラ7を備えている。
【0228】
本実施形態の計算装置1のプログラム生成部6は、メインプログラムの実行の際に最適化を行うために、メインプログラムの先頭において実測ルーチンおよび推定ルーチンを呼び出すようなメインプログラムを生成する構成である。また、計算装置1のプログラム生成部6は、指定子に応じて、サブプログラムを呼び出しているループ中において、実測ルーチンおよび推定ルーチンを呼び出すようなメインプログラムを生成こともできる。
【0229】
以下では、計算装置1の動作の概略について説明した後に、より具体的な実施例について説明する。
【0230】
図1および図2に示すように、本実施形態の計算装置1においても、指定子を記述したプログラムを用いて、自動チューニング機構の付加されたプログラムが生成される。そして、このプログラムを実行することによって、プログラムに含まれるパラメータの最適化を実行できる。
【0231】
より詳細には、計算装置1の有するプログラム生成部6は、図2に示すように、指定子解析手段8、プログラム作成手段9、およびコスト定義関数決定手段10を含んでいる。そして、実施の形態1と同様に、指定子を記述したプログラムが処理されて、新たなプログラムが生成される。このプログラムの生成とは、プログラムの書き換えをも含むものとする。
【0232】
本実施形態においては、指定子解析手段8、プログラム作成手段9の構成・動作は、実施の形態1と異なるものとなっている。この点について、以下で図面を参照してより詳細に説明をする。
【0233】
図19(a)(b)には、計算装置1の処理の対象となる、指定子の記述されたプログラムの一例を示す。
【0234】
図19(b)に示すサブルーチンxxxは、指定子の記述された、最適化するべきチューニング領域Bを有するプログラムの一例である。また、図19(a)に示すメインルーチンは、そのサブルーチンxxxを呼び出している。
【0235】
なお、図19(a)(b)は、それぞれ本実施形態の説明のために必要な箇所のみを特に示した一例であり、例えばサブルーチンxxxには図19(b)に示すように他の領域が含まれていてもよいし、また例えばメインルーチンにも図示しない他の領域、他の処理が含まれていてもよい。また、プログラム中の日本語による記載は、特に断らない場合は、具体的なプログラムの一例ではなく、プログラムによって実現するべき制御動作を抽象的に日本語で表現したものである。また、プログラム中の日本語が、プログラム中のコメントを表す場合もある。
【0236】
ここで、指定子解析手段8の有する指定子解析部8aは、上述の実施の形態のように、自動チューニングの種類(インストール時、実行起動前)ごとに、指定子で指定されたパラメータとチューニング領域を分け、別々に以降の機構に引き渡し、処理を行うことが可能である。また、指定子解析部8aは、本実施形態にて説明するように、自動チューニングの種類として、実行時の自動チューニングを行うこともできる。
【0237】
より詳細には、指定子解析部8aは、図19(b)に示すような実行時最適化を指示する指定子の有無を判別するとともに、実行時最適化において起動時に最適化を行うか、または実行時最適化において該当部分実行時に最適化を行うかのいずれかを指定する指定子についても判別を行うようになっている。
【0238】
また、この指定子解析部8aは、指定子に基づいて判別した情報を、図2に示すプログラム作成手段9のメインプログラム作成部9aとサブプログラム作成部9bとに通知する。そして、プログラム作成手段9は、上述の指定子に応じた処理を行う。
【0239】
ここで、上述の実施の形態において、インストール時の最適化を指定する指定子installに対応するものとして、例えば実行時最適化を指定する指定子の一例としてdynamicを用いることができる。また、実行時最適化において、例えば起動時に最適化を行うための指定子の一例としてinitを用いることができ、また、該当部分実行時に最適化を行うための指定子の一例としてはhereを用いることができる。
【0240】
なお、以下に説明する例では、プログラムをFortran言語を用いて記述しているが、本発明はこれに限るものではなく、任意の関数型計算機言語(C言語、C++言語など)を用いて記載されたプログラムにおいても、本発明による処理の本質は同じとなる。したがって、本発明の処理は、計算機言語の違いによる影響を受けない。
【0241】
以下では、指定子としてinitを用いる方式1(起動時実行方式)と、指定子としてhereを用いる方式2(該当部分実行方式)とに分けて説明をする。
【0242】
まず、方式1においては、図19(b)に示す実行時最適化指定子として、dynamicとinitが指定されているものとする。このとき、このプログラムの入力に応じて、計算装置1の指定子解析部8a・メインプログラム作成部9a・サブプログラム作成部9bが、図20(a)に示すようなメインプログラム、図20(b)に示すようなプログラム、図20(c)に示すような実測・推定ルーチンを生成する。また、ここでは、図示していないが、チューニング領域Bについて、最適化するためのパラメータを引数としてチューニング領域Bを実行するプログラムを、サブプログラムとして作成する。
【0243】
一方、方式2においては、図19(b)に示す実行時最適化指定子として、dynamicとhereが指定されているものとする。このとき、このプログラムの入力に応じて、計算装置1の指定子解析部8a・メインプログラム作成部9a・サブプログラム作成部9bが、図21(a)に示すようなメインプログラム、図21(b)に示すようなプログラム、図21(c)に示すような実測・推定ルーチンを生成する。また、ここでは、図示していないが、チューニング領域Bについて、最適化するためのパラメータを引数としてチューニング領域Bを実行するプログラムを、サブプログラムとして作成する。
【0244】
なお、図19(a)(b)においては、サブルーチン中に指定子を記述した例について説明しているが、これに限るものではない。方式1、方式2のいずれにおいても、メインルーチン中に指定子を記述した場合であっても、最適化するためのチューニング領域についてサブプログラムを作成し、メインプログラムとしてのメインルーチンから呼び出すようにするという点で、同様の処理がなされる。
【0245】
以上に概略を説明したように、方式1にて生成したプログラムは図20(a)に示すようにメインプログラムの先頭に実測・推定ルーチンとしてのAuto_xxxの呼び出しがある一方、方式2にて生成したプログラムは図21(a)に示すようにチューニング領域の直前に実測・推定ルーチンとしてのAuto_xxxの呼び出しがある。この違いによって、後述するように、実測・推定ルーチンの実行による最適化のための時間が大きく異なることになる。
【0246】
以下では、サブプログラムのより詳細な一例を参照して、より具体的な実施例について説明する。ここでは、実施例として、疎行列連立一次方程式の解法で用いられる反復解法の1つである、共役勾配法(CG法:Conjugate Gradient)への適用例について説明する。
【0247】
CG法とは、疎行列Aと右辺ベクトルbとが与えられたときに、連立一次方程式Ax=bを満たす解ベクトルxを求めるための方法である。このような解法はいろいろ知られているが、CG法は反復解法と呼ばれる解法の一つである。このCG法においては、反復回数(後述するIループの繰り返し回数)は疎行列Aの数値的特徴に依存して決まることになるため、反復回数は「問題依存」すると呼ばれる。
【0248】
まず、CG法のサブルーチンにおける疎行列一ベクトル積計算部分に、方式2(該当部分実行方式)の実行時自動チューニングを指定した適用例について説明する。
【0249】
図22は、符号C7で示す疎行列一ベクトル積演算処理(q^(I)=A p^(I))に対して、方式2の実行時自動チューニングを行う指定子(dynamic, here)が指定されている。
【0250】
ここで、図22の内容について簡単に説明をする。まず、図22に示される各変数について、説明をする。図22に示すAは、疎行列を表しており、連立一次方程式の係数行列に相当する。Aは、例えば1次元配列を用いて実装されることが多い。また、bは1次元配列のn次元ベクトルであり、連立一次方程式の右辺ベクトルに相当する。
【0251】
また、Iループ(Iについてのループ)におけるスカラーの値は下付きの「 _」で示している。Iループにおけるベクトルの値は、上付きの「 ^ 」で表記している。またベクトルの転置を、「T」で表す。例えば、p_(I)はIループでのスカラーpの値を示し、p^(I)はIループでのベクトルpの値を示し、p^(I)TはIループでのべクトルpの転置べクトルの値を示す。なお、このIループの反復回数は、上述のように問題依存するため、この図22では特に示していない。
【0252】
また、プログラム作成用補助配列として、z^(I-1)、r^(I-1)、M、p^(I-1)、q^(I)を用いる。また、プログラム作成用補助変数(スカラー)として、p_(I-1)、beta_(I-1)、a_Iを用いる。ここで、z^(I-1)、r^(I-1)、p^(I-1)、q^(I)は、n次元ベクトルの1次元配列である。また、Mは疎行列であり、例えば1次元配列によって実装されることが多い。また、p_(I-1)、beta_(I-1)、a_Iは、倍精度実数のスカラーである。
【0253】
また、図22の符号C1にて示す処理は、プログラムのコメントである。与えられたベクトルb、 x^(0)を用いて、行列Aとベクトルxとのベクトル積 Ax^(0)とベクトルbとの差を演算して、r^(0)を計算する。
【0254】
符号C2の処理は、与えられた疎行列M、ベクトルr^(I-1)を用いて、ベクトルz^(I-1)を求めることを意味する。この求解には、CG法の反復回数を減少させるようなMを作成し、ベクトルzを求めるような処理を行うための、ある種の数値計算アルゴリズムの利用が必要となる。このようなアルゴリズムについては、通常CG法において用いられているものを用いることができる。詳細については説明を省略する。
【0255】
符号C3の処理は、与えられた転置ベクトルr^(I-1)T とベクトルz^(I-1)との内積演算をすることで、スカラーp_(I-1)を計算することを意味する。
【0256】
符号C4の処理は、ベクトルのコピーを行うことを意味する。
【0257】
符号C5の処理は、与えられたスカラーp_(I-1)とp_(I-2)との除算から、スカラーbeta_(I-1)を計算することを意味する。
【0258】
符号C6の処理は、与えられたベクトルz^(I-1)、スカラーbeta_(I-1)、ベクトルp^(I-1)から、ベクトルp^(I)を計算することを意味する。このために、スカラー・ベクトル積beta_(I-1) p^(I-1)の演算結果であるベクトルと、ベクトルz^(I-1)との加算処理が必要となっている。
【0259】
符号C7の処理は、疎行列Aとベクトルp^(I)との疎行列・ベクトル積をすることで、ベクトルq^(I)を計算することを意味する。
【0260】
符号C8の処理は、ベクトルの転置p^(I)Tと、ベクトルq^(I)との内積計算の結果のスカラー値と、スカラー値p_(I-1)との除算をすることで、スカラー値a_Iを計算することを意味する。
【0261】
符号C9の処理は、スカラー値a_Iと、ベクトルp^(I)との積の結果のベクトルと、ベクトルx^(I-1)とを加算することで、ベクトルx^(I)を計算することを意味する。
【0262】
符号C10の処理は、スカラー値a_Iと、ベクトルq^(I)との積の結果のベクトルと、ベクトルr^(I-1)とを演算することで、ベクトルr^(I-1)を計算することを意味する。
【0263】
また、符号C10の後に示す、末尾の「収束を確かめ、必要なら繰り返す」との処理は、収束判定結果が十分であれば、Iループでの反復を中断して、enddo以降の部分に分岐することを意味する。ここで、収束を計算する方法はいろいろあり、どのようなものを用いてもよい。例えば、一般的な処理方式として、Ax=bについてCG法で計算中のxに対してr=|Ax-b|を計算して、rが十分に小さいかどうかを検査すればよい。
【0264】
なお、上述の符号C7で示す疎行列一ベクトル積演算処理は、より具体的には、図23に示すようなプログラムに相当するものである。
【0265】
ここで、図23においては、疎行列Aとベクトルxとの疎行列・ベクトル積演算の具体的なコードを示すために、疎行列Aを表現するためのデータ構造を実現する配列(情報を維持する配列)として、Aval(J)、row_ptr(I),col_ind(J)を用いている。また、疎行列Aと行列・ベクトル積演算をするために必要な、ベクトルxの要素として、x(col_ind(J))を用いている。
【0266】
より詳細には、Aval(J)は、疎行列Aの数値である、倍精度実数値が格納されている、1次元配列を意味する。また、col_ind(J)は、整数の1次元行列であり、疎行列Aの非零要素がある列の番号が収納されている。したがって、x(col_ind(J))によって、疎行列Aの非零要素に対応するベクトルxの要素を返すことができる。
【0267】
また、row_ptr(I)には、疎行列Aの非零要素がある行の番号が収納されている。これら、row_ptr(I)、col_ind(J)の値は、疎行列Aが確定する段階で設定される。したがって、これらの値は、ライブラリ呼び出しの地点で定まっている、静的な値である。言い換えると、これらの値は、CG法をプログラムする際の補助配列における値のように、CG法のプログラム中で動的に決まる値ではない。
【0268】
ここで、図22に示す指定子は、図23で示されるコードの最内ループ(Jループ)に対し、アンローリング処理をする自動チューニングを指定している。
【0269】
このループ長は、変数配列row_ptr(I)、row_ptr(I+1)で指定されていることから、ループ長は固定ではない。また一般的に、実行時にならないとこの変数配列の値は決まらない。したがって、本適用例は、実行時自動チューニングのみ指定できる一例といえる。
【0270】
そして、図23に示すプログラムに対して、図22に示すような実行時自動チューニングでのアンローリング指定によって、このチューニング領域は、図24に示すようなサブプログラムとなる。すなわち、図23の疎行列-ベクトル積コードが図24に示すように、1段ないし8段のアンローリング段数を有するプログラムに書き換えられる。なお、図24において符号d1で示す領域は、アンローリング段数が3段ないし7段の領域を省略して示すものである。
【0271】
また、計算装置1によって、図25(a)に示すようなメインプログラム、図25(b)に示すようなプログラム、図25(c)に示すような実測・推定ルーチンが作成される。なお図25(a)~(c)に示すプログラムコードは、本適用例説明のために簡略化したコードであり、実際に生成されるコードとは同一ではない。例えば、各プログラムは、さらに図示しない他の処理を含んでいてもよいことはもちろんである。
【0272】
このように、方式2においては、図24に示した8段アンローリングのコードの実行時問を、図22で示した該当部分が実行される度に測定し、最適な段数を求めるようになっている。
【0273】
次に、方式1(起動時実行方式)の実行時自動チューニングを指定した適用例について説明する。
【0274】
図26は、方式2における図22に相当する、最適化するためのプログラムを示すものである。この方式2においては、後述するように、CG法のサブルーチンが起動される前に一度だけ図24によるコードの実行時間を測定し、あとは該当部分で最適なアンローリング段数であるパラメータ値(J_valの値)を参照するコードを自動生成する。
【0275】
ここで、図26と図22とは、指定子の指定(initかhereか)が異なるのみであり、他は同様であるので、ここでは説明を省略する。
【0276】
そして、図26のプログラムに対するアンローリング指定によって、図22と同様に、チューニング領域は図24に示すようなサブプログラムとなる。
【0277】
そして、計算装置1によって、図27(a)に示すようなメインプログラム、図27(b)に示すようなプログラム、図27(c)に示すような実測・推定ルーチンが作成される。なお図27(a)~(c)に示すプログラムコードは、本適用例説明のために簡略化したコードであり、実際に生成されるコードとは同一ではない。例えば、各プログラムは、さらに図示しない他の処理を含んでいてもよいことはもちろんである。
【0278】
次に、方式1、方式2を用いてチューニングを行った結果について説明をする。
【0279】
方式1(図26)・方式2(図22)における、CG法の反復回数、すなわち、図26・図22におけるIループの繰り返し回数を100回であるとする。なお、この反復回数は、実際には解くべき疎行列の数値的特徴に応じて決まる、問題依存する量である。
【0280】
また疎行列-ベクトル積演算以外の実行時間を、1反復あたり0.5秒とする。さらに各パラメータチェック(アンローリング段数の決定)のために要する時問、すなわち疎行列-ベクトル積演算1回当たりの時問、を1秒とする。これは、より詳細には、図24に記載のSub_SMVCGに特定の値の引数J_valを指定して実行させる、call Sub_SMVCG(J_val)の実行時間に相当する。
【0281】
このとき、方式1(起動時実行方式)における実行時間の見積もりは、以下のようになる。まず、メインルーチンにおいて、Auto_CGからSub_SMVCGが8回呼び出される(1秒×8)。また、Sub_CGのループ内において、Auto_CGではなくSub_SMVCGが呼び出され(1秒)、さらにその他の演算が実行される(0.5秒)。このループが100回実行される。これによって、158秒必要となる。
【0282】
また方式2(該当部分実行方式)における実行時間の見積もりは、Sub_CGのループ内においては、Auto_CGからSub_SMVCGが8回呼び出され(1秒×8)、さらにその他の演算が実行される(0.5秒)。また、J固定のSub_SMVCG(J)が実行される(1秒)。このループが100回実行される。これによって、950秒必要となる。
【0283】
したがって、見積もられる実行時間としては、方式1では158秒であるのに対して、方式2では950秒となる。したがって、方式1は方式2に比べ、950/158=約6倍高速となる。以上のように、この例の場合は、方式1による方が、方式2に比べて約5~8倍だけ高速となる。
【0284】
ここで、一般的に、間題の数値特性が厳しくなる、難しい問題になるほど、反復回数は増加する。このため、上述の見積もりによれば、問題が難しくなるほど、方式1と方式2との実行時間の差は大きくなるといえる。したがって、方式1は、パラメータのチューニング時間を含まざるを得ない実行時のパラメータ最適化処理において、実際の実行時間の観点から非常に有効であるといえる。以上の適用例のように、方式1の利点は大きい。
【0285】
このように、実行時自動チューニング処理を、該当領域が含まれるサブルーチンの実行前に1度行うように分離する方式の適用により、従来から実行時自動チューニングにおいて問題となっていた、(1)冗長な最適化処理を繰り返す点、(2)上記(1)の理由から最適化処理の時間が長くなる点の各問題を解決することができる。
【0286】
なお、実施の形態2と上述の実施の形態1との関係について、説明を補足する。例えば、実施形態1における図13と、実施形態2における図20とは、同一のものではない。
【0287】
まず、実施の形態1記載の例および処理結果は、インストール時方式、実行前方式を指定した場合の処理に限定されており、実行時方式を指定した場合の処理については記載がない。すなわち、実施の形態2の図21に記載の(Sub_xxx中でのAuto_xxxの呼び出し)などに相当するものは、実施の形態1においては具体的な実施例としては記載していない。実施の形態1における図13は、インストール時方式、実行前方式を指定した場合の処理に関するものである。
【0288】
また、実施の形態1においても、チューニング領域の指定場所について、メインルーチン中やサブルーチン中など、その場所は限定されない。すなわち、実施の形態1においても、メインルーチンからではなく、メインプログラムとしてのサブルーチンからの呼び出しが可能である。
【0289】
また、実施の形態1において実行時最適化を指定する場合は、実施の形態2の方式2に相当し、例えば図21と同様のコードが生成される。すなわち、実行時方式を指定する場合には、一般的に、実行時にならないとパラメータのチューニングができない理由があるので、その処理の特殊性から、図21と同一のコードを生成する必要がある、ということになる。
【0290】
一方、実施の形態2における方式1では、実施の形態1とは異なり、チューニング領域の指定がメインルーチンまたはサブルーチンのどちらに存在しようとも、例えばAuto_xxxのような自動チューニングルーチンの呼び出しを、強制的にメインプログラムの先頭に移動させる。より詳細には、自動チューニングルーチンの呼び出しを、サブプログラムを呼び出しているループ(Iループ)の前に移動させる。すなわち、方式1は、実測・推定ルーチンをメインルーチンから直接呼び出すようにするか、またはメインルーチンから呼び出されるサブルーチンにおいて呼び出すようにするかを切り替えるものではない。
【0291】
上述のように、方式1と方式2とでは、実行時間が大きく異なることから、実行時方式においては、問題の性質に応じて、方式1の図20をより好ましいものとして用いることができる。
【0292】
以上のように、本発明は、例えばコンピュータに蓄えられたプログラムにおけるパラメータの最適化、コンピュータを実行させるためのプログラム、記録媒体およびコンピュータに関するものである。特に、上述の実施の形態2は、実行時自動チューニングにおける高速最適化方式に関するものである。
【0293】
ここで、ソフトウェアの性能を高めるための自動チューニングの種類は、その最適化を行うタイミングにより、インストール時、実行起動前、および実行時の3種に分類できる。この3種の自動チューニングのうち、もっとも最適化のための時問を考慮しなくてはならない処理が、実行時の自動チューニングである。実行時の自動チューニングを行う揚合には、上述の実施の形態のように、自動チューニングの対象領域であるサブプログラム、もしくはプログラムの一部分が実行された時に、パラメータのチューニングを行う方式が知られている。
【0294】
しかしながら上述の構成によれば、(1)冗長な最適化処理を繰り返す、(2)上記(1)の理由から最適化処理の時間が長い、という間題を生ずる。
【0295】
そこで、上述のように、実行時最適化の指示において、該当部分を含むサブルーチン等の起動時(呼び出し前)に1度だけ行う処理(方式1)、および該当箇所が呼ばれた時に行う処理(方式2)の2方式に処理を分離して指定することで問題の解決を図る。すなわち、例えばサブプログラム自身が反復回数の多いループの中から呼び出されている場合、ループ内のサブプログラムの呼び出し直前に最適化するか、またはこのループの外側において呼び出して最適化するかを切り替えることができるようにする。なお、実施の形態2における発明機能の利用形態、および処理機構の概略は上述したように、実施の形態1と同様である。
【0296】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても、本発明の技術的範囲に含まれる。
【0297】
上述の具体的な実施形態または実施例は、あくまでも、本発明の技術内容を明らかにするものであって、本発明はそのような具体例にのみ限定して狭義に解釈されるべきものではなく、特許請求の範囲に示した範囲で種々の変更が可能であり、変更した形態も本発明の技術的範囲に含まれる。
【0298】
【発明の効果】
本発明に係る計算装置は、以上のように、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成するプログラム生成部を備えている構成である。
【0299】
それゆえ、この計算装置に対して、所定の指定子を記載したプログラムを入力すれば、このプログラムの指定した領域を指定したパラメータについて最適化するためのプログラムを得ることができるという効果を奏する。
【0300】
本発明に係る計算装置は、以上のように、上記構成において、上記プログラム生成部は、入力される上記プログラムから上記指定子によって指定される上記領域と上記パラメータとを抽出する指定子解析手段と、上記指定子解析手段にて抽出された上記領域を含むサブプログラムを生成し、上記サブプログラムを呼び出して、上記パラメータについての実測による最適化を実行するためのメインプログラムを生成する、プログラム作成手段とを含んでいる構成である。
【0301】
それゆえ、この構成によって、上述の本発明に係る計算装置を実現できるという効果を奏する。
【0302】
本発明に係る計算装置は、以上のように、上記構成において、上記プログラム作成手段は、上記メインプログラムから呼び出す、または上記メインプログラムに含ませるための、上記パラメータごとに上記サブプログラムを呼び出して所要時間を計測する実測ルーチンと、上記実測ルーチンにて計測した上記所要時間を用いて最適なパラメータを推定する推定ルーチンとを作成する構成である。
【0303】
それゆえ、この構成であれば、実測ルーチンと推定ルーチンとが、メインプログラムから呼び出され、またはメインプログラムに含まれているので、メインプログラムを実行可能形式に翻訳して実行するだけで、最適なパラメータを得ることができるという効果を奏する。
【0304】
本発明に係る計算装置は、以上のように、上記構成において、上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムを生成する構成である。
【0305】
それゆえ、ループの内部にて毎回実測ルーチンが実行されることがないので、その分だけ最適化に要する時間を短縮できるという効果を奏する。
【0306】
本発明に係る計算装置は、以上のように、上記構成において、上記プログラム作成手段は、上記メインプログラムの実行の際に最適化を行うために、上記サブプログラムが上記メインプログラムのループ内において呼び出されている場合には、上記ループの外側で上記ループよりも前において、上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムか、または、上記ループ内において上記実測ルーチンおよび上記推定ルーチンを呼び出す上記メインプログラムかのいずれかを、上記指定子に応じて選択して生成する構成である。
【0307】
それゆえ、最適化の際の実測ルーチンおよび推定ルーチンの呼び出し回数を減らすか、または通常の最適化を行うかを、指定子に応じて切り替えることができるという効果を奏する。
【0308】
本発明に係る計算装置は、以上のように、上記構成において、上記パラメータごとに計測した上記所要時間を近似するためのコスト定義関数を含むコスト定義関数ライブラリを備えている構成である。
【0309】
それゆえ、この構成であれば、例えば、このコスト定義関数ライブラリに含まれるコスト定義関数を用いて、所望の近似を行うことができるという効果を奏する。
【0310】
本発明に係る計算装置は、以上のように、上記構成において、計測した上記所要時間を、上記コスト定義関数ライブラリ中に含まれるコスト定義関数の全てを順次用いて近似して、そのうちから最も近似精度のよいコスト定義関数を選択するコスト定義関数決定部を備えている構成である。
【0311】
それゆえ、この構成であれば、例えば指定子に推定ルーチンにて用いる近似関数の指定を含めない場合であっても、最適な近似関数を得ることができるという効果を奏する。
【0312】
本発明に係る計算装置は、上記指定子解析手段にて抽出した上記領域と上記パラメータとを記憶するチューニング情報データベースを有しており、上記プログラム作成手段と上記コスト定義関数決定部とが、上記チューニング情報データベースを参照して上記領域または上記パラメータを取得する構成である。
【0313】
それゆえ、プログラム作成手段とコスト定義関数決定部とが領域またはパラメータを用いる際に、チューニング情報データベースを参照すればよく、その度に領域またはパラメータを抽出する必要がないという効果を奏する。
【0314】
本発明に係る計算方法は、以上のように、最適化を行うプログラム中の領域と最適化を行うパラメータとを指定する指定子が含まれている上記プログラムが入力されると、上記指定子によって指定される上記領域と上記パラメータとについての、実測による最適化を実行するためのプログラムを生成する工程と、上記生成する工程にて得た上記プログラムを実行して最適化を行う工程とを含んでいる構成である。
【0315】
それゆえ、この計算方法を例えばコンピュータのような計算装置にて実行すれば、上述の計算装置を実現できるという効果を奏する。
【0316】
本発明に係る計算方法は、以上のように、上記構成において、上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムを生成する構成である。
【0317】
それゆえ、ループの内部において毎回実測・推測を実行することがないので、その分だけ最適化に要する時間を短縮できるという効果を奏する。
【0318】
本発明に係る計算方法は、以上のように、上記構成において、上記プログラムの実行の際に最適化を行うために、上記領域が上記プログラムのループ内において呼び出されている場合には、上記プログラムを生成する工程において、上記ループの外側で上記ループよりも前に、上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムか、または上記ループ内にて上記領域についての上記パラメータごとの所要時間の実測と実測した上記所要時間から最適なパラメータの推測とを行うような上記プログラムかのいずれかを、上記指定子に応じて選択して生成する構成である。
【0319】
それゆえ、ループの外側でループよりも前に実測・推測を実行するか、またはループの内部において毎回実測・推測を実行するかを、指定子の設定によって簡単に切り替えることができるという効果を奏する。
【0320】
本発明に係るプログラムは、以上のように、上記構成において、コンピュータを、上述のいずれかに記載の計算装置の各手段として動作させる構成である。
【0321】
それゆえ、このプログラムを用いれば、上述の計算装置を実現できるという効果を奏する。
【0322】
本発明に係る記録媒体は、以上のように、上記構成において、上述のプログラムをコンピュータ読み取り可能に記録した構成である。
【0323】
それゆえ、この記録媒体のプログラムをコンピュータにて読み取って実行すれば、上述の計算装置を実現できるという効果を奏する。
【図面の簡単な説明】
【図1】本発明に係る計算装置の概略構成を示すブロック図である。
【図2】上記計算装置のプログラム生成部の構成を示すブロック図である。
【図3】上記計算装置に入力されるプログラムの一例を示す図である。
【図4】(a)は上記プログラムのチューニング領域の一具体例を示す図であり、(b)は(a)に示すチューニング領域が上記プログラム生成部によって処理されて得られるプログラムの一例を示す図である。
【図5】(a)は図3に示すプログラムから上記プログラム生成部によって生成されるメインプログラムの一例を示す図であり、(b)は図3に示すプログラムが上記プログラム生成部によって書き換えられた一例を示す図であり、(c)は図3に示すプログラムから上記プログラム生成部によって生成されるサブプログラムの一例を示す図であり、(d)は図3に示すプログラムから上記プログラム生成部によって生成されるチューニング用プログラムの一例を示す図である。
【図6】上記プログラム生成部による、コスト定義関数決定処理の一例を示すフローチャートである。
【図7】上記プログラム生成部による、サンプリング点決定処理の一例を示すフローチャートである。
【図8】上記プログラム生成部による、パラメータ推定処理(a)の一例を示すフローチャートである。
【図9】上記プログラム生成部による、パラメータ推定処理(b)の一例を示すフローチャートである。
【図10】上記プログラム生成部による、測定用ループ処理の一例を示すフローチャートである。
【図11】上記計算装置による処理の概略を示すフローチャートである。
【図12】上記計算装置に入力されるプログラムの他の一例を示す図である。
【図13】(a)は図12に示すプログラムから上記プログラム生成部によって生成されるメインプログラムの一例を示す図であり、(b)は図12に示すプログラムから上記プログラム生成部によって生成されるチューニング用プログラムの一例を示す図である。
【図14】(a)は図12に示すプログラムが上記プログラム生成部によって書き換えられ、生成されるサブプログラムの一例の一部を示す図であり、(b)は(a)とは異なる一部を示す図である。
【図15】上記計算装置の一部を示すブロック図である。
【図16】上記計算装置の他の一部を示すブロック図である。
【図17】(a)はインストール時最適化の手順を示すフローチャートであり、(b)はライブラリ実行前最適化の手順を示すフローチャートであり、(c)はライブラリ実行時最適化の手順を示すフローチャートである。
【図18】(a)は従来のコンピュータの一例の一部を示すブロック図であり、(b)は従来のコンピュータの他の一例の一部を示すブロック図である。
【図19】(a)は上記計算装置に入力されるプログラムのさらに他の一例の一部を示す図であり、(b)は上記プログラムの(a)とは異なる一部を示す図である。
【図20】(a)は図19(a)(b)に示すプログラムから上記プログラム生成部によって生成されるメインプログラムの一例を示す図であり、(b)は図19(a)(b)に示すプログラムから上記プログラム生成部によって書き換えられたプログラムの一例を示す図であり、(c)は図19(a)(b)に示すプログラムから上記プログラム生成部によって生成されるチューニング用プログラムの一例を示す図である。
【図21】(a)は図19(a)(b)に示すプログラムから上記プログラム生成部によって生成されるメインプログラムの他の一例を示す図であり、(b)は図19(a)(b)に示すプログラムから上記プログラム生成部によって書き換えられたプログラムの他の一例を示す図であり、(c)は図19(a)(b)に示すプログラムから上記プログラム生成部によって生成されるチューニング用プログラムの他の一例を示す図である。
【図22】上記計算装置に入力されるプログラムのさらに他の一例を示す図である。
【図23】図22に示すプログラムの一部をより具体的に記載した一例を示す図である。
【図24】図22および図23に示すプログラムから生成されるサブプログラムの一例を示す図である。
【図25】(a)は上記プログラム生成部によって生成されるメインプログラムの他の一例を示す図であり、(b)は上記プログラム生成部によって書き換えられたプログラムの他の一例を示す図であり、(c)は上記プログラムから上記プログラム生成部によって生成されるチューニング用プログラムの他の一例を示す図である。
【図26】上記計算装置に入力されるプログラムの、図22とは異なる一例を示す図である。
【図27】
(a)は上記プログラム生成部によって生成されるメインプログラムのさらに他の一例を示す図であり、(b)は上記プログラム生成部によって書き換えられたプログラムのさらに他の一例を示す図であり、(c)は上記プログラムから上記プログラム生成部によって生成されるチューニング用プログラムのさらに他の一例を示す図である。
【符号の説明】
1 計算装置
2 プロセッサ
3 ユーザライブラリ(ライブラリ)
4 パラメータ調整層
5 パラメータ情報ファイル
6 プログラム生成部
8 指定子解析手段
9 プログラム作成手段
10 コスト定義関数決定手段
10a チューニング情報データベース
10b コスト定義関数ライブラリ
10c コスト定義関数決定部
図面
【図1】
0
【図2】
1
【図3】
2
【図4】
3
【図5】
4
【図6】
5
【図7】
6
【図8】
7
【図9】
8
【図10】
9
【図11】
10
【図12】
11
【図13】
12
【図14】
13
【図15】
14
【図16】
15
【図17】
16
【図18】
17
【図19】
18
【図20】
19
【図21】
20
【図22】
21
【図23】
22
【図24】
23
【図25】
24
【図26】
25
【図27】
26