JP2016534429A - 分岐予測ユニット及びレベル1命令キャッシュにおける帯域幅の増加 - Google Patents

分岐予測ユニット及びレベル1命令キャッシュにおける帯域幅の増加 Download PDF

Info

Publication number
JP2016534429A
JP2016534429A JP2016525857A JP2016525857A JP2016534429A JP 2016534429 A JP2016534429 A JP 2016534429A JP 2016525857 A JP2016525857 A JP 2016525857A JP 2016525857 A JP2016525857 A JP 2016525857A JP 2016534429 A JP2016534429 A JP 2016534429A
Authority
JP
Japan
Prior art keywords
bip
btb
prediction
processor
branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016525857A
Other languages
English (en)
Other versions
JP6523274B2 (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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices 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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2016534429A publication Critical patent/JP2016534429A/ja
Application granted granted Critical
Publication of JP6523274B2 publication Critical patent/JP6523274B2/ja
Active 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

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

Abstract

プロセッサにおいて分岐予測を実行するためのプロセッサ、装置及びコンピュータ可読媒体が提示される。プロセッサは、フロントエンドユニットを含む。フロントエンドユニットは、レベル1分岐ターゲットバッファ(BTB)と、BTBインデックス予測器(BIP)と、レベル1ハッシュパーセプトロン(HP)と、を含む。BTBは、ターゲットアドレスを予測するように構成されている。BIPは、プログラムカウンタ及びグローバル履歴に基づいて予測を生成するように構成されている。予測は、投機的部分ターゲットアドレスと、グローバル履歴値と、グローバル履歴シフト値と、ウェイ予測と、を含む。HPは、分岐予測が成立するか否かを予測するように構成されている。【選択図】図5

Description

(関連出願の相互参照)
本願は、2013年10月25日に出願された米国仮特許出願番号第61/895,624号の利益を主張するものであり、その内容は引用により完全に説明されるように本明細書に組み込まれる。
開示された実施形態は、概して、プロセッサを対象とし、特にプロセッサ内の分岐予測ユニット及びレベル1命令キャッシュを対象とする。
中央演算処理装置(CPU)及びグラフィックスプロセシングユニット(GPU)を含むプロセッサは、多様な用途で活用されている。標準的な構成は、プロセッサを、例えばキャッシュ、システムメモリ等の記憶装置に接続することである。プロセッサは、必要に応じて、記憶装置から命令をフェッチするためのフェッチオペレーションを実行し得る。プロセッサパイプラインは、命令を処理するためのいくつかの段(stage)を含む。1つの実装例では、4段パイプラインが使用されてよく、フェッチ段、復号段、実行段及びライトバック段を含む。命令は、順番にパイプライン段を通って進行する。
プロセッサのオペレーションをスピードアップするためには、完全なパイプラインを有することが望ましい。パイプラインを充填する1つの方法は、前の命令が処理されている間に後続の命令をフェッチすることである。いくつかの命令の前にフェッチできるようにするために、分岐予測器が使用されてもよい。分岐予測器は、分岐命令がパイプラインの実行段に達する前に、分岐命令の方向(つまり、成立又は不成立)と、分岐ターゲットアドレスと、を予測する。
これは、命令の「プリフェッチング」及び命令の「投機的実行」として知られている。命令は、分岐命令が実行段に達するまで予測が正しいか否か分からないため、投機的に実行される。分岐命令の実際の方向を知らずに命令をプリフェッチングして投機的実行すると、命令処理がスピードアップすることがあるが、逆効果を有する場合があり、分岐命令の予測を誤ったときにパイプラインを遅れさせる場合がある。分岐の予測ミスが起こると、パイプラインをフラッシュする必要があり、正しい分岐方向からの命令が実行される。これは、システムの性能に大きな影響を及ぼし得る。
いくつかの異なるタイプの分岐予測器が用いられてきた。バイモーダル予測器は、特定の分岐の実行の最近の履歴に基づいて予測を行い、成立又は不成立の予測を提供する。グローバル予測器は、単に関心のある特定の分岐だけではなく、全ての分岐の実行の最近の履歴に基づいて予測を行う。グローバルに共有される履歴バッファ、パターン履歴テーブル及び追加のローカル飽和カウンタを有する2レベル適応予測器が使用されてよく、これにより、ローカル予測器及びグローバル予測器の出力が互いに排他的論理和されて、最終的な予測が提供される。複数の予測機構が同時に使用されてもよく、最終的な予測は、どの予測器が過去に最善の予測を行ったのかを記憶するメタ予測器、又は、奇数の異なる予測器に基づく多数決機能に基づいて行われる。
図1は、従来のレベル1分岐予測器100のブロック図である。分岐予測器100は、第1予測器(P1)102と、第2予測器(P2)104と、マルチプレクサ(mux)106と、チューザー108と、を含む。プログラムカウンタ110(予測される分岐のアドレス)及び他の入力112は、第1予測器102及び第2予測器104の両方によって評価され、各予測器が独自の予測を行う。
また、プログラムカウンタ110は、どの予測器(第1予測器102又は第2予測器104)がより正確であるかを判断するために、プログラムカウンタ110を使用するチューザー108に対する入力として供給される。チューザー108は、マルチプレクサ106に対してセレクタとして供給される予測選択114を生成する。選択された予測器の出力は、分岐予測器100の予測116として用いられる。
図2は、別の従来のレベル1分岐予測器200のブロック図である。1つの実装例では、レベル1予測器200は、McFalingハイブリッド予測器であってもよい。分岐予測器200は、構造において分岐予測器100と類似しているが、いくつかのコンポーネントについては異なる実装を有する。分岐予測器200は、(バイモーダルカウンタのアレイとして実装される)第1予測器202と、(バイモーダルカウンタのアレイとして実装される)第2予測器204と、マルチプレクサ(mux)206と、バイモーダルチューザー208と、を含む。各予測器202,204は独自の予測を行う。第2予測器204は、XORユニット210と、バイモーダルカウンタ212のアレイと、を含む。
プログラムカウンタ220(分岐アドレス)は、第1予測器202、第2予測器204及びチューザー208への入力として供給される。第1予測器202は、プログラムカウンタ220の下位アドレスビットによってインデックスが付された飽和バイモーダル2ビットカウンタに基づいて、予測を行う。
グローバル履歴222は、(分岐アドレスによってインデックスが付された)最も最近のN個の分岐の分岐方向の履歴を保持し、第2予測器204への入力として供給される。XORユニット210は、プログラムカウンタ220及びグローバル履歴222に対して排他的論理和演算を実行し、これにより、アレイ212へのインデックスとして用いられるハッシュを生成する。
チューザー208は、どの予測器(第1予測器202又は第2予測器204)がより正確であるかをテーブル内でルックアップするために、プログラムカウンタ220を使用する。チューザー208は、マルチプレクサ206に対してセレクタとして供給される予測選択224を生成する。選択された予測器は、分岐予測器200のレベル1予測226として用いられる。
図3は、ハッシュ化されたパーセプトロン300として知られている従来のレベル2分岐予測器のブロック図である。ハッシュ化されたパーセプトロン300は、バイアス重みアレイ302と、複数の重みアレイ304、304、…、304と、加算器306と、を含む。プログラムカウンタ310は、バイアス重みアレイ302と、重みアレイ304〜304と、への入力として供給される。
バイアス重みアレイ302は重みのアレイであり、各重みはビット数(例えば、4又は8)である。バイアス重みアレイ302は、加算器306に供給される重み値を得るために、プログラムカウンタ310又はプログラムカウンタ310のハッシュを用いてインデックスが付される。
各重みアレイ304〜304は、重み値を得るために、プログラムカウンタ310のハッシュと、グローバル履歴312の異なるビットと、によってインデックスが付される。各重みアレイ304〜304は、プログラムカウンタ310と、グローバル履歴312の一部と、に対して排他的論理和演算を実行することによってハッシュを生成するために、XORユニット314を含む。グローバル履歴は、分岐の成立可否に関わりなく、現在の分岐を含まない全ての分岐の過去の結果のリストである。グローバル履歴の最下位ビットは、遭遇した最も最近の分岐についての情報を含む。一方、グローバル履歴の最上位ビットは、遭遇したより古い分岐についての情報を含む。
加算器306は、合計値を得るために、バイアス重みアレイ302及び重みアレイ304〜304の各々から得られた重みを加算する。合計値の最上位ビット(MSB)は予測316である。例えば、合計値のMSBが「1」である場合、結果予測は「分岐不成立」であり、合計値のMSBが「0」である場合、結果予測は「分岐成立」である。
ハッシュ化されたパーセプトロン300の1つの実装例では、全ての重み値が加算前に符号拡張され、正しくない予測を生じさせ得る加算器306のオーバフローを防ぐことが留意される。ハッシュ関数を用いてバイアス重みアレイ302及び重みアレイ304〜304の各々にインデックスを生成すると、プログラムカウンタ310及びグローバル履歴312の各々が多数のビットを含む場合があるので、(インデックスを構成するビット数に関して)小さいインデックスが生成される。
分岐予測器は、通常、大きくて複雑な構造である。結果として、分岐予測器は、大量のパワーを消費し、分岐を予測するためのレーテンシペナルティを生じさせる。よりよい分岐予測は、プロセッサの性能及びパワー効率に影響を与えることから、よりよい分岐予測を有することが望ましい。
いくつかの実施形態は、フロントエンドユニットを含むプロセッサを提供する。フロントエンドユニットは、レベル1分岐ターゲットバッファ(BTB)と、BTBインデックス予測器(BIP)と、レベル1ハッシュパーセプトロン(HP)と、を含む。BTBは、ターゲットアドレスを予測するように構成されている。BIPは、プログラムカウンタ及びグローバル履歴に基づいて予測を生成するように構成されており、予測は、投機的部分ターゲットアドレス、グローバル履歴値、グローバル履歴シフト値及び向き予測を含む。HPは、分岐命令が成立するか否かを予測するように構成されている。
いくつかの実施形態は、プロセッサにおいて分岐予測を実行するための方法を提供する。プロセッサは、レベル1分岐ターゲットバッファ(BTB)と、BTBインデックス予測器(BIP)と、を含む。インデックスは、BTB及びBIPに対するルックアップに用いるために生成される。ルックアップは、ターゲットアドレスを予測するために、インデックスを用いてBTBにおいて実行される。ルックアップは、投機的部分ターゲットアドレスを予測するために、インデックスを用いてBIPにおいて実行される。BTBからのターゲットアドレスと、BIPからの投機的部分ターゲットアドレスとは、次のフローのためのインデックスを生成するために用いられる。
いくつかの実施形態は、プロセッサにおいて分岐予測を実行するために汎用コンピュータによって実行される命令のセットを記憶する非一時的なコンピュータ可読記憶媒体を提供する。プロセッサは、レベル1分岐ターゲットバッファ(BTB)と、BTBインデックス予測器(BIP)と、を含む。命令のセットは、生成コードセグメントと、第1実行コードセグメントと、第2実行コードセグメントと、使用コードセグメントと、を含む。生成コードセグメントは、BTB及びBIPに対するルックアップに用いるためにインデックスを生成する。第1実行コードセグメントは、ターゲットアドレスを予測するために、インデックスを用いて、BTBにおいてルックアップを実行する。第2実行コードセグメントは、投機的部分ターゲットアドレスを予測するために、インデックスを用いて、BIPにおいてルックアップを実行する。使用コードセグメントは、次のフローのためのインデックスを生成するために、BTBからのターゲットアドレスと、BIPからの投機的部分ターゲットアドレスと、を用いる。
より詳細な理解は、添付図面と併せて一例として示された以下の説明から得られる。
従来のレベル1分岐予測器のブロック図である。 別の従来のレベル1分岐予測器のブロック図である。 従来のレベル2分岐予測器(ハッシュ化されたパーセプトロン)のブロック図である。 1つ以上の開示された実施形態が実装され得る例示的な装置のブロック図である。 BTBインデックス予測器(BIP)及びBTBウェイ予測器のブロック図である。 BIPにおける単一のエントリの図である。 BP一致信号を生成するためにBIPを用いる方法のフローチャートである。 命令タグ(IT)パイプライン及び命令キャッシュ(IC)パイプラインのブロック図である。
図4は、1つ以上の開示された実施形態が実装され得る例示的な装置400のブロック図である。装置400は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含み得る。装置400は、プロセッサ402と、メモリ404と、記憶装置406と、1つ以上の入力装置408と、1つ以上の出力装置410と、を含む。また、装置400は、任意に、入力ドライバ412及び出力ドライバ414を含んでもよい。装置400は、図4に図示されていない追加のコンポーネントを含んでもよいことが理解される。
プロセッサ402は、中央演算処理装置(CPU)、グラフィックスプロセシングユニット(GPU)、同じダイに位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含んでもよく、各プロセッサコアは、CPU又はGPUであってもよい。メモリ404は、プロセッサ402と同じダイに位置してもよいし、プロセッサ402から分離して位置してもよい。メモリ404は、揮発性メモリ又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM若しくはキャッシュ等Iを含んでもよい。
記憶装置406は、例えばハードディスクドライブ、ソリッドステートドライブ、光ディスク又はフラッシュドライブ等の固定記憶装置又はリムーバブル記憶装置を含んでもよい。入力装置408は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信用の無線ローカルエリアネットワークカード)を含んでもよい。出力装置410は、ディスプレイ、スピーカ、プリンタ、触覚フィードバック装置、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信用の無線ローカルエリアネットワークカード)を含んでもよい。
入力ドライバ412は、プロセッサ402及び入力装置408と通信し、プロセッサ402は、入力装置408からの入力を受信できる。出力ドライバ414は、プロセッサ402及び出力装置410と通信し、プロセッサ402が出力装置410に対して出力を送信できるようにする。入力ドライバ412及び出力ドライバ414は、オプションのコンポーネントであり、装置400は、入力ドライバ412及び出力ドライバ414が存在しない場合には、各ドライバと同様に動作することが留意される。
プロセッサ内のフロントエンドユニット(FE)は、命令をフェッチし、復号ユニット(DE)に命令を送信することを担当する。FEは、2つのサブユニット(つまり、分岐予測(BP)及び命令キャッシュ(IC))を含む。BPサブユニットは、各アドレスでフェッチするために、フェッチアドレス及び特定のバイトのシーケンスを予測する。ICサブユニットは、ページ変換を実行し、キャッシュ階層から特定のバイトをフェッチする。FEは、他のサブユニット及び機能を含むが、係る機能は本開示と関連性がなく、本明細書においてさらに説明されないことに留意されたい。
FEには、3つの主要なパイプライン(つまり、BPパイプライン、命令タグ(IT)パイプライン及びICパイプライン)が存在する。BPパイプラインと、BPパイプライン及び命令フェッチ(IT/IC)パイプラインを切り離すIT/ICパイプラインとの間には、予測待ち行列(PRQ)がある。BPパイプラインは、予測アドレスを生成し、PRQは、IT/ICパイプラインがアドレスを処理できるようになるまでアドレスを保持する。PRQは、フェッチアドレスのインオーダーキューである。PRQは、IT/ICパイプラインによって読み取られ、更新される。
サイクル毎に、予測されたバーチャルフェッチアドレス(プログラムカウンタ、PC)及び最近の分岐挙動(グローバル履歴、GHist)を表すベクトルが、BPパイプラインをフローする。各フローは、フェッチされる次の64のバイトまで発見できる。PCは、分岐ターゲットバッファ(BTB)においてエントリをルックアップするために用いられる。BTBエントリは、分岐を識別し、そのターゲットを予測する。PC及びGHistは、ハッシュパーセプトロン(HP)テーブルにアクセスするために用いられる。HPテーブルは、条件分岐の方向(つまり、成立又は不成立)を予測するために用いられる。
戻り及び可変(returns and variable)ターゲット分岐は、予測においてサポートするのに用いられる追加的な構造を有する。成立した分岐が呼出しであることをBTBが示す場合には、呼出し後の命令のアドレスがスタックにプッシュされる。関連付けられた戻り命令は、BTBからの予測されたターゲットを用いる代わりに、スタックから当該アドレスをポップアップする。分岐が可変ターゲットを有することをBTBが示す場合には、間接ターゲットアレイ(ITA)のアドレスをルックアップするために、フェッチアドレス及びグローバル履歴が用いられる。
BTB構造及びHP構造の両方は2レベル構造として実装される。レベル1(L1)BTB及びL1 HPから予測されるフェッチ方向の変更(リダイレクト)は、BPパイプラインに1つのバブル(例えば、「ノーオペレーション」)を挿入する。分岐が、L1 BTBに存在するが、可変ターゲットを有しており、L2 BTBで見つけられる場合、又は、L2 HPがL1予測器からの直接的な予測を無効にする場合には、3つのバブルがBPパイプラインに挿入される。最終的に、可変ターゲットを有するL2 BTBの分岐は、4つのバブルをBPパイプラインに挿入する。
これらの主要な予測器に加えて、FEの効率を高めるように設計された2つの構造が存在する。上述したように、典型的なケースでは、成立した分岐又は成立しなかった分岐は、BPパイプラインにバブルをもたらす。BTB及びHPにアクセスするのに並行して、PC及びGHistは、BTBインデックス予測器(BIP)からエントリを読み取るために用いられる。このエントリは、BTB及びHPのアレイインデックスを予測するために用いられ、次のサイクルにおいてこれらの構造にアクセスするのに使用される。BIPが次の命令のインデックスを正しく予測すると、バルブが潰される。ループの繰り返しを見つけようとするために、予測されたアドレスストリームを絶えずスキャンしているループ予測器が存在する。ループ予測器は、ループ上でロックすると、大きな予測アレイをオフにすることができる。予測は、このより小さい構造の中から、1サイクル当たり最大1つの分岐が行われるレートで行われてよい。
アドレスが予測されると、アドレスは3つの異なる構造に書き込まれる。各アドレスは、分岐及び履歴の情報とともに分岐ステータスレジスタ(BSR)に書き込まれる。これは、分岐が発見され、予測を誤り、又は、リタイアされる場合に、予測構造を訓練するのに用いられる。各アドレスがPRQに書き込まれることにより、ICパイプラインは、関連付けられたデータをフェッチできる。最後に、各アドレスは、DEユニットの先入先出(FIFO)待ち行列(FaFifo)のフェッチアドレスに書き込まれる。
サイクル毎に、PRQから予測された仮想フェッチアドレス(VA)は、ITパイプラインをフローする。ITパイプラインは、VAを物理アドレス(PA)に変換しようとして、命令トランスレーションルックアサイドバッファ(ITLB)の2つのレベルのうち第1レベルにアクセスする。成功した場合には、ITパイプラインは、この物理アドレスを取得し、これを用いてICにアクセスする。ITLBルックアップと並行して、ICマイクロタグ(uTag)へのアクセスが開始される。このルックアップは、ITLBからPAが得られると終了する。マイクロタグは、ICデータアレイの何れのウェイがアクセスされるべきか(キャッシュラインが何れに位置してよいか)を予測する。データアクセスと並行して、完全なタグルックアップが、マイクロタグヒット信号を限定するために実行される。このフロー(ITLBヒット、部分PA、ICヒット、ICウェイ)の結果は、PRQにライトバックされる。
L1 ITLBミスがある場合には、トランスレーションルックアサイドバッファ(TLB)ミスアドレスバッファ(MAB)が割り当てられ、L2 ITLBのルックアップが試行される。L2 ITLBにミスがある場合にも、ロード/記憶ユニット(LS)に対するページウォーク要求が開始される。L2 ITLBヒットエントリ及びページウォーク要求の結果の何れかが、L1 ITLBにインストールされる。命令キャッシュにミスがある場合には、ICメモリアドレスバッファ(MAB)が割り当てられ、ミッシングラインについてのL2 ITLBに対する充填要求が送信される。特定のPAが、(ページウォークの属性によって示されるように)キャッシュ可能である場合には、データが戻ると、当該データがICに書き込まれる。特定のPAがキャッシュ不可である場合には、プロセスは、アドレスがPRQにおいて最も古くなるのを待機し、結果として生じるフェッチデータをDEに直接転送する。
ミスがある場合には、PRQにおいてより若いエントリが、処理されるために続行される。これは、ミスをした古いフェッチよりも若いフェッチのキャッシュラインをプリフェッチする試みである。
ICパイプラインは、1サイクル当たり32バイトの命令データをフェッチできる3段パイプラインである。PRQの各アドレスは、64バイト予測ウィンドウ内の予測された開始位置及び終了位置に応じており、全てのデータをDEに転送するために、ICパイプラインを流れる1つ又は2つのフローを必要とする。最も古いPRQエントリが待機している、リターンするL2キャッシュミスは、当該エントリに対してICパイプラインをウェークアップすることができ、L2充填データは、データアレイが更新されている間に、DEに直接的にバイパスできる。
全ての予測、タグ及びキャッシュパイプラインは、スレッド優先順位付けアルゴリズムに基づいて2つのスレッドからアクセスをインタリーブすることによって、同時マルチスレディング(SMT)を処理する。概して、スレッドスケジューリングは、ラウンドロビン技術を用いて、BTパイプライン、ITパイプライン及びICパイプライン内で独立して実行される。所定のサイクルにおいて、1つのスレッドがブロックされ、他のスレッドがピックされるために利用可能な場合には、他のスレッドは、当該サイクルにおいてピックされる。
図5は、BTBインデックス予測器及びBTBウェイ予測器のブロック図である。図5は、BTBインデックス予測器及びBTBウェイ予測器を実装するプロセッサ500の一部を示す。明確にするために、図5に示されていないプロセッサ500の他の要素が存在する。図5の下部にあるラベル(図においてBP0,BP1,BP2)は、異なるコンポーネントがBPパイプラインの何れのサイクルで動作するのかを示している。
プログラムカウンタ(PC)502及びグローバル履歴(GHist)504は、入力として提供される。第1マルチプレクサ510は、PC502及びターゲットPC(Target_BP2)512を受信し、選択信号514は、PC502及びターゲットPC512の何れかを、選択PC(PC_BP0)516として選択する。選択信号514は、実行(EX)ユニット若しくは復号(DE)ユニットからのリダイレクト、又は、BPパイプラインにおける後からのより高い優先順位予測に基づく。選択信号514はプロセッサ500の別の部分から得られるが、選択信号514の潜在的なソースへのコネクションラインは、明確にするために図示されていないことに留意されたい。
選択PC516及び予測ターゲットPC(PredTarget_BP1)518は、第2マルチプレクサ520に入力として供給され、選択信号522は、選択PC516及び予測ターゲットPC518の何れかを、予測PC(PredPC_BPO)524として選択する。選択信号522は、EXユニット又はDEユニットからのリダイレクトに基づいており、BPパイプラインにおける後からのより高い優先順位予測に基づいており、又は、(予測されたターゲットPC518に価値がない(つまり、選択PC516が選択されることを示す))BIPミス予測を有するBP2サイクルにおいて有効なopが存在する場合に基づく。選択信号522はプロセッサ500の別の部分から得られるが、選択信号522の潜在的なソースへのコネクションラインは、明確にするために図示されていないことに留意されたい。
予測PC524は、想定アドレス(possible addresses)528のセットを生成するL1 BTB526に対して入力(インデックス)として供給される。想定アドレス528のセットは、第3マルチプレクサ530への入力として供給され、選択信号532(以下に説明される分岐成立信号/分岐不成立信号)は、想定アドレス528のセットのうち1つの想定アドレスをターゲットPC512として選択する。また、ターゲットPC512は、第1マルチプレクサ510にフィードバックされ、第1コンパレータ534にフィードフォワードされる。
L1 BTB526は、セットアソシエイティブ構造であり、これによりルックアップが実行される。アドレスのいくつかのビットは、構造を読み取るために用いられ、アドレスのいくつかのハッシュ化されたビットは、アドレスとの一致があるか否かを判断するためにタグと比較するのに用いられる。いくつかの「ウェイ」(いくつかの起こり得る異なる結果)間のタグ比較及び選択には、通常の2サイクルルックアップでは多くの時間を要する。
サイクル毎に、L1 BTB526は、ターゲットPC512を予測するために読み取られる。ターゲットPC512は、次のターゲットPCを予測するために、インデックスを生成してL1 BTBを再び読み取るために次のフローにおいて用いられる。これは、同じキャッシュライン、又は、分岐成立に続く任意の非シーケンシャルキャッシュラインとなるだろう。第1フローからターゲットPCを生成するには時間がかかるので、次のフローのためのL1 BTBの読取りが遅延する。このバブルを潰すために、BTBインデックス予測器(BIP)が、以下に説明されるように用いられる。
典型的な予測は、2つのサイクル毎に1つの分岐成立を予測する。各分岐は、L1 BTB526を通過する。次のサイクル(BP2)では、ターゲットPC512が決定される必要があり、ターゲットPC512は、L1 BTB526の前部にて、マルチプレクサ510,520内へ(BP0まで)2サイクル分フローバックする。要約すれば、想定アドレス528はL1 BTB526から得られ、想定アドレスのセットのうち1つの想定アドレスが(ターゲットPC512として)ピックされ、ピックされたアドレスがフローバックする。
予測PC524のいくつかのビットと、GHistのいくつかのビットと、の組合せは、BTBインデックス予測器(BIP)536に供給される。1つの実装例では、この組合せは、予測PC524ビットとGHistビットとの排他的論理和である。BIP536は、第2マルチプレクサ520にフィードバックされ、第1コンパレータ534にフィードフォワードされる予測ターゲットアドレス(Pred_Target BP_1)518と、第1GHistシフタ540及び第2コンパレータ542に供給される予測グローバル履歴シフト値(Pred GHist shift_BP1)538と、を生成する。
BIP536は、L1 BTB526に並行してアクセスされる。L1 BTB526は、(次のフローのBTB/ハッシュパーセプトロン(HP)インデックスを構築するために用いられる)現在のフローの分岐ターゲットを予測する。一方、BIP536は、インデックスを生成してL1 BTB526及びL1 HP560内へのルックアップを実行するのに用いられる投機的部分ターゲットアドレスを、(VA[19:1]及びGHistの両方の関数として)予測する。BIP536は、直接マッピングされ、仮想アドレスのハッシュ及びグローバル履歴によってインデックスが付される。このことは、L1 BTB526及びL1 HP560を、直接続くサイクルで予測されたインデックスとともに読み取ることを可能にする。BIP予測が正しい場合、分岐成立バブル及び分岐不成立バブルが潰される。
L1 BTB526の実装(サイズ及び配置)と、タイミング制約が加えられたL1 BTB読取りとは、L1 BTB予測を、1つおきのサイクルだけ最後のL1 BTBリダイレクトに基づいて生成して読み取ることを可能にする。このことは、L1 BTBリダイレクト毎に、連続するL1 BTB読取り間のバブルサイクルを生じさせる。1つおきのサイクルで実行する2つのスレッドであって、連続するサイクルでL1 BTBを占有する2つのスレッドが存在する理想的な状況では、この問題は発生しない。アクティブなスレッドが1つしかない場合、又は、連続して同じスレッド割当てがあった場合には、1サイクルおきにバブルが存在し、このことが性能に損害を与える。
1つの実装例では、BIP536は、直接マッピングされた256エントリ構造であり、エントリは競争的に共有される。BIP536はインデックス入力が提示され、値はBIPから得られ、この値は正しいと仮定される。この時点では、追加の比較又は制限が必要とされない。次のサイクルでは、BIP536の結果が用いられ、次いで、BIP536の結果がその状況で使用するための正しい結果であったか否かが分かる(BIP536の結果は、それが正しいか否かが分かる前に用いられる)。プロセッサの物理的なレイアウトの1つの実装例では、BIP536は、L1 BTB526及びL1 HP560の近くに位置する。
図6は、BIP536の単一のエントリ600の内容を示す図である。エントリ600は、投機的インデックス602と、グローバル履歴604の最下位ビット(LSB)と、グローバル履歴シフト値606と、ウェイ予測608と、を含む。
投機的インデックス602の長さは19ビットであってもよく、投機的インデックス602は下位VAビット19:1を含む。BIP536、L1 BTB526及びL1 HP560は、次のサイクルフローのための読取りインデックスを生成するために、これらのビットを必要とする。
グローバル履歴604のLSBの長さは2ビットであってもよく、LSBは、読取りインデックスを生成するためにBIP536、L1 BTB526及びL1 HP560によって必要とされる、次のサイクルの投機的グローバル履歴値を予測するのに用いられる。
グローバル履歴シフト値606の長さは2ビットであってもよく、グローバル履歴シフト値606は、グローバル履歴テーブルの構築に役立つとともに、グローバル履歴のLSBを0.1ビット分シフトするか2ビット分シフトするかの何れかを示す。グローバル履歴シフト値606がゼロより大きい場合には、シフト量及びシフトインされる値が供給される。各条件分岐は、分岐の成立又は不成立に応じてグローバル履歴テーブル内に0又は1をシフトインする。例えば、1つの分岐不成立が発生した場合には、0がシフトインされる。1つの分岐成立が発生した場合には、1がシフトインされる等である。
ウェイ予測608の長さは4ビットであってもよく、ウェイ予測608は、次のフローのために必要とされる情報(VA、GHist、ウェイ)を記憶する可能性が最も高いL1 BTBウェイ(ワンホット)を予測するために用いられる。ウェイ予測608の4つ全てのビットが設定されると、BTBミスを確認するためにL1 BTB及びL2 BTBの全てのウェイが読み取られる。
図5を参照し直すと、BIPインデックス予測を使用して、サイクル毎に、1つの分岐成立が予測される。BIP536は、インデックスを取得し、L1 BTB526がルックアップされるのと同様にルックアップされる。ルックアップの結果(予測ターゲットPC518)は、直ちに、(マルチプレクサ520を介して)入力に多重化して戻され、次のサイクルでL1 BTB526の別のルックアップを可能にする。予測ターゲットPC518は、L1 BTB526から得られるターゲットPC512ほど正確ではないが、予測ターゲットPC518が正しい場合には、サイクル毎に1つの予測を行うことができる。次のサイクルでは、予測毎に、BIP536から得られた「迅速な」予測が、この迅速な予測が正しいか否かを判断するためにチェックされる。迅速な予測が正しい場合には、迅速な予測が捨てられる必要がない。迅速な予測が正しくない場合には、(マルチプレクサ520から迅速な予測を選択しないことによって)迅速な予測を捨て、2サイクル毎に1つの分岐を予測するという従前の挙動に戻る。
(例えば、分岐のないコードのセクションでの)連続予測に伴い存在する潜在的な「問題」であって、処理が依然としてBIPの試行する予測を条件とするという潜在的な「問題」は、分岐を予測する必要がなくても2つのサイクルを得ることによって処理を減速させることであろう。しかし、全体的には、最終的な性能の向上がある。
L1 BTB526は、フェッチされているアドレスのハッシュ化されたバージョンのビットでインデックスが付される。L1 HP560は、フェッチされているアドレスと、予測された最後のいくつかの分岐の履歴と、の組合せでハッシュされる。BIP536がアドレスビット及び履歴ビットの組合せでハッシュ化されるという点において、BIP536は、むしろハッシュパーセプトロンに近い。使用される履歴ビットの最適な数は少なく、例えば、上述したように、2つの履歴ビットが1つの実装例で使用される。履歴ビットをハッシュ化して結果とすることは、単にアドレスビットを使用することよりも優れた予測を得るのに役立つ。
BIP536から得られる予測ターゲットPC518は、(単なるアドレスの代わりに)次のアクセスのためにBIP536及びL1 BTB526に即時にフィードバックされるインデックスである。予測されたインデックスは、BIP536から読み出され、想定アドレス528が、L1 BTB526から読み出される。両情報とも次のサイクルに送られ、ターゲットアドレス(ターゲットPC512)及び結果として生じるインデックスが、予測されたインデックス(予測ターゲットPC518)に一致するか否かを判断するために、(第1のコンパレータ534で)比較が行われる。
BIP536の一般的なトレーニングは、予測パイプラインで行われる。予測ターゲットPC518が得られると、それからインデックスが計算され、予測ターゲットPC518が当該インデックスでBIP536にライトバックされる。実行フローが(例えば同じ最近の履歴に基づいて)コード内の同じスポットに戻る場合には、BIP536から読み出されることは、(コードがこのポイントにあった前回の)その瞬間における知識を反映する。分岐がBIP536によって予測されるときから、分岐がトレーニングのためにBIPに書き込まれるときへは、かなり迅速な切替えがある。これは、このような投機的な構造であり、投機的な構造が正確であったのか否かが直ちに確認できるため、迅速なトレーニングの否定的な側面は大きくない。
GHist504及びターゲットシフトGHist(ターゲットGHis_BP2)544は、第4マルチプレクサ546に供給され、選択信号548は、GHist504及びターゲットシフトGHist544の何れかをグローバル履歴予測(GHist_BP0)550として選択するために用いられる。選択信号548は、EXユニット若しくはDEユニットからのリダイレクト、又は、BPパイプラインでの後からのより高い優先順位予測に基づいている。選択信号548がプロセッサ500の別の部分から引き出されるが、選択信号548の潜在的なソースへのコネクションラインは、明確にするために図示されていないことに留意されたい。
第1GHistシフタ540は、グローバル履歴をシフトするために予測GHistシフト538を適用して、予測ターゲットグローバル履歴(Pred Target GHist_BP1)552を生成する。GHist予測550及び予測ターゲットGHist552は、第5マルチプレクサ554に供給され、選択信号556は、GHist予測550及び予測ターゲットGHist552の何れかを予測グローバル履歴(Pred GHist_BP0)558として選択するために用いられる。選択信号556は、EXユニット若しくはDEユニットからのリダイレクト、BPパイプラインの後からのより高い優先順位予測、又は、BIP予測ミスを有するBP2サイクルでの有効なopがある場合に基づいている。選択信号556は、プロセッサ500の別の部分から引き出されるが、選択信号556の潜在的なソースへのコネクションラインは、明確にするために図示されないことに留意されたい。
予測GHist558は、分岐成立/分岐不成立信号532を生成するL1ハッシュパーセプトロン(HP)560に供給される。分岐成立/分岐不成立信号532は、第3マルチプレクサ530に対して分岐成立/分岐不成立信号532を転送する分岐成立/分岐不成立GHistシフタ562であって、第2コンパレータ542及び第2GHistシフタ566に対してグローバル履歴シフト値(GHist shift_BP2)564を生成する分岐成立/分岐不成立GHistシフタ562に提供される。第2GHistシフタ566は、ターゲットGHist544を生成するためにGHistシフト値564を使用し、ターゲットGHist544を第4マルチプレクサ546に転送する。
第1コンパレータ534は、ターゲットPC512及び予測ターゲットPC518を比較して、ターゲットPC512及び予測ターゲットPC518が一致するか否かを判断し、ANDゲート570に対して一致値568を出力する。第2コンパレータ542は、予測GHistシフト値538及びGHistシフト値564を比較して、予測GHistシフト値538及びGHistシフト値564が一致するか否かを判断し、ANDゲート570に対して一致信号572を出力する。ANDゲート570は、BIP一致信号574を出力する。
両コンパレータ534,542が一致を示す場合には、BIP一致信号574は正の一致(BIP536が正しい予測を行ったこと)を示しており、パイプラインから何もフラッシュされる必要がない。両コンパレータ534,542が一致を示さない場合には、BIP一致信号574はBIP予測が正しくなかったことを示しており、パイプラインからフローを流し出し、BP2サイクルからBP0マルチプレクサ510にターゲットアドレス512をフィードバックする。
これは、スループットの大幅な改善である。BIP536を使用しないと、パイプラインにバブルが生じる。分岐予測器のフロントエンドがマシンのスループットを制限している場合には、サイクル毎にバブルが存在するであろう。BIP536を使用するとホールが塞がり、これによって命令の連続的な流れが存在し、フロントエンドバブルがより少なくなる。マシンは、マシンを最大限に保つように役立つことによって、サイクル毎により多くの命令を処理しようと試みるので、マシンがより幅広くなるにつれ、BIPを使用することの価値が高まる。
図7は、BP一致信号を生成するためにBIPを使用する方法700のフローチャートである。BTB、BIP及びHPにおいてルックアップを実行するのに用いられるインデックスが生成される(ステップ702)。続くステップ(704,710,712)を並列で実行できるが、説明のために別々に説明されていることに留意されたい。
インデックスは、想定アドレスのセットを生成するために、BTBにおいてルックアップを実行するのに用いられる(ステップ704)。ターゲットPCは、想定アドレスから選択される(ステップ706)。ターゲットPCは、次のフローで用いられるインデックスを生成するために用いられ(ステップ708)、方法700の当該部分は、新たなフロー用のインデックスを生成するために、ステップ702に戻る。
また、インデックスは、予測ターゲットPC及びグローバル履歴(GHist)シフトを生成するためにBIPでルックアップを実行するのに用いられる(ステップ710)。インデックス及びGHistは、HPでルックアップを実行して、分岐成立/不成立信号を生成するために用いられる(ステップ712)。GHistは、分岐成立/不成立信号に基づいて更新され(ステップ714)、更新されたGHistは、HPの以降のルックアップにおいて用いられる。また、分岐成立/不成立信号は、GHistシフトを生成するのにも用いられる(ステップ716)。
BTBからのターゲットPC及びBIPからの予測ターゲットPCは、第1一致信号を生成するために比較される(ステップ718)。BIPからのGHistシフト及びHPからのGHistシフトは、第2一致信号を生成するために比較される(ステップ720)。第1一致信号及び第2一致信号は、BP一致信号を生成するために互いに論理積がとられ(ステップ722)、方法が終了する(ステップ724)。
(L1 BTBウェイ予測器)
また、BIP536は、インデックス予測に類似した方法で、上述したようにL1 BTBウェイを予測するのにも用いられる。BIP536(ウェイ予測608)の出力部分は、ヒット結果についてどの「ウェイ」を見るのかを知らせる。予測されたL1 BTBウェイ以外の全てのウェイは、L1 BTBに対する読取りパワーを節約するためにオフにされる。L2 BTB(図5には図示されていない)ウェイも、L2 BTBパワーを節約するためにオフにされる。
BIPウェイ予測608が「1111」を予測する場合には、L1 BTBウェイの全てを読み取ることに加えて、L2 BTBが強化されて読み取られる。これにより、BTBミスケースも予測できるようになる。
L1 BTBヒットがなく、「1111」組合せが予測されず、このため全ての想定されるBTB位置で検索される場合には、BTBミスが存在することを確実にするために、BIPリフローが実行される。ターゲットPCにリダイレクトする代わりに、このケースは、それ自体を取り消し、L1リダイレクトをそれ自体に戻すが、L1 BTB全体及びL2 BTB全体を読み取らせる強制的な読取り条件を伴う。
BIPのこの部分のトレーニングは、より複雑である。現在のフローからのインデックスが取得され、次のフローに送られる。BTBは、インデックスとともに読み取られ、次のフローがBTBでどのウェイにヒットするのかが判断され、そのウェイが読み出されるウェイである。
パイプラインの最後で、この予測に使用されるインデックスと、次の予測のターゲット又はインデックスとが収集される。次の予測のインデックスはBIPに入れられ、次のフローのBTBヒット情報が(それがどのウェイでヒットするのかを確かめるために)収集され、この情報は、この予測とともにBIPに書き込まれる。
第1の例では、コードがループに存在し、所定の分岐がBTBのウェイ3に存在する。BIPは、そのインデックス及び及びウェイ3を指し示すようにトレーニングされる。次いで、ループを通る反復毎に、その結果を探すためにBTBの4つ全てのウェイを読み取る代わりに、ウェイ3だけが読み取られる必要がある。予測が正しい場合には、予測は、ヒットがあることを予測するのでパワーを節約し、ヒットがあるウェイを予測し、予測されていないウェイをパワーオフできる。L1 BTBにヒットがあることによってL2 BTBが必要とされないことが分かっているため、L2 BTB構造を完全にオフにすることができる。
第2の例では、BTBのミスが予想される場合(アドレスがBTBに記憶されていない、連続フェッチ等)に、BIPは、4つのウェイ全てを読み取るようにトレーニングされる。4つのウェイ全てがBTBから読み出される場合には、ヒットが存在しなかったことが確認でき、このことは、BIPウェイ予測が役立ったことを示している。
そのBIPが「ウェイ3」を読み取ることを示し、ミスがある(分岐が他のウェイのうち1つのウェイにあった可能性があることを意味する)場合には、そのフローは、全てのウェイでその分岐を探すために再度行われる必要があるため、不都合な点がある。通常、BIP予測が正しくないウェイを有する場合、BIP予測は、正しくないインデックスを有し、これにより、フローは、BIPインデックス一致機構によって時間の大半がフラッシュされたであろう。
BIPウェイ予測器は、本明細書で説明されるように、基本的にキャッシュウェイ予測器とは異なる。BIPの予測は、むしろインデックス予測器の継続部に近い。つまり、インデックス予測器は、Mビットのインデックスを提供し、ウェイ予測器は、これを特定のウェイで増補する。BIPの1つのルックアップは、ハードウェアの次のBTBルックアップを指示する。したがって、BIPウェイ予測を用いる1つのフローは、読み取る1つ以上のBTBウェイを指す1つのBIPエントリを読み取るであろう。他方、キャッシュウェイ予測器は、データ及びタグと連続してルックアップされるエントリを、キャッシュのエントリ毎に有する。Nウェイ設定関連キャッシュの場合、このルックアップの結果が、キャッシュ自体にN個未満のエントリがあることを示すのを目的として、N個のエントリがウェイ予測器でルックアップされる。
(ITパイプ及びICパイプの分離)
図8は、プロセッサ800の一部での命令タグ(IT)パイプライン及び命令キャッシュ(IC)パイプラインのブロック図である。図8は、ITパイプライン及びICパイプラインを実装するプロセッサ800の部分のみを示す。明確にするために、図8には示されていないプロセッサ800の他のコンポーネントが存在する。図8の下部に示した符号IT0,IT1,IT2,IC0,IC1は、ITパイプライン及びICパイプラインの何れのサイクルで異なるコンポーネントが動作するのかを示している。
予測PC802は、L1 ITLB804と、uTagルックアップ装置806と、に供給される。L1 ITLBにヒットがある場合に、L1 ITLBは、物理アドレス(PA)808を出力する。PA808は、第1コンパレータ810と、選択PA装置812と、タグルックアップ装置814と、第2コンパレータ816と、に供給される。
uTagルックアップ装置806は、第1コンパレータ810に供給されるuTag818を生成するために、予測PC802を使用する。uTagルックアップは、IT0サイクルで開始され、IT1サイクルで終了する。第1コンパレータ810は、PA808及びuTag818を比較して一致信号820を生成する。一致信号820は、タグルックアップ装置814と、選択向き装置822と、に供給される。
選択ウェイ装置822は、命令キャッシュ826でウェイ824を選択するために、予測PC802及び一致信号820を使用する。第1コンパレータ810からのヒット情報は、ウェイ824が、役に立つデータを有する可能性のあるIC826のウェイであることを示し、ヒットは、そのキャッシュエントリのタグビットの部分集合に基づいている。選択PA装置812は、選択PA828を生成するために、予測PC802及びPA808を使用する。命令キャッシュ826は、処理用の命令830を選択するために、ウェイ824及び選択PA828を使用する。
タグルックアップ装置814は、第2コンパレータ816に供給されるタグ832を選択するために、PA808及び一致信号820を使用する。第2コンパレータ816は、ヒット信号834を生成するために、PA808及びタグ832を使用する。
IT2サイクルでは、タグルックアップが終了する。部分一致がある全てについて、タグの残りは、完全な一致があることを確認するために読み出される。その結果、キャッシュ内のこの位置が、探されているデータを有する位置であることが確かに分かるであろう。通常、部分ヒットは、キャッシュからデータを読み取ることを制御するために使用可能な十分な情報を有する。部分タグが複数のヒットを生じさせる場合には、ウェイ毎に読み出されるタグの残りは、次のサイクルでの完全な限定されたヒット信号を得るために完全アドレスと比較できる(これが、ITパイプライン及びICパイプラインが結合された場合に行われる必要のあることである)。この後で、データアレイ(命令キャッシュ)は、正しいエントリを読み取るために、再度読み取られることができる。
ITパイプラインの最後にて、ヒットがある場合には、その情報(アドレス、及び、アドレスが見つかったウェイ)をPRQに記憶する。後に、そのデータをキャッシュから読み出す必要があり、完全なタグルックアップが実行される必要がない。インデックス及び以前にヒットオンしたウェイだけがPRQから読み出される必要があり、その情報は、データアレイにアクセスするのに使用できる。したがって、タグパイプライン及びタグアクセスは、データアレイがアクセスされるときから分割され得る。
キャッシュミス、又は、キャッシュラインの半分以上を得るフェッチ(つまり、長いフェッチ)では、タグパイプラインは、各アドレス(予測PC802)がBPパイプラインから現れるとすぐに実行する。次いで、ICパイプラインは、(1つの代わりに)フェッチ毎に2つの選択を行わなくてはならず、このため、ICパイプラインが独自に選択できる場合であっても、ICパイプラインはITパイプラインに後れを取る。
(ITパイプライン及びICパイプラインに続く)DEパイプラインが一杯になっても、タグルックアップは、DEパイプラインにデータを送信するためにデータアレイを強化することなく、(ヒット又はミスを判断するために)依然として実行できる。
ITパイプラインがICパイプラインよりも数フェッチ前方にある場合には、利点がある。現在キャッシュミスがある場合には、このことはITパイプラインで学習される。要求がL2キャッシュに送信されることで、ICパイプラインが追いつき、そのデータの使用を希望する場合には、当該データは、L2キャッシュから戻る(ITパイプラインがフローすることを望む位置と合うことがある)ことが考えられる。言い換えると、より多くのプリフェッチ挙動が取得されてもよい。
ITパイプライン及びICパイプラインを分離する影響は、マシンの他の部分で行われることに類似している。すなわち、パイプラインを分離することは、バブルを隠す、又は、バブルの影響を削減する。(それぞれ独立した理由から遅れることのある)2つの異なるパイプラインが存在するため、バブルの影響が蓄積するのは望ましくない。分離することなく、一方のパイプラインにバブルがある場合には、バブルは、当該パイプラインを通って、他方の従属するパイプラインまで進む。
ICパイプラインが、ITパイプラインとともに直ぐに選択される場合には、そうでない場合と比較して、データキャッシュのより多くのウェイを強化する必要があり、このことは常に行われなければならないであろう。タグパイプラインがデータパイプラインを追い越すと直ぐに、データパイプラインは、データパイプラインがデータを読み出す必要のある命令キャッシュデータアレイの一部をより正確に強化できる。
分離することの副作用は、インデックス、及び、ヒットオンがあった可能性のあるウェイを記憶するためにPRQを使用することである。キャッシュからラインを削除する動作がある場合、PRQでのヒット表示が「ヒットしない」に変更される必要がある。このようにPRQを使用することは、このレコードが維持される必要があるため、(ITパイプラインからの情報がPRQに記憶される)何等かのレコード管理オーバヘッドを含むであろう。タグエントリが無効にされる場合には、PRQのエントリも無効にされなければならないであろう。
多くの変形が本明細書の開示に基づいて可能であることが理解されるべきである。特徴及び要素を特定の組合せで上述したが、各特徴又は要素は、他の特徴及び要素なしで単独で使用されてもよいし、他の特徴及び要素を有する、若しくは、他の特徴及び要素のない多様な組合せで使用されてもよい。
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実装されてよい。適切なプロセッサは、一例として、汎用プロセッサ、特殊プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他の種類の集積回路(IC)、及び/又は、状態機械を含む。係るプロセッサは、処理されたハードウェア記述言語(HDL)命令の結果、及び、ネットリスト(コンピュータ可読媒体上に記憶可能な当該命令)を含む他の中間データを使用し、製造プロセスを構成することによって製造されてよい。係る処理の結果は、実施形態の態様を実装するプロセッサを製造するために、半導体製造プロセスにおいて使用されるマスクワークであってよい。
本明細書で提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的コンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実装されてよい。非一時的コンピュータ可読記憶媒体の例は、読出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体記憶装置、内部ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD−ROMディスク及びデジタル多用途ディスク等の光媒体を含む。
(追加の実施形態)
1.命令タグ(IT)パイプラインと、ITパイプラインと通信する命令キャッシュ(IC)パイプラインと、を含むプロセッサであって、ITパイプライン及びICパイプラインが互いに独立して動作できるように、ICパイプラインがITパイプラインから分離している、プロセッサ。
2.ITパイプラインは、予測されたアドレスを受け取り、物理アドレスを出力するように構成されたレベル1命令トランスレーションルックアサイドバッファ(ITLB)と、予測されたアドレスを受け取り、マイクロタグを出力するように構成されたマイクロタグルックアップ装置と、を含む、実施形態1のプロセッサ。
3.ITパイプラインは、ITLBからの物理アドレスと、マイクロタグルックアップ装置からのマイクロタグと、の比較に基づいて一致信号を生成するように構成された第1コンパレータをさらに含む、実施形態2のプロセッサ。
4.ICパイプラインは、予測されたアドレスと、第1コンパレータからの一致信号と、に基づいて命令キャッシュにおいてウェイを選択するように構成された選択ウェイ装置を含む、実施形態3のプロセッサ。
5.ICパイプラインは、予測されたアドレスと、ITLBからの物理アドレスと、に基づいて物理アドレスを選択するように構成された選択物理アドレス装置をさらに含む、実施形態4のプロセッサ。
6.命令キャッシュは、選択物理アドレス装置からの選択物理アドレスと、選択ウェイ装置からの選択ウェイと、に基づいて命令を選択するように構成されている、実施形態5のプロセッサ。
7.ITパイプラインは、予測されたアドレスと、第1コンパレータからの一致信号と、に基づいてタグを選択するように構成されたタグルックアップ装置をさらに含む、実施形態3のプロセッサ。
8.ITパイプラインは、ITLBからの物理アドレスと、タグルックアップ装置からの選択タグと、に基づいてヒット信号を生成するように構成された第2コンパレータをさらに含む、実施形態7のプロセッサ。

Claims (24)

  1. フロントエンドユニットを備えるプロセッサであって、
    前記フロントエンドユニットは、
    ターゲットアドレスを予測するように構成されたレベル1分岐ターゲットバッファ(BTB)と、
    プログラムカウンタとグローバル履歴とに基づいて予測を生成するように構成されたBTBインデックス予測器(BIP)であって、前記予測が、投機的部分ターゲットアドレスと、グローバル履歴値と、グローバル履歴シフト値と、ウェイ予測と、を含む、BTBインデックス予測器(BIP)と、
    分岐命令が成立するか否かを予測するように構成されたレベル1ハッシュパーセプトロン(HP)と、を含む、
    プロセッサ。
  2. 前記BIPは、前記予測を生成するために前記プログラムカウンタ及び前記グローバル履歴を組み合わせるようにさらに構成されている、請求項1のプロセッサ。
  3. 前記BIPは、前記プログラムカウンタ及び前記グローバル履歴を組み合わせるために排他的論理和演算を実行するようにさらに構成されている、請求項2のプロセッサ。
  4. 前記BIPは、前記プログラムカウンタ及び前記グローバル履歴を組み合わせるためにハッシュ関数を用いるようにさらに構成されている、請求項2のプロセッサ。
  5. 前記BIPからの前記投機的部分ターゲットアドレスは、前記BTBのインデックスを予測するために前記BTBによって、及び、前記HPのインデックスを予測するために前記HPによって、前記予測の直後のサイクルで用いられる、請求項1のプロセッサ。
  6. 前記フロントエンドユニットは、
    入力プログラムカウンタからの予測されたプログラムカウンタと、前記BIPからの前記投機的部分ターゲットアドレスと、前記BTBからの前記ターゲットアドレスと、を選択するように構成された第1選択回路をさらに含む、請求項1のプロセッサ。
  7. 前記フロントエンドユニットは、
    入力グローバル履歴からの予測されたグローバル履歴と、前記BIPからの前記グローバル履歴値と、ターゲットグローバル履歴と、を選択するように構成された第2選択回路をさらに含む、請求項1のプロセッサ。
  8. 前記フロントエンドユニットは、
    前記BIPからの前記投機的部分ターゲットアドレスと、前記BTBからの前記ターゲットアドレスとを比較するように構成された第1コンパレータをさらに含む、請求項1のプロセッサ。
  9. 前記フロントエンドユニットは、
    前記HPからの分岐成立/分岐不成立の予測に基づいてグローバル履歴シフト値を生成するように構成されたグローバル履歴シフタと、
    前記BIPからの前記グローバル履歴シフト値と、前記グローバル履歴シフタからの前記グローバル履歴シフト値とを比較するように構成された第2コンパレータと、をさらに含む、請求項8のプロセッサ。
  10. 前記フロントエンドユニットは、
    前記第1コンパレータの出力と、前記第2コンパレータの出力とに基づいて一致信号を生成するように構成された論理ゲートであって、前記一致信号が、前記BIPが正しい予測を行ったか否かを示す、論理ゲートをさらに含む、請求項9のプロセッサ。
  11. 前記BTBは、前記BIPによって予測された前記ウェイ以外の全てのウェイをオフにするようにさらに構成されている、請求項1のプロセッサ。
  12. 前記BTBは、直前のサイクルから前記BIPによって予測された前記ウェイに基づいて、ウェイを読み取るようにさらに構成されている、請求項1のプロセッサ。
  13. 命令タグ(IT)パイプラインと、
    前記ITパイプラインと通信する命令キャッシュ(IC)パイプラインと、を含み、
    前記ITパイプライン及び前記ICパイプラインが互いに独立して動作できるように、前記ICパイプラインが前記ITパイプラインから分離している、請求項1のプロセッサ。
  14. プロセッサにおいて分岐予測を実行するための方法であって、
    前記プロセッサは、レベル1分岐ターゲットバッファ(BTB)と、BTBインデックス予測器(BIP)と、を含み、
    前記BTB及び前記BIPへのルックアップのために用いられるインデックスを生成することと、
    ターゲットアドレスを予測するために前記インデックスを用いて前記BTBにおいてルックアップを実行することと、
    投機的部分ターゲットアドレスを予測するために前記インデックスを用いて前記BIPにおいてルックアップを実行することと、
    次のフローのための前記インデックスを生成するために、前記BTBからの前記ターゲットアドレスと、前記BIPからの前記投機的部分ターゲットアドレスと、を用いることと、を含む、
    方法。
  15. 前記BTBにおいてルックアップを実行することは、
    想定アドレスのセットを生成するために前記インデックスを用いることと、
    想定アドレスの前記セットから前記ターゲットアドレスを選択することと、を含む、請求項14の方法。
  16. 前記プロセッサは、レベル1ハッシュパーセプトロン(HP)をさらに含み、
    分岐が成立するか否かを予測するために前記インデックスを用いて前記HPにおいてルックアップを実行することと、
    分岐成立予測又は分岐不成立予測に基づいてグローバル履歴を更新することと、をさらに含む、請求項14の方法。
  17. 前記インデックスを用いて前記BIPにおいてルックアップを実行することによって、予測されたグローバル履歴シフトを生成することと、
    前記分岐成立予測又は前記分岐不成立予測を用いて前記HPにおいてグローバル履歴シフトを生成することと、
    第1一致信号を生成するために、前記BIPからの前記予測されたグローバル履歴シフトと、前記HPからの前記グローバル履歴シフトとを比較することと、をさらに含む、請求項16の方法。
  18. 第2一致信号を生成するために、前記BTBからの前記ターゲットアドレスと、前記BIPからの前記投機的部分ターゲットアドレスとを比較することと、をさらに含む、請求項17の方法。
  19. 前記BIPが正しい予測を行ったか否かを判断するために、前記第1一致信号と前記第2一致信号とを比較すること、をさらに含む、請求項18の方法。
  20. 前記BTBによって用いられるウェイを予測することであって、前記予測が、前記インデックスを用いて前記BIPにおいてルックアップすることによって実行されること、をさらに含む、請求項14の方法。
  21. 前記BIPによって予測された前記ウェイ以外の前記BTBの全てのウェイをオフにすること、をさらに含む、請求項20の方法。
  22. 直前のサイクルから前記BIPによって予測された前記ウェイに基づいて前記BTBにおいてウェイを読み取ること、をさらに含む、請求項20の方法。
  23. プロセッサにおいて分岐予測を実行するために汎用コンピュータによる実行のための命令のセットを記憶するコンピュータ可読記憶媒体であって、前記プロセッサが、レベル1分岐ターゲットバッファ(BTB)と、BTBインデックス予測器(BIP)と、を含み、
    前記命令のセットが、
    前記BTB及び前記BIPへのルックアップのために用いられるインデックスを生成するための生成コードセグメントと、
    ターゲットアドレスを予測するために前記インデックスを用いて前記BTBにおいてルックアップを実行するための第1実行コードセグメントと、
    投機的部分ターゲットアドレスを予測するために前記インデックスを用いて前記BIPにおいてルックアップを実行するための第2実行コードセグメントと、
    次のフローのための前記インデックスを生成するために、前記BTBからの前記ターゲットアドレスと、前記BIPからの前記投機的部分ターゲットアドレスと、を用いるための使用コードセグメントと、を備える、
    コンピュータ可読記憶媒体。
  24. 前記命令は、装置の製造に用いられるハードウェア記述言語(HDL)命令である、請求項23のコンピュータ可読記憶媒体。
JP2016525857A 2013-10-25 2014-10-24 分岐予測ユニット及びレベル1命令キャッシュにおける帯域幅の増加 Active JP6523274B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361895624P 2013-10-25 2013-10-25
US61/895,624 2013-10-25
PCT/US2014/062107 WO2015061648A1 (en) 2013-10-25 2014-10-24 Bandwidth increase in branch prediction unit and level 1 instruction cache

Publications (2)

Publication Number Publication Date
JP2016534429A true JP2016534429A (ja) 2016-11-04
JP6523274B2 JP6523274B2 (ja) 2019-05-29

Family

ID=52993597

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016525857A Active JP6523274B2 (ja) 2013-10-25 2014-10-24 分岐予測ユニット及びレベル1命令キャッシュにおける帯域幅の増加

Country Status (6)

Country Link
US (1) US10127044B2 (ja)
EP (1) EP3060983B1 (ja)
JP (1) JP6523274B2 (ja)
KR (1) KR102077753B1 (ja)
CN (1) CN106030516B (ja)
WO (1) WO2015061648A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019537163A (ja) * 2016-12-09 2019-12-19 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated オペレーションキャッシュ

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160239309A1 (en) * 2015-02-12 2016-08-18 International Business Machines Corporation Branch target buffer column predictor
KR102635965B1 (ko) * 2015-06-26 2024-02-13 삼성전자주식회사 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법
US10402200B2 (en) * 2015-06-26 2019-09-03 Samsung Electronics Co., Ltd. High performance zero bubble conditional branch prediction using micro branch target buffer
US10157137B1 (en) 2015-09-22 2018-12-18 Apple Inc. Cache way prediction
US20170153894A1 (en) * 2015-11-27 2017-06-01 Arm Limited Apparatus and method for branch prediction
US9442726B1 (en) 2015-12-15 2016-09-13 International Business Machines Corporation Perceptron branch predictor with virtualized weights
US10223123B1 (en) 2016-04-20 2019-03-05 Apple Inc. Methods for partially saving a branch predictor state
US10282296B2 (en) 2016-12-12 2019-05-07 Intel Corporation Zeroing a cache line
US10394559B2 (en) 2016-12-13 2019-08-27 International Business Machines Corporation Branch predictor search qualification using stream length prediction
US11281586B2 (en) * 2017-05-09 2022-03-22 Andes Technology Corporation Processor and way prediction method thereof
US10540287B2 (en) * 2017-05-12 2020-01-21 Samsung Electronics Co., Ltd Spatial memory streaming confidence mechanism
US10599437B2 (en) 2018-01-19 2020-03-24 Marvell World Trade Ltd. Managing obscured branch prediction information
US10747541B2 (en) 2018-01-19 2020-08-18 Marvell Asia Pte, Ltd. Managing predictor selection for branch prediction
US10929136B2 (en) * 2018-04-11 2021-02-23 Futurewei Technologies, Inc. Accurate early branch prediction using multiple predictors having different accuracy and latency in high-performance microprocessors
US10776119B2 (en) * 2018-06-15 2020-09-15 Marvell Asia Pte, Ltd. Combined conditional branch and indirect branch target predictor
US11301253B2 (en) * 2018-08-10 2022-04-12 Arm Limited Branch prediction structure indexed based on return address popped from a call-return stack
US11029959B2 (en) * 2018-09-04 2021-06-08 Arm Limited Branch target look up suppression
CN111507463B (zh) * 2019-01-30 2023-06-20 芯立嘉集成电路(杭州)有限公司 神经形态的符码处理器及操作所述符码处理器的方法
CN110825442B (zh) * 2019-04-30 2021-08-06 成都海光微电子技术有限公司 一种指令预取方法及处理器
US11294681B2 (en) 2019-05-31 2022-04-05 Texas Instruments Incorporated Processing device with a microbranch target buffer for branch prediction using loop iteration count
CN114003292B (zh) * 2021-12-30 2022-03-15 中科亿海微电子科技(苏州)有限公司 一种分支预测方法、装置及处理器核

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040225872A1 (en) * 2002-06-04 2004-11-11 International Business Machines Corporation Hybrid branch prediction using a global selection counter and a prediction method comparison table
JP2012173967A (ja) * 2011-02-21 2012-09-10 Nec Corp 分岐予測装置及び分岐予測方式

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100310581B1 (ko) * 1993-05-14 2001-12-17 피터 엔. 데트킨 분기목표버퍼의추측기록메카니즘
US5604909A (en) 1993-12-15 1997-02-18 Silicon Graphics Computer Systems, Inc. Apparatus for processing instructions in a computing system
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
JP3599409B2 (ja) * 1994-06-14 2004-12-08 株式会社ルネサステクノロジ 分岐予測装置
US7000096B1 (en) * 2000-08-03 2006-02-14 International Business Machines Corporation Branch prediction circuits and methods and systems using the same
US7165169B2 (en) * 2001-05-04 2007-01-16 Ip-First, Llc Speculative branch target address cache with selective override by secondary predictor based on branch instruction type
US7203825B2 (en) * 2001-10-03 2007-04-10 Intel Corporation Sharing information to reduce redundancy in hybrid branch prediction
US7082520B2 (en) * 2002-05-09 2006-07-25 International Business Machines Corporation Branch prediction utilizing both a branch target buffer and a multiple target table
US20050216714A1 (en) * 2004-03-25 2005-09-29 Intel Corporation Method and apparatus for predicting confidence and value
US7590830B2 (en) 2004-05-28 2009-09-15 Sun Microsystems, Inc. Method and structure for concurrent branch prediction in a processor
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US7328332B2 (en) * 2004-08-30 2008-02-05 Texas Instruments Incorporated Branch prediction and other processor improvements using FIFO for bypassing certain processor pipeline stages
KR100630702B1 (ko) 2004-10-05 2006-10-02 삼성전자주식회사 명령어 캐쉬와 명령어 변환 참조 버퍼의 제어기, 및 그제어방법
US7278012B2 (en) * 2005-06-02 2007-10-02 Qualcomm Incorporated Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
US7644258B2 (en) * 2005-08-29 2010-01-05 Searete, Llc Hybrid branch predictor using component predictors each having confidence and override signals
US20070083735A1 (en) * 2005-08-29 2007-04-12 Glew Andrew F Hierarchical processor
US20110078425A1 (en) * 2009-09-25 2011-03-31 Shah Manish K Branch prediction mechanism for predicting indirect branch targets
US9405544B2 (en) * 2013-05-14 2016-08-02 Apple Inc. Next fetch predictor return address stack

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040225872A1 (en) * 2002-06-04 2004-11-11 International Business Machines Corporation Hybrid branch prediction using a global selection counter and a prediction method comparison table
JP2012173967A (ja) * 2011-02-21 2012-09-10 Nec Corp 分岐予測装置及び分岐予測方式

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019537163A (ja) * 2016-12-09 2019-12-19 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated オペレーションキャッシュ
JP7097361B2 (ja) 2016-12-09 2022-07-07 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド オペレーションキャッシュ

Also Published As

Publication number Publication date
CN106030516B (zh) 2019-09-03
EP3060983A1 (en) 2016-08-31
US20150121050A1 (en) 2015-04-30
EP3060983B1 (en) 2020-01-08
KR102077753B1 (ko) 2020-04-07
EP3060983A4 (en) 2017-05-17
KR20160078380A (ko) 2016-07-04
CN106030516A (zh) 2016-10-12
JP6523274B2 (ja) 2019-05-29
US10127044B2 (en) 2018-11-13
WO2015061648A1 (en) 2015-04-30

Similar Documents

Publication Publication Date Title
JP6523274B2 (ja) 分岐予測ユニット及びレベル1命令キャッシュにおける帯域幅の増加
US10248570B2 (en) Methods, systems and apparatus for predicting the way of a set associative cache
JP6744423B2 (ja) プロセッサベースシステム内のロード経路履歴に基づくアドレス予測テーブルを使用したロードアドレス予測の実現
US9367471B2 (en) Fetch width predictor
US10402200B2 (en) High performance zero bubble conditional branch prediction using micro branch target buffer
US11687343B2 (en) Data processing apparatus and method for providing candidate prediction entries
CN101176060A (zh) 每索引存储两个或更多分支目标地址的分支目标地址高速缓冲存储器
CN109643237B (zh) 分支目标缓冲器压缩
US20180349144A1 (en) Method and apparatus for branch prediction utilizing primary and secondary branch predictors
CN112579175B (zh) 分支预测方法、分支预测装置和处理器核
US11579884B2 (en) Instruction address translation and caching for primary and alternate branch prediction paths
JP2019537163A (ja) オペレーションキャッシュ
JP2016505972A (ja) 仮想アドレス−物理アドレスページクロスバッファを用いた推測的なアドレッシング
CN101681258A (zh) 使用可变长度指令集处理器中分支目标地址缓存的分支预测
CN106293639B (zh) 使用微分支目标缓冲器的高性能零气泡条件分支预测
US9778934B2 (en) Power efficient pattern history table fetch in branch predictor
US11175916B2 (en) System and method for a lightweight fencing operation
US10318303B2 (en) Method and apparatus for augmentation and disambiguation of branch history in pipelined branch predictors
KR20190031498A (ko) 어드레스 생성 시간에서 로드 및 스토어 큐 할당 시스템 및 방법
US11947461B2 (en) Prefetch unit filter for microprocessor
US7343481B2 (en) Branch prediction in a data processing system utilizing a cache of previous static predictions
KR20240068728A (ko) 캐시 미스 예측기

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160809

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171016

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180914

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180925

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181221

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190425

R150 Certificate of patent or registration of utility model

Ref document number: 6523274

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