(57)【要約】【課題】タスクの処理負荷に応じた実行方法で、タスクを実行すること。【解決手段】計算機３は、タスクを有するアプリケーションを実行する。計算機３は、実行されたタスクの処理負荷を予測する。そして、計算機３は、タスクの処理負荷とタスクの実行方式とが対応付けられた対応情報を参照して、予測された処理負荷に応じたタスクの実行方式を選択する。そして、計算機３は、選択された実行方式でタスクが実行されるように制御する。【選択図】図２
2014016966.tif 000002
【特許請求の範囲】
【請求項１】
タスクを有するアプリケーションを実行する実行部と、
前記実行部により実行されたタスクの処理負荷を予測する予測部と、
前記タスクの処理負荷と、前記タスクの実行方式とが対応付けられた対応情報を参照して、前記予測部により予測された処理負荷に応じた前記タスクの実行方式を選択する選択部と、
前記選択部により選択された実行方式で前記実行部により前記タスクが実行されるように制御する実行制御部と、
を有する情報処理装置。
【請求項２】
前記実行部は、複数のスレッドのそれぞれが複数のタスクのそれぞれを生成し実行するアプリケーションを実行し、
前記選択部は、前記予測部により予測された処理負荷が第１の基準を超えたタスクについては、該タスクを生成したスレッドが、所定の実行ポイントで該タスクを実行する実行方式を選択する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記選択部は、前記予測部により予測された処理負荷が第１の基準以下であり且つ該第１の基準よりも小さい第２の基準より大きいタスクについては、該タスクを生成したスレッドとは異なるスレッドが、所定の実行ポイントで該タスクを実行する実行方式を選択する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記選択部は、前記予測部により予測された処理負荷が第２の基準以下であるタスクについては、該タスクを生成したスレッドが、該タスクが生成されたタイミングで該タスクを実行する実行方式を選択する
ことを特徴とする請求項２または３に記載の情報処理装置。
【請求項５】
前記実行部は、複数のスレッドのそれぞれが複数のタスクのそれぞれを生成し、生成したタスクを所定の記憶領域に格納し、所定のタイミングで前記所定の記憶領域からタスクを取得し、取得したタスクを実行するアプリケーションを実行し、
前記選択部は、前記所定の記憶領域に格納されたタスクの数が所定数以上である場合には、タスクを生成したスレッドが、前記所定の記憶領域に格納されたタスクの数が所定数未満となったときに、生成したタスクを前記所定の記憶領域に格納し、所定の実行ポイントで前記所定の記憶領域からタスクを取得して実行する実行方式を選択する
ことを特徴とする請求項２〜４のいずれか１つに記載の情報処理装置。
【請求項６】
前記予測部は、前記実行部によりタスクが実行されるたびに、該タスクの処理負荷を予測し、
前記選択部は、前記予測部によりタスクの処理負荷が予測されるたびに、該タスクの実行方式を選択し、
前記実行制御部は、前記実行部により前記アプリケーションが実行されている間に、前記選択部によりタスクの実行方式が選択されるたびに、選択された実行方式で前記実行部により前記タスクが実行されるように制御する
ことを特徴とする請求項１〜５のいずれか１つに記載の情報処理装置。
【請求項７】
コンピュータに、
タスクを有するアプリケーションを実行し、
実行されたタスクの処理負荷を予測し、
前記タスクの処理負荷と、前記タスクの実行方式とが対応付けられた対応情報を参照して、予測された処理負荷に応じた前記タスクの実行方式を選択し、
選択された実行方式で前記タスクが実行されるように制御する
各処理を実行させることを特徴とする実行プログラム。
【請求項８】
コンピュータが、
タスクを有するアプリケーションを実行し、
実行されたタスクの処理負荷を予測し、
前記タスクの処理負荷と、前記タスクの実行方式とが対応付けられた対応情報を参照して、予測された処理負荷に応じた前記タスクの実行方式を選択し、
選択された実行方式で前記タスクが実行されるように制御する
各処理を実行することを特徴とする実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、実行プログラムおよび実行方法に関する。
【背景技術】
【０００２】
スーパーコンピュータと呼ばれる膨大なデータの処理を高速で実行するコンピュータがある。スーパーコンピュータでは、膨大なデータの処理を高速で実行するために、複数のプロセッサを用いて処理を行うマルチコアプロセッサが用いられる。
【０００３】
また、スーパーコンピュータでは、より一層の処理の高速化を図る目的で、ＯｐｅｎＭＰ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ  Ｖｅｒｓｉｏｎ  ３．０（ＯｐｅｎＭＰ３．０）のアプリケーションが実行される。ＯｐｅｎＭＰ３．０では、３．０以前のバージョンのＯｐｅｎＭＰと比較して、新たにタスクと呼ばれるタスク構文についても記述が可能となった。ＯｐｅｎＭＰ３．０では、並列処理を行わせたいタスクを開発者などがソースコードに記述することにより、所望のタスクに並列処理を行わせることが可能となる。ＯｐｅｎＭＰ３．０では、複数のスレッドが生成され、複数のタスクのそれぞれが、複数のスレッドで並列処理されて、処理の高速化が図られる。
【０００４】
また、アプリケーションの実行時にプロファイル情報を生成し、生成したプロファイル情報を用いて、タスクを生成するか否かを判定する技術がある（例えば、非特許文献１参照）。かかる技術では、ｃｕｔ−ｏｆｆの手法を用いて、生成されるタスクの数を減少させることで、ランタイムシステムのオーバヘッドを抑制する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“Ａｎ  ａｄａｐｔｉｖｅ  ｃｕｔ−ｏｆｆ  ｆｏｒ  ｔａｓｋ  ｐａｒａｌｌｅｌｉｓｍ”（Ａｌｅｊａｎｄｒｏ  Ｄｕｒａｎ，  Ｊｕｌｉｔａ  Ｃｏｒｂａｌａｎ，  ａｎｄ  Ｅｄｕａｒｄ  Ａｙｇｕａｄｅ）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記技術では、子タスクを多く生成するタスクであれ、処理の実行に時間がかかるタスクであれ、タスクが常に所定の方法で実行される。このため、上記技術では、タスクの処理負荷に応じた実行方法で、タスクを実行することができないという問題がある。
【０００７】
１つの側面では、本発明は、タスクの処理負荷に応じた実行方法で、タスクを実行することを目的とする。
【課題を解決するための手段】
【０００８】
１態様の情報処理装置は、実行部と、予測部と、選択部と、実行制御部とを有する。実行部は、タスクを有するアプリケーションを実行する。予測部は、実行部により実行されたタスクの処理負荷を予測する。選択部は、タスクの処理負荷とタスクの実行方式とが対応付けられた対応情報を参照し、予測部により予測された処理負荷に応じたタスクの実行方式を選択する。実行制御部は、選択部により選択された実行方式で実行部によりタスクが実行されるように制御する。
【発明の効果】
【０００９】
１つの側面では、タスクの処理負荷に応じた実行方法で、タスクを実行することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係るシステムの構成の一例を示す図である。
【図２】図２は、実施例１に係る計算機の機能的な構成の一例を示す図である。
【図３】図３は、アプリケーションのソースコードの一例を示す図である。
【図４Ａ】図４Ａは、子タスクの生成数を説明するための図である。
【図４Ｂ】図４Ｂは、子タスクの生成数を説明するための図である。
【図５】図５は、タスク情報のデータ構造の一例を示す図である。
【図６】図６は、プロファイル情報のデータ構造の一例を示す図である。
【図７】図７は、スレッドにより実行されるタスクの実行形態の一例を説明するための図である。
【図８】図８は、タスクの「時間コスト」が示す処理負荷の度合いを算出する方法の一例を説明するための図である。
【図９】図９は、子タスクの数の多さを示す度合いを算出する方法の一例を説明するための図である。
【図１０】図１０は、タスクの処理負荷を予測する方法の一例を説明するための図である。
【図１１】図１１は、タスクの実行方式を選択する方法の一例を説明するための図である。
【図１２】図１２は、実行処理の手順を示すフローチャートである。
【図１３】図１３は、実行プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する情報処理装置、実行プログラムおよび実行方法の実施例を図面に基づいて詳細に説明する。なお、実施例は開示の技術を限定するものではない。
【実施例１】
【００１２】
実施例１に係る情報処理装置を有するシステムについて説明する。図１は、実施例１に係るシステムの構成の一例を示す図である。図１の例に示すシステム１は、端末２および計算機３を有する。計算機３は、情報処理装置の一例である。なお、端末２および計算機３の台数は、任意の台数を採用できる。端末２と計算機３とはネットワークを介して接続されている。すなわち、端末２と、計算機３とは、互いに通信可能である。なお、端末２と計算機３とは、有線に限らず、無線などの任意に通信網を介して接続することができる。
【００１３】
端末２は、キーボードやマウスなどの受付部、および、液晶ディスプレイなどの表示部を有する。端末２の受付部は、ユーザからアプリケーションを実行する指示を受け付ける。そして、端末２は、受け付けた指示を計算機３に送信する。また、端末２の表示部は、計算機３から送信されたアプリケーションの実行結果などを表示する。
【００１４】
図２は、実施例１に係る計算機の機能的な構成の一例を示す図である。図２に示すように、計算機３は、入力部４、出力部５、通信部６、記憶部７、制御部８を有する。
【００１５】
入力部４は、各種情報を入力する。例えば、入力部４は、ユーザから、アプリケーションを実行する指示を受け付けて、受け付けた指示を制御部８に入力する。入力部４のデバイスの一例としては、マウスやキーボードなどのユーザの操作を受け付けるデバイスなどが挙げられる。
【００１６】
出力部５は、各種の情報を出力する。例えば、出力部５は、後述の実行部８ａにより実行されたアプリケーションの実行結果を表示する。出力部５のデバイスの一例としては、液晶ディスプレイなどが挙げられる。
【００１７】
通信部６は、端末２との通信を行うためのインターフェースである。例えば、通信部６は、端末２からアプリケーションを実行する指示を受信した場合には、受信した指示を制御部８へ送信する。また、通信部６は、後述する実行部８ａにより実行されたアプリケーションの実行結果を受信した場合には、受信した実行結果を出力部５や端末２へ送信する。
【００１８】
記憶部７は、各種の情報を記憶する。例えば、記憶部７は、アプリケーション７ａ、プロファイラ７ｂ、ランタイムライブラリ７ｃ、プロファイル情報７ｅを記憶する。
【００１９】
アプリケーション７ａは、ＯｐｅｎＭＰ３．０を用いて所定の言語で記述されたソフトウェアである。アプリケーション７ａには、タスクの記述がある。したがって、アプリケーション７ａが後述の実行部８ａにより実行されることで、スレッドによってタスクが実行される。図３は、アプリケーションのソースコードの一例を示す図である。図３の例が示すソースコードには、タスク９ａのコードおよびタスク９ｂのコードが記述されている。図３の例のソースコードが示すアプリケーション７ａでは、「ｌｅｆｔ」の値が真である場合に、タスク９ａが実行される。また、図３の例のソースコードが示すアプリケーション７ａでは、「ｒｉｇｈｔ」の値が真である場合に、タスク９ｂが実行される。図３の例のソースコードが示すアプリケーション７ａでは、タスク９ａおよびタスク９ｂによって、再帰的にｔｒａｖｅｒｓｅ関数が呼び出される。以下、アプリケーション７ａがＯｐｅｎＭＰ３．０のソフトウェアである場合について説明するが、アプリケーション７ａとして、様々な種類のソフトウェアを採用できる。
【００２０】
プロファイラ７ｂは、アプリケーションの解析を行うソフトウェアである。例えば、プロファイラ７ｂは、アプリケーション７ａとともに実行されることで、アプリケーション７ａに含まれるタスクの各種情報を計測し、計測結果を後述のプロファイル情報７ｅに登録する。計測されるタスクの情報の一例としては、タスクが実行されてからタスクの実行が完了するまでの時間が挙げられる。なお、以下の説明では、かかる時間を、「時間コスト」と表記する場合がある。また、他の例としては、アプリケーション７ａに含まれるタスクが実行された場合に、実行されたタスクによって生成される子タスクの数、すなわち、子タスクの生成数が挙げられる。図４Ａおよび図４Ｂは、子タスクの生成数を説明するための図である。図４Ａの例は、タスク１０が実行された場合に、タスク１０によって生成されるタスク１１、１２の数が「２」である場合を示す。また、図４Ａの例では、タスク１１によって生成されるタスク１３、１４の数が「２」であり、タスク１２によって生成されるタスク１５，１６の数が「２」である場合を示す。このような場合、タスク１０の子タスク１１〜１６の生成数は「６（２＋２＋２）」である。図４Ｂの例は、タスク１７が実行された場合に、タスク１７によって生成されるタスク１８、１９の数が「２」である場合を示す。このような場合、タスク１７の子タスク１８、１９の生成数は「２」である。
【００２１】
ランタイムライブラリ７ｃは、アプリケーション７ａの実行時に用いられる各種のモジュール群である。また、ランタイムライブラリ７ｃは、タスク情報７ｄを有する。タスク情報７ｄには、タスクごとのタスクの実行方式が登録される。ランタイムライブラリ７ｃは、後述の実行部８ａによりアプリケーション７ａとともに実行されると、タスク情報７ｄの登録内容に従って、スレッドにより実行されるタスクの実行方式を制御する。図５は、タスク情報のデータ構造の一例を示す図である。図５の例では、タスクごとに、タスクの実行方式がタスク情報７ｄに登録された場合が示されている。図５の例は、タスク情報７ｃに、ＩＤ「１」が示すタスクの実行方式として「Ａ」が登録された場合を示す。
【００２２】
プロファイル情報７ｅには、プロファイラ７ｂにより計測されたタスクの各種情報が登録される。図６は、プロファイル情報のデータ構造の一例を示す図である。図６の例では、ＩＤ「１」〜「５」のそれぞれが示すタスクの「時間コスト」および「子タスクの生成数」が登録された場合が示されている。図６の例のプロファイル情報７ｅは、ＩＤ「１」が示すタスクが実行されてから、タスクの実行が完了するまでの時間が「３００μｓ」である場合を示す。また、図６の例のプロファイル情報７ｅは、ＩＤ「２」が示すタスクが実行されてから、タスクの実行が完了するまでの時間が「２００μｓ」である場合を示す。また、図６の例のプロファイル情報７ｅは、ＩＤ「３」が示すタスクが実行されてから、タスクの実行が完了するまでの時間が「５μｓ」である場合を示す。また、図６の例のプロファイル情報７ｅは、ＩＤ「４」が示すタスクが実行されてから、タスクの実行が完了するまでの時間が「２５０μｓ」である場合を示す。また、図６の例のプロファイル情報７ｅは、ＩＤ「５」が示すタスクが実行されてから、タスクの実行が完了するまでの時間が「８μｓ」である場合を示す。
【００２３】
また、図６の例のプロファイル情報７ｅは、ＩＤ「１」が示すタスクによって生成された子タスクの数が「２０」である場合を示す。また、図６の例のプロファイル情報７ｅは、ＩＤ「２」が示すタスクによって生成された子タスクの数が「２」である場合を示す。また、図６の例のプロファイル情報７ｅは、ＩＤ「３」が示すタスクによって生成された子タスクの数が「１」である場合を示す。また、図６の例のプロファイル情報７ｅは、ＩＤ「４」が示すタスクによって生成された子タスクの数が「１８」である場合を示す。また、図６の例のプロファイル情報７ｅは、ＩＤ「５」が示すタスクによって生成された子タスクの数が「８」である場合を示す。
【００２４】
記憶部７は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部７は、上記の種類の記憶装置に限定されるものではなく、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）であってもよい。
【００２５】
制御部８は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。先の図２に示すように、制御部８は、実行部８ａと、予測部８ｂと、選択部８ｃと、実行制御部８ｄとを有する。
【００２６】
実行部８ａは、アプリケーションを実行する指示を受信した場合に、アプリケーション７ａとともに、プロファイラ７ｂおよびランタイムライブラリ７ｃの実行を開始して、アプリケーション７ａ、プロファイラ７ｂおよびランタイムライブラリ７ｃを実行する。実行部８ａによりアプリケーション７ａが実行されると、アプリケーションに含まれるタスクがスレッドにより実行される。なお、アプリケーション７ａは、複数のスレッドを生成する。そして、生成された複数のスレッドのそれぞれは、複数のタスクのそれぞれを生成し、生成した複数のタスクのそれぞれを実行する。図７は、スレッドにより実行されるタスクの実行形態の一例を説明するための図である。図７の例では、「待ち１」〜「待ち４」は、キュー２０に格納された実行待ちのタスクを示し、「実行中１」〜「実行中４」は、キュー２１に格納された実行中のタスクを示す。図７の例に示すように、スレッドは、生成したタスクをキュー２０に格納し、所定の実行ポイントでキュー２０からタスクを取り出して、取り出したタスクを、実行中のタスクが格納されるキュー２１に格納して、取り出したタスクを実行する。そして、タスクの実行が完了した場合には、スレッドは、キュー２１から実行が完了したタスクを取り出す。図７の例では、「待ち１」のタスクの実行ポイントに到達すると、スレッドが、「待ち１」のタスクをキュー２０から取り出して、取り出したタスクを実行するとともに、「実行中４」のタスクとしてキュー２１に格納した場合を示す。なお、キュー２０およびキュー２１は、単なるデータ構造を示すものであり、記憶部７の所定の記憶領域に対応する。
【００２７】
また、実行部８ａは、後述の実行制御部８ｄによりタスクの実行方式が設定されると、設定された実行方式でタスクを実行するように制御される。
【００２８】
そして、実行部８ａは、実行したアプリケーションの実行結果を出力部５や端末２に送信する。
【００２９】
予測部８ｂは、実行部８ａにより実行されたタスクの処理負荷を予測する。具体例を挙げて説明すると、例えば、予測部８ｂは、実行部８ａによりアプリケーション７ａ、プロファイラ７ｂおよびランタイムライブラリの実行が開始されると、まず、変数Ｎの値を１に設定する。予測部８ｂは、変数Ｎの値を１に設定した場合や、後述の実行制御部８ｄにより変数Ｎの値が１つインクリメントされた場合には、Ｎ番目に実行されたタスクの実行が完了したか否かを判定する。
【００３０】
Ｎ番目に実行されたタスクの実行が完了した場合には、予測部８ｂは、プロファイル情報７ｅを参照し、Ｎ番目に実行されたタスクの「時間コスト」および「子タスクの生成数」を取得する。例えば、Ｎ＝１である場合に、１番目に実行されたタスクのＩＤが「１」であるときには、予測部８ｂは、図６に示すプロファイル情報７ｅから、ＩＤが「１」であるタスクの時間コスト「３００μｓ」および子タスクの生成数「２０」を取得する。
【００３１】
そして、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」の値に応じて、タスクの「時間コスト」が示す処理負荷の度合いを算出する。図８は、タスクの「時間コスト」が示す処理負荷の度合いを算出する方法の一例を説明するための図である。図８の例に示すように、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が「０．１μｓ」以下である場合には、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合い「小」を算出する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が「０．１μｓ」よりも大きく、「１μｓ」以下である場合には、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合い「中」を算出する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が「１μｓ」よりも大きい場合には、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合い「大」を算出する。「大」、「中」、「小」のうち、「大」は、処理負荷が最も大きいことを示し、「小」は、処理負荷が最も小さいことを示し、「中」は、処理負荷が「大」と「小」の間の大きさであることを示す。
【００３２】
また、予測部８ｂは、Ｎ番目に実行されたタスクの「子タスクの生成数」の値に応じて、タスクの「子タスクの生成数」が示す子タスクの数の多さを示す度合いを算出する。図９は、子タスクの数の多さを示す度合いを算出する方法の一例を説明するための図である。図９の例に示すように、予測部８ｂは、Ｎ番目に実行されたタスクの「子タスクの生成数」が「０〜３」である場合には、子タスクの数の多さを示す度合い「少」を算出する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「子タスクの生成数」が「４〜１０」である場合には、子タスクの数の多さを示す度合い「中」を算出する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「子タスクの生成数」が「１１」より大きい場合には、子タスクの数の多さを示す度合い「多」を算出する。「多」、「中」、「少」のうち、「多」は、子タスクの生成数が多いことを示し、「少」は、子タスクの生成数が少ないことを示し、「中」は、子タスクの生成数が「多」と「少」の間の多さであることを示す。
【００３３】
そして、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いと、Ｎ番目に実行されたタスクの「子タスクの生成数」が示す子タスクの数の多さを示す度合いとに基づいて、Ｎ番目に実行されたタスクの処理負荷を予測する。図１０は、タスクの処理負荷を予測する方法の一例を説明するための図である。図１０の例に示すように、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「大」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「多」である場合には、次のような処理を行う。すなわち、予測部８ｂは、Ｎ番目に実行されたタスクの処理負荷「大」を予測する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「大」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「中」である場合には、Ｎ番目に実行されたタスクの処理負荷「大」を予測する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「大」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「少」である場合には、Ｎ番目に実行されたタスクの処理負荷「中」を予測する。
【００３４】
また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「中」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「多」である場合には、Ｎ番目に実行されたタスクの処理負荷「大」を予測する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「中」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「中」である場合には、Ｎ番目に実行されたタスクの処理負荷「中」を予測する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「中」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「少」である場合には、Ｎ番目に実行されたタスクの処理負荷「小」を予測する。
【００３５】
また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「小」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「多」である場合には、Ｎ番目に実行されたタスクの処理負荷「中」を予測する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「小」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「中」である場合には、Ｎ番目に実行されたタスクの処理負荷「小」を予測する。また、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いが「小」であり、「子タスクの生成数」が示す子タスクの数の多さを示す度合いが「少」である場合には、Ｎ番目に実行されたタスクの処理負荷「小」を予測する。
【００３６】
選択部８ｃは、予測部８ｂにより予測された処理負荷に応じて、Ｎ番目に実行されたタスクの実行方式を選択する。図１１は、タスクの実行方式を選択する方法の一例を説明するための図である。図１１には、タスクの処理負荷とタスクの実行方式とが対応付けられた対応情報が示されている。図１１の例に示す対応情報には、タスクの処理負荷が「大」、「中」、「小」のそれぞれである場合における、タスクの実行方式Ａ〜Ｄの４つの方式のそれぞれの推奨順位が登録されている。推奨順位は、「◎」が最も高く、次に、「○」が高い。また、その次に、推奨順位は、「△」が高く、「×」が最も低い。
【００３７】
ここで、実行方式Ａ〜Ｄのそれぞれについて説明する。実行方式Ａは、タスクのコードに遭遇したスレッドが、タスクを生成し、生成したタスクをキュー２０に格納し、実行ポイントに到達した場合に、キュー２０からタスクを取り出して実行する方式である。実行方式Ｂは、タスクのコードに遭遇したスレッドが、タスクを生成し、生成したタスクをキュー２０に格納し、実行ポイントに到達した場合に、タスクのコードに遭遇したスレッド以外のスレッドが、キュー２０からタスクを取り出して実行する方式である。実行方式Ｃは、タスクのコードに遭遇したスレッドがタスクを生成し、生成したタスクを、キュー２０に格納することなく、タスクが生成されたタイミングで実行する方式である。実行方式Ｄは、タスクのコードに遭遇したスレッドが、タスクを生成し、キュー２０に格納されたタスクの数が所定数、例えば、５未満となった場合に、生成したタスクをキュー２０に格納する方式である。さらに、実行方式Ｄは、所定の実行ポイントに到達したときに、タスクのコードに遭遇したスレッドが、キュー２０からタスクを取り出して実行する方式でもある。
【００３８】
選択部８ｃは、図１１の例に示す対応情報を参照して、予測部８ｂにより予測されたタスクの処理負荷が「小」である場合には、タスクの実行方式として、推奨順位が最も高い実行方式Ｃを選択する。また、選択部８ｃは、図１１の例に示す対応情報を参照して、予測部８ｂにより予測されたタスクの処理負荷が「中」である場合には、タスクの実行方式として、推奨順位が最も高い実行方式Ｂを選択する。また、選択部８ｃは、図１１の例に示す対応情報を参照して、予測部８ｂにより予測されたタスクの処理負荷が「大」である場合には、タスクの実行方式として、推奨順位が最も高い実行方式Ａを選択する。これにより、選択部８ｃは、タスクの処理負荷に応じたタスクの実行方式を選択することができる。なお、選択部８ｃは、「◎」に対応する実行方式ではなく、「○」や「△」に対応する実行方式を選択することもできる。
【００３９】
そして、選択部８ｃは、キュー２０の状態に応じて、選択した実行方式を修正する。例えば、選択部８ｃは、キュー２０に格納されたタスクの数が所定数、例えば、５以上である場合には、選択した実行方式を実行方式Ｄに修正する。これにより、選択部８ｃは、キュー２０に格納されるタスクの数が増えることを抑制することができる。また、選択部８ｃは、キュー２０に格納されたタスクの数が所定数以上である場合には、生成したタスクをキュー２０に格納しない実行方式Ｃに修正することもできる。また、選択部８ｃは、キュー２０に格納されたタスクの数が所定数、例えば、２以下である場合には、生成したタスクをキュー２０に格納する実行方式ＡまたはＢに修正することもできる。
【００４０】
実行制御部８ｄは、選択部８ｃにより選択された実行方式でタスクが実行されるように制御する。例えば、実行制御部８ｄは、選択部８ｃにより選択された実行方式と、かかる実行方式で実行されるタスクのＩＤとを対応付けてタスク情報７ｄに登録する。ここで、タスク情報７ｄに実行方式およびタスクのＩＤが登録されると、実行方式およびタスクのＩＤが登録された以降に、登録したＩＤが示すタスクが実行される場合には、ランタイムライブラリ７ｃによって、次のようにタスクの実行方式が制御される。すなわち、ランタイムライブラリ７ｃによって、タスク情報７ｄに登録された実行方式で、スレッドによりタスクが実行されるように制御される。
【００４１】
そして、実行制御部８ｄは、アプリケーションの実行が完了したか否かを判定し、アプリケーションの実行が完了していない場合には、変数Ｎの値を１つインクリメントする。
【００４２】
制御部８は、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＡＳＩＣ）などの集積回路である。また、制御部８は、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ（ＦＰＧＡ）であってもよい。また、制御部８は、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）などの電子回路であってもよい。さらに、制御部８は、Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＭＰＵ）であってもよい。
【００４３】
次に、本実施例に係る計算機３が実行する処理の流れを説明する。図１２は、実行処理の手順を示すフローチャートである。この実行処理は、例えば、端末２などから送信されたアプリケーションを実行する指示を計算機３が受信した場合に実行される。
【００４４】
図１２に示すように、実行部８ａは、アプリケーション７ａとともに、プロファイラ７ｂおよびランタイムライブラリ７ｃの実行を開始する（Ｓ１０１）。続いて、予測部８ｂは、変数Ｎの値を１に設定する（Ｓ１０２）。そして、予測部８ｂは、Ｎ番目に実行されたタスクの実行が完了したか否かを判定する（Ｓ１０３）。Ｎ番目に実行されたタスクの実行が完了していない場合（Ｓ１０３否定）には、予測部８ｂは、再び、Ｓ１０３の判定を行う。
【００４５】
一方、Ｎ番目に実行されたタスクの実行が完了した場合（Ｓ１０３肯定）には、予測部８ｂは、プロファイル情報７ｅを参照し、Ｎ番目に実行されたタスクの「時間コスト」および「子タスクの生成数」を取得する（Ｓ１０４）。
【００４６】
そして、予測部８ｂは、Ｎ番目に実行されたタスクの「時間コスト」が示す処理負荷の度合いと、Ｎ番目に実行されたタスクの「子タスクの生成数」が示す子タスクの数の多さを示す度合いとを算出し、算出した２つの度合いに基づいて、次のような処理を行う。すなわち、予測部８ｂは、Ｎ番目に実行されたタスクの処理負荷を予測する（Ｓ１０５）。
【００４７】
そして、選択部８ｃは、対応情報を参照して、予測部８ｂにより予測された処理負荷に応じて、Ｎ番目に実行されたタスクの実行方式を選択する（Ｓ１０６）。続いて、選択部８ｃは、キュー２０の状態に応じて、選択した実行方式を修正する（Ｓ１０７）。
【００４８】
そして、実行制御部８ｄは、選択部８ｃにより選択された実行方式と、かかる実行方式で実行されるタスクのＩＤとを対応付けてタスク情報７ｄに登録する（Ｓ１０８）。そして、実行制御部８ｄは、アプリケーションの実行が完了したか否かを判定する（Ｓ１０９）。アプリケーションの実行が完了していない場合（Ｓ１０９否定）には、実行制御部８ｄは、変数Ｎの値を１つインクリメントする（Ｓ１１０）。そして、実行部８ａは、アプリケーション７ａを続行し（Ｓ１１１）、Ｓ１０３へ戻る。一方、アプリケーションの実行が完了した場合（Ｓ１０９肯定）には、実行制御部８ｄは、アプリケーションの実行結果を出力部５や端末２に送信し（Ｓ１１２）、処理を終了する。
【００４９】
上述してきたように、本実施例に係る計算機３は、タスクの処理負荷を予測し、タスクの処理負荷に応じたタスクの実行方式を選択し、実行方式を選択した以降のタスクを、選択した実行方式で実行することができる。したがって、本実施例に係る計算機３によれば、タスクの処理負荷に応じた実行方法で、タスクを実行することができる。
【００５０】
また、本実施例に係る計算機３は、アプリケーションの実行途中で、タスクの制御方式を選択する。したがって、本実施例に係る計算機３によれば、アプリケーションの実行が完了してからタスクの制御方式を選択する場合と比較して、迅速に、タスクの処理負荷に応じた実行方法で、タスクを実行することができる。
【００５１】
また、本実施例に係る計算機３は、処理負荷が第１の基準を超えた「大」のタスクの実行方式として、タスクを生成したスレッドが、所定の実行ポイントでタスクを実行する実行方式Ａを選択する。また、本実施例に係る計算機３は、処理負荷が第１の基準以下であり且つ第１の基準よりも小さい第２の基準より大きい「中」のタスクの実行方式として、タスクを生成したスレッドとは異なるスレッドが、タスクを実行する実行方式Ｂを選択する。さらに、本実施例に係る計算機３は、処理負荷が第２の基準以下である「小」のタスクの実行方式として、タスクを生成したスレッドが、タスクが生成されたタイミングでタスクを実行する実行方式Ｃを選択する。したがって、本実施例に係る計算機３によれば、タスクの各段階の処理負荷に応じた実行方法で、タスクを実行することができる。
【００５２】
また、本実施例に係る計算機３は、キュー２０に格納されたタスクの数が所定数以上である場合には、選択されたタスクの実行方式を、次のような方式に修正する。すなわち、計算機３は、タスクを生成したスレッドが、キュー２０に格納されたタスクの数が所定数未満となったときに、生成したタスクをキュー２０に格納する実行方式Ｄに修正する。したがって、本実施例に係る計算機３によれば、キュー２０の状態に応じて実行方式を修正することができる。
【００５３】
さて、これまで開示の計算機に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【００５４】
例えば、計算機３が、実行方式を選択した後に、キュー２０の状態に応じて実行方式を修正し、修正された実行方式でタスクが実行されるように制御する場合について例示したが、開示の計算機はこれに限られない。例えば、開示の計算機は、実行方式を選択し、選択された実行方式でタスクが実行されるように制御することができる。
【００５５】
また、実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、本実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
【００５６】
また、各種の負荷や使用状況などに応じて、実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
【００５７】
また、各種の負荷や使用状況などに応じて、実施例において説明した各処理の各ステップでの処理の順番を変更できる。
【００５８】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００５９】
［実行プログラム］
また、上記の実施例で説明した計算機３の各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図１３を用いて、上記の実施例で説明した計算機３と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１３は、実行プログラムを実行するコンピュータを示す図である。
【００６０】
図１３に示すように、コンピュータ３００は、複数のＣＰＵ３１０、メモリ３２０、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ（ＨＤＤ）３３０、入力装置３５０、表示制御装置３６１、表示装置３６０、通信制御装置３７０、ドライブ装置３８０を有する。ＣＰＵ３１０、メモリ３２０、ＨＤＤ３３０、入力装置３５０、表示制御装置３６１、通信制御装置３７０、ドライブ装置３８０は、バス３９０を介して接続される。
【００６１】
入力装置３５０は、マウスやキーボードなどのデバイスである。表示装置３６０は、液晶などのデバイスであり、表示制御部３６１の制御によって各種の情報を表示する。通信制御装置３７０は、通信を行うためのＮｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ（ＮＩＣ）である。
【００６２】
メモリ３２０には、ＯＳなどの基本プログラムが記憶されている。また、ＨＤＤ３３０には、上記の実施例で示す実行部８ａ、予測部８ｂ、選択部８ｃ、実行制御部８ｄと同様の機能を発揮する実行プログラム３３０ａが予め記憶される。なお、実行プログラム３３０ａについては、適宜分離しても良い。また、ＨＤＤ３３０には、アプリケーション、プロファイラ、ランタイムライブラリ、プロファイル情報が設けられる。これらアプリケーション、プロファイラ、ランタイムライブラリ、プロファイル情報は、上述したアプリケーション７ａ、プロファイラ７ｂ、ランタイムライブラリ７ｃ、プロファイル情報７ｅに対応する。
【００６３】
そして、ＣＰＵ３１０が、実行プログラム３３０ａを、ドライブ装置３８０を介してＨＤＤ３３０から読み出して実行する。
【００６４】
そして、ＣＰＵ３１０は、アプリケーション、プロファイラ、ランタイムライブラリ、プロファイル情報を読み出してメモリ３２０に格納する。さらに、ＣＰＵ３１０は、メモリ３２０に格納されたアプリケーション、プロファイラ、ランタイムライブラリ、プロファイル情報を用いて、実行プログラム３３０ａを実行する。なお、メモリ３２０に格納される各データは、常に全てのデータがメモリ３２０に格納されなくともよい。処理に用いられるデータがメモリ３２０に格納されれば良い。
【００６５】
なお、上記した実行プログラム３３０ａについては、必ずしも最初からＨＤＤ３３０に記憶させておく必要はない。
【００６６】
例えば、コンピュータ３００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に実行プログラム３３０ａを記憶させておく。そして、コンピュータ３００がこれらから実行プログラム３３０ａを読み出して実行するようにしてもよい。  
【００６７】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ３００に接続される「他のコンピュータ（またはサーバ）」などに実行プログラム３３０ａを記憶させておく。そして、コンピュータ３００がこれらから実行プログラム３３０ａを読み出して実行するようにしてもよい。
【符号の説明】
【００６８】
１        システム
２        端末
３        計算機
７        記憶部
７ａ      アプリケーション
７ｂ      プロファイラ
７ｃ      ランタイムライブラリ
７ｄ      タスク情報
７ｅ      プロファイル情報
８        制御部
８ａ      実行部
８ｂ      予測部
８ｃ      選択部
８ｄ      実行制御部
【図１】
2014016966.tif 000003
【図２】
2014016966.tif 000004
【図３】
2014016966.tif 000005
【図４Ａ】
2014016966.tif 000006
【図４Ｂ】
2014016966.tif 000007
【図５】
2014016966.tif 000008
【図６】
2014016966.tif 000009
【図７】
2014016966.tif 000010
【図８】
2014016966.tif 000011
【図９】
2014016966.tif 000012
【図１０】
2014016966.tif 000013
【図１１】
2014016966.tif 000014
【図１２】
2014016966.tif 000015
【図１３】
2014016966.tif 000016