JP4829541B2 - マルチレベル・レジスタ・ファイルを有するディジタル・データ処理装置 - Google Patents

マルチレベル・レジスタ・ファイルを有するディジタル・データ処理装置 Download PDF

Info

Publication number
JP4829541B2
JP4829541B2 JP2005179948A JP2005179948A JP4829541B2 JP 4829541 B2 JP4829541 B2 JP 4829541B2 JP 2005179948 A JP2005179948 A JP 2005179948A JP 2005179948 A JP2005179948 A JP 2005179948A JP 4829541 B2 JP4829541 B2 JP 4829541B2
Authority
JP
Japan
Prior art keywords
register
level
registers
execution
logic
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
JP2005179948A
Other languages
English (en)
Other versions
JP2006012163A (ja
JP2006012163A5 (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2006012163A publication Critical patent/JP2006012163A/ja
Publication of JP2006012163A5 publication Critical patent/JP2006012163A5/ja
Application granted granted Critical
Publication of JP4829541B2 publication Critical patent/JP4829541B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • 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/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30098Register arrangements
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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 or 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、ディジタル・データ処理ハードウェアに関し、詳しく言えば、ディジタル・データ処理装置における処理ユニットのためのレジスタ・ファイル及び支援ハードウェアの設計及び操作に関するものである。
二十世紀の後半に、情報革命として知られている現象が始まった。情報革命はいずれの事象又は機械よりも広範囲の歴史的な発展であるが、ディジタル電子的計算機以上の情報革命を代表する単一の装置は生まれていない。コンピュータ・システムの発展は確かに1つの革命であった。毎年、コンピュータ・システムは急速に成長し、より多くのデータを記憶し、より多くのアプリケーションをユーザに提供している。
現在のコンピュータ・システムは、一般に、中央処理装置(CPU)と、通信バス及びメモリのような情報を記憶、検索、及び転送するために必要な支援ハードウェアとを含んでいる。更に、それは、入出力コントローラまたはストレージ・コントローラのような外界と通信を行うために必要なハードウェア、及びキーボード、モニタ、テープ・ドライブ、ディスク装置、ネットワークに接続された通信回線のような上記のハードウェアに接続された装置等を含む。CPUはそのシステムの心臓である。それは、コンピュータ・プログラムを構成する命令を実行し、他のシステム・コンポーネントのオペレーションを指示する。
コンピュータのハードウェアの立場から見ると、ほとんどのシステムは基本的に同じ態様で動作する。プロセッサは、算術計算、論理的比較、及び或るロケーションから他のロケーションへの移動のような非常に単純なオペレーションの限定されたセットを遂行することができる。しかし、各オペレーションは、非常に高速で遂行される。膨大な数のこれらの単純なオペレーションを遂行するようにコンピュータに指示を与えるプログラムは、そのコンピュータが何か複雑なことを行っているという幻想を与える。コンピュータ・システムの新しい又は改良された機能を遂行することによって認識される諸事項は、本質的には同じセットの非常に単純なオペレーションを遂行することによって、しかし、それを極めて高速で行うことによって、可能にされる。従って、コンピュータ・システムに対する改良を継続することは、これらのシステムが常に高速なものにされることを必要とする。
コンピュータ・システム全体の速度(スループットとも呼ばれる)は、単位時間当たりに遂行されるオペレーションの数として大雑把に測定することが可能である。概念的には、システム速度に対するすべての可能な改良のうちの最も簡単なものは、種々のコンポーネントのクロック速度、特に、プロセッサのクロック速度を高めることである。例えば、すべてのものが2倍の速度で稼動するがその他の点では全く同じ態様で動作する場合、システムは所与のタスクを半分の時間で遂行するであろう。数多くの独立したコンポーネントから構成された初期のコンピュータ・プロセッサは、コンポーネントを縮小及び結合することによって、結局、単一のチップ上に集積回路としてプロセッサ全体をパッケージすることによって、かなりのクロック速度の改良を受け易かった。サイズの減少は、プロセッサのクロック速度を高めること、従って、システム速度を高めることを可能にした。
クロック速度のほかに多くの設計上の改良がコンピュータ・システムのスループットを高めたが、常にクロック速度をより高速化することを求める要求が存在する。
特定のプロセッサ設計のために選択されたクロック速度は、単一のクロック・サイクルにおいて遂行されるべき最も遅いオペレーションよりも速いものになり得ない。一方、これは、論理回路のゲート遅延及び伝送パスの遅延によって制限される。多くの初期のプロセッサ設計は、プロセッサの命令セットおける1つの完全な単純な命令を1クロック・サイクル内で実行することができたが、複雑な命令は複数サイクルを必要とすることが多かった。単純な命令であっても、デコーディング、データの移動、論理演算の遂行等を逐次に行うためにはかなりの数のゲート遅延を必要とする。これらのゲート遅延は、そのようなプロセッサ設計のクロック速度を制限した。より高いクロック速度をサポートするために、最新のプロセッサは、命令を実行するために何らかのパイプライン方式を使用している。パイプラインは、1つの命令を複数の逐次的副次部分又はステージに分解する。各クロック・サイクルでもって、命令はパイプラインの次のステージに進行する。このように各命令を複数のステージに分解することによって、各ステージにおいて遂行される事項の数が減少し、それは1つの完全な命令のために必要な数よりも少ないことを意味する。従って、パイプライン化の設計は、1つのクロック・サイクルにおける配慮されなければならないゲート遅延の数を減少させることによって、より高いクロック速度をサポートする。
パイプライン化は各クロック・サイクルにおける論理ゲート遅延の数をかなり減少させたが、更に重要なものと思われていたプロセッサ・クロック速度におけるもう1つの主要な制限事項は、プロセッサ・チップの物理的サイズ及びレイアウトに固有の伝播遅延である。代表的な最新のクロック速度は、プロセッサ・チップの一部からの信号を比較的離れた部分に単一のクロック・サイクルで伝播することが困難になるほど速い。レイアウトに対して注意深い配慮が払われる場合、多くの長い信号パスを回避することは可能であるが、すべての長いパスが良好な設計によって排除されることはありそうもない。レイアウトは、クロック速度が増加し且つプロセッサが更に複雑になるにつれて、益々難しくなる。いくつかの信号がチップ内で伝播するためには複数サイクルを必要とするということは受容することが必要であろう。しかし、この譲歩が日常的に行われる場合、速いクロック速度の恩恵は大きく損なわれる。
プロセッサにおけるレジスタからのデータの検索は、データの処理に関連した重要なパス相互間での検索である。レジスタの真の目的は、データを最高の速度で検索し得る場所にそのデータを一時的に保持することである。ほとんどのプロセッサ設計では、これは、レジスタ・データが単一のクロック・サイクルでアクセスし得るものであることを意味する。しかし、プロセッサの設計が更に複雑になり、より大きいレジスタ・ファイルを含むとき、レジスタと或る機能的ロジックとの間の物理的距離は、単一のクロック・サイクル内にそれを保つことを困難にする。一般的には、プロセッサが複数のプログラムのレジスタ・セットを含み、各レジスタ・セットがそれぞれのスレッドをサポートすることを意味するハードウェア・マルチスレッドに対するサポートは、レジスタ・ファイルの必要なサイズを更に増加させる。同時に、クロック速度の増加が、レジスタから機能的ロジックにデータを伝播するための時間をより少なくする。
もちろん、レジスタ・アクセスに対して複数のクロック・サイクルを許容することは可能であろうが、レジスタ・アクセスはプロセッサによって遂行される機能のそのような重要な部分を形成するので、これはプロセッサ・パフォーマンスにかなり影響を与えるであろうし、より速いクロック速度という目的を挫折させるであろう。パイプライン・ステージの数が増加するに従って、中間結果を保持するためには更に多くのレジスタが必要となり、クロック速度を改良する努力を更に挫折させる。
非常に速い且つもっと能力のあるプロセッサに対する要求が増すにつれて、プロセッサ内の信号伝播に関する挑戦、特に、レジスタ・アクセスに関連した信号伝播に関する挑戦が増加すると思われる。従って、本発明は、クロック速度の増加及びより大きい且つより複雑なプロセッサをサポートする改良されたプロセッサ設計技法を提供する。
プロセッサは、異なるアクセス待ち時間を有する複数のレベルのレジスタを有する。レジスタの比較的小型のセットが、比較的速いアクセス待ち時間を有する比較的高いレベルのレジスタ・バンクに含まれる。レジスタの大型且つ完全なセットが比較的遅いアクセス待ち時間を有する比較的低いレベルのレジスタ・バンクに含まれる。物理的には、高いレベルのレジスタ・バンクが、そのレジスタから入力を受ける機能的ロジックに近接して設けられ、信号がより速くその機能的ロジックに伝播することを可能にする。低いレベルのレジスタ・バンクは、物理的にその機能的ロジックから更に離れて設けられる。
好適な実施例では、プロセッサは、2レベルのレジスタ・バンクを含むが、3つ以上のレベルが可能であろう。低レベルのバンクは、すべてのプロセッサ・レジスタの完全なセットを含む。高レベルのバンクは、レジスタの小型サブセットを含み、従って、低レベルのバンクにおいて情報を複製する。高レベルのバンクは、単一のクロック・サイクルでアクセス可能であり、一方、低レベルのバンクに対するアクセスは、1アクセス当たり複数のクロック・サイクルを必要とする。
好適な実施例では、プロセッサはハードウェア・マルチスレッドをサポートし、各スレッドに対応する個別の独立したファイルを有する。各レジスタ・ファイルは、そのファイルにレジスタの完全なセットを含む低レベルのバンク及びレジスタのサブセットだけを含む高レベルのバンクを有する。プロセッサは、2つのスレッドに対応する2つのレジスタ・ファイルを含むことが望ましいが、それとは異なる数のスレッド及びレジスタ・ファイルも可能であろう。
高レベルのレジスタ・バンクはレジスタ・データのサブセットのみを含むが、理想的には、それは最もアクセスされそうなサブセットを含む。高レベルのレジスタ・バンクにおけるデータを管理するための種々な技法が可能である。好適な実施例では、各高レベルのレジスタは複数の低レベルのレジスタの固定セットに対応し、それが対応するセットの最近アクセスされた低レベルのレジスタの内容を含む。この技法は、必ずしも、高レベルのバンクにとって最適なサブセットを含むとはいえないが、それは極めて速く、具現化するのは簡単である。
マルチレベルのレジスタ・ファイルを設定することにより、単一サイクルのアクセスを維持するために機能的ロジックに十分に近接して比較的小型の高レベルのレジスタ・バンクを設けることが可能である。同時に、ファイル全体が機能的ロジックのすぐ近くにある必要はないので、比較的大型のレジスタ・ファイルをサポートすることも可能である。高レベルのレジスタにおけるデータのサブセットを管理するための簡単な機構によって、大部分のレジスタ・アクセスが、高レベルのレジスタにおけるデータで満足させられ、パフォーマンスの改良を施すものと期待される。
構造及びオペレーションに両方に関する本発明の詳細は、添付図面を参照することによって最もよく理解することが可能であろう。なお、それらの図面では、同じ参照番号は同じ部品を指している。
図面を参照すると、図1は、本発明の好適な実施例に従って、マルチレベル・レジスタ・ファイルを利用するコンピュータ・システム100の主要なハードウェア・コンポーネントを高レベル表示したものである。コンピュータ・システム100の主要なコンポーネントは、1つ又は複数の中央処理装置(CPU)101A〜101D(図面では、総体的に101として示される)、メイン・メモリ102、キャッシュ・メモリ106、端末インターフェース111、ストレージ・インターフェース112、I/Oデバイス・インターフェース113、及び通信/ネットワーク・インターフェース114を含み、それらは、すべて、バス103、104、及びバス・インターフェース105を介してコンポーネント間の連絡のために結合される。
システム100は、1つ又は複数の汎用プログラマブル中央処理装置(CPU)101A〜101D(上記のように本願では、101として示される)を含む。好適な実施例では、システム100は、比較的大型のシステムを代表する複数プロセッサを含む。しかし、システム100は、代替として、単一のCPUシステムであることも可能である。各プロセッサ101はメモリ102に記憶された命令を実行する。命令及びデータは、処理のために、メイン・メモリ102からキャッシュ・メモリ106にロードされる。メイン・メモリ102は、データ及びプログラムを記憶するためのランダム・アクセス半導体メモリである。図1では、メイン・メモリ102及びキャッシュ・メモリ106は、単一のエンティティとして概念的に示されるが、実際には、これらがもっと複雑であること、特に、キャッシュ・メモリが、一般に、複数の種々なレベル及び機能に分割されているということは明らかであろう。
メモリ・バス103は、CPU101及びキャッシュ・メモリ106、メイン・メモリ102、並びに、I/Oバス・インターフェース・ユニット105の間でデータを転送するためのデータ通信パスを提供する。I/Oバス・インターフェース105は、更に、種々なI/Oユニットに及び種々のI/Oユニットからデータを転送するためのシステムI/Oバス104に結合される。I/Oバス・インターフェース105は、システム・バス104を介して複数のI/Oインターフェース・ユニット111〜114と連絡を行う。なお、それらのI/Oインターフェース・ユニット111〜114は、I/Oプロセッサ(IOP)又はI/Oアダプタ(IOA)としても知られている。システムI/Oバス、例えば、業界標準のPCIバス又は任意の他の適切なバス・テクノロジのものであってもよい。I/Oインターフェース・ユニットは、種々のストレージ及びI/Oデバイスとの連絡をサポートする。例えば、端末インターフェース・ユニット111は、1つ又は複数のユーザ端末121〜124の接続機構をサポートする。ストレージ・インターフェース・ユニット112は、1つ又は複数のダイレクト・アクセス・ストレージ・デバイス(DASD)125〜127の接続機構をサポートする。(これらのDASDは、一般に、回転磁気ディスク・ドライブ記憶装置であるが、それらは、代替的に、ホストにとっては単一の大型記憶装置のように見えるように構成されたディスク・ドライブのアレイを含む他の装置であってもよい)。I/O及び他のデバイス・インターフェース113は、他のタイプのいずれの種々の他の入出力デバイスに対するインターフェースも提供する。2つのそのようなデバイス、即ち、プリンタ128及びファクシミリ装置129が図1の実施例において示され、異なるタイプのものでよい多くの他のそのような装置が存在し得ることは明らかである。ネットワーク・インターフェース114は、システム100から他のディジタル装置及びコンピュータ・システムへの1つ又は複数の通信パスを提供する。そのようなパスは、例えば、インターネット、ローカル・エリア・ネットワーク又は他のネットワークのような1つ又は複数のネットワーク130を含み得るし、或いは、遠隔装置通信回線、無線接続等を含んでもよい。
図1がシステム100の代表的な主要コンポーネントを高いレベルで示すことを意図していること、図1に示された個々のコンポーネントが大きな複雑性を有すること、図1に示されたもの以外のコンポーネントが存在し得ること、及びそのようなコンポーネントの数、タイプ、及び構成が変更可能であることは明らかある。本願では、そのような更なる複雑性又は更なる変更のいくつかの特定な例が開示され、これらが単に例示するためのものであり、必ずしも唯一のそのような変更ではないことも明らかである。
図1では、メイン・メモリ102が単一の一体的な構造体として示されているが、メモリは更に分散されてもよく、種々の、いわゆる非一様メモリ・アクセス(NUMA)コンピュータ・アーキテクチャにおいて知られているような種々のCPU又はCPUセットと関連付けられてもよい。図1では、メモリ・バス103がキャッシュ・メモリ106、メイン・メモリ102、及びI/Oバス・インターフェース105の間の直接連絡パスを提供する比較的簡単な単一のバス構造体として示されているが、実際には、メモリ・バス103は、複数の種々なバス又は連絡パスを含み得る。それらのバス又はパスは、階層構造の Point-to-Point リンク、スター又はウェブ構成、複数階層バス、並列パス、冗長パス等のような種々な形式のいずれの配列構成であってもよい。更に、I/Oバス・インターフェース105及びI/Oバス104は単一の個別のユニットとして示されているが、実際には、システム100は、複数のI/Oバス・インターフェース・ユニット105、及び/又は、複数のI/Oバス104を含むことも可能である。種々のI/Oデバイスに通じる種々の連絡パスからシステムI/Oバス104を分離した複数のI/Oインターフェース・ユニットが示されているが、それとは別に、いくつかの又はすべてのI/Oデバイスを1つ又は複数のシステムI/Oバスに直接に接続することも可能であろう。
図1に示されたコンピュータ・システム100は、マルチユーザ「メインフレーム」コンピュータ・システムを代表するような複数の接続端末121〜124を有する。一般には、このような場合、接続されたデバイスの実際の数は図1に示されたものよりも多いが、本発明はいずれの特定サイズのシステムにも限定されない。コンピュータ・システム100は、代替的に単一のユーザ・ディスプレイ及びキーボード入力しか持たない典型的なシングルユーザ・システムであってもよく、或いは、ほとんど又はまったくダイレクト・ユーザ・インターフェースを持たないで、他のコンピュータ・システム(クライアント)からのリクエストを受けるサーバ又は同様のデバイスであってもよい。
種々のシステム・コンポーネントを説明し、それを高レベルで示したが、代表的なコンピュータ・システムが、本発明の理解にとって不可欠ではない他の多くの図示されてないコンポーネントを含むことは明らかであろう。
図2は、好適な実施例に従って、関連のキャッシュ構造を含むCPU101の主要コンポーネントの高レベル図であり、図1に示されたものよりも更に詳細にCPU101を示す。CPU101は、命令ユニット部分201及び実行ユニット部分211を含む。更に、図2には、レベル1命令キャッシュ(L1I-キャッシュ)221、レベル1データ・キャッシュ(L1 D-キャッシュ)222、レベル2キャッシュ(L2 キャッシュ)223、及びアドレス変換ユニット224が示される。一般に、命令ユニット201は、L1I-キャッシュ221から命令を得て、遂行すべきオペレーションを決定するためにその命令をデコードし、プログラム・フローを制御するためにブランチ条件を解決する。実行ユニット211は、レジスタにおけるデータに関連する算術演算及び論理演算を遂行し、L1D-キャッシュ222からデータをロードするか又はL1 D-キャッシュ222にデータを記憶する。L2キャッシュ223は、一般に、L1 I-キャッシュ221又はL1D-キャッシュ222よりも大きいレベル2キャッシュであり、L1 I-キャッシュ221又はL1 D-キャッシュ222にデータを供給する。L2キャッシュ223は、低レベル・キャッシュ(例えば、L3キャッシュ)又はメイン・メモリから外部インターフェースを通してデータを得る。
いずれのレベルにおけるキャッシュも、論理的には、メイン・メモリ102の延長(異種のレジスタ)におけるものである。しかし、或るキャッシュは、CPUと同じ集積回路チップ上にパッケージされ、このために、CPUの一部と見なされることもある。好適な実施例では、キャッシュ構造を伴う2つのCPU101が単一の半導体チップにおいてパッケージされ、このために、CPU101は、一対のCPUを含むチップから区別するために「プロセッサ・コア」又は「CPUコア」と呼ばれることもある。各CPU101は、それ自身の専用のL1I-キャッシュ221及びL1 D-キャッシュ222を有する。しかし、L2キャッシュ223は、同じチップにおける2つのプロセッサの間で共用される。図2の表示は、代表的なものであることを意図され、任意の特定の物理的又は論理的キャッシュ具現化方法に本発明を限定することを意図されてはいない。プロセッサ及びキャッシュが種々な構成に従って設計可能であること、及びプロセッサ・チップが、図2に示されたものよりももっと多くのキャッシュ又はもっと少ないキャッシュを含み得ることは明らかであろう。
命令ユニット201は、ブランチ・ユニット202、命令デコード/ディスパッチ・ユニット203、並びに、命令レジスタ及びバッファ204を含む。L1I-キャッシュ221からの命令は実行前にバッファ204にロードされる。CPUの設計次第で、複数のバッファ(例えば、種々のスレッドに対するバッファ、1つのスレッドにおける一連の順次命令に対するバッファ、ブランチ・ツー・ロケーションに対するその他のバッファ)が存在し得る。それらの各々は複数の命令を含んでもよい。デコード/ディスパッチ・ユニット203は、現在のマシン・サイクルにおいて1つ又は複数のバッファ204から実行のためにディスパッチされるべき1つ又は複数の命令を選択し、遂行されるべきオペレーション又はブランチ条件を決定するためにその命令をデコードする。ブランチ・ユニット202は、ブランチ条件を評価することによってプログラム・フローを制御し、L1I-キャッシュ221からバッファ204を再び満たす。
実行ユニット211は、データを記憶するための一組の汎用レジスタ212、及び命令ユニット201によってデコードされた命令に応答して汎用レジスタ212におけるデータに関する算術計算及び論理演算を遂行するためのスカラ演算論理ユニット(ALU)213を有する。更に、実行ユニット211は、浮動小数点演算サブユニット214、及びベクトル/SIMDマルチメディア拡張(VMX)実行サブユニット216(本願では、ベクトル実行サブユニット、又は、略して、VMXサブユニットと呼ばれる。なお、「SIMD」は単一命令複数データに対する周知の頭辞語である)を含む。浮動小数点演算サブユニット214は、倍精度(64ビット)オペランドを使用して浮動小数点演算を遂行するための特別な浮動小数点ハードウェア・パイプラインである。ベクトル実行サブユニット216は、所定のベクトル演算を並行して遂行する。VMXサブユニット216の構造及びオペレーションは、本願では更に詳しく説明される。本願では、これは、ベクトル実行サブユニットと呼ばれるが、単に、潜在的な機能を記述したに過ぎない。実際には、サブユニット216は、データに関する算術演算を遂行するだけであり、算術的な集中演算を必要とする任意の又は種々のアプリケーションのために使用可能である。浮動小数点サブユニット214及びVMXサブユニット216は、それぞれ、それ自身のレジスタ・セット215、217を含む。図2に示されたコンポーネントの他に、実行ユニット211は、更なる特別目的のレジスタ及びカウンタ、制御ハードウェア等を含むことが可能である。特に、実行ユニット211は、整数ALU213、浮動小数点サブユニット214、及びVMXサブユニット216の他に実行パイプライン(図示されていない)を含むことも可能である。
L1 I-キャッシュ221及びL1 D-キャッシュ222は、データを命令ユニット201及び実行ユニット211に供給する個別の命令及びデータ・キャッシュである。L2キャッシュ223は、命令及び非命令データの両方を含む非選別のキャッシュである。一般に、データは、命令ユニット又は実行ユニットによってL1キャッシュから取り出されるか又はL1キャッシュに記憶される。データがL1キャッシュ221において入手し得ない場合、それは、L2キャッシュ223からL1キャッシュ221にロードされ、しかる後、L1キャッシュキャッシュから対応するユニットに転送される。その場合、L2キャッシュ223は、そのデータを外部ロケーションから取得する。プロセッサの設計次第で、L1キャッシュをバイパスしてL2キャッシュ223から実行又は命令レジスタにデータをロードすることも可能である。
アドレス変換ユニット224は、命令ユニット201又は実行ユニット211によって生成された有効アドレスをメモリにおける対応する実アドレスに変換する。好適な実施例では、プロセッサは、それぞれの各実行プロセスに対応する有効アドレス・スペースにおける「有効アドレス」を生成する。有効アドレスは、更に大きいユニバーサル仮想アドレス・スペースにおける「仮想アドレス」に変換される。なお、1つの仮想アドレス・スペースがすべてのプロセスによって共用される。仮想アドレスは、更に、データが位置指定される実メモリ・ロケーションに対応する「実アドレス」に変換される。しかし、種々のコンピュータ・アーキテクチャが種々のアドレシング構成を使用しており、本発明がいかなる特定の形式のアドレシングにも限定されないことは明らかであろう。
L1 I-キャッシュ221及びL1 D-キャッシュ222は、有効アドレスを使用してアドレスされることが望ましく、従って、レベル1キャッシュをアクセスするためにアドレス変換が必要ない。しかし、L2キャッシュ223及びその下のすべてのメモリは実アドレスを使用してアドレスされる。従って、低レベル・キャッシュ又はメイン・メモリをアクセスする必要がある場合、プロセッサによって生成された有効アドレスが先ず実アドレスに変換される。
アドレス変換ユニット224は、単一の論理的エンティティとして示されているが、一般には、種々のチップ・ロケーションに分散することが可能な複数のテーブル及び論理回路を含む。例えば、アドレス変換機構は、変換ルック・アサイド・バッファ、有効アドレス・実アドレス変換テーブル、セグメント・テーブル、及び更なる構造体を含んでもよい。更に、命令の変換及び非命令データの変換のために、別の構造体を使用することも可能である。
好適な実施例では、CPU101は、同じマシン・サイクルにおける複数のスレッドの同時実行及び異なるスレッドからの命令の同時ディスパッチをサポートするマルチスレッド・プロセッサである。好適な実施例では、2つの独立したスレッドの同時実行がサポートされる。なお、この数が変更可能であることは当然である。CPU101において実行される各命令は、ロード、ストア、GPレジスタからのオペランド使用する整数演算または論理演算、浮動小数点サブユニット214又はVMXサブユニット216を使用する複合オペレーション、或いは、ブランチのような単一の基本オペレーションを遂行する。デコード/ディスパッチ・ユニット203は、複数のそのような命令を単一のマシン・サイクルで同時にディスパッチすることが可能であるが、実行ユニットがパイプライン化され、実際の命令実行が種々のサイクルにおいてディスパッチされたものを重畳することも可能である。
複数のスレッドの同時実行をサポートするために、別セットのほとんどのレジスタが各スレッドのために存在する。すなわち、汎用レジスタ212、浮動小数点レジスタ215、及びベクトル・レジスタ217の個々のセットが各スレッドのために存在する。更に、複数のアクティブなスレッドをサポートするために、他の状態レジスタ又は特別目的のレジスタ(図示されていない)が複製されてもよい。実行ユニット・パイプライン・ハードウェア、命令ユニット、及びキャッシュは、すべてのスレッドによって共用される。
メモリ及びメモリのキャッシュとは違って、レジスタは、比較的小型のレジスタ識別子を使用して、命令から直接にアクセスされる。レジスタ識別子は、一般に、コンパイラによって割り当てられ(しかし、場合によっては、プログラマがそれらを指定する)、従って、それらは、コンパイルされた実行可能コードの部分である。利用可能なレジスタ・セットのサイズは、ハードウェアの制約内でコードを最適化しようとするすべてのコンパイラの基本パラメータである。レジスタ識別子は、物理的に存在し且つプロセッサにおける使用のために利用可能であるレジスタを識別する。
種々のCPUコンポーネントを説明し、それを高レベルで図示したが、好適な実施例のCPUが、本発明の理解にとって必須ではない図示されなかった多くの他のコンポーネントを含むことは当然である。例えば、代表的な設計では、種々の更なる特別目的のレジスタが必要であろう。更に、図2のCPUがCPUアーキテクチャの単なる一例であること、CPU101内のコンポーネントの数、タイプ、及び構成には多くの変更が存在し得ること、図示されたコンポーネントのほかに図示されてないコンポーネントが存在し得ること、及び、図示されたすべてのコンポーネントがCPU設計に存在するとは限らないことは明らかであろう。例えば、バッファ及びキャッシュの数及び構成が変更可能であり、実行ユニットのパイプラインの数及び機能が変更可能であり、レジスタが種々のアレイ及びセットとして構成可能であり、専用の浮動小数点ハードウェアが存在してもよいし、存在しなくてもよい。更に、CPU101は単純な又は複雑な命令セットを持つことも可能である。
ベクトル実行サブユニット216は、複数のデータに関して種々のオペレーションを並行して遂行する。命令ユニット201によってデコードされた各命令は、1つのオペレーションを指定する単一のオペレーション・コード及び潜在的には複数のオペランド指定子を含む。プロセッサ101のための命令セットにおける或るサブセットは、VMXサブユニット216によって実行される命令を含む。好適な実施例では、ベクトル実行サブユニット216は、種々のベクトル移動、算術演算、論理演算、及び/又は、浮動小数点演算を遂行するための種々の機能的パイプラインを含む。各機能的パイプラインは、複数のデータ値に関する同じオペレーションを並行して遂行する128ビット幅のパイプラインとして構成される。なお、パイプラインの幅が変更可能であることは当然である。一般に、パイプラインは4つの32ビット値に関するオペレーションを並行して遂行する。しかし、少なくとも或るパイプライン及び或るオペレーションに対しては、データ値の長さは変化する。例えば、或るオペレーションは、8個の16ビット値に関して並行して遂行可能であるか、又は16個の8ビット値に関して並行して遂行可能である。VMX216におけるパイプラインのための各命令は、128ビットのデータすべてに適用可能な単一のオペレーション・コードを含む。各命令は、更に、ベクトル・レジスタ217におけるデータのソース及び宛先を指定する。好適な実施例では、命令は、ベクトル・レジスタ217のファイルにおける128ビット・レジスタを参照する3つほどのオペランド・ソース指定子及び単一の宛先指定子を含むことが可能である。命令において指定されたオペレーションは、その128ビット・レジスタのデータを割り振る方法(即ち、長さが32ビット、16ビット、又は8ビットの値)を暗示している。そこで、128ビット・オペランド・レジスタに含まれた暗黙値の各々を使用して、同じオペレーションが別々に且つ並行して遂行される。別の方法として、それぞれの位置に対応して、すべてのオペレーションが同じとは限らない一定の事前定義されたパイプラインのためのオペレーションのセットを指定するために使用されるオペレーション・コードを設計することも可能であろう。
好適な実施例では、ベクトル実行サブユニット216のためのベクトル・レジスタ217は2層構造を有する。この構造では、レジスタ・データの一部分が、ベクトル実行サブユニットのパイプラインに対する入力に物理的に近接したローカル・ベクトル・レジスタ・ファイルに含まれ、完全なレジスタ・データがフル・ベクトル・レジスタ・ファイルに含まれる。そのフル・ベクトル・レジスタ・ファイルは、物理的配置の輻輳制約を緩和又は排除するように、物理的に大きな距離に設けられる。
図3は、好適な実施例に従って、実行ユニット211におけるベクトル実行サブユニット216の高レベルの機能図を示す。図3を参照すると、ベクトル実行サブユニット216は、各々がベクトル・データに関してそれぞれの機能セットを遂行する4つの機能実行ユニット301〜304、ローカル・ベクトル・レジスタ・ファイル(ローカルVRF)305A、305B(本願では、これを総体的に305と呼ぶ)、フル・ベクトル・レジスタ・ファイル(フルVRF)306A、306B(本願では、これを総体的に306と呼ぶ)、バイパス・マルチプレクサ307、結果マルチプレクサ308、ロード・ステージング・ユニット309、及びストア・ステージング・ユニット310を含む。
ローカル・ベクトル・レジスタ・ファイル305は、一般に、機能実行ユニットが操作するオペランドを保持し、フル・ベクトル・レジスタ・ファイル306におけるデータの一部分を含む。バイパス・マルチプレクサ307は、ローカル・ベクトル・レジスタ・ファイル305又は結果マルチプレクサ308のようなソースから機能実行ユニットのような宛先までデータを経路指定するラッチ及びバス経路指定ロジックを含む。機能実行ユニット301〜304は、命令ユニット201からの命令に従ってデータに関する実際のオペレーションを遂行する。結果マルチプレクサ308は、バイパス・マルチプレクサ307にローカル・ベクトル・レジスタ・ファイル305、及びフル・ベクトル・レジスタ・ファイル306対する入力として機能実行ユニットの出力を受け、それを選択する。ロード・ステージング・ユニット309はメモリからロードされたデータを受ける(即ち、一般には、L1D-キャッシュ222から受けるが、L1 D-キャッシュ222をバイパスすること及び低レベル・キャッシュから直接にロードすることが可能である)。ストア・ステージング・ユニット310はメモリに(即ち、L1Dキャッシュ222に)データを一時的に保持する。
各機能実行ユニット301〜304は、ベクトル・データに関してそれぞれの機能セットを遂行する実行パイプラインである。各機能実行ユニットは、所与のサイクルにおいて3つまでの128ビット・レジスタ入力を受けることができる。各128ビット・レジスタは、複数のオペランド値、各値の長さ、及び遂行されるべきオペレーションによって暗示されるその128ビット・レジスタにおける値の数を表す。例えば、命令が32ビット・オペランドを有する場合、機能実行ユニットは、4セットの32ビット・オペランドを使用してそのオペレーションを並行して遂行する。その場合、32ビット・オペランドの各セットは3つのソース・オペランド及び1つの宛先オペランドを有する。各機能実行ユニットは異なっており、異なる機能セットを遂行し、いずれのサイクルにおいて開始された機能も、機能実行ユニットにおけるオペランドのすべてのセットに対して同じである。例えば、単一の機能実行ユニットは、整数加算、整数減算、ビット単位のAND、ビット単位のOR等のような一組の機能を遂行し得る。所与のパイプライン入力サイクルにおいて、制御ロジック(図示されていない)が、遂行されるべき利用可能な機能セットの機能及びバイパス・マルチプレクサ307における1つ又は複数の入力レジスタを選択する。各入力レジスタは複数のオペランド(例えば、4つの並列32ビット・オペランド)を表す128ビットを含む。好適な実施例では、機能実行ユニットは、ベクトル置換(permute)ユニット、ベクトル単一整数演算ユニット、ベクトル複合整数演算ユニット、及びベクトル浮動小数点演算ユニットを含む。しかし、機能実行ユニットの数及び機能は変更することが可能である。
図4は、ローカル・ベクトル・レジスタ・ファイル305A、305B及び関連のロジックの構造を更に詳細に示す。図5は、フル・ベクトル・レジスタ・ファイル306A、306B及び関連のロジックの構造を更に詳細に示す。この実施例では、二組のベクトル・レジスタ・ファイルが存在する。その一組は、プロセッサによってサポートされた各アクティブ・スレッドに対応する。各命令に関連した単一スレッド識別子ビットは、命令がフル・ベクトル・レジスタ・ファイル306A又は306Bにおけるデータを参照するかどうかを決定する。
ベクトル実行ユニット216は、ローカル・ベクトル・レジスタ・ファイル305A、305Bにおける6個までの個別のレジスタからの同時読出し及び3個までの個別のレジスタへの同時書込みをサポートする。各命令は3つものソース・オペランド(及び、1つの宛先オペランド)を持つことが可能であるので、ベクトル実行サブユニットは、同じサイクルにおいて並行して発生された2つの命令をサポートするように設計される。一般に、いずれの特定の命令によっても単一のオペランドしか変更されず、従って、2つの並行した命令は、2つの同時書込みがサポートされることだけを必要とする。第3の書込みポートは、キャッシュから又はフル・ベクトル・レジスタ306からデータをロードするためのものである。
フル・ベクトル・レジスタ・ファイル306の各々は、128*128ビットのレジスタ・アレイであり、各レジスタが128ビットから成る128個のレジスタを含む。128ビット・レジスタの各々は複数のデータ値を表し、それらのデータ値は、一般に、機能実行パイプラインによって並行して操作される。フル・ベクトル・レジスタ・ファイルは128個のレジスタを含むので、レジスタは7ビットの識別子を使用する命令セットにおいて識別される。
ローカル・ベクトル・レジスタ・ファイル305の各々は、フル・ベクトル・レジスタ・ファイル306におけるデータの一部分を含む。各ローカル・ベクトル・レジスタ・ファイル305は、34*130ビットのレジスタ・アレイであり、各レジスタが130ビットから成る34個のレジスタを含む。130ビットのレジスタの各々は、128ビットのオペランド・データ(フル・ベクトル・レジスタ・ファイル306におけるオペランド・データの複製)及び2ビットの上位桁レジスタ識別子を含む。7ビットのレジスタ識別子における5つの下位桁ビットは、ローカル・ベクトル・レジスタ・ファイル305における32個のレジスタの1つを選択するために使用される。ローカル・ベクトル・レジスタ・ファイル305の各レジスタにおける2ビットの上位桁レジスタ識別子は、レジスタを選択するためには使用されない7ビットのレジスタ識別子における2ビットの上位桁ビットを含んでいる。これらは、選択されたレジスタが正しいレジスタに対応することを確認するために必要である。ローカル・ベクトル・レジスタ・ファイルにおける(34個のレジスタのうちの)残りの2つのレジスタは、以下で更に説明するように、オペランド・コンフリクトのために使用される。
オペレーション時に、ローカル・ベクトル・レジスタ・ファイル305が、スレッド識別子ビット及び(命令からの)レジスタ識別子の下位桁の5ビット部分を読出し選択ロジック402に入力することによって読み出される。読出し選択ロジック402は、その入力に応答してローカル・ベクトル・レジスタ・ファイル305A、305Bにおける1つのレジスタを選択するデコーダである。好適な実施例では、読出し選択ロジック402の6個のコピーが存在し、その各々はそれぞれの読出し出力ポート405に対応する。読出し選択ロジック402の6個のコピー及び6個の読出しポート405は、ローカル・ベクトル・レジスタ・ファイル305A、305Bの両方によって共用される。そのレジスタにおける128ビットのオペランド・データ部分が読出し出力ポート405を介してバイパス・マルチプレクサ・ロジック307に出力される。そのレジスタ識別子における2ビットの上位桁部分がコンパレータ404(それの6個のコピーが存在し、各コピーが各読出し出力ポートに対応する)に出力される。コンパレータ404は、130ビットのレジスタにおけるレジスタ識別子の2ビットの上位桁部分と命令からのオペランド・レジスタ識別子における2ビットの上位桁部分とを比較する。それら2つが同じである場合、正しいレジスタ・データが読み出されたことになり、オペレーションは進行することを許される。それらの2つが同じでない場合、無効データ信号がコンパレータ・ロジック404によって生成される。
命令のいずれのオペランドにおける無効データ信号も、その命令を機能実行パイプラインからフラッシュ(消去)させ、有効なレジスタ・データをフル・ベクトル・レジスタ・ファイル306からロードした後に再試行させる。従って、データは投機的にローカル・ベクトル・レジスタ・ファイル305から実際に読み出され、バイパス・マルチプレクサ307に(そして、そこから機能実行ユニット301〜304に)提供される。しかる後、ローカル・ベクトル・レジスタ・ファイルから得られたデータが正しいレジスタに対応することを確認することが可能となる。レジスタ識別子ビットは、バイパス・マルチプレクサ307におけるデータを適切な機能実行ユニットに経路指定するのと並行して、コンパレータ404において比較される。特定の命令に対するすべてのオペランドが有効である場合、命令は実行パイプラインを通して正常に進行する。いずれかオペランドが無効である場合、次のような2つのアクションが並行して取られる。即ち、必要なレジスタ・データがフル・ベクトル・レジスタ・ファイル306からローカル・ベクトル・レジスタ・ファイル305に転送され、そして、パイプラインにおける無効データを有する命令がフラッシュされてパイプラインが再起動される。一般に、フル・ベクトル・レジスタ・ファイルに対するアクセス及びローカル・ベクトル・レジスタ・ファイルへの必要なレジスタ・データの書込みが、パイプラインをフラッシュするよりも早く達成可能であり、従って、パイプラインがフラッシュされそして再起動されると直ちに、必要なデータが一般に利用可能となる。好適な実施例では、コンパレータ404は、他の理由で(例えば、取られることのない投機的ブランチで)汎用パイプラインフラッシュ機構(図示されていない)をトリガし、従って、マルチレベル・キャッシュをサポートするために必要な追加のロジックを最少にする。
各レジスタは3つの異なるレジスタを参照する3個ものオペランドを含み得るので、ローカル・ベクトル・レジスタ・ファイルにおいて2つ以上のオペランドがコンフリクトする可能性がある。即ち、同じ下位桁5ビットのレジスタ識別子を有するが異なる上位桁レジスタ識別子ビットを有するレジスタを2つのオペランドが参照する可能性が存在する。この場合、ローカル・ベクトル・レジスタ・ファイル305の同じレジスタに両方のオペランドを同時に置くことは不可能であろう。このために、ローカル・ベクトル・レジスタ・ファイルには、2つの追加のレジスタが設けられる(合計34個のレジスタとなる)。ベクトル実行サブユニットのオペレーションを必要とする命令がディスパッチされるとき、オペランドのレジスタ識別子における下位桁5ビットがコンパレータ・ロジック403によって相互に比較される。そのペア化された比較が論理的にORされる。いずれの2つのオペランドもレジスタ識別子の同じ下位桁5ビットを有する場合、オペランド・コンフリクトが信号される。オペランド・コンフリクトは、無効レジスタ・データと同じ結果を生じる。即ち、パイプラインがフラッシュされ、新たなオペランドがフル・ベクトル・レジスタ・ファイル306からロードされる。しかし、オペランド・コンフリクトの場合、3つのオペランドすべてがローカル・ベクトル・レジスタ・ファイル305にロードされる。「A」オペランドは、レジスタ識別子の5ビットの下位桁部分によってアクセスされる32個のレジスタのうちの正規のロケーションにロードされる。「B」及び「C」オペランドは、それぞれ、33番目及び34番目のレジスタにロードされる。そこで、命令が再試行されるとき、オペレーション・コンフリクト再試行ライン(op_con_retry)がアクティブであるとき、33番目及び34番目のレジスタを使用するために読出し選択ロジック402に信号する。そのop_con_retry ラインがアクティブであるとき、レジスタ識別子の値に関係なく、読出し選択ロジックは「A」オペランドを正規にデコードし、33番目及び34番目のレジスタを参照するために、それぞれ、「B」及び「C」オペランドをデコードする。各スレッドに対して(即ち、各レジスタ・ファイル305A、305Bに対して)個別のop_con_retry ライン入力が存在する。
命令のそのようなオペランド・コンフリクト及びその結果を生じる再試行を回避することが望ましいので、実行可能なコードを生成するコンパイラは、同じ命令におけるオペランドに非コンフリクトのレジスタを割り当てることによってオペランド・コンフリクトを回避するように最善に設計される。そのような適切に設計されたコンパイラが使用されるものと仮定すると、オペランド・コンフリクトは決して生じないかもしれず、或いは非常にまれにしか生じないかもしれない。しかし、プロセッサ・ロジックは、前に説明したように、コンフリクトが生じる場合にはそのコンフリクトに適応するように設計されなければならない。
ローカル・ベクトル・レジスタ・ファイル305は、スレッド識別子ビット及びレジスタ識別子の下位桁5ビット部分を(命令から)書込み選択ロジック401に入力することによって書き込まれる。書込み選択ロジック401は、その入力に応答して、ローカル・ベクトル・レジスタ・ファイル305A、305Bの単一のレジスタを選択する。好適な実施例では、書込み選択ロジック401の3つのコピーが存在する。各コピーはそれぞれの書込みポート406に対応し、書込み選択ロジック401及び書込みポート406はローカル・ベクトル・レジスタ・ファイル305A、305Bの両方によって共用される。レジスタ識別子の2ビットの上位桁部分が入力の128ビット・オペランド・データ部分と連結され、それらが書込み選択ロジック401によって選択された130ビット・レジスタに書き込まれる。特別の wrt_op_con_retry 制御ラインが33番目及び34番目のレジスタを選択するために使用される。即ち、前に説明したように、オペランド・コンフリクトが検出されたとき、命令の3つのオペランドすべてがフル・ベクトル・レジスタ・ファイルから得られ、「A」、「B」及び「C」書込みポートにおいて利用可能にされる。そこで、書込み選択ロジック401に対するwrt_op_con_retry ラインが活性化され、レジスタ識別子の下位桁5ビットによって選択されたローカル・レジスタ内に「A」書込みポート・データを書き込ませ、一方、「B」及び「C」書込みポート・データが、スレッド識別子に対応するローカル・ベクトル・レジスタ・ファイルのうちの、それぞれ、33番目及び34番目のローカル・レジスタに書き込まれる。3つの書込みポートしか存在しないので(一時に1つの命令しか再試行され得ないので)、単一のwrt_op_con_retry ラインしか必要ない。
同様に、オペレーション時には、スレッド識別子ビット及びフル7ビット・レジスタ識別子を図5における読出し選択ロジック502に入力することによって、フル・ベクトル・レジスタ・ファイル306が読み取られる。読出し選択ロジック502は、その入力に応答して、デコードし、フル・ベクトル・レジスタ・ファイル306A、306Bの単一のレジスタを選択する。好適な実施例では、読出し選択ロジック502の4つのコピーが存在し、各コピーはそれぞれの読出し出力ポートに対応し、読出し選択ロジック及び読出し出力ポートは、フル・ベクトル・レジスタ・ファイル306A、306Bの両方によって共用される。読出し出力ポートの1つは、ストア・ステージング・ユニット310にデータを供給する。(従って、データは、いつも、フル・ベクトル・レジスタ・ファイル306から記憶される)。残りの3つの読出し出力ポートはデータをローカル・ベクトル・レジスタ・ファイル305に供給する。
フル・ベクトル・レジスタ・ファイル306は、スレッド識別子ビット及び7ビット・レジスタ識別子を書込み選択ロジック501に入力することによって書き込まれる。書込み選択ロジック501は、その入力に応答して、ローカル・ベクトル・レジスタ・ファイル306A、306Bの単一のレジスタを選択する。好適な実施例では、書込み選択ロジック501の3つのコピーが存在する。各コピーはそれぞれの書込みポートに対応し、書込み選択ロジック及び書込みポートは、フル・ベクトル・レジスタ・ファイル306A、306Bの両方によって共用される。
図6は、データをローカル・ベクトル・レジスタ・ファイル305及びフル・ベクトル・レジスタ・ファイル306に書き込むための主要なハードウェア及びデータ・パスを表す。前に説明したように、ローカル・ベクトル・レジスタ・ファイル305及びフル・ベクトル・レジスタ・ファイル306の各々は3つのポートを有する。それらのポートは、本願では、「A」、「B」及び「C」として表される。一般に、「A」及び「B」ポートは、実行パイプラインからの結果を書き込むために使用され、一方、「C」ポートはデータをロードするために使用される。更に、ローカル・ベクトル・レジスタ・ファイル305では、3つのポートすべてがフル・ベクトル・レジスタ・ファイル306からのデータをコピーするために使用することが可能である。
動作時には、メモリ(特に、L1 Dキャッシュ222)からロードされたデータがロード・ステージング・ユニット309を通過して、ローカル・ベクトル・レジスタ・ファイル305及びフル・ベクトル・レジスタ・ファイル306の両方における「C」書込みポートに並行して書き込まれる。機能実行ユニットによって生成されたデータは結果マルチプレクサ308を通過し、書込みポート「A」及び「B」を使用してローカル・ベクトル・レジスタ・ファイル305及びフル・ベクトル・レジスタ・ファイル306に並行して書き込まれる。従って、2つの機能実行ユニットの結果及び1つの128ビット・データ・ロードを2つのレジスタ・ファイルに同時に書き込むことが可能である。
オペランドの1つがローカル・レジスタになかったために、又は、1つのオペランド・コンフリクトが検出されたために、命令を再試行することが必要である場合、データがフル・ベクトル・レジスタ・ファイル306から読み出され、ローカル・ベクトル・レジスタ・ファイル305に書き込まれる。単一のサイクルでフル・ベクトル・レジスタ・ファイルから最大3つのレジスタを書き込むことが可能である。これは、1つの命令が3つのオペランドを有し、オペランド・コンフリクトが存在するか又はオペランドがローカル・ベクトル・レジスタ・ファイルに全くない場合に必要である。この場合、フル・ベクトル・レジスタ・ファイル306からの読出し出力ポートの2つが結果マルチプレクサ308に入力される。それらのデータが、結果マルチプレクサ308からローカル・ベクトル・レジスタ・ファイル305の「A」及び「B」書込みポートに経路指定される。フル・ベクトル・レジスタ・ファイル306からの第3の読出し出力ポートがマルチプレクサ601に入力される。マルチプレクサ601は、ロード・データ及び読出し出力ポートからのデータのどちらかを選択する。その後、このデータは、ローカル・ベクトル・レジスタ・ファイル305の「C」書込みポートに経路指定される。
ローカル・ベクトル・レジスタ・ファイル305は、フル・ベクトル・レジスタ・ファイル306におけるデータの部分的コピーを維持する。なお、両方のレジスタ・ファイルとも、いつも最新のデータを維持している。特に、メモリ・キャッシュにおいて頻繁に行われるような変更済みデータの「キャスト・バック(cast back)」は存在しない。変更されたデータ(機能実行パイプラインから生じる)は、いつも、フル・ベクトル・レジスタ・ファイル及びローカル・ベクトル・レジスタ・ファイルの両方に同時に書き込まれ、従って、両方のコピーとも最新のものである。データが(ローカル・レジスタを異なるレジスタの内容でもって上書きすることによって)ローカル・ベクトル・レジスタ・ファイルから除去される場合、フル・ベクトル・レジスタ・ファイルを更新するための更なるアクションは必要ない。
動作時に、特定のレジスタを表すデータは、それが異なるレジスタの内容で持って上書きされるまで、そのままローカル・レジスタにある。データがキャッシュ・メモリからロードされる(データがローカル・ベクトル・レジスタ・ファイル及びフル・ベクトル・レジスタ・ファイルの両方に同時にロードされる)とき、又はそのデータを必要とする命令の結果としてフル・ベクトル・レジスタ・ファイルからコピーされるとき、そのデータは上書きされる。従って、ローカル・ベクトル・レジスタ・ファイルは、フル・ベクトル・レジスタ・ファイルの一部分の1ウェイ・セット・アソシアティブ・コピーと見なすことができる。この場合、各ローカル・レジスタ(特別ケースである33番目及び34番目のレジスタを除く)は、同じ下位桁5ビット識別子を有する4つのレジスタのセットにおける最新使用のレジスタを含む。
命令を再試行するために機能実行パイプラインをフラッシュすることは、複数の喪失クロック・サイクルを伴う。ローカル・ベクトル・レジスタ・ファイルから読み出されたオペランドの極めて大きな部分が無効であって、機能実行パイプラインをフラッシュさせる場合、そのパイプラインをフラッシュすることにより失われる時間は、高速アクセスのローカル・ベクトル・レジスタ・ファイルを使用することによる如何なるパフォーマンス利得も減少させるか又は重要性を高めることができる。従って、レジスタ参照の大多数はローカル・ベクトル・レジスタ・ファイルにおいて満足されなければならず、パフォーマンスの恩恵を維持するために必要な正確なパーセンテージは種々の設計パラメータに依存する。ベクトル実行サブユニットにおいて実行される命令は、一般に、同じレジスタが予測可能なパターンで再び参照されるという高度の反復性を示す。従って、レジスタ参照がローカル・ベクトル・レジスタ・ファイルにおいて満足されるという望ましい形が得られるものと期待される。最適な方法としては、コンパイラが無効オペランドの発生及びパイプラインのフラッシュを最少にするようにレジスタを割り当てるであろう。フラッシュの発生を減少させるか又は回避するための別の設計上の技法を以下で説明する。
本願では、レジスタ・ファイルの特定の構造、書込みポート及び読出しポートの数、並びに、関連のハードウェアを図示及び説明するが、そのような構造の数及びタイプが変更可能であることは明らかであろう。上記の変更の他に、本発明の範囲内で、マルチレベル・レジスタ・ファイルの設計における次のような変更が可能である。これらの変更又は代替方法は、本願では、例として開示され、本発明の範囲をその好適な実施例及び開示された代替方法に限定するものと解するべきではない。
好適な実施例において、ローカル・ベクトル・レジスタ・ファイルからのデータは、リクエストされたオペランド・レジスタ識別子がローカル・ベクトル・レジスタ・ファイルにおけるレジスタ識別子に実際に対応するかどうかを決定するとき、実行パイプラインに並行して投機的に供給され、そのデータが正しくない場合、その後、パイプラインはフラッシュされ、再起動される。この方法の利点は、いずれにしても種々の条件に対してパイプラインをフラッシュするための機構が一般には必要であるので、それが比較的少ない追加のハードウェアしか必要としないことである。しかし、パイプラインをフラッシュすること及びそれを再起動することは、正しいデータがフル・ベクトル・レジスタ・ファイルから得られるまで単にパイプラインをアイドリングすることよって生じる場合よりも大きな遅延を生じさせることは明らかであろう。例えば、フル・ベクトル・レジスタ・ファイルに対するアクセスが1つ又は2つの追加サイクルをとるものと考えられるが、パイプラインをフラッシュすること及び再起動することは7サイクル又はそれ以上を必要とする。従って、極めて大きい規模のレジスタ参照がローカル・ベクトル・レジスタ・ファイルにおいて存在しない場合、パフォーマンスは極度に低下するであろう。
パイプラインをフラッシュするという負担を軽減するために、2つの可能な設計上の代替方法が使用可能である。第1の代替方法は、レジスタ参照の反復性が不十分であると考えられる命令シーケンスに対して、ローカル・レジスタが選択的にディセーブルされる。第2の代替方法では、実行サイクルの開始時にデータ無効状態を検出し、フル・ベクトル・レジスタ・ファイルからのデータを待つために1又は2サイクルの間パイプラインをアイドリングするロジック(図示されていない)を構成することが可能であろう。
これらの2つの代替方法は、いずれも、データをローカル・ベクトル・レジスタ・ファイルに先ず記憶することなく、フル・ベクトル・レジスタ・ファイルから機能実行パイプラインにデータを直接に入力することが可能であることを必要とする。図7は、これらの代替実施例に従って、主要なハードウェアと機能実行パイプラインにデータを入力するためのデータ・パスとを示す。
図7を参照すると、いずれの代替方法においても、フル・ベクトル・レジスタ・ファイル306は、ローカル・ベクトル・レジスタ・ファイル305と少なくとも同じ数の読出しポート(望ましくは、6個)を有するであろう。二重読出しレジスタ識別子パスが読出しレジスタ識別子をローカル・ベクトル・レジスタ・ファイル305及びフル・ベクトル・レジスタ・ファイル306の両方に並行して供給する。フル・ベクトル・レジスタ・ファイルに対するアクセス・タイムがより長いので、少なくとも1つのラッチ・レジスタ701がフル・ベクトル・レジスタ・ファイルの6個の読出しポートの各々からの出力パスにおいて必要とされるであろう。各出力パスにおいて必要なそのようなラッチ・レジスタの数は、ローカル・レジスタ・アクセス及びフル・レジスタ・アクセスの間のサイクル遅延に等しく、その遅延は1サイクルであることが望ましい。バイパス・ロジック307におけるマルチプレクサ703(それの6個が存在し、1つが各読出しポートに対応する)は、各機能実行ユニット・パイプライン301〜304への入力におけるそれぞれの入力ラッチ・レジスタ705〜708への入力に対するローカル・ベクトル・レジスタ・ファイル305又はフル・ベクトル・レジスタ・ファイル306の出力を選択するであろう。各機能実行パイプライン301〜304は、各オペレーションに対する3つの最大入力オペランドに対応する3つの入力ラッチ・レジスタを含むことが望ましい。バイパス・ロジック307は、更に、バイパス遅延/選択ロジック704を含み、そのロジック704は、結果マルチプレクサ308から、及び任意選択的には他のソースから入力を受け、数サイクルの間出力を遅らせる機能を有し、マルチプレクサ703に対する出力を選択する。マルチプレクサ703は、既にラッチ・レジスタ705〜708に対するいくつかの入力の1つを選択する必要があるので、フル・ベクトル・レジスタ・ファイル306からラッチ・レジスタ705〜708へのデータ・パスの追加をサポートするための更なるマルチプレクサは必要ないことに注目すべきである。即ち、フル・ベクトル・レジスタ・ファイル306からのデータ・パスにとって必要な更なるサポートは、ローカル・ベクトル・レジスタ・ファイル305からラッチ・レジスタ705〜708へのデータ・パスにおける更なるゲート遅延を間に挟むことを必要としない。
第1の代替的な実施例では、フル・ベクトル・レジスタ・ファイル306からデータを選択することによってローカル・ベクトル・レジスタ・ファイル305を選択的にディセーブルするように、制御ロジック(図示されていない)がマルチプレクサ703を制御する。すべてのレジスタ・データがフル・ベクトル・レジスタ・ファイルにあるので、ローカル・ベクトル・レジスタ・ファイルがそのようにしてディセーブルされるとき、選択されたレジスタにおける無効データの結果としてパイプラインをフラッシュ及び再起動する必要がないであろう。種々の条件のいずれかに応答して、ローカル・ベクトル・レジスタ・ファイルのディセーブルを遂行することが可能である。例えば、制御ロジックは、各実行スレッドに対するローカル・レジスタ参照において検出された無効データの比率を動的に監視することが可能である。特定のスレッドがプロセッサにディスパッチされるとき、ローカル・ベクトル・レジスタ・ファイルがその特定のスレッドに対してイネーブルされるであろう。特定のスレッドに対するローカル・レジスタ参照における無効データの監視された比率が或る所定の設計閾値を超える場合、ローカル・ベクトル・レジスタ・ファイルはディセーブルされるであろう。簡単且つ効果的な監視手段は、各スレッドに対する単一のアップ・ダウン・カウンタである。そのカウンタは、ローカル・レジスタにおける有効データを参照する各命令に対して第1の量だけインクリメントされ、無効データ(従って、再試行されなければならない)を参照する各命令に対して第2の量だけデクリメントされる。インクリメント対デクリメントの量の比率が無効データの所望の設計閾値比率に対応するので、一貫してゼロよりも低いカウンタは、ローカル・ベクトル・レジスタ・ファイル305における無効データよる命令の過度な再試行を表す。動的な監視のための1つの代替方法として、レジスタ参照の十分な反復性が存在するかどうかをコンパイラが予測することができるかもしれず、従って、ローカル・ベクトル・レジスタ・ファイル305をディセーブルするようにプログラム可能コンテキスト・フラッグをセットすることができる化も知れない。
第2の代替的な実施例では、データを読み出すこと及びそれを或るレジスタを通して移動させることに並行して、制御ロジックが、各個々の命令に対する無効データ状態を検出し、それに応答するであろう。次に、そのような代替方法に関する読出しオペレーションの例示的説明を行う。サイクルNのとき(命令をディスパッチ及びデコードした後)、命令において参照されたすべてのレジスタ識別子が、ローカル・ベクトル・レジスタ・ファイル305及びフル・ベクトル・レジスタ・ファイル306の両方に並行して送られるであろう。両方のレジスタ・ファイルは同時に出力するであろう。ローカル・ベクトル・レジスタ・ファイル305の出力は、サイクルN+1において、マルチプレクサ703を通って、入力ラッチ・レジスタ705〜708の選択された1つに直接に送られるであろう。より長いアクセス待ち時間を有するフル・ベクトル・レジスタ・ファイル306は、サイクルN+1では、ラッチ・レジスタ701においてその出力を保持するであろう。サイクルN+1の終了までに、制御ロジックは、ローカル・レジスタのデータが無効であったかどうかを決定し、機能実行ユニット及びバイパス・マルチプレクサのオペレーションを制御するラッチ又は他のロジックにこの情報を提供するであろう。ローカル・レジスタのデータが有効であった場合、ラッチ・レジスタ705〜708の選択された1つにおけるオペランド・データが、サイクルN+2において、対応する機能実行ユニットの第1ステージに進むであろう。ローカル・レジスタのデータが有効でなかった場合、機能実行ユニットは、サイクルN+2において、1サイクルの間アイドリングするであろうし、フル・ベクトル・レジスタ・ファイルのデータ(その時点ではラッチ・レジスタ701にあり、2サイクルのアクセス・タイムを取る)が、マルチプレクサ703を通過すること及びラッチ・レジスタ705〜708の対応する1つにロードされることを可能にされるであろう。そこで、オペランド・データが、サイクルN+3において、適切な機能実行ユニットの第1ステージに進むであろう。オペランド・コンフリクトは同様に処理されるので、ローカル・ベクトル・レジスタ・ファイル305における2つの余分なレジスタは不必要であろう。
好適な実施例では、プロセッサは、汎用ALU213によって使用される一組の汎用レジスタ212、浮動小数点サブユニット214によって使用される別のセットの浮動小数点レジスタ215、及びベクトル実行サブユニット216によって使用される別のセットのベクトル・レジスタ217を含む。本願において開示されたように、ベクトル・レジスタ217だけは、マルチレベル・レジスタ・ファイルとして設計され、浮動小数点レジスタ215及び汎用レジスタ212は、それらの設計が一般的であり、サイズが小さい。この設計上の選択は、ベクトル・レジスタが大きなサイズであるために、及び、ベクトル・レジスタが非常に安定した参照パターンを示す結果、命令の再試行が比較的少ないであろうという期待のために、部分的に行われる。しかし、マルチレベル汎用レジスタ・ファイル、及び/又は、マルチレベル浮動小数点レジスタ・ファイル、或いは、何らかの他の形式の機能ユニットをサポートするマルチレベル・レジスタ・ファイルを代替的に使用することも可能であろう。参照パターンがあまり安定してなくても、上記の代替方法において説明したように、必要なレジスタがローカル・ベクトル・レジスタ・ファイルから脱落したことによるパフォーマンス結果が減少し得る場合、そのような設計は有用であるかもしれない。更に、異なる機能割り振りを持つプロセッサを使って設計することも可能である。それは、すべての実行パイプラインにデータ供給を行う単一セットのレジスタしか持たなくてもよいであろうし、或いは、本願において開示されてないレジスタ及び機能ユニットの更なるセットを持ってもよいであろう。
好適な実施例では、ローカル・ベクトル・レジスタ・ファイルは、本質的には、フル・ベクトル・レジスタ・ファイルの所与のサブセットに対する単一のローカル・レジスタしか提供しない1ウェイ・セット・アソシアティブである。そのような構造は、最近参照されたレジスタのサブセットしかローカル・ベクトル・レジスタ・ファイルに保持されないので、ローカル・ベクトル・レジスタ・ファイルにおけるデータをアクセス及び維持するために必要なハードウェアを単純化する。単純化されたハードウェア構造は、1サイクルであることが望ましいローカル・ベクトル・レジスタ・ファイルに対するアクセス速度にとって重要な利点を有する。しかし、キャッシュ・メモリの分野において知られているように、低使用頻度ビット又は他の手法に基づいてどのレジスタをローカル・ベクトル・レジスタ・ファイルに保持すべきかをプロセッサが決定するというNウェア・アソシアティブ・ローカル・ベクトル・レジスタ・ファイルを代替的に使用することも可能であろう。そのような手法の使用は、所与のオペランドがローカル・ベクトル・レジスタ・ファイルにない確立を減少させるかもしれないが、複数のアクセス・サイクルを伴うこともある。
好適な実施例では、ローカル・ベクトル・レジスタ・ファイルにおけるすべてのレジスタが複製され、比較的遠隔のレジスタ・ファイル(フル・ベクトル・レジスタ・ファイル)がすべてのレジスタ・データの完全なコピーを含む。レジスタの複製は、レジスタ・セル自体のための追加のチップ領域を必要とするが、制御ロジックをかなり単純化する。1つの代替の実施例では、非複製のローカル・ベクトル・レジスタ・ファイルを使用すること、及びローカル・ベクトル・レジスタ・ファイルを複製しない遠隔のレジスタ・ファイルであって、ローカル・レジスタがそれのレジスタ・データのコピーだけを含む遠隔のレジスタ・ファイルを使用することが可能であろう。この実施例では、新たなデータがローカル・レジスタに導入されるたびに、そのローカル・レジスタの内容を更に遠隔のレジスタにスワップ・アウトすることが必要であろう。本願では、比較的遠隔のレジスタが「フル」レジスタと呼ばれるが、これは、好適な実施例においては、それがレジスタ・データの完全なコピーを含むという事実を反映することを意図するだけであり、本発明の範囲を限定することを意図するものではない。
いくつかの代替方法をと共に本発明の特定の実施例を開示したが、「特許請求の範囲」の記載の範囲において形式及び細部における更なる変更を行い得ることは当業者には明らかであろう。
本発明の好適な実施例に従ってマルチレベル・レジスタ・ファイルを利用するコンピュータ・システムにおける主要なハードウェア・コンポーネントの高レベルのブロック図である。 好適な実施例のコンピュータ・システムにおけるCPU及び関連のキャッシュの主要なコンポーネントの高レベルのブロック図である。 好適な実施例に従ってマルチレベル・レジスタ・ファイルを有するCPUのベクトル/SIMDマルチメディア拡張(VMX)実行サブユニットの高レベルの機能的ブロック図である。 好適な実施例に従ってローカル・ベクトル・レジスタ・ファイル及び関連のロジックの構造を更に詳細に示すブロック図である。 好適な実施例に従ってフル・ベクトル・レジスタ・ファイル及び関連のロジックの構造を更に詳細に示すブロック図である。 好適な実施例に従ってローカル・ベクトル・レジスタ・ファイル及びフル・ベクトル・レジスタ・ファイルにデータを書き込むための主要なハードウェア及びデータ・パスを表すブロック図である。 好適な実施例に従って機能実行パイプラインにデータを入力するための主要なハードウェア及びデータ・パスを表すブロック図である。
符号の説明
100 コンピュータ・システム
101 CPU
102 メイン・メモリ
103 メモリ・バス
104 I/Oバス
105 I/Oバス・インターフェース・ユニット
111 端末インターフェース・ユニット
112 ストレージ・インターフェース・ユニット
113 I/Oデバイス・インターフェース・ユニット
114 ネットワーク・インターフェース・ユニット
121〜124 接続端末
125〜127 ダイレクト・アクセス・ストレージ・デバイス
128 プリンタ
129 ファクシミリ装置
130 ネットワーク

Claims (19)

  1. 実行するための命令を選択及びデコードする命令ロジックと、
    前記命令によって指定されたオペレーションを遂行する実行ロジックと、
    前記命令からのレジスタ識別子を使用して参照されるレジスタ・データを記憶する複数のレジスタと、
    を含み、
    前記複数のレジスタが複数のレベルとして編成され、
    前記複数のレベルが、
    (a)第1のアクセス待ち時間及び第1の数のレジスタを有する第1レベルと、
    (b)第2のアクセス待ち時間及び第2の数のレジスタを有し、前記第2のアクセス待ち時間が前記第1のアクセス待ち時間よりも長く、前記第2の数のレジスタが前記第1の数のレジスタよりも多い、第2レベルとを含み、
    前記実行ロジックへの入力に対して、前記第1レベルのレジスタからの出力及び前記第2レベルのレジスタからの出力のいずれか1つを選択するための実行入力選択ロジックを含
    前記実行入力選択ロジックの制御は、前記第1レベルのレジスタの参照において検出された無効データの比率を動的に監視し、前記比率が或る所定の設計閾値を超える場合に、前記第1レベルのレジスタからの出力をディセーブルする
    ディジタル・データ処理装置。
  2. 前記第1レベルの前記レジスタに含まれたレジスタ・データが前記第2レベルの前記レジスタに含まれたレジスタ・データのサブセットである、請求項1に記載のディジタル・データ処理装置。
  3. 前記レジスタ識別子の各々がNビットからなり、前記第1レベルの前記レジスタが前記レジスタ識別子のMビット部分を使用してアクセスされる(但し、N>M>1)、請求項1に記載のディジタル・データ処理装置。
  4. 前記第1レベルの各レジスタは、該レジスタをアクセスする際に使用される前記レジスタ識別子のMビット部分の値と等しい値をそのMビット部分に有する複数のレジスタ識別子により各々参照される複数の前記第2レベルのレジスタのサブセットのうちのいずれかのレジスタの内容を記憶する、請求項に記載のディジタル・データ処理装置。
  5. 前記第1レベルの前記レジスタに書き込むために前記実行ロジックに生成された複数の結果の1つを選択するための結果選択ロジックを更に含み、
    前記結果選択ロジックが前記第2レベルの前記レジスタの少なくとも1つの出力を入力として更に受ける、請求項1に記載のディジタル・データ処理装置。
  6. 前記第1レベルのレジスタからの出力が有効である場合に前記出力を選択し、前記第1レベルのレジスタからの出力が有効でない場合に前記第2レベルのレジスタからの出力を選択するように前記実行入力選択ロジックを制御する、請求項1に記載のディジタル・データ処理装置。
  7. 前記命令ロジックが、実行のための命令を複数のスレッドから同時に選択及びデコードし、
    前記複数のレジスタが複数のレジスタ・セットを含み、前記レジスタ・セットの各々が前記複数のスレッドにおけるそれぞれのスレッドに対応し且つ前記第1レベルのレジスタ及び前記第2レベルのレジスタを含む、
    請求項1に記載のディジタル・データ処理装置。
  8. 前記命令ロジックが単一のクロック・サイクルにおいて実行するための複数の命令をディスパッチすることができる、請求項1に記載のディジタル・データ処理装置。
  9. 複数の汎用レジスタとスカラ・データを処理するための実行ロジックとを有する実行ユニットと、
    複数のオペランド・セットに関するオペレーションを並行して遂行するためのベクトル処理サブユニットと、
    を更に含み、
    前記ベクトル処理サブユニットが複数のレベルとして編成された前記複数のレジスタを含む、請求項1に記載のディジタル・データ処理装置。
  10. 単一の半導体チップとして具現化される、請求項1に記載のディジタル・データ処理装置。
  11. 命令を含むデータを記憶するためのメモリと、
    前記メモリからの命令を実行するための少なくとも1つのプロセッサと、
    を含み、
    前記プロセッサが、
    (a)実行するための命令を選択及びデコードする命令ロジックと、
    (b)前記命令によって指定されたオペレーションを遂行する実行ロジックと、
    (c)前記命令からのレジスタ識別子を使用して参照されるレジスタ・データを記憶する複数のレジスタと、
    を含み、
    前記複数のレジスタが複数のレベルとして編成され、
    前記複数のレベルが、
    (i)第1のアクセス待ち時間及び第1の数のレジスタを有する第1レベルと、
    (ii)第2のアクセス待ち時間及び第2の数のレジスタを有し、前記第2のアクセス待ち時間が前記第1のアクセス待ち時間よりも長く、前記第2の数のレジスタが前記第1の数のレジスタよりも多い、第2レベルとを含み、
    前記実行ロジックへの入力に対して、前記第1レベルのレジスタからの出力及び前記第2レベルのレジスタからの出力のいずれか1つを選択するための実行入力選択ロジックを含
    前記プロセッサが、前記実行入力選択ロジックを制御して、前記第1レベルのレジスタの参照において検出された無効データの比率を動的に監視し、前記比率が或る所定の設計閾値を超える場合に、前記第1レベルのレジスタからの出力をディセーブルする
    コンピュータ・システム。
  12. 前記第1レベルの前記レジスタに含まれたレジスタ・データが前記第2レベルの前記レジスタに含まれたレジスタ・データのサブセットである、請求項11に記載のコンピュータ・システム。
  13. 前記レジスタ識別子の各々がNビットからなり、前記第1レベルの前記レジスタが前記レジスタ識別子のMビット部分を使用してアクセスされる(但し、N>M>1)、請求項11に記載のコンピュータ・システム。
  14. 前記第1レベルの各レジスタは、該レジスタをアクセスする際に使用される前記レジスタ識別子のMビット部分の値と等しい値をそのMビット部分に有する複数のレジスタ識別子により各々参照される複数の前記第2レベルのレジスタのサブセットのうちのいずれかのレジスタの内容を記憶する、請求項13に記載のコンピュータ・システム。
  15. 前記プロセッサが、前記第1レベルの前記レジスタに書き込むために前記実行ロジックに生成された複数の結果の1つを選択するための結果選択ロジックを更に含み、
    前記結果選択ロジックが、前記第2レベルの前記レジスタの少なくとも1つの出力を入力として更に受ける、請求項11に記載のコンピュータ・システム。
  16. 前記プロセッサは、前記第1レベルのレジスタからの出力が有効である場合に前記出力を選択し、前記第1レベルのレジスタからの出力が有効でない場合に前記第2レベルのレジスタからの出力を選択するように前記実行入力選択ロジックを制御する、請求項11に記載のコンピュータ・システム。
  17. 前記命令ロジックが、実行のための命令を複数のスレッドから同時に選択及びデコードし、
    前記複数のレジスタが複数のレジスタ・セットを含み、前記レジスタ・セットの各々が前記複数のスレッドにおけるそれぞれのスレッドに対応し且つ前記第1レベルのレジスタ及び前記第2レベルのレジスタを含む、
    請求項11に記載のコンピュータ・システム。
  18. 複数のプロセッサを含み、
    前記プロセッサの各々が、
    (a)実行するための命令を選択及びデコードする命令ロジックと、
    (b)前記命令によって指定されたオペレーションを遂行する実行ロジックと、
    (c)前記命令からのレジスタ識別子を使用して参照されるレジスタ・データを記憶する複数のレジスタと、
    を含み、
    前記複数のレジスタが複数のレベルとして編成され、
    前記複数のレベルが、
    (i)第1のアクセス待ち時間及び第1の数のレジスタを有する第1レベルと、
    (ii)第2のアクセス待ち時間及び第2の数のレジスタを有し、前記第2のアクセス待ち時間が前記第1のアクセス待ち時間よりも長く、前記第2の数のレジスタが前記第1の数のレジスタよりも多い、第2レベルとを含み、
    前記実行ロジックへの入力に対して、前記第1レベルのレジスタからの出力及び前記第2レベルのレジスタからの出力のいずれか1つを選択するための実行入力選択ロジックを含
    前記実行入力選択ロジックの制御は、前記第1レベルのレジスタの参照において検出された無効データの比率を動的に監視し、前記比率が或る所定の設計閾値を超える場合に、前記第1レベルのレジスタからの出力をディセーブルする
    コンピュータ・システム。
  19. 前記メモリに含まれたデータの選択的部分を一時的に記憶するためのキャッシュ・メモリを更に含む、請求項11に記載のコンピュータ・システム。
JP2005179948A 2004-06-24 2005-06-20 マルチレベル・レジスタ・ファイルを有するディジタル・データ処理装置 Expired - Fee Related JP4829541B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/875,373 2004-06-24
US10/875,373 US7284092B2 (en) 2004-06-24 2004-06-24 Digital data processing apparatus having multi-level register file

Publications (3)

Publication Number Publication Date
JP2006012163A JP2006012163A (ja) 2006-01-12
JP2006012163A5 JP2006012163A5 (ja) 2008-06-19
JP4829541B2 true JP4829541B2 (ja) 2011-12-07

Family

ID=35507434

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005179948A Expired - Fee Related JP4829541B2 (ja) 2004-06-24 2005-06-20 マルチレベル・レジスタ・ファイルを有するディジタル・データ処理装置

Country Status (4)

Country Link
US (2) US7284092B2 (ja)
JP (1) JP4829541B2 (ja)
CN (1) CN100447738C (ja)
TW (1) TW200609744A (ja)

Families Citing this family (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7263593B2 (en) 2002-11-25 2007-08-28 Hitachi, Ltd. Virtualization controller and data transfer control method
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US7861060B1 (en) * 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US7788468B1 (en) 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
CN103646009B (zh) 2006-04-12 2016-08-17 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
WO2008061154A2 (en) * 2006-11-14 2008-05-22 Soft Machines, Inc. Apparatus and method for processing instructions in a multi-threaded architecture using context switching
US7797514B2 (en) * 2006-11-16 2010-09-14 Texas Instruments Incorporated Scalable multi-threaded sequencing/synchronizing processor architecture
US20080229062A1 (en) * 2007-03-12 2008-09-18 Lorenzo Di Gregorio Method of sharing registers in a processor and processor
US20090006753A1 (en) * 2007-06-28 2009-01-01 David Arnold Luick Design structure for accessing a cache with an effective address
US7937530B2 (en) * 2007-06-28 2011-05-03 International Business Machines Corporation Method and apparatus for accessing a cache with an effective address
US7849294B2 (en) * 2008-01-31 2010-12-07 International Business Machines Corporation Sharing data in internal and memory representations with dynamic data-driven conversion
US7877582B2 (en) * 2008-01-31 2011-01-25 International Business Machines Corporation Multi-addressable register file
US8176406B2 (en) * 2008-03-19 2012-05-08 International Business Machines Corporation Hard error detection
US8631223B2 (en) 2010-05-12 2014-01-14 International Business Machines Corporation Register file supporting transactional processing
US8914619B2 (en) 2010-06-22 2014-12-16 International Business Machines Corporation High-word facility for extending the number of general purpose registers available to instructions
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
US8661227B2 (en) * 2010-09-17 2014-02-25 International Business Machines Corporation Multi-level register file supporting multiple threads
US8725993B2 (en) * 2011-02-23 2014-05-13 International Business Machines Corporation Thread transition management
CN103547993B (zh) 2011-03-25 2018-06-26 英特尔公司 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
CN103562866B (zh) 2011-03-25 2018-03-30 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
US9940134B2 (en) 2011-05-20 2018-04-10 Intel Corporation Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
WO2012162189A1 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. An interconnect structure to support the execution of instruction sequences by a plurality of engines
US8595460B2 (en) * 2011-08-26 2013-11-26 Vmware, Inc. Configuring object storage system for input/output operations
US9411585B2 (en) 2011-09-16 2016-08-09 International Business Machines Corporation Multi-addressable register files and format conversions associated therewith
US9727336B2 (en) 2011-09-16 2017-08-08 International Business Machines Corporation Fine-grained instruction enablement at sub-function granularity based on an indicated subrange of registers
US10078515B2 (en) 2011-10-03 2018-09-18 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information
US9697002B2 (en) 2011-10-03 2017-07-04 International Business Machines Corporation Computer instructions for activating and deactivating operands
US9690583B2 (en) 2011-10-03 2017-06-27 International Business Machines Corporation Exploiting an architected list-use operand indication in a computer system operand resource pool
US8615745B2 (en) 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US9286072B2 (en) 2011-10-03 2016-03-15 International Business Machines Corporation Using register last use infomation to perform decode-time computer instruction optimization
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US9329869B2 (en) 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
US9354874B2 (en) 2011-10-03 2016-05-31 International Business Machines Corporation Scalable decode-time instruction sequence optimization of dependent instructions
US20130086364A1 (en) * 2011-10-03 2013-04-04 International Business Machines Corporation Managing a Register Cache Based on an Architected Computer Instruction Set Having Operand Last-User Information
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
CN104040490B (zh) 2011-11-22 2017-12-15 英特尔公司 用于多引擎微处理器的加速的代码优化器
KR101832679B1 (ko) 2011-11-22 2018-02-26 소프트 머신즈, 인크. 마이크로프로세서 가속 코드 최적화기
CN108196823A (zh) * 2011-12-23 2018-06-22 英特尔公司 用于执行双块绝对差求和的系统、装置和方法
US9286068B2 (en) 2012-10-31 2016-03-15 International Business Machines Corporation Efficient usage of a multi-level register file utilizing a register file bypass
US10275251B2 (en) 2012-10-31 2019-04-30 International Business Machines Corporation Processor for avoiding reduced performance using instruction metadata to determine not to maintain a mapping of a logical register to a physical register in a first level register file
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9508112B2 (en) * 2013-07-31 2016-11-29 Apple Inc. Multi-threaded GPU pipeline
US9459869B2 (en) 2013-08-20 2016-10-04 Apple Inc. Intelligent caching for an operand cache
US9378146B2 (en) * 2013-08-20 2016-06-28 Apple Inc. Operand cache design
US9652233B2 (en) 2013-08-20 2017-05-16 Apple Inc. Hint values for use with an operand cache
US9870340B2 (en) * 2015-03-30 2018-01-16 International Business Machines Corporation Multithreading in vector processors
US9952865B2 (en) * 2015-04-04 2018-04-24 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word and non-orthogonal register data file
US9619394B2 (en) 2015-07-21 2017-04-11 Apple Inc. Operand cache flush, eviction, and clean techniques using hint information and dirty information
US9785567B2 (en) 2015-09-11 2017-10-10 Apple Inc. Operand cache control techniques
US10241790B2 (en) 2015-12-15 2019-03-26 International Business Machines Corporation Operation of a multi-slice processor with reduced flush and restore latency
US20170371654A1 (en) * 2016-06-23 2017-12-28 Advanced Micro Devices, Inc. System and method for using virtual vector register files
GB2552154B (en) * 2016-07-08 2019-03-06 Advanced Risc Mach Ltd Vector register access
US10613987B2 (en) 2016-09-23 2020-04-07 Apple Inc. Operand cache coherence for SIMD processor supporting predication
CN111951845B (zh) * 2019-05-15 2022-06-03 上海磁宇信息科技有限公司 一种分级管理冗余存储的mram芯片
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
TWI783310B (zh) * 2020-11-26 2022-11-11 華邦電子股份有限公司 計數方法以及計數裝置
CN112817639B (zh) * 2021-01-13 2022-04-08 中国民航大学 Gpu读写单元通过操作数收集器访问寄存器文件的方法
CN116560729B (zh) * 2023-05-11 2024-06-04 北京市合芯数字科技有限公司 一种多线程处理器的寄存器多级管理方法及系统

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4128880A (en) * 1976-06-30 1978-12-05 Cray Research, Inc. Computer vector register processing
US5179681A (en) * 1989-11-16 1993-01-12 Sun Microsystems, Inc. Method and apparatus for current window cache with switchable address and out cache registers
US5226142A (en) * 1990-11-21 1993-07-06 Ross Technology, Inc. High performance register file with overlapping windows
JP3479538B2 (ja) * 1991-12-26 2003-12-15 テキサス インスツルメンツ インコーポレイテツド 半導体集積回路を製作する方法
JPH06222990A (ja) * 1992-10-16 1994-08-12 Fujitsu Ltd データ処理装置
JP3676411B2 (ja) * 1994-01-21 2005-07-27 サン・マイクロシステムズ・インコーポレイテッド レジスタファイル装置及びレジスタファイルアクセス方法
US5592679A (en) * 1994-11-14 1997-01-07 Sun Microsystems, Inc. Apparatus and method for distributed control in a processor architecture
EP0717359A3 (en) * 1994-12-15 1997-02-05 Sun Microsystems Inc Register cache memory for a computer processor
US5974438A (en) * 1996-12-31 1999-10-26 Compaq Computer Corporation Scoreboard for cached multi-thread processes
US6131155A (en) * 1997-11-07 2000-10-10 Pmc Sierra Ltd. Programmer-visible uncached load/store unit having burst capability
US6108770A (en) * 1998-06-24 2000-08-22 Digital Equipment Corporation Method and apparatus for predicting memory dependence using store sets
US6381678B2 (en) * 1998-10-30 2002-04-30 Intel Corporation Processing ordered data requests to a memory
US6282614B1 (en) * 1999-04-15 2001-08-28 National Semiconductor Corporation Apparatus and method for reducing the power consumption of a microprocessor with multiple levels of caches
US6557078B1 (en) * 2000-02-21 2003-04-29 Hewlett Packard Development Company, L.P. Cache chain structure to implement high bandwidth low latency cache memory subsystem
WO2001077836A1 (en) * 2000-04-12 2001-10-18 Koninklijke Philips Electronics N.V. Data processing circuit with a cache memory and apparatus containing such a circuit
JP3659941B2 (ja) * 2002-07-26 2005-06-15 インターナショナル・ビジネス・マシーンズ・コーポレーション マイクロプロセッサおよびその処理方法
US6934830B2 (en) * 2002-09-26 2005-08-23 Sun Microsystems, Inc. Method and apparatus for reducing register file access times in pipelined processors
US20040222379A1 (en) * 2003-05-09 2004-11-11 Cook Michael Joseph Event counter for an imaging device
US7206923B2 (en) * 2003-12-12 2007-04-17 International Business Machines Corporation Method and apparatus for eliminating the need for register assignment, allocation, spilling and re-filling
US20050138297A1 (en) * 2003-12-23 2005-06-23 Intel Corporation Register file cache
US7694075B1 (en) * 2005-03-09 2010-04-06 Globalfoundries Inc. System for enabling and disabling cache and a method thereof

Also Published As

Publication number Publication date
US20080022044A1 (en) 2008-01-24
TW200609744A (en) 2006-03-16
US8793433B2 (en) 2014-07-29
JP2006012163A (ja) 2006-01-12
CN1713137A (zh) 2005-12-28
US7284092B2 (en) 2007-10-16
US20050289299A1 (en) 2005-12-29
CN100447738C (zh) 2008-12-31

Similar Documents

Publication Publication Date Title
JP4829541B2 (ja) マルチレベル・レジスタ・ファイルを有するディジタル・データ処理装置
US7219185B2 (en) Apparatus and method for selecting instructions for execution based on bank prediction of a multi-bank cache
US7454654B2 (en) Multiple parallel pipeline processor having self-repairing capability
US6944718B2 (en) Apparatus and method for speculative prefetching after data cache misses
US6230260B1 (en) Circuit arrangement and method of speculative instruction execution utilizing instruction history caching
JP5372929B2 (ja) 階層マイクロコードストアを有するマルチコアプロセッサ
US5559986A (en) Interleaved cache for multiple accesses per clock cycle in a microprocessor
JP3120152B2 (ja) コンピューターシステム
US8984261B2 (en) Store data forwarding with no memory model restrictions
EP1278125A2 (en) Indexing and multiplexing of interleaved cache memory arrays
EP1286269A2 (en) A data processor having a cache memory
KR100745904B1 (ko) 동시적 멀티스레드 프로세서에서 파이프라인 길이를변경하기 위한 방법 및 회로
JPH0782438B2 (ja) コンピュータ・システム
WO2000033183A9 (en) Method and structure for local stall control in a microprocessor
JPH11249897A (ja) Nウェイ分岐を有するスーパースカラまたは超長命令語コンピュータにおける次の命令を選択する方法および装置
JPH07191846A (ja) プロセッサ
US6804759B2 (en) Method and apparatus for detecting pipeline address conflict using compare of byte addresses
KR100431975B1 (ko) 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템
US6691210B2 (en) Circuit and method for hardware-assisted software flushing of data and instruction caches
KR20000005685A (ko) 분산인스트럭션완료로직
US20020188817A1 (en) Store buffer pipeline
US6412065B1 (en) Status register associated with MMX register file for tracking writes
US6807628B2 (en) System and method for supporting precise exceptions in a data processor having a clustered architecture
JPH1083347A (ja) キャッシュメモリ装置
JPH0277840A (ja) データ処理装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080501

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080501

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20090206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110405

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110419

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20110502

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110502

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110711

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20110906

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110916

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

Free format text: PAYMENT UNTIL: 20140922

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees