(57)【要約】【課題】プログラム実行時に最適な処理モジュールを実行することで、プログラム処理時間を短縮する。【解決手段】ホストプロセッサと、一以上のアクセラレータプロセッサとを備える計算機のデータ処理を行うデータ処理装置であって、処理方式と、データ型と、データ量と、実行する処理モジュールとを対応付けた処理モジュール選択ポリシを記憶する記憶手段と、計算機が、利用者からのデータ処理依頼を受信した際に、処理モジュール選択ポリシに記憶されているポリシに従って処理モジュールを実行する実行手段と、を備える。【選択図】  図１
2013186770.tif 000002
【特許請求の範囲】
【請求項１】
データ処理のデータ量に対応する処理モジュールを記憶する処理モジュール選択ポリシ記憶部と、
データ処理の依頼を受信した場合に、前記処理モジュール選択ポリシに記憶されているポリシに従って当該データ処理のデータ量に応じた前記処理モジュールを実行する処理モジュール実行部と、
を備えることを特徴とするデータ処理装置。
【請求項２】
前記処理モジュールとは、CPUの処理モジュールとGPUの処理モジュールとを含み、
前記処理モジュール選択ポリシとは、一定の処理方式においてデータ量が一定値より多い場合にGPUの処理モジュールを選択し、データ量が一定値より少ない場合にCPUの処理モジュールを選択することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記データ処理が実行された場合、前記データ処理が終了した時刻を記憶する処理状況データ記憶部を更に備え、
前記処理モジュール実行部は、
新たなデータ処理の依頼を受信した場合、新たに選択された処理モジュールに対して前記時刻が記憶されていた場合に、新たなデータ処理を実行することを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記データ処理とは、処理方式と、データ型と、データ量とを含む処理であり、
前記実行部は、前記データ処理の依頼に含まれている処理方式と、前記データ処理の依頼に含まれているデータ型とに応じて、実行する処理モジュールを選択することを特徴とする請求項３記載のデータ処理装置。
【請求項５】
前記実行部は、前記データ処理依頼に含まれているデータ量とに応じて、実行する処理モジュールを選択することを特徴とする請求項３記載のデータ処理装置。
【請求項６】
前記実行部は、前記データ処理依頼を受信するごとに、実行する処理モジュールを選択することを特徴とする請求項３記載のデータ処理装置。
【請求項７】
前記処理モジュール選択ポリシは、前記データ量に応じて、前記処理モジュールを実行するプロセッサが異なることを特徴とする請求項３記載のデータ処理装置。
【請求項８】
前記記憶部は、前記処理モジュールの処理状況を記憶する手段とをさらに備えることを特徴とする請求項３記載のデータ処理装置。
【請求項９】
前記実行部は、前記処理モジュールの前記処理状況に応じて、実行する前記処理モジュールを選択することを特徴とする請求項８に記載のデータ処理装置。
【請求項１０】
前記記憶部は、ネットワークを介して接続した複数のデータ処理装置と、前記データ処理装置が具備している前記処理モジュールとを対応付けて記録する手段とをさらに備えることを特徴とする請求項３に記載のデータ処理装置。
【請求項１１】
前記実行部は、前記ネットワークを介して接続した前記複数のデータ処理装置に対して、前記処理モジュールの実行命令を送信することを特徴とする請求項１０に記載のデータ処理装置。
【請求項１２】
あらかじめ処理モジュール選択ポリシ記憶部がデータ処理のデータ量に対応する処理モジュールを記憶し、
処理モジュール実行部がデータ処理の依頼を受信した場合に、前記処理モジュール選択ポリシに記憶されているポリシに従って当該データ処理のデータ量に応じた前記処理モジュールを実行することを特徴とするデータ処理方法。
【請求項１３】
前記処理モジュールとは、CPUの処理モジュールとGPUの処理モジュールとを含み、
前記処理モジュール選択ポリシとは、一定の処理方式においてデータ量が一定値より多い場合にGPUの処理モジュールを選択し、データ量が一定値より少ない場合にCPUの処理モジュールを選択することを特徴とする請求項１２に記載のデータ処理方法。
【請求項１４】
処理状況データ記憶部は、データ処理が実行された場合、前記データ処理が終了した時刻を記憶し、
前記処理モジュール実行部は、
新たなデータ処理の依頼を受信した場合、新に選択された処理モジュールに対して前記時刻が記憶されていた場合に、新たなデータ処理を実行することを特徴とする請求項１３に記載のデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関する。
【背景技術】
【０００２】
近年、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）をグラフィックス処理のみならず汎用計算に利用するＧＰＧＰＵ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  ＧＰＵ）と呼ばれる技術が注目されている。
【０００３】
ＧＰＵとは、一般的に画像処理を専門とする演算装置であり、多くの場合ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と呼ばれる主演算装置の制御下で用いられる動画信号生成専用の集積回路である。動画像の実時間内での生成は高負荷な演算能力が要求されるが、その多くが定式化された単純な演算の繰り返しであるためハードウェア化に向いており、ＧＰＵを製造しているメーカーから、高速なメモリインタフェース機能と高い画像演算能力を備えた製品が販売されている。
【０００４】
ＧＰＧＰＵは、ＧＰＵを汎用計算に利用しているため、汎用性の高いＣＰＵと比較して、大量のデータを用いて、比較的単純な処理を並列処理することに向いているが、反面、その特性と合わないプログラムには性能を期待できない。
【０００５】
特許文献１に記載の技術には、データの処理方式に応じてCPUで処理するか、GPUで処理するかを選択することが記載されている。
【０００６】
また、特許文献２では、入力ソフトウェアのソースコードを解析して求めたループ中の算術演算回数をループ中にアクセスするデータのサイズで除した計算密度と、データを参照する領域を合計したデータ参照領域サイズと、あらかじめ用意されたホストプロセッサとアクセラレータプロセッサとの実行時間の優劣が定められている勝敗表とに基づいて、各ループを実行させるプロセッサを決定するシステムが提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−１６３５５２号公報
【特許文献２】特開２０１１−２０４２０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載の技術では処理方式によって処理するプロセッサが決定されるため、データ量が少ない場合にもＧＰＵに処理が割り当てられる可能性がある。このように、プロセッサの特性を活かした処理の割り当てが行われないため、処理時間が増大してしまうという問題がある。
【０００９】
また、特許文献２の発明は、実際のデータ転送レートの変更、ホストプロセッサのキャッシュの振る舞いを考慮し、アクセラレータにオフロードするか否かを判断することが記載されている。しかし、ソフトウェアのソースコードを解析するだけでは、ソフトウェア実行時に動的にデータサイズが変化する場合に対応できないという問題がある。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明にかかるデータ処理装置は、データ処理のデータ量に対応する処理モジュールを記憶する処理モジュール選択ポリシ記憶部と、データ処理の依頼を受信した場合に、処理モジュール選択ポリシに記憶されているポリシに従って当該データ処理のデータ量に応じた処理モジュールを実行する処理モジュール実行部とを備える。
【発明の効果】
【００１１】
本発明によれば、プログラム実行時に、処理するデータ量に応じて最適な処理モジュールを実行することで、プログラム処理時間を短縮することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】データ処理装置の構成例である。
【図２】処理モジュール選択ポリシの一例である。
【図３】処理データ量と処理時間の関係の一例を表す図である。
【図４】処理モジュール実行処理のフローチャートである。
【図５】実施例２のデータ処理装置の構成例である。
【図６】実施例２の処理状況データの一例である。
【図７】実施例２の処理モジュール実行処理のフローチャートである。
【図８】実施例３のデータ処理装置を含むネットワーク構成例である。
【図９】実施例３のデータ処理装置の構成例である。
【図１０】実施例３の処理サーバ構成データの一例である。
【図１１】実施例３の処理状況データの一例である。
【図１２】実施例３の処理モジュール実行処理のフローチャートである。
【発明を実施するための形態】
【００１３】
ＧＰＵは多くのコアを持っているため、大量データの並列処理を高速に行うことができる。しかし、一つのコアの処理能力はＣＰＵに劣るため、データ量が少ないうちはＣＰＵで処理させる方が、プログラムの処理に要する時間は少なくなる。そこで、処理するデータ量が少ないうちはＣＰＵに処理を行わせ、処理するデータ量が多くなるとＧＰＵに処理をさせることで、処理の効率化を行うことが可能となる。また、処理の内容によって、最適なデータ量は異なってくる。そこで、本発明では、処理方式と、処理データ量に基づき、ＣＰＵで処理をおこなうのか、ＧＰＵで処理をおこなうのかの割り当てを自動でおこなうデータ処理装置を説明する。
【００１４】
本実施形態では、プログラム実行時に最適な処理モジュールを実行することで、プログラム処理時間を短縮する。実施例1では、この点に着目し、処理モジュール選択ポリシに基づく処理モジュール選択について説明する。
【００１５】
実施例２では、処理状況を考慮した処理モジュール実行について説明する。
【００１６】
実施例３では、複数のデータ処理装置が存在する場合の処理モジュール実行について説明する。
【実施例１】
【００１７】
図１に、本実施例における、処理データ量と処理方式に応じて適切な処理モジュールを実行するデータ処理装置１０１の構成例を示す。データ処理装置１０１は、ＣＰＵ１０２と、ＧＰＵ１０３と、ＣＰＵ１０２及びＧＰＵ１０３が処理を実行するために必要なデータを格納するためのメモリ１０４と、大量のデータを記憶する容量を持つハードディスクやフラッシュメモリなどの記憶装置１０５と、キーボード、ディスプレイなどの入出力を行うための入出力装置１０６と、これらの各装置を接続する通信路（バス）１０７とを備えたコンピュータである。なお、通信路１０７は、例えば、バスやケーブルなどの情報伝達媒体である。
【００１８】
ＣＰＵ１０２は、メモリ１０４に格納された処理モジュール実行プログラム１０８を実行することによりポリシに基づいた処理モジュールの実行を行う。なお、処理モジュールにはＣＰＵを利用して処理を行う処理モジュール（処理モジュールＣ１１０８〜処理モジュールＣｎ１１１）やＧＰＵを利用して処理を行う処理モジュール（処理モジュールＧ１１１２〜処理モジュールＧｎ１１４）が存在する。
【００１９】
これらの処理モジュールは、例えば、与えられた配列の総和を算出する「足し算」モジュールや、与えられた文字列の中から特定の文字列に一致するものがあるか否かを検出する「パターンマッチング」モジュール、与えられたデータを暗号化する「暗号化」モジュール、与えられた配列を昇順に並び変える「ソート」モジュールなどが挙げられる。なお、「パターンマッチング」モジュールでは、検出する文字列を、あらかじめ管理者が行っているものとする。
【００２０】
これら処理モジュールは必要に応じて、追加したり、削除したりしても良い。
【００２１】
記憶装置１０５には、最適な処理モジュールを選択するための処理モジュール選択ポリシ１１５が格納されている。
【００２２】
上記の各プログラムやデータは、あらかじめメモリ１０４または記憶装置１０５に格納されていてもよいし、必要な時に、入出力装置１０６からインストール（ロード）されてもよい。
【００２３】
なお、説明を簡単にするためデータ処理装置１０１が1つのＣＰＵ１０２及び１つのＧＰＵ１０３から構成される例を示したが、複数のＣＰＵや、複数のＣＰＵを含んで、データ処理装置１０１を構成しても良い。
【００２４】
図２は、処理モジュール選択ポリシ１１５の一例を示す図である。図２に示すように、処理モジュール選択ポリシ１１５は、ポリシＩＤ２０１と、処理方式２０２と、データ型２０３と、データ量２０４と、処理モジュール２０５とを含む。
【００２５】
ポリシＩＤ２０１は処理モジュール選択ポリシを一意に識別できる情報（識別子）を表す。
【００２６】
処理方式２０２は、どのような処理を行うのかの情報を表す。例えば配列の総和を算出する「足し算」処理や、文字列の中から特定の文字列に一致するものがあるか否かを検出する「パターンマッチング」処理、データを暗号化する「暗号化」処理、配列を昇順に並び変える「ソート」処理などが挙げられる。ここで挙げられた処理はＣＰＵを利用して処理を行う処理モジュール（処理モジュールＣ１１０８〜処理モジュールＣｎ１１１）やＧＰＵを利用して処理を行う処理モジュール（処理モジュールＧ１１１２〜処理モジュールＧｎ１１４）として実装しておく。
【００２７】
データ型２０３は、処理方式２０２が処理を行うデータの形式を表す。例えば、「整数」や、「文字列」などが挙げられる。
【００２８】
データ量２０４は、処理モジュールを選択する際の基準となる情報を表し、処理モジュール２０５は、実行する処理モジュールの情報を表す。
【００２９】
なお、処理モジュール２０５には、メモリ１０４に格納されている処理モジュール（処理モジュールＣ１１０８〜処理モジュールＣｎ１１１、処理モジュールＧ１１１２〜処理モジュールＧｎ１１４）と対応がとれる識別子が格納される。
【００３０】
なお、データ量２０４には、「−」（ｄｏｎｔ  ｃａｒｅを表す記号）を格納してもよい。「−」が格納されている場合には、データ量に関係なく、処理モジュール２０５に格納されている処理モジュールを実行することを表す。
【００３１】
図２を用いて具体的に説明する。例えば、ポリシＩＤ２０１が「１」の処理モジュール選択ポリシは、処理方式２０２が「足し算」、データ型２０３が「整数」、データ量２０４が「１００００個以上」、処理モジュール２０５が「処理モジュールＧ１」であるため、１００００個以上の整数の足し算を依頼された場合には、処理モジュールＧ１を選択することを表す。
【００３２】
処理モジュール選択ポリシ１１５に格納される各情報は、管理者が必要に応じて、入力または更新しても良い。
【００３３】
例えば、データ処理装置１０１に新たな処理方式を追加する場合には、管理者が新たに追加する処理方式のポリシＩＤ２０１、処理方式２０２、データ型２０３、データ量２０４、処理モジュール２０５を、処理モジュール選択ポリシ１１５に登録する。また、同時に、新たな処理方式を実装した処理モジュールをメモリ１０４に格納する。
【００３４】
なお、処理モジュール選択ポリシ１１５は、例えば、あらかじめデータ量と処理速度の関係を算出し作成してもよい。データ量と処理速度の関係から処理モジュール選択ポリシ１１５を作成する方法については、図３を用いて後述する。
【００３５】
処理モジュール選択ポリシ１１５は、ＣＰＵ１０２により実行される処理モジュール実行プログラム１０８が、実行する処理モジュールを選択する際に利用される。処理モジュール実行プログラム１０８の具体的な処理については、図４を用いて後述する。
【００３６】
図３は、データ量と処理速度の関係の一例を示す図である。図３は、与えられた配列（整数型）の総和を算出する「足し算」処理について、データ量と処理速度の関係を表している。横軸はデータ量を、縦軸は処理時間を、実線はＧＰＵの処理速度を、破線はＣＰＵの処理速度を示す。ここで、データ量とは与えられた配列の個数を意味する。
【００３７】
このグラフは、データ量を増やしながら、ＣＰＵ利用の「足し算」処理を行うモジュール（処理モジュールＣ１１０９）と、ＧＰＵ利用の「足し算」処理を行うモジュール（処理モジュールＧ１１１２）を実行し、それらの処理に要した時間を計測し、プロットしたものである。なお、処理時間の計測を行っていないデータ量に関する処理時間は補間し、グラフを描画してある。
【００３８】
図３に示すように、データ量が少ない場合はＣＰＵの方が処理時間が短いが、データ量が増えるに従いＧＰＵの方が処理時間が短くなる。ここで例示した「足し算」処理については１００００個のデータ付近でＣＰＵの処理時間とＧＰＵの処理時間が逆転しているため、データ量が１００００個よりも少ない場合はＣＰＵで処理を、データ量が１００００個以上であればＧＰＵを利用するように処理モジュール選択ポリシ１１５を設定する。
【００３９】
具体的には、ポリシＩＤ２０１が「１」、処理方式２０２が「足し算」、データ型２０３が「整数」、データ量２０４が「１００００個以上」、処理モジュール２０５が「処理モジュールＧ１」の処理モジュール選択ポリシと、ポリシＩＤ２０１が「２」、処理方式２０２が「足し算」、データ型２０３が「整数」、データ量２０４が「１００００個未満」、処理モジュール２０５が「処理モジュールＣ１」の処理モジュール選択ポリシの２つのポリシを設定する。
【００４０】
なお、ハードウェア構成が異なると処理時間にも影響がでるため、上述した処理モジュールの処理時間計測はデータ処理装置上で行うことが望ましい。しかし、データ処理装置上で事前の計測が難しい場合は、別の端末上で処理時間を計測し、処理モジュール選択ポリシを設定しても良い。また、上述したデータ量と処理時間の関係から処理モジュール選択ポリシを設定しなくても良い。
【００４１】
続いて、データ処理装置１０１の処理モジュール実行プログラム１０８が入出力装置１０６からデータ処理依頼を受信し、最適な処理モジュールを実行する処理（以下、実行処理と呼ぶ。）について説明する。図４は、実行処理のフローチャートである。
【００４２】
図４に示すように、実行処理を行う処理モジュール実行プログラム１０８は、ＣＰＵ１０２により実行され、入出力装置１０６を介して利用者が送信したデータ処理依頼を受信する（ステップ４０１）。ここで、データ処理依頼には、処理方式、データ型、データ量、処理データの情報を含む。
【００４３】
なお、データ処理依頼とは、例えば、関数の呼び出しなどが挙げられる。なお、データ処理依頼は、必要に応じて、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）や、サブプログラム、ライブラリの呼び出しと呼んでも良い。
【００４４】
例えば、Ｃ言語でソートを行うｑｓｏｒｔ関数は、ｖｏｉｄ  ｑｓｏｒｔ（  ｖｏｉｄ  ＊ｂａｓｅ、  ｓｉｚｅ＿ｔ  ｎ、  ｓｉｚｅ＿ｔ  ｓｉｚｅ、ｉｎｔ（＊ｃｏｍｐ）（ｃｏｎｓｔ  ｖｏｉｄ  ＊ｃ１、  ｃｏｎｓｔ  ｖｏｉｄ  ＊ｃ２））で表される。ここで、ｖｏｉｄ  ＊ｂａｓｅはソートする配列を、ｓｉｚｅ＿ｔ  ｎは配列要素の個数を、ｓｉｚｅ＿ｔ  ｓｉｚｅは配列要素のサイズを、ｉｎｔ（＊ｃｏｍｐ）（ｃｏｎｓｔ  ｖｏｉｄ  ＊ｃ１、  ｃｏｎｓｔ  ｖｏｉｄ  ＊ｃ２）は比較関数を表す。この関数の処理を依頼された場合、処理方式は「ｑｓｏｒｔ」、データ型は「ｓｉｚｅ」で示された型、データ量は「ｎ」で示された値、処理データは「＊ｂａｓｅ」で示されたアドレスに格納されているデータとなる。
【００４５】
また、データ処理依頼として、処理方式と、処理データの情報のみを渡しても良い。その場合、処理データの情報からデータ型や、データ量の情報を復元する。例えば、処理方式「ソート」、処理データ「１、２、３、４、５」という処理依頼を受信した場合には、データ型「整数」、データ量「５」の情報を復元する。
【００４６】
処理モジュール実行プログラム１０８は、受信したデータ処理依頼から、処理方式、データ型、データ量の情報を取得する（ステップ４０２）。
【００４７】
処理モジュール実行プログラム１０８は、処理モジュール選択ポリシ１１５から処理モジュール選択ポリシを取得する（ステップ４０３）。
【００４８】
処理モジュール実行プログラム１０８は、ステップ４０２で取得した処理方式、データ型の情報と、ステップ４０３で取得した処理モジュール選択ポリシの処理方式２０２、データ型２０３とを比較し、該当する処理モジュール選択ポリシが存在すれば、ステップ４０５に進み、存在しなければ実行処理を終了する（ステップ４０４）。
【００４９】
処理モジュール実行プログラム１０８は、ステップ４０４で該当した処理モジュール選択ポリシのデータ量２０４の情報と、ステップ４０２で取得したデータ量の情報とを比較し、該当する処理モジュール選択ポリシが存在すれば、ステップ４０６に進み、存在しなければ実行処理を終了する（ステップ４０５）。
【００５０】
処理モジュール実行プログラム１０８は、ステップ４０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを取得し、取得した処理モジュールへ、ステップ４０１で受信した処理データを送信して処理モジュールを実行し（ステップ４０６）、実行処理を終了する。すなわち、データ処理のデータ量に対応する処理モジュールを記憶し、データ処理の依頼を受信した場合に、処理モジュールプログラムは、処理モジュール選択ポリシに記憶されているポリシに従って当該データ処理のデータ量に応じた処理モジュールを実行する。
【００５１】
なお、取得した処理モジュールがＣＰＵ利用の処理モジュールである場合はＣＰＵ１０２が、取得した処理モジュールがＧＰＵ利用の処理モジュールである場合はＧＰＵ１０３が、それぞれ処理モジュールの実行を行う。すなわち、処理モジュールには、CPUの処理モジュールとGPUの処理モジュールとを含み、処理モジュール選択ポリシとは、一定の処理方式においてデータ量が一定値より多い場合にGPUの処理モジュールを選択し、データ量が一定値より少ない場合にCPUの処理モジュールを選択する。
【００５２】
ステップ４０１からステップ４０６までの実行処理の流れを、具体例を用いて説明する。例えば、処理モジュール実行プログラム１０８が、入出力装置１０６から処理方式「足し算」、データ型「整数」、データ量「１０」、処理データ「１、２、３、４、５、６、７、８、９、１０」という処理依頼を受信した場合（ステップ４０１）、受信した処理依頼から、処理方式「足し算」、データ型「整数」、データ量「１０」を取得する（ステップ４０２）。
【００５３】
処理モジュール実行プログラム１０８は、記憶装置１０５に格納された処理モジュール選択ポリシ１１５の情報を取得し（ステップ４０３）、ステップ４０２で取得した処理方式「足し算」、データ型「整数」の情報と、ステップ４０３で取得した処理モジュール選択ポリシの処理方式２０２、データ型２０３とを比較する。この場合、ポリシＩＤ２０１が「１」の処理方式２０２「足し算」、データ型２０３「整数」の処理モジュール選択ポリシと、ポリシＩＤ２０１が「２」の処理方式「足し算」、データ型２０３「整数」の処理モジュール選択ポリシに該当する（ステップ４０４）。該当する選択ポリシがない場合存在しなければ実行処理を終了する。  処理モジュール実行プログラム１０８は、ステップ４０４で該当した、ポリシＩＤ２０１が「１」の処理モジュール選択ポリシと、ポリシＩＤ２０１が「２」の処理モジュール選択ポリシのデータ量２０４の情報と、ステップ４０２で取得したデータ量「１０」の情報とを比較する。この場合、ポリシＩＤ２０１が「２」のデータ量２０４「１００００個未満」の処理モジュール選択ポリシに該当する（ステップ４０５）。
【００５４】
処理モジュール実行プログラム１０８は、ステップ４０５で該当した、ポリシＩＤ２０１が「２」の処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを取得し、取得した処理モジュールへ、ステップ４０１で受信した処理データを送信して処理モジュールを実行する。この場合、ポリシＩＤ２０１が「２」の処理モジュール選択ポリシに格納されている処理モジュール２０５「処理モジュールＣ１」を取得し、取得した「処理モジュールＣ１」へ、ステップ４０１で受信した処理データ「１、２、３、４、５、６、７、８、９、１０」を送信し、「処理モジュールＣ１」を実行する。なお、ここで、処理モジュールＣ１は「足し算」処理を行う処理モジュールであり、処理データ「１、２、３、４、５、６、７、８、９、１０」を受信すると、その総和である「５５」を出力する。
【００５５】
このように、処理モジュール実行プログラム１０８は受信した処理依頼から、処理方式、データ型、データ量を取得し、処理モジュール選択ポリシに基づいて、最適な処理モジュールを選択し実行することで、処理時間の高速化を行うことが可能となる。
【００５６】
なお、本実施例の一部を変更して、次のように実施してもよい。受信した処理依頼のデータ量が、処理モジュール選択ポリシに格納されたＧＰＵ利用の処理モジュールのデータ量より少ない場合に、受信した処理依頼の処理データをメモリ１０４に格納し、後続の処理依頼が行われた際に処理データを結合し、ＧＰＵ利用の処理データを超えた際に、ＧＰＵ利用の処理モジュールに処理を依頼する。これにより高速なＧＰＵ利用の処理モジュールで処理を行うことが可能となる。
【００５７】
また、ＧＰＵ１０３の代わりにＣＰＵ１０２と特性の異なるＣＰＵやアクセラレータを利用してもよい。これにより、ＧＰＵを具備していない端末においても処理モジュール選択ポリシ１１５に基づく処理モジュールの実行が可能となる。
【００５８】
さらに、処理モジュール選択ポリシ１１５を、データ量と消費電力の関係から作成してもよい。ＧＰＵはＣＰＵと比べると簡略化された演算コアを多数搭載しているため、電力効率が高くなる。しかし、データ量が少ないうちは、ＧＰＵが搭載している多数の演算コアを活かしきれず、消費電力の削減効果が見込めない。そこで、データ量と消費電力の関係を算出し、処理モジュール選択ポリシ１１５を作成する。これにより、処理実行にかかる消費電力を削減することが可能となる。
【実施例２】
【００５９】
本実施例は、実施例１のデータ処理装置を含み、さらに処理モジュールの実行状況を考慮した処理モジュール実行を行うデータ処理装置である。
【００６０】
実施例１では、処理モジュールの実行状況を考慮せず処理モジュールの実行を行っているため、例えば、すでに処理モジュールが実行中であれば、新たな処理モジュールの実行を行う際に、現在実行されている処理モジュールの終了を待たなければ処理を実行できない。そこで、実施例２では、処理モジュールの実行状態を保持したデータ処理装置を説明する。処理モジュール実行状態を保持することにより、処理モジュールの実行状態を考慮した処理モジュール実行が可能となり、効率的にリソースを活用することができる。
【００６１】
図５は、本実施例におけるデータ処理装置１０１の構成図の例である。実施例１と同一の構成要素には同一の符号を付すことによってその説明を省略し、以下では、実施例１と異なる点を中心に説明する。
【００６２】
図５に示すように、実施例２におけるデータ処理装置装置１０１は、既に説明した実施例１の脆弱性対策装置１０１に、ＧＰＵ１５０１と、ＧＰＵ２５０２と、処理モジュール実行プログラム５０３と、処理状況データ５０４とを含んで構成される。なお、実施例１においてもＣＰＵ１０３が存在するが、実施例２では、２つのＧＰＵを含んだ構成を例示しているため、ここでは新たな符号を付した。また、実施例１においても処理モジュール実行プログラム１０８が存在するが、実施例２での処理モジュール実行プログラム５０３とは一部処理が異なるため、ここでは新たな符号を付した。
【００６３】
ＣＰＵ１０２は、メモリ１０４に格納された処理モジュール実行プログラム５０３を実行することにより処理モジュールの実行状態を考慮した処理モジュール実行を行う。記憶装置１０５には、処理モジュールの実況状況を保持した実行状況データ５０４が格納されている。
【００６４】
なお、処理モジュール実行プログラム５０３は、あらかじめメモリ１０４に格納されていてもよいし、必要な時に入出力装置１０６からインストール（ロード）されても良い。
【００６５】
図６は、処理状況データ５０４の一例を示す図である。図６に示すように、処理状況データ５０４は、処理リソース６０１と、処理モジュール６０２と、処理開始時刻６０３と、処理終了時刻６０４とを含む。
【００６６】
処理リソース６０１には、処理モジュールが利用している、あるいは利用したリソースの情報を格納する。例えば、ＣＰＵ１０２や、ＧＰＵ１５０１、ＧＰＵ２５０２が挙げられる。
【００６７】
処理モジュール６０２には、現在実行中の、あるいは実行が終了した処理モジュールの情報を格納する。例えば、処理モジュールＣ１１０８〜処理モジュールＣｎ１１１、処理モジュールＧ１１１２〜処理モジュールＧｎ１１４が挙げられる。
【００６８】
処理開始時刻６０３には、処理モジュールの実行開始時刻が、処理終了時刻６０４には、処理モジュールの実行終了時刻が格納される。なお、処理終了時刻６０４に値が格納されていない場合には、当該処理リソース６０１において処理モジュール６０２が実行されていることを表す。
【００６９】
図６を用いて具体例を説明する。一行目に格納されているの処理状況データ５０４は、処理リソース６０１が「ＧＰＵ１」、処理モジュール６０２が「処理モジュールＧ３」、処理開始時刻６０３が「２０１１／１／１  １０：００：００」、処理終了時刻６０４が「２０１１／１／１  １０：００：１０」である。このとき、２０１１／１／１  １０：００：００から２０１１／１／１  １０：００：１０の間、ＧＰＵ１を利用して処理モジュールＧ３が処理されていたことを表している。
【００７０】
処理状況データ５０４は、ＣＰＵ１０２により実行される処理モジュール実行プログラム５０３が、処理モジュールの実行状況を把握する際に利用される。処理モジュール実行プログラム５０３の具体的な処理については、図７を用いて後述する。
【００７１】
続いて、データ処理装置１０１の処理モジュール実行プログラム５０３が入出力装置１０６を介して処理依頼を受信し、最適な処理モジュールを実行する処理（以下、実行処理と呼ぶ。）について説明する。図７は、実行処理のフローチャートである。
【００７２】
図７に示すように、実行処理を行う処理モジュール実行プログラム５０３は、ＣＰＵ１０２により実行され、入出力装置１０６を介して利用者が送信したデータ処理依頼を受信する（ステップ７０１）。ここで、データ処理依頼には、処理方式、データ型、データ量、処理データの情報を含む。
【００７３】
処理モジュール実行プログラム５０３は、受信したデータ処理依頼から、処理方式、データ型、データ量の情報を取得する（ステップ７０２）。
【００７４】
処理モジュール実行プログラム５０３は、処理モジュール選択ポリシ１１５から処理モジュール選択ポリシを取得する（ステップ７０３）。
【００７５】
処理モジュール実行プログラム５０３は、ステップ７０２で取得した処理方式、データ型の情報と、ステップ７０３で取得した処理モジュール選択ポリシの処理方式２０２、データ型２０３とを比較し、該当する処理モジュール選択ポリシが存在すれば、ステップ７０５に進み、存在しなければ実行処理を終了する（ステップ７０４）。
【００７６】
処理モジュール実行プログラム５０３は、ステップ７０４で該当した処理モジュール選択ポリシのデータ量２０４の情報と、ステップ７０２で取得したデータ量の情報とを比較し、該当する処理モジュール選択ポリシが存在すれば、ステップ７０６に進み、存在しなければ実行処理を終了する（ステップ７０５）。
【００７７】
処理モジュール実行プログラム５０３は、ステップ７０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールが利用するリソース（例えば、ＣＰＵや、ＧＰＵ１、ＧＰＵ２が挙げられる。）が空いているか否かを判断し、リソースが空いていれば処理７０７に進み、リソースが空いていなければ処理７１０に進む（ステップ７０６）。なお、リソースが空いているか否かの判断については、処理状況データ５０４を取得して行う。具体的には、処理状況データ５０４の処理リソース６０１と、処理終了時刻６０４を取得し、処理終了時刻６０４に値が格納されている場合に、処理リソース６０１に格納されているリソースが空いていると判断し、終了時刻６０４に値が格納されていない場合に、処理リソース６０１に格納されているリソースが空いていない（現在利用中のリソースである）と判断する。すなわち、データ処理が実行された場合、データ処理が終了した時刻を更に記憶し、処理モジュール実行プログラムは、新たなデータ処理の依頼を受信した場合、新たに選択された処理モジュールに対して時刻が記憶されていた場合に、新たなデータ処理を実行する。
【００７８】
図６を用いて具体例を説明する。処理状況データ５０４の１行目に格納されている、処理リソース６０１が「ＧＰＵ１」、処理モジュール６０２が「処理モジュールＧ３」、処理開始時刻６０３が「２０１１／１／１  １０：００：００」、処理終了時刻６０４が「２０１１／１／１  １０：００：１０」の処理状況データは、処理終了時刻６０４に値が格納されているため、現在空いているリソースだと判断できる。また、処理状況データ５０４の２行目に格納されている、処理リソース６０１が「ＧＰＵ２」、処理モジュール６０２が「処理モジュールＧ２」、処理開始時刻６０３が「２０１１／１／１  １０：００：００」の処理状況データは、処理終了時刻６０４に値が格納されていないため、現在利用中のリソースだと判断できる。さらに、処理状況データ５０４の３行目に格納されている、処理リソース６０１が「ＣＰＵ」、処理モジュール６０２が「処理モジュールＣ１」、処理開始時刻６０３が「２０１１／１／１  １０：００：１０」の処理状況データは、処理終了時刻６０４に値が格納されていないため、現在利用中のリソースだと判断できる。
【００７９】
処理モジュール実行プログラム５０３は、ステップ７０６で該当した（空きリソースであった）処理状況データ５０４の処理モジュール６０２にステップ７０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールの情報を、処理開始時刻６０３に現在時刻を格納し、処理終了時刻６０４に格納されている情報を空にする（ステップ７０７）。
【００８０】
処理モジュール実行プログラム５０３は、ステップ７０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを取得し、取得した処理モジュールへ、ステップ７０１で受信した処理データを送信して、ステップ７０６で空きリソースと判断したリソースで当該処理モジュールを実行する（ステップ７０８）。
【００８１】
処理モジュール実行プログラム５０３は、ステップ７０６で該当した（空きリソースであった）処理状況データ５０４の処理終了時刻６０４に現在時刻を格納し（ステップ７０９）、処理を終了する。
【００８２】
処理モジュール実行プログラム５０３は、ステップ７０４で該当し、かつ、ステップ７０５で該当しなかった処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールが利用するリソースが空いているか否かを判断し、リソースが空いていれば処理７１１に進み、リソースが空いていなければ処理を終了する（ステップ７１０）。なお、リソースが空いているか否かの判断については、処理状況データ５０４を取得して行う。具体的には、処理状況データ５０４の処理リソース６０１と、処理終了時刻６０４を取得し、処理終了時刻６０４に値が格納されている場合に、処理リソース６０１に格納されているリソースが空いていると判断し、終了時刻６０４に値が格納されていない場合に、処理リソース６０１に格納されているリソースが空いていない（現在利用中のリソースである）と判断する。
【００８３】
処理モジュール実行プログラム５０３は、ステップ７１０で該当した（空きリソースであった）処理状況データ５０４の処理モジュール６０２にステップ７０４で該当し、かつ、ステップ７０５で該当しなかった処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールの情報を、処理開始時刻６０３に現在時刻を格納し、処理終了時刻６０４に格納されている情報を空にする（ステップ７１１）。
【００８４】
処理モジュール実行プログラム５０３は、ステップ７０４で該当し、かつ、ステップ７０５で該当しなかった処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを取得し、取得した処理モジュールへ、ステップ７０１で受信した処理データを送信して、ステップ７１０で空きリソースと判断したリソースで当該処理モジュールを実行する（ステップ７１２）。
【００８５】
処理モジュール実行プログラム５０３は、ステップ７１０で該当した（空きリソースであった）処理状況データ５０４の処理終了時刻６０４に現在時刻を格納し（ステップ７１３）、処理を終了する。
【００８６】
ステップ７０１からステップ７１３までの実行処理の流れを、具体例を用いて説明する。例えば、処理モジュール実行プログラム５０３が、入出力装置１０６から処理方式「足し算」、データ型「整数」、データ量「１０」、処理データ「１、２、３、４、５、６、７、８、９、１０」という処理依頼を受信した場合（ステップ７０１）、受信した処理依頼から、処理方式「足し算」、データ型「整数」、データ量「１０」を取得する（ステップ７０２）。
【００８７】
処理モジュール実行プログラム５０３は、記憶装置１０５に格納された処理モジュール選択ポリシ１１５の情報を取得し（ステップ７０３）、ステップ７０２で取得した処理方式「足し算」、データ型「整数」の情報と、ステップ７０３で取得した処理モジュール選択ポリシの処理方式２０２、データ型２０３とを比較する。この場合、ポリシＩＤ２０１が「１」の処理方式２０２「足し算」、データ型２０３「整数」の処理モジュール選択ポリシと、ポリシＩＤ２０１が「２」の処理方式「足し算」、データ型２０３「整数」の処理モジュール選択ポリシに該当する（ステップ７０４）。
【００８８】
処理モジュール実行プログラム５０３は、ステップ７０４で該当した、ポリシＩＤ２０１が「１」の処理モジュール選択ポリシと、ポリシＩＤ２０１が「２」の処理モジュール選択ポリシのデータ量２０４の情報と、ステップ４０２で取得したデータ量「１０」の情報とを比較する。この場合、ポリシＩＤ２０１が「２」のデータ量２０４「１００００個未満」の処理モジュール選択ポリシに該当する（ステップ７０５）。
【００８９】
処理モジュール実行プログラム５０３は、ステップ７０５で該当した、ポリシＩＤ２０１が「２」の処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを取得し、取得した処理モジュールが利用するリソースが空いているか否かの判断を行う（ステップ７０６）。この場合、該当する「処理モジュールＣ１」はＣＰＵを利用する処理モジュールであるので、ＣＰＵが空いているか否かの判断を行う。処理モジュール実行プログラム５０３は処理状況データ５０４の３行目に格納されている、処理リソース６０１が「ＣＰＵ」、処理モジュール６０２が「処理モジュールＣ１」、処理開始時刻６０３が「２０１１／１／１  １０：００：１０」、処理終了時刻６０４が「」の処理状況データを取得し、当該処理終了時刻６０４に値が格納されていないことから、ＣＰＵが空いていないリソースと判断する。
【００９０】
処理モジュール実行プログラム５０３は、ステップ７０４で該当し、かつステップ７０５で該当しなかった、ポリシＩＤ２０１が「１」の処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを取得し、取得した処理モジュールが利用するリソースが空いているか否かの判断を行う（ステップ７１０）。この場合、該当する「処理モジュールＧ１」はＧＰＵを利用する処理モジュールであるので、ＧＰＵが空いているか否かの判断を行う。処理モジュール実行プログラム５０３は処理状況データ５０４の１行目に格納されている、処理リソース６０１が「ＧＰＵ１」、処理モジュール６０２が「処理モジュールＧ３」、処理開始時刻６０３が「２０１１／１／１  １０：００：００」、処理終了時刻６０４が「２０１１／１／１  １０：００：１０」の処理状況データより、当該処理終了時刻６０４に値が格納されていることからＣＰＵ１が空いているリソースと判断する。
【００９１】
処理モジュール実行プログラム５０３は、ステップ７１０で該当した処理状況データ５０４の処理モジュール６０２「処理モジュールＧ３」にステップ７０４で該当し、かつ、ステップ７０５で該当しなかった処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュール「処理モジュールＧ１」の情報を、処理開始時刻６０３に現在時刻を格納し、処理終了時刻６０４に格納されている情報を空にする（ステップ７１１）。この場合、例えば、現在時刻が、「２０１１／１／１  １１：００：００」であるとすると、更新後の処理状況データ５０４の１行目に格納されている処理状況データは、処理リソース６０１が「ＧＰＵ１」、処理モジュール６０２が「処理モジュールＧ１」、処理開始時刻６０３が「２０１１／１／１  １１：００：００」、処理終了時刻６０４が「」となる。
【００９２】
処理モジュール実行プログラム５０３は、ステップ７０４で該当し、かつ、ステップ７０５で該当しなかった処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュール「処理モジュールＧ１」を取得し、取得した処理モジュール「処理モジュールＧ１」へ、ステップ７０１で受信した処理データ「１、２、３、４、５、６、７、８、９、１０」を送信して、ステップ７１０で空きリソースと判断したリソース「ＧＰＵ１」で当該処理モジュール「処理モジュールＧ１」を実行する（ステップ７１２）。なお、ここで、処理モジュールＧ１は「足し算」処理を行う処理モジュールであり、処理データ「１、２、３、４、５、６、７、８、９、１０」を受信すると、その総和である「５５」を出力する。
【００９３】
処理モジュール実行プログラム５０３は、ステップ７１０で該当した処理状況データ５０４の処理終了時刻６０４に現在時刻を格納し（ステップ７１３）、処理を終了する。この場合、例えば、現在時刻が、「２０１１／１／１  １１：００：１０」であるとすると、更新後の処理状況データ５０４の１行目に格納されている処理状況データは、処理リソース６０１が「ＧＰＵ１」、処理モジュール６０２が「処理モジュールＧ１」、処理開始時刻６０３が「２０１１／１／１  １１：００：００」、処理終了時刻６０４が「２０１１／１／１  １１：００：１０」となる。
【００９４】
このように、処理モジュール実行プログラム５０３は受信した処理依頼から、処理方式、データ型、データ量を取得し、処理モジュール選択ポリシと処理モジュールの処理状況に基づいて、最適な処理モジュールを選択し実行することで、処理時間の高速化を行うことが可能となる。
【００９５】
なお、本実施例の一部を変更して、次のように実施してもよい。処理モジュールの実行開始時に、処理状況データ５０４の処理開始時刻６０３を上書きするのではなく、新たな行として追加する。これにより、過去にどのような処理モジュールがどのリソースを利用して処理を行っていたのかを把握することが可能となる。
【実施例３】
【００９６】
本実施例は、複数の処理サーバで処理モジュール実行を行うデータ処理装置である。
【００９７】
実施例３では、処理モジュールの実行を複数の処理サーバで行うデータ処理装置を説明する。処理モジュール実行を複数の処理サーバで行うことにより、データ処理装置１０１に係る負荷を軽減することが可能となる。
【００９８】
図８に、本実施例におけるデータ処理装置１０１を含むネットワークの構成例を示す。実施例２と同一の構成要素には同一の符号を付すことによってその説明を省略し、以下では、実施例２と異なる点を中心に説明する。
【００９９】
データ処理装置１０１は、処理依頼端末８０１と、処理サーバＡ８０２ａと、処理サーバＢ８０２ｂと、処理サーバＣ８０２ｃとネットワーク８０３を介して接続されている。データ処理装置１０１は処理依頼端末８０１から送信された処理依頼を受信し、処理サーバ８０２（処理サーバＡ８０２ａ、処理サーバＢ８０２ｂ、処理サーバＣ８０２ｃ）に対して処理モジュールの実行命令を送信する。
【０１００】
ネットワーク８０３は、例えば、インターネットなどのネットワーク、あるいはこれらに接続するための通信網である。
【０１０１】
処理依頼端末８０１は、利用者がデータ処理装置１０１に対して処理依頼を送信する端末である。
処理サーバ８０３とは、処理モジュールを１つ以上含んで構成された端末である。処理サーバ８０３は、データ処理装置１０１から処理モジュール実行命令を受信すると、自身が保持している処理モジュールを実行する。
【０１０２】
なお、説明を簡単にするためデータ処理装置１０１を１台で構成する例を示したが、必要に応じて複数のデータ処理装置１０１を用いて構成しても良い。また、処理サーバが３台から構成される構成例を示したが、必要に応じて処理サーバの台数を増減しても良い。
【０１０３】
図９は、本実施例におけるデータ処理装置１０１の構成図の例である。図９に示すように、実施例３におけるデータ処理装置装置１０１は、ＣＰＵ１０２と、ＣＰＵ１０２が処理を実行するために必要なデータを格納するためのメモリ１０４と、大量のデータを記憶する容量を持つハードディスクやフラッシュメモリなどの記憶装置１０５と、他装置と通信を行なうためのＩＦ（インタフェース）９０１と、キーボード、ディスプレイなどの入出力を行なうための入出力装置１０６と、これらの各装置を接続する通信路（バス）１０７とを備えたコンピュータである。
【０１０４】
なお、ＩＦは、接続先に応じて通信インタフェース、入出力インタフェース、又は動作に応じて通信装置、受信装置、送信装置、入出力装置などと呼ぶこともある。
【０１０５】
ＣＰＵ１０２は、メモリ１０４に格納された処理モジュール実行プログラム９０２を実行することにより処理サーバ８０２に処理モジュール実行命令を送信する。
【０１０６】
記憶装置１０５には、処理モジュールを選択する基準となる処理モジュール選択ポリシ１１５、処理サーバの構成情報を格納した処理サーバ構成データ９０３、処理サーバへの処理依頼状況を格納した処理状況データ９０４が格納されている。なお、実施例２においても処理モジュール実行プログラム５０３が存在するが、実施例３での処理モジュール実行プログラム９０２とは一部処理が異なるため、ここでは新たな符号を付した。また、実施例２においても処理状況データ５０４が存在するが、実施例３での処理状況データ９０４とは一部構成が異なるため、ここでは新たな符号を付した。
【０１０７】
上記の各プログラムやデータは、あらかじめメモリ１０４または記憶装置１０５に格納されていてもよいし、必要な時に、入出力装置１０６からまたは、ＩＦ９０１を介して他の装置から、インストール（ロード）されてもよい。
【０１０８】
図１０は、処理サーバ構成データ９０３の一例を示す図である。図１０に示すように、処理サーバ構成データ９０３は、処理モジュール１００１と、処理サーバ１００２とを含む。
【０１０９】
処理モジュール１００１には、処理サーバ８０２が保持している処理モジュールの情報を格納する。  処理サーバ１００２には、処理モジュール１００１を保持している処理サーバの情報を格納する。
【０１１０】
図１０を用いて具体例を説明する。処理サーバ構成データ９０３の１行目に格納されている、処理モジュール１００１が「処理モジュールＧ１」、処理サーバ１００２が「処理サーバＡ、処理サーバＢ」の処理サーバ構成データは、処理サーバ「処理サーバＡ」および「処理サーバＢ」が、処理モジュール「処理モジュールＧ１」を保持していることを表す。
【０１１１】
処理サーバ構成データ９０３に格納される情報は、管理者が必要に応じて、入力または更新しても良い。例えば、新たな処理サーバ８０２を追加した場合や、処理サーバ８０２に新たな処理モジュールを追加した場合には、処理サーバ構成データ９０３に情報を追加する。
【０１１２】
処理サーバ構成データ９０３は、ＣＰＵ１０２により実行される処理モジュール実行プログラム９０２が、実行する処理モジュールが保持されている処理サーバを選択する際に利用される。処理モジュール実行プログラム９０２の具体的な処理については、図１２を用いて後述する。
【０１１３】
図１１は、処理状況データ９０４の一例を示す図である。図１１に示すように、処理状況データ９０４は、処理サーバ１１０１と、処理モジュール１１０２と、処理開始時刻１１０３と、処理終了時刻１１０４とを含む。
【０１１４】
処理サーバ１１０１には、処理モジュールが実行されている、あるいは実行した処理サーバ８０２の情報を格納する。たとえば、サーバＡ８０２ａや、サーバＢ８０２ｂ、サーバＣ８０２ｃが挙げられる。
【０１１５】
処理モジュール１１０２には、現在実行中の、あるいは実行が終了した処理モジュールの情報を格納する。
【０１１６】
処理開始時刻１１０３には、処理モジュールの実行開始時刻が、処理終了時１１０４には、処理モジュールの実行終了時刻が格納される。なお、処理終了時刻１１０４に値が格納されていない場合には、当該処理サーバ１１０１において処理モジュール１１０２が実行されていることを表す。
【０１１７】
処理状況データ９０４は、ＣＰＵ１０２により実行される処理モジュール実行プログラム９０２が、処理モジュールの実行状況を把握する際に利用される。処理モジュール実行プログラム９０２の具体的な処理については、図１２を用いて後述する。
【０１１８】
続いて、データ処理装置１０１の処理モジュール実行プログラム９０２が処理依頼端末８０１が送信した処理依頼をネットワーク８０３を介して受信し、ネットワーク８０３を介して処理モジュール実行命令を送信する処理（以下、実行処理と呼ぶ。）について説明する。図１２は、実行処理のフローチャートである。
【０１１９】
図１２に示すように、実行処理を行う処理モジュール実行プログラム９０２は、ＣＰＵ１０２により実行され、ＩＦ９０１を介して処理依頼装置８０１がネットワーク８０３に送信したデータ処理依頼を受信する（ステップ１２０１）。ここで、データ処理依頼には、処理方式、データ型、データ量、処理データの情報を含む。
【０１２０】
処理モジュール実行プログラム９０２は、受信したデータ処理依頼から、処理方式、データ型、データ量の情報を取得する（ステップ１２０２）。
【０１２１】
処理モジュール実行プログラム９０２は、処理モジュール選択ポリシ１１５から処理モジュール選択ポリシを取得する（ステップ１２０３）。
【０１２２】
処理モジュール実行プログラム９０２は、ステップ１２０２で取得した処理方式、データ型の情報と、ステップ１２０３で取得した処理モジュール選択ポリシの処理方式２０２、データ型２０３とを比較し、該当する処理モジュール選択ポリシが存在すれば、ステップ１２０５に進み、存在しなければ実行処理を終了する（ステップ１２０４）。
【０１２３】
処理モジュール実行プログラム９０２は、ステップ１２０４で該当した処理モジュール選択ポリシのデータ量２０４の情報と、ステップ１２０２で取得したデータ量の情報とを比較し、該当する処理モジュール選択ポリシが存在すれば、ステップ１２０６に進み、存在しなければ実行処理を終了する（ステップ１２０５）。
【０１２４】
処理モジュール実行プログラム９０２は、記憶装置１０５に格納された処理サーバ構成データ９０３から処理サーバ構成データを取得する（ステップ１２０６）。
【０１２５】
処理モジュール実行プログラム９０２は、ステップ１２０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールが利用する処理サーバ８０２（例えば、処理サーバＡ８０２ａや、処理サーバＢ８０２ｂ、処理サーバＣ８０２ｃが挙げられる。）が空いているか否かを判断し、処理サーバ８０２が空いていれば処理１２０８に進み、処理サーバ８０２が空いていなければ処理１２１１に進む（ステップ１２０７）。なお、処理サーバ８０２が空いているか否かの判断については、ステップ１２０６で取得した処理サーバ構成データ９０３と、記憶装置１０５に格納されている処理状況データ９０４とを利用して判断する。具体的には、処理サーバ構成データ９０３から、ステップ１２０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールに該当する処理サーバ１００２を取得（処理モジュールを搭載している処理サーバ８０２の情報を取得）し、処理状況データ９０４から、先ほど取得した処理サーバ１００２に該当する処理サーバ１１０１の処理終了時刻１１０４に格納されている値を取得する。この時、処理終了時刻１１０４に値が格納されている場合に、処理サーバ１１０１に格納されている処理サーバ８０２が空いていると判断し、終了時刻１１０４に値が格納されていない場合に、処理サーバ１１０１に格納されている処理サーバ８０２が空いていない（現在利用中の処理サーバである）と判断する。
【０１２６】
図１１を用いて具体例を説明する。処理状況データ９０４の１行目に格納されている、処理サーバ１１０１が「処理サーバＡ」、処理モジュール１１０２が「処理モジュールＧ１」、処理開始時刻１１０３が「２０１１／１／１  １０：００：００」、処理終了時刻１１０４が「２０１１／１／１  １０：００：１０」の処理状況データは、処理終了時刻１１０４に値が格納されているため、現在空いている処理サーバだと判断できる。また、処理状況データ９０４の２行目に格納されている、処理サーバ１１０１が「処理サーバＢ」、処理モジュール１１０２が「処理モジュールＧ２」、処理開始時刻１１０３が「２０１１／１／１  １０：００：００」の処理状況データは、処理終了時刻１１０４に値が格納されていないため、現在利用中の処理サーバだと判断できる。さらに、処理状況データ１１０４の３行目に格納されている、処理サーバ１１０１が「処理サーバＢ」、処理モジュール１１０２が「処理モジュールＣ１」、処理開始時刻１１０３が「２０１１／１／１  １０：００：１０」、処理終了時刻１１０４が「２０１１／１／１  １０：００：２０」の処理状況データは、処理終了時刻１１０４に値が格納されているため、現在空いている処理サーバだと判断できる。
【０１２７】
処理モジュール実行プログラム９０２は、処理状況データ９０４の処理サーバ１１０１に、ステップ１２０７で該当した処理サーバ（空いている処理サーバ）の情報を、処理モジュール１１０２に、ステップ１２０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールの情報を、処理開始時刻６０３に、現在時刻を新たに格納する（ステップ１２０８）。
【０１２８】
処理モジュール実行プログラム９０２は、ステップ１２０７で該当した処理サーバに対して、ステップ１２０１で受信した、処理方式、データ型、データ量、処理データの情報を送信し、ステップ１２０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを実行する（ステップ１２０９）。
【０１２９】
処理モジュール実行プログラム９０２は、ステップ１２０８で格納した処理状況データ９０４の処理終了時刻１１０４に現在時刻を格納し（ステップ１２１０）、処理を終了する。
【０１３０】
処理モジュール実行プログラム９０２は、ステップ１２０４で該当し、かつ、ステップ１２０５で該当しなかった処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールが利用する処理サーバが空いているか否かを判断し、処理サーバが空いていれば処理１２１２に進み、処理サーバが空いていなければ処理を終了する（ステップ１２１１）。なお、処理サーバが空いているか否かの判断については、処理状況データ９０４を取得して行う。具体的には、処理状況データ９０４の処理サーバ１１０１と、処理終了時刻１１０４を取得し、処理終了時刻１１０４に値が格納されている場合に、処理サーバ１１０１に格納されている処理サーバが空いていると判断し、終了時刻１１０４に値が格納されていない場合に、処理サーバ１１０１に格納されている処理サーバが空いていない（現在利用中の処理サーバである）と判断する。
【０１３１】
処理モジュール実行プログラム９０２は、処理状況データ９０４の処理サーバ１１０１に、ステップ１２１１で該当した処理サーバ（空いている処理サーバ）の情報を、処理モジュール１１０２にステップ１２０４で該当し、かつ、ステップ１２０５で該当しなかった処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールの情報を、処理開始時刻６０３に、現在時刻を新たに格納する（ステップ１２１２）。
【０１３２】
処理モジュール実行プログラム９０２は、ステップ１２１１で該当した処理サーバに対して、ステップ１２０１で受信した、処理方式、データ型、データ量、処理データの情報を送信し、ステップ１２０４で該当し、かつ、ステップ１２０５で該当しなかった処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを実行する（ステップ１２１３）。
【０１３３】
処理モジュール実行プログラム９０２は、ステップ１２１２で格納した処理状況データ９０４の処理終了時刻１１０４に現在時刻を格納し（ステップ１２１４）、処理を終了する。
【０１３４】
ステップ１２０１からステップ１２１４までの実行処理の流れを、具体例を用いて説明する。例えば、処理モジュール実行プログラム９０２が、ＩＦ９０１を介して、処理依頼端末８０１がネットワーク８０３に送信した、処理方式「足し算」、データ型「整数」、データ量「１０」、処理データ「１、２、３、４、５、６、７、８、９、１０」という処理依頼を受信した場合（ステップ１２０１）、受信した処理依頼から、処理方式「足し算」、データ型「整数」、データ量「１０」を取得する（ステップ１２０２）。
【０１３５】
処理モジュール実行プログラム９０２は、記憶装置１０５に格納された処理モジュール選択ポリシ１１５の情報を取得し（ステップ１２０３）、ステップ１２０２で取得した処理方式「足し算」、データ型「整数」の情報と、ステップ１２０３で取得した処理モジュール選択ポリシの処理方式２０２、データ型２０３とを比較する。この場合、ポリシＩＤ２０１が「１」の処理方式２０２「足し算」、データ型２０３「整数」の処理モジュール選択ポリシと、ポリシＩＤ２０１が「２」の処理方式「足し算」、データ型２０３「整数」の処理モジュール選択ポリシに該当する（ステップ１２０４）。
【０１３６】
処理モジュール実行プログラム９０２は、ステップ１２０４で該当した、ポリシＩＤ２０１が「１」の処理モジュール選択ポリシと、ポリシＩＤ２０１が「２」の処理モジュール選択ポリシのデータ量２０４の情報と、ステップ１２０２で取得したデータ量「１０」の情報とを比較する。この場合、ポリシＩＤ２０１が「２」のデータ量２０４「１００００個未満」の処理モジュール選択ポリシに該当する（ステップ１２０５）。
【０１３７】
処理モジュール実行プログラム９０２は、記憶装置１０５に格納された処理サーバ構成データ９０３の情報を取得する（ステップ１２０６）。
【０１３８】
処理モジュール実行プログラム９０２は、ステップ１２０５で該当した、ポリシＩＤ２０１が「２」の処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュールを取得し、取得した処理モジュールが利用する処理サーバが空いているか否かの判断を行う（ステップ１２０７）。この場合、ステップ１２０６で取得した処理サーバ構成データ９０３より、該当する「処理モジュールＣ１」は、「処理サーバＡ」及び「処理サーバＢ」に搭載していることが分かるので、「処理サーバＡ」及び「処理サーバＢ」が空いているか否かの判断を行う。処理モジュール実行プログラム９０２は処理状況データ９０４の１行目に格納されている、処理サーバ１１０１が「処理サーバＡ」、処理モジュール１１０２が「処理モジュールＧ１」、処理開始時刻１１０３が「２０１１／１／１  １０：００：００」、処理終了時刻１１０４が「２０１１／１／１  １０：００：１０」の処理状況データを取得し、当該処理終了時刻１１０４に値が格納されていないことから、「処理サーバＡ」が空いている処理サーバと判断する。
【０１３９】
処理モジュール実行プログラム９０２は、処理状況データ９０４の処理サーバ１１０１に、ステップ１２０７で該当した処理サーバ「処理サーバＡ」の情報を、処理モジュール１１０２に、ステップ１２０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュール「処理モジュールＣ１」の情報を、処理開始時刻１１０３に現在時刻を格納する（ステップ１２０８）。この場合、例えば、現在時刻が、「２０１１／１／１  １１：００：００」であるとすると、更新後の処理状況データ９０４は、処理サーバ１１０１が「処理サーバＡ」、処理モジュール１１０２が「処理モジュールＣ１」、処理開始時刻１１０３が「２０１１／１／１  １１：００：００」、処理終了時刻１１０４が「」の処理状況データが４行目に追加されることとなる。
【０１４０】
処理モジュール実行プログラム９０２は、ステップ１２０７で該当した処理サーバ「処理サーバＡ」に、ステップ１２０１で受信した、処理方式「足し算」、データ型「整数」、データ量「１０」、処理データ「１、２、３、４、５、６、７、８、９、１０」という処理依頼を送信し、ステップ１２０５で該当した処理モジュール選択ポリシの処理モジュール２０５に格納された処理モジュール「処理モジュールＣ１」を実行する（ステップ１２０９）。
【０１４１】
処理モジュール実行プログラム９０２は、ステップ１２０８で格納した処理状況データ９０４の処理終了時刻１１０４に現在時刻を格納し（ステップ１２１０）、処理を終了する。
【０１４２】
このように、処理モジュール実行プログラム９０２は受信した処理依頼から、処理方式、データ型、データ量を取得し、処理モジュール選択ポリシと処理モジュールの処理状況に基づいて、最適な処理モジュールを実行する処理サーバを選択し実行することで、処理時間の高速化を行うことが可能となる。
【０１４３】
本実施例は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【０１４４】
１０１：データ処理装置
１０２：ＣＰＵ
１０３：ＧＰＵ
１０８：処理モジュール実行プログラム
１１５：処理モジュール選択ポリシ
５０４：処理状況データ
９０２：処理サーバ選択プログラム
９０３：処理サーバ構成データ
【図１】
2013186770.tif 000003
【図２】
2013186770.tif 000004
【図３】
2013186770.tif 000005
【図４】
2013186770.tif 000006
【図５】
2013186770.tif 000007
【図６】
2013186770.tif 000008
【図７】
2013186770.tif 000009
【図８】
2013186770.tif 000010
【図９】
2013186770.tif 000011
【図１０】
2013186770.tif 000012
【図１１】
2013186770.tif 000013
【図１２】
2013186770.tif 000014