(57)【要約】  プログラムを実際に動作させることが困難な環境において、その負荷特性を推定できる推定システムを提供する。本発明の負荷特性推定システムは、所定のコンピュータシステム上で動作させるプログラムを入力するプログラム入力部と、前記入力されたプログラムから特徴を取得するプログラム特徴情報取得部と、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定する負荷特性推定部と、を備える。（図１）
2011071010.tif 000002
【特許請求の範囲】
【請求項１】
所定のコンピュータシステム上で動作させるプログラムを入力するプログラム入力部と、
前記入力されたプログラムから特徴を取得するプログラム特徴取得部と、
過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定する負荷特性推定部と、
を備えたことを特徴とする負荷特性推定システム。
【請求項２】
前記所定のコンピュータシステム上で動作させたプログラムの特徴情報を保持する特徴情報保持部と、
前記特徴情報保持部に保持された特徴情報と、前記入力されたプログラムの特徴情報とを用いて類似するプログラムの検索を行う類似検索部と、を備える請求項１の負荷特性推定システム。
【請求項３】
前記負荷特性推定部は、前記入力されたプログラムと最も類似する特徴を持つプログラムの負荷特性を用いて、前記入力されたプログラムの負荷特性を推定する請求項１または２の負荷特性推定システム。
【請求項４】
前記負荷特性推定部は、前記入力されたプログラムとの類似度が所定の閾値より高いプログラム群の負荷特性を用いて、前記入力されたプログラムの負荷特性を推定する請求項１または２の負荷特性推定システム。
【請求項５】
前記負荷特性推定部は、前記入力されたプログラムが前記所定のコンピュータシステム上で動作させたことのあるプログラムと一致する場合、当該プログラムの負荷特性を用いて負荷特性を推定する請求項１から４いずれか一の負荷特性推定システム。
【請求項６】
負荷特性記録部には、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性の履歴が記録されており、
前記負荷特性推定部は、前記入力されたプログラムの負荷特性として、前記負荷特性記録部から読み出した前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性の統計値を出力する請求項１から５いずれか一の負荷特性推定システム。
【請求項７】
さらに、前記入力されたプログラムの負荷特性情報を利用した情報処理を行う負荷特性利用部を備える請求項１から６いずれか一の負荷特性推定システム。
【請求項８】
前記プログラム入力部は、ユーザから前記所定のコンピュータシステムに実行させるプログラムの入力を受け付けるプログラミングインタフェースであり、
前記負荷特性利用部は、前記ユーザに前記入力されたプログラムの負荷特性情報を提示する情報提示インタフェースである請求項７の負荷特性推定システム。
【請求項９】
前記プログラム入力部は、前記所定のコンピュータシステムに実行させるプログラムを入力するプログラム実行投入部であり、
前記負荷特性利用部は、前記入力されたプログラムの負荷特性情報を用いて、プログラムの実行手順および計算機への割り当てを制御する、ジョブ実行割り当て制御部である請求項７の負荷特性推定システム。
【請求項１０】
前記負荷特性の推定を経て前記所定のコンピュータシステム上で前記入力されたプログラムを動作させた際に当該コンピュータシステムに生じた負荷特性を、前記負荷特性記録部に追加する機能と、
前記プログラム特徴取得部にて取得されたプログラムの特徴情報を前記特徴情報保持部に追加する機能と、
を備えたことを特徴とする請求項１から９いずれか一の負荷特性推定システム。
【請求項１１】
前記所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムである請求項１から１０いずれか一の負荷特性推定システム。
【請求項１２】
ユーザから、所定のコンピュータシステム上で動作させるプログラムの入力を受け付けるステップと、
前記入力されたプログラムから特徴を取得するステップと、
過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定するステップと、
を含む負荷特性推定方法。
【請求項１３】
前記所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムである請求項１２の負荷特性推定方法。
【請求項１４】
ユーザから、所定のコンピュータシステム上で動作させるプログラムの入力を受け付ける処理と、
前記入力されたプログラムから特徴を取得する処理と、
過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定する処理と、
をコンピュータに実行させるプログラム。
【請求項１５】
前記所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムである請求項１４のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２００９−２７８４４５号（２００９年１２月８日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、負荷特性推定システム、負荷特性推定方法およびプログラムに関し、特に、コンピュータシステムに与える負荷特性が未知であるプログラムの負荷特性を推定する負荷特性推定システム、負荷特性推定方法およびプログラムに関する。
【背景技術】
【０００２】
近年、Ｇｏｏｇｌｅ社によって開発された大規模分散データ処理フレームワーク「ＭａｐＲｅｄｕｃｅ」や、そのオープンソース実装「Ｈａｄｏｏｐ」（非特許文献２）の登場、また、クラウドコンピューティングと呼ばれる潮流とその考え方を踏襲したサービスの出現により、大量データを処理するプログラムを比較的容易に実装し動作させることが可能になりつつある。【０００３】
このような大量データ処理プログラムは、必然的に多くのコンピュータリソースを必要とする。ストレージ容量は処理するデータの容量分は少なくとも必要であるし、また処理の内容やそのデータのストレージへの格納方法にもよるが、計算に利用するメモリ容量やＣＰＵリソースもそれだけ多く必要となる。【０００４】
ＰＣクラスタ技術の発展により、大量のコンピュータリソースを用意することは比較的容易になったが、すべての利用者が独占利用できる大量のコンピュータリソースを用意することはコストが高く、困難である。このような状況を踏まえて、従量課金でコンピュータリソースを必要な分だけ利用できるサービスや、大規模計算機環境を複数の人で共有して利用するようになっている。【０００５】
非特許文献１に、自然言語で記述された文書を分類する手法であるＬＳＡ（Ｌａｔｅｎｔ  Ｓｅｍａｎｔｉｃ  Ａｎａｌｙｓｉｓ）を用いて、プログラムの自動分類を実現している。本技術ではプログラム間で共通して利用しているライブラリや関数毎の分類や、共通のアーキテクチャに従った分類が実現されている。しかし、この方法では分類されたプログラムを計算機上で実行された時に、どのような挙動特性を示すかなどについては考慮されていない。【０００６】
特許文献１では、計算機で実際に動作することなく、プログラムを静的に解析して実行時間（性能値）の予測を行うプログラム実行時間解析方法が開示されている。【０００７】
特許文献２では、コンピュータシステムに対する履歴情報（稼働状態・実行処理・イベント）を収集し、情報間の相関関係を記録しておくことで、障害時の復旧／回復処理に対する影響を把握し、スケジューリングなどのコントロールを行う技術が開示されている。【０００８】
特許文献３では、与えられた未知事例に類似する類似事例を既知事例の中から抽出し、抽出された類似事例を用いて未知事例に関する予測を行う方法が開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００２−２２９８１８号公報
【特許文献２】特開２００８−９８４２号公報
【特許文献３】特開２０００−１５５６８１号公報
【非特許文献】
【００１０】
【非特許文献１】川口真司、松下誠、井上克郎、“潜在的意味解析法ＬＳＡを利用したソフトウェア分類システムの試作”、情報処理学会研究報告、ソフトウェア工学研究会報告  ２００３（２２）、ｐｐ．５５−６２、２００３０３０６
【非特許文献２】Ｔｈｅ  Ａｐａｃｈｅ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎ、“Ａｐａｃｈｅ  Ｈａｄｏｏｐ”、［online］、［平成21年9月10日検索］、インターネット〈URL：http://hadoop.apache.org/〉
【非特許文献３】徳永健伸、 “情報検索と言語処理” 、東京大学出版会、１９９９年１１月
【非特許文献４】Ｘ．Ｆａｎ，Ｗ．Ｗｅｂｅｒ  ａｎｄ  Ｌ．Ａ．Ｂａｒｒｏｓｏ、“Ｐｏｗｅｒ  ｐｒｏｖｉｓｉｏｎｉｎｇ  ｆｏｒ  ａ  ｗａｒｅｈｏｕｓｅ−ｓｉｚｅｄ  ｃｏｍｐｕｔｅｒ”、Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ３４ｔｈ  Ａｎｎｕａｌ  ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｓａｎ  Ｄｉｅｇｏ，  Ｃａｌｉｆｏｒｎｉａ，  ＵＳＡ，  Ｊｕｎｅ  ０９−１３，  ２００７）、ＩＳＣＡ’０７．ＡＣＭ、Ｎｅｗ  Ｙｏｒｋ、ＮＹ、１３−２３、２００７．DOI=http://doi.acm.org/10.1145/1250662.1250665
【非特許文献５】北研二、津田和彦、獅々堀正幹、“情報検索アルゴリズム”、共立出版、２００２年１月
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上記特許文献１−３および非特許文献１−５の全開示内容はその引用をもって本書に繰込み記載する。
以下の分析は、本発明によってなされたものである。
前述したＭａｐＲｅｄｕｃｅなどのフレームワークの出現により、一般のプログラマが比較的容易にこのような大規模計算機環境を利用できるようになると、大量データ処理のプログラムを試行錯誤して作成するようになることが予想される。しかしながら、多くのプログラマにとって、作成したプログラムがどれだけの計算機リソースを必要とするかを予想するのが困難である。そのため、従量課金でコンピュータリソースを利用するサービスを利用する際には、プログラム実行前に、その処理にどれだけのコストが必要となるかが知りたいところである。また、計算機を複数人で共有する際にもどれだけのリソースを利用するかわからなければ他のユーザに迷惑を掛ける可能性もある。【００１２】
上記したように、現状では、コンピュータシステムにとって未知であり、実行されたことの無いプログラムを動作させることによって、当該コンピュータシステムに生じうる負荷特性を入手する方法が無いという問題点がある。その理由は、コンピュータシステム上で今まで処理されていない未知のプログラムは、動作前例となる過去の実行結果が存在しないため、負荷特性が不明であるためである。【００１３】
さらに、当該プログラムを開発したユーザ自身が、作成したプログラムがコンピュータシステムに対してどのような負荷を与えるか、プログラムを実行するのにどの程度のリソースが必要か、といったプログラムの負荷特性を認識できていないという問題点もある。その理由は、背景技術で述べたような大規模分散プラットフォームを手軽に利用できる環境が整ったのは最近であるため、一般的なプログラマは教育が十分でなく、コーディング時点では負荷特性を予想できないためである。また、大量データ分析処理プログラムでは、全てのデータのうち一定の条件を満たすデータに対して処理をする、といったロジック記述が起こりえるが、ユーザがすべてのデータ量や、この条件を満たすデータの量および割合について認識できるとは限らないため、負荷特性の予測が困難となる。【００１４】
この点、特許文献１の方法は、ソースプログラムの処理構造やデータ構造を解析してプログラム実行時間を得るものであるが、このような静的な解析手法が通用するのは、予め当該プログラムを動作させる計算機システムが確定しているからである。上記したネットワークを介して複数の計算機資源をユーザが利用するような環境では同一の手法を用いて、精度の高いプログラム実行時間を求めることは不可能である。また、このような解析手法は、プログラムの処理構造を把握するものであるため、プログラム言語毎の記述方式の違いを吸収するために、言語毎に解析手段を用意しなければならない。また、プログラマがソースコード内に記述した識別子（変数名など）の文字列についてはコンパイラと同様、記号としてしか扱わず、プログラマが識別子の名称に込めた意味などを考慮することはできない。【００１５】
また、特許文献２に開示される技術はコンピュータシステムの稼働状態を収集し、コンピュータシステムの障害を検出する技術であり、特性が未知であるプログラムを動作させることによりコンピュータシステムに生じうる負荷特性を推定するものではない。【００１６】
さらに、特許文献３に開示されている技術も、類似事例の抽出技術と、その高速化であり、コンピュータシステム上で動作させる未知のプログラムの負荷特性を推定しコンピュータシステムに応用するものではない。【００１７】
本発明は、上記した事情に鑑みてなされたものであって、その目的とするところは、プログラムを実際に動作させることなく、その負荷特性を見積もることのできる負荷特性推定システム、負荷特性推定方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００１８】
本発明の第１の視点によれば、所定のコンピュータシステム上で動作させるプログラムを入力するプログラム入力部と、前記入力されたプログラムから特徴を取得するプログラム特徴取得部と、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定する負荷特性推定部と、を備えた負荷特性推定システムが提供される。【００１９】
本発明の第２の視点によれば、ユーザから、所定のコンピュータシステム上で動作させるプログラムの入力を受け付けるステップと、前記入力されたプログラムから特徴を取得するステップと、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定するステップと、を含む負荷特性推定方法が提供される。本方法は、既知プログラム群の負荷特性を蓄積する負荷特性記録部を備えるコンピュータという、特定の機械に結びつけられている。【００２０】
本発明の第３の視点によれば、ユーザから、所定のコンピュータシステム上で動作させるプログラムの入力を受け付ける処理と、前記入力されたプログラムから特徴を取得する処理と、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定する処理と、をコンピュータに実行させるプログラムが提供される。なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。即ち、本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００２１】
本発明によれば、対象とするコンピュータシステムで動作させたことの無いコンピュータプログラムの負荷特性を推定し、プログラマへの提供やコンピュータシステムのスケジューリング等に利用することができる。その理由は、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定するよう構成したためである。
【図面の簡単な説明】
【００２２】
【図１】本発明の概要を説明するための図である。
【図２】本発明の第１の実施形態の構成を示したブロック図である。
【図３】本発明の第１の実施形態における特徴空間作成処理を示したフローチャートである。
【図４】本発明の第１の実施形態における負荷特性記録処理を示したフローチャートである。
【図５】本発明の第１の実施形態における負荷特性推定処理を示したフローチャートである。
【図６】本発明の第２の実施形態の構成を示したブロック図である。
【図７】本発明の第１の実施形態の特徴空間作成管理部の構成例を示したブロック図である。
【図８】本発明の第１の実施形態の負荷特性記憶部に保持される負荷特性情報の一例を示した図である。
【図９】本発明の第１の実施形態の負荷特性記憶部に保持される負荷特性情報の別の例を示した図である。
【図１０】本発明の第１の実施形態の負荷特性記憶部に保持される負荷特性情報のさらに別の例を示した図である。
【図１１】本発明の第１の実施形態の演算処理部の詳細構成例を示すブロック図である。
【図１２】本発明の第１の実施形態の負荷特性利用部の具体例を示すブロック図である。
【図１３】本発明の第１の実施形態の負荷特性利用部の具体例を示すブロック図である。
【発明を実施するための形態】
【００２３】
はじめに本発明の概要について説明する。本発明に係る負荷特性推定システムは、図１に示すように、ユーザから目的とするコンピュータシステム上で動作させるプログラムの入力を受け付けるプログラム入力部５と、プログラム入力部５から入力されたプログラムの特徴を取得するプログラム特徴情報取得部６と、入力されたプログラムの負荷特性の推定を行う負荷特性推定部３とを備える。負荷特性推定部３は、入力されたプログラムの特徴とプログラム保持部１に保持された負荷特性が既知である既知プログラムの特徴を用いた類似検索を行う類似検索部３１と、負荷特性記録部４からその類似プログラムの負荷特性を読み出して前記入力されたプログラムの負荷特性を推定する負荷特性演算部３２とを含んだ構成とすることができる。これにより、目的とするコンピュータシステムでプログラムを実際に動作させなくとも、その負荷特性を推定することが可能になる。このような負荷特性は、負荷特性利用部７にて、例えば、ユーザにおける当該入力したプログラムを実行するか否かの意思決定や、当該入力したプログラムのスケジューリングに利用される。なお、この概要に付記した図面参照符号は、専ら理解を助けるための例示であり、図示の態様に限定することを意図するものではない。
本発明において以下の形態が可能である。
［形態１］
前記第１の視点に記載の負荷特性推定システムのとおり。
［形態２］
前記負荷特性推定システムは、前記所定のコンピュータシステム上で動作させたプログラムの特徴情報を保持する特徴情報保持部と、
前記特徴情報保持部に保持された特徴情報と、前記入力されたプログラムの特徴情報とを用いて類似するプログラムの検索を行う類似検索部と、を備えることが好ましい。
［形態３］
前記負荷特性推定部は、前記入力されたプログラムと最も類似する特徴を持つプログラムの負荷特性を用いて、前記入力されたプログラムの負荷特性を推定することが好ましい。
［形態４］
前記負荷特性推定部は、前記入力されたプログラムとの類似度が所定の閾値より高いプログラム群の負荷特性を用いて、前記入力されたプログラムの負荷特性を推定することもできる。
［形態５］
前記負荷特性推定部は、前記入力されたプログラムが前記所定のコンピュータシステム上で動作させたことのあるプログラムと一致する場合、当該プログラムの負荷特性を用いて負荷特性を推定することもできる。
［形態６］
負荷特性記録部には、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性の履歴が記録されており、
前記負荷特性推定部は、前記入力されたプログラムの負荷特性として、前記負荷特性記録部から読み出した前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性の統計値を出力することもできる。
［形態７］
前記負荷特性推定システムは、さらに、前記入力されたプログラムの負荷特性情報を利用した情報処理を行う負荷特性利用部を備えることが好ましい。
［形態８］
前記プログラム入力部は、ユーザから前記所定のコンピュータシステムに実行させるプログラムの入力を受け付けるプログラミングインタフェースであり、
前記負荷特性利用部は、前記ユーザに前記入力されたプログラムの負荷特性情報を提示する情報提示インタフェースであることが好ましい。
［形態９］
前記プログラム入力部は、前記所定のコンピュータシステムに実行させるプログラムを入力するプログラム実行投入部であり、
前記負荷特性利用部は、前記入力されたプログラムの負荷特性情報を用いて、プログラムの実行手順および計算機への割り当てを制御する、ジョブ実行割り当て制御部であることが好ましい。
［形態１０］
前記負荷特性推定システムは、前記負荷特性の推定を経て前記所定のコンピュータシステム上で前記入力されたプログラムを動作させた際に当該コンピュータシステムに生じた負荷特性を、前記負荷特性記録部に追加する機能と、
前記プログラム特徴取得部にて取得されたプログラムの特徴情報を前記特徴情報保持部に追加する機能と、
を備えることが好ましい。
［形態１１］
前記所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムであることが好ましい。
［形態１２］
前記第２の視点に記載の負荷特性推定方法のとおり。
［形態１３］
前記負荷特性推定方法においてプログラムの入力を受け付ける、所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムであることが好ましい。
［形態１４］
前記第３の視点に記載のプログラムのとおり。
［形態１５］
前記コンピュータがプログラムの入力を受け付ける、前記所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムであることが好ましい。
【００２４】
［第１の実施形態］
続いて、本発明の第１の実施形態について図面を参照して詳細に説明する。図２は、本発明の第１の実施形態の構成を示したブロック図である。図２を参照すると、本発明の第１の実施形態に係る負荷特性推定システムは、既知プログラムを保持するプログラム保持部１と、既知プログラムに対する特徴検索を実現するために、特徴ベクトル空間を作成し保持する特徴空間作成管理部２と、新規に入力された未知のプログラムの負荷特性の推定を行う負荷特性推定部３と、既知プログラムを過去に演算処理部８にて動作させた際の負荷特性を記録する負荷特性記録部４と、ユーザから演算処理部８に実行させたいプログラムの入力を受け付けるプログラム入力部５と、プログラム入力部５から入力された未知プログラムの特徴を取得するプログラム特徴情報取得部６と、負荷特性推定部３によって推定された未知プログラムの負荷特性を利用した各種の情報処理を行う負荷特性利用部７と、未知および既知のプログラムについて実際に演算処理を行う演算処理部８とを含んで構成される。
【００２５】
ここで、「既知プログラム」とは、入力されたプログラムを動作させようしているコンピュータシステム（図２の演算処理部８に相当）が少なくとも一回実行しその負荷特性が判明しているプログラムをいうものとする。また、「未知のプログラム」とは、入力されたプログラムを動作させようしているコンピュータシステム（図２の演算処理部８に相当）が一回も実行したことのない、負荷特性が未知であるプログラムをいうものとする。
【００２６】
また、負荷特性とは、コンピュータシステムにおいて、あるプログラムを動作させたときの実行時間、入出力データ量、電力などの実測定値や過去所定回実行した際の、これら複数の実測定値群や平均値や分散などの各種の統計値をいうものとする。実際には、負荷特性の利用目的に応じて、これらの値から、上記コンピュータリソースの使用量、計算コスト等を表す指標として適当なものが選択される（具体例は図８〜図１０参照）。
【００２７】
プログラム保持部１は、プログラム入力部５から入力されたプログラムを含む演算処理部８上で動作させるプログラムの内容情報を保持する記憶装置によって構成される。「プログラムの内容情報」とは、プログラムそのもの、あるいはプログラムの特徴を解析できる任意の形式のデータである。例えば、プログラムの種類を特定する識別子とそのプログラムのソースコードや、プログラムの処理内容などを示したドキュメントやメタデータ、ソースコードとドキュメントの組み合わせ、などがある。これらの保持形態は、ファイルシステム上のファイルとして格納する、データベースレコードとして格納するなどといった種々の方法で保持される。
【００２８】
また、「プログラム特徴情報」は、プログラムの内容情報から抽出できる情報であり、特徴ベクトル作成部２２が特徴ベクトルを作成するために必要とする情報であるものとする。例えば、プログラムソースコード内に出現する単語や、その出現頻度、プログラムが他のプログラムから呼ばれる時のコンテキスト情報、プログラムのドキュメント内に記述されているプログラム名称や、利用方法記述、などといった情報が当てはまる。具体的にどのような情報が必要となるかは、特徴ベクトルの作成方法によって定められる。
【００２９】
また、「プログラム特徴ベクトル」とは、プログラムの特徴を数値的に表現したＸ次元ベクトルであるものとする。当然ながら１次元であってもよく、またプログラム毎に固定的な値でなく検索クエリ毎に異なる値を採っても良い。
【００３０】
一般的な検索エンジンは、プログラム特徴情報を高速に検索、参照できるインデックスを保持し、検索時に順位付けのためのスコア値（プログラム特徴ベクトルに該当する）の演算の一部あるいはすべてを行う仕組みを取っているが、本発明においてもそのような方法を採ることができる。
【００３１】
特徴空間作成管理部２は、プログラム保持部１に格納されているプログラムの内容情報を取得し、プログラムの内容情報を解析して特徴情報を取得する特徴情報取得部２１と、特徴情報取得部２１によって解析された特徴情報を用いてプログラムの特徴ベクトルを作成する特徴ベクトル作成部２２と、特徴ベクトル作成部２２が作成した特徴ベクトル集合を保持する特徴空間保持部２３と、から構成される。
【００３２】
特徴情報取得部２１は、特徴ベクトル作成部２２における特徴ベクトル作成処理に必要なプログラムの特徴情報を、プログラム保持部１に格納されているプログラムの内容情報より生成する。例えば、特徴ベクトル作成部２２がプログラムのソースコード内の出現単語およびその出現頻度を特徴情報として必要とする場合、特徴情報取得部２１は、ソースコードの内容を読み込み、出現単語およびその出現頻度をカウントする処理を行う。
【００３３】
特徴ベクトル作成部２２は、特徴情報取得部２１が取得した特徴情報を用いて、特徴ベクトルを作成する。特徴ベクトルは、プログラムの特徴を任意の次元数による数値データとして表現するものである。例えば、プログラム保持部１内の全プログラム内の出現単語をそれぞれベクトルの１次元とし、プログラム内のその単語の出現頻度や、それをＴＦ／ＩＤＦ（Ｔｅｒｍ  Ｆｒｅｑｕｅｎｃｙ／Ｉｎｖｅｒｓｅ  Ｄｏｃｕｍｅｎｔ  Ｆｒｅｑｕｅｎｃｙ）などを用いて算出した重みに変換した値をその次元における値とした、Ｘ次元ベクトルが当てはまる。ここでは、Ｘは全プログラム内の出現単語種類数となる。また、このＸ次元ベクトルを任意の次元数のベクトルに特異値分解などの手法を用いて縮退するような処理を特徴ベクトル作成部２２で行っても良い。特異値分解などの手法を用いたベクトルの次元縮退については、非特許文献３に記載されている。
【００３４】
特徴空間保持部２３は、特徴ベクトル作成部２２が作成した、各プログラムの特徴ベクトルを記録する機能を果たし、半導体メモリや磁気ディスクなどによる記憶装置により実現される。
【００３５】
負荷特性推定部３は、プログラム入力部５より入力された未知のプログラムと類似した特徴を持つ既知プログラム集合を検索する類似検索部３１と、類似検索部３１が算出した類似した既知プログラムの過去の演算における負荷特性情報を用いて、前記プログラム入力部５より入力された未知のプログラムの負荷を推定する負荷特性演算部３２と、を含んで構成される。該構成により、負荷特性推定部３は、特徴空間作成管理部２が保持管理する特徴空間の情報を用いて、プログラム入力部５より入力された未知のプログラムの負荷特性を推定する役割を果たす。
【００３６】
類似検索部３１は、プログラム特徴情報取得部６から入力された未知のプログラムの特徴情報を用いて特徴ベクトルを作成し（特徴ベクトル作成部２２と同一の処理を行う）、特徴空間保持部２３に保持されている既知プログラムの特徴ベクトル群との間の類似度計算を行うことで、類似検索を行う。この処理により、未知プログラムと類似した既知プログラム集合を取得する。
【００３７】
負荷特性演算部３２は、負荷特性記録部４から、類似検索部３１によって得られた、未知のプログラムと類似した既知プログラム集合についての負荷特性情報を取得し、その負荷特性情報を用いて、当該未知のプログラムの負荷特性の推定値を演算する処理を行う。
【００３８】
上記未知のプログラムの負荷推定は、次式で表すことができる。
【００３９】
プログラムｉの負荷特性をｌｉとし、プログラムｉのプログラムｘに対する類似度をＳｉｘとしたときに、プログラムｘとの類似度集合をＳｘ＝｛Ｓ１ｘ，Ｓ２ｘ，・・・，Ｓｉｘ｝、プログラムの負荷特性の集合をＬ＝｛ｌ１，ｌ２，・・・，ｌｉ｝とする。そのとき、プログラムｘの負荷特性ｌｘを推定する負荷推定処理とは、次の［数１］の負荷推定関数Ｆ（Ｓ，Ｌ）の演算を行うことで示すことができる。
【００４０】
【数１】
2011071010.tif 000003
【００４１】
負荷推定関数Ｆの中身としては、様々なアルゴリズムを適用することができるが、ここでは、簡単な例として、最も類似したプログラムの負荷特性を利用する方法を例に挙げて説明する。また、ここでは、類似度Ｓは大きいほどプログラムの類似性が高い値とする。なお、ベクトル間の類似度を算出する方法で一般的な指標の１つとして、ベクトル間の余弦を用いるものがあり、その場合にも高い場合を類似している場合としている。この場合最大は１である。そして、この場合には、未知のプログラムｘと最も類似したプログラムαは、ｍａｘ（Ｓｘ）となるＳαｘを発見することによって算出できる。すなわち、Ｆ（Ｓ，Ｌ）は、下記のように示すことができる。
【００４２】
【数２】
2011071010.tif 000004
ただし、プログラムαは、Ｓαｘ＝ｍａｘ（Ｓｘ）を満たすα。
【００４３】
負荷特性記録部４は、演算処理部８上で実行されたプログラムの負荷特性を記録する機能を果たす。負荷特性記録部４は半導体メモリや磁気ディスクなどによる記憶装置に実現される。なお、図２の例では、負荷特性記録部４は、演算処理部８の外部のブロックとして記述されているが、演算処理部８の一部として構成されていても良い。
【００４４】
プログラム入力部５は、演算処理部８上で実行するプログラムの内容情報の入力を受け付け、プログラム特徴情報取得部６に渡す。プログラムの内容情報は前述した説明と同一である。
【００４５】
プログラム入力部５の具体例としては、演算処理部８上で実行するプログラムをプログラミングするプログラミングインタフェース、あるいは、実行するプログラムとしてプログラムソースコードのファイルなどを指定するインタフェースが当てはまる。また、前記プログラムの内容情報とともに、ユーザインタフェースから付帯情報・ヒント情報（何に使うプログラムか、予測される実行時間など）の入力を受け付ける形を取っても良い。
【００４６】
プログラム特徴情報取得部６は、プログラム入力部５より渡されたプログラムの内容情報を解析し、特徴ベクトルを作成するために必要な特徴情報を取得する機能を果たす。特徴空間作成管理部２の特徴情報取得部２１とほぼ同等の役割であり、プログラム特徴情報も前述の説明と同一である。
【００４７】
負荷特性利用部７は、負荷特性推定部３によって推定された未知のプログラムの負荷特性を利用して各種の処理を提供する手段である。例えば、ユーザに未知のプログラムの実際の演算を行う前に必要な時間やコストを提示するシステム、または演算処理部８上での未知プログラムの実行手順を制御するシステム等が当てはまる。
【００４８】
演算処理部８は、演算処理を行うコンピュータシステムであり、具体的には、計算機クラスタによって構築された分散処理計算システムや、大規模計算機、クラウドコンピューティングに代表される複数のユーザにネットワークを介して計算機資源を利用させるネットワークコンピューティングシステムなどが当てはまる。また、演算処理部８は、演算処理部８内で行う処理の負荷特性を記録する機能を備える。この負荷特性を記録機能の具体的な実現方式に特に限定はなく、演算処理部８内で動作するソフトウェアとして実現したり、演算処理部８内外に接続されたハードウェアによって実現することができる。
【００４９】
また、プログラム保持部１、特徴空間作成管理部２や演算処理部８は、本実施形態の負荷特性推定システムが物理的に保持している必要は無く、外部リソースを利用する形態を取っても良い。例えば、プログラムソースコード検索エンジンのようなシステムが別途利用可能である場合には、当該システムにアクセスし、得られたインデックス情報を特徴空間として利用することができる。また、プログラムの負荷特性についても同様に、他の計算機システムから、プログラムの負荷特性情報を取得する構成も採用可能である。
【００５０】
続いて、本実施形態の全体の動作について詳細に説明する。以下、本実施形態の負荷特性推定システムの動作として、特徴空間作成、負荷特性記録、負荷推定の大きく３つに分けてそれぞれ説明する。
【００５１】
［特徴空間作成処理］
特徴空間作成処理は、負荷推定処理の際に行う類似検索処理の際に必要となる既知プログラム群の特徴ベクトルを作成する処理である。特徴空間作成処理の実行契機は任意であるが、本実施形態では特徴空間作成処理が比較的時間が掛かることを想定し、負荷推定処理以前に事前に生成しておくことを前提に説明する。ただし、特徴空間作成のアルゴリズムや類似検索アルゴリズムによっては特徴空間作成処理に相当する処理を十分高速に行えるため、負荷推定処理中の類似検索処理時に特徴空間作成処理を行っても良い。
【００５２】
図３は特徴空間作成処理を示したフローチャートである。図３を参照すると、まず、特徴情報取得部２１が、プログラム保持部１に格納されているプログラム群の内容情報を取得する（ステップＳ１０１）。
【００５３】
次に、特徴情報取得部２１が既知プログラム群の内容からプログラムそれぞれの特徴情報を抽出する（ステップＳ１０２）。例えば、ソースコードから出現単語とその単語頻度を特徴情報として取り出す処理が当てはまる。また、特徴空間作成処理を再度行う必要がある際に、ステップＳ１０１〜１０２の処理を繰り返さないよう、特徴情報取得部２１が記憶手段を備え、特徴情報を記録しておいてもよい。
【００５４】
次に、特徴ベクトル作成部２２が、この特徴情報群を用いて、各プログラムの特徴ベクトルを作成する（ステップＳ１０３）。例えば、取り出した出現単語と単語頻度から、重み付けの計算などを行って特徴ベクトルを作成する処理が当てはまる。また、さらに特徴ベクトルを次元縮退する処理する手法などを適用する処理を含めても良い。
【００５５】
最後に、特徴ベクトル作成部２２が、作成した特徴ベクトル群を特徴空間保持部２３に記録する（ステップＳ１０４）。
【００５６】
上記した特徴空間作成処理は、類似検索部３１にて、より精度よく類似プログラムを検索できるよう、一定期間毎などの契機で繰り返し行われることが望ましい。あるいは、プログラム保持部１にプログラムが所定数追加される度に特徴空間作成処理を実行するようにしてもよい。これら特徴空間作成処理の発動契機は、求められる負荷特性の推定精度や、特徴空間作成管理部２を構成する計算機の負荷・処理能力等に応じて適宜決定される。
【００５７】
また、上記した特徴空間作成処理の発動契機によっては、すべてのプログラム群の特徴ベクトルを作り直さなくてもよい場合がある。例えば、未知のプログラムが追加される度に特徴ベクトルを生成し、特徴空間保持部２３に記録する場合が挙げられる。また、後述する負荷特性推定フローチャートのステップＳ３０４において未知のプログラムの特徴ベクトルを作成した時点で、特徴空間保持部２３に記録する場合も同様に、特徴ベクトルを再計算する必要は無い。
【００５８】
［負荷特性記録処理］
負荷特性記録処理は、演算処理部８において動作させるプログラムの負荷特性を記録する処理である。この処理は、特徴空間作成処理や負荷推定処理とは基本的に独立に動作する。また、演算処理部８上で負荷特性記録対象のプログラムが動作する毎に記録される。負荷特性記録を行う時間帯は任意とすることができ、演算処理部８の動作時間帯すべてとしてもよいし、ある任意の時間帯だけをサンプリングする形であってもよい。
【００５９】
図４は、負荷特性記録処理を示すフローチャートである。図４を参照すると、まず、演算処理部８は、負荷特性記録対象のプログラムの実行要求を受け付けると（ステップＳ２０１）、該プログラムの実行中の負荷特性を記録する準備を行う（ステップＳ２０２）。この準備とは、測定器をＯＮにする、測定プロセスを立ち上げるなどが当てはまる。なお、準備が済んでいる状態、すなわち常に記録している状態ならこのような動作は必要がない。
【００６０】
次に、演算処理部８は該プログラムの処理実行を行い、その間の負荷特性を測定する（ステップＳ２０３）。最後に、測定した負荷特性の負荷特性記録部４への記録が行われる（ステップＳ２０４）。
【００６１】
［負荷特性推定処理］
負荷特性推定処理は、未知のプログラムの負荷特性を推定する処理である。処理が行われる契機は、負荷特性利用部７の利用形態によるが、本実施の形態では、プログラム入力部５からプログラムの内容情報が入力された時に開始されるものとして説明する。
【００６２】
図５は、負荷特性推定処理のフローチャートを示す。まず、ユーザ／開発者が演算処理部８上で実行するプログラム（未知のプログラム）を作成する（ステップＳ３０１）。次に、ユーザ／開発者が、作成したプログラム（演算処理部８上で実行するプログラム）の内容情報を、未知プログラム入力部５に入力する（ステップＳ３０２）。
【００６３】
なお、上記ステップＳ３０１とＳ３０２の順序は固定されたものでなく、一般的なプログラミングインタフェースを用いる場合には上記ステップＳ３０１とステップＳ３０２は繰り返し実行される。例えば、入力したプログラムの負荷見積もり結果をユーザに応答して、当該プログラムの実行指示を受け付けたり、当該プログラムの修正を促すシステムなどもその一例である。
【００６４】
次に、プログラム特徴情報取得部６が、入力されたプログラムの内容情報を用いて、プログラムの特徴情報を取得する（ステップＳ３０３）。これは、例えばプログラムソースコードを内容情報とし、ソースコード内に出現した出現単語および単語頻度を特徴情報とすると、このプログラムソースコードファイルを読み込み、ソースコード内の文字列を解析していき、出現単語と出現頻度を算出する処理が当てはまる。
【００６５】
次に、類似検索部３１が取得した特徴情報を用いて、未知のプログラムの特徴ベクトルを作成する（ステップＳ３０４）。この処理は、例えば、特徴情報をソースコード内の出現単語およびその単語出現頻度とすると、ステップＳ３０３で得たこれらの数値を用いて、未知のプログラムの特徴ベクトルを作成する処理が当てはまる。例えば、各出現単語をＸ次元特徴ベクトル空間の各次元とし、各次元の要素値に単語出現頻度を当てはめたベクトルを作成したり、任意の重み付け算出処理を行ってから要素値としたベクトルを作成したり、それらのベクトルから次元圧縮処理（次元縮退）をしてＸより小さい次元の特徴ベクトルを作成したりする処理が当てはまる。
【００６６】
次に、類似検索部３１が類似検索処理により類似の既知プログラム群を取得する（ステップＳ３０５）。既知プログラム群として取得するプログラムの数は、ステップＳ３０７で行う推定アルゴリズムによって異なり、任意の数となる。また、「既知プログラム群を取得」とは、ステップＳ３０６において負荷特性記録部４から演算特性を取得するために十分な情報、例えばプログラム識別子（例えば、プログラムを特定するためのＩＤ、ハッシュ値など）を取得すればよい。
【００６７】
また、類似検索処理は、特徴空間保持部２３に記録されている特徴ベクトルの集合と、ステップＳ３０４で作成した未知のプログラムの特徴ベクトルを用いて行われる。特徴ベクトルを用いた類似検索は様々な方法をとることができる。非特許文献３のｐｐ．３１にその一例が記載されている。例えば、ベクトル間の内積や余弦を使う方法もある。また、すべての既知プログラムの特徴ベクトルに対して内積計算を行うことは計算量が増大してしまうため、あらかじめクラスタ分類しておき、そのクラスタの代表値だけに対して類似度計算を行い、類似度が最も高いクラスタ（あるいはある一定以上類似度が高いクラスタ）に含まれる既知プログラムの特徴ベクトルにのみ類似度計算を行うような、計算量削減の仕組みを組み込んで良い。クラスタ分類の手法もＫ−ｍｅａｎｓ法などの既存の手法を適用できる。
【００６８】
次に、負荷特性推定部３は、ステップＳ３０５で得られた類似既知プログラム群の識別子を用いて、負荷特性記録部４から類似既知プログラムの負荷特性推定値を取得する（ステップＳ３０６）。さらに、負荷特性推定部３は、類似プログラムの負荷特性値を用いて、入力されたプログラムの負荷特性推定を行う（ステップＳ３０７）。
【００６９】
ステップＳ３０７の負荷特性推定アルゴリズムは、様々な手法が考えられるが、ここでは、入力されたプログラムと最も類似した既知プログラムの負荷特性値を、当該入力されたプログラムの負荷特性として利用することとする。このとき、ステップＳ３０５では類似度が最大の既知プログラム１つだけを特定しておくこととなる。ステップＳ３０６では、その既知プログラムの負荷特性値を負荷特性記録部４から取得する。ステップＳ３０７では、前記取得した負荷特性値を、入力されたプログラムの負荷特性推定値とすることになる。
【００７０】
次に、負荷特性推定部３は、ステップＳ３０７で得られた負荷特性推定値を負荷特性利用部７に渡す（ステップＳ３０８）。次に、負荷特性利用部７が、渡された負荷特性値を用いた処理を行う（ステップＳ３０９）。
【００７１】
例えば、負荷特性利用部７が、ユーザ／開発者に入力したプログラムの負荷特性を応答するシステムの場合、ステップＳ３０９では得られた負荷特性値を整形してユーザに提示する処理が行われる。
【００７２】
なお、図５のフローチャートでは、未知のプログラム、ユーザ／開発者が作成したプログラムのみの負荷推定を行うフローとなっている。しかし、当然ながら既知のプログラムの負荷特性の推定を許容しても良い。
【００７３】
この場合、ステップＳ３０１は不要であり、ステップＳ３０２においてプログラム内容情報を入力する必要は無くプログラム識別子のみが渡されればよい。また、ステップＳ３０３〜Ｓ３０４の特徴ベクトル作成処理は、特徴空間記憶部２３から該当識別子の特徴ベクトルを取得する形を取ってもよい。また、ステップＳ３０６以降の推定処理では、既知プログラム自身の過去の負荷特性をそのまま負荷特性利用部７に渡す形を取っても良いし、別の類似したプログラムの負荷特性も利用して、所定のアルゴリズムにより負荷特性を推定してもよい。
【００７４】
このようにすることによって、既知プログラムの負荷特性推定を行うことができる。また同様の手法により、一回特性負荷推定を行ったプログラムについて、２回目以降の推定を行う際に、当該プログラム自身の実行履歴を踏まえることによって推定精度を向上させることも可能である。
【００７５】
なお、上記した例では、プログラム入力部５からプログラムの内容情報が入力された時に負荷推定処理を開始するものとして説明したが、負荷推定処理の別の処理実行契機の例としては、演算処理部８上でプログラムが動作する直前などが考えられる。このようにすれば、推定した負荷特性を反映したスケジューリングを行うことが可能になる。
【００７６】
以上のように、本実施形態では、入力されたプログラムを演算処理部８で実行する前に、その負荷特性を推定することが可能になっている。その理由は、既知のプログラムの特徴と未知のプログラムの特徴を用いた類似検索結果を用いて、入力されたプログラムに最も近い特性を持つプログラムを特定し、その負荷特性を用いた負荷特性の推定処理を実行できるように構成したためである。
【００７７】
［第２の実施形態］
続いて、本発明の第２の実施形態について図面を参照して詳細に説明する。図６は、本発明の第２の実施形態の構成を示したブロック図である。図６を参照すると、本発明の第２の実施形態は、第１の実施形態の構成（図２参照）にプログラム登録部９を追加した構成となっている。それ以外の構成については第１の実施形態と同様であるので、以下、その相違点を中心に説明する。
【００７８】
プログラム登録部９は、演算処理部８上で未知のプログラムが実行された際に、当該未知のプログラムの内容情報をプログラム保持部１に登録する手段である。このようなプログラム登録部９は、任意のコンピュータ装置で動作するプログラムにより実現することができる。
【００７９】
このような構成を取ることにより、以前入力された未知のプログラムを、負荷特性の推定に用いることができるので、負荷特性の推定精度が向上する、という効果が得られる。例えば、同一または特徴が似ているプログラムが入力されたような場合、前記プログラム登録部９にて登録されたプログラムの負荷特性が、前記入力されたプログラムの負荷特性の推定時に参照されることになる。
【００８０】
未知のプログラムの内容情報の登録は、負荷特性記録処理の最後に行えばよい。例えば、図４に示した第１の実施形態における負荷特性記録処理フローチャートのステップＳ２０４の後に、プログラム登録部９が登録処理を開始するようにすればよい。
【００８１】
プログラム登録部９は、図６に示した配置に限られず、負荷特性利用部７や演算処理部８や特徴空間作成管理部２に設けることも可能である。プログラム登録部９によるプログラム保持部１へのプログラムの内容情報の登録を、図３に示される特徴空間作成処理の発動契機としてもよい。また、負荷特性推定処理で作成した特徴ベクトルを負荷特性推定部３から取得することで、図３に示される特徴空間作成処理を省略する構成を採ってもよい。
【００８２】
また、プログラムの負荷特性推定処理の動作の流れについては、図５に示した第１の実施形態と同様に、既知のプログラムの負荷特性から特性推定を行う方法を用いればよい。
【００８３】
以上のような構成を採る本実施形態によれば、一回特性負荷推定を行った未知のプログラムを２回目以降の推定を行う際の推定精度の向上が期待できる。その理由は、未知のプログラム自身の実行履歴を将来の負荷特性推定処理に利用するようにしたためである。また、本実施形態によれば、新たに入力される未知プログラムの推定にも、前記演算処理部８で動作させて得られた当該プログラムの負荷特性を利用することが可能になる。
【００８４】
［特徴空間作成管理部の構成例］
続いて、上記した第１、第２の実施形態に係る負荷特性推定システムの細部をより具体的に説明する。図７は、上記第１の実施形態の特徴空間作成管理部の構成例を示したブロック図である。
【００８５】
図７の既知プログラムソースコード保持部１１は、図２のプログラム保持部１に相当し、プログラムの内容情報としてプログラムのソースコードを保持している。このような既知プログラムソースコード保持部１１は、特徴空間作成管理部２を実現する計算機から参照可能であるデータ格納装置（例えば、ファイルサーバなど）によって実現される。
【００８６】
特徴空間作成管理部２は、ソースコード解析プログラム２１１と、特徴ベクトル写像プログラム２２１と、写像行列作成プログラム２２２と、写像行列保持部２２３と、特徴空間保持部２３とを備えて構成される。このような特徴空間作成管理部２は、ＣＰＵなどの中央処理演算装置および半導体メモリなどのメモリを備えたコンピュータによって実現される。
【００８７】
ソースコード解析プログラム２１１は、図２の特徴情報取得部２１をコンピュータ上で動作するプログラムで実現したものである。
【００８８】
特徴ベクトル写像プログラム２２１と、写像行列作成プログラム２２２と、写像行列保持部２２３とは、図２の特徴ベクトル作成部２２をコンピュータ上で動作するプログラムとデータ保持手段により実現したものである。
【００８９】
ソースコード解析プログラム２１１は、既知プログラムソースコード保持部１１より、解析対象のソースコードを取得しファイルの中身を読み出して特徴情報を取得する。特徴情報が、出現単語（索引語）とその頻度（重みを掛けた値としてもよい）であるとすると、ソースコード解析プログラム２１１は、ソースコードの出現文字列を解析しこれらを抽出する処理を行う。情報検索の一般的な手法として、出現単語を全て索引語として扱わず、一般的な単語や意味の無い単語を除外する処理があるが、そのような処理をソースコード解析プログラム２１１に行わせても良い。
【００９０】
複数の既知ソースコードの出現単語（索引語）とその頻度を取得することにより、ｍ×ｎのデータ行列を作成することができる。このときｍは索引語数、ｎはプログラムの数となる。このデータ行列Ｄの縦方向のベクトル（ｎ次元，ｍ個）がプログラムの内容を示したベクトルである。このｎ次元ベクトルをそのままプログラムの特徴ベクトルと扱っても良いが、計算量やメモリ容量の観点から次元数を縮退した特徴ベクトルを作成することが文書検索技術において行われている。図７の構成は、次元数を縮退した特徴ベクトルを作成することを前提とした構成である。
【００９１】
写像行列作成プログラム２２２は、データ行列Ｄから次元数を縮退した特徴ベクトルを作成するための行列の作成を行う。データ行列Ｄから特徴ベクトルを作成する手法については、文書検索の技術として非特許文献５のｐｐ．６９−７７に記載されている。簡単な方法としては、行列Ｄを特異値分解した行列の左特異ベクトルをｋ個利用した行列（の転置行列）を元の文書ベクトルの写像行列として利用するものである（ｋは縮退後の次元数）。写像行列作成プログラム２２２はこの写像ベクトルを作成し、写像行列保持部２２３に記録する。
【００９２】
特徴ベクトル写像プログラム２２１は、写像行列と、索引語とその出現頻度によるプログラムの内容ベクトルの積により、ｋ次元の特徴ベクトルを作成する処理を行うプログラムであり、特徴ベクトルを作成した後、特徴空間保持部２３に記録する。
【００９３】
写像行列は、本来、作成元データである既知プログラムソースコードが増える毎に作成しなおす必要があるが、大量にプログラムが増加しない限りは影響が少ないため、定期的あるいはある一定数以上プログラムが増加するたびに、生成し直す運用でよい。また、写像行列が作り直された際には、既知プログラムの特徴ベクトルも生成し直す必要がある。
【００９４】
類似検索部３１は、特徴空間保持部２３に記録されている特徴ベクトル集合に対して類似度演算を行って類似検索を行うが、このとき未知のプログラムの特徴情報から特徴ベクトルを作成するときに、写像行列保持部２２３に保持されている写像行列を必要とする。そのため、図７のブロック図では、写像行列保持部２２３と類似検索部３１とが接続されている。
【００９５】
このような特徴空間作成管理部によれば、縮退した次元数で類似検索を実行することが可能となり、計算量やメモリ容量の観点で有利である。
【００９６】
［負荷特性推定アルゴリズムの変形例］
上記した第１の実施形態では、最も類似したプログラムの負荷特性を、未知のプログラムｘの負荷特性とするものとして説明したが、負荷特性推定部３で採用可能な負荷特性推定アルゴリズムや例外処理について説明する。
【００９７】
［第２の負荷特性推定アルゴリズム］
第２の負荷特性推定アルゴリズムとして、複数の類似プログラムの負荷特性を用いて、未知プログラムｘの負荷推定を行う手法を説明する。ここでは、類似度が閾値ｚより高い既知プログラムの負荷特性ｌｉを用いることとする。このとき、類似度Ｓｉｘの集合Ｓｘは下記のように表現できる。
【００９８】
【数３】
2011071010.tif 000005
【００９９】
このとき類似度が高いプログラムほど未知プログラムｘの特性を表現していることと見なすと、Ｆ（Ｓ，Ｌ）の式として次のような式を用いることができる。
【０１００】
【数４】
2011071010.tif 000006
【０１０１】
このような式を用いることで、類似した複数の既知プログラムの負荷特性を、未知プログラムとの類似度の高さに応じて反映することができるため、より高精度な負荷特性推定を行うことができる。
【０１０２】
［プログラムの一致］
上記第２の負荷特性推定アルゴリズムにおいて、未知のプログラムが既知プログラムのいずれかと一致する場合、その前例だけを用いて、負荷特性を推定するという条件を加えることができる。
【０１０３】
また、プログラムを一致すると見なすのは、様々な方法があるが、ここではＳｉｘ＝１の場合をプログラム一致と見なすものとする。すると、前述の式［数３］において、類似度Ｓｉｘの集合Ｓｘを抽出する条件を閾値ｚ＝１にすることによって、一致する前例のみを行った推定が可能となる。
【０１０４】
このように過去に実行された同一のプログラムの既知の負荷特性をそのまま利用することにより、プログラムが一致する場合における負荷特性の推定精度を向上させることが可能になる。
【０１０５】
［コマンドラインオプションの考慮］
プログラムの実行方法として、コマンドラインオプションや引数の違いによって大きく動作が異なる場合がある。そのような場合、負荷特性も大きく異なるため、別に扱った方が良い場合がある。
【０１０６】
１つの方法は、負荷特性利用部７に応答する際に、負荷特性をコマンドラインオプション毎に応答するというものである。第１の実施形態で述べた負荷特性推定手法では、類似度が最大のプログラムの負荷特性値を用いる。この場合、コマンドラインオプション別に類似度が最大のプログラムを検索し、各プログラムの負荷特性を分けて提示する。例えば下記のような形となる。
・プログラムα，コマンドラインオプションなし，  負荷特性ｌ
・プログラムα，コマンドラインオプション−ａ，  負荷特性ｌａ
・プログラムα，コマンドラインオプション−ｂ，  負荷特性ｌｂ
【０１０７】
２つめの方法としては、コマンドラインオプションの異なるプログラムを別のプログラムとして扱う方法である。具体的には、コマンドラインオプションをプログラム特徴情報の１つとして扱い、プログラム特徴ベクトルを作成するためのパラメータとして用いる。
【０１０８】
２つめの方法は、例えば次のような方法により実現することができる。まず、ソースコード内の出現単語とその頻度からｋ次元の特徴ベクトルを作成する。更に、コマンドラインオプション用の次元（軸）を用意する。そして、各コマンドラインオプションの内容毎に実数を割り当てる。例えば、コマンドラインオプションが無い場合、その軸の値を０とし、ａの場合には１、ｂの場合には２といったように割り当てる。そして、最後にｋ次元の特徴ベクトルとコマンドラインの１次元を合わせてｋ＋１次元のベクトルを作成する。このようにすることでｋ＋１次元の特徴ベクトルを作成することができる。
【０１０９】
また、特徴ベクトル化の他の方法として、コマンドラインオプションの引数をソースコード内の出現単語と同様に扱う、という手法を採っても良い。
【０１１０】
また、演算処理部８による負荷特性を記録する際に、特定のオプションが付与されたプログラムについては負荷特性を記録しない、という動作をしてもよい。例えば、−−ｈｅｌｐや−ｈ，−−ｕｓａｇｅといったオプションは一般的にプログラムの利用法を示すオプションであるため、負荷特性の記録対象から除外する、といった動作を行う。このような動作を行うことにより、負荷特性推定におけるノイズを取り除き、推定精度を向上させることが可能になる。
【０１１１】
また、負荷特性演算部３２において用いるアルゴリズムや上記例外処理、オプション等を、システムの管理者などが選択・設定するための制御インタフェースを備えても良い。
【０１１２】
また、負荷特性記録部４において、プログラムの対象データのサイズに応じた負荷特性値を記録しているような場合には、プログラム入力部５からプログラムの対象データサイズの想定値を入力させ（あるいは演算処理部８を用いて調べて）、その想定データサイズと、負荷特性値を用いて負荷特性推定値を応答しても良い。例えば、負荷特性記録部４に１０ＭＢあたり１秒の実行時間と記録されている場合、想定データサイズとして１００ＭＢと入力された際に１００／１０から１０秒と応答させることができる。
【０１１３】
［負荷特性の応答方法のバリエーション］
上記した各実施形態および具体例では、負荷特性の応答値として平均値などのある一定値を返すことを前提としていたが、応答値として分布関数などを返す形を採っても良い。例えば、負荷特性記録部４にある既知プログラムａの負荷特性が複数あった場合、それを正規分布と見なして負荷特性を応答することが考えられる。
【０１１４】
第１の実施形態においては、ｍａｘ（Ｓｘ）をとるプログラムαの正規分布を応答することができる。これは、ｌαの平均をμ，分散をσ２とすると、Ｎ（μ，σ２）と示すことができる。また、正規分布以外の分布関数を用いて応答しても良いことは当然である。
【０１１５】
［負荷特性記録部４に保持される負荷特性情報］
負荷特性記録部４に保持される負荷特性情報としては、演算処理部８を実現するクラスタノード内のローカルログファイルや、ログ収集プログラムによって集約した別のストレージへファイルとして格納したものを採ることができる。負荷特性記録部４は負荷特性を算出するために必要十分な情報をデータとして記録するものであればよい。
【０１１６】
具体的な項目としては、平均実行時間、平均必要Ｉ／Ｏ量、平均消費電力、平均ネットワーク利用量などが挙げられる。項目の数は任意である。また、平均値だけでなく、分散や中間値といった別の統計値（指標値）、分布の状態そのものを用いてもよい。
【０１１７】
以下、負荷特性記録部４に保持される負荷特性情報のバリエーションを示す。図８は、プログラム識別子とその実行時の負荷特性測定値を１行のレコードとして記録している例である。プログラム識別子は演算処理部８上で動作させるプログラムを特定するための情報である。例えばプログラムの名称や、プログラムに付与されたユニークなＩＤ（この場合は別途ＩＤを管理する）が該当する。図８は、ＰｒｏｇｒａｍＡ，ＰｒｏｇｒａｍＢといった名称のプログラムを実行した例であり、この名称をプログラム識別子として利用している。レコード数は４行だけが例示されているが、レコード数に制限はなく、またカラムの数にも制限が無い。またこのデータを記録するテーブルの数などにも制限はない。また、複数の物理装置に分散して同等の情報を記録していく方法を採っても良い。
【０１１８】
負荷特性として平均値を用いる場合には、負荷特性記録部４に記録された同一プログラムについて記録された複数の負荷特性を用いて算出することができる。図８の例では、ＰｒｏｇｒａｍＡが２回出現している（過去２回実行されている）ため、平均実行時間は３５ｓｅｃ，必要ＩＯ量は１７．５ＫＢ，必要電力は３０００（Ｗ）と算出できる。また、図８のような履歴レコードをＲＤＢＭＳ（Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａ  Ｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）などのデータベースシステムで管理し、これらの平均値を取得するためにマテリアライズドビューを作成しておくような実装が可能であることは勿論である。
【０１１９】
また、マテリアライズドビューによる実装とほぼ同等であるが、図８のような履歴レコードを記録するのではなく、プログラムの名称毎にレコードを準備して平均値テーブルを更新する形で実現しても良い（図９参照）。
【０１２０】
図９のような記録方式を採った場合には、負荷特性情報のエントリ数はプログラム識別子の数と同等となる。このような記録方式とすることで、負荷特性情報の記録に必要なデータ容量などを削減することができる。
【０１２１】
図８、図９のいずれの記録方式を用いるかは、負荷特性記録部４の仕様や要求される負荷特性の精度等を考慮して決定される。
【０１２２】
負荷特性として記録する値や算出する負荷特性値として、上記例の実行時間のような実測値をそのまま使うのではなく、任意の定義に基づく評価値を用いても良い。例えば、プログラムの処理対象となったデータの容量比として表現することもできる。
【０１２３】
・負荷特性評価値＝負荷特性（実行時間など）／プログラムの処理対象のデータサイズ
【０１２４】
上記のように、負荷特性の値をデータ容量比として表現することによって、処理を行うデータの量に依存して実行時間などの負荷特性が異なるプログラムを統一的に扱うことが可能になる。
【０１２５】
図１０は、負荷特性評価値を用いて記録された負荷特性情報の例である。また、図８の負荷特性情報に、データ量や処理時点のデータ量を特定できる情報のカラムを追加し、負荷特性算出時に記録した値で、負荷特性評価値を算出する形をとってもよい。
【０１２６】
［プログラムとジョブ］
プログラムをジョブ集合とし、ジョブ毎に負荷特性を記録したり、ジョブ毎に負荷特性を推定したりする形態も採用可能である。このようにすることによって、プログラムを、既存のプログラムの組み合わせにより実装するようなシステムにおいても精度よく負荷特性を推定することが可能になる。簡単な例としては、Ｌｉｎｕｘ／Ｕｎｉｘ（それぞれ登録商標）上のシェル上で複数のコマンドをパイプでつないで作成した処理（プログラム）が当てはまる。パイプでつながれた個々のコマンドがジョブに相当し、処理全体がプログラムに相当する。
【０１２７】
［演算処理部８および負荷特性取得機能の構成例］
図１１は、本発明の第１の実施形態の演算処理部の詳細構成例を示すブロック図である。
【０１２８】
図１１の計算機クラスタ８００が、第１の実施形態の演算処理部８に相当する。計算機クラスタ８００は、ネットワーク接続された任意の数（図１１の例では４台）の計算サーバ８０１〜８０４から構成されている。計算サーバ８０１〜８０４は計算能力を提供するプロセッサおよび半導体メモリや磁気ディスクによって実現するストレージ８０１１〜８０４１から構成されている。また、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｒｅａ  Ｓｔｏｒａｇｅ）のような、ネットワークを介して接続されるネットワークストレージを計算サーバ８０１〜８０４に対する共有ストレージ装置として加えた構成を採っても良い（不図示）。
【０１２９】
なお、計算機クラスタ８００の計算サーバ構成において、物理的配置の制限などは無い。建物や部屋などが同一で無ければならないという条件もない。また、ネットワーク接続の種類についても制限はなく、例えば東京の計算機クラスタと大阪の計算機クラスタをインターネットなどで接続することで、演算処理部８を構成しても良い。
【０１３０】
図１１の構成では、負荷特性取得機能は、負荷特性記録プログラム８１１〜８１４および電力測定装置８１５によって実現されている。負荷特性記録プログラム８１１〜８１４はそれぞれの計算サーバ８０１〜８０４上で動作するソフトウェアモジュールあるいはプロセスとして実現される。電力測定装置８１５は、各計算サーバ８０１〜８０４の電源やコンセントに測定装置を付与して実現したり、計算機クラスタ８００に電力を提供するシステムの管理機能が保持している測定計測機能を用いることによって実現できる。
【０１３１】
図１１の例では、電力測定装置８１５は１つのみ存在するがその数は任意としてよい。例えば、１００台の計算機サーバから構成されるクラスタで演算処理部８を実現する際に、５０台あたりに１つずつ電力測定装置を用意する形であってもよい。また、東京と大阪の計算機クラスタを接続して構築する例ならば、東京と大阪に電力測定装置を用意する形であってもよい。
【０１３２】
電力測定装置８１５は、物理的装置である必要もない。ソフトウェアによる論理的見積もりであってもよい。この例として、非特許文献４では、ＣＰＵ負荷率によってサーバの消費電力を見積もる方法が記載されている。このような方法をとる場合には、電力測定装置８１５は計算サーバ８０１〜８０４上で動作するソフトウェアモジュールあるいはプロセスとして実現される。
【０１３３】
また図１１では、負荷特性記録部は、負荷特性記録サーバ４０により実現されている。負荷特性記録サーバ４０は、計算機クラスタ８００とネットワーク接続された任意の計算機（コンピュータ）であり、磁気ディスクや半導体メモリなどの記録装置を備える。
【０１３４】
より具体的には、負荷特性記録サーバ４０は、負荷特性収集プログラム４１および負荷特性記録データベースシステム４２を備えている。負荷特性収集プログラム４１は、負荷特性記録サーバ４０上で動作するプログラムとして実現し、負荷特性記録データベースシステム４２は任意のデータベース管理ソフトウェアと記録装置によって実現することができる。
【０１３５】
当然ながら、データベース管理ソフトウェアなどを用いず、負荷特性収集プログラム４１が確保する負荷特性記録サーバ４０上のメモリ領域や、ファイルシステム上のファイルに任意のフォーマットで負荷特性を格納する形を採っても良い。
【０１３６】
また、図１１の負荷特性記録サーバ４０は、計算機クラスタ８００とは別に用意されているが、計算機クラスタ８００を構成する計算機サーバのうちの任意の数の計算機によって実現しても良い。また、負荷特性収集プログラム４１を用意せずに、負荷特性記録プログラム８１１〜８１４が負荷特性記録サーバ４０上で動作する負荷特性記録データベースシステム４２に対して更新、記録する構成を採っても良い。
【０１３７】
上記したように、図１１の構成は様々な変形構成を採ることが可能であるが、以下、図１１の構成をベースにその詳細な実装形態および動作を説明する。
【０１３８】
計算機クラスタ８００では、各計算サーバ８０１〜８０４上でプログラムの全体あるいは一部のジョブを実行する。このとき、計算サーバ８０１〜８０４上でジョブ実行を司るジョブ実行制御プログラムが動作する。負荷特性記録プログラム８１１〜８１４はこのジョブ実行制御プログラムがジョブ実行を開始するタイミングとジョブ実行を終了するタイミングをトラップする（あるいはジョブ実行制御プログラムからジョブの開始と終了時に通知してもらう）ことにより、測定対象のジョブ実行の開始時および終了時を入手する。
【０１３９】
負荷特性記録プログラム８１１〜８１４は、記録する負荷特性の値について開始時に測定を開始し、終了した後に測定を終了する。もちろん、定常的に負荷特性を記録し、終了時と開始時の間の負荷特性値からジョブが引き起こした負荷特性を算出する方法も採用可能である。
【０１４０】
測定する負荷特性値の例としては、実行時間、必要Ｉ／Ｏ量、消費電力量が存在する。以下、それぞれについて具体的な測定方法を説明する。
【０１４１】
実行時間については、ジョブ実行開始時刻と終了時刻の差を計算することで測定できる。
【０１４２】
必要Ｉ／Ｏ量については、ｉｏｓｔａｔなどに代表されるＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上でのＩ／Ｏ統計情報を取得できるコマンドを用いて、ジョブ実行期間中のＩ／Ｏ量について取得することができる。
【０１４３】
消費電力量は、ジョブ実行期間中の電力測定装置８１５が測定している消費電力量により算出することができ、例えば、アイドル時の消費電力量との差から算出すればよい。また、電力測定装置８１５のような外部装置を用いずに、ＣＰＵ利用率を定期的に取得して、非特許文献４に記載された手法を用いて消費電力量を推定してもよい。
【０１４４】
計算サーバ８０１〜８０４それぞれの消費電力については、個別に電力測定装置８１５が測定していれば問題なく取得できるが、計算サーバ８０１〜８０４が共有して利用している装置の消費電力については取得が困難である。このような複数の装置によって共有して利用される装置の例として、ネットワークスイッチが挙げられる。このような共有装置が利用する消費電力については、サーバ毎の利用率に応分の比率で反映すればよい。例えば、あるプログラムが２つのジョブから成り立っており、それを実行する際に、計算サーバ８０１と８０２で１つずつのジョブを実行するとする。そのとき、計算サーバ８０３、８０４がアイドルであったとし、計算サーバ８０１と８０２がジョブ実行時に利用したネットワーク転送量がほぼ同量であれば、プログラム実行中のネットワークスイッチにおける消費電力増加量を計算サーバ８０１と８０２上で動作するジョブの消費電力に上乗せする。
【０１４５】
またここまで説明した方法では、あるプログラムが単一の計算サーバで動作する場合には問題ないが、あるプログラムが複数のジョブから成り立っていて、そのジョブが複数の計算サーバで動作する場合には、ジョブ毎の負荷特性を集約してプログラム単位の負荷特性とする処理が必要である。最終的には、図８、図９、図１０に示したようなプログラム単位の負荷特性情報が得られる。このようなジョブの負荷特性を集約してプログラム単位とする処理は、負荷特性収集プログラム４１で行えばよい。
【０１４６】
また、図８、図９、図１０に示したような負荷特性の記録単位をジョブ毎にしておいてもよい（１カラム目をジョブの識別子を登録する形）。この場合、負荷特性記録データベースシステム４２にはジョブ単位で記録しておき、負荷特性推定部３が利用する際に、ジョブからプログラムへ復元する形をとなる。
【０１４７】
また、各計算サーバ８０１〜８０４上で複数のジョブが同時実行されている場合に、ジョブ毎の影響消費電力量などを別々に採取できない場合がある。そのような場合には、次のような解決策があり、いずれの手法を採っても良い。
【０１４８】
・複数ジョブ（プログラム）が同時実行している場合には、分離して測定できない負荷特性については記録しない
・個々のジョブのＣＰＵ利用率で応分して、増加負荷特性量を割り当てる
・同一時間帯に同時実行されているジョブに対して、増加負荷特性量を当分して割り当てる。
【０１４９】
［負荷特性利用部７の具体例１］
続いて、上記のようにして推定された負荷特性を利用する負荷特性利用部７の具体例について説明する。図１２、図１３は、本発明の第１の実施形態の負荷特性利用部７の具体例を示すブロック図である。
【０１５０】
図１２は、負荷特性利用部７に、プログラミングインタフェース７１と、情報提示インタフェース７２とが備えられている例である。
【０１５１】
図１２を参照すると、プログラミングインタフェース７１は、演算処理部８上で行う演算処理の内容を記述するためのインタフェースである。例えば、プログラムソースコードを記述するエディタや、プログラム保持部１に格納されているプログラムロジックを組み合わせてグラフィカルにプログラミングを行うインタフェースが当てはまる。
【０１５２】
ユーザは、プログラミングインタフェース７１を介して、プログラムを作成する。プログラミングインタフェース７１は、作成されたプログラムを未知のプログラムとしてプログラム入力部５に渡す。
【０１５３】
プログラム入力部５に対しプログラムを渡す際に、プログラムを最後まで作成してから渡す形でなく、コーディング途中の任意の契機（ユーザの依頼や時間経過）により作成途中のプログラムをプログラム入力部５に渡しても良い。このような契機での負荷特性の推定要求を許容することによって、プログラム開発中のユーザに負荷推定値を提示することが可能になる。
【０１５４】
プログラム入力部５に渡された後は、第１の実施形態または上記各具体例を適用した実施形態と同様の処理を行い、ユーザが開発したプログラムの負荷特性が推定される。
【０１５５】
情報提示インタフェース７２は、推定された負荷特性を受け取り提示する。負荷特性情報をそのまま提示してもよいし、何らかの加工をしてもよい。例えば予想される消費電力を提示したり、実行時間や必要計算サーバ数から計算に必要な料金を算出したりする（当然ながらそのために必要な情報を負荷特性として負荷特性記録部４に格納していく構成を採る）。ユーザは情報提示インタフェース７２の情報を見て、再度プログラムの修正を行ったり、問題無いと判断して演算処理部８にプログラムの実行を依頼したりする。
【０１５６】
図１３は、負荷特性利用部７に、ジョブ実行割り当て制御部７３とプログラム実行投入部７４とが備えられている例である。図１３の演算処理部８は任意の複数の計算サーバ８０１〜８０３によって構成されている。その他については、上記した実施形態または上記各具体例を適用した実施形態と同一である。
【０１５７】
プログラム実行投入部７４は、ユーザによって（任意の手段で）開発されたプログラムを演算処理部８上で実行するために、プログラムとその実行方針（オプション引数や、処理対象データの特定識別子などの付加情報全般）をユーザや別のプログラム（サービス）から受け取る手段である。
【０１５８】
また、プログラム実行投入部７４は、受け取ったプログラムをすぐさま演算処理部８上での処理実行に移すのではなく、まずプログラムの負荷特性推定処理を行う。従って、まずプログラム入力部５にプログラム内容情報を渡し、第一の実施形態などで述べた負荷推定処理を行う。
【０１５９】
ジョブ実行割り当て制御部７３は、推定された負荷特性情報を受け取り、プログラム（あるいはプログラムを任意の処理単位に分割したジョブ集合）を計算サーバ８０１〜８０３にどのように割り当てればよいか決定する。
【０１６０】
ここでの割り当て制御は、例えば負荷特性記録部４に記録されていた負荷特性情報より、計算サーバ１台で行った場合には３０分かかり、計算サーバ４台で行った場合には２０分掛かる場合に、どちらを選ぶかを決定する。このとき、ジョブ実行割り当て制御部７３が、各計算サーバ８０１〜８０３の負荷状態を知っていて１台だけが余裕があり、他の計算機の実行キューにはジョブが溜まっている場合には、１台で実行すればよいし、４台の計算機に余裕がある場合には４台使って実行するといった制御を行う。
【０１６１】
また、図１３の構成においても、ユーザが設定した判断ポリシや、実行に掛かるコストを考慮して選択できるようにしてもよい。
【０１６２】
なお、図１３においてはジョブ実行割り当て制御部７３は、演算処理部８とは別のブロックで示しているが、実際には演算処理部８を構成する計算機（例えばスケジューラを担当している計算機）上で動作することが自然である。
【０１６３】
以上、本発明の好適な実施形態を説明したが、本発明は、上記した実施形態に限定されるものではなく、本発明の基本的技術的思想を逸脱しない範囲で、更なる変形・置換・調整を加えることができる。
【産業上の利用可能性】
【０１６４】
本発明によれば、ネットワークコンピュータティングシステムや大規模計算機システムにおけるプログラム実行コストの事前見積もりシステム、といった用途に適用できる。また、ネットワークコンピュータティングシステムや大規模計算機システムにおけるジョブスケジューリングといった用途にも適用可能である。
【符号の説明】
【０１６５】
１        プログラム保持部
２        特徴空間作成管理部
３        負荷特性推定部
４        負荷特性記録部
５        プログラム入力部
６        プログラム特徴情報取得部
７        負荷特性利用部
８        演算処理部
９        プログラム登録部
１１      既知プログラムソースコード保持部
２１      特徴情報取得部
２２      特徴ベクトル作成部
２３      特徴空間保持部
３１      類似検索部
３２      負荷特性演算部
４０      負荷特性記録サーバ
４１      負荷特性収集プログラム
４２      負荷特性記録データベースシステム
７１      プログラミングインタフェース
７２      情報提示インタフェース
７３      ジョブ実行割り当て制御部
７４      プログラム実行投入部
９１      プログラム登録部
２１１    ソースコード解析プログラム
２２１    特徴ベクトル写像プログラム
２２２    写像行列作成プログラム
２２３    写像行列保持部
８００    計算機クラスタ
８０１〜８０４  計算サーバ
８１１〜８１４  負荷特性記録プログラム
８１５    電力測定装置
８０１１〜８０１４  ストレージ
【図１】
2011071010.tif 000007
【図２】
2011071010.tif 000008
【図３】
2011071010.tif 000009
【図４】
2011071010.tif 000010
【図５】
2011071010.tif 000011
【図６】
2011071010.tif 000012
【図７】
2011071010.tif 000013
【図８】
2011071010.tif 000014
【図９】
2011071010.tif 000015
【図１０】
2011071010.tif 000016
【図１１】
2011071010.tif 000017
【図１２】
2011071010.tif 000018
【図１３】
2011071010.tif 000019
【手続補正書】
【提出日】平成24年6月8日(2012.6.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
所定のコンピュータシステム上で動作させるプログラムを入力するプログラム入力部と、
前記入力されたプログラムから特徴を取得するプログラム特徴情報取得部と、
過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定する負荷特性推定部と、
を備えたことを特徴とする負荷特性推定システム。
【請求項２】
前記所定のコンピュータシステム上で動作させたプログラムの特徴情報を保持する特徴情報保持部と、
前記特徴情報保持部に保持された特徴情報と、前記入力されたプログラムの特徴情報とを用いて類似するプログラムの検索を行う類似検索部と、を備える請求項１の負荷特性推定システム。
【請求項３】
前記負荷特性推定部は、前記入力されたプログラムと最も類似する特徴を持つプログラムの負荷特性を用いて、前記入力されたプログラムの負荷特性を推定する請求項１または２の負荷特性推定システム。
【請求項４】
前記負荷特性推定部は、前記入力されたプログラムとの類似度が所定の閾値より高いプログラム群の負荷特性を用いて、前記入力されたプログラムの負荷特性を推定する請求項１または２の負荷特性推定システム。
【請求項５】
前記負荷特性推定部は、前記入力されたプログラムが前記所定のコンピュータシステム上で動作させたことのあるプログラムと一致する場合、当該プログラムの負荷特性を用いて負荷特性を推定する請求項１から４いずれか一の負荷特性推定システム。
【請求項６】
負荷特性記録部には、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性の履歴が記録されており、
前記負荷特性推定部は、前記入力されたプログラムの負荷特性として、前記負荷特性記録部から読み出した前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性の統計値を出力する請求項１から５いずれか一の負荷特性推定システム。
【請求項７】
前記プログラム入力部は、前記所定のコンピュータシステムに実行させるプログラムを入力するプログラム実行投入部であり、
前記負荷特性利用部は、前記入力されたプログラムの負荷特性情報を用いて、プログラムの実行手順および計算機への割り当てを制御する、ジョブ実行割り当て制御部である請求項６の負荷特性推定システム。
【請求項８】
前記負荷特性の推定を経て前記所定のコンピュータシステム上で前記入力されたプログラムを動作させた際に当該コンピュータシステムに生じた負荷特性を、前記負荷特性記録部に追加する機能と、
前記プログラム特徴情報取得部にて取得されたプログラムの特徴情報を前記特徴情報保持部に追加する機能と、
を備えたことを特徴とする請求項１から７いずれか一の負荷特性推定システム。
【請求項９】
ユーザから、所定のコンピュータシステム上で動作させるプログラムの入力を受け付けるステップと、
前記入力されたプログラムから特徴を取得するステップと、
過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定するステップと、
を含む負荷特性推定方法。
【請求項１０】
ユーザから、所定のコンピュータシステム上で動作させるプログラムの入力を受け付ける処理と、
前記入力されたプログラムから特徴を取得する処理と、
過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定する処理と、
をコンピュータに実行させるプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１８
【補正方法】変更
【補正の内容】
【００１８】
本発明の第１の視点によれば、所定のコンピュータシステム上で動作させるプログラムを入力するプログラム入力部と、前記入力されたプログラムから特徴を取得するプログラム特徴情報取得部と、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性を記録した負荷特性記録部から、前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性情報を読み出して、前記入力されたプログラムの負荷特性を推定する負荷特性推定部と、を備えた負荷特性推定システムが提供される。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】変更
【補正の内容】
【００２３】
はじめに本発明の概要について説明する。本発明に係る負荷特性推定システムは、図１に示すように、ユーザから目的とするコンピュータシステム上で動作させるプログラムの入力を受け付けるプログラム入力部５と、プログラム入力部５から入力されたプログラムの特徴を取得するプログラム特徴情報取得部６と、入力されたプログラムの負荷特性の推定を行う負荷特性推定部３とを備える。負荷特性推定部３は、入力されたプログラムの特徴とプログラム保持部１に保持された負荷特性が既知である既知プログラムの特徴を用いた類似検索を行う類似検索部３１と、負荷特性記録部４からその類似プログラムの負荷特性を読み出して前記入力されたプログラムの負荷特性を推定する負荷特性演算部３２とを含んだ構成とすることができる。これにより、目的とするコンピュータシステムでプログラムを実際に動作させなくとも、その負荷特性を推定することが可能になる。このような負荷特性は、負荷特性利用部７にて、例えば、ユーザにおける当該入力したプログラムを実行するか否かの意思決定や、当該入力したプログラムのスケジューリングに利用される。なお、この概要に付記した図面参照符号は、専ら理解を助けるための例示であり、図示の態様に限定することを意図するものではない。
本発明において以下の形態が可能である。
［形態１］
前記第１の視点に記載の負荷特性推定システムのとおり。
［形態２］
前記負荷特性推定システムは、前記所定のコンピュータシステム上で動作させたプログラムの特徴情報を保持する特徴情報保持部と、
前記特徴情報保持部に保持された特徴情報と、前記入力されたプログラムの特徴情報とを用いて類似するプログラムの検索を行う類似検索部と、を備えることが好ましい。
［形態３］
前記負荷特性推定部は、前記入力されたプログラムと最も類似する特徴を持つプログラムの負荷特性を用いて、前記入力されたプログラムの負荷特性を推定することが好ましい。
［形態４］
前記負荷特性推定部は、前記入力されたプログラムとの類似度が所定の閾値より高いプログラム群の負荷特性を用いて、前記入力されたプログラムの負荷特性を推定することもできる。
［形態５］
前記負荷特性推定部は、前記入力されたプログラムが前記所定のコンピュータシステム上で動作させたことのあるプログラムと一致する場合、当該プログラムの負荷特性を用いて負荷特性を推定することもできる。
［形態６］
負荷特性記録部には、過去に他のプログラムを前記所定のコンピュータシステム上で動作させた際に当該コンピュータシステムに生じた負荷特性の履歴が記録されており、
前記負荷特性推定部は、前記入力されたプログラムの負荷特性として、前記負荷特性記録部から読み出した前記入力されたプログラムと類似する特徴を持つプログラムの負荷特性の統計値を出力することもできる。
［形態７］
前記負荷特性推定システムは、さらに、前記入力されたプログラムの負荷特性情報を利用した情報処理を行う負荷特性利用部を備えることが好ましい。
［形態８］
前記プログラム入力部は、ユーザから前記所定のコンピュータシステムに実行させるプログラムの入力を受け付けるプログラミングインタフェースであり、
前記負荷特性利用部は、前記ユーザに前記入力されたプログラムの負荷特性情報を提示する情報提示インタフェースであることが好ましい。
［形態９］
前記プログラム入力部は、前記所定のコンピュータシステムに実行させるプログラムを入力するプログラム実行投入部であり、
前記負荷特性利用部は、前記入力されたプログラムの負荷特性情報を用いて、プログラムの実行手順および計算機への割り当てを制御する、ジョブ実行割り当て制御部であることが好ましい。
［形態１０］
前記負荷特性推定システムは、前記負荷特性の推定を経て前記所定のコンピュータシステム上で前記入力されたプログラムを動作させた際に当該コンピュータシステムに生じた負荷特性を、前記負荷特性記録部に追加する機能と、
前記プログラム特徴情報取得部にて取得されたプログラムの特徴情報を前記特徴情報保持部に追加する機能と、
を備えることが好ましい。
［形態１１］
前記所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムであることが好ましい。
［形態１２］
前記第２の視点に記載の負荷特性推定方法のとおり。
［形態１３］
前記負荷特性推定方法においてプログラムの入力を受け付ける、所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムであることが好ましい。
［形態１４］
前記第３の視点に記載のプログラムのとおり。
［形態１５］
前記コンピュータがプログラムの入力を受け付ける、前記所定のコンピュータシステムは、複数のユーザにネットワークを介して複数の計算機資源を利用させるネットワークコンピューティングシステムであることが好ましい。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００７０
【補正方法】変更
【補正の内容】
【００７０】
次に、負荷特性推定部３は、ステップＳ３０７で得られた負荷特性推定値を負荷特性利用部７に渡す（ステップＳ３０８）。次に、負荷特性利用部７が、渡された負荷特性推定値を用いた処理を行う（ステップＳ３０９）。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１６４
【補正方法】変更
【補正の内容】
【０１６４】
本発明によれば、ネットワークコンピューティングシステムや大規模計算機システムにおけるプログラム実行コストの事前見積もりシステム、といった用途に適用できる。また、ネットワークコンピュータティングシステムや大規模計算機システムにおけるジョブスケジューリングといった用途にも適用可能である。
【手続補正６】
【補正対象書類名】図面
【補正対象項目名】図５
【補正方法】変更
【補正の内容】
【図５】
2011071010.tif 000020
【手続補正７】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2011071010.tif 000021
【手続補正８】
【補正対象書類名】図面
【補正対象項目名】図７
【補正方法】変更
【補正の内容】
【図７】
2011071010.tif 000022
【国際調査報告】
2011071010.tif 000023
2011071010.tif 000024