JP2970553B2 - マルチスレッド実行方法 - Google Patents

マルチスレッド実行方法

Info

Publication number
JP2970553B2
JP2970553B2 JP8249272A JP24927296A JP2970553B2 JP 2970553 B2 JP2970553 B2 JP 2970553B2 JP 8249272 A JP8249272 A JP 8249272A JP 24927296 A JP24927296 A JP 24927296A JP 2970553 B2 JP2970553 B2 JP 2970553B2
Authority
JP
Japan
Prior art keywords
register
thread
instruction
contents
execution
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
JP8249272A
Other languages
English (en)
Other versions
JPH1078880A (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.)
NEC Corp
Original Assignee
Nippon Electric Co 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 Nippon Electric Co Ltd filed Critical Nippon Electric Co Ltd
Priority to JP8249272A priority Critical patent/JP2970553B2/ja
Priority to US08/900,643 priority patent/US5913059A/en
Publication of JPH1078880A publication Critical patent/JPH1078880A/ja
Application granted granted Critical
Publication of JP2970553B2 publication Critical patent/JP2970553B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は複数の命令を同時に
実行する高性能なマイクロプロセッサに関し、特にマル
チスレッド実行方法に関する。
【0002】
【従来の技術】プロセッサの高速化の技術として、複数
の演算装置を用意し、命令単位の並列性を利用して複数
の演算装置に同時に命令を発行することにより処理速度
を向上る方式が実用化されている。この方式を用いた場
合、理想的には1クロックで複数の命令を実行すること
が可能である。
【0003】しかしながら、現実には命令間に依存関係
が存在し、前の命令が終了しないと後ろの命令が実行で
きない場合が存在するため、同時に実行できる命令数は
制限されてしまう。また、条件分岐命令によって、命令
がスムーズに演算装置に供給できないという現象も生じ
る。これらのことから、演算装置を無限に増やした場合
にも、実際には3〜4倍の性能向上に抑えられてしまう
といわれている。
【0004】このような性能向上の限界は、Monic
a S.Lam氏らが1992年に発表した論文(Mo
nica S.Lam and Robert P.W
ilsn,”Limits of Control F
low on Parallelsim”,IThe
19th International Sympos
ium on Computer Architect
ure,IEEE Computer Society
Press,1992,pp.46−57)に述べら
れている。
【0005】この限界を踏まえ、さらなる性能向上を図
る手段として、 ○命令単位の並列処理をさらに進めるために、非プログ
ラム順序実行機構(out−of−order実行機
構)やレジスタリネーミング機構を導入し、命令間の依
存関係を少なくする。 ○プログラムを複数の命令流(スレッド)に分割して、
そのスレッドレベルで並列処理を行う。などの技術が提
案されている。
【0006】最初の項目の、out−of−order
実行機構はプログラムの実行順序に従わずに実行可能に
なった命令から先に実行するための機構である。このた
めには、レジスタ間でデータの直接の依存関係はない
が、レジスタ割り付けの際にレジスタ数不足によって生
じるような偽りの依存関係を解消する必要がある。この
ような依存に対して、ソフトウェアで指定されたレジス
タの名前に対し、ハードウェアによって別のレジスタの
名前に写し変えることを行うのが、レジスタリネーミン
グ機構である。
【0007】例えば、以下のプログラム順序で命令が与
えられているとする。 10 add r1←r2+r3 14 sub r4←r1−r5 18 add r5←r6+r7 1c sub r8←r4−r5 ここで、0x14番地のsub命令は、0x10番地の
add命令の結果(r1レジスタ)を用いているので、
直接のデータ依存関係があることになる。同様に0x1
c番地のsub命令は、r5レジスタを介して0x18
番地のadd命令と依存関係がある。しかしながら、0
x14番地のsub命令で読み出し参照され、0x18
番地のadd命令で書き込み参照されるr5レジスタに
は、データの依存関係は存在しないが、レジスタの再使
用による偽りの依存関係が存在する。従って、out−
of−order実行機構を備えるだけでは、0x18
番地のadd命令は0x14番地のsub命令を追い越
すことはできない。レジスタリネーミング機構は、この
ような場合に、0x14番地のr5と0x18番地のr
5を異なったレジスタにリネーミングすることによっ
て、out−of−order実行を可能とするもので
ある。
【0008】このレジスタリネーミング機構は、リオー
ダバッファ方式とレジスタ写像テーブル方式の2種類に
大別される。図30にリオーダバッファ方式の構成図
を、図31にレジスタ写像テーブル方式の構成図を示
す。
【0009】リオーダバッファ方式は、out−of−
orderで計算された演算結果をすべてリオーダ・バ
ッファ123と呼ばれる命令毎にエントリが確保される
バッファに一旦格納し、このリオーダ・バッファ123
からプログラム順序でレジスタファイル122に書き戻
しを行う。後続命令はリオーダ・バッファ123からの
値をレジスタファイル122からの値に優先して用いる
ことによって、out−of−order実行のレジス
タリネーミングを実現する。
【0010】また、レジスタ写像テーブル方式は、プロ
グラムから指定する論理レジスタ番号を物理レジスタ番
号にレジスタ写像テーブル124によって変換して、レ
ジスタリネーミングを行う。レジスタに書き込みが生じ
る度に、レジスタフリーテーブル128から指定された
未使用の物理レジスタを論理レジスタに割り付ける。ま
た、有効命令順序バッファ126によって命令がプログ
ラム順序で終了する度に、その命令が新たに生成する前
の古い写像関係にある物理レジスタを未使用状態にす
る。このように物理レジスタを使い回すことによって、
レジスタリネーミングを実現する。
【0011】このような機構を用いた例として、リオー
ダバッファ方式は米Intel社のPentium−P
roプロセッサ、レジスタ写像テーブル方式は米MIP
STechnology INC.社の10000プ
ロセッサなどの例があげられる。
【0012】しかしながら、このような機構を用いた場
合にもout−of−order実行可能な命令の範囲
は最も古い命令から16〜32命令程度であり、実行可
能な命令があまり存在しないことも多い。また、この範
囲を現実的な範囲で増やした場合も実行できる命令より
も依存などによって実行できない命令が多く入ることに
なり、ハードウェア量増加分の性能向上は見込めない。
【0013】一方、二つ目の項目に示したスレッドレベ
ルの並列処理方式は、命令単位の並列性ではなく、複数
のスレッドの命令を並列に実行することにより演算装置
の利用効率をあげて処理速度向上を図る方法である。こ
の方法では、スレッド間では依存関係が少ないため前記
の命令レベルの並列処理より性能向上が図りやすい。
【0014】このスレッドレベルの並列処理は、 ○全くスレッド間に依存関係のないもの。 ○1スレッドの実行命令が多く、スレッド間の依存関係
が少なく、ソフトウェアによって依存を解消しても性能
上問題の少ないもの。 ○1スレッドの実行命令が少なく、かつスレッド間の依
存関係が多いため、ハードウェアによってスレッドレベ
ル並列処理の実行支援が必要なもの。 に大別される。
【0015】スレッド間で依存が全くない場合や、依存
が少なくスレッド粒度の大きいものでは、ハードウェア
によるサポートはほとんど必要ない。このような場合の
プロセッサの並列方法の実施例としては、平田氏らが1
993年に発表した論文(平田 博章,木村 浩三,永
峰 聡,西澤 貞次,鷺島 敬之,「多重スレッド・多
重命令発行を用いる要素プロセッサ・アーキテクチ
ャ」,情報処理学会論文誌,1993年 Vol34
No.4 pp.595−605)で提案された方法な
どがあげられる。この方法の実施例を図32に示す。
【0016】図32の例は、命令取得装置129,命令
解読装置130,機能実行装置131,命令間の依存解
析装置132,機能実行装置131をスケジュールする
命令調停装置133から構成される。命令解読装置13
0は命令調停装置133が命令を受け入れられる状態に
あり、また、命令依存解析装置132から、命令発行可
能である旨の指示を受けている場合に、命令を発行す
る。各々の命令解読装置130から発行された命令は、
命令調停装置133によって、必要な機能実行装置13
1に割り当てられ、実際の実行が行われる。この命令調
停装置133によって、機能実行装置131は各命令間
で共有され、利用効率を向上させることが可能となる。
また、命令調停装置133を機能実行装置131毎に分
散することにより、命令調停装置133の簡単化が可能
である。
【0017】しかしながら、この方法では、スレッドの
生成や演算データのスレッド間の伝達に対しては考慮さ
れていない。従って、単一タスクを複数スレッドに分割
し、そのタスクを高速化する場合に対処できるものでは
なかった。
【0018】単一タスクの処理を高速化する際には、効
率的なスレッド生成とスレッド間のデータの引き渡しが
不可欠である。このような、細粒度スレッドの並列処理
プロセッサの例として、Gurinder S.Soh
i氏らが1995年に発表した論文(Gurinder
S.Sohi,Scott E.Breach an
d T.N.Vijaykumar,“Multisc
alar Processor”,The 22nd
International Symposium o
n Computer Architecture,I
EEE Computer Society Pres
s,1995,pp.414−425)があげられる。
【0019】Multiscalar Process
orでは、単一のプログラムをいくつかの基本ブロック
の集合である「タスク」に分割し、これを並列に実行処
理できるプロセッサで処理する。タスク間でのレジスタ
内容の引渡しは、タスク生成コンパイラによって生成さ
れたtask descriptorによって指定す
る。task descriptorでは、生成される
可能性のあるレジスタを明示的に指定する。この指定を
create maskと呼ぶ。また、最後にcrea
te maskに指定したレジスタを更新する命令には
フォワードビットを付加する。このように、Multi
scalar Processorはコンパイラ解析能
力に依存したコードによって並列実行を行う。
【0020】図33は、このMultiscalar
Processorの実施例である。Multisca
lar Processorはシーケンサ134,プロ
セッシングユニット135,結合ネットワーク136,
データバンク137から構成される。プロセッシングユ
ニット135は命令キャッシュ138,実行ユニット1
39,レジスタファイル140から構成され、システム
に複数存在する。また、対応してデータバンク137も
複数存在し、ARB(Address Resolut
ion Buffer)141,データキャッシュ14
2から構成される。複数のタスクの同時実行の管理はシ
ーケンサ134によって行われ、各プロセッシングユニ
ット135にタスクを割り付ける。レジスタの内容はt
askdescriptorの指定によって、データ生
成時点でフォワードされる。
【0021】しかしながら、従来コードをスレッドレベ
ル並列処理に変換する場合や、依存解析の難しいコード
に対してはMultiscalar Processo
rでは性能向上は図れない。また、コードサイズがta
sk descriptorによって増加するという問
題点も生じる。また、out−of−order実行に
対応した技術でないため、既存の命令レベル並列処理に
よる性能向上が行えず、従来技術に比しての性能向上が
限られていた。
【0022】
【発明が解決しようとする課題】従来のスレッドレベル
並列処理のスレッド生成技術では、明示的にレジスタの
内容を継承させるか、メモリを経由して継承させるた
め、フォーク時に自動的にはレジスタ内容は引き継がれ
なかった。この為、レジスタ依存を記述するか、メモリ
に対するストア/ロードを用いて新規生成スレッドに対
してデータを引き継ぐ必要があった。従って、スレッド
を生成する時には生成側にも被生成側にもスレッド生成
にともなうデータ継承のため命令を挿入する必要があっ
た。
【0023】また、out−of−order実行型の
プロセッサでは、同期命令などについてはその正当性を
保つためにin−order実行を行っているが、この
場合の性能低下は顕著であった。従って、フォーク命令
によってスレッドを生成し、細粒度スレッドの場合でも
処理速度向上を目指す場合には、フォーク命令前と後の
命令間でもout−of−order実行する必要があ
った。
【0024】本発明の目的はこのようなスレッドレベル
の並列処理を行う際に、新規生成スレッドに効率的にレ
ジスタの内容を継承させることによって、プログラムの
並列性,演算器の使用効率を向上させ、細粒度のスレッ
ドに対しても高性能並列処理を可能としたマルチスレ
ッド実行方法を提供することにある。
【0025】
【課題を解決するための手段】本発明の第1の発明は、
論理的に複数のプログラムカウンタを有し、これらのプ
ログラムカウンタに従った複数のスレッドの命令を同時
にフェッチ,解釈,実行するスレッド実行手段(図2の
5a,5b)と、独立した論理的なレジスタファイル
(図2の6a,6b)とを備え、単一のスレッド中の指
定された命令によって、新たなスレッド(子スレッド)
の実行を開始する機能を備えたプロセッサにおいて、子
スレッド実行開始命令を実行するスレッド(親スレッ
ド)の命令実行時点のレジスタファイルの内容を直接転
送することによって子スレッドのレジスタファイルに継
承することを特徴とする(図1)。
【0026】また第2の発明は、第1の発明において、
スレッド毎に複数のレジスタファイル(図4の13a,
13b)及びレジスタ選択手段(図4の12a,12
b)を備えると共に、レジスタ内容転送手段(図4の1
50)を備え、子スレッドは、前記レジスタ選択手段に
よって親スレッドのレジスタファイルを参照し、レジス
タの変更が行われる毎に、前記レジスタ内容転送手段に
よって順次新スレッドのレジスタファイルに、変更する
前のレジスタ内容を転送し、前記レジスタ選択手段の選
択内容を子スレッド側のレジスタファイルに切替えるこ
とによってレジスタファイルを継承させることを特徴と
する。
【0027】また第3の発明は、第1の発明において、
親スレッドのプログラムにおける子スレッド実行開始命
令とその前後に配置される他の演算命令との間で、プロ
グラムの意味を変えない範囲内において非プログラム順
序に実行することを特徴とする(図8)。
【0028】また第4の発明は、第3の発明において、
演算の結果とレジスタ番号を指定するタグを一時的に格
納するリオーダバッファを持ち、命令をデコードした際
に、そのリオーダバッファのエントリを確保し、命令を
プログラムで指定された順序ではなく、必要なレジスタ
の値が使用可能になったものからレジスタ及びリオーダ
バッファの当該命令よりも前のエントリから供給するこ
とによって演算を行い、演算結果を命令デコード時に確
保したリオーダバッファのエントリに格納し、そのリオ
ーダバッファからはプログラム順序でレジスタ内容の更
新を行うことによって、プログラムの順序に従わずに処
理を進める非プログラム順序実行型プロセッサにおい
て、複数のプログラムカウンタを有し、これらのプログ
ラムカウンタに従った複数のスレッドの命令を同時にフ
ェッチ,解釈,実行するスレッド実行手段(図9の21
a,21b)と、複数のレジスタファイル(図9の25
a,25b)およびリオーダバッファ(図9の24a,
24b)を設け、親スレッドと子スレッドの両者のレジ
スタファイルおよびリオーダバッファからの内容出力を
選択するレジスタデータセレクタ装置(26a,26
b)を設け、子スレッド生成命令が親スレッド内でプロ
グラム順序で完了した時点で、親スレッドを実行してい
るレジスタファイルの内容を子スレッドを実行している
レジスタファイルにコピーすることによって、コピー前
は親スレッドのレジスタファイル,リオーダバッファお
よび子スレッドのリオーダバッファからレジスタ内容を
選択し、コピー後は子スレッドのリオーダバッファおよ
びレジスタファイルからレジスタ内容を選択することに
よってレジスタの継承を行うことを特徴とする。
【0029】また第5の発明は、第3の発明において、
演算の結果とレジスタ番号を指定するタグを一時的に格
納するリオーダバッファを持ち、命令をデコードした際
に、そのリオーダバッファのエントリを確保し、命令を
プログラムで指定された順序ではなく、必要なレジスタ
の値が使用可能になったものからレジスタ及びリオーダ
バッファの当該命令よりも前のエントリから供給するこ
とによって演算を行い、演算結果を命令デコード時に確
保したリオーダバッファのエントリに格納し、そのリオ
ーダバッファからはプログラム順序でレジスタ内容の更
新を行うことによって、プログラムの順序に従わずに処
理を進める非プログラム順序実行型プロセッサにおい
て、複数のプログラムカウンタを有し、これらのプログ
ラムカウンタに従った複数のスレッドの命令を同時にフ
ェッチ,解釈,実行するスレッド実行手段(図15の5
0a,50b)と、複数のレジスタファイル(図15の
54a,54b)およびリオーダバッファ(53a,5
3b)を設け、親スレッドと子スレッドの両者のリオー
ダバッファ及び子スレッドのレジスタファイルからの内
容出力を選択するレジスタデータセレクタ装置(55
a,55b)を設け、レジスタファイルの内容のコピー
を子スレッド生成が行われた時点で行うこととして、そ
の後は親スレッドのリオーダバッファから、親スレッド
のレジスタファイルと子スレッドのレジスタファイルに
書き込みを行い、スレッド生成命令がプログラム順序で
終了する前は親スレッドのリオーダバッファ,子スレッ
ドのレジスタファイルおよびリオーダバッファからレジ
スタ内容を選択し、プログラム順序で終了した後は子ス
レッドのリオーダバッファおよびレジスタファイルから
レジスタ内容を選択することによってレジスタの継承を
行うことを特徴とする。
【0030】また第6の発明は、第4または第5の発明
において、レジスタファイルのコピーを複数回の転送サ
イクルによって行うレジスタ内容転送手段(図17の6
0,61等)を用い、レジスタ内容の転送が済んだレジ
スタファイル部分から、新スレッドにおいて、参照を許
可することを特徴とする。
【0031】また第7の発明は、第4,第5または第6
の発明において、スレッド生成命令を実行した時点で、
そのスレッドを実行できる資源が確保できない場合に、
レジスタの内容を退避用レジスタファイル(図19の7
2)に蓄えることによって、プロセッサの許容数以上の
スレッドが同時に存在し得るようにしたことを特徴とす
る。
【0032】また第8の発明は、論理的に複数のプログ
ラムカウンタを有し、これらのプログラムカウンタに従
った複数のスレッドの命令を同時にフェッチ,解釈,実
行するスレッド実行手段と、物理的には共有しており論
理的には独立したレジスタファイルと、論理レジスタと
物理共有レジスタとの対応関係を可変とし、この対応関
係を記憶した写像テーブルとを備え、単一のスレッド中
の指定された命令によって、新たなスレッド(子スレッ
ド)の実行を開始する機能を備えたプロセッサにおい
て、子スレッド実行開始命令を実行するスレッド(親ス
レッド)の命令実行時点のレジスタファイルの内容を子
スレッドのレジスタファイルに、写像関係をコピーする
ことによって継承することを特徴とする。また、その好
ましい実施例においては、親スレッドのプログラムにお
ける子スレッド実行開始命令とその前後に配置される他
の演算命令との間で、プログラムの意味を変えない範囲
内において非プログラム順序に実行することを特徴とす
る。より具体的には、プログラムから指定する論理レジ
スタとハードウェアに実行される物理レジスタとの対応
関係を可変とし、この対応関係を記録,更新,検索する
レジスタ写像テーブルを備え、論理レジスタに対して値
の書き込みを行おうとする毎に物理レジスタとの新しい
対応関係を生成し、対応する物理レジスタに値の書き込
みが完了した時点で読み出しを許可し、命令がプログラ
ム順序に完了した時点で、論理レジスタとの古い対応関
係になっていた物理レジスタを未使用状態にすることに
よって、非プログラム順序で命令を実行するプロセッサ
において、複数のプログラムカウンタを有し、これらの
プログラムカウンタに従った複数のスレッドの命令を同
時にフェッチ,解釈,実行するスレッド実行手段(図2
0の73a,73b)を設け、前記複数のスレッド実行
手段から参照できる共有の物理レジスタファイル(図2
0の78)と、この共有の物理レジスタファイルの使用
状態保持手段(図20の81,82)と、複数のレジス
タ写像テーブル(図20の76a,76b)とを設け、
子スレッド実行開始命令を解釈した時点で、これらのレ
ジスタ写像テーブル間で内容をコピーすることによって
レジスタの継承を行い、継承した物理レジスタを親スレ
ッド,子スレッド両者で対応する論理レジスタに書き込
みを行った時点で、未使用状態にすることによってレジ
スタの継承を行うことを特徴とする。
【0033】また第9の発明は、第8の発明において、
レジスタ写像テーブルの内容のコピーを複数回の転送サ
イクルによって行い、新スレッドにおいて、対応関係の
転送が済んだものから使用可能にすることを特徴とす
る。
【0034】また第10の発明は、第8または第9の発
明において、スレッド生成命令を実行した時点で、その
スレッドを実行できる資源が確保できない場合に、レジ
スタ写像テーブルの内容を退避用レジスタ写像テーブル
(図24の98)に蓄えることにより、プロセッサの許
容数以上のスレッドが同時に存在し得るようにすること
を特徴とする。
【0035】また第11の発明は、第2ないし第10の
発明において、親スレッドから子スレッドを生成する回
数を高々1回に制限し、スレッドの消滅順序を親スレッ
ドを子スレッドより先にすることによって、隣接するス
レッド実行手段に限定してレジスタ内容継承を行うよう
にしたことを特徴とする。
【0036】第1の発明ではフォーク命令を行った時点
で、新規生成スレッドに対してレジスタ内容が継承され
る。この方法を用いる場合には、レジスタに格納できる
範囲内のデータ数であれば、メモリに対するストア/ロ
ードを省くことが可能になる。
【0037】また第2の発明では、複数のレジスタファ
イルを選択する手段を用いて、レジスタファイルの内容
の物理的なコピーを行わずに、レジスタ内容の継承を実
現できる。
【0038】また第3の発明では、プログラム順序にお
いて新規スレッドを生成する命令より前の命令の実行完
了を待たずに、新規スレッドを生成する。また、新規ス
レッド生成命令より後続の命令がスレッド生成を行う前
に実行完了できる。そして、このときに継承させるレジ
スタの内容はプログラム順序における新規スレッド実行
命令時の内容とする処理方法を採用する。このような処
理方法を実現するため、第4から第7の発明では、リオ
ーダバッファを用いたout−of−order型実行
を行い、レジスタファイルの内容をコピーするタイミン
グを工夫し、コピーが終了する前や、値が確定するまで
は異なったレジスタファイルやリオーダバッファをアク
セスするようにして、レジスタ内容を継承する。フォー
ク命令がプログラム順序に従ってレジスタ内容を更新し
た際に、レジスタの内容を確定させその後は新スレッド
用のレジスタを用いることによってレジスタ内容を継承
する。また、第8から第10までの発明では、ソフトウ
ェアによって指定する論理レジスタを物理レジスタに写
像するためのレジスタ写像テーブルを用いたレジスタリ
ネーミングを行い、このレジスタ写像テーブルを物理的
に同時に実行するスレッド数に応じて複数用意する。新
たなスレッドが生成される際には、この写像情報をコピ
ーする。プロセッサに存在する物理的なレジスタはすべ
てスレッドから共有され、この写像情報によって各々の
スレッドが使用する。
【0039】以下に図面を参照して本発明をより具体的
に説明するが、以下の開示は本発明の一実施例に過ぎ
ず、本発明の技術的範囲をなんら限定するものではな
い。
【0040】
【発明の実施の形態】図1は本発明の第1の発明におけ
るレジスタ内容の継承方法の概念図である。図1に示す
ように、新スレッドを生成するスレッド(親スレッド)
1がその実行フローの実行途中においてスレッド生成命
令(フォーク命令)2を実行して新スレッド(子スレッ
ド)3を生成すると、子スレッド3のレジスタファイル
に親スレッド1がフォーク命令2を実行した時点の内容
を継承させる。
【0041】図2は上記のようなレジスタ内容の継承方
法を実現する2スレッド並列実行型プロセッサの実施例
のブロック図である。この例のプロセッサは、スレッド
管理手段4,スレッド実行手段5a,5b,レジスタフ
ァイル6a,6b,レジスタ内容一括転送手段7および
共有メモリ8から構成される。
【0042】スレッド管理手段4は、プロセッサ全体の
スレッドの実行管理を行う。また、スレッド実行手段5
a,5b,レジスタファイル6a,6bは同時実行可能
なスレッド数と同数用意され、通常のプロセッサ同様プ
ログラムコード中の命令を実行し、レジスタファイル6
a,6bおよび共有メモリ8に結果を書き込みながら処
理を進める。
【0043】以下、スレッド生成時の動作を時間順序を
追って説明する。図3は図2に示した実施例のプロセッ
サにおけるスレッド生成時のタイミングチャートであ
る。図3において、(A)はプロセッサ全体のクロッ
ク、(B)はスレッド実行手段#0 5aの実行状態、
(C)はレジスタファイル#0 6aのアクセス状態、
(D)はスレッド実行手段#1 5bの実行状況、
(E)はレジスタファイル#16bのアクセス状態、
(F)はスレッド管理手段4のアクセス状況を示す。
【0044】図3のタイミングチャートの開始時点では
スレッド実行手段#0 5aにおいてのみ処理が行われ
ており、スレッド実行手段#1 5bは実行待ち状態で
ある。従ってレジスタファイル#1 6bに対するアク
セスは生じない。
【0045】サイクル6において、スレッド実行手段#
0 5aはフォーク命令を実行すると、スレッド管理手
段4に対してスレッド生成要求を行う。スレッド管理手
段4は実行待ち状態のスレッド実行手段を検索し、新し
いスレッドを実行するスレッド実行手段を決定する。図
3の場合、(D)で示されるスレッド実行手段#15b
が実行待ち状態であるので、ここで新しいスレッドを実
行することを決定し、スレッド管理手段4はスレッド実
行手段#1 5bに対してスレッド起動要求を行う。同
時に、スレッド管理手段4は、レジスタ内容一括転送手
段7に対してレジスタファイル#0 6aからレジスタ
ファイル#1 6bへのレジスタ内容のコピー要求を行
う。レジスタ内容一括転送手段7は、この要求に従いレ
ジスタファイル#0 6aからレジスタファイル#1
6bへのレジスタ内容のコピーを行う。これらの動作に
よって、サイクル7からは、二つのスレッドが並列に実
行され、子スレッド3では、初期値を共有メモリ8から
ロードすることによってレジスタファイル6にセットす
る必要が無くなり、親スレッド1では必要なデータをレ
ジスタファイル6から共有メモリ8にストアする必要が
なくなり、効率的な新スレッド生成が可能になる。な
お、並列動作ではレジスタファイル6a,6bは独立に
参照,更新されることになる。
【0046】次に、第2の発明について説明する。図4
はその実施例の2スレッド並列実行型プロセッサのブロ
ック図であり、スレッド実行手段を9a,9bの二つ持
ち、各々のスレッド実行手段9a,9bは、命令キャッ
シュ10a,10b,命令デコーダ11a,11b,レ
ジスタ選択手段12a,12b,レジスタファイル13
a,13b,演算ユニット14a,14bを各々持って
いる。また、共有のスレッド管理手段15とレジスタ内
容転送手段150が存在する。なお、共有メモリについ
ては直接関係しないので、図4からは省いてある。
【0047】図5はレジスタ選択手段#1 12bの構
成例を示すブロック図である。レジスタ選択手段#0
12aも同等の構造であり、レジスタ選択テーブル16
に各レジスタの選択ビット17を持っている。本実施例
の場合、レジスタ選択ビット17が0の場合にはレジス
タファイル#0 13aを、1の場合にはレジスタファ
イル#1 13bを選択する。
【0048】図6はレジスタファイル#0 13aの構
成例を示すブロック図であり、レジスタファイル#1
13bも同等の構造である。レジスタファイル#0 1
3aは、各レジスタ毎にレジスタ内容メモリ18の他
に、転送終了ビット19,更新ビット20を持つ。転送
終了ビット19は、スレッド管理手段15によって、子
スレッド生成時に初期化(リセット)され、レジスタ内
容メモリ18の内容を他のレジスタファイル13に転送
した際にセットされる。また、更新ビット20は、スレ
ッド起動時に初期化(リセット)され、レジスタを自分
の属する演算ユニット14で更新した場合にセットされ
る。
【0049】以下、スレッド生成時のレジスタ内容の継
承方法を具体例を用いて説明する。図7は、図4に示し
た実施例のプロセッサのタイミングチャートである。図
7において、(A)はプロセッサ全体のクロック、
(B)は演算ユニット#0 14a(親スレッド)で実
行している命令もしくは書き込みされるレジスタ番号、
(C)は親スレッドによるレジスタファイル#0 13
aに対するレジスタ内容の書き込み、(D)はレジスタ
内容の転送によるレジスタファイル#0 13aに対す
るレジスタ内容の読み出し、(E)はレジスタファイル
#0 13a中の転送終了ビット19の状態、(F)は
スレッド管理手段15のアクセス状況、(G)は演算ユ
ニット#1 14b(子スレッド)で実行している命令
もしくは読み出し/書き込みされるレジスタ番号、
(H),(I)は子スレッドによるレジスタファイル1
3の読み出し、(J)はレジスタファイル#1 13b
への書き込み、(K)はレジスタファイル#1 13b
中の更新ビット20の状態、(L)はレジスタ選択手段
#1 12b中のレジスタ選択ビット17の状態を示
す。
【0050】図7のタイミングチャートの開始時点で
は、スレッドはスレッド実行手段#09aのみで実行さ
れている。このスレッドを親スレッドとしている。サイ
クル2において、親スレッドはフォーク命令を実行す
る。スレッド管理手段15は、レジスタファイル#0
13aの転送終了ビット19と、レジスタファイル#1
13bの更新ビット20と、レジスタ選択手段#1 1
2b中のレジスタ選択ビット17の初期化要求を行う。
このフォーク命令の実行によってサイクル3以降はサイ
クル2のフォーク命令による子スレッドがスレッド実行
手段#1 9bで実行が開始される。
【0051】サイクル3において親スレッドを実行して
いるスレッド実行手段#0 9aではレジスタr1に対
する書き込みが生じる前に、スレッド実行手段#1 9
bにr1のレジスタ内容を転送するために読み出しが行
われる。これがサイクル3前半の(D)に示されてい
る。この内容はスレッド実行手段#1 9bのレジスタ
ファイル#1 13bに転送され(J)で示されるよう
に書き込みが行われる。同時に、レジスタファイル#0
13aの転送終了ビット19と、レジスタファイル#
1 13bの更新ビット20のレジスタr1のエントリ
をセットし、レジスタ選択手段#1 12b中のレジス
タ選択ビット17をr1についてはレジスタファイル#
1 13bから選択するようにセットする。
【0052】また、同サイクルにおいて子スレッドを実
行しているスレッド実行手段#19bではレジスタr
7,r10を読み出し参照する。この読み出しはレジス
タ選択手段#1 12bの内容に従ってレジスタファイ
ル#0 13aから読み出す。また、同サイクルにおけ
る子スレッドはr3に対して書き込みを行うが、この際
にレジスタ選択手段#1 12b中のレジスタ選択ビッ
ト17のr3をレジスタファイル#1 13bから選択
するようにセットする。同時にレジスタファイル#1
13bの更新ビット20のr3エントリをセットする。
【0053】サイクル4も同様の処理が行われ、r5の
内容が転送され、レジスタファイル#0 13aの転送
終了ビット19と、レジスタファイル#1 13bの更
新ビット20と、レジスタ選択手段#1 12b中のレ
ジスタ選択ビット17のレジスタr5のエントリがセッ
トされる。また、同サイクルにおいてレジスタ選択手段
#1 12b中のレジスタ選択ビット17と、レジスタ
ファイル#1 13bの更新ビット20のr2エントリ
をセットする。
【0054】次に、サイクル5では親スレッドを実行し
ているスレッド実行手段#0 9aでは再びレジスタr
1に対する書き込みを行う命令を実行する。しかしなが
ら、レジスタファイル#0 13aの転送終了ビット1
9のr1エントリは既にセットされているので、レジス
タ内容の転送は行われない。また、同サイクルにおいて
子スレッドを実行しているスレッド実行手段#1 9b
ではレジスタr3,r5を読み出し参照する。この読み
出しはレジスタ選択手段#1 12bの該当エントリは
セットされているのでレジスタファイル#1 13bか
ら読み出す。
【0055】次に、サイクル6では親スレッドを実行し
ているスレッド実行手段#0 9aではレジスタr2に
対する書き込みを行う命令を実行し、レジスタの内容が
転送される。しかしながら、レジスタファイル#1 1
3bの更新ビット20のr2エントリは既にセットされ
ているので、レジスタファイル#1 13bのレジスタ
内容メモリ18には書き込みは生じない。
【0056】以上の処理によって、スレッド生成のフォ
ーク命令実行時にレジスタファイルの全内容を一括転送
する必要がなくなり、レジスタファイル間の転送バンド
幅を削減しつつ、レジスタ内容を子スレッドに継承する
ことが可能となる。
【0057】本実施例は2スレッド並列実行型プロセッ
サについて説明したが、3スレッド以上の並列処理を行
う際には、スレッド管理ユニットによってレジスタの転
送先を制御し、レジスタファイル間はバスなどで接続し
多対多転送をサポートするような拡張を施せば良い。ま
た、レジスタ選択手段ではどのレジスタファイルを選択
するかを示すレジスタ選択ビットが複数ビットに格納さ
れるが、本質的にレジスタ選択手段を用いることには相
違なく、本発明の範囲内である。
【0058】次に第3の発明について説明する。第3の
発明は、ソフトウェアによるプログラミングモデルでは
第1の発明の方法に従うが、ハードウェアによる実際の
処理は図8に示すように必ずしもプログラム順序に実行
を行わないハードウェア処理方法である。つまり、子ス
レッドには図8で示されたパイプラインの実行イメージ
図において、0x00番地,0x04番地の命令実行に
よるレジスタ内容を継承させ、0x0c番地,0x10
番地の命令実行によるレジスタ内容は継承しない処理方
法である。第4の発明以降はこの処理方法に基づく実施
形態についての発明である。
【0059】次に第4の発明について説明する。図9は
その実施例のブロック図であり、例として2スレッド並
列実行型プロセッサを採り上げている。図9のプロセッ
サは、スレッド実行手段を#0 21aと#1 21b の
二つ持ち、各々は命令キャッシュ22a,22b,命令
デコーダ23a,23b,リオーダバッファ24a,2
4b,レジスタファイル25a,25b,レジスタデー
タセレクタ装置26a,26b,命令キュー27a,2
7b,演算ユニット28a,28bを持っている。ま
た、共有のスレッド管理手段29が存在する。
【0060】図10は、命令キュー#0 27aの構成
例を示すブロック図であり、命令キュー#1 27bも
同様の構造である。命令キュー27は、デコードした命
令について、必要なレジスタの値が確定し演算できるよ
うになるまで待ち合わせる機構であり、キューエントリ
格納論理30,発行命令決定論理31,命令キューエン
トリ32から構成される。
【0061】命令キューエントリ32は、命令発行に必
要な情報を蓄えておくもので、エントリ有効ビット3
3,レジスタ内容/リオーダバッファタグ格納メモリ3
4,レジスタ内容有効ビット35,結果書き込み場所指
定タグ36,命令コード格納メモリ37のエントリから
構成される。エントリ有効ビット33はそのエントリに
格納されているデータが有効かどうかを示す。レジスタ
内容/リオーダバッファタグ格納メモリ34は、レジス
タ内容有効ビット35の状態によって格納されている値
が異なる。もし、セットされている場合には対応する命
令の演算に必要なデータ、セットされていない場合には
対応する命令の演算に必要なデータとともに演算ユニッ
トから送られてくるタグ番号である。また、結果書き込
み場所指定タグ36はこの命令の実行による結果を格納
するリオーダバッファ24のタグが格納され、命令コー
ド格納メモリ37のエントリは、命令デコーダ23でデ
コードされた命令種類のコードが格納される。
【0062】キューエントリ格納論理30は、空いてい
るエントリに対して必要なデータを格納する論理であ
り、エントリ有効ビット33の無効なエントリのうち一
つを決定し、レジスタデータセレクタ装置26,命令デ
コーダ23からの情報を格納する。発行命令決定論理3
1は、レジスタ内容有効ビット35が有効になったエン
トリの中から、発行する命令を決定し、演算ユニット2
8に対してその命令を発行する。
【0063】また命令キューエントリ32は、連想メモ
リ形態となっており、レジスタ内容有効ビット35がセ
ットされていないエントリに対して、演算ユニット28
から送られてくるタグ番号と自分の持つタグ番号を比較
して、同一の場合には、演算結果をレジスタ内容/リオ
ーダバッファタグ格納メモリ34に格納し、レジスタ内
容有効ビット35をセットする。
【0064】図11は、リオーダバッファ#0 24a
の構成例を示すブロック図であり、リオーダバッファ#
1 24bも同様の構造である。リオーダバッファ24
は、プログラム順序に従わずに先行して確定したレジス
タ値を保持しておき、プログラム順序に従ってレジスタ
ファイル25に書き戻す機構であり、レジスタデータ供
給決定論理38,エントリシフト制御論理39,リオー
ダバッファエントリ40から構成される。
【0065】リオーダバッファエントリ40は、そのエ
ントリに格納されたデータが有効かどうかを示すエント
リ有効ビット41,演算ユニット28からの結果の書き
戻しの際に用いる結果書き込み指定タグ42,レジスタ
ファイル25への書き戻し場所を指定するための、レジ
スタ番号43,フォーク命令後でレジスタデータを子ス
レッドに継承させる必要を示すスレッド生成ビット4
4,演算ユニット28からの結果を格納する演算データ
格納メモリ46と格納されるとセットされる演算データ
格納メモリ有効ビット45のエントリから構成される。
【0066】リオーダバッファ24は、命令デコーダ2
3から命令を受け取ると、プログラムの命令順序に従っ
てエントリが確保される。つまりエントリはプログラム
命令順に整列していることになる。また、エントリが確
保できない場合には、命令デコードが停止する。また、
フォーク命令実行後の命令を格納する際には、スレッド
生成ビット44をセットする。
【0067】また、命令デコーダ23からソースレジス
タの参照番号も同時に受け取り、これとリオーダバッフ
ァエントリ40中のレジスタ番号43を比較する。同じ
エントリが存在すれば、その中で最も新しいエントリの
演算データ格納メモリ46か結果書き込み指定タグ42
の内容をレジスタデータセレクタ装置26に送る。演算
データ格納メモリ46の内容が送られる場合は、該当エ
ントリの演算が終了しており、演算データ格納メモリ有
効ビット45がセットされている場合である。また、他
のスレッド実行手段21のレジスタデータセレクタ26
に送る場合には、スレッド生成ビット44がセットされ
ていないエントリから選択する。これによって、フォー
ク命令後の親スレッドのレジスタ変更データが子スレッ
ドに送られることを防ぐ。これらの処理をレジスタデー
タ供給決定論理38が行う。
【0068】演算結果が演算ユニット28から来た場合
には、結果書き込み指定タグ42の一致するエントリの
演算データ格納メモリ46に書き込み、演算データ格納
メモリ有効ビット45をセットする。また、演算が終わ
ったものをプログラム順序に従ってレジスタファイル2
5に書き戻し、エントリシフト制御論理39によって、
先頭からエントリをシフトする。なお、シフトを行わず
にリング状のバッファ管理を行うことも可能である。ま
た、フォーク命令がプログラム順序で完全に終了した場
合には、すべてのエントリのスレッド生成ビット44を
リセットする。
【0069】レジスタデータセレクタ装置#1 26b
は、図12に示す論理によって、命令キュー#1 27
bに供給するデータをリオーダバッファ#1 24b,
レジスタファイル#1 25b,リオーダバッファ#
0,24a,レジスタファイル#0 25aの入力デー
タから選択する。レジスタデータ選択装置#0 26a
も同様の論理である。
【0070】以下、図9のプロセッサの実際の動作につ
いて説明する。図9のプロセッサはスレッド生成時以外
の通常時はスレッド実行手段21a,21bでそれぞれ
独立して処理を進める。従って、レジスタデータセレク
タ装置26には、他方のスレッド実行手段21のリオー
ダバッファ24,レジスタファイル25からデータが供
給されることはなく、自らのスレッド実行手段21のリ
オーダバッファ24,レジスタファイル25からのデー
タを選択して、レジスタデータが使用可能になった命令
から実行が行われる。この点においては、リオーダバッ
ファを用いてout−of−order実行を行う従来
のスーパスカラプロセッサの処理方法と相違はない。
【0071】フォーク時の動作モデルを図13に示す。
フォーク命令がスレッド実行手段#0 21aでデコー
ドされると、スレッド管理手段29によってスレッド実
行手段#1 21bで子スレッドの実行が開始される。
しかしながら、レジスタファイル#1 25bには、親
レジスタのデータが継承されていないので、レジスタフ
ァイル#0 25aとリオーダバッファ#0 24aの
データをレジスタデータセレクタ装置#1 26bで選
択して用いて演算を行うことになる。この演算の結果は
リオーダバッファ#1 24bに格納される。従って、
後続命令は、レジスタファイル#0 25aとリオーダ
バッファ#0 24aとリオーダバッファ#1 24b
のデータをレジスタデータセレクタ装置#1 26bで
選択して用いて演算を行う。
【0072】一方、親スレッド側でフォーク命令がプロ
グラム順序で完全終了した時点で、レジスタファイル#
0 25bのすべての値がフォーク命令実行時の値と確
定する。この時に、スレッド管理手段29によってレジ
スタファイル#0 25aの内容をレジスタファイル#
1 25bにコピーする。この動作が終了すると、レジ
スタファイル#1 25bには親レジスタの値が継承さ
れたことになるので、レジスタファイル#1 25bと
リオーダバッファ#1 24bのデータをレジスタデー
タセレクタ装置#1 26bで選択して用いて演算を行
うことになる。また、この時点で、リオーダバッファ#
1 24bのレジスタファイル#1 25bへのレジス
タアップデート動作が可能になる。これによって、ou
t−of−order実行を行うプロセッサにおいても
レジスタ内容の継承が可能になる。
【0073】以上が図9に示した2スレッド並列実行型
プロセッサの実施例の説明である。
【0074】本実施例の他の構成として、命令キュー2
7,演算ユニット28をスレッド間で共有する手法があ
げられる。図14は4スレッド並列実行2演算ユニット
型プロセッサの場合の実施例のブロック図である。図1
4では、命令キャッシュ,命令デコーダ,スレッド管理
手段等は省略しているが、この部分の実際の構成は図9
と同様である。本実施例では新たに、リオーダバッファ
24への結果振り分け装置47a,47bを用意し、演
算ユニット28からの結果を振り分けている。このた
め、命令キュー49には、どの命令デコーダによってデ
コードされた命令であるかを記憶するエントリの追加が
必要である。また、レジスタデータ選択装置48a,4
8bは、選択するレジスタ値がどの命令デコーダの命令
について取り扱っているかの情報が必要となる。また、
4スレッド構成としたので、レジスタファイル25の転
送手段が多対多転送を実現するような構成にする必要が
あり、具体的にはバスなどを用いる必要がある。
【0075】次に第5の発明について説明する。図15
は、その実施例のブロック図であり、例として2スレッ
ド並列実行型プロセッサを採り上げている。主たる構成
は、図9と同様である。構成上の相違点は、リオーダバ
ッファ53から他のスレッド実行手段50のレジスタフ
ァイル54に対してレジスタ内容更新用のパスが存在す
ること、及びレジスタデータセレクタ装置55への入力
に他のスレッド実行手段50のレジスタファイル54か
らの入力が存在しないことである。
【0076】フォーク時の動作モデルを図16に示す。
親スレッドでフォーク命令がスレッド実行手段#0 5
0aでデコードされると、スレッド管理手段58によっ
てスレッド実行手段#1 50bで子スレッドの実行が
開始され、同時にスレッド管理手段58によってレジス
タファイル#0 54aの内容をレジスタファイル#1
54bにコピーする。
【0077】しかしながら、レジスタファイル#0 5
4aでは、フォーク命令よりも前の命令によるレジスタ
更新が完全に行われておらず、更新データが親スレッド
のスレッド実行手段50のリオーダバッファ#0 53
aに存在するか、まだ演算が行われていない可能性があ
る。従って、レジスタデータセレクタ装置#1 55b
では、子スレッドのレジスタファイル#1 54bとリ
オーダバッファ#053aとリオーダバッファ#1 5
3bのデータを選択して用いて演算を行う。
【0078】一方、親スレッド側でフォーク命令がプロ
グラム順序で完全終了した時点で、リオーダバッファ#
0 53aのデータをレジスタファイル#1 54bに
供給する必要はなくなるので、レジスタファイル#1
54bとリオーダバッファ#1 53bのデータをレジ
スタデータセレクタ装置#1 55bで選択して用いて
演算を行うことになる。また、この時点で、リオーダバ
ッファ#1 53bのレジスタファイル#1 54bへ
のレジスタアップデート動作が可能になりout−of
−order実行を行うプロセッサにおいてもレジスタ
内容の継承が実現される。
【0079】図9,図15に示したプロセッサでは、レ
ジスタファイルの内容のコピーをフォーク命令の完了時
/デコード時に一度行うことを前提にしたレジスタファ
イル間の転送手段を前提にしていた。しかしながら、現
実にはレジスタファイルの内容のすべてを同時にコピー
するには、高バンド幅の転送手段が必要となる。
【0080】第6の発明は、このような問題に対して、
レジスタファイルの転送を複数回に分割することによっ
て対処するものである。図17は、第6の発明の実施例
のブロック図である。同図は、16ワードレジスタファ
イル,4ワード4回転送型レジスタ転送手段の構成例を
示しおり、送信側のレジスタファイル#0 59a,受
信側のレジスタファイル#1 59b,マルチプレクサ
60,デバイダ61,参照許可ビット62a,62bか
ら構成される。
【0081】図18は、図17の実施例のタイミングチ
ャートである。図18において、(A)から(D)は転
送中のレジスタファイルを示し、(E)はマルチプレク
サ60からデバイダ61へ現在どのレジスタを転送して
いるかを伝達するための情報線の内容を示し、(F)か
ら(I)はレジスタファイル#1 59bの参照許可ビ
ット62bの状態を示している。
【0082】レジスタファイル59のコピーが開始され
ると、レジスタファイルはr0−r3,r4−r7,r
8−r11,r12−r15の4回に分割して転送され
る。転送中は送信側のレジスタファイル#0 59aの
更新と、レジスタファイル#1 59bの参照は禁止さ
れる。転送が終了次第順次レジスタファイル#0 59
aの更新とレジスタファイル#1 59bの参照が許可
される。この参照の許可は参照許可ビット62a,62
bをセットすることによって行われる。
【0083】これによって、レジスタ転送のバンド幅を
低減しながらレジスタ転送が可能になる。なお、レジス
タ転送時にレジスタファイルのアクセスが禁止されるサ
イクルが増加するが、順次レジスタアクセス禁止が解除
されるので、その特性に合わせたコードスケジュールを
行い、使用できないレジスタに対するアクセスを遅らせ
ることにより、このレイテンシを或る程度隠蔽すること
が可能になる。
【0084】次に、第7の発明について説明する。図1
9はその実施例のブロック図である。基本的には、第4
の発明にかかる図9の実施例とほぼ同様であるが、退避
用レジスタファイル72が新たに設けられている。
【0085】空いているスレッド実行手段63が存在し
ない時にさらにフォーク命令が実行された場合、フォー
ク命令を実行したスレッド実行手段63がレジスタファ
イル67の確定した時にこの退避用レジスタファイル7
2にコピーを行う。このことによって、システム管理ソ
フトウェアの介入なく、スレッド実行手段63の数を超
えるスレッド生成要求に対処する。スレッド実行手段6
3に空きができた時点で、退避用レジスタファイル72
から、空いたスレッド実行手段63のレジスタファイル
67に対してコピーを行い、退避していたスレッドの実
行を再開する。これらの管理はスレッド管理手段71に
よって行われる。
【0086】次に、第8の発明について説明する。図2
0は、その実施例の一例を示す2スレッド並列実行型プ
ロセッサのブロック図である。図20のプロセッサはス
レッド実行手段73a,73bと共有の物理レジスタフ
ァイル78,レジスタビジーテーブル81,レジスタフ
リーテーブル82,スレッド管理手段83から構成され
る。
【0087】スレッド実行手段73a,73bはそれぞ
れ、命令キャッシュ74a,74b,命令デコーダ75
a,75b,レジスタ写像テーブル76a,76b,命
令キュー77a,77b,演算ユニット79a,79
b,有効命令順序バッファ8a,80bから構成され
る。
【0088】この実施例では、レジスタをソフトウェア
からアクセスする論理レジスタと、ハードウェア的にレ
ジスタ内容を保持する物理レジスタを分離し、その写像
関係をレジスタ写像テーブル76に保持する。図21
は、レジスタ写像テーブル76aの詳細なブロック図で
ある。レジスタ写像テーブル76bも同様の構造であ
る。レジスタ写像テーブル76は、論理レジスタ数分の
物理レジスタ番号エントリを持っており、論理レジスタ
番号を物理レジスタ番号に変換する。
【0089】どのスレッド実行手段73が、どのレジス
タを使用しているかという情報を管理するのが、レジス
タフリーテーブル82である。図22は、レジスタフリ
ーテーブル82の詳細なブロック図である。レジスタフ
リーテーブル82は、レジスタフリー決定論理84,フ
リーレジスタ検索論理85,状態テーブル86から構成
される。
【0090】命令が命令デコーダ75によってデコード
されると、読み出し参照する論理レジスタ番号と書き込
み参照する論理レジスタ番号が確定する。読み出し参照
を行う論理レジスタ番号は、直ちにレジスタ写像テーブ
ル76によって物理レジスタ番号に変換され、命令キュ
ーに格納される。
【0091】書き込み参照する論理レジスタに対して
は、新しい物理レジスタを確保して用いる。これは、o
ut−of−order実行を行った際に、現在デコー
ドした命令により前の命令が同じ論理レジスタを参照す
る際の正当性を維持するためである。例えば、 10 add r1←r2+r3 14 sub r3←r4−r2 という命令をout−of−orderで実行する場合
には、14番地の命令を実行して、更新されたr3の値
を10番地の命令が読み出すとプログラムの正当性が維
持できなくなる。そこで、10番地のr3と14番地の
r3を異なった物理レジスタに写像することによって、
14番地の命令を実行しても実行前のr3の値を保持し
ておき、10番地の実行時には前のレジスタ写像関係か
ら前のr3の値を読み出し参照するということを行う。
このため、現在未使用の物理レジスタをレジスタフリー
テーブル82から確保し、レジスタ写像テーブル76の
写像情報を新しい論理レジスタ−物理レジスタ対応関係
に更新する。
【0092】命令デコード時には、有効命令順序バッフ
ァ80に対しても命令のプログラム順序に従って必要な
情報を記憶させる。ここでは、デコード命令によって新
しい論理レジスタ−物理レジスタ写像関係が生成された
場合、その命令実行前のレジスタ写像関係を併せて記憶
させる。これは、物理レジスタの開放や処理の取消時に
必要になるためである。
【0093】新たに確保した物理レジスタは実際に書き
込みが生じるまでは読み出し参照を禁止する。この書き
込みが生じたか否かをレジスタビジーテーブル81で管
理する。確保した物理レジスタは最初ビジー状態で読み
出し参照を禁止する。その後、書き込みが生じた後にフ
リー状態に変更して読み出し参照を許可する。図23は
レジスタビジーテーブル81の詳細なブロック図であ
る。レジスタビジーテーブル81の管理するレジスタ数
は物理レジスタ本数に対応する。
【0094】物理レジスタはプログラム順序で命令を完
全に終了させる際に開放を行う。例えば、 10 add r1←r2+r3 14 sub r3←r4−r2 の例の場合、14番地の命令が終了時に10番地までに
用いていたr3に対応する物理レジスタを開放する。1
4番地で確保したr3の物理レジスタを開放するのは、
その後のr3を更新する命令がプログラム順序で完全終
了する際である。但し、この開放は子スレッドにレジス
タ内容が継承されていない場合である。子スレッドに継
承されている場合、親スレッド,子スレッド両者が開放
された時に完全に開放されたことになる。つまり、状態
テーブル86のすべてのエントリがリセットされた場合
に、当該レジスタは空き状態になる。
【0095】以下、図20のプロセッサの実際の動作に
ついて説明する。図20のプロセッサは、スレッド生成
と終了時以外はスレッド実行手段73で独立して処理を
進める。物理レジスタファイル78,レジスタビジーテ
ーブル81,レジスタフリーテーブル82は共有である
が、スレッド毎に異なった要求を同時に処理するだけで
ある。従って、この点においては、レジスタ写像テーブ
ル76を用いてレジスタリネーミングを行う従来のスー
パスカラプロセッサの処理方法と何ら相違はない。
【0096】さて、図20のプロセッサでは、フォーク
命令をデコードすると、レジスタ写像テーブル76の内
容を他の空いているスレッド実行手段73のレジスタ写
像テーブル76にコピーする。同時にレジスタフリーテ
ーブル82に対してもコピーを行う。この情報を受けた
レジスタフリーテーブル82は、子スレッドのスレッド
実行手段における状態テーブルをレジスタ使用中にセッ
トする。レジスタ写像テーブル76はデコード時にプロ
グラム順序に従って内容が変更されるので、フォーク命
令デコード時に、正しい写像情報を保持している。従っ
て、子スレッドからも親スレッド同様に通常の物理レジ
スタファイル78の参照が可能である。また、スレッド
生成後は同一論理レジスタへの書き込みを行った物理レ
ジスタへマッピングするので、各々のスレッドで独立し
た処理が可能である。スレッド終了時には、レジスタフ
リーテーブル82の当該スレッド実行手段73の状態テ
ーブル86をクリアする。
【0097】このように本実施例では写像関係をコピー
することによって、out−of−orderにおける
レジスタ内容の継承を実現する。本実施例では、第4か
ら第7までの発明に比して、コピーする情報量が少な
い。また、親スレッド側でフォーク命令がプログラム順
序で終了するまでの特別な制御が不要であるという特徴
がある。
【0098】次に、第9の発明について説明する。この
発明は第6の発明とほぼ同様の思想であるが、第8の発
明に準じ、レジスタファイルの内容転送の代わりにレジ
スタ写像テーブルの内容を複数回に分割して実現するも
のである。
【0099】これによって、レジスタ転送のバンド幅を
一層低減しながらレジスタ内容の継承が可能になる。な
お、レジスタ写像テーブル転送時にレジスタファイルの
アクセスが禁止されるサイクルが増加するが、順次レジ
スタアクセス禁止が解除されるので、その特性に合わせ
たコードスケジューリングを行い、使用できないレジス
タに対するアクセスを遅らせることにより、第6の発明
同様、このレイテンシをある程度隠蔽することが可能に
なる。
【0100】次に、第10の発明について説明する。図
24は、この発明の実施例を示す2スレッド並列実行型
プロセッサのブロック図である。本発明は、基本的には
第8の発明にかかる図20の実施例とほぼ同様である
が、退避用レジスタ写像テーブル98を新たに設け、レ
ジスタフリーテーブル96に対して、退避用レジスタ状
態テーブルを付加する。
【0101】空いているスレッド実行手段87が存在し
ない時にさらにフォーク命令が実行された場合、フォー
ク命令を実行したプロセッサのフォーク命令デコード時
にレジスタ写像テーブル90の内容を退避用レジスタ写
像テーブル98にコピーする。このことによって、シス
テム管理ソフトウェアの介入なく、スレッド実行手段8
7の数を超えるスレッド生成要求に対処する。スレッド
実行手段87に空きができた時点で、退避用レジスタ写
像テーブル98から、空いたスレッド実行手段87のレ
ジスタ写像テーブル90に対してコピーを行い、退避し
ていたスレッドの実行を再開する。これらの管理はスレ
ッド管理手段97によって行われる。
【0102】次に第11の発明について説明する。第1
1の発明は、1スレッドでフォーク命令によって子スレ
ッドを生成する回数を1回にし、さらに子スレッドは親
スレッドが終了するまで終了できないとすることによっ
て得られる効果についての発明である。子スレッドの生
成を1回にすることにより、スレッドの生成/消滅は逐
次的に行われるようになる。このことを4スレッド並列
実行環境に対して適用したモデルが図25である。
【0103】図25に示すように、フォークによって生
成される子スレッドの生成先は隣接するスレッド実行手
段に限定できる。すなわち、スレッド実行手段#0から
は必ずスレッド実行手段#1に対してフォークを行い、
スレッド実行手段#1からはスレッド実行手段#2へ、
スレッド実行手段#2からはスレッド実行手段#3へ、
スレッド実行手段#3からはスレッド実行手段#0へと
いうようにスレッドはリング状にスレッド実行手段に展
開される。従って、第4から第10の発明におけるレジ
スタファイルもしくはレジスタ写像テーブルの内容転送
手段を多対多構造からリング状の転送手段に簡単化する
ことが可能となる。
【0104】図26は図14の実施例に図25の技術を
適用した場合のレジスタファイル回りのブロック図であ
る。図26においてレジスタファイル99は、リング状
レジスタファイル転送手段103によって結合してい
る。従って、物理的なレジスタファイル99の位置を工
夫することによって、より効率的なハードウェア実装が
可能となる。
【0105】次に、本発明のその他の実施の形態につい
て説明する。一つの他の実施の形態としては、第8の発
明に対して、第11の発明で用いた子スレッド生成1回
限定の特徴を追加し、フォーク時に物理レジスタ継承情
報をレジスタフリーテーブルに伝達することなく、論理
レジスタ−物理レジスタのリネーミングを実現しつつ、
子スレッドへのレジスタ内容継承を実現するものがあ
る。図27にこの実施の形態の実施例として2スレッド
並列実行型のプロセッサの構成例を、図28にレジスタ
フリーテーブル113の詳細図を示す。図27のプロセ
ッサは、基本的には図20のプロセッサと同一構造であ
るが、レジスタ写像テーブル107からレジスタフリー
テーブル113へ、フォーク時に物理レジスタの継承を
伝える手段が省略されている。
【0106】また、レジスタフリーテーブル113は、
図28に示すように、状態テーブル117の各スレッド
実行手段104のエントリが2ビットに拡張されてい
る。このビットの意味を表1に示す。
【0107】
【表1】
【0108】レジスタ確保時には、既にフォークを行っ
たスレッドかフォークを行っていないスレッドかで状態
テーブル117にセットされる値は異なる。従って、フ
ォーク前か後かの情報をスレッド管理手段114から得
る必要がある。また、表1中のオーナ権はレジスタを確
保したスレッド実行手段104の状態テーブル117に
付与されるものであるが、その後のレジスタ継承によっ
て、子スレッド以下に委譲される場合もある。各スレッ
ド実行手段104の状態テーブル117がすべて00の
場合、対応するエントリの物理レジスタは未使用状態で
ある。
【0109】以下、レジスタ開放論理について説明す
る。この論理はレジスタフリー決定論理115によって
決定する。この論理の説明では、Nスレッド同時実行プ
ロセッサモデルとしている。これは、2スレッド同時実
行モデルでは、論理が簡単化されてしまうためである。
またスレッドは、親スレッド→子スレッド→孫スレッド
という順に生成されたものとする。ここで、子スレッド
において命令プログラム順序終了時のレジスタ開放時の
論理を表2に示す。
【0110】
【表2】
【0111】この表2から明らかなように、孫スレッド
へのレジスタ継承が行われている際には、親フィール
ド,子フィールド,孫フィールドの3種類のフィールド
値と開放しようとしているスレッドのフォーク状態によ
って状態遷移が決定される。これ以外の状態遷移は通常
ではあり得ずエラーとなる。
【0112】この論理を用いることによって、フォーク
命令実行時にレジスタフリーテーブル113は多数の状
態テーブル117の内容を変更することなく、レジスタ
の継承/開放が可能になる。
【0113】さらに他の実施の形態では、図29に示し
たように、レジスタ使用中ビット121を付加する。こ
のレジスタ使用中ビットは、物理レジスタを確保する際
に、フリーレジスタ検索論理119によって未使用のも
のを見つけ、使用中にセットする。このことによって状
態テーブル120のすべてのエントリが00もしくは未
使用であるという状態のレジスタを検索する論理が簡単
化される。レジスタ使用中ビット121を使用中状態か
ら、未使用状態にセットするのは、レジスタフリー決定
論理118が、状態テーブル120の内容を書き換える
際に同時に行う。
【0114】
【発明の効果】以上説明したように、本発明によれば、
スレッドを並列に処理する際に、親スレッドから子スレ
ッドに対して共有メモリを介さずにレジスタ内容の継承
が可能になり、スレッド生成時のオーバヘッドを減らす
ことができる。また、このレジスタ内容の継承をout
−of−order実行を行うプロセッサに対しても、
フォーク命令前後間においても実現したため、スレッド
生成にともなうオーバヘッドを減らすことが可能にな
り、粒度の細かいスレッドに対してもスレッドレベル並
列処理による処理速度の向上が実現できる。
【図面の簡単な説明】
【図1】第1の発明におけるレジスタ内容の継承方法の
概念図である。
【図2】第1の発明におけるレジスタ内容の継承方法を
実現する2スレッド並列実行型プロセッサの実施例のブ
ロック図である。
【図3】図2に示した実施例のプロセッサにおけるスレ
ッド生成時のタイミングチャートである。
【図4】第2の発明を適用した2スレッド並列実行型プ
ロセッサの実施例のブロック図である。
【図5】レジスタ選択手段#1 12bの構成例を示す
ブロック図である。
【図6】レジスタファイル#0 13aの構成例を示す
ブロック図である。
【図7】図4に示した実施例のプロセッサのタイミング
チャートである。
【図8】第3の発明の動作説明図である。
【図9】第4の発明を適用した2スレッド並列実行型プ
ロセッサの実施例のブロック図である。
【図10】命令キュー#0 27aの構成例を示すブロ
ック図である。
【図11】リオーダバッファ#0 24aの構成例を示
すブロック図である。
【図12】レジスタデータセレクタ装置#1 26bの
処理の論理を示すフローである。
【図13】図9のプロセッサにおけるフォーク時の動作
モデルを示す図である。
【図14】第4の発明を適用した4スレッド並列実行2
演算ユニット型プロセッサの実施例のブロック図であ
る。
【図15】第5の発明を適用した2スレッド並列実行型
プロセッサの実施例のブロック図である。
【図16】図15のプロセッサにおけるフォーク時の動
作モデルを示す図である。
【図17】第6の発明の実施例のブロック図である。
【図18】図17の実施例のタイミングチャートであ
る。
【図19】第7の発明の実施例のブロック図である。
【図20】第8の発明を適用した2スレッド並列実行型
プロセッサの実施例のブロック図である。
【図21】レジスタ写像テーブル76aの詳細なブロッ
ク図である。
【図22】レジスタフリーテーブル82の詳細なブロッ
ク図である。
【図23】レジスタビジーテーブル81の詳細なブロッ
ク図である。
【図24】第10の発明を適用した2スレッド並列実行
型プロセッサの実施例のブロック図である。
【図25】第11の発明の実施例のモデルを示す図であ
る。
【図26】図14の実施例に図25の技術を適用した場
合のレジスタファイル回りのブロック図である。
【図27】本発明の他の実施の形態の実施例である2ス
レッド並列実行型のプロセッサのブロック図である。
【図28】レジスタフリーテーブル113の詳細図であ
る。
【図29】本発明の他の実施の形態におけるレジスタフ
リーテーブルの詳細図である。
【図30】従来のリオーダバッファ方式によるレジスタ
リネーミング機構の構成を示すブロック図である。
【図31】従来のレジスタ写像テーブル方式によるレジ
スタリネーミング機構の構成を示すブロック図である。
【図32】従来のマルチスレッド型のプロセッサの構成
を示すブロック図である。
【図33】Multiscalar Processo
rの構成を示すブロック図である。
【符号の説明】
1…親スレッド(新スレッドを生成するスレッド) 2…スレッド生成命令(フォーク命令) 3…子スレッド(新スレッド) 4…スレッド管理手段 5a,5b…スレッド実行手段 6a,6b…レジスタファイル 7…レジスタ内容一括転送手段 8…共有メモリ 9a,9b…スレッド実行手段 10a,10b…命令キャッシュ 11a,11b…命令デコーダ 12a,12b…レジスタ選択手段 13a,13b…レジスタファイル 14a,14b…演算ユニット 15…スレッド管理手段 16…レジスタ選択テーブル 17…レジスタ選択ビット 18…レジスタ内容メモリ 19…転送終了ビット 20…更新ビット 21a,21b…スレッド実行手段 22a,22b…命令キャッシュ 23a,23b…命令デコーダ 24a,24b…リオーダバッファ 25a,25b…レジスタファイル 26a,26b…レジスタデータセレクタ装置 27a,27b…命令キュー 28a,28b…演算ユニット 29…スレッド管理手段 30…キューエントリ格納論理 31…発行命令決定論理 32…命令キューエントリ 33…エントリ有効ビット 34…レジスタ内容/リオーダバッファタグ格納メモリ 35…レジスタ内容有効ビット 36…結果書き込み場所指定タグ 37…命令コード格納メモリ 38…レジスタデータ供給決定論理 39…エントリシフト制御論理 40…リオーダバッファエントリ 41…エントリ有効ビット 42…結果書き込み指定タグ 43…レジスタ番号 44…スレッド生成ビット 45…演算データ格納メモリ有効ビット 46…演算データ格納メモリ 47a,47b…結果振り分け装置 48a,48b…レジスタデータ選択装置 49a,49b…命令キュー 50a,50b…スレッド実行手段 51a,51b…命令キャッシュ 52a,52b…命令デコーダ 53a,53b…リオーダバッファ 54a,54b…レジスタファイル 55a,55b…レジスタデータセレクタ装置 56a,56b…命令キュー 57a,57b…演算ユニット 58…スレッド管理手段 59a,59b…レジスタファイル 60…マルチプレクサ 61…デバイダ 62a,62b…参照許可ビット 63a,63b…スレッド実行手段 64a,64b…命令キャッシュ 65a,65b…命令デコーダ 66a,66b…リオーダバッファ 67a,67b…レジスタファイル 68a,68b…レジスタデータセレクタ装置 69a,69b…命令キュー 70a,70b…演算ユニット 71…スレッド管理手段 72…退避用レジスタファイル 73a,73b…スレッド実行手段 74a,74b…命令キャッシュ 75a,75b…命令デコーダ 76a,76b…レジスタ写像テーブル 77a,77b…命令キュー 78…物理レジスタファイル 79a,79b…演算ユニット 80a,80b…有効命令順序バッファ 81…レジスタビジーテーブル 82…レジスタフリーテーブル 83…スレッド管理手段 84…レジスタフリー決定論理 85…フリーレジスタ検索論理 86…状態テーブル 87a,87b…スレッド実行手段 88a,88b…命令キャッシュ 89a,89b…命令デコーダ 90a,90b…レジスタ写像テーブル 91a,91b…命令キュー 92…物理レジスタファイル 93a,93b…演算ユニット 94a,94b…有効命令順序バッファ 95…レジスタビジーテーブル 96…レジスタフリーテーブル 97…スレッド管理手段 98…退避用レジスタ写像テーブル 99a,99b,99c,99d…レジスタファイル 100a,100b…結果振り分け装置 101a,101b…レジスタデータ選択装置 102a,102b,102c,102d…リオーダバ
ッファ 103…リング状レジスタファイル転送手段 104a,104b…スレッド実行手段 105a,105b…命令キャッシュ 106a,106b…命令デコーダ 107a,107b…レジスタ写像テーブル 108a,108b…命令キュー 109…物理レジスタファイル 110a,110b…演算ユニット 111a,111b…有効命令順序バッファ 112…レジスタビジーテーブル 113…レジスタフリーテーブル 114…スレッド管理手段 115…レジスタフリー決定論理 116…フリーレジスタ検索論理 117…状態テーブル 118…レジスタフリー決定論理 119…フリーレジスタ検索論理 120…状態テーブル 121…レジスタ使用中ビット 122…レジスタファイル 123…リオーダ・バッファ 124…レジスタ写像テーブル 125…レジスタファイル 126…有効命令順序バッファ 127…レジスタビジーテーブル 128…レジスタフリーテーブル 129…命令取得装置 130…命令解読装置 131…機能実行装置 132…命令依存解析装置 133…命令調停装置 134…シーケンサ 135…プロセッシングユニット 136…結合ネットワーク 137…データバンク 138…命令キャッシュ 139…実行ユニット 140…レジスタファイル 141…ARB(Address Resolutio
n Buffer) 142…データキャッシュ 150…レジスタ内容転送手段
フロントページの続き (56)参考文献 特開 平8−171494(JP,A) 特公 昭58−43778(JP,B2) インターフェース 1991年10月号(C Q出版社),P.140〜141及びP.151 情報処理学会論文誌,Vol.36,N o.7(1995年7月),P.1700〜1708 Pradeep K.Dubey,e t.al,”Single−Progr am Specnlative Mul itithreading(SPSM) Architecture:Compi ler−assisted Fine− Grained Multithrea ding”,Paralled Arc hitecture and Comp ilation Technique s,IFIP,1995,pp.109〜121 (JICST資料番号 K19960280) Gurindar S.Sohi,e t.al,”Multiscalar Processors”,The22nd International Sym posium on Computer Architecture(IEEE Computer Society Press),1995,pp.414〜425 (JICST資料番号 C0446B) (58)調査した分野(Int.Cl.6,DB名) G06F 9/46,9/38,15/16,15/80 JOIS(JICSTファイル) CSDB(日本国特許庁)

Claims (12)

    (57)【特許請求の範囲】
  1. 【請求項1】 論理的に複数のプログラムカウンタを有
    し、これらのプログラムカウンタに従った複数のスレッ
    ドの命令を同時にフェッチ,解釈,実行するスレッド実
    行手段と、独立した論理的なレジスタファイルとを備
    え、単一のスレッド中の指定された命令によって、新た
    なスレッド(子スレッド)の実行を開始する機能を備え
    たプロセッサにおいて、 子スレッド実行開始命令を実
    行するスレッド(親スレッド)の命令実行時点のレジス
    タファイルの内容を直接転送することによって子スレッ
    ドのレジスタファイルに継承するために、 スレッド毎に複数のレジスタファイル及びレジスタ選択
    手段を備えると共に、レジスタ内容転送手段を備え、 子スレッドは、前記レジスタ選択手段によって親スレッ
    ドのレジスタファイルを参照し、 レジスタの変更が行われる毎に、前記レジスタ内容転送
    手段によって順次新スレッドのレジスタファイルに、変
    更する前のレジスタ内容を転送し、 前記レジスタ選択手段の選択内容を子スレッド側のレジ
    スタファイルに切替えることによってレジスタファイル
    を継承させることを特徴とした マルチスレッド実行方
    法。
  2. 【請求項2】 親スレッドのプログラムにおける子スレ
    ッド実行開始命令とその前後に配置される他の演算命令
    との間で、プログラムの意味を変えない範囲内において
    非プログラム順序に実行することを特徴とした請求項1
    記載のマルチスレッド実行方法。
  3. 【請求項3】 演算の結果とレジスタ番号を指定するタ
    グを一時的に格納するリオーダバッファを持ち、命令を
    デコードした際に、そのリオーダバッファのエントリを
    確保し、命令をプログラムで指定された順序ではなく、
    必要なレジスタの値が使用可能になったものからレジス
    タ及びリオーダバッファの当該命令よりも前のエントリ
    から供給することによって演算を行い、演算結果を命令
    デコード時に確保したリオーダバッファのエントリに格
    納し、そのリオーダバッファからはプログラム順序でレ
    ジスタ内容の更新を行うことによって、プログラムの順
    序に従わずに処理を進める非プログラム順序実行型プロ
    セッサにおいて、 複数のプログラムカウンタを有し、これらのプログラム
    カウンタに従った複数のスレッドの命令を同時にフェッ
    チ,解釈,実行するスレッド実行手段と、複数のレジス
    タファイルおよびリオーダバッファを設け、 親スレッドと子スレッドの両者のレジスタファイルおよ
    びリオーダバッファからの内容出力を選択するレジスタ
    データセレクタ装置を設け、 子スレッド生成命令が親スレッド内でプログラム順序で
    完了した時点で、親スレッドを実行しているレジスタフ
    ァイルの内容を子スレッドを実行しているレジスタファ
    イルにコピーすることによって、 コピー前は親スレッドのレジスタファイル,リオーダバ
    ッファおよび子スレッドのリオーダバッファからレジス
    タ内容を選択し、コピー後は子スレッドのリオーダバッ
    ファおよびレジスタファイルからレジスタ内容を選択す
    ることによってレジスタの継承を行うことを特徴とした
    請求項記載のマルチスレッド実行方法。
  4. 【請求項4】 演算の結果とレジスタ番号を指定するタ
    グを一時的に格納するリオーダバッファを持ち、命令を
    デコードした際に、そのリオーダバッファのエントリを
    確保し、命令をプログラムで指定された順序ではなく、
    必要なレジスタの値が使用可能になったものからレジス
    タ及びリオーダバッファの当該命令よりも前のエントリ
    から供給することによって演算を行い、演算結果を命令
    デコード時に確保したリオーダバッファのエントリに格
    納し、そのリオーダバッファからはプログラム順序でレ
    ジスタ内容の更新を行うことによって、プログラムの順
    序に従わずに処理を進める非プログラム順序実行型プロ
    セッサにおいて、 複数のプログラムカウンタを有し、これらのプログラム
    カウンタに従った複数のスレッドの命令を同時にフェッ
    チ,解釈,実行するスレッド実行手段と、複数のレジス
    タファイルおよびリオーダバッファを設け、 親スレッドと子スレッドの両者のリオーダバッファ及び
    子スレッドのレジスタファイルからの内容出力を選択す
    るレジスタデータセレクタ装置を設け、 レジスタファイルの内容のコピーを子スレッド生成が行
    われた時点で行うこととして、その後は親スレッドのリ
    オーダバッファから、親スレッドのレジスタファイルと
    子スレッドのレジスタファイルに書き込みを行い、 スレッド生成命令がプログラム順序で終了する前は親ス
    レッドのリオーダバッファ,子スレッドのレジスタファ
    イルおよびリオーダバッファからレジスタ内容を選択
    し、プログラム順序で終了した後は子スレッドのリオー
    ダバッファおよびレジスタファイルからレジスタ内容を
    選択することによってレジスタの継承を行うことを特徴
    した請求項記載のマルチスレッド実行方法。
  5. 【請求項5】 レジスタファイルのコピーを複数回の転
    送サイクルによって行うレジスタ内容転送手段を用い、 レジスタ内容の転送が済んだレジスタファイル部分か
    ら、新スレッドにおいて、参照を許可することを特徴と
    した請求項または記載のマルチスレッド実行方法。
  6. 【請求項6】 スレッド生成命令を実行した時点で、そ
    のスレッドを実行できる資源が確保できない場合に、レ
    ジスタの内容を退避用レジスタファイルに蓄えることに
    よって、プロセッサの許容数以上のスレッドが同時に存
    在し得るようにしたことを特徴とする請求項また
    記載のマルチスレッド実行方法。
  7. 【請求項7】 論理的に複数のプログラムカウンタを有
    し、これらのプログラムカウンタに従った複数のスレッ
    ドの命令を同時にフェッチ,解釈,実行するスレッド実
    行手段と、物理的には共有しており論理的には独立した
    レジスタファイルと、論理レジスタと物理共有レジスタ
    との対応関係を可変とし、この対応関係を記憶した写像
    テーブルとを備え、単一のスレッド中の指定された命令
    によって、新たなスレッド(子スレッド)の実行を開始
    する機能を備えたプロセッサにおいて、 子スレッド実行開始命令を実行するスレッド(親スレッ
    ド)の命令実行時点のレジスタファイルの内容を子スレ
    ッドのレジスタファイルに、写像関係をコピーすること
    によって継承することを特徴としたマルチスレッド実行
    方法。
  8. 【請求項8】 親スレッドのプログラムにおける子スレ
    ッド実行開始命令とその前後に配置される他の演算命令
    との間で、プログラムの意味を変えない範囲内において
    非プログラム順序に実行することを特徴とした請求項
    記載のマルチスレッド実行方法。
  9. 【請求項9】 プログラムから指定する論理レジスタと
    ハードウェアに実行される物理レジスタとの対応関係を
    可変とし、この対応関係を記録,更新,検索するレジス
    タ写像テーブルを備え、論理レジスタに対して値の書き
    込みを行おうとする毎に物理レジスタとの新しい対応関
    係を生成し、対応する物理レジスタに値の書き込みが完
    了した時点で読み出しを許可し、命令がプログラム順序
    に完了した時点で、論理レジスタとの古い対応関係にな
    っていた物理レジスタを未使用状態にすることによっ
    て、非プログラム順序で命令を実行するプロセッサにお
    いて、 複数のプログラムカウンタを有し、これらのプログラム
    カウンタに従った複数のスレッドの命令を同時にフェッ
    チ,解釈,実行するスレッド実行手段を設け、前記複数
    のスレッド実行手段から参照できる共有の物理レジスタ
    ファイルと、この共有の物理レジスタファイルの使用状
    態保持手段と、複数のレジスタ写像テーブルとを設け、 子スレッド実行開始命令を解釈した時点で、これらのレ
    ジスタ写像テーブル間で内容をコピーすることによって
    レジスタの継承を行い、 継承した物理レジスタを親スレッド,子スレッド両者で
    対応する論理レジスタに書き込みを行った時点で、未使
    用状態にすることによってレジスタの継承を行うことを
    特徴とした請求項記載のマルチスレッド実行方法。
  10. 【請求項10】 レジスタ写像テーブルの内容のコピー
    を複数回の転送サイクルによって行い、 新スレッドにおいて、対応関係の転送が済んだものから
    使用可能にすることを特徴とした請求項記載のマルチ
    スレッド実行方法。
  11. 【請求項11】 スレッド生成命令を実行した時点で、
    そのスレッドを実行できる資源が確保できない場合に、
    レジスタ写像テーブルの内容を退避用レジスタ写像テー
    ブルに蓄えることにより、 プロセッサの許容数以上のスレッドが同時に存在し得る
    ようにすることを特徴とした請求項または10記載の
    マルチスレッド実行方法。
  12. 【請求項12】 親スレッドから子スレッドを生成する
    回数を高々1回に制限し、スレッドの消滅順序を親スレ
    ッドを子スレッドより先にすることによって、隣接する
    スレッド実行手段に限定してレジスタ内容継承を行うよ
    うにしたことを特徴とする請求項1,2,3,4,5,
    6,7,8,9,10または11記載のマルチスレッド
    実行方法。
JP8249272A 1996-08-30 1996-08-30 マルチスレッド実行方法 Expired - Fee Related JP2970553B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP8249272A JP2970553B2 (ja) 1996-08-30 1996-08-30 マルチスレッド実行方法
US08/900,643 US5913059A (en) 1996-08-30 1997-07-25 Multi-processor system for inheriting contents of register from parent thread to child thread

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8249272A JP2970553B2 (ja) 1996-08-30 1996-08-30 マルチスレッド実行方法

Publications (2)

Publication Number Publication Date
JPH1078880A JPH1078880A (ja) 1998-03-24
JP2970553B2 true JP2970553B2 (ja) 1999-11-02

Family

ID=17190506

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8249272A Expired - Fee Related JP2970553B2 (ja) 1996-08-30 1996-08-30 マルチスレッド実行方法

Country Status (2)

Country Link
US (1) US5913059A (ja)
JP (1) JP2970553B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007519101A (ja) * 2003-12-30 2007-07-12 インテル コーポレイション 投機的メモリサポートを利用した冗長なマルチスレッディングシステムにおける故障検出のための外部メモリの更新管理

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6308261B1 (en) * 1998-01-30 2001-10-23 Hewlett-Packard Company Computer system having an instruction for probing memory latency
US6484196B1 (en) * 1998-03-20 2002-11-19 Advanced Web Solutions Internet messaging system and method for use in computer networks
US6092175A (en) * 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
JP3209205B2 (ja) 1998-04-28 2001-09-17 日本電気株式会社 プロセッサにおけるレジスタ内容の継承装置
US6163839A (en) * 1998-09-30 2000-12-19 Intel Corporation Non-stalling circular counterflow pipeline processor with reorder buffer
US6243860B1 (en) * 1998-10-30 2001-06-05 Westinghouse Electric Company Llc Mechanism employing a memory area for exchanging information between a parent process and a child process compiled during execution of the parent process or between a run time compiler process and an application process
JP2000305795A (ja) 1999-04-20 2000-11-02 Nec Corp 並列処理装置
US6820261B1 (en) * 1999-07-14 2004-11-16 Sun Microsystems, Inc. Inheritable thread-local storage
US6574725B1 (en) * 1999-11-01 2003-06-03 Advanced Micro Devices, Inc. Method and mechanism for speculatively executing threads of instructions
US7518993B1 (en) * 1999-11-19 2009-04-14 The United States Of America As Represented By The Secretary Of The Navy Prioritizing resource utilization in multi-thread computing system
US7512724B1 (en) * 1999-11-19 2009-03-31 The United States Of America As Represented By The Secretary Of The Navy Multi-thread peripheral processing using dedicated peripheral bus
JP2001167066A (ja) * 1999-12-08 2001-06-22 Nec Corp プロセッサ間通信方法及びマルチプロセッサシステム
JP3641997B2 (ja) 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体
US6931641B1 (en) 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US7093109B1 (en) 2000-04-04 2006-08-15 International Business Machines Corporation Network processor which makes thread execution control decisions based on latency event lengths
JP3729064B2 (ja) * 2000-11-29 2005-12-21 日本電気株式会社 データ依存関係検出装置
JP3729087B2 (ja) * 2001-05-23 2005-12-21 日本電気株式会社 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法
US6976155B2 (en) * 2001-06-12 2005-12-13 Intel Corporation Method and apparatus for communicating between processing entities in a multi-processor
JP3702813B2 (ja) 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
JP3702814B2 (ja) 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
JP3630118B2 (ja) 2001-07-12 2005-03-16 日本電気株式会社 スレッド終了方法及び装置並びに並列プロセッサシステム
GB2411029B (en) * 2001-07-12 2006-02-22 Nec Corp Multi-thread executing method and parallel processing system
JP3702815B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 プロセッサ間レジスタ継承方法及びその装置
JP3632635B2 (ja) 2001-07-18 2005-03-23 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US6954846B2 (en) * 2001-08-07 2005-10-11 Sun Microsystems, Inc. Microprocessor and method for giving each thread exclusive access to one register file in a multi-threading mode and for giving an active thread access to multiple register files in a single thread mode
US6934951B2 (en) * 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
US7181594B2 (en) * 2002-01-25 2007-02-20 Intel Corporation Context pipelines
US7437724B2 (en) * 2002-04-03 2008-10-14 Intel Corporation Registers for data transfers
US6802046B2 (en) * 2002-05-01 2004-10-05 Agilent Technologies, Inc. Time domain measurement systems and methods
US7155721B2 (en) * 2002-06-28 2006-12-26 Hewlett-Packard Development Company, L.P. Method and apparatus for communicating information between lock stepped processors
US7185338B2 (en) * 2002-10-15 2007-02-27 Sun Microsystems, Inc. Processor with speculative multithreading and hardware to support multithreading software
JP2004234123A (ja) * 2003-01-28 2004-08-19 Fujitsu Ltd マルチスレッドコンピュータ
JP4042604B2 (ja) 2003-03-31 2008-02-06 日本電気株式会社 プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US7496921B2 (en) * 2003-08-29 2009-02-24 Intel Corporation Processing block with integrated light weight multi-threading support
US9189230B2 (en) * 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US7606983B2 (en) * 2004-06-21 2009-10-20 Nxp B.V. Sequential ordering of transactions in digital systems with multiple requestors
US7676655B2 (en) * 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
JP3901181B2 (ja) 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
JP3901180B2 (ja) * 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
JP3901182B2 (ja) * 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
US8766995B2 (en) * 2006-04-26 2014-07-01 Qualcomm Incorporated Graphics system with configurable caches
US20070268289A1 (en) * 2006-05-16 2007-11-22 Chun Yu Graphics system with dynamic reposition of depth engine
US8884972B2 (en) * 2006-05-25 2014-11-11 Qualcomm Incorporated Graphics processor with arithmetic and elementary function units
US8869147B2 (en) * 2006-05-31 2014-10-21 Qualcomm Incorporated Multi-threaded processor with deferred thread output control
US8644643B2 (en) * 2006-06-14 2014-02-04 Qualcomm Incorporated Convolution filtering in a graphics processor
US8766996B2 (en) * 2006-06-21 2014-07-01 Qualcomm Incorporated Unified virtual addressed register file
US8006069B2 (en) * 2006-10-05 2011-08-23 Synopsys, Inc. Inter-processor communication method
WO2008049938A1 (es) * 2006-10-27 2008-05-02 Intel Corporation Comunicación entre múltiples secuencias de procesamiento en un procesador
JP4957729B2 (ja) * 2007-01-25 2012-06-20 日本電気株式会社 プログラム並列化方法、プログラム並列化装置及びプログラム
US7827389B2 (en) * 2007-06-15 2010-11-02 International Business Machines Corporation Enhanced single threaded execution in a simultaneous multithreaded microprocessor
US8145887B2 (en) * 2007-06-15 2012-03-27 International Business Machines Corporation Enhanced load lookahead prefetch in single threaded mode for a simultaneous multithreaded microprocessor
GB2451845B (en) * 2007-08-14 2010-03-17 Imagination Tech Ltd Compound instructions in a multi-threaded processor
US20110055838A1 (en) * 2009-08-28 2011-03-03 Moyes William A Optimized thread scheduling via hardware performance monitoring
US20110320766A1 (en) * 2010-06-29 2011-12-29 Youfeng Wu Apparatus, method, and system for improving power, performance efficiency by coupling a first core type with a second core type
JP5354102B2 (ja) * 2010-06-29 2013-11-27 富士通株式会社 マルチコアプロセッサシステム、通信制御方法、および通信制御プログラム
JP5535115B2 (ja) * 2011-03-29 2014-07-02 株式会社日立システムズ マルチスレッド型ファイル入出力システム、及びマルチスレッド型ファイル入出力プログラム
US8949836B2 (en) * 2011-04-01 2015-02-03 International Business Machines Corporation Transferring architected state between cores
WO2012174334A1 (en) * 2011-06-16 2012-12-20 Caustic Graphics, Inc. Graphics processor with non-blocking concurrent architecture
JP2016062513A (ja) * 2014-09-19 2016-04-25 株式会社東芝 プロセッサおよびプロセッサシステム
US20160147536A1 (en) * 2014-11-24 2016-05-26 International Business Machines Corporation Transitioning the Processor Core from Thread to Lane Mode and Enabling Data Transfer Between the Two Modes
US10025554B2 (en) * 2016-09-19 2018-07-17 Arm Limited Data item order restoration
KR101823129B1 (ko) 2016-11-24 2018-03-09 주식회사 실크로드소프트 컴퓨팅 장치의 리소스를 분배하는 컴퓨터 프로그램, 방법 및 장치
WO2020213397A1 (ja) * 2019-04-18 2020-10-22 株式会社エヌエスアイテクス プロセッサおよびレジスタの継承方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5843778A (ja) * 1981-09-08 1983-03-14 Ookura Syuzo Kk 清酒の醸造法
US5353418A (en) * 1989-05-26 1994-10-04 Massachusetts Institute Of Technology System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5261097A (en) * 1991-03-11 1993-11-09 Digital Equipment Corporation Computer system and method for executing command scripts using multiple synchronized threads
US5404469A (en) * 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
JP3169779B2 (ja) * 1994-12-19 2001-05-28 日本電気株式会社 マルチスレッドプロセッサ
US5710923A (en) * 1995-04-25 1998-01-20 Unisys Corporation Methods and apparatus for exchanging active messages in a parallel processing computer system
US5742791A (en) * 1996-02-14 1998-04-21 Advanced Micro Devices, Inc. Apparatus for detecting updates to instructions which are within an instruction processing pipeline of a microprocessor

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Gurindar S.Sohi,et.al,"Multiscalar Processors",The22nd International Symposium on Computer Architecture(IEEE Computer Society Press),1995,pp.414〜425(JICST資料番号 C0446B)
Pradeep K.Dubey,et.al,"Single−Program Specnlative Mulitithreading(SPSM)Architecture:Compiler−assisted Fine−Grained Multithreading",Paralled Architecture and Compilation Techniques,IFIP,1995,pp.109〜121(JICST資料番号 K19960280)
インターフェース 1991年10月号(CQ出版社),P.140〜141及びP.151
情報処理学会論文誌,Vol.36,No.7(1995年7月),P.1700〜1708

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007519101A (ja) * 2003-12-30 2007-07-12 インテル コーポレイション 投機的メモリサポートを利用した冗長なマルチスレッディングシステムにおける故障検出のための外部メモリの更新管理

Also Published As

Publication number Publication date
US5913059A (en) 1999-06-15
JPH1078880A (ja) 1998-03-24

Similar Documents

Publication Publication Date Title
JP2970553B2 (ja) マルチスレッド実行方法
JP3771957B2 (ja) プロセッサ・アーキテクチャにおける分散制御のための装置および方法
JP4818918B2 (ja) マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
TWI533129B (zh) 使用可分割引擎實體化的虛擬核心執行指令序列程式碼區塊
TWI520070B (zh) 使用可分割引擎實體化的虛擬核心以支援程式碼區塊執行的記憶體片段
US7659898B2 (en) Multi-execution resource graphics processor
TWI518504B (zh) 使用可分割引擎實體化的虛擬核心以支援程式碼區塊執行的暫存器檔案節段
JP2908598B2 (ja) 情報処理装置
US8046761B2 (en) Scalable multi-threaded media processing architecture
US7376954B2 (en) Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7659899B2 (en) System and method to manage data processing stages of a logical graphics pipeline
US20070030280A1 (en) Global spreader and method for a parallel graphics processor
JP2007504541A (ja) プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
JP2000020326A (ja) プロセッサにおけるレジスタ内容の継承装置
Hum et al. Building multithreaded architectures with off-the-shelf microprocessors
US20070030277A1 (en) Method for processing vertex, triangle, and pixel graphics data packets
US20050188177A1 (en) Method and apparatus for real-time multithreading
US6950928B2 (en) Apparatus, method and system for fast register renaming using virtual renaming, including by using rename information or a renamed register
US7203821B2 (en) Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
WO2005022385A1 (en) Mechanisms for dynamic configuration of virtual processor resources
JP4608099B2 (ja) ジョブ信号を処理する多数の処理ユニットを有する処理システムにおけるジョブ信号処理方法および処理システム
US20040199749A1 (en) Method and apparatus to limit register file read ports in an out-of-order, multi-stranded processor
JP3638584B2 (ja) 計算機システム
JP2004303026A (ja) レジスタ・リネーミング機能を有するプロセッサ
Goldstein Lazy threads: compiler and runtime structures for fine-grained parallel programming

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19990302

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19990727

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

Free format text: PAYMENT UNTIL: 20070827

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20080827

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20080827

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20090827

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20090827

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20100827

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20110827

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20110827

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20120827

Year of fee payment: 13

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

Free format text: PAYMENT UNTIL: 20130827

Year of fee payment: 14

LAPS Cancellation because of no payment of annual fees