(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-05
(45)【発行日】2022-01-20
(54)【発明の名称】計算量評価装置、計算量評価方法及び計算量評価プログラム
(51)【国際特許分類】
G06F 11/34 20060101AFI20220113BHJP
G06F 17/10 20060101ALI20220113BHJP
G09C 1/00 20060101ALI20220113BHJP
【FI】
G06F11/34 147
G06F17/10 Z
G09C1/00 650A
G06F11/34 142
(21)【出願番号】P 2018195928
(22)【出願日】2018-10-17
【審査請求日】2020-12-01
(73)【特許権者】
【識別番号】000208891
【氏名又は名称】KDDI株式会社
(74)【代理人】
【識別番号】100106002
【氏名又は名称】正林 真之
(74)【代理人】
【識別番号】100120891
【氏名又は名称】林 一好
(72)【発明者】
【氏名】福島 和英
(72)【発明者】
【氏名】清本 晋作
【審査官】川▲崎▼ 博章
(56)【参考文献】
【文献】特開2013-175065(JP,A)
【文献】特開2010-113527(JP,A)
【文献】国際公開第2018/150588(WO,A1)
【文献】特開2013-153257(JP,A)
【文献】米国特許出願公開第2018/0247223(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/34
(57)【特許請求の範囲】
【請求項1】
計算アルゴリズムに対して、入力サイズの関数である計算量の主要項を受け付ける入力部と、
前記主要項に所定のオーバヘッドを加味し、係数を付加した計算時間の推定関数を設定する設定部と、
前記計算アルゴリズムの実装環境において、前記入力サイズの異なる計算を複数回実行し、実計算時間を前記入力サイズと対応付けて記録する記録部と、
前記推定関数による計算時間の推定値と前記実計算時間との誤差を最小にするための前記係数を算出する算出部と、
前記算出部により算出された前記係数を設定した前記推定関数を出力する出力部と、を備える計算量評価装置。
【請求項2】
前記入力部は、前記記録部による計算の実行回数の指定を受け付ける請求項1に記載の計算量評価装置。
【請求項3】
前記オーバヘッドは、前記入力サイズの線型項及び定数項である請求項1又は請求項2に記載の計算量評価装置。
【請求項4】
前記設定部は、前記主要項が前記入力サイズに等しい場合、前記推定関数を、前記線型項及び前記定数項のみとする請求項3に記載の計算量評価装置。
【請求項5】
前記入力サイズの指定に対して、複数の計算アルゴリズムのうち、対応する前記推定関数による計算時間の推定値が最小の計算アルゴリズムを選択する選択部を備える請求項1から請求項4のいずれかに記載の計算量評価装置。
【請求項6】
計算アルゴリズムに対して、入力サイズの関数である計算量の主要項を受け付ける入力ステップと、
前記主要項に所定のオーバヘッドを加味し、係数を付加した計算時間の推定関数を設定する設定ステップと、
前記計算アルゴリズムの実装環境において、前記入力サイズの異なる計算を複数回実行し、実計算時間を前記入力サイズと対応付けて記録する記録ステップと、
前記推定関数による計算時間の推定値と前記実計算時間との誤差を最小にするための前記係数を算出する算出ステップと、
前記算出ステップにおいて算出された前記係数を設定した前記推定関数を出力する出力ステップと、をコンピュータが実行する計算量評価方法。
【請求項7】
計算アルゴリズムに対して、入力サイズの関数である計算量の主要項を受け付ける入力ステップと、
前記主要項に所定のオーバヘッドを加味し、係数を付加した計算時間の推定関数を設定する設定ステップと、
前記計算アルゴリズムの実装環境において、前記入力サイズの異なる計算を複数回実行し、実計算時間を前記入力サイズと対応付けて記録する記録ステップと、
前記推定関数による計算時間の推定値と前記実計算時間との誤差を最小にするための前記係数を算出する算出ステップと、
前記算出ステップにおいて算出された前記係数を設定した前記推定関数を出力する出力ステップと、をコンピュータに実行させるための計算量評価プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、最適な計算アルゴリズムを選択するための装置、方法及びプログラムに関する。
【背景技術】
【0002】
近年、格子暗号等の高速軽量な次世代公開鍵暗号のIoTへの実装が進んでいる。次世代公開鍵暗号方式の多くは、整数又は有限体上の乗算が処理の大部分を占めているため、処理の高速化のためには乗算の高速化が必要である。
従来の高速な乗算アルゴリズムとして、例えば、Karatsuba法(非特許文献1参照)、及び高速フーリエ変換乗算法(非特許文献2参照)が提案されている。
【先行技術文献】
【非特許文献】
【0003】
【文献】A. Karatsuba, Y.O.: Multiplication of Many-Digital Numbers by Automatic Computers. Dokl. Akad. Nauk SSSR 145, 293-294 (1962).
【文献】Furer, M.: Faster Integer Multiplication. In: Proceedings of the thirty-ninth annual ACM symposium on Theory of computing - STOC 07. ACM Press (2007).
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、従来は、漸近計算量又は最悪計算量等の指標により、実装されたプログラムの実計算量又は処理時間を見積もることが一般的だった。
例えば、前述のKaratsuba法及び高速フーリエ変換乗算法の漸近計算量は、それぞれO(nlog(2)3)及びO(n・log n)であり、理論上は高速フーリエ変換乗算法が高速である。しかしながら、実装方法(プログラム)、CPU等の動作環境及び入力サイズ(桁数)によっては、高速フーリエ変換乗算法よりもKaratsuba法が高速になる場合もあった。
【0005】
また、例えば、データの並べ替えを行うためのアルゴリズムの一つであるクイックソートの最悪計算量はO(n2)であり、ヒープソート及びマージソートの最悪計算量O(n・log n)を上回る。しかしながら、多くの実装方法及び動作環境において、クイックソートの性能は他の方式の性能を上回ることが知られている。
【0006】
このように、実装方法、動作環境及び入力サイズに応じて、最適なアルゴリズムを選択することは難しかった。
【0007】
本発明は、アルゴリズムの実装方法、動作環境及び入力サイズに基づく計算量を評価できる計算量評価装置、計算量評価方法及び計算量評価プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明に係る計算量評価装置は、計算アルゴリズムに対して、入力サイズの関数である計算量の主要項を受け付ける入力部と、前記主要項に所定のオーバヘッドを加味し、係数を付加した計算時間の推定関数を設定する設定部と、前記計算アルゴリズムの実装環境において、前記入力サイズの異なる計算を複数回実行し、実計算時間を前記入力サイズと対応付けて記録する記録部と、前記推定関数による計算時間の推定値と前記実計算時間との誤差を最小にするための前記係数を算出する算出部と、前記算出部により算出された前記係数を設定した前記推定関数を出力する出力部と、を備える。
【0009】
前記入力部は、前記記録部による計算の実行回数の指定を受け付けてもよい。
【0010】
前記オーバヘッドは、前記入力サイズの線型項及び定数項であってもよい。
【0011】
前記設定部は、前記主要項が前記入力サイズに等しい場合、前記推定関数を、前記線型項及び前記定数項のみとしてもよい。
【0012】
前記計算量評価装置は、前記入力サイズの指定に対して、複数の計算アルゴリズムのうち、対応する前記推定関数による計算時間の推定値が最小の計算アルゴリズムを選択する選択部を備えてもよい。
【0013】
本発明に係る計算量評価方法は、計算アルゴリズムに対して、入力サイズの関数である計算量の主要項を受け付ける入力ステップと、前記主要項に所定のオーバヘッドを加味し、係数を付加した計算時間の推定関数を設定する設定ステップと、前記計算アルゴリズムの実装環境において、前記入力サイズの異なる計算を複数回実行し、実計算時間を前記入力サイズと対応付けて記録する記録ステップと、前記推定関数による計算時間の推定値と前記実計算時間との誤差を最小にするための前記係数を算出する算出ステップと、前記算出ステップにおいて算出された前記係数を設定した前記推定関数を出力する出力ステップと、をコンピュータが実行する。
【0014】
本発明に係る計算量評価プログラムは、計算アルゴリズムに対して、入力サイズの関数である計算量の主要項を受け付ける入力ステップと、前記主要項に所定のオーバヘッドを加味し、係数を付加した計算時間の推定関数を設定する設定ステップと、前記計算アルゴリズムの実装環境において、前記入力サイズの異なる計算を複数回実行し、実計算時間を前記入力サイズと対応付けて記録する記録ステップと、前記推定関数による計算時間の推定値と前記実計算時間との誤差を最小にするための前記係数を算出する算出ステップと、前記算出ステップにおいて算出された前記係数を設定した前記推定関数を出力する出力ステップと、をコンピュータに実行させるためのものである。
【発明の効果】
【0015】
本発明によれば、アルゴリズムの実装方法、動作環境及び入力サイズに基づく計算量を評価できる。
【図面の簡単な説明】
【0016】
【
図1】実施形態に係る計算量評価装置の機能構成を示すブロック図である。
【
図2】実施形態に係る計算量評価方法の処理手順を示す図である。
【
図3】実施形態に係る選択部による計算アルゴリズムの選択方法を例示する図である。
【発明を実施するための形態】
【0017】
以下、本発明の実施形態の一例について説明する。
図1は、本実施形態に係る計算量評価装置1の機能構成を示すブロック図である。
計算量評価装置1は、サーバ装置又はパーソナルコンピュータ等の情報処理装置(コンピュータ)であり、制御部10及び記憶部20の他、各種データの入出力デバイス及び通信デバイス等を備える。
【0018】
制御部10は、計算量評価装置1の全体を制御する部分であり、記憶部20に記憶された各種プログラムを適宜読み出して実行することにより、本実施形態における各機能を実現する。制御部10は、CPUであってよい。
【0019】
記憶部20は、ハードウェア群を計算量評価装置1として機能させるための各種プログラム、及び各種データ等の記憶領域であり、ROM、RAM、フラッシュメモリ又はハードディスク(HDD)等であってよい。具体的には、記憶部20は、本実施形態の各機能を制御部10に実行させるためのプログラム(計算量評価プログラム)、このプログラムで用いられるパラメータ、生成されるサンプルデータ及び評価式等を記憶する。
【0020】
制御部10は、入力部11と、設定部12と、記録部13と、算出部14と、出力部15と、選択部16とを備える。
【0021】
入力部11は、評価対象の計算アルゴリズムに対して、この計算への入力サイズnの関数である計算量の主要項を受け付ける。なお、主要項は、例えばn2、n・log n等、計算アルゴリズム毎に事前に求められているものとする。
このとき、入力部11は、用意する計算時間のサンプルデータの数、すなわち記録部13による事前計算の実行回数の指定を受け付けてもよい。
【0022】
設定部12は、入力された主要項に所定のオーバヘッドを加味し、係数を付加した計算時間の推定関数を設定する。オーバヘッドは、データの入力時間等を考慮した入力サイズに比例する線型項と、プログラムの起動時間等を考慮した定数項である。
ここで、設定部12は、主要項が入力サイズに等しい場合、すなわち、計算アルゴリズムから求められる計算量がO(n)の場合、推定関数を、線型項及び定数項のみとする。
【0023】
記録部13は、計算アルゴリズムの実装環境において、入力サイズの異なる計算を複数回実行し、実計算時間を入力サイズと対応付けてサンプルデータとして記録する。実行回数は、予め決められた所定回数、あるいは、入力部11が受け付けた指定回数であってよい。
なお、記録部13は、入力サイズを所定の範囲でランダムに選択してもよいし、実行回数に応じて等間隔等に分散して選択してもよい。
【0024】
算出部14は、推定関数による計算時間の推定値と実計算時間との誤差を最小にするための係数を、後述の処理により算出する。誤差は、例えば2乗誤差が用いられる。
出力部15は、算出部14により算出された係数を設定した推定関数を出力する。
選択部16は、入力サイズの指定に対して、同一の処理を行う複数の計算アルゴリズムのうち、対応する推定関数による計算時間の推定値が最小の計算アルゴリズムを選択する。
【0025】
計算量評価装置1は、これらの機能部により計算アルゴリズムが実装された環境における計算時間の推定関数を出力する。また、計算量評価装置1は、入力サイズの指定に応じて、複数の計算アルゴリズムの中から計算時間が最短のアルゴリズムを選択する。
なお、計算量評価装置1は、任意の計算アルゴリズムを対象とする。
【0026】
次に、算出部14による推定関数における係数の算出処理を詳述する。
評価対象の計算アルゴリズムによる計算時間f(n)は、入力サイズnにのみ依存し、アルゴリズムの計算量の主要項がC(n)(>O(1))であるものとする。また、計算時間は、入力サイズに比例するオーバヘッドと、常に一定のオーバヘッドとを加味し、f(n)=aC(n)+bn+c(ただし、a,b,cは定数)と表されるものとする。
【0027】
このとき、サンプルデータとして記録された実計算時間t
iと、入力サイズn
iから推定関数により推定される計算時間との2乗誤差は、
【数1】
と表される。
【0028】
ここで、S(a,b,c)が最小になるa,b,cを求めるためには、a,b,cに対する偏導関数に関する連立方程式、
【数2】
を解けばよい。
【0029】
連立方程式は、それぞれ、
【数3】
と展開できる。式を整理すると、連立方程式は、
【数4】
と行列を用いて表すことができる。
【0030】
逆行列を用いると、a,b,cは、
【数5】
と求めることができる。
【0031】
ただし、C(n)=nの場合は、行列の1行目と2行目とが同一となり、逆行列は存在しない。この場合、a=0とし、f(n)=bn+cとする。すると、2乗誤差は、
【数6】
となる。
【0032】
上記のS(a,b,c)と同様に、S(b,c)が最小になるb,cは、
【数7】
という連立方程式、すなわち、
【数8】
を解けばよい。
【0033】
逆行列を用いると、b,cは、
【数9】
と求めることができる。
【0034】
図2は、本実施形態に係る計算量評価方法の処理手順を示す図である。
計算量評価装置1は、実装されたプログラムP、計算量の主要項C(n)、繰り返し回数lを入力として、計算時間の推定関数f(n)を出力する。
なお、繰り返し回数lの値を大きくすると、処理時間は長くなるものの、推定関数の精度が向上する。
【0035】
ステップ1において、制御部10(記録部13)は、インデックスiを0からl-1までインクリメントしつつ、後続のステップ2~4を繰り返す。
ステップ2において、制御部10(記録部13)は、入力サイズniを任意に、あるいは所定間隔等のルールに従って選択する。
ステップ3において、制御部10(記録部13)は、サイズniの入力xiを任意に選択する。
ステップ4において、制御部10(記録部13)は、評価対象の計算アルゴリズムの実装環境において、入力xiを与えてプログラムPを実行し、実計算時間tiを記録する。
【0036】
ステップ5において、制御部10(算出部14)は、計算量の主要項C(n)がnであるか否かを判定する。制御部10(算出部14)は、主要項C(n)がnの場合、ステップ6及び7を実行し、その他の場合、ステップ8を実行する。
ステップ6及び7において、制御部10(算出部14)は、係数a=0とし、推定関数f(n)=bn+cの係数b,cを前述の行列式により算出する。
ステップ8において、制御部10(算出部14)は、推定関数f(n)=aC(n)+bn+cの係数a,b,cを前述の行列式により算出する。
【0037】
ステップ9において、制御部10(出力部15)は、算出された係数により推定関数f(n)を確定し、記憶部20に記憶する。
ステップ10において、制御部10(出力部15)は、推定関数f(n)を出力する。
【0038】
計算量評価装置1は、このような計算量評価方法により出力された推定関数により、計算アルゴリズム毎に、入力サイズを指定して計算時間を推定できる。
【0039】
図3は、本実施形態に係る選択部16による計算アルゴリズムの選択方法を例示する図である。
計算アルゴリズムAの実装プログラムと計算アルゴリズムBの実装プログラムとは、入力サイズに応じてそれぞれ計算時間が異なる。計算アルゴリズムAの計算時間を推定する推定関数f
Aと、計算アルゴリズムBの計算時間を推定する推定関数f
Bとは、例えば図のように表される。
【0040】
この場合、選択部16は、入力サイズがn2より小さいn1に対しては、計算アルゴリズムBを選択し、入力サイズがn2より大きいn3に対しては、計算アルゴリズムAを選択することで、より計算時間の短いアルゴリズムを提示する。
【0041】
本実施形態によれば、計算量評価装置1は、計算アルゴリズムに対して、計算量の主要項に所定のオーバヘッドを加味し、係数を付加した計算時間の推定関数を設定する。そして、計算量評価装置1は、この計算アルゴリズムの実装環境において入力サイズの異なる計算を複数回実行した実計算時間と、推定関数による計算時間の推定値との2乗誤差を最小にするための係数を算出し、算出された係数を設定した前記推定関数を出力する。
したがって、計算量評価装置1は、計算アルゴルズムの実装方法、動作環境及び入力サイズに基づき計算時間により計算量を評価できる。この結果、計算量評価装置1は、推定した計算時間により、同一の処理を行う複数の計算アルゴリズムの中から最適な計算アルゴリズムを選択することができる。
【0042】
計算量評価装置1は、実計算時間を測定するための事前計算の実行回数の指定を受け付けることで、処理時間と推定精度とのトレードオフを適切に調整し、状況に応じて適切な推定関数を出力できる。
【0043】
計算量評価装置1は、計算時間の推定関数に入力サイズの線型項及び定数項を含めるので、データの入力時間等の入力サイズに比例した時間と、プログラムの起動時間等の入力サイズによらない一定の時間とを含んだ、高精度の推定関数を出力できる。
【0044】
計算量評価装置1は、主要項が入力サイズnに等しい場合、推定関数から主要項を省き、線型項及び定数項のみに簡略化する。これにより、計算量評価装置1は、主要項に応じて適切な推定関数を効率的に出力できる。
【0045】
計算量評価装置1は、同一の処理を行う複数の計算アルゴリズムに対して、計算時間の推定関数をそれぞれ算出しておくことで、入力サイズの指定に応じて、計算時間の推定値が最小の計算アルゴリズムを選択する。これにより、ユーザは、入力サイズに応じて、実装環境における計算時間が最も短い最適な計算アルゴリズムを選択し利用することができる。
【0046】
以上、本発明の実施形態について説明したが、本発明は前述した実施形態に限るものではない。また、前述した実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、実施形態に記載されたものに限定されるものではない。
【0047】
計算量評価装置1による計算量評価方法は、ソフトウェアにより実現される。ソフトウェアによって実現される場合には、このソフトウェアを構成するプログラムが、情報処理装置(コンピュータ)にインストールされる。また、これらのプログラムは、CD-ROMのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。さらに、これらのプログラムは、ダウンロードされることなくネットワークを介したWebサービスとしてユーザのコンピュータに提供されてもよい。
【符号の説明】
【0048】
1 計算量評価装置
10 制御部
11 入力部
12 設定部
13 記録部
14 算出部
15 出力部
16 選択部
20 記憶部