JP3858492B2 - マルチプロセッサシステム - Google Patents

マルチプロセッサシステム Download PDF

Info

Publication number
JP3858492B2
JP3858492B2 JP37277298A JP37277298A JP3858492B2 JP 3858492 B2 JP3858492 B2 JP 3858492B2 JP 37277298 A JP37277298 A JP 37277298A JP 37277298 A JP37277298 A JP 37277298A JP 3858492 B2 JP3858492 B2 JP 3858492B2
Authority
JP
Japan
Prior art keywords
synchronization
processors
transaction
instruction
coherence
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.)
Expired - Fee Related
Application number
JP37277298A
Other languages
English (en)
Other versions
JP2000194680A5 (ja
JP2000194680A (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.)
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 JP37277298A priority Critical patent/JP3858492B2/ja
Priority to US09/473,276 priority patent/US6466988B1/en
Publication of JP2000194680A publication Critical patent/JP2000194680A/ja
Publication of JP2000194680A5 publication Critical patent/JP2000194680A5/ja
Application granted granted Critical
Publication of JP3858492B2 publication Critical patent/JP3858492B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0822Copy directories

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、スイッチ構成の主記憶共有型マルチプロセッサシステムに関する。特に、各プロセッサ内のキャッシュのコヒーレンス制御を含むプロセッサ間のメモリアクセス順序制御を行うのに適したマルチプロセッサシステムに関する。
【0002】
【従来の技術】
計算機の性能を向上する手段として、複数のプロセッサを同時に使用するマルチプロセッサシステムが広く使われている。マルチプロセッサシステムには、主記憶をそれぞれのプロセッサに用意する分散記憶型と、主記憶をプロセッサ間で共有する主記憶共有型とがある。この内、主記憶共有型は、プロセッサ間で共有するデータの管理が容易であることから、分散記憶型に比べてプログラミングがしやすく、普及が進んでいる。
【0003】
マルチプロセッサシステムでは、各プロセッサが独立に動作するだけでなく、必要に応じてプロセッサ間でデータ交換を行いながら動作する。主記憶共有型のマルチプロセッサでは、あるプロセッサが主記憶に書き込んだ値を別なプロセッサが読み出すことでデータ交換を行う。このようなプロセッサ間のデータ交換では、プロセッサ間のメモリアクセス順序保証が必要である。具体的には、あるプロセッサが書き込むデータを別なプロセッサが読み出す場合、この読み出しがデータの書き込み前ではなく、書き込んだ後になることを保証する手段が要る。
【0004】
ここで主記憶共有型マルチプロセッサの代表的な構成概要を図12、図13を用いて説明する。図12はバス構成のマルチプロセッサを示す。CPU5100〜5130はメモリバス5150で結合されており、主記憶5140へのアクセスはこのメモリバス5150を通して行う。メモリバス5150によりアクセスをシリアライズできるので、データ交換のための書き込みと読み出しの順序保証を制御しやすい。反面、CPU5100〜5130から主記憶5140へのアクセス量は、メモリバス5150ネックにより制限される。
【0005】
これに対して図13に示すスイッチ構成のマルチプロセッサでは、CPU5200〜5230が独立に主記憶5240と接続される。スイッチ型の特徴は、各CPUの主記憶アクセスの干渉が少ないという点にある。例えばCPU5200からの線5250を通した主記憶5240へのアクセスは、他のCPU5210〜5230からの主記憶アクセスのパス5260〜5280に影響を与えない。実際の構成ではCPU5200〜5230と主記憶5240との間に多段のスイッチを用意することが多く、この場合は干渉は全く無い訳ではない。しかし、バス構成のように主記憶アクセスを完全にシリアライズする要素はないので影響の程度は小さく、高いアクセス性能を実現できる。反面、各プロセッサがバラバラに動作するので、プロセッサ間のメモリアクセス順序保証は難しい。
【0006】
特開平10−187634公報は、スイッチ構成の主記憶共有型マルチプロセッサシステムで、プロセッサ間のメモリアクセス順序保証を高速に行う技術を開示する。具体的には、同期用の命令をプロセッサに用意し、この命令により出力されるトランザクションを利用してメモリアクセスのシリアライズを行う。これにより、プロセッサ間の書き込みと読み出しの順序制御を行う。
【0007】
【発明が解決しようとする課題】
プロセッサの高速化技術としてキャッシュが広く使われている。このキャッシュをプロセッサ毎に持つケースでは、プロセッサ間のデータ交換のためにキャッシュの一致制御(コヒーレンス制御)が必要になる。コヒーレンス制御とは、あるプロセッサのキャッシュに登録されているデータと同じメモリアドレスを持つデータを別なプロセッサが更新した場合、キャッシュ上の古いデータを更新するか、もしくは抹消する制御である。データ交換で正しいデータを読み出せることを保証するには、所望のデータについてのコヒーレンス制御を実行する必要がある。
【0008】
したがって、本発明の目的はプロセッサ間同期用の命令を用意したマルチプロセッサシステムにおいて、キャッシュコヒーレンスを保証を可能にすることである。
【0009】
更に言えば、本発明の目的はメモリアクセス順序制御とコヒーレンス制御との2つを独立して行うのではなく、同時にまとめて実行して効率の良いプロセッサ間のデータ交換を実現することにある。
【0010】
【課題を解決するための手段】
同期用の命令を各プロセッサに用意し、この命令により各プロセッサから出力されるトランザクションを用いて、主記憶アクセスのシリアライズを行うとともにコヒーレンス制御の完了保証も行う。具体的には、次の4つを実現する。
【0011】
(1)各プロセッサは、同期命令よりも前に実行した命令のトランザクションを全て主記憶側へ出力した後で、同期命令によるトランザクションを出力する。このトランザクションを主記憶とコヒーレンス管理部との両方に出力する。
【0012】
(2)主記憶は、同期用のトランザクションを受けると、そのソースとなるプロセッサからの主記憶アクセスを止める機構を持つ。全プロセッサより同期用のトランザクションを受けると主記憶アクセスを再開する。これにより、主記憶アクセスのシリアライズを行う。
【0013】
(3)コヒーレンス管理部は、全プロセッサから同期用のトランザクションを受けると、同期用トランザクションよりも前のトランザクションについてコヒーレンス制御を完了させ、その後に各プロセッサに対してコヒーレンス制御の完了を通知する。
【0014】
(4)各プロセッサが、コヒーレンス管理部からの完了通知を待つ手段を用意する。これにより、コヒーレンス制御の完了が保証される。
【0015】
【発明の実施の形態】
以下、本発明の1実施例を示す。最初に本実施例で採用する「コヒーレンス制御を伴うメモリアクセス順序保証方法」であるバリア同期の概念について説明し、その後で本実施例の概要、および詳細を記述する。
【0016】
<1.バリア同期の概念>
本実施例の内容を理解する上で、コヒーレンス制御とメモリアクセス順序制御とを同時に行う手段として本実施例が採用する「バリア同期」について説明する。
【0017】
1.1 バリア同期の意味
本実施例では、バリア同期という言葉を、次の3項目を満たす意味で使用する。
【0018】
(キャッシュが有効な場合にも下記3項目を満たす。つまり、下記のload/storeはキャッシュヒットでもミスヒットでも良い。)
(1)2プロセッサ以上任意の数のプロセッサが参加でき、バリア同期に参加した全プロセッサの間で(2)(3)に記述するコヒーレンス制御、およびメモリアクセス順序制御を行う。(以下、(2)(3)の項目は、バリア同期に参加しているプロセッサ間での保証事項として記述する。)
(2)バリア同期の前に各プロセッサが行ったメモリアクセスは、バリア同期の後に各プロセッサが実行するメモリアクセスに反映される。別な記述をすれば、いずれのプロセッサがバリア同期の前に行った主記憶へのstoreも、バリア同期の後に実行する任意のプロセッサの同一アドレスに対するloadに反映される。
【0019】
(3)バリア同期の後に各プロセッサが行ったメモリアクセスは、バリア同期の前に各プロセッサが実行したメモリアクセスに影響を及ぼさない。別な記述をすれば、いずれのプロセッサがバリア同期の後に行う主記憶へのstoreも、バリア同期の前に行った任意のプロセッサによる同一アドレスに対するloadに反映されることはない。
【0020】
1.2 バリア同期の使用方法
バリア同期の使用方法を図11を用いて説明する。
【0021】
技術計算に多い巨大なループ演算をマルチプロセッサで実行する場合は、ループの中身を分割し、各プロセッサに実行させる手段が用いられる。図11では、並列実行するプログラムを5000に、このプログラムを4CPUで実行する様子を5010〜5060に示す。なお、ハッチングされている部分が、本プログラムの処理を各CPUが実行している時間を示す。
【0022】
ループ部分以外はマルチプロセッサで実行することによるメリットが小さいことから、シングルプロセッサで処理をすることが一般的である。図では、ループ演算以外の部分を全てCPU0が実行する。(図中5010、5060)これに対し、ループ部分は処理量が多いので、全CPUで分担して実行する。(図中5020〜5050)
図11に示すようなプログラムでは、ほとんどの場合、CPU0がループ前の処理5010でstoreした結果をCPU1〜3がループ演算5030〜5050中で使用することになる。また、ループ演算5030〜5050でのCPU1〜3の計算結果を、CPU0がループ以降の処理5060で使用することも多い。よって、ループの前後でアクセス順序保証を行う必要がある。
【0023】
ここで図中の同期A、Bのポイントで前節で示したバリア同期を使用すれば、必要なアクセス順序保証が実現できる。つまり、同期Aにバリア同期を使用することで、CPU0が5010でstoreした結果を、CPU1〜3は5030〜5050で正しくloadできることを保証される。また、同期Bにバリア同期を使用することで、CPU1〜3が5030〜5050でstoreした結果を、CPU0は5060で正しくloadできることが保証される。この場合、同期AでもBでもCPU0,1,2,3ともにバリア同期に参加することが必要である。
【0024】
以下、本実施例では、スイッチ構成の主記憶共有型マルチプロセッサシステムにおける、バリア同期の実装方法およびその動作を説明する。
【0025】
<2.本実施例の概要>
2.1 本実施例の全体構成
本節では、本実施例の構成概要を図1を用いて説明する。
【0026】
図1は、CPU10,1010,2010,3010の4つが主記憶制御部50を共有する、スイッチ構成の主記憶共有マルチプロセッサシステムを示す。コヒーレンス管理については、コヒーレンス管理部80を用いたFAA方式を採用する。
【0027】
CPU10,1010,2010,3010は完全に同一であり、図1ではCPU10のみ内部を記述している。内部には、バリア同期の要求を保持する要求レジスタ120とバリア同期の結果を記録する結果レジスタ130とを持つ。また内部のキャッシュに登録しているデータのアドレス情報をタグ160に記憶する。
【0028】
バリア同期の制御論理として、各CPU毎に同期制御部300,1300,2300,3300を用意する。同期制御部は、次の4つの制御を行う。
【0029】
(1)and回路200,210,220を使ったCPU間の同期情報の管理。
【0030】
(2)通信レジスタ370,1370,2370,3370を使ったCPU間での高速データ転送の制御。
【0031】
(3)マスク350,1350,2350,3350を使った各CPUのバリアへの参加不参加制御。
【0032】
(4)状態レジスタ360,1360,2360,3360を使ったバリア同期状態の保持。
【0033】
本実施例では、同期制御部300,1300,2300,3300をCPU10,1010,2010,3010とは独立して持つが、もちろんCPU内部に同期制御部を取り込むことも可能である。
【0034】
主記憶制御部50は、各CPU10,1010,2010,3010からのメモリアクセスに応じて動作する。内部にバリア検出部700,1700,2700,3700を持ち、バリア同期のトランザクションによる主記憶アクセスのシリアライズを行う。
【0035】
コヒーレンス管理部80は、CPU10,1010,2010,3010のキャッシュのコヒーレンス管理を行う。概要は、各CPUのタグ情報を内部に保持し、storeを受けるとこれに従い他CPUのタグ情報をチェックし、キャッシュに登録されているデータへのstoreだと検出すると、その登録データを抹消するkillトランザクションをCPUに通知する。コヒーレンス制御の詳細は後述する。コヒーレンス管理部80は、内部にバリア検出部800,1800,2800,3800を持ち、バリア同期によるコヒーレンス管理のシリアライズを行う。
【0036】
2.2 本実施例の動作概要
本節では、図1を用いて本実施例の動作の概要を説明する。まず、前提となるCPUの動作/命令を挙げ、次にメモリアクセス方法、通常のコヒーレンス制御方法の概要を記述し、最後にバリア同期の動作概要を説明する。
【0037】
2.2.1 CPUの動作/命令
本実施例では、次のCPUの動作/命令について、以下の5つを前提として説明する。
【0038】
(1)各CPU10,1010,2010,3010はストアスルー制御のキャッシュメモリを持つ。
【0039】
(2)各CPU10,1010,2010,3010はキャッシュヒット時はキャッシュからloadする通常の「load命令」の他に、キャッシュがヒットした場合も必ず主記憶(もしくは後述する通信レジスタ)からデータをloadする「dload命令」(direct load命令)を持つ。本dload命令は、いくつかのRISCプロセッサでは、「キャッシュ禁止ページへのload」という形で実現できる。
【0040】
(3)各CPU10,1010,2010,3010はバリア同期専用の命令である「barrier命令」を持つ。このbarrier命令により生成されるbarrierトランザクションは、barrier命令に先行するトランザクションよりも後に、同期制御部300,1300,2300,3300、主記憶制御部50、コヒーレンス制御部80へと出力される。
【0041】
(4)各CPU10,1010,2010,3010はbarrier命令を実行すると、バリア同期が規定の状態になるまで後続の命令の実行を止める。
【0042】
(5)各CPU10,1010,2010,3010は、基本的に命令の実行順序は命令列上の順序と一致しなくてよい。(out-of-oder実行)
(2)については、dload命令が無い場合には一部の最適化が不可能になるだけで、本実施例の基本的な動作は変わらない。(3)(4)については、バリア同期専用命令である必要は必ずしも無いが、barrierトランザクションについては、同期制御部300,1300,2300,3300、主記憶制御部50、コヒーレンス制御部80が他のトランザクションと区別して「同期のためのトランザクション」であることを認識できる必要がある。(5)については、barrier命令では後述2.2.3節の条件を満たすことが必要になる。
【0043】
2.2.2 メモリアクセス方法/通常のコヒーレンス制御
メモリアクセス方法/通常のコヒーレンス制御(バリア同期時以外でのコヒーレンス制御)について説明する。以下、load動作/direct load動作/store動作について、CPU10の動作で説明する。
【0044】
・load動作:
CPU10がload命令を実行すると、タグ160を見て、loadのターゲットアドレスのデータがキャッシュに存在するかどうかをチェックする。キャッシュがヒットすればキャッシュからloadする。ミスした場合は、線p150、同期制御部300、線p300を通じて、主記憶制御部50、コヒーレンス管理部80までloadトランザクションを出力する。
【0045】
主記憶制御部50にloadトランザクションが届くと、主記憶制御部50は要求loadアドレスに従いメモリを読み出した値を、線p310、同期制御部300、線p160を通してCPU10に戻す。データが戻ると、CPU10は、リプライデータをレジスタに格納し使用するとともに、キャッシュにもリプライデータを、タグ160にリプライデータのアドレス情報を登録しておき、後でまだ同じデータに対してloadが発生した時にはキャッシュ上のデータを使えるようにする。
【0046】
コヒーレンス管理部80にloadトランザクションが届くと、コヒーレンス管理部80は要求loadアドレスの情報がCPU10のキャッシュに登録されることをFAAに記憶しておく。
【0047】
・direct load動作:
CPU10がdirect load命令を実行すると、タグ160のチェックを行わず、線p150、同期制御部300、線p300を通じて、主記憶制御部50コヒーレンス管理部80までdirect loadトランザクションを出力する。
【0048】
主記憶制御部50にdirect loadトランザクションが届くと、主記憶制御部50は要求loadアドレスに従いメモリを読み出した値を、線p330、同期制御部300、線p160を通してCPU10に戻す。データが戻ると、CPU10は、リプライデータをレジスタに格納し使用することは行うが、キャッシュにはリプライデータを登録しない。
【0049】
コヒーレンス管理部80にdirect loadトランザクションが届いた場合は、このトランザクションを無視してFAAには登録しない。もちろん、direct loadトランザクション自身がコヒーレンス管理部80に到達する前に消される制御にしてもよい。
【0050】
・store動作:
CPU10がstore命令を実行すると、タグ160を見て、storeのターゲットアドレスのデータがキャッシュに存在するかどうかをチェックし、キャッシュがヒットすればキャッシュの値を更新する。また、キャッシュのヒット/ミスに関わらず、線p150、同期制御部300、線p300を通じて、主記憶制御部50、コヒーレンス管理部80までstoreトランザクション(storeデータ込み)を出力する。
【0051】
主記憶制御部50にstoreトランザクションが届くと、主記憶制御部50はターゲットアドレスについてstoreデータで更新する。
【0052】
コヒーレンス管理部80にstoreトランザクションが届くと、コヒーレンス管理部80ではstoreのターゲットアドレスのデータが、store元のCPU10以外のCPU1010,2010,3010のキャッシュに登録されているかどうか、FAAをチェックする。登録されているCPUがあれば、そのCPUに対して当該データのkillトランザクションを出力する。ここではCPU間の動作パタンを変えて、「CPU1010からのstoreによりCPU10にkillトランザクションを出力する」ケースについて、killトランザクションの動きを説明する。線p330、同期制御部300、線p170を通して、タグ160にkillトランザクションが届く。タグ160では、killトランザクションに示されるデータがキャッシュ上に存在する時は、これを抹消する。
【0053】
上記のコヒーレンス制御により、CPU10,1010,2010,3010のキャッシュにデータを登録する時にはコヒーレンス管理部80にも登録される。また、あるCPUのキャッシュに登録されるデータに対して別なCPUがstoreを実行した場合に、キャッシュに登録されるデータを抹消する動作が行える。よって、あるCPUがstoreしたにも関わらず、別なプロセッサのキャッシュにstore前のデータが残りつづけるということはなく、基本的なコヒーレンス制御は達成できている。ただし、storeが主記憶制御部50に影響を及ぼす時点と、killトランザクションにより各CPUのタグ上からデータが消える時点との間には、当然時間差がある。
【0054】
2.2.3 バリア同期の動作概要
次にバリア同期での基本的な動作を説明する。バリア同期では前記の通り、「バリア同期前のメモリアクセスの影響は、バリア同期の後のメモリアクセスには完全に反映されている」、「バリア同期後のメモリアクセスは、バリア同期の前のメモリアクセスには影響を及ぼさない」、の2点を守る必要がある。(ここでのメモリアクセスとは、キャッシュがヒットして実際には主記憶制御部50へのトランザクションが発生しないケースを含む) これを実現するため、図1に示すハードウェアでは、バリア同期で基本的に次の動作を行う。
【0055】
(A)各CPU10,1010,2010,3010は、barrier命令よりも前の各メモリアクセス命令について、以下の3条件が成立するまで待ってからbarrierトランザクションをCPUより出力する。
【0056】
(A−1)barrier命令の前の全load命令について、キャッシュヒットであればキャッシュより読み出し終わっていること。キャッシュミスであれば、少なくともload要求トランザクションがCPU10,1010,2010,3010より出力されたこと。
【0057】
(A−2)barrier命令の前の全dload命令については、少なくともdload要求トランザクションがCPU10,1010,2010,3010より出力されたこと。
【0058】
(A−3)barrier命令の前の全store命令については、少なくともstore要求トランザクションがCPU10,1010,2010,3010より出力されたこと。
【0059】
(B)主記憶制御部50は、内部のバリア検出部700,1700,2700,3700でbarrierトランザクションを検出する。検出すると、そのパスからのリクエスト(例えばバリア検出部700が検出した時は、線p300を通してのリクエスト)を止める。全バリア検出部700,1700,2700,3700ともに検出すると、リクエストを止める動作を終了し、主記憶アクセスを再開させる。
【0060】
(C)コヒーレンス制御部80は、内部のバリア検出部800,1800,2800,3800でbarrierトランザクションを検出する。バリア検出部800,1800,2800,3800の全てがバリアを検出すると、最後のbarrierトランザクションの前にコヒーレンス管理部80に到達している全てのリクエストに起因するkillトランザクションの後ろにackトランザクションを生成し、各同期制御部300,1300,2300,3300を通してCPU10,1010,2010,3010に送出する。
【0061】
(D)各CPU10,1010,2010,3010は、コヒーレンス管理部80からのackトランザクションが到着し、更にackトランザクションに先行するkillトランザクションの処理が全て完了するまでbarrier命令で待つ。barrier命令より後の命令は、barrier命令が終わるまで実行しない。
【0062】
以上の(A)〜(D)により、次のことが保証できる。
【0063】
(1)barrier命令の前の命令に起因する主記憶制御部50へのトランザクションは、(A)によりbarrierトランザクションより前に主記憶制御部50に到着する。barrier命令の後の命令に起因する主記憶制御部50へのトランザクションは、(D)によりbarrier成立後にCPUより出力される。ここでbarrier成立時点では(C)により全CPUよりbarrierトランザクションが出力されたことが保証される。このことから、barrier命令の後の命令に起因するトランザクションが、barrierトランザクションよりも前に主記憶制御部50に到着することはない。(注:構成によっては、barrier成立時点で、主記憶制御部50でもbarrierトランザクションが揃っているという保証は無い。これは、barrier成立はあくまでコヒーレンス管理部80でbarrierトランザクションが揃ったことを意味し、主記憶制御部50のBusyの状態によっては主記憶制御部50の方ではまだbarrierトランザクションが揃っていない場合も有り得る。但し、既にbarrierトランザクションが主記憶制御部50の方向に出力された後であることは保証される。) よって、(B)の制御により、主記憶制御部50へのトランザクションについては、任意のCPUがbarrier命令よりも前に実行する命令に起因する主記憶制御部50へのトランザクションは、任意のCPUがbarrier命令よりも後に実行する命令に起因する主記憶制御部50へのトランザクションに反映される。また逆に、任意のCPUがbarrier命令よりも前に実行する命令に起因する主記憶制御部50へのトランザクションは、、任意のCPUがbarrier命令よりも後に実行する命令に起因する主記憶制御部50へのトランザクションの影響を受けない。
【0064】
(2)barrier命令の前に存在するstore命令によるstoreトランザクションについては、(A)によりbarrierトランザクションより前にコヒーレンス制御部80に到着する。(C)により、各CPUがbarrierのackを受ける前に、全CPUのbarrier命令の前のstore命令に起因するkillトランザクションを受け取ることになる。(D)により、barrier命令の後続が動作を始める時点では、コヒーレンス制御部80より受け取ったkillトランザクションは処理することになる。つまり、barrier命令の前に存在するstore命令によるコヒーレンス制御が完了してから、各CPUはbarrier命令の後続を実行することになる。
【0065】
以上の(1)(2)により、任意のCPUがbarrier命令より前に実行したstore命令の結果を任意のCPUはbarrier命令の後に実行するload命令(キャッシュヒット/ミスヒット両方のケースを含む)およびdload命令で参照することができる。また、任意のCPUがbarrier命令の後に実行するstore命令の影響を任意のCPUが実行するbarrier命令の前のload/dloadは影響を受けない。よって、バリア同期の定義として記述した1.1節の(2)(3)の条件を満たすことになる。
【0066】
<3.本実施例の詳細>
以下、本実施例の詳細を、図1〜図10を使用して、本実施例の各構成要素の動作を説明する。最後に、本実施例の機能を用いた命令列について図14〜16を用いて説明する。
【0067】
3.1 CPU
図1に示されるCPU10,1010,2010,3010は全て同一の構成である。本節では、図2を用いてCPU10内部の構成、および動作を説明する。
【0068】
CPU10は、内部にキャッシュ150、キャッシュに登録されるデータのアドレス情報を記憶するタグ160、主記憶制御部50へのload/dloadトランザクションのバッファであるフェッチバッファ170、storeトランザクションのバッファであるストアバッファ180を持つ。更に、各種レジスタを含むCPUコア110内部にbarrierの要求状態を保持する要求レジスタ120、barrierの結果が入る結果レジスタ130、barrier命令での待ち時間を監視するタイマ140を持つ。
【0069】
以下、最初にload/dload/store命令でのCPU10の動作を説明する。
【0070】
load命令をCPUコア110が実行すると、線p100を通してキャッシュへとload要求を出力する。キャッシュ150は、load要求のアドレスとタグ160に登録されるアドレスとを比較し、キャッシュヒットの場合は線p110を通してCPUコア110に結果を返答する。キャッシュミスの場合は、線p120を通してフェッチバッファ170にloadリクエストが格納される。dload命令では、load命令と異なりキャッシュヒットのケースでも線p120を通してフェッチバッファ170にdloadリクエストを格納する。store命令をCPUコア110が実行すると、線100を通してキャッシュへとstore要求を出力する。キャッシュ150は、store要求のアドレスとタグ160に登録されるアドレスとを比較し、キャッシュヒットの場合はキャッシュ上のデータを更新する。また、キャッシュヒット/ミスに関らず、線p140を通してストアバッファ180にstoreトランザクションを格納する。なお、CPU10はout-of-oder実行を基本としているので、命令列上の順番とフェッチバッファ170、ストアバッファ180に格納される順序は同一で無くて良い。但し、フェッチバッファ170、ストアバッファ180自身はFIFO制御を行う。
【0071】
プライオリティ回路190は、フェッチバッファ170、ストアバッファ180に格納されるトランザクションを、線p150を通して同期制御部300へと出力する。フェッチバッファ170とストアバッファ180のプライオリティの付け方は任意である。load/dloadリクエストの場合は、最終的に線p160を通してリプライデータが戻るが、このデータはフェッチバッファ170、線p130を経由して、キャッシュ150に記憶し、そのアドレス情報はタグ160に記憶する。
【0072】
次に、コヒーレンス制御のためのkillトランザクションについて説明する。
【0073】
killトランザクションは同期制御部300より線p170を経由してタグ160に伝わる。タグ170では、killトランザクションのアドレスにヒットするエントリがあれば、それを抹消する。
【0074】
次に、barrier命令を実行した場合の動作を説明する。
【0075】
CPUコア110がbarrier命令を実行すると、最初に要求レジスタ120をセットする。要求レジスタ120の構成を図3に示す。要求レジスタ120はRビット122、Cビット124の2ビットを持つ。ここで、Rビットはbarrier要求、Cビットはコヒーレンス制御完了待ち有り(C=0)/無し(C=1)を示す。barrier命令で指定される即値が0であればR=1,C=0に、barrier命令で指定される即値が1であればR=1,C=1になる。コヒーレンス制御待ち有り/無しについて、およびbarrier命令の即値については後述する。なお、この要求レジスタにセットされた値は、線p210よりバリアの開始が通知されるとリセットされる。なお、Rビットの値は線p190より、Cビットの値は線p200より同期制御部300へ伝えられる。
【0076】
CPUコア110は、barrier命令によるbarrierトランザクションを、barrier命令に先行する全てのload/dload/store命令の後に線p100に出力する。CPUコア110からキャッシュ150に出力されたbarrierに先行するloadリクエストの内、キャッシュヒットのloadリクエストに対するリプライが線p180を通してCPUコア110に返答されたことが保証された、およびCPUコア110からキャッシュ150に投げられたbarrierに先行するload/dload/storeリクエストによるトランザクションを全てフェッチバッファ170、ストアバッファ180に積まれたことが保証された時点で、キャッシュ150はbarrierトランザクションをフェッチバッファ170、ストアバッファ180に積む。
【0077】
プライオリティ回路190は、フェッチバッファ170、ストアバッファ180の両方からbarrierトランザクションを受けると、線p150を通して同期制御部300にbarrierトランザクションを出力する。
【0078】
CPUコア110は、更にbarrier命令を実行すると、結果レジスタ130にbarrierの完了が記録されるまで後続命令の実行を止める。結果レジスタの構成を図4に示す。結果レジスタはEビット132の1ビットを持つ。同期制御部300より、barrierのackが線p170を通してタグ160に伝わると、先行killトランザクションのタグ160への反映が終わった後で線p180を通して結果レジスタにbarrierのackが伝えられる。これによりEビットが立つ。このEビットは、barrier命令でCPUコアがackを待つ動作を終えた時点でリセットされる。
【0079】
barrier命令でCPUコアが待っている時間は、タイマ140で監視する。規定時間を超えてbarrier命令で待ち続けた場合は、CPUコアはbarrier命令で待ち続ける動作を止め、例外動作に入る。但し、この場合もbarrierトランザクションの出力および要求レジスタへの設定は通常通り行い、待つ動作のみ中止する。例えばCPU10はbarrier命令を実行して待ち状態に入っているのに、別なCPU1010がプログラムバグでbarrier命令に到達しないケースも有り得るので、タイマによるbarrier同期完了待ち中止は必要な機能である。なお、タイマでタイムアウトした時にプロセスをkillするためにも、要求レジスタ120、結果レジスタ130の退避回復ができる必要がある。
【0080】
3.2 同期制御部
図1に示される同期制御部300,1300,2300,3300は全て同一の構成である。本節では、図5を用いて同期制御部300の構成概要、および動作を説明する。
【0081】
同期制御部300の主構成要素は、マスク350、状態レジスタ360、通信レジスタ370である。マスク350は、図6に示すとおりMビット355の1ビットにより構成されるレジスタで、その同期制御部300に接続されるCPU10がバリア同期に参加するかしないかを表す。
【0082】
状態レジスタ360は、図7に示す通りBビット365の1ビットにより構成されるレジスタで、接続されるCPU10よりbarrierトランザクションが来るとB=1にセットし、主記憶制御部50、コヒーレンス制御部80までbarrierトランザクションを出力すると、(もしくはコヒーレンス制御完了待ち無しのバリア同期となり、barrierトランザクションを出力する必要が無くなると(後述))B=0にリセットされる。
【0083】
状態レジスタ360の意味について述べる。CPU10がbarrier命令を実行し、このbarrierトランザクションが同期制御部300に来ただけで主記憶制御部50にbarrierトランザクションを出力してしまうと、以降主記憶制御部50のバリア検出部700で後続リクエストをストップする動作に入る。よって、これ以降にCPU10がbarrierタイムアウトを検出したとしても、主記憶をアクセスできない。これを防ぐために、後述するようにCPU10,1010,2010,3010の内、マスクされていないCPU全てがbarrier命令を実行し、必ずbarrierトランザクションが主記憶制御部50で揃うことが保証されるまで、同期制御部360はbarrierトランザクションを状態レジスタ360に記憶しておき、主記憶制御部50へは出力しない。なお、CPU10でタイムアウトを検出した時のプロセスkill作業の為にも、状態レジスタ360は退避回復ができることが必須である。
【0084】
通信レジスタ370は、主記憶経由より高速なCPU間データ転送の為に用意するメモリマップドレジスタである。構成は図8のようなフルビットのレジスタである。図1に示すとおり、通信レジスタ370,1370,2370,3370はそれぞれ線p320のバスで結合されており、全てがミラーリングされている。すなわち、例えばCPU10が通信レジスタ370に設定した値は、速やかに通信レジスタ1370,2370,3370にも伝達される。
【0085】
なお、マスク350、状態レジスタ360、通信レジスタ370はメモリマップドレジスタであるが、これらはコヒーレンス管理部80によるコヒーレンス制御が不可能なので、読み出しにはload命令ではなくdload命令を使用する必要がある。(設定はstore命令で良い)
CPU10よりload/dload/storeトランザクションを受けた時の同期制御部300の動作を説明する。同期制御部300は線p150よりこれらのトランザクションを受けると、デコーダ制御部330、線p400、バリア生成部340、線p300を通して、主記憶制御部50、コヒーレンス制御部80へ出力する。主記憶制御部50からのリプライデータは、線p310、デコーダ制御部330、線p160を経由して、CPU10へと戻る。
【0086】
このように主記憶に対するload/dload/storeでは、デコーダ制御部330は何も機能しないが、dload/storeトランザクションのアドレスから、マスク350、状態レジスタ360、通信レジスタ370へのアクセスと判定した場合は、それぞれのレジスタを線p410,p430,p460を通じてアクセスする。dloadであればリプライ値を線p420,p440,p470経由で集め、線p160を通してCPU10に返答する。
【0087】
load/dload/storeトランザクションにより、コヒーレンス制御部80からCPU10へのkillトランザクションが発生した場合は、線p330、ack検出部510、線p660、ack生成部500、線p170を通して、CPU10までkillトランザクションを上げる。
【0088】
次に、barrierでの同期制御部300の動作を説明する。barrier命令により、CPU10内の要求レジスタ120に値がセットされると、要求レジスタの設定値は同期制御部まで線p190、線200を通じて伝えられる。線p190、p200経由の情報は、線p340,p350経由でand回路200,210へと出力される。ここで、CPU10がマスクされていた場合は、同期制御部300内のor回路310,320によりand回路200、210への出力が常に1になる。
【0089】
また、barrierトランザクションがCPU10より線p150を通して同期制御部300に出力されると、デコーダ制御部330はbarrierトランザクションであることを識別し、状態レジスタ360をセットする。更に、barrierトランザクションは通信レジスタ370にも線p460経由で伝えられる。通信レジスタ370については、barrierトランザクションよりも前のstoreを反映し終わり、これが他の通信レジスタ1370、2370、3370へと線p320を経由して伝達されたことが保証できる時に、同期制御部内の線p510を1にする。この信号は線p360経由でand回路220へ出力されるが、この信号もやはり同期制御部300内のor回路380により、マスクされている場合は常に1になる。
【0090】
and回路200,210,220により、同期制御部300,1300,2300,3300からの出力が全て1になると、その結果が線p370,p380,p390を経由して同期制御部300内のラッチ460,470,480に伝わる。
【0091】
この構成により、マスクされていない全てのCPUの要求レジスタ120のRビットが1になったときに線p370は1になる。ラッチ460は線p370が1になると1にセットされる。ラッチ460がセットされると、すなわちいずれ必ず各同期制御部300,1300,2300,3300より主記憶制御部50にbarrierトランザクションが出力されるので、主記憶制御部50へbarrierトランザクションを出力しても良いことになる。
【0092】
マスクされていない全てのCPUの要求レジスタ120のCビットが1になったときに線p380は1になる。ラッチ470は線p370が1になったことをトリガに線p380の情報を記憶する。これはすなわちマスクされていないすべてのCPUがbarrier命令の即値で1を指定したことを意味する。1CPUでも0を指定した場合には、ラッチ470が記憶する値は0になる。
【0093】
マスクされていない全ての同期制御部の通信レジスタより1が上がると線p390は1になる。これはすなわちbarrier命令の前のstoreトランザクションを全通信レジスタ370,1370,2370,3370に反映し終わったことを表す。
【0094】
ラッチ460に1が設定されたことで、同期制御部300でバリア同期動作が引き起こされる。以下、(1)マスクされていない同期制御部300で、ラッチ460が1になり、470が0だった場合(コヒーレンス制御完了待ち有り)、(2)マスクされていない同期制御部300で、ラッチ460が1になり、470が1だった場合(コヒーレンス制御完了待ち無し)、(3)マスクされている同期制御部300で、ラッチ460が1になり、470が0だった場合(コヒーレンス制御完了待ち有り)、(4)マスクされている同期制御部300で、ラッチ460が1になり、470が1だった場合(コヒーレンス制御完了待ち無し)、の4パタンについて説明する。
【0095】
(1)マスクされていない同期制御部300で、ラッチ460が1になり、470が0だった場合(コヒーレンス制御完了待ち有り)
ラッチ460がセットされたことで線p560が1になり、かつbarrierトランザクションが状態レジスタ360にセットされたことでor回路390の出力線540が1になると、線550も1になる。この時、ラッチ470の出力線p580は0でなので、and回路420の出力も1になり、線p530を通じてバリア生成部340を起動する。バリア生成部340は起動されると、barrierトランザクションを生成し、線p300を通じて主記憶制御部50、コヒーレンス管理部80に出力する。また、and回路400の出力も1になることから、線p500を通じて状態レジスタ360をリセットし、また線p210を通じて、CPU10の要求レジスタ120のリセットも行う。
【0096】
この動作は、すなわち、マスクされていないCPU全てがbarrier命令を実行してbarrier動作が開始された時点で、コヒーレンス制御完了待ち有りが指定されている(少なくとも1CPUはbarrier命令の即値で0を指定した)時には、マスクされていない同期制御部300は、CPU10からのbarrierトランザクションの到着を一旦状態レジスタに格納し確認したら、主記憶制御部50およびコヒーレンス制御部80へbarrierトランザクションを出力するということを表す。同時に、状態レジスタ360をクリアし、CPU10の要求レジスタもクリアする。
【0097】
バリア生成部340から出力したbarrierトランザクションに従い、コヒーレンス管理部80は必要なkillトランザクションを線p330に出力した後、ackトランザクションをack検出部510まで出力して来る。ack検出部510はackトランザクションを検出すると、線p610を使い、ラッチ490をセットする。これにより、線p600が1になり、更にor回路430により線p640が1になる。ここで、ラッチ460は既に1なので線p570も1になっていることから、ラッチ480も1になれば線p650は1になる。ack生成部500は線p650が1になるとackトランザクションを生成し、線p170を経由してCPU10に出力する。これはすなわち、コヒーレンス管理部80からackトランザクションを受けると、通信レジスタの更新も終わっていればCPU10にackトランザクションを出力することになる。ack生成部500は、ackトランザクションをCPU10に出力すると、線p620を通じて、ラッチ460,470,480をリセットする。
【0098】
(2)マスクされていない同期制御部300で、ラッチ460が1になり、470が1だった場合(コヒーレンス制御完了待ち無し)
ラッチ460がセットされたことで線p560が1になり、かつbarrierトランザクションが状態レジスタ360にセットされたことでor回路390の出力線540が1になると、線550も1になる。この時、ラッチ470の出力線p580は1でなので、and回路420の出力は0のままであり、バリア生成部340は起動されない。and回路400の出力は1になることから、線p500を通じて状態レジスタ360をリセットし、また線p210を通じて、CPU10の要求レジスタ120のリセットも行う。
【0099】
この動作は、すなわち、マスクされていないCPU全てがbarrier命令を実行してbarrier動作が開始された時点で、コヒーレンス制御完了待ち無しが指定されている(全CPUがbarrier命令の即値で1を指定した)時には、マスクされていない同期制御部300は、CPU10からのbarrierトランザクションの到着を一旦状態レジスタに格納し確認した後、主記憶制御部50、コヒーレンス制御部80へ出力することなく、抹消することを表す。状態レジスタ360とCPU10の要求レジスタについては、コヒーレンス制御完了待ち無しの場合と同様にクリアする。
【0100】
コヒーレンス管理部80からのackトランザクションは無いので、ラッチ490は1にはならないが、ラッチ460,470は1なので、or回路430の出力は1になり、よって、ラッチ480も1になれば線p650は1になる。ack生成部500は線p650が1になるとackトランザクションを生成し、線p170を経由してCPU10に出力する。これはすなわち、コヒーレンス管理部80からackトランザクションを受けなくても、通信レジスタの更新が終わっていればCPU10にackトランザクションを出力することになる。ack生成部500は、ackトランザクションをCPU10に出力すると、線p620を通じて、ラッチ460,470,480をリセットする。
【0101】
上記の動作を行うため、コヒーレンス制御完了待ち無しは、通信レジスタ370の値保証だけを高速に行うために使える。実際の例は後述する。
【0102】
(3)マスクされている同期制御部300で、ラッチ460が1になり、470が0だった場合(コヒーレンス制御完了待ち有り)
マスクされている場合は、barrierトランザクションが状態レジスタ360にセットされなくても、or回路390の出力が1になるので、ラッチ460がセットされたことだけで(ラッチ470の出力線p580は0でなので)、線p530を通じてバリア生成部340が起動されることになる。バリア生成部340は起動されると、barrierトランザクションを生成し、線p300を通じて主記憶制御部50、コヒーレンス管理部80に出力する。ただし、and回路400の出力は1にならないことから、状態レジスタ360、CPU10の要求レジスタ120のリセットは行われない。
【0103】
この動作は、すなわち、マスクされていないCPU全てがbarrier命令を実行してbarrier動作が開始された時点で、コヒーレンス制御完了待ち有りが指定されている(少なくとも1CPUはbarrier命令の即値で0を指定した)時には、マスクされている同期制御部300は、無条件に主記憶制御部50およびコヒーレンス制御部80へbarrierトランザクションを出力するということを表す。
【0104】
バリア生成部340から出力したbarrierトランザクションに従い、コヒーレンス管理部80は必要なkillトランザクションを線p330に出力した後、ackトランザクションをack検出部510まで出力して来る。ack検出部510はackトランザクションを検出すると、線p610を使い、ラッチ490をセットする。これにより、線p600が1になり、更にor回路430により線p640が1になる。ここで、ラッチ460は既に1なので線p570も1になっていることから、ラッチ480も1になれば線p650は1になる。ack生成部500は線p650が1になっても、マスクされていることで線p670が1であると、ackトランザクションは生成せず、線p620を通じてラッチ460,470,480のリセットのみ行う。これはすなわち、コヒーレンス管理部80からackトランザクションを受けても、CPU10へはackトランザクションは返さず、ラッチ460,470,480の状態のみリセットすることを意味する。
【0105】
(4)マスクされている同期制御部300で、ラッチ460が1になり、470が1だった場合(コヒーレンス制御完了待ち無し)
マスクされている場合は、barrierトランザクションが状態レジスタ360にセットされなくても、or回路390の出力が1になるが、ラッチ470も1であり、and回路400,420とも1にはならない。よって、バリア生成部340は起動されず、状態レジスタ360、要求レジスタ120のリセットも行われない。
【0106】
この動作は、すなわち、マスクされていないCPU全てがbarrier命令を実行してbarrier動作が開始された時点で、コヒーレンス制御完了待ち無しが指定されている(全CPUがbarrier命令の即値で1を指定した)時には、マスクされている同期制御部300は、特に動作が無いことを意味する。
【0107】
コヒーレンス管理部80からのackトランザクションは無いので、ラッチ490は1にはならないが、ラッチ460,470は1なので、or回路430の出力は1になり、よって、ラッチ480も1になれば線p650は1になる。ack生成部500は線p650が1になっても、マスクされていることで線p670が1であると、ackトランザクションは生成せず、線p620を通じてラッチ460,470,480のリセットのみ行う。これはすなわち、コヒーレンス管理部80からackトランザクションを受けても、CPU10へはackトランザクションは返さず、ラッチ460,470,480の状態のみリセットすることを意味する。
【0108】
同期制御部の内いくつかがマスクされているケースで、コヒーレンス制御完了待ち有りとなった場合は、各同期制御部で(1)(3)の動作が混じるが、いずれも主記憶制御部50,コヒーレンス管理部80へbarrierトランザクションを出力する。逆に、コヒーレンス制御完了待ち無しとなった場合は、各同期制御部で(2)(4)の動作が混じるが、いずれも主記憶制御部50,コヒーレンス管理部80へbarrierトランザクションを出力しない。
【0109】
3.3 主記憶制御部
本節では、図9を用いて主記憶制御部50の構成、および動作を説明する。
【0110】
主記憶制御部50は、内部にバリア検出部700,1700,2700,3700と、主記憶60とを持つ。barrierトランザクションが検出されなければ、線p300,p1300,p2300,p3300を通して同期制御部300,1300,2300,3300より来たload/dload/storeトランザクションは、バリア検出部700,1700,2700,3700を通過して、線p720,1720,2720,3720経由で主記憶60にアクセスする。storeトランザクションについてはstoreデータを主記憶60に反映し、load/dloadトランザクションについては、リプライ値を線p310,p1310,p2310,p3310を経由して同期制御部300,1300,2300,3300に返答する。
【0111】
バリア検出部700がbarrierトランザクションを検出すると、線p300からの主記憶60へのアクセスをバリア検出部700で停止し、また線p700よりand回路710へ1を出力する。同様に、バリア検出部1700,2700,3700全てでbarrierトランザクションを検出すると、and回路710の出力線p710が1になり、各バリア検出部700,1700,2700,3700をリセットする。
【0112】
よって、barrierトランザクションの前のトランザクション全てが主記憶60に出力された後で、barrierトランザクションの後のトランザクションが主記憶60へ出力される動作になり、barrierトランザクションによる主記憶アクセスのシリアライズが実現する。
【0113】
3.4 コヒーレンス管理部
本節では、図10を用いてコヒーレンス管理部80の構成、および動作を説明する。
【0114】
コヒーレンス制御部80は、内部にバリア検出部800,1800,2800,3800と、FAA90とを持つ。barrierトランザクションが検出されなければ、線p300,p1300,p2300,p3300を通して同期制御部300,1300,2300,3300より来たload/storeトランザクションは、バリア検出部800,1800,2800,3800を通過して、線p820,p1820,p2820,p3820経由でFAA90に到達する。loadであればFAA登録、storeであればFAAチェックおよびチェックに引っ掛かった場合はkillトランザクションを生成し、線p330,p1330,p2330,p3330を経由して同期制御部300,1300,2300,3300に出力する。
【0115】
バリア検出部800がbarrierトランザクションを検出すると、線p800を1にする。この時、線p300からFAAへのトランザクションの流れを止めるかどうかについては、止めても止めなくてもどちらでもよい。これは、CPU10,1010,2010,3010がbarrier命令から抜けるには、コヒーレンス管理部80よりackを出力する必要があることから、barrierトランザクションの後ろに別のトランザクションが来ることがないことと、仮にbarrier命令よりも後のstoreトランザクションが来てしまい、不当にkillトランザクションが生成されたとしても、主記憶側でシリアライズしているので、結局、barrier命令よりも前のlload命令はbarrier命令より後のstore命令よりも先に主記憶アクセスすることになり、問題が発生し得ないことによる。(これに対し、主記憶制御部50の方は、barrierトランザクションが揃うまでCPU10,1010,2010,3010を必ず待たせることができる保証がないので、シリアライズが必要である。)同様に、バリア検出部1800,2800,3800全てでbarrierトランザクションを検出すると、and回路810の出力線p810が1になり、各バリア検出部800,1800,2800,3800をリセットするとともに、ack生成部820を起動して、ackトランザクションを線p330,p1330,p2330,p3330を経由して同期制御部300,1300,2300,3300に出力する。
【0116】
よって、barrierトランザクションの前のトランザクション全てについてのFAA90への操作が終わり、それに伴うkillトランザクションを同期制御部300,1300,2300,3300に出力した後で、ackトランザクションを出力する制御が実現する。
【0117】
3.5 命令列例
図14、図15、図16に、本実施例のbarrier命令を用いた命令列例を示す。
【0118】
図14は、図11における同期Aのパタンについて、CPU10、CPU1010の間での命令列例を示す。CPU10がbarrier命令(即値0)の前に実行した、主記憶60、通信レジスタ370へのstore(6010、6020)の値は、CPU1010がbarrier命令(即値0)の後に実行する通信レジスタ370へのdload命令(6120)、主記憶60へのload命令(6130)に必ず反映されることが保証できる。なお、ここでは命令6020,6120のdloadで通信レジスタ370をアクセスしたが、これは主記憶60に対するアクセスでも問題ない。また、barrier命令の即値はCPU10、CPU1010とも0としたが、これはどちらかが1であっても変わらない。
【0119】
図15は、図11における同期Bのパタンについて、CPU10、CPU1010の間での命令列例を示す。CPU1010がbarrier命令(即値0)の前に実行した、主記憶60、通信レジスタ370へのstore(6310、6320)の値は、CPU10がbarrier命令(即値0)の後に実行する通信レジスタ370へのdload命令(6220)、主記憶60へのload命令(6230)に必ず反映されることが保証できる。なお、ここではdloadで通信レジスタ370をアクセスしたが、これは主記憶60に対するアクセスでも問題ない。また、barrier命令の即値はCPU10、CPU1010とも0としたが、これはどちらかが1であっても変わらない。
【0120】
図16はコヒーレンス制御完了待ち無しの例として示す。CPU10、CPU1010ともbarrier命令の即値が1なので、コヒーレンス制御完了待ち無しのバリア同期が機能する。この場合、CPU10がbarrier命令の前で実行した通信レジスタ370へのstore(6410)は、CPU1010がbarrier命令の後で実行するdload命令(6520)に必ず反映される。但し、この場合は通信レジスタ370の代りに主記憶60を指定すると、store結果の反映が保証できない。load命令を使った場合も同様である。
【0121】
【発明の効果】
スイッチ構成の主記憶共有型マルチプロセッサにおいて、メモリアクセス順序保証とコヒーレンス保証とを同時に高速に実行でき、プロセッサ間のデータ交換の性能が高まる。
【図面の簡単な説明】
【図1】本発明の同期機構を持つマルチプロセッサシステムを表す図である。
【図2】本発明のマルチプロセッサシステム中のCPUを表す図である。
【図3】本発明のマルチプロセッサシステム中の要求レジスタを表す図である。
【図4】本発明のマルチプロセッサシステム中の結果レジスタを表す図である。
【図5】本発明のマルチプロセッサシステム中の同期制御部を表す図である。
【図6】本発明のマルチプロセッサシステム中のマスクを表す図である。
【図7】本発明のマルチプロセッサシステム中の状態レジスタを表す図である。
【図8】本発明のマルチプロセッサシステム中の通信レジスタを表す図である。
【図9】本発明のマルチプロセッサシステム中の主記憶制御部を表す図である。
【図10】本発明のマルチプロセッサシステム中のコヒーレンス管理部を表す図である。
【図11】本発明の同期の適用例を表す図である。
【図12】バス構成の主記憶共有型マルチプロセッサを表す図である。
【図13】スイッチ構成の主記憶共有型マルチプロセッサを表す図である。
【図14】本発明の同期を用いた命令列例を表す図である。
【図15】本発明の同期を用いた命令列例を表す図である。
【図16】本発明の同期を用いた命令列例を表す図である。
【符号の説明】
190…プライオリティ回路
200,210,220,400,410,420,440,450,710,810…and回路
310,320,380,390,430…or回路
700,800,1700,1800,2700,2800,3700,3800…バリア検出部。

Claims (12)

  1. キャッシュを有する複数のプロセッサと、
    前記複数のプロセッサにより共有される主記憶と、
    前記複数のプロセッサのキャッシュに保持するデータのアドレス情報を管理してプロセッサ間のキャッシュコヒーレンス制御を行うコヒーレンス制御部とを具備し
    前記プロセッサはプロセッサ間の同期を目的とする命令を実行した時に同期用トランザクションを発生するマルチプロセッサシステムにおいて、
    前記複数のプロセッサのいずれかから同期用トランザクションを受けると、該トランザクションの発生元のプロセッサからの主記憶アクセスを停止し、前記複数のプロセッサの全てより前記同期用トランザクションが出力されると前記主記憶アクセスを再開する主記憶アクセス順序保証機構と、
    前記コヒーレンス制御部から前記複数のプロセッサの各々に対し、前記複数のプロセッサが前記同期を目的とする命令よりも前に実行した命令に起因するキャッシュコヒーレンス制御要求が全て出力されたとき、当該プロセッサにキャッシュコヒーレンス制御を完了したことを通知するコヒーレンス完了保証機構とを備え、
    かつ前記複数のプロセッサの各々は、前記同期を目的とする命令を実行してから前記コヒーレンス完了保証機構からの前記通知を受けるまでの期間中は後続の命令の実行を停止すること特徴とするマルチプロセッサシステム。
  2. 前記複数のプロセッサから前記同期用トランザクションを受けるとこれを保持し、前記複数のプロセッサの全てが前記同期を目的とする命令を実行すると主記憶と前記コヒーレンス制御部に該同期用トランザクションを出力する同期用トランザクション保持機構をさらに有する請求項1記載のマルチプロセッサシステム。
  3. 前記コヒーレンス完了保証機構は、前記複数のプロセッサの1つから同期用トランザクションを受けるとこれを記憶し、前記複数のプロセッサの全てから該同期用トランザクションを受けるとこれを解除するとともに、最後に受けた該同期用トランザクションよりも前のトランザクションに対するコヒーレンス制御が終わったことをもって同期前のキャッシュコヒーレンス制御が完了したことを検出することを特徴とする請求項1記載のマルチプロセッサシステム。
  4. キャッシュを有する複数のプロセッサと、
    前記複数のプロセッサにより共有される主記憶と、
    前記複数のプロセッサのキャッシュに保持するデータのアドレス情報を管理してプロセッサ間のキャッシュコヒーレンス制御を行うコヒーレンス制御部を具備し、
    前記複数のプロセッサの間の同期について参加不参加を表すマスク情報を各プロセッサ毎に持ち、
    前記複数のプロセッサの各々は該複数のプロセッサのうちの同期に参加するプロセッサ間の同期を目的とする命令を実行した時に同期用トランザクションを発生するマルチプロセッサシステムにおいて、
    前記同期に参加するプロセッサのいずれかから同期用トランザクションを受けると該同期用トランザクションの発元のプロセッサからの主記憶に対するアクセス処理を停止し、前記複数のプロセッサの内同期に参加するプロセッサの全てより同期用トランザクションが出力されると該主記憶に対するアクセス処理を再開する主記憶アクセス順序保証機構と、
    前記コヒーレンス制御部から前記同期に参加するプロセッサの各々に対し、前記同期に参加するプロセッサが前記同期を目的とする命令よりも前に実行した命令に起因するキャッシュコヒーレンス制御要求が全て出力されたとき当該プロセッサにキャッシュコヒーレンス制御を完了したことを通知するコヒーレンス完了保証機構とを備え、
    かつ前記同期に参加するプロセッサの各々は、前記同期を目的とする命令を実行してから前記コヒーレンス完了保証機構からの前記通知を受けるまでの期間中は後続の命令の実行を停止すること特徴とするマルチプロセッサシステム。
  5. 前記同期に参加するプロセッサの1つから前記同期用トランザクションを受けるとこれを保持し、前記同期に参加するプロセッサの全てが前記同期を目的とする命令を実行すると主記憶と前記コヒーレンス制御部に該同期用トランザクションを出力する同期用トランザクション保持機構をさらに有する請求項4記載のマルチプロセッサシステム。
  6. 前記コヒーレンス制御部は、前記同期に参加するプロセッサの1つから同期用トランザクションを受けるとこれを記憶し、前記同期に参加するプロセッサの全てから該同期用トランザクションを受けるとこれを解除するとともに、最後に受けた該同期用トランザクションよりも前のトランザクションに対するコヒーレンス制御が終わったことをもって同期前のキャッシュコヒーレンス制御が完了したことを検出するコヒーレンス完了保証機構を持つ請求項4記載のマルチプロセッサシステム。
  7. キャッシュを有する複数のプロセッサと、複数の該プロセッサにより共有される主記憶と、全ての該プロセッサの該キャッシュに保持するデータのアドレス情報を管理してプロセッサ間のキャッシュコヒーレンス制御を行うコヒーレンス制御部を具備し、
    前記複数のプロセッサは、プロセッサ間の同期を目的とする命令を実行した時に同期用トランザクションを発生するマルチプロセッサシステムにおいて、
    前記コヒーレンス制御部から前記複数のプロセッサの各々に対し、前記複数のプロセッサが前記同期を目的とする命令よりも前に実行した命令に起因するキャッシュコヒーレンス制御要求が全て出力されたとき、当該プロセッサにキャッシュコヒーレンス完了を通知するコヒーレンス完了保証機構を備え
    前記複数のプロセッサの各々は、前記同期を目的とする命令を実行してから前記コヒーレンス完了保証機構からの前記通知を受けるまでの期間中は、後続の命令の実行を停止し、かつ前記後続の命令の時呼応を停止する待ち時間が規定時間を超えると実行停止を解除することを特徴とするマルチプロセッサシステム。
  8. キャッシュを有する複数のプロセッサと、前記複数のプロセッサにより共有される主記憶と、前記複数のプロセッサのキャッシュに保持するデータのアドレス情報を管理してプロセッサ間のキャッシュコヒーレンス制御を行うコヒーレンス制御部を具備し、
    プロセッサ間の同期について参加不参加を表すマスク情報を各プロセッサ毎に持ち、
    前記複数のプロセッサの各々は、該複数のプロセッサのうちの同期に参加するプロセッサ間の同期を目的とする命令を実行した時に同期用トランザクションを発生するマルチプロセッサシステムにおいて、
    前記コヒーレンス制御部から前記同期に参加するプロセッサの各々に対し、前記同期に参加するプロセッサが前記同期を目的とする命令よりも前に実行した命令に起因するキャッシュコヒーレンス制御要求が全て出力されたとき、当該プロセッサにキャッシュコヒーレンス完了を通知するコヒーレンス完了保証機構を備え
    前記同期に参加するプロセッサの各々は、前記同期を目的とする命令を実行してから前記コヒーレンス完了保証機構からの前記通知を受けるまでの期間中は、後続の命令の実行を停止し、かつ前記後続の命令の時呼応を停止する待ち時間が規定時間を超えると実行停止を解除することを特徴とするマルチプロセッサシステム。
  9. キャッシュを有する複数のプロセッサと、前記複数のプロセッサにより共有される主記憶と、前記複数のプロセッサのキャッシュに保持するデータのアドレス情報を管理してプロセッサ間のキャッシュコヒーレンス制御を行うコヒーレンス制御部を具備し、
    前記複数のプロセッサの各々はプロセッサ間の同期を目的とする命令を実行した時に同 期用トランザクションを発生するマルチプロセッサシステムにおいて
    前記複数のプロセッサの各々に対応して設けられたプロセッサ間の通信のための通信レジスタと、
    前記複数のプロセッサのいずれかから前記同期用トランザクションを受けると、前記同期用トランザクションの発生元のプロセッサからの主記憶アクセスを停止し、前記複数のプロセッサ全てより該同期用トランザクションが出力されると該主記憶アクセスを再開する主記憶アクセス順序保証機構と、
    前記コヒーレンス制御部から前記複数のプロセッサの各々に対し、前記複数のプロセッサが前記同期を目的とする命令よりも前に実行した命令に起因するキャッシュコヒーレンス制御要求が全て出力され、かつ前記複数のプロセッサの同期用トランザクションより前の前記通信レジスタに対するアクセスの全てが完了したことを当該プロセッサに通知するコヒーレンス完了保証機構とを備え
    前記複数プロセッサの各々は、前記同期を目的とする命令を実行してから前記ヒーレンス完了保証機構からの通知を受けるまでの期間は後続の命令の実行を停止することを特徴とするマルチプロセッサシステム。
  10. 前記同期を目的とする命令で、同期による保証範囲が前記通信レジスタの値のみか、前記主記憶に対するアクセス順序保証および前記コヒーレンス制御部によるキャッシュコヒーレンス制御完了保証までかを選択できることを特徴とする請求項9に記載のマルチプロセッサシステム。
  11. キャッシュを有する複数のプロセッサと、複数の該プロセッサにより共有される主記憶と、全ての該プロセッサの該キャッシュに保持するデータのアドレス情報を管理してプロセッサ間のキャッシュコヒーレンス制御を行うコヒーレンス制御部を具備し、
    プロセッサ間の同期について参加不参加を表すマスク情報を各プロセッサ毎に持ち、
    前記複数のプロセッサの各々は、同期に参加するプロセッサ間の同期を目的とする命令を実行した時に同期用トランザクションを発生するマルチプロセッサシステムにおいて
    前記複数のプロセッサの各々に対応して設けられたプロセッサ間の通信のための通信レジスタと、
    前記複数のプロセッサのいずれかから前記同期用トランザクションを受けると該同期用トランザクションの発行元のプロセッサからの主記憶アクセスを停止し、前記複数のプロセッサのうちの同期に参加するプロセッサの全てから同期用トランザクションが出力されると該主記憶アクセスを再開する主記憶アクセス順序保証機構と、
    前記コヒーレンス制御部から前記複数のプロセッサのうちの同期に参加するプロセッサの各々に対し、前記同期に参加するプロセッサが前記同期を目的とする命令よりも前に実行した命令に起因するキャッシュコヒーレンス制御要求が全て出され、かつ前記同期に参加するプロセッサの同期用トランザクションより前の前記通信レジスタに対するアクセスの全てが完了したことを当該プロセッサに通知するコヒーレンス完了保証機構と、
    前記複数プロセッサの各々は、前記同期を目的とする命令を実行してから前記ヒーレンス完了保証機構からの通知を受けるまでの期間は後続の命令の実行を停止することを特徴とするマルチプロセッサシステム。
  12. 前記同期を目的とする命令で、同期による保証範囲が前記通信レジスタの値のみか、前記主記憶に対するアクセス順序保証および前記コヒーレンス制御部によるキャッシュコヒーレンス制御完了保証までかを選択できることを特徴とする請求項11に記載のマルチプロセッサシステム。
JP37277298A 1998-12-28 1998-12-28 マルチプロセッサシステム Expired - Fee Related JP3858492B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP37277298A JP3858492B2 (ja) 1998-12-28 1998-12-28 マルチプロセッサシステム
US09/473,276 US6466988B1 (en) 1998-12-28 1999-12-28 Multiprocessor synchronization and coherency control system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP37277298A JP3858492B2 (ja) 1998-12-28 1998-12-28 マルチプロセッサシステム

Publications (3)

Publication Number Publication Date
JP2000194680A JP2000194680A (ja) 2000-07-14
JP2000194680A5 JP2000194680A5 (ja) 2005-07-21
JP3858492B2 true JP3858492B2 (ja) 2006-12-13

Family

ID=18501026

Family Applications (1)

Application Number Title Priority Date Filing Date
JP37277298A Expired - Fee Related JP3858492B2 (ja) 1998-12-28 1998-12-28 マルチプロセッサシステム

Country Status (2)

Country Link
US (1) US6466988B1 (ja)
JP (1) JP3858492B2 (ja)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6748518B1 (en) * 2000-06-06 2004-06-08 International Business Machines Corporation Multi-level multiprocessor speculation mechanism
US6725340B1 (en) * 2000-06-06 2004-04-20 International Business Machines Corporation Mechanism for folding storage barrier operations in a multiprocessor system
US6947963B1 (en) * 2000-06-28 2005-09-20 Pluris, Inc Methods and apparatus for synchronizing and propagating distributed routing databases
US20040139145A1 (en) * 2000-12-21 2004-07-15 Bar-Or Gigy Method and apparatus for scalable distributed storage
JP3628265B2 (ja) * 2001-02-21 2005-03-09 株式会社半導体理工学研究センター マルチプロセッサシステム装置
US7100021B1 (en) * 2001-10-16 2006-08-29 Cisco Technology, Inc. Barrier synchronization mechanism for processors of a systolic array
US6986022B1 (en) * 2001-10-16 2006-01-10 Cisco Technology, Inc. Boundary synchronization mechanism for a processor of a systolic array
JP3798726B2 (ja) * 2002-04-26 2006-07-19 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ・アクセス順序付け及びロック管理の方法、装置、プログラム及び記録媒体
US7493417B2 (en) * 2002-12-12 2009-02-17 International Business Machines Corporation Method and data processing system for microprocessor communication using a processor interconnect in a multi-processor system
US7359932B2 (en) * 2002-12-12 2008-04-15 International Business Machines Corporation Method and data processing system for microprocessor communication in a cluster-based multi-processor system
US7360067B2 (en) * 2002-12-12 2008-04-15 International Business Machines Corporation Method and data processing system for microprocessor communication in a cluster-based multi-processor wireless network
US7356568B2 (en) * 2002-12-12 2008-04-08 International Business Machines Corporation Method, processing unit and data processing system for microprocessor communication in a multi-processor system
US7073031B1 (en) * 2003-12-18 2006-07-04 Emc Corporation Multi-processor system having data coherency
US7606998B2 (en) * 2004-09-10 2009-10-20 Cavium Networks, Inc. Store instruction ordering for multi-core processor
US7428619B2 (en) * 2005-01-18 2008-09-23 Sony Computer Entertainment Inc. Methods and apparatus for providing synchronization of shared data
JP4372043B2 (ja) * 2005-05-12 2009-11-25 株式会社ソニー・コンピュータエンタテインメント コマンド実行制御装置、コマンド実行指示装置およびコマンド実行制御方法
US20080098178A1 (en) * 2006-10-23 2008-04-24 Veazey Judson E Data storage on a switching system coupling multiple processors of a computer system
JP2009176116A (ja) * 2008-01-25 2009-08-06 Univ Waseda マルチプロセッサシステムおよびマルチプロセッサシステムの同期方法
JP4631948B2 (ja) 2008-08-13 2011-02-16 日本電気株式会社 情報処理装置及び順序保証方式
JP5225010B2 (ja) 2008-10-14 2013-07-03 キヤノン株式会社 プロセッサ間通信方法、マルチプロセッサシステム及びプロセッサ。
WO2010095166A1 (en) * 2009-02-17 2010-08-26 Hitachi, Ltd. Storage controller and method of controlling storage controller
GB2474446A (en) * 2009-10-13 2011-04-20 Advanced Risc Mach Ltd Barrier requests to maintain transaction order in an interconnect with multiple paths
WO2011058639A1 (ja) * 2009-11-12 2011-05-19 富士通株式会社 通信方法、情報処理装置及びプログラム
JP2012203687A (ja) * 2011-03-25 2012-10-22 Nec Corp 通信装置、通信方法、およびプログラム
US8935513B2 (en) * 2012-02-08 2015-01-13 International Business Machines Corporation Processor performance improvement for instruction sequences that include barrier instructions
US9652300B2 (en) * 2012-06-28 2017-05-16 Intel Corporation Systems, methods, and computer program products for preemption of threads at a synchronization barrier
US9122401B2 (en) * 2012-08-23 2015-09-01 Apple Inc. Efficient enforcement of command execution order in solid state drives
US9304954B2 (en) * 2012-10-24 2016-04-05 Texas Instruments Incorporated Multi processor bridge with mixed Endian mode support
US9582256B2 (en) * 2013-03-14 2017-02-28 Sas Institute Inc. Automated cooperative concurrency with minimal syntax
JP2013137833A (ja) * 2013-04-08 2013-07-11 Waseda Univ マルチプロセッサシステムおよびマルチプロセッサシステムの同期方法
JP6176166B2 (ja) * 2014-03-25 2017-08-09 株式会社デンソー データ処理装置
JP5811245B1 (ja) * 2014-07-24 2015-11-11 日本電気株式会社 情報処理装置、メモリ順序保障方法、及び、プログラム
JP6372331B2 (ja) 2014-12-05 2018-08-15 富士通株式会社 並列演算装置、並列演算システム、および並列演算プログラム
JP2015127982A (ja) * 2015-04-06 2015-07-09 学校法人早稲田大学 マルチプロセッサシステム
US10120814B2 (en) 2016-04-01 2018-11-06 Intel Corporation Apparatus and method for lazy translation lookaside buffer (TLB) coherence
US10067870B2 (en) * 2016-04-01 2018-09-04 Intel Corporation Apparatus and method for low-overhead synchronous page table updates
US10223436B2 (en) * 2016-04-27 2019-03-05 Qualcomm Incorporated Inter-subgroup data sharing
JP6944107B2 (ja) 2017-07-11 2021-10-06 富士通株式会社 情報処理装置、情報処理システム及びプログラム

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5276828A (en) * 1989-03-01 1994-01-04 Digital Equipment Corporation Methods of maintaining cache coherence and processor synchronization in a multiprocessor system using send and receive instructions
US5611070A (en) * 1990-05-10 1997-03-11 Heidelberger; Philip Methods and apparatus for performing a write/load cache protocol
US5848283A (en) * 1993-01-29 1998-12-08 International Business Machines Corporation Method and system for efficient maintenance of data coherency in a multiprocessor system utilizing cache synchronization
US5604882A (en) * 1993-08-27 1997-02-18 International Business Machines Corporation System and method for empty notification from peer cache units to global storage control unit in a multiprocessor data processing system
US5613153A (en) * 1994-10-03 1997-03-18 International Business Machines Corporation Coherency and synchronization mechanisms for I/O channel controllers in a data processing system
US5978874A (en) 1996-07-01 1999-11-02 Sun Microsystems, Inc. Implementing snooping on a split-transaction computer system bus
US5887138A (en) 1996-07-01 1999-03-23 Sun Microsystems, Inc. Multiprocessing computer system employing local and global address spaces and COMA and NUMA access modes
US5958019A (en) 1996-07-01 1999-09-28 Sun Microsystems, Inc. Multiprocessing system configured to perform synchronization operations
US5875468A (en) * 1996-09-04 1999-02-23 Silicon Graphics, Inc. Method to pipeline write misses in shared cache multiprocessor systems
JPH10149285A (ja) 1996-11-18 1998-06-02 Hitachi Ltd 命令実行制御方法および情報処理装置
JP3375505B2 (ja) 1996-12-24 2003-02-10 株式会社日立製作所 同期制御方法および主記憶共有型並列プロセッサ
JP3636871B2 (ja) 1997-09-16 2005-04-06 株式会社日立製作所 並列プロセッサシステム
US6038651A (en) 1998-03-23 2000-03-14 International Business Machines Corporation SMP clusters with remote resource managers for distributing work to other clusters while reducing bus traffic to a minimum

Also Published As

Publication number Publication date
JP2000194680A (ja) 2000-07-14
US6466988B1 (en) 2002-10-15

Similar Documents

Publication Publication Date Title
JP3858492B2 (ja) マルチプロセッサシステム
US6801986B2 (en) Livelock prevention by delaying surrender of ownership upon intervening ownership request during load locked / store conditional atomic memory operation
US9244724B2 (en) Management of transactional memory access requests by a cache memory
US9430166B2 (en) Interaction of transactional storage accesses with other atomic semantics
US8539485B2 (en) Polling using reservation mechanism
US9396115B2 (en) Rewind only transactions in a data processing system supporting transactional storage accesses
US5257354A (en) System for monitoring and undoing execution of instructions beyond a serialization point upon occurrence of in-correct results
US7533227B2 (en) Method for priority scheduling and priority dispatching of store conditional operations in a store queue
US6141734A (en) Method and apparatus for optimizing the performance of LDxL and STxC interlock instructions in the context of a write invalidate protocol
US9342454B2 (en) Nested rewind only and non rewind only transactions in a data processing system supporting transactional storage accesses
US20030145136A1 (en) Method and apparatus for implementing a relaxed ordering model in a computer system
US9792147B2 (en) Transactional storage accesses supporting differing priority levels
JPH0581129A (ja) データ処理システムのキヤツシユ内のデータユニツトに対する所有権変更制御装置
US20040123078A1 (en) Method and apparatus for processing a load-lock instruction using a scoreboard mechanism
US10169103B2 (en) Managing speculative memory access requests in the presence of transactional storage accesses
US7080209B2 (en) Method and apparatus for processing a load-lock instruction using a relaxed lock protocol
US20070288727A1 (en) A method to reduce the number of times in-flight loads are searched by store instructions in a multi-threaded processor
US7519775B2 (en) Enforcing memory-reference ordering requirements at the L2 cache level
JP3461481B2 (ja) タグ更新制御回路
US11693776B2 (en) Variable protection window extension for a target address of a store-conditional request
Dubois et al. Scalability problems in multiprocessors with private caches
JPH0683621A (ja) フェッチ方式
CN115935343A (zh) 基于mshr的超标量risc-v处理器硬件防御幽灵攻击的方法
JP2001166992A (ja) マルチプロセッサシステム

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20041203

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20041203

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20041203

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20060417

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060815

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060911

LAPS Cancellation because of no payment of annual fees