(57)【要約】【課題】  バリア同期に要する時間を短縮することを可能にするバリア同期装置等を提供する。【解決手段】  バリア同期装置１００は、並列プログラムにおける複数のスレッドのうち、バリア同期点に未到達であるスレッドの数に基づいて通知を発生する通知部１１０と、マルチコアプロセッサに含まれるプロセッサコアのうち、スレッドを実行するプロセッサコアの動作状態を通知に応じて制御するプロセッサ制御部１２０と、通知に応じて、スレッドの実行状態を変更する並列プログラム制御部１３０とを備える。【選択図】      図１
2017016250.tif 000002
【特許請求の範囲】
【請求項１】
並列プログラムにおける複数のスレッドのうち、バリア同期点に未到達である前記スレッドの数に基づいて通知を発生する通知手段と、
マルチコアプロセッサに含まれるプロセッサコアのうち、前記スレッドを実行する前記プロセッサコアの動作状態を前記通知に応じて制御するプロセッサ制御手段と、
前記通知に応じて、前記スレッドの実行状態を変更する並列プログラム制御手段とを備える、バリア同期装置。
【請求項２】
前記スレッドを実行する前記プロセッサコアの動作速度を変更する速度変更手段を備える、請求項１に記載のバリア同期装置。
【請求項３】
前記通知手段は、バリア同期点に未到達である前記スレッドが１以上の所定の数である場合に通知を発生する、請求項１又は２に記載のバリア同期装置。
【請求項４】
前記通知手段は、バリア同期点に未到達である前記スレッドが０である場合に通知を発生する、請求項１から３のいずれか一項に記載のバリア同期装置。
【請求項５】
前記プロセッサ制御手段は、バリア同期点に未到達である前記スレッドが１以上の所定の数である場合における前記通知に基づいて、バリア同期点に到達した前記スレッドを実行する前記プロセッサコアを停止状態とするように制御する、請求項１から４のいずれか一項に記載のバリア同期装置。
【請求項６】
前記プロセッサ制御手段は、バリア同期点に未到達である前記スレッドが０である場合における前記通知に基づいて、停止状態にある前記プロセッサコアを動作状態とするように制御する、請求項１から５のいずれか一項に記載のバリア同期装置。
【請求項７】
前記速度変更手段は、停止状態にある前記プロセッサコアの数に基づいて、バリア同期点に未到達である前記スレッドを実行する前記プロセッサコアの動作速度を高めるように変更する、請求項１から６のいずれか一項に記載のバリア同期装置。
【請求項８】
前記速度変更手段は、複数の前記スレッドの全てがバリア同期点に到達した場合に、前記プロセッサコアの動作速度を通常の動作速度に変更する、請求項１から７のいずれか一項に記載のバリア同期装置。
【請求項９】
並列プログラムにおける複数のスレッドのうち、バリア同期点に未到達である前記スレッドの数に基づいて通知を発生し、
マルチコアプロセッサに含まれるプロセッサコアのうち、前記スレッドを実行する前記プロセッサコアの動作状態を前記通知に応じて制御し、
前記通知手段からの通知に応じて、前記スレッドの実行状態を変更し、
前記スレッドを実行する前記プロセッサコアの動作速度を変更する、バリア同期方法。
【請求項１０】
コンピュータに、
並列プログラムにおける複数のスレッドのうち、バリア同期点に未到達である前記スレッドの数に基づいて通知を発生する処理と、
マルチコアプロセッサに含まれるプロセッサコアのうち、前記スレッドを実行する前記プロセッサコアの動作状態を前記通知に応じて制御する処理と、
前記通知手段からの通知に応じて、前記スレッドの実行状態を変更する処理と、
前記スレッドを実行する前記プロセッサコアの動作速度を変更する処理とを実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バリア同期装置、バリア同期方法及びプログラムに関する。
【背景技術】
【０００２】
一つのタスクが複数のプロセッサで行われる並列計算においては、当該一つのタスクがスレッド等と呼ばれるより小さな複数の処理単位に分割され、スレッドの各々が複数のプロセッサに割当てられて実行される。
【０００３】
上述したタスクは、１つのパッケージに複数のプロセッサコア（以下、「コア」と記載する場合がある）が封入されたマルチコアプロセッサにて実行される場合がある。マルチコアプロセッサの高速化に関する技術の一例として、インテル社のインテル ターボ・ブースト・テクノロジーと呼ばれる技術が存在する。この技術が採用されたマルチコアプロセッサにおいては、動作しているコアの数等に応じて、コアが定格の動作周波数と比較して高速な動作周波数で動作する。
【０００４】
一方、複数のスレッドの間には、例えば一つのスレッドにおける処理結果を他のスレッドが用いる等、依存関係が生じる場合がある。そのため、依存関係がある複数のスレッドが実行される際には、複数のスレッドが予め定められた任意の箇所で処理を停止して待ち合わせを行う同期処理が行われる場合がある。この処理は、バリア同期と呼ばれる。バリア同期が行われる際には、先に終了したスレッドは、全てのスレッドが終了するまで動作を一時的に停止する。並列計算を高速化するためには、バリア同期に要する時間を短縮することが必要となる。
【０００５】
特許文献１には、バリア同期装置が記載されている。特許文献１に記載のバリア同期装置は、第１のレジスタにより指定されたバリア同期の対象となる全てのプロセッサからの同期リクエストが第２のレジスタに保持されると、当該プロセッサにバリア同期が成立した旨を通知する手段を含む。
【０００６】
特許文献２には、バリア同期方法等が記載されている。この方法は、バリア同期処理の実行時に、設定されたバリア同期中断プロセッサ数と同じ個数のプロセッサがバリア同期ポイントに達した時点で、バリア同期機構にバリア同期ポイントに到達したプロセッサ全てに割り込みを発生させる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平０９−６７３４号公報
【特許文献２】特開平１１−３１２１４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１又は２に記載の技術においては、バリア同期に関連するスレッドの実行速度に関する考慮が必ずしもなされていない。すなわち、特許文献１又は２に記載の技術では、バリア同期に要する時間を短縮することが困難である。
【０００９】
本発明は、上記課題を解決するためになされたものであって、バリア同期に要する時間の短縮を可能にするバリア同期装置等を提供することを主たる目的とする。
【課題を解決するための手段】
【００１０】
本発明の一態様におけるバリア同期装置は、並列プログラムにおける複数のスレッドのうち、バリア同期点に未到達であるスレッドの数に基づいて通知を発生する通知手段と、マルチコアプロセッサに含まれるプロセッサコアのうち、スレッドを実行するプロセッサコアの動作状態を通知に応じて制御するプロセッサ制御手段と、通知に応じて、スレッドの実行状態を変更する並列プログラム制御手段とを備える。
【００１１】
本発明の一態様におけるバリア同期方法は、並列プログラムにおける複数のスレッドのうち、バリア同期点に未到達であるスレッドの数に基づいて通知を発生し、マルチコアプロセッサに含まれるプロセッサコアのうち、スレッドを実行するプロセッサコアの動作状態を通知に応じて制御し、通知手段からの通知に応じて、スレッドの実行状態を変更し、スレッドを実行するプロセッサコアの動作速度を変更する。
【００１２】
本発明の一態様におけるプログラムは、コンピュータに、並列プログラムにおける複数のスレッドのうち、バリア同期点に未到達であるスレッドの数に基づいて通知を発生する処理と、マルチコアプロセッサに含まれるプロセッサコアのうち、スレッドを実行するプロセッサコアの動作状態を通知に応じて制御する処理と、通知手段からの通知に応じて、スレッドの実行状態を変更する処理と、スレッドを実行するプロセッサコアの動作速度を変更する処理とを実行させる。
【発明の効果】
【００１３】
本発明によると、バリア同期に要する時間の短縮を可能にするバリア同期装置を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態におけるバリア同期装置の構成を示す図である。
【図２】本発明の第１の実施形態におけるバリア同期装置が対象とする並列プログラムの動作例を示す図である。
【図３】本発明の第１の実施形態におけるバリア同期装置の通知部にて用いられる管理テーブルの一例を示す図である。
【図４】本発明の第１の実施形態におけるバリア同期装置の動作の一例を示すフローチャートである。
【図５】本発明の第１の実施形態におけるバリア同期装置の動作の別の一例を示すフローチャートである。
【図６】本発明の第１の実施形態におけるバリア同期装置によるプロセッサコアの動作状態及び動作速度の変更例を示す図である。
【図７】本発明の第１の実施形態の変形例におけるバリア同期装置の構成を示す図である。
【図８】本発明の各実施形態におけるバリア同期装置等を実現する情報処理装置の一構成例を示す図である。
【発明を実施するための形態】
【００１５】
本発明の各実施形態について、添付の図面を参照して説明する。本発明の各実施形態において、各装置の各構成要素は、機能単位のブロックを示している。各装置の各構成要素は、例えば図８に示すような情報処理装置５００とソフトウェアとの任意の組み合わせにより実現することができる。情報処理装置５００は、一例として、以下のような構成を含む。
【００１６】
・ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５０１
・ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）５０２
・ＲＡＭ（Ｒａｍｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）５０３
・ＲＡＭ５０３にロードされるプログラム５０４
・プログラム５０４を格納する記憶装置５０５
・記憶媒体５０６の読み書きを行うドライブ装置５０７
・通信ネットワーク５０９と接続する通信インターフェース５０８
・データの入出力を行う入出力インターフェース５１０
・各構成要素を接続するバス５１１
なお、ＣＰＵ５０１は、マルチコアプロセッサであってもよい。図８に示す例では、ＣＰＵ５０１は、コア５０１−１から５０１−４の4つのコアを含む。後述する本発明の各実施形態におけるバリア同期装置が同期の対象とする並列プログラムは、マルチコアプロセッサにて実行されることを想定する。また、各装置の実現方法には様々な変形例がある。例えば、各装置は、専用の装置として実現することができる。また、各装置は、複数の装置の組み合わせにより実現することができる。
【００１７】
（第１の実施形態）
まず、本発明の第１の実施形態について説明する。図１は、本発明の第１の実施形態におけるバリア同期装置の構成を示す図である。図２は、本発明の第１の実施形態におけるバリア同期装置が対象とする並列プログラムの動作例を示す図である。図３は、本発明の第１の実施形態におけるバリア同期装置の通知部にて用いられる管理テーブルの一例を示す図である。図４は、本発明の第１の実施形態におけるバリア同期装置の動作の一例を示すフローチャートである。図５は、本発明の第１の実施形態におけるバリア同期装置の動作の別の一例を示すフローチャートである。図６は、本発明の第１の実施形態におけるバリア同期装置によるプロセッサコアの動作状態及び動作速度の変更例を示す図である。
【００１８】
図１に示すとおり、本発明の第１の実施形態におけるバリア同期装置１００は、通知部１１０と、プロセッサ制御部１２０と、並列プログラム制御部１３０と、速度変更部１４０とを有する。通知部１１０は、並列プログラムにおける複数のスレッドのうち、バリア同期点に未到達であるスレッドの数に基づいて通知を発生する。プロセッサ制御部１２０は、マルチコアプロセッサに含まれるプロセッサコアのうち、スレッドを実行するプロセッサコアの動作状態を通知部１１０からの通知に応じて制御する。並列プログラム制御部１３０は、通知部１１０からの通知に応じて、スレッドの実行状態を変更する。速度変更部１４０は、スレッドを実行するプロセッサコアの動作速度を変更する。
【００１９】
なお、本発明の第１の実施形態におけるバリア同期装置１００にてバリア同期の対象となる並列プログラムは、図８に示すようなマルチコアプロセッサを含む情報処理装置において実行されることを想定する。すなわち、本実施形態におけるバリア同期装置１００にてバリア同期の対象となる並列プログラムは、マルチコアプロセッサにおいて実行されることを想定する。並列プログラムの少なくとも一部の処理は、各々が当該並列プログラムの部分的な処理である複数のスレッドに分けられる。また、スレッドは、例えばマルチコアプロセッサの各々のコアにて並列に実行される。
【００２０】
本実施形態においては、図２に示す並列プログラムの例を用いてバリア同期装置１００の構成及び動作を説明する。図２に示す例において、並列プログラム２００の処理の一部は、スレッド２０１−１から２０１−４の各々に処理が分けられて実行される。また、スレッド２０１−１から２０１−４の各々は、図８に示す情報処理装置５００等が備えるＣＰＵ５０１に含まれるコア５５１−１から５５１−４にてそれぞれ実行される。すなわち、図２に示す例では、スレッド２０１−１はコア５５１−１にて、スレッド２０１−２はコア５５１−２にて、スレッド２０１−３はコア５５１−３にて、スレッド２０１−４はコア５５１−４にて実行される。
【００２１】
また、本実施形態においては、ＣＰＵ５０１に含まれるコア５５１−１から５５１−４の各々の動作速度（例えば動作周波数）は、実際に動作を行うコアの数に応じて変更可能であることを想定する。例えば、図２に示すコア５５１−１から５５１−４のうち、一部のコアが予め定められた停止状態である場合には、通常の動作を行う他のコアは、予め定められた通常の動作速度と比較して高い動作速度にて実行する。例えば、上述した通常の動作を行う他のコアは、予め定められた定格の動作周波数と比較して高い動作周波数にて実行する。
【００２２】
この場合において、当該他のコアの動作速度は、ＣＰＵ５０１に対して指定された熱設計電力や、通常の動作を行うコアの数等に応じて適宜定められる。また、停止状態は、例えば、コアに対してクロックや電力等の供給が停止した状態である。この停止状態は、コアにおける負荷や発熱量の任意の指標の値等が予め定められた大きさより小さい場合であってもよい。
【００２３】
なお、本実施形態におけるバリア同期装置１００と、バリア同期装置１００がバリア同期の対象とする並列プログラムとは、例えば同一の情報処理装置にて実行されるが、これに限られない。
【００２４】
続いて、本実施形態におけるバリア同期装置１００の各構成要素について説明する。
【００２５】
通知部１１０は、バリア同期点に未到達であるスレッドの数に基づいて通知を発生する。上述したスレッドの各々は、同じ並列プログラムの処理の一部に関連する。すなわち、このスレッドの各々は、バリア同期装置１００が同期の対象とする並列プログラムに含まれる。
【００２６】
スレッドがバリア同期点に未到達であるとは、当該スレッドの処理が、バリア同期点として予め定められた処理に至っていないことを示す。言い換えると、スレッドがバリア同期点に到達したとは、バリア同期点として予め定められた処理に処理が進んだことを示す。バリア同期点に到達したスレッドは、並列プログラムに含まれる他の全てのスレッドが到達するまで処理を一時的に停止する。並列プログラムに含まれる全てのスレッドがバリア同期点に到達すると、並列プログラムに含まれるスレッドの各々は、バリア同期点として予め定められた処理から後の処理の実行を再開する。
【００２７】
通知は、バリア同期装置１００が備える他の構成要素を主たる対象とする。また、通知は、ハードウェア又はソフトウェアの割り込みの形式にて行われる。ただし、この通知は、バリア同期装置１００の他の構成要素が当該通知に基づいて動作することが可能である任意の形式であってもよい。
【００２８】
通知部１１０が通知を発生する基準となるスレッドの数は、例えば、マルチコアプロセッサにおいて、通常の動作を行うコアの動作速度を高めることが可能になるコアの数に応じて定められる。例えば、バリア同期点に未到達であるスレッドの数が減少し、当該スレッドの各々を実行するマルチコアプロセッサにて通常の動作を行うコアの動作速度を高めることが可能になる数に至った場合に、通知部１１０は通知を発生する。
【００２９】
一例として、図２に示すＣＰＵ５０１において、１つのコアのみが動作し、他のコアが停止状態である場合に当該１つのコアの動作速度を高めることが可能であることを想定する。この例においては、通知部１１０は、バリア同期点に未到達であるスレッドの数が１つである場合に通知を発生する。
【００３０】
なお、通知部１１０は、バリア同期点に未到達であるスレッドの数が２つ以上の任意の数である場合に通知を発生してもよい。図２に示すＣＰＵ５０１において、例えば２つのコアが停止状態である場合に、動作する２つのコアの動作速度を高めることが可能であれば、通知部１１０は、バリア同期点に未到達であるスレッドの数が２つである場合に通知を発生する。
【００３１】
また、一部のマルチコアプロセッサにおいては、動作するコアの数に応じて、そのコアの動作速度が変更される場合がある。このようなマルチコアプロセッサでは、例えば動作するコアが２つである場合には、通常の動作速度と比較して高い動作速度が設定される。そして、動作するコアが１つである場合には、動作するコアが２つである場合と比較して更に高い動作速度が設定される。通知部１１０は、上述したマルチコアプロセッサにおいて実行されるスレッドを対象とする場合には、バリア同期点に未到達であるスレッドの数が１つである場合と、２つである場合との両方の場合において通知を発生してもよい。
【００３２】
このように通知部１１０が通知を発生することで、他の構成要素が、バリア同期点に未到達であるスレッドを実行するコアの動作速度を高めるように制御することが可能となる。
【００３３】
更に、通知部１１０は、バリア同期点に未到達であるスレッドが０である場合に通知を発生してもよい。この場合には、通知部１１０は、バリア同期点に未到達であるスレッドが１以上である場合と区別可能な形式にて通知してもよい。
すなわち、通知部１１０は、バリア同期点に未到達であるスレッドの数に応じて通知の形式を変更してもよい。なお、通知部１１０は、バリア同期点に未到達であるスレッドの数に関わらず、同じ形式にて通知を発生してもよい。この場合には、例えば、後述するプロセッサ制御部１３０や速度変更部１４０等が、バリア同期点に未到達であるスレッドの数に応じた制御を行う。
【００３４】
通知部１１０は、図３に示す管理テーブル１１１を参照する等して、バリア同期点に未到達であるスレッドの数に関する情報を取得する。図３に示す管理テーブル１１１は、スレッド状態１１２と、同期待ちスレッド数１１３との２つの情報を含む。
【００３５】
管理テーブル１１１において、スレッド状態１１２は、バリア同期装置１００が同期の対象とする並列プログラムに含まれるスレッドの各々に関するバリア同期点への到達の状況を表す。例えば、バリア同期点に未到達であるスレッドは“１”、バリア同期点に到達したスレッドは“０”として表される。
【００３６】
図３に示す例では、スレッド状態１１２は“１１１１”である。これは、バリア同期装置１００が同期の対象とする並列プログラムに含まれるスレッドが４つであり、そのいずれもがバリア同期点に未到達であることを示す。
【００３７】
また、管理テーブル１１１において、同期待ちスレッド数は、バリア同期点に未到達であるスレッドの数を示す。図３に示す例では、バリア同期点に未到達であるスレッドの数は４つである。
【００３８】
なお、管理テーブルは、例えばＣＰＵ５０１が備えるレジスタ等にて保持されてもよいし、その他の任意の記憶装置に記憶されてもよい。また、管理テーブルにて管理される情報は、例えばコア５５１−１から５５１−４の各々によってスレッドの状況に応じて更新されてもよいし、他の任意の手段にて適宜更新されてもよい。
【００３９】
また、通知部１１０は、図３に示す管理テーブル１１１の参照とは異なる任意の手順にてバリア同期点に未到達であるスレッドの数に関する情報を取得してもよい。
【００４０】
プロセッサ制御部１２０は、通知部１１０からの通知に応じて、マルチコアプロセッサに含まれるプロセッサコアのうち、スレッドを実行するプロセッサコアの動作状態を制御する。
【００４１】
一例として、プロセッサ制御部１２０は、バリア同期点に未到達であるスレッドの数が、通常の動作を行うコアの動作速度を高めることが可能になる数に至った場合にスレッドを実行するコアの動作状態を変更する。この場合には、プロセッサ制御部１２０は、バリア同期点に到達したスレッドを実行するコアを上述した停止状態等に変更するように、コアの動作状態を制御する。このような制御により、一部のコアが停止状態である場合に通常の動作を行う他のコアを通常の動作速度と比較して高い動作速度にて実行させるプロセッサにおいて、通常の動作を行うコアの動作速度を高めることが可能となる。
【００４２】
すなわち、プロセッサ制御部１２０が上述の制御を行うことで、バリア同期点に未到達であり、処理が継続して行われるスレッドを実行するコアの動作速度を高めることが可能になる。そして、バリア同期点に未到達であるスレッドがバリア同期点に到達するまでに行われる処理に要する時間の短縮が可能となる。
【００４３】
なお、プロセッサ制御部１２０は、バリア同期点に未到達であり、処理が継続して行われるスレッドを実行するコアの動作速度を高めることが可能となる任意の状態になるように、コアの動作状態を制御してもよい。つまり、プロセッサ制御部１２０は、バリア同期点に到達したスレッドを実行するコアを上述した停止状態等に変更しなくてもよい。プロセッサ制御部１２０が制御するコアの動作状態は、スレッドが実行されるマルチコアプロセッサの仕様等に応じて適宜定められる。
【００４４】
また、プロセッサ制御部１２０は、バリア同期点に未到達であるスレッドが０である場合に発生した通知に応じて、コアの動作を制御してもよい。この場合には、プロセッサ制御部１２０は、停止状態であるコアを通常の動作を行う状態に変更するように、コアの動作を制御する。
【００４５】
バリア同期点に未到達であるスレッドが０である場合には、並列プログラムに含まれる全てのスレッドにおける処理がバリア同期点に到達したことが想定される。すなわち、並列プログラムに含まれる全てのスレッドに関する同期処理が完了したと考えられる。そして、先行してバリア同期点に到達したスレッドを実行するコアは、例えば先にプロセッサ制御部１２０により行われた制御によって、停止状態であることが想定される。
【００４６】
この場合に、プロセッサ制御部１２０は、スレッドの各々がバリア同期点から後の処理の実行を再開するよう、停止状態であるコアを通常の動作を行う状態に変更する。すなわち、このような制御により、スレッドの各々について、バリア同期点から後の処理の実行が開始される。
【００４７】
並列プログラム制御部１３０は、通知部１１０からの通知に応じて、スレッドの実行状態を変更する。
【００４８】
一例として、並列プログラム制御部１３０は、バリア同期点に未到達であるスレッドの数が減少し、通常の動作を行うコアの動作速度を高めることが可能になる数に至った場合に、バリア同期に到達したスレッドの実行状態を変更する。この場合には、並列プログラム制御部１３０は、バリア同期点に到達したスレッドを停止するように、スレッドの動作状態を制御する。なお、本実施形態において、スレッドを停止するとは、スレッドの実行が一時的に中断されるように、スレッドの状態が設定されることを示す。
【００４９】
バリア同期の対象となるスレッドは、バリア同期点に到達した場合においても、他のスレッドがバリア同期点に到達したことを確認する処理を行う場合がある。この場合に、上述した確認の処理がプロセッサ制御部１２０にて停止状態にされたコアとは異なる他のコアで実行されると、バリア同期点に未到達であるスレッドの処理速度等に影響が及ぶ可能性がある。
そこで、並列プログラム制御部１３０は、バリア同期に到達したスレッドの実行状態を停止状態等に変更する。このような制御により、バリア同期に未到達であるスレッドにおける処理が、バリア同期に到達したスレッドによって影響を受ける可能性が小さくなる。
【００５０】
また、並列プログラム制御部１３０は、バリア同期点に未到達であるスレッドが０である場合に発生した通知に応じて、スレッドの実行状態を制御してもよい。この場合には、並列プログラム制御部１３０は、停止されたスレッドの実行を再開させるように、スレッドの実行状態を制御する。
【００５１】
なお、バリア同期点に未到達であるスレッドが０である場合には、上述のように、並列プログラムに含まれる全てのスレッドにおける処理がバリア同期点に到達したことが想定される。このような制御により、スレッドの各々について、バリア同期点から後の処理が行われる。
【００５２】
速度変更部１４０は、スレッドを実行するプロセッサコアの動作速度を変更する。
【００５３】
速度変更部１４０は、コアの動作状態に応じて、コアの動作速度を変更する。例えば、本実施形態においては、速度変更部１４０は、コアが通常の動作速度で動作している場合に、他のコアの動作状態に応じて、動作速度を高めるように変更することが想定される。また、速度変更部１４０は、コアが通常の動作速度よりも高い動作速度にて動作する場合に、コアの動作速度を通常の動作速度とするように変更してもよい。
【００５４】
一例として、速度変更部１４０は、バリア同期点に未到達のスレッドが存在し、処理が継続して行われるスレッドを実行するコアの動作速度を高めることが可能な状態である場合に、スレッドを実行するコアの動作速度を変更する。速度変更部１４０は、一部のコアにおいてバリア同期点に未到達であるスレッドの処理が継続して行われており、他のコアが停止状態にある場合に、当該スレッドを実行するコアの動作速度を変更する。すなわち、速度変更部１４０は、停止状態にあるコアの数に基づいて、バリア同期点に未到達であるスレッドを実行するコアの動作速度を変更する。
【００５５】
この場合には、速度変更部１４０は、バリア同期点に未到達のスレッドを実行するコアの動作速度を高めるように制御する。例えば、速度変更部１４０は、コアの動作周波数を高めるように制御する。
【００５６】
また、別の例として、速度変更部１４０は、バリア同期点に未到達のスレッドが０である場合に、スレッドを実行するコアの動作速度を変更する。
この例においては、速度変更部１４０は、通常よりも高い動作速度で動作するコアが存在する場合には、そのコアを通常の動作速度にて動作するように制御する。
【００５７】
続いて、図４及び図５に示すフローチャートを用いて、本発明の第１の実施形態におけるバリア同期装置１００の動作の一例を説明する。
【００５８】
図４に示すフローチャートは、バリア同期処理が行われる場合のバリア同期装置１００の動作の例を示す。すなわち、図４に示すフローチャートは、バリア同期点に未到達のスレッドの数が減少し、バリア同期点に未到達のスレッドを実行するコアの動作速度が高められる場合のバリア同期装置１００の動作の例を示す。
【００５９】
まず、通知部１１０は、バリア同期点に未到達であるスレッドの数に基づいて通知を発生する（ステップＳ１０１）。この場合に、通知部１１０は、バリア同期点に未到達であるスレッドの数が減少し、当該スレッドの各々を実行するマルチコアプロセッサにて通常の動作を行うコアの動作速度を高めることが可能になる数に至った場合に、通知を発生する。
【００６０】
続いて、プロセッサ制御部１２０は、バリア同期点に到達したスレッドの動作を停止状態とする（ステップＳ１０２）。
【００６１】
そして、並列プログラム制御部１３０は、バリア同期に到達したスレッドを実行するコアの動作状態を停止状態に変更するよう制御する（ステップＳ１０３）。ステップＳ１０２及びステップＳ１０３の処理の順番は任意である。すなわち、上述の順番とは異なり、ステップＳ１０３の処理がステップＳ１０２の処理に先行して行われてもよいし、ステップＳ１０２及びステップＳ１０３の処理が並行して行われてもよい。
【００６２】
速度変更部１４０は、バリア同期点に未到達であるスレッドを実行するコアの動作速度を高めるように変更する（ステップＳ１０４）。ステップＳ１０４の処理において、動作速度が変更されるコアは、ステップＳ１０３において停止状態とされていないコアである。ステップＳ１０４において、コアの動作速度を高めるような変更が行われることで、バリア同期点に未到達であるスレッドが、コアが通常の動作速度にて動作する場合と比較して高速に実行される。したがって、並列プログラムがバリア同期点に到達するまでに要する時間が短くなる。
【００６３】
また、本実施形態におけるバリア同期装置１００は、バリア同期点に未到達のスレッドの数が０となった場合に、停止状態にあるコアを、通常の動作を行うよう状態に変更してもよい。図５に示すフローチャートを用いて、この場合におけるバリア同期装置１００の動作の一例を説明する。すなわち、図５は、バリア同期処理が完了した後におけるバリア同期装置１００の動作の例を示す。
【００６４】
まず、通知部１１０は、バリア同期点に未到達であるスレッドの数に基づいて通知を発生する（ステップＳ１１１）。すなわち、通知部１１０は、バリア同期点に未到達であるスレッドが０である旨の通知を発生する。
【００６５】
ステップＳ１１１における通知部１１０による通知に応じて、以下のどうさがおこなわれる。速度変更部１４０は、動作速度が高められたコアの動作速度を、通常の動作速度に変更する（ステップＳ１１２）。そして、プロセッサ制御部１２０は、停止状態とされているコアの状態を通常の動作を行う状態に変更するよう制御する（ステップＳ１１３）。
【００６６】
続いて、並列プログラム制御部１３０は、バリア同期点に到達し、停止状態にあるスレッドの動作を再開する（ステップＳ１１４）。すなわち、並列プログラムに含まれるスレッドの各々に関して、バリア同期点より後の処理が実行される。
【００６７】
次に、図６を用いて、並列プログラムにおいてバリア同期処理が行われる場合におけるバリア同期装置１００の動作の一例を説明する。
【００６８】
この例においては、並列プログラムは、４つのスレッドに分けられて処理が行われる。図６においては、４つのスレッドのそれぞれには、コア０から３までの番号が付されている。４つのスレッドは、例えば、図８に示すＣＰＵ５０１に含まれるコア５５１−１から５５１−４にてそれぞれ実行される。
【００６９】
この例においては、ＣＰＵ５０１は、コア５５１−１から５５１−４うちの１つが通常の動作を行う状態であり、他の３つが停止状態である場合に、通常の動作を行うコアの動作速度を高めて実行させることを想定する。
【００７０】
バリア同期装置１００は、このような並列プログラムに含まれるスレッドのバリア同期を行う。バリア同期装置１００において、スレッドの動作状態は、図３に示す管理テーブル１１１の形式にて管理される。
【００７１】
図６においては、管理テーブル１１１に含まれるスレッド状態１１２は、スレッド０から３に関するバリア同期点への到達の状況を順に表す。すなわち、図６に含まれるスレッド状態１１２において、例えば、図中の左端の数字はスレッド０に関するバリア同期点への到達の状況を順に表し、図中の右端の数字はスレッド３に関するバリア同期点への到達の状況を順に表す。
【００７２】
図６に示す例では、スレッド０から３の各々において、バリア同期の対象となる処理が行われていることを想定する。したがって、図６において処理の始まりとなる時刻においては、管理テーブル１１１に含まれるスレッド状態１１２は、全てのスレッドがバリア同期の対象となる処理が行われていることを表す“１１１１”となる。また、この場合に、管理テーブル１１１に含まれる同期待ちスレッド数１１３は“４”となる。
【００７３】
図６の例では、処理の始まりとなる時刻からの時間の経過に伴い、スレッド０における処理がバリア同期点に到達する。この場合には、管理テーブル１１１に含まれるスレッド状態１１２は、“０１１１”となる。これは、スレッド０の処理がバリア同期点に到達し、スレッド１から３の各々に関するバリア同期の対象となる処理が実行されていることを表す。また、管理テーブル１１１に含まれる同期待ちスレッド数１１３は“３”となる。なお、この場合には、スレッド１から３の各々を実行するコアの動作速度は変化しない。そして、スレッド０は、スレッド１から３の処理のバリア同期点への到達を待つ状態となる。
【００７４】
続いて、更なる時間の経過に伴い、スレッド１における処理がバリア同期点に到達する。この場合に、管理テーブル１１１に含まれるスレッド状態１１２は、スレッド０及び１の処理がバリア同期点に到達し、スレッド２及び３の各々においてバリア同期の対象となる処理が行われていることを表す“００１１”となる。また、管理テーブル１１１に含まれる同期待ちスレッド数１１３は“２”となる。なお、この場合には、スレッド２及び３の各々を実行するコアの動作速度は変化しない。そして、スレッド１は、スレッド２及び３に関する処理のバリア同期点への到達を待つ状態となる。
【００７５】
続いて、更なる時間の経過に伴い、スレッド２における処理がバリア同期点に到達する。この場合に、管理テーブル１１１に含まれるスレッド状態１１２は、スレッド０から２の各々がバリア同期点に到達し、スレッド３においてバリア同期の対象となる処理が行われていることを表す“０００１”となる。また、管理テーブル１１１に含まれる同期待ちスレッド数１１３は“１”となる。そして、スレッド２は、スレッド３の処理のバリア同期点への到達を待つ状態となる。
【００７６】
この場合において、バリア同期点に未到達であるスレッドは１つである。すなわち、ＣＰＵ５０１に含まれるコアのうち、処理を実行するコアは１つである。したがって、ＣＰＵ５０１は、当該処理を実行する１つのコアの動作速度を高めることが可能となる。そのため、バリア同期装置１００の通知部１１０は、バリア同期点に未到達であるスレッドの数が１つである旨の通知を発生する。
【００７７】
この場合に、通知部１１０にて生じた通知に応じて、並列プログラム制御部１３０は、処理がバリア同期点に到達したスレッド０から２をそれぞれ停止する。また、プロセッサ制御部１２０は、通知部１１０にて生じた通知に応じて、スレッド０から２をそれぞれ実行する３つのコアの状態を停止状態とするように制御する。更に、速度変更部１４０は、スレッド３を実行するコアの動作速度を高めるように変更する。
【００７８】
上述したバリア同期装置１００の各構成要素による動作が行われた後には、スレッド３のバリア同期点に至るまでの処理が継続して行われる。この場合には、スレッド３を実行するコアは、スレッド２における処理がバリア同期点に到達するまでと比較して高い動作速度にて動作する。
【００７９】
そして、スレッド３における処理が継続して行われると、スレッド３の処理はバリア同期点に到達する。スレッド３を実行するコアの動作速度が高められたことで、スレッド３の処理がバリア同期点に到達するまでに要する時間は、コアの動作速度が変更されない場合と比較して短い時間となる。この場合には、管理テーブル１１１に含まれるスレッド状態１１２は、スレッド０から３の各々がバリア同期点に到達したことを表す“００００”となる。また、管理テーブル１１１に含まれる同期待ちスレッド数１１３は“０”となる。すなわち、並列プログラムに含まれる全てのスレッドが、バリア同期点に到達した状態となる。
【００８０】
バリア同期装置１００の通知部１１０は、バリア同期点に未到達であるスレッドが０である旨の通知を発生する。この場合に、通知部１１０にて生じた通知に応じて、速度変更部１４０は、スレッド３を実行するコアの通常の動作速度へ戻すように変更する。また、プロセッサ制御部１２０は、通知部１１０にて生じた通知に応じて、スレッド０から２をそれぞれ実行する３つのコアの状態を通常の動作を行う状態へ戻すように制御する。更に、並列プログラム制御部１３０は、先に処理がバリア同期点に到達したスレッド０から２をそれぞれ再開させる。
【００８１】
このような制御が行われることで、ＣＰＵ５０１に含まれるコア５５１−１から５５１−４の各々は、通常の動作を行う状態に動作状態が変更される。そして、スレッド０から３の各々は、通常の実行が可能な状態に実行状態が制御される。このように、上述したバリア同期装置１００の各構成要素による動作が行われた後には、コア５５１−１から５５１−４の各々においてスレッド０から３の各々に関して、バリア同期点より後にある処理が並列に実行される。
【００８２】
以上のとおり、本発明の第１の実施形態におけるバリア同期装置１００は、並列プログラムに含まれるスレッドがバリア同期処理を行う場合において、バリア同期点に未到達であるスレッドの数に応じてコアの動作速度を制御する。すなわち、本実施形態におけるバリア同期装置１００は、マルチコアプロセッサが許容する場合にはバリア同期点に未到達であるスレッドを実行するコアの動作速度を高めるように制御する。
【００８３】
このような制御が行われることで、バリア同期点に未到達であるスレッドが、バリア同期点への到達までに要する時間が短縮される。並列プログラムにおいて、バリア同期に要する時間は、処理がバリア同期点に最も遅く到達するスレッドに依存する。そのため、処理がバリア同期点に最も遅く到達するスレッドがバリア同期点到達までに要する時間を短縮することで、バリア同期に要する時間を短縮することが可能となる。
【００８４】
すなわち、本実施形態におけるバリア同期装置１００は、バリア同期に要する時間を短縮することを可能にする。
【００８５】
（第１の実施形態の変形例）
本発明の第１の実施形態におけるバリア同期装置１００には、種々の変形例が考えられる。図７は、本発明の第１の実施形態の変形例におけるバリア同期装置の構成を示す図である。
【００８６】
一部のマルチプロセッサは、明示的な動作速度に関する変更の指示を必要とせず、停止状態にあるコアの数や通常の動作状態にあるコアの数に応じて、通常の動作状態にあるコアの動作速度を変更する。このようなマルチプロセッサにて実行される並列プログラムのバリア同期を対象とする場合には、バリア同期装置１００は、例えば図７に示すように、速度変更部１４０を備えない構成であってもよい。
【００８７】
すなわち、図７に示すバリア同期装置１０１は、通知部１１０と、プロセッサ制御部１２０と、並列プログラム制御部１３０とを備える。各構成要素は、第１の実施形態におけるバリア同期装置１００が備える同じ要素と同様に動作する。そして、プロセッサ制御部１２０がバリア同期点に到達したスレッドを実行するコアの状態を停止状態等に変更することで、バリア同期点に未到達であるスレッドを実行するコアの動作速度が高められるように制御される。
【００８８】
また、並列プログラムに含まれる全てのスレッドがバリア同期点に到達した場合等に、プロセッサ制御部１２０が停止状態にあるコアを通常の動作状態とすることで、動作速度が高められたコアの動作速度が通常の動作速度に変更される。
【００８９】
上述の場合において、並列プログラムを動作するマルチコアプロセッサは、プログラム制御部１２０にて制御されたコアの各々の動作に関する状態に応じて、コアの動作速度を変更する。そのため、このようなマルチコアプロセッサにて並列プログラムが実行される場合においては、バリア同期装置１０１は、速度変更部１４０をも備えるバリア同期装置１００と同様の効果を奏する。
【００９０】
また、プロセッサ制御部１２０と速度変更部１４０は、一つの構成要素として実現されてもよい。プロセッサ制御部１２０と速度変更部１４０の具体的な構成は、並列プログラムに含まれるスレッドが実行されるマルチコアプロセッサにおける動作速度の制御に関する仕様に応じて適宜定められる。
【００９１】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。また、各実施形態における構成は、本発明のスコープを逸脱しない限りにおいて、互いに組み合わせることが可能である。
【符号の説明】
【００９２】
１００    バリア同期装置
１１０    通知部
１１１    管理テーブル
１１２    スレッド状態
１１３    同期待ちスレッド数
１２０    プロセッサ制御部
１３０    並列プログラム制御部
１４０    速度変更部
２００    並列プログラム
２０１    スレッド
５００    情報処理装置
５０１    ＣＰＵ
５５１    コア
５０２    ＲＯＭ
５０３    ＲＡＭ
５０４    プログラム
５０５    記憶装置
５０６    記憶媒体
５０７    ドライブ装置
５０８    通信インターフェース
５０９    通信ネットワーク
５１０    入出力インターフェース
５１１    バス
【図１】
2017016250.tif 000003
【図２】
2017016250.tif 000004
【図３】
2017016250.tif 000005
【図４】
2017016250.tif 000006
【図５】
2017016250.tif 000007
【図６】
2017016250.tif 000008
【図７】
2017016250.tif 000009
【図８】
2017016250.tif 000010