(57)【要約】【課題】  演算処理装置のデータ処理時間を予め解析することなく、データ処理を従来に比べて高速に実行する。【解決手段】  第１の演算処理装置と、第２の演算処理装置と、第１の演算処理装置および第２の演算処理装置を制御する制御部とを有する情報処理装置の制御部が、第１の演算処理装置および第２の演算処理装置に共通の第１のデータ処理を、第１の演算処理装置と第２の演算処理装置のそれぞれに実行させ、第１の演算処理装置が実行する第１のデータ処理が、第２の演算処理装置が実行する第１のデータ処理より先に終了した場合、第２の演算処理装置が実行する第１のデータ処理を第２の演算処理装置に中断させる。【選択図】    図２
2014102683.tif 000002
【特許請求の範囲】
【請求項１】
第１の演算処理装置と、第２の演算処理装置と、前記第１の演算処理装置および前記第２の演算処理装置を制御する制御部とを有する情報処理装置の制御プログラムにおいて、
前記制御部が、
前記第１の演算処理装置および前記第２の演算処理装置に共通の第１のデータ処理を、前記第１の演算処理装置と前記第２の演算処理装置のそれぞれに実行させ、
前記第１の演算処理装置が実行する第１のデータ処理が、前記第２の演算処理装置が実行する第１のデータ処理より先に終了した場合、前記第２の演算処理装置が実行する第１のデータ処理を前記第２の演算処理装置に中断させることを特徴とする情報処理装置の制御プログラム。
【請求項２】
前記制御部が、
前記第１の演算処理装置に、前記第１の演算処理装置が実行した第１のデータ処理により得られた結果を、前記第２の演算処理装置へ転送させ、
前記第１および第２の演算処理装置に、前記第１の演算処理装置が実行した第１のデータ処理により得られた結果を用いて共通の第２のデータ処理を実行させ、
前記第１および第２の演算処理装置の一方が実行する第２のデータ処理が、前記第１および第２の演算処理装置の他方が実行する第２のデータ処理より先に終了した場合、他方の演算処理装置が実行する第２のデータ処理を前記他方の演算処理装置に中断させることを特徴とする請求項１記載の情報処理装置の制御プログラム。
【請求項３】
前記制御部が、
前記第１の演算処理装置に、前記第１の演算処理装置が実行した第１のデータ処理により得られた結果を用いて第２のデータ処理を実行させ、
前記第１の演算処理装置に、前記第１の演算処理装置が実行した第２のデータ処理により得られた結果を、前記第２の演算処理装置へ転送させ、
前記第１および第２の演算処理装置に、前記第１の演算処理装置が実行した第２のデータ処理により得られた結果を用いて共通の第３のデータ処理を開始させ、
前記第１および第２の演算処理装置の一方が実行する第３のデータ処理が、前記第１および第２の演算処理装置の他方が実行する第３のデータ処理より先に終了した場合、他方の演算処理装置が実行する第３のデータ処理を前記他方の演算処理装置に中断させることを特徴とする請求項１記載の情報処理装置の制御プログラム。
【請求項４】
前記第１および第２の演算処理装置が実行する第１のデータ処理が、共に所定の期間内に終了した場合、
前記制御部が、
前記第１および第２の演算処理装置に、前記第１および第２の演算処理装置が実行した第１のデータ処理により得られた結果をそれぞれ用いて共通の第２のデータ処理を実行させ、
前記第１および第２の演算処理装置の一方が実行する第２のデータ処理が、前記第１および第２の演算処理装置の他方が実行する第２のデータ処理より先に終了した場合、他方の演算処理装置が実行する第２のデータ処理を前記他方の演算処理装置に中断させることを特徴とする請求項１記載の情報処理装置の制御プログラム。
【請求項５】
前記制御部が、
一方の演算処理装置に、前記一方の演算処理装置が実行した第２のデータ処理により得られた結果を、前記他方の演算処理装置へ転送させ、
前記第１および第２の演算処理装置に、前記一方の演算処理装置が実行した第２のデータ処理により得られた結果を用いて共通の第３のデータ処理を開始させ、
前記第１および第２の演算処理装置の一方が実行する第３のデータ処理が、前記第１および第２の演算処理装置の他方が実行する第３のデータ処理より先に終了した場合、他方の演算処理装置が実行する第３のデータ処理を前記他方の演算処理装置に中断させることを特徴とする請求項４記載の情報処理装置の制御プログラム。
【請求項６】
前記制御部が、
前記第１および第２の演算処理装置の一方に、逐次処理によりデータ処理を実行させ、
前記第１および第２の演算処理装置の他方に、並列処理によりデータ処理を実行させることを特徴とする請求項１ないし請求項５のいずれか１項記載の情報処理装置の制御プログラム。
【請求項７】
前記制御部が、
前記第１および第２の演算処理装置の他方に、並列処理により正しい結果が得られるか否かの解析を実行させ、
解析により正しい結果が得られないと判断された場合、前記第１および第２の演算処理装置の一方が実行する第１のデータ処理が終了したか否かに拘わりなく、前記第１および第２の演算処理装置の他方が実行する第１のデータ処理を前記第１および第２の演算処理装置の他方に中断させることを特徴とする請求項６記載の情報処理装置の制御プログラム。
【請求項８】
第１の演算処理装置と、第２の演算処理装置と、前記第１の演算処理装置および前記第２の演算処理装置を制御する制御部とを有する情報処理装置の制御方法において、
前記制御部が、
前記第１の演算処理装置および前記第２の演算処理装置に共通の第１のデータ処理を、前記第１の演算処理装置と前記第２の演算処理装置のそれぞれに実行させ、
前記第１の演算処理装置が実行する第１のデータ処理が、前記第２の演算処理装置が実行する第１のデータ処理より先に終了した場合、前記第２の演算処理装置が実行する第１のデータ処理を前記第２の演算処理装置に中断させることを特徴とする情報処理装置の制御方法。
【請求項９】
第１の演算処理装置と、第２の演算処理装置と、前記第１の演算処理装置および前記第２の演算処理装置を制御する制御部とを有する情報処理装置において、
前記制御部が、
前記第１の演算処理装置および前記第２の演算処理装置に共通の第１のデータ処理を、前記第１の演算処理装置と前記第２の演算処理装置のそれぞれに実行させ、
前記第１の演算処理装置が実行する第１のデータ処理が、前記第２の演算処理装置が実行する第１のデータ処理より先に終了した場合、前記第２の演算処理装置が実行する第１のデータ処理を前記第２の演算処理装置に中断させることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置の制御プログラム、情報処理装置の制御方法および情報処理装置に関する。
【背景技術】
【０００２】
ＧＰＵ（Graphics Processing Unit）等のアクセラレータは、数十から数千個の演算器や演算コアを並列に動作させることで、ＣＰＵ（Central Processing Unit）よりも低いクロック周波数で多量のデータを処理可能である。この種のアクセラレータを動作させるプログラムは、ＣＰＵと同様のプログラム環境を用いて設計可能である。例えば、複数のスレッドをＣＰＵとＧＰＵとに分散して実行させることで、データ処理の効率は向上する（例えば、特許文献１、２参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−５２３１４０号公報
【特許文献２】特開２０１１−５２３１４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＣＰＵとＧＰＵとが複数のスレッドを並列に実行する場合、例えば、スレッドの並列度（同時に実行できるスレッド数）を解析し、並列度の低い処理をＣＰＵに実行させ、並列度の高い処理をＧＰＵに実行させることが望ましい。しかしながら、並列度は、入力するデータの性質により変化する場合があり、スレッドをＣＰＵとＧＰＵに適切に割り振ることは難しい。
【０００５】
１つの側面では、本発明の目的は、演算処理装置のデータ処理時間を予め解析することなく、データ処理を従来に比べて高速に実行することである。
【課題を解決するための手段】
【０００６】
一形態における情報処理装置の制御プログラム、情報処理装置の制御方法、および情報処理装置では、第１の演算処理装置と、第２の演算処理装置と、第１の演算処理装置および第２の演算処理装置を制御する制御部とを有する情報処理装置の制御部が、第１の演算処理装置および第２の演算処理装置に共通の第１のデータ処理を、第１の演算処理装置と第２の演算処理装置のそれぞれに実行させ、第１の演算処理装置が実行する第１のデータ処理が、第２の演算処理装置が実行する第１のデータ処理より先に終了した場合、第２の演算処理装置が実行する第１のデータ処理を第２の演算処理装置に中断させる。
【発明の効果】
【０００７】
第１および第２の演算処理装置に共通の第１のデータ処理を実行させ、先に終了した第１のデータ処理の結果を利用することで、第１および第２の演算処理装置のデータ処理時間を予め解析することなく、データ処理を従来に比べて高速に実行できる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態における情報処理装置の例を示す。
【図２】図１に示した情報処理装置の動作の例を示す。
【図３】別の実施形態における情報処理装置の動作の例を示す。
【図４】別の実施形態における情報処理装置を含むシステムの例を示す。
【図５】図４に示した情報処理装置の動作の例を示す。
【図６】図４に示した情報処理装置の動作の別の例を示す。
【図７】別の実施形態における情報処理装置の動作の例を示す。
【図８】図７の動作の続きを示す。
【図９】図７に示した処理を実行する情報処理装置の動作の別の例を示す。
【図１０】図９の動作の続きを示す。
【図１１】図７に示したデータ処理を開始した処理スレッドの動作の例を示す。
【図１２】図７に示したデータ処理の開始を指示した後の管理スレッドの動作の例を示す。
【図１３】図７に示したデータ処理を開始したＧＰＵの各スレッドの動作の例を示す。
【図１４】別の実施形態の情報処理装置における動作の例を示す。
【図１５】図１４の動作の続きを示す。
【図１６】図１４に示した処理を実行する情報処理装置の動作の別の例を示す。
【図１７】図１６の動作の続きを示す。
【図１８】図１４に示した処理を実行する情報処理装置の動作の別の例を示す。
【図１９】図１４に示した処理を実行する情報処理装置の動作の別の例を示す。
【図２０】データ処理の１０分の１を分散して実行する手法を示す。
【図２１】別の実施形態の情報処理装置における動作の例を示す。
【発明を実施するための形態】
【０００９】
以下、図面を用いて実施形態を説明する。
【００１０】
図１は、一実施形態における情報処理装置の例を示す。情報処理装置は、第１の演算処理装置１０および第２の演算処理装置２０と、第１の演算処理装置１０および第２の演算処理装置２０を制御する制御部３０とを有する。例えば、第１の演算処理装置１０は、プログラムに基づいて第１のデータ処理を逐次処理により実行するＣＰＵ（Central Processing Unit）等のプロセッサである。例えば、第２の演算処理装置２０は、プログラムに基づいて第２のデータ処理を並列処理により実行するＧＰＵ（Graphics Processing Unit）等のアクセラレータである。なお、第１の演算処理装置１０は、データ処理を逐次処理により実行する他のプロセッサでもよく、第２の演算処理装置２０は、データ処理を並列処理により実行する他のアクセラレータでもよい。ＧＰＵは、汎用的なデータ処理を実行可能なＧＰＧＰＵ（General Purpose Graphics Processing Unit）でもよい。
【００１１】
制御部３０は、第１の演算処理装置１０および第２の演算処理装置２０の動作を制御し、情報処理装置の制御方法を実現する。例えば、制御部３０は、記憶装置４０に格納された制御プログラムを実行することにより、第１の演算処理装置１０および第２の演算処理装置２０を制御する。なお、制御部３０は、第１の演算処理装置１０および第２の演算処理装置２０の一方に含まれてもよい。制御部３０が第１の演算処理装置１０に含まれる場合、第１の演算処理装置１０は、第１の演算処理装置１０のデータ処理用のプログラムと制御プログラムとを時分割で実行する。ただし、第１の演算処理装置１０がマルチコアＣＰＵの様に複数の処理を同時に実行する機能を有する場合、データ処理用のプログラムと制御プログラムとを同時に実行する事が可能である。制御部３０が第２の演算処理装置２０に含まれる場合、第２の演算処理装置２０は、第２の演算処理装置２０のデータ処理用のプログラムと制御プログラムとを並列に実行する。
【００１２】
図２は、図１に示した情報処理装置の動作の例を示す。図２に示したフローは、制御部３０が記憶装置４０に格納されたプログラムを実行することで実現される。すなわち、図２は、情報処理装置の制御プログラムの内容および情報処理装置の制御方法の内容を示す。
【００１３】
まず、ステップＳ１０において、制御部３０は、第１の演算処理装置１０および第２のデータ処理装置２０の各々に、共通のデータ処理の開始を指示する。第１の演算処理装置１０および第２のデータ処理装置２０は、制御部３０からの指示に基づいて、共通のデータ処理の実行をそれぞれ開始する。ここで、第１の演算処理装置１０および第２の演算処理装置２０は、共通の入力データを用いてデータ処理をそれぞれ実行し、データ処理により得られる結果は、互いに同じである。
【００１４】
次に、ステップＳ１２において、制御部３０は、第１の演算処理装置１０からデータ処理の終了通知を受けたか否かを判定する。制御部３０は、第１の演算処理装置１０から終了通知を受けた場合、処理はステップＳ１６に進み、第１の演算処理装置１０から終了通知を受けない場合、処理はステップＳ１４に進む。
【００１５】
ステップＳ１４において、制御部３０は、第２の演算処理装置２０からデータ処理の終了通知を受けたか否かを判定する。制御部３０は、第２の演算処理装置２０から終了通知を受けた場合、処理はステップＳ１８に進み、第２の演算処理装置２０から終了通知を受けない場合、処理はステップＳ１２に戻る。なお、ステップＳ１２、Ｓ１４の順序は逆でもよい。
【００１６】
第１の演算処理装置１０によるデータ処理が第２の演算処理装置２０によるデータ処理より先に終了した場合、ステップＳ１６において、制御部３０は、第２の演算処理装置２０にデータ処理の中断を指示する。第２の演算処理装置２０は、制御部３０からの指示に基づいて、データ処理を中断する。
【００１７】
第２の演算処理装置２０によるデータ処理が第１の演算処理装置１０によるデータ処理より先に終了した場合、ステップＳ１８において、制御部３０は、第１の演算処理装置１０にデータ処理の中断を指示する。第１の演算処理装置１０は、制御部３０からの指示に基づいて、データ処理を中断する。
【００１８】
この後、例えば、制御部３０は、データ処理が先に終了した演算処理装置（例えば、第１の演算処理装置１０）から他方の演算処理装置（例えば、第２の演算処理装置２０）に、データ処理により得られた結果を転送させてもよい。この場合、制御部３０は、第１の演算処理装置１０および第２の演算処理装置２０の各々に、データ処理により得られた結果を利用して、次の共通のデータ処理を実行させる。そして、次のデータ処理が先に終了した方の演算処理装置により得られた結果を利用して、さらに次の共通のデータ処理が順次に実行される。
【００１９】
以上、この実施形態では、情報処理装置は、第１および第２の演算処理装置１０、２０により互いに並行して実行される共通のデータ処理のうち、先に終了したデータ処理の結果を得ることができる。これにより、逐次処理と並列処理のいずれが早く終了するかを判断できないデータ処理において、実際に早く終了した演算処理装置の結果を利用でき、情報処理装置の処理効率を向上できる。すなわち、第１および第２の演算処理装置１０、２０のデータ処理時間を予め解析することなく、データ処理を従来に比べて高速に実行できる。
【００２０】
ＧＰＵ等のアクセラレータを利用する場合、ＣＰＵとアクセラレータ間のデータ転送等によるオーバーヘッドが掛かる。また、並列度が入力データによって変わる場合、多くのデータセットを用意して、ＣＰＵによるデータ処理の処理時間とアクセラレータによるデータ処理の処理時間とを予め解析し、処理時間が逆転する境目の条件を探すことになる。そして、データ処理は、解析により得られた処理時間が短い方の演算処理装置を用いて実行される。さらに、ＣＰＵやアクセラレータを性能が異なるものに交換するとパラメータが変わってしまい、データ処理の処理時間が変わってしまう。
【００２１】
このような場合にも、この実施形態では、処理時間の解析や、プログラムのチューニングは行わない。すなわち、逐次処理により実行するデータ処理時間と並列処理により実行するデータ処理時間の双方を見積もり、処理時間が短い方を採用するという前処理は行わない。データ処理時間の短い方を択一的に利用するため、データ処理の実行中にパラメータや負荷などの状況が変化しても図２に示したフローを実行可能である。
【００２２】
この結果、データ処理をそれぞれ実行する第１の演算処理装置１０のプログラムおよび第２の演算処理装置２０のプログラムをチューニング等により変更することなく、情報処理装置の処理効率を向上できる。換言すれば、入力データの変更等に依存して計算能力が変化し、第１および第２の演算処理装置１０、２０のデータ処理時間の長短が逆転する場合でも、プログラムを変更することなく、早く終了したデータ処理の結果を利用できる。
【００２３】
さらに、第１および第２の演算処理装置１０、２０のどちらのデータ処理時間が短いか分からない場合にも、データ処理時間の増加を抑え、第２の演算処理装置２０等のアクセラレータを利用する機会を増やすことができる。例えば、コンパイラや、プログラムを別のプログラムに変換するトランスレータにおいて、アクセラレータを利用する機会を増やすことができる。
【００２４】
図３は、別の実施形態における情報処理装置の動作の例を示す。図２に示した処理と同一または同様の処理については、同じ符号を付し、詳細な説明は省略する。例えば、情報処理装置は、図１と同様に、第１の演算処理装置１０および第２の演算処理装置２０と、第１の演算処理装置１０および第２の演算処理装置２０を制御する制御部３０とを有する。図３に示したフローは、制御部３０が記憶装置４０に格納されたプログラムを実行することで実現される。すなわち、図３は、情報処理装置の制御プログラムの内容および情報処理装置の制御方法の内容を示す。
【００２５】
この実施形態では、制御部３０は、第１および第２の演算処理装置１０、２０に一部のデータ処理を実行させ、第１および第２の演算処理装置１０、２０のどちらがデータ処理を高速に実行可能か判定する。ステップＳ１６、Ｓ１８の処理は、図２に示したステップＳ１６、Ｓ１８の処理と同一または同様である。また、ステップＳ１１、Ｓ１３、Ｓ１５は、図２に示したステップＳ１０、Ｓ１２、Ｓ１４の代わりに実行される。
【００２６】
ステップＳ１１において、制御部３０は、第１の演算処理装置１０および第２のデータ処理装置２０の各々に、共通のデータ処理のうち、一部のデータ処理の開始を指示する。第１の演算処理装置１０および第２のデータ処理装置２０は、制御部３０からの指示に基づいて、一部のデータ処理の実行をそれぞれ開始する。ここで、第１の演算処理装置１０および第２の演算処理装置２０は、共通の入力データを用いて一部のデータ処理をそれぞれ実行し、一部のデータ処理により得られる結果は、互いに同じである。
【００２７】
ステップＳ１３において、制御部３０は、第１の演算処理装置１０から一部のデータ処理の終了通知を受けたか否かを判定する。制御部３０は、第１の演算処理装置１０から終了通知を受けた場合、処理はステップＳ１６に進み、第１の演算処理装置１０から終了通知を受けない場合、処理はステップＳ１５に進む。
【００２８】
ステップＳ１５において、制御部３０は、第２の演算処理装置２０から一部のデータ処理の終了通知を受けたか否かを判定する。制御部３０は、第２の演算処理装置２０から終了通知を受けた場合、処理はステップＳ１８に進み、第２の演算処理装置２０から終了通知を受けない場合、処理はステップＳ１３に戻る。なお、ステップＳ１３、Ｓ１５の順序は逆でもよい。
【００２９】
ステップＳ１６の実行後、制御部３０は、ステップＳ１７において、第１のデータ処理装置１０に残りのデータ処理の実行を指示する。ステップＳ１８の実行後、制御部３０は、ステップＳ１９において、第２のデータ処理装置２０に残りのデータ処理の実行を指示する。
【００３０】
この後、例えば、制御部３０は、残りのデータ処理を実行させた演算処理装置（例えば、第１の演算処理装置１０）から他方の演算処理装置（例えば、第１の演算処理装置２０）に、残りのデータ処理により得られた結果を転送させてもよい。この場合、制御部３０は、第１の演算処理装置１０および第２の演算処理装置２０の各々に、残りのデータ処理により得られた結果を利用して、次の共通のデータ処理の一部を実行させる。そして、データ処理の一部が先に終了した方の演算処理装置に、残りのデータ処理を実行させる。さらに、残りのデータ処理により得られた結果を利用して、次の共通のデータ処理が順次に実行される。
【００３１】
以上、この実施形態においても、図１および図２に示した実施形態と同様に、逐次処理と並列処理のいずれが早く終了するかを判断できないデータ処理において、実際に早く終了した方の結果を利用でき、情報処理装置の処理効率を向上できる。すなわち、ＣＰＵ１００およびＧＰＵ２００のデータ処理時間を予め解析することなく、データ処理を従来に比べて高速に実行できる。
【００３２】
さらに、データ処理の一部を実行させて、逐次処理と並列処理のいずれが早く終了するかを判断することで、第１および第２の演算処理装置１０、２０がデータ処理を重複して実行する期間を図２に比べて短くできる。第１および第２の演算処理装置１０、２０は、共通のデータ処理を実行するため、第１および第２の演算処理装置１０、２０の一方によるデータ処理は無駄になる。この実施形態では、無駄なデータ処理を最小限にして、情報処理装置の処理効率を向上できる。また、データ処理を重複して実行する期間を短くできるため、情報処理装置の消費電力を削減できる。
【００３３】
図４は、別の実施形態における情報処理装置を含むシステムの例を示す。システムＳＹＳは、情報処理装置１０００、周辺制御装置２０００、ハードディスクドライブ装置３０００およびネットワークインタフェース４０００を有する。例えば、システムＳＹＳは、サーバ等のコンピュータシステムである。なお、システムＳＹＳの構成は、図４に示した例に限定されない。
【００３４】
情報処理装置１０００は、ＣＰＵ１００等のプロセッサ、ＧＰＵ２００等のアクセラレータおよび記憶装置３００、４００を有する。ＣＰＵ１００は、第１の演算処理装置の一例であり、ＧＰＵ２００は、第２の演算処理装置の一例である。ＣＰＵ１００は、データ処理を実行するとともにＧＰＵ２００が実行するデータ処理を管理する実行部１１０を有する。ＧＰＵ２００は、データ処理を実行する実行部２１０を有する。ＧＰＵは、汎用的なデータ処理を実行可能なＧＰＧＰＵでもよい。
【００３５】
例えば、記憶装置３００は、実行部１１０により実行されるデータ処理プログラムおよびＣＰＵ１００とＧＰＵ２００の動作を管理する管理プログラムと、データ処理プログラムにより処理されるデータとを格納する領域を有する。例えば、記憶装置４００は、実行部２１０により実行されるデータ処理プログラムと、処理プログラムにより処理されるデータを格納する領域を有する。実行部１１０により実行されるデータ処理プログラムによるデータ処理と、実行部２１０により実行されるデータ処理プログラムによるデータ処理は互いに共通である。データ処理で使用する入力データは互いに同じであり、データ処理により得られる結果は互いに同じである。なお、記憶装置３００は、ＣＰＵ１００の内部に設けられてもよく、記憶部４００は、ＧＰＵ２００の内部に設けられてもよい。
【００３６】
また、記憶装置３００は、実行部１１０、２１０がそれぞれ実行するデータ処理プログラムの元のプログラムと、元のプログラムから実行部１１０、２１０がそれぞれ実行するデータ処理プログラムを生成するコンパイラまたはトランスレータを格納してもよい。この場合、例えば、ＣＰＵ１００は、コンパイラまたはトランスレータを実行することにより、元のプログラムから実行部１１０が実行するデータ処理プログラムを生成し、生成したデータ処理プログラムを記憶装置３００に格納する。また、ＣＰＵ１００は、コンパイラまたはトランスレータを実行することにより、元のプログラムから実行部２１０が実行するデータ処理プログラムを生成し、生成したデータ処理プログラムを記憶装置４００に格納する。
【００３７】
周辺制御装置２０００は、ＣＰＵ１００からの指示に基づいて、ハードディスクドライブ装置３０００およびネットワークインタフェース４０００の動作を制御する。例えば、ハードディスクドライブ装置３０００は、ネットワークからの情報を格納し、ネットワークに出力する情報を格納する。ネットワークインタフェース４０００は、情報処理装置１０００とネットワークとの間の情報の授受を制御する。
【００３８】
例えば、実行部１１０、２１０がそれぞれ実行するデータ処理プログラムや、データ処理プログラムの元のプログラムは、ネットワークからハードディスクドライブ装置３０００や情報処理装置１０００に転送されてもよい。また、周辺制御装置２０００は光学ドライブ装置を接続してもよい。この場合、実行部１１０、２１０がそれぞれ実行するデータ処理プログラムや元のプログラムは、光学ドライブ装置に装着される光ディスクを介して、ハードディスクドライブ装置３０００や情報処理装置１０００に転送される。
【００３９】
なお、情報処理装置１０００は、複数のＣＰＵ１００を有してもよく、複数のＧＰＵ２００を有してもよい。すなわち、図５、図６およびそれ以降に示す処理は、複数のＣＰＵ群１００と複数のＧＰＵ群２００とに、それぞれ共通のデータ処理を実行させてもよい。この場合、複数のＣＰＵ群１００による全てのデータ処理と複数のＧＰＵ群２００による全てのデータ処理のうち、先に終了した方の結果をその後の処理で利用する。一方の全てのデータ処理が終了した場合、他方のデータ処理は中断される。
【００４０】
さらに、３つ以上のデバイス（ＣＰＵ等のプロセッサ、ＧＰＵ等のアクセラレータ）にそれぞれ共通のデータ処理を実行させて、先に終了したデータ処理の結果をその後の処理で利用してもよい。例えば、ＣＰＵと、倍精度演算の性能が高いＧＰＵと、並列度が高くメモリバンド幅が広いＧＰＵとにより、共通のデータ処理の演算時間を競わせてもよい。あるいは、ＣＰＵの１つの演算コアと、ＣＰＵの４つの演算コアと、２つのＧＰＵとにより、共通のデータ処理の演算時間を競わせてもよい。
【００４１】
図５は、図４に示した情報処理装置１０００の動作の例を示す。図５の動作は、ＣＰＵ１００およびＧＰＵ２００がプログラムを実行することで実現される。すなわち、図５は、情報処理装置の制御プログラムの内容および情報処理装置の制御方法の内容を示す。ＣＰＵ１００の処理において、太枠で示した処理は、ＣＰＵ１００とＧＰＵ２００の動作を管理する管理プログラムの内容を示す。白枠の矢印は、データ処理の実行中を示す。
【００４２】
図５では、ＣＰＵ１００が実行するデータ処理ＤＰ１が、ＧＰＵ２００が実行するデータ処理ＤＰ１より先に終了する。ＣＰＵ１００の処理は、実行部１１０により実行され、ＧＰＵ２００の処理は、実行部２１０により実行される。この例では、ＣＰＵ１００およびＧＰＵ２００が実行する２番目のデータ処理ＤＰ２は、１番目のデータ処理ＤＰ１の結果を利用して実行される。
【００４３】
まず、ステップＳ１００において、ＣＰＵ１００は、複数の中断情報領域ＩＮＴの確保をＧＰＵ２００に要求する。ステップＳ３００において、ＧＰＵ２００は、ＧＰＵ２００により読み出し可能なレジスタや記憶装置４００等の記憶領域に複数の中断情報領域ＩＮＴを確保する。ステップＳ１０２において、ＣＰＵ１００は、中断情報領域ＩＮＴのうち、最初に実行するデータ処理ＤＰ１に対応する中断情報領域ＩＮＴ１を”未中断”状態にリセットする。
【００４４】
次に、ステップＳ１０４において、ＣＰＵ１００は、ＧＰＵ２００によるデータ処理ＤＰ１に使用するデータを格納するデータ領域ＤＡＴの確保をＧＰＵ２００に要求する。なお、データ領域ＤＡＴへのデータの転送は、所定のクロックサイクルを必要とするため、データ領域ＤＡＴは、複数のデータ処理ＤＰ１、ＤＰ２に対応して一度に確保することが望ましい。これにより、データ処理ＤＰ１、ＤＰ２毎にＣＰＵ１００とＧＰＵ２００間でデータを転送する場合に比べて、データ転送の頻度を少なくでき、情報処理装置によるデータ処理の効率を向上できる。
【００４５】
ステップＳ３０２において、ＧＰＵ２００は、ＧＰＵ２００により読み書き可能な記憶装置４００等の記憶領域に、データ領域ＤＡＴを確保する。なお、中断情報領域ＩＮＴおよびデータ領域ＤＡＴは、ＧＰＵ２００を介することなく、ＣＰＵ１００により確保されてもよい。
【００４６】
次に、ステップＳ１０６において、ＣＰＵ１００は、データ領域ＤＡＴに最初のデータ処理ＤＰ１で使用するデータを転送する。ステップＳ３０４において、ＧＰＵ２００は、データ処理ＤＰ１で使用するデータを受信し、受信したデータをデータ領域ＤＡＴに書き込む。ここで、ＧＰＵ２００は、データの受信を完了したことをＣＰＵ１００に通知してもよい。
【００４７】
次に、ステップＳ１１０において、ＣＰＵ１００は、ＧＰＵ２００にデータ処理ＤＰ１の開始を指示する。ステップＳ３１０において、ＧＰＵ２００は、データ処理ＤＰ１の開始の指示に基づいて、データ領域ＤＡＴ内のデータを用いてデータ処理ＤＰ１の実行を開始する。
【００４８】
ステップＳ２１０において、ＣＰＵ１００は、実行部１１０によりデータ処理ＤＰ１の実行を開始する。なお、ステップＳ１１０、Ｓ２１０の順序は逆でもよい。ステップＳ２１０、Ｓ３１０により、ＣＰＵ１００とＧＰＵ２００は、互いに同じデータを用いて共通のデータ処理ＤＰ１を並列に実行する。ここで、ＣＰＵ１００とＧＰＵ２００の双方により実行されるデータ処理ＤＰ１で得られるべきデータは互いに同じである。これを保障するため、もし、ステップＳ２１０がデータ領域ＤＡＴを上書きする場合、ステップＳ３０４において、上書き領域の転送が完了してからステップＳ２１０を開始する。
【００４９】
ステップＳ１５０において、ＣＰＵ１００は、実行部１１０によるデータ処理ＤＰ１の終了に応答して、中断情報領域ＩＮＴ１を”中断要求”状態にセットする。このとき、ＧＰＵ２００によるデータ処理ＤＰ１は終了していない。ステップＳ３２０において、ＧＰＵ２００はＣＰＵ１００からの”中断要求”に基づいて実行中のデータ処理ＤＰ１を中断する中断処理を実行する。そして、ＧＰＵ２００は、実行中のデータ処理ＤＰ１を中断した後、ＣＰＵ１００にデータ処理ＤＰ１が中断したことを示す中断情報を発行する。
【００５０】
ステップＳ１８２において、ＣＰＵ１００は、中断情報領域ＩＮＴのうち、２番目に実行するデータ処理ＤＰ２に対応する中断情報領域ＩＮＴ２を”未中断”状態にリセットする。なお、ステップＳ１８２は、ステップＳ１０２とともに実行されてもよい。
【００５１】
ステップＳ１８４において、ＣＰＵ１００は、データ処理ＤＰ１により得られた結果をデータ領域ＤＡＴに転送する。ステップＳ３５０において、ＧＰＵ２００は、ＣＰＵ１００により実行されたデータ処理ＤＰ１の結果を受信する。ここで、ＧＰＵ２００は、データ処理ＤＰ１の結果の受信を完了したことをＣＰＵ１００に通知してもよい。次に、ステップＳ１９０において、ＣＰＵ１００は、ＧＰＵ２００にデータ処理ＤＰ２の開始を指示する。
【００５２】
ステップＳ３８０において、ＧＰＵ２００は、データ処理ＤＰ２の開始の指示に基づいて、データ領域ＤＡＴに格納されたデータ処理ＤＰ１により得られた結果を利用してデータ処理ＤＰ２の実行を開始する。ステップＳ２６０において、ＣＰＵ１００は、データ処理ＤＰ１により得られた結果を利用して、実行部１１０によりデータ処理ＤＰ２の実行を開始する。なお、ステップＳ１９０、Ｓ２６０の順序は逆でもよい。
【００５３】
以降、ステップＳ１５０からＳ２６０およびＳ３２０からＳ３８０と同一または同様の処理が実行され、必要に応じて、これ等の処理が繰り返される。但し、ＧＰＵ２００によるデータ処理ＤＰ２がＣＰＵ１００によるデータ処理より早く終了した場合、ステップＳ１５０からＳ１８４およびＳ３２０、Ｓ３５０に代えて、図６に示すフローにおけるステップＳ２３０、Ｓ１７４、Ｓ１７６、Ｓ１８２およびＳ３４０、Ｓ３４２と同一または同様の処理が実行される。
【００５４】
換言すれば、ＣＰＵ１００によるデータ処理ＤＰ２がＧＰＵ２００によるデータ処理ＤＰ２より先に終了した場合、ＧＰＵ２００によるデータ処理が中断され、ＣＰＵ１００によるデータ処理ＤＰ２の結果が採用される。ＧＰＵ２００によるデータ処理ＤＰ２がＣＰＵ１００によるデータ処理ＤＰ２より先に終了した場合、ＣＰＵ１００によるデータ処理が中断され、ＧＰＵ２００によるデータ処理ＤＰ２の結果が採用される。
【００５５】
なお、ＣＰＵ１００からＧＰＵ２００に割り込み要求が発行可能な場合、ステップＳ１５０の中断情報領域ＩＮＴ１のセットに代えて、ＣＰＵ１００からＧＰＵ２００に、データ処理ＤＰ１を中断させる割り込み要求を発行してもよい。この場合、ステップＳ１００、Ｓ３００は実行されず、中断情報領域ＩＮＴは確保されない。なお、中断情報領域ＩＮＴは、割り込み処理を要求する割り込みフラグとして利用されてもよい。さらに、ＧＰＵ２００からＣＰＵ１００に割り込み要求が発行可能な場合、ステップＳ３２０の中断情報の発行に代えて、ＣＰＵ１００からＧＰＵ２００に、データ処理ＤＰ１が中断したことを示す割り込み要求を発行してもよい。
【００５６】
また、ステップＳ１０６、Ｓ３０４において、ＧＰＵ２００によるデータ処理に必要な全てデータを転送できない場合、例えば、データは、ＣＰＵ１００に管理される記憶装置３００等にコピーされる。そして、ＣＰＵ１００は、記憶装置３００等にコピーしたデータを複数回に分けてＧＰＵ２００に転送しながら、ＧＰＵ２００にデータ処理を実行させる。ＣＰＵ１００は、コピーする前のオリジナルなデータを用いてデータ処理し、データ処理に基づいてオリジナルなデータの書き換えを実行する。この場合にも、ＧＰＵ２００は、コピーされたデータを用いてデータ処理を実行するため、ＣＰＵ１００によって書き換えられたデータを使うことはない。すなわち、ＧＰＵ２００は、誤ったデータを用いてデータ処理を実行することはない。
【００５７】
図６は、図４に示した情報処理装置１０００の動作の別の例を示す。図５に示した処理と同一または同様の処理については、同じ符号を付し、詳細な説明は省略する。図６の動作は、ＣＰＵ１００およびＧＰＵ２００がプログラムを実行することで実現される。すなわち、図６は、情報処理装置の制御プログラムの内容および情報処理装置の制御方法の内容を示す。
【００５８】
図６に示す例では、ＧＰＵ２００が実行するデータ処理ＤＰ１が、ＣＰＵ１００が実行するデータ処理ＤＰ１より先に終了する。ステップＳ１００からＳ２１０、Ｓ２６０およびステップＳ３００からＳ３１０、Ｓ３８０の処理は、図５と同一または同様である。
【００５９】
ステップＳ３４０において、ＧＰＵ２００は、データ処理ＤＰ１の終了に応答して、データ処理ＤＰ１の終了を示す終了情報をＣＰＵ１００に発行する。ステップＳ２３０において、ＣＰＵ１００は、ＧＰＵ２００からの終了情報に基づいて実行中のデータ処理ＤＰ１を中断する中断処理を実行する。
【００６０】
ステップＳ１７４において、ＣＰＵ１００は、ＧＰＵ２００により終了したデータ処理ＤＰ１の結果の転送要求をＧＰＵ２００に発行する。ステップＳ３４２において、ＧＰＵ２００は、転送要求に基づいて、データ処理ＤＰ１の結果をＣＰＵ１００に転送する。ステップＳ１７６において、ＣＰＵ１００は、ＧＰＵ２００から転送されるデータ処理ＤＰ１の結果を受信する。
【００６１】
この後、図５と同様に、ＣＰＵ１００は、ステップＳ１８２、Ｓ１９０、Ｓ２６０を実行し、ＧＰＵ２００は、ステップＳ３８０を実行する。以降、ステップステップＳ２３０、Ｓ１７４、Ｓ１７６、Ｓ１８２、Ｓ１９０、Ｓ２６０およびステップＳ３４０、Ｓ３４２、Ｓ３８０と同一または同様の処理が実行され、必要に応じて、これ等の処理が繰り返される。但し、ＣＰＵ１００によるデータ処理ＤＰ２がＧＰＵ２００によるデータ処理より早く終了した場合、ステップＳ２３０、Ｓ１７４、Ｓ１７６、Ｓ１８２およびステップＳ３４０、Ｓ３４２に代えて、図５に示すフローにおけるステップＳ１５０、Ｓ１８２、Ｓ１８４およびステップＳ３２０、Ｓ３５０と同一または同様の処理が実行される。
【００６２】
換言すれば、ＣＰＵ１００によるデータ処理ＤＰ２がＧＰＵ２００によるデータ処理ＤＰ２より先に終了した場合、ＧＰＵ２００によるデータ処理が中断され、ＣＰＵ１００によるデータ処理ＤＰ２の結果が採用される。ＧＰＵ２００によるデータ処理ＤＰ２がＣＰＵ１００によるデータ処理ＤＰ２より先に終了した場合、ＣＰＵ１００によるデータ処理が中断され、ＧＰＵ２００によるデータ処理ＤＰ２の結果が採用される。
【００６３】
以上、この実施形態においても、図１から図３に示した実施形態と同様に、逐次処理と並列処理のいずれが早く終了するかを判断できないデータ処理において、実際に早く終了した方の結果を利用でき、情報処理装置の処理効率を向上できる。すなわち、ＣＰＵ１００およびＧＰＵ２００のデータ処理時間を予め解析することなく、データ処理を従来に比べて高速に実行できる。
【００６４】
さらに、データ処理ＤＰ１を中断したＧＰＵ２００（またはＣＰＵ１００）は、データ処理ＤＰ１を終了したＣＰＵ１００（またはＧＰＵ２００）から転送されるデータ処理ＤＰ１の結果を利用して、次のデータ処理ＤＰ２を開始する。これにより、データ処理ＤＰ１を中断したＧＰＵ２００（またはＣＰＵ１００）によるデータ処理ＤＰ２の開始タイミングを、データ処理ＤＰ１を終了したＣＰＵ１００（またはＧＰＵ２００）によるデータ処理ＤＰ２の開始タイミングに合わせることができる。この結果、データ処理の結果を利用して次のデータ処理を順次に実行する場合にも、各データ処理において早く終了した方の結果を利用でき、情報処理装置の処理効率を向上できる。
【００６５】
図７から図１３は、別の実施形態における情報処理装置の動作の例を示す。図５および図６に示した処理と同一または同様の処理については、同じ符号を付し、詳細な説明は省略する。
【００６６】
例えば、情報処理装置は、図４と同様に、ＣＰＵ１００と、ＧＰＵ２００等のアクセラレータと、記憶装置３００、４００とを有し、システムＳＹＳ上に搭載される。この実施形態では、ＣＰＵ１００は、データ処理ＤＰ１を実行する前に、データ処理ＤＰ１を実行する処理スレッドと、処理スレッドおよびＧＰＵ２００を管理する管理スレッドとを生成し、データ処理ＤＰ１の終了後または中断後にスレッドを合流する。例えば、ＯｐｅｎＭＰ（登録商標）を利用する場合、スレッドの生成および合流は、ｓｅｃｔｉｏｎｓやｓｅｃｔｉｏｎを用いて記述される。
【００６７】
図７から図１３の動作は、ＣＰＵ１００およびＧＰＵ２００がプログラムを実行することで実現される。すなわち、図７から図１３は、情報処理装置の制御プログラムの内容および情報処理装置の制御方法の内容を示す。図７および図８は、図５と同様に、ＣＰＵ１００が実行するデータ処理ＤＰ１が、ＧＰＵ２００が実行するデータ処理ＤＰ１より先に終了する例を示す。
【００６８】
図７において、ＣＰＵ１００は、ステップＳ１０６によりデータ領域ＤＡＴにデータ処理ＤＰ１で使用するデータを転送した後、ステップＳ１０８において、処理スレッドと管理スレッドとを生成する。ステップＳ２０２において、処理スレッドは、ＧＰＵ２００がデータの受信を完了するのを待つ。ＧＰＵ２００によるデータの受信完了後、ステップＳ２１０において、処理スレッドは、データ処理ＤＰ１の実行を開始する。なお、データ処理ＤＰ１がデータ領域ＤＡＴを上書きしないのであれば、ステップＳ２０２は不要である。
【００６９】
ステップＳ２３０において、処理スレッドは、データ処理ＤＰ１の終了に応答して、管理スレッドにデータ処理ＤＰ１が終了したことを示す終了情報を発行し、中断情報領域ＩＮＴ１を”中断要求”状態にセットする。このとき、ＧＰＵ２００によるデータ処理ＤＰ１は終了していない。ＧＰＵ２００によるステップＳ３２０の処理は、図５と同様である。
【００７０】
管理スレッドは、ステップＳ１７８において、処理スレッドからの終了情報と、ＧＰＵ２００からの中断情報とを受信し、ステップＳ１８０において、ＣＰＵ１００は処理スレッドと管理スレッドとを合流する。
【００７１】
次に、図８に示すステップＳ１８４により管理スレッドからデータ領域ＤＡＴにデータ処理ＤＰ１により得られた結果が転送された後、ＣＰＵ１００は、ステップＳ１８６において、処理スレッドと管理スレッドとを生成する。ステップＳ３５２において、ＧＰＵ２００は、ＣＰＵ１００からのデータ処理ＤＰ１の結果の受信が完了したことを示す受信完了情報をＣＰＵ１００に発行する。ステップＳ２５８において、処理スレッドは、ＧＰＵ２００からの受信完了情報を待つ。そして、処理スレッドは、ＧＰＵ２００からの受信完了情報に基づいて、ステップＳ２６０において、データ処理ＤＰ２の実行を開始する。
【００７２】
図９および図１０は、ＧＰＵ２００が実行するデータ処理ＤＰ１が、ＣＰＵ１００が実行するデータ処理ＤＰ１より先に終了する例を示す。
【００７３】
図９のステップＳ１６０において、管理スレッドは、データ処理ＤＰ１の終了を示す終了情報をＧＰＵ２００から受信する。この後、ステップＳ１７０において、管理スレッドは、処理スレッドに中断情報を発行し、処理スレッドに実行中のデータ処理ＤＰ１を中断させる。ステップＳ１７２において、管理スレッドは、処理スレッドによるデータ処理ＤＰ１が中断することを待つ。そして、管理スレッドは、処理スレッドによるデータ処理ＤＰ１の結果をＧＰＵ２００に転送した後、ステップＳ１８０においてスレッドを合流する。
【００７４】
図９および図１０の例では、ＧＰＵ２００は、データ処理ＤＰ１を終了するため、データ処理ＤＰ１の結果を知っている。このため、図１０では、図８に示したステップＳ１８４、Ｓ３５０、Ｓ３５２、Ｓ２５８は実行されない。図１０のその他のフローは、図８と同一または同様である。
【００７５】
図１１は、図７に示したデータ処理ＤＰ１を開始した処理スレッドの動作の例を示す。例えば、図１１の動作は、図７に示したステップＳ２１０、Ｓ２３０の処理および図９に示したステップＳ２４０の処理に対応する。なお、説明を簡単にするために、データ処理ＤＰ１は、一重ループ処理とする。
【００７６】
まず、ステップＳ４００において、処理スレッドは、データ処理を繰り返し実行するループを続行するか否か、すなわち、データ処理が未終了か終了したかを判定する。データ処理が終了していない場合、処理はステップＳ４０２に進み、データ処理が終了した場合、処理はステップＳ４０８に進む。
【００７７】
ステップＳ４０２において、処理スレッドは、ＧＰＵ２００によるデータ処理ＤＰ１の進行状況をチェックする時期か否かを判定する。チェックする時期が来た場合、ステップＳ４１６に進み、チェックする時期が来ていない場合、処理はステップＳ４０４に進む。例えば、ステップＳ４１６、Ｓ４１８によるチェックの頻度は、チェックに要する処理スレッドの負荷が、データ処理に要する処理スレッドの負荷の１％から１０％程度になるように設定される。例えば、ステップＳ４０２において、６４回に１回、処理がステップＳ４１６に進む。
【００７８】
ステップＳ４０４において、処理スレッドは、演算処理を実行する。次に、ステップＳ４０６において、処理スレッドは、ループカウンタを操作し、（例えば、インクリメント）、ステップＳ４００に戻る。
【００７９】
ＧＰＵ２００によるデータ処理の進行状況をチェックする時期が来た場合、ステップＳ４１６において、処理スレッドは、ポーリング等により、ＧＰＵ２００によるデータ処理ＤＰ１の終了を示す終了情報を管理スレッドから読み取る。次に、ステップＳ４１８において、処理スレッドは、ステップＳ４１６による終了情報の読み取り結果に基づいて、ＧＰＵ２００によるデータ処理ＤＰ１が終了したか否かを判定する。ＧＰＵ２００によるデータ処理ＤＰ１が終了した場合、処理はステップＳ４２０に進み、ＧＰＵ２００によるデータ処理ＤＰ１が終了していない場合、処理はステップＳ４０４に進む。ステップＳ４２０において、処理スレッドは、管理スレッドと待ち合わせる。
【００８０】
一方、ＣＰＵ１００によるデータ処理ＤＰ１が終了した場合、ステップＳ４０８において、処理スレッドは、ポーリング等によりＧＰＵ２００から終了情報を読み取る。次に、ステップＳ４１０において、処理スレッドは、ステップＳ４０８による終了情報の読み取り結果に基づいて、ＧＰＵ２００によるデータ処理ＤＰ１が終了したか否かを判定する。ＧＰＵ２００によるデータ処理ＤＰ１が終了した場合、ＣＰＵ１００とＧＰＵ２００によるデータ処理がほぼ同時に終了したと判断され、処理はステップＳ４１４に進み、ＧＰＵ２００によるデータ処理ＤＰ１が終了していない場合、処理はステップＳ４１２に進む。
【００８１】
ステップＳ４１２において、処理スレッドは、中断情報領域ＩＮＴ１を”中断要求”状態にセットする。例えば、ステップＳ４１２の処理は、アトミック処理で実行される。ステップＳ４１４において、処理スレッドは、管理スレッドと待ち合わせる。
【００８２】
図１２は、図７に示したデータ処理ＤＰ１の開始を指示した後の管理スレッドの動作の例を示す。例えば、図１２の動作は、図７に示したステップＳ１７８の処理および図９に示したステップＳ１６０、Ｓ１７０、Ｓ１７２、Ｓ１７４、Ｓ１７６の処理に対応する。
【００８３】
まず、ステップＳ５００において、管理スレッドは、ポーリング等によりＧＰＵ２００によるデータ処理ＤＰ１の終了を示す終了情報をＧＰＵ２００から読み取る。次に、ステップＳ５０２において、管理スレッドは、ステップＳ５００による終了情報の読み取り結果に基づいて、ＧＰＵ２００によるデータ処理ＤＰ１が終了したか否かを判定する。ＧＰＵ２００によるデータ処理ＤＰ１が終了した場合、処理はステップＳ５０４に進み、ＧＰＵ２００によるデータ処理ＤＰ１が終了していない場合、処理はステップＳ５１０に進む。
【００８４】
ステップＳ５０４において、管理スレッドは、ＧＰＵ２００によるデータ処理ＤＰ１の終了に基づいて、処理スレッドに中断情報を発行し、処理スレッドに実行中のデータ処理ＤＰ１を中断させる。例えば、ステップＳ５０４の処理は、アトミック処理で実行される。次にステップＳ５０６において、管理スレッドは、処理スレッドと待ち合わせる。すなわち、ステップ５０６および図１１に示したステップＳ４２０により、管理スレッドと処理スレッドとは互いに待ち合わせる。次に、ステップＳ５０８において、管理スレッドは、ＧＰＵ２００から転送されるデータ処理ＤＰ１の結果を受信する。なお、処理スレッドによるデータ処理ＤＰ１も終了している場合、ステップＳ５０８は省略可能である。
【００８５】
一方、ステップＳ５１０において、管理スレッドは、ポーリング等により、処理スレッドによるデータ処理ＤＰ１の終了を示す終了情報を処理スレッドから読み取る。次に、ステップＳ５１２において、管理スレッドは、ステップＳ５１０による終了情報の読み取り結果に基づいて、処理スレッドによるデータ処理ＤＰ１が終了したか否かを判定する。処理スレッドによるデータ処理ＤＰ１が終了した場合、処理はステップＳ５１４に進み、処理スレッドによるデータ処理ＤＰ１が終了していない場合、処理はステップＳ５００に戻る。ステップＳ５１４において、管理スレッドは、処理スレッドと待ち合わせる。すなわち、ステップ５１４および図１１に示したステップＳ４１４により、管理スレッドと処理スレッドとは互いに待ち合わせる。
【００８６】
図１３は、図７に示したデータ処理ＤＰ１を開始したＧＰＵ２００の各スレッドの動作の例を示す。例えば、図１３の動作は、図７に示したステップＳ３１０、Ｓ３２０の処理に対応する。なお、図１３は、ＧＰＵ２００による各スレッドの動作を示しており、例えば、図７のステップＳ３００、Ｓ３０２、Ｓ３０４の処理や、図８のステップＳ３５０、Ｓ３５２の処理、および図９のステップＳ３４０の処理は、図１３には示されない。図７のステップＳ３００、Ｓ３０２、Ｓ３０４の処理や、図８のステップＳ３５０、Ｓ３５２の処理、および図９のステップＳ３４０の処理は、例えば、ＧＰＵ２００が実行するスレッドを管理するＧＰＵ２００の管理部により実行される。
【００８７】
ステップＳ６００において、ＧＰＵ２００は、次に実行するスレッドが実行すべきスレッド（実行スレッド）か、実行しないスレッド（非実行スレッド）かを判定する。スレッドが実行スレッドの場合、処理はステップＳ６０２に進み、スレッドが非実行スレッドの場合、処理は終了する。
【００８８】
ステップＳ６０２において、ＧＰＵ２００は、データ処理を繰り返し実行するループを続行するか否かを判定する。データ処理が終了していない場合、処理はステップＳ６０４に進み、全てのデータ処理が終了した場合、処理は終了する。
【００８９】
ステップＳ６０４において、ＧＰＵ２００は、処理スレッドによるデータ処理ＤＰ１の進行状況をチェックする時期か否かを判定する。チェックする時期が来た場合、ステップＳ６０６に進み、チェックする時期が来ていない場合、処理はステップＳ６１０に進む。例えば、ステップＳ６０６、Ｓ６０８によるチェックの頻度は、以下のように設定される。
【００９０】
例えば、チェックに要するＧＰＵ２００の負荷は、データ処理（演算処理）に要する負荷の１％から１０％程度になるように設定される。ステップＳ６１０の演算処理が、１００クロックサイクル掛かり、ステップＳ６０６による中断情報領域ＩＮＴ１の読み取り処理（メモリレイテンシ）が２００クロックサイクル掛かるとする。６４回の演算処理毎に中断情報領域ＩＮＴ１をチェックすると、チェックによるＧＰＵ２００の負担の増分は約３％（２００クロックサイクル／（１００クロックサイクル×６４回））と見積もれる。同様に、演算処理が２００サイクル掛かり、６４回の演算処理毎の中断情報領域ＩＮＴ１の読み取り処理が２００サイクル掛かるとすると、ＧＰＵ２００の負担の増分は約２％（２００クロックサイクル／（２００クロックサイクル×６４回））と見積もれる。
【００９１】
ステップＳ６０６において、ＧＰＵ２００は、中断情報領域ＩＮＴ１に設定された値を読み取る。次に、ステップＳ６０８において、ＧＰＵ２００は、ステップＳ６０６による中断情報領域ＩＮＴ１の読み取り結果に基づいて、ＣＰＵ１００によるデータ処理ＤＰ１が終了したか否かを判定する。ＣＰＵ１００によるデータ処理ＤＰ１が終了した場合、処理は終了する。すなわち、実行中のスレッドは中断する。ＣＰＵ１００によるデータ処理ＤＰ１が終了していない場合、処理はステップＳ６１０に進む。
【００９２】
ステップＳ６１０において、ＧＰＵ２００は、演算処理を実行する。次に、ステップＳ６１２において、ＧＰＵ２００は、ループカウンタを操作し（例えば、インクリメント）、ステップＳ６０２に戻る。
【００９３】
以上、この実施形態においても、図１から図６に示した実施形態と同様に、逐次処理と並列処理のいずれが早く終了するかを判断できないデータ処理において、実際に早く終了した方の結果を利用でき、情報処理装置の処理効率を向上できる。すなわち、データ処理を実行するスレッドの並列度を解析することなく、スレッドを高速に処理できる。
【００９４】
さらに、ＣＰＵ１００の処理を、データ処理ＤＰ１を実行する処理スレッドと、処理スレッドおよびＧＰＵ２００を管理する管理スレッドとに分けることで、データ処理ＤＰ１の元のプログラムと、処理スレッドが実行するプログラムとの差異を少なくできる。これにより、処理スレッドと管理スレッドを分けない場合に比べて、データ処理ＤＰ１を実行するプログラムを元のプログラムから容易に生成できる。
【００９５】
図１４から図１９は、別の実施形態の情報処理装置における動作の例を示す。図５から図１０に示した処理と同一または同様の処理については、同じ符号を付し、詳細な説明は省略する。
【００９６】
例えば、情報処理装置は、図４と同様に、ＣＰＵ１００と、ＧＰＵ２００等のアクセラレータと、記憶装置３００、４００とを有し、システムＳＹＳ上に搭載される。この実施形態では、図７から図１０と同様に、ＣＰＵ１００は、データ処理ＤＰ１を実行する前に、ＧＰＵ２００を管理する管理スレッドとデータ処理ＤＰ１を実行する処理スレッドとを生成し、データ処理ＤＰ１の終了後または中断後にスレッドを合流する。
【００９７】
図１４および図１５は、図５、図７および図８と同様に、処理スレッドが実行するデータ処理ＤＰ１が、ＧＰＵ２００が実行するデータ処理ＤＰ１より先に終了する例を示す。処理スレッドは、ＧＰＵ２００によるデータの受信の完了を待った後、ステップＳ２１１において、データ処理ＤＰ１の１０分の１（１０％）の処理の実行を開始する。次に、ステップＳ２１４において、処理スレッドは、データ処理ＤＰ１の１０分の１に掛かった処理時間を管理スレッドが認識可能な領域に登録する。１０分の１の処理を終了した処理スレッドは、ステップＳ２２１において、データ処理ＤＰ１の残りの１０分の９（９０％）の実行を開始する。
【００９８】
一方、ステップＳ３１２において、ＧＰＵ２００は、データ処理ＤＰ１の開始の指示に基づいて、データ処理ＤＰ１の１０分の１（１０％）の処理の実行を開始する。ステップＳ１６０において、管理スレッドは、処理スレッドおよびＧＰＵ２００による１０分の１の処理の終了を待つ。管理スレッドは、処理スレッドによる処理時間の登録に基づいて、処理スレッドによるデータ処理ＤＰ１の１０分の１の処理の終了を認識する。
【００９９】
次に、ステップＳ１６２において、管理スレッドは、データ処理ＤＰ１の開始を指示してから所定の時間内に、ＧＰＵ２００からの終了情報を受けないことに基づいて、中断情報領域ＩＮＴ１を”中断要求”状態にセットする（時間切れ）。次に、ステップＳ１６４において、管理スレッドは、図７に示したステップＳ１７８と同様に、ＧＰＵ２００からの中断情報を受ける。ステップＳ１８０において、ＣＰＵ１００は処理スレッドと管理スレッドとを合流する。
【０１００】
次に、図８と同様に、図１５に示す処理が実行される。但し、ステップＳ２６１、Ｓ３８１では、データ処理ＤＰ２の１０分の１の処理がそれぞれ開始される。その後、処理スレッドによる１０分の１の処理がＧＰＵ２００による１０分の１の処理より早い場合、図１４のステップＳ２１４、Ｓ２２１、Ｓ１６０、Ｓ１６２、Ｓ１６４、Ｓ１８０、Ｓ３２０と同一または同様の処理が実行される。ＧＰＵ２００による１０分の１の処理が処理スレッドによる１０分の１の処理より早い場合、図１６のステップＳ３１４、Ｓ１６０および図１７と同一または同様の処理が実行される。
【０１０１】
換言すれば、処理スレッドによるデータ処理ＤＰ２の１０分の１がＧＰＵ２００によるデータ処理ＤＰ２の１０分の１より先に終了した場合、ＧＰＵ２００によるデータ処理が中断され、処理スレッドによるデータ処理ＤＰ２の１０分の１の結果が採用される。そして、処理スレッドにより、データ処理ＤＰ２の残りの１０分の９が実行される。ＧＰＵ２００によるデータ処理ＤＰ２の１０分の１が処理スレッドによるデータ処理ＤＰ２の１０分の１より先に終了した場合、処理スレッドによるデータ処理が中断され、ＧＰＵ２００によるデータ処理ＤＰ２の１０分の１の結果が採用される。そして、ＧＰＵ２００により、データ処理ＤＰ２の残りの１０分の９が実行される。
【０１０２】
図１６および図１７は、図６、図９および図１０と同様に、ＧＰＵ２００が実行するデータ処理ＤＰ１が、処理スレッドが実行するデータ処理ＤＰ１より先に終了する例を示す。図１６のステップＳ３１４において、ＧＰＵ２００は、データ処理ＤＰ１の１０分の１が終了した後、処理が終了したことを示す終了情報を管理スレッドに発行する。ステップＳ１６０において、管理スレッドは、ＧＰＵ２００からの終了情報を受信する。このとき、処理スレッドによるデータ処理ＤＰ１の１０分の１は終了していない。
【０１０３】
次に、図１７のステップＳ１６２において、管理スレッドは、ＧＰＵ２００からの終了情報に基づいて、ＧＰＵ２００によるデータ処理ＤＰ１の１０分の１に掛かった処理時間をレジスタ等に登録する。次に、ステップＳ１６４において、管理スレッドは、ＧＰＵ２００に、データ処理ＤＰ１の残りの１０分の９（９０％）の処理の開始を指示する。ステップＳ３１６において、ＧＰＵ２００は、データ処理ＤＰ１の開始の指示に基づいて、データ処理ＤＰ１の残りの１０分の９の処理の実行を開始する。
【０１０４】
ステップＳ１７０において、管理スレッドは、データ処理ＤＰ１の開始を指示してから所定の時間内に、処理スレッドからの終了情報を受けないことに基づいて、処理スレッドに中断情報を発行し、ＧＰＵ２００に実行中のデータ処理ＤＰ１を中断させる（時間切れ）。
【０１０５】
この後、図９と同様に、ＧＰＵ２００により実行されたデータ処理ＤＰ１の残りの１０分の９の結果が、管理スレッドを介してＧＰＵ２００から処理スレッドに転送され、スレッドが合流される（Ｓ１７４、Ｓ１７６、Ｓ１８０、Ｓ３４２）。そして、図１５と同様に、中断情報領域ＩＮＴ２が”未中断”状態にリセットされ、処理スレッドと管理スレッドが再び生成され、処理スレッドとＧＰＵ２００によりデータ処理ＤＰ２の１０分の１の実行がそれぞれ開始される（Ｓ１８２、Ｓ１８６、Ｓ１９０、２６１、Ｓ３８１）。
【０１０６】
その後、処理スレッドによる１０分の１の処理がＧＰＵ２００による１０分の１の処理より早い場合、図１４のステップＳ２１４、Ｓ２２１、Ｓ１６０、Ｓ１６２、Ｓ１６４、Ｓ１８０、Ｓ３２０と同一または同様の処理が実行される。ＧＰＵ２００による１０分の１の処理が処理スレッドによる１０分の１の処理より早い場合、図１６のステップＳ３１４、Ｓ１６０および図１７と同一または同様の処理が実行される。
【０１０７】
換言すれば、処理スレッドによるデータ処理ＤＰ２の１０分の１がＧＰＵ２００によるデータ処理ＤＰ２の１０分の１より先に終了した場合、ＧＰＵ２００によるデータ処理が中断され、処理スレッドによるデータ処理ＤＰ２の１０分の１の結果が採用される。そして、処理スレッドにより、データ処理ＤＰ２の残りの１０分の９が実行される。ＧＰＵ２００によるデータ処理ＤＰ２の１０分の１が処理スレッドによるデータ処理ＤＰ２の１０分の１より先に終了した場合、処理スレッドによるデータ処理が中断され、ＧＰＵ２００によるデータ処理ＤＰ２の１０分の１の結果が採用される。そして、ＧＰＵ２００により、データ処理ＤＰ２の残りの１０分の９が実行される。
【０１０８】
図１８および図１９は、図１４に示した処理を実行する情報処理装置の動作の別の例を示す。図１８および図１９では、処理スレッドおよびＧＰＵ２００により実行されるデータ処理ＤＰ１の１０分の１の処理時間に優位差がないため、処理スレッドおよびＧＰＵ２００の両方により、データ処理ＤＰ１の残り１０分の９が実行される。そして、残り１０分の９の処理を早く終了した方の結果が使用される。図１８は、処理スレッドによる残り１０分の９の処理が、ＧＰＵ２００による残り１０分の９の処理より早く終了する例を示す。図１９は、ＧＰＵ２００による残り１０分の９の処理が、処理スレッドによる残り１０分の９の処理より早く終了する例を示す。
【０１０９】
図１８のステップＳ１６０において、管理スレッドは、データ処理ＤＰ１の開始を指示してから所定の期間内に、処理スレッドからの終了情報およびＧＰＵ２００からの終了情報を両方受ける。管理スレッドは、処理スレッドおよびＧＰＵ２００によりそれぞれ実行されたデータ処理ＤＰ１の１０分の１の処理時間に優位差がないと判定し、ステップＳ１６５において、処理スレッドとＧＰＵ２００の両方に残り１０分の９の処理の開始を指示する。
【０１１０】
図１８では、処理スレッドによる残り１０分の９の処理が、ＧＰＵ２００による残り１０分の９の処理より早く終了するため、図７と同様に、処理スレッドは、終了情報を発行し、中断情報領域ＩＮＴ１を”中断要求”状態にセットし、ＧＰＵ２００による残り１０分の９の処理が中断される（Ｓ２３０、Ｓ１７８、Ｓ３２０）。
【０１１１】
この後、図１４と同様に、ステップＳ１８０において、ＣＰＵ１００は処理スレッドと管理スレッドとを合流する。さらに、図１５と同様に、処理スレッドおよびＧＰＵ２００により次のデータ処理ＤＰ２の１０分の１の実行がそれぞれ開始される。
【０１１２】
図１９は、図１８のステップＳ１００、Ｓ１０２、Ｓ１０４、Ｓ１０６、Ｓ３００、Ｓ３０２、Ｓ３０４の記載を省略している。図１８に示した処理と同一または同様の処理については、同じ符号を付し、詳細な説明は省略する。
【０１１３】
図１９では、ＧＰＵ２００によるデータ処理ＤＰ１の残り１０分の９の処理が、処理スレッドによるデータ処理ＤＰ１の残り１０分の９の処理より早く終了する。このため、図９と同様に、ＧＰＵ２００から終了情報が発行され、処理スレッドによる残り１０分の９の処理が中断される（Ｓ３４０、Ｓ１６８、Ｓ１７０、Ｓ１７２、Ｓ２４０）。また、図９と同様に、ＧＰＵ２００から管理スレッドにデータ処理ＤＰ１の結果が転送され、スレッドが合流される（ステップＳ１７４、Ｓ３４２、Ｓ１７６、Ｓ１８０）。この後、図１５と同様に、処理スレッドおよびＧＰＵ２００によりデータ処理ＤＰ２の１０分の１の実行がそれぞれ開始される。
【０１１４】
図１８および図１９では、図１５と同様に、処理スレッドおよびＧＰＵ２００により次のデータ処理ＤＰ２の１０分の１の実行がそれぞれ開始された後、管理スレッドは、処理スレッドおよびＧＰＵ２００によるデータ処理ＤＰ２の１０分の１の終了を待つ。そして、処理スレッドによるデータ処理ＤＰ２の１０分の１がＧＰＵ２００によるデータ処理ＤＰ２の１０分の１より先に終了した場合、ＧＰＵ２００によるデータ処理が中断され、処理スレッドによるデータ処理ＤＰ２の１０分の１の結果が採用される。処理スレッドは、データ処理ＤＰ２の１０分の１の処理により得られた結果を利用して、データ処理ＤＰ２の残りの１０分の９を実行する。
【０１１５】
一方、ＧＰＵ２００によるデータ処理ＤＰ２の１０分の１が処理スレッドによるデータ処理ＤＰ２の１０分の１より先に終了した場合、処理スレッドによるデータ処理が中断され、ＧＰＵ２００によるデータ処理ＤＰ２の１０分の１の結果が採用される。そして、ＧＰＵ２００は、データ処理ＤＰ２の１０分の１の処理により得られた結果を利用して、データ処理ＤＰ２の残りの１０分の９が実行される。
【０１１６】
さらに、ＣＰＵ１００およびＧＰＵ２００によるデータ処理ＤＰ２の１０分の１の処理時間に優位差がない場合、管理スレッドは、処理スレッドとＧＰＵ２００の両方に残り１０分の９の処理の開始を指示する。
【０１１７】
図２０は、データ処理の１０分の１を分散して実行する手法を示す。例えば、１００万個のスレッドを処理する場合、ＣＰＵ１００の処理スレッドおよびＧＰＵ２００の各々は、図１４、図１６、図１８、図１９のステップＳ２１１、Ｓ３１２において、１０万個のスレッドを実行する。
【０１１８】
この例では、１０００個のスレッドを各々含む１０００個のブロックが順次に処理されるとする。ブロック番号Ｂは、ＣＰＵ１００およびＧＰＵ２００の演算コアに投入されるブロックの順序を示す。スレッド番号Ｌは、ＣＰＵ１００およびＧＰＵ２００の演算コアで処理される１００万個のスレッドの通し番号を示す。スレッド番号Ｎは、１００万個のスレッドに予め割り当てられた通し番号であり、ブロック番号Ｂおよびスレッド番号Ｌに基づいて、式（１）から生成される。例えば、式（１）は、プログラム中に記述され、スレッド番号Ｎは、１００個のブロック番号Ｂ（０から９９）と１０００個のスレッド番号Ｌ（０から９９９）を用いて生成される。
N＝L＋((B % 100)*10000)+((B/100)*1000)  ‥‥（１）
式（１）において、”％”は、モジュロ演算を表す。式（１）により生成されるスレッド番号Ｎにより、ＣＰＵ１００およびＧＰＵ２００に投入するスレッドを決めることにより、実行される１０万個のスレッドを、１００万個のスレッドの中から分散して選択できる。これにより、データに依存する計算時間のばらつきを平均化できるため、１０分の１の処理を実行することでデータ処理全体の処理時間が予測可能になる。したがって、連続する１０万個のスレッド番号Ｎ（例えば、０から９９９９９）に対応する処理を実行して、ＣＰＵ１００とＧＰＵ２００のどちらの処理時間が短いかを競わせる場合に比べて、残りの１０分の９の処理時間を予測の精度を向上できる。この結果、データ処理ＤＰ１を早く終了するデバイス（ＣＰＵ１００またはＧＰＵ２００）の予想精度を向上でき、情報処理装置の処理効率を向上できる。
【０１１９】
以上、この実施形態においても、図３に示した実施形態と同様に、データ処理の一部を実行させて、逐次処理と並列処理のいずれが早く終了するかを判断することで、第１および第２の演算処理装置１０、２０がデータ処理を重複して実行する期間を短くできる。これにより、情報処理装置の処理効率を向上しながら、情報処理装置の消費電力を削減できる。
【０１２０】
さらに、一部のデータ処理ＤＰ１を実行させて早く終了したＣＰＵ１００（またはＧＰＵ２００）は、残りのデータ処理を実行し、残りのデータ処理ＤＰ１の結果は、ＣＰＵ１００（またはＧＰＵ２００）からＧＰＵ２００（またはＣＰＵ１００）に転送される。これにより、一部のデータ処理ＤＰ１の実行を中断したＧＰＵ２００（またはＣＰＵ１００）による次のデータ処理ＤＰ２を、データ処理ＤＰ１を終了したＣＰＵ１００（またはＧＰＵ２００）によるデータ処理ＤＰ２に合わせて実行できる。この結果、データ処理の結果を利用して次のデータ処理の一部を順次に実行する場合にも、各データ処理において早く終了した方の結果を利用でき、情報処理装置の処理効率を向上できる。
【０１２１】
図２１は、別の実施形態の情報処理装置における動作の例を示す。例えば、情報処理装置は、図４と同様に、ＣＰＵ１００と、ＧＰＵ２００等のアクセラレータと、記憶装置３００、４００とを有し、システムＳＹＳ上に搭載される。
【０１２２】
図２１の動作は、ＣＰＵ１００およびＧＰＵ２００がプログラムを実行することで実現される。すなわち、図２１は、情報処理装置の制御プログラムの内容および情報処理装置の制御方法の内容を示す。図７に示した処理と同一または同様の処理については、同じ符号を付し、詳細な説明は省略する。ステップＳ３９０、Ｓ３９２、Ｓ３９４、Ｓ３９６を除く処理は、図７と同様である。
【０１２３】
例えば、情報処理装置は、図４と同様に、ＣＰＵ１００と、ＧＰＵ２００等のアクセラレータと、記憶装置３００、４００とを有し、システムＳＹＳ上に搭載される。この実施形態では、ＧＰＵ２００は、データ処理ＤＰ１の実行と並行して、データ処理ＤＰ１を実行するプログラムを解析する。そして、並列処理の実行により誤った演算結果が得られると判断された場合、ＧＰＵ２００が実行中のデータ処理ＤＰ１が中断される。なお、プログラムの解析は、データ処理ＤＰ１を実行するＧＰＵ２００と別のアクセラレータにより実行されてもよい。
【０１２４】
ステップＳ３９０において、ＧＰＵ２００は、管理スレッドからのデータ領域ＤＡＴの確保の要求に基づいて、ステップＳ３０２で確保する領域とは別の領域にデータ領域ＤＡＴを確保する。次に、ステップＳ３９２において、ＧＰＵ２００は、ステップＳ２０４で受信したデータを、新たに確保したデータ領域ＤＡＴに書き込む。
【０１２５】
次に、ステップＳ３９４において、ＧＰＵ２００は、データ処理ＤＰ１の実行と並行して、データ処理ＤＰ１を実行するプログラムの並列処理が可能などうかを判断する並列性解析を実行する。ＧＰＵ２００は、並列処理の実行により誤った演算結果が得られると判断した場合、ステップＳ３９６において、自ら中断情報領域ＩＮＴ１を”中断要求”状態にセットする。なお、中断情報領域ＩＮＴ１が、ＧＰＵ２００からアクセスできる領域にない場合、ＧＰＵ２００は、中断要求を管理スレッドに伝え、管理スレッドが中断情報領域ＩＮＴ１をセットしてもよい。
【０１２６】
そして、ＧＰＵ２００は、ステップＳ３２０において、実行中のデータ処理ＤＰ１を中断する中断処理を実行し、データ処理ＤＰ１が中断したことを示す中断情報をＣＰＵ１００に発行する。これにより、ＧＰＵ２００が、誤った並列処理を実行して誤った結果を生成することはなく、ＣＰＵ１００とＧＰＵ２００とによりデータ処理ＤＰ１を競わせる場合にも、データ処理ＤＰ１により得られる結果の信頼性を向上できる。
【０１２７】
なお、ステップＳ３９４において、データ処理ＤＰ１を実行するプログラムの並列処理が可能と判断された場合、ステップＳ３９６は実行されない。この場合、例えば、処理スレッドによるデータ処理ＤＰ１の終了に基づいて、中断情報領域ＩＮＴ１がセットされ、図７および図８と同一または同様の処理が実行される。あるいは、ＧＰＵ２００のデータ処理ＤＰ１の終了に基づいて、処理スレッドにより実行中のデータ処理ＤＰ１が中断され、図９および図１０と同一または同様の処理が実行される。
【０１２８】
以上、この実施形態においても、図１から図１３に示した実施形態と同様に、逐次処理と並列処理のいずれが早く終了するかを判断できないデータ処理において、実際に早く終了した方の結果を利用でき、情報処理装置の処理効率を向上できる。すなわち、ＣＰＵ１００およびＧＰＵ２００のデータ処理時間を予め解析することなく、データ処理を従来に比べて高速に実行できる。
【０１２９】
さらに、データ処理ＤＰ１を実行するプログラムが並列処理可能などうかを判断する並列性解析をＧＰＵ２００により実行することで、誤った並列処理を実行して誤った結果を生成することを無くすことができる。この結果、ＣＰＵ１００とＧＰＵ２００とによりデータ処理ＤＰ１を競わせる場合にも、データ処理ＤＰ１により得られる結果の信頼性を向上できる。
【０１３０】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１３１】
１０‥第１の演算処理装置；２０‥第２の演算処理装置；３０‥制御部；４０‥記憶装置；１００‥ＣＰＵ；１１０‥実行部；２００‥ＧＰＵ；２１０‥実行部；３００、４００‥記憶装置；１０００‥情報処理装置；２０００‥周辺制御装置；３０００‥ハードディスクドライブ装置；４０００‥ネットワークインタフェース；ＳＹＳ‥システム
【図１】
2014102683.tif 000003
【図２】
2014102683.tif 000004
【図３】
2014102683.tif 000005
【図４】
2014102683.tif 000006
【図５】
2014102683.tif 000007
【図６】
2014102683.tif 000008
【図７】
2014102683.tif 000009
【図８】
2014102683.tif 000010
【図９】
2014102683.tif 000011
【図１０】
2014102683.tif 000012
【図１１】
2014102683.tif 000013
【図１２】
2014102683.tif 000014
【図１３】
2014102683.tif 000015
【図１４】
2014102683.tif 000016
【図１５】
2014102683.tif 000017
【図１６】
2014102683.tif 000018
【図１７】
2014102683.tif 000019
【図１８】
2014102683.tif 000020
【図１９】
2014102683.tif 000021
【図２０】
2014102683.tif 000022
【図２１】
2014102683.tif 000023