(57)【特許請求の範囲】
【請求項１】
コンピュータに、
メモリが有する記憶領域から割り当てられた、タスクを繰り返し実行する際に前記タスクによって用いられる処理用領域のサイズおよび前記タスクの実行結果を転送する転送用領域のサイズを取得し、
前記タスクを実行した際に使用された前記タスクが用いた前記処理用領域の使用量と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合に前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、
算出した前記短縮時間と、前記メモリの割り当て変更にかかる時間とに基づいて、前記メモリの割り当てを変更するか否かを判断する、
処理を実行させることを特徴とする制御プログラム。
【請求項２】
前記コンピュータに、
前記タスクの実行履歴に基づいて、前記タスクの実行中に前記メモリが有する記憶領域とは異なる他の記憶領域に前記タスクの実行結果を書き出したか否かを判定する、処理を実行させ、
前記算出する処理は、
前記タスクの実行結果を前記他の記憶領域に書き出したと判定した場合、前記使用量と、取得した前記処理用領域のサイズと前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合に前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出する、
ことを特徴とする請求項１に記載の制御プログラム。
【請求項３】
前記算出する処理は、
前記タスクを実行した際にかかった時間に基づいて、前記サイズを変更しない場合の前記タスクを繰り返し実行する際にかかる第１の時間を算出するとともに、前記タスクを実行した際にかかった時間と、前記使用量と、前記メモリの割り当て変更にかかる時間と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合の前記タスクを繰り返し実行する際にかかる第２の時間を算出し、
前記判断する処理は、
算出した前記第１の時間から前記第２の時間を減ずることにより得られる時間に基づいて、前記メモリの割り当てを変更するか否かを判断する、
ことを特徴とする請求項２に記載の制御プログラム。
【請求項４】
前記コンピュータに接続する複数のコンピュータの各々のコンピュータが、前記各々のコンピュータのメモリが有する記憶領域のうちの前記各々のコンピュータの間で同一のサイズとなる処理用領域を用いて前記タスクを実行し、前記複数のコンピュータが前記タスクを完了させた後に当該記憶領域のうちの前記各々のコンピュータの間で同一のサイズとなる転送用領域を用いて前記各々のコンピュータの間で前記タスクの実行結果を転送し、転送された前記実行結果に基づいて前記タスクを再び実行する、
ことを特徴とする請求項２または３に記載の制御プログラム。
【請求項５】
前記取得する処理は、
前記複数のコンピュータのうちのいずれかのコンピュータから、当該処理用領域のサイズおよび当該転送用領域のサイズを取得し、
前記判定する処理は、
前記各々のコンピュータの前記タスクの実行履歴に基づいて、前記複数のコンピュータのうちのいずれかのコンピュータが前記タスクの実行中に当該いずれかのコンピュータが有するメモリが有する記憶領域とは異なる他の記憶領域に前記タスクの実行結果を書き出したか否かを判定し、
前記算出する処理は、
当該いずれかのコンピュータが前記タスクの実行結果を当該他の記憶領域に書き出したと判定した場合、前記タスクを実行した際に使用された前記タスクが用いた当該処理用領域の使用量と、取得した当該処理用領域のサイズおよび当該転送用領域のサイズとに基づいて、前記複数のコンピュータが前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、
前記判断する処理は、
算出した前記短縮時間と、前記メモリの割り当て変更にかかる時間とに基づいて、前記メモリの割り当てを変更するか否かを判断する、
ことを特徴とする請求項４に記載の制御プログラム。
【請求項６】
メモリが有する記憶領域から割り当てられた、タスクを繰り返し実行する際に前記タスクによって用いられる処理用領域のサイズおよび前記タスクの実行結果を転送する転送用領域のサイズを取得し、
前記タスクを実行した際に使用された前記タスクが用いた前記処理用領域の使用量と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合に前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、
算出した前記短縮時間と、前記メモリの割り当て変更にかかる時間とに基づいて、前記メモリの割り当てを変更するか否かを判断する、
制御部を有することを特徴とする制御装置。
【請求項７】
コンピュータが、
メモリが有する記憶領域から割り当てられた、タスクを繰り返し実行する際に前記タスクによって用いられる処理用領域のサイズおよび前記タスクの実行結果を転送する転送用領域のサイズを取得し、
前記タスクを実行した際に使用された前記タスクが用いた前記処理用領域の使用量と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合に前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、
算出した前記短縮時間と、前記メモリの割り当て変更にかかる時間とに基づいて、前記メモリの割り当てを変更するか否かを判断する、
処理を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラム、制御装置、および制御方法に関する。
【背景技術】
【０００２】
従来、ディスク等の外部のＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）を伴わず、内部メモリを用いてデータ処理を行う、インメモリ型のデータ処理と呼ばれる技術がある。さらに、インメモリ型のデータ処理を、ＪａｖａＶＭ（ＪＶＭ：Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｊａｖａは登録商標）に実行させる技術がある。また、インメモリ型のデータ処理では、データ処理のタスクを実行するマシンのメモリから割り当てられた、タスクを繰り返し実行する際にタスクによって用いられる処理用領域と、タスクの実行結果を転送する転送用領域とが用いられる。
【０００３】
関連する先行技術として、例えば、内蔵メモリと外部メモリの利用状況の変化を計測した計測結果を基に、内蔵メモリの構成を変更、内蔵メモリと外部メモリに格納されたデータを移動、内蔵メモリまたは外部メモリの領域を変更するものがある。また、所定時間においてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が全ＣＰＵに割り当て可能な部分から確保したメモリ量に基づきＣＰＵのメモリ需要予測量を求め、求めた予測量に基づき全ＣＰＵに割り当て可能な部分から確保したメモリを所定のＣＰＵのみに割り当てられた部分に移す技術がある。また、並列計算機上でリモートメモリ書き込みによりデータ転送する際に、各計算機上のデータ転送用のメモリ領域を、予め通信相手ごとに固定された領域と動的に割り当てられる領域とに分割し、転送データ長によってこれら領域を使い分ける技術がある。送受信データ領域として使用するためのページ固定領域を、各ノードのオペレーティング・システムの起動時に設定したサイズに基づいて、各ノードの物理アドレス空間上に確保する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１１／０４５９３１号
【特許文献２】特開平１０−３２０３５８号公報
【特許文献３】特開平１０−１４３４８６号公報
【特許文献４】特開平６−１１０８４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、インメモリ型のデータ処理において、メモリの割り当て変更の要否を判断することが難しい。例えば、データ処理のタスクの実行結果のデータサイズが転送用領域のサイズを超えると、ディスクへの書き出しが行われることになり、ディスクに書き出す分、データ処理にかかる時間が増加する。そこで、転送用領域の割り当て量を変更するにしても、割り当て変更のためにタスクを実行するＪＶＭを再起動するといった時間がかかる。従って、メモリ割り当ての変更を行ったとしても、データ処理にかかる時間の増加を抑えることができるとは限らない。
【０００６】
１つの側面では、本発明は、メモリ割り当て変更の要否を適切に判断することができる制御プログラム、制御装置、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、メモリが有する記憶領域のうち、タスクを繰り返し実行する際にタスクによって用いられる処理用領域のサイズおよびタスクの実行結果を転送する転送用領域のサイズを取得し、タスクを実行した際に使用されたタスクが用いた処理用領域の使用量と、取得した処理用領域のサイズおよび転送用領域のサイズとに基づいて、使用量に基づき転送用領域のサイズを変更した場合にタスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、算出した短縮時間と、メモリの割り当て変更にかかる時間とに基づいて、メモリの割り当てを変更するか否かを判断する制御プログラム、制御装置、および制御方法が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、メモリ割り当て変更の要否を適切に判断することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１Ａ】図１Ａは、本実施の形態にかかる制御装置１０１の動作例を示す説明図（その１）である。
【図１Ｂ】図１Ｂは、本実施の形態にかかる制御装置１０１の動作例を示す説明図（その２）である。
【図２】図２は、インメモリ型データ処理システム２００の構成例を示す説明図である。
【図３】図３は、マスタマシン２０１のハードウェア構成例を示す説明図である。
【図４】図４は、マスタマシン２０１の機能構成例を示すブロック図である。
【図５】図５は、単一マシンがデータ処理を行う場合のタスク１１１の割り当て例を示す説明図である。
【図６】図６は、単一マシンにおけるデータ処理手順の一例を示すフローチャートである。
【図７】図７は、複数マシンでデータ処理を行う場合のタスク１１１の割り当て例を示す説明図である。
【図８】図８は、複数マシンでデータ処理を行う場合のタスク１１１の実行例を示す説明図である。
【図９】図９は、複数マシンにおけるデータ処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示の制御プログラム、制御装置、および制御方法の実施の形態を詳細に説明する。
【００１１】
図１Ａ、図１Ｂは、本実施の形態にかかる制御装置１０１の動作例を示す説明図である。制御装置１０１は、インメモリ型のデータ処理を実行するマシンを制御するコンピュータである。制御装置１０１は、例えば、サーバである。ここで、インメモリ型のデータ処理は、ディスク等の外部のＩ／Ｏを伴わず、内部のメモリを用いてデータ処理を行うものである。インメモリ型のデータ処理では、メモリ上に存在する処理結果をそのまま次の処理へ使うことができる。
【００１２】
ここで、データ処理の１回の処理を、「タスク」と呼称する。そして、同じタスクを繰り返すような機械学習を実装するようなアプリケーションソフトウェアでは、インメモリ型のデータ処理が有効である。以下、アプリケーションソフトウェアを、「アプリ」と称する。ここで、タスクは、アプリの実行単位となるジョブが分割された最小の実行単位を指す。
【００１３】
機械学習の説明例を、下記参考文献１、２内に示す。
（参考文献１：ビッグデータ時代の機械学習アルゴリズム：オンライン学習、［平成２７年９月２４日検索］、ｈｔｔｐ：／／ｗｗｗ．ｎｔｔｄａｔａ．ｃｏｍ／ｊｐ／ｊａ／ｉｎｓｉｇｈｔｓ／ｔｒｅｎｄ＿ｋｅｙｗｏｒｄ／２０１４１１０６０１．ｈｔｍｌ）
（参考文献２：クラシックな機械学習の入門  ７．  オンライン学習、［平成２７年９月２４日検索］、ｈｔｔｐ：／／ｗｗｗ．ｓｌｉｄｅｓｈａｒｅ．ｎｅｔ／ｈｉｒｓｏｓｈｎａｋａｇａｗａ３／ｓｓ−３２２７４０８９）
【００１４】
このため、インメモリ型のデータ処理は、同一マシンや異なるマシン間でのタスクの繰り返しを用いて、インメモリ型のデータ処理を実行するマシンに並列分散するように割り当てる。また、インメモリ型のデータ処理では、アプリを実行する際に用いられる処理用領域と、複数の処理用領域に格納されたタスクの実行結果を統合したり、タスクの実行結果の一部や全部を他のマシンに転送したりするために用いられる転送用領域とを有する。
【００１５】
機械学習のアプリの処理内容は利用者が任意に指定することができる。また、タスクに用いる処理用領域のデータサイズは、タスクによって異なる。処理用領域と転送用領域との総和は、タスクを実行する装置のメモリの総量を超えることはない。タスクの実行中に処理用領域が不足した場合には、タスクの実行が遅くなる。また、タスクの実行中に転送用領域が不足した場合には、タスクの実行結果の一部を、タスクを実行する装置のディスク、例えば、磁気ディスクドライブ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ：ＨＤＤ）に書き出すこともある。
【００１６】
また、制御装置１０１は、インメモリ型のデータ処理を実行するマシンとして、ＪＶＭに実行させる。ＪＶＭを動作させる装置は、制御装置１０１とは異なる１以上の装置でもよいし、制御装置１０１でもよいし、制御装置１０１とは異なる１以上の装置と制御装置１０１とでもよい。インメモリ型のデータ処理をＪＶＭが実行する際には、ＪＶＭの起動時に、処理用領域と転送用領域とが割り当てられる。
【００１７】
しかしながら、インメモリ型のデータ処理において、処理用領域と転送用領域との割り当て変更の要否を判断することが難しい。以下、処理用領域と転送用領域との割り当て変更を、「メモリの割り当て変更」と呼称する。例えば、データ処理のタスクの実行結果のデータサイズが転送用領域のサイズを超えると、ディスクへの書き出しが行われることになり、ディスクに書き出す分、データ処理にかかる時間が増加する。そこで、転送用領域の割り当て量を変更するにしても、割り当て変更のためにタスクを実行するＪＶＭを再起動するといった時間がかかる。従って、メモリ割り当ての変更を行ったとしても、データ処理にかかる時間の増加を抑えることができるとは限らない。
【００１８】
ここで、機械学習の場合には、１回目のタスクで実行したメモリ量がわかれば、２回目以降のタスクにおいても、ほぼ同じようなメモリ量を使用することになる。そこで、本実施の形態では、インメモリ型のデータ処理のタスクを実行した際に、処理用領域の使用量に基づき転送用領域を増やすことで短縮する時間と、メモリの割り当て変更にかかる時間から、メモリの割り当て変更の要否を判断する方法を行う。
【００１９】
図１Ａ、図１Ｂを用いて、制御装置１０１の動作例を示す。図１Ａ、図１Ｂの例では、ＪＶＭを動作させる装置が、実行装置１０２であるとする。図１Ａに示すように、制御装置１０１は、複数の実行装置１０２と接続される。実行装置１０２は、制御装置１０１の指示により、タスク１１１をｎ回実行するものとする。ｎは、２以上の整数である。
【００２０】
図１Ａの（１）で示すように、制御装置１０１は、実行装置１０２から、実行装置１０２のメモリが有する記憶領域から割り当てられた、処理用領域ｍｐのサイズおよび転送用領域ｍｔのサイズを取得する。取得するタイミングとして、制御装置１０１は、データ処理を行う前に取得してもよいし、データ処理中に取得してもよい。
【００２１】
次に、図１Ｂの（２）で示すように、制御装置１０１は、第１の時間として実行時間Ｔｂと、第２の時間として実行時間Ｔａを算出し、実行時間Ｔｂから実行時間Ｔａを減じた時間ｒｔを算出する。時間ｒｔは、使用量ｕに基づき転送用領域ｍｔのサイズを変更した場合にタスク１１１を繰り返し実行する、すなわち、データ処理の実行の際にかかる時間が短縮する時間である。また、時間ｒｔは、メモリの割り当て変更にかかる時間を考慮した際のデータ処理の実行の際にかかる時間が短縮する時間でもある。実行時間Ｔａは、メモリの割り当て変更を行った場合のデータ処理の実行時間である。また、実行時間Ｔｂは、メモリの割り当て変更を行わない場合のデータ処理の実行時間である。
【００２２】
制御装置１０１は、タスク１１１を実行した際にかかった時間Ｔ１に基づいて、実行時間Ｔｂを算出する。例えば、制御装置１０１は、時間Ｔ１にｎを乗算した値を、Ｔｂとして算出する。
【００２３】
また、制御装置１０１は、Ｔ１、タスク１１１を実行した際に使用されたタスク１１１が用いた処理用領域ｍｐの使用量ｕ、メモリの割り当て変更にかかる時間ｒａｔ、処理用領域ｍｐのサイズ、および転送用領域ｍｔのサイズに基づいて、実行時間Ｔａを算出する。メモリの割り当て変更にかかる時間ｒａｔは、メモリの割り当てを変更するためにＪＶＭを再起動するのにかかる時間である。例えば、制御装置１０１は、下記（１）式に従って、Ｔａを算出する。
【００２４】
Ｔａ＝Ｔ１＋Ｔ２×（ｎ−１）＋ｒａｔ  …（１）
【００２５】
ここで、Ｔ２は、メモリの割り当て変更を行った場合にタスク１１１を実行する際にかかる時間である。例えば、制御装置１０１は、Ｔ１に、メモリの割り当て変更により転送用領域ｍｔが増える倍率の逆数を乗算して得られた値を、Ｔ２として算出する。そして、転送用領域ｍｔが増える分は、図１Ａの例では、処理用領域ｍｐから使用量ｕを除いた空き容量となる斜線の網掛けの領域の部分である。
【００２６】
図１Ｂのグラフ１１２に、実行時間Ｔａ、Ｔｂ、時間ｒｔ、メモリの割り当て変更にかかる時間ｒａｔが示す量を図示してある。時間ｒｔは、グラフ１１２で示すように、ＴｂからＴａを減じた値となる。
【００２７】
なお、実行時間Ｔａ、Ｔｂ、時間ｒｔを算出するタイミングは、タスク１１１を１回実行した以降から、タスク１１１のｎ回目の実行の前までであればいつでもよいが、好ましくは、タスク１１１を１回実行した後がよい。
【００２８】
そして、図１Ｂの（３）で示すように、制御装置１０１は、時間ｒｔに基づいて、メモリの割り当てを変更するか否かを判断する。例えば、制御装置１０１は、時間ｒｔが０以上であれば、メモリの割り当てを変更すると判断し、そうでなければ、メモリの割り当てを変更しないと判断する。
【００２９】
このように、制御装置１０１は、メモリの割り当て変更にかかる時間ｒａｔを考慮して、メモリの割り当て変更の要否を適切に判断することができ、結果、データ処理にかかる時間を短縮することができる。
【００３０】
なお、メモリの割り当ての変更を判断する方法は、図１Ｂで説明した方法に限らない。例えば、制御装置１０１は、タスク１１１を実行した際に使用されたタスク１１１が用いた処理用領域ｍｐの使用量ｕと、取得した処理用領域ｍｐのサイズおよび転送用領域ｍｔのサイズとに基づいて、短縮時間を算出してもよい。この短縮時間は、使用量ｕに基づき転送用領域ｍｔのサイズを変更した場合にタスク１１１を繰り返し実行する、すなわち、データ処理の実行の際にかかる時間が短縮する時間である。また、この短縮時間は、メモリの割り当て変更にかかる時間ｒａｔを考慮しない際のデータ処理の実行の際にかかる時間が短縮する時間である。例えば、短縮時間は、下記（２）式により求められる。
【００３１】
短縮時間＝（Ｔ１−Ｔ２）×（ｎ−１）  …（２）
【００３２】
ここで、（２）式は、（１）式と、Ｔｂ＝Ｔ１×ｎから下記の様に導くことができる式である。
【００３３】
短縮時間＝Ｔｂ−（Ｔａ−ｒａｔ）
⇔短縮時間＝Ｔ１×ｎ−（Ｔ１＋Ｔ２×（ｎ−１））
⇔短縮時間＝Ｔ１×（ｎ−１）−Ｔ２×（ｎ−１）
⇔短縮時間＝（Ｔ１−Ｔ２）×（ｎ−１）
【００３４】
そして、制御装置１０１は、算出した短縮時間と、メモリの割り当て変更にかかる時間ｒａｔとに基づいて、メモリの割り当てを変更するか否かを判断する。具体的な判断例として、制御装置１０１は、短縮時間とメモリの割り当て変更にかかる時間ｒａｔとを比較して、短縮時間が小さければ、メモリの割り当てを変更すると判断し、そうでなければ、メモリの割り当てを変更しないと判断する。
【００３５】
なお、図１Ａ、図１Ｂの説明では、ＪＶＭがインメモリ型のデータ処理を実行したが、これに限らない。例えば、専用のアプリが、インメモリ型のデータ処理を実行してもよい。そして、専用のアプリは、処理用領域ｍｐと転送用領域ｍｔとの割り当て変更を、一旦終了させないと行えないものとする。この場合、メモリの割り当て変更にかかる時間ｒａｔは、専用アプリの再起動にかかる時間である。次に、制御装置１０１をインメモリ型データ処理システムに適用した場合の例について、図２を用いて説明する。
【００３６】
図２は、インメモリ型データ処理システム２００の構成例を示す説明図である。インメモリ型データ処理システム２００は、マスタマシン２０１と、スレーブマシン２０２−１〜ｍと、クライアント端末２０３とを有する。マスタマシン２０１と、スレーブマシン２０２−１〜ｍとは、ネットワーク２１１によりそれぞれ接続する。また、マスタマシン２０１とクライアント端末２０３とは、ネットワーク２１２により接続する。ここで、マスタマシン２０１は、図１Ａで示した制御装置１０１に相当する。また、スレーブマシン２０２−１〜ｍは、図１Ａで示した実行装置１０２に相当する。
【００３７】
マスタマシン２０１は、インメモリ型データ処理システム２００を制御するコンピュータである。スレーブマシン２０２−１〜ｍは、マスタマシン２０１の指示に従って、タスク１１１を実行するコンピュータである。クライアント端末２０３は、インメモリ型データ処理システム２００を利用する利用者が操作するコンピュータである。
【００３８】
次に、インメモリ型データ処理システム２００に含まれるコンピュータのハードウェアとして、マスタマシン２０１のハードウェア構成例を図３で示す。スレーブマシン２０２のハードウェア構成は、マスタマシン２０１のハードウェア構成と同様であるため、説明を省略する。
【００３９】
（マスタマシン２０１のハードウェア）
図３は、マスタマシン２０１のハードウェア構成例を示す説明図である。図３において、マスタマシン２０１は、ＣＰＵ３０１と、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、を含む。また、マスタマシン２０１は、ディスクドライブ３０４およびディスク３０５と、通信インターフェース３０６と、を含む。また、ＣＰＵ３０１〜ディスクドライブ３０４、通信インターフェース３０６はバス３０７によってそれぞれ接続される。
【００４０】
ＣＰＵ３０１は、マスタマシン２０１の全体の制御を司る演算処理装置である。ＣＰＵ３０１は、複数のプロセッサコアを有してもよい。
【００４１】
ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される揮発性メモリである。
【００４２】
ディスクドライブ３０４は、ＣＰＵ３０１の制御に従ってディスク３０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ３０４には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ３０４が磁気ディスクドライブである場合、ディスク３０５には、磁気ディスクを採用することができる。また、ディスクドライブ３０４が光ディスクドライブである場合、ディスク３０５には、光ディスクを採用することができる。また、ディスクドライブ３０４がソリッドステートドライブである場合、ディスク３０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００４３】
通信インターフェース３０６は、ネットワーク２１１、２１２と内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース３０６は、通信回線を通じてネットワーク２１１、２１２を介して他の装置に接続される。通信インターフェース３０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００４４】
また、インメモリ型データ処理システム２００の管理者が、マスタマシン２０１を直接操作する場合、マスタマシン２０１は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。また、クライアント端末２０３も、マスタマシン２０１が有するハードウェアと同等のハードウェアと、ディスプレイ、キーボード、マウスといったハードウェアとを有する。
【００４５】
（マスタマシン２０１の機能構成例）
図４は、マスタマシン２０１の機能構成例を示すブロック図である。マスタマシン２０１は、制御部４００を有する。制御部４００は、取得部４０１と、判定部４０２と、算出部４０３と、判断部４０４と、割り当て変更部４０５とを含む。制御部４００は、記憶装置に記憶されたプログラムをＣＰＵ３０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、ディスク３０５などである。また、各部の処理結果は、ＣＰＵ３０１のレジスタや、ＣＰＵ３０１のキャッシュメモリ、ＲＡＭ３０３等に格納される。
【００４６】
以下に、単一マシンがデータ処理を行う場合と、複数マシンがデータ処理を行う場合とに分けて各部の説明を行う。ここで、データ処理を単一マシンが行うか複数マシンが行うかについては、例えば、インメモリ型データ処理システム２００によって決め打ちでもよいし、データ処理を行うアプリによって決め打ちでもよい。または、マスタマシン２０１は、スレーブマシン２０２−１〜ｍの負荷状況に基づいて、データ処理を単一マシンが行うか複数マシンが行うか決定してもよい。例えば、データ処理を行うアプリが複数マシンで行うことが可能であるとする。そして、スレーブマシン２０２−１〜ｍの負荷がほぼ均等であれば、マスタマシン２０１は、データ処理をスレーブマシン２０２−１〜ｍに行わせると決定してもよい。または、マスタマシン２０１は、スレーブマシン２０２−１〜ｍのうち他と比べて負荷が少ない１つのスレーブマシン２０２に、データ処理を行わせると決定してもよい。
【００４７】
まず、単一マシンがデータ処理を行う場合の各部の説明を行う。取得部４０１は、スレーブマシン２０２の処理用領域ｍｐのサイズおよび転送用領域ｍｔのサイズを取得する。
【００４８】
判定部４０２は、タスク１１１の実行履歴に基づいて、タスク１１１の実行中にメモリが有する記憶領域とは異なる他の記憶領域にタスク１１１の実行結果を書き出したか否かを判定する。メモリが有する記憶領域とは異なる他の記憶領域とは、例えば、スレーブマシン２０２が有するＲＡＭとは異なるディスクの記憶領域である。また、他の記憶領域は、スレーブマシン２０２がアクセス可能な、ディスク以外の外部の記憶装置でもよい。タスク１１１の実行履歴には、転送用領域ｍｔにタスク１１１の実行結果が載りきれずにディスクへ書き出したデータ量が記載されている。従って、判定部４０２は、例えば、タスク１１１の実行履歴に、転送用領域ｍｔにタスク１１１の実行結果が載りきれずにディスクへ書き出したデータ量が０より大きければ、他の記憶領域としてディスクにタスク１１１の実行結果を書き出したと判定する。
【００４９】
算出部４０３は、タスク１１１を実行した際に使用されたタスク１１１が用いた処理用領域ｍｐの使用量ｕと、取得部４０１が取得した処理用領域ｍｐのサイズおよび転送用領域ｍｔのサイズとに基づいて、短縮時間を算出する。ここで、使用量ｕは、１回目のタスクを実行した後であれば、１回目のタスクを実行した際の使用量である。また、１からｎ−１の間のｘ回目のタスクを実行した後であれば、使用量ｕは、ｘ回目のタスクを実行した際の使用量でもよいし、１回目のタスクを実行した際の使用量からｘ回目のタスクを実行した際の使用量までの平均値でもよい。また、算出部４０３は、他の記憶領域にタスク１１１の実行結果を書き出したと判定部４０２が判定した場合に、短縮時間を算出してもよい。
【００５０】
また、算出部４０３は、タスク１１１を実行した際にかかった時間Ｔ１に基づいて、実行時間Ｔｂを算出するとともに、時間Ｔ１と、使用量ｕと、時間ｒａｔと、処理用領域ｍｐのサイズおよび転送用領域ｍｔのサイズとに基づいて、実行時間Ｔａを算出してもよい。具体的な算出例は、図１Ｂで説明したとおりである。
【００５１】
また、算出部４０３は、第３の時間として、使用量に基づき転送用領域ｍｔのサイズを変更した場合のタスク１１１を繰り返し実行する際にかかる時間とを算出してもよい。具体的には、算出部４０３は、時間Ｔ１と、タスク１１１を実行した際に使用されたタスク１１１が用いた処理用領域ｍｐの使用量と、取得した処理用領域ｍｐおよび転送用領域ｍｔのサイズとに基づいて、第３の時間を算出してもよい。第３の時間は、図１Ｂのグラフ１１２では、Ｔ１＋Ｔ２×（ｎ−１）、すなわち、Ｔａ−ｒａｔに相当する。
【００５２】
判断部４０４は、算出部４０３が算出した短縮時間と、メモリの割り当て変更にかかる時間ｒａｔとに基づいて、メモリの割り当てを変更するか否かを判断する。
【００５３】
また、判断部４０４は、実行時間Ｔｂから実行時間Ｔａを減じた時間ｒｔに基づいて、メモリの割り当てを変更するか否かを判断してもよい。具体的には、判断部４０４は、時間ｒｔが０以上であれば、メモリの割り当てを変更すると判断し、そうでなければ、メモリの割り当てを変更しないと判断する。
【００５４】
また、判断部４０４は、実行時間Ｔｂから第３の時間を減じた時間と、メモリの割り当て変更にかかる時間ｒａｔとの比較結果に基づいて、メモリの割り当てを変更するか否かを判断してもよい。実行時間Ｔｂから第３の時間を減じた時間は、（Ｔ１−Ｔ２）×（ｎ−１）に相当する。例えば、判断部４０４は、実行時間Ｔｂから第３の時間を減じた時間が時間ｒａｔ以上であれば、メモリの割り当てを変更すると判断し、そうでなければ、メモリの割り当てを変更しないと判断する。
【００５５】
割り当て変更部４０５は、判断部４０４がメモリの割り当てを変更すると判断した場合に、スレーブマシン２０２のメモリ割り当てを変更する。具体的には、割り当て変更部４０５は、スレーブマシン２０２上で動作するＪＶＭを停止させ、ＪＶＭのメモリを設定し、ＪＶＭを再起動させる。
【００５６】
次に、複数マシンがデータ処理を行う場合の各部の説明を行う。まず、複数マシンの場合、スレーブマシン２０２−１〜ｍの各々が、各々のスレーブマシン２０２の処理用領域ｍｐを用いてタスク１１１を実行する。ここで、処理用領域ｍｐは、各々のスレーブマシン２０２の間で同一のサイズとなる。そして、各々のスレーブマシン２０２は、スレーブマシン２０２−１〜ｍがタスク１１１を完了させた後に、各々のスレーブマシン２０２の転送用領域ｍｔを用いて、各々のコンピュータの間でタスク１１１の実行結果を転送する転送処理を実行する。ここで、転送用領域ｍｔは、各々のスレーブマシン２０２の間で同一のサイズとなる。そして、各々のスレーブマシン２０２は、転送された実行結果に基づいてタスク１１１を再び実行する。
【００５７】
取得部４０１は、スレーブマシン２０２−１〜ｍのうちのいずれかのスレーブマシン２０２から、処理用領域ｍｐのサイズおよび転送用領域ｍｔのサイズを取得する。
【００５８】
判定部４０２は、スレーブマシン２０２−１〜ｍのうちのいずれかがタスク１１１の実行中にいずれかが有するメモリが有する記憶領域とは異なる他の記憶領域にタスク１１１の実行結果を書き出したか否かを判定する。ここで、判定部４０２は、各々のスレーブマシン２０２のタスク１１１の実行履歴に基づき、スレーブマシン２０２−１〜ｍのどれか１つでも他の記憶領域に実行結果を書き出していれば、他の記憶領域にタスク１１１の実行結果を書き出したと判定する。
【００５９】
そして、判定部４０２がいずれかのスレーブマシン２０２がタスク１１１の実行結果を当該他の記憶領域に書き出したと判定したとする。この場合、算出部４０３は、タスク１１１を実行した際に使用されたタスク１１１が用いた処理用領域ｍｐの使用量と、取得した処理用領域ｍｐおよび転送用領域ｍｔのサイズとに基づいて、短縮時間を算出する。ここでの短縮時間は、メモリの割り当て変更にかかる時間ｒａｔを考慮しない場合における、スレーブマシン２０２−１〜ｍがタスク１１１を繰り返し実行する際にかかる時間が短縮する時間である。
【００６０】
割り当て変更部４０５は、判断部４０４がメモリの割り当てを変更すると判断した場合に、スレーブマシン２０２−１〜ｍ全てのメモリ割り当てを変更する。
【００６１】
（単一マシンがデータ処理を行う場合）
次に、第１の実施例として単一マシンがデータ処理を行う場合について、図５、図６を用いて説明する。
【００６２】
図５は、単一マシンがデータ処理を行う場合のタスク１１１の割り当て例を示す説明図である。図５では、単位マシンとしてスレーブマシン２０２−１がデータ処理を行う場合のタスク１１１の割り当て例を示す。ここで、クライアント端末２０３によりアプリ実行の指示が行われると、マスタマシン２０１は、ジョブ５０１を生成し、１つのスレーブマシン２０２として、スレーブマシン２０２−１に、タスク１１１を割り当てることによりデータ処理を実行する。ここで、データ処理の１回の処理を「ステージ」と呼称する。図５の例では、スレーブマシン２０２−１は、ステージ０としてデータを読み込み、ステージ１〜ｎとしてデータ処理の１回分の処理であるタスク１１１がマスタマシン２０１によって割り当てられ、割り当てられたタスク１１１を実行する。
【００６３】
ここで、図５、図６では、説明の簡略化のため、処理用領域ｍｐ、転送用領域ｍｔと記載した場合、スレーブマシン２０２−１の処理用領域ｍｐ、転送用領域ｍｔであることを示す。また、処理用領域ｍｐ、転送用領域ｍｔの後に、「＿ｓｘ」が付与された符号は、単一マシンにおいて、ステージｘにおける処理用領域ｍｐ、転送用領域ｍｔであることを示す。ｘは０以上ｎ以下の整数である。
【００６４】
データ処理を実行する間、マスタマシン２０１は、転送するデータが転送用領域ｍｔに載りきれずに、スレーブマシン２０２−１のディスクに書き出したか否かを監視する。転送するデータが転送用領域ｍｔに載りきれないと判断した場合、マスタマシン２０１は、ＪＶＭの再立ち上げに伴うメモリの割り当て変更を行ってデータ処理を実行する方法を行う際の実行時間Ｔａを算出する。また、マスタマシン２０１は、メモリの割り当て変更を行わずにデータ処理を実行する方法を行う際の実行時間Ｔｂを算出する。実行時間Ｔａ、Ｔｂの算出例については、図５の説明終了後に説明する。そして、マスタマシン２０１は、実行時間Ｔａ、Ｔｂを比較し、短い時間となった方を選択し、選択した方法によりデータ処理を継続する。
【００６５】
図５では、ステージ１が終わった後にメモリの割り当て変更を行う場合の例を示す。具体的には、マスタマシン２０１は、ステージ１が終わった際に、転送するデータが転送用領域ｍｔ＿ｓ１に載りきれなかったと判断する。そして、マスタマシン２０１は、実行時間Ｔａ、Ｔｂをそれぞれ算出する。図５では、実行時間Ｔａが実行時間Ｔｂより短かったとして、マスタマシン２０１は、スレーブマシン２０２−１に、スレーブマシン２０２−１上で動作するＪＶＭの再立ち上げを行いメモリの割り当て変更を行わせる。メモリの割り当て変更を行った結果、転送用領域ｍｔ＿ｓ２の記憶容量が、転送用領域ｍｔ＿ｓ１の記憶容量よりも増加することになる。
【００６６】
メモリの割り当て変更を行った後、スレーブマシン２０２−１は、転送処理を行った後、ステージ２として、割り当て変更を行った処理用領域ｍｐ＿ｓ２を用いて１回の処理を行い、転送用領域ｍｔ＿ｓ２にデータを格納する。続けて、スレーブマシン２０２−１は、ステージ３〜ｎを実行する。
【００６７】
（単一マシンにおける実行時間の算出例）
次に、単一マシンにおける実行時間Ｔａ、Ｔｂの算出例について説明する。まず、実行時間Ｔａの算出例について示す。マスタマシン２０１は、実行時間Ｔａを算出するため、下記（ｓａ１）式に従って、データ処理におけるステージ２以降の１つのタスク１１１にかかる時間Ｔ２を算出する。
【００６８】
Ｔ２＝Ｔ１×（Ｍ１／Ｍ２）  …（ｓａ１）
【００６９】
ここで、Ｔ１は、データ処理におけるステージ１にかかった時間を示す。なお、単一マシンの例では、１つのステージにかかる時間であるＴ１やＴ２は、該当のステージにおいて、タスク１１１にかかった時間と一致する。また、Ｍ１は、ステージ１におけるＪＶＭの転送用領域ｍｔ＿ｓ１のサイズを示す。また、Ｍ２は、転送用領域ｍｔを変更する際のステージ２以降におけるＪＶＭの転送用領域ｍｔ＿ｓ２のサイズを示す。マスタマシン２０１は、例えば、ｍｔ＿ｓ１のサイズからタスク１１１が使用した使用量を引いた値をＭ１に追加した値を、Ｍ２としてもよい。または、マスタマシン２０１は、ｍｔ＿ｓ１のサイズから使用量を引いた値と、実際にディスク３０５に書き出したデータのサイズとのうち、小さい値をＭ１に追加した値を、Ｍ２としてもよい。なお、（ｓａ１）式は、あくまでも概算であり、実際にステージ２にかかる時間とは異なる場合がある。
【００７０】
そして、マスタマシン２０１は、下記（ｓａ２）式に従って、単一マシンにおける実行時間Ｔａを算出する。
【００７１】
Ｔａ＝Ｔ１＋（Ｔｓ＋Ｔｍ＋Ｔｒ）＋（Ｔ２×（ｎ−１））  …（ｓａ２）
【００７２】
ここで、Ｔｓは、ＪＶＭの停止にかかる時間を示す。Ｔｍは、ＪＶＭのメモリを設定する処理にかかる時間を示す。Ｔｒは、ＪＶＭの再起動にかかる時間を示す。従って、（ｓａ２）式における第２項は、メモリの割り当て変更を行う処理にかかる時間を示す。また、Ｔｓ、Ｔｍ、Ｔｒは、予め実測され、それぞれ固定値として与えられる。
【００７３】
次に、単一マシンにおける実行時間Ｔｂの算出例について示す。マスタマシン２０１は、（ｓｂ１）式に従って、実行時間Ｔｂを算出する。
【００７４】
Ｔｂ＝Ｔ１×ｎ  …（ｓｂ１）
【００７５】
次に、単一マシンにおけるデータ処理のフローチャートについて、図６を用いて説明する。
【００７６】
図６は、単一マシンにおけるデータ処理手順の一例を示すフローチャートである。単一マシンにおけるデータ処理は、１つのスレーブマシン２０２でデータ処理を行う処理である。
【００７７】
マスタマシン２０１は、アプリを実行開始する（ステップＳ６０１）。そして、マスタマシン２０１は、スレーブマシン２０２から処理用領域ｍｐのサイズおよび転送用領域ｍｔのサイズを取得する（ステップＳ６０２）。次に、マスタマシン２０１の指示によって、スレーブマシン２０２は、データ処理に含まれる１回目のタスク１１１を実行する（ステップＳ６０３）。
【００７８】
そして、マスタマシン２０１は、スレーブマシン２０２から１回目のタスク１１１の実行結果を受信した後、スレーブマシン２０２が転送用領域ｍｔにデータが載りきれずにディスクに書き出したか否かを判断する（ステップＳ６０４）。スレーブマシン２０２が転送用領域ｍｔにデータが載りきれずにディスクに書き出した場合（ステップＳ６０４：Ｙｅｓ）、マスタマシン２０１は、メモリの割り当て変更を行う場合の実行時間Ｔａを算出する（ステップＳ６０５）。また、マスタマシン２０１は、メモリの割り当て変更を行わない場合の実行時間Ｔｂを算出する（ステップＳ６０６）。
【００７９】
そして、マスタマシン２０１は、ＴａがＴｂ以下か否かを判断する（ステップＳ６０７）。ＴａがＴｂ以下である場合（ステップＳ６０７：Ｙｅｓ）、マスタマシン２０１がスレーブマシン２０２に指示した後、スレーブマシン２０２は、メモリの割り当てを変更する（ステップＳ６０８）。
【００８０】
ステップＳ６０８の処理終了後、ＴａがＴｂより大きい場合（ステップＳ６０７：Ｎｏ）またはスレーブマシン２０２が転送用領域ｍｔにデータが載りきれずにディスクに書き出していない場合（ステップＳ６０４：Ｎｏ）、マスタマシン２０１の指示によって、スレーブマシン２０２は、２回目以降のタスク１１１を実行する（ステップＳ６０９）。次に、マスタマシン２０１は、タスク１１１をｎ回繰り返したか否かを判断する（ステップＳ６１０）。タスク１１１をｎ回繰り返していない場合（ステップＳ６１０：Ｎｏ）、マスタマシン２０１は、ステップＳ６０９の処理に移行する。なお、スレーブマシン２０２は、ステップＳ６０３の処理によりタスク１１１を１回実行したため、ステップＳ６０９の処理によりタスク１１１をｎ−１回実行することになる。
【００８１】
一方、タスク１１１をｎ回繰り返した場合（ステップＳ６１０：Ｙｅｓ）、マスタマシン２０１は、単一マシンにおけるデータ処理を終了する。ここで、ステップＳ６０５〜Ｓ６０７の各処理では、Ｔａ、Ｔｂを算出した後に、ＴａとＴｂとを比較していたが、これに限らない。例えば、マスタマシン２０１は、ステップＳ６０５〜Ｓ６０７の各処理の代わりに、下記不等式を実行し、不等式が満たされればステップＳ６０７：Ｙｅｓとし、不等式が満たされなければステップＳ６０７：Ｎｏとしてもよい。
【００８２】
Ｔｂ−Ｔａ≧０
【００８３】
そして、Ｔｂ、Ｔａに対し（ｓａ２）式、（ｓｂ１）式を用いると、上記不等式は、下記のように変形することができる。
【００８４】
（Ｔ１×ｎ）−（Ｔ１＋（Ｔｓ＋Ｔｍ＋Ｔｒ）＋（Ｔ２×（ｎ−１）））≧０
⇔（Ｔ１−Ｔ２）×（ｎ−１）−（Ｔｓ＋Ｔｍ＋Ｔｒ）≧０
【００８５】
ここで、（Ｔｓ＋Ｔｍ＋Ｔｒ）は、図１Ｂで示したメモリの割り当て変更にかかる時間ｒａｔに相当する。
【００８６】
（複数マシンが協働してデータ処理を行う場合）
次に、第２の実施例として複数マシンが協働してデータ処理を行う場合について、図７〜図９を用いて説明する。ここで、説明の簡略化のため、スレーブマシン２０２のそれぞれの上で、１つのＪＶＭが動作されるものとする。実際には、スレーブマシン２０２のそれぞれの上で、複数のＪＶＭが動作されてもよい。複数のＪＶＭが動作される場合には、例えば、スレーブマシン２０２のＣＰＵの各コア上で、ＪＶＭが動作するようにしてもよい。
【００８７】
ここで、図７〜図９では、説明の簡略化のため、処理用領域ｍｐ、転送用領域ｍｔと記載した場合、スレーブマシン２０２−１〜ｍのそれぞれの処理用領域ｍｐ、転送用領域ｍｔであることを示す。また、処理用領域ｍｐ、転送用領域ｍｔの後に、「＿ｍｘ」が付与された符号は、複数マシンにおいて、ステージｘにおける処理用領域ｍｐ、転送用領域ｍｔであることを示す。ｘは０以上ｎ以下の整数である。
【００８８】
図７は、複数マシンでデータ処理を行う場合のタスク１１１の割り当て例を示す説明図である。複数マシンの場合、クライアント端末２０３からアプリ実行の指示が行われると、マスタマシン２０１は、ジョブ５０１を生成し、複数のスレーブマシン２０２として、スレーブマシン２０２−１〜ｍにタスク１１１を割り当てることによりデータ処理を実行する。複数マシンの場合、スレーブマシン２０２−１〜ｍが１つのタスク１１１を実行開始してからスレーブマシン２０２−１〜ｍの全てが１つのタスク１１１を終了するまでを、１ステージとする。
【００８９】
本実施の形態では、インメモリ型データ処理システム２００は、ｎステージまで実行するものとする。そして、図７の例では、ステージ１の状態を示す。図７の例では、スレーブマシン２０２−１、ｍが、タスク１１１の実行中に転送用領域ｍｔ＿ｍ１にデータが書ききれず、スレーブマシン２０２−１、ｍそれぞれのディスクに書き出したことを示す。
【００９０】
図８は、複数マシンでデータ処理を行う場合のタスク１１１の実行例を示す説明図である。図８では、複数マシンとしてスレーブマシン２０２−１〜ｍが協働してデータ処理を行う場合の、各ステージのタスク１１１の割り当て例を示す。
【００９１】
図８の例では、時刻ｔ１ｓにステージ１が開始し、スレーブマシン２０２−１〜ｍの全てがタスク１１１を終了させた時刻ｔ１ｅにステージ１が終了する。そして図８の例では、スレーブマシン２０２−１は、時刻ｔ１ｓにタスク１１１の実行を開始し、時刻ｔ１ｅより前にタスク１１１を終了する。また、スレーブマシン２０２−ｍは、時刻ｔ１ｓより後にタスク１１１の実行を開始し、時刻ｔ１ｅにタスク１１１を終了する。図８で示すように、時刻ｔ１ｅまでにスレーブマシン２０２−１〜ｍの全てがタスク１１１を終了させると、スレーブマシン２０２−１〜ｍは、転送処理を実行する。
【００９２】
図８の例では、スレーブマシン２０２−１〜ｍは、時刻ｔ２ｓまでに転送処理を完了させている。そして、時刻ｔ２ｓからステージ２が開始し、スレーブマシン２０２−１〜ｍの全てがタスク１１１を終了させた時刻ｔ２ｅにステージ２が終了する。
【００９３】
（複数マシンにおける実行時間の算出例）
次に、複数マシンにおける実行時間Ｔａ、Ｔｂの算出例について説明する。まず、実行時間Ｔａの算出例について示す。マスタマシン２０１は、実行時間Ｔａを算出するため、下記（ｍａ１）式に従って、データ処理におけるステージ２以降の１つのタスク１１１にかかる時間Ｔ２を算出する。
【００９４】
Ｔ２＝Ｔ１×（Ｍ１／Ｍ２）  …（ｍａ１）
【００９５】
ここで、Ｔ１は、データ処理におけるステージ１にかかった時間を示す。なお、複数マシンの例では、１ステージ内での並列処理を行うため、１つのステージにかかる時間であるＴ１やＴ２は、１タスクの処理時間×マシン台数のような単純計算にはならない。また、Ｍ１は、ステージ１におけるスレーブマシン２０２−１〜ｍ上で動作するＪＶＭの転送用領域ｍｔ＿ｍ１のサイズの総和を示す。同様に、Ｍ２は、転送用領域ｍｔを変更する際のステージ２以降におけるスレーブマシン２０２−１〜ｍ上で動作するＪＶＭの転送用領域ｍｔ＿ｍ２のサイズの総和を示す。マスタマシン２０１は、例えばスレーブマシン２０２−１〜ｍ上で動作するＪＶＭがタスク１１１を実行した際にタスク１１１に使用した使用量を、ｍｔ＿ｍ１のサイズの総和から引いた値を算出する。そして、マスタマシン２０１は、算出して得られた値をＭ１に追加した値を、Ｍ２としてもよい。なお、（ｍａ１）式は、あくまでも概算であり、実際にステージ２にかかる時間とは異なる場合がある。
【００９６】
そして、マスタマシン２０１は、下記（ｍａ２）式に従って、単一マシンにおける実行時間Ｔａを算出する。
【００９７】
Ｔａ＝Ｔ１＋（Ｔｓ＋Ｔｍ＋Ｔｒ）＋（Ｔ２×（ｎ−１））  …（ｍａ２）
【００９８】
ここで、Ｔｓは、ＪＶＭの停止にかかる時間を示す。Ｔｍは、ＪＶＭのメモリを設定する処理にかかる時間を示す。Ｔｒは、ＪＶＭの再起動にかかる時間を示す。従って、（ｍａ２）式における第２項は、メモリの割り当て変更を行う処理にかかる時間を示す。また、Ｔｓ、Ｔｍ、Ｔｒは、予め実測され、それぞれ固定値として与えられる。
【００９９】
次に、複数マシンにおける実行時間Ｔｂの算出例について示す。マスタマシン２０１は、（ｍｂ１）式に従って、実行時間Ｔｂを算出する。
【０１００】
Ｔｂ＝Ｔ１×ｎ  …（ｍｂ１）
【０１０１】
次に、複数マシンにおけるデータ処理のフローチャートについて、図９を用いて説明する。
【０１０２】
図９は、複数マシンにおけるデータ処理手順の一例を示すフローチャートである。複数マシンにおけるデータ処理は、複数のスレーブマシン２０２でデータ処理を行う処理である。
【０１０３】
マスタマシン２０１は、アプリを実行開始する（ステップＳ９０１）。そして、マスタマシン２０１は、スレーブマシン２０２−１〜ｍのいずれかから処理用領域ｍｐのサイズおよび転送用領域ｍｔのサイズを取得する（ステップＳ９０２）。次に、マスタマシン２０１の指示によって、スレーブマシン２０２−１〜ｍは、データ処理に含まれる１回目のタスク１１１を実行する（ステップＳ９０３）。
【０１０４】
そして、マスタマシン２０１は、スレーブマシン２０２−１〜ｍの全てから１回目のタスク１１１の実行結果を受信した後、転送用領域ｍｔにデータが載りきれずにディスクに書き出したスレーブマシン２０２があるか否かを判断する（ステップＳ９０４）。転送用領域ｍｔにデータが載りきれずにディスクに書き出したスレーブマシン２０２がある場合（ステップＳ９０４：Ｙｅｓ）、マスタマシン２０１は、スレーブマシン２０２−１〜ｍの全てに対してメモリの割り当て変更を行う場合の実行時間Ｔａを算出する（ステップＳ９０５）。また、マスタマシン２０１は、メモリの割り当て変更を行わない場合の実行時間Ｔｂを算出する（ステップＳ９０６）。
【０１０５】
そして、マスタマシン２０１は、ＴａがＴｂ以下か否かを判断する（ステップＳ９０７）。ＴａがＴｂ以下である場合（ステップＳ９０７：Ｙｅｓ）、マスタマシン２０１がスレーブマシン２０２−１〜ｍに指示した後、スレーブマシン２０２−１〜ｍは、メモリの割り当てを変更する（ステップＳ９０８）。
【０１０６】
ステップＳ９０８の処理終了後、ＴａがＴｂより大きい場合（ステップＳ９０７：Ｎｏ）または転送用領域ｍｔにデータが載りきれずにディスクに書き出したスレーブマシン２０２がない場合（ステップＳ９０４：Ｎｏ）、マスタマシン２０１の指示によって、スレーブマシン２０２−１〜ｍは、２回目以降のタスク１１１を実行する（ステップＳ９０９）。次に、マスタマシン２０１は、タスク１１１をｎ回繰り返したか否かを判断する（ステップＳ９１０）。タスク１１１をｎ回繰り返していない場合（ステップＳ９１０：Ｎｏ）、マスタマシン２０１は、ステップＳ９０９の処理に移行する。なお、スレーブマシン２０２−１〜ｍは、ステップＳ９０３の処理によりタスク１１１を１回実行したため、ステップＳ９０９の処理によりタスク１１１をｎ−１回実行することになる。
【０１０７】
一方、タスク１１１をｎ回繰り返した場合（ステップＳ９１０：Ｙｅｓ）、マスタマシン２０１は、複数マシンにおけるデータ処理を終了する。ここで、単一マシンがデータ処理を行う場合と同様に、複数マシンが協働してデータ処理を行う場合でも、ステップＳ９０５〜Ｓ９０７の各処理では、Ｔａ、Ｔｂを算出した後に、ＴａとＴｂとを比較していたが、これに限らない。例えば、マスタマシン２０１は、ステップＳ９０５〜Ｓ９０７の各処理の代わりに、下記不等式を実行し、不等式が満たされればステップＳ９０７：Ｙｅｓとし、不等式が満たされなければステップＳ９０７：Ｎｏとしてもよい。
【０１０８】
Ｔｂ−Ｔａ≧０
【０１０９】
上記不等式の変形は、単一マシンがデータ処理を行う場合と同様であるため、説明を省略する。
【０１１０】
以上説明したように、マスタマシン２０１は、インメモリ型のデータ処理のタスクの１回目を実行した際に、使用量ｕに基づき転送用領域を増やすことで短縮する時間と、メモリの割り当て変更にかかる時間ｒａｔとから、メモリの割り当て変更の要否を判断する。また、マスタマシン２０１は、実行時間Ｔｂから実行時間Ｔａを減じた時間ｒｔに基づいて、メモリの割り当て変更の要否を判断してもよい。これにより、マスタマシン２０１は、メモリの割り当て変更にかかる時間ｒａｔを考慮して、メモリの割り当て変更の要否を適切に判断することができ、結果、データ処理にかかる時間を短縮することができる。
【０１１１】
また、マスタマシン２０１は、タスク１１１の実行中にディスクにタスク１１１の実行結果を書き出したと判定した場合に、時間ｒｔを算出してもよい。これにより、タスク１１１の実行中にディスクにタスク１１１の実行結果を書き出したときに限り時間ｒｔを算出することになるため、マスタマシン２０１にかかる負荷を抑えることができる。
【０１１２】
また、マスタマシン２０１は、複数のスレーブマシン２０２の各々にタスク１１１を実行させ、複数のスレーブマシン２０２の全てがタスク１１１の完了後に、複数のスレーブマシン２０２の各々に転送処理を実行させ、再び、タスク１１１を実行させてもよい。これにより、インメモリ型データ処理システム２００は、インメモリ型のデータ処理を、複数のスレーブマシン２０２を用いて分散しつつ並列に実行することができる。
【０１１３】
また、マスタマシン２０１は、複数マシンがデータ処理を行う場合、複数のスレーブマシン２０２のいずれかがタスク１１１の実行中にディスクにタスク１１１の実行結果を書き出した場合に、短縮時間を算出してもよい。これにより、複数マシンがデータ処理を行う場合でも、タスク１１１の実行中にディスクにタスク１１１の実行結果を書き出したスレーブマシン２０２がなければ短縮時間を算出しなくてよいため、マスタマシン２０１にかかる負荷を抑えることができる。
【０１１４】
また、マスタマシン２０１は、メモリの割り当てに要する時間を考慮して、メモリ割り当て変更の要否を判断することができる。また、転送用領域でデータあふれが起きる際に発生する処理速度の低下を抑制することができる。
【０１１５】
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１１６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１１７】
（付記１）コンピュータに、
メモリが有する記憶領域から割り当てられた、タスクを繰り返し実行する際に前記タスクによって用いられる処理用領域のサイズおよび前記タスクの実行結果を転送する転送用領域のサイズを取得し、
前記タスクを実行した際に使用された前記タスクが用いた前記処理用領域の使用量と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合に前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、
算出した前記短縮時間と、前記メモリの割り当て変更にかかる時間とに基づいて、前記メモリの割り当てを変更するか否かを判断する、
処理を実行させることを特徴とする制御プログラム。
【０１１８】
（付記２）前記コンピュータに、
前記タスクの実行履歴に基づいて、前記タスクの実行中に前記メモリが有する記憶領域とは異なる他の記憶領域に前記タスクの実行結果を書き出したか否かを判定する、処理を実行させ、
前記算出する処理は、
前記タスクの実行結果を前記他の記憶領域に書き出したと判定した場合、前記使用量と、取得した前記処理用領域のサイズと前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合に前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出する、
ことを特徴とする付記１に記載の制御プログラム。
【０１１９】
（付記３）前記算出する処理は、
前記タスクを実行した際にかかった時間に基づいて、前記サイズを変更しない場合の前記タスクを繰り返し実行する際にかかる第１の時間を算出するとともに、前記タスクを実行した際にかかった時間と、前記使用量と、前記メモリの割り当て変更にかかる時間と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合の前記タスクを繰り返し実行する際にかかる第２の時間を算出し、
前記判断する処理は、
算出した前記第１の時間から前記第２の時間を減ずることにより得られる時間に基づいて、前記メモリの割り当てを変更するか否かを判断する、
ことを特徴とする付記２に記載の制御プログラム。
【０１２０】
（付記４）前記コンピュータに接続する複数のコンピュータの各々のコンピュータが、前記各々のコンピュータのメモリが有する記憶領域のうちの前記各々のコンピュータの間で同一のサイズとなる処理用領域を用いて前記タスクを実行し、前記複数のコンピュータが前記タスクを完了させた後に当該記憶領域のうちの前記各々のコンピュータの間で同一のサイズとなる転送用領域を用いて前記各々のコンピュータの間で前記タスクの実行結果を転送し、転送された前記実行結果に基づいて前記タスクを再び実行する、
ことを特徴とする付記２または３に記載の制御プログラム。
【０１２１】
（付記５）前記取得する処理は、
前記複数のコンピュータのうちのいずれかのコンピュータから、当該処理用領域のサイズおよび当該転送用領域のサイズを取得し、
前記判定する処理は、
前記各々のコンピュータの前記タスクの実行履歴に基づいて、前記複数のコンピュータのうちのいずれかのコンピュータが前記タスクの実行中に当該いずれかのコンピュータが有するメモリが有する記憶領域とは異なる他の記憶領域に前記タスクの実行結果を書き出したか否かを判定し、
前記算出する処理は、
当該いずれかのコンピュータが前記タスクの実行結果を当該他の記憶領域に書き出したと判定した場合、前記タスクを実行した際に使用された前記タスクが用いた当該処理用領域の使用量と、取得した当該処理用領域のサイズおよび当該転送用領域のサイズとに基づいて、前記複数のコンピュータが前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、
前記判断する処理は、
算出した前記短縮時間と、前記メモリの割り当て変更にかかる時間とに基づいて、前記メモリの割り当てを変更するか否かを判断する、
ことを特徴とする付記４に記載の制御プログラム。
【０１２２】
（付記６）前記算出する処理は、
前記タスクを実行した際にかかった時間に基づいて、前記サイズを変更しない場合の前記タスクを繰り返し実行する際にかかる第１の時間を算出するとともに、前記タスクを実行した際にかかった時間と、前記使用量と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合の前記タスクを繰り返し実行する際にかかる第３の時間を算出し、
前記判断する処理は、
前記第１の時間から前記第３の時間を減じた時間と、前記メモリの割り当て変更にかかる時間との比較結果に基づいて、前記メモリの割り当てを変更するか否かを判断する、
ことを特徴とする付記１〜５のいずれか一つに記載の制御プログラム。
【０１２３】
（付記７）メモリが有する記憶領域から割り当てられた、タスクを繰り返し実行する際に前記タスクによって用いられる処理用領域のサイズおよび前記タスクの実行結果を転送する転送用領域のサイズを取得し、
前記タスクを実行した際に使用された前記タスクが用いた前記処理用領域の使用量と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合に前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、
算出した前記短縮時間と、前記メモリの割り当て変更にかかる時間とに基づいて、前記メモリの割り当てを変更するか否かを判断する、
制御部を有することを特徴とする制御装置。
【０１２４】
（付記８）コンピュータが、
メモリが有する記憶領域から割り当てられた、タスクを繰り返し実行する際に前記タスクによって用いられる処理用領域のサイズおよび前記タスクの実行結果を転送する転送用領域のサイズを取得し、
前記タスクを実行した際に使用された前記タスクが用いた前記処理用領域の使用量と、取得した前記処理用領域のサイズおよび前記転送用領域のサイズとに基づいて、前記使用量に基づき前記転送用領域のサイズを変更した場合に前記タスクを繰り返し実行する際にかかる時間が短縮する短縮時間を算出し、
算出した前記短縮時間と、前記メモリの割り当て変更にかかる時間とに基づいて、前記メモリの割り当てを変更するか否かを判断する、
処理を実行することを特徴とする制御方法。
【符号の説明】
【０１２５】
ｍｐ  処理用領域
ｍｔ  転送用領域
ｕ  使用量
Ｔ１、Ｔ２  実行時間
１０１  制御装置
１０２  実行装置
１１１  タスク
２０１  マスタマシン
２０２−１〜ｍ  スレーブマシン
４００  制御部
４０１  取得部
４０２  判定部
４０３  算出部
４０４  判断部
４０５  割り当て変更部
【図１Ａ】
0006485343.tif 000002
【図１Ｂ】
0006485343.tif 000003
【図２】
0006485343.tif 000004
【図３】
0006485343.tif 000005
【図４】
0006485343.tif 000006
【図５】
0006485343.tif 000007
【図６】
0006485343.tif 000008
【図７】
0006485343.tif 000009
【図８】
0006485343.tif 000010
【図９】
0006485343.tif 000011