(57)【特許請求の範囲】
【請求項１】
処理を実行するとともに、前記処理の状態を制御する複数の処理部を備えた演算処理装置と、
それぞれ前記演算処理装置を備えた複数のノードと、
を備え、
前記複数のノードの各々は、
自ノードが備える第１の演算処理装置に含まれる第１の処理部が該第１の処理部における処理の状態を、前記第１の処理部がプログラム処理を実行中である第１の状態から、前記第１の処理部が動作を停止中である第２の状態へと移行させる場合に、該第１の処理部を識別する識別情報を記憶する記憶部と、
前記第１の処理部から予め前記識別情報の通知を受けた第２の処理部であって、自ノードが備える前記第１の演算処理装置に含まれる、前記第１の処理部とは異なる処理部、自ノードが備える、前記第１の演算処理装置とは異なる他の演算処理装置に含まれる処理部、他ノードが備える第２の演算処理装置に含まれる処理部のいずれかの処理部である第２の処理部が前記第１の処理部が待ち合わせる前記第２の処理部が実行する処理が終了した場合に、前記第２の処理部から、前記第１の演算処理装置に送信された前記予め通知された識別情報を受信する受信部と、
前記受信部が受信した識別情報と、前記記憶部が記憶する識別情報を比較して比較結果を示す信号を出力する比較部と、
前記比較結果を示す信号が、前記受信部が受信した識別情報と前記記憶部が記憶する識別情報とが一致することを示すことに応じて、該識別情報により識別される処理部が実行する処理の状態を前記第２の状態から前記第１の状態へと移行させる制御信号を出力する出力部と、
を備えた、
ことを特徴とする情報処理装置。
【請求項２】
オペレーティングシステム及び前記オペレーティングシステム上で動作するプログラムによる処理を実行するとともに、前記処理の状態を制御する複数の処理部を備えた演算処理装置と、
それぞれ前記演算処理装置を備えた複数のノードと、
を備え、
前記複数のノードの各々は、
自ノードが備える第１の演算処理装置に含まれる第１の処理部が該第１の処理部における処理の状態を、前記第１の処理部がプログラム処理を実行中である第１の状態から、前記第１の処理部が動作を停止中である第２の状態へと移行させる場合に、該第１の処理部を識別する識別情報を記憶する記憶部と、
前記第１の処理部から予め前記識別情報の通知を受けた第２の処理部であって、自ノード又は他ノードが備える第２の演算処理装置に含まれる第２の処理部が前記第１の処理部が待ち合わせる前記第２の処理部が実行する処理が終了した場合に、前記第２の処理部から前記第１の演算処理装置に送信された前記予め通知された識別情報を受信する受信部と、
前記受信部が受信した識別情報と、前記記憶部が記憶する識別情報を比較して比較結果を示す信号を出力する比較部と、
前記比較結果を示す信号が、前記受信部が受信した識別情報と前記記憶部が記憶する識別情報とが一致することを示すことに応じて、該識別情報により識別される処理部が実行する処理の状態を前記第２の状態から前記第１の状態へと移行させる制御信号を出力する出力部と、
を備え、
前記第１の処理部が該第１の処理部における処理の状態を前記第１の状態から前記第２の状態へと移行させる場合に、前記第１の処理部が実行する前記オペレーティングシステムのカーネルによる切り替え処理を行うことなく前記第２の状態へ移行し、
前記出力部から前記受信部により受信した識別情報により識別される処理部が実行する処理の状態を前記第２の状態から前記第１の状態へと移行させる制御信号が出力されると、前記第１の処理部が、該第１の処理部が実行する処理の状態を前記第２の状態から前記第１の状態へと移行させる
ことを特徴とする情報処理装置。
【請求項３】
前記複数のノードの各々は、
所定のタイミングから経過した時間を計時する計時部
をさらに備え、
前記出力部は、前記計時部が所定時間を計時した場合に、前記受信部が識別情報を受信したか否かに関わらず、前記制御信号を生成して出力する
ことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記第１の処理部は、前記計時部により所定時間が計時された場合に前記出力部により出力された前記制御信号を受信すると、前記制御信号に応じて状態を移行させる対象である処理とは異なる処理を実行する
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記受信部は、前記第２の処理部からの前記識別情報を、ノード間通信のインターフェースを介して受信する
ことを特徴とする請求項１〜４の何れか一つに記載の情報処理装置。
【請求項６】
処理を実行するとともに、前記処理の状態を制御する複数の処理部を備えた演算処理装置と、それぞれ前記演算処理装置を備えた複数のノードと、を備えた情報処理装置の制御方法であって、
前記複数のノードの各々が、
自ノードが備える第１の演算処理装置に含まれる第１の処理部が該第１の処理部における処理の状態を、前記第１の処理部がプログラム処理を実行中である第１の状態から、前記第１の処理部が動作を停止中である第２の状態へと移行させる場合に、該第１の処理部を識別する識別情報を記憶する記憶部へ記憶させ、
前記第１の処理部から予め前記識別情報の通知を受けた第２の処理部であって、自ノードが備える前記第１の演算処理装置に含まれる、前記第１の処理部とは異なる処理部、自ノードが備える、前記第１の演算処理装置とは異なる他の演算処理装置に含まれる処理部、他ノードが備える第２の演算処理装置に含まれる処理部のいずれかの処理部である第２の処理部が前記第１の処理部が待ち合わせる前記第２の処理部が実行する処理が終了した場合に、前記第２の処理部から、前記第１の演算処理装置に送信された前記予め通知された識別情報を受信し、
受信した識別情報と、前記記憶部が記憶する識別情報を比較して比較結果を示す信号を出力し、
前記比較結果を示す信号が、前記受信した識別情報と前記記憶部が記憶する識別情報とが一致することを示すことに応じて、該識別情報により識別される処理部が実行する処理の状態を前記第２の状態から前記第１の状態へと移行させる制御信号を出力する、
処理を実行することを特徴とする情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
従来から、演算処理装置及び記憶装置を備える複数のノードを有する情報処理装置において、複数のノードが備える各演算処理装置が各々のハードウェアスレッドにおいて実行する各処理間の同期を制御する種々の制御方法がある。
【０００３】
一般的に、スレッドは、ソフトウェアで並列的に実行されるプログラムの処理単位をいい、マルチスレッドは、１つの演算処理装置において複数のスレッドを並行して実行することをいう。
【０００４】
これに対し、ハードウェアスレッドは、ハードウェアマルチスレッディングという名称でも知られ、次のような技術をいう。例えば、ハードウェアスレッドは、ＣＰＵ（Central  Processing  Unit）が備える同一のコア上で、演算器、レジスタ、ＴＬＢ（Translation  Look-aside  Buffer）、システムバスコントローラ等のハードウェア資源を共有させる技術である。すなわち、ハードウェアスレッドは、同一のコア上で、ハードウェア資源を共有させて複数のスレッドを同時に動作させる技術である。ハードウェアスレッドには、複数のスレッドを同時に動作させる技術のほか、時分割処理によって複数のスレッドを動作させるＶＭＴ（Vertical  Multi-Threading）、ＳＭＴ（Simultaneous  Multi-Threading)等、各種の実装方法が知られている。
【０００５】
上述のようなハードウェアスレッドにおいて、例えば、第１のノードが備える第１の演算処理装置が含む第１のハードウェアスレッドにおいて実行中の処理が、第２のノードが備える第２の記憶装置が記憶するデータを要するケースを考える。
【０００６】
上述のケースにおける各処理間の同期の制御方法として、例えば、ポーリング方式による制御方法がある。すなわち、第１の演算処理装置は、第１のハードウェアスレッドにおいて実行中の処理を中断し、第２のノードが備える第２の演算処理装置が第１の記憶装置へデータをコピーする処理が完了するまで第１の記憶装置にアクセスするポーリング処理を行う。そして、第１の演算処理装置は、第２の演算処理装置が第１の記憶装置へデータをコピーする処理が完了すると、第１の記憶装置からデータを読み出して、第１のハードウェアスレッドにおいて、中断した処理を再開する。
【０００７】
また、上述のケースにおける各処理間の同期の他の制御方法として、例えば、割り込み方式による制御方法がある。すなわち、第１の演算処理装置は、第１のハードウェアスレッドにおいて実行中の処理を中断後、第２の演算処理装置が第１の記憶装置へデータをコピーする処理が完了したことを通知する割り込み通知が通知される。すると、第１の演算処理装置は、ＯＳ（Operating  System）のカーネル処理として、処理の切り替えに伴うレジスタ待避処理、ＯＳによる権限の切り替え処理、第１の記憶装置からデータを読み出すための割り込みハンドラの起動処理等の各種処理を実行する。そして、第１の演算処理装置は、第１の記憶装置からデータを読み出して、第１のハードウェアスレッドにおいて、中断した処理を再開する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２００６−５００６３９号公報
【特許文献２】特開２００６−０３１６９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述の従来技術では、第１のハードウェアスレッドにおいて処理を中断したにも関わらず第１の記憶装置にアクセスするポーリング処理を行う。このため、第１の演算処理装置において他のハードウェアスレッドと共有するシステムバスコントローラ等の複数のハードウェアスレッドで共用されるハードウェア資源が有効に活用されないという問題がある。
【００１０】
また、上述の従来技術では、第１のハードウェアスレッドにおいて実行する処理の切り替えに伴うレジスタの待避及び復元の処理等のＯＳによるカーネル処理がオーバヘッドとなって処理の切り替えを迅速に行えないという問題がある。
【００１１】
１つの側面では、本発明は、複数のノードが備える各演算処理装置が各々の処理部において実行する各処理間の同期を制御する際に、ハードウェア資源の有効活用を図ることを目的とする。
【課題を解決するための手段】
【００１２】
開示の技術の一態様では、処理を実行するとともに、前記処理の状態を制御する処理部を備えた演算処理部と、それぞれ前記演算処理部を備えた複数のノードと、を備える情報処理装置である。情報処理装置は、前記複数のノードの各々は、自ノードが備える第１の演算処理装置に含まれる第１の処理部が該第１の処理部における処理の状態を第１の状態から第２の状態へと移行させる場合に、該第１の処理部を識別する識別情報を記憶する。また、情報処理装置は、自ノード又は他ノードが備える第２の演算処理装置に含まれる第２の処理部から前記第１の演算処理装置に送信された識別情報を受信する。また、情報処理装置は、受信した識別情報と、前記記憶部が記憶する識別情報とが一致する場合に、該識別情報により識別される処理部が実行する処理の状態を前記第２の状態から前記第１の状態へと移行させる制御信号を出力する。
【発明の効果】
【００１３】
複数のノードが備える各演算処理装置が各々の処理部において実行する各処理間の同期を制御する際に、ハードウェア資源の有効活用を図ることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、第１の実施形態に係る情報処理装置の構成を示すブロック図である。
【図２】図２は、第１の実施形態に係る処理を示すシーケンス図である。
【図３】図３は、第１の実施形態に係るＷＡＫＥＵＰパケットの構成を示す図である。
【図４】図４は、第１の実施形態に係る処理を示すタイムチャートである。
【図５】図５は、第１の実施形態に係る処理を示すフローチャートである。
【図６】図６は、第２の実施形態に係る情報処理装置の構成を示すブロック図である。
【図７】図７は、第２の実施形態に係る処理を示すフローチャートである。
【図８】図８は、第２の実施形態に係るＷＡＫＥＵＰ信号ＯＮ処理を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下に、開示の技術に係る情報処理装置及び情報処理装置の制御方法の実施形態を図面に基づいて説明する。なお、以下の実施形態では、一例を示すに過ぎず、開示の技術を限定するものではない。また、各実施形態は、矛盾が生じない範囲内で適宜組み合わせてもよい。
【００１６】
［第１の実施形態］
（第１の実施形態の情報処理装置の構成）
図１は、第１の実施形態に係る情報処理装置の構成を示すブロック図である。なお、以下では、ＳＣはSystem  Controllerの略であり、ＣＰＵはCentral  Processing  Unitの略であり、ＭＡＣはMemory  Access  Controllerの略である。また、ＩＣ−ｃｔｒｌはInter  Connect−Controllerの略であり、ＩＣ−ＩＦはInter  Connect  Interfaceの略であり、ＳＶＰはService  Processorの略である。
【００１７】
また、以下において、ノードとは、情報処理ユニットの単位をいう。ＳＣは、各ノードに搭載されるＣＰＵと、ＭＡＣとの間のデータ転送などの処理を制御し、各ノード全体を制御する。ＭＡＣは、ＤＩＭＭ（(Dual  Inline  Memory  Module）等の記憶装置であるローカルメモリ、共有メモリと、ＳＣとの間に接続され、ローカルメモリ、共有メモリへのアクセスを制御する。
【００１８】
また、ＩＣ−ｃｔｒｌは、ノード間通信を制御する制御装置である。ＩＣ−ＩＦは、ＩＣ−ｃｔｒｌによるノード間通信のインターフェースである。ＳＶＰは、ノード毎に備えられ、各ノードのＣＰＵ等の演算処理装置とは独立して各ノードのハードウェア制御及び監視を行うプロセッサであり、他ノードが備えるＳＶＰとＬＡＮ（Local  Area  Network）等を介して通信を行って情報を送受信する。
【００１９】
図１に示すように、第１の実施形態に係る情報処理装置１は、ノード１０及び２０を有する。ノード１０は、ＳＣ１１を有する。ノード１０は、さらに、図１において一点鎖線で示すシステムバス１２を介してＳＣ１１とそれぞれ接続されるＣＰＵ１３ａ及び１３ｂ、ＭＡＣ１４、ＩＣ−ｃｔｒｌ１５を有する。
【００２０】
ノード１０は、さらに、ＭＡＣ１４とそれぞれ接続されるローカルメモリ１６ａ、共有メモリ１６ｂを有する。ノード１０は、さらに、ＩＣ−ｃｔｒｌ１５とそれぞれ接続されるＷＡＫＥＵＰ信号生成部１７ａ及び１７ｂを有する。ノード１０は、さらに、ＳＶＰ１８を有する。
【００２１】
ＳＣ１１は、ＣＰＵ１３ａ及び１３ｂによるローカルメモリ１６ａ及び共有メモリ１６ｂへのアクセス要求をＭＡＣ１４へ転送する。また、ＳＣ１１は、ノード２０による共有メモリ１６ｂへのアクセスをＭＡＣ１４へ転送する。また、ＳＣ１１は、ＣＰＵ１３ａ及び１３ｂと、ＷＡＫＥＵＰ信号生成部１７ａ及び１７ｂとの間での情報の入出力を制御する。また、ＳＣ１１は、ＣＰＵ１３ａ及び１３ｂによるノード２０へのアクセスをＩＣ−ｃｔｒｌ１５へ転送する。
【００２２】
また、ＳＣ１１は、ＣＰＵ１３ａ及び１３ｂからＷＡＫＥＵＰ信号生成部１７ａ及び１７ｂへのデータをＷＡＫＥＵＰ信号生成部１７ａ及び１７ｂへそれぞれ入力する。また、ＩＣ−ｃｔｒｌ１５は、ノード２０からＷＡＫＥＵＰ信号生成部１７ａ及び１７ｂへのデータをＷＡＫＥＵＰ信号生成部１７ａ及び１７ｂへそれぞれ入力する。
【００２３】
ノード２０は、ノード１０と同一の構成であり、参照符号が異なる同一名称の構成要素は、同一の構成及び機能を有する。ノード２０は、ＳＣ２１、システムバス２２、ＣＰＵ２３ａ及び２３ｂ、ＭＡＣ２４、ＩＣ−ｃｔｒｌ２５、ローカルメモリ２６ａ、共有メモリ２６ｂ、ＷＡＫＥＵＰ信号生成部２７ａ及び２７ｂ、ＳＶＰ２８を有する。
【００２４】
ノード２０におけるＳＣ２１、システムバス２２、ＣＰＵ２３ａ及び２３ｂ、ＭＡＣ２４、ＩＣ−ｃｔｒｌ２５は、ノード１０におけるＳＣ１１、システムバス１２、ＣＰＵ１３ａ及び１３ｂ、ＭＡＣ１４、ＩＣ−ｃｔｒｌ１５にそれぞれ対応する。また、ノード２０におけるローカルメモリ２６ａ、共有メモリ２６ｂ、ＳＶＰ２８は、ノード１０におけるローカルメモリ１６ａ、共有メモリ１６ｂ、ＳＶＰ１８にそれぞれ対応する。また、ノード２０におけるＷＡＫＥＵＰ信号生成部２７ａ及び２７ｂは、ノード１０におけるＷＡＫＥＵＰ信号生成部１７ａ及び１７ｂにそれぞれ対応する。
【００２５】
ノード１０及び２０は、ＩＣ−ＩＦ３を介してＩＣ−ｃｔｒｌ１５及びＩＣ−ｃｔｒｌ２５が接続されることにより、相互通信が可能である。また、ノード１０のＳＶＰ１８及びノード２０のＳＶＰ２８は、所定の通信回線を介して接続されることにより、相互通信が可能である。
【００２６】
（第１の実施形態のＣＰＵ及びＷＡＫＥＵＰ信号生成部の構成）
ＣＰＵ２３ａを代表させて、ＣＰＵ１３ａ、１３ｂ、２３ａ及び２３ｂの構成を説明する。すなわち、ＣＰＵ１３ａ、１３ｂ及び２３ｂの構成は、ＣＰＵ２３ａの構成と同一である。また、ＷＡＫＥＵＰ信号生成部２７ａを代表させて、ＷＡＫＥＵＰ信号生成部１７ａ、１７ｂ、２７ａ及び２７ｂの構成を説明する。すなわち、ＷＡＫＥＵＰ信号生成部１７ａ、１７ｂ及び２７ｂの構成は、ＷＡＫＥＵＰ信号生成部２７ａの構成と同一である。
【００２７】
図１に示すように、ＣＰＵ２３ａは、例えばマルチコアＣＰＵであり、マルチコアＣＰＵに含まれる各ＣＰＵコアがハードスレッド２３ａ−１及び２３ａ−２に該当する。ハードスレッドは、ハードウェアスレッドの略である。ハードスレッド２３ａ−１及び２３ａ−２は、ＣＰＵ２３ａの同一のコア上で、ＣＰＵ２３ａのハードウェア資源を共有して各々が処理を実行する。
【００２８】
また、ＣＰＵ２３ａは、ハードスレッド２３ａ−１及び２３ａ−２がシステムバス２２を介してＣＰＵ２３ａが行うデータの入出力を制御するインターフェースである、ＳＣ２１に接続されるシステムバスコントローラ２３ａ−３を有する。すなわち、システムバスコントローラ２３ａ−３は、ハードスレッド２３ａ−１及び２３ａ−２により共有される入出力インターフェースである。
【００２９】
また、図１に示すように、ＷＡＫＥＵＰ信号生成部２７ａは、ＳｌｅｅｐＩＤレジスタ２７ａ−１及び２７ａ−２、ＷＡＫＥＵＰデータレジスタ２７ａ−３、比較部２７ａ−５及び２７ａ−６、ＡＮＤ部２７ａ−７及び２７ａ−８を有する。ＳｌｅｅｐＩＤは、Sleep  Identifierの略である。ＳｌｅｅｐＩＤは、各ハードスレッド２３ａ−１及び２３ａ−２を識別する識別情報である。ＳｌｅｅｐＩＤは、各ハードスレッド２３ａ−１及び２３ａ−２が処理の実行中にデータの入力待ちが発生して処理を中断する場合に、対応するＷＡＫＥＵＰ信号生成部２７ａ及び２７ｂへそれぞれ出力される。
【００３０】
なお、ＳｌｅｅｐＩＤレジスタ２７ａ−１、比較部２７ａ−５、ＡＮＤ部２７ａ−７は、ＣＰＵ２３ａのハードスレッド２３ａ−１に対応して設けられる。同様に、ＳｌｅｅｐＩＤレジスタ２７ａ−２、比較部２７ａ−６、ＡＮＤ部２７ａ−８は、ＣＰＵ２３ａのハードスレッド２３ａ−２に対応して設けられる。
【００３１】
ＳｌｅｅｐＩＤレジスタ２７ａ−１は、ハードスレッド２３ａ−１によりＷＡＫＥＵＰ信号生成部２７ａに対して出力されるＳｌｅｅｐＩＤを記憶するレジスタである。ハードスレッド２３ａ−１を識別するＳｌｅｅｐＩＤは、ハードスレッド２３ａ−１から出力され、システムバスコントローラ２３ａ−３、ＳＣ２１を経由するシステムバス２２で伝送され、ＳｌｅｅｐＩＤレジスタ２７ａ−１にセットされる。
【００３２】
同様に、ＳｌｅｅｐＩＤレジスタ２７ａ−２は、ハードスレッド２３ａ−２によりＷＡＫＥＵＰ信号生成部２７ａに対して出力されるＳｌｅｅｐＩＤを記憶するレジスタである。ハードスレッド２３ａ−２を識別するＳｌｅｅｐＩＤは、ハードスレッド２３ａ−２から出力され、システムバスコントローラ２３ａ−３、ＳＣ２１を経由するシステムバス２２で伝送され、ＳｌｅｅｐＩＤレジスタ２７ａ−２にセットされる。
【００３３】
なお、ノード２０が備えるＣＰＵ２３ａ及び２３ｂの各ハードスレッドを識別するそれぞれのＳｌｅｅｐＩＤは、ノード２０のシステム起動時に、ＳＶＰ２８により、ノード１０のＳＶＰ１８に予め通知される。ＳＶＰ１８は、ＳＶＰ２８から通知されたノード２０のＣＰＵ２３ａ及び２３ｂの各ハードスレッドを識別するそれぞれのＳｌｅｅｐＩＤを、図示しないメモリに記憶させ、ノード１０のＣＰＵ１３ａ及び１３ｂの各ハードスレッドが利用できる状態にしておく。
【００３４】
または、ノード２０が備えるＣＰＵ２３ａ及び２３ｂの各ハードスレッドを識別するそれぞれのＳｌｅｅｐＩＤは、各ハードスレッドが実行する処理ごとにノード１０に通知されることとしてもよい。若しくは、各ハードスレッドが実行する処理にデータの入力待ちが発生した際に対応するＳｌｅｅｐＩＤレジスタにセットされるＳｌｅｅｐＩＤを出力する際に、ノード１０に通知されることとしてもよい。通知されたＳｌｅｅｐＩＤは、例えばＳＣ１１によりＭＡＣ１４を介してローカルメモリ１６ａ等に記憶され、ノード１０のＣＰＵ１３ａ及び１３ｂの各ハードスレッドが利用できる状態にしておくこととしてもよい。
【００３５】
ＷＡＫＥＵＰデータレジスタ２７ａ−３は、ノード１０のＣＰＵ１３ａ及び１３ｂからＩＣ−ＩＦ３及びＩＣ−ｃｔｒｌ２５を経由して通知されたＷＡＫＥＵＰデータが含むＳｌｅｅｐＩＤがセットされるレジスタである。ＷＡＫＥＵＰデータは、ノード１０のＣＰＵ１３ａ及び１３ｂが実行する所定処理を完了したことをノード２０のＣＰＵ２３ａ及び２３ｂへ通知するデータである。所定処理とは、例えば、ノード１０のＣＰＵ１３ａ又は１３ｂのハードスレッドが、ＣＰＵ２３ａのハードスレッド２３ａ−１又は２３ａ−２が待ち合わせるデータをノード１０のローカルメモリ１６ａからノード２０の共有メモリ２６ｂへコピーする処理である。
【００３６】
ノード２０のＣＰＵ２３ａ及び２３ｂは、ハードスレッドを停止してＣＰＵ２３ａ及び２３ｂが実行する所定処理の完了を待ち合わせ、ＣＰＵ１３ａ及び１３ｂからＷＡＫＥＵＰデータが通知されると、停止したハードスレッドを起動する。そして、ＣＰＵ２３ａ及び２３ｂは、システムバスコントローラ２３ａ−３、ＳＣ２１を介して、共有メモリ２６ｂにコピーされたデータを取得し、中断した処理を再開する。
【００３７】
比較部２７ａ−５は、ＷＡＫＥＵＰデータレジスタ２７ａ−３及びＳｌｅｅｐＩＤレジスタ２７ａ−１にセットされたＳｌｅｅｐＩＤを比較する。そして、比較部２７ａ−５は、ＷＡＫＥＵＰデータレジスタ２７ａ−３及びＳｌｅｅｐＩＤレジスタ２７ａ−１にセットされたＳｌｅｅｐＩＤが一致する場合に、セレクト信号をＡＮＤ部２７ａ−７へ出力する。
【００３８】
ＡＮＤ部２７ａ−７は、比較部２７ａ−５から出力されたセレクト信号と、ノード１０のＣＰＵ１３ａ及び１３ｂからＷＡＫＥＵＰデータが通知されたタイミングでＩＣ−ｃｔｒｌ２５から出力されたパケット受信パルスとの論理積を取る論理ゲートである。パケット受信パルスは、ＷＡＫＥＵＰパケットを受信したときに、ＩＣ−ｃｔｒｌ２５により１パルス発生される。
【００３９】
ＡＮＤ部２７ａ−７は、セレクト信号と、パケット受信パルスとの論理積を示す信号をハードスレッド２３ａ−１へ出力する。すなわち、ＡＮＤ部２７ａ−７は、通知されたＳｌｅｅｐＩＤと、ＳｌｅｅｐＩＤレジスタ２７ａ−１にセットされたＳｌｅｅｐＩＤとが一致する場合に、ハードスレッド２３ａ−１へ停止を解除して起動し、処理を再開する指示を出力する。ハードスレッド２３ａ−１は、この指示に応じて、停止を解除して起動し、処理を再開する。すなわち、パケット受信パルスと、セレクト信号の論理積から生成されるＷＡＫＥＵＰ信号が１パルスだけＯＮとなることで、ハードスレッド２３ａ−１が停止状態を解除する。
【００４０】
同様に、比較部２７ａ−６は、ＷＡＫＥＵＰデータレジスタ２７ａ−３及びＳｌｅｅｐＩＤレジスタ２７ａ−２にセットされたＳｌｅｅｐＩＤを比較する。そして、比較部２７ａ−６は、ＷＡＫＥＵＰデータレジスタ２７ａ−３及びＳｌｅｅｐＩＤレジスタ２７ａ−２にセットされたＳｌｅｅｐＩＤが一致する場合に、セレクト信号をＡＮＤ部２７ａ−８へ出力する。
【００４１】
ＡＮＤ部２７ａ−８は、比較部２７ａ−６から出力されたセレクト信号と、ノード１０のＣＰＵ１３ａ及び１３ｂからＷＡＫＥＵＰデータが通知されたタイミングでＩＣ−ｃｔｒｌ２５から出力されたパケット受信パルスとの論理積を取る論理ゲートである。ＡＮＤ部２７ａ−８は、セレクト信号と、パケット受信パルスとの論理積を示す信号をハードスレッド２３ａ−２へ出力する。すなわち、ＡＮＤ部２７ａ−８は、通知されたＳｌｅｅｐＩＤと、ＳｌｅｅｐＩＤレジスタ２７ａ−２にセットされたＳｌｅｅｐＩＤとが一致する場合に、ハードスレッド２３ａ−２へ停止を解除して起動し、処理を再開する指示を出力する。ハードスレッド２３ａ−２は、この指示に応じて、停止を解除して起動し、処理を再開する。
【００４２】
（第１の実施形態の処理のシーケンス）
図２は、第１の実施形態に係る処理を示すシーケンス図である。図２は、ノード２０のハードスレッド２３ａ−１が、処理を実行中にノード１０が保持するデータを要し、そのデータがノード１０のＣＰＵ１３ａによりノード２０の共有メモリ２６ｂへコピーされる処理が完了するまで待ち合わせる例を示す。しかし、図２は、一例を示すに過ぎず、ノード１０又は２０のハードスレッドが、処理の実行中に、ノード１０又は２０の他のＣＰＵによる処理が完了するまで待ち合わせる場合であれば、同様の処理となる。
【００４３】
先ず、例えば情報処理装置１又はノード２０の起動時に、ノード２０のＳＶＰ２８は、ノード２０が備える全てのハードスレッドのＳｌｅｅｐＩＤを、ノード１０のＳＶＰ１８へ通知する（ステップＳ１１）。なお、ステップＳ１１は、情報処理装置１又は各ノードの起動時等において、各ノードのＳＶＰが自ノード内の各ハードスレッドの識別情報であるＳｌｅｅｐＩＤを、各ハードスレッドにおける処理の実行に先立って他のノードへ予め通知する処理である。
【００４４】
続いて、ノード２０のハードスレッド２３ａ−１は、ハードスレッド２３ａ−１のＳｌｅｅｐＩＤをＷＡＫＥＵＰ信号生成部２７ａのＳｌｅｅｐＩＤレジスタ２７ａ−１へセットする（ステップＳ１２）。続いて、ハードスレッド２３ａ−１は、スレッドを停止する（ステップＳ１３）。
【００４５】
一方、ノード１０のＣＰＵ１３ａは、ノード２０のハードスレッド２３ａ−１が入力を待ち合わせる、ノード１０のローカルメモリ１６ａに記憶されるデータを、ノード２０の共有メモリ２６ｂへコピーする処理を行い、処理を完了する（ステップＳ１４）。続いて、ＣＰＵ１３ａは、ハードスレッド２３ａ−１のＳｌｅｅｐＩＤと、ハードスレッド２３ａ−１を備えるＣＰＵ２３ａのＣＰＵＩＤとを含むＷＡＫＥＵＰコマンドを発行し、ＩＣ−ｃｔｒｌ１５へ出力する（ステップＳ１５）。ステップＳ１５の処理により、ＣＰＵ１３ａは、処理が終了したことをノード２０のハードスレッド２３ａ−１へ通知する。
【００４６】
続いて、ノード１０のＩＣ−ｃｔｒｌ１５は、ＣＰＵ１３ａが発行したＷＡＫＥＵＰコマンドに基づき、例えば図３に示すＣＰＵＩＤ及びＷＡＫＥＵＰデータを有するＷＡＫＥＵＰパケットを生成し、ノード２０のＩＣ−ｃｔｒｌ２５へ送信する（ステップＳ１６）。なお、ＣＰＵＩＤは、Central  Processing  Unit  Identifierの略であり、ＣＰＵを識別する情報である。ＷＡＫＥＵＰパケットは、ＣＰＵＩＤにより、ネットワーク中継装置で送信先のＣＰＵを備えるノードが判定され、目的のノードへと到達する。また、ＷＡＫＥＵＰデータは、ステップＳ１１でノード２０のＳＶＰ２８により予め通知されたハードスレッド２３ａ−１のＳｌｅｅｐＩＤを少なくとも含むデータである。
【００４７】
ＩＣ−ｃｔｒｌ２５は、ＩＣ−ｃｔｒｌ１５からＷＡＫＥＵＰパケットを受信すると、ＷＡＫＥＵＰデータが含むＳｌｅｅｐＩＤをＷＡＫＥＵＰデータレジスタ２７ａ−３に書き込み、パケット受信パルスをＡＮＤ部２７ａ−７へ出力する（ステップＳ１７）。続いて、ＷＡＫＥＵＰ信号生成部２７ａは、ＷＡＫＥＵＰ信号をハードスレッド２３ａ−１へ出力する（ステップＳ１８）。続いて、ハードスレッド２３ａ−１は、ＷＡＫＥＵＰ信号を受信すると、停止したスレッドを起動する（ステップＳ１９）。
【００４８】
（第１の実施形態の処理のタイムチャート）
図４は、第１の実施形態に係る処理を示すタイムチャートである。図４では、ＣＰＵ２３ａのハードスレッド２３ａ−１及び２３ａ−２が、それぞれ実行する処理に要するデータの入出力に関して、システムバスコントローラ２３ａ−３を交互に使用することを前提とする。それぞれ実行する処理に要するデータは、例えば、ローカルメモリ２６ａが記憶するプログラムのデータ、共有メモリ２６ｂが記憶するデータである。
【００４９】
図４は、ノード２０のハードスレッド２３ａ−１が、処理を実行中にノード１０が保持するデータを要し、そのデータがノード１０のＣＰＵ１３ａによりノード２０の共有メモリ２６ｂへコピーされる処理が完了するまで待ち合わせる例を示す。しかし、図４は、一例を示すに過ぎず、ノード１０又は２０の他のハードスレッドが、処理の実行中に、ノード１０又は２０の他のＣＰＵによる処理が完了するまで待ち合わせる場合であれば、同様の処理となる。
【００５０】
時刻ｔ１において、ノード１０のＣＰＵ１３ａは、ノード２０のＣＰＵ２３ａのハードスレッド２３ａ−１が処理に要するデータをノード２０の共有メモリ２６ｂへコピーする処理を開始する。時刻ｔ２において、ハードスレッド２３ａ−１は、ＣＰＵ１３ａが共有メモリ２６ｂへコピーするデータを要することとなるが、データのコピーが完了していないので処理を継続できず、データの待ち状態となる。そして、ハードスレッド２３ａ−１は、スレッドを停止する。
【００５１】
ハードスレッド２３ａ−１がスレッドを停止すると、システムバスコントローラ２３ａ−３は、ハードスレッド２３ａ−１からアクセスされなくなり、他の処理を実行中であるハードスレッド２３ａ−２のみからアクセスされる占有状態となる。そして、時刻ｔ３において、ＣＰＵ１３ａは、ハードスレッド２３ａ−１が待ち合わせているデータのコピーが完了すると、ＷＡＫＥＵＰコマンドを発行してハードスレッド２３ａ−１を起動させる。ハードスレッド２３ａ−１は、ＷＡＫＥＵＰコマンドに応じて起動すると、処理を再開し、システムバスコントローラ２３ａ−３を介して共有メモリ２６ｂにコピーされたデータを取得する。
【００５２】
（第１の実施形態の処理のフローチャート）
図５は、第１の実施形態に係る処理を示すフローチャートである。図５は、ノード２０のハードスレッド２３ａ−１が、処理を実行中にノード１０が保持するデータを要し、そのデータがノード１０のＣＰＵ１３ａによりノード２０の共有メモリ２６ｂへコピーされる処理が完了するまで待ち合わせる例を示す。しかし、図５は、一例を示すに過ぎず、ノード１０又は２０のハードスレッドが、処理の実行中に、ノード１０又は２０の他のＣＰＵによる処理が完了するまで待ち合わせる場合であれば、同様の処理となる。
【００５３】
先ず、ノード１０は、ＳＶＰ１８により、ノード２０のＳＶＰ２８から送信された、ノード２０が備えるＣＰＵ２３ａ及び２３ｂの各ハードスレッドを識別するＳｌｅｅｐＩＤを受信する（ステップＳ１０１）。なお、ステップＳ１０１は、情報処理装置１又は各ノードの起動時等において、各ノードのＳＶＰが自ノード内の各ハードスレッドの識別情報であるＳｌｅｅｐＩＤを、各ハードスレッドにおける処理の実行に先立って他のノードへ予め通知する処理である。
【００５４】
続いて、ノード１０は、ＭＡＣ１４により、ノード１０が保持する、ＣＰＵ２３ａのハードスレッド２３ａ−１がコピーを待ち合わせるデータを、ノード２０の共有メモリ２６ｂへコピーするプロセス処理を実行する（ステップＳ１０２）。なお、ステップＳ１０２の処理は、ＭＡＣ１４に設けられた図示しないＤＭＡコントローラにより実行されてもよい。
【００５５】
続いて、ノード１０は、ＣＰＵ１３ａにより、ステップＳ１０２の処理が終了したか否かを判定する（ステップＳ１０３）。ステップＳ１０２の処理が終了したと判定された場合（ステップＳ１０３Ｙｅｓ）、ノード１０は、ステップＳ１０４へ処理を移す。一方、ステップＳ１０２の処理が終了したと判定されなかった場合（ステップＳ１０３Ｎｏ）、ノード１０は、ステップＳ１０２へ処理を移し、ＭＡＣ１４或いは図示しないＤＭＡコントローラ等によるステップＳ１０２のプロセス処理を継続する。
【００５６】
続いて、ノード１０は、ＣＰＵ１３ａにより、ＣＰＵＩＤと、ＳｌｅｅｐＩＤとを指定してＷＡＫＥＵＰコマンドを発行する（ステップＳ１０４）。ここでは、例えば、ＣＰＵＩＤとしてノード２０のＣＰＵ２３ａのＩＤ、ＳｌｅｅｐＩＤとしてハードスレッド２３ａ−１のＳｌｅｅｐＩＤを指定する。続いて、ノード１０は、ＣＰＵ１３ａにより、ステップＳ１０４で発行したＷＡＫＥＵＰコマンドに応じたＷＡＫＥＵＰパケットを生成し、ノード２０へ送信する（ステップＳ１０５）。
【００５７】
一方、ノード２０は、ＳＶＰ２８により、ノード２０が備えるＣＰＵ２３ａ及び２３ｂの各ハードスレッドを識別するＳｌｅｅｐＩＤをノード１０のＳＶＰ１８へ送信する（ステップＳ２０１）。なお、ステップＳ２０１は、情報処理装置１又は各ノードの起動時等において、各ノードのＳＶＰが自ノード内の各ハードスレッドの識別情報であるＳｌｅｅｐＩＤを、各ハードスレッドにおける処理の実行に先立って他のノードへ予め通知する処理である。
【００５８】
続いて、ノード２０は、ＣＰＵ２３ａ及び２３ｂの各ハードスレッドにより、各々のプロセス処理を実行する（ステップＳ２０２）。続いて、ノード２０は、ＣＰＵ２３ａ及び２３ｂの各ハードスレッドにより、ステップＳ２０２のプロセス処理の実行中において、ノード１０におけるステップＳ１０２のプロセス処理が完了することを待ち合わせるか否かを判定する（ステップＳ２０３）。
【００５９】
ノード１０におけるステップＳ１０２の処理が完了することを待ち合わせると判定された場合（ステップＳ２０３Ｙｅｓ）、ノード２０は、ステップＳ２０４へ処理を移す。ノード１０におけるステップＳ１０２のプロセス処理が完了することを待ち合わせると判定されなかった場合（ステップＳ２０３Ｎｏ）、ノード２０は、ステップＳ２０２へ処理を移し、各ハードスレッドによりプロセス処理を継続する。ここでは、例えば、ノード１０におけるステップＳ１０２のプロセス処理が完了することを待ち合わせると判定されたハードスレッドは、ハードスレッド２３ａ−１である。
【００６０】
続いて、ノード２０は、ノード１０におけるプロセス処理の完了を待ち合わせるハードスレッド２３ａ−１により、ＳｌｅｅｐＩＤレジスタ２７ａ−１へハードスレッド２３ａ−１のＳｌｅｅｐＩＤをセットする（ステップＳ２０４）。続いて、ノード２０は、ハードスレッド２３ａ−１により実行中のプロセスを中断し（中断したプロセスを、以下、中断プロセスと呼ぶ）、スレッドを停止する（ステップＳ２０５）。
【００６１】
続いて、ノード２０は、ＷＡＫＥＵＰ信号生成部２７ａにより、ノード１０からＷＡＫＥＵＰパケットを受信したか否かを判定する（ステップＳ２０６）。ノード１０からＷＡＫＥＵＰパケットを受信したと判定された場合（ステップＳ２０６Ｙｅｓ）、ノード２０は、ステップＳ２０７へ処理を移す。一方、ＷＡＫＥＵＰパケットを受信したと判定されなかった場合（ステップＳ２０６Ｎｏ）、ノード２０は、ステップＳ２０６を繰り返す。
【００６２】
続いて、ノード２０は、ＷＡＫＥＵＰ信号生成部２７ａにより、ＷＡＫＥＵＰパケットのＷＡＫＥＵＰデータをＷＡＫＥＵＰデータレジスタ２７ａ−３にセットする（ステップＳ２０７）。
【００６３】
続いて、ノード２０は、比較部２７ａ−５により、ＳｌｅｅｐＩＤレジスタ２７ａ−１の値と、ＷＡＫＥＵＰデータレジスタ２７ａ−３のＷＡＫＥＵＰデータに含まれるＳｌｅｅｐＩＤとが等しいか否かを判定する（ステップＳ２０８）。ＳｌｅｅｐＩＤレジスタ２７ａ−１の値と、ＷＡＫＥＵＰデータレジスタ２７ａ−３のＷＡＫＥＵＰデータに含まれるＳｌｅｅｐＩＤとが等しいと判定された場合（ステップＳ２０８Ｙｅｓ）、ノード２０は、ステップＳ２０９へ処理を移す。ＳｌｅｅｐＩＤレジスタ２７ａ−１の値と、ＷＡＫＥＵＰデータレジスタ２７ａ−３のＷＡＫＥＵＰデータに含まれるＳｌｅｅｐＩＤとが等しいと判定されなかった場合（ステップＳ２０８Ｎｏ）、ノード２０は、ステップＳ２０６へ処理を移す。
【００６４】
続いて、ノード２０は、ＡＮＤ部２７ａ−７によりＷＡＫＥＵＰ信号を生成してハードスレッド２３ａ−１へ出力する（ステップＳ２０９）。続いて、ノード２０は、ハードスレッド２３ａ−１により、ＷＡＫＥＵＰ信号が出力されたことに応じて、ステップＳ２０５で停止されたハードスレッドを起動させ（ステップＳ２１０）、中断プロセスを再開する（ステップＳ２１１）。
【００６５】
（第１の実施形態による効果）
ＣＰＵ内において、システムバスコントローラを共有するハードスレッドの一部が停止中、所定周期でＣＰＵの資源を使用するポーリング方式に比べ、他のハードスレッドがシステムバスコントローラ等のＣＰＵ資源を占有できる。よって、他のハードスレッドが処理をより多く実行できるようになる。また、割り込み方式に比べ、プロセス再開時のＯＳ処理によるレジスタ待避及び復帰処理を要さないので、ハードスレッドの起動及びプロセスの再開に要する時間を短くできる。また、ＳｌｅｅｐＩＤをハードスレッドに対して固定にすることにより、プロセス間でＳｌｅｅｐＩＤを通知せずともハードスレッドの起動を指示することができる。
【００６６】
また、ＳｌｅｅｐＩＤを指定して、ＷＡＫＥＵＰ信号による通知を行うことにより、特定のハードスレッド上のプロセスを起動したり、停止したりできる。そのため、誤って他のプロセスが起動したり、停止したりすることを防止できる。さらに、ＣＰＵＩＤを指定することにより、ハードスレッドのプロセス起動を行うので、各ＣＰＵ間の通信プロセスの同期制御を行うことができる。
【００６７】
［第２の実施形態］
第２の実施形態に係る情報処理装置の構成要素について、第１の実施形態に係る情報処理装置と同一の機能及び処理の構成要素には同一の名称及び参照符号を付与して説明を省略し、異なる機能及び処理の構成要素についてのみ説明を行う。
【００６８】
（第２の実施形態の情報処理装置の構成）
図６は、第２の実施形態に係る情報処理装置の構成を示すブロック図である。図６に示すように、第２の実施形態に係る情報処理装置２は、ノード３０及び４０を有する。ノード３０は、第１の実施形態に係る情報処理装置１のノード１０と比較して、ＷＡＫＥＵＰ信号生成部１７ａに代えてＷＡＫＥＵＰ信号生成部３７ａ及び３８ａを有する。また、ノード３０は、ＷＡＫＥＵＰ信号生成部１７ｂに代えてＷＡＫＥＵＰ信号生成部３７ｂ及び３８ｂを有する。
【００６９】
ノード４０は、ノード３０と同一の構成であり、参照符号が異なる同一名称の構成要素は、同一の構成及び機能を有する。ノード４０は、第１の実施形態に係る情報処理装置１のノード２０と比較して、ＷＡＫＥＵＰ信号生成部２７ａに代えてＷＡＫＥＵＰ信号生成部４７ａ及び４８ａを有する。また、ノード４０は、ＷＡＫＥＵＰ信号生成部２７ｂに代えてＷＡＫＥＵＰ信号生成部４７ｂ及び４８ｂを有する。
【００７０】
（第２の実施形態のＷＡＫＥＵＰ信号生成部の構成）
ＷＡＫＥＵＰ信号生成部４７ａを代表させて、ＷＡＫＥＵＰ信号生成部３７ａ、３７ｂ、４７ａ及び４７ｂの構成を説明する。すなわち、ＷＡＫＥＵＰ信号生成部３７ａ、３７ｂ及び４７ｂの構成は、ＷＡＫＥＵＰ信号生成部４７ａの構成と同一である。
【００７１】
図６に示すように、ＷＡＫＥＵＰ信号生成部４７ａは、ＳｌｅｅｐＩＤレジスタ２７ａ−１、ＷＡＫＥＵＰデータレジスタ２７ａ−３、比較部２７ａ−５、ＡＮＤ部２７ａ−７、タイマ２７ａ−９及びＯＲ部２７ａ−１１を有する。ＷＡＫＥＵＰ信号生成部４７ａは、ハードスレッド２３ａ−１に対応して設けられる。同様に、ＷＡＫＥＵＰ信号生成部４８ａは、ハードスレッド２３ａ−１に対応して設けられる。同様に、ＷＡＫＥＵＰ信号生成部４７ｂ及び４８ｂは、ＣＰＵ２３ｂに備えられる各ハードスレッドに対応して設けられる。
【００７２】
ＣＰＵ１３ａ、１３ｂ、２３ａ及び２３ｂの各ハードスレッドは、それぞれに対応するＷＡＫＥＵＰデータレジスタの内容を読み出す。ＷＡＫＥＵＰ信号生成部３７ａ〜４８ｂにおいて、受信したＷＡＫＥＵＰデータと、各ＷＡＫＥＵＰ信号生成部それぞれのＳｌｅｅｐＩＤレジスタのＳｌｅｅｐＩＤとが一致する場合に、このＳｌｅｅｐＩＤが各ＷＡＫＥＵＰデータレジスタに書き込まれる。これにより、複数のハードスレッドが処理待ち状態になったとき、各ハードスレッドが、対応するＷＡＫＥＵＰデータレジスタにアクセスし、自ハードスレッド宛のＷＡＫＥＵＰデータが受信されたことを確認できる。また、ＷＡＫＥＵＰデータレジスタに書き込まれたＷＡＫＥＵＰデータが、対応するハードスレッドにより読み出される以前に、他のハードスレッド宛のＷＡＫＥＵＰデータでＷＡＫＥＵＰデータレジスタが更新されてしまうことを防ぐ。
【００７３】
タイマ２７ａ−９は、ハードスレッド２３ａ−１が、処理の実行中にデータの入力待ちが発生して処理を中断する時にハードスレッド２３ａ−１のＳｌｅｅｐＩＤを出力する際に、システムバス２２を経由してタイマ値をセットするタイマである。タイマ２７ａ−９は、所定のタイマ値がセットされると、所定の時間間隔でタイマ値を減算し、タイマ値が０になるとＯＮ信号をＯＲ部２７ａ−１１へ出力する。
【００７４】
第２の実施形態では、ＡＮＤ部２７ａ−７は、比較部２７ａ−５から出力されたセレクト信号と、ＩＣ−ｃｔｒｌ２５から出力されたパケット受信パルスとの論理積を示す信号をＯＲ部２７ａ−１１へ出力する。ＯＲ部２７ａ−１１は、ＡＮＤ部２７ａ−７から出力された論理積を示す信号と、タイマ２７ａ−９から出力されたＯＮ信号との論理和を取る論理ゲートである。すなわち、ＯＲ部２７ａ−１１は、タイマ２７ａ−９が所定の時間を計時した場合に、ハードスレッド２３ａ−１へ停止を解除して起動し、処理を再開する指示を出力する。若しくは、ＯＲ部２７ａ−１１は、通知されたＳｌｅｅｐＩＤと、ＳｌｅｅｐＩＤレジスタ２７ａ−１にセットされたＳｌｅｅｐＩＤとが一致する場合に、ハードスレッド２３ａ−１へ停止を解除して起動し、処理を再開する指示を出力する。ハードスレッド２３ａ−１は、この指示に応じて、停止を解除して起動し、処理を再開する。
【００７５】
同様に、ＷＡＫＥＵＰ信号生成部４８ａが有するタイマは、ハードスレッド２３ａ−２が、処理の実行中にデータの入力待ちが発生した際に処理を中断する時にハードスレッド２３ａ−２のＳｌｅｅｐＩＤを出力する際にタイマ値をセットするタイマである。ＷＡＫＥＵＰ信号生成部４８ａが有するタイマは、所定のタイマ値がセットされると、所定の時間間隔でタイマ値を減算し、タイマ値が０になるとＯＮ信号を、ＷＡＫＥＵＰ信号生成部４８ａが有するＯＲ部へ出力する。
【００７６】
第２の実施形態では、ＡＮＤ部２７ａ−８は、ＡＮＤ部２７ａ−７と同様に、比較部２７ａ−６から出力されたセレクト信号と、ＩＣ−ｃｔｒｌ２５から出力されたパケット受信パルスとの論理積を示す信号をＯＲ部２７ａ−１２へ出力する。ＯＲ部２７ａ−１２は、ＡＮＤ部２７ａ−８から出力された論理積を示す信号と、タイマ２７ａ−１０から出力されたＯＮ信号との論理和を取る論理ゲートである。すなわち、ＯＲ部２７ａ−１２は、タイマ２７ａ−１０が所定の時間を計時した場合に、ハードスレッド２３ａ−２へ停止を解除して起動し、処理を再開する指示を出力する。若しくは、ＯＲ部２７ａ−１２は、通知されたＳｌｅｅｐＩＤと、ＳｌｅｅｐＩＤレジスタ２７ａ−２にセットされたＳｌｅｅｐＩＤとが一致する場合に、ハードスレッド２３ａ−２へ停止を解除して起動し、処理を再開する指示を出力する。ハードスレッド２３ａ−２は、この指示に応じて、停止を解除して起動し、処理を再開する。
【００７７】
（第２の実施形態の処理）
図７は、第２の実施形態に係る処理を示すフローチャートである。図７は、ノード４０のハードスレッド２３ａ−１が、処理を実行中にノード３０が保持するデータを要し、そのデータがノード３０のＣＰＵ１３ａによりノード４０の共有メモリ２６ｂへコピーされる処理が完了するまで待ち合わせる例を示す。しかし、図７は、一例を示すに過ぎず、ノード３０又は４０のハードスレッドが、処理の実行中に、ノード３０又は４０の他のＣＰＵによる処理が完了するまで待ち合わせる場合であれば、同様の処理となる。
【００７８】
図７において、ノード３０における処理は、図５に示す第１の実施形態のノード１０における処理と同一であるので、説明を省略する。一方、ノード４０は、ＳＶＰ２８により、ノード４０が備えるＣＰＵ２３ａ及び２３ｂの各ハードスレッドを識別するＳｌｅｅｐＩＤをノード３０のＳＶＰ１８へ送信する（ステップＳ４０１）。なお、ステップＳ４０１は、情報処理装置２又は各ノードの起動時等において、各ノードのＳＶＰが自ノード内の各ハードスレッドの識別情報であるＳｌｅｅｐＩＤを、各ハードスレッドにおける処理の実行に先立って他のノードへ予め通知する処理である。
【００７９】
続いて、ノード４０は、ＣＰＵ２３ａ及び２３ｂの各ハードスレッドにおいて各々のプロセス処理を実行する（ステップＳ４０２）。続いて、ノード４０は、ＣＰＵ２３ａ及び２３ｂの各ハードスレッドにより、ステップＳ４０２のプロセス処理の実行中において、ノード３０におけるステップＳ１０２のプロセス処理が完了することを待ち合わせるか否かを判定する（ステップＳ４０３）。
【００８０】
ノード３０におけるステップＳ１０２の処理が完了することを待ち合わせると判定された場合（ステップＳ４０３Ｙｅｓ）、ノード４０は、ステップＳ４０４へ処理を移す。ノード３０におけるステップＳ１０２のプロセス処理が完了することを待ち合わせると判定されなかった場合（ステップＳ４０３Ｎｏ）、ノード４０は、ステップＳ４０２へ処理を移し、各ハードスレッドによりプロセス処理を継続する。ここでは、例えば、ノード３０におけるステップＳ１０２のプロセス処理が完了することを待ち合わせると判定されたハードスレッドは、ハードスレッド２３ａ−１である。
【００８１】
続いて、ノード４０は、プロセス処理の完了を待ち合わせるハードスレッド２３ａ−１により、ＳｌｅｅｐＩＤレジスタ２７ａ−３へハードスレッド２３ａ−１のＳｌｅｅｐＩＤをセットし、タイマ２７ａ−９にタイマ値をセットする（ステップＳ４０４）。続いて、ノード４０は、ハードスレッド２３ａ−１により実行中のプロセスを中断し（中断したプロセスを、以下、中断プロセスと呼ぶ）、スレッドを停止する（ステップＳ４０５）。続いて、ノード４０は、ＷＡＫＥＵＰ信号生成部４７ａにより、図８を参照して後述するＷＡＫＥＵＰ信号ＯＮ処理を実行する（ステップＳ４０６）。
【００８２】
続いて、ノード４０は、ＷＡＫＥＵＰ信号生成部４７ａによりＷＡＫＥＵＰ信号がＯＮにされたか否かを判定する（ステップＳ４０７）。ＷＡＫＥＵＰ信号がＯＮにされたと判定された場合（ステップＳ４０７Ｙｅｓ）、ノード４０は、ステップＳ４０５で停止されたハードスレッド２３ａ−１を起動させる（ステップＳ４０８）。ＷＡＫＥＵＰ信号がＯＮにされたと判定されなかった場合（ステップＳ４０７Ｎｏ）、ノード４０は、ステップＳ４０６へ処理を移す。
【００８３】
続いて、ノード４０は、ハードスレッド２３ａ−１により、自スレッドのＳｌｅｅｐＩＤがＷＡＫＥＵＰデータレジスタ２７ａ−３にセットされているか否かを判定する（ステップＳ４０９）。自スレッドのＳｌｅｅｐＩＤがＷＡＫＥＵＰデータレジスタ２７ａ−３にセットされていると判定された場合（ステップＳ４０９Ｙｅｓ）、ハードスレッド２３ａ−１は、中断プロセスを再開する（ステップＳ４１０）。自スレッドのＳｌｅｅｐＩＤがＷＡＫＥＵＰデータレジスタ２７ａ−３にセットされていると判定されなかった場合（ステップＳ４０９Ｎｏ）、ハードスレッド２３ａ−１は、プロセス切り替え処理を行う（ステップＳ４１１）。そして、ハードスレッド２３ａ−１は、中断プロセスとは異なる別プロセスを実行する（ステップＳ４１２）。
【００８４】
続いて、ハードスレッド２３ａ−１は、自スレッドのＳｌｅｅｐＩＤがＷＡＫＥＵＰデータレジスタ２７ａ−３にセットされているか否かを判定する（ステップＳ４１３）。自スレッドのＳｌｅｅｐＩＤがＷＡＫＥＵＰデータレジスタ２７ａ−３にセットされていると判定された場合（ステップＳ４１３Ｙｅｓ）、ハードスレッド２３ａ−１はプロセス切り替えを行い（ステップＳ４１４）、中断プロセスを再開する（ステップＳ４１０）。なお、自スレッドのＳｌｅｅｐＩＤがＷＡＫＥＵＰデータレジスタ２７ａ−３にセットされていると判定されなかった場合（ステップＳ４１３Ｎｏ）、ハードスレッド２３ａ−１は、ポーリング処理によりステップＳ４１３を繰り返す。
【００８５】
（第２の実施形態のＷＡＫＥＵＰ信号ＯＮ処理のフローチャート）
図８は、第２の実施形態に係るＷＡＫＥＵＰ信号ＯＮ処理を示すフローチャートである。第２の実施形態に係るＷＡＫＥＵＰ信号ＯＮ処理は、図７のステップＳ４０６に示す処理である。
【００８６】
ノード４０は、ＷＡＫＥＵＰ信号生成部４７ａにより、タイマ２７ａ−９がタイムアウトしたか否かを判定する（ステップＳ４０６ａ）。タイマ２７ａ−９がタイムアウトしたと判定された場合（ステップＳ４０６ａＹｅｓ）、ノード４０は、ＷＡＫＥＵＰ信号生成部４７ａによりＷＡＫＥＵＰ信号をＯＮにする（ステップＳ４０６ｅ）。一方、タイマ２７ａ−９がタイムアウトしたと判定されなかった場合（ステップＳ４０６ａＮｏ）、ノード４０は、ＷＡＫＥＵＰ信号生成部４７ａにより、ノード３０からＷＡＫＥＵＰパケットを受信したか否かを判定する（ステップＳ４０６ｂ）。
【００８７】
ノード３０からＷＡＫＥＵＰパケットを受信したと判定された場合（ステップＳ４０６ｂＹｅｓ）、ノード４０は、ステップＳ４０６ｃへ処理を移す。一方、ノード３０からＷＡＫＥＵＰパケットを受信したと判定されなかった場合（ステップＳ４０６ｂＮｏ）、ノード４０は、ステップＳ４０６ａへ処理を移す。
【００８８】
続いて、ノード４０は、比較部２７ａ−５により、ＳｌｅｅｐＩＤレジスタ２７ａ−１の値と、受信したＷＡＫＥＵＰデータに含まれるＳｌｅｅｐＩＤとが等しいか否かを判定する（ステップＳ４０６ｃ）。ＳｌｅｅｐＩＤレジスタの値と、受信したＷＡＫＥＵＰデータに含まれるＳｌｅｅｐＩＤとが等しいと判定された場合（ステップＳ４０６ｃＹｅｓ）、ノード４０は、ステップＳ４０６ｄへ処理を移す。ＳｌｅｅｐＩＤレジスタの値と、受信したＷＡＫＥＵＰデータに含まれるＳｌｅｅｐＩＤとが等しいと判定されなかった場合（ステップＳ４０６ｃＮｏ）、ノード４０は、ステップＳ４０６ａへ処理を移す。
【００８９】
続いて、ノード４０は、ＷＡＫＥＵＰ信号生成部４７ａにより、受信したＷＡＫＥＵＰパケットのＷＡＫＥＵＰデータを、ＷＡＫＥＵＰデータレジスタ２７ａ−３にセットする（ステップＳ４０６ｄ）。続いて、ノード４０は、ＷＡＫＥＵＰ信号生成部４７ａによりＷＡＫＥＵＰ信号をＯＮにし、ハードスレッド２３ａ−１へ出力する（ステップＳ４０６ｅ）。ステップＳ４０６ｅの処理が終了すると、ノード４０は、図７に示すステップＳ４０７へ処理を移す。
【００９０】
（第２の実施形態による効果）
ＯＳは、あるプロセスの処理を一定時間実行すると、他のプロセスに実行を切り替えるため、長時間にわたってスレッドを停止させると、起動指示を受信してもプロセスがタイムアウトして、意図しない他のプロセスに自動的に切替えてしまうことがある。このため、タイマを使ってプロセス切り替え前にハードスレッドを起動させ、ＯＳにより、実行中のプロセスが別のプロセスに切り替えられることを防ぐことができる。
【００９１】
また、タイマとＷＡＫＥＵＰデータレジスタと併用し、実行中のプロセスから次に実行させたいプロセスへ意図的に実行するプロセスを切り替えることにより、プロセスがプロセス切り替え管理を行うことができる。
【００９２】
上述の第１及び第２の実施形態では、ハードスレッドの停止状態を第１の状態とし、ハードスレッドの起動状態を第２の状態とした。そして、他のノードが保持するデータの書き込みが終了することを待ち合わせる、第１の状態にあるハードスレッドに対して、データの書き込みを行って終了した他のノードのハードウェアが終了を通知するとした。そして、その通知に応じて、ハードスレッドが第１の状態から第２の状態へ移行するとした。しかし、開示の技術は、第１の状態がハードスレッドの停止状態、第２の状態がハードスレッドの起動状態であることに限られない。すなわち、ハードスレッドが、自ノード又は他ノードのハードスレッドで動作するプロセスが期待の状態へ移行するまで第１の状態にある場合、ハードスレッドを指定して期待の状態への移行を通知して第１の状態から第２の状態へ移行させる技術に広く適用できる。
【００９３】
なお、上述の第１及び第２の実施形態における情報処理装置１及び２が備えるノードの数、各ノードが備えるＣＰＵの数、各ＣＰＵが備えるハードスレッドの数は、任意に変更可能である。また、各ハードスレッドに対応して設けられるＷＡＫＥＵＰ信号生成部は、第１の実施形態のようにＣＰＵ毎に設けられてもよいし、第２の実施形態のようにハードスレッド毎に設けられてもよい。
【符号の説明】
【００９４】
１０、２０、３０、４０  ノード
１３ａ、１３ｂ、２３ａ、２３ｂ  ＣＰＵ
２３ａ−１、２３ａ−２  ハードスレッド
１７ａ、１７ｂ、２７ａ、２７ｂ、３７ａ、３７ｂ、４７ａ、４７ｂ、４８ａ、４８ｂ  ＷＡＫＥＵＰ信号生成部
１８、２８  ＳＶＰ
２３ａ−３  システムバスコントローラ
２７ａ−１、２７ａ−２  ＳｌｅｅｐＩＤレジスタ
２７ａ−３  ＷＡＫＥＵＰデータレジスタ
２７ａ−５、２７ａ−６  比較部
２７ａ−７、２７ａ−８  ＡＮＤ部
２７ａ−９  タイマ
２７ａ−１１  ＯＲ部
【図１】
0005819184.tif 000002
【図２】
0005819184.tif 000003
【図３】
0005819184.tif 000004
【図４】
0005819184.tif 000005
【図５】
0005819184.tif 000006
【図６】
0005819184.tif 000007
【図７】
0005819184.tif 000008
【図８】
0005819184.tif 000009