(57)【特許請求の範囲】
【請求項１】
コンピュータプログラムの分散並列処理を実行する複数のプロセス
を備え、
前記複数のプロセスの各々は、
前記分散並列処理において共有並列処理を実行する一つ以上のスレッドと、
前記共有並列処理において、前記複数のプロセスの全てに負荷される総負荷量を前記各プロセスに均一に割り当てた場合の平均負荷量と、前記共有並列処理の実行時において自プロセスに割り当てられた自己負荷量との比率に基づいて、前記共有並列処理を実行するべき理想スレッド数を算出して、前記自プロセスのスレッド数を前記理想スレッド数に再設定する再設定部と
を備えるハイブリッド並列処理システム。
【請求項２】
請求項１に記載のハイブリッド並列処理システムであって、
前記複数のプロセスの各々は、
前記共有並列処理の実行に要した共有並列処理時間を計測する実行時間計測部
をさらに備え、
前記再設定部は、前記各プロセスの前記共有並列処理時間と前記各プロセスにおける前記スレッド数に基づいて前記総負荷量を前記各プロセスに均一に割り当てた場合に前記各プロセスにおいて前記共有並列処理の実行に要すると想定される理想共有並列処理時間を算出して、前記理想共有並列処理時間と前記各プロセスにおける前記共有並列処理時間との比率に基づいて前記理想スレッド数を算出する
ハイブリッド並列処理システム。
【請求項３】
請求項２に記載のハイブリッド並列処理システムであって、
前記再設定部は、前記分散並列処理における前記複数のプロセス間の通信処理において、他のプロセスから前記各プロセスにおける前記共有並列処理時間と前記各プロセスの備えるスレッド数とを取得する
ハイブリッド並列処理システム。
【請求項４】
複数のプロセスによりコンピュータプログラムの分散並列処理を実行するステップと、
一つ以上のスレッドにより前記分散並列処理において共有並列処理を実行するステップと、
前記共有並列処理において、前記複数のプロセスの全てに負荷される総負荷量を前記各プロセスに均一に割り当てた場合の平均負荷量と、前記共有並列処理の実行時において自プロセスに割り当てられた自己負荷量との比率に基づいて、前記共有並列処理を実行するべき理想スレッド数を算出するステップと、
前記自プロセスのスレッド数を前記理想スレッド数に再設定するステップと
を備えるハイブリッド並列処理方法。
【請求項５】
請求項４に記載のハイブリッド並列処理方法をコンピュータに実行させるハイブリッド並列処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的負荷分散を行うハイブリッド並列処理システムに関する。
【背景技術】
【０００２】
ハイブリッド並列処理は、並列処理計算機（以下、ノード）内における共有メモリ並列処理（以下、共有並列処理）と、ノード間における分散メモリ並列処理（以下、分散並列処理）とを組み合わせて行う処理である。ノード内におけるスレッド並列処理手法として、ＯｐｅｎＭＰが広く知られている。また、ノード間におけるプロセス並列処理手法として、ＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）が知られている。以下では、ハイブリッド並列処理をコンピュータに実行させるべく記述されたコンピュータプログラムをハイブリッド並列処理プログラムと呼び、ハイブリッド並列処理プログラムを実行するコンピュータシステムをハイブリッド並列処理システムと呼ぶ。
【０００３】
ハイブリッド並列処理では、分散並列処理において各プロセスが計算を行うべき負荷量が異なるため、各プロセスにおけるスレッド数が同じであればプロセス毎の共有並列処理に要する時間に差が生じる。つまり、負荷量の少ないプロセスは、負荷量の多いプロセスより先に共有並列処理が完了してしまう。そのため、早く共有並列処理の完了したプロセスは、他のプロセスによる共有並列処理が完了し、プロセス間の同期処理あるいはデータ転送処理を行うタイミングまで待ち合わせる必要が発生する。このような原因で、ハイブリッド並列処理プログラムの実行性能が低下するという課題がある。
【０００４】
特に、極めて高速な処理を必要とするＨＰＣ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）分野において、実行時間が長時間にわたるハイブリッド並列処理プログラム等では、上述のような性能低下が累積されることは、プログラムの高速実行を阻害する要因となる。
【０００５】
ハイブリッド並列処理の効果を最大限に発揮しハイブリッド並列処理プログラムを高速に実行するためには、プログラムの特性を考慮して、利用可能なプロセッサ数を余すことなく使用するように、プロセス数及びプロセス毎のスレッド数を適切に設定することが必要となる。例えば、ＯｐｅｎＭＰでは、ハイブリッド並列処理プログラム中に複数個所存在する共有並列処理部分毎に、プロセス毎のスレッド数をユーザが明示的に指定することが可能である。そのため、共有並列処理部分毎に実行されるべき負荷量に応じて最適なスレッド数へ増減されることが望まれる。
【０００６】
しかし、プロセス毎のスレッド数は、共有並列処理部分の実行時に利用可能なプロセッサ数や、プロセス数等を考慮して決定しなければならない。また、共有並列処理部分における各プロセスへの負荷量が実行時の入力データに依存する場合もあり、予め最適なスレッド数を見積もった上で、ハイブリッド並列処理プログラム中に指定することは非常に困難である。そのため、一般に、プロセス毎のスレッド数は、各プロセスで同一であり、プログラムの実行開始から終了まで変更しない手法がとられている。
【０００７】
特許文献１は、効率的な並列処理を可能とする動的負荷分散方法を開示している。特許文献１の動的負荷分散方法は、複数のプロセスを複数のプロセッサで並列的に実行する分散並列処理を複数回繰り返して行うにあたり、各プロセッサに対するプロセスの配分を決定するための方法である。まず、分散並列処理の実行後における各プロセッサの負荷状況に関する負荷情報を収集する。また、更に分散並列処理を実行するか否かを判断する。このとき、更に分散並列処理を実行すると判断されると、収集された負荷情報に基づいて、分散並列処理における各プロセッサに対するプロセスの再配分を決定する。
【０００８】
特許文献１の動的負荷分散方法によれば、アプリケーションプログラムの内部情報だけでなく、当該アプリケーションプログラムが動作している計算機の負荷状況をモニタして、負荷状況に関する情報を用いて負荷が平均的になるように並列要素分割を行うことができる。
【０００９】
なお、特許文献２は、複数の反復を含むループ命令を多数のスレッド間で最適に均衡させて多数のスレッドに分配し、各スレッドをネットワークに接続された複数のコンピュータ、あるいは一つの装置における複数のプロセッサに割り当てるデータ処理システムを開示している。また、特許文献３は、スケジューラを使用することなく、各ＣＰＵのロードバランスを改善し、効率の良い並列処理を可能なコンパイルプログラムを開示している。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００２−０４９６０３号公報
【特許文献２】特開２０００−３１５１６３号公報
【特許文献３】特開２００４−０９４５８１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、ハイブリッド並列処理プログラムの分散並列処理部分において、各プロセスにおける共有並列処理の実行時間を均一にすることが可能なハイブリッド並列処理システムを提供することである。
【課題を解決するための手段】
【００１２】
本発明のハイブリッド並列処理システムは、コンピュータプログラムの分散並列処理を実行する複数のプロセスを備え、複数のプロセスの各々は、分散並列処理において共有並列処理を実行する一つ以上のスレッドと、共有並列処理において、複数のプロセスの全てに負荷される総負荷量を各プロセスに均一に割り当てた場合の平均負荷量と、共有並列処理の実行時において自プロセスに割り当てられた自己負荷量との比率に基づいて、共有並列処理を実行するべき理想スレッド数を算出して、自プロセスのスレッド数を理想スレッド数に再設定する再設定部とを備える。
【００１３】
本発明のハイブリッド並列処理方法は、複数のプロセスによりコンピュータプログラムの分散並列処理を実行するステップと、一つ以上のスレッドにより分散並列処理において共有並列処理を実行するステップと、共有並列処理において、複数のプロセスの全てに負荷される総負荷量を各プロセスに均一に割り当てた場合の平均負荷量と、共有並列処理の実行時において自プロセスに割り当てられた自己負荷量との比率に基づいて、共有並列処理を実行するべき理想スレッド数を算出するステップと、自プロセスのスレッド数を理想スレッド数に再設定するステップと備える。
【００１４】
本発明のハイブリッド並列処理プログラムは、上述のハイブリッド並列処理方法をコンピュータに実行させる。
【発明の効果】
【００１５】
本発明によれば、ハイブリッド並列処理プログラムの分散並列処理部分において、複数のプロセスの各々に異なる負荷量が割り当てられたとしても、各プロセスにおける並列処理の実行時間を均一にすることが可能なハイブリッド並列処理システムを提供することができる。そのため、各プロセスは、共有並列処理時に他のプロセスによる共有並列処理の完了を待ち合わせる必要が無く、効率的で高速なハイブリッド並列処理を実現できる。
【図面の簡単な説明】
【００１６】
【図１】図１は、本発明の実施形態におけるハイブリッド並列処理システムの構成を示す図である。
【図２】図２は、本発明の実施形態におけるハイブリッド並列処理システムの機能ブロック図である。
【図３】図３は、本発明の実施形態におけるハイブリッド並列処理システムの動作を示すフローチャートである。
【図４】図４は、本発明の実施形態におけるハイブリッド並列処理システムの従来技術に対する効果を説明する図である。
【発明を実施するための形態】
【００１７】
添付図面を参照して、本発明によるハイブリッド並列処理システムを以下に説明する。
【００１８】
［概要］
本発明のハイブリッド並列処理システムでは、各プロセスが共有並列処理に要した時間（以下、並列処理時間）と、現在の各プロセスの備えるスレッド数とに基づいて、ハイブリッド並列処理の実行中にプロセス毎のスレッド数を動的に再設定する。
【００１９】
具体的に各プロセスは、ハイブリッド並列処理プログラムにおける共有並列処理部分を実行中に共有並列処理時間を計測する。各プロセスは、共有並列処理が完了して、分散並列処理を行うプロセス間における同期処理あるいはデータ転送のタイミングで、計測された共有並列処理時間と当該プロセスにおける現在のスレッド数とを含めた実行情報を、他のプロセスへ通知し、また、他のプロセスから取得する。
【００２０】
各プロセスは、実行情報による他のプロセスの共有並列処理時間及び当該プロセスの備えるスレッド数と、自己の共有並列処理時間及びスレッド数とに基づいて、各プロセスへの負荷量が均一であったとした場合の、各プロセスにおける共有並列処理時間（以下、理想共有並列処理時間）を算出する。そして、各プロセスは、理想共有並列処理時間と自己の共有並列処理時間とに基づいて、適正なスレッド数（以下、理想スレッド数）を算出する。各プロセスは、現在、自己の備えるスレッド数を、理想スレッド数へ再設定する。
【００２１】
これにより、各プロセスにおけるスレッド数は、各プロセスが処理を行うべき負荷量に対して適正な数となる。そのため、ハイブリッド並列処理プログラムの分散並列処理部分において、複数のプロセスの各々に異なる負荷量が割り当てられたとしても、各プロセスの共有並列処理時間を均一にすることができる。このような構成により、本発明のハイブリッド並列処理システムは、各プロセスが共有並列処理時に他のプロセスによる共有並列処理の完了を待ち合わせる必要が無く、効率的で高速なハイブリッド並列処理を実現できる。以下、本実施形態におけるハイブリッド並列処理システムの構成及び動作を詳細に説明する。
【００２２】
［構成の説明］
はじめに、本実施形態におけるハイブリッド並列処理システムの構成の説明を行う。図１は、本実施形態におけるハイブリッド並列処理システムの構成を示す図である。
【００２３】
本実施形態におけるハイブリッド並列処理システムは、並列処理計算機（以下、ノード）１００を備える。本実施形態のノード１００は、処理部１と、記憶部２と、入出力部３と、通信部４とを備える。処理部１と、記憶部２と、入出力部３と、通信部４とは、バス５を介して接続されており、データの送受信が可能である。
【００２４】
まず、通信部４は、他のノード１００との通信インターフェースである。通信部４は、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）に例示される。ノード１００は、通信部４を介して他のノード１００とデータ送受信することが可能である。
【００２５】
次に、入出力部３は、ノード１００のユーザとの入出力インターフェースである。入出力部３は、キーボードや、マウスや、あるいはＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）に例示される。ユーザは、入出力部３により、ノード１００を操作可能である。
【００２６】
次に、記憶部２は、ノード１００の機能を実現するコンピュータプログラムやデータを記憶する。記憶部２は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）や、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）や、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）に例示されるような主記憶装置、２次記憶装置により構成される。記憶部２は、コンピュータプログラムとしてＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）２１とハイブリッド並列処理プログラム２２とを備える。ＯＳ２１は、ノード１００のＯＳである。ハイブリッド並列処理プログラム２２は、ＯＳ２１上で動作するアプリケーションプログラムである。
【００２７】
次に、処理部１は、記憶部２に記憶されたコンピュータプログラムを実行してノード１００の機能を実現する。処理部１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に例示される。本実施形態において処理部１は、マルチコアＣＰＵにより構成され、ＣＰＵコア１１とＣＰＵコア１２とを備える。なお、処理部１の備えるＣＰＵコアの数は、２つに限定せず、これより多くのＣＰＵコアを備えても良い。また、処理部１は、複数のＣＰＵを備えたマルチプロセッサによって構成されてもよい。
【００２８】
ここで、記憶部２に記憶されたハイブリッド並列処理プログラム２２は、移動可能な記憶媒体に記録することが可能である。記憶媒体とは、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ）や、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）インターフェースを搭載したフラッシュメモリ（ＵＳＢメモリ）等に例示される。ハイブリッド並列処理プログラム２２は、このような記録媒体により流通が可能である。ハイブリッド並列処理プログラム２２は、図示されないノード１００のＣＤドライブや、ＵＳＢインターフェースを介して、ノード１００へ導入される。また、ハイブリッド並列処理プログラム２２は、図示されないネットワークに接続されたアプリケーションサーバのＨＤＤにダウンロード可能に記憶されていても良い。この場合、ハイブリッド並列処理プログラム２２は、ネットワークを介して、ノード１００へ導入される。
【００２９】
なお、本実施形態においてハイブリッド並列処理システムは、複数のノード１００により構成されてよい。その場合、各ノード１００は、それぞれ通信部４によりネットワーク等を介して接続されて、データの送受信が可能に構成される。各ノード１００の処理部１の備えるＣＰＵの数あるいはＣＰＵコアの数は同じでもよいし、異なっていても良い。また、各ノード１００の記憶部２には予めハイブリッド並列処理プログラム２２が記憶されていても良いし、主制御を担うノード１００から遠隔で導入されても良い。このように、図１に示した本実施形態のハイブリッド並列処理システムの構成は、あくまで一例であり、これに限定はしない。
【００３０】
続いて、図２は、本実施形態におけるハイブリッド並列処理システムの機能ブロック図である。本実施形態のハイブリッド並列処理システムは、プロセス６１〜６ｎを備える。プロセス６１〜６ｎは、記憶部２に記憶されたハイブリッド並列処理プログラム２２を処理部１が実行することにより実現される。
【００３１】
プロセス６１〜６ｎは、スレッド７２〜７ｍと、既定値設定部８０と、実行時間計測部８１と、再設定部８２とを備える。スレッド７２〜７ｍは、ハイブリッド並列処理プログラム２２における共有並列処理を実行する。既定値設定部８０は、ハイブリッド並列処理プログラム２２における共有並列処理時の各プロセスのスレッド７２〜７ｍの数（以下、スレッド数）を決定する。ここで、スレッド数の既定値は、一般に、ユーザによりハイブリッド並列処理プログラム２２の実行開始時に環境変数を介して指定される。なお、既定値設定部８０は、環境変数による指定が無い場合、システムの既定値を採用する。実行時間計測部８１は、ハイブリッド並列処理プログラム２２の並列処理部分の処理に要する時間である共有並列処理時間を計測する。再設定部８２は、プロセス６１〜６ｎ間で共有並列処理時間と現在のスレッド数とを含む実行情報を交換して、当該プロセスにおける適正なスレッド数である理想スレッド数を算出し、当該プロセスにおけるスレッド数を理想スレッド数に再設定する。
【００３２】
以上が、本実施形態におけるハイブリッド並列処理システムの構成の説明である。
【００３３】
［動作の説明］
次に、上述のような構成による本実施形態のハイブリッド並列処理システムの動作の説明を行う。図３は、本実施形態におけるハイブリッド並列処理システムの動作を示すフローチャートである。
【００３４】
まず、プロセス６１〜６ｎの既定値設定部８０は、ハイブリッド並列処理プログラム２２の実行開始にあたり、それぞれスレッド７１〜７ｍの数の既定値の設定を開始する（ステップＳ１０）。既定値設定部８０は、ハイブリッド並列処理プログラム２２における環境変数を参照する（ステップＳ２０）。既定値設定部８０は、環境変数が存在するか否かを判定して（ステップＳ３０）、存在する場合（ステップＳ３０のＹｅｓ）、環境変数に基づいて、それぞれプロセス６１〜６ｎのスレッド７１〜７ｍの数を設定する（ステップＳ４０）。一方、既定値設定部８０は、環境変数が存在しない場合（ステップＳ３０のＮｏ）、システムであるＯＳ２１の既定値に基づいて、それぞれプロセス６１〜６ｎのスレッド７１〜７ｍの数を設定する（ステップＳ５０）。
【００３５】
続いて、プロセス６１〜６ｎは、それぞれハイブリッド並列処理プログラム２２の実行を開始する（ステップＳ６０）。プロセス６１〜６ｎの実行時間計測部８１は、ハイブリッド並列処理プログラム２２における共有並列処理部分に到達する（ステップＳ７０）と、それぞれ共有並列処理の実行開始時刻を取得する（ステップＳ８０）。その後、プロセス６１〜６ｎのスレッド７１〜７ｍは、それぞれ共有並列処理部分の処理を実行する（ステップＳ９０）。プロセス６１〜６ｎの実行時間計測部８１は、各プロセス６１〜６ｎのスレッド７１〜７ｍによる共有並列処理部分の実行が完了すると、共有並列処理の実行完了時刻を取得する（ステップＳ１００）。実行時間計測部８１は、それぞれのプロセス６１〜６ｎにおける共有並列処理の実行開始時刻から実行完了時刻の差を算出して、共有並列処理部分の実行時間である共有並列処理時間を求める（ステップＳ１１０）。実行時間計測部８１は、それぞれ共有並列処理時間を保持する。
【００３６】
その後、プロセス６１〜６ｎは、共有並列処理が完了すると、分散並列処理を行うプロセス６１〜６ｎの間における通信処理を開始する（ステップＳ１２０）。プロセス６１〜６ｎの再設定部８２は、それぞれ通信処理において、計算の行われたデータのデータ転送処理（ステップＳ１３０）と共に、他のプロセス６１〜６ｎの再設定部８２との間で共有並列処理時間とスレッド７１〜７ｍの数を含めた実行情報を交換する（ステップＳ１４０）。再設定部８２は、通信処理により取得された実行情報に基づいて、適正なスレッド数である理想スレッド数を算出し（ステップＳ１５０）、算出された理想スレッド数を設定する（ステップＳ１６０）。
【００３７】
ここで、再設定部８２は、ステップＳ１５０において、以下のように理想スレッド数を算出する。まず、再設定部８２は、利用可能なプロセッサの総数をＣ、実行情報を交換したプロセス数をｐ、プロセスｎのスレッド数をＮｎ、プロセスｎの共有並列処理時間をＴｎ、として、実行情報を交換した全てのプロセスｎにおける共有並列処理時間の延べ時間である総共有並列処理時間Ｔを、以下の数式（１）に基づいて算出する。
【００３８】
0005521644.tif 000002
【００３９】
総共有並列処理時間Ｔは、当該分散並列処理部分において全てのプロセス６１〜６ｎに負荷された総負荷量と等しいと考えられる。次に、再設定部８２は、総共有並列処理時間Ｔを用いて、以下の数式（２）に基づいて、利用可能なプロセッサにおける理想共有並列処理時間Ｔａｖｅを算出する。
【００４０】
0005521644.tif 000003
【００４１】
理想共有並列処理時間Ｔａｖｅは、利用可能なプロセッサに対して当該分散並列処理部分の総負荷量を均一に割り当てた場合に、各プロセッサのプロセスにおいて実行に要すると想定される共有並列処理時間と考えられる。続いて、再設定部８２は、自プロセスの共有並列処理時間Ｔｎを、理想共有並列処理時間Ｔａｖｅに近づけるように自プロセスのスレッド７１〜７ｎの数を補正する。補正後のスレッド７１〜７ｎの数である理想スレッド数をＮｎｎｅｗとすると、再設定部８２は、以下の数式（３）に基づいて算出する。
【００４２】
0005521644.tif 000004
【００４３】
再設定部８２は、このようにして求められた理想スレッド数Ｎｎｎｅｗを、以降の共有並列処理におけるプロセスｎのスレッド数として設定する。数式（３）に示されるように、理想スレッド数Ｎｎｎｅｗは、自プロセスにおける共有並列処理時間Ｔｎと、理想共有並列処理時間Ｔａｖｅとの比率に応じて決定される。そのため、「Ｔｎ＞Ｔａｖｅ」であれば、自プロセスの負荷量が平均の負荷量より多いことを意味し、再設定部８２は、スレッド数を増加させるように補正を行うことになる。一方、「Ｔｎ＜Ｔａｖｅ」であれば、自プロセスの負荷量が平均の負荷量より少ないことを意味し、再設定部８２は、スレッド数を現象させるように補正を行うことになる。
【００４４】
このようなスレッド数の補正により、各プロセス６１〜６ｎにおける共有並列処理時間Ｔｎは、理想共有並列処理時間Ｔａｖｅに近づくことになる。そのため、各プロセス６１〜６ｎは、ハイブリッド並列処理プログラムの分散並列処理部分において、異なる負荷量が割り当てられたとしても、各プロセスにおける並列処理の実行時間を均一にすることが可能となる。これによって、各プロセス６１〜６ｎは、共有並列処理時に他のプロセスによる共有並列処理の完了を待ち合わせる必要が無く、効率的で高速なハイブリッド並列処理を実現できる。
【００４５】
さらに、再設定部８２は、次に示すような理想スレッド数Ｎｎｎｅｗの補正処理を行って、未使用プロセッサの発生を抑える。再設定部８２は、再設定後のプロセス６１〜６ｎにおけるスレッド７１〜７ｎの総数が、利用可能なプロセッサの総数Ｃを下回っている場合、共有並列処理時間Ｔｎの長いプロセス６１〜６ｎから順に１スレッドずつ加算する。再設定部８２は、再設定後のスレッド総数をＮｎｅｗｔｏｔａｌとして、以下の数式（４）に基づいて算出する。
【００４６】
0005521644.tif 000005
【００４７】
さらに、再設定部８２は、利用可能なプロセッサの総数Ｃと再設定後のスレッド総数Ｎｎｅｗｔｏｔａｌとの差で示される未使用プロセッサ数Ｃｄを、以下の数式（５）に基づいて算出する。
【００４８】
0005521644.tif 000006
【００４９】
再設定部８２は、数式（５）により算出された未使用プロセッサ数Ｃｄと同数のスレッドを、並列処理時間Ｔｎの長いプロセス６１〜６ｎから順番に１スレッドずつ加算する。このような処理により、再設定部８２は、未使用のプロセッサを発生させないように、プロセッサ６１〜６ｎの理想スレッド数Ｎｎｎｅｗを補正することができる。
【００５０】
以上が、本実施形態におけるハイブリッド並列処理システムの動作方法の説明である。
【００５１】
［スレッド数の補正例］
次に、上述した、本実施形態におけるハイブリッド並列処理システムにおけるスレッド数の補正処理について、具体例を説明する。
【００５２】
例えば、利用可能プロセッサ数Ｃ＝１６、プロセス数ｐ＝２、プロセスｎにおけるスレッド数Ｎ１＝Ｎ２＝８として、ある共有並列処理における共有並列処理時間が、Ｔ１＝１０［秒］、Ｔ２＝３０［秒］であった場合を考えてみる。
【００５３】
まず、プロセスｐ１、ｐ２の再設定部８２は、それぞれ、総共有並列処理時間Ｔを算出する。総共有並列処理時間Ｔは、数式（１）より、
【００５４】
0005521644.tif 000007
【００５５】
となる。次に、プロセスｐ１、ｐ２の再設定部８２は、それぞれ、理想共有並列処理時間Ｔａｖｅを算出する。理想共有並列処理時間Ｔａｖｅは、数式（２）より、
【００５６】
0005521644.tif 000008
【００５７】
となる。続いて、プロセスｐ１、ｐ２の再設定部８２は、それぞれ、理想スレッド数Ｎｎｎｅｗを算出する。まず、プロセスｐ１の再設定部８２は、理想スレッド数Ｎ１ｎｅｗを、数式（３）により、
【００５８】
0005521644.tif 000009
【００５９】
と算出する。同様に、プロセスｐ２の再設定部８２は、理想スレッド数Ｎ２ｎｅｗを、数式（３）により
【００６０】
0005521644.tif 000010
【００６１】
と算出する。これにより、プロセスｐ１の再設定部８２は、プロセスｐ１のスレッド数を「８」から「４」へ減少させる。またプロセスｐ２の再設定部８２は、プロセスｐ２のスレッド数を「８」から「１２」へ増加させることになる。
【００６２】
さらに、再設定部８２は、再設定後のスレッド総数ＮｎｅｗＴｏｔａｌを、数式（４）により、
【００６３】
0005521644.tif 000011
【００６４】
と算出する。再設定部８２は、利用可能なプロセッサの総数Ｃと再設定後のスレッド総数ＮｎｅｗＴｏｔａｌとの際を、数式（５）により、
【００６５】
0005521644.tif 000012
【００６６】
と算出する。本例の場合、プロセッサの総数Ｃと再設定後のスレッド総数ＮｎｅｗＴｏｔａｌが同数であるため、未使用プロセッサ数Ｃｄは「０」となり、理想スレッド数Ｎｎｎｅｗの補正処理は不要となる。
【００６７】
以上が、本実施形態におけるハイブリッド並列処理システムにおけるスレッド数の補正処理についての具体例の説明である。
【００６８】
ここで、図４は、本実施形態におけるハイブリッド並列処理システムの従来技術に対する効果を説明する図である。図４（ａ）に示すように、従来の手法によれば、プロセス１及びプロセス２のスレッド数は、常に一定である。低負荷のプロセス１は、高負荷のプロセス２より常に先に共有並列処理が完了する。そのため、プロセス間で通信処理を行うタイミングにおいて、プロセス１は、常に待ち合わせが発生することになり、プログラムの実行性能が低下する。
【００６９】
これに対して、本実施形態におけるハイブリッド並列処理システムによれば、プロセス間で通信処理を行うタイミングにおいて、各プロセス間において実行情報を交換して、両プロセスの負荷状態に応じてスレッド数の再設定を行う。その結果、後続の共有並列処理では、実行時間の不均一が解消され、また、ハイブリッド並列処理プログラムの実行時間も短縮されることとなる。
【００７０】
ここまで、実施形態を参照して本発明のハイブリッド並列処理システムの説明を行ってきた。本発明のハイブリッド並列処理システムでは、各プロセスがハイブリッド並列処理プログラムにおける共有並列処理部分を実行中に共有並列処理時間を計測する。各プロセスは、共有並列処理が完了すると、計測された共有並列処理時間と当該プロセスにおける現在のスレッド数とを含めた実行情報を、他のプロセスと交換する。各プロセスは、取得された実行情報に基づいて、共有並列処理部分において各プロセスへの負荷量を均一であったとした場合の、理想スレッド数を算出して、自己の備えるスレッド数を理想スレッド数へ再設定する。
【００７１】
これにより、各プロセスにおけるスレッド数は、各プロセスが処理を行うべき負荷量に対して適正な数となるため、以後の、分散並列処理部分において、各プロセスの負荷量が異なっていたとしても、各プロセスにおける共有並列処理時間を均一にすることができる。このような構成により、本発明のハイブリッド並列処理システムは、各プロセスが共有並列処理時に他のプロセスによる共有並列処理の完了を待ち合わせる必要が無く、効率的で高速なハイブリッド並列処理を実現できる。
【００７２】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明の範囲内で当業者が理解し得る様々な変更を行うことができる。
【００７３】
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００７４】
（付記１）コンピュータプログラムの分散並列処理を実行する複数のプロセス
を備え、前記複数のプロセスの各々は、前記分散並列処理において共有並列処理を実行する一つ以上のスレッドと、前記共有並列処理において、前記複数のプロセスの全てに負荷される総負荷量を前記各プロセスに均一に割り当てた場合の平均負荷量と、前記共有並列処理の実行時において自プロセスに割り当てられた自己負荷量との比率に基づいて、前記共有並列処理を実行するべき理想スレッド数を算出して、前記自プロセスのスレッド数を前記理想スレッド数に再設定する再設定部とを備えるハイブリッド並列処理システム。
【００７５】
（付記２）付記１に記載のハイブリッド並列処理システムであって、前記複数のプロセスの各々は、前記共有並列処理の実行に要した共有並列処理時間を計測する実行時間計測部をさらに備え、前記再設定部は、前記各プロセスの前記共有並列処理時間と前記各プロセスにおける前記スレッド数に基づいて前記総負荷量を前記各プロセスに均一に割り当てた場合に前記各プロセスにおいて前記共有並列処理の実行に要すると想定される理想共有並列処理時間を算出して、前記理想共有並列処理時間と前記各プロセスにおける前記共有並列処理時間との比率に基づいて前記理想スレッド数を算出するハイブリッド並列処理システム。
【００７６】
（付記３）付記２に記載のハイブリッド並列処理システムであって、前記再設定部は、前記分散並列処理における前記複数のプロセス間の通信処理において、他のプロセスから前記各プロセスにおける前記共有並列処理時間と前記各プロセスの備えるスレッド数とを取得するハイブリッド並列処理システム。
【００７７】
（付記４）付記２または付記３に記載のハイブリッド並列処理システムであって、前記再設定部は、前記複数のプロセスを実行可能なプロセッサ総数から、前記複数のプロセスにおける前記理想スレッド数の合計数を減算することで未使用プロセッサ数を算出して、前記未使用プロセッサ数と同数のスレッドを、前記複数のプロセスのうちで前記共有並列処理時間の長いプロセスから順に、一つずつ割り当てて前記理想スレッド数を補正するハイブリッド並列処理システム。
【００７８】
（付記５）付記２から付記４までのいずれかに記載のハイブリッド並列処理システムであって、前記再設定部は、前記複数のプロセスの数をｐ、前記複数のプロセスのうちプロセスｎの備える前記スレッドの数をＮｎ、前記プロセスｎにおける前記自己負荷量である前記共有並列処理時間をＴｎとして、前記総負荷量である総共有並列処理時間Ｔを、
0005521644.tif 000013
により算出して、さらに、前記プロセッサ総数をＣとして、前記平均負荷量である理想共有並列時間Ｔａｖｅを、
0005521644.tif 000014
により算出して、前記プロセスｎにおける理想スレッド数Ｎｎｎｅｗを、
0005521644.tif 000015
により算出するハイブリッド並列処理システム。
【００７９】
（付記６）付記２から付記５までのいずれかに記載のハイブリッド並列処理システムであって、前記再設定部は、前記理想スレッド数の総数ＮＮｅｗＴｏｔａｌを、
0005521644.tif 000016
により算出して、さらに、未使用プロセッサ数Ｃｄを、
0005521644.tif 000017
により算出するハイブリッド並列処理システム。
【００８０】
（付記７）複数のプロセスによりコンピュータプログラムの分散並列処理を実行するステップと、一つ以上のスレッドにより前記分散並列処理において共有並列処理を実行するステップと、前記共有並列処理において、前記複数のプロセスの全てに負荷される総負荷量を前記各プロセスに均一に割り当てた場合の平均負荷量と、前記共有並列処理の実行時において自プロセスに割り当てられた自己負荷量との比率に基づいて、前記共有並列処理を実行するべき理想スレッド数を算出するステップと、前記自プロセスのスレッド数を前記理想スレッド数に再設定するステップと備えるハイブリッド並列処理方法。
【００８１】
（付記８）付記７に記載のハイブリッド並列処理方法であって、前記複数のプロセスの各々は、前記共有並列処理の実行に要した共有並列処理時間を計測するステップをさらに備え、前記共有並列処理を実行するべき理想スレッド数を算出するステップは、前記各プロセスの前記共有並列処理時間と前記各プロセスにおける前記スレッド数に基づいて前記総負荷量を前記各プロセスに均一に割り当てた場合に前記各プロセスにおいて前記共有並列処理の実行に要すると想定される理想共有並列処理時間を算出するステップと、前記理想共有並列処理時間と前記各プロセスにおける前記共有並列処理時間との比率に基づいて前記理想スレッド数を算出するステップとを含むハイブリッド並列処理方法。
【００８２】
（付記９）付記８に記載のハイブリッド並列処理方法であって、前記分散並列処理における前記複数のプロセス間の通信処理において、他のプロセスから前記各プロセスにおける前記共有並列処理時間と前記各プロセスの備えるスレッド数とを取得するステップをさらに備えるハイブリッド並列処理方法。
【００８３】
（付記１０）付記８または付記９に記載のハイブリッド並列処理方法であって、前記共有並列処理を実行するべき理想スレッド数を算出するステップは、前記複数のプロセスを実行可能なプロセッサ総数から、前記複数のプロセスにおける前記理想スレッド数の合計数を減算することで未使用プロセッサ数を算出するステップと、前記未使用プロセッサ数と同数のスレッドを、前記複数のプロセスのうちで前記共有並列処理時間の長いプロセスから順に、一つずつ割り当てて前記理想スレッド数を補正するステップとを含むハイブリッド並列処理方法。
【００８４】
（付記１１）付記項８から付記１０までのいずれかに記載のハイブリッド並列処理方法であって、前記共有並列処理を実行するべき理想スレッド数を算出するステップは、前記複数のプロセスの数をｐ、前記複数のプロセスのうちプロセスｎの備える前記スレッドの数をＮｎ、前記プロセスｎにおける前記自己負荷量である前記共有並列処理時間をＴｎとして、前記総負荷量である総共有並列処理時間Ｔを、
0005521644.tif 000018
により算出して、さらに、前記プロセッサ総数をＣとして、前記平均負荷量である理想共有並列時間Ｔａｖｅを、
0005521644.tif 000019
により算出して、前記プロセスｎにおける理想スレッド数Ｎｎｎｅｗを、
0005521644.tif 000020
により算出するステップを含むハイブリッド並列処理方法。
【００８５】
（付記１２）付記８から付記１１までのいずれかに記載のハイブリッド並列処理方法であって、前記共有並列処理を実行するべき理想スレッド数を算出するステップは、前記理想スレッド数の総数ＮＮｅｗＴｏｔａｌを、
0005521644.tif 000021
により算出して、さらに、未使用プロセッサ数Ｃｄを、
0005521644.tif 000022
により算出するステップ
を含むハイブリッド並列処理方法。
【００８６】
（付記１３）付記７から付記１２までのいずれかに記載のハイブリッド並列処理方法をコンピュータに実行させるハイブリッド並列処理プログラム。
【符号の説明】
【００８７】
１  処理部
２  記憶部
３  入出力部
４  通信部
５  バス
１１  ＣＰＵコア
１２  ＣＰＵコア
２１  ＯＳ
２２  ハイブリッド並列処理プログラム
６１〜６ｎ  プロセス
７１〜７ｎ  スレッド
８０  既定値設定部
８１  実行時間計測部
８２  再設定部
１００  ノード
【図１】
0005521644.tif 000023
【図２】
0005521644.tif 000024
【図３】
0005521644.tif 000025
【図４】
0005521644.tif 000026