(57)【要約】  端末装置（１０３）は、測定部（６０２）によって、端末装置（１０３）とオフロードサーバ（１０１）との間の帯域を測定する。測定後、端末装置（１０３）は、算出部（６０３）によって、端末装置（１０３）のプロセッサおよびオフロードサーバ（１０１）のプロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、帯域に基づいて算出する。算出後、端末装置（１０３）は、選択部（６０４）によって、算出された各々の実行時間の長さに基づき、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する。選択後、端末装置（１０３）は、設定部（６０５）によって、選択された実行対象の実行オブジェクトを端末装置（１０３）のプロセッサおよびオフロードサーバ（１０１）のプロセッサで協動して実行可能な状態に設定する。
2012023175.tif 000002
【特許請求の範囲】
【請求項１】
接続元装置と接続先装置との間の帯域を測定する測定工程と、
前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
を前記接続元プロセッサに実行させることを特徴とする並列処理制御プログラム。
【請求項２】
前記選択工程は、
前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項３】
前記算出工程は、
前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項４】
前記算出工程は、
前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項３に記載の並列処理制御プログラム。
【請求項５】
前記選択工程による選択によって、前記実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する検出工程と、
前記検出工程によって前記新たな実行対象の実行オブジェクトが選択されたことが検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
を前記接続元プロセッサに実行させることを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項６】
前記実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、前記帯域が減少した状態を検出する検出工程と、
前記検出工程によって前記状態が検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
を前記接続元プロセッサに実行させることを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項７】
前記接続元装置と前記接続先装置とが携帯電話網を経由して接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
前記選択工程は、
前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択することを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項８】
前記接続元装置と前記接続先装置とがアドホック接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
前記選択工程は、
前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択することを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項９】
複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定工程と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定工程と、
を前記特定のプロセッサに実行させることを特徴とする並列処理制御プログラム。
【請求項１０】
前記選択工程は、
前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする請求項９に記載の並列処理制御プログラム。
【請求項１１】
前記算出工程は、
前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記複数のプロセッサのうち、前記特定のプロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項９に記載の並列処理制御プログラム。
【請求項１２】
前記算出工程は、
前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記複数のプロセッサのうち、前記特定のプロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項１１に記載の並列処理制御プログラム。
【請求項１３】
接続先装置との間の帯域を測定する測定手段と、
自装置内のプロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
前記選択手段によって選択された実行対象の実行オブジェクトを前記自装置内のプロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定手段と、
を備えることを特徴とする情報処理装置。
【請求項１４】
複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定手段と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
前記選択手段によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定手段と、
を備えることを特徴とする情報処理装置。
【請求項１５】
接続元装置と接続先装置との間の帯域を測定する測定工程と、
前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
を前記接続元プロセッサが実行することを特徴とする並列処理制御方法。
【請求項１６】
複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定工程と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定工程と、
を前記特定のプロセッサが実行することを特徴とする並列処理制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理を制御する並列処理制御プログラム、情報処理装置、および並列処理制御方法に関する。
【背景技術】
【０００２】
近年、ネットワーク技術の発達にともない、シンクライアント処理、サーバ連携といった技術が開示されている。シンクライアント処理は、ユーザが使用する端末装置では入出力機構を有し、ネットワークを介して接続されたサーバが実処理を行う機構である。また、サーバ連携は、端末装置とサーバが連携し、特定のサービスを提供する技術である。【０００３】
たとえば、シンクライアント処理を行う技術として、たとえば、端末装置の負荷に応じて、端末装置がサーバにソフトウェアの起動要求を通知する技術が開示されている（たとえば、下記特許文献１を参照。）。また、別のシンクライアント処理を行う技術として、端末装置からのソフトウェア起動要求に対して、サーバが仮想マシンソフトウェアを起動する技術が開示されている（たとえば、下記特許文献２を参照。）。【０００４】
また、端末装置が移動する場合、ネットワークの通信品質は、端末装置の所在位置によって変動する。ネットワークの通信品質の判断技術として、たとえば、ネットワークの通信網における正常稼働時における通信品質の指標を保持しておき、回線が正常稼働しているか否かを判断できる技術が開示されている（たとえば、下記特許文献３を参照。）。【０００５】
また、端末装置が移動し、ネットワークの通信品質が劣化した場合、サーバで実行された処理結果を端末装置が取得できなくなる可能性がある。通信品質の劣化時における対策技術として、たとえば、チェックポイントを設けて、チェックポイント時に、データベースデータおよびステータスをサブシステムに転送する技術が開示されている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−２５２２１８号公報
【特許文献２】特開２００６−１０７１８５号公報
【特許文献３】特開２００６−３４００５０号公報
【特許文献４】特開２００５−２６７３０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述した従来技術において、シンクライアント処理およびサーバ連携は、端末装置で全ての処理を実行するか、またはサーバにオフロードするか、いずれかの形態で処理を実行していた。しかしながら、これらの形態、特に、端末装置で全ての処理を実行する場合、端末装置の性能がボトルネックとなる問題があった。【０００８】
また、特許文献１または特許文献２に特許文献３を組み合わせた技術によって、通信品質に応じて、たとえば、広帯域を獲得できた場合に、端末装置とサーバとで異なるソフトウェアを分散して実行することができる。しかしながら、前述の技術では、１つのソフトウェアを並列処理することが困難であるという問題があった。また、狭帯域において、特許文献４にかかる技術では、データベースという大掛かりのリソースが要求されるため、コスト増となる問題があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、帯域に応じた適切な並列処理を実行できる並列処理制御プログラム、情報処理装置、および並列処理制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、開示の並列処理制御プログラムは、接続元装置と接続先装置との間の帯域を測定し、接続元装置内の接続元プロセッサおよび接続先装置内の接続先プロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、測定された帯域に基づいて算出し、算出された各々の実行時間の長さに基づいて、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択し、選択された実行対象の実行オブジェクトを接続元プロセッサおよび接続先プロセッサで協動して実行可能な状態に設定する。
【発明の効果】
【００１１】
本並列処理制御プログラム、情報処理装置、および並列処理制御方法によれば、帯域に応じて適切な並列処理を実行でき、処理性能を向上させるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１にかかる並列処理制御システム１００に含まれる装置群を示すブロック図である。
【図２】実施の形態１にかかる端末装置１０３のハードウェアを示すブロック図である。
【図３】並列処理制御システム１００のソフトウェアを示す説明図である。
【図４】並列処理の実行状態と実行時間に関する説明図である。
【図５】並列処理の割合とＣＰＵ数に関する処理性能を示した説明図である。
【図６】並列処理制御システム１００の機能を示すブロック図である。
【図７】並列処理制御システム１００の設計時における概要を示す説明図である。
【図８】各粒度の実行オブジェクトの具体例を示す説明図である。
【図９】細粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。
【図１０】中粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。
【図１１】粗粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。
【図１２】無線通信１０５が遮断された場合における並列処理制御システム１００の実行状態を示す説明図である。
【図１３】並列処理の粒度が粗くなった場合における、データ保護の具体例を示す説明図である。
【図１４】並列処理の分割数に応じた実行時間の具体例を示す説明図である。
【図１５】実施の形態２にかかるアドホック接続での並列処理制御システム１００の実行状態を示す説明図である。
【図１６】実施の形態３にかかるマルチコアプロセッサシステムにおける並列処理制御システム１００の実行状態を示す説明図である。
【図１７】スケジューラ３０２による並列処理の開始処理を示すフローチャートである。
【図１８】スケジューラ３０２による負荷分散プロセスにおける並列処理制御処理を示すフローチャートである。
【図１９】データ保護処理を示すフローチャートである。
【図２０】仮想メモリ設定処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかる並列処理制御プログラム、情報処理装置、および並列処理制御方法の好適な実施の形態を詳細に説明する。
【００１４】
（実施の形態１の概要説明）
図１は、実施の形態１にかかる並列処理制御システム１００に含まれる装置群を示すブロック図である。並列処理制御システム１００は、オフロードサーバ１０１と、基地局１０２と、端末装置１０３とを有している。オフロードサーバ１０１と、基地局１０２とは、ネットワーク１０４で接続されており、基地局１０２と、端末装置１０３とは、無線通信１０５で接続されている。
【００１５】
オフロードサーバ１０１は、端末装置１０３の処理を代わりに実行する装置である。具体的には、オフロードサーバ１０１は、端末装置１０３を擬似的に動作できる環境を有し、前述の環境上で端末装置１０３の処理を代わりに実行する。環境などのソフトウェアについては、図３にて後述する。
【００１６】
基地局１０２は、端末装置１０３との間で無線通信を行い、他の端末との通話、通信を中継する装置である。また、基地局１０２は複数存在し、複数の基地局１０２と端末装置１０３で携帯電話網を形成している。また、基地局１０２は、ネットワーク１０４を通して、端末装置１０３とオフロードサーバ１０１との通信を中継する。
【００１７】
具体的には、基地局１０２は、端末装置１０３から無線通信１０５によって受信したデータを、ネットワーク１０４によってオフロードサーバ１０１に送信する。端末装置１０３からオフロードサーバ１０１への通信回線はアップリンクとなる。また、基地局１０２は、オフロードサーバ１０１から無線通信１０５によって受信したパケットデータを、無線通信１０５によって端末装置１０３に送信する。オフロードサーバ１０１から端末装置１０３への通信回線はダウンリンクとなる。
【００１８】
端末装置１０３は、利用者が並列処理制御システム１００を利用するために使用される装置である。具体的には、端末装置１０３は、ユーザインターフェイス機能を有し、利用者からの入出力を受け付ける。たとえば、並列処理制御システム１００がＷｅｂメールのサービスを提供する場合、オフロードサーバ１０１は、メール処理を行い、端末装置１０３は、Ｗｅｂブラウザを実行する。
【００１９】
（実施の形態１にかかる端末装置１０３のハードウェア）
図２は、実施の形態１にかかる端末装置１０３のハードウェアを示すブロック図である。図２において、端末装置１０３は、ＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を有する。また、端末装置１０３は、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６と、を有する。また、端末装置１０３は、ユーザやその他の機器との入出力装置として、ディスプレイ２０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０８と、キーボード２０９と、を有する。また、各部はバス２１０によってそれぞれ接続されている。
【００２０】
ここで、ＣＰＵ２０１は、端末装置１０３の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。フラッシュＲＯＭ２０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、端末装置１０３は、Ｉ／Ｆ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２１】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵ２０１の制御に従ってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、端末装置１０３を使用するユーザがＩ／Ｆ２０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２２】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２３】
Ｉ／Ｆ２０８は、無線通信１０５を介して基地局１０２に接続されている。基地局１０２を経由して、Ｉ／Ｆ２０８は、インターネットなどのネットワーク１０４に接続され、ネットワーク１０４を介してオフロードサーバ１０１等に接続される。そして、Ｉ／Ｆ２０８は、無線通信１０５と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２４】
キーボード２０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２５】
また、図示していないが、オフロードサーバ１０１のハードウェアとしては、ＣＰＵ、ＲＯＭ、ＲＡＭを有する。また、オフロードサーバ１０１は、記憶装置として、磁気ディスクドライブ、光ディスクドライブを有してもよい。磁気ディスクドライブ、光ディスクドライブは、オフロードサーバ１０１のＣＰＵの制御によって、データを記憶したり、読み込んだりする。
【００２６】
図３は、並列処理制御システム１００のソフトウェアを示す説明図である。図３に示すソフトウェアは、端末ＯＳ３０１と、スケジューラ３０２と、帯域監視部３０３と、プロセス３０４と、スレッド３０５＿０〜スレッド３０５＿３と、サーバＯＳ３０６と、端末エミュレータ３０７と、仮想メモリ監視フィードバック３０８とである。スレッド３０５＿０〜スレッド３０５＿３は、プロセス３０４内のスレッドである。前述のソフトウェアがアクセスする記憶領域として、実メモリ３０９と、仮想メモリ３１０がＲＡＭ２０３、オフロードサーバ１０１のＲＡＭ等に確保されている。
【００２７】
また、端末ＯＳ３０１〜プロセス３０４、スレッド３０５＿０は、端末装置１０３にて実行され、プロセス３０４、スレッド３０５＿１〜スレッド３０５＿３、サーバＯＳ３０６〜仮想メモリ監視フィードバック３０８は、オフロードサーバ１０１にて実行される。
【００２８】
端末ＯＳ３０１は、端末装置１０３を制御するソフトウェアである。具体的には、端末ＯＳ３０１は、スレッド３０５＿０等が使用するライブラリを提供する。また、端末ＯＳ３０１は、ＲＯＭ２０２、ＲＡＭ２０３などのメモリの管理を行う。
【００２９】
スケジューラ３０２は、端末ＯＳ３０１が提供する機能の一つであり、スレッドやプロセスに設定されている優先度等に基づいて、ＣＰＵ２０１に割り当てるスレッドを決定するソフトウェアである。定められた時刻になった場合、スケジューラ３０２は、ディスパッチが決定されたスレッドをＣＰＵ２０１に割り当てる。また、実施の形態１にかかるスケジューラ３０２は、並列処理が可能であり、並列処理の粒度が異なる実行オブジェクトが複数存在する場合、最適な実行オブジェクトを選択し、実行してプロセス３０４を生成する。並列処理の粒度については、図７にて詳しく記述する。
【００３０】
帯域監視部３０３は、ネットワーク１０４、無線通信１０５の帯域を監視するソフトウェアである。具体的には、帯域監視部３０３は、Ｐｉｎｇを発行し、ダウンリンクとアップリンクの速度を測定し、変化があった場合にスケジューラ３０２に通知する。
【００３１】
具体的な変化としては、たとえば、帯域監視部３０３は、前回からの帯域の変化分が一定の閾値以上であった場合に、変化があったとして判断してもよい。または、並列処理制御システム１００が取り得る最広帯域をブロックに分割し、ブロックを移動した場合、帯域監視部３０３は、変化があったとして判断してもよい。具体的に、最広帯域が１００［Ｍｂｐｓ］であった場合、帯域を３分割し、１００〜６７［Ｍｂｐｓ］を広帯域、６７〜３３［Ｍｂｐｓ］を中帯域、３３〜０［Ｍｂｐｓ］を狭帯域とする。帯域監視部３０３は、広帯域→中帯域、中帯域→狭帯域など、分割されたブロックを移動した際に、変化があったとして判断してもよい。
【００３２】
プロセス３０４は、ＣＰＵ２０１がＲＡＭ２０３等に読み込まれた実行オブジェクトを実行することによって生成される。プロセス３０４の内部には、スレッド３０５＿０〜スレッド３０５＿３が存在し、スレッド３０５＿０〜スレッド３０５＿３は並列処理を実行している。また、プロセス３０４は、負荷分散を行うことが可能である。
【００３３】
具体的には、端末装置１０３は、実行オブジェクトを無線通信１０５、ネットワーク１０４を通じてオフロードサーバ１０１に送信し、オフロードサーバ１０１は、スレッド３０５＿１〜スレッド３０５＿３を生成する。これにより、プロセス３０４は、端末装置１０３とオフロードサーバ１０１とで、負荷分散された状態で実行される。以下、負荷分散が可能なプロセスを、負荷分散プロセスと呼称する。また、端末装置１０３で実行中のスレッド３０５＿０は、実メモリ３０９にアクセスする。オフロードサーバ１０１で実行中のスレッド３０５＿１〜スレッド３０５＿３は、仮想メモリ３１０にアクセスする。
【００３４】
サーバＯＳ３０６は、オフロードサーバ１０１を制御するソフトウェアである。具体的には、サーバＯＳ３０６は、スレッド３０５＿１〜スレッド３０５＿３等が使用するライブラリを提供する。また、サーバＯＳ３０６は、オフロードサーバ１０１のＲＯＭ、ＲＡＭなどのメモリの管理を行う。
【００３５】
端末エミュレータ３０７は、端末装置１０３を模倣するソフトウェアであり、端末装置１０３で実行可能な実行オブジェクトを、オフロードサーバ１０１で実行可能とするソフトウェアである。具体的には、端末エミュレータ３０７は、実行オブジェクトに記載されたＣＰＵ２０１への命令または端末ＯＳ３０１のライブラリへの命令を、オフロードサーバ１０１のＣＰＵへの命令またはサーバＯＳ３０６のライブラリへの命令に置き換えて実行する。
【００３６】
図３に示す状態では、オフロードサーバ１０１は、端末エミュレータ３０７上でスレッド３０５＿１〜スレッド３０５＿３を実行している。端末エミュレータ３０７を実行することで、並列処理制御システム１００は、ＣＰＵ２０１をマスタＣＰＵと想定し、オフロードサーバ１０１が仮想ＣＰＵ３１１をスレーブＣＰＵと想定した、マルチコアプロセッサシステムの様相を示すことになる。
【００３７】
仮想メモリ監視フィードバック３０８は、仮想メモリ３１０に書き込まれたデータを実メモリ３０９に書き戻すソフトウェアである。具体的には、仮想メモリ監視フィードバック３０８は、仮想メモリ３１０に対するアクセスを監視し、仮想メモリ３１０に書き込まれたデータを、ダウンリンクを通じて実メモリ３０９に書き戻す。また、仮想メモリ３１０は、実メモリ３０９と同じアドレスを記憶する領域であり、定められたタイミングによって、仮想メモリ監視フィードバック３０８が前述の書き戻す処理を行う。定められたタイミングについては、プロセス３０４の並行処理の粒度によって異なる。書き戻すタイミングについては、図９〜図１２にて後述する。
【００３８】
図４は、並列処理の実行状態と実行時間に関する説明図である。符号４０１で示す説明図は、ＣＰＵ２０１をマスタＣＰＵとし、オフロードサーバ１０１の端末エミュレータ３０７による仮想ＣＰＵ３１１をスレーブＣＰＵとした状態におけるプロセス３０４の実行状態を示している。符号４０２で示す説明図は、プロセス３０４を符号４０１で示す実行状態で実行した際の実行時間を示している。
【００３９】
符号４０１で示す説明図にて、ＣＰＵ２０１は、ミドルウェア／ライブラリなどを利用して、負荷分散プロセスとなるプロセス３０４に含まれるスレッド３０５＿０を実行している。また、プロセス３０４に含まれるスレッド３０５＿１について、ＣＰＵ２０１は、端末ＯＳ３０１のカーネルから、プロセッサ間通信によって、仮想ＣＰＵ３１１に通知する。通知される内容は、スレッド３０５＿１のスレッドコンテキストのメモリダンプでもよいし、スレッド３０５＿１を実行するために要求される開始アドレス、引数の情報、スタックメモリサイズ等を通知してもよい。通知された内容に従って、仮想ＣＰＵ３１１は、スレーブカーネルとスケジューラ４０３によって、スレッド３０５＿１をナノスレッドとして割り当てる。
【００４０】
符号４０２で示す説明図では、プロセス３０４の実行時間を示している。時刻ｔ０にて、ＣＰＵ２０１は、プロセス３０４を実行開始する。時刻ｔ０から時刻ｔ１の区間では、ＣＰＵ２０１は、並列処理を行うことができない、逐次処理が要求される処理を実行している。時刻ｔ１にて、ＣＰＵ２０１は、並列処理を行える処理を検出すると、時刻ｔ１から時刻ｔ２にかけて、並列処理を実行するのに要求される情報を前述のプロセッサ間通信にて仮想ＣＰＵ３１１に通知する。時刻ｔ２から時刻ｔ３にかけて、ＣＰＵ２０１と仮想ＣＰＵ３１１は、プロセス３０４を並列実行する。
【００４１】
時刻ｔ３にて、並列実行が終了すると、仮想ＣＰＵ３１１は、時刻ｔ３から時刻ｔ４にかけて、実行した並列処理の結果をプロセッサ間通信によって、ＣＰＵ２０１に通知する。時刻ｔ４から時刻ｔ５にかけて、ＣＰＵ２０１は、再び逐次処理を実行し、プロセス３０４の処理を終了する。結果、プロセス３０４の実行時間Ｔ（Ｎ）となる時刻ｔ０から時刻ｔ５までの時間は、下記（１）式で求めることができる。
【００４２】
Ｔ（Ｎ）＝（Ｓ＋（１−Ｓ）／Ｎ）・Ｔ（１）＋τ…（１）
【００４３】
ただし、Ｎを負荷分散プロセスを実行可能なＣＰＵ数とし、Ｔ（Ｎ）をＣＰＵ数がＮ個の場合における負荷分散プロセスの実行時間とし、Ｓを負荷分散プロセスにて、逐次処理を行う割合を示し、τを並列処理に伴う通信時間を示している。以下、ＮをＣＰＵ数、Ｓを逐次処理の割合、τを通信時間と称する。なお、逐次処理の割合Ｓを用いると、並列処理の割合は１００−Ｓ［％］となる。
【００４４】
図５は、並列処理の割合とＣＰＵ数に関する処理性能を示した説明図である。グラフ５０１の横軸はＣＰＵ数Ｎであり、縦軸はＣＰＵ数Ｎ＝１を基準にした処理性能比を示している。通信時間τが０であり、通信にかかるオーバーヘッドが発生しない理想的な状態の場合、逐次処理の割合Ｓ＝８０［％］、９０［％］のいずれも、ＣＰＵ数が増加するにつれ、処理性能が向上している。
【００４５】
しかし、通信時間τ＝０．１Ｔ（１）であり、通信にかかるオーバーヘッドが発生する場合、逐次処理の割合Ｓ＝９０［％］において、ＣＰＵ数２個〜４個におけるプロット点が、処理性能比１を下回る矩形５０２内に存在している。このように、通信にかかるオーバーヘッドが発生する場合、並列処理または逐次処理の割合によっては、並列処理を実行することで、処理性能比が悪化する可能性がある。
【００４６】
（並列処理制御システム１００の機能）
次に、並列処理制御システム１００の機能について説明する。図６は、並列処理制御システム１００の機能を示すブロック図である。並列処理制御システム１００は、測定部６０２と、算出部６０３と、選択部６０４と、設定部６０５と、検出部６０６と、通知部６０７と、格納部６０８と、実行部６０９と、実行部６１０と、を含む。この制御部となる機能（測定部６０２〜実行部６１０）は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。または、Ｉ／Ｆ２０８を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００４７】
また、端末装置１０３は、ＲＯＭ２０２、ＲＡＭ２０３等の記憶装置に格納された実行オブジェクト６０１にアクセス可能である。また、各機能部のうち、測定部６０２〜実行部６０９は、マスタＣＰＵとなるＣＰＵ２０１を有する端末装置１０３の機能であり、実行部６１０は、スレーブＣＰＵとなる仮想ＣＰＵ３１１を有するオフロードサーバ１０１の機能となる。
【００４８】
測定部６０２は、接続元装置と接続先装置との間の帯域を測定する機能を有する。たとえば、測定部６０２は、接続元装置となる端末装置１０３と、接続先装置となるオフロードサーバ１０１との間の帯域σを測定する。具体的に、測定部６０２は、Ｐｉｎｇをオフロードサーバ１０１に送信し、Ｐｉｎｇの応答時間によって、ダウンリンクとアップリンクを測定する。測定部６０２は、帯域監視部３０３の一部の機能となる。なお、抽出されたデータは、ＣＰＵ２０１のレジスタ、キャッシュメモリ、またはＲＡＭ２０３などの記憶領域に記憶される。
【００４９】
算出部６０３は、接続元装置内の接続元プロセッサおよび接続先装置内の接続先プロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、測定部６０２によって測定された帯域に基づいて算出する機能を有する。並列処理の粒度とは、特定の処理を並列実行する際に、分割された処理量を示している。粒度が細かくなるほど、分割された処理量が少なくなり、粒度が粗くなるほど、分割された処理量が多くなる。たとえば、粒度が細かい並列処理としては、ステートメント単位の並列処理が存在し、粒度が粗い並列処理としては、スレッド単位、関数単位等の並列処理が存在する。また、粒度の中程度の並列処理として、ループによる繰り返しの並列処理が存在する。
【００５０】
たとえば、算出部６０３は、ＣＰＵ２０１と仮想ＣＰＵ３１１で並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、帯域σに基づいて算出する。なお、具体的な算出方法として、算出部６０３は、並列処理の処理時間に、並列処理のオーバーヘッドとなる通信量を帯域σで除算した値を加算することで、実行時間を算出する。または、帯域σが狭帯域となるとオーバーヘッドが顕著になるため、たとえば、算出部６０３は、特定の閾値σ０を設け、帯域σが閾値σ０を下回った場合に、並列処理の処理時間に通信量を帯域σで除算した値を加算することで、実行時間を算出してもよい。
【００５１】
また、算出部６０３は、はじめに帯域と並列処理にかかる通信量とによって通信時間を算出する。続けて、算出部６０３は、並列処理を逐次実行した場合の処理時間と並列処理のうち逐次処理の割合と並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を実行オブジェクトごとに算出する。最後に、算出部６０３は、通信時間と並列実行する場合の処理時間とを加算することによって、複数の実行オブジェクトの各々の実行時間を算出してもよい。
【００５２】
並列処理のうち逐次処理の割合とは、特定の処理のうち、並列実行が可能な部分を除いた割合である。また、算出部６０３は、特定の処理のうち、並列実行が可能な割合を用いて算出してもよい。実施の形態１にかかる並列処理制御システム１００では、逐次処理の割合Ｓを用いて算出している。また、算出された通信時間は、（１）式における、第２項となる通信時間τと一致し、算出された並列実行する場合の処理時間は、（１）式における、第１項となる（Ｓ＋（１−Ｓ）／Ｎ）・Ｔ（１）と一致する。
【００５３】
たとえば、算出部６０３は、並列処理の粒度が粗である実行オブジェクトについて算出する場合を想定する。帯域σが１０［Ｍｂｐｓ］であり、並列処理にかかる通信量が７６８９６［ビット］である場合、算出部６０３は、通信時間を通信量／帯域σ＝約３．０［ミリ秒］と算出する。また、逐次実行した場合の処理時間を７．５［ミリ秒］とし、逐次処理の割合Ｓを０．０１［％］とし、並列実行が可能な最大の分割数Ｎ＿Ｍａｘをがである場合、算出部６０３は、並列実行する場合の処理時間を３．８［ミリ秒］と算出する。最後に、算出部６０３は、粗粒度実行オブジェクトの実行時間を３．０＋３．８＝６．８［ミリ秒］と算出する。算出部６０３は、同様に、他の粒度に関する実行オブジェクトの実行時間を算出する。
【００５４】
また、算出部６０３は、初めに、並列実行する場合の処理時間を逐次実行した場合の処理時間と逐次処理の割合と最大の分割数以下である並列実行の数によって算出する。続けて、算出部６０３は、通信時間と並列実行する場合の処理時間とを加算することによって、複数の実行オブジェクトの各々の並列実行の数ごとの実行時間を算出してもよい。
【００５５】
たとえば、算出部６０３は、並列処理の粒度が粗である実行オブジェクトにおいて、最大の分割数が２であれば、並列実行の数が１であるときの実行時間を７．５［ミリ秒］、並列実行の数が２であるとき（１）式より、実行時間を６．８［ミリ秒］、と算出する。なお、算出された結果は、ＣＰＵ２０１のレジスタ、キャッシュメモリ、またはＲＡＭ２０３などの記憶領域に記憶される。
【００５６】
選択部６０４は、算出部６０３によって算出された各々の実行時間の長さに基づいて、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する機能を有する。また、選択部６０４は、各々の実行時間の長さのうち、最短となる実行オブジェクトを、実行対象の実行オブジェクトとして選択してもよい。たとえば、選択部６０４は、算出された実行オブジェクトの実行時間が７．５［ミリ秒］、６．８［ミリ秒］であれば、最短となる６．８［ミリ秒］となった実行オブジェクトを選択してもよい。
【００５７】
また、最短以外の選択方法として、選択後、実行オブジェクトを切り替えることになると、切り替えのオーバーヘッドが発生するため、選択部６０４は、切り替えのオーバーヘッドを加算して選択してもよい。たとえば、現在選択中の実行オブジェクトと他の実行オブジェクトの実行時間が僅差で他の実行オブジェクトの実行時間が最短となっている場合を想定する。選択部６０４は、切り替えにかかるオーバーヘッド時間を他の実行オブジェクトの実行時間に加算した際に、選択中の実行オブジェクトの実行時間を超えた場合は、選択中の実行オブジェクトの実行時間を選択してもよい。
【００５８】
また、選択部６０４は、検出部６０６によって携帯電話網を経由して接続されている場合に、並列処理を実行開始することが検出された場合、実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択してもよい。具体的には、選択部６０４は、検出された場合に、粗粒度実行オブジェクトを選択する。なお、選択された結果は、ＣＰＵ２０１のレジスタ、キャッシュメモリ、またはＲＡＭ２０３などの記憶領域に記憶される。
【００５９】
設定部６０５は、選択部６０４によって選択された実行対象の実行オブジェクトを接続元プロセッサおよび接続先プロセッサで協動して実行可能な状態に設定する機能を有する。ここで、協動とは、接続元プロセッサおよび接続先プロセッサが協同して動くことを示している。たとえば、選択部６０４によって並列処理の粒度を粗とする粗粒度実行オブジェクトが選択された場合、設定部６０５は、ＣＰＵ２０１と仮想ＣＰＵ３１１が粗粒度実行オブジェクトを実行可能な状態に設定する。
【００６０】
具体的な設定内容として、ＣＰＵ２０１は、仮想ＣＰＵ３１１に実行対象となった粗粒度実行オブジェクトのデータを転送し、粗粒度実行オブジェクトを実行可能な状態にする。また、他の設定内容として、オフロードサーバ１０１に端末エミュレータ３０７が起動していない場合、ＣＰＵ２０１は、端末エミュレータ３０７を起動させ、粗粒度実行オブジェクトを実行可能な状態にする。
【００６１】
また、設定部６０５は、実行対象の実行オブジェクトを、接続元装置および接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ最大の分割数となるプロセッサ群で協動して実行可能な状態に設定してもよい。特定の接続元プロセッサとは、端末装置１０３がマルチコアを有していた場合に、マスタとなるプロセッサのことであり、特定の接続先プロセッサとは、オフロードサーバ１０１がマルチコアを有していた場合に、マスタとなるプロセッサのことである。また、オフロードサーバ１０１のマスタとなるプロセッサとしては、たとえば、端末装置１０３の測定部６０２によるＰｉｎｇに対して、複数のプロセッサのうち、Ｐｉｎｇの応答を行うプロセッサである。
【００６２】
たとえば、接続元装置のプロセッサが１個であり、接続先装置のプロセッサが４個である場合、最大の分割数が４であった場合を想定する。設定部６０５は、端末装置１０３のＣＰＵ２０１と、オフロードサーバ１０１のマスタＣＰＵを含む３つのＣＰＵ、計４つのＣＰＵで協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【００６３】
また、設定部６０５は、実行対象の実行オブジェクトを、接続元装置および接続先装置のプロセッサ群のうち、実行対象の実行オブジェクトにおける並列実行の数となるプロセッサ群で協動して実行可能な状態に設定してもよい。また、プロセッサ群には、特定の接続元プロセッサおよび特定の接続先プロセッサを含む。
【００６４】
たとえば、接続元装置のプロセッサが１個であり、接続先装置のプロセッサが４個である場合、最大の分割数が４であり、実行対象の実行オブジェクトにおける並列実行の数が３となった場合を想定する。設定部６０５は、端末装置１０３のＣＰＵ２０１と、オフロードサーバ１０１のマスタＣＰＵを含む２つのＣＰＵ、計３つのＣＰＵで、協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【００６５】
検出部６０６は、選択部６０４による選択によって、実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する機能を有する。たとえば、検出部６０６は、並列処理の粒度が細である細粒度実行オブジェクトから並列処理の粒度が中である中粒度実行オブジェクトに変更した場合、または、中粒度実行オブジェクトから粗粒度実行オブジェクトに変更した場合である。
【００６６】
また、検出部６０６は、実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、帯域が減少した状態を検出してもよい。具体的には、検出部６０６は、粗粒度実行オブジェクトが選択されている場合に、帯域σが減少した状態を検出する。また、帯域σが減少した状態として、一定時間ごとの平均値をとり、前回の平均値の帯域より下回った場合に、検出部６０６は、帯域が減少したとして検出してもよい。または、特定の閾値を下回った場合に、検出部６０６は、帯域が減少したとして検出してもよい。
【００６７】
また、検出部６０６は、接続元装置と接続先装置とが携帯電話網を経由して接続されている場合に、並列処理を実行開始することを検出してもよい。具体的には、検出部６０６は、端末装置１０３が携帯電話網の一部である基地局１０２を経由し、オフロードサーバ１０１に接続されている場合に、並列処理を実行開始することを検出する。なお、検出された結果は、ＣＰＵ２０１のレジスタ、キャッシュメモリ、またはＲＡＭ２０３などの記憶領域に記憶される。
【００６８】
通知部６０７は、検出部６０６によって粒度が粗い新たな実行対象の実行オブジェクトが選択されたことが検出された場合、接続先装置に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を接続先装置に通知する機能を有する。たとえば、通知部６０７は、オフロードサーバ１０１の仮想メモリ３１０に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を、オフロードサーバ１０１に通知する。
【００６９】
また、通知部６０７は、検出部６０６によって最も粒度が粗い実行オブジェクトが選択されている場合に、帯域が減少した状態が検出された場合、接続先装置に保持された実行対象の実行オブジェクトによる処理結果の送信要求を接続先装置に通知する機能を有する。たとえば、通知部６０７は、検出された場合に、オフロードサーバ１０１の仮想メモリ３１０に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を、オフロードサーバ１０１に通知する。
【００７０】
格納部６０８は、通知部６０７によって通知された送信要求による処理結果を接続元装置の記憶装置に格納する機能を有する。たとえば、格納部６０８は、送信要求による処理結果を実メモリ３０９に格納する。
【００７１】
実行部６０９、実行部６１０は、設定部６０５によって実行可能な状態に設定された実行対象の実行オブジェクトを実行する機能を有する。たとえば、粗粒度実行オブジェクトが実行対象の実行オブジェクトとなった場合、実行部６０９と、実行部６１０は、各装置で粗粒度実行オブジェクトを実行する。
【００７２】
図７は、並列処理制御システム１００の設計時における概要を示す説明図である。符号７０１に示すブロック図では、実行オブジェクトの生成の様子を示し、符号７０２に示すブロック図は、実行オブジェクトの詳細を示している。
【００７３】
符号７０１に示すブロック図にて、並列コンパイラは、実行されるとプロセス３０４となるソースコードから、構造解析を行いつつ、実行オブジェクトを生成する。並列コンパイラは、並列処理の粒度によって、粗粒度に対応する粗粒度実行オブジェクト７０３、中粒度に対応する中粒度実行オブジェクト７０４、細粒度に対応する細粒度実行オブジェクト７０５を生成する。また、並列コンパイラは、粗粒度実行オブジェクト７０３の構造解析結果７０６、中粒度実行オブジェクト７０４の構造解析結果７０７、細粒度実行オブジェクト７０５の構造解析結果７０８を生成する。
【００７４】
また、構造解析結果７０６〜構造解析結果７０８には、構造解析で得た、処理全体での逐次処理の割合Ｓと、並列処理で発生するデータ量Ｄと、並列処理の発生する頻度Ｘと、並列実行が可能な最大の分割数Ｎ＿Ｍａｘが記載されている。以下の説明では、粗粒度を示す接尾記号をｃ、中粒度を示す接尾記号をｍ、細粒度を示す接尾記号をｆとする。
【００７５】
次に並列処理の各粒度について説明する。粗粒度の並列処理とは、プログラム中の一連の処理の固まり、ブロックについて、一連の処理ブロック間に依存関係がない場合、ブロックを並列実行することである。中粒度の並列処理とは、ループ処理にて、ループの繰り返し部分に依存関係がない場合、繰り返し部分を並列実行することである。細粒度の並列処理とは、ステートメント間に依存関係がない場合、各ステートメントを並列実行することである。各粒度、構造解析結果７０６〜構造解析結果７０８については、後述する図８にて具体例を示す。
【００７６】
符号７０２に示すブロック図では、粗粒度実行オブジェクト７０３〜細粒度実行オブジェクト７０５の詳細を示している。粗粒度実行オブジェクト７０３は、プログラム中の一連のブロックを並列実行するように記載されている。中粒度実行オブジェクト７０４は、粗粒度実行オブジェクト７０３におけるプログラム中の一連のブロックを並列実行するように記載された状態で、ブロック内のループ処理について、さらに並列実行するように記載されている。細粒度実行オブジェクト７０５は、プログラム中の一連のブロックを並列実行し、さらにブロック内のループ処理を並列実行する状態で、さらに、ステートメントを並列実行するように記載されている。
【００７７】
このように、中粒度実行オブジェクト７０４、細粒度実行オブジェクト７０５は、該当の粒度より粒度が粗い並列処理を実行してもよいし、しなくてもよい。前述の例では粒度が粗い並列処理を実行していたが、たとえば、中粒度実行オブジェクト７０４は、プログラム中の一連のブロックを並列実行せず、ループ処理を並列実行するように生成されてもよい。
【００７８】
また、粒度が細かい実行オブジェクトは、該当の粒度より粒度が粗い並列処理を実行できるため、粒度が細かいほど、並列処理をより分割することができる分、通信量は増大する。したがって、広帯域では通信量の多い粒度が細かい実行オブジェクトを実行し、狭帯域では通信量の少ない粒度が粗い実行オブジェクトを実行することで、並列処理制御システム１００は帯域に応じて最適な並列処理を実行でき、処理性能を向上することができる。
【００７９】
図８は、各粒度の実行オブジェクトの具体例を示す説明図である。図８では、動画像の特定のフレームを復号化する際の処理について、粗粒度実行オブジェクト７０３〜細粒度実行オブジェクト７０５、また、構造解析結果７０６〜構造解析結果７０８の例を示している。
【００８０】
粗粒度実行オブジェクト７０３は、復号化を行う関数を並列実行するように生成されている。具体的には、粗粒度実行オブジェクト７０３は、端末装置１０３等によって、“ｄｅｃｏｄｅ＿ｖｉｄｅｏ＿ｆｒａｍｅ（）”関数を含むブロックと“ｄｅｃｏｄｅ＿ａｕｄｉｏ＿ｆｒａｍｅ（）”関数を含むブロックを並列実行するプロセスを生成する。
【００８１】
以下、構造解析結果７０６の値について説明する。並列実行可能なブロックが２つあるため、並列実行が可能な最大の分割数Ｎｃ＿Ｍａｘは２となる。また、“ｄｅｃｏｄｅ＿ｖｉｄｅｏ＿ｆｒａｍｅ（）”関数内に１００００ステートメント存在し、うち、逐次処理が１ステートメントであった場合、逐次処理の割合Ｓｃは１／１００００＝０．００００１＝０．０１［％］となる。また、データ量Ｄｃは、“ｄｅｃｏｄｅ＿ｖｉｄｅｏ＿ｆｒａｍｅ（）”関数の引数のデータサイズとなる。頻度Ｘｃは、引数を渡す際の１回である。具体的にＤｃは、引数の“ｄｓｔ”、“ｓｒｃ−＞ｖｉｄｅｏ”のサイズ、“ｓｉｚｅｏｆ（ｓｒｃ−＞ｖｉｄｅｏ）”の計算結果のサイズと、第２引数の実データである第３引数の値とを合計した値になる。
【００８２】
ここで、ディスプレイ２０７が３２０×２４０ピクセルであるＱＶＧＡ（Ｑｕａｒｔｅｒ  Ｖｉｄｅｏ  Ｇｒａｐｈｉｃｓ  Ａｒｒａｙ）が採用されており、画像圧縮処理の単位となるマクロブロックが８×８ピクセルである場合を想定する。このとき、ＱＶＧＡであれば、マクロブロックは（３２０×２４０）／（８×８）＝１２００個存在することになる。説明を簡略化するため、１つのマクロブロックの平均サイズが８［バイト］となる場合を想定する。したがって、“ｓｒｃ−＞ｖｉｄｅｏ”は、１２００個のマクロブロックを含んでおり、“ｓｉｚｅｏｆ（ｓｒｃ−＞ｖｉｄｅｏ）”は少なくとも１２００×８［バイト］となる。以上より、Ｄｃは（４×３＋１２００×８）×８＝７６８９６［ビット］となる。
【００８３】
また、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）については、並列コンパイラは、たとえば、対象のステップ数と、ＣＰＵ２０１の１命令のクロック時間から算出してもよいし、プロファイラに実行させた値を格納してもよい。図８の例では、実行時間Ｔ（１）＝７．５［ミリ秒］とする。また、（１）式において、端末装置１０３は、通信時間τをデータ量Ｄ・頻度Ｘ／帯域σにて算出する。端末装置１０３は、帯域σを２５［Ｍｂｐｓ］とし、ＣＰＵ数Ｎ＝２の実行時間を算出すると、下記のような結果を得る。
【００８４】
（０．０００１＋（１−０．０００１）／２）×０．００７５＋７６８９６／（２５×１０００×１０００）
≒０．００６８＝６．８［ミリ秒］
【００８５】
Ｔ（１）＝７．５［ミリ秒］、Ｔ（２）＝６．８［ミリ秒］となるため、粗粒度の場合、ＣＰＵ数Ｎ＝２で並列処理を行った方が早く処理を実行することができる。
【００８６】
中粒度実行オブジェクト７０４は、復号化を行う関数の中で、マクロブロックを処理するループ処理を並列実行するように生成されている。具体的には、中粒度実行オブジェクト７０４は、ループ部分となる変数ｉが０から１２００未満までのループ処理を、変数ｉごとに並列実行するプロセスを生成する。たとえば、生成されたプロセスは、変数ｉが０から５９９までを実行する処理と、変数ｉが６００から１１９９までを実行する処理と、のように並列実行する。
【００８７】
以下、構造解析結果７０７の値について説明する。ループの繰り返し数は１２００であるため、並列実行が可能な最大の分割数Ｎｍ＿Ｍａｘは１２００となる。また、ループ処理の中に１００ステートメント存在し、そのうち、中粒度実行オブジェクト７０４内に示した逐次処理が１ステートメントであった場合、逐次処理の割合Ｓｍは１／１００＝０．０１＝１［％］となる。また、データ量Ｄｍは、１個のマクロブロックのサイズとなり、８×８＝６４［ビット］である。頻度Ｘｍはマクロブロックのデータを転送する１２００回である。
【００８８】
また、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）は、２．０［ミリ秒］とする。端末装置１０３は、帯域σを５０［Ｍｂｐｓ］とし、ＣＰＵ数Ｎ＝２の実行時間を算出すると、下記のような結果を得る。
【００８９】
（０．０１＋（１−０．０１）／２）×０．００２０＋６００×８×８／（５０×１０００×１０００）
≒０．００１８＝１．８［ミリ秒］
【００９０】
なお、上記算出式において、ＣＰＵ数Ｎ＝２の場合、自身が処理する分のマクロブロックのデータ転送を行わなくてよいため、データの転送頻度を１２００×（１／２）＝６００としている。端末装置１０３は、ＣＰＵ数Ｎ＝３の実行時間を算出すると、下記のような結果を得る。
【００９１】
（０．０１＋０．９９／３）×０．００２０＋８００×８×８／（５０×１０００×１０００）
≒０．００１７＝１．７［ミリ秒］
【００９２】
同様に、自身が処理する分のマクロブロックのデータ転送を行わないことを考慮し、データの転送頻度を１２００×（２／３）＝８００としている。以上より、Ｔ（１）＝２．０［ミリ秒］、Ｔ（２）＝１．８［ミリ秒］、Ｔ（３）＝１．７［ミリ秒］となるため、中粒度の場合、ＣＰＵ数Ｎ＝３で並列処理を行った方が早く処理を実行することができる。
【００９３】
また、中粒度の並列処理については、ループ処理を並列処理するため、たとえば、ループ処理の内部に別のループ処理が存在する場合、２種類の中粒度実行オブジェクトを生成することができる。
【００９４】
細粒度実行オブジェクト７０５は、マクロブロックを処理する中で、各ステートメントを並列実行するように生成されている。具体的には、中粒度実行オブジェクト７０４は、“ａ＝１；”、“ｂ＝１；”、“ｃ＝１；”という処理を並列実行するプロセスを生成する。
【００９５】
以下、構造解析結果７０８の値について説明する。依存関係のないステートメントは３であるため、並列実行が可能な最大の分割数Ｎｆ＿Ｍａｘは３となる。また、逐次処理の割合Ｓｆは、依存関係のない３ステートメントと依存関係のある１ステートメントから、１／４＝０．２５＝２５［％］である。データ量Ｄｆは、一つの変数のサイズである３２［ビット］であり、頻度は３回存在するため、３となる。
【００９６】
また、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）は、５０［ナノ秒］とする。端末装置１０３は、帯域σを２５［Ｍｂｐｓ］とし、ＣＰＵ数Ｎ＝３の実行時間を算出すると、下記のような結果を得る。
【００９７】
（０．２５＋（１−０．２５）／３）×５０×１０＾（−９）＋３２×３／（７５×１０００×１０００）
≒１．３×１０＾（−６）＝１．３［マイクロ秒］
【００９８】
以上より、Ｔ（１）＝５０［ナノ秒］、Ｔ（３）＝１．３［マイクロ秒］となるため、細粒度の場合、並列処理を実行せず逐次処理を行った方が早く処理を実行することができる。
【００９９】
また、細粒度の並列処理については、少なくとも１つの行に、複数の演算子があるようなステートメントが存在すれば、細粒度の並列処理が存在することになる。したがって、細粒度の並列処理の出現頻度は高い。たとえば、粗粒度、中粒度の並列処理の内部において、細粒度の並列処理が発生することも多い。
【０１００】
また、図７で説明したように、粒度の細かい実行オブジェクトは、該当の粒度より粒度が粗い並列処理を実行することができる。たとえば、中粒度実行オブジェクト７０４にて、粗粒度の並列処理も行われている場合、最大の分割数は、“ｄｅｃｏｄｅ＿ｖｉｄｅｏ＿ｆｒａｍｅ（）”関数内で示すＮｍ＿Ｍａｘ＝１２００と、“ｄｅｃｏｄｅ＿ａｕｄｉｏ＿ｆｒａｍｅ（）”関数での分割数を合計した数となる。同様に、細粒度実行オブジェクト７０５にて、中粒度の並列処理も行われている場合、最大の分割数は、１２００×３＝３６００となる。
【０１０１】
図９は、細粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。グラフ９０１は、横軸に時刻ｔ、縦軸に帯域σを示している。図９に示す並列処理制御システム１００は、グラフ９０１における広帯域を獲得した領域９０２の状態である。帯域監視部３０３によって広帯域を獲得したことを検出した並列処理制御システム１００では、細粒度実行オブジェクト７０５によって実行されたプロセス３０４にて、負荷分散を行う。
【０１０２】
具体的には、端末装置１０３がプロセス３０４内のスレッド９０３＿０を実行し、オフロードサーバ１０１が、プロセス３０４内のスレッド９０３＿１〜スレッド９０３＿３を実行する。細粒度実行オブジェクト７０５によるプロセス３０４を実行している場合、仮想メモリ３１０は、ダイナミック同期仮想メモリ９０４に設定される。ダイナミック同期仮想メモリ９０４は、スレッド９０３＿１〜スレッド９０３＿３による書き込みに対し、実メモリ３０９と常に同期が行われる状態である。
【０１０３】
図１０は、中粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。図１０に示す並列処理制御システム１００は、グラフ９０１における中帯域を獲得した領域１００１、または領域１００２の状態である。中帯域とは、具体的には、全体の帯域に対して中間程度の領域であり、全体の帯域が１００［Ｍｂｐｓ］であれば、中帯域は、たとえば、３３〜６７［Ｍｂｐｓ］としてもよい。帯域監視部３０３によって中帯域を獲得したことを検出した並列処理制御システム１００では、中粒度実行オブジェクト７０４によって実行されたプロセス３０４にて、負荷分散を行う。
【０１０４】
具体的には、端末装置１０３がプロセス３０４内のスレッド１００３＿０を実行し、オフロードサーバ１０１が、プロセス３０４内のスレッド１００３＿１を実行する。中粒度実行オブジェクト７０４によるプロセス３０４を実行している場合、仮想メモリ３１０は、バリア同期仮想メモリ１００４に設定される。バリア同期仮想メモリ１００４は、スレッド１００３＿１での部分処理が終わるごとに、実メモリ３０９と同期が行われる。
【０１０５】
また、矢印１００５で示すように、粒度が細粒度から中粒度に切り替わった場合、並列処理制御システム１００は、ダイナミック同期仮想メモリ９０４の内容を実メモリ３０９に全て反映する。これにより、粒度の変更が起こっても仮想メモリ３１０を保護することができる。
【０１０６】
図１１は、粗粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。図１１に示す並列処理制御システム１００は、グラフ９０１における狭帯域を獲得した領域１１０１の状態である。帯域監視部３０３によって狭帯域を獲得したことを検出した並列処理制御システム１００では、粗粒度実行オブジェクト７０３によって実行されたプロセス３０４にて、負荷分散を行う。
【０１０７】
具体的には、端末装置１０３がプロセス３０４内のスレッド１１０２＿０、スレッド１１０２＿１を実行し、オフロードサーバ１０１が、プロセス３０４内のスレッド１１０２＿２を実行する。粗粒度実行オブジェクト７０３によるプロセス３０４を実行している場合、仮想メモリ３１０は、非同期仮想メモリ１１０３に設定される。非同期仮想メモリ１１０３は、スレッド１１０２＿２の起動および終了にて実メモリ３０９と同期が行われる。
【０１０８】
また、矢印１１０４で示すように、粒度が中粒度から粗粒度に切り替わった場合、並列処理制御システム１００は、バリア同期仮想メモリ１００４の内容を実メモリ３０９に全て反映する。これにより、粒度の変更が起こっても仮想メモリを保護することができる。
【０１０９】
図１２は、無線通信１０５が遮断された場合における並列処理制御システム１００の実行状態を示す説明図である。グラフ９０１にて、時間１２０１にて帯域σが０となっている。図１２に示す並列処理制御システム１００は、グラフ９０１における狭帯域を獲得した領域１２０２の状態であり、さらに、帯域σの時間変化（ｄ／ｄｔ）σ（ｔ）＜０を検出した状態である。帯域監視部３０３によって帯域σの時間変化（ｄ／ｄｔ）σ（ｔ）＜０を検出した並列処理制御システム１００では、負荷分散を中止し、端末装置１０３にて粗粒度実行オブジェクト７０３によるプロセス３０４を実行する。
【０１１０】
具体的には、並列処理制御システム１００は、粗粒度が選択された場合に（ｄ／ｄｔ）σ（ｔ）＜０を検出すると、非同期仮想メモリ１１０３のデータ内容を実メモリ３０９に転送する。また、並列処理制御システム１００は、オフロードサーバ１０１で実行していたスレッド１１０２＿２のコンテキスト情報も端末装置１０３に転送し、端末装置１０３でスレッド１１０２＿２’として継続して処理を続行する。なお、非同期仮想メモリ１１０３のデータ内容の転送が無線通信１０５の回線遮断に間に合わなかった場合、端末装置１０３は、粗粒度実行オブジェクト７０３からプロセス３０４を再度起動し、処理を再開する。
【０１１１】
また、オフロードサーバ１０１上の、端末エミュレータ３０７、仮想メモリ監視フィードバック３０８、仮想メモリ３１０、スレッド１１０２＿２は、無線通信１０５の遮断と同時に処理を中断する。端末エミュレータ３０７、仮想メモリ監視フィードバック３０８、仮想メモリ３１０、スレッド１１０２＿２は、一定時間オフロードサーバ１０１上に保持されるが、一定時間経過後、オフロードサーバ１０１は、メモリ解放を行う。
【０１１２】
図１３は、並列処理の粒度が粗くなった場合における、データ保護の具体例を示す説明図である。符号１３０１で示す説明図は、新たな実行オブジェクトが選択される前の状態を示し、符号１３０２で示す説明図は、新たな実行オブジェクトが選択され、実行対象の実行オブジェクトが変更された状態を示している。また、並列処理の粒度が粗くなる例としては、細粒度実行オブジェクト７０５から中粒度実行オブジェクト７０４に変更した場合、または、中粒度実行オブジェクト７０４から粗粒度実行オブジェクト７０３に変更した場合である。図１３の例では、細粒度実行オブジェクト７０５から中粒度実行オブジェクト７０４に変更する場合にて説明する。
【０１１３】
符号１３０１で示す説明図では、並列処理制御システム１００は、細粒度実行オブジェクト７０５を各装置にて実行している。具体的には、端末装置１０３は、“Ａ＝Ｂ＋Ｃ；”、“Ｇ＝Ｈ＋Ｉ；”、“Ｍ＝Ａ＋Ｄ＋Ｇ＋Ｊ；”という３ステートメントを実行する。また、オフロードサーバ１０１は、“Ｄ＝Ｅ＋Ｆ；”、“Ｊ＝Ｋ＋Ｌ；”という２ステートメントを実行する。時刻ｔ１にて、端末装置１０３は、“Ａ＝Ｂ＋Ｃ；”を実行し、実メモリ３０９に処理結果となる“Ａ”の値を格納した状態である。また、時刻ｔ１にて、オフロードサーバ１０１は、“Ｄ＝Ｅ＋Ｆ；”を実行し、仮想メモリ３１０に処理結果となる“Ｄ”の値を格納した状態である。
【０１１４】
時刻ｔ１にて、実行対象の実行オブジェクトが中粒度実行オブジェクト７０４に変更され、並列処理制御システム１００は、符号１３０２で示す状態になる。並列処理の粒度が粗くなった結果、分割された処理量が多くなるため、１つの装置に集中して処理を行うようになる。符号１３０２の状態では、オフロードサーバ１０１ではどのステートメントも実行せず、端末装置１０３にて、前述の５つのステートメントを実行する。このとき、オフロードサーバ１０１は、“Ｇ＝Ｈ＋Ｉ；”から実行するが、“Ｄ”の値は、実メモリ３０９に存在しないため、“Ｍ＝Ａ＋Ｄ＋Ｇ＋Ｊ；”を実行することができない。
【０１１５】
したがって、端末装置１０３は、オフロードサーバ１０１に、変更前となる実行対象の実行オブジェクトの処理結果の送信要求を通知し、オフロードサーバ１０１は、仮想メモリ３１０に格納された処理結果を端末装置１０３に送信する。処理結果を受信した端末装置１０３は、処理結果を実メモリ３０９に格納する。これにより、端末装置１０３は、実行対象の実行オブジェクトの変更後も、処理を続行することができる。
【０１１６】
図１４は、並列処理の分割数に応じた実行時間の具体例を示す説明図である。図１４では、プロセス３０４の実行時間を１５０［ミリ秒］とした場合の、並列処理の分割数に応じた実行時間を示している。前提として、プロセス３０４の並列処理可能な処理の処理時間を１００［ミリ秒］、逐次処理部分の処理時間を５０［ミリ秒］とする。この場合、逐次処理の割合Ｓは、６７［％］となる。また、プロセス３０４の並列実行可能な最大の分割数Ｎ＿Ｍａｘを４とする。
【０１１７】
次に、帯域σが通信品質１となる場合について、実行時間の具体例を示す。帯域σが通信品質１の状態では、他のＣＰＵにデータを通知するのに１０［ミリ秒］かかると想定する。通信品質１の場合におけるプロセス３０４の実行可能な形態としては、ＣＰＵ数Ｎ＝１である実行形態１４０１、ＣＰＵ数Ｎ＝２である実行形態１４０２、ＣＰＵ数Ｎ＝３である実行形態１４０３、ＣＰＵ数Ｎ＝４である実行形態１４０４である。
【０１１８】
実行形態１４０１でのプロセス３０４の実行時間Ｔ（１）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間１００［ミリ秒］＝１５０［ミリ秒］となる。また、実行形態１４０２でのプロセス３０４の実行時間Ｔ（２）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間５０［ミリ秒］＋通信時間１０［ミリ秒］×２＝１２０［ミリ秒］となる。
【０１１９】
同様に、実行形態１４０３でのプロセス３０４の実行時間Ｔ（３）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間３３［ミリ秒］＋通信時間１０［ミリ秒］×４＝１２３［ミリ秒］となる。同様に、実行形態１４０４でのプロセス３０４の実行時間Ｔ（４）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間２５［ミリ秒］＋通信時間１０［ミリ秒］×６＝１３５［ミリ秒］となる。以上より、実行形態１４０１〜実行形態１４０４のうち、実行形態１４０２が、最短の実行時間となるため、端末装置１０３は、ＣＰＵ数Ｎ＝２で並列処理を実行する。
【０１２０】
続けて、帯域σが通信品質２となる場合について、実行時間の具体例を示す。帯域σが通信品質２の状態では、帯域σが通信品質１の２倍となり、他のＣＰＵにデータを通知するのに５［ミリ秒］かかると想定する。通信品質１の場合におけるプロセス３０４の実行可能な形態としては、ＣＰＵ数Ｎ＝１である実行形態１４０１、ＣＰＵ数Ｎ＝２である実行形態１４０５、ＣＰＵ数Ｎ＝３である実行形態１４０６、ＣＰＵ数Ｎ＝４である実行形態１４０７である。
【０１２１】
実行形態１４０１でのプロセス３０４の実行時間Ｔ（１）は、前述の通り１５０［ミリ秒］である。実行形態１４０５でのプロセス３０４の実行時間Ｔ（２）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間５０［ミリ秒］＋通信時間５［ミリ秒］×２＝１１０［ミリ秒］となる。
【０１２２】
同様に、実行形態１４０６でのプロセス３０４の実行時間Ｔ（３）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間３３［ミリ秒］＋通信時間５［ミリ秒］×４＝１０３［ミリ秒］となる。同様に、実行形態１４０７でのプロセス３０４の実行時間Ｔ（４）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間２５［ミリ秒］＋通信時間５［ミリ秒］×６＝１０５［ミリ秒］となる。以上より、実行形態１４０１、実行形態１４０５〜実行形態１４０７のうち、実行形態１４０６が、最短の実行時間となるため、端末装置１０３は、ＣＰＵ数Ｎ＝３で並列処理を実行する。
【０１２３】
（実施の形態２の概要説明）
実施の形態１にかかる並列処理制御システム１００は、オフロードサーバ１０１と端末装置１０３を有していた。実施の形態２にかかる並列処理制御システム１００は、他の端末装置がオフロードサーバ１０１の代わりとなり、並列処理を行う。端末装置１０３と他の端末装置は、アドホック接続により接続されている。実施の形態２にかかる並列処理制御システム１００の機能については、図６にて示したオフロードサーバ１０１が有する機能を、他の端末装置が有することになる。後述する図１５では、実施の形態１にかかる端末装置１０３を端末装置１０３＃０とし、実施の形態１にかかるオフロードサーバ１０１の機能を有する装置を端末装置１０３＃１、端末装置１０３＃２としている。
【０１２４】
また、端末装置１０３＃０と端末装置１０３＃１が、それぞれ独立の携帯端末でよいし、端末装置１０３＃０と端末装置１０３＃１で、１台のセパレート型の携帯端末を形成してもよい。たとえば、端末装置１０３＃０が主にディスプレイとして動作し、端末装置１０３＃１のディスプレイがタッチパネルとなりキーボードとして動作する。ユーザは、端末装置１０３＃０と端末装置１０３＃１を物理的に接続したり、端末装置１０３＃０と端末装置１０３＃１を切り離したりして、使用してもよい。
【０１２５】
また、実施の形態２にかかる検出部６０６は、接続元装置と接続先装置とがアドホック接続されている場合に、並列処理を実行開始することを検出してもよい。具体的には、検出部６０６は、接続元装置となる端末装置１０３＃０と、接続先装置となる端末装置１０３＃１がアドホック接続されている場合に、並列処理を実行開始することを検出する。なお、検出された結果は、端末装置１０３＃０のレジスタ、キャッシュメモリ、端末装置１０３＃０のＲＡＭに記憶される。
【０１２６】
また、実施の形態２にかかる選択部６０４は、実施の形態２にかかる検出部６０６によって並列処理を実行開始することが検出された場合、実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択してもよい。具体的には、選択部６０４は、アドホック接続時に並列処理を実行開始することが検出された場合、細粒度実行オブジェクト７０５を選択する。なお、選択された結果は、端末装置１０３＃０のレジスタ、キャッシュメモリ、端末装置１０３＃０のＲＡＭに記憶される。
【０１２７】
図１５は、実施の形態２にかかるアドホック接続での並列処理制御システム１００の実行状態を示す説明図である。図１５では、端末装置１０３＃０〜端末装置１０３＃２が無線通信１０５によってアドホック接続を行っている。また、端末装置１０３＃０上のソフトウェアとして、端末ＯＳ３０１＃０、スケジューラ３０２＃０、帯域監視部３０３＃０が実行されている。端末装置１０３＃１、端末装置１０３＃２でも同様のソフトウェアが実行中である。
【０１２８】
アドホック接続では、端末装置１０３＃０〜端末装置１０３＃２間の通信帯域が保証されており、たとえば、３００［Ｍｂｐｓ］で接続可能である。このように、アドホック接続での並列処理制御システム１００は広帯域を獲得できるため、細粒度実行オブジェクト７０５によるプロセス３０４にて、負荷分散を行う。
【０１２９】
具体的には、端末装置１０３＃０が、プロセス３０４内のスレッド１５０１＿０を実行し、端末装置１０３＃１が、プロセス３０４内のスレッド１５０１＿１を実行し、端末装置１０３＃２が、プロセス３０４内のスレッド１５０１＿２を実行する。また、アドホック通信における並列処理制御システム１００は、通信時間τを元に、並列処理の粒度を選択し、たとえば、粗粒度、中粒度の実行オブジェクトによって負荷分散を行ってもよい。アドホック通信における並列処理制御システム１００は、アドホック接続する端末装置１０３全てのＣＰＵが１つのマルチコアプロセッサシステムとして運用されている状態である。
【０１３０】
（実施の形態３の概要説明）
実施の形態２では、アドホック接続する端末装置１０３全てのＣＰＵが１つのマルチコアプロセッサシステムとして並列処理制御システム１００を形成していた。実施の形態３にかかる並列処理制御システム１００は、端末装置１０３がマルチコアプロセッサシステムである場合を想定する。具体的には、端末装置１０３内のマルチコアのうち、特定のコアが実施の形態１にかかる端末装置１０３となり、特定のコア以外の他のコアがオフロードサーバ１０１となり、並列処理を行う。実施の形態３にかかる並列処理制御システム１００の機能については、図６にて示したオフロードサーバ１０１が有する機能を、他のコアが有することになる。
【０１３１】
マルチコアプロセッサシステムは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、実施の形態３では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。実施の形態３にかかる端末装置１０３は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃２という３つのＣＰＵを有しており、それぞれがバス２１０で接続されている。
【０１３２】
また、実施の形態３にかかる測定部６０２は、複数のプロセッサのうち、特定のプロセッサおよび特定のプロセッサ以外の他のプロセッサ間の帯域を測定する機能を有する。具体的には、測定部６０２は、特定のプロセッサとして、ＣＰＵ２０１＃０とし、他のプロセッサとして、ＣＰＵ２０１＃１とした場合、ＣＰＵ２０１＃０とＣＰＵ２０１＃１との帯域となるバス２１０の速度を測定する。
【０１３３】
また、実施の形態３にかかる設定部６０５は、選択部６０４によって選択された実行対象の実行オブジェクトを特定のプロセッサおよび他のプロセッサで協動して実行可能な状態に設定する機能を有する。たとえば、選択部６０４によって粗粒度実行オブジェクトが選択された場合、設定部６０５は、ＣＰＵ２０１＃０とＣＰＵ２０１＃１で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【０１３４】
後述する図１６では、実施の形態１にかかる端末装置１０３をＣＰＵ２０１＃０とし、実施の形態１にかかるオフロードサーバ１０１の機能を有する装置をＣＰＵ２０１＃１、ＣＰＵ２０１＃２としている。
【０１３５】
また、実施の形態３にかかる設定部６０５は、実行対象の実行オブジェクトを、複数のプロセッサのうち、特定のプロセッサを含み、かつ最大の分割数となるプロセッサ群で協動して実行可能な状態に設定してもよい。たとえば、最大の分割数が３であった場合を想定する。このとき、設定部６０５は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃２で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【０１３６】
また、実施の形態３にかかる設定部６０５は、実行対象の実行オブジェクトを、複数のプロセッサのうち、特定のプロセッサを含み、かつ実行対象の実行オブジェクトにおける並列実行の数となるプロセッサ群で協動して実行可能な状態に設定してもよい。たとえば、実行対象の実行オブジェクトにおける並列実行の数を２と想定する。このとき、設定部６０５は、ＣＰＵ２０１＃０、ＣＰＵ２０１＃１で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【０１３７】
図１６は、実施の形態３にかかるマルチコアプロセッサシステムにおける並列処理制御システム１００の実行状態を示す説明図である。図１６では、ＣＰＵ２０１＃０がバス２１０にて接続されている。また、ＣＰＵ２０１＃０上のソフトウェアとして、端末ＯＳ３０１＃０、スケジューラ３０２＃０、帯域監視部３０３＃０が実行されている。ＣＰＵ２０１＃１、ＣＰＵ２０１＃２でも同様のソフトウェアが実行中である。
【０１３８】
バス２１０の転送速度は高速であり、たとえば、バス２１０がＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスであり、３２［ビット］、３３［ＭＨｚ］で動作する場合を想定する。このとき、バス２１０の転送速度は、１０５６［Ｍｂｐｓ］となり、サーバ接続に比べて高速である。このように、マルチコアプロセッサシステムにおける並列処理制御システム１００は広帯域を獲得できるため、細粒度実行オブジェクト７０５によるプロセス３０４にて、負荷分散を行う。
【０１３９】
具体的には、ＣＰＵ２０１＃０が、プロセス３０４内のスレッド１５０１＿０を実行し、ＣＰＵ２０１＃１が、プロセス３０４内のスレッド１５０１＿１を実行し、ＣＰＵ２０１＃２が、プロセス３０４内のスレッド１５０１＿２を実行する。また、マルチコアプロセッサシステムにおける並列処理制御システム１００は、端末装置１０３の仕様によって、中粒度実行オブジェクト７０４、粗粒度実行オブジェクト７０３によって負荷分散を行ってもよい。
【０１４０】
（実施の形態１〜実施の形態３の処理説明）
実施の形態１〜実施の形態３にかかる並列処理制御システム１００の差分については、オフロードを行う装置が、オフロードサーバ１０１、他の端末装置、または同一の装置内の他のＣＰＵ、のいずれかという差分となり、処理に大きく差がない。図１７〜図２０にて、実施の形態１〜実施の形態３にかかる並列処理制御システム１００の処理を合わせて説明を行う。また、特に実施の形態１〜実施の形態３のうち、特有の実施の形態のみ持ち得る特徴があるときに関して、実施の形態１〜実施の形態３を明記する。
【０１４１】
図１７は、スケジューラ３０２による並列処理の開始処理を示すフローチャートである。端末装置１０３は、利用者、ＯＳ等による起動要求によって、負荷分散プロセスを起動する（ステップＳ１７０１）。続けて、端末装置１０３は、接続環境を確認する（ステップＳ１７０２）。
【０１４２】
接続環境が接続なしであり、端末装置１０３がマルチコアプロセッサシステムであった場合（ステップＳ１７０２：接続なし）、端末装置１０３は、端末装置１０３のＣＰＵ数に合わせた実行オブジェクトをロードする（ステップＳ１７０３）。実施の形態３にかかる並列処理制御システム１００は、ステップＳ１７０２：接続なしのルートを通る。接続環境がアドホック接続である場合（ステップＳ１７０２：アドホック接続）、端末装置１０３は、全粒度の実行オブジェクトをロードする（ステップＳ１７０４）。実施の形態２にかかる並列処理制御システム１００は、ステップＳ１７０２：アドホック接続のルートを通る。ロード後、端末装置１０３は、他の端末装置に細粒度実行オブジェクト７０５を転送する（ステップＳ１７０５）。
【０１４３】
接続環境がサーバ接続である場合（ステップＳ１７０２：サーバ接続）、端末装置１０３は、全粒度の実行オブジェクトをロードする（ステップＳ１７０６）。実施の形態１にかかる並列処理制御システム１００は、ステップＳ１７０２：サーバ接続のルートを通る。また、サーバ接続の時に、端末装置１０３とオフロードサーバ１０１は携帯電話網を経由して接続されている。ロード後、端末装置１０３は、オフロードサーバに粗粒度実行オブジェクト７０３を転送する（ステップＳ１７０７）。また、端末装置１０３は、バックグラウンドにて、他の実行オブジェクトをオフロードサーバ１０１に転送し（ステップＳ１７０９）、帯域監視部３０３を起動する（ステップＳ１７１０）。
【０１４４】
ステップＳ１７０３、ステップＳ１７０５、ステップＳ１７０７のいずれかを実行した端末装置１０３は、負荷分散プロセスを実行開始する（ステップＳ１７０８）。端末装置１０３は、負荷分散プロセスを実行開始後、図１８にて後述する並列処理制御処理を実行する。
【０１４５】
オフロードサーバ１０１は、ステップＳ１７０７によって粗粒度実行オブジェクト７０３の通知を受けると、端末エミュレータ３０７を起動し（ステップＳ１７１１）、仮想メモリ３１０を運用する（ステップＳ１７１２）。具体的には、オフロードサーバ１０１は、粗粒度実行オブジェクト７０３に変更されたという通知を受けたため、仮想メモリ３１０を非同期仮想メモリ１１０３に設定する。
【０１４６】
図１８は、スケジューラ３０２による負荷分散プロセスにおける並列処理制御処理を示すフローチャートである。並列処理制御処理は、ステップＳ１７０８の処理後に行われるほか、帯域監視部３０３からの通知によっても実行される。なお、図１８の並列処理制御処理は、接続環境がサーバ接続である場合を想定している。アドホック接続である場合、ステップＳ１８１８、ステップＳ１８２４の処理の要求先が、他の端末装置となる。
【０１４７】
帯域監視部３０３を実行する端末装置１０３は、帯域σを取得する（ステップＳ１８２０）。具体的には、端末装置１０３は、ｐｉｎｇを発行することにより帯域σを取得する。取得後、端末装置１０３は、帯域σが前回の値から変化したか否かを判断する（ステップＳ１８２１）。変化した場合（ステップＳ１８２１：Ｙｅｓ）、端末装置１０３は、スケジューラ３０２に帯域σと帯域σの変化があったことを通知する（ステップＳ１８２２）。
【０１４８】
通知後、端末装置１０３は、帯域σの時間変化（ｄ／ｄｔ）σ（ｔ）が０未満か否かを判断する（ステップＳ１８２３）。帯域σの時間変化が０未満である場合（ステップＳ１８２３：Ｙｅｓ）、端末装置１０３は、オフロードサーバ１０１にデータ保護処理の実行要求を通知する（ステップＳ１８２４）。データ保護処理の詳細については、図１９にて後述する。ステップＳ１８２４の処理を終了後、または帯域σの時間変化が０以上の場合（ステップＳ１８２３：Ｎｏ）、または帯域σが変化していない場合（ステップＳ１８２１：Ｎｏ）、端末装置１０３は、一定時間経過後、ステップＳ１８２０の処理に移行する。
【０１４９】
帯域監視部３０３より通知を受けた端末装置１０３は、スケジューラ３０２によって変数ｉを１、変数ｇを粗粒度に設定し（ステップＳ１８０１）、変数ｇの値を確認する（ステップＳ１８０２）。変数ｇが粗粒度である場合（ステップＳ１８０２：粗粒度）、端末装置１０３は、粗粒度処理で行われる逐次処理の割合Ｓｃ、データ量Ｄｃ、データ転送頻度Ｘｃ、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）を取得する（ステップＳ１８０３）。
【０１５０】
取得後、端末装置１０３は、帯域監視部３０３から通知された帯域σを用いて、通信時間τｃ＝Ｘｃ・Ｄｃ／σを算出する（ステップＳ１８０４）。算出後、端末装置１０３は、ＣＰＵ数Ｎ＝ｉの実行時間Ｔ（ｉ）を（１）式によって算出する（ステップＳ１８０５）。算出後、端末装置１０３は、変数ｇを中粒度に設定し（ステップＳ１８０６）、ステップＳ１８０２の処理に移行する。
【０１５１】
変数ｇが中粒度である場合（ステップＳ１８０２：中粒度）、端末装置１０３は、中粒度処理で行われる逐次処理の割合Ｓｍ、データ量Ｄｍ、データ転送頻度Ｘｍ、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）を取得する（ステップＳ１８０７）。
【０１５２】
取得後、端末装置１０３は、帯域監視部３０３から通知された帯域σを用いて、通信時間τｍ＝Ｘｍ・Ｄｍ／σを算出する（ステップＳ１８０８）。算出後、端末装置１０３は、ＣＰＵ数Ｎ＝ｉの実行時間Ｔ（ｉ）を（１）式によって算出する（ステップＳ１８０９）。算出後、端末装置１０３は、変数ｇを細粒度に設定し（ステップＳ１８１０）、ステップＳ１８０２の処理に移行する。
【０１５３】
変数ｇが細粒度である場合（ステップＳ１８０２：細粒度）、端末装置１０３は、細粒度処理で行われる逐次処理の割合Ｓｆ、データ量Ｄｆ、データ転送頻度Ｘｆ、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）を取得する（ステップＳ１８１１）。
【０１５４】
取得後、端末装置１０３は、帯域監視部３０３から通知された帯域σを用いて、通信時間τｆ＝Ｘｆ・Ｄｆ／σを算出する（ステップＳ１８１２）。算出後、端末装置１０３は、ＣＰＵ数Ｎ＝ｉの実行時間Ｔ（ｉ）を（１）式によって算出する（ステップＳ１８１３）。算出後、端末装置１０３は、変数ｇを粗粒度に設定し、変数ｉをインクリメントし（ステップＳ１８１４）、変数ｉが最大の分割数Ｎ＿Ｍａｘ以下か否かを判断する（ステップＳ１８１５）。変数ｉが最大の分割数Ｎ＿Ｍａｘ以下である場合（ステップＳ１８１５：Ｙｅｓ）、端末装置１０３は、ステップＳ１８０２の処理に移行する。
【０１５５】
変数ｉがＮ＿Ｍａｘより大きい場合（ステップＳ１８１５：Ｎｏ）、端末装置１０３は、算出されたＴ（Ｎ）のうち、Ｍｉｎ（Ｔ（Ｎ））となる変数ｉ、変数ｇを新しいＣＰＵ数、粒度に設定する（ステップＳ１８１６）。続けて、端末装置１０３は、設定された粒度に対応する実行オブジェクトを、実行対象の実行オブジェクトに設定する（ステップＳ１８１７）。設定後、端末装置１０３は、設定されたＣＰＵ数、粒度を、帯域監視部３０３へ通知する（ステップＳ１８１８）。
【０１５６】
通知後、端末装置１０３は、オフロードサーバ１０１に仮想メモリ設定処理の実行要求を通知する（ステップＳ１８１９）。仮想メモリ設定処理の詳細は、図２０にて後述する。通知後、端末装置１０３は、並列処理制御処理を終了し、設定された実行対象の実行オブジェクトにて、負荷分散プロセスを実行する。また、オフロードサーバ１０１も、設定された実行対象の実行オブジェクトにて負荷分散プロセスを実行する。オフロードサーバ１０１が複数存在する場合でも、全てのオフロードサーバ１０１が同一の実行対象の実行オブジェクトにて負荷分散プロセスを実行する。
【０１５７】
なお、最大の分割数Ｎ＿Ｍａｘの値は、粒度によって異なるため、端末装置１０３は、ステップＳ１８１５の処理を、粗粒度の最大の分割数Ｎｃ＿Ｍａｘ、中粒度の最大の分割数Ｎｍ＿Ｍａｘ、細粒度の最大の分割数Ｎｆ＿Ｍａｘのうち、最大値で判断してもよい。そして、ある粒度において、並列実行の数となる変数ｉがその粒度の最大の分割数を超えた場合、端末装置１０３は、該当部分の処理を飛ばしてよい。具体的には、粗粒度の最大の分割数Ｎｃ＿Ｍａｘ＝２、変数ｉ＝３となった場合、端末装置１０３は、ステップＳ１８０３〜ステップＳ１８０５の処理を行わず、ステップＳ１８０６の処理を実行し、続けて中粒度の処理に移行する。
【０１５８】
図１９は、データ保護処理を示すフローチャートである。データ保護処理は、オフロードサーバ１０１または、他の端末装置によって実行される。図１９の例では、説明の簡略化のため、オフロードサーバ１０１にて実行される場合を想定して説明を行う。
【０１５９】
オフロードサーバ１０１は、設定された粒度が変化したかを判断する（ステップＳ１９０１）。粒度が細粒度から中粒度に変化した場合（ステップＳ１９０１：細粒度→中粒度）、オフロードサーバ１０１は、ダイナミック同期仮想メモリ９０４のデータを端末装置１０３に転送する（ステップＳ１９０２）。転送後、オフロードサーバ１０１は、データ保護処理を終了する。
【０１６０】
粒度が中粒度から粗粒度に変化した場合（ステップＳ１９０１：中粒度→粗粒度）、オフロードサーバ１０１は、バリア同期仮想メモリ１００４の部分計算データを回収する（ステップＳ１９０３）。なお、ＣＰＵ数Ｎが３以上である場合、バリア同期仮想メモリ１００４が複数存在する可能性があるため、オフロードサーバ１０１は、バリア同期仮想メモリ１００４の部分計算データをそれぞれ回収する。
【０１６１】
回収後、オフロードサーバ１０１は、オフロードサーバ１０１・端末装置１０３間のデータ同期を実行する（ステップＳ１９０４）。同期後、オフロードサーバ１０１は、端末装置１０３に部分処理の集約要求を通知する（ステップＳ１９０５）。具体的には、粒度が変化した際に、中粒度実行オブジェクト７０４によるプロセス３０４によって、ループ内の特定のインデックスの計算データが算出されている。したがって、端末装置１０３は、計算済みであるインデックスに対応する部分処理を集約し、続けて、未処理のインデックスに対応する部分処理を実行する。集約要求を通知後、オフロードサーバ１０１は、データ保護処理を終了する。
【０１６２】
粒度が変化していない、または、細粒度から中粒度、中粒度から粗粒度以外の変化である場合（ステップＳ１９０１：その他）、オフロードサーバ１０１は、データ保護処理を終了する。
【０１６３】
図２０は、仮想メモリ設定処理を示すフローチャートである。仮想メモリ設定処理も、データ保護処理と同様に、オフロードサーバ１０１または、他の端末装置によって実行される。図２０の例では、説明の簡略化のため、オフロードサーバ１０１にて実行される場合を想定して説明を行う。また、仮想メモリ設定処理の開始時に、データ保護処理が実行中であった場合、オフロードサーバ１０１は、データ保護処理の終了を待ってから仮想メモリ設定処理を開始する。
【０１６４】
オフロードサーバ１０１は、設定された粒度を確認する（ステップＳ２００１）。設定された粒度が粗粒度である場合（ステップＳ２００１：粗粒度）、オフロードサーバ１０１は、仮想メモリ３１０を非同期仮想メモリ１１０３に設定する（ステップＳ２００２）。設定された粒度が中粒度である場合（ステップＳ２００１：中粒度）、オフロードサーバ１０１は、仮想メモリ３１０をバリア同期仮想メモリ１００４に設定する（ステップＳ２００３）。設定された粒度が細粒度である場合（ステップＳ２００１：細粒度）、オフロードサーバ１０１は、仮想メモリ３１０をダイナミック同期仮想メモリ９０４に設定する（ステップＳ２００４）。
【０１６５】
ステップＳ２００２、ステップＳ２００３、ステップＳ２００４の処理を終了後、オフロードサーバ１０１は、仮想メモリ設定処理を終了し、仮想メモリ３１０の運用を続行する。
【０１６６】
以上説明したように、並列処理制御プログラム、情報処理装置、および並列処理制御方法によれば、並列処理の粒度が異なるオブジェクト群から、端末装置と他装置間の帯域から算出した実行時間によってオブジェクトを選択する。これにより、帯域に応じた最適な並列処理を実行でき、処理性能を向上させることができる。
【０１６７】
具体的には、並列処理制御システムが、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）情報を提供し、端末装置がＧＰＳ情報を受信できた状態を想定する。端末装置とオフロードサーバの帯域が狭い、または、回線が切断された場合、端末装置がＧＰＳ情報を利用するアプリケーションソフトウェアを起動し、座標計算等、ＧＰＳ情報にともなう演算処理を実行する。また、端末装置とオフロードサーバの帯域が広帯域である場合、端末装置は、オフロードサーバに座標計算をオフロードする。このように、並列処理制御システムは、広帯域であれば、オフロードサーバによって高速処理を実行でき、また、狭帯域であれば、端末装置によって処理を続行することができる。
【０１６８】
また、別の例として、並列処理制御システムが、ファイルシェアリングや、ストリーミングのサービスを提供している場合を想定する。端末装置とオフロードサーバの帯域が狭い場合、サービスを提供するサーバは圧縮されたデータを送信し、端末装置は、フルパワーモードにて伸長を行う。また、端末装置とオフロードサーバの帯域が広い場合、オフロードサーバはデータを伸長したのち、伸長された結果を送信し、端末装置は結果の表示を行う。端末装置は、結果の表示を行えばよいため、ＣＰＵパワーが不要であり、低電力モードにて運用することができる。
【０１６９】
また、最短となる実行オブジェクトを、実行対象の実行オブジェクトとして選択してもよい。これにより、並列処理の粒度が異なるオブジェクト群のうち、最短の処理時間となる実行オブジェクトを選択でき、処理性能を向上させることができる。
【０１７０】
また、帯域と通信量から通信時間を算出し、並列処理を逐次実行した場合の処理時間と逐次処理の割合と並列実行が可能な最大の分割数とから並列実行する場合の処理時間を算出し、通信時間と並列実行する場合の処理時間を加えることで実行時間を算出してもよい。これにより、並列処理によって発生する通信時間のオーバーヘッドを含めて最短の処理時間となる実行オブジェクトを選択することができ、処理性能を向上させることができる。
【０１７１】
また、実行対象の実行オブジェクトが変更されるときに、新たな実行対象の実行オブジェクトが変更前の実行オブジェクトより粒度が粗い場合、他装置に保持された処理結果を端末装置に送信させ、端末装置の記憶装置に格納してもよい。これにより、他装置で行われた途中結果を取得できるため、端末装置は、オフロードサーバなどの他装置で行われていた処理を続行することができる。この効果は、端末装置と他装置で帯域が大きく変動する、実施の形態１にかかる並列処理制御システムにおいて、特に効果がある。
【０１７２】
また、実行対象の実行オブジェクトが、最も粒度が粗い実行オブジェクトが選択されており、かつ帯域が減少した状態を検出した場合、他装置に保持された処理結果を端末装置に送信させ、端末装置の記憶装置に格納してもよい。これにより、回線が遮断されそうなとき、端末装置は、オフロードサーバなどの他装置のデータを事前に格納することで、回線が遮断されても、格納されたデータを使用して、処理を続行することができる。
【０１７３】
また、端末装置と他装置が携帯電話網を経由して接続されており、並列処理を実行開始することを検出した場合、実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択してもよい。端末装置と他装置の接続において、携帯電話網を経由した場合、開始の帯域が狭いため、あらかじめ粒度の粗い実行オブジェクトを選択しておくことで、開始の帯域にあった実行オブジェクトを設定することができる。この効果は、実施の形態１にかかる並列処理制御システムにおいて効果がある。
【０１７４】
また、端末装置と他装置がアドホック接続しており、並列処理を実行開始することを検出した場合、実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択してもよい。アドホック接続では、開始の帯域が広いため、あらかじめ粒度の粗い実行オブジェクトを選択しておくことで、開始の帯域にあった実行オブジェクトを設定することができる。この効果は、実施の形態２にかかる並列処理制御システムにおいて効果がある。
【０１７５】
また、実施の形態３にかかるマルチコアプロセッサにかかる並列処理制御システムにおいても、並列処理の粒度が異なるオブジェクト群から、端末装置と他装置間の帯域から算出した実行時間によってオブジェクトを選択する。これにより、帯域に応じた最適な並列処理を実行でき、処理性能を向上させることができる。プロセッサ間の帯域は、広帯域であるので、細粒度実行オブジェクトを実行し、処理性能を向上させることができる。
【０１７６】
また、マスタプロセッサ以外の他のプロセッサで実行中のプロセス等により、他のプロセッサがバスのアクセス競合を起こした場合を想定する。このとき、マスタプロセッサが帯域の測定を行った場合、他のプロセッサは、測定に対応する反応が遅れるため、帯域が低下することになる。したがって、マスタプロセッサは、より粒度の粗い実行オブジェクトを選択することになり、並列処理による通信量が低下するため、アクセス競合を軽減することができる。
【０１７７】
また、実施の形態１〜実施の形態３にかかる並列処理制御システムは、混合して運用することも可能である。たとえば、複数のプロセッサを有する端末装置が、サーバ接続、またはアドホック接続を行い、実施の形態１、または実施の形態２にかかる並列処理制御システムとして、並列処理によるサービスを提供してもよい。
【０１７８】
なお、本実施の形態で説明した並列処理制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本並列処理制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本並列処理制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１７９】
１０１  オフロードサーバ
１０２  基地局
１０３  端末装置
１０４  ネットワーク
１０５  無線通信
２０３  ＲＡＭ
２１０  バス
３０９  実メモリ
３１０  仮想メモリ
６０１  実行オブジェクト
６０２  測定部
６０３  算出部
６０４  選択部
６０５  設定部
６０６  検出部
６０７  通知部
６０８  格納部
６０９  実行部
６１０  実行部
【図１】
2012023175.tif 000003
【図２】
2012023175.tif 000004
【図３】
2012023175.tif 000005
【図４】
2012023175.tif 000006
【図５】
2012023175.tif 000007
【図６】
2012023175.tif 000008
【図７】
2012023175.tif 000009
【図８】
2012023175.tif 000010
【図９】
2012023175.tif 000011
【図１０】
2012023175.tif 000012
【図１１】
2012023175.tif 000013
【図１２】
2012023175.tif 000014
【図１３】
2012023175.tif 000015
【図１４】
2012023175.tif 000016
【図１５】
2012023175.tif 000017
【図１６】
2012023175.tif 000018
【図１７】
2012023175.tif 000019
【図１８】
2012023175.tif 000020
【図１９】
2012023175.tif 000021
【図２０】
2012023175.tif 000022
【手続補正書】
【提出日】平成25年3月26日(2013.3.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
接続元装置と接続先装置との間の帯域を測定する測定工程と、
前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
を前記接続元プロセッサに実行させることを特徴とする並列処理制御プログラム。
【請求項２】
前記選択工程は、
前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項３】
前記算出工程は、
前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項４】
前記算出工程は、
前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項３に記載の並列処理制御プログラム。
【請求項５】
前記選択工程による選択によって、前記実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する検出工程と、
前記検出工程によって前記新たな実行対象の実行オブジェクトが選択されたことが検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
を前記接続元プロセッサに実行させることを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項６】
前記実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、前記帯域が減少した状態を検出する検出工程と、
前記検出工程によって前記状態が検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
を前記接続元プロセッサに実行させることを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項７】
前記接続元装置と前記接続先装置とが携帯電話網を経由して接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
前記選択工程は、
前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択することを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項８】
前記接続元装置と前記接続先装置とがアドホック接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
前記選択工程は、
前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択することを特徴とする請求項１に記載の並列処理制御プログラム。
【請求項９】
接続先装置との間の帯域を測定する測定手段と、
自装置内のプロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
前記選択手段によって選択された実行対象の実行オブジェクトを前記自装置内のプロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定手段と、
を備えることを特徴とする情報処理装置。
【請求項１０】
接続元装置と接続先装置との間の帯域を測定する測定工程と、
前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
を前記接続元プロセッサが実行することを特徴とする並列処理制御方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理を制御する並列処理制御プログラム、情報処理装置、および並列処理制御方法に関する。
【背景技術】
【０００２】
近年、ネットワーク技術の発達にともない、シンクライアント処理、サーバ連携といった技術が開示されている。シンクライアント処理は、ユーザが使用する端末装置では入出力機構を有し、ネットワークを介して接続されたサーバが実処理を行う機構である。また、サーバ連携は、端末装置とサーバが連携し、特定のサービスを提供する技術である。
【０００３】
たとえば、シンクライアント処理を行う技術として、たとえば、端末装置の負荷に応じて、端末装置がサーバにソフトウェアの起動要求を通知する技術が開示されている（たとえば、下記特許文献１を参照。）。また、別のシンクライアント処理を行う技術として、端末装置からのソフトウェア起動要求に対して、サーバが仮想マシンソフトウェアを起動する技術が開示されている（たとえば、下記特許文献２を参照。）。
【０００４】
また、端末装置が移動する場合、ネットワークの通信品質は、端末装置の所在位置によって変動する。ネットワークの通信品質の判断技術として、たとえば、ネットワークの通信網における正常稼働時における通信品質の指標を保持しておき、回線が正常稼働しているか否かを判断できる技術が開示されている（たとえば、下記特許文献３を参照。）。
【０００５】
また、端末装置が移動し、ネットワークの通信品質が劣化した場合、サーバで実行された処理結果を端末装置が取得できなくなる可能性がある。通信品質の劣化時における対策技術として、たとえば、チェックポイントを設けて、チェックポイント時に、データベースデータおよびステータスをサブシステムに転送する技術が開示されている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−２５２２１８号公報
【特許文献２】特開２００６−１０７１８５号公報
【特許文献３】特開２００６−３４００５０号公報
【特許文献４】特開２００５−２６７３０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述した従来技術において、シンクライアント処理およびサーバ連携は、端末装置で全ての処理を実行するか、またはサーバにオフロードするか、いずれかの形態で処理を実行していた。しかしながら、これらの形態、特に、端末装置で全ての処理を実行する場合、端末装置の性能がボトルネックとなる問題があった。
【０００８】
また、特許文献１または特許文献２に特許文献３を組み合わせた技術によって、通信品質に応じて、たとえば、広帯域を獲得できた場合に、端末装置とサーバとで異なるソフトウェアを分散して実行することができる。しかしながら、前述の技術では、１つのソフトウェアを並列処理することが困難であるという問題があった。また、狭帯域において、特許文献４にかかる技術では、データベースという大掛かりのリソースが要求されるため、コスト増となる問題があった。
【０００９】
本発明は、上述した従来技術による問題点を解消するため、帯域に応じた適切な並列処理を実行できる並列処理制御プログラム、情報処理装置、および並列処理制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、開示の並列処理制御プログラムは、接続元装置と接続先装置との間の帯域を測定し、接続元装置内の接続元プロセッサおよび接続先装置内の接続先プロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、測定された帯域に基づいて算出し、算出された各々の実行時間の長さに基づいて、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択し、選択された実行対象の実行オブジェクトを接続元プロセッサおよび接続先プロセッサで協動して実行可能な状態に設定する。
【発明の効果】
【００１１】
本並列処理制御プログラム、情報処理装置、および並列処理制御方法によれば、帯域に応じて適切な並列処理を実行でき、処理性能を向上させるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施の形態１にかかる並列処理制御システム１００に含まれる装置群を示すブロック図である。
【図２】図２は、実施の形態１にかかる端末装置１０３のハードウェアを示すブロック図である。
【図３】図３は、並列処理制御システム１００のソフトウェアを示す説明図である。
【図４】図４は、並列処理の実行状態と実行時間に関する説明図である。
【図５】図５は、並列処理の割合とＣＰＵ数に関する処理性能を示した説明図である。
【図６】図６は、並列処理制御システム１００の機能を示すブロック図である。
【図７】図７は、並列処理制御システム１００の設計時における概要を示す説明図である。
【図８】図８は、各粒度の実行オブジェクトの具体例を示す説明図である。
【図９】図９は、細粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。
【図１０】図１０は、中粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。
【図１１】図１１は、粗粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。
【図１２】図１２は、無線通信１０５が遮断された場合における並列処理制御システム１００の実行状態を示す説明図である。
【図１３】図１３は、並列処理の粒度が粗くなった場合における、データ保護の具体例を示す説明図である。
【図１４】図１４は、並列処理の分割数に応じた実行時間の具体例を示す説明図である。
【図１５】図１５は、実施の形態２にかかるアドホック接続での並列処理制御システム１００の実行状態を示す説明図である。
【図１６】図１６は、実施の形態３にかかるマルチコアプロセッサシステムにおける並列処理制御システム１００の実行状態を示す説明図である。
【図１７】図１７は、スケジューラ３０２による並列処理の開始処理を示すフローチャートである。
【図１８】図１８は、スケジューラ３０２による負荷分散プロセスにおける並列処理制御処理を示すフローチャートである。
【図１９】図１９は、データ保護処理を示すフローチャートである。
【図２０】図２０は、仮想メモリ設定処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかる並列処理制御プログラム、情報処理装置、および並列処理制御方法の好適な実施の形態を詳細に説明する。
【００１４】
（実施の形態１の概要説明）
図１は、実施の形態１にかかる並列処理制御システム１００に含まれる装置群を示すブロック図である。並列処理制御システム１００は、オフロードサーバ１０１と、基地局１０２と、端末装置１０３とを有している。オフロードサーバ１０１と、基地局１０２とは、ネットワーク１０４で接続されており、基地局１０２と、端末装置１０３とは、無線通信１０５で接続されている。
【００１５】
オフロードサーバ１０１は、端末装置１０３の処理を代わりに実行する装置である。具体的には、オフロードサーバ１０１は、端末装置１０３を擬似的に動作できる環境を有し、前述の環境上で端末装置１０３の処理を代わりに実行する。環境などのソフトウェアについては、図３にて後述する。
【００１６】
基地局１０２は、端末装置１０３との間で無線通信を行い、他の端末との通話、通信を中継する装置である。また、基地局１０２は複数存在し、複数の基地局１０２と端末装置１０３で携帯電話網を形成している。また、基地局１０２は、ネットワーク１０４を通して、端末装置１０３とオフロードサーバ１０１との通信を中継する。
【００１７】
具体的には、基地局１０２は、端末装置１０３から無線通信１０５によって受信したデータを、ネットワーク１０４によってオフロードサーバ１０１に送信する。端末装置１０３からオフロードサーバ１０１への通信回線はアップリンクとなる。また、基地局１０２は、オフロードサーバ１０１から無線通信１０５によって受信したパケットデータを、無線通信１０５によって端末装置１０３に送信する。オフロードサーバ１０１から端末装置１０３への通信回線はダウンリンクとなる。
【００１８】
端末装置１０３は、利用者が並列処理制御システム１００を利用するために使用される装置である。具体的には、端末装置１０３は、ユーザインターフェイス機能を有し、利用者からの入出力を受け付ける。たとえば、並列処理制御システム１００がＷｅｂメールのサービスを提供する場合、オフロードサーバ１０１は、メール処理を行い、端末装置１０３は、Ｗｅｂブラウザを実行する。
【００１９】
（実施の形態１にかかる端末装置１０３のハードウェア）
図２は、実施の形態１にかかる端末装置１０３のハードウェアを示すブロック図である。図２において、端末装置１０３は、ＣＰＵ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を有する。また、端末装置１０３は、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６と、を有する。また、端末装置１０３は、ユーザやその他の機器との入出力装置として、ディスプレイ２０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０８と、キーボード２０９と、を有する。また、各部はバス２１０によってそれぞれ接続されている。
【００２０】
ここで、ＣＰＵ２０１は、端末装置１０３の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。フラッシュＲＯＭ２０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、端末装置１０３は、Ｉ／Ｆ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２１】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵ２０１の制御に従ってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、端末装置１０３を使用するユーザがＩ／Ｆ２０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２２】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２３】
Ｉ／Ｆ２０８は、無線通信１０５を介して基地局１０２に接続されている。基地局１０２を経由して、Ｉ／Ｆ２０８は、インターネットなどのネットワーク１０４に接続され、ネットワーク１０４を介してオフロードサーバ１０１等に接続される。そして、Ｉ／Ｆ２０８は、無線通信１０５と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２４】
キーボード２０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２５】
また、図示していないが、オフロードサーバ１０１のハードウェアとしては、ＣＰＵ、ＲＯＭ、ＲＡＭを有する。また、オフロードサーバ１０１は、記憶装置として、磁気ディスクドライブ、光ディスクドライブを有してもよい。磁気ディスクドライブ、光ディスクドライブは、オフロードサーバ１０１のＣＰＵの制御によって、データを記憶したり、読み込んだりする。
【００２６】
図３は、並列処理制御システム１００のソフトウェアを示す説明図である。図３に示すソフトウェアは、端末ＯＳ３０１と、スケジューラ３０２と、帯域監視部３０３と、プロセス３０４と、スレッド３０５＿０〜スレッド３０５＿３と、サーバＯＳ３０６と、端末エミュレータ３０７と、仮想メモリ監視フィードバック３０８とである。スレッド３０５＿０〜スレッド３０５＿３は、プロセス３０４内のスレッドである。前述のソフトウェアがアクセスする記憶領域として、実メモリ３０９と、仮想メモリ３１０がＲＡＭ２０３、オフロードサーバ１０１のＲＡＭ等に確保されている。
【００２７】
また、端末ＯＳ３０１〜プロセス３０４、スレッド３０５＿０は、端末装置１０３にて実行され、プロセス３０４、スレッド３０５＿１〜スレッド３０５＿３、サーバＯＳ３０６〜仮想メモリ監視フィードバック３０８は、オフロードサーバ１０１にて実行される。
【００２８】
端末ＯＳ３０１は、端末装置１０３を制御するソフトウェアである。具体的には、端末ＯＳ３０１は、スレッド３０５＿０等が使用するライブラリを提供する。また、端末ＯＳ３０１は、ＲＯＭ２０２、ＲＡＭ２０３などのメモリの管理を行う。
【００２９】
スケジューラ３０２は、端末ＯＳ３０１が提供する機能の一つであり、スレッドやプロセスに設定されている優先度等に基づいて、ＣＰＵ２０１に割り当てるスレッドを決定するソフトウェアである。定められた時刻になった場合、スケジューラ３０２は、ディスパッチが決定されたスレッドをＣＰＵ２０１に割り当てる。また、実施の形態１にかかるスケジューラ３０２は、並列処理が可能であり、並列処理の粒度が異なる実行オブジェクトが複数存在する場合、最適な実行オブジェクトを選択し、実行してプロセス３０４を生成する。並列処理の粒度については、図７にて詳しく記述する。
【００３０】
帯域監視部３０３は、ネットワーク１０４、無線通信１０５の帯域を監視するソフトウェアである。具体的には、帯域監視部３０３は、Ｐｉｎｇを発行し、ダウンリンクとアップリンクの速度を測定し、変化があった場合にスケジューラ３０２に通知する。
【００３１】
具体的な変化としては、たとえば、帯域監視部３０３は、前回からの帯域の変化分が一定の閾値以上であった場合に、変化があったとして判断してもよい。または、並列処理制御システム１００が取り得る最広帯域をブロックに分割し、ブロックを移動した場合、帯域監視部３０３は、変化があったとして判断してもよい。具体的に、最広帯域が１００［Ｍｂｐｓ］であった場合、帯域を３分割し、１００〜６７［Ｍｂｐｓ］を広帯域、６７〜３３［Ｍｂｐｓ］を中帯域、３３〜０［Ｍｂｐｓ］を狭帯域とする。帯域監視部３０３は、広帯域→中帯域、中帯域→狭帯域など、分割されたブロックを移動した際に、変化があったとして判断してもよい。
【００３２】
プロセス３０４は、ＣＰＵ２０１がＲＡＭ２０３等に読み込まれた実行オブジェクトを実行することによって生成される。プロセス３０４の内部には、スレッド３０５＿０〜スレッド３０５＿３が存在し、スレッド３０５＿０〜スレッド３０５＿３は並列処理を実行している。また、プロセス３０４は、負荷分散を行うことが可能である。
【００３３】
具体的には、端末装置１０３は、実行オブジェクトを無線通信１０５、ネットワーク１０４を通じてオフロードサーバ１０１に送信し、オフロードサーバ１０１は、スレッド３０５＿１〜スレッド３０５＿３を生成する。これにより、プロセス３０４は、端末装置１０３とオフロードサーバ１０１とで、負荷分散された状態で実行される。以下、負荷分散が可能なプロセスを、負荷分散プロセスと呼称する。また、端末装置１０３で実行中のスレッド３０５＿０は、実メモリ３０９にアクセスする。オフロードサーバ１０１で実行中のスレッド３０５＿１〜スレッド３０５＿３は、仮想メモリ３１０にアクセスする。
【００３４】
サーバＯＳ３０６は、オフロードサーバ１０１を制御するソフトウェアである。具体的には、サーバＯＳ３０６は、スレッド３０５＿１〜スレッド３０５＿３等が使用するライブラリを提供する。また、サーバＯＳ３０６は、オフロードサーバ１０１のＲＯＭ、ＲＡＭなどのメモリの管理を行う。
【００３５】
端末エミュレータ３０７は、端末装置１０３を模倣するソフトウェアであり、端末装置１０３で実行可能な実行オブジェクトを、オフロードサーバ１０１で実行可能とするソフトウェアである。具体的には、端末エミュレータ３０７は、実行オブジェクトに記載されたＣＰＵ２０１への命令または端末ＯＳ３０１のライブラリへの命令を、オフロードサーバ１０１のＣＰＵへの命令またはサーバＯＳ３０６のライブラリへの命令に置き換えて実行する。
【００３６】
図３に示す状態では、オフロードサーバ１０１は、端末エミュレータ３０７上でスレッド３０５＿１〜スレッド３０５＿３を実行している。端末エミュレータ３０７を実行することで、並列処理制御システム１００は、ＣＰＵ２０１をマスタＣＰＵと想定し、オフロードサーバ１０１が仮想ＣＰＵ３１１をスレーブＣＰＵと想定した、マルチコアプロセッサシステムの様相を示すことになる。
【００３７】
仮想メモリ監視フィードバック３０８は、仮想メモリ３１０に書き込まれたデータを実メモリ３０９に書き戻すソフトウェアである。具体的には、仮想メモリ監視フィードバック３０８は、仮想メモリ３１０に対するアクセスを監視し、仮想メモリ３１０に書き込まれたデータを、ダウンリンクを通じて実メモリ３０９に書き戻す。また、仮想メモリ３１０は、実メモリ３０９と同じアドレスを記憶する領域であり、定められたタイミングによって、仮想メモリ監視フィードバック３０８が前述の書き戻す処理を行う。定められたタイミングについては、プロセス３０４の並行処理の粒度によって異なる。書き戻すタイミングについては、図９〜図１２にて後述する。
【００３８】
図４は、並列処理の実行状態と実行時間に関する説明図である。符号４０１で示す説明図は、ＣＰＵ２０１をマスタＣＰＵとし、オフロードサーバ１０１の端末エミュレータ３０７による仮想ＣＰＵ３１１をスレーブＣＰＵとした状態におけるプロセス３０４の実行状態を示している。符号４０２で示す説明図は、プロセス３０４を符号４０１で示す実行状態で実行した際の実行時間を示している。
【００３９】
符号４０１で示す説明図にて、ＣＰＵ２０１は、ミドルウェア／ライブラリなどを利用して、負荷分散プロセスとなるプロセス３０４に含まれるスレッド３０５＿０を実行している。また、プロセス３０４に含まれるスレッド３０５＿１について、ＣＰＵ２０１は、端末ＯＳ３０１のカーネルから、プロセッサ間通信によって、仮想ＣＰＵ３１１に通知する。通知される内容は、スレッド３０５＿１のスレッドコンテキストのメモリダンプでもよいし、スレッド３０５＿１を実行するために要求される開始アドレス、引数の情報、スタックメモリサイズ等を通知してもよい。通知された内容に従って、仮想ＣＰＵ３１１は、スレーブカーネルとスケジューラ４０３によって、スレッド３０５＿１をナノスレッドとして割り当てる。
【００４０】
符号４０２で示す説明図では、プロセス３０４の実行時間を示している。時刻ｔ０にて、ＣＰＵ２０１は、プロセス３０４を実行開始する。時刻ｔ０から時刻ｔ１の区間では、ＣＰＵ２０１は、並列処理を行うことができない、逐次処理が要求される処理を実行している。時刻ｔ１にて、ＣＰＵ２０１は、並列処理を行える処理を検出すると、時刻ｔ１から時刻ｔ２にかけて、並列処理を実行するのに要求される情報を前述のプロセッサ間通信にて仮想ＣＰＵ３１１に通知する。時刻ｔ２から時刻ｔ３にかけて、ＣＰＵ２０１と仮想ＣＰＵ３１１は、プロセス３０４を並列実行する。
【００４１】
時刻ｔ３にて、並列実行が終了すると、仮想ＣＰＵ３１１は、時刻ｔ３から時刻ｔ４にかけて、実行した並列処理の結果をプロセッサ間通信によって、ＣＰＵ２０１に通知する。時刻ｔ４から時刻ｔ５にかけて、ＣＰＵ２０１は、再び逐次処理を実行し、プロセス３０４の処理を終了する。結果、プロセス３０４の実行時間Ｔ（Ｎ）となる時刻ｔ０から時刻ｔ５までの時間は、下記（１）式で求めることができる。
【００４２】
Ｔ（Ｎ）＝（Ｓ＋（１−Ｓ）／Ｎ）・Ｔ（１）＋τ…（１）
【００４３】
ただし、Ｎを負荷分散プロセスを実行可能なＣＰＵ数とし、Ｔ（Ｎ）をＣＰＵ数がＮ個の場合における負荷分散プロセスの実行時間とし、Ｓを負荷分散プロセスにて、逐次処理を行う割合を示し、τを並列処理に伴う通信時間を示している。以下、ＮをＣＰＵ数、Ｓを逐次処理の割合、τを通信時間と称する。なお、逐次処理の割合Ｓを用いると、並列処理の割合は１００−Ｓ［％］となる。
【００４４】
図５は、並列処理の割合とＣＰＵ数に関する処理性能を示した説明図である。グラフ５０１の横軸はＣＰＵ数Ｎであり、縦軸はＣＰＵ数Ｎ＝１を基準にした処理性能比を示している。通信時間τが０であり、通信にかかるオーバーヘッドが発生しない理想的な状態の場合、逐次処理の割合Ｓ＝８０［％］、９０［％］のいずれも、ＣＰＵ数が増加するにつれ、処理性能が向上している。
【００４５】
しかし、通信時間τ＝０．１Ｔ（１）であり、通信にかかるオーバーヘッドが発生する場合、逐次処理の割合Ｓ＝９０［％］において、ＣＰＵ数２個〜４個におけるプロット点が、処理性能比１を下回る矩形５０２内に存在している。このように、通信にかかるオーバーヘッドが発生する場合、並列処理または逐次処理の割合によっては、並列処理を実行することで、処理性能比が悪化する可能性がある。
【００４６】
（並列処理制御システム１００の機能）
次に、並列処理制御システム１００の機能について説明する。図６は、並列処理制御システム１００の機能を示すブロック図である。並列処理制御システム１００は、測定部６０２と、算出部６０３と、選択部６０４と、設定部６０５と、検出部６０６と、通知部６０７と、格納部６０８と、実行部６０９と、実行部６１０と、を含む。この制御部となる機能（測定部６０２〜実行部６１０）は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。または、Ｉ／Ｆ２０８を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００４７】
また、端末装置１０３は、ＲＯＭ２０２、ＲＡＭ２０３等の記憶装置に格納された実行オブジェクト６０１にアクセス可能である。また、各機能部のうち、測定部６０２〜実行部６０９は、マスタＣＰＵとなるＣＰＵ２０１を有する端末装置１０３の機能であり、実行部６１０は、スレーブＣＰＵとなる仮想ＣＰＵ３１１を有するオフロードサーバ１０１の機能となる。
【００４８】
測定部６０２は、接続元装置と接続先装置との間の帯域を測定する機能を有する。たとえば、測定部６０２は、接続元装置となる端末装置１０３と、接続先装置となるオフロードサーバ１０１との間の帯域σを測定する。具体的に、測定部６０２は、Ｐｉｎｇをオフロードサーバ１０１に送信し、Ｐｉｎｇの応答時間によって、ダウンリンクとアップリンクを測定する。測定部６０２は、帯域監視部３０３の一部の機能となる。なお、抽出されたデータは、ＣＰＵ２０１のレジスタ、キャッシュメモリ、またはＲＡＭ２０３などの記憶領域に記憶される。
【００４９】
算出部６０３は、接続元装置内の接続元プロセッサおよび接続先装置内の接続先プロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、測定部６０２によって測定された帯域に基づいて算出する機能を有する。並列処理の粒度とは、特定の処理を並列実行する際に、分割された処理量を示している。粒度が細かくなるほど、分割された処理量が少なくなり、粒度が粗くなるほど、分割された処理量が多くなる。たとえば、粒度が細かい並列処理としては、ステートメント単位の並列処理が存在し、粒度が粗い並列処理としては、スレッド単位、関数単位等の並列処理が存在する。また、粒度の中程度の並列処理として、ループによる繰り返しの並列処理が存在する。
【００５０】
たとえば、算出部６０３は、ＣＰＵ２０１と仮想ＣＰＵ３１１で並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、帯域σに基づいて算出する。なお、具体的な算出方法として、算出部６０３は、並列処理の処理時間に、並列処理のオーバーヘッドとなる通信量を帯域σで除算した値を加算することで、実行時間を算出する。または、帯域σが狭帯域となるとオーバーヘッドが顕著になるため、たとえば、算出部６０３は、特定の閾値σ０を設け、帯域σが閾値σ０を下回った場合に、並列処理の処理時間に通信量を帯域σで除算した値を加算することで、実行時間を算出してもよい。
【００５１】
また、算出部６０３は、はじめに帯域と並列処理にかかる通信量とによって通信時間を算出する。続けて、算出部６０３は、並列処理を逐次実行した場合の処理時間と並列処理のうち逐次処理の割合と並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を実行オブジェクトごとに算出する。最後に、算出部６０３は、通信時間と並列実行する場合の処理時間とを加算することによって、複数の実行オブジェクトの各々の実行時間を算出してもよい。
【００５２】
並列処理のうち逐次処理の割合とは、特定の処理のうち、並列実行が可能な部分を除いた割合である。また、算出部６０３は、特定の処理のうち、並列実行が可能な割合を用いて算出してもよい。実施の形態１にかかる並列処理制御システム１００では、逐次処理の割合Ｓを用いて算出している。また、算出された通信時間は、（１）式における、第２項となる通信時間τと一致し、算出された並列実行する場合の処理時間は、（１）式における、第１項となる（Ｓ＋（１−Ｓ）／Ｎ）・Ｔ（１）と一致する。
【００５３】
たとえば、算出部６０３は、並列処理の粒度が粗である実行オブジェクトについて算出する場合を想定する。帯域σが１０［Ｍｂｐｓ］であり、並列処理にかかる通信量が７６８９６［ビット］である場合、算出部６０３は、通信時間を通信量／帯域σ＝約３．０［ミリ秒］と算出する。また、逐次実行した場合の処理時間を７．５［ミリ秒］とし、逐次処理の割合Ｓを０．０１［％］とし、並列実行が可能な最大の分割数Ｎ＿Ｍａｘをがである場合、算出部６０３は、並列実行する場合の処理時間を３．８［ミリ秒］と算出する。最後に、算出部６０３は、粗粒度実行オブジェクトの実行時間を３．０＋３．８＝６．８［ミリ秒］と算出する。算出部６０３は、同様に、他の粒度に関する実行オブジェクトの実行時間を算出する。
【００５４】
また、算出部６０３は、初めに、並列実行する場合の処理時間を逐次実行した場合の処理時間と逐次処理の割合と最大の分割数以下である並列実行の数によって算出する。続けて、算出部６０３は、通信時間と並列実行する場合の処理時間とを加算することによって、複数の実行オブジェクトの各々の並列実行の数ごとの実行時間を算出してもよい。
【００５５】
たとえば、算出部６０３は、並列処理の粒度が粗である実行オブジェクトにおいて、最大の分割数が２であれば、並列実行の数が１であるときの実行時間を７．５［ミリ秒］、並列実行の数が２であるとき（１）式より、実行時間を６．８［ミリ秒］、と算出する。なお、算出された結果は、ＣＰＵ２０１のレジスタ、キャッシュメモリ、またはＲＡＭ２０３などの記憶領域に記憶される。
【００５６】
選択部６０４は、算出部６０３によって算出された各々の実行時間の長さに基づいて、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する機能を有する。また、選択部６０４は、各々の実行時間の長さのうち、最短となる実行オブジェクトを、実行対象の実行オブジェクトとして選択してもよい。たとえば、選択部６０４は、算出された実行オブジェクトの実行時間が７．５［ミリ秒］、６．８［ミリ秒］であれば、最短となる６．８［ミリ秒］となった実行オブジェクトを選択してもよい。
【００５７】
また、最短以外の選択方法として、選択後、実行オブジェクトを切り替えることになると、切り替えのオーバーヘッドが発生するため、選択部６０４は、切り替えのオーバーヘッドを加算して選択してもよい。たとえば、現在選択中の実行オブジェクトと他の実行オブジェクトの実行時間が僅差で他の実行オブジェクトの実行時間が最短となっている場合を想定する。選択部６０４は、切り替えにかかるオーバーヘッド時間を他の実行オブジェクトの実行時間に加算した際に、選択中の実行オブジェクトの実行時間を超えた場合は、選択中の実行オブジェクトの実行時間を選択してもよい。
【００５８】
また、選択部６０４は、検出部６０６によって携帯電話網を経由して接続されている場合に、並列処理を実行開始することが検出された場合、実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択してもよい。具体的には、選択部６０４は、検出された場合に、粗粒度実行オブジェクトを選択する。なお、選択された結果は、ＣＰＵ２０１のレジスタ、キャッシュメモリ、またはＲＡＭ２０３などの記憶領域に記憶される。
【００５９】
設定部６０５は、選択部６０４によって選択された実行対象の実行オブジェクトを接続元プロセッサおよび接続先プロセッサで協動して実行可能な状態に設定する機能を有する。ここで、協動とは、接続元プロセッサおよび接続先プロセッサが協同して動くことを示している。たとえば、選択部６０４によって並列処理の粒度を粗とする粗粒度実行オブジェクトが選択された場合、設定部６０５は、ＣＰＵ２０１と仮想ＣＰＵ３１１が粗粒度実行オブジェクトを実行可能な状態に設定する。
【００６０】
具体的な設定内容として、ＣＰＵ２０１は、仮想ＣＰＵ３１１に実行対象となった粗粒度実行オブジェクトのデータを転送し、粗粒度実行オブジェクトを実行可能な状態にする。また、他の設定内容として、オフロードサーバ１０１に端末エミュレータ３０７が起動していない場合、ＣＰＵ２０１は、端末エミュレータ３０７を起動させ、粗粒度実行オブジェクトを実行可能な状態にする。
【００６１】
また、設定部６０５は、実行対象の実行オブジェクトを、接続元装置および接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ最大の分割数となるプロセッサ群で協動して実行可能な状態に設定してもよい。特定の接続元プロセッサとは、端末装置１０３がマルチコアを有していた場合に、マスタとなるプロセッサのことであり、特定の接続先プロセッサとは、オフロードサーバ１０１がマルチコアを有していた場合に、マスタとなるプロセッサのことである。また、オフロードサーバ１０１のマスタとなるプロセッサとしては、たとえば、端末装置１０３の測定部６０２によるＰｉｎｇに対して、複数のプロセッサのうち、Ｐｉｎｇの応答を行うプロセッサである。
【００６２】
たとえば、接続元装置のプロセッサが１個であり、接続先装置のプロセッサが４個である場合、最大の分割数が４であった場合を想定する。設定部６０５は、端末装置１０３のＣＰＵ２０１と、オフロードサーバ１０１のマスタＣＰＵを含む３つのＣＰＵ、計４つのＣＰＵで協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【００６３】
また、設定部６０５は、実行対象の実行オブジェクトを、接続元装置および接続先装置のプロセッサ群のうち、実行対象の実行オブジェクトにおける並列実行の数となるプロセッサ群で協動して実行可能な状態に設定してもよい。また、プロセッサ群には、特定の接続元プロセッサおよび特定の接続先プロセッサを含む。
【００６４】
たとえば、接続元装置のプロセッサが１個であり、接続先装置のプロセッサが４個である場合、最大の分割数が４であり、実行対象の実行オブジェクトにおける並列実行の数が３となった場合を想定する。設定部６０５は、端末装置１０３のＣＰＵ２０１と、オフロードサーバ１０１のマスタＣＰＵを含む２つのＣＰＵ、計３つのＣＰＵで、協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【００６５】
検出部６０６は、選択部６０４による選択によって、実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する機能を有する。たとえば、検出部６０６は、並列処理の粒度が細である細粒度実行オブジェクトから並列処理の粒度が中である中粒度実行オブジェクトに変更した場合、または、中粒度実行オブジェクトから粗粒度実行オブジェクトに変更した場合である。
【００６６】
また、検出部６０６は、実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、帯域が減少した状態を検出してもよい。具体的には、検出部６０６は、粗粒度実行オブジェクトが選択されている場合に、帯域σが減少した状態を検出する。また、帯域σが減少した状態として、一定時間ごとの平均値をとり、前回の平均値の帯域より下回った場合に、検出部６０６は、帯域が減少したとして検出してもよい。または、特定の閾値を下回った場合に、検出部６０６は、帯域が減少したとして検出してもよい。
【００６７】
また、検出部６０６は、接続元装置と接続先装置とが携帯電話網を経由して接続されている場合に、並列処理を実行開始することを検出してもよい。具体的には、検出部６０６は、端末装置１０３が携帯電話網の一部である基地局１０２を経由し、オフロードサーバ１０１に接続されている場合に、並列処理を実行開始することを検出する。なお、検出された結果は、ＣＰＵ２０１のレジスタ、キャッシュメモリ、またはＲＡＭ２０３などの記憶領域に記憶される。
【００６８】
通知部６０７は、検出部６０６によって粒度が粗い新たな実行対象の実行オブジェクトが選択されたことが検出された場合、接続先装置に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を接続先装置に通知する機能を有する。たとえば、通知部６０７は、オフロードサーバ１０１の仮想メモリ３１０に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を、オフロードサーバ１０１に通知する。
【００６９】
また、通知部６０７は、検出部６０６によって最も粒度が粗い実行オブジェクトが選択されている場合に、帯域が減少した状態が検出された場合、接続先装置に保持された実行対象の実行オブジェクトによる処理結果の送信要求を接続先装置に通知する機能を有する。たとえば、通知部６０７は、検出された場合に、オフロードサーバ１０１の仮想メモリ３１０に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を、オフロードサーバ１０１に通知する。
【００７０】
格納部６０８は、通知部６０７によって通知された送信要求による処理結果を接続元装置の記憶装置に格納する機能を有する。たとえば、格納部６０８は、送信要求による処理結果を実メモリ３０９に格納する。
【００７１】
実行部６０９、実行部６１０は、設定部６０５によって実行可能な状態に設定された実行対象の実行オブジェクトを実行する機能を有する。たとえば、粗粒度実行オブジェクトが実行対象の実行オブジェクトとなった場合、実行部６０９と、実行部６１０は、各装置で粗粒度実行オブジェクトを実行する。
【００７２】
図７は、並列処理制御システム１００の設計時における概要を示す説明図である。符号７０１に示すブロック図では、実行オブジェクトの生成の様子を示し、符号７０２に示すブロック図は、実行オブジェクトの詳細を示している。
【００７３】
符号７０１に示すブロック図にて、並列コンパイラは、実行されるとプロセス３０４となるソースコードから、構造解析を行いつつ、実行オブジェクトを生成する。並列コンパイラは、並列処理の粒度によって、粗粒度に対応する粗粒度実行オブジェクト７０３、中粒度に対応する中粒度実行オブジェクト７０４、細粒度に対応する細粒度実行オブジェクト７０５を生成する。また、並列コンパイラは、粗粒度実行オブジェクト７０３の構造解析結果７０６、中粒度実行オブジェクト７０４の構造解析結果７０７、細粒度実行オブジェクト７０５の構造解析結果７０８を生成する。
【００７４】
また、構造解析結果７０６〜構造解析結果７０８には、構造解析で得た、処理全体での逐次処理の割合Ｓと、並列処理で発生するデータ量Ｄと、並列処理の発生する頻度Ｘと、並列実行が可能な最大の分割数Ｎ＿Ｍａｘが記載されている。以下の説明では、粗粒度を示す接尾記号をｃ、中粒度を示す接尾記号をｍ、細粒度を示す接尾記号をｆとする。
【００７５】
次に並列処理の各粒度について説明する。粗粒度の並列処理とは、プログラム中の一連の処理の固まり、ブロックについて、一連の処理ブロック間に依存関係がない場合、ブロックを並列実行することである。中粒度の並列処理とは、ループ処理にて、ループの繰り返し部分に依存関係がない場合、繰り返し部分を並列実行することである。細粒度の並列処理とは、ステートメント間に依存関係がない場合、各ステートメントを並列実行することである。各粒度、構造解析結果７０６〜構造解析結果７０８については、後述する図８にて具体例を示す。
【００７６】
符号７０２に示すブロック図では、粗粒度実行オブジェクト７０３〜細粒度実行オブジェクト７０５の詳細を示している。粗粒度実行オブジェクト７０３は、プログラム中の一連のブロックを並列実行するように記載されている。中粒度実行オブジェクト７０４は、粗粒度実行オブジェクト７０３におけるプログラム中の一連のブロックを並列実行するように記載された状態で、ブロック内のループ処理について、さらに並列実行するように記載されている。細粒度実行オブジェクト７０５は、プログラム中の一連のブロックを並列実行し、さらにブロック内のループ処理を並列実行する状態で、さらに、ステートメントを並列実行するように記載されている。
【００７７】
このように、中粒度実行オブジェクト７０４、細粒度実行オブジェクト７０５は、該当の粒度より粒度が粗い並列処理を実行してもよいし、しなくてもよい。前述の例では粒度が粗い並列処理を実行していたが、たとえば、中粒度実行オブジェクト７０４は、プログラム中の一連のブロックを並列実行せず、ループ処理を並列実行するように生成されてもよい。
【００７８】
また、粒度が細かい実行オブジェクトは、該当の粒度より粒度が粗い並列処理を実行できるため、粒度が細かいほど、並列処理をより分割することができる分、通信量は増大する。したがって、広帯域では通信量の多い粒度が細かい実行オブジェクトを実行し、狭帯域では通信量の少ない粒度が粗い実行オブジェクトを実行することで、並列処理制御システム１００は帯域に応じて最適な並列処理を実行でき、処理性能を向上することができる。
【００７９】
図８は、各粒度の実行オブジェクトの具体例を示す説明図である。図８では、動画像の特定のフレームを復号化する際の処理について、粗粒度実行オブジェクト７０３〜細粒度実行オブジェクト７０５、また、構造解析結果７０６〜構造解析結果７０８の例を示している。
【００８０】
粗粒度実行オブジェクト７０３は、復号化を行う関数を並列実行するように生成されている。具体的には、粗粒度実行オブジェクト７０３は、端末装置１０３等によって、“ｄｅｃｏｄｅ＿ｖｉｄｅｏ＿ｆｒａｍｅ（）”関数を含むブロックと“ｄｅｃｏｄｅ＿ａｕｄｉｏ＿ｆｒａｍｅ（）”関数を含むブロックを並列実行するプロセスを生成する。
【００８１】
以下、構造解析結果７０６の値について説明する。並列実行可能なブロックが２つあるため、並列実行が可能な最大の分割数Ｎｃ＿Ｍａｘは２となる。また、“ｄｅｃｏｄｅ＿ｖｉｄｅｏ＿ｆｒａｍｅ（）”関数内に１００００ステートメント存在し、うち、逐次処理が１ステートメントであった場合、逐次処理の割合Ｓｃは１／１００００＝０．００００１＝０．０１［％］となる。また、データ量Ｄｃは、“ｄｅｃｏｄｅ＿ｖｉｄｅｏ＿ｆｒａｍｅ（）”関数の引数のデータサイズとなる。頻度Ｘｃは、引数を渡す際の１回である。具体的にＤｃは、引数の“ｄｓｔ”、“ｓｒｃ−＞ｖｉｄｅｏ”のサイズ、“ｓｉｚｅｏｆ（ｓｒｃ−＞ｖｉｄｅｏ）”の計算結果のサイズと、第２引数の実データである第３引数の値とを合計した値になる。
【００８２】
ここで、ディスプレイ２０７が３２０×２４０ピクセルであるＱＶＧＡ（Ｑｕａｒｔｅｒ  Ｖｉｄｅｏ  Ｇｒａｐｈｉｃｓ  Ａｒｒａｙ）が採用されており、画像圧縮処理の単位となるマクロブロックが８×８ピクセルである場合を想定する。このとき、ＱＶＧＡであれば、マクロブロックは（３２０×２４０）／（８×８）＝１２００個存在することになる。説明を簡略化するため、１つのマクロブロックの平均サイズが８［バイト］となる場合を想定する。したがって、“ｓｒｃ−＞ｖｉｄｅｏ”は、１２００個のマクロブロックを含んでおり、“ｓｉｚｅｏｆ（ｓｒｃ−＞ｖｉｄｅｏ）”は少なくとも１２００×８［バイト］となる。以上より、Ｄｃは（４×３＋１２００×８）×８＝７６８９６［ビット］となる。
【００８３】
また、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）については、並列コンパイラは、たとえば、対象のステップ数と、ＣＰＵ２０１の１命令のクロック時間から算出してもよいし、プロファイラに実行させた値を格納してもよい。図８の例では、実行時間Ｔ（１）＝７．５［ミリ秒］とする。また、（１）式において、端末装置１０３は、通信時間τをデータ量Ｄ・頻度Ｘ／帯域σにて算出する。端末装置１０３は、帯域σを２５［Ｍｂｐｓ］とし、ＣＰＵ数Ｎ＝２の実行時間を算出すると、下記のような結果を得る。
【００８４】
（０．０００１＋（１−０．０００１）／２）×０．００７５＋７６８９６／（２５×１０００×１０００）
≒０．００６８＝６．８［ミリ秒］
【００８５】
Ｔ（１）＝７．５［ミリ秒］、Ｔ（２）＝６．８［ミリ秒］となるため、粗粒度の場合、ＣＰＵ数Ｎ＝２で並列処理を行った方が早く処理を実行することができる。
【００８６】
中粒度実行オブジェクト７０４は、復号化を行う関数の中で、マクロブロックを処理するループ処理を並列実行するように生成されている。具体的には、中粒度実行オブジェクト７０４は、ループ部分となる変数ｉが０から１２００未満までのループ処理を、変数ｉごとに並列実行するプロセスを生成する。たとえば、生成されたプロセスは、変数ｉが０から５９９までを実行する処理と、変数ｉが６００から１１９９までを実行する処理と、のように並列実行する。
【００８７】
以下、構造解析結果７０７の値について説明する。ループの繰り返し数は１２００であるため、並列実行が可能な最大の分割数Ｎｍ＿Ｍａｘは１２００となる。また、ループ処理の中に１００ステートメント存在し、そのうち、中粒度実行オブジェクト７０４内に示した逐次処理が１ステートメントであった場合、逐次処理の割合Ｓｍは１／１００＝０．０１＝１［％］となる。また、データ量Ｄｍは、１個のマクロブロックのサイズとなり、８×８＝６４［ビット］である。頻度Ｘｍはマクロブロックのデータを転送する１２００回である。
【００８８】
また、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）は、２．０［ミリ秒］とする。端末装置１０３は、帯域σを５０［Ｍｂｐｓ］とし、ＣＰＵ数Ｎ＝２の実行時間を算出すると、下記のような結果を得る。
【００８９】
（０．０１＋（１−０．０１）／２）×０．００２０＋６００×８×８／（５０×１０００×１０００）
≒０．００１８＝１．８［ミリ秒］
【００９０】
なお、上記算出式において、ＣＰＵ数Ｎ＝２の場合、自身が処理する分のマクロブロックのデータ転送を行わなくてよいため、データの転送頻度を１２００×（１／２）＝６００としている。端末装置１０３は、ＣＰＵ数Ｎ＝３の実行時間を算出すると、下記のような結果を得る。
【００９１】
（０．０１＋０．９９／３）×０．００２０＋８００×８×８／（５０×１０００×１０００）
≒０．００１７＝１．７［ミリ秒］
【００９２】
同様に、自身が処理する分のマクロブロックのデータ転送を行わないことを考慮し、データの転送頻度を１２００×（２／３）＝８００としている。以上より、Ｔ（１）＝２．０［ミリ秒］、Ｔ（２）＝１．８［ミリ秒］、Ｔ（３）＝１．７［ミリ秒］となるため、中粒度の場合、ＣＰＵ数Ｎ＝３で並列処理を行った方が早く処理を実行することができる。
【００９３】
また、中粒度の並列処理については、ループ処理を並列処理するため、たとえば、ループ処理の内部に別のループ処理が存在する場合、２種類の中粒度実行オブジェクトを生成することができる。
【００９４】
細粒度実行オブジェクト７０５は、マクロブロックを処理する中で、各ステートメントを並列実行するように生成されている。具体的には、中粒度実行オブジェクト７０４は、“ａ＝１；”、“ｂ＝１；”、“ｃ＝１；”という処理を並列実行するプロセスを生成する。
【００９５】
以下、構造解析結果７０８の値について説明する。依存関係のないステートメントは３であるため、並列実行が可能な最大の分割数Ｎｆ＿Ｍａｘは３となる。また、逐次処理の割合Ｓｆは、依存関係のない３ステートメントと依存関係のある１ステートメントから、１／４＝０．２５＝２５［％］である。データ量Ｄｆは、一つの変数のサイズである３２［ビット］であり、頻度は３回存在するため、３となる。
【００９６】
また、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）は、５０［ナノ秒］とする。端末装置１０３は、帯域σを２５［Ｍｂｐｓ］とし、ＣＰＵ数Ｎ＝３の実行時間を算出すると、下記のような結果を得る。
【００９７】
（０．２５＋（１−０．２５）／３）×５０×１０＾（−９）＋３２×３／（７５×１０００×１０００）
≒１．３×１０＾（−６）＝１．３［マイクロ秒］
【００９８】
以上より、Ｔ（１）＝５０［ナノ秒］、Ｔ（３）＝１．３［マイクロ秒］となるため、細粒度の場合、並列処理を実行せず逐次処理を行った方が早く処理を実行することができる。
【００９９】
また、細粒度の並列処理については、少なくとも１つの行に、複数の演算子があるようなステートメントが存在すれば、細粒度の並列処理が存在することになる。したがって、細粒度の並列処理の出現頻度は高い。たとえば、粗粒度、中粒度の並列処理の内部において、細粒度の並列処理が発生することも多い。
【０１００】
また、図７で説明したように、粒度の細かい実行オブジェクトは、該当の粒度より粒度が粗い並列処理を実行することができる。たとえば、中粒度実行オブジェクト７０４にて、粗粒度の並列処理も行われている場合、最大の分割数は、“ｄｅｃｏｄｅ＿ｖｉｄｅｏ＿ｆｒａｍｅ（）”関数内で示すＮｍ＿Ｍａｘ＝１２００と、“ｄｅｃｏｄｅ＿ａｕｄｉｏ＿ｆｒａｍｅ（）”関数での分割数を合計した数となる。同様に、細粒度実行オブジェクト７０５にて、中粒度の並列処理も行われている場合、最大の分割数は、１２００×３＝３６００となる。
【０１０１】
図９は、細粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。グラフ９０１は、横軸に時刻ｔ、縦軸に帯域σを示している。図９に示す並列処理制御システム１００は、グラフ９０１における広帯域を獲得した領域９０２の状態である。帯域監視部３０３によって広帯域を獲得したことを検出した並列処理制御システム１００では、細粒度実行オブジェクト７０５によって実行されたプロセス３０４にて、負荷分散を行う。
【０１０２】
具体的には、端末装置１０３がプロセス３０４内のスレッド９０３＿０を実行し、オフロードサーバ１０１が、プロセス３０４内のスレッド９０３＿１〜スレッド９０３＿３を実行する。細粒度実行オブジェクト７０５によるプロセス３０４を実行している場合、仮想メモリ３１０は、ダイナミック同期仮想メモリ９０４に設定される。ダイナミック同期仮想メモリ９０４は、スレッド９０３＿１〜スレッド９０３＿３による書き込みに対し、実メモリ３０９と常に同期が行われる状態である。
【０１０３】
図１０は、中粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。図１０に示す並列処理制御システム１００は、グラフ９０１における中帯域を獲得した領域１００１、または領域１００２の状態である。中帯域とは、具体的には、全体の帯域に対して中間程度の領域であり、全体の帯域が１００［Ｍｂｐｓ］であれば、中帯域は、たとえば、３３〜６７［Ｍｂｐｓ］としてもよい。帯域監視部３０３によって中帯域を獲得したことを検出した並列処理制御システム１００では、中粒度実行オブジェクト７０４によって実行されたプロセス３０４にて、負荷分散を行う。
【０１０４】
具体的には、端末装置１０３がプロセス３０４内のスレッド１００３＿０を実行し、オフロードサーバ１０１が、プロセス３０４内のスレッド１００３＿１を実行する。中粒度実行オブジェクト７０４によるプロセス３０４を実行している場合、仮想メモリ３１０は、バリア同期仮想メモリ１００４に設定される。バリア同期仮想メモリ１００４は、スレッド１００３＿１での部分処理が終わるごとに、実メモリ３０９と同期が行われる。
【０１０５】
また、矢印１００５で示すように、粒度が細粒度から中粒度に切り替わった場合、並列処理制御システム１００は、ダイナミック同期仮想メモリ９０４の内容を実メモリ３０９に全て反映する。これにより、粒度の変更が起こっても仮想メモリ３１０を保護することができる。
【０１０６】
図１１は、粗粒度が選択された場合における並列処理制御システム１００の実行状態を示す説明図である。図１１に示す並列処理制御システム１００は、グラフ９０１における狭帯域を獲得した領域１１０１の状態である。帯域監視部３０３によって狭帯域を獲得したことを検出した並列処理制御システム１００では、粗粒度実行オブジェクト７０３によって実行されたプロセス３０４にて、負荷分散を行う。
【０１０７】
具体的には、端末装置１０３がプロセス３０４内のスレッド１１０２＿０、スレッド１１０２＿１を実行し、オフロードサーバ１０１が、プロセス３０４内のスレッド１１０２＿２を実行する。粗粒度実行オブジェクト７０３によるプロセス３０４を実行している場合、仮想メモリ３１０は、非同期仮想メモリ１１０３に設定される。非同期仮想メモリ１１０３は、スレッド１１０２＿２の起動および終了にて実メモリ３０９と同期が行われる。
【０１０８】
また、矢印１１０４で示すように、粒度が中粒度から粗粒度に切り替わった場合、並列処理制御システム１００は、バリア同期仮想メモリ１００４の内容を実メモリ３０９に全て反映する。これにより、粒度の変更が起こっても仮想メモリを保護することができる。
【０１０９】
図１２は、無線通信１０５が遮断された場合における並列処理制御システム１００の実行状態を示す説明図である。グラフ９０１にて、時間１２０１にて帯域σが０となっている。図１２に示す並列処理制御システム１００は、グラフ９０１における狭帯域を獲得した領域１２０２の状態であり、さらに、帯域σの時間変化（ｄ／ｄｔ）σ（ｔ）＜０を検出した状態である。帯域監視部３０３によって帯域σの時間変化（ｄ／ｄｔ）σ（ｔ）＜０を検出した並列処理制御システム１００では、負荷分散を中止し、端末装置１０３にて粗粒度実行オブジェクト７０３によるプロセス３０４を実行する。
【０１１０】
具体的には、並列処理制御システム１００は、粗粒度が選択された場合に（ｄ／ｄｔ）σ（ｔ）＜０を検出すると、非同期仮想メモリ１１０３のデータ内容を実メモリ３０９に転送する。また、並列処理制御システム１００は、オフロードサーバ１０１で実行していたスレッド１１０２＿２のコンテキスト情報も端末装置１０３に転送し、端末装置１０３でスレッド１１０２＿２’として継続して処理を続行する。なお、非同期仮想メモリ１１０３のデータ内容の転送が無線通信１０５の回線遮断に間に合わなかった場合、端末装置１０３は、粗粒度実行オブジェクト７０３からプロセス３０４を再度起動し、処理を再開する。
【０１１１】
また、オフロードサーバ１０１上の、端末エミュレータ３０７、仮想メモリ監視フィードバック３０８、仮想メモリ３１０、スレッド１１０２＿２は、無線通信１０５の遮断と同時に処理を中断する。端末エミュレータ３０７、仮想メモリ監視フィードバック３０８、仮想メモリ３１０、スレッド１１０２＿２は、一定時間オフロードサーバ１０１上に保持されるが、一定時間経過後、オフロードサーバ１０１は、メモリ解放を行う。
【０１１２】
図１３は、並列処理の粒度が粗くなった場合における、データ保護の具体例を示す説明図である。符号１３０１で示す説明図は、新たな実行オブジェクトが選択される前の状態を示し、符号１３０２で示す説明図は、新たな実行オブジェクトが選択され、実行対象の実行オブジェクトが変更された状態を示している。また、並列処理の粒度が粗くなる例としては、細粒度実行オブジェクト７０５から中粒度実行オブジェクト７０４に変更した場合、または、中粒度実行オブジェクト７０４から粗粒度実行オブジェクト７０３に変更した場合である。図１３の例では、細粒度実行オブジェクト７０５から中粒度実行オブジェクト７０４に変更する場合にて説明する。
【０１１３】
符号１３０１で示す説明図では、並列処理制御システム１００は、細粒度実行オブジェクト７０５を各装置にて実行している。具体的には、端末装置１０３は、“Ａ＝Ｂ＋Ｃ；”、“Ｇ＝Ｈ＋Ｉ；”、“Ｍ＝Ａ＋Ｄ＋Ｇ＋Ｊ；”という３ステートメントを実行する。また、オフロードサーバ１０１は、“Ｄ＝Ｅ＋Ｆ；”、“Ｊ＝Ｋ＋Ｌ；”という２ステートメントを実行する。時刻ｔ１にて、端末装置１０３は、“Ａ＝Ｂ＋Ｃ；”を実行し、実メモリ３０９に処理結果となる“Ａ”の値を格納した状態である。また、時刻ｔ１にて、オフロードサーバ１０１は、“Ｄ＝Ｅ＋Ｆ；”を実行し、仮想メモリ３１０に処理結果となる“Ｄ”の値を格納した状態である。
【０１１４】
時刻ｔ１にて、実行対象の実行オブジェクトが中粒度実行オブジェクト７０４に変更され、並列処理制御システム１００は、符号１３０２で示す状態になる。並列処理の粒度が粗くなった結果、分割された処理量が多くなるため、１つの装置に集中して処理を行うようになる。符号１３０２の状態では、オフロードサーバ１０１ではどのステートメントも実行せず、端末装置１０３にて、前述の５つのステートメントを実行する。このとき、オフロードサーバ１０１は、“Ｇ＝Ｈ＋Ｉ；”から実行するが、“Ｄ”の値は、実メモリ３０９に存在しないため、“Ｍ＝Ａ＋Ｄ＋Ｇ＋Ｊ；”を実行することができない。
【０１１５】
したがって、端末装置１０３は、オフロードサーバ１０１に、変更前となる実行対象の実行オブジェクトの処理結果の送信要求を通知し、オフロードサーバ１０１は、仮想メモリ３１０に格納された処理結果を端末装置１０３に送信する。処理結果を受信した端末装置１０３は、処理結果を実メモリ３０９に格納する。これにより、端末装置１０３は、実行対象の実行オブジェクトの変更後も、処理を続行することができる。
【０１１６】
図１４は、並列処理の分割数に応じた実行時間の具体例を示す説明図である。図１４では、プロセス３０４の実行時間を１５０［ミリ秒］とした場合の、並列処理の分割数に応じた実行時間を示している。前提として、プロセス３０４の並列処理可能な処理の処理時間を１００［ミリ秒］、逐次処理部分の処理時間を５０［ミリ秒］とする。この場合、逐次処理の割合Ｓは、６７［％］となる。また、プロセス３０４の並列実行可能な最大の分割数Ｎ＿Ｍａｘを４とする。
【０１１７】
次に、帯域σが通信品質１となる場合について、実行時間の具体例を示す。帯域σが通信品質１の状態では、他のＣＰＵにデータを通知するのに１０［ミリ秒］かかると想定する。通信品質１の場合におけるプロセス３０４の実行可能な形態としては、ＣＰＵ数Ｎ＝１である実行形態１４０１、ＣＰＵ数Ｎ＝２である実行形態１４０２、ＣＰＵ数Ｎ＝３である実行形態１４０３、ＣＰＵ数Ｎ＝４である実行形態１４０４である。
【０１１８】
実行形態１４０１でのプロセス３０４の実行時間Ｔ（１）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間１００［ミリ秒］＝１５０［ミリ秒］となる。また、実行形態１４０２でのプロセス３０４の実行時間Ｔ（２）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間５０［ミリ秒］＋通信時間１０［ミリ秒］×２＝１２０［ミリ秒］となる。
【０１１９】
同様に、実行形態１４０３でのプロセス３０４の実行時間Ｔ（３）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間３３［ミリ秒］＋通信時間１０［ミリ秒］×４＝１２３［ミリ秒］となる。同様に、実行形態１４０４でのプロセス３０４の実行時間Ｔ（４）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間２５［ミリ秒］＋通信時間１０［ミリ秒］×６＝１３５［ミリ秒］となる。以上より、実行形態１４０１〜実行形態１４０４のうち、実行形態１４０２が、最短の実行時間となるため、端末装置１０３は、ＣＰＵ数Ｎ＝２で並列処理を実行する。
【０１２０】
続けて、帯域σが通信品質２となる場合について、実行時間の具体例を示す。帯域σが通信品質２の状態では、帯域σが通信品質１の２倍となり、他のＣＰＵにデータを通知するのに５［ミリ秒］かかると想定する。通信品質１の場合におけるプロセス３０４の実行可能な形態としては、ＣＰＵ数Ｎ＝１である実行形態１４０１、ＣＰＵ数Ｎ＝２である実行形態１４０５、ＣＰＵ数Ｎ＝３である実行形態１４０６、ＣＰＵ数Ｎ＝４である実行形態１４０７である。
【０１２１】
実行形態１４０１でのプロセス３０４の実行時間Ｔ（１）は、前述の通り１５０［ミリ秒］である。実行形態１４０５でのプロセス３０４の実行時間Ｔ（２）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間５０［ミリ秒］＋通信時間５［ミリ秒］×２＝１１０［ミリ秒］となる。
【０１２２】
同様に、実行形態１４０６でのプロセス３０４の実行時間Ｔ（３）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間３３［ミリ秒］＋通信時間５［ミリ秒］×４＝１０３［ミリ秒］となる。同様に、実行形態１４０７でのプロセス３０４の実行時間Ｔ（４）は、逐次処理の処理時間５０［ミリ秒］＋並列処理の処理時間２５［ミリ秒］＋通信時間５［ミリ秒］×６＝１０５［ミリ秒］となる。以上より、実行形態１４０１、実行形態１４０５〜実行形態１４０７のうち、実行形態１４０６が、最短の実行時間となるため、端末装置１０３は、ＣＰＵ数Ｎ＝３で並列処理を実行する。
【０１２３】
（実施の形態２の概要説明）
実施の形態１にかかる並列処理制御システム１００は、オフロードサーバ１０１と端末装置１０３を有していた。実施の形態２にかかる並列処理制御システム１００は、他の端末装置がオフロードサーバ１０１の代わりとなり、並列処理を行う。端末装置１０３と他の端末装置は、アドホック接続により接続されている。実施の形態２にかかる並列処理制御システム１００の機能については、図６にて示したオフロードサーバ１０１が有する機能を、他の端末装置が有することになる。後述する図１５では、実施の形態１にかかる端末装置１０３を端末装置１０３＃０とし、実施の形態１にかかるオフロードサーバ１０１の機能を有する装置を端末装置１０３＃１、端末装置１０３＃２としている。
【０１２４】
また、端末装置１０３＃０と端末装置１０３＃１が、それぞれ独立の携帯端末でよいし、端末装置１０３＃０と端末装置１０３＃１で、１台のセパレート型の携帯端末を形成してもよい。たとえば、端末装置１０３＃０が主にディスプレイとして動作し、端末装置１０３＃１のディスプレイがタッチパネルとなりキーボードとして動作する。ユーザは、端末装置１０３＃０と端末装置１０３＃１を物理的に接続したり、端末装置１０３＃０と端末装置１０３＃１を切り離したりして、使用してもよい。
【０１２５】
また、実施の形態２にかかる検出部６０６は、接続元装置と接続先装置とがアドホック接続されている場合に、並列処理を実行開始することを検出してもよい。具体的には、検出部６０６は、接続元装置となる端末装置１０３＃０と、接続先装置となる端末装置１０３＃１がアドホック接続されている場合に、並列処理を実行開始することを検出する。なお、検出された結果は、端末装置１０３＃０のレジスタ、キャッシュメモリ、端末装置１０３＃０のＲＡＭに記憶される。
【０１２６】
また、実施の形態２にかかる選択部６０４は、実施の形態２にかかる検出部６０６によって並列処理を実行開始することが検出された場合、実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択してもよい。具体的には、選択部６０４は、アドホック接続時に並列処理を実行開始することが検出された場合、細粒度実行オブジェクト７０５を選択する。なお、選択された結果は、端末装置１０３＃０のレジスタ、キャッシュメモリ、端末装置１０３＃０のＲＡＭに記憶される。
【０１２７】
図１５は、実施の形態２にかかるアドホック接続での並列処理制御システム１００の実行状態を示す説明図である。図１５では、端末装置１０３＃０〜端末装置１０３＃２が無線通信１０５によってアドホック接続を行っている。また、端末装置１０３＃０上のソフトウェアとして、端末ＯＳ３０１＃０、スケジューラ３０２＃０、帯域監視部３０３＃０が実行されている。端末装置１０３＃１、端末装置１０３＃２でも同様のソフトウェアが実行中である。
【０１２８】
アドホック接続では、端末装置１０３＃０〜端末装置１０３＃２間の通信帯域が保証されており、たとえば、３００［Ｍｂｐｓ］で接続可能である。このように、アドホック接続での並列処理制御システム１００は広帯域を獲得できるため、細粒度実行オブジェクト７０５によるプロセス３０４にて、負荷分散を行う。
【０１２９】
具体的には、端末装置１０３＃０が、プロセス３０４内のスレッド１５０１＿０を実行し、端末装置１０３＃１が、プロセス３０４内のスレッド１５０１＿１を実行し、端末装置１０３＃２が、プロセス３０４内のスレッド１５０１＿２を実行する。また、アドホック通信における並列処理制御システム１００は、通信時間τを元に、並列処理の粒度を選択し、たとえば、粗粒度、中粒度の実行オブジェクトによって負荷分散を行ってもよい。アドホック通信における並列処理制御システム１００は、アドホック接続する端末装置１０３全てのＣＰＵが１つのマルチコアプロセッサシステムとして運用されている状態である。
【０１３０】
（実施の形態３の概要説明）
実施の形態２では、アドホック接続する端末装置１０３全てのＣＰＵが１つのマルチコアプロセッサシステムとして並列処理制御システム１００を形成していた。実施の形態３にかかる並列処理制御システム１００は、端末装置１０３がマルチコアプロセッサシステムである場合を想定する。具体的には、端末装置１０３内のマルチコアのうち、特定のコアが実施の形態１にかかる端末装置１０３となり、特定のコア以外の他のコアがオフロードサーバ１０１となり、並列処理を行う。実施の形態３にかかる並列処理制御システム１００の機能については、図６にて示したオフロードサーバ１０１が有する機能を、他のコアが有することになる。
【０１３１】
マルチコアプロセッサシステムは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、実施の形態３では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。実施の形態３にかかる端末装置１０３は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃２という３つのＣＰＵを有しており、それぞれがバス２１０で接続されている。
【０１３２】
また、実施の形態３にかかる測定部６０２は、複数のプロセッサのうち、特定のプロセッサおよび特定のプロセッサ以外の他のプロセッサ間の帯域を測定する機能を有する。具体的には、測定部６０２は、特定のプロセッサとして、ＣＰＵ２０１＃０とし、他のプロセッサとして、ＣＰＵ２０１＃１とした場合、ＣＰＵ２０１＃０とＣＰＵ２０１＃１との帯域となるバス２１０の速度を測定する。
【０１３３】
また、実施の形態３にかかる設定部６０５は、選択部６０４によって選択された実行対象の実行オブジェクトを特定のプロセッサおよび他のプロセッサで協動して実行可能な状態に設定する機能を有する。たとえば、選択部６０４によって粗粒度実行オブジェクトが選択された場合、設定部６０５は、ＣＰＵ２０１＃０とＣＰＵ２０１＃１で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【０１３４】
後述する図１６では、実施の形態１にかかる端末装置１０３をＣＰＵ２０１＃０とし、実施の形態１にかかるオフロードサーバ１０１の機能を有する装置をＣＰＵ２０１＃１、ＣＰＵ２０１＃２としている。
【０１３５】
また、実施の形態３にかかる設定部６０５は、実行対象の実行オブジェクトを、複数のプロセッサのうち、特定のプロセッサを含み、かつ最大の分割数となるプロセッサ群で協動して実行可能な状態に設定してもよい。たとえば、最大の分割数が３であった場合を想定する。このとき、設定部６０５は、ＣＰＵ２０１＃０〜ＣＰＵ２０１＃２で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【０１３６】
また、実施の形態３にかかる設定部６０５は、実行対象の実行オブジェクトを、複数のプロセッサのうち、特定のプロセッサを含み、かつ実行対象の実行オブジェクトにおける並列実行の数となるプロセッサ群で協動して実行可能な状態に設定してもよい。たとえば、実行対象の実行オブジェクトにおける並列実行の数を２と想定する。このとき、設定部６０５は、ＣＰＵ２０１＃０、ＣＰＵ２０１＃１で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
【０１３７】
図１６は、実施の形態３にかかるマルチコアプロセッサシステムにおける並列処理制御システム１００の実行状態を示す説明図である。図１６では、ＣＰＵ２０１＃０がバス２１０にて接続されている。また、ＣＰＵ２０１＃０上のソフトウェアとして、端末ＯＳ３０１＃０、スケジューラ３０２＃０、帯域監視部３０３＃０が実行されている。ＣＰＵ２０１＃１、ＣＰＵ２０１＃２でも同様のソフトウェアが実行中である。
【０１３８】
バス２１０の転送速度は高速であり、たとえば、バス２１０がＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスであり、３２［ビット］、３３［ＭＨｚ］で動作する場合を想定する。このとき、バス２１０の転送速度は、１０５６［Ｍｂｐｓ］となり、サーバ接続に比べて高速である。このように、マルチコアプロセッサシステムにおける並列処理制御システム１００は広帯域を獲得できるため、細粒度実行オブジェクト７０５によるプロセス３０４にて、負荷分散を行う。
【０１３９】
具体的には、ＣＰＵ２０１＃０が、プロセス３０４内のスレッド１５０１＿０を実行し、ＣＰＵ２０１＃１が、プロセス３０４内のスレッド１５０１＿１を実行し、ＣＰＵ２０１＃２が、プロセス３０４内のスレッド１５０１＿２を実行する。また、マルチコアプロセッサシステムにおける並列処理制御システム１００は、端末装置１０３の仕様によって、中粒度実行オブジェクト７０４、粗粒度実行オブジェクト７０３によって負荷分散を行ってもよい。
【０１４０】
（実施の形態１〜実施の形態３の処理説明）
実施の形態１〜実施の形態３にかかる並列処理制御システム１００の差分については、オフロードを行う装置が、オフロードサーバ１０１、他の端末装置、または同一の装置内の他のＣＰＵ、のいずれかという差分となり、処理に大きく差がない。図１７〜図２０にて、実施の形態１〜実施の形態３にかかる並列処理制御システム１００の処理を合わせて説明を行う。また、特に実施の形態１〜実施の形態３のうち、特有の実施の形態のみ持ち得る特徴があるときに関して、実施の形態１〜実施の形態３を明記する。
【０１４１】
図１７は、スケジューラ３０２による並列処理の開始処理を示すフローチャートである。端末装置１０３は、利用者、ＯＳ等による起動要求によって、負荷分散プロセスを起動する（ステップＳ１７０１）。続けて、端末装置１０３は、接続環境を確認する（ステップＳ１７０２）。
【０１４２】
接続環境が接続なしであり、端末装置１０３がマルチコアプロセッサシステムであった場合（ステップＳ１７０２：接続なし）、端末装置１０３は、端末装置１０３のＣＰＵ数に合わせた実行オブジェクトをロードする（ステップＳ１７０３）。実施の形態３にかかる並列処理制御システム１００は、ステップＳ１７０２：接続なしのルートを通る。接続環境がアドホック接続である場合（ステップＳ１７０２：アドホック接続）、端末装置１０３は、全粒度の実行オブジェクトをロードする（ステップＳ１７０４）。実施の形態２にかかる並列処理制御システム１００は、ステップＳ１７０２：アドホック接続のルートを通る。ロード後、端末装置１０３は、他の端末装置に細粒度実行オブジェクト７０５を転送する（ステップＳ１７０５）。
【０１４３】
接続環境がサーバ接続である場合（ステップＳ１７０２：サーバ接続）、端末装置１０３は、全粒度の実行オブジェクトをロードする（ステップＳ１７０６）。実施の形態１にかかる並列処理制御システム１００は、ステップＳ１７０２：サーバ接続のルートを通る。また、サーバ接続の時に、端末装置１０３とオフロードサーバ１０１は携帯電話網を経由して接続されている。ロード後、端末装置１０３は、オフロードサーバに粗粒度実行オブジェクト７０３を転送する（ステップＳ１７０７）。また、端末装置１０３は、バックグラウンドにて、他の実行オブジェクトをオフロードサーバ１０１に転送し（ステップＳ１７０９）、帯域監視部３０３を起動する（ステップＳ１７１０）。
【０１４４】
ステップＳ１７０３、ステップＳ１７０５、ステップＳ１７０７のいずれかを実行した端末装置１０３は、負荷分散プロセスを実行開始する（ステップＳ１７０８）。端末装置１０３は、負荷分散プロセスを実行開始後、図１８にて後述する並列処理制御処理を実行する。
【０１４５】
オフロードサーバ１０１は、ステップＳ１７０７によって粗粒度実行オブジェクト７０３の通知を受けると、端末エミュレータ３０７を起動し（ステップＳ１７１１）、仮想メモリ３１０を運用する（ステップＳ１７１２）。具体的には、オフロードサーバ１０１は、粗粒度実行オブジェクト７０３に変更されたという通知を受けたため、仮想メモリ３１０を非同期仮想メモリ１１０３に設定する。
【０１４６】
図１８は、スケジューラ３０２による負荷分散プロセスにおける並列処理制御処理を示すフローチャートである。並列処理制御処理は、ステップＳ１７０８の処理後に行われるほか、帯域監視部３０３からの通知によっても実行される。なお、図１８の並列処理制御処理は、接続環境がサーバ接続である場合を想定している。アドホック接続である場合、ステップＳ１８１８、ステップＳ１８２４の処理の要求先が、他の端末装置となる。
【０１４７】
帯域監視部３０３を実行する端末装置１０３は、帯域σを取得する（ステップＳ１８２０）。具体的には、端末装置１０３は、ｐｉｎｇを発行することにより帯域σを取得する。取得後、端末装置１０３は、帯域σが前回の値から変化したか否かを判断する（ステップＳ１８２１）。変化した場合（ステップＳ１８２１：Ｙｅｓ）、端末装置１０３は、スケジューラ３０２に帯域σと帯域σの変化があったことを通知する（ステップＳ１８２２）。
【０１４８】
通知後、端末装置１０３は、帯域σの時間変化（ｄ／ｄｔ）σ（ｔ）が０未満か否かを判断する（ステップＳ１８２３）。帯域σの時間変化が０未満である場合（ステップＳ１８２３：Ｙｅｓ）、端末装置１０３は、オフロードサーバ１０１にデータ保護処理の実行要求を通知する（ステップＳ１８２４）。データ保護処理の詳細については、図１９にて後述する。ステップＳ１８２４の処理を終了後、または帯域σの時間変化が０以上の場合（ステップＳ１８２３：Ｎｏ）、または帯域σが変化していない場合（ステップＳ１８２１：Ｎｏ）、端末装置１０３は、一定時間経過後、ステップＳ１８２０の処理に移行する。
【０１４９】
帯域監視部３０３より通知を受けた端末装置１０３は、スケジューラ３０２によって変数ｉを１、変数ｇを粗粒度に設定し（ステップＳ１８０１）、変数ｇの値を確認する（ステップＳ１８０２）。変数ｇが粗粒度である場合（ステップＳ１８０２：粗粒度）、端末装置１０３は、粗粒度処理で行われる逐次処理の割合Ｓｃ、データ量Ｄｃ、データ転送頻度Ｘｃ、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）を取得する（ステップＳ１８０３）。
【０１５０】
取得後、端末装置１０３は、帯域監視部３０３から通知された帯域σを用いて、通信時間τｃ＝Ｘｃ・Ｄｃ／σを算出する（ステップＳ１８０４）。算出後、端末装置１０３は、ＣＰＵ数Ｎ＝ｉの実行時間Ｔ（ｉ）を（１）式によって算出する（ステップＳ１８０５）。算出後、端末装置１０３は、変数ｇを中粒度に設定し（ステップＳ１８０６）、ステップＳ１８０２の処理に移行する。
【０１５１】
変数ｇが中粒度である場合（ステップＳ１８０２：中粒度）、端末装置１０３は、中粒度処理で行われる逐次処理の割合Ｓｍ、データ量Ｄｍ、データ転送頻度Ｘｍ、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）を取得する（ステップＳ１８０７）。
【０１５２】
取得後、端末装置１０３は、帯域監視部３０３から通知された帯域σを用いて、通信時間τｍ＝Ｘｍ・Ｄｍ／σを算出する（ステップＳ１８０８）。算出後、端末装置１０３は、ＣＰＵ数Ｎ＝ｉの実行時間Ｔ（ｉ）を（１）式によって算出する（ステップＳ１８０９）。算出後、端末装置１０３は、変数ｇを細粒度に設定し（ステップＳ１８１０）、ステップＳ１８０２の処理に移行する。
【０１５３】
変数ｇが細粒度である場合（ステップＳ１８０２：細粒度）、端末装置１０３は、細粒度処理で行われる逐次処理の割合Ｓｆ、データ量Ｄｆ、データ転送頻度Ｘｆ、ＣＰＵ数Ｎ＝１の実行時間Ｔ（１）を取得する（ステップＳ１８１１）。
【０１５４】
取得後、端末装置１０３は、帯域監視部３０３から通知された帯域σを用いて、通信時間τｆ＝Ｘｆ・Ｄｆ／σを算出する（ステップＳ１８１２）。算出後、端末装置１０３は、ＣＰＵ数Ｎ＝ｉの実行時間Ｔ（ｉ）を（１）式によって算出する（ステップＳ１８１３）。算出後、端末装置１０３は、変数ｇを粗粒度に設定し、変数ｉをインクリメントし（ステップＳ１８１４）、変数ｉが最大の分割数Ｎ＿Ｍａｘ以下か否かを判断する（ステップＳ１８１５）。変数ｉが最大の分割数Ｎ＿Ｍａｘ以下である場合（ステップＳ１８１５：Ｙｅｓ）、端末装置１０３は、ステップＳ１８０２の処理に移行する。
【０１５５】
変数ｉがＮ＿Ｍａｘより大きい場合（ステップＳ１８１５：Ｎｏ）、端末装置１０３は、算出されたＴ（Ｎ）のうち、Ｍｉｎ（Ｔ（Ｎ））となる変数ｉ、変数ｇを新しいＣＰＵ数、粒度に設定する（ステップＳ１８１６）。続けて、端末装置１０３は、設定された粒度に対応する実行オブジェクトを、実行対象の実行オブジェクトに設定する（ステップＳ１８１７）。設定後、端末装置１０３は、設定されたＣＰＵ数、粒度を、帯域監視部３０３へ通知する（ステップＳ１８１８）。
【０１５６】
通知後、端末装置１０３は、オフロードサーバ１０１に仮想メモリ設定処理の実行要求を通知する（ステップＳ１８１９）。仮想メモリ設定処理の詳細は、図２０にて後述する。通知後、端末装置１０３は、並列処理制御処理を終了し、設定された実行対象の実行オブジェクトにて、負荷分散プロセスを実行する。また、オフロードサーバ１０１も、設定された実行対象の実行オブジェクトにて負荷分散プロセスを実行する。オフロードサーバ１０１が複数存在する場合でも、全てのオフロードサーバ１０１が同一の実行対象の実行オブジェクトにて負荷分散プロセスを実行する。
【０１５７】
なお、最大の分割数Ｎ＿Ｍａｘの値は、粒度によって異なるため、端末装置１０３は、ステップＳ１８１５の処理を、粗粒度の最大の分割数Ｎｃ＿Ｍａｘ、中粒度の最大の分割数Ｎｍ＿Ｍａｘ、細粒度の最大の分割数Ｎｆ＿Ｍａｘのうち、最大値で判断してもよい。そして、ある粒度において、並列実行の数となる変数ｉがその粒度の最大の分割数を超えた場合、端末装置１０３は、該当部分の処理を飛ばしてよい。具体的には、粗粒度の最大の分割数Ｎｃ＿Ｍａｘ＝２、変数ｉ＝３となった場合、端末装置１０３は、ステップＳ１８０３〜ステップＳ１８０５の処理を行わず、ステップＳ１８０６の処理を実行し、続けて中粒度の処理に移行する。
【０１５８】
図１９は、データ保護処理を示すフローチャートである。データ保護処理は、オフロードサーバ１０１または、他の端末装置によって実行される。図１９の例では、説明の簡略化のため、オフロードサーバ１０１にて実行される場合を想定して説明を行う。
【０１５９】
オフロードサーバ１０１は、設定された粒度が変化したかを判断する（ステップＳ１９０１）。粒度が細粒度から中粒度に変化した場合（ステップＳ１９０１：細粒度→中粒度）、オフロードサーバ１０１は、ダイナミック同期仮想メモリ９０４のデータを端末装置１０３に転送する（ステップＳ１９０２）。転送後、オフロードサーバ１０１は、データ保護処理を終了する。
【０１６０】
粒度が中粒度から粗粒度に変化した場合（ステップＳ１９０１：中粒度→粗粒度）、オフロードサーバ１０１は、バリア同期仮想メモリ１００４の部分計算データを回収する（ステップＳ１９０３）。なお、ＣＰＵ数Ｎが３以上である場合、バリア同期仮想メモリ１００４が複数存在する可能性があるため、オフロードサーバ１０１は、バリア同期仮想メモリ１００４の部分計算データをそれぞれ回収する。
【０１６１】
回収後、オフロードサーバ１０１は、オフロードサーバ１０１・端末装置１０３間のデータ同期を実行する（ステップＳ１９０４）。同期後、オフロードサーバ１０１は、端末装置１０３に部分処理の集約要求を通知する（ステップＳ１９０５）。具体的には、粒度が変化した際に、中粒度実行オブジェクト７０４によるプロセス３０４によって、ループ内の特定のインデックスの計算データが算出されている。したがって、端末装置１０３は、計算済みであるインデックスに対応する部分処理を集約し、続けて、未処理のインデックスに対応する部分処理を実行する。集約要求を通知後、オフロードサーバ１０１は、データ保護処理を終了する。
【０１６２】
粒度が変化していない、または、細粒度から中粒度、中粒度から粗粒度以外の変化である場合（ステップＳ１９０１：その他）、オフロードサーバ１０１は、データ保護処理を終了する。
【０１６３】
図２０は、仮想メモリ設定処理を示すフローチャートである。仮想メモリ設定処理も、データ保護処理と同様に、オフロードサーバ１０１または、他の端末装置によって実行される。図２０の例では、説明の簡略化のため、オフロードサーバ１０１にて実行される場合を想定して説明を行う。また、仮想メモリ設定処理の開始時に、データ保護処理が実行中であった場合、オフロードサーバ１０１は、データ保護処理の終了を待ってから仮想メモリ設定処理を開始する。
【０１６４】
オフロードサーバ１０１は、設定された粒度を確認する（ステップＳ２００１）。設定された粒度が粗粒度である場合（ステップＳ２００１：粗粒度）、オフロードサーバ１０１は、仮想メモリ３１０を非同期仮想メモリ１１０３に設定する（ステップＳ２００２）。設定された粒度が中粒度である場合（ステップＳ２００１：中粒度）、オフロードサーバ１０１は、仮想メモリ３１０をバリア同期仮想メモリ１００４に設定する（ステップＳ２００３）。設定された粒度が細粒度である場合（ステップＳ２００１：細粒度）、オフロードサーバ１０１は、仮想メモリ３１０をダイナミック同期仮想メモリ９０４に設定する（ステップＳ２００４）。
【０１６５】
ステップＳ２００２、ステップＳ２００３、ステップＳ２００４の処理を終了後、オフロードサーバ１０１は、仮想メモリ設定処理を終了し、仮想メモリ３１０の運用を続行する。
【０１６６】
以上説明したように、並列処理制御プログラム、情報処理装置、および並列処理制御方法によれば、並列処理の粒度が異なるオブジェクト群から、端末装置と他装置間の帯域から算出した実行時間によってオブジェクトを選択する。これにより、帯域に応じた最適な並列処理を実行でき、処理性能を向上させることができる。
【０１６７】
具体的には、並列処理制御システムが、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）情報を提供し、端末装置がＧＰＳ情報を受信できた状態を想定する。端末装置とオフロードサーバの帯域が狭い、または、回線が切断された場合、端末装置がＧＰＳ情報を利用するアプリケーションソフトウェアを起動し、座標計算等、ＧＰＳ情報にともなう演算処理を実行する。また、端末装置とオフロードサーバの帯域が広帯域である場合、端末装置は、オフロードサーバに座標計算をオフロードする。このように、並列処理制御システムは、広帯域であれば、オフロードサーバによって高速処理を実行でき、また、狭帯域であれば、端末装置によって処理を続行することができる。
【０１６８】
また、別の例として、並列処理制御システムが、ファイルシェアリングや、ストリーミングのサービスを提供している場合を想定する。端末装置とオフロードサーバの帯域が狭い場合、サービスを提供するサーバは圧縮されたデータを送信し、端末装置は、フルパワーモードにて伸長を行う。また、端末装置とオフロードサーバの帯域が広い場合、オフロードサーバはデータを伸長したのち、伸長された結果を送信し、端末装置は結果の表示を行う。端末装置は、結果の表示を行えばよいため、ＣＰＵパワーが不要であり、低電力モードにて運用することができる。
【０１６９】
また、最短となる実行オブジェクトを、実行対象の実行オブジェクトとして選択してもよい。これにより、並列処理の粒度が異なるオブジェクト群のうち、最短の処理時間となる実行オブジェクトを選択でき、処理性能を向上させることができる。
【０１７０】
また、帯域と通信量から通信時間を算出し、並列処理を逐次実行した場合の処理時間と逐次処理の割合と並列実行が可能な最大の分割数とから並列実行する場合の処理時間を算出し、通信時間と並列実行する場合の処理時間を加えることで実行時間を算出してもよい。これにより、並列処理によって発生する通信時間のオーバーヘッドを含めて最短の処理時間となる実行オブジェクトを選択することができ、処理性能を向上させることができる。
【０１７１】
また、実行対象の実行オブジェクトが変更されるときに、新たな実行対象の実行オブジェクトが変更前の実行オブジェクトより粒度が粗い場合、他装置に保持された処理結果を端末装置に送信させ、端末装置の記憶装置に格納してもよい。これにより、他装置で行われた途中結果を取得できるため、端末装置は、オフロードサーバなどの他装置で行われていた処理を続行することができる。この効果は、端末装置と他装置で帯域が大きく変動する、実施の形態１にかかる並列処理制御システムにおいて、特に効果がある。
【０１７２】
また、実行対象の実行オブジェクトが、最も粒度が粗い実行オブジェクトが選択されており、かつ帯域が減少した状態を検出した場合、他装置に保持された処理結果を端末装置に送信させ、端末装置の記憶装置に格納してもよい。これにより、回線が遮断されそうなとき、端末装置は、オフロードサーバなどの他装置のデータを事前に格納することで、回線が遮断されても、格納されたデータを使用して、処理を続行することができる。
【０１７３】
また、端末装置と他装置が携帯電話網を経由して接続されており、並列処理を実行開始することを検出した場合、実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択してもよい。端末装置と他装置の接続において、携帯電話網を経由した場合、開始の帯域が狭いため、あらかじめ粒度の粗い実行オブジェクトを選択しておくことで、開始の帯域にあった実行オブジェクトを設定することができる。この効果は、実施の形態１にかかる並列処理制御システムにおいて効果がある。
【０１７４】
また、端末装置と他装置がアドホック接続しており、並列処理を実行開始することを検出した場合、実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択してもよい。アドホック接続では、開始の帯域が広いため、あらかじめ粒度の粗い実行オブジェクトを選択しておくことで、開始の帯域にあった実行オブジェクトを設定することができる。この効果は、実施の形態２にかかる並列処理制御システムにおいて効果がある。
【０１７５】
また、実施の形態３にかかるマルチコアプロセッサにかかる並列処理制御システムにおいても、並列処理の粒度が異なるオブジェクト群から、端末装置と他装置間の帯域から算出した実行時間によってオブジェクトを選択する。これにより、帯域に応じた最適な並列処理を実行でき、処理性能を向上させることができる。プロセッサ間の帯域は、広帯域であるので、細粒度実行オブジェクトを実行し、処理性能を向上させることができる。
【０１７６】
また、マスタプロセッサ以外の他のプロセッサで実行中のプロセス等により、他のプロセッサがバスのアクセス競合を起こした場合を想定する。このとき、マスタプロセッサが帯域の測定を行った場合、他のプロセッサは、測定に対応する反応が遅れるため、帯域が低下することになる。したがって、マスタプロセッサは、より粒度の粗い実行オブジェクトを選択することになり、並列処理による通信量が低下するため、アクセス競合を軽減することができる。
【０１７７】
また、実施の形態１〜実施の形態３にかかる並列処理制御システムは、混合して運用することも可能である。たとえば、複数のプロセッサを有する端末装置が、サーバ接続、またはアドホック接続を行い、実施の形態１、または実施の形態２にかかる並列処理制御システムとして、並列処理によるサービスを提供してもよい。
【０１７８】
なお、本実施の形態で説明した並列処理制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本並列処理制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本並列処理制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１７９】
上述した実施の形態１〜３に関し、さらに以下の付記を開示する。
【０１８０】
（付記１）接続元装置と接続先装置との間の帯域を測定する測定工程と、
前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
を前記接続元プロセッサに実行させることを特徴とする並列処理制御プログラム。
【０１８１】
（付記２）前記選択工程は、
前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする付記１に記載の並列処理制御プログラム。
【０１８２】
（付記３）前記算出工程は、
前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする付記１に記載の並列処理制御プログラム。
【０１８３】
（付記４）前記算出工程は、
前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする付記３に記載の並列処理制御プログラム。
【０１８４】
（付記５）前記選択工程による選択によって、前記実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する検出工程と、
前記検出工程によって前記新たな実行対象の実行オブジェクトが選択されたことが検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
を前記接続元プロセッサに実行させることを特徴とする付記１に記載の並列処理制御プログラム。
【０１８５】
（付記６）前記実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、前記帯域が減少した状態を検出する検出工程と、
前記検出工程によって前記状態が検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
を前記接続元プロセッサに実行させることを特徴とする付記１に記載の並列処理制御プログラム。
【０１８６】
（付記７）前記接続元装置と前記接続先装置とが携帯電話網を経由して接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
前記選択工程は、
前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択することを特徴とする付記１に記載の並列処理制御プログラム。
【０１８７】
（付記８）前記接続元装置と前記接続先装置とがアドホック接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
前記選択工程は、
前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択することを特徴とする付記１に記載の並列処理制御プログラム。
【０１８８】
（付記９）複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定工程と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定工程と、
を前記特定のプロセッサに実行させることを特徴とする並列処理制御プログラム。
【０１８９】
（付記１０）前記選択工程は、
前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする付記９に記載の並列処理制御プログラム。
【０１９０】
（付記１１）前記算出工程は、
前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記複数のプロセッサのうち、前記特定のプロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする付記９に記載の並列処理制御プログラム。
【０１９１】
（付記１２）前記算出工程は、
前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記複数のプロセッサのうち、前記特定のプロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする付記１１に記載の並列処理制御プログラム。
【０１９２】
（付記１３）接続先装置との間の帯域を測定する測定手段と、
自装置内のプロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
前記選択手段によって選択された実行対象の実行オブジェクトを前記自装置内のプロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定手段と、
を備えることを特徴とする情報処理装置。
【０１９３】
（付記１４）複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定手段と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
前記選択手段によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定手段と、
を備えることを特徴とする情報処理装置。
【０１９４】
（付記１５）接続元装置と接続先装置との間の帯域を測定する測定工程と、
前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
を前記接続元プロセッサが実行することを特徴とする並列処理制御方法。
【０１９５】
（付記１６）複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定工程と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定工程と、
を前記特定のプロセッサが実行することを特徴とする並列処理制御方法。
【符号の説明】
【０１９６】
１０１  オフロードサーバ
１０２  基地局
１０３  端末装置
１０４  ネットワーク
１０５  無線通信
２０３  ＲＡＭ
２１０  バス
３０９  実メモリ
３１０  仮想メモリ
６０１  実行オブジェクト
６０２  測定部
６０３  算出部
６０４  選択部
６０５  設定部
６０６  検出部
６０７  通知部
６０８  格納部
６０９  実行部
６１０  実行部
【国際調査報告】
2012023175.tif 000023
2012023175.tif 000024