JP5853303B2 - レジスタ初期化動作の最適化 - Google Patents

レジスタ初期化動作の最適化 Download PDF

Info

Publication number
JP5853303B2
JP5853303B2 JP2013095092A JP2013095092A JP5853303B2 JP 5853303 B2 JP5853303 B2 JP 5853303B2 JP 2013095092 A JP2013095092 A JP 2013095092A JP 2013095092 A JP2013095092 A JP 2013095092A JP 5853303 B2 JP5853303 B2 JP 5853303B2
Authority
JP
Japan
Prior art keywords
register
instruction
physical
rename
detecting
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013095092A
Other languages
English (en)
Other versions
JP2013232196A (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.)
Apple Inc
Original Assignee
Apple Inc
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 Apple Inc filed Critical Apple Inc
Publication of JP2013232196A publication Critical patent/JP2013232196A/ja
Application granted granted Critical
Publication of JP5853303B2 publication Critical patent/JP5853303B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

本発明は、マイクロプロセッサに関するもので、より詳細には、レジスタ初期化のレイテンシを効率的に減少することに関する。
マイクロプロセッサは、典型的に、重畳するパイプライン段及びインストラクションの無秩序(out-of-order)実行を含む。更に、マイクロプロセッサは、スループットを高めるために同時マルチスレッディングをサポートする。これらの技術は、ソースコードにおけるインストラクションレベル並列性の効果を取り入れるものである。各クロックサイクル中に、マイクロプロセッサは、理想的には、パイプラインの各段に対してスレッド当たり最大N個のインストラクションの有用な実行を生じさせ、Nは、1より大きな整数である。しかしながら、コントロールの依存性及びデータの依存性がマイクロプロセッサの最大スループットを段当たりN個のインストラクションより低く減少させる。
条件付きコントロールフローインストラクションにより生じるコントロール依存性は、ソースコードのコントロールフローグラフに沿った条件付き分岐及び結合においてインストラクションをシリアル化する。ソースコードにおけるコントロール依存性に関わらず、インストラクションの推論的実行を使用して、インストラクションの並列実行が遂行される。
インストラクションのオペランドがプログラム順に若いインストラクションの結果に依存するときにデータ依存性が生じる。データ依存性は、直線コードセグメントにおける後続インストラクションのオペランド間又は後続ループ反復に属するインストラクションのオペランド間に現れる。直線コードでは、書き込み後の読み取り(RAW)、読み取り後の書き込み(WAR)又は書き込み後の書き込み(WAW)依存性に遭遇する。WAR及びWAW依存性に関わらず、レジスタ再ネーミングを使用してインストラクションの並列実行を許す。しかしながら、真の依存性又はRAWは、依然そのままである。それ故、行先レジスタとして使用されそしてその後にソースレジスタとして使用されるアーキテクチャーレジスタは、関連ソースコードセグメントに対するインストラクション実行のシリアル化を生じさせる。
アーキテクチャーレジスタとの共通のRAW依存性の一例は、レジスタを特定値に初期化した後に、そのレジスタをその後のコードで使用し及び/又はテストすることである。例えば、ソフトウェアアプリケーションにおけるフラグ、カウンタ及び設定に特定の初期値が指定される。レジスタを初期化する1つの方法は、即時移動インストラクションを使用することである。それ故、レジスタの初期化は、プログラムの実行中に頻繁に生じ、RAW依存性を含む。
以上に鑑み、レジスタ初期化のレイテンシを効率的に減少するための効率的な方法及びメカニズムが要望される。
レジスタ初期化のレイテンシを効率的に減少するためのシステム及び方法が提供される。1つの実施形態において、プロセッサは、レジスタ再ネームユニットを備え、このユニットは、デコードされたインストラクションを受け取りそしてデコードされた所与のインストラクションがゼロサイクル動作の資格がある(qualify)かどうか決定するように構成されている。又、実行パイプライン段の前に、デコードされた所与のインストラクションが行先オペランドに特定数値を書き込むことが知られているかどうかの決定がなされる。行先オペランドに0の値を書き込む即時移動インストラクションは、その一例である。少なくとも他のブール論理動作及び演算動作も資格がある。その決定がなされた場合には、再ネームレジスタユニットが物理的なレジスタ番号を行先オペランドに指定し、その物理的なレジスタ番号は、特定の数値に関連している。更に、その物理的なレジスタ番号は、物理的なレジスタファイル内の実際の物理的レジスタには関連していない。
レジスタ再ネームユニット内のコントロールロジックは、所与のインストラクションを、それがプロセッサパイプラインにおいて進行するのを防止するためにマークする。例えば、コントロールロジックは、ディスパッチパイプライン段において完了を指示するために所与の移動インストラクションをマークする。更に、物理的なレジスタファイルは、再ネームレジスタ番号を、読み取るべきソースオペランドとして受け取ると、実際の物理的レジスタにアクセスすることなく、特定の数値を搬送する。
これら及び他の実施形態は、以下の説明及び添付図面を参照することにより更に明らかとなろう。
ゼロサイクルレジスタ初期化動作でスーパースカラーの無秩序実行をなすプロセッサの一実施形態の一般的なブロック図である。 物理的レジスタファイル番号の一実施形態の一般化されたブロック図である。 物理的レジスタファイルの一実施形態の一般化されたブロック図である。 変換ゼロサイクル動作でレジスタ再ネーミングする一実施形態を示す一般化されたブロック図である。 ゼロサイクルレジスタ初期化動作を生成する方法の一実施形態を示す一般化されたフローチャートである。
本発明は、種々の変更を受けそして別の形態でも実施できるが、その特定の実施形態を一例として添付図面に示して以下に詳細に説明する。しかしながら、添付図面及び詳細な説明は、本発明を、ここに開示する特定の形態に限定するものではなく、本発明は、特許請求の範囲に規定される本発明の精神及び範囲内に入る全ての変更、等効物及び代替え物を網羅することを理解されたい。本出願全体にわたって使用される「〜してもよい(may)」という語は、許すという意味(即ち、〜の潜在性があるという意味)で使用されるもので、強制の意味(即ち、〜しなければならないという意味)ではない。同様に、「含む(include)」、「含んでいる(including)」及び「含む(includes)」という語は、含むことを意味するが、それに限定されない。
種々のユニット、回路又は他のコンポーネントは、1つ又は複数のタスクを遂行するように「構成される」ものとして述べる。この点について、「構成される」とは、動作中に1つ又は複数のタスクを遂行する「回路を有する」ことを一般的に意味する構造を広く表現するものである。従って、ユニット/回路/コンポーネントは、そのユニット/回路/コンポーネントが現在オンでなくても、タスクを遂行するように構成することができる。一般的に、「構成される」に対応する構造を形成する回路は、ハードウェア回路を含む。同様に、種々のユニット/回路/コンポーネントは、説明の便宜上、1つ又は複数のタスクを遂行するものとして説明されてもよい。そのような説明は、「構成される」という句を含むものと解釈されねばならない。1つ以上のタスクを遂行するように構成されたユニット/回路/コンポーネントを表現する場合に、そのユニット/回路/コンポーネントに関して35U.S.C.§112、第6節の解釈を引用しないことが明確に意図される。
以下の説明では、本発明を完全に理解するため多数の特定の細部について述べる。しかしながら、当業者であれば、これら特定の細部がなくても本発明を実施できることが認識されよう。ある場合には、本発明を不明瞭にしないために、良く知られた回路、構造及び技術は、詳細に示さない。
図1を参照すれば、ゼロサイクルレジスタ初期化動作でスーパースカラーの無秩序実行をなすプロセッサ100の一実施形態を示す一般的なブロック図が示されている。プロセッサコア100は、インストラクションを処理するために多段パイプラインを使用する。ファンクション及びコントロールブロックが特定の順序で特定のパイプライン段に示されているが、他の組み合わせも考えられ、意図される。更に、ファンクション及びコントロールブロックが2つ以上のパイプライン段を占有することもある。ほとんどの場合には、説明を容易にするために各ファンクションブロックに対して単一のパイプライン段が示される。
ソフトウェアアプリケーションのインストラクションは、プロセッサ100内のiキャッシュ104にロードされる。ソフトウェアアプリケーションは、外部ディスクメモリ、外部DRAM、及び/又は複数の周辺装置の1つに記憶されている。一般的に述べると、ソフトウェアプログラマがアルゴリズム又は方法により仕事を行うためにアプリケーションを書き込むときに、プログラマは、変数を使用して一時的及び結果データを参照する。このデータは、コンピュータメモリに割り当てられたスペースを使用する。オペレーティングシステムは、ソフトウェアアプリケーションに対してメモリの領域を割り当てる。
アプリケーションの処理中に、割り当てられたメモリ領域からデータキャッシュ162へデータがロードされる。その後、物理的レジスタファイル164内の1つ以上のアーキテクチャーレジスタを使用して、一時的及び結果データをロードし、記憶する。アーキテクチャーレジスタは、アーキテクチャー的に見ることができる。それ故、ソフトウェアプログラマ及び/又はコンパイラーは、ソフトウェアアプリケーション内のアーキテクチャーレジスタを識別する。アーキテクチャーレジスタは、所与のインストラクションセットアーキテクチャー(ISA)に関連している。プロセッサ100のハードウェアは、所与のISAに基づいてインストラクションを処理するための回路を備えている。種々の実施形態において、所与のISAに対してARMインストラクションセットアーキテクチャーが選択される。或いは又、Alpha、PowerPC、SPARC、MIPS、x86又は他のISAが選択されてもよい。
種々の実施形態において、所与のISAを使用して、メモリの領域を宣言し且つ割り当てる方法を選択することができる。所与のISAは、更に、プロセッサリセットのためのステップ、及び動作モード(例えば、スーパーバイザーモード、ユーザモード)の間を切り換えるためのステップを決定する。これらのステップ及びユーザアプリケーションは、所与のISA内の1つ以上のインストラクションを使用してアーキテクチャーレジスタを特定の数値にリセット又は初期化する。更に、これらのステップ及びユーザアプリケーションは、アーキテクチャー的に見えるレジスタの数より多数のレジスタを含むレジスタファイルの一部分をリセットする。レジスタファイルをそのようにリセットすると、リセット動作が完了した後にプロセッサが予想できる仕方で振舞うようにさせる。典型的に、ステートマシンを使用して、特定の数値をレジスタファイル内の各レジスタに書き込む動作が挿入される。ある実施形態では、このステートマシンは、以下に述べるように除去されそして異なるロジックと交換される。特定の値をレジスタに書き込む動作に関して、ある実施形態では、即時移動インストラクションを使用して、特定の数値をレジスタファイル内の所与のレジスタへ移動させる。特定の数値の一例は、値0である。他の演算インストラクションを使用して、リセット又は初期化を行うこともできる。“rl”により指示された所与のレジスタをリセットする幾つかの例を以下に示す。
Figure 0005853303
前記例では、行先オペランドが最初にリストされた後に、ソースオペランド(1つ又は複数)がリストされる。しかしながら、逆の規定も考えられ、意図される。更に、大半のインストラクションについては、2つのソースオペランドがリストされる。しかしながら、特定のアーキテクチャーレジスタが行先オペランド及びソースオペランドの両方である場合には、1つのソースオペランドは、第2のソースオペランドとして示唆される行先アーキテクチャーレジスタ番号と共にリストされる。前記例では、中間値は、記号をもたない数字として示される。他のケースでは、記号が数字を伴う。例えば、ARM ISAでは、中間値は、“0”に代わって“#0”のようなプレフィックス“#”を使用する。前記インストラクションは、擬似コードの例及び言語不可知論であることを意味する。
前記例のコードステートメントから明らかなように、複数のインストラクション形式を使用して、値0のような特定の数値でレジスタr1を初期化することができる。前記インストラクション形式の幾つかは、他のインストラクション形式よりもレイテンシが低い。1つの例において、論理的XOR及びAND動作は、他のインストラクション形式の前に完了する。演算MUL又は乗算インストラクションは、前記インストラクション形式の最長レイテンシを有し、従って、レジスタ初期化に対して選択されない。インストラクション形式に関わらず、ソフトウェアプログラマのアプリケーションを具現化するのに使用されるアッセンブル言語インストラクションがレジスタ初期化ステートメントを含む割合は顕著である。更に、初期化に使用されないソフトウェアアプリケーションステートメントがあるが、ステートメントを実際に実行する前に結果が分かる。前記演算乗算インストラクションは、1つの例である。これら形式のステートメントのレイテンシを減少すると、性能が高くなる。
プロセッサ100は、特定のデコードされたインストラクションに関連した実行パイプライン段の前に、特定のインストラクションが所与の数値をその行先オペランドに書き込むことを決定するゼロサイクル初期化ロジック124を備えている。例えば、インストラクション“move r1,0 //r1 ←0”がデコードされたとき、そのインストラクションは即時移動形式であることが分かり、そしてそのインストラクションは、行先オペランドr1を数値0と共に書き込む。数値0は、即時移動インストラクションの即時フィールドにある。この決定に応答して、ゼロサイクル初期化ロジック124は、所与の再ネームレジスタ番号を行先オペランドに指定するように再ネームコントロールロジック122に指令し、所与の再ネームレジスタ番号は、所与の数値に関連している。
レジスタ初期化インストラクションをゼロサイクル動作として具現化して続けると、物理的レジスタファイル164は、関連再ネームレジスタ番号により各々識別される複数の物理的レジスタを含む。しかしながら、前記即時移動インストラクションの行先オペランドに指定された所与のレジスタ番号は、複数の物理的レジスタのいずれにも関連していない。むしろ、所与の再ネームレジスタ番号は、即時フィールドの数値に関連している。このケースでは、数値は、ゼロである。
1つの実施形態において、物理的レジスタファイル164は、256個の物理的レジスタの1つを独特に識別するのに使用できる8ビットインデックスを有する。他の実施形態では、異なる巾のインデックス及び異なる数の物理的レジスタが使用される。そのような他の値も考えられ、意図される。8ビットインデックスを使用する実施形態では、物理的レジスタファイルは、256より少ない実際の物理的レジスタを含む。例えば、物理的レジスタファイル164は、256個の物理的レジスタではなく、120個の物理的レジスタを含む。これらの120個の物理的レジスタは、10進又は他のフォーマットの0と119との間の値を伴う8ビットインデックスを使用して識別される。16進フォーマットでは、120個の物理的レジスタは、h00からh77の値を伴う8ビットインデックスにより識別される。種々の実施形態において、8ビットインデックス255は、物理的レジスタファイル164内の物理的レジスタのいずれにも関連していない。むしろ、8ビットインデックス255又はhFFを使用して数値0が指示される。他の実施形態において、所与の数値を表わすためにhFF以外のインデックスが選択され、そして0以外の数値を表わすこともできる。
種々の実施形態において、前記即時移動インストラクションのr1である行先オペランドは、P255と再ネーミングされる。行先オペランドは、値0が書き込まれるか、さもなければ、0の値に対応することが知られている。更に、ゼロサイクル初期化ロジック124は、第1のインストラクションを、それがプロセッサのパイプラインを進行するのを防止するためにマークする。例えば、ゼロサイクル初期化ロジック124は、ディスパッチパイプライン段において完了を指示するために即時移動インストラクションをマークする。そのような実施形態では、プロセッサ100内の電力消費が減少される。というのは、即時移動インストラクションは、ディスパッチパイプライン段を越えて進行しないからである。更に、即時移動インストラクションは、そうでなければ使用されるディスパッチパイプライン段の後のリソース(キュー、実行ユニット、ステージングフロップ、等)を使用しないので、他のインストラクションに対するスループットが高くなる。この場合も、他の実施形態では、インデックスの巾、及びインデックスにより識別される物理的レジスタの数に対して、他の値が使用されてもよい。更に、物理的レジスタを識別するのに使用されるインデックスに対する値の範囲は、値の最小セット又は値の連続範囲を含む。
ある実施形態において、再ネームコントロールロジック122は、プログラム順において所与の即時移動インストラクションより若く且つ即時移動インストラクションに対するデータ依存性を有する1つ以上のインストラクションへ再ネームレジスタ番号P255をバイパスさせる。更に、再ネームレジスタ番号P255を、読み取るべきソースオペランドとして受け取るのに応答して、物理的レジスタファイル164は、複数の物理的レジスタのいずれも読み取らずに数値0を出力する。物理的レジスタファイル164内の読み取りバイパスロジック166は、再ネームレジスタ番号P255が、プログラム順において即時移動インストラクションより若いインストラクションにより読み取るためのソースオペランドとして与えられることを検出し、この若いインストラクションは、即時移動インストラクションに依存する。それに応答して、実際の物理的レジスタにアクセスされることはない。むしろ、読み取りバイパスロジック166は、再ネームレジスタ番号P255をデコードし、そして数値0を読み出しデータポートへ搬送すべきであると決定する。レジスタファイル内のロジックは、レジスタ番号P255を受け取るのに応答してゼロのような所与の値を返送するものとして述べるが、他の実施形態では、レジスタファイル内にないか、さもなければ、その一部分でもないロジックがレジスタ番号を検出して所与の値を与えてもよい。例えば、ある実施形態では、パイプラインデータ路の一部分として含まれたバイパスmuxのようなロジックは、レジスタ番号を検出し、そして所与の値(例えば、ゼロ)で応答させる。そのような実施形態では、レジスタファイルそれ自体は、特定のレジスタ番号に関連した特殊な特徴を知らない。多数のそのような実施形態が考えられ、意図される。
即時移動インストラクション“move r1,0 //r1 ←0”についての前記ステップは、実行パイプライン段の前に知られた特定の数値を行先オペランドに書き込む他のインストラクションにも使用される。アーキテクチャーレジスタをリセットする前記例及び付加的な例を次に示す。
Figure 0005853303
ゼロサイクル初期化ロジック124は、特定のデコードされたインストラクションに関連した実行パイプライン段の前に特定のインストラクションがその行先オペランドに所与の数値を書き込むことを決定する。1つの実施形態において、ロジック124は、インストラクションが即時移動インストラクションのためのopcodeを有しそして即時の値が上述した特定の数値であることを決定する。他の実施形態では、ゼロサイクル初期化ロジック124は、インストラクションが、AND又はXORのようなブールの論理演算のためのopcodeを有することを決定する。更に、ロジック124は、その後の実行パイプライン段の間に0の結果が行先オペランドに書き込まれることをソースオペランドから決定する。例えば、ブールの論理AND動作に対する0のソースオペランドは、0の結果を生じる。
別の例では、ブールの論理XOR動作に対する2つの同じソースオペランドが0の結果を生じる。それ故、実際の物理的レジスタに関連しないP255のような特定の再ネームレジスタ番号でのレジスタ再ネーミングに関して上述した同様のステップが使用される。同様に、物理的レジスタファイル164は、再ネームレジスタ番号P255を、読み取るべきソースオペランドとして受け取るときに、物理的レジスタにアクセスせずに0の値を搬送する。前記と同様に、P255以外の、実際の物理的レジスタに関連しない他の利用可能な物理的レジスタ番号を使用してもよい。
更に別の実施形態において、ゼロサイクル初期化ロジック124は、デコードされたインストラクションが演算動作のためのopcodeを有することを決定すると共に、その後の実行パイプライン段の間に0の結果が行先オペランドに書き込まれることをソースオペランドから決定する。例えば、2つの同じソースオペランドでの減算演算動作は、0の結果を生じさせる。同様に、0のソースオペランドでの乗算演算動作も、0の結果を生じさせる。それ故、実際の物理的レジスタに関連しないP255のような特定の再ネームレジスタ番号でのレジスタ再ネーミングに関して上述した同様のステップが使用される。同様に、物理的レジスタファイル164は、再ネームレジスタ番号P255を、読み取るべきソースオペランドとして受け取るときに、物理的レジスタにアクセスせずに0の値を搬送する。これらの演算動作の例を再び以下に示す。
Figure 0005853303
更に別の実施形態では、ゼロサイクル初期化ロジック124は、特定の数値が1のような別の値であることを決定する。例えば、上述した最後のインストラクションは、数値1を行先オペランド“r2”に書き込む即時移動インストラクションである。1つの実施形態において、再ネームレジスタ番号P255は、数値0に対して予約される。P254のような別の利用可能な再ネームレジスタ番号は、数値1に対して予約される。それ故、実際の物理的レジスタに関連しない特定の再ネームレジスタ番号でのレジスタ再ネーミングに関して上述した同様のステップが使用される。
前記の例では、行先オペランドr2は、数値1を指示する再ネームレジスタ番号P254に再ネーミングされる。同様に、物理的レジスタファイル164は、再ネームレジスタ番号P254を、読み取るべきソースオペランドとして受け取るときに、物理的レジスタにアクセスせずに1の値を搬送する。レジスタ初期化インストラクション及び他の特定のインストラクションをゼロサイクル動作へ変換することに関して更に詳細な説明を続ける前に、コンピュータシステム10のコンポーネントを更に詳細に説明する。
ソフトウェアアプリケーションの1つ以上のインストラクションがiキャッシュ104からフェッチされる。1つ以上のインストラクションは、アドレスセレクトロジック102により搬送されたアドレスにより指示される。iキャッシュミスがない場合にはクロックサイクルごとにiキャッシュ104から複数のインストラクションがフェッチされる。次フェッチプレディクタ106によりアドレスがインクリメントされる。次フェッチプレディクタ106及びその後のパイプライン段のコントロールフロー評価ロジック112の各々に分岐方向プレディクタ108が結合される。このプレディクタ108は、次の順次インストラクションを実行することからインストラクションのフローを変化させるインストラクションの情報を予想することができる。
デコードユニット110は、複数のフェッチされたインストラクションのopcodeをデコードする。或いは又、インストラクションは、マイクロインストラクション、又はマイクロopへ分割される。ここで使用する用語「インストラクション」及び「マイクロop」は、本発明がいずれの具現化も使用するアーキテクチャーに使用されるので、交換可能である。1つの実施形態において、コントロールフロー評価ブロック112は、アドレスセレクタ102においてインストラクションのフェッチを変更する。例えば、無条件分岐opcodeに関連した絶対的アドレス値がアドレスセレクタ102へ送られる。
再ネームイントラグループ(intra-group)依存性検出ロジック114は、デコードユニット110によりデコードされたインストラクション間で依存性を見出す。インストラクションのイントラグループは、1つ以上のクロックサイクル又はパイプライン段からのデコードされたインストラクションを含む。読み取り後の書き込み(WAR)、書き込み後の書き込み(WAW)、及び書き込み後の読み取り(RAW)のような依存性が検出される。インストラクション間の依存性を示す依存性ベクトルが発生される。マッパー116は、得られる同時性、依存性チェーンの重大さ、及び通信ペナルティのようなファクタを使用して、分布されたハードウェアリソース間でインストラクションを分割する。
スーパースカラーマイクロアーキテクチャー内の実行ユニットへのインストラクションの無秩序発行に加えて、プロセッサ100は、スループットを高めるためにレジスタ再ネーミングを行う。プロセッサ100は、整数のセットより大きな物理的レジスタのセットと、物理的レジスタファイルのようなアーキテクチャー的に見えるフローティングポイントレジスタとを含む。ハードウェアを使用して、プロセッサ100は、行先オペランドとして使用されるアーキテクチャーレジスタ識別子を動的に再ネーミングする。ソースオペランドが、再ネーミングされた行先オペランドと同じアーキテクチャーレジスタ識別子を有するとの決定に応答して、プロセッサ100は、行先オペランドを再ネーミングするのに使用される同じ物理的レジスタ識別子をソースオペランドに指定する。再ネーミングは、インストラクションデコードの後に生じる。
行先オペランドが再ネーミングされるときには、フリーリストアロケータ130からの新たな物理的レジスタ番号が使用される。或いは又、物理的レジスタファイル164内の複数の物理的レジスタのいずれにも関連していない非定義の物理的レジスタ番号が使用されてもよい。むしろ、この物理的レジスタ番号は、特定の数値に関連付けられる。インストラクションがコミットするとき、インストラクション行先値を記憶している物理的レジスタは、フリーリストアロケータ130内の再ネームレジスタ番号のフリーリストへ返送されるべき候補となる。しかしながら、非定義の物理的レジスタ番号が行先オペランドとして使用される場合には、そのインストラクションに対して再ネームパイプライン段の間にフリーリストから再ネームレジスタ番号がまだ除去されていない。同様に、このインストラクションのコミット及びリタイア中にフリーリストに再ネームレジスタ番号が追加されていない。
ハードウェアがアーキテクチャーレジスタ識別子を物理的レジスタ識別子で再ネーミングするときには、ハードウェアは、マッピングテーブルのようなデータ構造体にマッピングを記憶する。ここで使用する、アーキテクチャーレジスタ又は物理的レジスタの識別子は、番号とも称される。それ故、アーキテクチャーレジスタ識別子は、アーキテクチャーレジスタ番号とも称される。同様に、物理的レジスタ識別子は、物理的レジスタ番号とも称される。又、アーキテクチャーレジスタ番号を再ネーミングするのに使用される物理的レジスタ番号は、再ネームレジスタ番号とも称される。
レジスタ再ネームユニット120は、再ネームコントロールロジック・アレイ122と、ゼロサイクル初期化ロジック124とを含む。レジスタ再ネームユニット120は、インストラクション内の行先及びソースの両オペランドに使用されるアーキテクチャーレジスタ番号を再ネーミングするのにどの物理的レジスタ番号を使用すべきか決定する。レジスタ再ネームユニットは、フリーリストアロケータ130、再ネームコントロールロジック122内の再ネームマッピングテーブル、又はゼロサイクル初期化ロジック124から候補の物理的レジスタ番号をセレクトする。
レジスタ再ネームユニットは、上述したようにゼロサイクル動作へ変換されるべき所与のインストラクションクオリファイアを決定する。レジスタ再ネームユニット120は、特定の数値には関連するが物理的レジスタファイル164内の実際の物理的レジスタには関連しない再ネームレジスタ番号を行先オペランドに指定する。更に、レジスタ再ネームユニット120は、所与のインストラクションを、それがインストラクション実行のために進行するのを防止するように、マークする。例えば、レジスタ再ネームユニット120は、移動インストラクションを、ディスパッチパイプライン段で完了するものとしてマークする。
インストラクションがデコードされそして再ネーミングされた後に、それに関連するエントリがディスパッチキュー140において割り当てられる。インストラクション及びそれに関した再ネーム識別子、プログラムカウンタ(PC)値、依存性ベクトル、完了のためのマーキング、等は、ディスパッチキュー140へ送られ、その後、スケジューラ150へ送られる。種々の例外が実行コア160等によって検出される。例えば、それらは、メモリアクセスに対する保護例外、アドレス変換なし、等を含む。これらの例外は、マイクロコード142等により、対応する例外取り扱いルーチンを実行するようにさせる。
スケジューラ150は、インストラクションを、実行コア160で実行するためにスケジューリングする。オペランドが得られ且つハードウェアリソースも得られるときには、スケジューラ150から実行コア160内のファンクションユニットの1つへインストラクションが無秩序に発行される。スケジューラ150は、再ネーミングされた識別子をマッピングテーブルで変換した後に物理的レジスタファイル164から、又はオペランドバイパスロジックから、そのソースオペランドを読み取る。特定の数値には関連しているが実際の物理的レジスタには関連していない特定の再ネームレジスタ番号が使用されるときは、読み取りバイパスロジック166が特定の数値を与える。そのようなケースでは、実際の物理的レジスタがアクセスされないことがある。ソースオペランドは、実行コア160に与えられる。
実行コア160は、ロード/記憶ユニットを含む。ロード/記憶ユニットは、データキャッシュ(図示せず)及び記憶バッファ172に直接的に又はリオーダーバッファ(rob)170を経て接続される。プロセッサ100は、キャッシュアクセスを遂行するときに完全メモリ変換を遂行するコストを回避するためにiキャッシュ104及びデータキャッシュの各々に対して変換ルックアサイドバッファ(TLB)を含む。記憶バッファ172は、記憶インストラクションに対応するアドレスを記憶する。rob170は、実行コア160から結果を受け取る。更に、結果は、パイプラインに既にある従属インストラクションへ送られるデータとして手前のパイプライン段へバイパスされる。rob170は、インストラクションの秩序正しいコミット及びリタイアを保証する。
図2を参照すれば、レジスタファイル識別子又は番号200を含むテーブルの一実施形態の一般化されたブロック図が示されている。1つの実施形態において、レジスタ番号200は、レジスタの再ネーミングに使用するための利用可能な再ネームレジスタ番号を示す順次番号リストである。別の実施形態では、レジスタ番号は、順次である必要はない。1つの実施形態において、レジスタ番号200は、実際の物理的レジスタ202a−202mのための識別子、及び実際の物理的レジスタを識別しない予約識別子202n−202vの両方を含む。例えば、レジスタ番号202aは、識別子“0”を有し、物理的レジスタ番号202bは、識別子“1”を有し、等々となる。
レジスタ番号202a−202mは、アーキテクチャー物理的レジスタ及び非アーキテクチャー(推論的)物理的レジスタの両方を含むレジスタファイルに使用される。アーキテクチャーレジスタは、アーキテクチャー的に見える識別子を有する。非アーキテクチャー(推論的)レジスタの識別子は、アーキテクチャー的に見えない。ある実施形態では、アーキテクチャー物理的レジスタ及び非アーキテクチャー(推論的)物理的レジスタの両方の物理的レジスタは、レジスタファイル内で互いに混合される。次いで、マッピングメカニズムを使用して、レジスタファイル内の所与のアーキテクチャーレジスタの位置を決定することができる。例えば、識別子r7を伴う所与のアーキテクチャーレジスタは、識別子P23を伴う非アーキテクチャー(推論的)レジスタへマッピングされる。その後に、レジスタr7は、P12のような異なる非アーキテクチャー(推論的)レジスタへマップされる。
1つの実施形態において、所与の物理的レジスタファイルは、120個の物理的レジスタを含み、そして物理的レジスタファイルに関連した所与のインストラクションセットアーキテクチャー(ISA)は、35個のアーキテクチャー的に見えるレジスタを有する。そのようなケースでは、レジスタファイルは、35個のアーキテクチャー的に見えるレジスタに加えて85個の物理的レジスタを含む。この例では、85個の物理的レジスタに関連したレジスタ番号が非アーキテクチャーレジスタ番号212に含まれる。1つの例では、アーキテクチャー及び非アーキテクチャー(推論的)物理的レジスタ番号202a−202mは、連続する再ネームレジスタ番号0−119又はh0−h77を表わす。この場合も、アーキテクチャーレジスタ番号210及び非アーキテクチャーレジスタ番号212は、実際の物理的レジスタに関連している。
1つの実施形態において、8ビットインデックスを使用して、物理的レジスタファイルにアクセスすることができる。そのようなケースでは、インデックスは、最大256個の物理的レジスタにアクセスするのをサポートする。しかしながら、電力消費、ダイ上占有面積制約、マイクロアーキテクチャーシミュレーション、及び/又は他のファクタのために、物理的レジスタファイルは、最大インデックスサポートサイズより小さいサイズにされる。1つの実施形態では、物理的なレジスタファイルが、サポートされるインデックスサイズより小さくても、実際の物理的レジスタに関連しない1つ以上のインデックスを依然使用することができる。先に述べたように、実際の物理的レジスタに関連しない所与の再ネームレジスタ番号は、特定の数値に関連付けることができる。前記例では、インデックス120−255(例えば、レジスタ番号202n−202vに対応する)は、実際の物理的レジスタを識別しない。それ故、これらの利用可能な再ネームレジスタ番号は、実行パイプライン段の前に特定の数値が書き込まれることが知られている行先オペランドを再ネーミングするのに使用される。例えば、物理的レジスタ番号255又はhFFは、数値0に関連している。又、物理的レジスタ番号254又はhFEは、数値1に関連している。物理的レジスタ番号は、0と、多ビットインデックスで表された最大値との間の範囲で連続値として提示されるが、予約レジスタ番号214内の物理的レジスタ番号及び数値の他の組み合わせも考えられ、意図される。
図3を参照すれば、物理的レジスタファイル300の一実施形態の一般化されたブロック図が示されている。図示されたように、物理的レジスタファイル300は、アレイ320と、複数のデコーダ310と、読み出しロジック・データドライバ370と、読み出しバイパスロジック380とを備えている。アレイ320は、複数のセルを含み、各セル330は、関連レジスタに対する情報のビットを記憶する。情報は、状態情報と、オペランドに対応するデータとを含む。プロセッサのマイクロアーキテクチャーに関して、物理的レジスタファイル300は、大きなレジスタプールである。先に述べたように、これらのレジスタの一部分は、ソフトウェアプログラマ及びコンパイラーに見えるアーキテクチャーレジスタである。残りのレジスタは、レジスタ再ネームプロセス中に使用される非アーキテクチャーレジスタである。
図3に見られるように、物理的レジスタファイル300は、相当の回路を含み、そして物理的レジスタファイル300のアクセスは、著しい量の電力を消費する。更に、そのアクセスは、関連出力又は応答を受け取るまでに著しい遅延を含む。しかしながら、ある読み取り動作については、読み取りバイパスロジック380は、デコーダ310内の回路、ワードラインドライバ318、アレイ320及び読み出しロジック370を使用せずに、読み出しデータ384を与える。例えば、読み出しバイパスロジック380が、実際の物理的レジスタに関連していないが特定の数字番号に関連している予約物理的レジスタ番号を識別する読み取りレジスタ識別子382を受け取るのに応答して、読み出しバイパスロジックは、読み出しデータ372で指示された出力ラインに特定の数字番号を与える。デコーダ310内の回路、ワードラインドライバ318、アレイ320、及び読み出しロジック370は、使用されない。それ故、この形式のアクセスに対して電力消費及びレイテンシの両方が減少される。
動作中に、物理的レジスタファイル300は、読み取りレジスタ識別子382を受け取る。この読み取りレジスタ識別子382は、読み取り動作のソースオペランド又は書き込み動作の行先オペランドのための再ネームレジスタ番号(物理的レジスタ番号)である。デコーダ310及びワードラインドライバ318は、読み取り動作のためのアクセスであるか書き込み動作のためのアクセスであるか指示するコントロール信号(図示せず)を受け取る。更に、デコーダ310及びワードラインドライバ318は、読み取りバイパスロジック380を経てライン382上の読み取りレジスタ識別子を受け取る。或いは又、デコーダ310及びワードラインドライバ318は、ライン382上の読み取りレジスタ識別子を直接受け取ってもよい。しかしながら、読み取りバイパスロジック380は、コントロール信号をデコーダ310へ送信し、そしてワードラインドライバ318は、この回路がアレイ320へ送信すべき有効な出力を発生するかどうか決定する。例えば、ライン382上の読み取りレジスタ識別子がゼロサイクルレジスタ初期化動作に対応することを読み取りバイパスロジック380が決定する場合には、ロジック380は、コンポーネント310−370内の回路がアクセスに使用されるのを防止する。むしろ、ロジック380は、それに関連する読み出しデータをライン384に与える。
アレイ320は、典型的に、専用の読み取り及び書き込みポートを伴うダイ上スタティックランダムアクセスメモリ(RAM)として具現化される。セル330の1つの具現化が図3に示されている。典型的に、デコーダ312−316の各々は、ワードラインドライバ318内の適当なワードラインロジックを駆動する一連のブールロジックANDゲートを含む。ここに示す実施形態では、デコーダ310は、2つの読み取りデコーダ312及び314と、1つの書き込みデコーダ316とを含む。従って、アレイ320内の所与のセル330は、ライン358上のワードライン0と、ライン360上のワードライン1である2本の読み取りワードラインを含む。更に、セル330は、ライン350上の読み取りポート0と、ライン352上の読み取りポート1である2つの読み取りポートを含む。同様に、セル330は、ライン356上の単一の書き込みワードラインを含む。他の実施形態では、異なる数の読み取りデコーダ、読み取りポート、書き込みポート、及び書き込みワードラインが使用される。
図示されたように、各セル330は、セル30内に情報を記憶するための背中合わせのインバータ332及び334を有する。インバータ332及び334各々の出力は、セルの関連ビット値、又はビット値の反転形態のいずれかを与える。論理高値は、電力基準値に等価である。論理低値は、接地基準値に等価である。
書き込み動作中に、書き込みワードラインは、特定の行に対してライン356上の論理高値にアサートされる。ワードラインドライバ318は、書き込みワードラインをアサートする。ブロック370のデータドライブ回路によりライン348上の書き込みビット0及びライン354上の書き込みビット1の各々に適当なデータ値が入れられる。これらの値は、一対のインバータ332及び334に結合された2つのノードの一方を、nmosトランジスタ340及び342を含むトランジスタスタック、又はnmosトランジスタ344及び346を含むトランジスタスタックのいずれかを経て、論理低値へ放電させる。
読み取り動作が読み取りバイパスロジック380により取り扱われないときは、コンポーネント310−370内の回路が使用される。そのような読み取り動作の間に、ライン358及び360上の読み取りワードラインの一方又は両方が論理高値にアサートされる。nmosトランジスタ336及び338の一方又は両方がターンオンされる。従って、一対のインバータ332及び334により記憶された状態は、ライン350及び352上の読み取りポートの一方又は両方に与えられる。ライン350及び352上の値は、回路ブロック370内の読み出しロジックへ送られる。この読み出しロジックは、ラッチ、フリップ・フロップ、及びセンス増幅器の1つ以上を含む。物理的レジスタファイル300のブロック図及び回路説明から明らかなように、読み取りバイパスロジック380がゼロサイクルレジスタ初期化動作に対して読み出しデータを与えることができるときは、回路コンポーネント310−370に関連した電力消費を回避することができる。更に、読み取り動作のレイテンシを減少することができる。
図4を参照すれば、ゼロサイクルレジスタ初期化動作でレジスタ再ネーミング400を行う1つの実施形態を示す一般化されたブロック図が示されている。展開されたループの簡単な例は、インストラクション410aを含む。この例では、行先オペランドがインストラクション記憶後に最初にリストされ、その後、1つ以上のソースオペランドとなる。レジスタは、一般的な術語“r”を使用し、その後に、レジスタ識別子となる。例えば、レジスタ1は、“r1”で表される。インストラクション410aを伴う展開されたコードを導出するのに使用される元のループを以下に示す。
Figure 0005853303
ここでは、ループが使用されるが、レジスタ初期化動作がゼロサイクルレジスタ初期化動作であることを決定するためのループは不要である。この決定、及びその後のゼロサイクル動作の生成は、種々の形式のコードに対して使用される。インストラクション410aは、r1−r5と示す5つのアーキテクチャーレジスタを使用する。これらの物理的レジスタ番号は、実際の物理的レジスタに関連している。インストラクション410aは、擬似コードの例及び言語不可知論であることを意味する。マッピングテーブル420aは、一般的に、アーキテクチャーレジスタ番号と物理的レジスタ番号との間のマッピングを記憶するためのデータ構造を示す。
フリーリスト430aは、再ネーミングの目的で利用できる非アーキテクチャー物理的レジスタ番号を指示するためのデータ構造を示す。これらの物理的レジスタ番号も、実際の物理的レジスタに関連している。この例では、一般的術語“p”と、その後にレジスタ識別子を使用する14個の物理的レジスタネームがある。フリーリスト430aは、物理的レジスタp1−p14の各々がレジスタ再ネーミングに使用できることを示す。
予約リスト432は、再ネーミングのための少なくとも1つの物理的レジスタ番号のグループを示す。この例では、一般的術語“p”と、その後にレジスタ識別子を使用する4個の物理的レジスタネームがある。この例では、これらのレジスタ識別子は、フリーリスト430aにおける物理的レジスタネームより大きな番号にされる。フリーリスト430aにおける物理的レジスタネームとは異なり、予約リスト432における物理的レジスタネームの各々は、実際の物理的レジスタには関連していない。むしろ、予約リスト432における物理的レジスタネームは、特定の数値に関連している。例えば、物理的レジスタネームp15は、数値0に関連している。同様に、物理的レジスタネームp16は、数値1に関連している。
1つの例において、物理的レジスタ番号を識別するのに4ビットインデックスが使用される。それ故、16個の個別の物理的レジスタ番号は、物理的レジスタネームp1−p16のような4ビットインデックスにより識別される。しかしながら、物理的レジスタファイルには、14個の実際の物理的レジスタしか存在しない。近代的なプロセッサは、この例で与えられたものより大きい番号を使用する。この簡単な例は、例示のために使用されるに過ぎない。r1−r5のような5つのアーキテクチャーレジスタでは、最初の5つの物理的レジスタネームp1−p5で1対1の再ネーミングが行われる。更に、9個の物理的レジスタがある。それ故、物理的レジスタネームp6−p14は、非アーキテクチャー物理的レジスタネームであるが、その各々は、実際の物理的レジスタに依然関連している。残りの2つの物理的レジスタネーム、p15及びp16は、特定の数値を表わすのに使用される。この例では、数値が、各々、0及び1である。
インストラクション410bを参照すれば、これらのインストラクションは、インストラクション410aと同じであるが、各インストラクションに対してレジスタ再ネーミングが生じる。再ネーミングプロセスは、所与のパイプライン段において1つ以上のインストラクションを再ネーミングする。同時処理のために、パイプライン段当たりいかなる数のインストラクションが選択されてもよい。マッピングテーブル420bは、インストラクションごとにマッピングを記憶する。マッピングテーブル420bは、インストラクションごとにアーキテクチャーレジスタ番号と物理的レジスタ番号と予約レジスタ番号との間の記憶されたマッピングを示す。フリーリスト430bは、インストラクション410bの各々が再ネーミングされた後に物理的レジスタp7−p14の各々が依然利用可能であることを示す。物理的レジスタp1−p6の各々は、インストラクション410bにおいてアーキテクチャーレジスタr1−r5を再ネーミングするのに使用されている。
予約リスト432は、インストラクション410bの各々が再ネーミングされた後に、予約物理的番号p15−p16の各々が依然利用可能であることを示す。しかしながら、マッピングテーブル420bは、予約物理的番号p15及びp16の各々がアーキテクチャーレジスタr1−r5の1つ以上を再ネーミングするのに使用されたことを示している。予約物理的番号p15−p16の各々は、実際の物理的レジスタではなく、数値に関連している。それ故、予約物理的番号p15−p16の各々は、再ネーミングの目的で利用可から利用不可へと変化しない。予約物理的番号p15−p16の所与の1つは、第1のインストラクションにおいて第1のアーキテクチャーレジスタを再ネーミングするのに使用された後に、それより若い第2のインストラクションにおいて第2のアーキテクチャーレジスタを再ネーミングするのに使用されるが、第1のインストラクションは、まだコミットされなくてもよい。
インストラクション410bを見ると、第1のインストラクションは、ゼロサイクルレジスタ初期化動作へ変換される資格がある。このmoveインストラクションは、即時移動動作であり、数値0を、レジスタr1である行先オペランドに書き込む。予約物理的レジスタ番号p15は、数値0に関連している。それ故、レジスタr1は、p15へ再ネーミングされる。このマッピングは、マッピングテーブル420bに示されている。このmovインストラクションは、それがプロセッサの実行パイプライン段へ進行するのを防止するためにマークされる。例えば、movインストラクションは、ディスパッチパイプラン段で完了するようにマークされる。そのような実施形態では、movインストラクションがディスパッチパイプ段を越えて進行しないので、電力消費がプロセッサ内で減少される。更に、movインストラクションは、そうでなければ使用されるディスパッチパイプ段の後の複数のリソースを使用しないので、他のインストラクションに対するスループットが高くなる。更に、物理的レジスタp1−p14の各々がレジスタ再ネーミングに依然使用できるので、フリーリスト430bのサイズが増加される。増加されたフリーリストサイズは、性能の改善にも貢献する。
再ネームロジックは、プログラム順でこの第1のmovインストラクションより若いインストラクションにおいてレジスタr1と同じ識別子をもつソースオペランドに予約物理的レジスタ番号p15を指定する。物理的レジスタ番号p15のこのバイパス動作は、それより若いインストラクションが、レジスタr1を、数値0が書き込まれることを知らない行先オペランドとして使用するまで行われる。これらの若いインストラクションが、p15に再ネーミングされたソースオペランドに対して物理的レジスタファイルにアクセスするときに、物理的レジスタファイル内の読み取りバイパスロジックは、データ出力ラインを経て数値0を搬送する。p15に再ネーミングされたソースオペランドに対応する読み取り動作中にアクセスされる実際の物理的レジスタはない。
同様に、第2のインストラクションは、ゼロサイクルレジスタ初期化動作へ変換される資格がある。このmoveインストラクションは、即時移動動作であり、数値1を、レジスタr2である行先オペランドに書き込む。予約物理的レジスタ番号p16は、数値1に関連している。それ故、レジスタr2は、p16へ再ネーミングされる。このマッピングは、マッピングテーブル420bに示されている。この第2のmovインストラクションは、それがプロセッサの実行パイプライン段へ進行するのを防止するためにマークされる。上述したレジスタr1に対する再ネーミングと同様に、第2のmovインストラクションは、実行パイプライン段を通して進行しないので、電力消費の減少及びインストラクションスループットの増加のような種々の利益が得られる。
再ネーミングロジックは、プログラム順でこの第2のmovインストラクションより若いインストラクションにおいてレジスタr2と同じ識別子をもつソースオペランドに予約物理的レジスタ番号p16を指定する。物理的レジスタ番号p16のこのバイパス動作は、それより若いインストラクションが、レジスタr2を、数値1が書き込まれることを知らない行先オペランドとして使用するまで行われる。これらの若いインストラクションが、p16に再ネーミングされたソースオペランドに対して物理的レジスタファイルにアクセスするときに、物理的レジスタファイル内の読み取りバイパスロジックは、データ出力ラインを経て数値1を搬送する。p16に再ネーミングされたソースオペランドに対応する読み取り動作中にアクセスされる実際の物理的レジスタはない。
第3のインストラクションは、即時移動動作であるが、この例では、ゼロサイクルレジスタ初期化動作へ変換される資格をもたない。第3のインストラクションは、数値10をレジスタr3に書き込む。この例では、予約物理的レジスタ番号p15−p93の中で、数値10に関連したものはない。それ故、レジスタr3は、物理的レジスタ番号p1に再ネーミングされる。このマッピングがマッピングテーブル420bに示されている。
第4のインストラクションは、ブールロジックXOR動作である。ソースオペランドの各々は、r4である同じアーキテクチャーレジスタネームを有する。それ故、結果が0であって、行先オペランドに数値0が書き込まれることが分かる。時々、ソフトウェアプログラマは、即時移動動作を使用するのではなく、ブールロジックXOR動作を意図的に使用して、所与のレジスタをリセットする。あるハードウェア具現化では、ブールロジックXOR動作は、即時移動動作よりレイテンシが小さいことが知られている。第4のインストラクションでは、行先オペランドは、ソースオペランドと同じアーキテクチャーレジスタネームをもつが、インストラクションは、その特性から外れたゼロサイクル動作の資格をもつ。予約物理的レジスタ番号p15は、数値0に関連している。それ故、レジスタr4は、p15に再ネーミングされる。このマッピングがマッピングテーブル420bに示されている。更に、ブールロジックXORインストラクションも、それがプロセッサの実行パイプライン段へ進行するのを防止するためにマークされる。物理的レジスタファイルのアクセス中の再ネーミングされたレジスタ番号のバイパス動作及び読み取りバイパスロジックの使用は、第1のmovインストラクションに対する予約物理的レジスタp15に関して先に述べたように行われる。
第5のインストラクションは、ゼロサイクルレジスタ初期化動作へ変換される資格がある。このmovインストラクションは、即時移動動作であって、数値0を、レジスタr5である行先オペランドに書き込む。この第5のインストラクションにも、第1のmovインストラクションについて先に述べた再ネーミング、マーキング、バイパス、及び物理的レジスタファイルアクセスステップが適用される。
第6のインストラクションは、演算ADD動作である。このインストラクションは、ゼロサイクル動作へ変換される資格がない。ソースオペランドr1及びr2の各々は、マッピングテーブル420bのアクセス及び再ネーム値のバイパスのためにp15及びp16に再ネーミングされる。行先オペランドは、p2に再ネーミングされる。第7ないし第10インストラクションの各々に対して、第6インストラクションと同様のステップがとられる。第7ないし第10インストラクションの中で、ゼロサイクルオペレーションへ変換される資格のあるものはない。
図5を参照すれば、ゼロサイクル動作を生成する方法500の一実施形態の一般化されたフローチャートが示されている。ブロック502において、実際の物理的レジスタに関連しない所与のレジスタ識別子が、特定の数値に対応するように選択される(例えば、特定の数値を表わすように指定される)。最後の特定の数値に到達した場合には(条件付きブロック504)、ブロック506において、プログラムインストラクションが処理される。インストラクションは、コンパイルされ、メモリからフェッチされ、デコードされ、及び実行される。説明上、この実施形態におけるステップは、特定の順序で示されている。しかしながら、他の実施形態では、幾つかのステップが図示されたものとは異なる順序で生じてもよく、幾つかのステップが同時に実行されてもよく、幾つかのステップが他のステップと結合されてもよく、そして幾つかのステップが存在しなくてもよい。
デコーディングの後、所与のインストラクションは、資格付けされた(qualified)数値に対するレジスタ初期化動作であると決定される。opcode及びソースオペランドは、この決定を行うためにチェックされる。コントロールロジックは、特定のデコードされたインストラクションに関連した実行パイプライン段の前に、特定のインストラクションが資格付けされた数値をその行先オペランドに書き込むことを決定する。1つの実施形態では、ロジックは、インストラクションが即時移動インストラクションのためのopcodeを有し、そして即時の値が資格付けされた数値であると決定する。
ある実施形態では、1つ以上の資格付けされた数値の1つが値0である。そのようなケースでは、コントロールロジックは、インストラクションが、AND又はXORのようなブール論理動作のためのopcodeを有することを決定する。更に、ロジックは、ソースオペランドから、その後の実行パイプライン段の間に0の結果が行先オペランドに書き込まれることを決定する。同様に、ブールロジックXOR動作のための2つの等しいソースオペランドは、0の結果を生じさせる。更に、コントロールロジックは、デコードされたインストラクションが特定の演算動作のためのopcodeを有すると決定し、そしてソースオペランドのための特定の値がその後の実行パイプライン段の間に0の結果を行先オペランドに書き込ませる。例えば、2つの同じソースオペランドを伴う減算演算動作は、0の結果を生じさせる。同様に、0のソースオペランドを伴う乗算演算動作は、0の結果を生じさせる。
少なくとも、その後の実行パイプライン段において0の結果を行先オペランドに書き込むことを決定する前記ケースの各々に対して、実際の物理的レジスタに関連しない特定の再ネームレジスタ識別子でのレジスタ再ネーミングに関して先に述べた同様のステップが使用される。所与のインストラクションが、資格付けされた数値に対するレジスタ初期化動作であると決定されない場合には(条件付きブロック508)、方法500のコントロールフローがブロック506へ戻る。例えば、所与のインストラクションのソース及び行先オペランドは、物理的レジスタファイル内の実際の物理的レジスタに関連した再ネームレジスタ識別子で再ネームングされる。プログラムインストラクションの処理が続行される。
所与のインストラクションが、資格付けされた数値に対するレジスタ初期化動作であると決定された場合には(条件ブロック508)、ブロック510において、行先アーキテクチャーレジスタ識別子が、資格付けされた数値に指定されたレジスタ識別子で再ネーミングされる。このレジスタ識別子は、物理的レジスタファイルの実際の物理的レジスタに関連していない。その後のパイプライン段では、物理的レジスタファイルは、この特定の再ネームレジスタ識別子を、読み取るべきソースオペランドとして受け取るときに、実際の物理的レジスタにアクセスすることなく、資格付けされた数値を搬送する。1つの実施形態では、資格付けされた数値は、0である。しかしながら、他の数値も考えられ、資格付けされた値として意図される。ブロック512において、レジスタ初期化動作は、それがプロセッサパイプラインにおいて進行するのを防止するためにマークされる。例えば、動作は、ディスパッチパイプライン段において完了するものとしてマークされる。上述したように、レジスタ初期化動作がパイプラインを通して進行しないので、プロセッサ内の電力消費が減少される。更に、レジスタ初期化動作がパイプラインの後続段において複数のリソース(キュー、実行ユニット、ステージングフロップ、等)を使用しないので、他のインストラクションに対するスループットが高くなる。更に、このケースではレジスタ再ネーミングに使用される物理的レジスタがないので、フリーリストのサイズが増加する。フリーリストサイズの増加は、性能の改善にも貢献する。
以上、本発明の実施形態を詳細に述べたが、当業者であれば、前記開示が完全に理解されると、多数の種々の変更や修正が明らかとなろう。そのような修正や変更は、全て、特許請求の範囲に網羅される。
100:プロセッサ
102:アドレスセレクト
104:iキャッシュ
106:次フェッチプレディクタ
108:分岐方向プレディクタ
110:デコードユニット
112:コントロールフロー評価
114:再ネームイントラグループ依存性検出
116:マッパー
120:レジスタ再ネームユニット
122:再ネームコントロールロジック・アレイ
124:ゼロサイクル初期化ロジック
130:フリーリストアロケータ
140:ディスパッチキュー
142:マイクロコード
150:スケジューラ
160:実行コア
162:データキャッシュ
164:物理的レジスタファイル
166:読み取りバイパス
170:リオーダーバッファ
172:記憶バッファ

Claims (16)

  1. フェッチされたインストラクションをデコードするように構成されたデコーダと、
    前記デコードされたインストラクションを受け取るように構成されたレジスタ再ネームユニットと、
    複数の物理的レジスタを含む物理的レジスタファイルと、
    を備え、
    インストラクションの行先オペランドにより識別された行先に所与の数値を書き込むように行先オペランドを有するインストラクション(以下先行インストラクションという)が構成されるのを検出するのに応答して、前記レジスタ再ネームユニットは、前記所与の数値に関連付けられた再ネームレジスタ識別子を識別し、前記再ネームレジスタ識別子を前記行先オペランドに指定するように構成され、
    前記先行インストラクションより後続のインストラクションにおいて、前記所与の再ネームレジスタ識別子をソースオペランドとして指定すべきことを検出することに応答して、前記レジスタ再ネームユニットは、前記物理的レジスタファイルの物理的レジスタを読み出さずに前記所与の数値を前記物理的レジスタファイルの読み出しデータポートへ搬送するように構成された、プロセッサ。
  2. 前記検出に応答して、インストラクションの完了を示す指示が記憶される、請求項1に記載のプロセッサ。
  3. 前記プロセッサは、更に、関連再ネームレジスタによって各々識別された複数の物理的レジスタを含む物理的レジスタファイルを備え、前記行先オペランドに指定された前記再ネームレジスタ識別子は、前記複数の物理的レジスタのいずれにも関連付けられない、請求項1に記載のプロセッサ。
  4. 前記レジスタ再ネームユニットは、複数のインストラクションにより同時に使用するように前記再ネームレジスタを指定するように構成された、請求項1に記載のプロセッサ。
  5. フェッチされたインストラクションをデコードする段階と、
    行先オペランドによって識別された位置に数値を書き込むように行先オペランドを有するインストラクション(以下先行インストラクションという)が構成されるのを検出するのに応答して、所与の数値に関連付けられた再ネームレジスタ識別子を識別する段階と、
    再ネームレジスタ識別子を前記行先オペランドに指定する段階と、
    前記先行インストラクションより後続のインストラクションにおいて、前記所与の再ネームレジスタ識別子をソースオペランドとして指定すべきことを検出することに応答して、物理的レジスタを読み取らずに前記所与の数値を物理的レジスタファイルの読み出しデータポートへ搬送する段階と、
    を備えた方法。
  6. 前記先行インストラクションの検出に応答して、前記先行インストラクションが実行パイプライン段において実行されるのを防止する、請求項1に記載のプロセッサ。
  7. 前記先行インストラクションの検出に応答して、前記先行インストラクションが実行パイプライン段において実行されるのを防止する、請求項5に記載の方法。
  8. 前記検出は、前記インストラクションは移動インストラクションであり、当該移動インストラクションのソースオペランドは前記数値と同じ値を有する即時値である、ことを検出することを含む、請求項5に記載の方法。
  9. 前記行先オペランドに指定された前記所与の再ネームレジスタ識別子は、物理的レジスタに関連付けられていない、請求項5に記載の方法。
  10. レジスタ再ネームユニットであって、
    デコードされたインストラクションを受け取るように構成された第1のインターフェイスと、
    インストラクションをスケジューラへディスパッチするように構成されたディスパッチユニットへの第2のインターフェイスと、
    初期化ロジックと、
    を備え、
    行先オペランドによって識別された位置に数値を書き込むように行先オペランドを有するインストラクション(以下先行インストラクションという)が構成されたことを検出するのに応答して、前記初期化ロジックは、前記所与の数値に関連付けられた再ネームレジスタ識別子を識別し、前記行先オペランドに前記再ネームレジスタ識別子を指定するように構成され、
    前記先行インストラクションより後続のインストラクションにおいて、前記所与の再ネームレジスタ識別子をソースオペランドとして指定すべきことを検出することに応答して、前記レジスタ再ネームユニットは、物理的レジスタを読み出すことなく前記所与の数値を物理的レジスタファイルの読み出しデータポートへ搬送するように構成される、レジスタ再ネームユニット。
  11. 前記先行インストラクションの検出に応答して、前記初期化ロジックは、更に、前記先行インストラクションが実行パイプライン段において実行されるのを防止するように構成される、請求項10に記載のレジスタ再ネームユニット。
  12. 前記行先オペランドに指定された前記再ネームレジスタ識別子は、物理的レジスタに関連付けられていない、請求項10に記載のレジスタ再ネームユニット。
  13. 前記インストラクションを検出することは、移動インストラクションであり、移動インストラクションのソースオペランドは前記数値と同じ値を有する、を検出することを含む、請求項10に記載のレジスタ再ネームユニット。
  14. 前記位置に数値を書き込むように前記インストラクションが構成されるのを検出することは、(i)即時ソースオペランドが前記所与の数値と同じ値を有すること、及び(ii)opcodeが、次の動作、即ち乗算演算、移動、及びブールの論理AND、のうちの少なくとも1つを指示すること、を検出することを含む、請求項12に記載のレジスタ再ネームユニット。
  15. コントロールロジックと、
    関連再ネームレジスタ識別子により各々識別される複数の物理的レジスタを含む物理的レジスタファイルと、
    を備え、行先オペランドに数値を書き込むようにソースオペランドと行先オペランドを有するインストラクション(以下先行インストラクションという)が構成されるのを検出するのに応答して、前記コントロールロジックは、前記所与の数値に関連付けられた再ネームレジスタ識別子を識別し、前記行先オペランドに前記再ネームレジスタを指定するよう構成され、
    前記先行インストラクションより後続のインストラクションにおいて、前記所与の再ネームレジスタ識別子をソースオペランドとして指定すべきことを検出することに応答して、前記コントロールロジックは、前記物理的レジスタファイルの物理的レジスタを読み出すことなく前記所与の数値を前記物理的レジスタファイルの読み出しデータポートへ搬送するように構成された、装置。
  16. 前記先行インストラクションの検出に応答して、前記コントロールロジックは、更に、前記先行インストラクションが実行パイプライン段において実行されるのを防止するように構成される、請求項15に記載の装置。
JP2013095092A 2012-04-30 2013-04-30 レジスタ初期化動作の最適化 Active JP5853303B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/460,268 US9430243B2 (en) 2012-04-30 2012-04-30 Optimizing register initialization operations
US13/460,268 2012-04-30

Publications (2)

Publication Number Publication Date
JP2013232196A JP2013232196A (ja) 2013-11-14
JP5853303B2 true JP5853303B2 (ja) 2016-02-09

Family

ID=48190184

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013095092A Active JP5853303B2 (ja) 2012-04-30 2013-04-30 レジスタ初期化動作の最適化

Country Status (8)

Country Link
US (1) US9430243B2 (ja)
EP (1) EP2660715B1 (ja)
JP (1) JP5853303B2 (ja)
KR (1) KR101502682B1 (ja)
CN (1) CN103377037B (ja)
BR (1) BR102013010540B1 (ja)
TW (1) TWI507980B (ja)
WO (1) WO2013165752A1 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE112012007058T5 (de) * 2012-12-19 2015-08-06 Intel Corporation Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
US9251300B2 (en) * 2013-10-25 2016-02-02 Altera Corporation Methods and tools for designing integrated circuits with auto-pipelining capabilities
US20170083313A1 (en) * 2015-09-22 2017-03-23 Qualcomm Incorporated CONFIGURING COARSE-GRAINED RECONFIGURABLE ARRAYS (CGRAs) FOR DATAFLOW INSTRUCTION BLOCK EXECUTION IN BLOCK-BASED DATAFLOW INSTRUCTION SET ARCHITECTURES (ISAs)
US10528355B2 (en) * 2015-12-24 2020-01-07 Arm Limited Handling move instructions via register renaming or writing to a different physical register using control flags
US10949202B2 (en) 2016-04-14 2021-03-16 International Business Machines Corporation Identifying and tracking frequently accessed registers in a processor
US10007590B2 (en) 2016-04-14 2018-06-26 International Business Machines Corporation Identifying and tracking frequently accessed registers in a processor
US10255072B2 (en) * 2016-07-01 2019-04-09 Intel Corporation Architectural register replacement for instructions that use multiple architectural registers
GB2563582B (en) * 2017-06-16 2020-01-01 Imagination Tech Ltd Methods and systems for inter-pipeline data hazard avoidance
US10915317B2 (en) * 2017-12-22 2021-02-09 Alibaba Group Holding Limited Multiple-pipeline architecture with special number detection
JP7131236B2 (ja) * 2018-09-20 2022-09-06 富士通株式会社 演算処理装置および演算処理装置の制御方法
CN111638911A (zh) * 2019-03-01 2020-09-08 阿里巴巴集团控股有限公司 一种处理器、指令执行设备及方法
US10896041B1 (en) * 2019-09-25 2021-01-19 Microsoft Technology Licensing, Llc Enabling early execution of move-immediate instructions having variable immediate value sizes in processor-based devices
US11119772B2 (en) * 2019-12-06 2021-09-14 International Business Machines Corporation Check pointing of accumulator register results in a microprocessor
CN111414196B (zh) * 2020-04-03 2022-07-19 中国人民解放军国防科技大学 一种零值寄存器的实现方法及装置
US11113067B1 (en) * 2020-11-17 2021-09-07 Centaur Technology, Inc. Speculative branch pattern update
CN112416434B (zh) * 2020-12-03 2023-02-17 海光信息技术股份有限公司 物理寄存器分配方法、物理寄存器分配装置和电子设备
US11531546B2 (en) 2021-03-08 2022-12-20 International Business Machines Corporation Hexadecimal floating point multiply and add instruction
CN113703832B (zh) * 2021-09-10 2024-06-11 中国人民解放军国防科技大学 一种立即数转移指令的执行方法、装置及介质
CN114116229B (zh) * 2021-12-01 2023-03-31 北京奕斯伟计算技术股份有限公司 调节指令流水线的方法及装置、存储器和存储介质
CN115640047B (zh) * 2022-09-08 2024-01-19 海光信息技术股份有限公司 指令操作方法及装置、电子装置及存储介质
CN116339830B (zh) * 2023-05-26 2023-08-15 北京开源芯片研究院 一种寄存器管理方法、装置、电子设备及可读存储介质
CN117289995B (zh) * 2023-10-11 2024-05-10 海光信息技术股份有限公司 指令处理方法以及处理器
CN117555600B (zh) * 2023-10-20 2024-08-23 海光信息技术(成都)有限公司 用于数据通路的操作方法、计算装置及存储介质
CN117931294B (zh) * 2024-03-22 2024-07-16 芯来智融半导体科技(上海)有限公司 指令处理设备和处理系统

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4435753A (en) 1980-10-31 1984-03-06 International Business Machines Corporation Register allocation system using recursive queuing during source code compilation
DE69130588T2 (de) 1990-05-29 1999-05-27 National Semiconductor Corp., Santa Clara, Calif. Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür
US5696957A (en) 1991-05-17 1997-12-09 Ricoh Company, Ltd Integrated circuit comprising a central processing unit for executing a plurality of programs
JP3206960B2 (ja) 1991-05-17 2001-09-10 株式会社リコー 拡張中央演算処理装置
US5452426A (en) 1994-01-04 1995-09-19 Intel Corporation Coordinating speculative and committed state register source data and immediate source data in a processor
US5768610A (en) * 1995-06-07 1998-06-16 Advanced Micro Devices, Inc. Lookahead register value generator and a superscalar microprocessor employing same
US6112019A (en) 1995-06-12 2000-08-29 Georgia Tech Research Corp. Distributed instruction queue
GB2317464A (en) 1996-09-23 1998-03-25 Advanced Risc Mach Ltd Register addressing in a data processing apparatus
US6122725A (en) 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6094716A (en) * 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6122656A (en) 1998-07-31 2000-09-19 Advanced Micro Devices, Inc. Processor configured to map logical register numbers to physical register numbers using virtual register numbers
US6594754B1 (en) * 1999-07-07 2003-07-15 Intel Corporation Mapping destination logical register to physical register storing immediate or renamed source register of move instruction and using mapping counters
US6505293B1 (en) * 1999-07-07 2003-01-07 Intel Corporation Register renaming to optimize identical register values
US6553483B1 (en) 1999-11-29 2003-04-22 Intel Corporation Enhanced virtual renaming scheme and deadlock prevention therefor
US7631207B1 (en) * 2006-04-21 2009-12-08 Sun Microsystems, Inc. Reducing power consumption for processing of common values in microprocessor registers and execution units
US20100274961A1 (en) 2009-04-22 2010-10-28 Golla Robert T Physically-indexed logical map table
GB2478726B (en) 2010-03-15 2013-12-25 Advanced Risc Mach Ltd Mapping between registers used by multiple instruction sets

Also Published As

Publication number Publication date
EP2660715A3 (en) 2014-05-21
CN103377037B (zh) 2016-08-10
EP2660715B1 (en) 2015-10-07
KR20130122587A (ko) 2013-11-07
KR101502682B1 (ko) 2015-03-13
TWI507980B (zh) 2015-11-11
JP2013232196A (ja) 2013-11-14
US20130290680A1 (en) 2013-10-31
BR102013010540A2 (pt) 2015-10-13
WO2013165752A1 (en) 2013-11-07
BR102013010540B1 (pt) 2021-07-06
TW201403472A (zh) 2014-01-16
US9430243B2 (en) 2016-08-30
CN103377037A (zh) 2013-10-30
EP2660715A2 (en) 2013-11-06

Similar Documents

Publication Publication Date Title
JP5853303B2 (ja) レジスタ初期化動作の最適化
JP5894120B2 (ja) ゼロサイクルロード
US20170097891A1 (en) System, Method, and Apparatus for Improving Throughput of Consecutive Transactional Memory Regions
US8386754B2 (en) Renaming wide register source operand with plural short register source operands for select instructions to detect dependency fast with existing mechanism
US9977674B2 (en) Micro-operation generator for deriving a plurality of single-destination micro-operations from a given predicated instruction
US9311084B2 (en) RDA checkpoint optimization
US6393555B1 (en) Rapid execution of FCMOV following FCOMI by storing comparison result in temporary register in floating point unit
US10417001B2 (en) Physical register table for eliminating move instructions
US20130275720A1 (en) Zero cycle move
JP2012212433A (ja) 条件付き命令が無条件で出力を提供するシステム及び方法
WO1996012228A1 (en) Redundant mapping tables
US9317285B2 (en) Instruction set architecture mode dependent sub-size access of register with associated status indication
KR20070101374A (ko) 비정렬 데이터를 직접 누적하기 위한 부분―워드 기록가능아키텍처 레지스터
US20220050684A1 (en) Program counter (pc)-relative load and store addressing
US9223577B2 (en) Processing multi-destination instruction in pipeline by splitting for single destination operations stage and merging for opcode execution operations stage
US7406587B1 (en) Method and system for renaming registers in a microprocessor
US6298436B1 (en) Method and system for performing atomic memory accesses in a processor system
US11544065B2 (en) Bit width reconfiguration using a shadow-latch configured register file
US7783692B1 (en) Fast flag generation
US20210132985A1 (en) Shadow latches in a shadow-latch configured register file for thread storage
US9569258B1 (en) Scheduling multiple operations in a divider unit
Shah et al. SPSIM: SuperScalar Processor SIMulater CS305 Project Report

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140710

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140723

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141023

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20141208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150408

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20150415

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150701

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151001

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151116

R150 Certificate of patent or registration of utility model

Ref document number: 5853303

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250