(57)【要約】  データ処理方法において、第１データ処理装置（５１）は、第１処理の処理要求に応答して第１処理の処理情報を取得し、第１処理の処理情報に含まれる第１処理フラグにトルーを設定する。第１データ処理装置（５１）は、第１処理を実行した後に第１処理の処理情報の第１終了フラグにトルーを設定する。第１データ処理装置（５１）は、第１処理に続いて実行される第３処理の実行を開始する前に実行が終了している必要のある第２処理の処理情報を取得し、第２処理の処理情報に含まれる第２処理フラグおよび第２終了フラグに基づいて実行する処理を決定する。
2012160655.tif 000002
【特許請求の範囲】
【請求項１】
第１データ処理装置は、
第１処理の処理要求に応答して前記第１処理の処理情報を取得し、
前記第１処理の処理情報に含まれる第１処理フラグにトルーを設定し、
前記第１処理を実行した後に前記第１処理の処理情報の第１終了フラグにトルーを設定し、
前記第１処理に続いて実行される第３処理の前に実行される第２処理の処理情報を取得し、
前記第２処理の処理情報に含まれる第２処理フラグおよび第２終了フラグに基づいて実行する処理を決定すること
を特徴とするデータ処理方法。
【請求項２】
前記第２処理フラグがフォールスを示すときに前記第２処理を実行すること
を特徴とする請求項１に記載のデータ処理方法。
【請求項３】
前記第２処理フラグがトルーを示すとともに前記第２処理の処理情報に含まれる第２終了フラグがトルーを示すとき、前記第３処理を実行すること
を特徴とする請求項１または請求項２に記載のデータ処理方法。
【請求項４】
前記第２処理フラグがトルーを示すとともに前記第２処理の処理情報に含まれる第２終了フラグがフォールスを示すとき、前記第３処理の実行を開始しないこと
を特徴とする請求項１または請求項２に記載のデータ処理方法。
【請求項５】
前記第２処理の実行結果を受信し、
前記第２処理の処理情報を取得し、
前記第２処理の処理情報に含まれる処理装置情報が前記第１データ処理装置を示すとともに第２終了フラグがトルーを示すとき、前記処理装置情報を更新すること
を特徴とする請求項１乃至請求項４の何れか一に記載のデータ処理方法。
【請求項６】
前記第２処理の実行結果を受信し、
前記第２処理の処理情報を取得し、
前記第２処理の処理情報に含まれる処理装置情報が前記第１データ処理装置を示すとともに第２終了フラグがフォールスを示し第２処理フラグがトルーを示すとき、前記第２処理の実行を停止すること
を特徴とする請求項１乃至請求項４の何れか一に記載のデータ処理方法。
【請求項７】
前記第２処理の実行結果を受信し、
前記第２処理の処理情報を取得し、
前記第２処理の処理情報に含まれる処理装置情報が前記第１データ処理装置を示すとともに第２終了フラグがフォールスを示し第２処理フラグがフォールスを示すとき、前記第３処理を実行すること
を特徴とする請求項１乃至請求項４の何れか一に記載のデータ処理方法。
【請求項８】
前記第２処理の実行結果を受信し、
前記第２処理の処理情報を取得し、
前記第２処理の処理情報に含まれる処理装置情報が前記第１データ処理装置を示すとともに第２終了フラグがフォールスを示すとき、前記第１データ処理装置は、優先度の高い処理を実行する第２データ処理装置で実行される第４処理を実行すること
を特徴とする請求項１乃至請求項４の何れか一に記載のデータ処理方法。
【請求項９】
第１処理の処理要求に応答して前記第１処理の処理情報を取得する受信ユニットと、
前記第１処理の処理情報に含まれる第１処理フラグにトルーを設定するとともに前記第１処理を実行した後に前記第１処理の処理情報の第１終了フラグにトルーを設定し、前記第１処理に続いて実行される第３処理の前に実行される第２処理の処理情報を取得し、前記第２処理の処理情報に含まれる第２処理フラグに基づいて前記第３処理を実行する処理ユニットと
を含むことを特徴とするデータ処理システム。
【請求項１０】
複数のデータ処理装置に処理の実行を要求する処理要求を送信する処理要求送信ユニットと、
前記複数のデータ処理装置のうちの少なくとも一のデータ処理装置から前記処理の実行結果を取得する処理結果受信ユニットと、
前記処理の実行が行われていることを示す処理フラグ、前記処理の実行の終了を示す終了フラグ、及び前記処理を実行するデータ処理装置を示す情報を前記処理に関連づけて記憶する記憶ユニットと
を含むことを特徴とするデータ処理システム。
【請求項１１】
前記処理結果受信ユニットは、
前記処理結果を受信するとき、前記処理に対応する終了フラグがフォールスを示すときに前記処理フラグをトルーに変更すること
を特徴とする請求項１０に記載のデータ処理システム。
【請求項１２】
前記記憶ユニットは、前記処理の実行の優先度を示す優先フラグを記憶すること
を特徴とする請求項１０または請求項１１に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ処理方法及びデータ処理システムに関する。
【背景技術】
【０００２】
従来、クライアントノードが、他のノード群に対し、処理能力及び参加意思を問い合わせ、他のノード群からの応答内容に基づいて、ジョブ処理の受け入れ可能なノードを決定し、ジョブの実行を分配して依頼し、ジョブ処理結果を集計するネットワークシステムがある。また、多数の加入者と、プロセッサ部と、多数の加入者及びプロセッサ部と通信を遂行する交換機と、を有し、プロセッサ部内のそれぞれのプロセッサをアクセスすることができる分散処理プロセッサ部を備えたネットワークシステムがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２０１８９６号公報
【特許文献２】特開２００３−２３５０８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、無線により通信可能な複数の端末を利用して並列処理を行うシステムの場合、端末自身が移動すると、電波を遮る遮蔽物の状況が時々刻々と変化するため、通信品質が低下してしまうことがある。例えば、並列処理の開始時点では、通信品質が良好であっても、並列処理の途中で通信品質が低下し、通信に非常に時間がかかるようになったり、通信ができなくなったりすることがある。このような状況になると、並列処理が終わるまでに多大な時間がかかったり、並列処理を終わらせることができなくなってしまうという問題点がある。【０００５】
データ処理方法及びデータ処理システムは、複数の端末を利用して迅速に並列処理を実行することができるデータ処理方法及びデータ処理システムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するため、データ処理方法において、第１データ処理装置は、第１処理の処理要求に応答して第１処理の処理情報を取得し、第１処理の処理情報に含まれる第１処理フラグにトルーを設定する。第１データ処理装置は、第１処理を実行した後に第１処理の処理情報の第１終了フラグにトルーを設定する。第１データ処理装置は、第１処理に続いて実行される第３処理の実行を開始する前に実行が終了している必要のある第２処理の処理情報を取得し、第２処理の処理情報に含まれる第２処理フラグおよび第２終了フラグに基づいて実行する処理を決定する。
【発明の効果】
【０００７】
開示のデータ処理方法及びデータ処理システムによれば、複数の端末を利用して迅速に並列処理を実行することができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例１にかかるデータ処理方法を示すフローチャートである。
【図２】図２は、バリア同期を用いたループ並列処理を説明する模式図である。
【図３】図３は、実施例２にかかるデータ処理方法を説明する模式図である。
【図４】図４は、実施例２にかかる基地局を示すブロック図である。
【図５】図５は、実施例２にかかる並列処理情報の一例を示す模式図である。
【図６】図６は、実施例２にかかる処理情報の一例を示す模式図である。
【図７】図７は、実施例２にかかる端末を示すブロック図である。
【図８】図８は、実施例２にかかる処理結果の一例を示す模式図である。
【図９】図９は、実施例２にかかる基地局における並列処理開始時の動作を示すフローチャートである。
【図１０】図１０は、実施例２にかかる基地局における処理結果受信時の動作を示すフローチャートである。
【図１１】図１１は、実施例２にかかる端末における並列処理要求受信時の動作を示すフローチャートである。
【図１２】図１２は、実施例２にかかる端末における処理結果受信時の動作を示すフローチャートである。
【図１３】図１３は、図１２の続きを示すフローチャートである。
【図１４】図１４は、図１３の続きを示すフローチャートである。
【図１５】図１５は、実施例２にかかる端末におけるバリア処理時の動作を示すフローチャートである。
【図１６】図１６は、図１５の続きを示すフローチャートである。
【図１７】図１７は、図１５及び図１６の続きを示すフローチャートである。
【図１８】図１８は、図１６及び図１７の続きを示すフローチャートである。
【図１９】図１９は、投機処理の優先度設定時の並列処理を説明する模式図である。
【図２０】図２０は、実施例３にかかる処理情報の一例を示す模式図である。
【図２１】図２１は、実施例３にかかる端末における処理結果受信時の動作を図１３の続きとして示すフローチャートである。
【図２２】図２２は、実施例３にかかる端末におけるバリア処理時の動作を図１５の続きとして示すフローチャートである。
【図２３】図２３は、実施例３にかかる端末における優先度設定処理時の動作を示すフローチャートである。
【図２４】図２４は、図２３の続きを示すフローチャートである。
【図２５】図２５は、実施例３にかかる端末における高優先処理名リスト受信時の動作を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に、この発明にかかるデータ処理方法及びデータ処理システムの実施例を図面に基づいて詳細に説明する。データ処理方法及びデータ処理システムは、データ処理装置が、第１処理に続いて実行される第３処理の前に実行される第２処理の処理情報を取得し、第２処理の処理情報に含まれる第２処理フラグに基づいて第３処理を実行するものである。なお、この実施例によりこの発明が限定されるものではない。
【００１０】
（実施例１）
図１は、実施例１にかかるデータ処理方法を示すフローチャートである。図１に示すように、データ処理が開始されると、まず、データ処理装置（第１データ処理装置）は、第１処理の処理要求に応答して第１処理の処理情報を取得する（ステップＳ１）。
【００１１】
次いで、データ処理装置は、第１処理フラグにトルーを設定する（ステップＳ２）。第１処理フラグは、第１処理の処理情報に含まれている。次いで、データ処理装置は、第１処理を実行する。
【００１２】
第１処理の実行後、データ処理装置は、第１終了フラグにトルーを設定する（ステップＳ３）。第１終了フラグは、第１処理の処理情報に含まれている。
【００１３】
次いで、データ処理装置は、第２処理の処理情報を取得する（ステップＳ４）。データ処理装置では、本来、第１処理に続いて第３処理が実行されるようになっている。データ処理装置が第２処理を実行する場合、第２処理は、第３処理の前に実行される。
【００１４】
次いで、データ処理装置は、第２処理フラグに基づいて第３処理を実行する（ステップＳ５）。第２処理フラグは、第２処理の処理情報に含まれている。そして、データ処理装置は、一連のデータ処理を終了する。
【００１５】
実施例１によれば、処理速度の速いデータ処理装置が、第１処理の実行が終了した後、第３処理の実行を開始するまでの待機時間に、処理速度の遅いデータ処理装置で実行される第２処理を投機的に実行することができる。従って、複数のデータ処理装置を利用して迅速に並列処理を実行することができる。また、無線により通信可能な端末をデータ処理装置として用いて並列処理を行う場合、通信品質が低下した端末に割り当てられている第２処理を、通信品質の良好な端末が第３処理の実行開始を待つ間に投機的に実行することができる。従って、複数の端末を利用して迅速に並列処理を実行することができる。
【００１６】
（実施例２）
実施例２は、実施例１にかかるデータ処理方法を、第１データ処理装置として携帯電話機などの端末を用いた携帯電話システムにおいて、バリア同期を用いたループ並列処理に適用したものである。なお、端末の一例として、携帯電話機以外にも、無線による通信が可能な携帯型のゲーム機やＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔｓ）などの携帯情報端末が挙げられる。
【００１７】
・バリア同期を用いたループ並列処理の説明
図２は、バリア同期を用いたループ並列処理を説明する模式図である。図２には、前段のループ処理及び後段のループ処理を、それぞれイタレーション間に依存関係のない例えば１０個の部分ループ処理に分割して、例えば１０台の端末で並列に処理する例が示されている。
【００１８】
図２において、「処理ｍ−ｎ」は、ｎ番目の端末が処理するｍ段目の部分ループ処理を表す。従って、処理１−１、処理１−２、・・・、及び処理１−１０は、別々の端末で処理される。処理１−１、処理２−１及び処理３−１は、同じ端末で処理される。なお、前段のループ処理の分割数及び後段のループ処理の分割数は、それぞれ１０個に限らず、任意である。
【００１９】
図２に示す例では、後段のループ処理は、前段のループ処理で出力される配列Ａのすべてのデータを利用することになっている。従って、各前段の部分ループ処理（１−１〜１−１０）１，２，３のプログラムコードの最後には、バリア処理を行う関数（ｂａｒｒｉｅｒ（））が挿入されている。それによって、すべての前段の部分ループ処理（１−１〜１−１０）１，２，３が終了してから、各後段の部分ループ処理（２−１〜２−１０）４，５，６が開始される。
【００２０】
最終段の各処理（３−１〜３−１０）７，８，９は、各端末での処理のアンカーを示す。各後段の部分ループ処理４，５，６（２−１〜２−１０）のプログラムコードの最後には、バリア処理を行う関数（ｂａｒｒｉｅｒ（））が挿入されている。従って、最終段の各処理（３−１〜３−１０）７，８，９は、すべての後段の部分ループ処理（２−１〜２−１０）４，５，６が終了してから、開始される。
【００２１】
・データ処理方法の説明
図３は、実施例２にかかるデータ処理方法を説明する模式図である。図３に示すように、複数、例えば１０台の端末で並列処理を行う際、端末＃１は、自身に割り当てられた前段の部分ループ処理＃１−１を実行する。端末＃１は、前段の部分ループ処理＃１−１の実行が終了した後に、他の端末＃２、端末＃３、・・・にそれぞれ割り当てられた前段の部分ループ処理＃１−２、部分ループ処理＃１−３、・・・を独立したスレッドとしてタイムスライス実行により投機的に実行する。
【００２２】
端末＃１は、他の端末＃２、端末＃３、・・・から処理結果を受け取ると、受け取った処理結果に対応するスレッドの実行をキャンセルする。端末＃１は、最終的に他の端末＃２、端末＃３、・・・から処理結果を受け取るか、自身で投機的に実行したスレッドで前段の部分ループ処理＃１−２、部分ループ処理＃１−３、・・・が終了することによって、すべての前段の部分ループ処理の結果が揃うと、自身に割り当てられた後段の部分ループ処理＃２−１の実行を開始する。
【００２３】
・基地局の説明
図４は、実施例２にかかる基地局を示すブロック図である。図４に示すように、基地局１１は、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置）１２、記録装置１３、記憶ユニットの一例として例えばメモリ１４、及び通信部１５を備えている。ＣＰＵ１２、記録装置１３、メモリ１４及び通信部１５は、バス１６に接続されている。
【００２４】
ＣＰＵ１２は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ、オペレーティングシステム）やライブラリ１７を実行する。ＣＰＵ１２がＯＳやライブラリ１７を実行することによって、処理要求送信ユニットの一例として例えば処理要求配布部１８が実現され、また処理結果受信ユニットの一例として例えば処理結果受信部１９が実現される。また、ＣＰＵ１２は、種々のアプリケーションプログラムを実行する。
【００２５】
処理要求配布部１８は、並列処理全体を制御する。処理要求配布部１８は、複数の端末へ処理の実行を要求する処理要求を配布する処理を行う。処理要求配布部１８の動作については、基地局における並列処理開始時の動作として後述する。処理結果受信部１９は、各端末から処理の実行結果を受信したときの処理を行う。処理結果受信部１９の動作については、基地局における処理結果受信時の動作として後述する。
【００２６】
記録装置１３は、予めプログラムの作成者によって作成された並列処理情報２０を記録している。並列処理情報２０については、後述する。記録装置１３の一例として、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ、リードオンリーメモリ）、ＨＤ（Ｈａｒｄ  Ｄｉｓｋ、ハードディスク）または磁気テープなどの不揮発性の記憶装置が挙げられる。
【００２７】
メモリ１４は、例えばＣＰＵ１２の作業領域として用いられる。メモリ１４には、並列処理要求２１及び回収データ格納領域２２が展開される。並列処理要求２１は、後述する並列処理情報２０に含まれている並列処理要求を展開したものである。メモリ１４には、並列処理要求２１のデータの一部として、処理の実行が行われていることを示す処理フラグ、処理の実行の終了を示す終了フラグ、及び処理を実行する端末を示す情報が、処理に関連づけられて記憶される。また、図２に示す例では、回収データ格納領域２２として配列Ｂの格納領域が展開される。メモリ１４の一例として、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ、ランダムアクセスメモリ）が挙げられる。
【００２８】
通信部１５は、携帯電話網に無線通信により接続して端末との間で例えばパケットの送受信を行う。
【００２９】
・並列処理情報の一例
図５は、実施例２にかかる並列処理情報の一例を示す模式図である。図５に示すように、並列処理情報２０には、並列処理要求３１及び基地局側利用情報３２が含まれている。並列処理要求３１には、処理情報３３及び利用データ情報３４が含まれている。処理情報３３は、複数段及び複数の端末分に分割された部分ループ処理ごとに設定されている。利用データ情報３４には、複数の端末で並列処理を行う際に必要となるデータサイズなどのデータ領域に関する情報が含まれている。
【００３０】
基地局側利用情報３２には、基地局が利用する情報が含まれている。基地局側利用情報３２には、例えば並列処理を行う端末の数（必要端末数）、並列処理を開始する対象である処理（開始対象処理）、並列処理において後続となる対象である処理（待ち対象処理）、及び並列処理の結果として回収するデータ（回収データ）の情報が含まれている。
【００３１】
例えば図２に示す例に対応する並列処理情報２０の一例について説明する。処理情報３３は、例えば処理１−１〜１−１０の各前段の部分ループ処理１，２，３、処理２−１〜２−１０の各後段の部分ループ処理４，５，６及び処理３−１〜３−１０の最終段の各処理７，８，９のそれぞれについて設定されている。
【００３２】
利用データ情報３４には、例えば配列名としてＡ、Ａの配列のデータサイズとして１０００００、配列名としてＢ、及びＢの配列のデータサイズとして１０００００という情報が含まれている。データに初期値が設定されている場合、並列処理要求３１にデータの初期値が含まれていてもよい。
【００３３】
基地局側利用情報３２には、例えば必要端末数が１０台であり、開始対象処理が処理１−１〜１−１０であり、待ち対象処理が処理２−１〜２−１０であり、回収データがデータサイズ１０００００の配列Ｂであるという情報が含まれている。
【００３４】
・処理情報の説明
図６は、実施例２にかかる処理情報の一例を示す模式図である。図６に示すように、各部分ループ処理に関する処理情報３３には、対応する部分ループ処理に対応するプログラムコード４１、及び並列処理の際に利用される付随情報４２が含まれている。プログラムコード４１は、予めプログラムの作成者によって設定されている。
【００３５】
付随情報４２には、処理名、終了フラグ、処理フラグ、処理端末、後続処理、先行処理、データ出力領域及び処理スレッドの各フィールドが設定されている。これらのフィールドのうち、処理名、後続処理、先行処理及びデータ出力領域の各フィールドには、予めプログラムの作成者によってデータが設定されている。終了フラグ及び処理フラグの各フィールドには、予め初期値が設定されている。各フラグの初期値は、例えばフォールスであってもよい。
【００３６】
端末は、処理情報３３に記述されたすべての先行処理の実行が終了すると、処理情報３３に記述されたプログラムコード４１の実行を開始することができる。端末は、処理情報３３に記述されたプログラムコード４１の実行を終えると、処理情報３３に記述された後続処理の実行を開始するか、または実行の開始を待機する状態になることができる。データ出力領域のフィールドには、対応する部分ループ処理から処理結果として出力されるデータの範囲が設定される。
【００３７】
例えば図２に示す例に対応する処理情報３３の一例について説明する。処理名のフィールドには、処理１−１や処理１−２などが設定される。処理１−１〜１−１０について、何れも先行処理がないので、先行処理のフィールドにはヌルが設定される。処理１−１について、後続処理は処理２−１であるので、後続処理のフィールドには処理２−１が設定される。処理１−１について、データ出力領域のフィールドには、配列Ａの０から９９９９までの要素の範囲が設定される。処理１−２〜処理１−１０についても同様である。
【００３８】
処理２−１について、先行処理は処理１−１〜１−１０のすべてであるので、先行処理のフィールドには処理１−１〜１−１０が設定される。処理２−１について、後続処理は処理３−１であるので、後続処理のフィールドには処理３−１が設定される。処理２−２〜処理２−１０についても同様である。
【００３９】
処理３−１について、先行処理は処理２−１〜２−１０のすべてであるので、先行処理のフィールドには処理２−１〜２−１０が設定される。処理３−２〜処理３−１０についても同様である。処理３−１〜３−１０について、何れも後続処理がないので、後続処理のフィールドにはヌルが設定される。処理３−１〜３−１０については、処理情報３３にプログラムコード４１が記述されていない。つまり、処理３−１〜３−１０は、実質的に何も実行されない。処理３−１〜３−１０が設定されていることによって、各端末は、処理２−１〜２−１０を投機的に実行することができる。
【００４０】
・端末の説明
図７は、実施例２にかかる端末を示すブロック図である。図７に示すように、端末５１は、例えばＣＰＵ５２、通信部５３及びメモリ５４を備えている。ＣＰＵ５２、通信部５３及びメモリ５４は、バス５５に接続されている。
【００４１】
ＣＰＵ５２は、ＯＳやライブラリ５６を実行する。ＣＰＵ５２がＯＳやライブラリ５６を実行することによって、受信ユニット及び処理ユニットの一例として例えばバリア処理部５７及び受信部５８が実現される。受信部５８は、処理要求に応答して当該処理要求に対応する処理情報を取得する。また、受信部５８は、取得した処理情報に含まれる処理フラグにトルーを設定する。受信部５８の動作については、端末における並列処理要求受信時及び処理結果受信時の各動作として後述する。
【００４２】
バリア処理部５７は、処理の実行後に当該処理に対応する処理情報の終了フラグにトルーを設定する。バリア処理部５７は、投機的な処理の対象となる処理の処理情報を取得し、当該処理情報に含まれる処理フラグに基づいて投機的な処理を行うか否かを判断する。また、バリア処理部５７は、処理の終了後に処理結果を生成して基地局へ送信する。バリア処理部５７の動作については、端末におけるバリア処理時の動作として後述する。処理結果については、後述する。
【００４３】
また、ＯＳやライブラリ５６の実行によって、スケジューラ部５９及びスレッド管理部６０が実現される。スケジューラ部５９は、タイムスライス実行により一つのプロセッサで複数のスレッドを切り替えて実行する際に、スレッドの切り替えを制御する。タイムスライス実行により、プロセッサが一つでも、擬似的に複数の処理が同時に動作しているように見せかけることができる。スレッド管理部６０は、起動されたスレッドを管理する。また、ＣＰＵ５２は、種々のアプリケーションプログラムを実行する。
【００４４】
メモリ５４は、例えばＣＰＵ５２の作業領域として用いられる。メモリ５４には、各部分ループ処理に関する処理情報６１及び利用データ領域６２，６３が展開される。図２に示す例では、利用データ領域６２として配列Ａの格納領域が展開される。利用データ領域６３として配列Ｂの格納領域が展開される。メモリ５４の一例として、例えばＲＡＭが挙げられる。
【００４５】
通信部５３は、携帯電話網に無線通信により接続して基地局との間で例えばパケットの送受信を行う。
【００４６】
・処理結果の説明
図８は、実施例２にかかる処理結果の一例を示す模式図である。図８に示すように、処理結果７１には、データ７２及び付随情報７３が含まれている。データ７２には、部分ループ処理の結果として出力されたデータが格納される。付随情報７３には、処理名、処理端末及びデータ領域の各フィールドが設定されている。
【００４７】
・基地局における並列処理開始時の動作
図９は、実施例２にかかる基地局における並列処理開始時の動作を示すフローチャートである。処理要求配布部１８は、並列処理の開始を指示されると、動作を開始する。
【００４８】
図９に示すように、処理要求配布部１８は、動作を開始すると、まず、記録装置１３から並列処理情報２０を読み込んで、並列処理情報２０に記録されている並列処理要求３１をメモリ１４に展開する（展開したものが、図４の並列処理要求２１）。また、処理要求配布部１８は、基地局側利用情報３２に指定されている回収データの情報に基づいて、メモリ１４に回収データ格納領域２２を用意する（ステップＳ１１）。
【００４９】
次いで、処理要求配布部１８は、基地局側利用情報３２に指定されている必要端末数の情報に基づいて、並列処理をさせる端末、すなわち処理対象の端末を選別する（ステップＳ１２）。また、処理要求配布部１８は、基地局側利用情報３２に指定されている開始対象処理の情報に基づいて、開始対象処理に対応する処理要求を取得する（ステップＳ１３）。なお、ステップＳ１２とステップＳ１３とは、何れが先であってもよい。
【００５０】
次いで、処理要求配布部１８は、ステップＳ１３で取得した各処理要求に、ステップＳ１２で選別した端末を重複しないように設定する（ステップＳ１４）。そして、処理要求配布部１８は、メモリ１４に展開されている並列処理要求２１の対応する処理情報３３の処理端末フィールドに、設定した端末の例えば識別情報を書き込む。最初に処理要求に端末を設定する際には、一台の端末に一つの処理要求が割り当てられるようにしてもよい。
【００５１】
次いで、処理要求配布部１８は、ステップＳ１２で選別したすべての端末に処理要求を送信する（ステップＳ１５）。次いで、処理要求配布部１８は、基地局側利用情報３２において待ち対象処理に指定されている処理に対応するすべての処理情報３３の終了フラグをチェックする（ステップＳ１６）。
【００５２】
そして、ステップＳ１６でチェックしたすべての終了フラグがトルーになるまで待機する（ステップＳ１７：Ｎｏ）。該当するすべての終了フラグがトルーになると（ステップＳ１７：Ｙｅｓ）、並列処理がすべて終了し、処理結果がメモリ１４の回収データ格納領域２２に格納される。そして、処理要求配布部１８は、一連の並列処理開始時の動作を終了する。
【００５３】
・基地局における処理結果受信時の動作
図１０は、実施例２にかかる基地局における処理結果受信時の動作を示すフローチャートである。処理結果受信部１９は、上述したように処理要求配布部１８がすべての待ち対象処理の終了フラグがトルーになるのを待つ間に（ステップＳ１６、ステップＳ１７）、並列処理をしている端末から通信部１５が処理結果７１を受信すると、割り込みによって動作を開始する。このとき、複数の端末からほぼ同時に同じ処理に対する処理結果を受信した場合には、基地局は、何れか一つの処理結果を有効とし、他の処理結果を無効とする。例えば、基地局は、先に受信した処理結果を有効とし、後から受信した処理結果を無効としてもよい。
【００５４】
図１０に示すように、処理結果受信部１９は、動作を開始すると、まず、受信した処理結果７１の処理名フィールドから処理名を取得する（ステップＳ２１）。次いで、処理結果受信部１９は、メモリ１４から、ステップＳ２１で取得した処理名に対応する処理情報３３の終了フラグの値を取得する（ステップＳ２２）。
【００５５】
ステップＳ２２で取得した終了フラグがトルーであれば（ステップＳ２３：Ｎｏ）、基地局はステップＳ２１で取得した処理名に対応する処理結果をすでに受け取っていることになる。従って、処理結果受信部１９は、一連の処理結果受信時の動作を終了し、処理要求配布部１８による並列処理開始時の動作に処理を戻す。
【００５６】
ステップＳ２２で取得した終了フラグがフォールスであれば（ステップＳ２３：Ｙｅｓ）、処理結果受信部１９は、並列処理をしているすべての端末に、受信した処理結果７１を一斉配信する（ステップＳ２４）。それによって、並列処理をしているすべての端末が、他の端末で実行されている部分ループ処理が終了したことを知ることができる。
【００５７】
次いで、処理結果受信部１９は、ステップＳ２１で取得した処理名に対応する処理情報３３の終了フラグをトルーに設定する（ステップＳ２５）。なお、ステップＳ２４とステップＳ２５とは、何れが先であってもよい。次いで、ステップＳ２１で取得した処理名に対応する処理が並列処理情報２０の基地局側利用情報３２において待ち対象処理に指定されていない場合（ステップＳ２６：Ｎｏ）、処理結果受信部１９は、一連の処理結果受信時の動作を終了する。そして、処理要求配布部１８による並列処理開始時の動作に処理が戻る。
【００５８】
ステップＳ２１で取得した処理名に対応する処理が待ち対象処理に指定されている場合（ステップＳ２６：Ｙｅｓ）、処理結果受信部１９は、メモリ１４に用意された回収データ格納領域２２に処理結果７１のデータ７２を展開する（ステップＳ２７）。そして、処理結果受信部１９は、一連の処理結果受信時の動作を終了し、処理要求配布部１８による並列処理開始時の動作に処理を戻す。
【００５９】
・端末における並列処理要求受信時の動作
図１１は、実施例２にかかる端末における並列処理要求受信時の動作を示すフローチャートである。受信部５８は、基地局から並列処理要求を受信すると、動作を開始する。
【００６０】
図１１に示すように、受信部５８は、動作を開始すると、まず、メモリ５４に処理情報６１及び利用データ領域６２，６３を展開するのに必要な領域のサイズを算出する（ステップＳ３１）。次いで、受信部５８は、メモリ５４に、ステップＳ３１で算出したサイズ分のメモリ領域を確保する（ステップＳ３２）。
【００６１】
次いで、受信部５８は、メモリ５４に、受信した並列処理要求に含まれている処理情報６１を展開する（ステップＳ３３）。また、受信部５８は、メモリ５４に利用データ領域６２，６３を展開する（ステップＳ３４）。なお、ステップＳ３３とステップＳ３４とは、何れが先であってもよい。
【００６２】
データに初期値が設定されている場合には、受信部５８は、メモリ５４に展開された利用データ領域６２，６３にデータの初期値の情報をコピーする（ステップＳ３５）。次いで、受信部５８は、メモリ５４に展開した処理情報６１の中から、処理端末として自端末が指定されている処理情報６１を取得する（ステップＳ３６）。メモリ５４に展開された処理情報６１において、処理端末フィールドに自端末の識別情報が設定されていれば、処理端末として自端末が指定されていることになる。
【００６３】
次いで、受信部５８は、ステップＳ３６で取得した処理情報６１の処理フラグをトルーに設定する（ステップＳ３７）。次いで、受信部５８は、新規スレッドを立ち上げて、取得した処理情報６１のプログラムコードを実行させる（ステップＳ３８）。また、受信部５８は、ステップＳ３６で取得した処理情報６１の処理スレッドフィールドに、ステップＳ３８で立ち上げたスレッドのＩＤ（識別情報）を記録する（ステップＳ３９）。なお、ステップＳ３７〜ステップＳ３９の処理の順番は、問わない。そして、受信部５８は、一連の並列処理要求受信時の動作を終了する。
【００６４】
・端末における処理結果受信時の動作
図１２は、実施例２にかかる端末における処理結果受信時の動作を示すフローチャートである。図１３は、図１２の続きを示すフローチャートであり、図１４は、図１３の続きを示すフローチャートである。受信部５８は、基地局から他の端末からの処理結果を受信すると、動作を開始する。
【００６５】
図１２に示すように、受信部５８は、動作を開始すると、まず、受信した処理結果７１の処理名フィールドから処理名を取得し、メモリ５４から、取得した処理名に対応する処理情報６１を取得する（ステップＳ４１）。次いで、受信部５８は、ステップＳ４１で取得した処理情報６１の終了フラグの値と処理フラグの値を確認する（ステップＳ４２）。
【００６６】
確認した結果、終了フラグがトルーであれば（ステップＳ４３：Ｎｏ）、ステップＳ４１で取得した処理名に対応する処理が自端末で終了していることになる。しかし、上述したように、基地局が複数の端末から、同じ処理に対する処理結果を受信した場合には、何れか一つの処理結果が有効となる。従って、自端末で処理が終了したことよりも、基地局から配信されてきた処理結果７１の方が有効となる。
【００６７】
そこで、受信部５８は、ステップＳ４１で取得した処理情報６１の処理端末フィールドに、受信した処理結果７１に設定されている処理端末の情報を書き込む（ステップＳ４４）。そして、受信部５８は、一連の処理結果受信時の動作を終了する。
【００６８】
一方、ステップＳ４２で確認した終了フラグがフォールスである場合（ステップＳ４３：Ｙｅｓ）、ステップＳ４１で取得した処理名に対応する処理が自端末では終了していないことになる。そこで、ステップＳ４２で確認した処理フラグの値に基づいて、ステップＳ４１で取得した処理名に対応する処理が自端末で投機的に実行されているか否かがチェックされる。
【００６９】
ステップＳ４２で確認した処理フラグがフォールスである場合（ステップＳ４５：Ｎｏ）、ステップＳ４１で取得した処理名に対応する処理は、自端末では投機的に実行されていないことになる。そこで、受信部５８は、ステップＳ４１で取得した処理情報６１の処理フラグ及び終了フラグをトルーに設定する（ステップＳ４６、ステップＳ４７）。なお、ステップＳ４６とステップＳ４７とは、何れが先であってもよい。
【００７０】
一方、ステップＳ４２で確認した処理フラグがトルーである場合（ステップＳ４５：Ｙｅｓ）、ステップＳ４１で取得した処理名に対応する処理が自端末で既に投機的に実行されていることになる。そこで、受信部５８は、ステップＳ４１で取得した処理情報６１の処理スレッドフィールドからスレッドのＩＤを取得し（ステップＳ４８）、取得したＩＤに対応するスレッドの投機的な実行をキャンセルする（ステップＳ４９）。そして、受信部５８は、ステップＳ４１で取得した処理情報６１の終了フラグをトルーに設定する（ステップＳ４７）。なお、ステップＳ４９とステップＳ４７とは、何れが先であってもよい。
【００７１】
次いで、図１３に示すように、受信部５８は、ステップＳ４１で取得した処理情報６１の処理端末フィールドに、受信した処理結果７１に設定されている処理端末の情報を書き込む（ステップＳ５０）。そして、受信部５８は、メモリ５４の利用データ領域６２，６３に、受信した処理結果７１に含まれているデータ７２をコピーする（ステップＳ５１）。例えば図２に示す例の場合、データ７２は、配列Ａのデータである場合には利用データ領域６２に、配列Ｂのデータである場合には利用データ領域６３に、それぞれコピーされる。なお、ステップＳ５０とステップＳ５１とは、何れが先であってもよい。
【００７２】
次いで、受信部５８は、バリア処理待ちのスレッドがあるか否かを確認する。バリア処理待ちのスレッドがない場合（ステップＳ５２：Ｎｏ）、受信部５８は、一連の処理結果受信時の動作を終了する。
【００７３】
一方、バリア処理待ちのスレッドがある場合（ステップＳ５２：Ｙｅｓ）、受信部５８は、バリア処理待ちのスレッドのＩＤ（識別情報）に対応する処理情報６１をメモリ５４から取得する（ステップＳ５３）。そして、受信部５８は、ステップＳ５３で取得した処理情報６１の後続処理の処理情報６１をメモリ５４から取得する（ステップＳ５４）。例えば図２に示す例の場合で、処理１−１を行っているスレッドがバリア処理待ち状態であるときには、受信部５８は、処理１−１の後続処理である処理２−１の処理情報６１をメモリ５４から取得する。
【００７４】
次いで、受信部５８は、ステップＳ５４で取得した処理情報６１の先行処理の処理情報６１をメモリ５４から取得する（ステップＳ５５）。例えば図２に示す例の場合で、ステップＳ５４で処理２−１の処理情報６１を取得した場合、受信部５８は、処理２−１の先行処理である処理１−１〜１−１０の処理情報６１をメモリ５４から取得する。
【００７５】
次いで、図１４に示すように、受信部５８は、ステップＳ５５で取得したすべての先行処理について処理情報６１の終了フラグの値を確認する。すべての先行処理の終了フラグがトルーである場合には（ステップＳ５６：Ｙｅｓ）、受信部５８は、バリア処理待ち状態のスレッドのバリア処理待ち状態を解除する（ステップＳ５７）。そして、受信部５８は、一連の処理結果受信時の動作を終了する。一方、一つでも先行処理の終了フラグがトルーでない場合には（ステップＳ５６：Ｎｏ）、受信部５８は、何もせずに、一連の処理結果受信時の動作を終了する。
【００７６】
例えば図２に示す例で、処理１−１がバリア処理待ち状態であるときに、処理１−１の後続処理である処理２−１に先行するすべての処理１−１〜１−１０が終了すると、処理１−１のバリア処理待ち状態を解除することができる。そこで、ステップＳ５４で、受信部５８は、バリア処理待ち状態の処理の後続処理２−１を確認する。そして、ステップＳ５５及びステップＳ５６で、受信部５８は、この後続処理２−１に対して先行するすべての処理１−１〜１−１０が終了しているか否かを確認する。処理１−１〜１−１０が終了していれば、受信部５８は、処理１−１のバリア処理待ち状態を解除して後続処理２−１を開始することができる。
【００７７】
・端末におけるバリア処理時の動作
端末でスレッドの処理が進むと、バリア処理が呼び出される。例えば図２に示す例で、処理１−１、処理２−１及び処理３−１が割り当てられた端末において、処理２−１が終了してバリア処理が呼び出されたとする。この場合のバリア処理では、起こり得るケースとしては次の三つが考えられる。
【００７８】
第１に、当該端末において、処理１−１の終了後に投機的に実行した処理１−２が最後まで終了したため、処理２−１の終了後に処理１−２の後続処理である処理２−２を優先的に実行するケースがある（第１のケース）。第２に、処理２−２〜２−１０で終わっていない処理があるため、当該端末において処理２−２〜２−１０のうちの終わっていない処理を投機的に実行するとともに、バリア処理待ち状態となるケースがある（第２のケース）。第３に、バリア処理が呼び出された時点で処理２−２〜２−１０がすべて終了していて、当該端末において次の処理３−１を実行することが可能な状態となっているケースがある（第３のケース）。以下、三つのケースごとに説明する。
【００７９】
図１５は、実施例２にかかる端末におけるバリア処理時の動作を示すフローチャートである。図１６は、図１５の続きを示すフローチャートである。図１７は、図１５及び図１６の続きを示すフローチャートである。図１８は、図１６及び図１７の続きを示すフローチャートである。バリア処理が呼び出されると、バリア処理部５７は、動作を開始する。
【００８０】
・第１のケース
図１５に示すように、バリア処理部５７は、動作を開始すると、まず、バリア処理を呼び出したスレッドのＩＤ（識別情報）に対応する処理情報６１をメモリ５４から取得する（ステップＳ６１）。次いで、バリア処理部５７は、ステップＳ６１で取得した処理情報６１の終了フラグをトルーに設定する（ステップＳ６２）。
【００８１】
次いで、バリア処理部５７は、ステップＳ６１で取得した処理情報６１のデータ出力領域フィールドの情報に基づいて、図８に示すような処理結果７１を生成し（ステップＳ６３）、処理結果７１を基地局へ送信する（ステップＳ６４）。なお、ステップＳ６２は、ステップＳ６３の後でもよいし、ステップＳ６４の後でもよい。
【００８２】
次いで、バリア処理部５７は、メモリ５４に展開した処理情報６１の中から、処理端末として自端末が指定されており、かつバリア同期の処理を呼び出したスレッドで行われている処理に対して先行処理となるすべての処理の処理情報６１を取得する（ステップＳ６５）。そして、バリア処理部５７は、ステップＳ６５で取得したすべての処理情報６１の後続処理となる処理情報６１をメモリ５４から取得する（ステップＳ６６）。
【００８３】
例えば図２に示す例で、処理２−１がバリア同期の処理を呼び出したスレッドで行われている処理であるときに、バリア処理部５７は、処理２−１の先行処理である処理１−１〜１−１０のうち、処理端末として自端末が指定されている処理情報６１を取得する。例えば、処理１−１、処理１−２及び処理１−３の各処理情報６１において、処理端末として自端末が指定されている場合、現時点よりも前に、自端末が処理１−１、処理１−２及び処理１−３を最後まで実行していたことになる。
【００８４】
処理１−１が、本来、自端末が実行する処理である場合、処理１−２及び処理１−３は、過去に自端末が投機的に実行し、最後まで実行することができた処理である。そこで、自端末は、処理１−１の後続処理である処理２−１だけでなく、処理１−２及び処理１−３のそれぞれの後続処理である処理２−２及び処理２−３も実行する。従って、バリア処理部５７は、処理１−１、処理１−２及び処理１−３のそれぞれの後続処理である処理２−１、処理２−２及び処理２−３の処理情報６１を取得する。
【００８５】
次いで、バリア処理部５７は、ステップＳ６６で取得したすべての処理情報６１のうち、処理フラグがフォールスである処理情報６１があるか否か確認する。処理フラグがフォールスである処理情報６１がある場合（ステップＳ６７：Ｙｅｓ）、バリア処理部５７は、新規スレッドを立ち上げて、処理フラグがフォールスである処理情報６１のプログラムコードを実行させる（ステップＳ６９）。その際、処理フラグがフォールスである処理情報６１が複数ある場合には、バリア処理部５７は、複数の処理情報６１の中から任意の一つを選択して（ステップＳ６８）、プログラムコードを実行させる（ステップＳ６９）。
【００８６】
また、バリア処理部５７は、ステップＳ６９でプログラムコードが実行された処理情報６１の処理スレッドフィールドに、ステップＳ６９で立ち上げたスレッドのＩＤ（識別情報）を記録する（ステップＳ７０）。次いで、バリア処理部５７は、ステップＳ６９でプログラムコードが実行された処理情報６１の処理端末フィールドに自端末の情報を記録し、当該処理情報６１の処理フラグをトルーに設定する（ステップＳ７１）。なお、ステップＳ６９〜ステップＳ７１の処理の順番は、問わない。
【００８７】
次いで、図１７に示すように、バリア処理部５７は、バリア処理待ち状態のスレッドがあるか否かを確認する。バリア処理待ち状態のスレッドがない場合（ステップＳ７９：Ｎｏ）、バリア処理部５７は、ステップＳ６９で立ち上げたスレッドをバリア処理待ちの状態に遷移させる（ステップＳ８０）。この状態で、端末の受信部５８によって、バリア処理待ち状態のスレッドのバリア処理待ち状態が解除されると（図１４のステップＳ５７）、図１８に示すフローチャートのステップＳ８２へ進む。
【００８８】
そして、図１８に示すように、バリア処理部５７は、バリア処理待ち状態が解除されたスレッドで行われていた処理に対する後続処理の処理情報６１の処理フラグをトルーに設定する（ステップＳ８２）。また、バリア処理部５７は、バリア処理待ち状態が解除されたスレッドで行われていた処理に対する後続処理の処理情報６１の処理端末フィールドに自端末の情報を記録する（ステップＳ８３）。なお、ステップＳ８２とステップＳ８３とは、何れが先であってもよい。
【００８９】
次いで、バリア処理部５７は、バリア処理待ち状態が解除されたスレッドで行われていた処理に対する後続処理の処理情報６１にプログラムコードが含まれているか否かを確認する。プログラムコードが含まれていない場合（ステップＳ８４：Ｎｏ）、バリア処理部５７は、バリア処理待ち状態が解除されたスレッドで行われていた処理に対する後続処理のスレッドの実行を終了し（ステップＳ８８）、一連のバリア処理時の動作を終了する。
【００９０】
例えば図２に示す例では、バリア処理待ち状態が解除されたスレッドで行われていた処理に対する後続処理が例えば処理３−１〜３−１０である場合に、ステップＳ８４でプログラムコードが含まれていない場合となる。
【００９１】
ステップＳ８４でプログラムコードが含まれている場合（ステップＳ８４：Ｙｅｓ）、バリア処理部５７は、新規スレッドを立ち上げて、バリア処理待ち状態が解除されたスレッドで行われていた処理に対する後続処理の処理情報６１のプログラムコードを実行させる（ステップＳ８５）。また、バリア処理部５７は、ステップＳ８５でプログラムコードが実行された処理情報６１の処理スレッドフィールドに、ステップＳ８５で立ち上げたスレッドのＩＤ（識別情報）を記録する（ステップＳ８６）。そして、バリア処理部５７は、バリア処理待ち状態が解除されたスレッドで行われていた処理に対する後続処理のスレッドの実行を終了し（ステップＳ８８）、一連のバリア処理時の動作を終了する。
【００９２】
一方、ステップＳ７９で、バリア処理待ち状態のスレッドがすでにある場合（ステップＳ７９：Ｙｅｓ）、図１８に示すように、バリア処理部５７は、ステップＳ６９で立ち上げたスレッドの実行を終了し（ステップＳ８８）、一連のバリア処理時の動作を終了する。
【００９３】
ステップＳ６７で、処理フラグがフォールスである処理情報６１が複数ある場合には、第１のケースの処理が複数回行われる。例えば図２に示す例で、端末が、本来処理すべき処理２−１の実行が終了した後、処理２−２及び処理２−３を投機的に実行する場合、１回目の第１のケースの処理によって例えば処理２−２の投機的な実行を行ったとする。処理２−２の終了によってバリア処理が呼び出されると、当該端末は、２回目の第１のケースの処理によって例えば処理２−３の投機的な実行を行う。この繰り返しによって、複数の処理を投機的に実行することができる。
【００９４】
・第２のケース
上述した第１のケースに対応する処理がないか、第１のケースに対応する最後の処理によってバリア処理が呼び出された場合には、図１５に示すフローチャートのステップＳ６７で、処理フラグがフォールスである処理情報６１がない状態となる（ステップＳ６７：Ｎｏ）。従って、図１６に示すように、バリア処理部５７は、ステップＳ６１で取得した処理情報６１の後続処理に対応する処理情報６１をメモリ５４から取得する（ステップＳ７２）。
【００９５】
次いで、バリア処理部５７は、ステップＳ７２で取得した処理情報６１の先行処理に対応するすべての処理要求をメモリ５４から取得する（ステップＳ７３）。次いで、バリア処理部５７は、ステップＳ７３で取得した処理要求において、処理フラグがフォールスである処理情報６１があるか否か確認する。処理フラグがフォールスである処理情報６１がある場合（ステップＳ７４：Ｙｅｓ）、投機的に実行可能な処理が存在することになる。従って、バリア処理部５７は、処理フラグがフォールスである処理情報６１ごとに新規スレッドを立ち上げて、当該処理情報６１のプログラムコードを実行させる（ステップＳ７５）。
【００９６】
また、バリア処理部５７は、ステップＳ７５でプログラムコードが実行された各処理情報６１の処理スレッドフィールドに、ステップＳ７５で立ち上げたスレッドのＩＤ（識別情報）を記録する（ステップＳ７６）。次いで、バリア処理部５７は、ステップＳ６９でプログラムコードが実行された各処理情報６１の処理端末フィールドに自端末の情報を記録し、当該処理情報６１の処理フラグをトルーに設定する（ステップＳ７７）。なお、ステップＳ７５〜ステップＳ７７の処理の順番は、問わない。そして、図１７に示すフローチャートのステップＳ７９へ進む。
【００９７】
次いで、図１７に示すように、バリア処理部５７は、バリア処理待ち状態のスレッドがあるか否かを確認する。バリア処理待ち状態のスレッドがない場合（ステップＳ７９：Ｎｏ）、バリア処理部５７は、ステップＳ７５で立ち上げたスレッドをバリア処理待ちの状態に遷移させる（ステップＳ８０）。この状態で、端末の受信部５８によって、バリア処理待ち状態のスレッドのバリア処理待ち状態が解除されると（図１４のステップＳ５７）、図１８に示すフローチャートのステップＳ８２へ進む。ステップＳ８２以降、またはステップＳ７９で、バリア処理待ち状態のスレッドがすでにある場合（ステップＳ７９：Ｙｅｓ）は、何れも上述した第１のケースと同様である。
【００９８】
一方、ステップＳ７４で、処理フラグがフォールスである処理情報６１がない場合（ステップＳ７４：Ｎｏ）、投機的に実行可能な処理がないことになる。そこで、バリア処理部５７は、ステップＳ７３で取得した処理要求において、終了フラグがフォールスである処理情報６１があるか否か確認する。終了フラグがフォールスである処理情報６１がある場合（ステップＳ７８：Ｙｅｓ）、投機的に実行中の処理が存在することになる。この場合、図１７に示すフローチャートのステップＳ７９へ進む。
【００９９】
次いで、図１７に示すように、バリア処理待ち状態のスレッドがない場合（ステップＳ７９：Ｎｏ）、バリア処理部５７は、終了フラグがフォールスである処理情報６１の処理、すなわち投機的に実行中の処理を行っているスレッドをバリア処理待ちの状態に遷移させる（ステップＳ８０）。これ以降、またはステップＳ７９で、バリア処理待ち状態のスレッドがすでにある場合（ステップＳ７９：Ｙｅｓ）は、何れも上述した第１のケースと同様である。
【０１００】
・第３のケース
投機的に実行可能な処理がなく、かつ投機的に実行中の処理もない状態でバリア処理が呼び出された場合には、図１６に示すフローチャートのステップＳ７８で、終了フラグがフォールスである処理情報６１がない状態となる（ステップＳ７８：Ｎｏ）。この状態で、図１８に示すように、バリア処理待ち状態のスレッドがある場合（ステップＳ８１：Ｙｅｓ）、バリア処理部５７は、当該スレッドのバリア処理待ち状態を解除する（ステップＳ８７）。そして、バリア処理部５７は、バリア処理待ち状態を解除したスレッドの実行を終了し（ステップＳ８８）、一連のバリア処理時の動作を終了する。
【０１０１】
一方、バリア処理待ち状態のスレッドがない場合（ステップＳ８１：Ｎｏ）、当該端末において、現在のスレッドがこの段で最初に実行された処理であり、他の端末で処理が終了しているので、バリア処理待ちを行う必要がない状態である。従って、受信部５８によってバリア処理待ち状態が解除された場合と同様に、バリア処理部５７は、ステップＳ８２以降の処理を行う。
【０１０２】
実施例２によれば、実施例１と同様の効果が得られる。また、各端末が、終了していない処理を独立したスレッドとしてタイムスライス実行により投機的に実行するので、どの処理を投機的に実行すればよいかわからないという不都合が生じるのを防ぐことができる。
【０１０３】
（実施例３）
実施例３は、実施例２において、端末が投機的に実行するスレッドに優先度を設定し、タイムスライス実行時に優先度が高いスレッドに対してより多くのＣＰＵ時間を割り当てるようにしたものである。
【０１０４】
・投機処理の優先度設定時の並列処理の説明
図１９は、投機処理の優先度設定時の並列処理を説明する模式図である。図１９に示す例では、優先度として高と低の２種類が設定されており、高優先度のスレッドが線で囲まれて示されている。また、端末の数が６台である例が示されている。
【０１０５】
図１９に示すように、端末＃１は、自身に割り当てられた処理を行うスレッド＃１の実行を終了した後に、＃２〜＃６の各スレッドを高優先で投機的に実行している。この時点で、端末＃１は、高優先で投機的に実行しているスレッドの数が最も多い端末である。端末＃２は、自身に割り当てられた処理を行うスレッド＃２の実行が終了すると、端末＃１において高優先で投機的に実行されているスレッドの数の半分もしくは約半分の数のスレッド（＃５及び＃６）を高優先で投機的に実行する。端末＃１では、端末＃２で高優先に設定されたスレッド（＃５及び＃６）の優先度が低に変更される。
【０１０６】
この時点で、例えば端末＃２が、高優先で投機的に実行しているスレッドの数が最も多い端末であるとする。端末＃３は、自身に割り当てられた処理を行うスレッド＃３の実行が終了すると、端末＃２において高優先で投機的に実行されているスレッドの数の半分もしくは約半分の数のスレッド（＃６）を高優先で投機的に実行する。端末＃２では、端末＃３で高優先に設定されたスレッド（＃６）の優先度が低に変更される。他の端末においても同様である。このようにすることによって、並列処理をしている端末間で、高優先で投機的に実行されるスレッドの数が平均化される。
【０１０７】
また、投機的な実行の対象となるスレッドが減ると、投機的な実行をしている端末の数が投機的な実行の対象となるスレッドの数よりも多くなる。この場合には、複数の端末で同じスレッドが高優先で投機的に実行されることになる。従って、高優先で実行している端末の数が最も少ないスレッドが高優先で実行される。このようにすることによって、投機的な実行の対象となるスレッドの中で高優先で実行されるスレッドの数が平均化される。例えば、図１９に示す例では、例えば＃１〜＃４の端末でスレッド＃５とスレッド＃６とが高優先に設定されており、均等に実行されている。
【０１０８】
・処理情報の説明
図２０は、実施例３にかかる処理情報の一例を示す模式図である。図２０に示すように、処理情報８１の付随情報８２には、実施例２にかかる処理情報３３の付随情報４２に加えて（図６参照）、高優先フラグ及び高優先処理端末リストの各フィールドが設定されている。例えば、高優先フラグがトルーである場合、処理情報８１に対応する処理を行うスレッドは高優先に設定される。高優先フラグフィールドには、初期値として、例えばトルーが設定されていてもよい。高優先フラグの初期値がトルーである場合、各スレッドは、高優先で動作するように起動される。高優先処理端末リストフィールドには、処理情報８１に対応する処理を行うスレッドを高優先で実行している端末が記録される。
【０１０９】
・端末における処理結果受信時の動作
図２１は、実施例３にかかる端末における処理結果受信時の動作を図１３の続きとして示すフローチャートである。すなわち、実施例３では、受信部５８は、実施例２において図１２〜図１４を参照しながら説明した処理結果受信時の動作において、図１４に示すフローチャートの部分を図２１に示すフローチャートに置き換えた動作をする。以下に、実施例２とは異なる点についてのみ説明する。従って、図１２及び図１３に示すフローチャートについては、説明を省略する。
【０１１０】
ステップＳ４１〜ステップＳ５７は、実施例２で説明したとおりである。図２１に示すように、図１３のステップＳ５５で取得したすべての先行処理について、一つでもトルーでない終了フラグがある場合には（ステップＳ５６：Ｎｏ）、受信部５８は、ステップＳ５５で取得したすべての先行処理の高優先フラグを取得する（ステップＳ９１）。そして、受信部５８は、ステップＳ９１で取得したすべての先行処理について高優先フラグの値を確認する。
【０１１１】
一つでもフォールスでない終了フラグがある場合には（ステップＳ９２：Ｎｏ）、受信部５８は、バリア処理待ち状態のスレッドのバリア処理待ち状態を解除し（ステップＳ５７）、一連の処理結果受信時の動作を終了する。ステップＳ９１で取得したすべての先行処理の高優先フラグがフォールスである場合（ステップＳ９２：Ｙｅｓ）、高優先に設定されているスレッドの実行がすべて終了したことになる。従って、受信部５８は、優先度設定処理を実行し（ステップＳ９３）、一連の処理結果受信時の動作を終了する。優先度設定処理については、後述する。
【０１１２】
・端末におけるバリア処理時の動作
図２２は、実施例３にかかる端末におけるバリア処理時の動作を図１５の続きとして示すフローチャートである。すなわち、実施例３では、バリア処理部５７は、実施例２において図１５〜図１８を参照しながら説明したバリア処理時の動作において、図１６に示すフローチャートの部分を図２２に示すフローチャートに置き換えた動作をする。以下に、実施例２とは異なる点についてのみ説明する。従って、図１５、図１７及び図１８に示すフローチャートについては、説明を省略する。
【０１１３】
ステップＳ６１〜ステップＳ６７及びステップＳ７２〜ステップＳ７７は、実施例２で説明したとおりである。図２２に示すように、ステップＳ６１〜ステップＳ６７及びステップＳ７２〜ステップＳ７７において複数のスレッドが起動されると、バリア処理部５７は、優先度設定処理を実行し（ステップＳ９６）、図１７のステップＳ７９へ進む。バリア処理時のその他の動作については、実施例２で説明したとおりである。
【０１１４】
・端末における優先度設定処理時の動作
図２３は、実施例３にかかる端末における優先度設定処理時の動作を示すフローチャートである。図２４は、図２３の続きを示すフローチャートである。
【０１１５】
図２３に示すように、優先度設定処理が開始されると、端末は、まず、メモリ５４に展開されている処理情報６１から、終了フラグがフォールスであり、かつ処理フラグがトルーであるすべての処理情報６１を取得する（ステップＳ１０１）。次いで、端末は、ステップＳ１０１で取得した処理情報６１の高優先処理端末リストを取得する（ステップＳ１０２）。
【０１１６】
そして、端末は、ステップＳ１０２で取得した高優先処理端末リストが空であるか否かを確認する。確認したすべての高優先処理端末リストが空である場合（ステップＳ１０３：Ｙｅｓ）、自端末以外に高優先で処理を実行している端末がないことになる。従って、端末は、割り当てられた処理を最初に終了したのが自端末であるということを認識することができる。
【０１１７】
端末は、割り当てられた処理を最初に終了したのが自端末であるということを認識すると、ステップＳ１０１で取得したすべての処理情報６１の高優先処理端末リストフィールドに自端末の情報を記録する（ステップＳ１０４）。これによって、割り当てられた処理を最初に終了した端末では、投機的に実行される処理がすべて高優先で実行されることになる。
【０１１８】
次いで、端末は、ステップＳ１０１で取得したすべての処理情報６１の処理名の情報をリストにして基地局へ送信する（ステップＳ１０５）。送信された処理名情報のリストは、基地局で該リストの送信元の端末名が付されて基地局から一斉に配信される。そして、処理結果受信時の処理またはバリア処理に戻る。
【０１１９】
一方、高優先処理端末リストが空でない場合（ステップＳ１０３：Ｎｏ）、図２４に示すように、端末は、ステップＳ１０１で取得したすべての処理情報６１に基づいて、端末ごとに高優先で実行される処理の数を集計する（ステップＳ１０６）。次いで、端末は、ステップＳ１０６で集計した高優先で実行される処理の数の最大値が１であるか否かを確認する。
【０１２０】
高優先で実行される処理の数の最大値が１である場合（ステップＳ１０７：Ｙｅｓ）、端末は、ステップＳ１０１で取得した処理情報６１の中から、高優先処理端末リストフィールドに記録されている端末の数が最小である処理情報６１を一つ選択する（ステップＳ１０８）。次いで、端末は、ステップＳ１０８で選択した処理情報６１の高優先処理端末リストフィールドに自端末の情報を追加する（ステップＳ１０９）。
【０１２１】
そして、端末は、ステップＳ１０８で選択した処理情報６１の高優先フラグをトルーに設定する（ステップＳ１１０）。また、端末は、ステップＳ１０１で取得した処理情報６１のうち、ステップＳ１０８で選択した処理情報６１以外の処理情報６１の高優先フラグをフォールスに設定する（ステップＳ１１１）。なお、ステップＳ１１０とステップＳ１１１とは、何れが先であってもよい。
【０１２２】
ステップＳ１０８〜ステップＳ１１１によって、投機的な実行をしている端末の数が投機的に実行される処理の数よりも多い場合に、高優先の処理が均等に実行されるように、優先度が設定される。
【０１２３】
次いで、端末は、ステップＳ１０８で選択した処理情報６１の処理名、すなわち高優先で処理することにした処理の処理名の情報を基地局へ送信する（ステップＳ１１２）。送信された処理名の情報は、基地局で該処理名の送信元の端末名が付されて基地局から一斉に配信される。次いで、端末は、ステップＳ１１０及びステップＳ１１１で設定した高優先フラグの値に基づいて、ステップＳ１０１で取得した処理情報６１の処理を行うスレッドの優先度を変更する（ステップＳ１１３）。そして、処理結果受信時の処理またはバリア処理に戻る。
【０１２４】
一方、高優先で実行される処理の数の最大値が１でない場合（ステップＳ１０７：Ｎｏ）、端末は、端末ごとに集計された、高優先で実行される処理の数が最大である端末を一つ選択する（ステップＳ１１４）。次いで、端末は、ステップＳ１１４で選択した端末において高優先で実行される処理とされている処理の任意の半分もしくは約半分の数の処理を選択する（ステップＳ１１５）。
【０１２５】
次いで、端末は、ステップＳ１１５で選択した処理に対応する処理情報６１の高優先フラグをトルーに設定する。また、端末は、高優先処理端末リストフィールドに記録されている端末の情報を自端末の情報に変更する（ステップＳ１１６）。また、端末は、ステップＳ１０１で取得した処理情報６１のうち、ステップＳ１１５で選択した処理以外の処理に対応する処理情報６１の高優先フラグをフォールスに設定する（ステップＳ１１７）。なお、ステップＳ１１６とステップＳ１１７とは、何れが先であってもよい。
【０１２６】
ステップＳ１１４〜ステップＳ１１７によって、例えば図１９に示す例の＃１〜＃３の端末の前半部分のように、高優先で実行されている処理の数が最も多い端末から任意の半分を選択して自端末で高優先で処理するように、優先度が設定される。
【０１２７】
次いで、端末は、ステップＳ１１５で選択した処理の処理名のリストを基地局へ送信する（ステップＳ１１８）。送信された処理名のリストは、基地局で該リストの送信元の端末名が付されて基地局から一斉に配信される。次いで、端末は、ステップＳ１１６及びステップＳ１１７で設定した高優先フラグの値に基づいて、ステップＳ１０１で取得した処理情報６１の処理を行うスレッドの優先度を変更する（ステップＳ１１３）。そして、処理結果受信時の処理またはバリア処理に戻る。
【０１２８】
ステップＳ１０５、ステップＳ１１２及びステップＳ１１８において、基地局へ処理名を送信することによって、並列処理を行っている端末間で情報を共有することができる。従って、例えば投機的な処理の実行中に通信不能となった端末があっても、当該端末が高優先で実行している処理を、情報を共有している他の端末から知ることができる。端末が、基地局から一斉に配信された処理名の情報を受け取ったときの動作（高優先処理名リスト受信時の動作）については、次に説明する。
【０１２９】
・端末における高優先処理名リスト受信時の動作
図２５は、実施例３にかかる端末における高優先処理名リスト受信時の動作を示すフローチャートである。端末は、基地局から一斉に配信された処理名の情報を受け取ると、高優先処理名リスト受信時の動作を開始する。
【０１３０】
図２５に示すように、端末は、高優先処理名リスト受信時の動作を開始すると、まず、端末は、受信した処理名の数を計算し（ステップＳ１２１）、受信した処理名の数が１であるか否かを確認する。受信した処理名の数が１でない場合（ステップＳ１２２：Ｎｏ）、投機的に実行される処理の数が投機的な実行をしている端末の数よりも多いことになる。
【０１３１】
一つの処理を高優先で処理することができるのは、原則的に一つの端末である。従って、受信した処理名の処理を自端末で高優先で処理している場合には、自端末で高優先で処理している処理を低優先に変更する。そこで、端末は、受信したすべての処理名に対応する処理情報６１の高優先フラグをフォールスに変更する（ステップＳ１２３）。
【０１３２】
その際、例えば図１９に示す例で、端末＃２がスレッド＃２を終了するタイミングと端末＃３がスレッド＃３を終了するタイミングとが同時であるとする。この場合、端末＃２と端末＃３とは、端末＃１で高優先で実行されていたスレッド＃５及びスレッド＃６の各処理を自端末で高優先で実行することとして、処理名を基地局へ送信する。端末＃２及び端末＃３は、基地局から一斉に配信された処理名の情報を受け取ると、受け取った処理名の情報に、自端末で高優先で実行するとしたスレッド＃５及びスレッド＃６の各処理が含まれていることになる。
【０１３３】
従って、ステップＳ１２３によって、端末＃２及び端末＃３は、自端末で高優先で実行するとしたスレッド＃５及びスレッド＃６の各処理を低優先に変更してしまうので、端末＃２及び端末＃３には、高優先で行う処理がなくなってしまう。そこで、端末は、ステップＳ１２３で高優先フラグをフォールスに変更した後、高優先フラグがトルーに設定されている処理情報６１の数を算出し（ステップＳ１２４）、算出した値が０であるか否かを確認する。
【０１３４】
ステップＳ１２４で算出した値が０である場合（ステップＳ１２５：Ｙｅｓ）、端末は、受信したすべての処理名に対応する処理情報６１の高優先フラグをトルーに変更する（ステップＳ１３２）。ステップＳ１３２によって、ステップＳ１２３で自端末での処理を低優先に変更したために、自端末に高優先で行う処理がなくなってしまうのを回避することができる。
【０１３５】
そして、端末は、受信した処理名に対応する処理情報６１の高優先処理端末リストフィールドに当該処理名の情報の送信元の端末の情報を追加し（ステップＳ１２８）、一連の高優先処理名リスト受信時の動作を終了する。
【０１３６】
一方、ステップＳ１２４で算出した値が０でない場合（ステップＳ１２５：Ｎｏ）、端末は、ステップＳ１２３で高優先フラグをフォールスに変更した処理情報６１の高優先処理端末リストフィールドから自端末の情報を削除する（ステップＳ１２６）。次いで、端末は、ステップＳ１２３で高優先フラグをフォールスに変更した処理情報６１に対応するスレッドがある場合には、当該スレッドの処理情報を低優先に変更する（ステップＳ１２７）。
【０１３７】
そして、端末は、受信した処理名に対応する処理情報６１の高優先処理端末リストフィールドに当該処理名の情報の送信元の端末の情報を追加し（ステップＳ１２８）、一連の高優先処理名リスト受信時の動作を終了する。ステップＳ１２３、ステップＳ１２６及びステップＳ１２８により、受信した処理名に対応する処理を、自端末は低優先で実行し、当該処理名の情報の送信元の端末が高優先で実行するようにできる。
【０１３８】
一方、ステップＳ１２１の計算結果が１である場合（ステップＳ１２２：Ｙｅｓ）、端末は、メモリ５４から、終了フラグがフォールスであり、かつ処理フラグがトルーであり、かつ高優先フラグがトルーであるすべての処理情報６１を取得する（ステップＳ１２９）。そして、端末は、ステップＳ１２９で取得した処理情報６１の数、すなわち高優先フラグがトルーである処理情報６１の数を算出する（ステップＳ１３０）。
【０１３９】
ステップＳ１３０で算出した値が１である場合（ステップＳ１３１：Ｙｅｓ）、投機的な実行をしている端末の数が投機的に実行される処理の数よりも多いか、自端末では、受信した処理名に対応する処理を高優先で行っていないことになる。従って、端末は、受信した処理名に対応する処理情報６１の高優先処理端末リストフィールドに当該処理名の情報の送信元の端末の情報を追加し（ステップＳ１２８）、一連の高優先処理名リスト受信時の動作を終了する。
【０１４０】
一方、ステップＳ１３０で算出した値が１でない場合（ステップＳ１３１：Ｎｏ）、投機的に実行される処理の数が投機的な実行をしている端末の数よりも多いことになる。従って、この場合には、ステップＳ１２３以降の動作を行い、受信した処理名に対応する処理を、自端末は低優先で実行し、当該処理名の情報の送信元の端末が高優先で実行するようにする。
【０１４１】
実施例３によれば、実施例２と同様の効果が得られる。また、投機的に実行される処理に優先度を設定することによって、効率よく投機的な実行を行うことができる。
【符号の説明】
【０１４２】
１４  記憶ユニット
１８  処理要求送信ユニット
１９  処理結果受信ユニット
５１  データ処理装置
５７，５８  受信ユニット、処理ユニット
【図１】
2012160655.tif 000003
【図２】
2012160655.tif 000004
【図３】
2012160655.tif 000005
【図４】
2012160655.tif 000006
【図５】
2012160655.tif 000007
【図６】
2012160655.tif 000008
【図７】
2012160655.tif 000009
【図８】
2012160655.tif 000010
【図９】
2012160655.tif 000011
【図１０】
2012160655.tif 000012
【図１１】
2012160655.tif 000013
【図１２】
2012160655.tif 000014
【図１３】
2012160655.tif 000015
【図１４】
2012160655.tif 000016
【図１５】
2012160655.tif 000017
【図１６】
2012160655.tif 000018
【図１７】
2012160655.tif 000019
【図１８】
2012160655.tif 000020
【図１９】
2012160655.tif 000021
【図２０】
2012160655.tif 000022
【図２１】
2012160655.tif 000023
【図２２】
2012160655.tif 000024
【図２３】
2012160655.tif 000025
【図２４】
2012160655.tif 000026
【図２５】
2012160655.tif 000027
【国際調査報告】
2012160655.tif 000028
2012160655.tif 000029
2012160655.tif 000030