JP5239751B2 - ノード間同期装置、ノード間同期方法およびノード間同期プログラム - Google Patents

ノード間同期装置、ノード間同期方法およびノード間同期プログラム Download PDF

Info

Publication number
JP5239751B2
JP5239751B2 JP2008282249A JP2008282249A JP5239751B2 JP 5239751 B2 JP5239751 B2 JP 5239751B2 JP 2008282249 A JP2008282249 A JP 2008282249A JP 2008282249 A JP2008282249 A JP 2008282249A JP 5239751 B2 JP5239751 B2 JP 5239751B2
Authority
JP
Japan
Prior art keywords
synchronization
mask
inter
port
waiting
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.)
Active
Application number
JP2008282249A
Other languages
English (en)
Other versions
JP2010108406A (ja
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
Priority to JP2008282249A priority Critical patent/JP5239751B2/ja
Priority to US12/461,019 priority patent/US8397094B2/en
Publication of JP2010108406A publication Critical patent/JP2010108406A/ja
Application granted granted Critical
Publication of JP5239751B2 publication Critical patent/JP5239751B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • 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/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W4/00Services specially adapted for wireless communication networks; Facilities therefor
    • H04W4/02Services making use of location information

Description

この発明は、ノード間同期装置、ノード間同期方法およびノード間同期プログラムに関する。
従来、複数の計算機を用いて実行される並列プログラムのプロセス間同期を高速化するため、ハードウェアで待ち合わせ処理を行う方式が広く使われてきた(例えば、特許文献1参照)。ハードウェアで待ち合わせ処理を行う方式では、待ち合わせに参加する各プロセスの配置情報を事前に設定しておく必要がある。以下に、図16を参照しつつ、ハードウェアで待ち合わせ処理を行う従来方式の一例として、ノード内のプロセッサ間で待ち合わせ処理を行う装置について説明する。図16は、従来技術を説明するための図である。
同図に示すように、ノード内プロセッサ間で待ち合わせを行う装置は、A〜Dの4つのプロセッサ50、マスク情報保持部60、待ち合わせ状態保持部70、およびプロセッサ間同期制御部80で構成される。マスク情報保持部60は、4つのプロセッサに対応した4ビットのレジスタであり、待ち合わせに参加するプロセッサ50を特定するための情報を保持する。待ち合わせ状態保持部70は、4つのプロセッサに対応した4ビットのレジスタであり、同期リクエストを行ったプロセッサ50を特定するための情報を保持する。プロセッサ間同期制御部80はプロセッサ50からの同期リクエストを受けて、待ち合わせ状態保持部70内の情報を更新する。また、プロセッサ間同期制御部80は、待ち合わせ状態保持部70とマスク情報保持部60と比較することで待ち合わせの完了を検出し、プロセッサ50に完了を通知する。
続いて、プロセッサA上のプロセスとプロセッサC上のプロセスが待ち合わせを行う場合の動作を説明する。
(1)マスクの設定、待ち合わせ状態の初期化
プロセッサA上のプロセスとプロセッサC上のプロセスが待ち合わせに参加することに対応して、マスク情報保持部60内の情報を「0101」に設定し、待ち合わせ状態保持部70の情報を「0000」に設定する。
(2)プロセッサAが同期リクエストを発行
プロセッサAからプロセッサ間同期制御部80に同期リクエストを発行する。プロセッサ間同期制御部80は、待ち合わせ状態保持部70のプロセッサAに対応するビットに1をセットすることで更新する(「0000」→「0001」)。そして、プロセッサ間同期制御部80は、更新後の待ち合わせ状態保持部70の情報「0001」とマスク情報保持部60の情報「0101」を比較し、待ち合わせが終わっていないと判定する。
(3)プロセッサ#2が同期リクエストを発行
プロセッサCからプロセッサ間同期制御部80に同期リクエストを発行する。プロセッサ間同期制御部80は、待ち合わせ状態保持部70のプロセッサCに対応するビットに1をセットすることで更新する(「0001」→「0101」)。プロセッサ間同期制御部80は、更新後の待ち合わせ状態保持部70の情報「0101」とマスク情報保持部60の情報「0101」を比較し、待ち合わせが完了したと判定する。
(4)プロセッサに完了を通知
プロセッサ間同期制御部80から、マスク情報保持部60に従って、待ち合わせに参加するプロセッサAとプロセッサCに待ち合わせの完了を通知する。
上述したように、待ち合わせに参加するプロセスの待ち合わせが完了したか否かの判定は、マスク情報保持部60の情報と待ち合わせ状態保持部70の情報との比較によって行われる。このため、待ち合わせの判定を正しく行うには、同期リクエストが発行される前に、待ち合わせに参加するプロセスが、ノード内のどのプロセッサに配置されているかを示すプロセスの配置情報(マスク)をマスク情報保持部60にあらかじめ設定しておくことが必要である。
特開2005−316679号公報
ところで、近年では、並列プログラムを実行するシステムが、数百から数千のノードを備えた大規模なものとなっている。このため、例えば、待ち合わせに参加するプロセスの配置情報を、並列プログラムを実行するノードの一つでプロセス配置情報(マスク)を生成する場合には、ノード間で情報をやり取りするための送受信のコスト負担が非常に大きくなるという問題点がある。
また、MPI(Message Passing Interface)等の並列プログラムでは、ジョブ内プロセスの任意の部分集合で待ち合わせを行うことや、待ち合わせを行うプロセスの集合をジョブ内で動的に変更することが許されている。しかしながら、ハードウェアで待ち合わせ処理を行う上記の従来方式では、同期リクエストが発行される前にプロセスの配置情報をマスク情報保持部60にあらかじめ設定しておく必要があるので、このような待ち合わせへの対応が実質的に困難である。
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、低コストでプロセスの配置情報を自動生成するとともに、待ち合わせを行うプロセスの配置情報をジョブ内で動的に変更することが可能なノード間同期装置、ノード間同期方法およびノード間同期プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、開示の装置は、各計算機ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報の生成を要求するマスク生成リクエストを受け付け、当該受け付けられた各マスク生成リクエストに基づいて前記プロセス配置情報を自動生成する情報生成部を有する。
開示の装置によれば、低コストでプロセスの配置情報を自動生成でき、さらに、待ち合わせを行うプロセスの配置情報をジョブ内で動的に変更できる。
以下に、ノード間同期装置、ノード間同期方法およびノード間同期プログラムの一実施形態を説明する。
実施例1に係るノード間同期装置は、計算機ノード内のプロセッサ間で待ち合わせ処理を行うことを概要とする。そして、実施例1に係るノード間同期装置は、同期の待ち合わせを要求する同期リクエストを受け付ける前に、同期の待ち合わせ参加する計算機ノード内のプロセスの各々から、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報(マスク)の生成を要求するマスク生成リクエストを受け付ける。さらに、実施例1に係るノード間同期装置は、同期の待ち合わせ参加する各プロセスから受け付けられた各マスク生成リクエストを用いてプロセス配置情報(マスク)を自動生成する。このようなことから、低コストでプロセスの配置情報(マスク)を自動生成でき、さらに、待ち合わせを行うプロセスの配置情報(マスク)をジョブ内で動的に変更できる。
[ノード間同期装置の構成(実施例1)]
図1は、実施例1に係るシステムの構成を示す図である。図2は、実施例1に係るノード間同期装置の構成を示す図である。
図1に示すように、実施例1に係るノード間同期装置300は、ノード間ネットワーク200を介して、各計算機ノード100(ノード(0)〜(2))と通信可能な状態で接続される。
図2に示すように、ノード間同期装置300は、受信部310と、送信部320と、通信コンテキストテーブル330と、マスク情報テーブル340と、制御部350とを有する。受信部310は、ノード間ネットワーク200を介して、各計算機ノード100から送信されるマスク生成リクエストや同期リクエストを受信する。送信部320は、制御部350から受けたマスク生成レスポンスや同期レスポンスを各計算機ノード100に送信する。
通信コンテキストテーブル330は、計算機ノード100との通信に必要な情報を記憶するテーブルである。具体的には、図3に示すように、indexに対応付けて、計算機ノードに一意なノードID、および計算機ノード内のプロセスに一意なノード内通信IDを予め記憶する。図3は、実施例1に係る通信コンテキストテーブルの構成例を示す図である。
マスク情報テーブル340は、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報(マスク)等を記憶する。具体的には、図4に示すように、通信コンテキストテーブル330内の各indexと同一の情報ごとに、マスク、待ち合わせ状態およびカウンタを記憶する。初期状態時は、マスク情報テーブル340内の情報は全て「0」である。図4は、実施例1に係るマスク情報テーブルの構成例を示す図である。
ここで、マスク情報テーブル340内の各情報について説明する。マスクは、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報であり、プロセス配置情報の生成を要求するマスク生成リクエストの受付に応じて更新される(「0」であれば待ち合わせに不参加、「1」であれば参加することを示す)。待ち合わせ状態は、同期の待ち合わせを要求する同期リクエストの受付状況を示す情報であり、同期リクエストの受付に応じて更新される(「0」であれば待ち合わせに未受付、「1」であれば受付済であることを示す)。カウンタは、同期の待ち合わせ参加する全てのプロセスからマスク生成リクエストが受け付けられているか否かの判定に用いる情報であり、マスク生成リクエストを受け付けるごとに1ずつ加算される。
制御部350は、所定の制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。
具体的に説明すると、制御部350は、同期の待ち合わせ参加するプロセスからマスク生成リクエストを受け付けると、マスク生成リクエストに含まれる通信IDに対応したindexを特定する。そして、制御部350は、マスク生成リクエストに含まれる通信IDから特定したindexに基づいて、マスク情報テーブル340内のマスクの対応箇所およびカウンタを更新する。
以下に、図5を用いて、例えば、計算機ノード100の内、ノード(0)内のプロセスとノード(1)内のプロセスで待ち合わせを行う場合の制御部350の動作について説明する。図5は、実施例1に係るマスク情報テーブル内の情報の遷移を示す図である。制御部350は、同期の待ち合わせ参加するノード(0)のプロセスからマスク生成リクエストを受け付けると、マスク生成リクエストに含まれる「通信ID=00」に対応した「index00」に基づいて、マスク情報テーブル340内のマスクの対応箇所(右端)を「0」から「1」に更新する。さらに、制御部350は、マスク情報テーブル340内のカウンタに「1」を加算する(図5の(2)参照)。
続いて、制御部350は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、制御部350は、ノード(0)から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「2」を取得し、マスク情報テーブル340内のカウンタ値「1」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「2」と、マスク情報テーブル340内のカウンタ値「1」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、制御部350は、残りのマスク生成リクエストの受付を待機する。
ノード(0)からのマスク生成リクエスト受付後、ノード(2)からのマスク生成リクエストを受け付けると、制御部350は、ノード(0)からのマスク生成リクエスト受付時と同様に、マスク情報テーブル340内のマスクおよびカウンタを更新する。すなわち、ノード(2)のプロセスから受け付けたマスク生成リクエストに含まれる「通信ID=02」に対応した「index02」に基づいて、マスク情報テーブル340内のマスクの対応箇所(左から二つ目)を「0」から「1」に更新する。さらに、制御部350は、マスク情報テーブル340内のカウンタに「1」を加算する(図5の(3)参照)。
続いて、制御部350は、ノード(0)からのマスク生成リクエスト受付時と同様に、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。すなわち、ノード(2)から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「2」を取得し、マスク情報テーブル340内のカウンタ値「2」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「2」と、マスク情報テーブル340内のカウンタ値「2」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する。
そして、制御部350は、通信コンテキストテーブル330から、ノード(0)およびノード(2)と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをノード(0)およびノード(2)に送信する。具体的には、制御部350は、ノード(0)およびノード(2)の各プロセスから受け付けたマスク生成リクエストに含まれる通信IDに対応したindexに基づいて、通信コンテキストテーブル330から、ノード(0)およびノード(2)の各プロセスと通信するためのノードIDおよびノード内通信IDを取得する。
マスク生成レスポンスの送信後、制御部350は、ノード(0)およびノード(2)からの同期リクエストの受付を待機する。そして、制御部350は、ノード(2)のプロセスから同期リクエストを受け付けると、同期リクエストに含まれる「通信ID=02」に対応した「index02」に基づいて、マスク情報テーブル340内の待ち合わせ状態の対応箇所(左から二つ目)を「0」から「1」に更新する(図5の(4)参照)。
待ち合わせ状態の更新後、制御部350は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かを判定する。具体的には、制御部350は、マスク情報テーブル340内のマスク「0101」と待ち合わせ状態「0100」とを比較する。比較した結果、マスク「0101」と待ち合わせ状態「0100」とが互いに一致しないので、待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する。そして、制御部350は、残りの同期リクエストの受付を待機する。
ノード(2)からの同期リクエスト受付後、ノード(0)からの同期リクエストを受け付けると、制御部350は、ノード(2)からの同期リクエスト受付時と同様に、マスク情報テーブル340内の待ち合わせ状態を更新する。すなわち、ノード(0)のプロセスから受け付けたマスク生成リクエストに含まれる「通信ID=00」に対応した「index00」に基づいて、マスク情報テーブル340内のマスクの対応箇所(右端)を「0」から「1」に更新する。
待ち合わせ状態の更新後、制御部350は、ノード(2)からの同期リクエスト受付時と同様に、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かを判定する。具体的には、制御部350は、マスク情報テーブル340内のマスク「0101」と待ち合わせ状態「0101」とを比較する。比較した結果、マスク「0101」と待ち合わせ状態「0101」とが互いに一致するので、待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する。そして、制御部350は、通信コンテキストテーブル330から、ノード(0)およびノード(2)と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスをノード(0)およびノード(2)に送信する。
同期レスポンス送信後、制御部350は、マスク情報テーブル340内の待ち合わせ状態を初期化(全ての値を「0」に)して、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、制御部350は、引き続き、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了する(この時、マスク情報テーブル340内の情報を全て初期化する)。
[ノード間同期装置の処理(実施例1)]
図6は、実施例1に係るノード間同期装置の処理の流れを示す図である。なお、以下では、計算機ノード100の内、ノード(0)内のプロセスとノード(2)内のプロセスで待ち合わせを行う場合を例に挙げて説明する。
同図に示すように、ノード間同期装置300の制御部350は、同期の待ち合わせ参加するノード(0)のプロセスからマスク生成リクエストを受け付けると(ステップS1肯定)、マスク情報テーブル340内のマスクおよびカウンタを更新する(ステップS2)。すなわち、マスク生成リクエストに含まれる「通信ID=00」に対応した「index00」に基づいて、マスク情報テーブル340内のマスクの対応箇所(右端)を「0」から「1」に更新し、マスク情報テーブル340内のカウンタに「1」を加算する。
続いて、制御部350は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。具体的には、制御部350は、ノード(0)から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「2」を取得し、マスク情報テーブル340内のカウンタ値「1」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「2」と、マスク情報テーブル340内のカウンタ値「1」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する(ステップS3否定)。そして、制御部350は、ステップS1に戻って、残りのマスク生成リクエストの受付を待機する。
ノード(0)からのマスク生成リクエスト受付後、ノード(2)からのマスク生成リクエストを受け付けると(ステップS1肯定)、制御部350は、ノード(0)からのマスク生成リクエスト受付時と同様に、マスク情報テーブル340内のマスクおよびカウンタを更新する(ステップS2)。すなわち、ノード(2)のプロセスから受け付けたマスク生成リクエストに含まれる「通信ID=02」に対応した「index02」に基づいて、マスク情報テーブル340内のマスクの対応箇所(左から二つ目)を「0」から「1」に更新し、マスク情報テーブル340内のカウンタに「1」を加算する。
続いて、制御部350は、ノード(0)からのマスク生成リクエスト受付時と同様に、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。すなわち、ノード(2)から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「2」を取得し、マスク情報テーブル340内のカウンタ値「2」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「2」と、マスク情報テーブル340内のカウンタ値「2」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する(ステップS3肯定)。
そして、制御部350は、通信コンテキストテーブル330から、ノード(0)およびノード(2)と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをノード(0)およびノード(2)に送信する(ステップS4)。すなわち、制御部350は、ノード(0)およびノード(2)の各プロセスから受け付けたマスク生成リクエストに含まれる通信IDに対応したindexに基づいて、通信コンテキストテーブル330から、ノード(0)およびノード(2)の各プロセスと通信するためのノードIDおよびノード内通信IDを取得する。
マスク生成レスポンスの送信後、制御部350は、ノード(0)およびノード(2)からの同期リクエストの受付を待機する(ステップS5)。そして、制御部350は、ノード(2)のプロセスから同期リクエストを受け付けると(ステップS5肯定)、同期リクエストに含まれる「通信ID=02」に対応した「index02」に基づいて、マスク情報テーブル340内の待ち合わせ状態の対応箇所(左から二つ目)を「0」から「1」に更新する(ステップS6)。
待ち合わせ状態の更新後、制御部350は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かを判定する(ステップS7)。すなわち、制御部350は、マスク情報テーブル340内のマスク「0101」と待ち合わせ状態「0100」とを比較する。比較した結果、マスク「0101」と待ち合わせ状態「0100」とが互いに一致しないので、待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する(ステップS7否定)。そして、制御部350は、ステップS5に戻り、残りの同期リクエストの受付を待機する。
ノード(2)からの同期リクエスト受付後、ノード(0)からの同期リクエストを受け付けると、制御部350は、ノード(2)からの同期リクエスト受付時と同様に、マスク情報テーブル340内の待ち合わせ状態を更新する(ステップS6)。すなわち、ノード(0)のプロセスから受け付けたマスク生成リクエストに含まれる「通信ID=00」に対応した「index00」に基づいて、マスク情報テーブル340内のマスクの対応箇所(右端)を「0」から「1」に更新する。
待ち合わせ状態の更新後、制御部350は、ノード(2)からの同期リクエスト受付時と同様に、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かを判定する(ステップS7)。すなわち、制御部350は、マスク情報テーブル340内のマスク「0101」と待ち合わせ状態「0101」とを比較する。比較した結果、マスク「0101」と待ち合わせ状態「0101」とが互いに一致するので、待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する(ステップS7肯定)。そして、制御部350は、通信コンテキストテーブル330から、ノード(0)およびノード(2)と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスをノード(0)およびノード(2)に送信する(ステップS8)。
同期レスポンス送信後、制御部350は、マスク情報テーブル340内の待ち合わせ状態を初期化(全ての値を「0」に)して(ステップS9)、ジョブの終了を待機する(ステップS10)。そして、ジョブが終了していない場合には(ステップS10否定)、制御部350は、引き続き、同期リクエストの処理(ステップS5〜ステップS9)を継続する。一方、ジョブが終了した場合には(ステップS10肯定)、処理を終了する(この時、マスク情報テーブル340内の情報を全て初期化する)。
[実施例1による効果]
上述してきたように、実施例1によれば、同期の待ち合わせ参加する各プロセスから、各プロセスの配置状況を示したマスクの生成を要求するマスク生成リクエストを受け付けて自動生成する。このようなことから、ノード間で情報をやり取りするための送受信のコスト負担を大幅に削減しつつマスクを自動生成することができる。さらに、同期の待ち合わせ参加する各プロセスからのリクエストに応じてマスクの生成を行うので、待ち合わせを行うプロセスの配置状況を示すマスクをジョブ内で動的に変更できる。
また、サンプルの最小値、最大値、総和などのグローバル演算を同期して行う演算処理装置に対して、上述してきた実施例1に係るノード間同期装置を適用することもできる。
図7は、実施例2に係るノード間同期装置の構成を示す図である。同図に示すように、実施例2に係るノード間同期装置300は、マスク情報テーブル340ではなく、マスク情報テーブル341を有する点が、上記の実施例1とは異なる。
具体的には、図8に示すように、マスク情報テーブル341は、並列ジョブを実行するプロセスの集合を一意に特定するプロセス集合識別子(集合ID)と、マスク情報テーブル341内のindexとを対応させ、集合IDごとにマスク、待ち合わせ状態およびカウンタを記憶する。なお、図8は、実施例2に係るマスク情報テーブルの構成例を示す図である。
このようなことから、実施例2によれば、複数の並列ジョブによるプロセス間待ち合わせをパラレルに処理できる。
図9は、実施例3に係るノード間同期装置の構成を示す図である。実施例3に係るノード間同期装置300は、以下に説明する点が上記の実施例とは異なる。
すなわち、ノード間同期装置300は、ポート1に対応したポート内同期ブロック300−1と、ポート2に対応したポート内同期ブロック300−2と、ポート間同期ブロック300−3とを有し、ポート1とポート2との間の待ち合わせを実現する。
ポート内同期ブロック300−1は、受信部310−1と、送信部320−1と、通信コンテキストテーブル330−1と、マスク情報テーブル340−1と、ポート内同期制御部350−1とを有し、上記の実施例1で説明したノード間同期装置300と同様の機能を有する。なお、ポート間の待ち合わせを目的とするため、後述するポート間同期ブロック内でマスク生成リクエストの受付数をカウントする。したがって、マスク情報テーブル340−1には、カウンタを用意しない。
ポート内同期ブロック300−2は、受信部310−2と、送信部320−2と、通信コンテキストテーブル330−2と、マスク情報テーブル340−2と、ポート内同期制御部350−2とを有し、上記の実施例1で説明したノード間同期装置300と同様の機能を有する。なお、上記したポート内同期ブロック300−1と同様の理由から、マスク情報テーブル340−2には、カウンタを用意しない。
ポート間同期ブロック300−3は、マスク情報テーブル340−3およびポート間同期制御部350−3を有する。マスク情報テーブル340−3は、各ポート(ポート1およびポート2)に対応するマスク、待ち合わせ状態およびカウンタを有する。ポート間同期制御部350−3は、マスク情報テーブル340−3を用いて、ポート間の待ち合わせ処理を実行する。
以下に、図10および図11を用いて、例えば、ポート1に接続された計算機ノード100内の2プロセスと、ポート2に接続された計算機ノード100内の1プロセスとの間で待ち合わせを行う場合を説明する。図10および図11は、実施例3に係るマスク情報テーブル内の情報の遷移を示す図である。
図10に示される値は、左から順にポート1に対応するポート内同期ブロック300−1のマスク情報テーブル340−1内の値、ポート内同期ブロック300−2のマスク情報テーブル340−2内の値、ポート間同期ブロック300−3のマスク情報テーブル340−3内の値となっている。
初期状態では、ポート1、ポート2およびポート間のマスク、待ち合わせ状態およびカウンタの各値は0となる(図10の(1)参照)。
ポート内同期ブロック300−1のポート内同期制御部350−1は、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=0」、「プロセス数=3」を含んだマスク生成リクエストを受け付けると、上述した実施例1と同様の手順で、マスク情報テーブル340−1内のマスクを更新する(図10の(2)参照)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する。
マスク生成リクエストの転送後、ポート内同期制御部350−1は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する。また、ポート内同期制御部350−1は、マスク生成レスポンスが受け付けられる前に、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う。
ポート内同期制御部350−1は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると、同期レスポンスの受付を待機する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−1からマスク生成リクエストを受信すると、マスク情報テーブル340−3内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1からのマスク生成リクエストを受け付けた場合、マスク情報テーブル340−3内のマスクにおいて、ポート1に対応する箇所(右)を「0」から「1」に更新する(図10の(2)参照)。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「1」となる(同図(2)参照)。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「1」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「1」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、ポート間同期制御部350−3は、残りのマスク生成リクエストの受付を待機する。
ポート内同期ブロック300−2のポート内同期制御部350−2は、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート2を介して、例えば、「通信ID=2」、「プロセス数=3」を含んだマスク生成リクエストを受信すると、上述した実施例1と同様の手順で、マスク情報テーブル340−2内のマスクを更新する(図10の(3)参照)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−2からマスク生成リクエストを受信すると、マスク情報テーブル340−3内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−2からのマスク生成リクエストを受信した場合、マスク情報テーブル340−3内のマスクにおいて、ポート2に対応する箇所(左)を「0」から「1」に更新する(図10の(3)参照)。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「2」となる(同図(3)参照)。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−2から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「2」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「2」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する。そして、ポート間同期制御部350−3は、残りのマスク生成リクエストの受付を待機する。
ポート内同期ブロック300−1のポート内同期制御部350−1は、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=3」、「プロセス数=3」を含んだマスク生成リクエストを受け付けると、上述したのと同様の手順で、マスク情報テーブル340−1内のマスクを更新する(図10の(4)参照)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−1からマスク生成リクエストを受信すると、マスク情報テーブル340−3内のマスクおよびカウンタを更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1からのマスク生成リクエストを受け付けた場合、マスク情報テーブル340−3内のマスクにおいて、ポート1に対応する箇所(右)を「0」から「1」に更新するが、既に「1」に更新されている状態なのでそのままとする(図10の(4)参照)。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「3」となる(同図(4)参照)。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「3」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「3」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する。そして、ポート間同期制御部350−3は、マスク情報テーブル340−3内のマスクを参照して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをポート内同期ブロック300−1およびポート内同期ブロック300−2にそれぞれ送信する。
ポート内同期ブロック300−1は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると、上述した実施例1と同様の手順で、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(0)および(3))と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する。同様にして、ポート内同期ブロック300−2は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると、上述した実施例1と同様の手順で、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(2))と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する。
ポート内同期ブロック300−2のポート内同期制御部350−2は、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート2を介して、例えば、「通信ID=2」を含んだ同期リクエストを受信すると、上述した実施例1と同様の手順で、マスク情報テーブル340−2内の待ち合わせ状態を更新する(図11の(5)参照)。
そして、ポート内同期制御部350−2は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート2の範囲で判定する。具体的には、ポート内同期制御部350−2は、上述した実施例1と同様の手順で、マスク情報テーブル340−2内のマスク「0100」と待ち合わせ状態「0100」とを比較する(図11の(5)参照)。比較した結果、マスク「0100」と待ち合わせ状態「0100」とが互いに一致するので、ポート2の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する。そして、ポート内同期制御部350−2は、ポート間同期ブロック300−3に同期リクエストを転送する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−2から同期リクエストを受信すると、マスク情報テーブル340−3内の待ち合わせ状態を更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−2からの同期リクエストを受信した場合、マスク情報テーブル340−3内の待ち合わせ状態において、ポート2に対応する箇所(左)を「0」から「1」に更新する(図11の(5)参照)。
待ち合わせ状態の更新後、ポート間同期制御部350−3は、ポート間の待ち合わせが完了しているか否かを判定する。具体的には、ポート間同期制御部350−3は、マスク情報テーブル340内のマスク「11」と待ち合わせ状態「10」とを比較する(図11の(5)参照)。比較した結果、マスク「11」と待ち合わせ状態「10」とが互いに一致しないので、ポート間の待ち合わせが完了していないものと判定する。そして、ポート間同期制御部350−3は、ポート内同期ブロック300−1(ポート1側)から残りの同期リクエストの受付を待機する。
ポート内同期ブロック300−1のポート内同期制御部350−1は、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=3」を含んだ同期リクエストを受信すると、上述した実施例1と同様の手順で、マスク情報テーブル340−2内の待ち合わせ状態を更新する(図11の(6)参照)。
待ち合わせ状態の更新後、ポート内同期制御部350−1は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート1の範囲で判定する。具体的には、ポート内同期制御部350−1は、上述した実施例1と同様の手順で、マスク情報テーブル340−1内のマスク「1001」と待ち合わせ状態「1000」とを比較する(図11の(6)参照)。比較した結果、マスク「1001」と待ち合わせ状態「1000」とが互いに一致しないので、ポート1の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送せずに、残りの同期リクエストの受付を待機する。
そして、ポート内同期制御部350−1は、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=0」を含んだ同期リクエストを受信すると、上述したのと同様の手順で、マスク情報テーブル340−1内の待ち合わせ状態を更新する(図11の(7)参照)。
待ち合わせ状態の更新後、ポート内同期制御部350−1は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート1の範囲で判定する。具体的には、ポート内同期制御部350−1は、上述したのと同様の手順で、マスク情報テーブル340−1内のマスク「1001」と待ち合わせ状態「1001」とを比較する(図11の(7)参照)。比較した結果、マスク「1001」と待ち合わせ状態「1001」とが互いに一致するので、ポート1の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送する。
ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−1から同期リクエストを受信すると、マスク情報テーブル340−3内の待ち合わせ状態を更新する。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−1からの同期リクエストを受信した場合、マスク情報テーブル340−3内の待ち合わせ状態において、ポート1に対応する箇所(右)を「0」から「1」に更新する(図11の(7)参照)。
待ち合わせ状態の更新後、ポート間同期制御部350−3は、ポート間の待ち合わせが完了しているか否かを判定する。具体的には、ポート間同期制御部350−3は、マスク情報テーブル340内のマスク「11」と待ち合わせ状態「11」とを比較する(図11の(7)参照)。比較した結果、マスク「11」と待ち合わせ状態「11」とが互いに一致するので、ポート間の待ち合わせが完了しているものと判定する。そして、ポート間同期制御部350−3は、マスク情報テーブル340−3内のマスクを参照して、ポート間の待ち合わせが完了したことを示す同期レスポンスをポート内同期ブロック300−1およびポート内同期ブロック300−2にそれぞれ送信する。
同期レスポンス送信後、ポート間同期制御部350−3は、マスク情報テーブル340−3内の待ち合わせ状態を初期化(全ての値を「0」)して(図11の(8)参照)、ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知を待機する。そして、ポート間同期制御部350−3は、ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知が受け付けられていない場合には、同期リクエストのポート間の待ち合わせ処理を継続する。ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知を受け付けると、処理を終了し、マスク情報テーブル340−3内のマスクを初期化する。
ポート内同期ブロック300−1は、ポート間同期ブロック300−3から同期レスポンスを受け付けると、上述した実施例1と同様の手順で、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(0)および(3))と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する。
そして、ポート内同期ブロック300−1は、マスク情報テーブル340−1の待ち合わせ状態を初期化(全ての値を「0」)し(図11の(8)参照)、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、ポート内同期ブロック300−1は、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了し(この時、マスク情報テーブル340−1内の情報を全て初期化する)し、ジョブの終了をポート間同期ブロック300−3に送信する。
ポート内同期ブロック300−1と同様に、ポート内同期ブロック300−2は、ポート間同期ブロック300−3から同期レスポンスを受け付けると、上述した実施例1と同様の手順で、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(2))と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する。
そして、ポート内同期ブロック300−2は、マスク情報テーブル340−2の待ち合わせ状態を初期化(全ての値を「0」)し(図11の(8)参照)、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する。そして、ジョブが終了していない場合には、ポート内同期ブロック300−2は、同期リクエストの処理を継続する。一方、ジョブが終了した場合には、処理を終了し(この時、マスク情報テーブル340−2内の情報を全て初期化する)し、ジョブの終了をポート間同期ブロック300−3に送信する。
[ノード間同期装置の処理(実施例3)]
図12および図13は、実施例3に係るポート内同期制御部の処理の流れを示す図である。図14は、実施例3に係るポート間同期制御部の処理の流れを示す図である。なお、以下では、ポート1およびポート2の2ポート間待ち合わせを行う場合を例に挙げて説明する。
[ポート内同期制御部による処理]
図12に示すように、例えば、ポート内同期制御部350−1は、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=0」、「プロセス数=3」を含んだマスク生成リクエストを受け付けると(ステップS1肯定)、マスク情報テーブル340−1内のマスクを更新する(ステップS2)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する(ステップS3)。
マスク生成リクエストの転送後、ポート内同期制御部350−1は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する(ステップS4)。また、ポート内同期制御部350−1は、マスク生成レスポンスが受け付けられていない状態で(ステップS4否定)、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う(ステップS1〜ステップS3)。
ポート内同期ブロック300−1は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると(ステップS4肯定)、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(0)および(3))と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する(ステップS5)。
そして、図13に示すように、マスク生成レスポンスの転送後、ポート内同期制御部350−1は、同期リクエストの受信を待機し(ステップS6)、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=3」を含んだ同期リクエストを受信すると(ステップS6肯定)、マスク情報テーブル340−2内の待ち合わせ状態を更新する(ステップS7)。
待ち合わせ状態の更新後、ポート内同期制御部350−1は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート1の範囲で判定する(ステップS8)。例えば、ポート内同期制御部350−1は、マスク情報テーブル340−1内のマスク「1001」と待ち合わせ状態「1000」とを比較する。比較した結果、マスク「1001」と待ち合わせ状態「1000」とが互いに一致しないので、ポート1の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する(ステップS8否定)。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送せずに、上述したステップS6に戻り、残りの同期リクエストの受付を待機する。
そして、ポート内同期制御部350−1は、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート1を介して、例えば、「通信ID=0」を含んだ同期リクエストを受信すると(ステップS6肯定)、上述したのと同様の手順で、マスク情報テーブル340−1内の待ち合わせ状態を更新する(ステップS7)。
待ち合わせ状態の更新後、ポート内同期制御部350−1は、上述したのと同様の手順で、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート1の範囲で判定する(ステップS8)。ポート内同期制御部350−1は、例えば、マスク情報テーブル340−1内のマスク「1001」と待ち合わせ状態「1001」とを比較する。比較した結果、マスク「1001」と待ち合わせ状態「1001」とが互いに一致するので、ポート1の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する(ステップS8肯定)。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送する(ステップS9)。
同期リクエスト転送後、ポート内同期ブロック300−1は、同期レスポンスの受信を待機し(ステップS10)、ポート間同期ブロック300−3から同期レスポンスを受信すると(ステップS10肯定)、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(0)および(3))と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する(ステップS11)。
そして、ポート内同期ブロック300−1は、マスク情報テーブル340−1の待ち合わせ状態を初期化(全ての値を「0」)し(ステップS12)、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する(ステップS13)。そして、ジョブが終了していない場合には(ステップS13否定)、ポート内同期ブロック300−1は、上述したステップS6に戻って、同期リクエストの処理(ステップS6〜ステップS12)を継続する。一方、ジョブが終了した場合には(ステップS13肯定)、処理を終了し(この時、マスク情報テーブル340−1内の情報を全て初期化する)、ジョブの終了をポート間同期ブロック300−3に送信する。
ポート内同期制御部350−1と同様に、ポート内同期制御部350−2は、図12に示すように、同期の待ち合わせに参加する計算機ノード100内のプロセスから、ポート2を介して、例えば、「通信ID=2」、「プロセス数=3」を含んだマスク生成リクエストを受信すると(ステップS1肯定)、マスク情報テーブル340−2内のマスクを更新する(ステップS2)。そして、ポート間同期ブロック300−3にマスク生成リクエストを転送する(ステップS3)。
マスク生成リクエストの転送後、ポート内同期制御部350−2は、同期の待ち合わせに参加する全プロセスからマスク生成リクエストが受け付けられたことを示すマスク生成レスポンスの受付を待機する(ステップS4)。また、ポート内同期制御部350−2は、マスク生成レスポンスが受け付けられていない状態で(ステップS4否定)、マスク生成リクエストを受信すると、上述したのと同様にして、マスクの更新およびマスク生成リクエストの転送を行う(ステップS1〜ステップS3)。
ポート内同期ブロック300−2は、ポート間同期ブロック300−3からマスク生成レスポンスを受け付けると(ステップS4肯定)、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(2))と通信するための情報を取得して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスを転送する(ステップS5)。
そして、図13に示すように、マスク生成レスポンスの転送後、ポート内同期制御部350−2は、同期リクエストの受信を待機し(ステップS6)、同期の待ち合わせを要求する計算機ノード100内のプロセスから、ポート2を介して、例えば、「通信ID=2」を含んだ同期リクエストを受信すると(ステップS6肯定)、マスク情報テーブル340−2内の待ち合わせ状態を更新する(ステップS7)。
待ち合わせ状態の更新後、ポート内同期制御部350−2は、待ち合わせを行う全プロセスから同期リクエストが受け付けられているか(プロセス間の待ち合わせが完了しているか)否かをポート2の範囲で判定する(ステップS8)。例えば、ポート内同期制御部350−2は、マスク情報テーブル340−2内のマスク「0100」と待ち合わせ状態「0100」とを比較する。比較した結果、マスク「0100」と待ち合わせ状態「0100」とが互いに一致するので、ポート2の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられている(プロセス間の待ち合わせが完了している)ものと判定する(ステップS8肯定)。そして、ポート内同期制御部350−1は、ポート間同期ブロック300−3に同期リクエストを転送する(ステップS9)。
一方、ポート内同期制御部350−2は、マスクと待ち合わせ状態とが互いに一致しない場合には、ポート2の範囲で待ち合わせを行う全プロセスから同期リクエストが受け付けられていない(プロセス間の待ち合わせが完了していない)ものと判定する(ステップS8否定)。そして、ポート間同期ブロック300−3に同期リクエストを転送せずに、上述したステップS6に戻り、残りの同期リクエストの受付を待機する。
同期リクエスト転送後、ポート内同期ブロック300−2は、同期レスポンスの受信を待機し(ステップS10)、ポート間同期ブロック300−3から同期レスポンスを受信すると(ステップS10肯定)、通信コンテキストテーブル330から、マスク生成リクエストの送信元である計算機ノード100(例えば、ノード(2))と通信するための情報を取得して、プロセス間の待ち合わせが完了したことを示す同期レスポンスを転送する(ステップS11)。
そして、ポート内同期ブロック300−2は、マスク情報テーブル340−2の待ち合わせ状態を初期化(全ての値を「0」)し(ステップS12)、プロセス間の待ち合わせを行って実行されるジョブの終了を待機する(ステップS13)。そして、ジョブが終了していない場合には(ステップS13否定)、ポート内同期ブロック300−2は、上述したステップS6に戻って、同期リクエストの処理(ステップS6〜ステップS12)を継続する。一方、ジョブが終了した場合には(ステップS13肯定)、処理を終了し(この時、マスク情報テーブル340−2内の情報を全て初期化する)し、ジョブの終了をポート間同期ブロック300−3に送信する。
[ポート間同期制御部の処理]
図14に示すように、ポート間同期ブロック300−3のポート間同期制御部350−3は、ポート内同期ブロック300−1からマスク生成リクエストを受信すると(ステップS1)、マスク情報テーブル340−3内のマスクおよびカウンタを更新する(ステップS2)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1からのマスク生成リクエストを受け付けた場合、マスク情報テーブル340−3内のマスクにおいて、ポート1に対応する箇所(右)を「0」から「1」に更新する。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「1」となる。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「1」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「1」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する(ステップS3否定)。そして、ポート間同期制御部350−3は、上述したステップS1に戻って、残りのマスク生成リクエストの受付を待機する。
ポート間同期制御部350−3は、次に、ポート内同期ブロック300−2からマスク生成リクエストを受信すると(ステップS1肯定)、マスク情報テーブル340−3内のマスクおよびカウンタを更新する(ステップS2)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−2からのマスク生成リクエストを受信した場合、マスク情報テーブル340−3内のマスクにおいて、ポート2に対応する箇所(左)を「0」から「1」に更新する。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「2」となる。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。具体的には、ポート間同期制御部350−3は、ポート内同期ブロック300−2から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「2」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「2」とが一致しないので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられていないものと判定する(ステップS3否定)。そして、ポート間同期制御部350−3は、上述したステップS1に戻って、残りのマスク生成リクエストの受付を待機する。
ポート間同期制御部350−3は、次に、ポート内同期ブロック300−1からマスク生成リクエストを受信すると(ステップS1肯定)、マスク情報テーブル340−3内のマスクおよびカウンタを更新する(ステップS2)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1からのマスク生成リクエストを受け付けた場合、マスク情報テーブル340−3内のマスクにおいて、ポート1に対応する箇所(右)を「0」から「1」に更新するが、既に「1」に更新されている状態なのでそのままとする。さらに、ポート間同期制御部350−3は、マスク情報テーブル340−3内のカウンタに「1」を加算する。この時点で、カウンタ値は「3」となる。
続いて、ポート間同期制御部350−3は、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているか否かを判定する(ステップS3)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1から受け付けたマスク生成リクエストから、同期の待ち合わせに参加するプロセス数「3」を取得し、マスク情報テーブル340−3内のカウンタ値「3」と比較する。比較した結果、マスク生成リクエストから取得したプロセス数「3」と、マスク情報テーブル340内のカウンタ値「3」とが一致するので、同期の待ち合わせ参加する全プロセスからマスク生成リクエストが受け付けられているものと判定する(ステップS3肯定)。そして、ポート間同期制御部350−3は、マスク情報テーブル340−3内のマスクを参照して、同期の待ち合わせ参加が完了したことを示すマスク生成レスポンスをポート内同期ブロック300−1およびポート内同期ブロック300−2にそれぞれ送信する(ステップS4)。
マスク生成レスポンスの送信後、ポート間同期制御部350−3は、同期リクエストの受信を待機し(ステップS5)、ポート内同期ブロック300−2から同期リクエストを受信すると(ステップS5肯定)、マスク情報テーブル340−3内の待ち合わせ状態を更新する(ステップS6)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−2からの同期リクエストを受信した場合、マスク情報テーブル340−3内の待ち合わせ状態において、ポート2に対応する箇所(左)を「0」から「1」に更新する。
待ち合わせ状態の更新後、ポート間同期制御部350−3は、ポート間の待ち合わせが完了しているか否かを判定する(ステップS7)。例えば、ポート間同期制御部350−3は、マスク情報テーブル340内のマスク「11」と待ち合わせ状態「10」とを比較する。比較した結果、マスク「11」と待ち合わせ状態「10」とが互いに一致しないので、ポート間の待ち合わせが完了していないものと判定する(ステップS7否定)。そして、ポート間同期制御部350−3は、上述したステップS5に戻って、ポート内同期ブロック300−1(ポート1側)から残りの同期リクエストの受付を待機する。
ポート間同期制御部350−3は、次に、ポート内同期ブロック300−1から同期リクエストを受信すると(ステップS5肯定)、マスク情報テーブル340−3内の待ち合わせ状態を更新する(ステップS6)。例えば、ポート間同期制御部350−3は、ポート内同期ブロック300−1からの同期リクエストを受信した場合、マスク情報テーブル340−3内の待ち合わせ状態において、ポート1に対応する箇所(右)を「0」から「1」に更新する。
待ち合わせ状態の更新後、ポート間同期制御部350−3は、ポート間の待ち合わせが完了しているか否かを判定する(ステップS7)。例えば、ポート間同期制御部350−3は、マスク情報テーブル340内のマスク「11」と待ち合わせ状態「11」とを比較する。比較した結果、マスク「11」と待ち合わせ状態「11」とが互いに一致するので、ポート間の待ち合わせが完了しているものと判定する(ステップS7肯定)。そして、ポート間同期制御部350−3は、マスク情報テーブル340−3内のマスクを参照して、ポート間の待ち合わせが完了したことを示す同期レスポンスをポート内同期ブロック300−1およびポート内同期ブロック300−2にそれぞれ送信する(ステップS8)。
同期レスポンス送信後、ポート間同期制御部350−3は、マスク情報テーブル340−3内の待ち合わせ状態を初期化(全ての値を「0」)して(ステップS9)、ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知を待機する(ステップS10)。そして、ポート間同期制御部350−3は、ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知が受け付けられていない場合には(ステップS10否定)、上述したステップS5に戻って、同期リクエストのポート間の待ち合わせ処理(ステップS5〜ステップS9)を継続する。ポート内同期ブロック300−1およびポート内同期ブロック300−2からジョブの終了通知を受け付けると(ステップS10肯定)、処理を終了し、マスク情報テーブル340−3内のマスクを初期化する。
上述してきたように、実施例3によれば、ポート間の待ち合わせについても、上記の実施例1の内容を同様に適用できる。
なお、上述してきた実施例3では、2ポート間の待ち合わせを行う場合について説明したが、同様の考え方により、ポート間同期制御部350−3の階層を追加することで、ポート数を拡張した場合にも同様に処理できる。
以下に、ノード間同期装置、ノード間同期方法およびノード間同期プログラムの他の実施形態について説明する。
(1)装置構成等
例えば、図2に示したノード間同期装置300の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ノード間同期装置300の分散・統合の具体的形態は図示のものに限られず、例えば、通信コンテキストテーブル330とマスク情報テーブル340とを統合する。このようにして、ノード間同期装置300の全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、ノード間同期装置300にて行なわれる各処理機能(図6、図12〜図14等参照)は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
(2)ノード間同期プログラム
また、上記の実施例で説明したノード間同期装置300の各種の処理(図6、図12〜図14等参照)は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、図15を用いて、上記の実施例と同様の機能を有するノード間同期プログラムを実行するコンピュータの一例を説明する。図15は、ノード間同期プログラムを実行するコンピュータを示す図である。
ここで、通信制御部510は、他の装置との間でやり取りされる各種情報の関する通信を制御する。HDD520は、CPU540による各種処理の実行に必要な情報を記憶する。RAM530は、各種情報を一時的に記憶する。CPU540は、各種演算処理を実行する。
そして、HDD520には、図15に示すように、上記の実施例に示したノード間同期装置300の各処理部と同様の機能を発揮するノード間同期プログラム521と、ノード間同期用データ522とがあらかじめ記憶されている。なお、このノード間同期プログラム521を適宜分散させて、ネットワークを介して通信可能に接続された他のコンピュータの記憶部に記憶させておくこともできる。
そして、CPU540が、このノード間同期プログラム521をHDD520から読み出してRAM530に展開することにより、図15に示すように、ノード間同期プログラム521は、ノード間同期プロセス531として機能するようになる。すなわち、ノード間同期プロセス531は、ノード間同期用データ522等をHDD520から読み出して、RAM530において自身に割り当てられた領域に展開し、この展開したデータ等に基づいて各種処理を実行する。なお、ノード間同期プロセス531は、図2に示したノード間同期装置300の制御部350等において実行される処理に対応する。
なお、上記したノード間同期プログラム521については、必ずしも最初からHDD520に記憶させておく必要はない。例えば、コンピュータ500に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」、さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ500に接続される「他のコンピュータ(またはサーバ)」などに各プログラムを記憶させておき、コンピュータ500がこれらから各プログラムを読み出して実行するようにしてもよい。
(3)ノード間同期方法
上記の実施例で説明したノード間同期装置300により、以下のようなノード間同期方法が実現される。
すなわち、各計算機ノード内のプロセスの各々から、同期の待ち合わせを要求する同期リクエストを受け付ける前に、同期の待ち合わせ参加する各プロセスの配置状況を示したプロセス配置情報の生成を要求するマスク生成リクエストを同期の待ち合わせ参加する各プロセスから受け付け、当該受け付けられた各マスク生成リクエストを用いてプロセス配置情報を自動生成する情報生成ステップ(図6のステップS1〜ステップS3参照)を含んだノード間同期方法が実現される。
実施例1に係るシステムの構成を示す図である。 実施例1に係るノード間同期装置の構成を示す図である。 実施例1に係る通信コンテキストテーブルの構成例を示す図である。 実施例1に係るマスク情報テーブルの構成例を示す図である。 実施例1に係るマスク情報テーブル内の情報の遷移を示す図である。 実施例1に係るノード間同期装置の処理の流れを示す図である。 実施例2に係るノード間同期装置の構成を示す図である。 実施例2に係るマスク情報テーブルの構成例を示す図である。 実施例3に係るノード間同期装置の構成を示す図である。 実施例3に係るマスク情報テーブル内の情報の遷移を示す図である。 実施例3に係るマスク情報テーブル内の情報の遷移を示す図である。 実施例3に係るポート内同期制御部の処理の流れを示す図である。 実施例3に係るポート内同期制御部の処理の流れを示す図である。 実施例3に係るポート間同期制御部の処理の流れを示す図である。 ノード間同期プログラムを実行するコンピュータを示す図である。 従来技術を説明するための図である。
符号の説明
100 計算機ノード
200 ノード間ネットワーク
300 ノード間同期装置
300−1,300−2 ポート内同期ブロック
300−3 ポート間同期ブロック
310−1,310−2 受信部
320−1,320−2 送信部
330―1,330−2 通信コンテキストテーブル
340−1,340−2,340−3 マスク情報テーブル
341 マスク情報テーブル
350−1,350−2 ポート内同期制御部
350−3 ポート間同期制御部
500 コンピュータ
510 通信制御部
520 HDD
521 ノード間同期プログラム
522 ノード間同期用データ
530 RAM
531 ノード間同期プロセス
540 CPU
600 バス

Claims (4)

  1. 同期の待ち合わせに参加する各プロセスの配置状況を示したプロセス配置情報を記憶する記憶部と、
    カウンタと、
    プロセスを実行するプロセッサを含む各コンピュータによってそれぞれ実行されるプロセス各々から、前記プロセス配置情報の生成を要求して同期の待ち合わせに参加するプロセス数を含むマスク生成リクエストを受け付ける受付部と、
    前記受付部により受け付けられたマスク生成リクエストのプロセスの配置を前記記憶部に記憶された前記プロセス配置情報に追加する追加部と、
    前記マスク生成リクエストが受け付けられるごとに前記カウンタの値を加算する加算部と、
    前記マスク生成リクエストに含まれるプロセス数と前記カウンタの値とを比較する比較部と、
    前記比較部による比較結果が一致する場合に同期が完了したと判定する判定部と
    を備えたことを特徴とするノード間同期装置。
  2. 同期の待ち合わせに参加する別個独立のプロセスの集合が複数存在する場合には、各集合を一意に特定するための集合識別子を前記マスク生成リクエストに含める請求項1に記載のノード間同期装置。
  3. コンピュータが、
    プロセスを実行するプロセッサを含む各コンピュータによってそれぞれ実行されるプロセス各々から、同期の待ち合わせに参加する各プロセスの配置状況を示すプロセス配置情報の生成を要求して同期の待ち合わせに参加するプロセス数を含むマスク生成リクエストを受け付ける受付工程と、
    前記受付工程により受け付けられたマスク生成リクエストのプロセスの配置を、記憶部に記憶された前記プロセス配置情報に追加する追加工程と、
    前記マスク生成リクエストが受け付けられるごとにカウンタの値を加算する加算工程と、
    前記マスク生成リクエストに含まれるプロセス数と前記カウンタの値とを比較する比較工程と、
    前記比較工程による比較結果が一致する場合に同期が完了したと判定する判定工程と
    を実行することを特徴とするノード間同期方法。
  4. コンピュータに、
    プロセスを実行するプロセッサを含む各コンピュータによってそれぞれ実行されるプロセス各々から、同期の待ち合わせに参加する各プロセスの配置状況を示すプロセス配置情報の生成を要求して同期の待ち合わせに参加するプロセス数を含むマスク生成リクエストを受け付ける受付手順と、
    前記受付手順により受け付けられたマスク生成リクエストのプロセスの配置を、記憶部に記憶された前記プロセス配置情報に追加する追加手順と、
    前記マスク生成リクエストが受け付けられるごとにカウンタの値を加算する加算手順と、
    前記マスク生成リクエストに含まれるプロセス数と前記カウンタの値とを比較する比較手順と、
    前記比較手順による比較結果が一致する場合に同期が完了したと判定する判定手順と
    を実行させることを特徴とするノード間同期プログラム。
JP2008282249A 2008-10-31 2008-10-31 ノード間同期装置、ノード間同期方法およびノード間同期プログラム Active JP5239751B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008282249A JP5239751B2 (ja) 2008-10-31 2008-10-31 ノード間同期装置、ノード間同期方法およびノード間同期プログラム
US12/461,019 US8397094B2 (en) 2008-10-31 2009-07-29 Node-to-node synchronizing apparatus, node-to-node synchronizing method, and computer product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008282249A JP5239751B2 (ja) 2008-10-31 2008-10-31 ノード間同期装置、ノード間同期方法およびノード間同期プログラム

Publications (2)

Publication Number Publication Date
JP2010108406A JP2010108406A (ja) 2010-05-13
JP5239751B2 true JP5239751B2 (ja) 2013-07-17

Family

ID=42131345

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008282249A Active JP5239751B2 (ja) 2008-10-31 2008-10-31 ノード間同期装置、ノード間同期方法およびノード間同期プログラム

Country Status (2)

Country Link
US (1) US8397094B2 (ja)
JP (1) JP5239751B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9218223B2 (en) * 2013-08-13 2015-12-22 Qualcomm Incorporated Barrier synchronization with dynamic width calculation
US20230153156A1 (en) * 2021-11-16 2023-05-18 Xilinx, Inc. Synchronization of system resources in a multi-socket data processing system

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH061464B2 (ja) * 1984-12-07 1994-01-05 株式会社日立製作所 マルチ・マイクロプロセツサ・モジユ−ル
JP2708172B2 (ja) * 1988-03-24 1998-02-04 株式会社東芝 並列処理方法
US5797004A (en) * 1995-12-08 1998-08-18 Sun Microsystems, Inc. System and method for caching and allocating thread synchronization constructs
JP3429631B2 (ja) 1996-09-09 2003-07-22 富士通株式会社 並列計算機システム
JP2001051966A (ja) 1999-08-16 2001-02-23 Nec Corp ノード装置、並列処理システム、並列処理方法、および、並列処理プログラムを記録した記録媒体
US20010032257A1 (en) * 2000-04-12 2001-10-18 Wells Ronald B. Method and system for managing information on a network
JP2004030312A (ja) 2002-06-26 2004-01-29 Mitsubishi Electric Corp マルチスレッド同期制御方式
JP4259390B2 (ja) 2004-04-28 2009-04-30 日本電気株式会社 並列演算処理装置
US7624117B2 (en) * 2006-06-12 2009-11-24 Sap Ag Complex data assembly identifier thesaurus

Also Published As

Publication number Publication date
US8397094B2 (en) 2013-03-12
JP2010108406A (ja) 2010-05-13
US20100111115A1 (en) 2010-05-06

Similar Documents

Publication Publication Date Title
US10404690B2 (en) Authentication-free configuration for service controllers
JP5826287B2 (ja) データ同期化
CN101221551B (zh) 用于对称多处理器互连的方法和设备以及多处理器
TW457437B (en) Interconnected processing nodes configurable as at least one non-uniform memory access (NUMA) data processing system
KR910001791B1 (ko) 동기식 버스를 갖고 있는 컴퓨터 시스템용 버스 제어 장치 및 이의 방법
JP2004534323A (ja) マルチプロセッサシステム及びマルチプロセッサシステムの動作方法
US20080065874A1 (en) System and method for dynamic determination of system topology in a multiple building block server system
CN105630731A (zh) 一种多cpu环境下网卡数据处理方法和装置
JP5862359B2 (ja) シンクライアントシステム、接続管理サーバ、接続管理方法、及び接続管理プログラム
US10565135B2 (en) Information processing device, information processing method, main processor core, program, information processing method, and sub processor core
WO2013075501A1 (zh) 节点热插拔的方法及装置
US9043283B2 (en) Opportunistic database duplex operations
JP5239751B2 (ja) ノード間同期装置、ノード間同期方法およびノード間同期プログラム
WO2013097098A1 (zh) 数据处理方法、图形处理器gpu及第一节点设备
JP6899907B2 (ja) データベースバウンドアプリケーション用にユーザインターフェースバックエンドクラスタをスケーリングするための技術
WO2015035891A1 (zh) 补丁方法、设备及系统
US20090119422A1 (en) Method and apparatus for performing maintenance operations on peripheral devices
JP5445177B2 (ja) 確定クロック判定プログラム及び方法、並びにノード装置
CN117076409B (zh) 文件共享方法、装置、系统、电子设备及存储介质
JP6036690B2 (ja) 分散実行システム及び分散プログラム実行方法
JP2812274B2 (ja) 疎結合多重計算機システムにおけるトランザクション負荷分散システム
JP2020170541A (ja) 下位互換性のためのレガシーバス動作のシミュレーション
JP2019016101A (ja) 情報処理システム、情報処理装置、および情報処理システムの制御方法
CN110716812A (zh) 一种支持高并发的分布式同步管理方法与装置
KR20180091498A (ko) 파일 디스크립터를 이용한 서비스 정보 제공방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110808

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121106

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121113

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121219

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130305

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130318

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160412

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5239751

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150