JP7151439B2 - 演算処理装置および演算処理装置の制御方法 - Google Patents

演算処理装置および演算処理装置の制御方法 Download PDF

Info

Publication number
JP7151439B2
JP7151439B2 JP2018229045A JP2018229045A JP7151439B2 JP 7151439 B2 JP7151439 B2 JP 7151439B2 JP 2018229045 A JP2018229045 A JP 2018229045A JP 2018229045 A JP2018229045 A JP 2018229045A JP 7151439 B2 JP7151439 B2 JP 7151439B2
Authority
JP
Japan
Prior art keywords
instruction
store
load
ldstq
instructions
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
JP2018229045A
Other languages
English (en)
Other versions
JP2020091709A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2018229045A priority Critical patent/JP7151439B2/ja
Priority to US16/697,244 priority patent/US11550589B2/en
Publication of JP2020091709A publication Critical patent/JP2020091709A/ja
Application granted granted Critical
Publication of JP7151439B2 publication Critical patent/JP7151439B2/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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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)

Description

本発明は、演算処理装置および演算処理装置の制御方法に関する。
情報処理装置が有する演算処理装置としてのプロセッサは、1つ又は複数のプロセッサコアを備える。
プロセッサコアは、命令キャッシュ、命令バッファ、デコード部、リザベーションステーション、演算実行部およびロードストアユニットを有する。プロセッサコアは、命令の実行に際して以下の処理を行なう。
命令キャッシュには命令が格納されており、読み出された命令は命令バッファに格納され、順次デコード部に送られる。デコード部は命令解釈を行ない、リザベーションステーションへの命令の投入を行なう。
リザベーションステーションには、演算命令を蓄積するRSE(Reservation Station for Execution)およびロードストア命令を蓄積するRSA(Reservation Station for Address)が含まれる。
リザベーションステーションから演算器への命令の投入の判断は各リザベーションステーションが行なう。この際の命令の投入は、演算器の使用効率の向上を図るべく、命令の並び順に依存せずに処理可能な命令から順次処理していくアウトオブオーダで行なわれる。RSAで選ばれたロード命令やストア命令はアドレス生成演算器で実行される。
RSAは、アドレス計算に用いるデータのために固定小数点レジスタ(GPR)の番号を演算実行部に送る。このレジスタ番号を元に参照された固定小数点レジスタのデータはアドレス生成演算器に送られ、演算実行に使用される。アドレス生成演算器の出力はロード命令やストア命令がアクセスするメモリのアドレスである(以下、特許文献1参照)。
RSAは、アドレス計算が行なわれたタイミングに合わせてロードストアユニットにロードもしくはストアのリクエストを出す。ロードストアユニットは、そのリクエストを受けて、ロード命令やストア命令を蓄積するLDSTQ(Load & Store Queue)に格納しつつ、ロードまたはストアを実行する。RSAは、ロードストアユニットにリクエストを出したタイミングでその命令が格納されていたエントリを解放し、その通知をデコード部に送る(以下、特許文献1および特許文献2参照)。
ロードストアユニットは、実行しているロード命令が完了した場合は固定小数点レジスタにメモリを読み出した結果を格納し、LDSTQを解放する。キャッシュミスなどでロード命令が完了しなかった場合は、そのリクエストはアボートしLDSTQから再発行される。
特開2002-366538号公報 特開平6-131239号公報
しかしながら、このような従来のプロセッサにおいては、キャッシュラインに対してデータをストアした後に、この同一のキャッシュラインからロードする、という命令列において、アウトオブオーダ制御によってストアよりも先にロードが実行されてしまうことがある。
この場合、ストア実行前にキャッシュメモリからデータを読み出すことで、誤ったデータを結果として返してしまう。LDSTQは、RSAから命令が発行されアドレス計算の後にリクエストを受け取らなければ、ロードの前にストアがあり、且つ、それがロードと同じアドレスを参照することを知ることができない。LDSTQがRSAからの先行命令発行待ちをするような制御は、アウトオブオーダを無効にすることとほぼ等しく、性能の観点から行なわれない。
そのため、ロード命令は実行が首尾よくいったものとして、LDSTQから解放される。ロードの実行をやり直す必要があるが、やり直しを必要かどうかが判明するのはストア命令がLDSTQに到達した時であるため、やり直しはストア命令をきっかけとしてその次の命令から行なわれることになる。そのため、RSAやLDSTQから既に解放された命令に対してやり直しを行なうため、再び命令フェッチから実行することとなる。このやり直しの時間が性能低下に多大な影響を与えるという課題がある。
1つの側面では、本発明は、ストア命令とロード命令との順序入れ替わりの発生を抑制することを目的とする。
このため、この演算処理装置は、ストア命令およびロード命令を含むメモリアクセス命令をデコードするデコード部と、デコードされたメモリアクセス命令を格納する第1キューと、ストア命令に関するストアデータを格納する第2キューと、前記第1キューを確保できたが前記第2キューを確保できないストア命令に関するアドレス情報を記憶する記憶部と、ロード命令の処理時に、当該ロード命令に関するアドレス情報と一致するアドレス情報が前記記憶部に記憶された場合に、当該ロード命令の実行を抑止する抑止部とを備える。
一実施形態によれば、ストア命令とロード命令との順序入れ替わりの発生を抑制することができる。
情報処理装置の構成の一例を表す図である。 実施形態の一例としてのプロセッサコアに関連するプロセッサコアの構成を例示する図である。 実施形態の一例としてのプロセッサコアに関連するプロセッサコアのLDSTQの管理方法を説明するための図である。 実施形態の一例としてのプロセッサコアに関連するプロセッサコアの構成を例示する図である。 実施形態の一例としてのプロセッサコアにおけるSMLが保持する情報を例示する図である。 実施形態の一例としてのプロセッサコアのRSAのエントリ構成を例示する図である。 実施形態の一例としてのプロセッサコアにおける投機的なLDSTQおよび投機的なSTDQの割り当て処理を説明するためのフローチャートである。 実施形態の一例としてのプロセッサコアにおけるRSAからの命令発行処理を説明するためのフローチャートである。 実施形態の一例としてのプロセッサコアにおけるストア命令に対応する命令パイプラインを示す図である。 実施形態の一例としてのプロセッサコアにおけるロード命令に対応する命令パイプラインを示す図である。 図9に示したストア命令に対応する命令パイプラインと図10に示したロード命令に対応する命令パイプラインとを共に示す図である。
以下、図面を参照して本演算処理装置および演算処理装置の制御方法に係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形(実施形態および各変形例を組み合わせる等)して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
(I)関連技術
図1は情報処理装置の構成の一例を表す図である。
情報処理装置100は、例えば、CPU(Central Processing Unit)1、メインメモリ2および記憶装置3を有する。CPU1,メインメモリ2および記憶装置3は、バスで接続され、互いに通信を行なう。CPU1は、1つ又は複数のプロセッサコア10a(10)を有する。以下、CPU1をプロセッサ1という場合がある。プロセッサコア10,10aが演算処理装置の一例にあたる。
メインメモリ2には、プログラムが展開されることで生成されたプロセスに含まれる命令列が格納される。命令列には、加算や減算などを実行させる演算命令およびデータの読み出しを行なわせるロード命令と、データ等の書き込みを行なわせるストア命令が含まれる。
これらのロード命令およびストア命令はメインメモリ2へのアクセスを生じさせるメモリアクセス命令である。以下、ロード命令およびストア命令をロードストア命令という場合がある。
図2は実施形態の一例としてのプロセッサコアに関連するプロセッサコア10aの構成を例示する図である。
プロセッサコア10aは、命令キャッシュ11,命令バッファ12,デコード部13,リザベーションステーション14、演算実行部15,ロードストアユニット16およびRe-Order Buffer(ROB)17を備える。
プロセッサコア10aは、演算処理を行なう演算処理装置であり、1つ以上のプロセッサコア10aがCPU1に備えられる。
デコード部13は、命令解釈を行ない、各種命令を蓄積するキューなどにリソースを割り当てる。デコード部13によるリソースの割り当て方法については後述する。
リザベーションステーション14は演算実行部15への命令の投入の判断を行なう。リザベーションステーション14は、デコード部13が解釈した命令を蓄積し、優先度を調停してロードストアユニット16や演算実行部15に発行する。
リザベーションステーション14は、RSA141,RSE142および実割り当て管理部143を備える。RSA141はロード命令およびストア命令を蓄積し、RSE142は演算命令を蓄積する。
RSA141は、処理対象のロードストア命令の命令コード,オペランドレジスタアドレスおよびRe-Order Buffer ID(ROB ID)を実割り当て管理部143に通知する。
実割り当て管理部143は、LDSTQ161のエントリ数の情報を予め有する。実割り当て管理部143は、ロードストア命令の命令IDの入力をRSA141から受ける。また、実割り当て管理部143は、LDSTQ解放信号の入力を後述するLSCU(Load Store Control Unit)163から受ける。
実割り当て管理部143は、自己がLDSTQ161へ出力したロードストア命令の数とLSCU163から入力されたLDSTQ解放信号とから、LDSTQ161が保持するロードストア命令の数を求める。そして、実割り当て管理部143は、LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数未満か否かを判定する。
LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数未満であれば、実割り当て管理部143は、RSA141から入力されたロードストア命令の命令コードを演算実行部15およびLDSTQ161へ出力する。
また、実割り当て管理部143は、ロードストア命令の命令コードとともに、オペランドレジスタアドレスおよびROB IDも、演算実行部15およびLDSTQ161に通知する。
一方、LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数以上の場合、実割り当て管理部143は、LDSTQ161がフル、すなわちRSA141から入力されたロードストア命令の格納場所がLDSTQ161に無い(空きなし)と判定する。
LDSTQ161がフル(空きなし)の場合、実割り当て管理部143は、RSA141から入力されたロードストア命令をRSA141へ戻すとともにインターロック信号をRSA141へ送信する。RSA141から入力されたロードストア命令をRSA141へ戻すことは、実割り当て管理部143がそのロードストア命令を破棄し、RSA141にそのロードストア命令の再送信を要求することにあたる。
RSE142は、固定小数点演算に用いるデータを保持するための固定小数点レジスタ番号を演算実行部15へ送る。また、RSA141も、データのロードストアに用いる固定小数点レジスタ番号を演算実行部15へ送る。
演算実行部15は、レジスタ151およびアドレス演算器152を備える。
レジスタ151は演算実行に関するデータ等を格納する。例えば、レジスタ151は、実割り当て管理部143から通知される、ROB ID,命令コードおよびオペランドレジスタアドレスを格納する。また、レジスタ151には、ロードデータやストアデータが格納される。
アドレス演算器152は、RSA141で選ばれたロードストア命令を実行するためのアドレス演算を行なう。アドレス演算器152は、レジスタ151からオペランドデータを取得する。そして、アドレス演算器152は、ロードストア命令におけるアクセス対象となるメインメモリ2のアドレスを生成(演算)しLDSTQ161に出力する。RSA141は、アドレス演算器152によりアドレス生成が行なわれたタイミングに合わせて、ロード命令もしくはストア命令をロードストアユニット16に出力する。演算実行部15やロードストアユニット16は、メモリアクセス命令を処理する処理部に相当する。
ROB17は、デコード部13が解釈した命令をプログラムの順番通りに完了させるための制御を行なう。ROB17には、デコード部13によりデコードされて完了を待っている全ての命令が登録される。ROB17に登録される命令には、一意のROB IDが付与される。ROB IDはデコード部13によって設定されてもよい。
また、ROB17は、ロードストアユニット16のLSCU163に対してストア指示を発行する。
ロードストアユニット16は、メインメモリ2に対するメモリアクセスを行なう。ロードストアユニット16は、LDSTQ161,データキャッシュ162,LSCU163およびSTDQ(Store Data Queue)164を備える。
データキャッシュ162は、メインメモリ2から読み出したデータや、メインメモリ2に書き込むデータを一時的に格納する。
LDSTQ161は、RSA141から発行されたロード命令・ストア命令とそのアクセスするアドレスとを蓄積するキューである。STDQ164は、ストア命令のストアデータを蓄積するキューである。
LSCU163は、ロードストアユニット16によるメインメモリ2に対するメモリアクセスを制御する。LSCU163は、LDSTQ161からROB ID,命令コードおよびアドレスを取得する。また、LSCU163は、ストア命令についてSTDQ164からストアデータを取得し、データキャッシュ162に格納させる。そして、LSCU163は、これらの取得した情報を用いてデータの読み出し指示や書き込み指示を発行する。
LSCU163は、LDSTQ161に蓄積された命令の調停を行なう。LDSTQ161にストア命令が登録されると、LSCU163は、LDSTQ161とSTDQ164との対応付けを行なう。
LSCU163は、ROB17に対してROB IDを用いたロード完了報告を送信する。また、LSCU163は、ROB17からのストア指示に応じて、ROB17に対してストア準備完了報告を通知する。
LSCU163は、ロードストアユニット16によるロードストア命令が実行され、その実行完了に伴ってLDSTQ161およびSTDQ164が解放可能になると、デコード部13およびリザベーションステーション14に解放通知を送信する。ロードストアユニット16は、メモリアクセス命令を処理する処理部に相当する。
RSA141は、その複数あるエントリから選んだロード命令もしくはストア命令に対して、LDSTQ161の実際のリソースの確保が可能かを判定する機能を有する。また、RSA141は、選んだ命令がストア命令であった場合にはSTDQ164の実際のリソースの確保が可能かを判定する。判定の結果、いずれかのリソースが確保できなかった場合には、RSA141は、リソースが解放されるまでRSA141の該当のエントリをインターロックする機能を備える。
デコード部13はLDSTQ161およびSTDQ164の資源を投機的に割り当てる機能を有す。
デコード部13は命令バッファ12から命令を取得し、取得した命令をデコードする。デコード部13は、ロードストアユニット16へ向けて出力されるロードストア命令の数の管理や、ロードストア命令に対するLDSTQ161のエントリの仮の割り当てを行なう。ここで、仮の割当とは、LDSTQ161のエントリ数を仮想的に増やした識別情報を仮想のエントリとしてロードストア命令に割り当てることを指す。また、仮の割り当てを投機的な割り当てという場合もある。
デコード部13は、命令キャッシュ11に格納された命令を読み出し、命令バッファ12に格納する。そして、デコード部13は、命令バッファ12に格納された命令の入力を受ける。そして、デコード部13は、取得した命令を解釈し、その命令が演算命令かロードストア命令かを判定する。
デコード部13は、仮割り当て管理部131を有する。そして、デコード部13は、後述の如く仮割り当て管理部131によりロードストア命令が出力可能と判定された場合に、ロードストア命令に仮LDSTQ番号を割り当て、LDSTQ161のエントリの仮割り当てを行なう。
ここで、仮LDSTQ番号は、ロードストア命令に対してLDSTQ161のエントリに仮割り当てを行なうための番号である。本実施形態では、仮LDSTQ番号は、グループ番号と実際のLDSTQ161のエントリを表すLDSTQ番号との組み合わせで表される。このように仮LDSTQ番号を設定することで、仮LDSTQ番号から容易にLDSTQ番号を生成でき、ロードストア命令に対するLDSTQ161のエントリの仮割り当てを実際の割り当てに変更することが容易となる。ただし、仮LDSTQ番号は、ロードストア命令の処理順が判定できる番号であり、且つ、LDSTQ番号に変換する機構があれば他の番号を割り当ててもよい。
その後、デコード部13は、仮LDSTQ番号を割り当てたロードストア命令をリザベーションステーション14のRSA141へ出力する。また、演算命令の場合、デコード部13は、取得した演算命令をリザベーションステーション14のRSE142へ順次出力する。
ここで、デコード部13は、命令発行を命令が発行された順序通り(インオーダ)で出力する。そのため、例えば、ある命令の出力が待機状態の場合、デコード部13は、その出力を待機させている命令以降の命令の出力も待機することになる。
仮割り当て管理部131は、デコード部13から出力されたロードストア命令の数をカウントする。さらに、仮割り当て管理部131は、LDSTQ161からLDSTQ解放信号を取得する。LDSTQ解放信号は、LDSTQ161におけるロードストア命令が格納された領域であるエントリからロードストア命令がデータキャッシュ162へ出力されそのエントリが解放された場合にLDSTQ161から出力される信号である。
ここで、LDSTQ161は、ロードストア命令を格納可能な上限数を有する。以下では、LDSTQ161におけるロードストア命令を格納可能な上限数をLDSTQ161のエントリ数という。すなわち、LDSTQ解放信号は、LDSTQ161のエントリが解放されたことを表す信号である。
仮割り当て管理部131は、LDSTQ161のエントリ数より大きい命令発行上限数を予め有する。例えば、仮割り当て管理部131は、LDSTQ161のエントリ数の4倍の数を命令発行上限数として記憶する。なお、命令発行上限数は、LDSTQ161のエントリ数より大きければどのような値を用いてもよい。命令発行上限数が大きいほど、RSE141およびRSA142のアウトオブオーダ性能を向上させることができる。上述したデコード部13が発行可能な仮LDSTQ番号の数は、この命令発行上限数が上限となる。
仮割り当て管理部131は、デコード部13が出力したロードストア命令のうち未だLDSTQ161から出力されていないロードストア命令の数であるロードストア命令の滞留数を求める。そして、仮割り当て管理部131は、ロードストア命令の滞留数が命令発行上限未満か否かを判定する。
ロードストア命令の滞留数が命令発行上限以上の場合、仮割り当て管理部131は、デコード部13からのロードストア命令の出力を待機させる。これに対して、ロードストア命令の滞留数が命令発行上限未満の場合、仮割り当て管理部131は、ロードストア命令を出力したことを表すRSA141の解放信号をRSA141から取得したか否かを判定する。
RSA141の解放信号を受信した場合、仮割り当て管理部131は、ロードストア命令を格納するための空きがRSA141に存在すると判定する。そして、ロードストア命令を格納するための空きがRSA141に存在する場合、仮割り当て管理部131は、ロードストア命令が出力可能であることをデコード部13へ通知し、デコード部13からロードストア命令をリザベーションステーション14のRSA141へ出力させる。
図3は実施形態の一例としてのプロセッサコアに関連するプロセッサコア10aのLDSTQ161の管理方法を説明するための図である。
図3中において符号A~Cで示すLDSTQ161は、実際にはIDが0~9の10エントリとして構成されるとともに、これらのIDにX_ID(0~3)を付して表すことで仮想的に拡張され、40エントリあるものとして管理される。
符号Aは初期状態におけるLDSTQ161の使用状況を示す。符号Bはある時点におけるLDSTQ161の使用状態を示し、符号Cは符号Bで示した状態から所定時間経過後の時点におけるLDSTQ161の使用状態を示す。
TOQ(Top of Queue)は、LDSTQ161に格納されたロードストア命令のうち先頭のロードストア命令の位置(LDSTQ番号)を示す。
実際のLDSTQ161は例えば10エントリであり、初期状態では、符号Aに示すように、ID_X=0でID=0から10エントリ分の太枠で囲まれた部分が実際に使用可能なID_XとIDとの組み合わせである。
実割り当て管理部143は、LDSTQ161が空いているかの判定としてデコード部13の割り当てたIDとID_Xとがこの太枠内に入っているかの確認を行なう。
TOQの更新はLDSTQ161の解放によって行なうので、例えば符号Aに示した状態から2エントリ解放されたときは、符号Bに示す状態に移行する。LDSTQ161のエントリの解放はインオーダでありTOQから解放されるため、TOQが2つ進んだエントリであるID_X=0,ID=2に移動する。TOQが移動したため有効な10エントリを示す枠線も2エントリずれる。同じID=0でも符号Aに示す状態ではID_X=0が有効だったものが、符号Bに示す状態においては無効になりID_X=1が有効になっている。
LDSTQ161のIDとID_Xとの割り当ては、仮割り当て管理部131によって行なわれ、IDとID_Xとは番号順に割り当てられる。IDおよびID_Xはそれぞれサイクリックに更新される。すなわち、IDおよびID_Xはそれぞれラップアラウンドとなる。例えば、IDが(ここでは例として10エントリなので)9を超えると次は0になり、ID_Xはインクリメントされる。
上述の如く構成されたプロセッサコア10aにおいて、命令キャッシュ11から読み出された命令は命令バッファ12に格納され、順次デコード部13に送られる。デコード部13は命令解釈を行ない、リザベーションステーション14への命令の投入を行なう。
この時に、仮割り当て管理部131はLDSTQ161およびSTDQ164の資源を投機的(仮想的)に割り当てる。投機的なLDSTQ161およびSTDQ164の割り当てには、実際のLDSTQ161およびSTDQ164のサイズより十分大きい連続するIDが用いられる。
すなわち、実際のLDSTQ161およびSTDQ164のサイズと同じ幅をもつレンジ内に入る投機的なLDSTQ161およびSTDQ164が実際に確保可能なLDSTQ161とSTDQ164となる。
そのレンジの範囲外の投機的なLDSTQ161およびSTDQ164は資源を確保することができない。実際の資源が解放されると、このレンジは幅を保ったまま移動する。
リザベーションステーション14から演算実行部15への命令の投入の判断は、RSA141およびRSE142がそれぞれ行なう。命令の投入はアウトオブオーダで行なうことでアドレス演算器152の使用効率の向上を図っている。
実割り当て管理部143は、RSA141で選ばれた命令がロード命令であればLDSTQ161の資源割り当てを行なう。一方で、RSA141で選ばれた命令がストア命令であればLDSTQ161およびSTDQ164の資源割当を行なう。
資源割当に失敗すれば、ロード命令およびストア命令はRSA141に戻り、割り当てに資源が解放されるまでインターロックされる。資源割り当てに成功すれば、アドレス計算に用いるデータのために、RSA141は、固定小数点レジスタの番号、例えば、第一オペランドレジスタ番号と第二オペランドレジスタ番号とを演算実行部15に送る。
これらのレジスタ番号により指示された固定小数点レジスタのオペランドデータはアドレス演算器152に送られ、アドレス演算に使用される。アドレス演算器152の出力はロード命令もしくはストア命令がアクセスするメインメモリ2のアドレスである。
RSA141は、アドレス計算が行なわれたタイミングに合わせてロードストアユニット16にロードもしくはストアのリクエストを出す。ロードストアユニット16にリクエストを出したタイミングで、RSA141はその命令が格納されていたエントリを解放し、その通知をデコード部13に送る。
ロードストアユニット16はRSA141からのリクエストを受けてロードストア命令をLDSTQ161に格納しつつ、ストア命令であればSTDQ164との対応付けを行なう。それと同時にロードストアユニット16はメモリアクセスを行ないロードまたはストア準備のためのフローをLSCU163で実行順序を調停しながら実行する。
キャッシュミスなどで命令が完了しなかった場合は、そのリクエストはアボートし、LSCU163で調停したのちLDSTQ161から再発行される。
実行している命令がロード命令であった場合、LSCU163は、メインメモリ2からの読み出しが完了した時にレジスタ(固定小数点レジスタ)151にメインメモリ2を読み出した結果を格納させる。また、LSCU163は、命令が使用していたLDSTQ161を解放して、その通知をデコード部13とRSA141とに送り、命令が完了する準備ができたことをROB17に通知する。
一方、実行している命令がストア命令であった場合は、LSCU163は、アドレス変換などの準備のフローを実行し、STDQ164にストアデータが格納され、メインメモリ2への書き込み準備が完了した時点でROB17に命令完了の準備ができたことを通知する。
STDQ164へのストアデータの格納は、RSA141からストア命令のアドレスと同時にオペランドレジスタの読み出しを行ないSTDQ164に登録するストアで行なわれる場合がある。
また、STDQ164へのストアデータの格納は、デコード部13がストア命令を解釈した時にRSA141に登録するのと同時に登録されるRSE142のSTDQ164登録専用のエントリで行なわれることもある。その場合、RSE142に登録されたストアデータ用エントリにおいても、投機的なSTDQ164の割り当てが行なわれているため、RSA141で行なっているのと同様の資源割り当てと資源割り当て失敗時のインターロックを行なう。
ROB17はプログラムの順序通りに命令を完了させる。ロード命令の場合はメモリから読み出した結果が書き込まれた固定小数点レジスタの結果を確定させる。ストア命令の場合は、対応するLDSTQ161とSTDQ164とを使用してSTDQ164に登録されたデータをLDSTQ161に登録されたメインメモリ2上のアドレスに書き込みを行なう。LDSTQ161およびSTDQ164が解放可能になると、LSCU163はデコード部13およびRSA141に通知を行なう。
RSA141は、解放信号を受け取ると投機的なLDSTQ161とSTDQ164との使用可能なレンジをずらすとともに、新たにLDSTQ161,STDQ164が使用可能となった命令のインターロックを解除する。
一般的に、メインメモリ2からデータを読み出すロード命令は、メインメモリ2へデータを書き込むストア命令に比較して頻度が高いことが知られている。加えて、メインメモリ2の読み出しアドレスを保持するロード命令と比較して、ストア命令ではメインメモリ2への書き込みアドレスに加えてメインメモリ2へ書き込むためのデータを保持する必要があり、投機的に実行するのに必要な資源が多い。
そのため、アウトオブオーダを採用するプロセッサ1では、回路量の最適化を行なうために、ロード命令およびストア命令のアクセスするアドレスのためのLDSTQ161とストア命令がメモリに書き込むデータのためのSTDQ164とを別々に持ち、異なるエントリ数の構造とすることが多い。
そして、ロード命令とストア命令との頻度的な特性から、STDQ164はLDSTQ161に比較してかなり少ないエントリのみ保持できる構成を採用することが多い。
このような構造を持ったプロセッサ1では、デコード部13で投機的なLDSTQ161およびSTDQ164の割り当てを行なう場合、プロセッサ1のアウトオブオーダ実行機能により、STDQ164の資源の使用率が上昇した場合にもロード命令はRSA141から発行されロードストアユニット16でメモリアクセスできる。
デコード部13で投機的なLDSTQ161およびSTDQ164の割り当てを行なわない場合、実際のSTDQ164が確保できるまでデコード部13ダはインターロックされ、STDQ164を使わない後続のロード命令の発行も抑止される。
投機的なLDSTQ161およびSTDQ164の割り当てを行なう構成において、ストア命令はSTDQ164の実際のリソースが確保可能となるまで待つことにより、RSA141で長時間滞留することがある。
つまりSTDQ164のリソースがLDSTQ161に対して小さい場合、先行するストア命令より、後続のロード命令がアウトオブオーダの機能により先に発行されやすくなる。
アウトオブオーダのプロセッサ1において、このような動作は期待したものであり、先に発行が可能なロード命令を処理することでメインメモリ2のレイテンシの隠蔽が可能となる。
一方で、プログラム上先行するストア命令と後続のロード命令とを順不同に実行した場合においても、プログラム内では、あたかも、命令がプログラムの順序通りに実行されているかのように振る舞わなければならない。つまり上記のように、プログラム上で先に存在するストア命令より後に存在するロード命令が実行されることが起こっても良いが最終的に辻褄が合わなければならない。
この辻褄合わせは、プロセッサコア10aが複数ある場合に特に重要である。順序が入れ替わったプログラム上の先行するストア命令のアドレスと後続のロード命令のアドレスとが一致する場合、つまり本来プログラム上で先に存在するストア命令がメインメモリ2にデータを書き込み、そのデータをロード命令が読み出すような場合には、ストア命令の書き込みが終わった後でないと、ロード命令が読み出したデータは正しいものではなくなる。
このようなストア命令とロード命令との順序の入れ替わりが発生すると、プロセッサ1は辻褄をあわせるために、ストア命令が完了した時点で、少なくとも後続のロード命令およびそのロード命令以降の命令実行を取り消すロールバックを行なう。そして、その後、再度そのロード命令を含む以降の命令のやり直しを行なう。
このロールバックは性能のペナルティが非常に大きく、投機的に行なわれた命令もすべてやり直すことから、電力効率も悪化する。
デコード部13で投機的にLDSTQ161およびSTDQ164の割り当てを行なう場合には、デコード部13で投機的にLDSTQ161およびSTDQ164の割り当てを行なわずにインターロックする場合に比べて、上述したロールバックが発生する可能性が高くなる。
(II)実施形態
(A)構成
図4は実施形態の一例としてのプロセッサコアに関連するプロセッサコア10の構成を例示する図である。
実施形態の一例としてのプロセッサコア10は、図2に例示したプロセッサコア10aと同様に、情報処理装置100のCPU1に備えられる。プロセッサコア10は、図2に例示したプロセッサコア10aに加えて、SML(Store Data Queue Miss List)144を備える。
また、プロセッサコア10は、ロード命令がSML144に蓄積された第一オペランドレジスタ番号とロード命令の第一オペランドレジスタ番号とを比較し、一致した場合にSTDQ164の資源が解放されるまでRSA141の該当のエントリをインターロックする機能を備える。デコードされて完了を待っているすべての命令はROB17に登録され、一意のROB IDが付与される。
そして、これらの他の部分は図2に示したプロセッサコア10aと同様に構成されている。なお、図中、既述の符号と同一の符号は同様の部分を示しているので、その説明は省略する。
LDSTQ161は、デコードされたメモリアクセス命令を格納する第1キューに相当し、STDQ164は、ストア命令に関するストアデータを格納する第2キューに相当する。
図4に例示するプロセッサコア10においては、先行するストア命令とアドレスが一致する後続のロード命令がある場合に、ロード命令が先にメモリアクセスをすることにより発生するロールバック発生を抑止し、且つ、実際のリソースが確保できた他のロード命令は投機的に実行することを実現する。そして、プロセッサコア10においてはこれらの効果を少ない回路量で実現する。
本プロセッサコア10においては、アクセス先アドレスが同一となる先行のストア命令がLDSTQ161に登録される前に、後続のロード命令がLDSTQ161に登録されロードストアユニット16でメモリアクセスされるのを防ぐため、プログラムの特性に着目する。
メインメモリ2上に先行のストア命令が書き込んだデータを後続のロード命令で読み出して使うという動作は、主に以下の(1),(2)に示す2種類の操作において頻繁に行なわれる。
(1)プログラム実行中にレジスタが不足した際に、レジスタのデータをメインメモリ上に退避して別の用途で使用し、レジスタの不足が解消もしくは実際に退避したデータが必要になった時点で再度プログラムによりロード命令による読み出しを行なう、スピル・フィル操作。
(2)サブルーチンのコールリターン実行時に、サブルーチンのコール先で使用するレジスタもしくはサブルーチンのコール元が使用していたデータを保護するためにレジスタ上のデータをメインメモリ上に退避し、その後リターン時に復元する操作。
これらの操作が行なわれる場合には、ロードとストアのアドレスを計算するために使われる第一オペランドレジスタにはスタックポインタやフレームポインタといった特定の同一のレジスタが用いられる。つまり、RSA141で発行されたが、STDQ164の実際のリソースを確保するのに失敗した先行するストア命令と後続のロード命令の第一オペランドレジスタが一致する場合、そのロード命令はストア命令がストアしたデータを読み出す可能性がある。そのようなロード命令は先行するストア命令がSTDQ164を確保できた後に実行することが望ましい。
SML144は、ストア命令がLDSTQ161の実際のリソースが確保できたがSTDQ164の確保ができなかった場合に、アドレス演算のための第一オペランドレジスタ番号と実行中の命令で一意となる識別情報(例えばROB ID)を蓄積するキュー構造を有する。SML144は、LDSTQ161(第1キュー)を確保できたがSTDQ164(第2キュー)を確保できないストア命令に関するアドレス情報(第一オペランドレジスタ番号,ROB ID)を記憶する記憶部に相当する。
図5は実施形態の一例としてのプロセッサコア10におけるSML144が保持する情報を例示する図である。
この図5に示す例においては、SML144は、第一オペランドレジスタ番号(オペランドレジスタ番号)とROB IDとの各組み合わせ(エントリ)に対して、有効無効情報が設定されている。SML144は1つ以上のエントリを有する。
有効無効情報は、STDQ164が確保できている状態であるか否かを示すフラグである。図5に示す例においては、“1(有効)”はSTDQ164が確保できていない状態を、 “0(無効)”はSTDQ164が確保できている状態を、それぞれ示す。
ロード命令の処理時に、当該ロード命令に関する第一オペランドレジスタ番号(アドレス情報)がSML144(記憶部)のエントリに登録されているかが判定される。この判定の結果、ロード命令に関する第一オペランドレジスタ番号(アドレス情報)がSML144(記憶部)のエントリに登録されている場合に、実割り当て管理部143に対して通知(実STDQチェック実行有効信号)が送信される。
また、本プロセッサコア10において、デコード部13は、ロード命令に対して、直近でデコードしたストア命令に割り当てたSTDQ164の資源情報を付与する機能を備える。
また、ストア命令がリザベーションステーション14から発行され、LDSTQ161の実際のリソースが確保できたがSTDQ164の確保ができなかった場合に、実割り当て管理部143は、ストア命令の実行をキャンセルし、リザベーションステーション14で資源(STDQ164等)が解放されるまでの間インターロックする。
これと同時に、SML144にはストア命令のアドレス演算のための第一オペランドレジスタ番号とアウトオブオーダ実行中の命令で一意となるROB IDとが登録され、STDQ164が確保できていない状態であることを示す有効無効情報が関連付けて保持される。
実割り当て管理部143は、ロード命令の処理時に、当該ロード命令に関するアドレス情報と一致するアドレス情報がSML144に記憶された場合に、当該ロード命令の実行を抑止する抑止部として機能する。
なお、実行中の命令で一意となるROB IDは一般にアウトオブオーダを採用したプロセッサコア10では命令ごとに保持しており、このROB IDを用いてプロセッサコア10は命令の実行状況・実行完了を管理する。
SML144に登録されたエントリは、後続のロード命令を抑止するために用いられる。実行中の命令で一意となるIDは登録したエントリのストア命令の資源が確保された場合に、そのエントリを無効化するために使用される。
第一オペランドレジスタ番号は後続のロード命令を選択的に抑止するために使用される。資源が解放され、ストア命令のインターロックが解除されると、リザベーションステーション14は再度ストア命令を発行する。
ストア命令がLDSTQ161とSTDQ164とを確保できた場合には、ストア命令は実行され、同時にSML144に対してストア命令のROB IDを送り、SML144が保持しているエントリのROB IDとマッチングを行なう。マッチングの結果、SML144にエントリが存在する場合に無効として“0”をマークする。すなわち、ROB IDは、SML144に登録したエントリのストア命令の資源が確保された場合に、そのエントリを無効化するために使用される。
一方、ロード命令がリザベーションステーション14から発行された際には、実割り当て管理部143は、SML144に保持された情報のうち、有効として“1”が保持されているエントリ全てについて、第一オペランドレジスタ番号とロード命令が使用する第一オペランドレジスタ番号との一致を確認する。
確認の結果、一致するエントリがある場合、実割り当て管理部143は、デコード部13が付与したSTDQ164が確保可能かのチェックを行なう。STDQ164が確保可能でない場合には、ロード命令の実行はキャンセルされ、実割り当て管理部143は、リザベーションステーション14で資源が解放されるまでの間インターロックする。
STDQ164が確保可能である場合には、ロード命令は通常通り実行される。この処理ではロード命令はSTDQ164の確保は行なわない。しかしながら、STDQ164が確保可能かチェックを行なうのはロード命令よりも先に実行すべきストア命令がリザベーションステーション14でインターロックされている可能性を調べるためである。
SML144の有効なエントリを登録した命令がロード命令よりも後続のストア命令である場合には、ロールバックを発生させる追い抜きは発生しない。性能向上のためにはこのようなロード命令は投機的に実行するべきである。
次に、本プロセッサコア10におけるLDSTQ161およびSTDQ164の割り当ておよびRSA141でのインターロック制御について説明する。
先ず、デコード時にロード命令がデコードされたときには、デコード部13は、投機的なLDSTQ161を割り当てるとともに、ロード命令がデコードされる前にデコードされたストア命令に割り当てられた投機的なSTDQ164の番号を付与する。デコードされたロード命令とストア命令とはRSA141に登録される。
図6は実施形態の一例としてのプロセッサコア10のRSA141のエントリ構成を例示する図である。
RSA141においては、図6に示すように、有効無効,発行可能,資源解放待ち(インターロック),命令,第一オペランドレジスタ番号,LDSTQ,STDQおよびROB ID等の各情報が相互に関連付けられている。
なお、図6中において“Invalid”はリザベーションステーション14には登録されているが意味を持たない値を示す。
従来手法において、RSAでは、STDQフィールドはストア命令でしか使われておらず、ロード命令に対してはSTDQフィールドにInvalidが設定されていた。
これに対して、本プロセッサコア10においては、図6に例示するように、本プロセッサコア10においては、ロード命令について、STDQフィールドにSTDQ164の番号を示す“7”や“1”の値が設定されている。すなわち、従来手法においてはストア命令でしか使われていなかったSTDQフィールドをロード命令でも使用している。このように、本プロセッサコア10のRSA141は、STDQフィールドにおいて、直前にデコードしたストア命令の投機的なSTDQ164の番号を管理する。
(B)動作
上述の如く構成した実施形態の一例としてのプロセッサコア10における投機的なLDSTQ161および投機的なSTDQ164の割り当て処理を、図7に示すフローチャート(ステップA1~A5)に従って説明する。
デコード部13は命令バッファ12から命令を取得し、取得した命令をデコード(命令解釈)する。
ステップA1において、デコード部13は、デコードした命令がロード命令であるかを確認する。確認の結果、命令がストア命令である場合には(ステップA1のYesルート参照)、ステップA4に移行する。
ステップA4において、仮割り当て管理部131は、投機的なLDSTQを付与し、投機的なLDSTQ番号をインクリメントする。また、デコード部13は、ロード命令に対して、直近でデコードしたストア命令に割り当てたSTDQ164の資源情報を付与する。その後、ステップA5に移行する。
また、ステップA1における確認の結果、命令がロード命令でない場合には(ステップA1のNoルート参照)、ステップA2に移行する。
ステップA2において、デコード部13は、デコードした命令がストア命令であるかを確認する。命令がストア命令である場合には(ステップA2のYesルート参照)、ステップA3に移行する。
ステップA3において、仮割り当て管理部131は、投機的なLDSTQおよび投機的なSTDQを付与し、投機的なLDSTQ番号および投機的なSTDQ番号をインクリメントする。その後、処理はステップA5に移行する。
また、ステップA2における確認の結果、命令がストア命令でない場合も(ステップA2のNoルート参照)、ステップA5に移行する。
ステップA5において、デコード部13は、デコードした命令を他のデコード結果と合わせて、リザベーションステーション14に蓄積させる。その後、処理を終了する。
次に、実施形態の一例としてのプロセッサコア10におけるRSA141からの命令発行処理を、図8に示すフローチャート(ステップB1~B10)に従って説明する。
ステップB1において、実割り当て管理部143は、RSA141から発行される命令がロード命令であるかを確認する。確認の結果、ロード命令でない場合には(ステップB1のNoルート参照)、ステップB2に移行する。
ステップB2において、実割り当て管理部143は、RSA141から発行される命令がストア命令であるかを確認する。確認の結果、ストア命令である場合には(ステップB2のYesルート参照)、ステップB3に移行する。
ステップB3において、実割り当て管理部143は、LDSTQ161の実際のリソースが確保できたかを確認する。確認の結果、LDSTQ161の実際のリソースが確保できた場合には(ステップB3のYesルート参照)、ステップB4に移行する。
ステップB4において、実割り当て管理部143は、次にSTDQ164の実際のリソースが確保できたかを確認する。確認の結果、STDQ164の実際のリソースが確保できなかった場合には(ステップB4のNoルート参照)、ステップB5に移行する。
ステップB5において、実割り当て管理部143は、SML144に第一オペランドとROB IDとを登録し、これらを登録したエントリに対して有効無効情報に有効として1を設定する。
すなわち、実割り当て管理部143は、RSA141で選ばれた命令がストア命令でかつ、LDSTQ161およびSTDQ164のリソース割り当てに失敗すると、その命令のアドレス計算で使用する第一オペランドレジスタ番号とリソース割り当てに失敗したROB IDとをSML144に追加する。さらに、追加したエントリを有効としてマークする。
なお、SML144が持つ全てのエントリが有効(1)としてマークされた状態でストア命令がLDSTQ161およびSTDQ164のリソース割り当てに失敗すると、有効なSML144のエントリを上書して登録してもよい。
その後、ステップB10において、実割り当て管理部143は、RSA141の発行命令をアボートして、エントリをインターロックする。
すなわち、ストア命令は実際のSTDQ164が確保できなかったという要因で、STDQ161が解放されるまでインターロックされる。その後、処理を終了する。
一方、ステップB4における確認の結果、STDQ164の実際のリソースが確保できた場合には(ステップB4のYesルート参照)、ステップB6において、ストア命令が発行される。
すなわち、LDSTQ161およびSTDQ164の実際のリソース割り当てに成功すると、オペランドレジスタ番号が固定小数点レジスタ151に送られ、アドレス演算器152によるアドレス演算が行なわれる。そして、LDSTQ161およびSTDQ164へストア命令が登録される。
実割り当て管理部143は、LDSTQ161,STDQ164へのストア命令の割り当てが確定した時点で、SML144にROB IDを通知する。その後、処理を終了する。
また、ステップB3における確認の結果、LDSTQ161の実際のリソースが確保できなかった場合にも(ステップB3のNoルート参照)、ステップB10に移行する。
ステップB2における確認の結果、ストア命令でもない場合においても(ステップB2のNoルート参照)、ステップB6に移行する。
一方、ステップB1における確認の結果、ロード命令である場合には(ステップB1のYesルート参照)、ステップB7に移行する。
ステップB7において、実割り当て管理部143は、LDSTQ161の実際のリソースが確保できたかを確認する。確認の結果、LDSTQ161の実際のリソースが確保できなかった場合には(ステップB7のNoルート参照)、ステップB10に移行する。
また、ステップB7における確認の結果、LDSTQ161の実際のリソースを確保できた場合には(ステップB7のYesルート参照)、ステップB8に移行する。
ステップB8において、実割り当て管理部143は、ロード命令の第一オペランドレジスタ番号をSML144の全ての有効なエントリに登録されている第一オペランドレジスタ番号と比較し、いずれかの第一オペランドレジスタと一致するかを確認する。
比較の結果、一致するエントリが存在する場合には(ステップB8のYesルート参照)、ステップB9に移行する。ステップB9において、実割り当て管理部143は、ロード命令にデコード部13で付与された先行するストア命令のSTDQ161が確保可能かを確認(チェック)する。この確認は、ステップB3,B4におけるストア命令で実際の資源が確保できたかの確認と同様にして行なわれる。
ロード命令について実際のSTDQ164が確保可能でない場合は(ステップB9のNoルート参照)、ステップB10に移行する。ステップB10において、LDSTQ161が確保できなかったときと同様に、実際のSTDQ164が確保できなかったという要因でSTDQ164が解放されるまでインターロックされる。
一方、ロード命令について実際のSTDQ164が確保可能である場合は(ステップB9のYesルート参照)、ステップB6に移行する。
さらに、ステップB8における確認の結果、ロード命令の第一オペランドレジスタ番号がSML144の有効なエントリに登録されている第一オペランドレジスタ番号のいずれとも不一致である場合には(ステップB8のNoルート参照)、ステップB6に移行する。
LDSTQ161の実際のリソース割り当てに成功し、SML144の有効なエントリに登録されている第一オペランドレジスタ番号と一致しない場合、それらのレジスタ番号が固定小数点レジスタ151に送られる。その後、アドレス演算器152によってアドレス演算が行なわれ、LDSTQ161へロード命令が登録される。
さて、ロードストアユニット16でメインメモリ2の読み出しが完了すると、LSCU163はLDSTQ161の解放通知をデコード部13およびRSA141に通知し、ROB17にROB IDとメモリ読み出し完了通知とを送信する。
RSA141でLDSTQ161の実際のリソース割り当て待ちでインターロックされているエントリは、解放通知を契機にインターロックが解除され、RSA141から発行が可能な状態となる。
ロードストアユニット16でストアの準備フローが完了すると、ROB17とSML144にROB IDとストアの準備完了通知とを送信する。
ROB17は、ストアの準備完了が通知され、命令がプログラム順で完了可能となったと判断すると、ロードストアユニット16にストア指示を送信する。LSCU163は、ストア指示を受けると、STDQ164に保持しているデータをメインメモリ2へ書き込む。
LSCU163はLDSTQ161およびSTDQ164のリソースの使用が終了したと判断した時に、デコード部13およびRSA141に解放通知を送信する。RSA141でLDSTQ161もしくはSTDQ164の実際のリソース割り当て待ちでインターロックされているエントリは、解放通知を契機にインターロックが解除され、RSA141から発行が可能な状態となる。
ストア命令がLDSTQ161,STDQ164に割り当てが確定した時に通知されるROB IDを用いて、SML144はSML144に登録されているエントリのROB IDと一致するエントリを無効化する。
これらの処理により、実際のSTDQ164が確保できないストア命令がRSA141でインターロックされて発行できない場合においても、後続の第一オペランドレジスタ番号が一致するロード命令もインターロックがかかり、順序の保証が可能となる。
一方で、第一オペランドレジスタ番号が一致しないロード命令はインターロックされず、アウトオブオーダで実行される。これにより、STDQ164が確保できないストア命令以降のロード命令をすべてインターロックするのと比較して、アドレスが一致する可能性があるストア命令を追い抜く可能性があるロード命令のみを選択的にインターロックをかけることが可能となる。
図9は実施形態の一例としてのプロセッサコア10におけるストア命令に対応する命令パイプラインを示す図であり、図10はそのロード命令に対応する命令パイプラインを示す図である。
命令パイプラインは複数の処理段階(パイプラインステージ)を有する。
ロード/ストア命令には、P(Priority)サイクル、PT(Priority Transfer)サイクル、B(Buffer)1サイクル、B(Buffer)2サイクル、およびA(Address Generate)サイクルと呼ばれる5ステージのロード/ストアパイプライン500aで実行される。ロード/ストアパイプライン500aは、図4のRSA141からLDSTQ161までの経路に対応している。
固定小数点演算命令はPサイクル、PTサイクル、B1サイクル、B2サイクル、およびX(Execution)サイクルの5ステージの演算パイプライン500bで実行される。なお、D(Decode)サイクルおよびDT(Decode Transfer)サイクルは両パイプライン共通のサイクルである。
Dサイクルにおいては、命令をデコードしリザベーションステーション14へ送る。また、LDSTQ161,STDQ164の数の管理や投機的なLDSTQ161,STDQ164の割り当てを行なう。
DTサイクルにおいては、Dサイクルでデコードされた命令を転送し、リザベーションステーション14に格納する。
Pサイクルにおいては、リザベーションステーション14からアドレス演算器152や演算器112へ投入する命令(エントリ)を決定する。
PTサイクルにおいては、Pサイクルのデータを転送する。B1サイクルにおいては、アドレス生成演算に必要なデータを決定する。また、レジスタ151の読み出しを行なう。
B2サイクルにおいては、アドレス生成演算に必要なデータを決定する。すなわち、B1サイクルの続きを行なう。また、ストア命令の場合、Dサイクルで投機的に割り当てを行なったLDSTQ161,STDQ164が空いているかどうかのチェックも行なう。さらに、SML144への登録もしくはSML144に登録されたエントリのチェックも行なう。
Aサイクルにおいては、アドレス生成演算を行なう。また、生成したアドレスをロードストアユニット16へ送る。さらに、リザベーションステーション14を解放する。また、ストア命令の場合SML144へエントリの無効化信号(SML無効化信号,ROB ID)を出す。ロードストアユニット16へリクエストを出しLDSTQ161およびSTDQ164に登録を行なう。Xサイクルにおいては、固定小数点演算を行なう。
本プロセッサコア10の命令パイプラインでは、実LDSTQ161および実STDQ164のチェックに加えて、SML144が備えられる。SML144に登録するのはストア命令で、SML144に登録された情報を使用するのはロード命令である。
まず、実施形態の一例としてのプロセッサコア10におけるストア命令に対応する命令パイプラインを、図9を用いて説明する。
ストア命令が命令バッファ12からDサイクルでデコード部13に入力されると、デコード部13は、取得した命令をデコードし、仮割り当て管理部131により投機的なLDSTQ161,STDQ164が割り当てられる。
デコード部13は、デコードしたストア命令を、リザベーションステーション14のRSA141へ送るためにフリップフロップ101へ出力する。
ここで、投機的な割当とは、LDSTQ161やSTDQ164のエントリ数を仮想的に増やした識別情報を仮想のエントリとしてロードストア命令に割り当てることを指す。
DTサイクルでは、RSA141への登録を行なう。Dサイクルでデコードされた命令がフリップフロップ101を経由して転送され、リザベーションステーション14のRSA141に格納される。
RSA141ではPサイクルでアウトオブオーダに発行する命令を選択する。これは命令が発行可能になったもののうち、一番古いエントリを選択する。ストア命令がRSA141で選択されると、PTサイクルに送られ、その後、順次、B1サイクル、B2サイクルへと進む。
PTサイクルでは、Pサイクルで決定された命令の命令コードが、フリップフロップ102からフリップフロップ103へ転送される。
B1サイクルおよびB2サイクルでは、固定小数点レジスタ(GPR)からデータが読み出されるタイミングに合わせてフリップフロップ103~105によりデータに遅延が与えられる。それとともに、実割り当て管理部143は、LDSTQ161から出力されたLDSTQ解放信号を用いて、Dサイクルで仮に割り当てたエントリに対応するLDSTQ161のエントリが実際に空いているか否かのチェックを行なう。
B2サイクルにおいては、LDSTQ161が使用可能であったが、STDQ164が使用可能で無かった時に、実割り当て管理部143は、実STDQミス信号をSML144に送る。
SML144は実STDQミス信号が通知されたときに、そのストア命令のROB IDと第一オペランドレジスタ番号とを無効となっているエントリに上書きで記録する。このとき、SML144に無効となっているエントリが一つもない場合、つまり全部有効なエントリで埋め尽くされている場合は、いずれかの任意のエントリを上書きしても良いし、何もしなくてもよい。LDSTQ161,STDQ164の両方が使用可能であったかどうかの情報が付加されたストア命令は次のAサイクルに送られる。
LDSTQ161のエントリが空いている場合、実割り当て管理部143は、アドレス演算器152へ入力する命令コードをフリップフロップ105へ出力する。一方、LDSTQ161のエントリが空いていない場合、実割り当て管理部143は、RSA141へ戻す命令コードをフリップフロップ105へ出力するとともに、インターロック信号をフリップフロップ105へ出力する。
また、B1サイクルで読み出したストアデータをロードストアユニット16のSTDQ164に登録する。そして、RSA141へ命令の発行がうまくいったことを示すRSA解放信号が送信される。
また、SML144に対して、ROB IDとSML無効化信号とが送信される。SML144はSML無効化信号を受け取ると、登録されているROB IDと一致するエントリを探し、存在する場合、エントリの有効無効を示す信号を無効としてマークする。
Aサイクルでは、LDSTQ161,STDQ164の両方が使用可能であった場合に、B2サイクルにおいて、B1サイクルで読み出したレジスタを用いてアドレス生成演算を行ない、ロードストアユニット16のLDSTQ161に演算結果を登録する。
Aサイクルにおいて、LDSTQ161およびSTDQ164の両方が使用可能でない場合に、ストア命令はキャンセルされ、RSA141にインターロック信号が送られる。RSA141はインターロック信号を受け取ると、該当のストア命令をインターロックし、Pサイクルでのアウトオブオーダに発行する命令選択にこのストア命令を除外する。
また、Aサイクルでストア命令がキャンセルされなかった場合、ロードストアユニット16はストア命令が完了しLDSTQ161,STDQ164の解放が可能になると、RSA141と実割り当て管理部143に解放信号(LDSTQ,STDQ解放信号)を送る。RSA141はインターロックされていたエントリのインターロックを解除し、Pサイクルでのアウトオブオーダに発行する命令選択に再度参加可能となる。
アドレス演算器152は、アドレス生成演算を行ない、生成したアドレスおよびロードストア要求をLDSTQ161へ送る。LDSTQ161は、アドレスをデータキャッシュ162に対して出力すると、LDSTQ,STDQ解放信号をRSA141および実割り当て管理部143へ出力する。
次に、実施形態の一例としてのプロセッサコア10におけるロード命令に対応する命令パイプラインを、図10を用いて説明する。
ロード命令が命令バッファ12からDサイクルでデコード部13に投入されると、デコード部13は、取得した命令をデコードし、仮割り当て管理部131により投機的なLDSTQ161が割り当てられる。
ここで、投機的な割当とは、LDSTQ161のエントリ数を仮想的に増やした識別情報を仮想のエントリとしてロード命令に割り当てることを指す。
また、デコード部13は、このロード命令がデコードされる直前にデコードされたストア命令に割り当てた投機的なSTDQ164の番号を付与し、DTサイクルに送る。
DTサイクルでは、RSA141への登録を行なう。Dサイクルでデコードされたロード命令がフリップフロップ101を経由して転送され、リザベーションステーション14のRSA141に格納される。
RSA141ではPサイクルでアウトオブオーダに発行する命令を選択する。これは命令が発行可能になったもののうち、一番古いエントリを選択する。ロード命令がRSA141で選択されると、PTサイクルに送られ、その後、順次、B1サイクル、B2サイクルへと進む。
PTサイクルでは、Pサイクルで決定された命令の命令コードが、フリップフロップ102からフリップフロップ103へ転送される。
B1サイクルおよびB2サイクルでは、フリップフロップ103~105によりデータに遅延が与えられる。それとともに、実割り当て管理部143は、LDSTQ161から出力されたLDSTQ解放信号を用いて、Dサイクルで仮に割り当てたエントリに対応するLDSTQ161のエントリが実際に空いているか否かのチェックを行なう。
B2サイクルにおいて、マッチ回路113において、ロード命令の第一オペランドレジスタ番号とSML144に登録された有効なエントリの第一オペランド番号との比較が行なわれる。マッチ回路113は、SML144に一つ以上マッチするエントリがある場合に、実STDQチェック実行有効信号を実割り当て管理部143に送信する。
この実STDQチェック実行有効信号が有効である場合、Dサイクルで割り当てた、直前のストア命令に割り当てられたSTDQ164が使用可能かのチェックも行なわれる。すなわち、本プロセッサコア10においては、ストア命令の後に発行されるロード命令に対してのみ選択的にインターロックをかける。
一方、実STDQチェック実行有効信号が無効である場合、常にSTDQ164が使用可能と判断される。LDSTQ161およびSTDQ164の両方が使用可能であったかどうかの情報が付加されたロード命令が次のAサイクルに送られる。
Aサイクルでは、LDSTQ161およびSTDQ164の両方が使用可能であった場合に、B2サイクルにおいて、B1サイクルで読み出したレジスタ151を用いてアドレス生成演算を行ない、ロードストアユニット16のLDSTQ161に演算結果を登録する。そして、RSA141へ命令の発行がうまく行なったことを示すRSA解放信号が送られる。
Aサイクルにおいて、LDSTQ161およびSTDQ164の両方が使用可能でない場合に、ロード命令はキャンセルされ、RSA141にインターロック信号が送られる。RSA141はインターロック信号を受け取ると、該当のロード命令をインターロックし、Pサイクルでのアウトオブオーダに発行する命令選択にこのロード命令を除外する。
Aサイクルでロード命令がキャンセルされなかった場合、ロードストアユニット16はロード命令が完了しLDSTQ161の解放が可能になるとRSA141と実割り当て管理部143に解放信号を送る。RSA141はインターロックされていたエントリのインターロックを解除し、Pサイクルでのアウトオブオーダに発行する命令選択に再度参加可能となる。
図11は図9に示したストア命令に対応する命令パイプラインと図10に示したロード命令に対応する命令パイプラインとを共に示す図である。
本プロセッサコア10においては、ストア命令の処理時において、LDSTQ161が使用可能であったが、STDQ164が使用可能で無かった時に、SML144はそのストア命令のROB IDと第一オペランドレジスタ番号とをエントリに記録する。
そして、ロード命令の処理時において、ロード命令の第一オペランドレジスタ番号とSML144に登録された有効なエントリの第一オペランド番号との比較が行なわれる。そして、SML144に一つ以上マッチするエントリがある場合に、ストア命令の後に発行されるロード命令に対してインターロックをかける。
これにより、ストアとロードのアドレスが一致する場合に、ストア命令が実際のSTDQ164の割り当て待ちによりリザベーションステーション14で待機している間に、後続のロード命令が先に発行されることを抑止することを実現する。
(C)効果
このように、本発明の一実施形態としてのプロセッサコア10によれば、SML144を備え、ストア命令がLDSTQ161の実際のリソースを確保できたがSTDQ164の確保ができなかった場合に、SML144に第一オペランドレジスタ番号とROB IDとを登録する。
そして、ロード命令がリザベーションステーション14から発行された際に、実割り当て管理部143が、SML144にエントリされた第一オペランドレジスタ番号とロード命令が使用する第一オペランドレジスタ番号との一致を確認する。
確認の結果、一致するエントリがある場合に、実割り当て管理部143は、そのロード命令の実行をキャンセルし、リザベーションステーション14で資源が解放されるまでの間インターロックする。
これにより、プログラム中に出現しやすいストアとロードのアドレスが一致するパターンについて、ストア命令が実際のSTDQ割り当て待ちによりリザベーションステーション14で待っている間に後続のロード命令が先に発行されるのを抑止することができる。従って、ストア命令とロード命令との入れ替わりによる、命令発行のやり直しのリスクを低減させることができる。
また、SML144という比較的回路規模の小さいキュー構造を備えるだけでストア命令とロード命令との順序の入れ替わりを阻止することができ、少ない回路増加で実現することができる。
(D)その他
本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態においては、SML144に 第一オペランドレジスタとともにROB IDを登録しているが、これに限定されるものではない。すなわち、ROB IDに代えて他の識別情報を用いてもよく、適宜変更して実施することができる。
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
(E)付記
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
ストア命令およびロード命令を含むメモリアクセス命令をデコードするデコード部と、
デコードされたメモリアクセス命令を格納する第1キューと、
ストア命令に関するストアデータを格納する第2キューと、
前記第1キューを確保できたが前記第2キューを確保できないストア命令に関するアドレス情報を記憶する記憶部と、
ロード命令の処理時に、当該ロード命令に関するアドレス情報と一致するアドレス情報が前記記憶部に記憶された場合に、当該ロード命令の実行を抑止する抑止部と
を備えることを特徴とする、演算処理装置。
(付記2)
ストア命令の処理時に、前記第1キューを確保できたが前記第2キューを確保できない場合に、当該ストア命令に関するアドレス情報を前記記憶部に登録する登録部
を備えることを特徴とする、付記1記載の演算処理装置。
(付記3)
前記デコード部がデコードしたメモリアクセス命令を格納し、格納した前記メモリアクセス命令を、前記メモリアクセス命令を処理する処理部に出力する格納処理部を備え、
前記抑止部が、前記第2キューの資源が解放されるまで、前記格納処理部に対してインターロックを行なう
ことを特徴とする、付記1または2記載の演算処理装置。
(付記4)
ストア命令およびロード命令を含むメモリアクセス命令をデコードするデコード部と、デコードされたメモリアクセス命令を格納する第1キューと、ストア命令に関するストアデータを格納する第2キューとを備える演算処理装置の制御方法であって、
ロード命令の処理時に、当該ロード命令に関するアドレス情報を、前記第1キューを確保できたが前記第2キューを確保できないストア命令に関するアドレス情報を記憶する記憶部の前記アドレス情報と比較する処理と、
当該ロード命令に関するアドレス情報と一致するアドレス情報が前記記憶部に記憶された場合に、当該ロード命令の実行を抑止する処理と
を備えることを特徴とする、演算処理装置の制御方法。
(付記5)
ストア命令の処理時に、前記第1キューを確保できたが前記第2キューを確保できない場合に、当該ストア命令に関するアドレス情報を前記記憶部に登録する処理
を備えることを特徴とする、付記4記載の演算処理装置の制御方法。
(付記6)
前記デコード部がデコードしたメモリアクセス命令を格納し、格納した前記メモリアクセス命令を、前記処理部に出力する格納処理部に対して、前記第2キューの資源が解放されるまで、前記格納処理部に対してインターロックを行なう
ことを特徴とする、付記4または5記載の演算処理装置の制御方法。
1 CPU
2 メインメモリ
3 記憶装置
10,10a プロセッサコア
11 命令キャッシュ
12 命令バッファ
13 デコード部
14 リザベーションステーション
141 RSA
142 RSE
143 実割り当て管理部
144 SML
15 演算実行部
151 レジスタ
152 アドレス演算器
16 ロードストアユニット
161 LDSTQ
162 データキャッシュ
163 LSCU
164 STDQ
17 ROB
100 情報処理装置
101~105,108~111 フリップフロップ
112 演算器
113 マッチ回路
500a ロード/ストアパイプライン
500b 演算パイプライン

Claims (4)

  1. ストア命令およびロード命令を含むメモリアクセス命令をデコードするデコード部と、
    デコードされたメモリアクセス命令を格納する第1キューと、
    ストア命令に関するストアデータを格納する第2キューと、
    前記第1キューを確保できたが前記第2キューを確保できないストア命令に関するアドレス情報を記憶する記憶部と、
    ロード命令の処理時に、当該ロード命令に関するアドレス情報と一致するアドレス情報が前記記憶部に記憶された場合に、当該ロード命令の実行を抑止する抑止部と
    を備えることを特徴とする、演算処理装置。
  2. ストア命令の処理時に、前記第1キューを確保できたが前記第2キューを確保できない場合に、当該ストア命令に関するアドレス情報を前記記憶部に登録する登録部を備えることを特徴とする、請求項1記載の演算処理装置。
  3. 前記デコード部がデコードしたメモリアクセス命令を格納し、格納した前記メモリアクセス命令を、前記メモリアクセス命令を処理する処理部に出力する格納処理部を備え、
    前記抑止部が、前記第2キューの資源が解放されるまで、前記格納処理部に対してインターロックを行なう
    ことを特徴とする、請求項1または2記載の演算処理装置。
  4. ストア命令およびロード命令を含むメモリアクセス命令をデコードするデコード部と、デコードされたメモリアクセス命令を格納する第1キューと、ストア命令に関するストアデータを格納する第2キューとを備える演算処理装置の制御方法であって、
    ロード命令の処理時に、当該ロード命令に関するアドレス情報を、前記第1キューを確保できたが前記第2キューを確保できないストア命令に関するアドレス情報を記憶する記憶部の前記アドレス情報と比較する処理と、
    当該ロード命令に関するアドレス情報と一致するアドレス情報が前記記憶部に記憶された場合に、当該ロード命令の実行を抑止する処理と
    を備えることを特徴とする、演算処理装置の制御方法。
JP2018229045A 2018-12-06 2018-12-06 演算処理装置および演算処理装置の制御方法 Active JP7151439B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018229045A JP7151439B2 (ja) 2018-12-06 2018-12-06 演算処理装置および演算処理装置の制御方法
US16/697,244 US11550589B2 (en) 2018-12-06 2019-11-27 Inhibiting load instruction execution based on reserving a resource of a load and store queue but failing to reserve a resource of a store data queue

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018229045A JP7151439B2 (ja) 2018-12-06 2018-12-06 演算処理装置および演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2020091709A JP2020091709A (ja) 2020-06-11
JP7151439B2 true JP7151439B2 (ja) 2022-10-12

Family

ID=70970862

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018229045A Active JP7151439B2 (ja) 2018-12-06 2018-12-06 演算処理装置および演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US11550589B2 (ja)
JP (1) JP7151439B2 (ja)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013515306A (ja) 2009-12-22 2013-05-02 インターナショナル・ビジネス・マシーンズ・コーポレーション アウトオブオーダー型マイクロプロセッサにおけるオペランド・ストア・比較ハザードの予測及び回避

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06131239A (ja) 1992-10-20 1994-05-13 Oki Electric Ind Co Ltd 主記憶アクセス制御方式
US5832297A (en) * 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
JP3554211B2 (ja) * 1998-12-17 2004-08-18 富士通株式会社 マイクロプログラムを用いた命令制御装置および方法
EP1050806A1 (en) * 1999-05-03 2000-11-08 STMicroelectronics SA Memory access address comparison
US6134646A (en) * 1999-07-29 2000-10-17 International Business Machines Corp. System and method for executing and completing store instructions
JP3789320B2 (ja) 2001-06-12 2006-06-21 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置及び該装置を用いた追い越し制御方法
US20100205609A1 (en) * 2009-02-11 2010-08-12 Sun Microsystems, Inc. Using time stamps to facilitate load reordering
US8533438B2 (en) * 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US8918625B1 (en) * 2010-11-24 2014-12-23 Marvell International Ltd. Speculative scheduling of memory instructions in out-of-order processor based on addressing mode comparison
JP6011194B2 (ja) * 2012-09-21 2016-10-19 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US9361113B2 (en) * 2013-04-24 2016-06-07 Globalfoundries Inc. Simultaneous finish of stores and dependent loads
JP6115394B2 (ja) * 2013-08-13 2017-04-19 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013515306A (ja) 2009-12-22 2013-05-02 インターナショナル・ビジネス・マシーンズ・コーポレーション アウトオブオーダー型マイクロプロセッサにおけるオペランド・ストア・比較ハザードの予測及び回避

Also Published As

Publication number Publication date
US20200183694A1 (en) 2020-06-11
JP2020091709A (ja) 2020-06-11
US11550589B2 (en) 2023-01-10

Similar Documents

Publication Publication Date Title
CN104375958B (zh) 高速缓存存储器管理事务性存储器访问请求
US9304936B2 (en) Bypassing a store-conditional request around a store queue
US9430166B2 (en) Interaction of transactional storage accesses with other atomic semantics
US9342454B2 (en) Nested rewind only and non rewind only transactions in a data processing system supporting transactional storage accesses
US9792147B2 (en) Transactional storage accesses supporting differing priority levels
US8850167B2 (en) Loading/discarding acquired data for vector load instruction upon determination of prediction success of multiple preceding branch instructions
US10572179B2 (en) Speculatively performing memory move requests with respect to a barrier
US10140052B2 (en) Memory access in a data processing system utilizing copy and paste instructions
US10152322B2 (en) Memory move instruction sequence including a stream of copy-type and paste-type instructions
US20180052606A1 (en) Efficient enforcement of barriers with respect to memory move sequences
CN109196489B (zh) 用于在非均匀计算装置中重排序的方法和设备
US10241945B2 (en) Memory move supporting speculative acquisition of source and destination data granules including copy-type and paste-type instructions
US20170344398A1 (en) Accelerator control device, accelerator control method, and program storage medium
JP6687845B2 (ja) 演算処理装置及び演算処理装置の制御方法
US10126952B2 (en) Memory move instruction sequence targeting a memory-mapped device
JP7151439B2 (ja) 演算処理装置および演算処理装置の制御方法
US20180052607A1 (en) Migration of memory move instruction sequences between hardware threads
US20100100709A1 (en) Instruction control apparatus and instruction control method
JP7115203B2 (ja) 演算処理装置および演算処理装置の制御方法
JP5344316B2 (ja) ベクトル演算処理装置
JP5093237B2 (ja) 命令処理装置
JP6926681B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP7102840B2 (ja) プロセッサコア、命令制御方法、プログラム
JP6344022B2 (ja) 演算処理装置および演算処理装置の制御方法
JP5648645B2 (ja) ベクトル処理装置、ベクトルロード命令実行方法、及びベクトルロード命令実行プログラム

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20190607

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210909

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220801

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220912

R150 Certificate of patent or registration of utility model

Ref document number: 7151439

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150