JPWO2012023175A1 - 並列処理制御プログラム、情報処理装置、および並列処理制御方法 - Google Patents

並列処理制御プログラム、情報処理装置、および並列処理制御方法 Download PDF

Info

Publication number
JPWO2012023175A1
JPWO2012023175A1 JP2012529425A JP2012529425A JPWO2012023175A1 JP WO2012023175 A1 JPWO2012023175 A1 JP WO2012023175A1 JP 2012529425 A JP2012529425 A JP 2012529425A JP 2012529425 A JP2012529425 A JP 2012529425A JP WO2012023175 A1 JPWO2012023175 A1 JP WO2012023175A1
Authority
JP
Japan
Prior art keywords
execution
processor
parallel
parallel processing
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2012529425A
Other languages
English (en)
Inventor
浩一郎 山下
浩一郎 山下
宏真 山内
宏真 山内
鈴木 貴久
貴久 鈴木
康志 栗原
康志 栗原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012023175A1 publication Critical patent/JPWO2012023175A1/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

端末装置(103)は、測定部(602)によって、端末装置(103)とオフロードサーバ(101)との間の帯域を測定する。測定後、端末装置(103)は、算出部(603)によって、端末装置(103)のプロセッサおよびオフロードサーバ(101)のプロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、帯域に基づいて算出する。算出後、端末装置(103)は、選択部(604)によって、算出された各々の実行時間の長さに基づき、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する。選択後、端末装置(103)は、設定部(605)によって、選択された実行対象の実行オブジェクトを端末装置(103)のプロセッサおよびオフロードサーバ(101)のプロセッサで協動して実行可能な状態に設定する。

Description

本発明は、並列処理を制御する並列処理制御プログラム、情報処理装置、および並列処理制御方法に関する。
近年、ネットワーク技術の発達にともない、シンクライアント処理、サーバ連携といった技術が開示されている。シンクライアント処理は、ユーザが使用する端末装置では入出力機構を有し、ネットワークを介して接続されたサーバが実処理を行う機構である。また、サーバ連携は、端末装置とサーバが連携し、特定のサービスを提供する技術である。
たとえば、シンクライアント処理を行う技術として、たとえば、端末装置の負荷に応じて、端末装置がサーバにソフトウェアの起動要求を通知する技術が開示されている(たとえば、下記特許文献1を参照。)。また、別のシンクライアント処理を行う技術として、端末装置からのソフトウェア起動要求に対して、サーバが仮想マシンソフトウェアを起動する技術が開示されている(たとえば、下記特許文献2を参照。)。
また、端末装置が移動する場合、ネットワークの通信品質は、端末装置の所在位置によって変動する。ネットワークの通信品質の判断技術として、たとえば、ネットワークの通信網における正常稼働時における通信品質の指標を保持しておき、回線が正常稼働しているか否かを判断できる技術が開示されている(たとえば、下記特許文献3を参照。)。
また、端末装置が移動し、ネットワークの通信品質が劣化した場合、サーバで実行された処理結果を端末装置が取得できなくなる可能性がある。通信品質の劣化時における対策技術として、たとえば、チェックポイントを設けて、チェックポイント時に、データベースデータおよびステータスをサブシステムに転送する技術が開示されている(たとえば、下記特許文献4を参照。)。
特開2006−252218号公報 特開2006−107185号公報 特開2006−340050号公報 特開2005−267301号公報
上述した従来技術において、シンクライアント処理およびサーバ連携は、端末装置で全ての処理を実行するか、またはサーバにオフロードするか、いずれかの形態で処理を実行していた。しかしながら、これらの形態、特に、端末装置で全ての処理を実行する場合、端末装置の性能がボトルネックとなる問題があった。
また、特許文献1または特許文献2に特許文献3を組み合わせた技術によって、通信品質に応じて、たとえば、広帯域を獲得できた場合に、端末装置とサーバとで異なるソフトウェアを分散して実行することができる。しかしながら、前述の技術では、1つのソフトウェアを並列処理することが困難であるという問題があった。また、狭帯域において、特許文献4にかかる技術では、データベースという大掛かりのリソースが要求されるため、コスト増となる問題があった。
本発明は、上述した従来技術による問題点を解消するため、帯域に応じた適切な並列処理を実行できる並列処理制御プログラム、情報処理装置、および並列処理制御方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、開示の並列処理制御プログラムは、接続元装置と接続先装置との間の帯域を測定し、接続元装置内の接続元プロセッサおよび接続先装置内の接続先プロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、測定された帯域に基づいて算出し、算出された各々の実行時間の長さに基づいて、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択し、選択された実行対象の実行オブジェクトを接続元プロセッサおよび接続先プロセッサで協動して実行可能な状態に設定する。
本並列処理制御プログラム、情報処理装置、および並列処理制御方法によれば、帯域に応じて適切な並列処理を実行でき、処理性能を向上させるという効果を奏する。
実施の形態1にかかる並列処理制御システム100に含まれる装置群を示すブロック図である。 実施の形態1にかかる端末装置103のハードウェアを示すブロック図である。 並列処理制御システム100のソフトウェアを示す説明図である。 並列処理の実行状態と実行時間に関する説明図である。 並列処理の割合とCPU数に関する処理性能を示した説明図である。 並列処理制御システム100の機能を示すブロック図である。 並列処理制御システム100の設計時における概要を示す説明図である。 各粒度の実行オブジェクトの具体例を示す説明図である。 細粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。 中粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。 粗粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。 無線通信105が遮断された場合における並列処理制御システム100の実行状態を示す説明図である。 並列処理の粒度が粗くなった場合における、データ保護の具体例を示す説明図である。 並列処理の分割数に応じた実行時間の具体例を示す説明図である。 実施の形態2にかかるアドホック接続での並列処理制御システム100の実行状態を示す説明図である。 実施の形態3にかかるマルチコアプロセッサシステムにおける並列処理制御システム100の実行状態を示す説明図である。 スケジューラ302による並列処理の開始処理を示すフローチャートである。 スケジューラ302による負荷分散プロセスにおける並列処理制御処理を示すフローチャートである。 データ保護処理を示すフローチャートである。 仮想メモリ設定処理を示すフローチャートである。
以下に添付図面を参照して、本発明にかかる並列処理制御プログラム、情報処理装置、および並列処理制御方法の好適な実施の形態を詳細に説明する。
(実施の形態1の概要説明)
図1は、実施の形態1にかかる並列処理制御システム100に含まれる装置群を示すブロック図である。並列処理制御システム100は、オフロードサーバ101と、基地局102と、端末装置103とを有している。オフロードサーバ101と、基地局102とは、ネットワーク104で接続されており、基地局102と、端末装置103とは、無線通信105で接続されている。
オフロードサーバ101は、端末装置103の処理を代わりに実行する装置である。具体的には、オフロードサーバ101は、端末装置103を擬似的に動作できる環境を有し、前述の環境上で端末装置103の処理を代わりに実行する。環境などのソフトウェアについては、図3にて後述する。
基地局102は、端末装置103との間で無線通信を行い、他の端末との通話、通信を中継する装置である。また、基地局102は複数存在し、複数の基地局102と端末装置103で携帯電話網を形成している。また、基地局102は、ネットワーク104を通して、端末装置103とオフロードサーバ101との通信を中継する。
具体的には、基地局102は、端末装置103から無線通信105によって受信したデータを、ネットワーク104によってオフロードサーバ101に送信する。端末装置103からオフロードサーバ101への通信回線はアップリンクとなる。また、基地局102は、オフロードサーバ101から無線通信105によって受信したパケットデータを、無線通信105によって端末装置103に送信する。オフロードサーバ101から端末装置103への通信回線はダウンリンクとなる。
端末装置103は、利用者が並列処理制御システム100を利用するために使用される装置である。具体的には、端末装置103は、ユーザインターフェイス機能を有し、利用者からの入出力を受け付ける。たとえば、並列処理制御システム100がWebメールのサービスを提供する場合、オフロードサーバ101は、メール処理を行い、端末装置103は、Webブラウザを実行する。
(実施の形態1にかかる端末装置103のハードウェア)
図2は、実施の形態1にかかる端末装置103のハードウェアを示すブロック図である。図2において、端末装置103は、CPU201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、を有する。また、端末装置103は、フラッシュROM204と、フラッシュROMコントローラ205と、フラッシュROM206と、を有する。また、端末装置103は、ユーザやその他の機器との入出力装置として、ディスプレイ207と、I/F(Interface)208と、キーボード209と、を有する。また、各部はバス210によってそれぞれ接続されている。
ここで、CPU201は、端末装置103の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。フラッシュROM204は、OS(Operating System)などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、端末装置103は、I/F208によって新しいOSを受信し、フラッシュROM204に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ205は、CPU201の制御に従ってフラッシュROM206に対するデータのリード/ライトを制御する。フラッシュROM206は、フラッシュROMコントローラ205の制御で書き込まれたデータを記憶する。データの具体例としては、端末装置103を使用するユーザがI/F208を通して取得した画像データ、映像データなどである。フラッシュROM206は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ207は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ207は、たとえば、TFT液晶ディスプレイなどを採用することができる。
I/F208は、無線通信105を介して基地局102に接続されている。基地局102を経由して、I/F208は、インターネットなどのネットワーク104に接続され、ネットワーク104を介してオフロードサーバ101等に接続される。そして、I/F208は、無線通信105と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F208には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード209は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード209は、タッチパネル式の入力パッドやテンキーなどであってもよい。
また、図示していないが、オフロードサーバ101のハードウェアとしては、CPU、ROM、RAMを有する。また、オフロードサーバ101は、記憶装置として、磁気ディスクドライブ、光ディスクドライブを有してもよい。磁気ディスクドライブ、光ディスクドライブは、オフロードサーバ101のCPUの制御によって、データを記憶したり、読み込んだりする。
図3は、並列処理制御システム100のソフトウェアを示す説明図である。図3に示すソフトウェアは、端末OS301と、スケジューラ302と、帯域監視部303と、プロセス304と、スレッド305_0〜スレッド305_3と、サーバOS306と、端末エミュレータ307と、仮想メモリ監視フィードバック308とである。スレッド305_0〜スレッド305_3は、プロセス304内のスレッドである。前述のソフトウェアがアクセスする記憶領域として、実メモリ309と、仮想メモリ310がRAM203、オフロードサーバ101のRAM等に確保されている。
また、端末OS301〜プロセス304、スレッド305_0は、端末装置103にて実行され、プロセス304、スレッド305_1〜スレッド305_3、サーバOS306〜仮想メモリ監視フィードバック308は、オフロードサーバ101にて実行される。
端末OS301は、端末装置103を制御するソフトウェアである。具体的には、端末OS301は、スレッド305_0等が使用するライブラリを提供する。また、端末OS301は、ROM202、RAM203などのメモリの管理を行う。
スケジューラ302は、端末OS301が提供する機能の一つであり、スレッドやプロセスに設定されている優先度等に基づいて、CPU201に割り当てるスレッドを決定するソフトウェアである。定められた時刻になった場合、スケジューラ302は、ディスパッチが決定されたスレッドをCPU201に割り当てる。また、実施の形態1にかかるスケジューラ302は、並列処理が可能であり、並列処理の粒度が異なる実行オブジェクトが複数存在する場合、最適な実行オブジェクトを選択し、実行してプロセス304を生成する。並列処理の粒度については、図7にて詳しく記述する。
帯域監視部303は、ネットワーク104、無線通信105の帯域を監視するソフトウェアである。具体的には、帯域監視部303は、Pingを発行し、ダウンリンクとアップリンクの速度を測定し、変化があった場合にスケジューラ302に通知する。
具体的な変化としては、たとえば、帯域監視部303は、前回からの帯域の変化分が一定の閾値以上であった場合に、変化があったとして判断してもよい。または、並列処理制御システム100が取り得る最広帯域をブロックに分割し、ブロックを移動した場合、帯域監視部303は、変化があったとして判断してもよい。具体的に、最広帯域が100[Mbps]であった場合、帯域を3分割し、100〜67[Mbps]を広帯域、67〜33[Mbps]を中帯域、33〜0[Mbps]を狭帯域とする。帯域監視部303は、広帯域→中帯域、中帯域→狭帯域など、分割されたブロックを移動した際に、変化があったとして判断してもよい。
プロセス304は、CPU201がRAM203等に読み込まれた実行オブジェクトを実行することによって生成される。プロセス304の内部には、スレッド305_0〜スレッド305_3が存在し、スレッド305_0〜スレッド305_3は並列処理を実行している。また、プロセス304は、負荷分散を行うことが可能である。
具体的には、端末装置103は、実行オブジェクトを無線通信105、ネットワーク104を通じてオフロードサーバ101に送信し、オフロードサーバ101は、スレッド305_1〜スレッド305_3を生成する。これにより、プロセス304は、端末装置103とオフロードサーバ101とで、負荷分散された状態で実行される。以下、負荷分散が可能なプロセスを、負荷分散プロセスと呼称する。また、端末装置103で実行中のスレッド305_0は、実メモリ309にアクセスする。オフロードサーバ101で実行中のスレッド305_1〜スレッド305_3は、仮想メモリ310にアクセスする。
サーバOS306は、オフロードサーバ101を制御するソフトウェアである。具体的には、サーバOS306は、スレッド305_1〜スレッド305_3等が使用するライブラリを提供する。また、サーバOS306は、オフロードサーバ101のROM、RAMなどのメモリの管理を行う。
端末エミュレータ307は、端末装置103を模倣するソフトウェアであり、端末装置103で実行可能な実行オブジェクトを、オフロードサーバ101で実行可能とするソフトウェアである。具体的には、端末エミュレータ307は、実行オブジェクトに記載されたCPU201への命令または端末OS301のライブラリへの命令を、オフロードサーバ101のCPUへの命令またはサーバOS306のライブラリへの命令に置き換えて実行する。
図3に示す状態では、オフロードサーバ101は、端末エミュレータ307上でスレッド305_1〜スレッド305_3を実行している。端末エミュレータ307を実行することで、並列処理制御システム100は、CPU201をマスタCPUと想定し、オフロードサーバ101が仮想CPU311をスレーブCPUと想定した、マルチコアプロセッサシステムの様相を示すことになる。
仮想メモリ監視フィードバック308は、仮想メモリ310に書き込まれたデータを実メモリ309に書き戻すソフトウェアである。具体的には、仮想メモリ監視フィードバック308は、仮想メモリ310に対するアクセスを監視し、仮想メモリ310に書き込まれたデータを、ダウンリンクを通じて実メモリ309に書き戻す。また、仮想メモリ310は、実メモリ309と同じアドレスを記憶する領域であり、定められたタイミングによって、仮想メモリ監視フィードバック308が前述の書き戻す処理を行う。定められたタイミングについては、プロセス304の並行処理の粒度によって異なる。書き戻すタイミングについては、図9〜図12にて後述する。
図4は、並列処理の実行状態と実行時間に関する説明図である。符号401で示す説明図は、CPU201をマスタCPUとし、オフロードサーバ101の端末エミュレータ307による仮想CPU311をスレーブCPUとした状態におけるプロセス304の実行状態を示している。符号402で示す説明図は、プロセス304を符号401で示す実行状態で実行した際の実行時間を示している。
符号401で示す説明図にて、CPU201は、ミドルウェア/ライブラリなどを利用して、負荷分散プロセスとなるプロセス304に含まれるスレッド305_0を実行している。また、プロセス304に含まれるスレッド305_1について、CPU201は、端末OS301のカーネルから、プロセッサ間通信によって、仮想CPU311に通知する。通知される内容は、スレッド305_1のスレッドコンテキストのメモリダンプでもよいし、スレッド305_1を実行するために要求される開始アドレス、引数の情報、スタックメモリサイズ等を通知してもよい。通知された内容に従って、仮想CPU311は、スレーブカーネルとスケジューラ403によって、スレッド305_1をナノスレッドとして割り当てる。
符号402で示す説明図では、プロセス304の実行時間を示している。時刻t0にて、CPU201は、プロセス304を実行開始する。時刻t0から時刻t1の区間では、CPU201は、並列処理を行うことができない、逐次処理が要求される処理を実行している。時刻t1にて、CPU201は、並列処理を行える処理を検出すると、時刻t1から時刻t2にかけて、並列処理を実行するのに要求される情報を前述のプロセッサ間通信にて仮想CPU311に通知する。時刻t2から時刻t3にかけて、CPU201と仮想CPU311は、プロセス304を並列実行する。
時刻t3にて、並列実行が終了すると、仮想CPU311は、時刻t3から時刻t4にかけて、実行した並列処理の結果をプロセッサ間通信によって、CPU201に通知する。時刻t4から時刻t5にかけて、CPU201は、再び逐次処理を実行し、プロセス304の処理を終了する。結果、プロセス304の実行時間T(N)となる時刻t0から時刻t5までの時間は、下記(1)式で求めることができる。
T(N)=(S+(1−S)/N)・T(1)+τ…(1)
ただし、Nを負荷分散プロセスを実行可能なCPU数とし、T(N)をCPU数がN個の場合における負荷分散プロセスの実行時間とし、Sを負荷分散プロセスにて、逐次処理を行う割合を示し、τを並列処理に伴う通信時間を示している。以下、NをCPU数、Sを逐次処理の割合、τを通信時間と称する。なお、逐次処理の割合Sを用いると、並列処理の割合は100−S[%]となる。
図5は、並列処理の割合とCPU数に関する処理性能を示した説明図である。グラフ501の横軸はCPU数Nであり、縦軸はCPU数N=1を基準にした処理性能比を示している。通信時間τが0であり、通信にかかるオーバーヘッドが発生しない理想的な状態の場合、逐次処理の割合S=80[%]、90[%]のいずれも、CPU数が増加するにつれ、処理性能が向上している。
しかし、通信時間τ=0.1T(1)であり、通信にかかるオーバーヘッドが発生する場合、逐次処理の割合S=90[%]において、CPU数2個〜4個におけるプロット点が、処理性能比1を下回る矩形502内に存在している。このように、通信にかかるオーバーヘッドが発生する場合、並列処理または逐次処理の割合によっては、並列処理を実行することで、処理性能比が悪化する可能性がある。
(並列処理制御システム100の機能)
次に、並列処理制御システム100の機能について説明する。図6は、並列処理制御システム100の機能を示すブロック図である。並列処理制御システム100は、測定部602と、算出部603と、選択部604と、設定部605と、検出部606と、通知部607と、格納部608と、実行部609と、実行部610と、を含む。この制御部となる機能(測定部602〜実行部610)は、記憶装置に記憶されたプログラムをCPU201が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM203、フラッシュROM204、フラッシュROM206などである。または、I/F208を経由して他のCPUが実行することにより、その機能を実現してもよい。
また、端末装置103は、ROM202、RAM203等の記憶装置に格納された実行オブジェクト601にアクセス可能である。また、各機能部のうち、測定部602〜実行部609は、マスタCPUとなるCPU201を有する端末装置103の機能であり、実行部610は、スレーブCPUとなる仮想CPU311を有するオフロードサーバ101の機能となる。
測定部602は、接続元装置と接続先装置との間の帯域を測定する機能を有する。たとえば、測定部602は、接続元装置となる端末装置103と、接続先装置となるオフロードサーバ101との間の帯域σを測定する。具体的に、測定部602は、Pingをオフロードサーバ101に送信し、Pingの応答時間によって、ダウンリンクとアップリンクを測定する。測定部602は、帯域監視部303の一部の機能となる。なお、抽出されたデータは、CPU201のレジスタ、キャッシュメモリ、またはRAM203などの記憶領域に記憶される。
算出部603は、接続元装置内の接続元プロセッサおよび接続先装置内の接続先プロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、測定部602によって測定された帯域に基づいて算出する機能を有する。並列処理の粒度とは、特定の処理を並列実行する際に、分割された処理量を示している。粒度が細かくなるほど、分割された処理量が少なくなり、粒度が粗くなるほど、分割された処理量が多くなる。たとえば、粒度が細かい並列処理としては、ステートメント単位の並列処理が存在し、粒度が粗い並列処理としては、スレッド単位、関数単位等の並列処理が存在する。また、粒度の中程度の並列処理として、ループによる繰り返しの並列処理が存在する。
たとえば、算出部603は、CPU201と仮想CPU311で並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、帯域σに基づいて算出する。なお、具体的な算出方法として、算出部603は、並列処理の処理時間に、並列処理のオーバーヘッドとなる通信量を帯域σで除算した値を加算することで、実行時間を算出する。または、帯域σが狭帯域となるとオーバーヘッドが顕著になるため、たとえば、算出部603は、特定の閾値σ0を設け、帯域σが閾値σ0を下回った場合に、並列処理の処理時間に通信量を帯域σで除算した値を加算することで、実行時間を算出してもよい。
また、算出部603は、はじめに帯域と並列処理にかかる通信量とによって通信時間を算出する。続けて、算出部603は、並列処理を逐次実行した場合の処理時間と並列処理のうち逐次処理の割合と並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を実行オブジェクトごとに算出する。最後に、算出部603は、通信時間と並列実行する場合の処理時間とを加算することによって、複数の実行オブジェクトの各々の実行時間を算出してもよい。
並列処理のうち逐次処理の割合とは、特定の処理のうち、並列実行が可能な部分を除いた割合である。また、算出部603は、特定の処理のうち、並列実行が可能な割合を用いて算出してもよい。実施の形態1にかかる並列処理制御システム100では、逐次処理の割合Sを用いて算出している。また、算出された通信時間は、(1)式における、第2項となる通信時間τと一致し、算出された並列実行する場合の処理時間は、(1)式における、第1項となる(S+(1−S)/N)・T(1)と一致する。
たとえば、算出部603は、並列処理の粒度が粗である実行オブジェクトについて算出する場合を想定する。帯域σが10[Mbps]であり、並列処理にかかる通信量が76896[ビット]である場合、算出部603は、通信時間を通信量/帯域σ=約3.0[ミリ秒]と算出する。また、逐次実行した場合の処理時間を7.5[ミリ秒]とし、逐次処理の割合Sを0.01[%]とし、並列実行が可能な最大の分割数N_Maxをがである場合、算出部603は、並列実行する場合の処理時間を3.8[ミリ秒]と算出する。最後に、算出部603は、粗粒度実行オブジェクトの実行時間を3.0+3.8=6.8[ミリ秒]と算出する。算出部603は、同様に、他の粒度に関する実行オブジェクトの実行時間を算出する。
また、算出部603は、初めに、並列実行する場合の処理時間を逐次実行した場合の処理時間と逐次処理の割合と最大の分割数以下である並列実行の数によって算出する。続けて、算出部603は、通信時間と並列実行する場合の処理時間とを加算することによって、複数の実行オブジェクトの各々の並列実行の数ごとの実行時間を算出してもよい。
たとえば、算出部603は、並列処理の粒度が粗である実行オブジェクトにおいて、最大の分割数が2であれば、並列実行の数が1であるときの実行時間を7.5[ミリ秒]、並列実行の数が2であるとき(1)式より、実行時間を6.8[ミリ秒]、と算出する。なお、算出された結果は、CPU201のレジスタ、キャッシュメモリ、またはRAM203などの記憶領域に記憶される。
選択部604は、算出部603によって算出された各々の実行時間の長さに基づいて、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する機能を有する。また、選択部604は、各々の実行時間の長さのうち、最短となる実行オブジェクトを、実行対象の実行オブジェクトとして選択してもよい。たとえば、選択部604は、算出された実行オブジェクトの実行時間が7.5[ミリ秒]、6.8[ミリ秒]であれば、最短となる6.8[ミリ秒]となった実行オブジェクトを選択してもよい。
また、最短以外の選択方法として、選択後、実行オブジェクトを切り替えることになると、切り替えのオーバーヘッドが発生するため、選択部604は、切り替えのオーバーヘッドを加算して選択してもよい。たとえば、現在選択中の実行オブジェクトと他の実行オブジェクトの実行時間が僅差で他の実行オブジェクトの実行時間が最短となっている場合を想定する。選択部604は、切り替えにかかるオーバーヘッド時間を他の実行オブジェクトの実行時間に加算した際に、選択中の実行オブジェクトの実行時間を超えた場合は、選択中の実行オブジェクトの実行時間を選択してもよい。
また、選択部604は、検出部606によって携帯電話網を経由して接続されている場合に、並列処理を実行開始することが検出された場合、実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択してもよい。具体的には、選択部604は、検出された場合に、粗粒度実行オブジェクトを選択する。なお、選択された結果は、CPU201のレジスタ、キャッシュメモリ、またはRAM203などの記憶領域に記憶される。
設定部605は、選択部604によって選択された実行対象の実行オブジェクトを接続元プロセッサおよび接続先プロセッサで協動して実行可能な状態に設定する機能を有する。ここで、協動とは、接続元プロセッサおよび接続先プロセッサが協同して動くことを示している。たとえば、選択部604によって並列処理の粒度を粗とする粗粒度実行オブジェクトが選択された場合、設定部605は、CPU201と仮想CPU311が粗粒度実行オブジェクトを実行可能な状態に設定する。
具体的な設定内容として、CPU201は、仮想CPU311に実行対象となった粗粒度実行オブジェクトのデータを転送し、粗粒度実行オブジェクトを実行可能な状態にする。また、他の設定内容として、オフロードサーバ101に端末エミュレータ307が起動していない場合、CPU201は、端末エミュレータ307を起動させ、粗粒度実行オブジェクトを実行可能な状態にする。
また、設定部605は、実行対象の実行オブジェクトを、接続元装置および接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ最大の分割数となるプロセッサ群で協動して実行可能な状態に設定してもよい。特定の接続元プロセッサとは、端末装置103がマルチコアを有していた場合に、マスタとなるプロセッサのことであり、特定の接続先プロセッサとは、オフロードサーバ101がマルチコアを有していた場合に、マスタとなるプロセッサのことである。また、オフロードサーバ101のマスタとなるプロセッサとしては、たとえば、端末装置103の測定部602によるPingに対して、複数のプロセッサのうち、Pingの応答を行うプロセッサである。
たとえば、接続元装置のプロセッサが1個であり、接続先装置のプロセッサが4個である場合、最大の分割数が4であった場合を想定する。設定部605は、端末装置103のCPU201と、オフロードサーバ101のマスタCPUを含む3つのCPU、計4つのCPUで協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
また、設定部605は、実行対象の実行オブジェクトを、接続元装置および接続先装置のプロセッサ群のうち、実行対象の実行オブジェクトにおける並列実行の数となるプロセッサ群で協動して実行可能な状態に設定してもよい。また、プロセッサ群には、特定の接続元プロセッサおよび特定の接続先プロセッサを含む。
たとえば、接続元装置のプロセッサが1個であり、接続先装置のプロセッサが4個である場合、最大の分割数が4であり、実行対象の実行オブジェクトにおける並列実行の数が3となった場合を想定する。設定部605は、端末装置103のCPU201と、オフロードサーバ101のマスタCPUを含む2つのCPU、計3つのCPUで、協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
検出部606は、選択部604による選択によって、実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する機能を有する。たとえば、検出部606は、並列処理の粒度が細である細粒度実行オブジェクトから並列処理の粒度が中である中粒度実行オブジェクトに変更した場合、または、中粒度実行オブジェクトから粗粒度実行オブジェクトに変更した場合である。
また、検出部606は、実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、帯域が減少した状態を検出してもよい。具体的には、検出部606は、粗粒度実行オブジェクトが選択されている場合に、帯域σが減少した状態を検出する。また、帯域σが減少した状態として、一定時間ごとの平均値をとり、前回の平均値の帯域より下回った場合に、検出部606は、帯域が減少したとして検出してもよい。または、特定の閾値を下回った場合に、検出部606は、帯域が減少したとして検出してもよい。
また、検出部606は、接続元装置と接続先装置とが携帯電話網を経由して接続されている場合に、並列処理を実行開始することを検出してもよい。具体的には、検出部606は、端末装置103が携帯電話網の一部である基地局102を経由し、オフロードサーバ101に接続されている場合に、並列処理を実行開始することを検出する。なお、検出された結果は、CPU201のレジスタ、キャッシュメモリ、またはRAM203などの記憶領域に記憶される。
通知部607は、検出部606によって粒度が粗い新たな実行対象の実行オブジェクトが選択されたことが検出された場合、接続先装置に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を接続先装置に通知する機能を有する。たとえば、通知部607は、オフロードサーバ101の仮想メモリ310に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を、オフロードサーバ101に通知する。
また、通知部607は、検出部606によって最も粒度が粗い実行オブジェクトが選択されている場合に、帯域が減少した状態が検出された場合、接続先装置に保持された実行対象の実行オブジェクトによる処理結果の送信要求を接続先装置に通知する機能を有する。たとえば、通知部607は、検出された場合に、オフロードサーバ101の仮想メモリ310に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を、オフロードサーバ101に通知する。
格納部608は、通知部607によって通知された送信要求による処理結果を接続元装置の記憶装置に格納する機能を有する。たとえば、格納部608は、送信要求による処理結果を実メモリ309に格納する。
実行部609、実行部610は、設定部605によって実行可能な状態に設定された実行対象の実行オブジェクトを実行する機能を有する。たとえば、粗粒度実行オブジェクトが実行対象の実行オブジェクトとなった場合、実行部609と、実行部610は、各装置で粗粒度実行オブジェクトを実行する。
図7は、並列処理制御システム100の設計時における概要を示す説明図である。符号701に示すブロック図では、実行オブジェクトの生成の様子を示し、符号702に示すブロック図は、実行オブジェクトの詳細を示している。
符号701に示すブロック図にて、並列コンパイラは、実行されるとプロセス304となるソースコードから、構造解析を行いつつ、実行オブジェクトを生成する。並列コンパイラは、並列処理の粒度によって、粗粒度に対応する粗粒度実行オブジェクト703、中粒度に対応する中粒度実行オブジェクト704、細粒度に対応する細粒度実行オブジェクト705を生成する。また、並列コンパイラは、粗粒度実行オブジェクト703の構造解析結果706、中粒度実行オブジェクト704の構造解析結果707、細粒度実行オブジェクト705の構造解析結果708を生成する。
また、構造解析結果706〜構造解析結果708には、構造解析で得た、処理全体での逐次処理の割合Sと、並列処理で発生するデータ量Dと、並列処理の発生する頻度Xと、並列実行が可能な最大の分割数N_Maxが記載されている。以下の説明では、粗粒度を示す接尾記号をc、中粒度を示す接尾記号をm、細粒度を示す接尾記号をfとする。
次に並列処理の各粒度について説明する。粗粒度の並列処理とは、プログラム中の一連の処理の固まり、ブロックについて、一連の処理ブロック間に依存関係がない場合、ブロックを並列実行することである。中粒度の並列処理とは、ループ処理にて、ループの繰り返し部分に依存関係がない場合、繰り返し部分を並列実行することである。細粒度の並列処理とは、ステートメント間に依存関係がない場合、各ステートメントを並列実行することである。各粒度、構造解析結果706〜構造解析結果708については、後述する図8にて具体例を示す。
符号702に示すブロック図では、粗粒度実行オブジェクト703〜細粒度実行オブジェクト705の詳細を示している。粗粒度実行オブジェクト703は、プログラム中の一連のブロックを並列実行するように記載されている。中粒度実行オブジェクト704は、粗粒度実行オブジェクト703におけるプログラム中の一連のブロックを並列実行するように記載された状態で、ブロック内のループ処理について、さらに並列実行するように記載されている。細粒度実行オブジェクト705は、プログラム中の一連のブロックを並列実行し、さらにブロック内のループ処理を並列実行する状態で、さらに、ステートメントを並列実行するように記載されている。
このように、中粒度実行オブジェクト704、細粒度実行オブジェクト705は、該当の粒度より粒度が粗い並列処理を実行してもよいし、しなくてもよい。前述の例では粒度が粗い並列処理を実行していたが、たとえば、中粒度実行オブジェクト704は、プログラム中の一連のブロックを並列実行せず、ループ処理を並列実行するように生成されてもよい。
また、粒度が細かい実行オブジェクトは、該当の粒度より粒度が粗い並列処理を実行できるため、粒度が細かいほど、並列処理をより分割することができる分、通信量は増大する。したがって、広帯域では通信量の多い粒度が細かい実行オブジェクトを実行し、狭帯域では通信量の少ない粒度が粗い実行オブジェクトを実行することで、並列処理制御システム100は帯域に応じて最適な並列処理を実行でき、処理性能を向上することができる。
図8は、各粒度の実行オブジェクトの具体例を示す説明図である。図8では、動画像の特定のフレームを復号化する際の処理について、粗粒度実行オブジェクト703〜細粒度実行オブジェクト705、また、構造解析結果706〜構造解析結果708の例を示している。
粗粒度実行オブジェクト703は、復号化を行う関数を並列実行するように生成されている。具体的には、粗粒度実行オブジェクト703は、端末装置103等によって、“decode_video_frame()”関数を含むブロックと“decode_audio_frame()”関数を含むブロックを並列実行するプロセスを生成する。
以下、構造解析結果706の値について説明する。並列実行可能なブロックが2つあるため、並列実行が可能な最大の分割数Nc_Maxは2となる。また、“decode_video_frame()”関数内に10000ステートメント存在し、うち、逐次処理が1ステートメントであった場合、逐次処理の割合Scは1/10000=0.00001=0.01[%]となる。また、データ量Dcは、“decode_video_frame()”関数の引数のデータサイズとなる。頻度Xcは、引数を渡す際の1回である。具体的にDcは、引数の“dst”、“src−>video”のサイズ、“sizeof(src−>video)”の計算結果のサイズと、第2引数の実データである第3引数の値とを合計した値になる。
ここで、ディスプレイ207が320×240ピクセルであるQVGA(Quarter Video Graphics Array)が採用されており、画像圧縮処理の単位となるマクロブロックが8×8ピクセルである場合を想定する。このとき、QVGAであれば、マクロブロックは(320×240)/(8×8)=1200個存在することになる。説明を簡略化するため、1つのマクロブロックの平均サイズが8[バイト]となる場合を想定する。したがって、“src−>video”は、1200個のマクロブロックを含んでおり、“sizeof(src−>video)”は少なくとも1200×8[バイト]となる。以上より、Dcは(4×3+1200×8)×8=76896[ビット]となる。
また、CPU数N=1の実行時間T(1)については、並列コンパイラは、たとえば、対象のステップ数と、CPU201の1命令のクロック時間から算出してもよいし、プロファイラに実行させた値を格納してもよい。図8の例では、実行時間T(1)=7.5[ミリ秒]とする。また、(1)式において、端末装置103は、通信時間τをデータ量D・頻度X/帯域σにて算出する。端末装置103は、帯域σを25[Mbps]とし、CPU数N=2の実行時間を算出すると、下記のような結果を得る。
(0.0001+(1−0.0001)/2)×0.0075+76896/(25×1000×1000)
≒0.0068=6.8[ミリ秒]
T(1)=7.5[ミリ秒]、T(2)=6.8[ミリ秒]となるため、粗粒度の場合、CPU数N=2で並列処理を行った方が早く処理を実行することができる。
中粒度実行オブジェクト704は、復号化を行う関数の中で、マクロブロックを処理するループ処理を並列実行するように生成されている。具体的には、中粒度実行オブジェクト704は、ループ部分となる変数iが0から1200未満までのループ処理を、変数iごとに並列実行するプロセスを生成する。たとえば、生成されたプロセスは、変数iが0から599までを実行する処理と、変数iが600から1199までを実行する処理と、のように並列実行する。
以下、構造解析結果707の値について説明する。ループの繰り返し数は1200であるため、並列実行が可能な最大の分割数Nm_Maxは1200となる。また、ループ処理の中に100ステートメント存在し、そのうち、中粒度実行オブジェクト704内に示した逐次処理が1ステートメントであった場合、逐次処理の割合Smは1/100=0.01=1[%]となる。また、データ量Dmは、1個のマクロブロックのサイズとなり、8×8=64[ビット]である。頻度Xmはマクロブロックのデータを転送する1200回である。
また、CPU数N=1の実行時間T(1)は、2.0[ミリ秒]とする。端末装置103は、帯域σを50[Mbps]とし、CPU数N=2の実行時間を算出すると、下記のような結果を得る。
(0.01+(1−0.01)/2)×0.0020+600×8×8/(50×1000×1000)
≒0.0018=1.8[ミリ秒]
なお、上記算出式において、CPU数N=2の場合、自身が処理する分のマクロブロックのデータ転送を行わなくてよいため、データの転送頻度を1200×(1/2)=600としている。端末装置103は、CPU数N=3の実行時間を算出すると、下記のような結果を得る。
(0.01+0.99/3)×0.0020+800×8×8/(50×1000×1000)
≒0.0017=1.7[ミリ秒]
同様に、自身が処理する分のマクロブロックのデータ転送を行わないことを考慮し、データの転送頻度を1200×(2/3)=800としている。以上より、T(1)=2.0[ミリ秒]、T(2)=1.8[ミリ秒]、T(3)=1.7[ミリ秒]となるため、中粒度の場合、CPU数N=3で並列処理を行った方が早く処理を実行することができる。
また、中粒度の並列処理については、ループ処理を並列処理するため、たとえば、ループ処理の内部に別のループ処理が存在する場合、2種類の中粒度実行オブジェクトを生成することができる。
細粒度実行オブジェクト705は、マクロブロックを処理する中で、各ステートメントを並列実行するように生成されている。具体的には、中粒度実行オブジェクト704は、“a=1;”、“b=1;”、“c=1;”という処理を並列実行するプロセスを生成する。
以下、構造解析結果708の値について説明する。依存関係のないステートメントは3であるため、並列実行が可能な最大の分割数Nf_Maxは3となる。また、逐次処理の割合Sfは、依存関係のない3ステートメントと依存関係のある1ステートメントから、1/4=0.25=25[%]である。データ量Dfは、一つの変数のサイズである32[ビット]であり、頻度は3回存在するため、3となる。
また、CPU数N=1の実行時間T(1)は、50[ナノ秒]とする。端末装置103は、帯域σを25[Mbps]とし、CPU数N=3の実行時間を算出すると、下記のような結果を得る。
(0.25+(1−0.25)/3)×50×10^(−9)+32×3/(75×1000×1000)
≒1.3×10^(−6)=1.3[マイクロ秒]
以上より、T(1)=50[ナノ秒]、T(3)=1.3[マイクロ秒]となるため、細粒度の場合、並列処理を実行せず逐次処理を行った方が早く処理を実行することができる。
また、細粒度の並列処理については、少なくとも1つの行に、複数の演算子があるようなステートメントが存在すれば、細粒度の並列処理が存在することになる。したがって、細粒度の並列処理の出現頻度は高い。たとえば、粗粒度、中粒度の並列処理の内部において、細粒度の並列処理が発生することも多い。
また、図7で説明したように、粒度の細かい実行オブジェクトは、該当の粒度より粒度が粗い並列処理を実行することができる。たとえば、中粒度実行オブジェクト704にて、粗粒度の並列処理も行われている場合、最大の分割数は、“decode_video_frame()”関数内で示すNm_Max=1200と、“decode_audio_frame()”関数での分割数を合計した数となる。同様に、細粒度実行オブジェクト705にて、中粒度の並列処理も行われている場合、最大の分割数は、1200×3=3600となる。
図9は、細粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。グラフ901は、横軸に時刻t、縦軸に帯域σを示している。図9に示す並列処理制御システム100は、グラフ901における広帯域を獲得した領域902の状態である。帯域監視部303によって広帯域を獲得したことを検出した並列処理制御システム100では、細粒度実行オブジェクト705によって実行されたプロセス304にて、負荷分散を行う。
具体的には、端末装置103がプロセス304内のスレッド903_0を実行し、オフロードサーバ101が、プロセス304内のスレッド903_1〜スレッド903_3を実行する。細粒度実行オブジェクト705によるプロセス304を実行している場合、仮想メモリ310は、ダイナミック同期仮想メモリ904に設定される。ダイナミック同期仮想メモリ904は、スレッド903_1〜スレッド903_3による書き込みに対し、実メモリ309と常に同期が行われる状態である。
図10は、中粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。図10に示す並列処理制御システム100は、グラフ901における中帯域を獲得した領域1001、または領域1002の状態である。中帯域とは、具体的には、全体の帯域に対して中間程度の領域であり、全体の帯域が100[Mbps]であれば、中帯域は、たとえば、33〜67[Mbps]としてもよい。帯域監視部303によって中帯域を獲得したことを検出した並列処理制御システム100では、中粒度実行オブジェクト704によって実行されたプロセス304にて、負荷分散を行う。
具体的には、端末装置103がプロセス304内のスレッド1003_0を実行し、オフロードサーバ101が、プロセス304内のスレッド1003_1を実行する。中粒度実行オブジェクト704によるプロセス304を実行している場合、仮想メモリ310は、バリア同期仮想メモリ1004に設定される。バリア同期仮想メモリ1004は、スレッド1003_1での部分処理が終わるごとに、実メモリ309と同期が行われる。
また、矢印1005で示すように、粒度が細粒度から中粒度に切り替わった場合、並列処理制御システム100は、ダイナミック同期仮想メモリ904の内容を実メモリ309に全て反映する。これにより、粒度の変更が起こっても仮想メモリ310を保護することができる。
図11は、粗粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。図11に示す並列処理制御システム100は、グラフ901における狭帯域を獲得した領域1101の状態である。帯域監視部303によって狭帯域を獲得したことを検出した並列処理制御システム100では、粗粒度実行オブジェクト703によって実行されたプロセス304にて、負荷分散を行う。
具体的には、端末装置103がプロセス304内のスレッド1102_0、スレッド1102_1を実行し、オフロードサーバ101が、プロセス304内のスレッド1102_2を実行する。粗粒度実行オブジェクト703によるプロセス304を実行している場合、仮想メモリ310は、非同期仮想メモリ1103に設定される。非同期仮想メモリ1103は、スレッド1102_2の起動および終了にて実メモリ309と同期が行われる。
また、矢印1104で示すように、粒度が中粒度から粗粒度に切り替わった場合、並列処理制御システム100は、バリア同期仮想メモリ1004の内容を実メモリ309に全て反映する。これにより、粒度の変更が起こっても仮想メモリを保護することができる。
図12は、無線通信105が遮断された場合における並列処理制御システム100の実行状態を示す説明図である。グラフ901にて、時間1201にて帯域σが0となっている。図12に示す並列処理制御システム100は、グラフ901における狭帯域を獲得した領域1202の状態であり、さらに、帯域σの時間変化(d/dt)σ(t)<0を検出した状態である。帯域監視部303によって帯域σの時間変化(d/dt)σ(t)<0を検出した並列処理制御システム100では、負荷分散を中止し、端末装置103にて粗粒度実行オブジェクト703によるプロセス304を実行する。
具体的には、並列処理制御システム100は、粗粒度が選択された場合に(d/dt)σ(t)<0を検出すると、非同期仮想メモリ1103のデータ内容を実メモリ309に転送する。また、並列処理制御システム100は、オフロードサーバ101で実行していたスレッド1102_2のコンテキスト情報も端末装置103に転送し、端末装置103でスレッド1102_2’として継続して処理を続行する。なお、非同期仮想メモリ1103のデータ内容の転送が無線通信105の回線遮断に間に合わなかった場合、端末装置103は、粗粒度実行オブジェクト703からプロセス304を再度起動し、処理を再開する。
また、オフロードサーバ101上の、端末エミュレータ307、仮想メモリ監視フィードバック308、仮想メモリ310、スレッド1102_2は、無線通信105の遮断と同時に処理を中断する。端末エミュレータ307、仮想メモリ監視フィードバック308、仮想メモリ310、スレッド1102_2は、一定時間オフロードサーバ101上に保持されるが、一定時間経過後、オフロードサーバ101は、メモリ解放を行う。
図13は、並列処理の粒度が粗くなった場合における、データ保護の具体例を示す説明図である。符号1301で示す説明図は、新たな実行オブジェクトが選択される前の状態を示し、符号1302で示す説明図は、新たな実行オブジェクトが選択され、実行対象の実行オブジェクトが変更された状態を示している。また、並列処理の粒度が粗くなる例としては、細粒度実行オブジェクト705から中粒度実行オブジェクト704に変更した場合、または、中粒度実行オブジェクト704から粗粒度実行オブジェクト703に変更した場合である。図13の例では、細粒度実行オブジェクト705から中粒度実行オブジェクト704に変更する場合にて説明する。
符号1301で示す説明図では、並列処理制御システム100は、細粒度実行オブジェクト705を各装置にて実行している。具体的には、端末装置103は、“A=B+C;”、“G=H+I;”、“M=A+D+G+J;”という3ステートメントを実行する。また、オフロードサーバ101は、“D=E+F;”、“J=K+L;”という2ステートメントを実行する。時刻t1にて、端末装置103は、“A=B+C;”を実行し、実メモリ309に処理結果となる“A”の値を格納した状態である。また、時刻t1にて、オフロードサーバ101は、“D=E+F;”を実行し、仮想メモリ310に処理結果となる“D”の値を格納した状態である。
時刻t1にて、実行対象の実行オブジェクトが中粒度実行オブジェクト704に変更され、並列処理制御システム100は、符号1302で示す状態になる。並列処理の粒度が粗くなった結果、分割された処理量が多くなるため、1つの装置に集中して処理を行うようになる。符号1302の状態では、オフロードサーバ101ではどのステートメントも実行せず、端末装置103にて、前述の5つのステートメントを実行する。このとき、オフロードサーバ101は、“G=H+I;”から実行するが、“D”の値は、実メモリ309に存在しないため、“M=A+D+G+J;”を実行することができない。
したがって、端末装置103は、オフロードサーバ101に、変更前となる実行対象の実行オブジェクトの処理結果の送信要求を通知し、オフロードサーバ101は、仮想メモリ310に格納された処理結果を端末装置103に送信する。処理結果を受信した端末装置103は、処理結果を実メモリ309に格納する。これにより、端末装置103は、実行対象の実行オブジェクトの変更後も、処理を続行することができる。
図14は、並列処理の分割数に応じた実行時間の具体例を示す説明図である。図14では、プロセス304の実行時間を150[ミリ秒]とした場合の、並列処理の分割数に応じた実行時間を示している。前提として、プロセス304の並列処理可能な処理の処理時間を100[ミリ秒]、逐次処理部分の処理時間を50[ミリ秒]とする。この場合、逐次処理の割合Sは、67[%]となる。また、プロセス304の並列実行可能な最大の分割数N_Maxを4とする。
次に、帯域σが通信品質1となる場合について、実行時間の具体例を示す。帯域σが通信品質1の状態では、他のCPUにデータを通知するのに10[ミリ秒]かかると想定する。通信品質1の場合におけるプロセス304の実行可能な形態としては、CPU数N=1である実行形態1401、CPU数N=2である実行形態1402、CPU数N=3である実行形態1403、CPU数N=4である実行形態1404である。
実行形態1401でのプロセス304の実行時間T(1)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間100[ミリ秒]=150[ミリ秒]となる。また、実行形態1402でのプロセス304の実行時間T(2)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間50[ミリ秒]+通信時間10[ミリ秒]×2=120[ミリ秒]となる。
同様に、実行形態1403でのプロセス304の実行時間T(3)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間33[ミリ秒]+通信時間10[ミリ秒]×4=123[ミリ秒]となる。同様に、実行形態1404でのプロセス304の実行時間T(4)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間25[ミリ秒]+通信時間10[ミリ秒]×6=135[ミリ秒]となる。以上より、実行形態1401〜実行形態1404のうち、実行形態1402が、最短の実行時間となるため、端末装置103は、CPU数N=2で並列処理を実行する。
続けて、帯域σが通信品質2となる場合について、実行時間の具体例を示す。帯域σが通信品質2の状態では、帯域σが通信品質1の2倍となり、他のCPUにデータを通知するのに5[ミリ秒]かかると想定する。通信品質1の場合におけるプロセス304の実行可能な形態としては、CPU数N=1である実行形態1401、CPU数N=2である実行形態1405、CPU数N=3である実行形態1406、CPU数N=4である実行形態1407である。
実行形態1401でのプロセス304の実行時間T(1)は、前述の通り150[ミリ秒]である。実行形態1405でのプロセス304の実行時間T(2)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間50[ミリ秒]+通信時間5[ミリ秒]×2=110[ミリ秒]となる。
同様に、実行形態1406でのプロセス304の実行時間T(3)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間33[ミリ秒]+通信時間5[ミリ秒]×4=103[ミリ秒]となる。同様に、実行形態1407でのプロセス304の実行時間T(4)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間25[ミリ秒]+通信時間5[ミリ秒]×6=105[ミリ秒]となる。以上より、実行形態1401、実行形態1405〜実行形態1407のうち、実行形態1406が、最短の実行時間となるため、端末装置103は、CPU数N=3で並列処理を実行する。
(実施の形態2の概要説明)
実施の形態1にかかる並列処理制御システム100は、オフロードサーバ101と端末装置103を有していた。実施の形態2にかかる並列処理制御システム100は、他の端末装置がオフロードサーバ101の代わりとなり、並列処理を行う。端末装置103と他の端末装置は、アドホック接続により接続されている。実施の形態2にかかる並列処理制御システム100の機能については、図6にて示したオフロードサーバ101が有する機能を、他の端末装置が有することになる。後述する図15では、実施の形態1にかかる端末装置103を端末装置103#0とし、実施の形態1にかかるオフロードサーバ101の機能を有する装置を端末装置103#1、端末装置103#2としている。
また、端末装置103#0と端末装置103#1が、それぞれ独立の携帯端末でよいし、端末装置103#0と端末装置103#1で、1台のセパレート型の携帯端末を形成してもよい。たとえば、端末装置103#0が主にディスプレイとして動作し、端末装置103#1のディスプレイがタッチパネルとなりキーボードとして動作する。ユーザは、端末装置103#0と端末装置103#1を物理的に接続したり、端末装置103#0と端末装置103#1を切り離したりして、使用してもよい。
また、実施の形態2にかかる検出部606は、接続元装置と接続先装置とがアドホック接続されている場合に、並列処理を実行開始することを検出してもよい。具体的には、検出部606は、接続元装置となる端末装置103#0と、接続先装置となる端末装置103#1がアドホック接続されている場合に、並列処理を実行開始することを検出する。なお、検出された結果は、端末装置103#0のレジスタ、キャッシュメモリ、端末装置103#0のRAMに記憶される。
また、実施の形態2にかかる選択部604は、実施の形態2にかかる検出部606によって並列処理を実行開始することが検出された場合、実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択してもよい。具体的には、選択部604は、アドホック接続時に並列処理を実行開始することが検出された場合、細粒度実行オブジェクト705を選択する。なお、選択された結果は、端末装置103#0のレジスタ、キャッシュメモリ、端末装置103#0のRAMに記憶される。
図15は、実施の形態2にかかるアドホック接続での並列処理制御システム100の実行状態を示す説明図である。図15では、端末装置103#0〜端末装置103#2が無線通信105によってアドホック接続を行っている。また、端末装置103#0上のソフトウェアとして、端末OS301#0、スケジューラ302#0、帯域監視部303#0が実行されている。端末装置103#1、端末装置103#2でも同様のソフトウェアが実行中である。
アドホック接続では、端末装置103#0〜端末装置103#2間の通信帯域が保証されており、たとえば、300[Mbps]で接続可能である。このように、アドホック接続での並列処理制御システム100は広帯域を獲得できるため、細粒度実行オブジェクト705によるプロセス304にて、負荷分散を行う。
具体的には、端末装置103#0が、プロセス304内のスレッド1501_0を実行し、端末装置103#1が、プロセス304内のスレッド1501_1を実行し、端末装置103#2が、プロセス304内のスレッド1501_2を実行する。また、アドホック通信における並列処理制御システム100は、通信時間τを元に、並列処理の粒度を選択し、たとえば、粗粒度、中粒度の実行オブジェクトによって負荷分散を行ってもよい。アドホック通信における並列処理制御システム100は、アドホック接続する端末装置103全てのCPUが1つのマルチコアプロセッサシステムとして運用されている状態である。
(実施の形態3の概要説明)
実施の形態2では、アドホック接続する端末装置103全てのCPUが1つのマルチコアプロセッサシステムとして並列処理制御システム100を形成していた。実施の形態3にかかる並列処理制御システム100は、端末装置103がマルチコアプロセッサシステムである場合を想定する。具体的には、端末装置103内のマルチコアのうち、特定のコアが実施の形態1にかかる端末装置103となり、特定のコア以外の他のコアがオフロードサーバ101となり、並列処理を行う。実施の形態3にかかる並列処理制御システム100の機能については、図6にて示したオフロードサーバ101が有する機能を、他のコアが有することになる。
マルチコアプロセッサシステムは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、実施の形態3では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。実施の形態3にかかる端末装置103は、CPU201#0〜CPU201#2という3つのCPUを有しており、それぞれがバス210で接続されている。
また、実施の形態3にかかる測定部602は、複数のプロセッサのうち、特定のプロセッサおよび特定のプロセッサ以外の他のプロセッサ間の帯域を測定する機能を有する。具体的には、測定部602は、特定のプロセッサとして、CPU201#0とし、他のプロセッサとして、CPU201#1とした場合、CPU201#0とCPU201#1との帯域となるバス210の速度を測定する。
また、実施の形態3にかかる設定部605は、選択部604によって選択された実行対象の実行オブジェクトを特定のプロセッサおよび他のプロセッサで協動して実行可能な状態に設定する機能を有する。たとえば、選択部604によって粗粒度実行オブジェクトが選択された場合、設定部605は、CPU201#0とCPU201#1で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
後述する図16では、実施の形態1にかかる端末装置103をCPU201#0とし、実施の形態1にかかるオフロードサーバ101の機能を有する装置をCPU201#1、CPU201#2としている。
また、実施の形態3にかかる設定部605は、実行対象の実行オブジェクトを、複数のプロセッサのうち、特定のプロセッサを含み、かつ最大の分割数となるプロセッサ群で協動して実行可能な状態に設定してもよい。たとえば、最大の分割数が3であった場合を想定する。このとき、設定部605は、CPU201#0〜CPU201#2で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
また、実施の形態3にかかる設定部605は、実行対象の実行オブジェクトを、複数のプロセッサのうち、特定のプロセッサを含み、かつ実行対象の実行オブジェクトにおける並列実行の数となるプロセッサ群で協動して実行可能な状態に設定してもよい。たとえば、実行対象の実行オブジェクトにおける並列実行の数を2と想定する。このとき、設定部605は、CPU201#0、CPU201#1で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
図16は、実施の形態3にかかるマルチコアプロセッサシステムにおける並列処理制御システム100の実行状態を示す説明図である。図16では、CPU201#0がバス210にて接続されている。また、CPU201#0上のソフトウェアとして、端末OS301#0、スケジューラ302#0、帯域監視部303#0が実行されている。CPU201#1、CPU201#2でも同様のソフトウェアが実行中である。
バス210の転送速度は高速であり、たとえば、バス210がPCI(Peripheral Component Interconnect)バスであり、32[ビット]、33[MHz]で動作する場合を想定する。このとき、バス210の転送速度は、1056[Mbps]となり、サーバ接続に比べて高速である。このように、マルチコアプロセッサシステムにおける並列処理制御システム100は広帯域を獲得できるため、細粒度実行オブジェクト705によるプロセス304にて、負荷分散を行う。
具体的には、CPU201#0が、プロセス304内のスレッド1501_0を実行し、CPU201#1が、プロセス304内のスレッド1501_1を実行し、CPU201#2が、プロセス304内のスレッド1501_2を実行する。また、マルチコアプロセッサシステムにおける並列処理制御システム100は、端末装置103の仕様によって、中粒度実行オブジェクト704、粗粒度実行オブジェクト703によって負荷分散を行ってもよい。
(実施の形態1〜実施の形態3の処理説明)
実施の形態1〜実施の形態3にかかる並列処理制御システム100の差分については、オフロードを行う装置が、オフロードサーバ101、他の端末装置、または同一の装置内の他のCPU、のいずれかという差分となり、処理に大きく差がない。図17〜図20にて、実施の形態1〜実施の形態3にかかる並列処理制御システム100の処理を合わせて説明を行う。また、特に実施の形態1〜実施の形態3のうち、特有の実施の形態のみ持ち得る特徴があるときに関して、実施の形態1〜実施の形態3を明記する。
図17は、スケジューラ302による並列処理の開始処理を示すフローチャートである。端末装置103は、利用者、OS等による起動要求によって、負荷分散プロセスを起動する(ステップS1701)。続けて、端末装置103は、接続環境を確認する(ステップS1702)。
接続環境が接続なしであり、端末装置103がマルチコアプロセッサシステムであった場合(ステップS1702:接続なし)、端末装置103は、端末装置103のCPU数に合わせた実行オブジェクトをロードする(ステップS1703)。実施の形態3にかかる並列処理制御システム100は、ステップS1702:接続なしのルートを通る。接続環境がアドホック接続である場合(ステップS1702:アドホック接続)、端末装置103は、全粒度の実行オブジェクトをロードする(ステップS1704)。実施の形態2にかかる並列処理制御システム100は、ステップS1702:アドホック接続のルートを通る。ロード後、端末装置103は、他の端末装置に細粒度実行オブジェクト705を転送する(ステップS1705)。
接続環境がサーバ接続である場合(ステップS1702:サーバ接続)、端末装置103は、全粒度の実行オブジェクトをロードする(ステップS1706)。実施の形態1にかかる並列処理制御システム100は、ステップS1702:サーバ接続のルートを通る。また、サーバ接続の時に、端末装置103とオフロードサーバ101は携帯電話網を経由して接続されている。ロード後、端末装置103は、オフロードサーバに粗粒度実行オブジェクト703を転送する(ステップS1707)。また、端末装置103は、バックグラウンドにて、他の実行オブジェクトをオフロードサーバ101に転送し(ステップS1709)、帯域監視部303を起動する(ステップS1710)。
ステップS1703、ステップS1705、ステップS1707のいずれかを実行した端末装置103は、負荷分散プロセスを実行開始する(ステップS1708)。端末装置103は、負荷分散プロセスを実行開始後、図18にて後述する並列処理制御処理を実行する。
オフロードサーバ101は、ステップS1707によって粗粒度実行オブジェクト703の通知を受けると、端末エミュレータ307を起動し(ステップS1711)、仮想メモリ310を運用する(ステップS1712)。具体的には、オフロードサーバ101は、粗粒度実行オブジェクト703に変更されたという通知を受けたため、仮想メモリ310を非同期仮想メモリ1103に設定する。
図18は、スケジューラ302による負荷分散プロセスにおける並列処理制御処理を示すフローチャートである。並列処理制御処理は、ステップS1708の処理後に行われるほか、帯域監視部303からの通知によっても実行される。なお、図18の並列処理制御処理は、接続環境がサーバ接続である場合を想定している。アドホック接続である場合、ステップS1818、ステップS1824の処理の要求先が、他の端末装置となる。
帯域監視部303を実行する端末装置103は、帯域σを取得する(ステップS1820)。具体的には、端末装置103は、pingを発行することにより帯域σを取得する。取得後、端末装置103は、帯域σが前回の値から変化したか否かを判断する(ステップS1821)。変化した場合(ステップS1821:Yes)、端末装置103は、スケジューラ302に帯域σと帯域σの変化があったことを通知する(ステップS1822)。
通知後、端末装置103は、帯域σの時間変化(d/dt)σ(t)が0未満か否かを判断する(ステップS1823)。帯域σの時間変化が0未満である場合(ステップS1823:Yes)、端末装置103は、オフロードサーバ101にデータ保護処理の実行要求を通知する(ステップS1824)。データ保護処理の詳細については、図19にて後述する。ステップS1824の処理を終了後、または帯域σの時間変化が0以上の場合(ステップS1823:No)、または帯域σが変化していない場合(ステップS1821:No)、端末装置103は、一定時間経過後、ステップS1820の処理に移行する。
帯域監視部303より通知を受けた端末装置103は、スケジューラ302によって変数iを1、変数gを粗粒度に設定し(ステップS1801)、変数gの値を確認する(ステップS1802)。変数gが粗粒度である場合(ステップS1802:粗粒度)、端末装置103は、粗粒度処理で行われる逐次処理の割合Sc、データ量Dc、データ転送頻度Xc、CPU数N=1の実行時間T(1)を取得する(ステップS1803)。
取得後、端末装置103は、帯域監視部303から通知された帯域σを用いて、通信時間τc=Xc・Dc/σを算出する(ステップS1804)。算出後、端末装置103は、CPU数N=iの実行時間T(i)を(1)式によって算出する(ステップS1805)。算出後、端末装置103は、変数gを中粒度に設定し(ステップS1806)、ステップS1802の処理に移行する。
変数gが中粒度である場合(ステップS1802:中粒度)、端末装置103は、中粒度処理で行われる逐次処理の割合Sm、データ量Dm、データ転送頻度Xm、CPU数N=1の実行時間T(1)を取得する(ステップS1807)。
取得後、端末装置103は、帯域監視部303から通知された帯域σを用いて、通信時間τm=Xm・Dm/σを算出する(ステップS1808)。算出後、端末装置103は、CPU数N=iの実行時間T(i)を(1)式によって算出する(ステップS1809)。算出後、端末装置103は、変数gを細粒度に設定し(ステップS1810)、ステップS1802の処理に移行する。
変数gが細粒度である場合(ステップS1802:細粒度)、端末装置103は、細粒度処理で行われる逐次処理の割合Sf、データ量Df、データ転送頻度Xf、CPU数N=1の実行時間T(1)を取得する(ステップS1811)。
取得後、端末装置103は、帯域監視部303から通知された帯域σを用いて、通信時間τf=Xf・Df/σを算出する(ステップS1812)。算出後、端末装置103は、CPU数N=iの実行時間T(i)を(1)式によって算出する(ステップS1813)。算出後、端末装置103は、変数gを粗粒度に設定し、変数iをインクリメントし(ステップS1814)、変数iが最大の分割数N_Max以下か否かを判断する(ステップS1815)。変数iが最大の分割数N_Max以下である場合(ステップS1815:Yes)、端末装置103は、ステップS1802の処理に移行する。
変数iがN_Maxより大きい場合(ステップS1815:No)、端末装置103は、算出されたT(N)のうち、Min(T(N))となる変数i、変数gを新しいCPU数、粒度に設定する(ステップS1816)。続けて、端末装置103は、設定された粒度に対応する実行オブジェクトを、実行対象の実行オブジェクトに設定する(ステップS1817)。設定後、端末装置103は、設定されたCPU数、粒度を、帯域監視部303へ通知する(ステップS1818)。
通知後、端末装置103は、オフロードサーバ101に仮想メモリ設定処理の実行要求を通知する(ステップS1819)。仮想メモリ設定処理の詳細は、図20にて後述する。通知後、端末装置103は、並列処理制御処理を終了し、設定された実行対象の実行オブジェクトにて、負荷分散プロセスを実行する。また、オフロードサーバ101も、設定された実行対象の実行オブジェクトにて負荷分散プロセスを実行する。オフロードサーバ101が複数存在する場合でも、全てのオフロードサーバ101が同一の実行対象の実行オブジェクトにて負荷分散プロセスを実行する。
なお、最大の分割数N_Maxの値は、粒度によって異なるため、端末装置103は、ステップS1815の処理を、粗粒度の最大の分割数Nc_Max、中粒度の最大の分割数Nm_Max、細粒度の最大の分割数Nf_Maxのうち、最大値で判断してもよい。そして、ある粒度において、並列実行の数となる変数iがその粒度の最大の分割数を超えた場合、端末装置103は、該当部分の処理を飛ばしてよい。具体的には、粗粒度の最大の分割数Nc_Max=2、変数i=3となった場合、端末装置103は、ステップS1803〜ステップS1805の処理を行わず、ステップS1806の処理を実行し、続けて中粒度の処理に移行する。
図19は、データ保護処理を示すフローチャートである。データ保護処理は、オフロードサーバ101または、他の端末装置によって実行される。図19の例では、説明の簡略化のため、オフロードサーバ101にて実行される場合を想定して説明を行う。
オフロードサーバ101は、設定された粒度が変化したかを判断する(ステップS1901)。粒度が細粒度から中粒度に変化した場合(ステップS1901:細粒度→中粒度)、オフロードサーバ101は、ダイナミック同期仮想メモリ904のデータを端末装置103に転送する(ステップS1902)。転送後、オフロードサーバ101は、データ保護処理を終了する。
粒度が中粒度から粗粒度に変化した場合(ステップS1901:中粒度→粗粒度)、オフロードサーバ101は、バリア同期仮想メモリ1004の部分計算データを回収する(ステップS1903)。なお、CPU数Nが3以上である場合、バリア同期仮想メモリ1004が複数存在する可能性があるため、オフロードサーバ101は、バリア同期仮想メモリ1004の部分計算データをそれぞれ回収する。
回収後、オフロードサーバ101は、オフロードサーバ101・端末装置103間のデータ同期を実行する(ステップS1904)。同期後、オフロードサーバ101は、端末装置103に部分処理の集約要求を通知する(ステップS1905)。具体的には、粒度が変化した際に、中粒度実行オブジェクト704によるプロセス304によって、ループ内の特定のインデックスの計算データが算出されている。したがって、端末装置103は、計算済みであるインデックスに対応する部分処理を集約し、続けて、未処理のインデックスに対応する部分処理を実行する。集約要求を通知後、オフロードサーバ101は、データ保護処理を終了する。
粒度が変化していない、または、細粒度から中粒度、中粒度から粗粒度以外の変化である場合(ステップS1901:その他)、オフロードサーバ101は、データ保護処理を終了する。
図20は、仮想メモリ設定処理を示すフローチャートである。仮想メモリ設定処理も、データ保護処理と同様に、オフロードサーバ101または、他の端末装置によって実行される。図20の例では、説明の簡略化のため、オフロードサーバ101にて実行される場合を想定して説明を行う。また、仮想メモリ設定処理の開始時に、データ保護処理が実行中であった場合、オフロードサーバ101は、データ保護処理の終了を待ってから仮想メモリ設定処理を開始する。
オフロードサーバ101は、設定された粒度を確認する(ステップS2001)。設定された粒度が粗粒度である場合(ステップS2001:粗粒度)、オフロードサーバ101は、仮想メモリ310を非同期仮想メモリ1103に設定する(ステップS2002)。設定された粒度が中粒度である場合(ステップS2001:中粒度)、オフロードサーバ101は、仮想メモリ310をバリア同期仮想メモリ1004に設定する(ステップS2003)。設定された粒度が細粒度である場合(ステップS2001:細粒度)、オフロードサーバ101は、仮想メモリ310をダイナミック同期仮想メモリ904に設定する(ステップS2004)。
ステップS2002、ステップS2003、ステップS2004の処理を終了後、オフロードサーバ101は、仮想メモリ設定処理を終了し、仮想メモリ310の運用を続行する。
以上説明したように、並列処理制御プログラム、情報処理装置、および並列処理制御方法によれば、並列処理の粒度が異なるオブジェクト群から、端末装置と他装置間の帯域から算出した実行時間によってオブジェクトを選択する。これにより、帯域に応じた最適な並列処理を実行でき、処理性能を向上させることができる。
具体的には、並列処理制御システムが、GPS(Global Positioning System)情報を提供し、端末装置がGPS情報を受信できた状態を想定する。端末装置とオフロードサーバの帯域が狭い、または、回線が切断された場合、端末装置がGPS情報を利用するアプリケーションソフトウェアを起動し、座標計算等、GPS情報にともなう演算処理を実行する。また、端末装置とオフロードサーバの帯域が広帯域である場合、端末装置は、オフロードサーバに座標計算をオフロードする。このように、並列処理制御システムは、広帯域であれば、オフロードサーバによって高速処理を実行でき、また、狭帯域であれば、端末装置によって処理を続行することができる。
また、別の例として、並列処理制御システムが、ファイルシェアリングや、ストリーミングのサービスを提供している場合を想定する。端末装置とオフロードサーバの帯域が狭い場合、サービスを提供するサーバは圧縮されたデータを送信し、端末装置は、フルパワーモードにて伸長を行う。また、端末装置とオフロードサーバの帯域が広い場合、オフロードサーバはデータを伸長したのち、伸長された結果を送信し、端末装置は結果の表示を行う。端末装置は、結果の表示を行えばよいため、CPUパワーが不要であり、低電力モードにて運用することができる。
また、最短となる実行オブジェクトを、実行対象の実行オブジェクトとして選択してもよい。これにより、並列処理の粒度が異なるオブジェクト群のうち、最短の処理時間となる実行オブジェクトを選択でき、処理性能を向上させることができる。
また、帯域と通信量から通信時間を算出し、並列処理を逐次実行した場合の処理時間と逐次処理の割合と並列実行が可能な最大の分割数とから並列実行する場合の処理時間を算出し、通信時間と並列実行する場合の処理時間を加えることで実行時間を算出してもよい。これにより、並列処理によって発生する通信時間のオーバーヘッドを含めて最短の処理時間となる実行オブジェクトを選択することができ、処理性能を向上させることができる。
また、実行対象の実行オブジェクトが変更されるときに、新たな実行対象の実行オブジェクトが変更前の実行オブジェクトより粒度が粗い場合、他装置に保持された処理結果を端末装置に送信させ、端末装置の記憶装置に格納してもよい。これにより、他装置で行われた途中結果を取得できるため、端末装置は、オフロードサーバなどの他装置で行われていた処理を続行することができる。この効果は、端末装置と他装置で帯域が大きく変動する、実施の形態1にかかる並列処理制御システムにおいて、特に効果がある。
また、実行対象の実行オブジェクトが、最も粒度が粗い実行オブジェクトが選択されており、かつ帯域が減少した状態を検出した場合、他装置に保持された処理結果を端末装置に送信させ、端末装置の記憶装置に格納してもよい。これにより、回線が遮断されそうなとき、端末装置は、オフロードサーバなどの他装置のデータを事前に格納することで、回線が遮断されても、格納されたデータを使用して、処理を続行することができる。
また、端末装置と他装置が携帯電話網を経由して接続されており、並列処理を実行開始することを検出した場合、実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択してもよい。端末装置と他装置の接続において、携帯電話網を経由した場合、開始の帯域が狭いため、あらかじめ粒度の粗い実行オブジェクトを選択しておくことで、開始の帯域にあった実行オブジェクトを設定することができる。この効果は、実施の形態1にかかる並列処理制御システムにおいて効果がある。
また、端末装置と他装置がアドホック接続しており、並列処理を実行開始することを検出した場合、実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択してもよい。アドホック接続では、開始の帯域が広いため、あらかじめ粒度の粗い実行オブジェクトを選択しておくことで、開始の帯域にあった実行オブジェクトを設定することができる。この効果は、実施の形態2にかかる並列処理制御システムにおいて効果がある。
また、実施の形態3にかかるマルチコアプロセッサにかかる並列処理制御システムにおいても、並列処理の粒度が異なるオブジェクト群から、端末装置と他装置間の帯域から算出した実行時間によってオブジェクトを選択する。これにより、帯域に応じた最適な並列処理を実行でき、処理性能を向上させることができる。プロセッサ間の帯域は、広帯域であるので、細粒度実行オブジェクトを実行し、処理性能を向上させることができる。
また、マスタプロセッサ以外の他のプロセッサで実行中のプロセス等により、他のプロセッサがバスのアクセス競合を起こした場合を想定する。このとき、マスタプロセッサが帯域の測定を行った場合、他のプロセッサは、測定に対応する反応が遅れるため、帯域が低下することになる。したがって、マスタプロセッサは、より粒度の粗い実行オブジェクトを選択することになり、並列処理による通信量が低下するため、アクセス競合を軽減することができる。
また、実施の形態1〜実施の形態3にかかる並列処理制御システムは、混合して運用することも可能である。たとえば、複数のプロセッサを有する端末装置が、サーバ接続、またはアドホック接続を行い、実施の形態1、または実施の形態2にかかる並列処理制御システムとして、並列処理によるサービスを提供してもよい。
なお、本実施の形態で説明した並列処理制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本並列処理制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本並列処理制御プログラムは、インターネット等のネットワークを介して配布してもよい。
101 オフロードサーバ
102 基地局
103 端末装置
104 ネットワーク
105 無線通信
203 RAM
210 バス
309 実メモリ
310 仮想メモリ
601 実行オブジェクト
602 測定部
603 算出部
604 選択部
605 設定部
606 検出部
607 通知部
608 格納部
609 実行部
610 実行部
本発明は、並列処理を制御する並列処理制御プログラム、情報処理装置、および並列処理制御方法に関する。
近年、ネットワーク技術の発達にともない、シンクライアント処理、サーバ連携といった技術が開示されている。シンクライアント処理は、ユーザが使用する端末装置では入出力機構を有し、ネットワークを介して接続されたサーバが実処理を行う機構である。また、サーバ連携は、端末装置とサーバが連携し、特定のサービスを提供する技術である。
たとえば、シンクライアント処理を行う技術として、たとえば、端末装置の負荷に応じて、端末装置がサーバにソフトウェアの起動要求を通知する技術が開示されている(たとえば、下記特許文献1を参照。)。また、別のシンクライアント処理を行う技術として、端末装置からのソフトウェア起動要求に対して、サーバが仮想マシンソフトウェアを起動する技術が開示されている(たとえば、下記特許文献2を参照。)。
また、端末装置が移動する場合、ネットワークの通信品質は、端末装置の所在位置によって変動する。ネットワークの通信品質の判断技術として、たとえば、ネットワークの通信網における正常稼働時における通信品質の指標を保持しておき、回線が正常稼働しているか否かを判断できる技術が開示されている(たとえば、下記特許文献3を参照。)。
また、端末装置が移動し、ネットワークの通信品質が劣化した場合、サーバで実行された処理結果を端末装置が取得できなくなる可能性がある。通信品質の劣化時における対策技術として、たとえば、チェックポイントを設けて、チェックポイント時に、データベースデータおよびステータスをサブシステムに転送する技術が開示されている(たとえば、下記特許文献4を参照。)。
特開2006−252218号公報 特開2006−107185号公報 特開2006−340050号公報 特開2005−267301号公報
上述した従来技術において、シンクライアント処理およびサーバ連携は、端末装置で全ての処理を実行するか、またはサーバにオフロードするか、いずれかの形態で処理を実行していた。しかしながら、これらの形態、特に、端末装置で全ての処理を実行する場合、端末装置の性能がボトルネックとなる問題があった。
また、特許文献1または特許文献2に特許文献3を組み合わせた技術によって、通信品質に応じて、たとえば、広帯域を獲得できた場合に、端末装置とサーバとで異なるソフトウェアを分散して実行することができる。しかしながら、前述の技術では、1つのソフトウェアを並列処理することが困難であるという問題があった。また、狭帯域において、特許文献4にかかる技術では、データベースという大掛かりのリソースが要求されるため、コスト増となる問題があった。
本発明は、上述した従来技術による問題点を解消するため、帯域に応じた適切な並列処理を実行できる並列処理制御プログラム、情報処理装置、および並列処理制御方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、開示の並列処理制御プログラムは、接続元装置と接続先装置との間の帯域を測定し、接続元装置内の接続元プロセッサおよび接続先装置内の接続先プロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、測定された帯域に基づいて算出し、算出された各々の実行時間の長さに基づいて、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択し、選択された実行対象の実行オブジェクトを接続元プロセッサおよび接続先プロセッサで協動して実行可能な状態に設定する。
本並列処理制御プログラム、情報処理装置、および並列処理制御方法によれば、帯域に応じて適切な並列処理を実行でき、処理性能を向上させるという効果を奏する。
図1は、実施の形態1にかかる並列処理制御システム100に含まれる装置群を示すブロック図である。 図2は、実施の形態1にかかる端末装置103のハードウェアを示すブロック図である。 図3は、並列処理制御システム100のソフトウェアを示す説明図である。 図4は、並列処理の実行状態と実行時間に関する説明図である。 図5は、並列処理の割合とCPU数に関する処理性能を示した説明図である。 図6は、並列処理制御システム100の機能を示すブロック図である。 図7は、並列処理制御システム100の設計時における概要を示す説明図である。 図8は、各粒度の実行オブジェクトの具体例を示す説明図である。 図9は、細粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。 図10は、中粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。 図11は、粗粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。 図12は、無線通信105が遮断された場合における並列処理制御システム100の実行状態を示す説明図である。 図13は、並列処理の粒度が粗くなった場合における、データ保護の具体例を示す説明図である。 図14は、並列処理の分割数に応じた実行時間の具体例を示す説明図である。 図15は、実施の形態2にかかるアドホック接続での並列処理制御システム100の実行状態を示す説明図である。 図16は、実施の形態3にかかるマルチコアプロセッサシステムにおける並列処理制御システム100の実行状態を示す説明図である。 図17は、スケジューラ302による並列処理の開始処理を示すフローチャートである。 図18は、スケジューラ302による負荷分散プロセスにおける並列処理制御処理を示すフローチャートである。 図19は、データ保護処理を示すフローチャートである。 図20は、仮想メモリ設定処理を示すフローチャートである。
以下に添付図面を参照して、本発明にかかる並列処理制御プログラム、情報処理装置、および並列処理制御方法の好適な実施の形態を詳細に説明する。
(実施の形態1の概要説明)
図1は、実施の形態1にかかる並列処理制御システム100に含まれる装置群を示すブロック図である。並列処理制御システム100は、オフロードサーバ101と、基地局102と、端末装置103とを有している。オフロードサーバ101と、基地局102とは、ネットワーク104で接続されており、基地局102と、端末装置103とは、無線通信105で接続されている。
オフロードサーバ101は、端末装置103の処理を代わりに実行する装置である。具体的には、オフロードサーバ101は、端末装置103を擬似的に動作できる環境を有し、前述の環境上で端末装置103の処理を代わりに実行する。環境などのソフトウェアについては、図3にて後述する。
基地局102は、端末装置103との間で無線通信を行い、他の端末との通話、通信を中継する装置である。また、基地局102は複数存在し、複数の基地局102と端末装置103で携帯電話網を形成している。また、基地局102は、ネットワーク104を通して、端末装置103とオフロードサーバ101との通信を中継する。
具体的には、基地局102は、端末装置103から無線通信105によって受信したデータを、ネットワーク104によってオフロードサーバ101に送信する。端末装置103からオフロードサーバ101への通信回線はアップリンクとなる。また、基地局102は、オフロードサーバ101から無線通信105によって受信したパケットデータを、無線通信105によって端末装置103に送信する。オフロードサーバ101から端末装置103への通信回線はダウンリンクとなる。
端末装置103は、利用者が並列処理制御システム100を利用するために使用される装置である。具体的には、端末装置103は、ユーザインターフェイス機能を有し、利用者からの入出力を受け付ける。たとえば、並列処理制御システム100がWebメールのサービスを提供する場合、オフロードサーバ101は、メール処理を行い、端末装置103は、Webブラウザを実行する。
(実施の形態1にかかる端末装置103のハードウェア)
図2は、実施の形態1にかかる端末装置103のハードウェアを示すブロック図である。図2において、端末装置103は、CPU201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、を有する。また、端末装置103は、フラッシュROM204と、フラッシュROMコントローラ205と、フラッシュROM206と、を有する。また、端末装置103は、ユーザやその他の機器との入出力装置として、ディスプレイ207と、I/F(Interface)208と、キーボード209と、を有する。また、各部はバス210によってそれぞれ接続されている。
ここで、CPU201は、端末装置103の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。フラッシュROM204は、OS(Operating System)などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、端末装置103は、I/F208によって新しいOSを受信し、フラッシュROM204に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ205は、CPU201の制御に従ってフラッシュROM206に対するデータのリード/ライトを制御する。フラッシュROM206は、フラッシュROMコントローラ205の制御で書き込まれたデータを記憶する。データの具体例としては、端末装置103を使用するユーザがI/F208を通して取得した画像データ、映像データなどである。フラッシュROM206は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ207は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ207は、たとえば、TFT液晶ディスプレイなどを採用することができる。
I/F208は、無線通信105を介して基地局102に接続されている。基地局102を経由して、I/F208は、インターネットなどのネットワーク104に接続され、ネットワーク104を介してオフロードサーバ101等に接続される。そして、I/F208は、無線通信105と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F208には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード209は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード209は、タッチパネル式の入力パッドやテンキーなどであってもよい。
また、図示していないが、オフロードサーバ101のハードウェアとしては、CPU、ROM、RAMを有する。また、オフロードサーバ101は、記憶装置として、磁気ディスクドライブ、光ディスクドライブを有してもよい。磁気ディスクドライブ、光ディスクドライブは、オフロードサーバ101のCPUの制御によって、データを記憶したり、読み込んだりする。
図3は、並列処理制御システム100のソフトウェアを示す説明図である。図3に示すソフトウェアは、端末OS301と、スケジューラ302と、帯域監視部303と、プロセス304と、スレッド305_0〜スレッド305_3と、サーバOS306と、端末エミュレータ307と、仮想メモリ監視フィードバック308とである。スレッド305_0〜スレッド305_3は、プロセス304内のスレッドである。前述のソフトウェアがアクセスする記憶領域として、実メモリ309と、仮想メモリ310がRAM203、オフロードサーバ101のRAM等に確保されている。
また、端末OS301〜プロセス304、スレッド305_0は、端末装置103にて実行され、プロセス304、スレッド305_1〜スレッド305_3、サーバOS306〜仮想メモリ監視フィードバック308は、オフロードサーバ101にて実行される。
端末OS301は、端末装置103を制御するソフトウェアである。具体的には、端末OS301は、スレッド305_0等が使用するライブラリを提供する。また、端末OS301は、ROM202、RAM203などのメモリの管理を行う。
スケジューラ302は、端末OS301が提供する機能の一つであり、スレッドやプロセスに設定されている優先度等に基づいて、CPU201に割り当てるスレッドを決定するソフトウェアである。定められた時刻になった場合、スケジューラ302は、ディスパッチが決定されたスレッドをCPU201に割り当てる。また、実施の形態1にかかるスケジューラ302は、並列処理が可能であり、並列処理の粒度が異なる実行オブジェクトが複数存在する場合、最適な実行オブジェクトを選択し、実行してプロセス304を生成する。並列処理の粒度については、図7にて詳しく記述する。
帯域監視部303は、ネットワーク104、無線通信105の帯域を監視するソフトウェアである。具体的には、帯域監視部303は、Pingを発行し、ダウンリンクとアップリンクの速度を測定し、変化があった場合にスケジューラ302に通知する。
具体的な変化としては、たとえば、帯域監視部303は、前回からの帯域の変化分が一定の閾値以上であった場合に、変化があったとして判断してもよい。または、並列処理制御システム100が取り得る最広帯域をブロックに分割し、ブロックを移動した場合、帯域監視部303は、変化があったとして判断してもよい。具体的に、最広帯域が100[Mbps]であった場合、帯域を3分割し、100〜67[Mbps]を広帯域、67〜33[Mbps]を中帯域、33〜0[Mbps]を狭帯域とする。帯域監視部303は、広帯域→中帯域、中帯域→狭帯域など、分割されたブロックを移動した際に、変化があったとして判断してもよい。
プロセス304は、CPU201がRAM203等に読み込まれた実行オブジェクトを実行することによって生成される。プロセス304の内部には、スレッド305_0〜スレッド305_3が存在し、スレッド305_0〜スレッド305_3は並列処理を実行している。また、プロセス304は、負荷分散を行うことが可能である。
具体的には、端末装置103は、実行オブジェクトを無線通信105、ネットワーク104を通じてオフロードサーバ101に送信し、オフロードサーバ101は、スレッド305_1〜スレッド305_3を生成する。これにより、プロセス304は、端末装置103とオフロードサーバ101とで、負荷分散された状態で実行される。以下、負荷分散が可能なプロセスを、負荷分散プロセスと呼称する。また、端末装置103で実行中のスレッド305_0は、実メモリ309にアクセスする。オフロードサーバ101で実行中のスレッド305_1〜スレッド305_3は、仮想メモリ310にアクセスする。
サーバOS306は、オフロードサーバ101を制御するソフトウェアである。具体的には、サーバOS306は、スレッド305_1〜スレッド305_3等が使用するライブラリを提供する。また、サーバOS306は、オフロードサーバ101のROM、RAMなどのメモリの管理を行う。
端末エミュレータ307は、端末装置103を模倣するソフトウェアであり、端末装置103で実行可能な実行オブジェクトを、オフロードサーバ101で実行可能とするソフトウェアである。具体的には、端末エミュレータ307は、実行オブジェクトに記載されたCPU201への命令または端末OS301のライブラリへの命令を、オフロードサーバ101のCPUへの命令またはサーバOS306のライブラリへの命令に置き換えて実行する。
図3に示す状態では、オフロードサーバ101は、端末エミュレータ307上でスレッド305_1〜スレッド305_3を実行している。端末エミュレータ307を実行することで、並列処理制御システム100は、CPU201をマスタCPUと想定し、オフロードサーバ101が仮想CPU311をスレーブCPUと想定した、マルチコアプロセッサシステムの様相を示すことになる。
仮想メモリ監視フィードバック308は、仮想メモリ310に書き込まれたデータを実メモリ309に書き戻すソフトウェアである。具体的には、仮想メモリ監視フィードバック308は、仮想メモリ310に対するアクセスを監視し、仮想メモリ310に書き込まれたデータを、ダウンリンクを通じて実メモリ309に書き戻す。また、仮想メモリ310は、実メモリ309と同じアドレスを記憶する領域であり、定められたタイミングによって、仮想メモリ監視フィードバック308が前述の書き戻す処理を行う。定められたタイミングについては、プロセス304の並行処理の粒度によって異なる。書き戻すタイミングについては、図9〜図12にて後述する。
図4は、並列処理の実行状態と実行時間に関する説明図である。符号401で示す説明図は、CPU201をマスタCPUとし、オフロードサーバ101の端末エミュレータ307による仮想CPU311をスレーブCPUとした状態におけるプロセス304の実行状態を示している。符号402で示す説明図は、プロセス304を符号401で示す実行状態で実行した際の実行時間を示している。
符号401で示す説明図にて、CPU201は、ミドルウェア/ライブラリなどを利用して、負荷分散プロセスとなるプロセス304に含まれるスレッド305_0を実行している。また、プロセス304に含まれるスレッド305_1について、CPU201は、端末OS301のカーネルから、プロセッサ間通信によって、仮想CPU311に通知する。通知される内容は、スレッド305_1のスレッドコンテキストのメモリダンプでもよいし、スレッド305_1を実行するために要求される開始アドレス、引数の情報、スタックメモリサイズ等を通知してもよい。通知された内容に従って、仮想CPU311は、スレーブカーネルとスケジューラ403によって、スレッド305_1をナノスレッドとして割り当てる。
符号402で示す説明図では、プロセス304の実行時間を示している。時刻t0にて、CPU201は、プロセス304を実行開始する。時刻t0から時刻t1の区間では、CPU201は、並列処理を行うことができない、逐次処理が要求される処理を実行している。時刻t1にて、CPU201は、並列処理を行える処理を検出すると、時刻t1から時刻t2にかけて、並列処理を実行するのに要求される情報を前述のプロセッサ間通信にて仮想CPU311に通知する。時刻t2から時刻t3にかけて、CPU201と仮想CPU311は、プロセス304を並列実行する。
時刻t3にて、並列実行が終了すると、仮想CPU311は、時刻t3から時刻t4にかけて、実行した並列処理の結果をプロセッサ間通信によって、CPU201に通知する。時刻t4から時刻t5にかけて、CPU201は、再び逐次処理を実行し、プロセス304の処理を終了する。結果、プロセス304の実行時間T(N)となる時刻t0から時刻t5までの時間は、下記(1)式で求めることができる。
T(N)=(S+(1−S)/N)・T(1)+τ…(1)
ただし、Nを負荷分散プロセスを実行可能なCPU数とし、T(N)をCPU数がN個の場合における負荷分散プロセスの実行時間とし、Sを負荷分散プロセスにて、逐次処理を行う割合を示し、τを並列処理に伴う通信時間を示している。以下、NをCPU数、Sを逐次処理の割合、τを通信時間と称する。なお、逐次処理の割合Sを用いると、並列処理の割合は100−S[%]となる。
図5は、並列処理の割合とCPU数に関する処理性能を示した説明図である。グラフ501の横軸はCPU数Nであり、縦軸はCPU数N=1を基準にした処理性能比を示している。通信時間τが0であり、通信にかかるオーバーヘッドが発生しない理想的な状態の場合、逐次処理の割合S=80[%]、90[%]のいずれも、CPU数が増加するにつれ、処理性能が向上している。
しかし、通信時間τ=0.1T(1)であり、通信にかかるオーバーヘッドが発生する場合、逐次処理の割合S=90[%]において、CPU数2個〜4個におけるプロット点が、処理性能比1を下回る矩形502内に存在している。このように、通信にかかるオーバーヘッドが発生する場合、並列処理または逐次処理の割合によっては、並列処理を実行することで、処理性能比が悪化する可能性がある。
(並列処理制御システム100の機能)
次に、並列処理制御システム100の機能について説明する。図6は、並列処理制御システム100の機能を示すブロック図である。並列処理制御システム100は、測定部602と、算出部603と、選択部604と、設定部605と、検出部606と、通知部607と、格納部608と、実行部609と、実行部610と、を含む。この制御部となる機能(測定部602〜実行部610)は、記憶装置に記憶されたプログラムをCPU201が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM203、フラッシュROM204、フラッシュROM206などである。または、I/F208を経由して他のCPUが実行することにより、その機能を実現してもよい。
また、端末装置103は、ROM202、RAM203等の記憶装置に格納された実行オブジェクト601にアクセス可能である。また、各機能部のうち、測定部602〜実行部609は、マスタCPUとなるCPU201を有する端末装置103の機能であり、実行部610は、スレーブCPUとなる仮想CPU311を有するオフロードサーバ101の機能となる。
測定部602は、接続元装置と接続先装置との間の帯域を測定する機能を有する。たとえば、測定部602は、接続元装置となる端末装置103と、接続先装置となるオフロードサーバ101との間の帯域σを測定する。具体的に、測定部602は、Pingをオフロードサーバ101に送信し、Pingの応答時間によって、ダウンリンクとアップリンクを測定する。測定部602は、帯域監視部303の一部の機能となる。なお、抽出されたデータは、CPU201のレジスタ、キャッシュメモリ、またはRAM203などの記憶領域に記憶される。
算出部603は、接続元装置内の接続元プロセッサおよび接続先装置内の接続先プロセッサで並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、測定部602によって測定された帯域に基づいて算出する機能を有する。並列処理の粒度とは、特定の処理を並列実行する際に、分割された処理量を示している。粒度が細かくなるほど、分割された処理量が少なくなり、粒度が粗くなるほど、分割された処理量が多くなる。たとえば、粒度が細かい並列処理としては、ステートメント単位の並列処理が存在し、粒度が粗い並列処理としては、スレッド単位、関数単位等の並列処理が存在する。また、粒度の中程度の並列処理として、ループによる繰り返しの並列処理が存在する。
たとえば、算出部603は、CPU201と仮想CPU311で並列処理が可能であり並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、帯域σに基づいて算出する。なお、具体的な算出方法として、算出部603は、並列処理の処理時間に、並列処理のオーバーヘッドとなる通信量を帯域σで除算した値を加算することで、実行時間を算出する。または、帯域σが狭帯域となるとオーバーヘッドが顕著になるため、たとえば、算出部603は、特定の閾値σ0を設け、帯域σが閾値σ0を下回った場合に、並列処理の処理時間に通信量を帯域σで除算した値を加算することで、実行時間を算出してもよい。
また、算出部603は、はじめに帯域と並列処理にかかる通信量とによって通信時間を算出する。続けて、算出部603は、並列処理を逐次実行した場合の処理時間と並列処理のうち逐次処理の割合と並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を実行オブジェクトごとに算出する。最後に、算出部603は、通信時間と並列実行する場合の処理時間とを加算することによって、複数の実行オブジェクトの各々の実行時間を算出してもよい。
並列処理のうち逐次処理の割合とは、特定の処理のうち、並列実行が可能な部分を除いた割合である。また、算出部603は、特定の処理のうち、並列実行が可能な割合を用いて算出してもよい。実施の形態1にかかる並列処理制御システム100では、逐次処理の割合Sを用いて算出している。また、算出された通信時間は、(1)式における、第2項となる通信時間τと一致し、算出された並列実行する場合の処理時間は、(1)式における、第1項となる(S+(1−S)/N)・T(1)と一致する。
たとえば、算出部603は、並列処理の粒度が粗である実行オブジェクトについて算出する場合を想定する。帯域σが10[Mbps]であり、並列処理にかかる通信量が76896[ビット]である場合、算出部603は、通信時間を通信量/帯域σ=約3.0[ミリ秒]と算出する。また、逐次実行した場合の処理時間を7.5[ミリ秒]とし、逐次処理の割合Sを0.01[%]とし、並列実行が可能な最大の分割数N_Maxをがである場合、算出部603は、並列実行する場合の処理時間を3.8[ミリ秒]と算出する。最後に、算出部603は、粗粒度実行オブジェクトの実行時間を3.0+3.8=6.8[ミリ秒]と算出する。算出部603は、同様に、他の粒度に関する実行オブジェクトの実行時間を算出する。
また、算出部603は、初めに、並列実行する場合の処理時間を逐次実行した場合の処理時間と逐次処理の割合と最大の分割数以下である並列実行の数によって算出する。続けて、算出部603は、通信時間と並列実行する場合の処理時間とを加算することによって、複数の実行オブジェクトの各々の並列実行の数ごとの実行時間を算出してもよい。
たとえば、算出部603は、並列処理の粒度が粗である実行オブジェクトにおいて、最大の分割数が2であれば、並列実行の数が1であるときの実行時間を7.5[ミリ秒]、並列実行の数が2であるとき(1)式より、実行時間を6.8[ミリ秒]、と算出する。なお、算出された結果は、CPU201のレジスタ、キャッシュメモリ、またはRAM203などの記憶領域に記憶される。
選択部604は、算出部603によって算出された各々の実行時間の長さに基づいて、複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する機能を有する。また、選択部604は、各々の実行時間の長さのうち、最短となる実行オブジェクトを、実行対象の実行オブジェクトとして選択してもよい。たとえば、選択部604は、算出された実行オブジェクトの実行時間が7.5[ミリ秒]、6.8[ミリ秒]であれば、最短となる6.8[ミリ秒]となった実行オブジェクトを選択してもよい。
また、最短以外の選択方法として、選択後、実行オブジェクトを切り替えることになると、切り替えのオーバーヘッドが発生するため、選択部604は、切り替えのオーバーヘッドを加算して選択してもよい。たとえば、現在選択中の実行オブジェクトと他の実行オブジェクトの実行時間が僅差で他の実行オブジェクトの実行時間が最短となっている場合を想定する。選択部604は、切り替えにかかるオーバーヘッド時間を他の実行オブジェクトの実行時間に加算した際に、選択中の実行オブジェクトの実行時間を超えた場合は、選択中の実行オブジェクトの実行時間を選択してもよい。
また、選択部604は、検出部606によって携帯電話網を経由して接続されている場合に、並列処理を実行開始することが検出された場合、実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択してもよい。具体的には、選択部604は、検出された場合に、粗粒度実行オブジェクトを選択する。なお、選択された結果は、CPU201のレジスタ、キャッシュメモリ、またはRAM203などの記憶領域に記憶される。
設定部605は、選択部604によって選択された実行対象の実行オブジェクトを接続元プロセッサおよび接続先プロセッサで協動して実行可能な状態に設定する機能を有する。ここで、協動とは、接続元プロセッサおよび接続先プロセッサが協同して動くことを示している。たとえば、選択部604によって並列処理の粒度を粗とする粗粒度実行オブジェクトが選択された場合、設定部605は、CPU201と仮想CPU311が粗粒度実行オブジェクトを実行可能な状態に設定する。
具体的な設定内容として、CPU201は、仮想CPU311に実行対象となった粗粒度実行オブジェクトのデータを転送し、粗粒度実行オブジェクトを実行可能な状態にする。また、他の設定内容として、オフロードサーバ101に端末エミュレータ307が起動していない場合、CPU201は、端末エミュレータ307を起動させ、粗粒度実行オブジェクトを実行可能な状態にする。
また、設定部605は、実行対象の実行オブジェクトを、接続元装置および接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ最大の分割数となるプロセッサ群で協動して実行可能な状態に設定してもよい。特定の接続元プロセッサとは、端末装置103がマルチコアを有していた場合に、マスタとなるプロセッサのことであり、特定の接続先プロセッサとは、オフロードサーバ101がマルチコアを有していた場合に、マスタとなるプロセッサのことである。また、オフロードサーバ101のマスタとなるプロセッサとしては、たとえば、端末装置103の測定部602によるPingに対して、複数のプロセッサのうち、Pingの応答を行うプロセッサである。
たとえば、接続元装置のプロセッサが1個であり、接続先装置のプロセッサが4個である場合、最大の分割数が4であった場合を想定する。設定部605は、端末装置103のCPU201と、オフロードサーバ101のマスタCPUを含む3つのCPU、計4つのCPUで協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
また、設定部605は、実行対象の実行オブジェクトを、接続元装置および接続先装置のプロセッサ群のうち、実行対象の実行オブジェクトにおける並列実行の数となるプロセッサ群で協動して実行可能な状態に設定してもよい。また、プロセッサ群には、特定の接続元プロセッサおよび特定の接続先プロセッサを含む。
たとえば、接続元装置のプロセッサが1個であり、接続先装置のプロセッサが4個である場合、最大の分割数が4であり、実行対象の実行オブジェクトにおける並列実行の数が3となった場合を想定する。設定部605は、端末装置103のCPU201と、オフロードサーバ101のマスタCPUを含む2つのCPU、計3つのCPUで、協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
検出部606は、選択部604による選択によって、実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する機能を有する。たとえば、検出部606は、並列処理の粒度が細である細粒度実行オブジェクトから並列処理の粒度が中である中粒度実行オブジェクトに変更した場合、または、中粒度実行オブジェクトから粗粒度実行オブジェクトに変更した場合である。
また、検出部606は、実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、帯域が減少した状態を検出してもよい。具体的には、検出部606は、粗粒度実行オブジェクトが選択されている場合に、帯域σが減少した状態を検出する。また、帯域σが減少した状態として、一定時間ごとの平均値をとり、前回の平均値の帯域より下回った場合に、検出部606は、帯域が減少したとして検出してもよい。または、特定の閾値を下回った場合に、検出部606は、帯域が減少したとして検出してもよい。
また、検出部606は、接続元装置と接続先装置とが携帯電話網を経由して接続されている場合に、並列処理を実行開始することを検出してもよい。具体的には、検出部606は、端末装置103が携帯電話網の一部である基地局102を経由し、オフロードサーバ101に接続されている場合に、並列処理を実行開始することを検出する。なお、検出された結果は、CPU201のレジスタ、キャッシュメモリ、またはRAM203などの記憶領域に記憶される。
通知部607は、検出部606によって粒度が粗い新たな実行対象の実行オブジェクトが選択されたことが検出された場合、接続先装置に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を接続先装置に通知する機能を有する。たとえば、通知部607は、オフロードサーバ101の仮想メモリ310に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を、オフロードサーバ101に通知する。
また、通知部607は、検出部606によって最も粒度が粗い実行オブジェクトが選択されている場合に、帯域が減少した状態が検出された場合、接続先装置に保持された実行対象の実行オブジェクトによる処理結果の送信要求を接続先装置に通知する機能を有する。たとえば、通知部607は、検出された場合に、オフロードサーバ101の仮想メモリ310に保持された変更前となる実行対象の実行オブジェクトによる処理結果の送信要求を、オフロードサーバ101に通知する。
格納部608は、通知部607によって通知された送信要求による処理結果を接続元装置の記憶装置に格納する機能を有する。たとえば、格納部608は、送信要求による処理結果を実メモリ309に格納する。
実行部609、実行部610は、設定部605によって実行可能な状態に設定された実行対象の実行オブジェクトを実行する機能を有する。たとえば、粗粒度実行オブジェクトが実行対象の実行オブジェクトとなった場合、実行部609と、実行部610は、各装置で粗粒度実行オブジェクトを実行する。
図7は、並列処理制御システム100の設計時における概要を示す説明図である。符号701に示すブロック図では、実行オブジェクトの生成の様子を示し、符号702に示すブロック図は、実行オブジェクトの詳細を示している。
符号701に示すブロック図にて、並列コンパイラは、実行されるとプロセス304となるソースコードから、構造解析を行いつつ、実行オブジェクトを生成する。並列コンパイラは、並列処理の粒度によって、粗粒度に対応する粗粒度実行オブジェクト703、中粒度に対応する中粒度実行オブジェクト704、細粒度に対応する細粒度実行オブジェクト705を生成する。また、並列コンパイラは、粗粒度実行オブジェクト703の構造解析結果706、中粒度実行オブジェクト704の構造解析結果707、細粒度実行オブジェクト705の構造解析結果708を生成する。
また、構造解析結果706〜構造解析結果708には、構造解析で得た、処理全体での逐次処理の割合Sと、並列処理で発生するデータ量Dと、並列処理の発生する頻度Xと、並列実行が可能な最大の分割数N_Maxが記載されている。以下の説明では、粗粒度を示す接尾記号をc、中粒度を示す接尾記号をm、細粒度を示す接尾記号をfとする。
次に並列処理の各粒度について説明する。粗粒度の並列処理とは、プログラム中の一連の処理の固まり、ブロックについて、一連の処理ブロック間に依存関係がない場合、ブロックを並列実行することである。中粒度の並列処理とは、ループ処理にて、ループの繰り返し部分に依存関係がない場合、繰り返し部分を並列実行することである。細粒度の並列処理とは、ステートメント間に依存関係がない場合、各ステートメントを並列実行することである。各粒度、構造解析結果706〜構造解析結果708については、後述する図8にて具体例を示す。
符号702に示すブロック図では、粗粒度実行オブジェクト703〜細粒度実行オブジェクト705の詳細を示している。粗粒度実行オブジェクト703は、プログラム中の一連のブロックを並列実行するように記載されている。中粒度実行オブジェクト704は、粗粒度実行オブジェクト703におけるプログラム中の一連のブロックを並列実行するように記載された状態で、ブロック内のループ処理について、さらに並列実行するように記載されている。細粒度実行オブジェクト705は、プログラム中の一連のブロックを並列実行し、さらにブロック内のループ処理を並列実行する状態で、さらに、ステートメントを並列実行するように記載されている。
このように、中粒度実行オブジェクト704、細粒度実行オブジェクト705は、該当の粒度より粒度が粗い並列処理を実行してもよいし、しなくてもよい。前述の例では粒度が粗い並列処理を実行していたが、たとえば、中粒度実行オブジェクト704は、プログラム中の一連のブロックを並列実行せず、ループ処理を並列実行するように生成されてもよい。
また、粒度が細かい実行オブジェクトは、該当の粒度より粒度が粗い並列処理を実行できるため、粒度が細かいほど、並列処理をより分割することができる分、通信量は増大する。したがって、広帯域では通信量の多い粒度が細かい実行オブジェクトを実行し、狭帯域では通信量の少ない粒度が粗い実行オブジェクトを実行することで、並列処理制御システム100は帯域に応じて最適な並列処理を実行でき、処理性能を向上することができる。
図8は、各粒度の実行オブジェクトの具体例を示す説明図である。図8では、動画像の特定のフレームを復号化する際の処理について、粗粒度実行オブジェクト703〜細粒度実行オブジェクト705、また、構造解析結果706〜構造解析結果708の例を示している。
粗粒度実行オブジェクト703は、復号化を行う関数を並列実行するように生成されている。具体的には、粗粒度実行オブジェクト703は、端末装置103等によって、“decode_video_frame()”関数を含むブロックと“decode_audio_frame()”関数を含むブロックを並列実行するプロセスを生成する。
以下、構造解析結果706の値について説明する。並列実行可能なブロックが2つあるため、並列実行が可能な最大の分割数Nc_Maxは2となる。また、“decode_video_frame()”関数内に10000ステートメント存在し、うち、逐次処理が1ステートメントであった場合、逐次処理の割合Scは1/10000=0.00001=0.01[%]となる。また、データ量Dcは、“decode_video_frame()”関数の引数のデータサイズとなる。頻度Xcは、引数を渡す際の1回である。具体的にDcは、引数の“dst”、“src−>video”のサイズ、“sizeof(src−>video)”の計算結果のサイズと、第2引数の実データである第3引数の値とを合計した値になる。
ここで、ディスプレイ207が320×240ピクセルであるQVGA(Quarter Video Graphics Array)が採用されており、画像圧縮処理の単位となるマクロブロックが8×8ピクセルである場合を想定する。このとき、QVGAであれば、マクロブロックは(320×240)/(8×8)=1200個存在することになる。説明を簡略化するため、1つのマクロブロックの平均サイズが8[バイト]となる場合を想定する。したがって、“src−>video”は、1200個のマクロブロックを含んでおり、“sizeof(src−>video)”は少なくとも1200×8[バイト]となる。以上より、Dcは(4×3+1200×8)×8=76896[ビット]となる。
また、CPU数N=1の実行時間T(1)については、並列コンパイラは、たとえば、対象のステップ数と、CPU201の1命令のクロック時間から算出してもよいし、プロファイラに実行させた値を格納してもよい。図8の例では、実行時間T(1)=7.5[ミリ秒]とする。また、(1)式において、端末装置103は、通信時間τをデータ量D・頻度X/帯域σにて算出する。端末装置103は、帯域σを25[Mbps]とし、CPU数N=2の実行時間を算出すると、下記のような結果を得る。
(0.0001+(1−0.0001)/2)×0.0075+76896/(25×1000×1000)
≒0.0068=6.8[ミリ秒]
T(1)=7.5[ミリ秒]、T(2)=6.8[ミリ秒]となるため、粗粒度の場合、CPU数N=2で並列処理を行った方が早く処理を実行することができる。
中粒度実行オブジェクト704は、復号化を行う関数の中で、マクロブロックを処理するループ処理を並列実行するように生成されている。具体的には、中粒度実行オブジェクト704は、ループ部分となる変数iが0から1200未満までのループ処理を、変数iごとに並列実行するプロセスを生成する。たとえば、生成されたプロセスは、変数iが0から599までを実行する処理と、変数iが600から1199までを実行する処理と、のように並列実行する。
以下、構造解析結果707の値について説明する。ループの繰り返し数は1200であるため、並列実行が可能な最大の分割数Nm_Maxは1200となる。また、ループ処理の中に100ステートメント存在し、そのうち、中粒度実行オブジェクト704内に示した逐次処理が1ステートメントであった場合、逐次処理の割合Smは1/100=0.01=1[%]となる。また、データ量Dmは、1個のマクロブロックのサイズとなり、8×8=64[ビット]である。頻度Xmはマクロブロックのデータを転送する1200回である。
また、CPU数N=1の実行時間T(1)は、2.0[ミリ秒]とする。端末装置103は、帯域σを50[Mbps]とし、CPU数N=2の実行時間を算出すると、下記のような結果を得る。
(0.01+(1−0.01)/2)×0.0020+600×8×8/(50×1000×1000)
≒0.0018=1.8[ミリ秒]
なお、上記算出式において、CPU数N=2の場合、自身が処理する分のマクロブロックのデータ転送を行わなくてよいため、データの転送頻度を1200×(1/2)=600としている。端末装置103は、CPU数N=3の実行時間を算出すると、下記のような結果を得る。
(0.01+0.99/3)×0.0020+800×8×8/(50×1000×1000)
≒0.0017=1.7[ミリ秒]
同様に、自身が処理する分のマクロブロックのデータ転送を行わないことを考慮し、データの転送頻度を1200×(2/3)=800としている。以上より、T(1)=2.0[ミリ秒]、T(2)=1.8[ミリ秒]、T(3)=1.7[ミリ秒]となるため、中粒度の場合、CPU数N=3で並列処理を行った方が早く処理を実行することができる。
また、中粒度の並列処理については、ループ処理を並列処理するため、たとえば、ループ処理の内部に別のループ処理が存在する場合、2種類の中粒度実行オブジェクトを生成することができる。
細粒度実行オブジェクト705は、マクロブロックを処理する中で、各ステートメントを並列実行するように生成されている。具体的には、中粒度実行オブジェクト704は、“a=1;”、“b=1;”、“c=1;”という処理を並列実行するプロセスを生成する。
以下、構造解析結果708の値について説明する。依存関係のないステートメントは3であるため、並列実行が可能な最大の分割数Nf_Maxは3となる。また、逐次処理の割合Sfは、依存関係のない3ステートメントと依存関係のある1ステートメントから、1/4=0.25=25[%]である。データ量Dfは、一つの変数のサイズである32[ビット]であり、頻度は3回存在するため、3となる。
また、CPU数N=1の実行時間T(1)は、50[ナノ秒]とする。端末装置103は、帯域σを25[Mbps]とし、CPU数N=3の実行時間を算出すると、下記のような結果を得る。
(0.25+(1−0.25)/3)×50×10^(−9)+32×3/(75×1000×1000)
≒1.3×10^(−6)=1.3[マイクロ秒]
以上より、T(1)=50[ナノ秒]、T(3)=1.3[マイクロ秒]となるため、細粒度の場合、並列処理を実行せず逐次処理を行った方が早く処理を実行することができる。
また、細粒度の並列処理については、少なくとも1つの行に、複数の演算子があるようなステートメントが存在すれば、細粒度の並列処理が存在することになる。したがって、細粒度の並列処理の出現頻度は高い。たとえば、粗粒度、中粒度の並列処理の内部において、細粒度の並列処理が発生することも多い。
また、図7で説明したように、粒度の細かい実行オブジェクトは、該当の粒度より粒度が粗い並列処理を実行することができる。たとえば、中粒度実行オブジェクト704にて、粗粒度の並列処理も行われている場合、最大の分割数は、“decode_video_frame()”関数内で示すNm_Max=1200と、“decode_audio_frame()”関数での分割数を合計した数となる。同様に、細粒度実行オブジェクト705にて、中粒度の並列処理も行われている場合、最大の分割数は、1200×3=3600となる。
図9は、細粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。グラフ901は、横軸に時刻t、縦軸に帯域σを示している。図9に示す並列処理制御システム100は、グラフ901における広帯域を獲得した領域902の状態である。帯域監視部303によって広帯域を獲得したことを検出した並列処理制御システム100では、細粒度実行オブジェクト705によって実行されたプロセス304にて、負荷分散を行う。
具体的には、端末装置103がプロセス304内のスレッド903_0を実行し、オフロードサーバ101が、プロセス304内のスレッド903_1〜スレッド903_3を実行する。細粒度実行オブジェクト705によるプロセス304を実行している場合、仮想メモリ310は、ダイナミック同期仮想メモリ904に設定される。ダイナミック同期仮想メモリ904は、スレッド903_1〜スレッド903_3による書き込みに対し、実メモリ309と常に同期が行われる状態である。
図10は、中粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。図10に示す並列処理制御システム100は、グラフ901における中帯域を獲得した領域1001、または領域1002の状態である。中帯域とは、具体的には、全体の帯域に対して中間程度の領域であり、全体の帯域が100[Mbps]であれば、中帯域は、たとえば、33〜67[Mbps]としてもよい。帯域監視部303によって中帯域を獲得したことを検出した並列処理制御システム100では、中粒度実行オブジェクト704によって実行されたプロセス304にて、負荷分散を行う。
具体的には、端末装置103がプロセス304内のスレッド1003_0を実行し、オフロードサーバ101が、プロセス304内のスレッド1003_1を実行する。中粒度実行オブジェクト704によるプロセス304を実行している場合、仮想メモリ310は、バリア同期仮想メモリ1004に設定される。バリア同期仮想メモリ1004は、スレッド1003_1での部分処理が終わるごとに、実メモリ309と同期が行われる。
また、矢印1005で示すように、粒度が細粒度から中粒度に切り替わった場合、並列処理制御システム100は、ダイナミック同期仮想メモリ904の内容を実メモリ309に全て反映する。これにより、粒度の変更が起こっても仮想メモリ310を保護することができる。
図11は、粗粒度が選択された場合における並列処理制御システム100の実行状態を示す説明図である。図11に示す並列処理制御システム100は、グラフ901における狭帯域を獲得した領域1101の状態である。帯域監視部303によって狭帯域を獲得したことを検出した並列処理制御システム100では、粗粒度実行オブジェクト703によって実行されたプロセス304にて、負荷分散を行う。
具体的には、端末装置103がプロセス304内のスレッド1102_0、スレッド1102_1を実行し、オフロードサーバ101が、プロセス304内のスレッド1102_2を実行する。粗粒度実行オブジェクト703によるプロセス304を実行している場合、仮想メモリ310は、非同期仮想メモリ1103に設定される。非同期仮想メモリ1103は、スレッド1102_2の起動および終了にて実メモリ309と同期が行われる。
また、矢印1104で示すように、粒度が中粒度から粗粒度に切り替わった場合、並列処理制御システム100は、バリア同期仮想メモリ1004の内容を実メモリ309に全て反映する。これにより、粒度の変更が起こっても仮想メモリを保護することができる。
図12は、無線通信105が遮断された場合における並列処理制御システム100の実行状態を示す説明図である。グラフ901にて、時間1201にて帯域σが0となっている。図12に示す並列処理制御システム100は、グラフ901における狭帯域を獲得した領域1202の状態であり、さらに、帯域σの時間変化(d/dt)σ(t)<0を検出した状態である。帯域監視部303によって帯域σの時間変化(d/dt)σ(t)<0を検出した並列処理制御システム100では、負荷分散を中止し、端末装置103にて粗粒度実行オブジェクト703によるプロセス304を実行する。
具体的には、並列処理制御システム100は、粗粒度が選択された場合に(d/dt)σ(t)<0を検出すると、非同期仮想メモリ1103のデータ内容を実メモリ309に転送する。また、並列処理制御システム100は、オフロードサーバ101で実行していたスレッド1102_2のコンテキスト情報も端末装置103に転送し、端末装置103でスレッド1102_2’として継続して処理を続行する。なお、非同期仮想メモリ1103のデータ内容の転送が無線通信105の回線遮断に間に合わなかった場合、端末装置103は、粗粒度実行オブジェクト703からプロセス304を再度起動し、処理を再開する。
また、オフロードサーバ101上の、端末エミュレータ307、仮想メモリ監視フィードバック308、仮想メモリ310、スレッド1102_2は、無線通信105の遮断と同時に処理を中断する。端末エミュレータ307、仮想メモリ監視フィードバック308、仮想メモリ310、スレッド1102_2は、一定時間オフロードサーバ101上に保持されるが、一定時間経過後、オフロードサーバ101は、メモリ解放を行う。
図13は、並列処理の粒度が粗くなった場合における、データ保護の具体例を示す説明図である。符号1301で示す説明図は、新たな実行オブジェクトが選択される前の状態を示し、符号1302で示す説明図は、新たな実行オブジェクトが選択され、実行対象の実行オブジェクトが変更された状態を示している。また、並列処理の粒度が粗くなる例としては、細粒度実行オブジェクト705から中粒度実行オブジェクト704に変更した場合、または、中粒度実行オブジェクト704から粗粒度実行オブジェクト703に変更した場合である。図13の例では、細粒度実行オブジェクト705から中粒度実行オブジェクト704に変更する場合にて説明する。
符号1301で示す説明図では、並列処理制御システム100は、細粒度実行オブジェクト705を各装置にて実行している。具体的には、端末装置103は、“A=B+C;”、“G=H+I;”、“M=A+D+G+J;”という3ステートメントを実行する。また、オフロードサーバ101は、“D=E+F;”、“J=K+L;”という2ステートメントを実行する。時刻t1にて、端末装置103は、“A=B+C;”を実行し、実メモリ309に処理結果となる“A”の値を格納した状態である。また、時刻t1にて、オフロードサーバ101は、“D=E+F;”を実行し、仮想メモリ310に処理結果となる“D”の値を格納した状態である。
時刻t1にて、実行対象の実行オブジェクトが中粒度実行オブジェクト704に変更され、並列処理制御システム100は、符号1302で示す状態になる。並列処理の粒度が粗くなった結果、分割された処理量が多くなるため、1つの装置に集中して処理を行うようになる。符号1302の状態では、オフロードサーバ101ではどのステートメントも実行せず、端末装置103にて、前述の5つのステートメントを実行する。このとき、オフロードサーバ101は、“G=H+I;”から実行するが、“D”の値は、実メモリ309に存在しないため、“M=A+D+G+J;”を実行することができない。
したがって、端末装置103は、オフロードサーバ101に、変更前となる実行対象の実行オブジェクトの処理結果の送信要求を通知し、オフロードサーバ101は、仮想メモリ310に格納された処理結果を端末装置103に送信する。処理結果を受信した端末装置103は、処理結果を実メモリ309に格納する。これにより、端末装置103は、実行対象の実行オブジェクトの変更後も、処理を続行することができる。
図14は、並列処理の分割数に応じた実行時間の具体例を示す説明図である。図14では、プロセス304の実行時間を150[ミリ秒]とした場合の、並列処理の分割数に応じた実行時間を示している。前提として、プロセス304の並列処理可能な処理の処理時間を100[ミリ秒]、逐次処理部分の処理時間を50[ミリ秒]とする。この場合、逐次処理の割合Sは、67[%]となる。また、プロセス304の並列実行可能な最大の分割数N_Maxを4とする。
次に、帯域σが通信品質1となる場合について、実行時間の具体例を示す。帯域σが通信品質1の状態では、他のCPUにデータを通知するのに10[ミリ秒]かかると想定する。通信品質1の場合におけるプロセス304の実行可能な形態としては、CPU数N=1である実行形態1401、CPU数N=2である実行形態1402、CPU数N=3である実行形態1403、CPU数N=4である実行形態1404である。
実行形態1401でのプロセス304の実行時間T(1)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間100[ミリ秒]=150[ミリ秒]となる。また、実行形態1402でのプロセス304の実行時間T(2)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間50[ミリ秒]+通信時間10[ミリ秒]×2=120[ミリ秒]となる。
同様に、実行形態1403でのプロセス304の実行時間T(3)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間33[ミリ秒]+通信時間10[ミリ秒]×4=123[ミリ秒]となる。同様に、実行形態1404でのプロセス304の実行時間T(4)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間25[ミリ秒]+通信時間10[ミリ秒]×6=135[ミリ秒]となる。以上より、実行形態1401〜実行形態1404のうち、実行形態1402が、最短の実行時間となるため、端末装置103は、CPU数N=2で並列処理を実行する。
続けて、帯域σが通信品質2となる場合について、実行時間の具体例を示す。帯域σが通信品質2の状態では、帯域σが通信品質1の2倍となり、他のCPUにデータを通知するのに5[ミリ秒]かかると想定する。通信品質1の場合におけるプロセス304の実行可能な形態としては、CPU数N=1である実行形態1401、CPU数N=2である実行形態1405、CPU数N=3である実行形態1406、CPU数N=4である実行形態1407である。
実行形態1401でのプロセス304の実行時間T(1)は、前述の通り150[ミリ秒]である。実行形態1405でのプロセス304の実行時間T(2)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間50[ミリ秒]+通信時間5[ミリ秒]×2=110[ミリ秒]となる。
同様に、実行形態1406でのプロセス304の実行時間T(3)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間33[ミリ秒]+通信時間5[ミリ秒]×4=103[ミリ秒]となる。同様に、実行形態1407でのプロセス304の実行時間T(4)は、逐次処理の処理時間50[ミリ秒]+並列処理の処理時間25[ミリ秒]+通信時間5[ミリ秒]×6=105[ミリ秒]となる。以上より、実行形態1401、実行形態1405〜実行形態1407のうち、実行形態1406が、最短の実行時間となるため、端末装置103は、CPU数N=3で並列処理を実行する。
(実施の形態2の概要説明)
実施の形態1にかかる並列処理制御システム100は、オフロードサーバ101と端末装置103を有していた。実施の形態2にかかる並列処理制御システム100は、他の端末装置がオフロードサーバ101の代わりとなり、並列処理を行う。端末装置103と他の端末装置は、アドホック接続により接続されている。実施の形態2にかかる並列処理制御システム100の機能については、図6にて示したオフロードサーバ101が有する機能を、他の端末装置が有することになる。後述する図15では、実施の形態1にかかる端末装置103を端末装置103#0とし、実施の形態1にかかるオフロードサーバ101の機能を有する装置を端末装置103#1、端末装置103#2としている。
また、端末装置103#0と端末装置103#1が、それぞれ独立の携帯端末でよいし、端末装置103#0と端末装置103#1で、1台のセパレート型の携帯端末を形成してもよい。たとえば、端末装置103#0が主にディスプレイとして動作し、端末装置103#1のディスプレイがタッチパネルとなりキーボードとして動作する。ユーザは、端末装置103#0と端末装置103#1を物理的に接続したり、端末装置103#0と端末装置103#1を切り離したりして、使用してもよい。
また、実施の形態2にかかる検出部606は、接続元装置と接続先装置とがアドホック接続されている場合に、並列処理を実行開始することを検出してもよい。具体的には、検出部606は、接続元装置となる端末装置103#0と、接続先装置となる端末装置103#1がアドホック接続されている場合に、並列処理を実行開始することを検出する。なお、検出された結果は、端末装置103#0のレジスタ、キャッシュメモリ、端末装置103#0のRAMに記憶される。
また、実施の形態2にかかる選択部604は、実施の形態2にかかる検出部606によって並列処理を実行開始することが検出された場合、実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択してもよい。具体的には、選択部604は、アドホック接続時に並列処理を実行開始することが検出された場合、細粒度実行オブジェクト705を選択する。なお、選択された結果は、端末装置103#0のレジスタ、キャッシュメモリ、端末装置103#0のRAMに記憶される。
図15は、実施の形態2にかかるアドホック接続での並列処理制御システム100の実行状態を示す説明図である。図15では、端末装置103#0〜端末装置103#2が無線通信105によってアドホック接続を行っている。また、端末装置103#0上のソフトウェアとして、端末OS301#0、スケジューラ302#0、帯域監視部303#0が実行されている。端末装置103#1、端末装置103#2でも同様のソフトウェアが実行中である。
アドホック接続では、端末装置103#0〜端末装置103#2間の通信帯域が保証されており、たとえば、300[Mbps]で接続可能である。このように、アドホック接続での並列処理制御システム100は広帯域を獲得できるため、細粒度実行オブジェクト705によるプロセス304にて、負荷分散を行う。
具体的には、端末装置103#0が、プロセス304内のスレッド1501_0を実行し、端末装置103#1が、プロセス304内のスレッド1501_1を実行し、端末装置103#2が、プロセス304内のスレッド1501_2を実行する。また、アドホック通信における並列処理制御システム100は、通信時間τを元に、並列処理の粒度を選択し、たとえば、粗粒度、中粒度の実行オブジェクトによって負荷分散を行ってもよい。アドホック通信における並列処理制御システム100は、アドホック接続する端末装置103全てのCPUが1つのマルチコアプロセッサシステムとして運用されている状態である。
(実施の形態3の概要説明)
実施の形態2では、アドホック接続する端末装置103全てのCPUが1つのマルチコアプロセッサシステムとして並列処理制御システム100を形成していた。実施の形態3にかかる並列処理制御システム100は、端末装置103がマルチコアプロセッサシステムである場合を想定する。具体的には、端末装置103内のマルチコアのうち、特定のコアが実施の形態1にかかる端末装置103となり、特定のコア以外の他のコアがオフロードサーバ101となり、並列処理を行う。実施の形態3にかかる並列処理制御システム100の機能については、図6にて示したオフロードサーバ101が有する機能を、他のコアが有することになる。
マルチコアプロセッサシステムは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、実施の形態3では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。実施の形態3にかかる端末装置103は、CPU201#0〜CPU201#2という3つのCPUを有しており、それぞれがバス210で接続されている。
また、実施の形態3にかかる測定部602は、複数のプロセッサのうち、特定のプロセッサおよび特定のプロセッサ以外の他のプロセッサ間の帯域を測定する機能を有する。具体的には、測定部602は、特定のプロセッサとして、CPU201#0とし、他のプロセッサとして、CPU201#1とした場合、CPU201#0とCPU201#1との帯域となるバス210の速度を測定する。
また、実施の形態3にかかる設定部605は、選択部604によって選択された実行対象の実行オブジェクトを特定のプロセッサおよび他のプロセッサで協動して実行可能な状態に設定する機能を有する。たとえば、選択部604によって粗粒度実行オブジェクトが選択された場合、設定部605は、CPU201#0とCPU201#1で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
後述する図16では、実施の形態1にかかる端末装置103をCPU201#0とし、実施の形態1にかかるオフロードサーバ101の機能を有する装置をCPU201#1、CPU201#2としている。
また、実施の形態3にかかる設定部605は、実行対象の実行オブジェクトを、複数のプロセッサのうち、特定のプロセッサを含み、かつ最大の分割数となるプロセッサ群で協動して実行可能な状態に設定してもよい。たとえば、最大の分割数が3であった場合を想定する。このとき、設定部605は、CPU201#0〜CPU201#2で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
また、実施の形態3にかかる設定部605は、実行対象の実行オブジェクトを、複数のプロセッサのうち、特定のプロセッサを含み、かつ実行対象の実行オブジェクトにおける並列実行の数となるプロセッサ群で協動して実行可能な状態に設定してもよい。たとえば、実行対象の実行オブジェクトにおける並列実行の数を2と想定する。このとき、設定部605は、CPU201#0、CPU201#1で協動して実行対象の実行オブジェクトを実行可能な状態に設定する。
図16は、実施の形態3にかかるマルチコアプロセッサシステムにおける並列処理制御システム100の実行状態を示す説明図である。図16では、CPU201#0がバス210にて接続されている。また、CPU201#0上のソフトウェアとして、端末OS301#0、スケジューラ302#0、帯域監視部303#0が実行されている。CPU201#1、CPU201#2でも同様のソフトウェアが実行中である。
バス210の転送速度は高速であり、たとえば、バス210がPCI(Peripheral Component Interconnect)バスであり、32[ビット]、33[MHz]で動作する場合を想定する。このとき、バス210の転送速度は、1056[Mbps]となり、サーバ接続に比べて高速である。このように、マルチコアプロセッサシステムにおける並列処理制御システム100は広帯域を獲得できるため、細粒度実行オブジェクト705によるプロセス304にて、負荷分散を行う。
具体的には、CPU201#0が、プロセス304内のスレッド1501_0を実行し、CPU201#1が、プロセス304内のスレッド1501_1を実行し、CPU201#2が、プロセス304内のスレッド1501_2を実行する。また、マルチコアプロセッサシステムにおける並列処理制御システム100は、端末装置103の仕様によって、中粒度実行オブジェクト704、粗粒度実行オブジェクト703によって負荷分散を行ってもよい。
(実施の形態1〜実施の形態3の処理説明)
実施の形態1〜実施の形態3にかかる並列処理制御システム100の差分については、オフロードを行う装置が、オフロードサーバ101、他の端末装置、または同一の装置内の他のCPU、のいずれかという差分となり、処理に大きく差がない。図17〜図20にて、実施の形態1〜実施の形態3にかかる並列処理制御システム100の処理を合わせて説明を行う。また、特に実施の形態1〜実施の形態3のうち、特有の実施の形態のみ持ち得る特徴があるときに関して、実施の形態1〜実施の形態3を明記する。
図17は、スケジューラ302による並列処理の開始処理を示すフローチャートである。端末装置103は、利用者、OS等による起動要求によって、負荷分散プロセスを起動する(ステップS1701)。続けて、端末装置103は、接続環境を確認する(ステップS1702)。
接続環境が接続なしであり、端末装置103がマルチコアプロセッサシステムであった場合(ステップS1702:接続なし)、端末装置103は、端末装置103のCPU数に合わせた実行オブジェクトをロードする(ステップS1703)。実施の形態3にかかる並列処理制御システム100は、ステップS1702:接続なしのルートを通る。接続環境がアドホック接続である場合(ステップS1702:アドホック接続)、端末装置103は、全粒度の実行オブジェクトをロードする(ステップS1704)。実施の形態2にかかる並列処理制御システム100は、ステップS1702:アドホック接続のルートを通る。ロード後、端末装置103は、他の端末装置に細粒度実行オブジェクト705を転送する(ステップS1705)。
接続環境がサーバ接続である場合(ステップS1702:サーバ接続)、端末装置103は、全粒度の実行オブジェクトをロードする(ステップS1706)。実施の形態1にかかる並列処理制御システム100は、ステップS1702:サーバ接続のルートを通る。また、サーバ接続の時に、端末装置103とオフロードサーバ101は携帯電話網を経由して接続されている。ロード後、端末装置103は、オフロードサーバに粗粒度実行オブジェクト703を転送する(ステップS1707)。また、端末装置103は、バックグラウンドにて、他の実行オブジェクトをオフロードサーバ101に転送し(ステップS1709)、帯域監視部303を起動する(ステップS1710)。
ステップS1703、ステップS1705、ステップS1707のいずれかを実行した端末装置103は、負荷分散プロセスを実行開始する(ステップS1708)。端末装置103は、負荷分散プロセスを実行開始後、図18にて後述する並列処理制御処理を実行する。
オフロードサーバ101は、ステップS1707によって粗粒度実行オブジェクト703の通知を受けると、端末エミュレータ307を起動し(ステップS1711)、仮想メモリ310を運用する(ステップS1712)。具体的には、オフロードサーバ101は、粗粒度実行オブジェクト703に変更されたという通知を受けたため、仮想メモリ310を非同期仮想メモリ1103に設定する。
図18は、スケジューラ302による負荷分散プロセスにおける並列処理制御処理を示すフローチャートである。並列処理制御処理は、ステップS1708の処理後に行われるほか、帯域監視部303からの通知によっても実行される。なお、図18の並列処理制御処理は、接続環境がサーバ接続である場合を想定している。アドホック接続である場合、ステップS1818、ステップS1824の処理の要求先が、他の端末装置となる。
帯域監視部303を実行する端末装置103は、帯域σを取得する(ステップS1820)。具体的には、端末装置103は、pingを発行することにより帯域σを取得する。取得後、端末装置103は、帯域σが前回の値から変化したか否かを判断する(ステップS1821)。変化した場合(ステップS1821:Yes)、端末装置103は、スケジューラ302に帯域σと帯域σの変化があったことを通知する(ステップS1822)。
通知後、端末装置103は、帯域σの時間変化(d/dt)σ(t)が0未満か否かを判断する(ステップS1823)。帯域σの時間変化が0未満である場合(ステップS1823:Yes)、端末装置103は、オフロードサーバ101にデータ保護処理の実行要求を通知する(ステップS1824)。データ保護処理の詳細については、図19にて後述する。ステップS1824の処理を終了後、または帯域σの時間変化が0以上の場合(ステップS1823:No)、または帯域σが変化していない場合(ステップS1821:No)、端末装置103は、一定時間経過後、ステップS1820の処理に移行する。
帯域監視部303より通知を受けた端末装置103は、スケジューラ302によって変数iを1、変数gを粗粒度に設定し(ステップS1801)、変数gの値を確認する(ステップS1802)。変数gが粗粒度である場合(ステップS1802:粗粒度)、端末装置103は、粗粒度処理で行われる逐次処理の割合Sc、データ量Dc、データ転送頻度Xc、CPU数N=1の実行時間T(1)を取得する(ステップS1803)。
取得後、端末装置103は、帯域監視部303から通知された帯域σを用いて、通信時間τc=Xc・Dc/σを算出する(ステップS1804)。算出後、端末装置103は、CPU数N=iの実行時間T(i)を(1)式によって算出する(ステップS1805)。算出後、端末装置103は、変数gを中粒度に設定し(ステップS1806)、ステップS1802の処理に移行する。
変数gが中粒度である場合(ステップS1802:中粒度)、端末装置103は、中粒度処理で行われる逐次処理の割合Sm、データ量Dm、データ転送頻度Xm、CPU数N=1の実行時間T(1)を取得する(ステップS1807)。
取得後、端末装置103は、帯域監視部303から通知された帯域σを用いて、通信時間τm=Xm・Dm/σを算出する(ステップS1808)。算出後、端末装置103は、CPU数N=iの実行時間T(i)を(1)式によって算出する(ステップS1809)。算出後、端末装置103は、変数gを細粒度に設定し(ステップS1810)、ステップS1802の処理に移行する。
変数gが細粒度である場合(ステップS1802:細粒度)、端末装置103は、細粒度処理で行われる逐次処理の割合Sf、データ量Df、データ転送頻度Xf、CPU数N=1の実行時間T(1)を取得する(ステップS1811)。
取得後、端末装置103は、帯域監視部303から通知された帯域σを用いて、通信時間τf=Xf・Df/σを算出する(ステップS1812)。算出後、端末装置103は、CPU数N=iの実行時間T(i)を(1)式によって算出する(ステップS1813)。算出後、端末装置103は、変数gを粗粒度に設定し、変数iをインクリメントし(ステップS1814)、変数iが最大の分割数N_Max以下か否かを判断する(ステップS1815)。変数iが最大の分割数N_Max以下である場合(ステップS1815:Yes)、端末装置103は、ステップS1802の処理に移行する。
変数iがN_Maxより大きい場合(ステップS1815:No)、端末装置103は、算出されたT(N)のうち、Min(T(N))となる変数i、変数gを新しいCPU数、粒度に設定する(ステップS1816)。続けて、端末装置103は、設定された粒度に対応する実行オブジェクトを、実行対象の実行オブジェクトに設定する(ステップS1817)。設定後、端末装置103は、設定されたCPU数、粒度を、帯域監視部303へ通知する(ステップS1818)。
通知後、端末装置103は、オフロードサーバ101に仮想メモリ設定処理の実行要求を通知する(ステップS1819)。仮想メモリ設定処理の詳細は、図20にて後述する。通知後、端末装置103は、並列処理制御処理を終了し、設定された実行対象の実行オブジェクトにて、負荷分散プロセスを実行する。また、オフロードサーバ101も、設定された実行対象の実行オブジェクトにて負荷分散プロセスを実行する。オフロードサーバ101が複数存在する場合でも、全てのオフロードサーバ101が同一の実行対象の実行オブジェクトにて負荷分散プロセスを実行する。
なお、最大の分割数N_Maxの値は、粒度によって異なるため、端末装置103は、ステップS1815の処理を、粗粒度の最大の分割数Nc_Max、中粒度の最大の分割数Nm_Max、細粒度の最大の分割数Nf_Maxのうち、最大値で判断してもよい。そして、ある粒度において、並列実行の数となる変数iがその粒度の最大の分割数を超えた場合、端末装置103は、該当部分の処理を飛ばしてよい。具体的には、粗粒度の最大の分割数Nc_Max=2、変数i=3となった場合、端末装置103は、ステップS1803〜ステップS1805の処理を行わず、ステップS1806の処理を実行し、続けて中粒度の処理に移行する。
図19は、データ保護処理を示すフローチャートである。データ保護処理は、オフロードサーバ101または、他の端末装置によって実行される。図19の例では、説明の簡略化のため、オフロードサーバ101にて実行される場合を想定して説明を行う。
オフロードサーバ101は、設定された粒度が変化したかを判断する(ステップS1901)。粒度が細粒度から中粒度に変化した場合(ステップS1901:細粒度→中粒度)、オフロードサーバ101は、ダイナミック同期仮想メモリ904のデータを端末装置103に転送する(ステップS1902)。転送後、オフロードサーバ101は、データ保護処理を終了する。
粒度が中粒度から粗粒度に変化した場合(ステップS1901:中粒度→粗粒度)、オフロードサーバ101は、バリア同期仮想メモリ1004の部分計算データを回収する(ステップS1903)。なお、CPU数Nが3以上である場合、バリア同期仮想メモリ1004が複数存在する可能性があるため、オフロードサーバ101は、バリア同期仮想メモリ1004の部分計算データをそれぞれ回収する。
回収後、オフロードサーバ101は、オフロードサーバ101・端末装置103間のデータ同期を実行する(ステップS1904)。同期後、オフロードサーバ101は、端末装置103に部分処理の集約要求を通知する(ステップS1905)。具体的には、粒度が変化した際に、中粒度実行オブジェクト704によるプロセス304によって、ループ内の特定のインデックスの計算データが算出されている。したがって、端末装置103は、計算済みであるインデックスに対応する部分処理を集約し、続けて、未処理のインデックスに対応する部分処理を実行する。集約要求を通知後、オフロードサーバ101は、データ保護処理を終了する。
粒度が変化していない、または、細粒度から中粒度、中粒度から粗粒度以外の変化である場合(ステップS1901:その他)、オフロードサーバ101は、データ保護処理を終了する。
図20は、仮想メモリ設定処理を示すフローチャートである。仮想メモリ設定処理も、データ保護処理と同様に、オフロードサーバ101または、他の端末装置によって実行される。図20の例では、説明の簡略化のため、オフロードサーバ101にて実行される場合を想定して説明を行う。また、仮想メモリ設定処理の開始時に、データ保護処理が実行中であった場合、オフロードサーバ101は、データ保護処理の終了を待ってから仮想メモリ設定処理を開始する。
オフロードサーバ101は、設定された粒度を確認する(ステップS2001)。設定された粒度が粗粒度である場合(ステップS2001:粗粒度)、オフロードサーバ101は、仮想メモリ310を非同期仮想メモリ1103に設定する(ステップS2002)。設定された粒度が中粒度である場合(ステップS2001:中粒度)、オフロードサーバ101は、仮想メモリ310をバリア同期仮想メモリ1004に設定する(ステップS2003)。設定された粒度が細粒度である場合(ステップS2001:細粒度)、オフロードサーバ101は、仮想メモリ310をダイナミック同期仮想メモリ904に設定する(ステップS2004)。
ステップS2002、ステップS2003、ステップS2004の処理を終了後、オフロードサーバ101は、仮想メモリ設定処理を終了し、仮想メモリ310の運用を続行する。
以上説明したように、並列処理制御プログラム、情報処理装置、および並列処理制御方法によれば、並列処理の粒度が異なるオブジェクト群から、端末装置と他装置間の帯域から算出した実行時間によってオブジェクトを選択する。これにより、帯域に応じた最適な並列処理を実行でき、処理性能を向上させることができる。
具体的には、並列処理制御システムが、GPS(Global Positioning System)情報を提供し、端末装置がGPS情報を受信できた状態を想定する。端末装置とオフロードサーバの帯域が狭い、または、回線が切断された場合、端末装置がGPS情報を利用するアプリケーションソフトウェアを起動し、座標計算等、GPS情報にともなう演算処理を実行する。また、端末装置とオフロードサーバの帯域が広帯域である場合、端末装置は、オフロードサーバに座標計算をオフロードする。このように、並列処理制御システムは、広帯域であれば、オフロードサーバによって高速処理を実行でき、また、狭帯域であれば、端末装置によって処理を続行することができる。
また、別の例として、並列処理制御システムが、ファイルシェアリングや、ストリーミングのサービスを提供している場合を想定する。端末装置とオフロードサーバの帯域が狭い場合、サービスを提供するサーバは圧縮されたデータを送信し、端末装置は、フルパワーモードにて伸長を行う。また、端末装置とオフロードサーバの帯域が広い場合、オフロードサーバはデータを伸長したのち、伸長された結果を送信し、端末装置は結果の表示を行う。端末装置は、結果の表示を行えばよいため、CPUパワーが不要であり、低電力モードにて運用することができる。
また、最短となる実行オブジェクトを、実行対象の実行オブジェクトとして選択してもよい。これにより、並列処理の粒度が異なるオブジェクト群のうち、最短の処理時間となる実行オブジェクトを選択でき、処理性能を向上させることができる。
また、帯域と通信量から通信時間を算出し、並列処理を逐次実行した場合の処理時間と逐次処理の割合と並列実行が可能な最大の分割数とから並列実行する場合の処理時間を算出し、通信時間と並列実行する場合の処理時間を加えることで実行時間を算出してもよい。これにより、並列処理によって発生する通信時間のオーバーヘッドを含めて最短の処理時間となる実行オブジェクトを選択することができ、処理性能を向上させることができる。
また、実行対象の実行オブジェクトが変更されるときに、新たな実行対象の実行オブジェクトが変更前の実行オブジェクトより粒度が粗い場合、他装置に保持された処理結果を端末装置に送信させ、端末装置の記憶装置に格納してもよい。これにより、他装置で行われた途中結果を取得できるため、端末装置は、オフロードサーバなどの他装置で行われていた処理を続行することができる。この効果は、端末装置と他装置で帯域が大きく変動する、実施の形態1にかかる並列処理制御システムにおいて、特に効果がある。
また、実行対象の実行オブジェクトが、最も粒度が粗い実行オブジェクトが選択されており、かつ帯域が減少した状態を検出した場合、他装置に保持された処理結果を端末装置に送信させ、端末装置の記憶装置に格納してもよい。これにより、回線が遮断されそうなとき、端末装置は、オフロードサーバなどの他装置のデータを事前に格納することで、回線が遮断されても、格納されたデータを使用して、処理を続行することができる。
また、端末装置と他装置が携帯電話網を経由して接続されており、並列処理を実行開始することを検出した場合、実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択してもよい。端末装置と他装置の接続において、携帯電話網を経由した場合、開始の帯域が狭いため、あらかじめ粒度の粗い実行オブジェクトを選択しておくことで、開始の帯域にあった実行オブジェクトを設定することができる。この効果は、実施の形態1にかかる並列処理制御システムにおいて効果がある。
また、端末装置と他装置がアドホック接続しており、並列処理を実行開始することを検出した場合、実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択してもよい。アドホック接続では、開始の帯域が広いため、あらかじめ粒度の粗い実行オブジェクトを選択しておくことで、開始の帯域にあった実行オブジェクトを設定することができる。この効果は、実施の形態2にかかる並列処理制御システムにおいて効果がある。
また、実施の形態3にかかるマルチコアプロセッサにかかる並列処理制御システムにおいても、並列処理の粒度が異なるオブジェクト群から、端末装置と他装置間の帯域から算出した実行時間によってオブジェクトを選択する。これにより、帯域に応じた最適な並列処理を実行でき、処理性能を向上させることができる。プロセッサ間の帯域は、広帯域であるので、細粒度実行オブジェクトを実行し、処理性能を向上させることができる。
また、マスタプロセッサ以外の他のプロセッサで実行中のプロセス等により、他のプロセッサがバスのアクセス競合を起こした場合を想定する。このとき、マスタプロセッサが帯域の測定を行った場合、他のプロセッサは、測定に対応する反応が遅れるため、帯域が低下することになる。したがって、マスタプロセッサは、より粒度の粗い実行オブジェクトを選択することになり、並列処理による通信量が低下するため、アクセス競合を軽減することができる。
また、実施の形態1〜実施の形態3にかかる並列処理制御システムは、混合して運用することも可能である。たとえば、複数のプロセッサを有する端末装置が、サーバ接続、またはアドホック接続を行い、実施の形態1、または実施の形態2にかかる並列処理制御システムとして、並列処理によるサービスを提供してもよい。
なお、本実施の形態で説明した並列処理制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本並列処理制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本並列処理制御プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態1〜3に関し、さらに以下の付記を開示する。
(付記1)接続元装置と接続先装置との間の帯域を測定する測定工程と、
前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
を前記接続元プロセッサに実行させることを特徴とする並列処理制御プログラム。
(付記2)前記選択工程は、
前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする付記1に記載の並列処理制御プログラム。
(付記3)前記算出工程は、
前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする付記1に記載の並列処理制御プログラム。
(付記4)前記算出工程は、
前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする付記3に記載の並列処理制御プログラム。
(付記5)前記選択工程による選択によって、前記実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する検出工程と、
前記検出工程によって前記新たな実行対象の実行オブジェクトが選択されたことが検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
を前記接続元プロセッサに実行させることを特徴とする付記1に記載の並列処理制御プログラム。
(付記6)前記実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、前記帯域が減少した状態を検出する検出工程と、
前記検出工程によって前記状態が検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
を前記接続元プロセッサに実行させることを特徴とする付記1に記載の並列処理制御プログラム。
(付記7)前記接続元装置と前記接続先装置とが携帯電話網を経由して接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
前記選択工程は、
前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択することを特徴とする付記1に記載の並列処理制御プログラム。
(付記8)前記接続元装置と前記接続先装置とがアドホック接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
前記選択工程は、
前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択することを特徴とする付記1に記載の並列処理制御プログラム。
(付記9)複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定工程と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定工程と、
を前記特定のプロセッサに実行させることを特徴とする並列処理制御プログラム。
(付記10)前記選択工程は、
前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする付記9に記載の並列処理制御プログラム。
(付記11)前記算出工程は、
前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記複数のプロセッサのうち、前記特定のプロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする付記9に記載の並列処理制御プログラム。
(付記12)前記算出工程は、
前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
前記設定工程は、
前記実行対象の実行オブジェクトを、前記複数のプロセッサのうち、前記特定のプロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする付記11に記載の並列処理制御プログラム。
(付記13)接続先装置との間の帯域を測定する測定手段と、
自装置内のプロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
前記選択手段によって選択された実行対象の実行オブジェクトを前記自装置内のプロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定手段と、
を備えることを特徴とする情報処理装置。
(付記14)複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定手段と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
前記選択手段によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定手段と、
を備えることを特徴とする情報処理装置。
(付記15)接続元装置と接続先装置との間の帯域を測定する測定工程と、
前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
を前記接続元プロセッサが実行することを特徴とする並列処理制御方法。
(付記16)複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定工程と、
前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
前記選択工程によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定工程と、
を前記特定のプロセッサが実行することを特徴とする並列処理制御方法。
101 オフロードサーバ
102 基地局
103 端末装置
104 ネットワーク
105 無線通信
203 RAM
210 バス
309 実メモリ
310 仮想メモリ
601 実行オブジェクト
602 測定部
603 算出部
604 選択部
605 設定部
606 検出部
607 通知部
608 格納部
609 実行部
610 実行部

Claims (16)

  1. 接続元装置と接続先装置との間の帯域を測定する測定工程と、
    前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
    前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
    前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
    を前記接続元プロセッサに実行させることを特徴とする並列処理制御プログラム。
  2. 前記選択工程は、
    前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする請求項1に記載の並列処理制御プログラム。
  3. 前記算出工程は、
    前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
    前記設定工程は、
    前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項1に記載の並列処理制御プログラム。
  4. 前記算出工程は、
    前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
    前記設定工程は、
    前記実行対象の実行オブジェクトを、前記接続元装置および前記接続先装置のプロセッサ群のうち、特定の接続元プロセッサおよび特定の接続先プロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項3に記載の並列処理制御プログラム。
  5. 前記選択工程による選択によって、前記実行対象の実行オブジェクトの粒度より粒度が粗い新たな実行対象の実行オブジェクトが選択されたことを検出する検出工程と、
    前記検出工程によって前記新たな実行対象の実行オブジェクトが選択されたことが検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
    前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
    を前記接続元プロセッサに実行させることを特徴とする請求項1に記載の並列処理制御プログラム。
  6. 前記実行対象の実行オブジェクトとして、最も粒度が粗い実行オブジェクトが選択されている場合に、前記帯域が減少した状態を検出する検出工程と、
    前記検出工程によって前記状態が検出された場合、前記接続先装置に保持された前記実行対象の実行オブジェクトによる処理結果の送信要求を前記接続先装置に通知する通知工程と、
    前記通知工程によって通知された送信要求による前記処理結果を前記接続元装置の記憶装置に格納する格納工程と、
    を前記接続元プロセッサに実行させることを特徴とする請求項1に記載の並列処理制御プログラム。
  7. 前記接続元装置と前記接続先装置とが携帯電話網を経由して接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
    前記選択工程は、
    前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が粗い実行オブジェクトを選択することを特徴とする請求項1に記載の並列処理制御プログラム。
  8. 前記接続元装置と前記接続先装置とがアドホック接続されている場合に、前記並列処理を実行開始することを検出する検出工程を、前記接続元プロセッサに実行させ、
    前記選択工程は、
    前記検出工程によって前記並列処理を実行開始することが検出された場合、前記実行対象の実行オブジェクトとして最も粒度が細かい実行オブジェクトを選択することを特徴とする請求項1に記載の並列処理制御プログラム。
  9. 複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定工程と、
    前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
    前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
    前記選択工程によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定工程と、
    を前記特定のプロセッサに実行させることを特徴とする並列処理制御プログラム。
  10. 前記選択工程は、
    前記各々の実行時間の長さのうち、最短となる実行オブジェクトを、前記実行対象の実行オブジェクトとして選択することを特徴とする請求項9に記載の並列処理制御プログラム。
  11. 前記算出工程は、
    前記帯域と前記並列処理にかかる通信量とによって通信時間を算出し、前記並列処理を逐次実行した場合の処理時間と前記並列処理のうち逐次処理の割合と前記並列処理において並列実行が可能な最大の分割数とによって並列実行する場合の処理時間を前記実行オブジェクトごとに算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の実行時間を算出し、
    前記設定工程は、
    前記実行対象の実行オブジェクトを、前記複数のプロセッサのうち、前記特定のプロセッサを含み、かつ前記最大の分割数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項9に記載の並列処理制御プログラム。
  12. 前記算出工程は、
    前記並列実行する場合の処理時間を前記逐次実行した場合の処理時間と前記逐次処理の割合と前記最大の分割数以下である並列実行の数によって算出し、前記通信時間と前記並列実行する場合の処理時間とを加算することによって、前記複数の実行オブジェクトの各々の前記並列実行の数ごとの実行時間を算出し、
    前記設定工程は、
    前記実行対象の実行オブジェクトを、前記複数のプロセッサのうち、前記特定のプロセッサを含み、かつ前記実行対象の実行オブジェクトにおける前記並列実行の数となるプロセッサ群で協動して実行可能な状態に設定することを特徴とする請求項11に記載の並列処理制御プログラム。
  13. 接続先装置との間の帯域を測定する測定手段と、
    自装置内のプロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
    前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
    前記選択手段によって選択された実行対象の実行オブジェクトを前記自装置内のプロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定手段と、
    を備えることを特徴とする情報処理装置。
  14. 複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定手段と、
    前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定手段によって測定された帯域に基づいて算出する算出手段と、
    前記算出手段によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択手段と、
    前記選択手段によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定手段と、
    を備えることを特徴とする情報処理装置。
  15. 接続元装置と接続先装置との間の帯域を測定する測定工程と、
    前記接続元装置内の接続元プロセッサおよび前記接続先装置内の接続先プロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
    前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
    前記選択工程によって選択された実行対象の実行オブジェクトを前記接続元プロセッサおよび前記接続先プロセッサで協動して実行可能な状態に設定する設定工程と、
    を前記接続元プロセッサが実行することを特徴とする並列処理制御方法。
  16. 複数のプロセッサのうち、特定のプロセッサおよび前記特定のプロセッサ以外の他のプロセッサ間の帯域を測定する測定工程と、
    前記特定のプロセッサおよび前記他のプロセッサで並列処理が可能であり前記並列処理の粒度が異なる複数の実行オブジェクトの各々の実行時間を、前記測定工程によって測定された帯域に基づいて算出する算出工程と、
    前記算出工程によって算出された前記各々の実行時間の長さに基づいて、前記複数の実行オブジェクトの中から実行対象の実行オブジェクトを選択する選択工程と、
    前記選択工程によって選択された実行対象の実行オブジェクトを前記特定のプロセッサおよび前記他のプロセッサで協動して実行可能な状態に設定する設定工程と、
    を前記特定のプロセッサが実行することを特徴とする並列処理制御方法。
JP2012529425A 2010-08-17 2010-08-17 並列処理制御プログラム、情報処理装置、および並列処理制御方法 Pending JPWO2012023175A1 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2010/063871 WO2012023175A1 (ja) 2010-08-17 2010-08-17 並列処理制御プログラム、情報処理装置、および並列処理制御方法

Publications (1)

Publication Number Publication Date
JPWO2012023175A1 true JPWO2012023175A1 (ja) 2013-10-28

Family

ID=45604850

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012529425A Pending JPWO2012023175A1 (ja) 2010-08-17 2010-08-17 並列処理制御プログラム、情報処理装置、および並列処理制御方法

Country Status (3)

Country Link
US (1) US20130159397A1 (ja)
JP (1) JPWO2012023175A1 (ja)
WO (1) WO2012023175A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5703729B2 (ja) * 2010-12-09 2015-04-22 富士ゼロックス株式会社 データ処理装置及びプログラム
JP5677393B2 (ja) 2012-09-27 2015-02-25 株式会社東芝 情報処理装置および命令のオフローディング方法
US9430285B2 (en) 2012-10-31 2016-08-30 Nec Corporation Dividing and parallel processing record sets using a plurality of sub-tasks executing across different computers
JP6891521B2 (ja) * 2017-02-08 2021-06-18 日本電気株式会社 情報処理装置、情報処理方法、プログラム
JP7097744B2 (ja) * 2018-05-17 2022-07-08 キヤノン株式会社 画像処理装置、画像処理方法およびプログラム
JP7153678B2 (ja) * 2020-01-22 2022-10-14 ソフトバンク株式会社 コンピュータ

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006252218A (ja) * 2005-03-11 2006-09-21 Nec Corp 分散処理システム及びプログラム
JP2008027442A (ja) * 2006-07-21 2008-02-07 Sony Computer Entertainment Inc サブタスク・プロセッサの分散スケジューリング

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8024395B1 (en) * 2001-09-04 2011-09-20 Gary Odom Distributed processing multiple tier task allocation
US7958507B2 (en) * 2005-06-16 2011-06-07 Hewlett-Packard Development Company, L.P. Job scheduling system and method
JP4324975B2 (ja) * 2006-09-27 2009-09-02 日本電気株式会社 負荷低減システム、計算機、及び負荷低減方法
WO2008118976A1 (en) * 2007-03-26 2008-10-02 The Trustees Of Culumbia University In The City Of New York Methods and media for exchanging data between nodes of disconnected networks
US20090172353A1 (en) * 2007-12-28 2009-07-02 Optillel Solutions System and method for architecture-adaptable automatic parallelization of computing code
KR101626378B1 (ko) * 2009-12-28 2016-06-01 삼성전자주식회사 병렬도를 고려한 병렬 처리 장치 및 방법
US8522224B2 (en) * 2010-06-22 2013-08-27 National Cheng Kung University Method of analyzing intrinsic parallelism of algorithm

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006252218A (ja) * 2005-03-11 2006-09-21 Nec Corp 分散処理システム及びプログラム
JP2008027442A (ja) * 2006-07-21 2008-02-07 Sony Computer Entertainment Inc サブタスク・プロセッサの分散スケジューリング

Also Published As

Publication number Publication date
WO2012023175A1 (ja) 2012-02-23
US20130159397A1 (en) 2013-06-20

Similar Documents

Publication Publication Date Title
US10761898B2 (en) Migrating threads between asymmetric cores in a multiple core processor
WO2012023175A1 (ja) 並列処理制御プログラム、情報処理装置、および並列処理制御方法
US10706496B2 (en) Function callback mechanism between a Central Processing Unit (CPU) and an auxiliary processor
US7971029B2 (en) Barrier synchronization method, device, and multi-core processor
EP2449550B1 (en) Method and apparatus for providing mobile device interoperability
US20220409999A1 (en) Rendering method and apparatus
WO2009133669A1 (ja) 仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラム
JP5853216B2 (ja) 集積回路、コンピュータシステム、制御方法
JP6219445B2 (ja) 中央処理ユニット及び画像処理ユニットの同期機構
CN114328098B (zh) 一种慢节点检测方法、装置、电子设备及存储介质
US9448840B2 (en) Controlling runtime execution from a host to conserve resources
JP2015515052A (ja) グラフィックス処理ユニット上でのグラフィックスアプリケーションおよび非グラフィックスアプリケーションの実行
US20170097854A1 (en) Task placement for related tasks in a cluster based multi-core system
US20120304183A1 (en) Multi-core processor system, thread control method, and computer product
US20140122632A1 (en) Control terminal and control method
WO2016202153A1 (zh) 一种gpu资源的分配方法及系统
US9053022B2 (en) Synchronous software interface for an accelerated compute engine
US9274827B2 (en) Data processing apparatus, transmitting apparatus, transmission control method, scheduling method, and computer product
US7934082B2 (en) Information processing apparatus and exception control circuit
TW202107408A (zh) 波槽管理之方法及裝置
US20140053012A1 (en) System and detection mode
US8688799B2 (en) Methods, apparatuses and computer program products for reducing memory copy overhead by indicating a location of requested data for direct access
WO2021000226A1 (en) Methods and apparatus for optimizing frame response
KR102534646B1 (ko) 임시적 로드 명령을 위한 시스템, 장치, 및 방법
Pamboris et al. C-RAM: Breaking mobile device memory barriers using the cloud

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140401

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140602

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20141014