JP2011039666A - バリア同期方法及び計算機 - Google Patents

バリア同期方法及び計算機 Download PDF

Info

Publication number
JP2011039666A
JP2011039666A JP2009184668A JP2009184668A JP2011039666A JP 2011039666 A JP2011039666 A JP 2011039666A JP 2009184668 A JP2009184668 A JP 2009184668A JP 2009184668 A JP2009184668 A JP 2009184668A JP 2011039666 A JP2011039666 A JP 2011039666A
Authority
JP
Japan
Prior art keywords
barrier
group
synchronization
hardware thread
hardware
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.)
Granted
Application number
JP2009184668A
Other languages
English (en)
Other versions
JP5447807B2 (ja
Inventor
Hideki Aoki
秀貴 青木
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2009184668A priority Critical patent/JP5447807B2/ja
Publication of JP2011039666A publication Critical patent/JP2011039666A/ja
Application granted granted Critical
Publication of JP5447807B2 publication Critical patent/JP5447807B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Multi Processors (AREA)

Abstract

【課題】各プログラムのセキュリティを確保しながらも高速でバリア同期を行う。
【解決手段】1以上のハードウェアスレッドを備えたプロセッサコアを1以上有するプロセッサを備え、プロセッサコアはユーザモードを含む複数の特権レベルを有し、複数のハードウェアスレッドを1以上のグループに分割し、ユーザモードより高い特権レベルのハードウェアスレッドがグループの情報をバリアドメイン定義情報に設定し、グループ内のハードウェアスレッドをグループ内で1以上の同期グループに分割し、同期グループの情報をハードウェアスレッドがユーザモードのときにバリアグループ定義情報に設定し、各ハードウェアスレッドがバリアポイントに到達したことを示すバリアポイント到達情報を受信し、バリアグループ定義情報の同期グループと、バリアドメイン定義情報のグループの情報から当該ハードウェアスレッドにおけるバリア同期の成否を判定する。
【選択図】図4

Description

本発明は、複数のプロセッサを備えて並列処理を行う計算機システムに関し、特に、複数のバリア同期を実現する計算機システムの改良に関する。
複数のプロセッサにそれぞれスレッド(一連の処理)を割り当てて、各プロセッサがそれぞれ並列的に演算を行う計算機システムでは、各スレッドに予め設定されたバリア同期ポイントでプロセッサ間の同期を取るバリア同期処理を行っている。
近年のプロセッサは、半導体製造技術の向上により、1つのソケット(または1つのダイあるいは1つのパッケージ)で複数または多数のプロセッサコアを備えるものが普及しつつある。これら複数または多数のプロセッサコアを備えたプロセッサ(マルチコアプロセッサまたはメニイコアプロセッサ)では、各プロセッサコアに1つのスレッドを割り当てて、プログラムを複数スレッドで並列的に実行するプログラム実行モデルが増加することが見込まれる。このようなプログラム実行モデルにおいて任意のプロセッサコアのグループで高速にバリア同期をおこなうため,低速な主記憶を使わないで済む様々なハードウェアバリア同期機構が提案されている。
さらに、近年のプロセッサでは、1つのプロセッサコアで複数のスレッドを並列して実行可能な同時マルチスレッディング(Simultaneous Multithreading)という技術を採用した製品も普及しつつあり、例えば、ハイパースレッディング・テクノロジー (Hyper-Threading Technology)などの名称で実装されたプロセッサ等が知られている。
上述のマルチコアプロセッサまたはメニイコアプロセッサに同時マルチスレッディングを組み合わせることで、1つのソケットに割り当てられるスレッド数を増大させることができ、並列処理を推進する環境が普及しつつある。
マルチコアプロセッサまたはメニイコアプロセッサを採用した計算機システムで、上述のようなプログラム実行モデルで複数のプロセス(またはタスク)を実行する場合は、ひとつのプロセスを複数のスレッドで構成し、並列処理を行うスレッドをグループ化し、各スレッドを割り当てるプロセッサコアにバリア同期の範囲(バリアグループ)を設定している。
そして、複数の任意のプロセッサコアで構成されたバリアグループで高速にバリア同期を行うためには、プロセッサコアの処理能力に比して低速(レイテンシの大きい)な主記憶に対する読み書きを行わないで済むようなバリア同期機構が提案されている。
例えば、上記バリアグループ内の全プロセッサコアがバリアポイントに到達したことをハードウェアで判定し、この判定結果を各プロセッサコアに通知するため、バリアグループを定義するテーブルをハードウェアで設けたものが知られている。例えば、各プロセッサコアが所属するバリアグループを管理するグループ定義テーブルと、各プロセッサコアのバリアポイントへの到達を検知して、バリアグループ毎にバリア同期の成立を判定する機構を備えている(例えば、特許文献1、非特許文献1、特許文献2)。これらの従来例では、グループ定義テーブルを集中して管理するもの(特許文献1、非特許文献1)や、グループ定義テーブルをプロセッサコア毎などで分散して管理するものがあり、また、バリア同期の成立を判定する機構についても、複数のプロセッサコアについて集中的に判定するもの(非特許文献1)や、プロセッサコア毎に分散して判定するものが知られている。
また、複数のバリアグループのバリア同期をソフトウェアで実現する手法も提案されており、例えば、特許文献3や非特許文献2が知られている。これらの従来例では、各スレッドが自己のバリアポイントへの到達を契機に他のスレッドのバリアポイントへの到達状況を取得し、バリアグループ毎にバリア同期の成否を判定するものである。他のスレッドのバリアポイントへの到達状況は、主記憶(または共有メモリ)に設定したカウンタなどに各スレッドがバリアポイントへの到達状況を書き込んでおくことで、他のスレッドのバリアポイントへの到達状況を取得する構成が知られている(特許文献3)。
特開平9−6734号公報 特開平2−238553号公報 特開2005−71109号公報
C. J. Beckmann 他著、"Fast Barrier Synchronization Hardware" 山田海斗 他著、"階層グルーピング対応バリア同期機構の評価"、電子情報通信学会 発行、信学技報、Vol. 108、No. 28、ICD2008-20、pp. 19-24、2008年5月
上記ハードウェアによりバリア同期を行う従来例では、各プロセッサコアが何れのバリアグループに所属するか、を登録するグループ定義テーブルは1種類のみであり、このグループ定義テーブルを集中的に管理するか分散して管理していた。
ここで、上記プロセッサでは、ユーザプログラムを実行するユーザモードと、OS(Operating System)を実行する特権モード(またはカーネルモード)を備えている。そして、上記従来例では、プロセッサコアが所属するバリアグループを指定するためのグループ定義テーブルが一種類しかないため、グループ定義テーブルをユーザモードと特権モードのどちらで利用するかによって、以下のような問題が生じていた。
第1の問題は、ユーザモードではグループ定義テーブルの参照および更新を禁止し、特権モードでのみ設定させる場合では、プログラム(あるいはプロセス)の実行前にOSから静的にバリアグループの設定を行う必要がある。このため、バリアグループの設定を変更するにはOSの介在が必須となって、バリアグループ設定の柔軟性が低下してしまう。
また、プログラム実行中に動的にバリアグループを変更するためにはOSが介在することになり、ユーザモードから特権モードへ切り替えてバリアグループの設定を変更した後に、特権モードからユーザモードに切り替えてスレッドの実行を継続することになるため、処理のオーバヘッドが大きくなってしまい、演算性能が低下するという問題があった。
第2の問題は、ユーザモードでグループ定義テーブルの設定を許可する場合では、プログラム実行中にOSの介在なしで動的にバリアグループを変更することが可能となり、バリアグループを設定する際の柔軟性を高めることができる。しかしながら、複数のプログラム(プロセス)を実行する場合、他のプログラムは自己のバリアグループ以外のバリアグループについてもグループ定義テーブルにアクセスして更新することができる。このため、他のプログラムが悪意のあるプログラムである場合や、プログラムが誤動作したときなどには、当該プログラムに割り当てたバリアグループ以外のバリアグループの設定を変更してしまう恐れがあり、セキュリティレベルが低下する、という問題があった。
また、上記従来例の特許文献3及び非特許文献2のように、プログラムで全プロセッサコアのバリア到達情報を参照し、バリア同期の成否を判定する場合では、他のプログラムによってグループ定義テーブルを変更されることはない。しかしながら、他プログラムは、バリア到達情報を読み込むことが可能であるため、他のプログラムがバリア同期ポイントへの到達を容易に知ることができるというセキュリティ上の問題がある。
そこで本発明は、上記問題点に鑑みてなされたもので、複数のプログラムを並列して実行する計算機において、各プログラムのセキュリティを確保しながらも高速でバリア同期を行うことを目的とする。さらに、本発明は、各プログラムのセキュリティを確保しながら、プログラムの実行中に動的にバリアグループを変更可能なバリア同期を実現することを目的とする。
本発明は、ひとつ以上のハードウェアスレッドを備えたプロセッサコアと、前記プロセッサコアをひとつ以上有するプロセッサとを備えた計算機で、並列処理を実行してバリア同期の成立を判定するバリア同期方法において、前記プロセッサコアはユーザモードを含む複数の特権レベルを有し、前記複数のハードウェアスレッドをひとつ以上のグループに分割し、前記ユーザモードより高い特権レベルのときに前記ハードウェアスレッドが前記グループの情報をバリアドメイン定義情報に設定するステップと、前記グループに所属するハードウェアスレッドを前記グループ内でひとつ以上の同期グループに分割し、当該分割した同期グループの情報を前記ハードウェアスレッドが前記ユーザモードのときにバリアグループ定義情報に設定するステップと、前記ハードウェアスレッドのそれぞれが、当該ハードウェアスレッドで実行する処理がバリアポイントに到達したときにバリアポイント到達情報を出力するステップと、前記ハードウェアスレッドのそれぞれが出力したバリアポイント到達情報を受信し、前記バリアグループ定義情報に設定された同期グループと、前記バリアドメイン定義情報に設定された前記グループの情報から、当該ハードウェアスレッドがバリア同期の成否を判定するステップと、を含む。
したがって、本発明は、複数のプログラムを同期グループで並列して実行しながら、各プログラムのセキュリティをバリアドメイン間で確保しながらも高速でバリア同期を行うことができる。さらに、本発明は、ユーザモードで設定可能なバリアグループ定義情報を備えることで各プログラムのセキュリティを確保しながら、プログラムの実行中に動的にバリアグループを変更することが可能となって、計算機資源を有効に利用することが可能となる。
本発明の第1の実施形態を示し、マルチコアプロセッサを用いて並列処理を行う計算機の一例を示すブロック図である。 本発明の第1の実施形態を示し、計算機で実行されるソフトウェアの構成の一例を示すブロック図である。 本発明の第1の実施形態を示し、図2のプロセスA、Bのそれぞれについて、1つずつバリアドメインを割り当てて、1つのバリアドメイン内で動的にバリアグループを変更しながらバリア同期を行う並列処理の一例を示すタイムチャートである。 本発明の第1の実施形態を示し、CPUのバリア同期部の一例を示すブロック図である。 本発明の第1の実施形態を示し、バリア成否判定部の構成を示すブロック図である。 本発明の第1の実施形態を示し、計算機で行われる全体的な処理の流れを示すフローチャートである。 本発明の第1の実施形態を示し、ハードウェアスレッドが行うバリア同期処理の一例を示すフローチャートである。 本発明の第1の実施形態を示し、スレッドバリア同期部の判定部が行うバリア同期処理の一例を示すフローチャートである。 本発明の第2の実施形態を示し、CPUのバリア同期部の一例を示すブロック図である。 本発明の第2の実施形態を示し、バリア到達状況生成部が行うバリア到達状況生成処理の一例を示すフローチャートである。 本発明の第2の実施形態を示し、計算機で行われる全体的な処理の流れを示すフローチャートである。 本発明の第3の実施形態を示し、マルチコアプロセッサを用いて並列処理を行う計算機の一例を示すブロック図である。 本発明の第4の実施形態を示し、マルチコアプロセッサを用いて並列処理を行う計算機の一例を示すブロック図である。 本発明の第5の実施形態を示し、計算機で実行されるソフトウェアの構成の一例を示すブロック図である。
以下、本発明の一実施形態を添付図面に基づいて説明する。
図1は、本発明の第1の実施形態を示し、マルチコアプロセッサを用いて並列処理を行う計算機の一例を示すブロック図である。
<ハードウェア構成>
図1において、計算機は複数のCPUコア(またはプロセッサコア)#0〜#2を備えたCPU1と、データやプログラムを格納する主記憶30と、バリア同期のグループ分けを管理するバリアドメイン定義テーブル40とを主体にして構成され、CPU1と主記憶30及びバリアドメイン定義部40はシステムコネクト20を介して接続される。システムコネクト20は、ポイントツーポイント接続の双方向通信システムで構成することができ、例えば、QPI(Quick Path Interconnect)やHyper Transport、あるいはクロスバー等のネットワークで構成することができる。
CPU1は、複数のCPUコア#0〜#2を有するマルチコアプロセッサであり、各CPUコア#0〜#2はCPU1の内部で上述のシステムコネクト20と同様の通信システムで構成された内部ネットワーク13によって相互に接続される。
各CPUコア#0〜#2は、上記背景技術で述べた同時マルチスレッディング技術を採用したもので、1つのCPUコアで複数(本実施形態では2つ)のスレッドを並列して実行可能なハードウェアスレッドを備えている。なお、以下の説明では、上記同時マルチスレッディング技術によるスレッドの実行単位をハードウェアスレッドと記載し、1つのCPUコアが複数のハードウェアスレッドを提供し、スレッド(ソフトウェアスレッド)を発行するソフトウェア(OS等)からは1つのCPUコアをハードウェアスレッドの数に対応する複数のCPUコア(論理CPUコア)として扱うことができるものである。
また、CPU1は、ホモジニアス・マルチコアプロセッサで構成した例を示しており、CPU1を構成するCPUコア#0〜#2は同一の構成であるので、以下ではCPUコア#0(10−0)のみについて説明し、CPUコア#1(10−1)、CPUコア#2(10−2)の説明は省略する。
CPUコア#0(図中10−0)は、ハードウェアスレッド#0a(図中11−0a)、#0b(図中11−0b)の2つのハードウェアスレッドを有し、2つのソフトウェアスレッドを並列して処理することができる。そして、ハードウェアスレッド#0aは、他のハードウェアスレッドとバリア同期を行うスレッドバリア同期部#0a(後述)に接続される。スレッドバリア同期部#0aは、内部ネットワーク13によって他のハードウェアスレッドと接続されて相互に通信を行う。ハードウェアスレッド#0bは、他のハードウェアスレッドとバリア同期を行うスレッドバリア同期部#0b(後述)に接続される。スレッドバリア同期部#0bは、内部ネットワーク13によって他のハードウェアスレッドと通信を行う。
つまり、CPUコア#0を構成するハードウェアスレッド#0aと#0bは、独立したスレッドバリア同期部#0a、#0b(12−0a、12−0b)をそれぞれ有し、内部ネットワーク13を介して、スレッドバリア同期部#0a、#0bはそれぞれ独立して他のCPUコア#1、#2のハードウェアスレッド#1a〜#2bと通信を行い、またバリアドメイン定義部40にアクセスする。なお、ハードウェアスレッド#0a〜#2bも内部ネットワーク13にそれぞれ接続されて、バリアポイントに到達したときには、他のハードウェアスレッド#0a〜#2bのスレッドバリア同期部#0a〜#2bにバリアポイント到達情報をブロードキャストする。
一方、CPUコア#0は、システムコネクト20を介して主記憶30にアクセスし、データの読み書きやプログラムの読み込みを行う。なお、システムコネクト20には図示しないインターフェースを介してストレージ装置が接続され、CPUコア#0は記憶媒体としてのストレージ装置に予め格納されたプログラムを主記憶30に読み込んでから実行する。
各ハードウェアスレッド#0a、#0b〜#2bは、少なくとも特権モードとユーザモードの2つの実行モードを備える。これらの実行モードは、特権レベルに予め定義されたもので、特権モードには最も高い特権レベルが設定され、ユーザモードには最も低い特権レベルが設定される。特権モードは、OSやデバイスドライバ等を実行するモードであり、主記憶30の任意の領域にアクセス可能であり、実行する命令に制限はない。一方、ユーザモードでは、実行する命令の種類が制限される。例えば、ユーザモードではメモリ管理に関連するディスクリプタテーブル、CPU1(ハードウェアスレッド#0a、#0b)のステータスが保存されているフラグレジスタにアクセスする命令などは実行することができない。
以下の説明では、各ハードウェアスレッド#0a〜#2bは、OSを特権モードで実行し、アプリケーションをユーザモードで実行する例を示す。
そして、バリアドメイン定義部40は、特権モードのハードウェアスレッド#0a〜#2bから書き込みが可能で、ユーザモードのハードウェアスレッド#0a〜#2bからは書き込みを禁止し、読み込みのみに規制する。
また、後述するように、スレッドバリア同期部#0a〜#2bには、直接接続されたハードウェアスレッド#0a〜#2bからのみ書き込みが可能なバリアグループ定義テーブルが設けられる。スレッドバリア同期部#0a〜#2bに直接接続されたハードウェアスレッド#0a〜#2bは、ユーザモードでバリアグループ定義テーブルを書き込むことが許可されている。
なお、スレッドバリア同期部#0a〜#2bと、バリアドメイン定義部40の詳細については、ソフトウェアの構成の後にバリア同期機構の項で説明する。
<ソフトウェア構成>
次に、計算機で実行されるソフトウェアの構成について、図2を参照しながら説明する。図2は、計算機で実行されるソフトウェアの構成の一例を示すブロック図である。ユーザモードと特権モードの2つの特権レベルを備えたCPU1では、OS100が特権モードで実行され、このOS100上では、プロセスA(200−1)とプロセスB(200−2)からなるタスク200がユーザモードで実行される。
ここで、CPU1が実行するソフトウェアは、1つのタスクが、1つ以上のプロセスで構成され、1つのプロセスが1つ以上のソフトウェアスレッドで構成され、各ソフトウェアスレッドがハードウェアスレッド#0a〜#2bに割り当てられて実行される。なお、以下の説明では、1つのプロセス内で動的にバリアグループを変更しながらバリア同期を行う例を示す。また、プロセスA、Bは、図示のように1つのタスクを構成するものでもよいし、プロセスA、Bが異なるタスクを構成するものであっても良い。
図3は、図2のプロセスA、Bのそれぞれについて、1つずつバリアドメインを割り当てて、1つのバリアドメイン内(プロセス内)で動的にバリアグループを変更しながらバリア同期を行う並列処理の一例を示すタイムチャートである。
なお、バリアドメインは、バリア同期を行う可能性があるハードウェアスレッド(またはプロセッサコア)のグループであり、バリアグループは、バリアドメイン内で実際にバリア同期を実施するハードウェアスレッドである。すなわち、1つのバリアドメインには、1つ以上のバリアグループが定義される。また、図示の例では、1つのプロセスに1つのバリアドメインを割り当てた例を示す。なお、1つのプロセスに複数のバリアドメインを割り当ててもよい。また、本実施形態では、1つのCPU1の例を示したが、マルチコアプロセッサのCPUを複数(マルチソケット)備えた計算機では、バリアドメイン内に複数のCPUのハードウェアスレッドを含めることができる。
図3の例では、プロセスAが最大4つのハードウェアスレッド#0a〜1bに割り当てられ、プロセスBが最大2つのハードウェアスレッド#2a、2bに割り当てられる例を示している。プロセスA、Bのハードウェアスレッド#0a〜#2bへの割り当てによって、バリア同期を行うハードウェアスレッドの範囲が設定され、この範囲をバリアドメインと称する。図3の例では、ハードウェアスレッド#0a〜#1bが第1のバリアドメインとしてプロセスAに割り当てられ、ハードウェアスレッド#2a、#2bが第2のバリアドメインとしてプロセスBに割り当てられる。なお、バリアドメインの設定はOS100により後述するように行われる。バリアドメイン内では、少なくとも1つのバリア同期が行われ、バリアポイントに到達すると次の処理が開始される。
図3に示すプロセスAのバリア同期は、次の通りである。
まず、処理(ソフトウェアスレッド)A−1をハードウェアスレッド#0aで実行し、第1のバリアドメイン#0のハードウェアスレッド#0b〜#1bは同期待ちとなる。ハードウェアスレッド#0aが処理A−1のバリアポイントに到達すると、ハードウェアスレッド#0a、#0bのバリアグループが処理A−2−1を実行し、ハードウェアスレッド#1a、#1bのバリアグループが処理A−2−2を実行する。処理A−2−1と処理A−2−2はひとつのドメイン内で2つのバリアグループによる並列処理が行われる。
処理A−2−1がバリアポイントに到達すると、ハードウェアスレッド#0aに処理A−3−1を割り当てて実行させ、ハードウェアスレッド#0bはハードウェアスレッド#0aのバリアポイント到達を待つ。
一方、処理A−2−2を実行するハードウェアスレッド#1a、#1bがバリアポイントに到達すると、ハードウェアスレッド#1bに処理A−3−2を割り当てて実行し、ハードウェアスレッド#1aはハードウェアスレッド#0aの処理待ちに変更される。つまり、ハードウェアスレッド#0bとともにハードウェアスレッド#0aのバリアポイント到達を待機する。
そして、ハードウェアスレッド#0aの処理A−3−1がバリアポイントに到達すると、3つのハードウェアスレッド#0a、#0b及び#1bのバリアグループに変更されて、処理A−3−3が実行される。
処理A−3−3と処理A−3−2がバリアポイントに到達すると、バリアグループはひとつのハードウェアスレッド#0aと3つのハードウェアスレッド#0b、#1a、#1bのバリアグループに変更される。ハードウェアスレッド#0aは処理A−4−1を実行し、ハードウェアスレッド#0b、#1a、#1bの同期グループは処理A−4−2を実行する。ハードウェアスレッド#0b、#1a、#1bのバリアグループはバリアポイントに到達すると、次の処理A−4−3を実行する。
そして、処理A−4−1と処理A−4−3がバリアポイントに到達すると、ハードウェアスレッド#0aにのみ処理A−5が割り当てられて実行し、プロセスAに割り当てられたバリアドメインのうち、ハードウェアスレッド#0b、#1a、#1bはハードウェアスレッド#0aがバリアポイントに到達するまで待機する。
なお、プロセスBのバリアドメイン内でも上記プロセスAのバリアドメイン内と同様であり、少なくとも1つのバリアグループにより処理が実行され、バリアグループが動的に変更されて並列処理が実行される。
なお、バリアドメイン内のバリアグループの変更については、上記非特許文献2のコンパイラなどを用いるようにしても良い。
<バリア同期機構>
図4はCPU1のバリア同期機構の一例を示すブロック図である。図1で示したように、計算機は、バリアドメインに所属するハードウェアスレッド#0a〜#2bを設定するためのバリアドメイン定義部40と、同一バリアドメイン内でバリア同期を実施するためのスレッドバリア同期部#0a〜#2b(12−0a〜12−2b)を備える。なお、バリアドメイン定義部40は計算機内に少なくとも1つあればよい。複数のCPUソケットを備える計算機の場合では、システムコネクト20でバリアドメイン定義部40と複数のCPUを接続すればよい。
バリアドメイン定義部40は、特権モードのハードウェアスレッド#0a〜#2bから書き込み可能、かつ、ユーザモードのハードウェアスレッド#0a〜#2bからは読み出しのみが可能なバリアドメイン定義テーブル400を有する。
バリアドメイン定義テーブル400は、図4で示すように、予め設定したバリアドメインの数に応じたエントリ411毎に、CPU1のハードウェアスレッドの識別子413(#0a〜#2b)毎のフィールド412が設定される。
バリアドメイン定義テーブル400は、特権モードのハードウェアスレッド#0a〜#2bがシステムコネクト20を介して書き込みを行い、全てのハードウェアスレッド#0a〜#2b及びスレッドバリア同期部#0a〜#2bがシステムコネクト20または内部ネットワーク13を介して読み込むことができる。すなわち、各CPUコア#0〜#3は、各ハードウェアスレッド#0a〜#2bがユーザモードのときにバリアドメイン定義テーブル400への書き込み命令を実行すると、所定のエラー(例えば、例外など)を返すように予め定義される。
バリアドメイン定義テーブル400のフィールド412のうち、「1」が設定されたハードウェアスレッドが当該エントリ411のバリアドメインに所属し、ハードウェアスレッド#0a〜#2bは何れかひとつのバリアドメインに所属することができる。バリアドメイン定義テーブル400は、複数のハードウェアスレッド#0a〜#2bを1以上のグループ(バリアドメイン)に分割する。図示のバリアドメイン定義テーブル400の例では、4つのバリアドメイン#0〜#3が設定可能であり、バリアドメイン#0には、フィールド412が「1」となっているハードウェアスレッド#0a〜1bが所属し、バリアドメイン#1にはハードウェアスレッド#2a、2bが所属しており、バリアドメイン#2、#3には所属するハードウェアスレッドが存在しない。
バリアドメイン#0〜#3へのハードウェアスレッドの割当は、特権モードで実行されるOS100により後述するように処理される。
次に、ハードウェアスレッド#0a〜#2b毎にそれぞれ設けられたスレッドバリア同期部#0a〜#2bは、全て同一の構成であるため、以下ではスレッドバリア同期部#0aのみについて説明し、他の説明を省略する。
スレッドバリア同期部#0aは、ユーザモードのハードウェアスレッド#0aが書き込みを行うバリアグループ定義テーブル120と、バリア同期が成立したか否かを判定し、バリア同期の成立時にはハードウェアスレッド#0aにバリア同期の成立を通知するバリア成否成否判定部130を主体に構成される。
バリアグループ定義テーブル120は、CPU1の全てのハードウェアスレッドの識別子(#0a〜#2b)121と、これらの識別子に対応するフィールド122をそれぞれ備え、当該スレッドバリア同期部#0aのハードウェアスレッド#0a(以下、自ハードウェアスレッドとする)とバリア同期を行うハードウェアスレッド#0a〜#2bのフィールド122には「1」が設定され、バリア同期を行わないフィールド122には「0」が設定される。すなわち、バリアグループ定義テーブルは、1つのバリアドメインの内部を1つ以上のバリアグループ(同期グループ)に分割する。バリアグループ定義テーブル120で当該ハードウェアスレッド#0aのフィールド122の値が「1」のとき、他のハードウェアスレッドのフィールド122で「1」のものが自ハードウェアスレッド#0aと同一のバリアグループとなる。なお、自ハードウェアスレッド#0aがバリア同期を行わない場合には、バリアグループ定義テーブル120の当該ハードウェアスレッド#0aのフィールド122は「0」に設定される。バリアグループ定義テーブル120は、自ハードウェアスレッド#0aがユーザモードでも書き込み可能となっており、他のハードウェアスレッドから自ハードウェアスレッド#0aのバリアグループ定義テーブル120に書き込むことはできない。
バリア成否判定部130は、図5で示すように構成される。この図5は、バリア成否判定部130の構成を示すブロック図である。バリア成否判定部130は、CPU1の各ハードウェアスレッド#0a〜#2bからのバリアポイント到達情報を格納するバリアポイント到達情報テーブル131と、バリアドメイン定義テーブル400とバリアグループ定義テーブル120とバリアポイント到達情報テーブル131の情報から、自ハードウェアスレッド#0aが所属するバリアグループのバリア同期が成立したか否かを判定し、バリア同期が成立したときにはバリア成否信号によりハードウェアスレッド#0aに同期が成立したことを通知する判定部132とを備える。バリア成否信号は、エッジトリガまたはレベルトリガなど周知の手法を採用することができる。本実施形態ではバリア成否信号が「0」から「1」へ変化したときのアップエッジでバリア同期の成立を示す。
バリアポイント到達情報テーブル131は、CPU1内の全てのハードウェアスレッドの識別子(#0a〜#2b)1311と、これらの識別子に対応するフィールド1312を備え、各ハードウェアスレッド#0a〜#2bがバリアポイントに到達する度に内部ネットワーク13を介してブロードキャストするバリアポイント到達情報を格納する。バリアポイント到達情報テーブル131の各フィールド1312には、バリアポイントに到達したハードウェアスレッドには「1」が設定され、バリアポイントに到達していないハードウェアスレッドには「0」が設定される。
各ハードウェアスレッド#0a〜#2bは、バリアポイントに到達するとバリアポイント到達情報を「1」にセットして内部ネットワーク13にブロードキャストする。そして、各ハードウェアスレッド#0a〜#2bは、バリア同期が成立すると(バリア成否信号が「1」)、バリアポイント到達情報を「0」にして内部ネットワーク13へブロードキャストすることで新たなバリア同期の開始に備える。バリア成否判定部130は、内部ネットワーク13からバリアポイント到達情報を受信すると、該当するハードウェアスレッド#0a〜#2bのフィールド1312を更新する。
ここで、各ハードウェアスレッド#0a〜#2b間のバリアポイント到達情報の伝達は、図4で示すように、内部ネットワーク13として各ハードウェアスレッド#0a〜#2b毎にバリアポイント到達情報を伝達するそれぞれ信号線を設けることで、バリア成否判定部130はブロードキャストされたバリアポイント到達情報の送信元のハードウェアスレッド#0a〜#2bを特定することができる。なお、各ハードウェアスレッド#0a〜#2b間のバリアポイント到達情報の伝達をシリアル伝送によって行う場合には、ハードウェアスレッド#0a〜#2bの識別子を付加したバリアポイント到達情報をブロードキャストすればよい。
判定部132は、バリアドメイン定義テーブル400を読み込んで、自ハードウェアスレッド#0aとバリア同期を行う可能性のある同一ドメインのハードウェアスレッドを特定する。そして、判定部132は、自己のスレッドバリア同期部#0a内のバリアグループ定義テーブル120を参照して、自ハードウェアスレッド#0aとバリア同期を行うハードウェアスレッドをバリアグループとして特定する。そして、判定部132は自ハードウェアスレッド#0aと同一のバリアグループのハードウェアスレッドについてバリアポイント到達情報テーブル131を監視し、同一のバリアグループのハードウェアスレッドのバリアポイント到達情報が全て「1」になるとバリア同期の成立を判定して、バリア成否信号を「1」に設定してハードウェアスレッド#0aにバリア同期の成立を通知する。なお、判定部132が行う処理の詳細については、後述する。
また、判定部132がバリアポイント到達情報テーブル131を監視するタイミングは、例えば、バリアポイント到達情報テーブル131が更新されたときであり、内部ネットワーク13から任意のハードウェアスレッドがバリアポイント到達情報をブロードキャストしたときである。あるいは、判定部132が所定の周期でバリアポイント到達情報テーブル131を監視することもできる。
また、ハードウェアスレッド#0aは、バリア同期が成立した後に、バリアグループ定義テーブル120を更新することで、図3で示したように、バリア同期を行うハードウェアスレッドの増減を行うことができる。
<処理の概要>
図6は計算機で行われる全体的な処理の流れを示すフローチャートである。この処理は、計算機を起動すると開始される。
まず、ステップS1では、計算機が起動するとCPU1の各CPUコア#0〜#2はハードウェアスレッド#0a〜#2bを設定してから、バリアドメイン定義テーブル400の全てのフィールド412の値を「0」でリセットし、各ハードウェアスレッド#0a〜#2bは自ハードウェアスレッドに結合されたスレッドバリア同期部#0a〜#2bのバリアグループ定義テーブル120とバリアポイント到達情報テーブル131をそれぞれ「0」でリセットする。なお、バリアドメイン定義テーブル400のリセットは、ハードウェアスレッド#0a〜#2bのいずれかひとつで行えばよい。
ステップS2では、CPU1がOS100を起動する。CPU1は、システムコネクト20を介して図示しないストレージ装置からOS100(またはOSイメージ)を読み込んで、主記憶30にロードして特権モードでOS100の実行を開始する。
OS100の起動が完了すると、CPU1はシステムコネクト20を介して図示しないストレージ装置からアプリケーションプログラムとしてのタスク200を読み込んで、主記憶30にロードしてユーザモードでタスク200の実行を開始する。なお、図示しないストレージ装置は、OS100やタスク200等のプログラムを格納する記憶媒体として機能する。
OS100は、タスク200を起動すると、図3で示したようにプロセスA(200−1)とプロセスB(200−2)を生成する。
ステップS3では、OS100は生成したプロセスA、Bの処理についてハードウェアスレッド#0a〜#2bに割り当てるソフトウェアスレッドを生成する。そして、OS100は、生成したソフトウェアスレッドをハードウェアスレッド#0a〜#2bに割り当てる。さらに、特権モードでCPU1に実行されるOS100は、ソフトウェアスレッドを実行するハードウェアスレッド#0a〜#2bのバリアドメインを決定して、ドメイン定義テーブル400を設定する。
ここでOS100がプロセスA、Bを生成する手法や、プロセスA、Bからデータや処理の依存関係に基づいて並列性を考慮してソフトウェアスレッドを生成する手法及びソフトウェアスレッドをハードウェアスレッド#0a〜#2bに割り当てる手法は、周知または公知の技術を用いればよいので、ここでは詳述しない。
また、OS100がバリアドメイン決定する手法は、例えば、上述したようにひとつのプロセスにひとつのバリアドメインを付与する。また、バリアドメインを構成するハードウェアスレッド#0a〜#2bの割り当ては、周知または公知の技術を用いればよく、並列処理を行うソフトウェアスレッドの数などから決定しても良いし、プロセスA、Bを生成するコンパイラで予め指定しても良い。本実施形態では、図3で示したように、プロセスAに4つのハードウェアスレッド#0a〜1bを割り当て、プロセスBに2つのハードウェアスレッド#2a、2bを割り当てた例を示す。
そして、CPU1の特権モードで実行されるOS100が、上記決定したバリアドメインとハードウェアスレッドの割り当てをバリアドメイン定義テーブル400に書き込む。このバリアドメイン定義テーブル400への書き込みは、特権モードでOS100を実行する複数のハードウェアスレッド#0a〜#2bの何れかひととつが、バリアドメイン定義テーブル400への書き込めばよい。
バリアドメイン定義テーブル400への書き込み処理は、次のように行われる。OS100は、バリアドメイン定義テーブル400のエントリのうち、全てのフィールド412の値が「0」のエントリ(空きエントリ)を検索する。空きエントリが存在する場合、OS100は、上記決定したプロセスAに割り当てるハードウェアスレッド#0a〜#1bに対応するフィールド412に「1」を設定し、他のハードウェアスレッド#2a、#2bに「0」を設定して第1のバリアドメインを定義する。さらに、空きエントリを検索して、空きエントリが存在すれば、上記決定したプロセスBに割り当てるハードウェアスレッド#2a、#2bに対応するフィールド412に「1」を設定し、他のハードウェアスレッド#0a〜#1bに「0」を設定して第2のバリアドメインを定義する。本実施形態では図4で示したように、プロセスAがバリアドメイン#0に割り当てられ、プロセスBはバリアドメイン#1に割り当てられる。
次に、ステップS4では、ユーザモードでプロセスA、Bの各ソフトウェアスレッドをユーザモードで実行するハードウェアスレッド#0a〜#2bが、バリアグループ定義テーブル120を設定する。このバリアグループ定義テーブル120の設定は、各プロセスA、Bが割り当てられたバリアドメイン内で、各プロセスA、Bは生成したソフトウェアスレッドの並列性に応じてバリアグループを設定し、各ソフトウェアスレッドを実行するハードウェアスレッドに自ハードウェアスレッドのスレッドバリア同期部のバリアグループ定義テーブル120にバリアグループとなるハードウェアスレッド#0a〜#2bに「1」を設定する。
例えば、図3において、プロセスAは、処理A−2−1と処理A−2−2をそれぞれ2つのソフトウェアスレッドとして生成し、これらの処理A−2−1、A−2−2は並列性があるので、処理A−2−1をハードウェアスレッド#0a、#0bに割り当て、処理A−2−2をハードウェアスレッド#1a、#1bに割り当てる。
ユーザモードのハードウェアスレッド#0a、#0bはスレッドバリア同期部0a、0bのバリアグループ定義テーブル120に「110000」をそれぞれ書き込んで、ハードウェアスレッド#0aとハードウェアスレッド#0bをバリアグループとして、処理A−2−1を並列して実行する。一方、ユーザモードのハードウェアスレッド#1a、#1bはスレッドバリア同期部1a、1bのバリアグループ定義テーブル120に「001100」をそれぞれ書き込んで、ハードウェアスレッド#0aとハードウェアスレッド#1bをバリアグループとして処理A−2−2を並列して実行する。
次に、ステップS5、S6では、後述するように、各ハードウェアスレッド#0a〜#2bのスレッドバリア同期部#0a〜#2bが、自ハードウェアスレッドに割り当てられたソフトウェアスレッドを実行し、当該ソフトウェアスレッドがバリアポイントに到達するとバリアポイント到達情報を他のハードウェアスレッドにブロードキャストし、バリアグループ定義テーブル120に設定されたバリアグループ内でバリア同期の成立を監視する。なお、バリアグループ定義テーブル120の自ハードウェアスレッド#0aの値が「0」の場合は、バリア同期を行わないので、ステップS6の処理は省略する。また、バリア同期を行う並列処理については公知または周知の手法を適用することができ、例えば、上記特許文献3の手法を利用することができる。
ステップS7では、バリア同期が成立すると、プロセスA、Bはそれぞれ全てのソフトウェアスレッドが終了したか否かを判定し、全てのソフトウェアスレッドが終了した場合にはステップS8に進み、そうでない場合にはステップS9へ進む。なお、バリアグループ定義テーブル120の自ハードウェアスレッド#0aの値が「0」の場合は、バリア同期を行わないので、ステップS7で全プロセスが完了した場合にはステップS8へ進む。
まだ実行していないソフトウェアスレッドまたはプロセスが残存するステップS9では、プロセスAまたはプロセスBが現在のバリアグループを変更するか否かを判定する。バリアグループを変更する場合は、ステップS10でプロセスAまたはプロセスBが同一バリアドメイン内でバリアグループのメンバーとなるハードウェアスレッド#0a〜#2bを変更し、変更したハードウェアスレッド#0a〜#2bに自スレッドバリア同期部のバリアグループ定義テーブル120を更新させる。そして、ステップS5のバリア同期処理を繰り返す。
全てのソフトウェアスレッドが終了した場合には、ステップS8に進み、CPU1の特権モードで実行されるOS100はプロセスA、Bからなるタスク200を終了し、プロセスA、Bへ割り当てていたハードウェアスレッドに、自スレッドバリア同期部のバリアグループ定義テーブル120とバリアポイント到達情報テーブル131をリセットさせ、プロセスA及びプロセスBに割り当てていたバリアドメイン定義テーブル400を、現在当該OS100を特権モードで実行しているハードウェアスレッドでリセットしてタスク200の全プロセスA、Bを終了する。
<バリア同期処理におけるハードウェアスレッドの動作>
次に、上記図6に示したステップS5、S6で、ハードウェアスレッド#0a〜#2bがそれぞれ行うバリア同期処理の一例について図7を参照しながら説明する。図7は、ハードウェアスレッド#0a〜#2bが行うバリア同期処理の一例を示すフローチャートである。以下の説明では、ハードウェアスレッド#0aの処理について述べ、他のハードウェアスレッド#0b〜#2bについても同様である。
ハードウェアスレッド#0a〜#2bは、割り当てられたソフトウェアスレッドを実行してソフトウェアスレッドに予め設定されたバリアポイントに到達すると、図7の処理を開始する。
ステップS11で、ハードウェアスレッド#0a〜#2bの処理がバリアポイントに到達すると、ステップS12でハードウェアスレッド#0a〜#2bはバリアポイント到達情報を「1」に設定して内部ネットワーク13にブロードキャストする。図4で示したように、内部ネットワーク13にブロードキャストされたバリアポイント到達情報は、全てのハードウェアスレッド#0a〜#2bのバリア成否判定部130に通知されて、各ハードウェアスレッド#0a〜#2bのスレッドバリア同期部0a〜#2bによってバリアポイント到達情報テーブル131が更新される。
次に、ステップS13では、自スレッドバリア同期部#0a〜#2bからのバリア成否信号が「1」になるまで待機する。そして、自スレッドバリア同期部#0a〜#2bからのバリア成否信号が「1」になると、ステップS14に進んでハードウェアスレッド#0a〜#2bはバリア同期の成立を判定する。
上記ステップS11〜S14の処理は、各ソフトウェアスレッドに予め組み込まれたプログラムである。
<バリア同期処理におけるバリア成否判定部の動作>
次に、上記図6に示したステップS5、S6で、ハードウェアスレッド#0a〜#2bに接続されたスレッドバリア同期部0a〜#2bの判定部132で行われるバリア同期処理の一例について図8を参照しながら説明する。図8は、スレッドバリア同期部#0a〜#2bの判定部132が行うバリア同期処理の一例を示すフローチャートである。以下の説明では、スレッドバリア同期部#0aの判定部132の処理について述べ、他のスレッドバリア同期部#0b〜#2bの判定部132についても同様である。図8の処理は、ハードウェアスレッド#0aがバリア同期を開始する度に実行される。
まず、ステップS21では、判定部132がバリア成否信号を「0」にセットする。次に、ステップS22では、判定部132がバリアドメイン定義テーブル400を読み込んで、自ハードウェアスレッドのフィールド412に「1」が設定されているエントリを読み込む。図4の例ではエントリ411がバリアドメイン#0のフィールド412のうち、ハードウェアスレッド#0a、#0b、#1a、#1bの値が「1」に設定され、エントリ411がバリアドメイン#1のフィールド412のうち、ハードウェアスレッド#2a、#2bの値が「1」に設定されて図3で示すように、2つのバリアドメインを設定した例を示す。
ステップS23では、判定部132は、バリアドメイン定義テーブル400の自ハードウェアスレッド#0aのフィールド412が「1」のエントリから、フィールド412が「1」に設定されているハードウェアスレッドの識別子413を読み込む。そして、判定部132は読み込んだ識別子413を変数bdに格納する。図4の例では、「#0a」〜{#1b}の4つの識別子が格納される。
ステップS24では、判定部132は変数bdが空集合であるか否かを判定する。空集合でなければステップS25に進んでバリア同期の成立を判定する。一方、変数bdが空集合の場合はバリア同期が成立した状態であるのでステップS29の処理に進む。
ステップS25では、判定部132が変数bdに格納された識別子のうちの1つを変数thへ代入する。
ステップS26では、自スレッドバリア同期部#0aのバリアグループ定義テーブル120のハードウェアスレッドの識別子121と変数thの識別子を比較して、変数thに対応する識別子121のフィールド122の値が「1」であるか否かを判定する。つまり、識別子121のフィールド122の値が「1」であれば自ハードウェアスレッド#0aと同一のバリアグループであるか否かを判定し、「0」であればバリア同期を行わないハードウェアスレッドであると判定する。自ハードウェアスレッド#0aと同一のバリアグループであると判定した場合には、ステップS27に進み、そうでない場合にはステップS28へ進む。
ステップS27では、同一のバリアグループでバリア同期の監視対象であるハードウェアスレッドの識別子を変数thを取得して、バリアポイント到達情報テーブル131の当該識別子のフィールド1312の値が「1」となってバリアポイントに到達するまで待機する。変数thの識別子に対応するハードウェアスレッドがバリアポイントに到達すると、ステップS28へ進む。
ステップS28では、バリアポイントに到達した変数thの識別子を変数bdから削除して、次の識別子についてバリアポイントへの到達を監視するためにステップS24へ戻り、上記処理を繰り返す。
ステップS24では、変数bdが空集合になっていれば自ハードウェアスレッド#0aとバリア同期を行うバリアグループに所属する全てのハードウェアスレッドがバリアポイントに到達したことを示し、判定部132はバリア同期が成立したことを判定する。
バリア同期が成立すると、ステップS29で判定部132は、バリアポイント到達情報テーブル131を「0」でリセットして次回のバリア同期に備え、バリア成否信号を「1」に設定して自ハードウェアスレッド#0aにバリア同期が成立したことを通知する。
そして、ステップS30では、上記ステップS29の処理により自ハードウェアスレッド#0aのバリアポイント到達情報テーブル131が「0」になったか否かを判定し、「0」になっていればステップS21に戻ってバリア成否信号を「0」にもどす。これにより、「0」から「1」のエッジトリガにより自ハードウェアスレッド#0aにバリア同期の成立を通知した後に、バリア成否信号を「0」に戻して次回のバリア同期に備えることができる。
上記処理により、判定部132は、バリアドメイン定義テーブル400のエントリ411から自ハードウェアスレッド#0aと同一のバリアドメインに設定されたハードウェアスレッドの識別子413を取得し、さらに、取得した識別子413のうちバリアグループ定義テーブル120で同一のバリアグループに設定されたハードウェアスレッドの識別子121についてのみバリアポイントに到達したか否かを判定する。同一のバリアグループのすべてのハードウェアスレッドがバリアポイントに到達すると、判定部132はバリアポイント到達情報テーブル131をクリアしてから、バリア成否信号を「1」に設定して自ハードウェアスレッド#0aにバリア同期の成立を通知する。
以上のように、本発明によれば、複数のプログラム(ソフトウェアスレッド)を並列して実行しながら、バリアグループ定義テーブル120とバリアポイント到達情報テーブル131で同一のバリアグループのみについてバリアポイント到達を監視するので、各プログラムのセキュリティを確保しながらも高速でバリア同期を行うことができる。さらに、本発明では、特権モードで動作するOS100のみがバリアドメイン定義テーブル400を更新することができ、ユーザモードのアプリケーションプログラムがバリアドメインを操作するのを禁止したので、各プログラムのセキュリティを確保しながら、ユーザモードで変更可能なバリアグループ定義テーブル120を操作することで、プログラムの実行中にバリアドメイン内で動的にバリアグループを変更することが可能となって、計算機資源を有効に利用することが可能となる。
なお、上記図8では判定部132をソフトウェアの処理による例を示したが、がハードウェアで構成するようにしてもよい。
すなわち、判定部132はバリアドメイン定義テーブル400のエントリ411のうち自ハードウェアスレッド#0aが所属するバリアドメインのエントリを読み込む。次に、判定部132は自ハードウェアスレッド#0aのバリアグループ定義テーブル120の各フィールド122の値を読み込んで、バリアドメイン定義テーブル400から読み込んだフィールド412の値と論理積を求める。この論理積により、判定部132は、自ハードウェアスレッド#0aとバリア同期を行うハードウェアスレッドをバリアグループとして特定する。
例えば、図5で示すように、自ハードウェアスレッド#0aが属するバリアドメイン#0に所属するハードウェアスレッドの識別子が#0a〜1bのとき、バリアドメイン定義テーブル400の各フィールド412の値は「111100」であり、自ハードウェアスレッド#0aのバリアグループ定義テーブル120のフィールド122の値が「110000」のとき、2つのフィールドの値の論理積は「110000」となり、判定回路312は、論理積の値が「1」となっているハードウェアスレッド#0bが自ハードウェアスレッド#0aとバリア同期を行うバリアグループであることを判定する。つまり、バリアドメイン定義テーブル400で自ハードウェアスレッド#0aが所属するエントリの各フィールド412の値を、バリアグループ定義テーブル120のフィールド122の値でマスクした結果をバリアグループとして扱う。なお、上記フィールドの値は、最上位ビットが図4の各テーブルのハードウェアスレッド#0aに対応し、最下位ビットはハードウェアスレッド#2bに対応する。
次に判定部132は、バリアドメイン定義テーブル400とバリアグループ定義テーブル120の論理積から求めた値(110000)を、監視対象のバリアグループの比較値とし、バリアポイント到達情報テーブル131を監視する。判定部132による、バリアグループのバリア同期の監視は、上記論理積より求めた比較値のうち「1」となっているハードウェアスレッド(この場合、#0a、#0b)の値が、バリアポイント到達情報テーブル131で全て「1」となったときにバリア同期が成立したと判定する。
つまり、判定部132は、比較値とバリアポイント到達情報テーブル131の各フィールド1312の値の論理積を求め、この論理積が比較値に一致したときにバリア同期の成立を判定する。図5の例では、バリアドメイン定義テーブル400とバリアグループ定義テーブル120から求めた比較値が「110000」で、バリアポイント到達情報テーブル131の各フィールド1312の値は「111001」となっているとき、比較値とバリアポイント到達情報テーブル131の値の論理積は、「110000」となって比較値と一致するので、判定部132はハードウェアスレッド#0a、#0bのバリア同期の成立を判定する。
判定部132は、バリア同期の成立を判定すると、バリア成否信号により自ハードウェアスレッド#0aにバリア同期の成立を通知する。
このように、バリアドメイン定義テーブル400とバリアグループ定義テーブル120から求めた比較値によってバリアポイント到達情報テーブル131をマスクすることができるため、ハードウェアスレッド#0a〜#2bは、同一のバリアグループ以外のバリアポイント到達情報を参照することはできず、バリアグループ間でセキュリティを確保することが可能となる。
さらに、バリアドメイン定義テーブル400は、特権モードで動作するOS100などから設定可能であるが、ユーザモードのタスク200(またはプロセスA、B)からはバリアドメイン定義テーブル400を操作することができないので、ソフトウェアスレッドがバリアドメイン定義テーブル400を変更するのを禁止して、バリアドメイン間のセキュリティを確保することができる。
以上のように、本発明によれば、複数のプログラムを並列して実行する計算機において、各プログラムのセキュリティを確保しながらも高速でバリア同期を行うことが可能となる。さらに、バリアグループ定義テーブル120はユーザモードのソフトウェアスレッドから操作可能としたので、バリアドメイン間のセキュリティを確保しながら、プログラムの実行中に動的にバリアグループを変更することが可能となる。
<第2実施形態>
図9は、第2の実施形態を示し、前記第1実施形態のバリアグループ定義テーブル120と判定部132をソフトウェアにより実装し、スレッドバリア同期部#0a〜#2bのバリア成否判定部130をバリア到達状況生成部1300に置き換えて、バリア同期の成立の判定(判定部132)はハードウェアスレッド#0a〜2bの各ソフトウェアスレッドで行うようにしたもので、その他の構成は前記第1実施形態と同様である。
各CPUコア#0〜#2のスレッドバリア同期部#0a〜#2bは、ハードウェアスレッド#0a〜#2bに他のハードウェアスレッドのバリア到達状況を通知するバリア到達状況生成部1300のみを備える。
ハードウェアスレッド#0aに設定されるバリアグループ定義テーブル1120は、前記第1実施形態の図2、図3に示したプロセスA,Bのソフトウェアスレッド(処理A−1〜B−3)によってハードウェアスレッド#0a〜#2bの汎用レジスタ(図示省略)等に設定される。なお、図9においては、ハードウェアスレッド#0a(11−0a)のみについてバリアグループ定義テーブル1120及びバリア到達状況生成部1300を示すが、前記第1実施形態と同様に他のハードウェアスレッド#0b〜#2bのスレッドバリア同期部#0b〜#2bも同様の構成であるので図示は省略した。なお、図9ではハードウェアスレッド#0aにバリアグループ定義テーブル1120を設定する例を示したが、主記憶30等のCPU1の外部の記憶装置や、CPU1の内部に設けたDRAM等に当該バリアグループ定義テーブル11200を設定してもよい。
バリアグループ定義テーブル1120は、CPU1の全てのハードウェアスレッドの識別子(#0a〜#2b)1121と、これらの識別子に対応するフィールド1122をそれぞれ備える。ソフトウェアスレッド(図3の処理A−1〜B−3)は、当該スレッドバリア同期部#0aのハードウェアスレッド#0a(自ハードウェアスレッド)とバリア同期を行うハードウェアスレッド#0a〜#2bのフィールド1122には「1」を設定し、バリア同期を行わないフィールド1122には「0」を設定する。バリアグループ定義テーブル1120は自ハードウェアスレッド#0aのフィールド1122の値が「1」で、他のハードウェアスレッドのフィールド1122で「1」のものが自ハードウェアスレッド#0aと同一のバリアグループとなる。
なお、自ハードウェアスレッド#0aがバリア同期を行わない場合には、バリアグループ定義テーブル1120の当該ハードウェアスレッド#0aのフィールド1122は「0」に設定される。
バリアグループ定義テーブル1120は、自ハードウェアスレッド#0aがユーザモードでも書き込み可能となっており、他のハードウェアスレッドから自ハードウェアスレッド#0aのバリアグループ定義テーブル1120に書き込むことはできない。
スレッドバリア同期部#0aのバリア到達状況生成部1300は、前記第1実施形態の図4のバリア成否判定部130と同様に、内部ネットワーク13から受信した他のハードウェアスレッドのバリア到達情報を格納するバリアポイント到達情報テーブル1310を備える。
バリアポイント到達情報テーブル1310は、前記第1実施形態の図4と同様の構成であり、CPU1内の全てのハードウェアスレッドの識別子(#0a〜#2b)1311と、これらの識別子に対応するフィールド1312を備え、各ハードウェアスレッド#0a〜#2bがバリアポイントに到達する度に内部ネットワーク13を介してブロードキャストするバリアポイント到達情報を格納する。バリアポイント到達情報テーブル1310の各フィールド1312には、バリアポイントに到達したハードウェアスレッドには「1」が設定され、バリアポイントに到達していないハードウェアスレッドには「0」が設定される。
バリア到達状況生成部1300は、バリアドメイン定義テーブル400とバリアポイント到達情報テーブル1310を監視して、同一のバリアドメイン内のバリア到達状況を自ハードウェアスレッド#0aにのみ通知する。
図10は、スレッドバリア同期部#0aのバリア到達状況生成部1300で行われる処理の一例を示すフローチャートである。なお、以下の説明ではスレッドバリア同期部#0a及びハードウェアスレッド#0aのみについて説明するが、他のスレッドバリア同期部#0b〜#2b及びハードウェアスレッド#0b〜#2bも同様の処理を行う。
バリア到達状況生成部1300は、ステップS40で、バリアドメイン定義テーブル400を読み込んで、自ハードウェアスレッド#0aのエントリ411のうち、自ハードウェアスレッド#0aのフィールド412が「1」となっているエントリ411の全フィールド412を、自ハードウェアスレッド#0aが所属するバリアドメインのエントリとして読み込む。
次に、ステップS41で、バリア到達状況生成部1300は、ステップS40で読み込んだフィールド412の値と、バリアポイント到達情報テーブル1310の論理積を求める。そして、バリア到達状況生成部1300は、この論理積を同一のバリアドメインのバリア到達状況として自ハードウェアスレッド#0aに通知する。
図9の例では、バリアドメイン定義テーブル400のバリアドメイン#0のエントリ411の各フィールド41の値が「111100」で、バリアポイント到達情報テーブル1310の値が「101001」であるので、これらの論理積は「101000」となり、バリア到達状況生成部1300は、自ハードウェアスレッド#0aとハードウェアスレッド#1aがバリアポイントに到達したことを示すバリア到達状況を自ハードウェアスレッド#0aに通知する。
上記の処理により、バリア到達状況生成部1300は、他のバリアドメインのバリアポイント到達情報をマスクして、自バリアドメイン内のバリアポイント到達情報のみを自ハードウェアスレッド#0aに通知することで、バリアドメイン間のセキュリティを確保することができる。
図11は第2の実施形態の計算機で行われる全体的な処理の流れを示すフローチャートである。この処理は、計算機を起動すると開始される。
まず、ステップS51では、計算機が起動するとCPU1の各CPUコア#0〜#2はハードウェアスレッド#0a〜#2bを設定してから、バリアドメイン定義テーブル400の全てのフィールド412の値を「0」でリセットし、各ハードウェアスレッド#0a〜#2bは自ハードウェアスレッドに結合されたスレッドバリア同期部#0a〜#2bのバリアポイント到達情報テーブル1310をそれぞれ「0」でリセットする。なお、バリアドメイン定義テーブル400のリセットは、ハードウェアスレッド#0a〜#2bのいずれかひとつで行えばよい。
ステップS52では、CPU1が前記第1実施形態の図3に示したOS100を起動する。CPU1は、システムコネクト20を介して図示しないストレージ装置からOS100(またはOSイメージ)を読み込んで、主記憶30にロードして特権モードでOS100の実行を開始する。
OS100の起動が完了すると、CPU1は前記第1実施形態と同様にしてシステムコネクト20を介して図示しないストレージ装置からアプリケーションプログラムとしてのタスク200を読み込んで、主記憶30にロードしてユーザモードでタスク200の実行を開始する。
OS100は、タスク200を起動すると、図3で示したようにプロセスA(200−1)とプロセスB(200−2)を生成する。
ステップS53では、OS100は生成したプロセスA、Bの処理についてハードウェアスレッド#0a〜#2bに割り当てるソフトウェアスレッドを生成する。そして、OS100は、生成したソフトウェアスレッドをハードウェアスレッド#0a〜#2bに割り当てる。さらに、特権モードでCPU1に実行されるOS100は、前記第1実施形態と同様にして、ソフトウェアスレッドを実行するハードウェアスレッド#0a〜#2bのバリアドメインを決定して、ドメイン定義テーブル400を設定する。
ここで、OS100がバリアドメイン決定する手法は、例えば、上述したようにひとつのプロセスにひとつのバリアドメインを付与する。また、バリアドメインを構成するハードウェアスレッド#0a〜#2bの割り当ては、周知または公知の技術を用いればよく、並列処理を行うソフトウェアスレッドの数などから決定しても良いし、プロセスA、Bを生成するコンパイラで予め指定しても良い。本実施形態では前記第1実施形態の図3で示したように、プロセスAに4つのハードウェアスレッド#0a〜1bを割り当て、プロセスBに2つのハードウェアスレッド#2a、2bを割り当てた例を示す。
そして、CPU1の特権モードで実行されるOS100が、上記決定したバリアドメインとハードウェアスレッドの割り当てをバリアドメイン定義テーブル400に書き込む。このバリアドメイン定義テーブル400への書き込みは、特権モードでOS100を実行する複数のハードウェアスレッド#0a〜#2bの何れかひととつが、バリアドメイン定義テーブル400への書き込めばよい。バリアドメイン定義テーブル400への書き込み処理は、前記第1実施形態と同様である。
次に、ステップS54では、ユーザモードでプロセスA、Bの各ソフトウェアスレッドをユーザモードで実行するハードウェアスレッド#0a〜#2bが、バリアグループ定義テーブル1120を設定する。このバリアグループ定義テーブル1120の設定は、各プロセスA、Bが割り当てられたバリアドメイン内で、各プロセスA、Bは生成したソフトウェアスレッドの並列性に応じてバリアグループを設定し、各ソフトウェアスレッドを実行するハードウェアスレッドに自ハードウェアスレッドのスレッドバリア同期部のバリアグループ定義テーブル1120にバリアグループとなるハードウェアスレッド#0a〜#2bに「1」を設定する。
ハードウェアスレッド#0a〜#2bによるバリアグループ定義テーブル1120の設定は、自ハードウェアスレッド#0a〜#2bの汎用レジスタ等に設定する。なお、設定する内容は、前記第1実施形態の図4に示したバリアグループ定義テーブル120と同様である。
次に、ステップS55、S56では、各ハードウェアスレッド#0a〜#2bが、自ハードウェアスレッドに割り当てられたソフトウェアスレッドを実行し、当該ソフトウェアスレッドがバリアポイントに到達するとバリアポイント到達情報を他のハードウェアスレッドにブロードキャストし、バリアグループ定義テーブル1120に設定されたバリアグループ内でバリア同期の成立を監視する。なお、バリアグループ定義テーブル1120の自ハードウェアスレッド#0aの値が「0」の場合は、バリア同期を行わないので、ステップS6の処理は省略する。また、バリア同期を行う並列処理については公知または周知の手法を適用することができ、例えば、上記特許文献3の手法を利用することができる。
ステップS57では、バリア同期が成立すると、プロセスA、Bはそれぞれ全てのソフトウェアスレッドが終了したか否かを判定し、全てのソフトウェアスレッドが終了した場合にはステップS58に進み、そうでない場合にはステップS59へ進む。なお、バリアグループ定義テーブル1120の自ハードウェアスレッド#0aの値が「0」の場合は、バリア同期を行わないので、ステップS7で全プロセスが完了した場合にはステップS8へ進む。
まだ実行していないソフトウェアスレッドまたはプロセスが残存するステップS59では、プロセスAまたはプロセスBが現在のバリアグループを変更するか否かを判定する。バリアグループを変更する場合は、ステップS60でプロセスAまたはプロセスBが同一バリアドメイン内でバリアグループのメンバーとなるハードウェアスレッド#0a〜#2bを変更し、変更したハードウェアスレッド#0a〜#2bに自スレッドバリア同期部のバリアグループ定義テーブル1120を更新させる。そして、ステップS55、S56のバリア同期処理を繰り返す。
全てのソフトウェアスレッドが終了した場合には、ステップS58に進み、CPU1の特権モードで実行されるOS100はプロセスA、Bからなるタスク200を終了し、プロセスA、Bへ割り当てていたハードウェアスレッドに、自スレッドバリア同期部のバリアポイント到達情報テーブル1310をリセットさせ、プロセスA及びプロセスBに割り当てていたバリアドメイン定義テーブル400を、現在当該OS100を特権モードで実行しているハードウェアスレッドでリセットしてタスク200の全プロセスA、Bを終了する。なお、バリアグループ定義テーブル1120は、プロセスが終了する際にハードウェアスレッド#0aがクリア(またはレジスタの開放)する。
以上のように、本第2実施形態においても、複数のプログラムを並列して実行する計算機において、各プログラムのセキュリティを確保しながらも高速でバリア同期を行うことが可能となる。さらに、バリアグループ定義テーブル1120は自ハードウェアスレッドのソフトウェアスレッドから操作可能とし、バリア到達状況生成部1300は同一のバリアドメインのバリアポイント到達情報のみを自ハードウェアスレッドに通知するようにしたので、バリアドメイン間のセキュリティを確保しながら、プログラムの実行中に動的にバリアグループを変更することが可能となる。
<第3実施形態>
図12は、第3の実施形態を示し、前記第1実施形態のCPUコア#0〜#2の内部に設けていたスレッドバリア同期部#0a〜#2bを、CPUコア#0〜#2の外部に設けたもので、その他の構成は前記第1実施形態と同様である。
スレッドバリア同期部#0a〜#2bは、CPUコア#0〜#2bから独立したスレッドバリア同期部12の内部に設けられる。スレッドバリア同期部12は、内部ネットワーク1350でバリアドメイン定義部40に接続され、各スレッドバリア同期部#0a〜#2bはそれぞれバリアドメイン定義部40にアクセスすることができる。
また、スレッドバリア同期部12は、内部ネットワーク1360を介して各CPUコア#0〜#2bのハードウェアスレッド#0a〜#2bに接続され、各ハードウェアスレッド#0a〜#2bと各スレッドバリア同期部#0a〜#2bは、それぞれ直接接続される。なお、各CPUコア#0〜#2は、システムコネクト20から内部ネットワーク1370を介してバリアドメイン定義部40にアクセスすることができ、特権モードで動作するハードウェアスレッド#0a〜#2bがバリアドメイン定義テーブル400に書き込むことができる。
スレッドバリア同期部12は、CPU1の外部に配置しても良く、あるいはCPU1の内部に配置してもよい。スレッドバリア同期部12をCPU1の外部に配置した場合は、既存のCPU1にスレッドバリア同期部12を付加することが可能となり、汎用のCPUを用いて並列処理に適した計算機を構築することができる。
<第4実施形態>
図13は、第4の実施形態を示し、前記第1実施形態のバリアドメイン定義部40を各CPUコア#0〜#2に分散配置したもので、その他の構成は前記第1実施形態と同様である。
各CPUコア#0〜#2には、前記第1実施形態の図4に示したバリアドメイン定義テーブル400を備えたバリアドメイン定義部40−0〜40−2がそれぞれ配置される。各バリアドメイン定義部40−0〜40−2は、システムコネクト20を介して相互に通信可能であり、各バリアドメイン定義テーブル400は、前記第1実施形態と同様に特権モードで動作するハードウェアスレッド#0a〜#2bが書き込むことができ、同一のCPUコア#0〜#2のスレッドバリア同期部から参照することができる。また、各バリアドメイン定義部40−0〜40−2は、同一のCPUコア#0〜#2内のハードウェアスレッドのうち、特権モードで動作するハードウェアスレッドから書き込むことができる。
各バリアドメイン定義部40−0〜40−2は、所定のタイミングで各バリアドメイン定義テーブル400の同期を取る。なお、所定のタイミングは、バリアドメイン定義部40−0〜40−2のいずれかにバリアドメイン定義テーブル400の更新があったときや、所定の周期毎などである。
バリアドメイン定義部40−0〜40−2を各CPUコア#0〜#2に分散配置することで、スレッドバリア同期部#0a〜#2bがバリアドメイン定義テーブル400にアクセするレイテンシを低減でき、バリア同期に関する処理をより高速に行って計算機の処理能力を向上させることができる。
<第5実施形態>
図14は、第5の実施形態を示し、計算機で実行されるソフトウェアの構成の一例を示すブロック図である。
前記第1〜第4実施形態では、CPU1の動作モードが、特権モードとユーザモードを備える例を示したが、本第5実施形態の図14に示すCPU1aは、各CPUコア#0〜#2の動作モード(特権レベル)として、ユーザモードと特権モードに加え、より特権レベルの高いハイパーバイザモード(あるいはVMX rootモードやSVM hostモード)を有する例を示す。
ユーザモードと特権モードとハイパーバイザモードの3つの特権レベルを備えたCPU1aでは、物理計算機上に複数の論理区画を提供するハイパーバイザ(仮想化機構)50がハイパーバイザモードで実行され、2つの論理区画上で2つのゲストOS100−0と100−1を特権モードで実行する例を示す。図14の例では、ハイパーバイザ50がハードウェアスレッド#0a〜#1bを第1の論理区画に割り当て、ハードウェアスレッド#2a、#2bを第2の論理区画に割り当てて、第1の論理区画でゲストOS100−0を実行し、第2の論理区画でゲストOS100−1を実行する。そして、ゲストOS100−0上ではタスク200−Aがユーザモードで実行され、ゲストOS100−1上ではタスク200−Bがユーザモードで実行される。なお、図示はしないが、ハイパーバイザ50は、前記第1実施形態の主記憶30にも第1及び第2の論理区画を割り当てる。その他構成は、前記第1実施形態と同様である。
ハイパーバイザモードを備えたCPU1aでは、ユーザモードで設定するバリアグループ定義テーブル120と、特権モードで設定するバリアドメイン定義テーブル400に加え、ハイパーバイザモードで設定するバリアグループ管理テーブル(図示省略)により、バリアドメイン及びバリアグループの管理を行う。
ハイパーバイザモードで設定するバリアグループ管理テーブルの一例としては、ひとつの論理区画(またはひとつのゲストOS)が使用するハードウェアスレッドの識別子を管理する。つまり、論理区画(またはゲストOS)毎のハードウェアスレッド#0a〜#2bの割り当て状態を管理する。あるいは、論理区画毎に割り当てるハードウェアスレッド#0a〜#2bの範囲をバリアグループ管理テーブルで管理する。
さらに、ユーザモードの他に、より特権レベルの高いモードがひとつ以上ある場合(特権モード、ハイパーバイザモードなど)には、特権レベルの高いモードの全部または一部に対応するバリアグループの分割情報を用意し、ユーザモードでの設定を含むすべてのバリアグループの分割情報の論理積により、バリア同期を行うバリアグループを定義するようにしてもよい。
さらに、ユーザモードと特権モードに加えてハイパーバイザモードを備えるCPU1aでは、バリアドメイン定義テーブル400へのアクセスを監視し、特権モードのハードウェアスレッドがバリアドメイン定義テーブル400を設定する際に、ハイパーバイザモードで動作するハイパーバイザに処理を移し、バリアドメイン定義テーブル400の設定の妥当性をチェックする。そして、バリアドメイン定義テーブル400に対する不正または不適切な設定に対しては、適正な設定になるようにハイパーバイザ50が設定を書き換えるか、あるいはエラーとして処理する。
例えば,バリアドメイン定義テーブル400で設定するバリアドメインがシステム分割(論理区画)の範囲(ひとつのOSが稼動する範囲)を超えないという制約を設ける場合には、仮に特権モードで当該制約に合致しない設定をしようとした場合には、特権モードからハイパーバイザに制御を移して、バリアドメインがシステム分割の範囲を超えないようにバリアドメイン定義テーブル400への設定を書き換えるか、あるいはエラーを返してその設定を中止することができる。
<補足>
なお、上記各実施形態では、CPU1をホモジニアス・マルチコアプロセッサに本発明を適用した例を示したが、図示はしないが、ヘテロジニアス・マルチコアプロセッサに本発明を適用することができる。
また、上記各実施形態では、ひとつのCPU1によるマルチプロセッサシステムの例を示したが、マルチコアプロセッサを複数備えたマルチソケットで計算機を構成した場合には、各ソケットのCPU同士をシステムコネクト20で接続し、各CPUの内部ネットワーク13とシステムコネクト20とを結合することで、複数のソケット間でバリア同期を行うことができる。
また、上記各実施形態では、同時マルチスレッディング技術によるハードウェアスレッドを備えたマルチコアプロセッサをCPU1として採用した例を示したが、ひとつのCPUコアがひとつのスレッドを処理するマルチコアプロセッサをCPU1として採用しても良い。
また、上記各実施形態では、バリアポイント到達情報を「0」または「1」の2値で構成した例を示したが、バリア同期が成立したと誤判定(バリア同期のすり抜け)することを防止するために、バリアポイント到達情報を多値で構成しても良い。あるいは、特開2009−75948号公報などに開示されるように、バリア同期が成立したと誤判定するのを防止するハードウェアを設けるようにしてもよく、公知または周知の技術を適宜採用すればよい。
以上のように、本発明はバリア同期により並列処理を行う計算機または計算機システムに適用することができる。
1 CPU
10−0〜10−2 CPUコア
11−0a〜11−2b ハードウェアスレッド
12−0a〜12−2b スレッドバリア同期部
20 システムコネクト
40 バリアドメイン定義部
120 バリアグループ定義テーブル
130 バリア成否判定部
131 バリアポイント到達情報テーブル
400 バリアドメイン定義テーブル

Claims (20)

  1. ひとつ以上のハードウェアスレッドを備えたプロセッサコアと、
    前記プロセッサコアをひとつ以上有するプロセッサとを備えた計算機で、並列処理を実行してバリア同期の成立を判定するバリア同期方法において、
    前記プロセッサコアはユーザモードを含む複数の特権レベルを有し、
    前記複数のハードウェアスレッドをひとつ以上のグループに分割し、前記ユーザモードより高い特権レベルのときに前記ハードウェアスレッドが前記グループの情報をバリアドメイン定義情報に設定するステップと、
    前記グループに所属するハードウェアスレッドを前記グループ内でひとつ以上の同期グループに分割し、当該分割した同期グループの情報を前記ハードウェアスレッドが前記ユーザモードのときにバリアグループ定義情報に設定するステップと、
    前記ハードウェアスレッドのそれぞれが、当該ハードウェアスレッドで実行する処理がバリアポイントに到達したときにバリアポイント到達情報を出力するステップと、
    前記ハードウェアスレッドのそれぞれが出力したバリアポイント到達情報を受信し、前記バリアグループ定義情報に設定された同期グループと、前記バリアドメイン定義情報に設定された前記グループの情報から、当該ハードウェアスレッドがバリア同期の成否を判定するステップと、
    を含むことを特徴とするバリア同期方法。
  2. 請求項1に記載のバリア同期方法であって、
    前記ハードウェアスレッドがバリア同期の成否を判定するステップは、
    前記バリアドメイン定義情報に設定されたひとつ以上のグループのうち、当該ハードウェアスレッドが所属するグループと、前記バリアグループ定義情報に設定されたひとつ以上の同期グループのうち、当該ハードウェアスレッドが所属する同期グループとの積集合を求め、当該積集合に含まれるハードウェアスレッド群において、バリア同期の成否を判定することを特徴とするバリア同期方法。
  3. 請求項1に記載のバリア同期方法であって、
    前記ハードウェアスレッドがバリア同期の成否を判定するステップは、
    前記バリアドメイン定義情報に設定されたひとつ以上のグループのうち、当該ハードウェアスレッドが所属するグループと、前記バリアグループ定義情報に設定されたひとつ以上の同期グループのうち、当該ハードウェアスレッドが所属する同期グループとの積集合を求め、当該積集合に含まれるハードウェアスレッド群に対して、前記ハードウェアスレッド群に属するすべてのハードウェアスレッドのそれぞれが出力する前記バリアポイント到達情報がバリアポイントに到達したことを表している場合に、バリア同期が成立していると判定することを特徴とするバリア同期方法。
  4. 請求項1に記載のバリア同期方法であって、
    前記複数の特権レベルは前記ユーザモードと特権モードからなり、
    前記ハードウェアスレッドが前記グループの情報をバリアドメイン定義情報に設定するステップは、
    前記特権モードのときに前記ハードウェアスレッドが前記グループの情報をバリアドメイン定義情報に設定することを特徴とするバリア同期方法。
  5. 請求項1に記載のバリア同期方法であって、
    前記ハードウェアスレッドがバリア同期の成否を判定するステップは、
    前記ユーザモードを除く前記複数の特権レベルの一部または全部のそれぞれに対応するバリアドメイン定義情報に設定されたひとつ以上のグループのうち当該ハードウェアスレッドが所属するグループと、前記バリアグループ定義情報に設定されたひとつ以上の同期グループのうち当該ハードウェアスレッドが所属する同期グループとの積集合を求め、当該積集合に含まれるハードウェアスレッド群において、バリア同期の成否を判定することを特徴とするバリア同期方法。
  6. 請求項1に記載のバリア同期方法であって、
    前記ハードウェアスレッドがバリア同期の成否を判定するステップは、
    前記ユーザモードを除く前記複数の特権レベルの一部または全部のそれぞれに対応するバリアドメイン定義情報に設定されたひとつ以上のグループのうち当該ハードウェアスレッドが所属するグループと、前記バリアグループ定義情報に設定されたひとつ以上の同期グループのうち当該ハードウェアスレッドが所属する同期グループとの積集合を求め、当該積集合に含まれるハードウェアスレッド群において、前記ハードウェアスレッド群に属するすべてのハードウェアスレッドのそれぞれが出力する前記バリアポイント到達情報がバリアポイントに到達したことを表している場合に、バリア同期が成立していると判定することを特徴とするバリア同期方法。
  7. 請求項1に記載のバリア同期方法であって、
    前記複数のハードウェアスレッドは、前記バリアグループ定義情報と、前記バリアポイント到達情報を保持するバリアポイント到達情報格納部と、バリア同期の成否を判定するバリア成否判定部と、をそれぞれ有し、
    前記ハードウェアスレッドがバリア同期の成否を判定するステップは、
    前記バリア成否判定部が、当該ハードウェアスレッドに対応するバリアグループ定義情報と、当該ハードウェアスレッドに対応するバリアポイント到達情報格納部と、前記バリアドメイン定義情報からバリア同期の成否を判定することを特徴とするバリア同期方法。
  8. 請求項1に記載のバリア同期方法であって、
    前記複数のハードウェアスレッドは、前記バリアグループ定義情報と、前記バリアポイント到達情報を受信してハードウェアスレッド毎のバリアポイント到達状況を生成するバリアポイント到達状況生成部と、をそれぞれ有し、
    前記ハードウェアスレッドがバリア同期の成否を判定するステップは、
    当該ハードウェアスレッドに対応する前記バリアポイント到達状況生成部が生成したバリアポイント到達状況と、前記バリアグループ定義情報と、前記バリアドメイン定義情報からバリア同期の成否を判定することを特徴とするバリア同期方法。
  9. 請求項1に記載のバリア同期方法であって、
    前記プロセッサと主記憶とを接続するネットワークをさらに有し、前記バリアドメイン定義情報を格納するバリアドメイン定義部が前記ネットワークに接続され、
    前記ハードウェアスレッドがバリア同期の成否を判定するステップは、
    前記ネットワークを介して前記バリアドメイン定義部からバリアドメイン定義情報を読み込むステップを含むことを特徴とするバリア同期方法。
  10. 請求項1に記載のバリア同期方法であって、
    前記複数の特権レベルは前記ユーザモードと特権モードとハイパーバイザモードからなり、前記ハードウェアスレッドがハイパーバイザモードのときには仮想計算機を提供するハイパーバイザを実行し、
    前記複数のハードウェアスレッドをひとつ以上のグループに分割し、前記ユーザモードより高い特権レベルのときに前記ハードウェアスレッドが前記グループの情報をバリアドメイン定義情報に設定するステップは、
    前記ユーザモードより高い特権レベルとして特権モードの前記ハードウェアスレッドが前記グループの情報をバリアドメイン定義情報に設定する際には、当該ハードウェアスレッドをハイパーバイザモードに切り替えて前記ハイパーバイザを実行し、当該ハイパーバイザによって前記バリアドメイン定義情報の内容が正当であるか否かを判定することを特徴とするバリア同期方法。
  11. ひとつ以上のハードウェアスレッドを備えたプロセッサコアと、
    前記プロセッサコアをひとつ以上有するプロセッサとを備えた計算機で、並列処理を実行してバリア同期の成立を判定する計算機において、
    前記プロセッサコアはユーザモードを含む複数の特権レベルを有し、
    前記ハードウェアスレッドのそれぞれが、当該ハードウェアスレッドで実行する処理がバリアポイントに到達したときにバリアポイント到達情報を出力し、
    前記複数のハードウェアスレッドをひとつ以上のグループに分割して、当該グループの情報をバリアドメイン定義情報として格納するバリアドメイン定義部と、
    前記グループに所属するハードウェアスレッドを前記グループ内でひとつ以上の同期グループに分割し、当該分割した同期グループの情報をバリアドメイン定義情報として格納するバリアグループ定義情報格納部と、
    前記バリアポイント到達情報を保持するバリアポイント到達情報格納部と、
    前記ハードウェアスレッドのそれぞれにおいて、前記バリアポイント到達情報格納部のバリアポイント到達情報と、前記バリアグループ定義情報に設定された同期グループと、前記バリアドメイン定義情報に設定された前記グループの情報から、当該ハードウェアスレッドのバリア同期の成否を判定する判定部と、を備え、
    前記バリアドメイン定義部は、前記ハードウェアスレッドが前記ユーザモードより高い特権レベルのときに設定可能であって、前記バリアグループ定義情報格納部は、前記ハードウェアスレッドが前記ユーザモードのときに設定可能であることを特徴とする計算機。
  12. 請求項11に記載の計算機であって、
    前記判定部は、
    前記バリアドメイン定義情報に設定されたひとつ以上のグループのうち当該ハードウェアスレッドが所属するグループと、前記バリアグループ定義情報に設定されたひとつ以上の同期グループのうち当該ハードウェアスレッドが所属する同期グループとの積集合を求め、当該積集合に含まれるハードウェアスレッド群において、バリア同期の成否を判定することを特徴とする計算機。
  13. 請求項11に記載の計算機であって、
    前記判定部は、
    前記バリアドメイン定義情報に設定されたひとつ以上のグループのうち、当該ハードウェアスレッドが所属するグループと、前記バリアグループ定義情報に設定されたひとつ以上の同期グループのうち、当該ハードウェアスレッドが所属する同期グループとの積集合を求め、当該積集合に含まれるハードウェアスレッド群に対して、前記ハードウェアスレッド群に属するすべてのハードウェアスレッドのそれぞれが出力する前記バリアポイント到達情報がバリアポイントに到達したことを表している場合に、バリア同期が成立していると判定することを特徴とする計算機。
  14. 請求項11に記載の計算機であって、
    前記複数の特権レベルは前記ユーザモードと特権モードからなり、
    前記バリアドメイン定義部は、前記ハードウェアスレッドが前記特権モードのときに設定可能であることを特徴とする計算機。
  15. 請求項11に記載の計算機であって、
    前記判定部は、
    前記ユーザモードを除く前記複数の特権レベルの一部または全部のそれぞれに対応するバリアドメイン定義情報に設定されたひとつ以上のグループのうち当該ハードウェアスレッドが所属するグループと、前記バリアグループ定義情報に設定されたひとつ以上の同期グループのうち当該ハードウェアスレッドが所属する同期グループとの積集合を求め、当該積集合に含まれるハードウェアスレッド群において、バリア同期の成否を判定することを特徴とする計算機。
  16. 請求項11に記載の計算機であって、
    前記判定部は、
    前記ユーザモードを除く前記複数の特権レベルの一部または全部のそれぞれに対応するバリアドメイン定義情報に設定されたひとつ以上のグループのうち当該ハードウェアスレッドが所属するグループと、前記バリアグループ定義情報に設定されたひとつ以上の同期グループのうち当該ハードウェアスレッドが所属する同期グループとの積集合を求め、当該積集合に含まれるハードウェアスレッド群において、前記ハードウェアスレッド群に属するすべてのハードウェアスレッドのそれぞれが出力する前記バリアポイント到達情報がバリアポイントに到達したことを表している場合に、バリア同期が成立していると判定することを特徴とする計算機。
  17. 請求項11に記載の計算機であって、
    前記判定部は、
    前記複数のハードウェアスレッドは、前記バリアグループ定義情報と、前記バリアポイント到達情報を保持するバリアポイント到達情報格納部と、バリア同期の成否を判定する判定部と、をそれぞれ有し、
    前記判定部は、
    前記判定部が、当該ハードウェアスレッドに対応するバリアグループ定義情報と、当該ハードウェアスレッドに対応するバリアポイント到達情報格納部と、前記バリアドメイン定義情報からバリア同期の成否を判定することを特徴とする計算機。
  18. 請求項11に記載の計算機であって、
    前記複数のハードウェアスレッドは、前記バリアグループ定義情報と、前記バリアポイント到達情報を受信してハードウェアスレッド毎のバリアポイント到達状況を生成するバリアポイント到達状況生成部と、をそれぞれ有し、
    前記判定部は、
    当該ハードウェアスレッドに対応する前記バリアポイント到達状況生成部が生成したバリアポイント到達状況と、前記バリアグループ定義情報と、前記バリアドメイン定義情報からバリア同期の成否を判定することを特徴とする計算機。
  19. 請求項11に記載の計算機であって、
    前記プロセッサと主記憶とを接続するネットワークをさらに有し、前記バリアドメイン定義情報を格納するバリアドメイン定義部が前記ネットワークに接続され、
    前記判定部は、
    前記ネットワークを介して前記バリアドメイン定義部からバリアドメイン定義情報を読み込むことを特徴とする計算機。
  20. 請求項11に記載の計算機であって、
    前記複数の特権レベルは前記ユーザモードと特権モードとハイパーバイザモードからなり、前記ハードウェアスレッドがハイパーバイザモードのときには仮想計算機を提供するハイパーバイザを実行し、
    前記バリアドメイン定義部は、
    前記ユーザモードより高い特権レベルとして特権モードの前記ハードウェアスレッドが前記グループの情報をバリアドメイン定義情報に設定する際には、当該ハードウェアスレッドをハイパーバイザモードに切り替えて前記ハイパーバイザを実行し、当該ハイパーバイザによって前記バリアドメイン定義情報の内容が正当であるか否かを判定することを特徴とする計算機。
JP2009184668A 2009-08-07 2009-08-07 バリア同期方法及び計算機 Expired - Fee Related JP5447807B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009184668A JP5447807B2 (ja) 2009-08-07 2009-08-07 バリア同期方法及び計算機

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009184668A JP5447807B2 (ja) 2009-08-07 2009-08-07 バリア同期方法及び計算機

Publications (2)

Publication Number Publication Date
JP2011039666A true JP2011039666A (ja) 2011-02-24
JP5447807B2 JP5447807B2 (ja) 2014-03-19

Family

ID=43767391

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009184668A Expired - Fee Related JP5447807B2 (ja) 2009-08-07 2009-08-07 バリア同期方法及び計算機

Country Status (1)

Country Link
JP (1) JP5447807B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105453045A (zh) * 2013-08-13 2016-03-30 高通股份有限公司 使用动态宽度计算的壁垒同步
CN117272412A (zh) * 2023-11-21 2023-12-22 芯来智融半导体科技(上海)有限公司 中断控制寄存器保护方法、装置、计算机设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03144847A (ja) * 1989-10-26 1991-06-20 Internatl Business Mach Corp <Ibm> マルチプロセッサ・システムおよびそのプロセス同期方法
JPH076144A (ja) * 1993-06-18 1995-01-10 Fujitsu Ltd 並列計算機の仮想プロセッサの実行方法
WO2006059543A1 (ja) * 2004-12-01 2006-06-08 Sony Computer Entertainment Inc. スケジューリング方法、スケジューリング装置およびマルチプロセッサシステム
JP2006259821A (ja) * 2005-03-15 2006-09-28 Hitachi Ltd 並列計算機の同期方法及びプログラム
WO2008155806A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited バリア同期方法、装置、及びマルチコアプロセッサ

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03144847A (ja) * 1989-10-26 1991-06-20 Internatl Business Mach Corp <Ibm> マルチプロセッサ・システムおよびそのプロセス同期方法
JPH076144A (ja) * 1993-06-18 1995-01-10 Fujitsu Ltd 並列計算機の仮想プロセッサの実行方法
WO2006059543A1 (ja) * 2004-12-01 2006-06-08 Sony Computer Entertainment Inc. スケジューリング方法、スケジューリング装置およびマルチプロセッサシステム
JP2006259821A (ja) * 2005-03-15 2006-09-28 Hitachi Ltd 並列計算機の同期方法及びプログラム
WO2008155806A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited バリア同期方法、装置、及びマルチコアプロセッサ

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105453045A (zh) * 2013-08-13 2016-03-30 高通股份有限公司 使用动态宽度计算的壁垒同步
KR20160036067A (ko) * 2013-08-13 2016-04-01 퀄컴 인코포레이티드 동적 폭 계산을 이용한 배리어 폭 동기화
JP2016525746A (ja) * 2013-08-13 2016-08-25 クゥアルコム・インコーポレイテッドQualcomm Incorporated 動的幅計算を用いたバリア同期
KR101724247B1 (ko) 2013-08-13 2017-04-06 퀄컴 인코포레이티드 동적 폭 계산을 이용한 배리어 폭 동기화
CN117272412A (zh) * 2023-11-21 2023-12-22 芯来智融半导体科技(上海)有限公司 中断控制寄存器保护方法、装置、计算机设备及存储介质
CN117272412B (zh) * 2023-11-21 2024-03-15 芯来智融半导体科技(上海)有限公司 中断控制寄存器保护方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
JP5447807B2 (ja) 2014-03-19

Similar Documents

Publication Publication Date Title
US9996401B2 (en) Task processing method and virtual machine
US9753854B1 (en) Memory controller load balancing with configurable striping domains
US9411646B2 (en) Booting secondary processors in multicore system using kernel images stored in private memory segments
JP5433676B2 (ja) プロセッサ装置、マルチスレッドプロセッサ装置
EP2616944B1 (en) Real address accessing in a coprocessor executing on behalf of an unprivileged process
US7487222B2 (en) System management architecture for multi-node computer system
US8776077B2 (en) Method for multithreading an application using partitioning to allocate work to threads
US20070150895A1 (en) Methods and apparatus for multi-core processing with dedicated thread management
US7484032B2 (en) Fault tolerant computer system
US10579413B2 (en) Efficient task scheduling using a locking mechanism
JP2016508647A5 (ja)
JPWO2010095416A1 (ja) マルチスレッドプロセッサ及びデジタルテレビシステム
CN101563674A (zh) 对来自多处理器系统上的多线程程序的存储器访问进行管理的方法和系统
US20150120979A1 (en) Method of controlling computer and computer
JP5447807B2 (ja) バリア同期方法及び計算機
US7765429B2 (en) Method and system to execute recovery in non-homogenous multi processor environments
US20130166887A1 (en) Data processing apparatus and data processing method
Maglalang et al. Locality-aware dynamic task graph scheduling
US20200004711A1 (en) Method and device for processing data based on distributed structure
Goglin Memory footprint of locality information on many-core platforms
Katz Popcorn Linux: Cross Kernel Process and Thread Migration in a Linux-Based Multikernel
US20230036017A1 (en) Last-level cache topology for virtual machines
Shi et al. DFlow: Efficient Dataflow-based Invocation Workflow Execution for Function-as-a-Service
JP6351387B2 (ja) 情報処理装置、プログラムおよび記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120309

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130719

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130730

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130912

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: 20131203

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131217

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees