JP6926681B2 - 演算処理装置及び演算処理装置の制御方法 - Google Patents

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

Info

Publication number
JP6926681B2
JP6926681B2 JP2017108432A JP2017108432A JP6926681B2 JP 6926681 B2 JP6926681 B2 JP 6926681B2 JP 2017108432 A JP2017108432 A JP 2017108432A JP 2017108432 A JP2017108432 A JP 2017108432A JP 6926681 B2 JP6926681 B2 JP 6926681B2
Authority
JP
Japan
Prior art keywords
instruction
ldstq
load store
unit
input
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
JP2017108432A
Other languages
English (en)
Other versions
JP2018205918A (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 JP2017108432A priority Critical patent/JP6926681B2/ja
Priority to US15/976,172 priority patent/US10884738B2/en
Publication of JP2018205918A publication Critical patent/JP2018205918A/ja
Application granted granted Critical
Publication of JP6926681B2 publication Critical patent/JP6926681B2/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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/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/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/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/3856Reordering of instructions, e.g. using queues or age tags

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)
  • Executing Machine-Instructions (AREA)

Description

本発明は、演算処理装置及び演算処理装置の制御方法に関する。
情報処理装置が有するプロセッサは、1つ又は複数のプロセッサコアを備える。各プロセッサコアは、命令キャッシュ、命令バッファ、デコード部、リザベーションステーション、演算実行部及びロードストアユニットを有する。プロセッサコアは、命令の実行に際して以下の処理を行う。
命令キャッシュには、命令が格納される。そして、命令キャッシュから命令フェッチにより読み出された命令は、命令バッファに格納される。その後、命令バッファに格納された命令バッファは、順次デコード部に送られる。デコード部は、命令デコードを行いリザベーションステーションへ命令を投入する。
リザベーションステーションには、演算命令を蓄積するRSE(Reservation Station for Execution)及びロードストア命令を蓄積するRSA(Reservation Station for Address)が含まれる。リザベーションステーションから各演算実行部への命令の投入の判断は、リザベーションステーションが行う。リザベーションステーションは、命令の並び順に依存せずに処理可能な命令から順次処理していくアウトオブオーダで命令の投入を行う。RSEは、固定小数点演算に用いるデータを保持するための固定小数点レジスタ番号を演算実行部へ送る。また、RSAも、データのロードストアに用いる固定小数点レジスタ番号を演算実行部へ送る。
演算実行部は、固定小数点演算器、GPR(固定小数点レジスタ)及びアドレス生成演算器を有する。固定小数点演算器は、RSEで選ばれた演算命令が投入される。また、GPRには、固定小数点レジスタ番号の入力を受ける。固定小数点演算器は、固定小数点レジスタ番号を基に参照されたGPRのデータを取得し、取得したデータを用いて投入された演算命令を実行する。演算終了後、固定小数点演算器は、GPRに演算結果を書き込む。
また、アドレス生成演算器は、RSAで選ばれたロードストア命令を実行する。アドレス生成演算器は、固定小数点レジスタ番号を基に参照されたGPRのデータを取得する。そして、アドレス生成演算器は、ロードストア命令におけるアクセス対象となるメモリのアドレスを出力する。RSAは、アドレス生成演算器によりアドレス生成が行われたタイミングに合わせて、ロード命令もしくはストア命令をロードストアユニットに出力する。
ロードストアユニットのデータ管理部は、アクセス対象となるメモリのアドレスの入力をアドレス生成演算器から取得する。また、データ管理部は、ロード命令もしくはストア命令の入力をRSAから受ける。そして、データ管理部は、ロード命令及びストア命令をLDSTQ(Load & Store Queue)に格納しつつ、ロード又はストアを実行する。
ロードストアユニットにロード命令もしくはストア命令を出力したタイミングで、RSAは、出力した命令が格納されていた領域を解放し、その通知をデコーダ部に送信する。データ管理部は、実行するロード命令が完了した場合は、GPRにメモリからの読み出し結果を格納する。そして、データ管理部は、LDSTQを解放してその通知をデコーダ部へ送る。ここで、キャッシュミスなどでロード命令が完了されなかった場合、その命令はアボートされ、LDSTQからデータ管理部へ再発行される。
命令バッファに格納された命令が処理されるまでのRSAへの格納及びアドレスの生成といった各処理段階を並べた一連の処理経路は、パイプラインステージと呼ばれる場合がある。
なお、命令と先行命令とでリソースが競合した場合に競合関係をフラグ化し、フラグを基に先行命令を追い越して命令を発行するか否かを判定する従来技術がある。
特開2009−193378号公報
しかしながら、LDSTQに対する処理は、パイプラインステージの後段に位置している。そのため、処理を開始してからLDSTQが解放されるまでに多くのサイクル数がかかる。演算命令及びロードストア命令に対するRSEやRSAにおけるリソースの割り当てはどちらもデコード部により行われるが、デコード部は、LDSTQ及びRSAの両方に空きが無いとロード命令を発行しない。例えば、RSAに十分な空きが有る場合でも、LDSTQに空きが無ければ、デコード部はロード命令を発行しない。
これに対して、LDSTQを使用しない演算命令などはRSAやRSEに空きさえあれば、デコード部は、それらの命令を発行する。しかし、デコード部による命令発行はアウトオブオーダで行うことが困難であるため、先行のロードストア命令がデコーダ部でLDSTQの解放待ちの場合は、デコード部は、LDSTQを使用しない演算命令なども待ち状態とする。そのため、デコード部はRSA及びRSEに命令を詰められず、これがリザベーションステーションによるアウトオブオーダでの命令投入によるアドレス生成演算器や固定小数点演算器の使用効率の向上の妨げになる。
また、LDSTQに対するロードストア命令の割り当てはデコード部で行われるが、命令がLDSTQに入るのはRSAから命令が発行され、アドレス生成の完了後にロードストアユニットに命令が出力されるタイミングである。すなわち、LDSTQが解放されてから実際にその空きに命令が投入されるまでには、ある程度の期間が存在する。この期間が、LDSTQの命令充填率向上の妨げとなる。そして、LDSTQの命令充填率が低い場合、リザベーションステーションによるアウトオブオーダでの命令投入によるアドレス生成演算器や固定小数点演算器の使用効率の向上の妨げになる。また、性能低下を防ぐための単純な方法として、LDSTQに格納可能な命令数を多くすることが考えられるが、回路規模の増大のおそれがあり実現が困難である。
また、競合関係をフラグ化する従来技術を用いても、LDSTQの状態により命令発行を行う場合には、ロードストア命令の待機が発生による演算器の使用効率の低下を軽減することは困難である。さらに、競合関係をフラグ化する従来技術を用いても、LDSTQの解放から充填までの期間は変化しないため、その点でもアドレス生成演算器や固定小数点演算器の使用効率の低下を軽減することは困難である。
開示の技術は、上記に鑑みてなされたものであって、演算器の使用効率を向上させる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様において、格納部は、第1個数を上限としてロードストア命令を格納する。そして、前記格納部は、格納した前記ロードストア命令を順次出力して、出力したロードストア命令に応じたデータの処理をキャッシュ又はメモリを用いて動作させる。命令管理部は、前記ロードストア命令を取得し、自己が出力したロードストア命令のうち前記格納部から出力されていないロードストア命令の滞留数を求め、前記滞留数が前記第1個数より大きい第2個数未満の場合、取得したロードストア命令を出力する。格納管理部は、前記命令管理部から出力されたロードストア命令を取得し、前記格納部が格納するロードストア命令の格納数が前記第1個数未満の場合、取得したロードストア命令を前記格納部へ格納する。
1つの側面では、本発明は、演算器の使用効率を向上させることができる。
図1は、情報処理装置の構成の一例を表す図である。 図2は、コアのブロック図である。 図3は、実施例1に係るコアにおける命令パイプラインの詳細を表す図である。 図4は、デコード部の回路構成の一例を表すブロック図である。 図5は、LDSTQ管理部の回路構成の一例を表すブロック図である。 図6は、LDSTQに格納されたデータを表すイメージ図である。 図7は、デコード部における命令発行処理のフローチャートである。 図8は、実施例1に係るLDSTQ管理部におけるリクエスト発行処理のフローチャートである。 図9は、実施例2に係るコアにおける命令パイプラインの詳細を表す図である。 図10は、実施例2に係るLDSTQ管理部におけるリクエスト発行処理のフローチャートである。
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
図1は、情報処理装置の構成の一例を表す図である。情報処理装置100は、例えば、CPU(Central Processing Unit)1、メインメモリ2及びハードディスク3を有する。CPU1、メインメモリ2及びハードディスク3は、バスで接続され、互いに通信を行う。CPU1は、1つ又は複数のコア10を有する。このコア10が、「演算処理装置」の一例にあたる。
メインメモリ2には、プログラムが展開されることで生成されたプロセスに含まれる命令列が格納される。命令列には、加算や減算などを実行させる演算命令及びデータの読み出し又は書き込みを行わせるロードストア命令が含まれる。
図2は、コアのブロック図である。コア10は、命令キャッシュ11、 命令バッファ12、デコード部13、リザベーションステーション14、演算実行部15及びロードストアユニット16を有する。
図2に示す命令キャッシュ11は、メインメモリ2上に展開されたプロセスが動作することで、メインメモリ2に格納された命令列に含まれる命令が格納される。命令キャッシュ11に格納された命令はデコード部13に読み出され、命令バッファ12に格納される。命令バッファ12に格納された命令は、デコード部13に順次出力される。
デコード部13は、命令キャッシュ11に格納された命令を読み出し、命令バッファ12に格納する。そして、デコード部13は、命令バッファ12に格納された命令の入力を受ける。そして、デコード部13は、取得した命令を解釈し、その命令が演算命令かロードストア命令かを判定する。
デコード部13は、仮LDSTQ管理部131を有する。そして、デコード部13は、後述する仮LDSTQ管理部131によりロードストア命令が出力可能と判定された場合、ロードストア命令に仮LDSTQ番号を割り当て、LDSTQ161のエントリの仮割り当てを行う。ここで、仮LDSTQ番号は、ロードストア命令に対してLDSTQ161のエントリに仮割り当てを行うための番号である。本実施例では、仮LDSTQ番号は、グループ番号と実際のLDSTQ161のエントリを表すLDSTQ番号との組み合わせで表される。このように仮LDSTQ番号を設定することで、仮LDSTQ番号から容易にLDSTQ番号を生成でき、ロードストア命令に対するLDSTQ161のエントリの仮割り当てを実際の割り当てに変更することが容易となる。ただし、仮LDSTQ番号は、ロードストア命令の処理順が判定できる番号であり、且つ、LDSTQ番号に変換する機構があれば他の番号を割り当ててもよい。
その後、デコード部13は、仮LDSTQ番号を割り当てたロードストア命令をリザベーションステーション14のRSA142へ出力する。また、演算命令の場合、デコード部13は、取得した演算命令をリザベーションステーション14のRSE141へ順次出力する。
ここで、デコード部13は、命令発行を命令が発行された順序通り(インオーダ)で出力する。そのため、例えば、ある命令の出力が待機状態の場合、デコード部13は、その出力を待機させている命令以降の命令の出力も待機することになる。このデコード部13が、「命令管理部」及び「命令管理回路」の一例にあたる。
仮LDSTQ管理部131は、デコード部13から出力されたロードストア命令の数をカウントする。さらに、仮LDSTQ管理部131は、後述するLDSTQ161からLDSTQ解放信号を取得する。LDSTQ解放信号は、LDSTQ161におけるロードストア命令が格納された領域であるエントリからロードストア命令がデータキャッシュ162へ出力されそのエントリが解放された場合にLDSTQ161から出力される信号である。ここで、LDSTQ161は、ロードストア命令を格納可能な上限数を有する。以下では、LDSTQ161におけるロードストア命令を格納可能な上限数をLDSTQ161の「エントリ数」という。すなわち、LDSTQ解放信号は、LDSTQ161のエントリが解放されたことを表す信号である。LDSTQ161のエントリ数が、「第1個数」の一例にあたる。
ここで、仮LDSTQ管理部131は、LDSTQ161のエントリ数より大きい命令発行上限数を予め有する。例えば、仮LDSTQ管理部131は、LDSTQ161のエントリ数の4倍の数を命令発行上限数として記憶する。ここで、命令発行上限数は、LDSTQ161のエントリ数より大きければどのような値を用いてもよい。命令発行上限数が大きいほど、RSE141及びRSA142のアウトオブオーダ性能を向上させることができる。上述したデコード部13が発行可能な仮LDSTQ番号の数は、この命令発行上限数が上限となる。この命令発行上限数が、「第2個数」の一例にあたる。
仮LDSTQ管理部131は、デコード部13が出力したロードストア命令のうち未だLDSTQ161から出力されていないロードストア命令の数であるロードストア命令の滞留数を求める。そして、仮LDSTQ管理部131は、ロードストア命令の滞留数が命令発行上限未満か否かを判定する。
ロードストア命令の滞留数が命令発行上限以上の場合、仮LDSTQ管理部131は、デコード部13からのロードストア命令の出力を待機させる。これに対して、ロードストア命令の滞留数が命令発行上限未満の場合、仮LDSTQ管理部131は、ロードストア命令を出力したことを表すRSA142の解放信号をRSA142から取得したか否かを判定する。
RSA142の解放信号を受信した場合、仮LDSTQ管理部131は、ロードストア命令を格納するための空きがRSA142に存在すると判定する。そして、ロードストア命令を格納するための空きがRSA142に存在する場合、仮LDSTQ管理部131は、ロードストア命令が出力可能であることをデコード部13へ通知し、デコード部13からロードストア命令をリザベーションステーション14のRSA142へ出力させる。
リザベーションステーション14は、演算命令を蓄積するRSE141及びロードストア命令を蓄積するRSA142を有する。
RSE141は、演算命令の入力をデコード部13から受ける。RSE141は、取得した演算命令を蓄積する。そして、RSE141は、蓄積した演算命令の中から出力する演算命令を選択する。その後、RSE141は、選択した演算命令で指定された加算や減算を表す命令コードを固定小数点演算器151へ出力する。さらに、RSE141は、選択した演算命令で指定される固定小数点レジスタ(GPR:General Purpose Register)番号をGPR152へ出力する。
RSA142は、仮LDSTQ番号とともにロードストア命令の入力をデコード部13から受ける。RSA142は、取得したロードストア命令を仮LDSTQ番号とともに蓄積する。そして、RSA142は、蓄積したロードストア命令の中から出力するロードストア命令を選択する。その後、RSA142は、選択したロードストア命令においてデータの読み出し又は書き込みなどを表す命令コードを仮LDSTQ番号とともにLDSTQ管理部150へ出力する。また、RSA142は、選択したロードストア命令で指定される固定小数点レジスタ番号をGPR152へ出力する。さらに、RSA142は、ロードストア命令を出力したことを表すRSA142の解放信号をデコード部13へ出力する。
RSA142は、LDSTQ161へ出力されなかったロードストア命令の入力をLDSTQ管理部150から受ける。さらに、RSA142は、戻されたロードストア命令とともに、インターロック信号の入力をLDSTQ管理部150から受ける。そして、RSA142は、戻されたロードストア命令にインターロックを掛けてそのロードストア命令の出力を待機する。
この時、RSA142は、インターロックを掛けていないロードストア命令についてはLDSTQ管理部150への出力を継続する。そのため、RSA142は、複数のロードストア命令がインターロック信号とともにLDSTQ管理部150から戻される場合がある。その場合、RSA142は、戻されたロードストア命令の全てにインターロックを掛け出力を待機する。これにより、LDSTQ161が長時間解放されない場合に、RSA142が繰り返し同じロードストア命令を発行してしまい、他の命令の発行を妨げてコア10の処理性能が低下してしまうことを防ぐことができる。
その後、RSA142は、LDSTQ解放信号の入力をLDSTQ161から受ける。そして、LDSTQ解放信号の入力をトリガとして、RSA142は、インターロックを掛けた全てのロードストア命令のインターロックを解除する。そして、RSA142は、インターロックを解除したロードストア命令の再発行を含む保持する全てのロードストア命令の出力を順次行う。このRSA142が、「蓄積部」の一例にあたる。
ここで、LDSTQ161の開放は本来の命令順にしたがって行われる。そこで、前のロードストア命令が出力されない場合、その後のロードストア命令を格納するエントリも解放されない。そのため、ひとたびLDSTQ161からLDSTQ解放信号が出力された場合、RSA142は、連続でLDSTQ161からLDSTQ解放信号の入力を受ける可能性が高い。そこで、RSA142は、1つのLDSTQ解放信号を受けた際に、全てのインターロックを解除することで、その後に解放信号を受ける可能性の高いロードストア命令を前もって出力することができる。これにより、LDSTQ解放信号が出力されるタイミングでの新しいロードストア命令のLDSTQ161への格納が可能となり、ロードストア命令のLDSTQ161への格納の効率が向上する。さらに、このインターロックの解除には、LDSTQ161のエントリ番号の把握や空き数の勘定を用いないので、コア10における回路増加が抑えられる。
固定小数点演算器151は、命令コードの入力をRSE141から受ける。また、固定小数点演算器151は、演算結果の書き込み先の固定小数点レジスタ番号の入力をRSE141から受ける 。また、固定小数点演算器151は、GPR152から出力されたデータの入力を受ける。そして、固定小数点演算器151は、GPR152から取得したデータを用いて命令コードにしたがって演算を行う。その後、固定小数点演算器151は、書き込み先の固定小数点レジスタ番号で指定されたGPR152における位置に演算結果を書き込む。
GPR152は、固定小数点レジスタ番号の入力をRSE141から受ける。そして、GPR152は、入力された固定小数点レジスタ番号が示す位置に格納されたデータを固定小数点演算器151へ出力する。その後、GPR152は、固定小数点演算器151により指定された格納先の固定小数点レジスタ番号が示す位置に、固定小数点演算器151による演算結果を格納する。
また、GPR152は、固定小数点レジスタ番号の入力をRSA142から受ける。そして、GPR152は、入力された固定小数点レジスタ番号が示す位置に格納されたデータをアドレス生成演算部153へ出力する。
LDSTQ管理部150は、LDSTQ161のエントリ数の情報を予め有する。LDSTQ管理部150は、ロードストア命令の命令コードの入力をRSA142から受ける。また、LDSTQ管理部150は、LDSTQ解放信号の入力をLDSTQ161から受ける。
LDSTQ管理部150は、自己がLDSTQ161へ出力したロードストア命令の数とLDSTQ161から入力されたLDSTQ解放信号から、LDSTQ161が保持するロードストア命令の数を求める。そして、LDSTQ管理部150は、LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数未満か否かを判定する。
LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数未満であれば、LDSTQ管理部150は、RSA142から入力されたロードストア命令の命令コードをアドレス生成演算部153へ出力する。一方、LDSTQ161が保持するロードストア命令の数がLDSTQ161のエントリ数以上の場合、LDSTQ管理部150は、LDSTQ161がフル、すなわちRSA142から入力されたロードストア命令の格納場所がLDSTQ161に無いと判定する。LDSTQ161がフルの場合、LDSTQ管理部150は、RSA142から入力されたロードストア命令をRSA142へ戻すとともにインターロック信号をRSA142へ送信する。RSA142から入力されたロードストア命令をRSA142へ戻すことは、LDSTQ管理部150がそのロードストア命令を破棄し、RSA142にそのロードストア命令の再送信を要求することにあたる。このLDSTQ管理部150が、「格納管理部」及び「格納管理回路」の一例にあたる。
アドレス生成演算部153は、ロードストア命令の命令コードの入力をLDSTQ管理部150から受ける。さらに、アドレス生成演算部153は、計算に使用する値の入力をGPR152から受ける。そして、アドレス生成演算部153は、GPR152から入力された値を用いてアドレスを生成する。例えば、アドレス生成演算部153は、GPR152から入力された値を所定倍するなどしてアドレスを生成する。てそして、アドレス生成演算部153は、生成したアドレスと命令コードをLDSTQ161へ出力し、生成したアドレス及び命令コードをLDSTQ161に格納する。
LDSTQ161は、ロードストア命令の命令コード及び処理対象のアドレスの入力をアドレス生成演算部153から受ける。そして、LDSTQ161は、アドレス生成演算部153からエントリ数を上限としてロードストア命令の命令コード及び処理対象のアドレスを格納する。ここでは、LDSTQ161におけるロードストア命令の命令コード及び処理対象のアドレスの格納を、単にLDSTQ161におけるロードストア命令の格納という。LDSTQ161は、処理順にロードストア命令を格納する。
そして、LDSTQ161は、処理の順番が早い順にロードストア命令を処理する。具体的には、LDSTQ161は、1つ前のロードストア命令の処理が完了すると、次のロードストア命令で指定されたアドレスをデータキャッシュ162に送信し、命令コードで指定された処理を実行させる。そして、LDSTQ161は、格納したロードストア命令の処理が完了すると、LDSTQ解放信号をデコード部13、RSA142及びLDSTQ管理部150へ出力する。ここで、データキャッシュ162によるキャッシュミスなどでロードストア命令が完了しなかった場合、既に出力されたロードストア命令は中断され、LDSTQ161は、同じロードストア命令を再発行する。このLDSTQ161が、「格納部」の一例にあたる。
データキャッシュ162は、命令コード及びアドレスの入力をLDSTQ161から受ける。そして、データキャッシュ162は、指定されたアドレスに対応するデータが有る場合、そのデータを用いて処理を行う。
ロード命令の場合、指定されたアドレスにデータが無ければ、データキャッシュ162は、メインメモリ2からデータを取得する。そして、データキャッシュ162は、取得したデータを自己に格納するとともに取得したデータをGPR152に格納する。また、ストア命令の場合、データキャッシュ162は、取得したデータを自己に格納するとともに取得したデータをメインメモリ2の指定されたアドレスに格納する。
次に、図3を参照して、命令パイプラインにおける処理段階に沿って命令処理の流れについて説明する。図3は、実施例1に係るコアにおける命令パイプラインの詳細を表す図である。すなわち、図3は、実施例1に係るコア10による各種命令の処理の流れを表す。図3におけるロードストアパイプライン200は、ロードストア命令を処理する経路を表す。また、演算パイプライン300は、演算命令を処理する経路である。
命令パイプラインは、複数の処理段階(パイプラインステージ)を有する。処理段階には、例えば、D(Decode)サイクル及びDT(Decode Transfer)サイクルと呼ばれる処理段階が存在する。Dサイクル及びDTサイクルは、ロードストア命令及び演算命令の双方に共通の処理段階である。
さらに、処理段階には、P(Priority)サイクル、PT(Priority Transfer)サイクル、B(Buffer)1サイクル、B(Buffer)2サイクル、A(Address Generate)サイクル及びX(eXecution)サイクルと呼ばれる処理段階が存在する。
ロードストア命令は、Pサイクル、PTサイクル、B1サイクル、B2サイクル及びAサイクルの5つの処理段階を有するロードストアパイプライン200で実行される。ロードストアパイプライン200は、RSA142からLDSTQ161までの経路に対応する。
演算命令は、Pサイクル、PTサイクル、B1サイクル、B2サイクル及びXサイクルの5つの処理段階を有する演算パイプライン300で実行される。演算パイプライン300は、RSE141から固定小数点演算器151までの経路に対応する。
Dサイクルでは、デコード部13が命令バッファ12から命令を取得する。そして、デコード部13は、取得した命令をデコードし、デコードした命令をリザベーションステーション14のRSE141又はRSA142へ送るためにフリップフロップ17へ出力する。Dサイクルでは、デコード部13により、LDSTQ161へ向けて出力されるロードストア命令の数の管理や、ロードストア命令に対するLDSTQ161のエントリの仮の割り当てが行われる。ここで、仮の割当とは、LDSTQ161のエントリ数を仮想的に増やした識別情報を仮想のエントリとしてロードストア命令に割り当てることを指す。
DTサイクルでは、Dサイクルでデコードされた命令がフリップフロップ17を経由して転送され、リザベーションステーション14のRSE141又はRSA142に格納される。
次に、ロードストアパイプライン200の各処理段階について説明する。Pサイクルでは、リザベーションステーション14のRSA142が有する命令の中から、エントリ選択部201が、アドレス生成演算部153へ投入する命令を決定する。そして、エントリ選択部201は、決定した命令のデータをフリップフロップ202へ出力する。
PTサイクルでは、Pサイクルで決定された命令の命令コードが、フリップフロップ202からフリップフロップ203へ転送される。また、Pサイクルで決定された命令固定小数点レジスタ番号がレジスタ番号転送部521に送られる。
B1サイクル及びB2サイクルでは、固定小数点レジスタ番号がレジスタ番号転送部521からレジスタ番号転送部522を経由してリードポート523へ入力される。そして、リードポート523は、取得した固定小数点レジスタ番号に応じた位置にあるデータをアドレス生成演算に用いられるデータと決定し、アドレス生成演算に用いられるデータをGPR152から読み出す。そして、リードポート523は、アドレス生成演算に用いられるデータをデータ転送部524へ出力する。また、B1サイクル及びB2サイクルでは、GPR152からデータが読み出されるタイミングに合わせてフリップフロップ203〜205によりデータに遅延が与えられる。それととともに、LDSTQ管理部150は、LDSTQ161から出力されたLDSTQ解放信号を用いて、Dサイクルで仮に割り当てたエントリに対応する実際にLDSTQ161のエントリが空いているか否かのチェックを行う。LDSTQ161のエントリが空いている場合、LDSTQ管理部150は、アドレス生成演算部153へ入力する命令コードをフリップフロップ205へ出力する。一方、LDSTQ161のエントリが空いていない場合、LDSTQ管理部150は、RSA142へ戻す命令コードをフリップフロップ205へ出力するとともに、インターロック信号をフリップフロップ205へ出力する。
Aサイクルでは、LDSTQ161のエントリが空いていない場合、フリップフロップ205を経由した命令コードは、RSA142へ戻される。さらに、フリップフロップ205を経由したインターロック信号がRSA142へ送信される。これに対して、LDSTQ161のエントリが空いている場合、フリップフロップ205を経由した命令コードは、アドレス生成演算部153へ入力される。さらに、データ転送部524から出力されたアドレス生成演算に用いられるデータがアドレス生成演算部153に入力される。そして、アドレス生成演算部153は、アドレス生成演算を行い、生成したアドレス及びロードストア要求をLDSTQ161へ送る。LDSTQ161は、アドレスをデータキャッシュ162に対して出力しロードストアの処理を実行させると、LDSTQ解放信号をRSA142及びLDSTQ管理部150へ出力する。
LDSTQ管理部150は、実際のLDSTQ161のエントリ数を用いてロードストア命令がエントリに割り当て可能か否か、すなわち、ロードストア命令をLDSTQ161に格納可能か否かを判定する。ロードストア命令がエントリに割り当て可能な場合、デコード部13によりに与えられた仮のエントリがLDSTQ管理部150においてLDSTQ161の実際のエントリに変更される。このように、デコード部13においてLDSTQ161のエントリ数よりも大きい命令発行上限数を上限としてロードストア命令に仮のエントリ番号が割り当てられる。そして、後ろの処理段階であるB2サイクルに配置されたLDSTQ管理部150において、LDSTQ161の実際の空きがチェックされる。これにより、LDSTQ解放信号がLDSTQ161から出力されてからLDSTQ161のエントリに新たにロードストア命令が割り当てられるまでのサイクル数を短縮することができる。すなわち、LDSTQ161のエントリが解放されてから、その空いたエントリが埋まるまでのサイクル数を短縮することができる。
例えば、デコード部13で実際のLDSTQ161のエントリをロードストア命令に割り当てる場合、空いたエントリが埋まるまでのサイクルは、最大でDサイクルからAサイクルまでの7サイクルかかる。これに対して、LDSTQ管理部150で実際のLDSTQ161のエントリをロードストア命令に割り当てる場合、空いたエントリが埋まるまでのサイクルは、最大でB2サイクル及びAサイクルの2サイクルに短縮することができる。また、インターロックがRSA142でかかっている場合であっても、LDSTQ解放信号が出力されてから空いたエントリが埋まるまでのサイクルは、最大でPサイクルからAサイクルまでの5サイクルに短縮することができる。
ここで、LDSTQ管理部150は、LDSTQ161に格納するロードストア命令が選択されてからロードストア命令に対して実際のLDSTQ161のエントリの割り当てを行うことで処理を減らしている。例えば、RSA142において仮の割り当てを実際のLDSTQ161のエントリへの割り当てに変換できるかを判定する場合、RSA142が保持するロードストア命令全てに対して判定を行う機構が配置される。RSA142は、最大で命令発行上限数のロードストア命令を保持するため、実際のLDSTQ161のエントリへの割り当て判定用の機構が配置される。このようにLDSTQ161に格納するロードストア命令の選択前の段階で判定を行う場合、回路規模が大きくなってしまう。そこで、LDSTQ管理部150は、エントリ選択部201の後に配置されることが好ましい。そして、LDSTQ管理部150は、エントリ選択部201とアドレス生成演算部153の間であればどの場所に配置することも可能であるが、なるべくアドレス生成演算部153に近い場所に配置することが好ましい。アドレス生成演算部153に近いほど、LDSTQ解放信号が出力されてから空いたエントリが埋まるまでのサイクルを短縮することができるからである。
次に、演算パイプライン300の各処理段階について説明する。Pサイクルでは、リザベーションステーション14のRSE141が有する命令の中から、エントリ選択部301が、演算実行部15の固定小数点演算器151へ投入する命令を決定する。そして、エントリ選択部301は、決定した処理をフリップフロップ302へ出力する。
PTサイクルでは、Pサイクルで決定された命令の命令コードが、フリップフロップ302からフリップフロップ303へ転送される。また、Pサイクルで決定された命令固定小数点レジスタ番号がレジスタ番号転送部525へ送られる。
B1サイクル及びB2サイクルでは、固定小数点レジスタ番号がレジスタ番号転送部525からレジスタ番号転送部526を経由してリードポート527へ入力される。そして、リードポート527は、取得した固定小数点レジスタ番号に応じた位置にあるデータをアドレス生成演算に用いられるデータと決定し、固定小数点演算に用いられるデータをGPR152から読み出す。そして、リードポート527は、固定小数点演算に用いられるデータをデータ転送部528へ出力する。また、B1サイクル及びB2サイクルでは、GPR152からデータが読み出されるタイミングに合わせてフリップフロップ303〜305により固定小数点演算器151に送られる命令コードに遅延が与えられる。
Xサイクルでは、フリップフロップ305から、固定小数点演算の命令コードが固定小数点演算器151へ入力される。さらに、データ転送部528から出力された固定小数点演算に用いられるデータが固定小数点演算器151に入力される。そして、固定小数点演算器151は、固定小数点演算を行い、格納先の固定小数点レジスタ番号で表されるGPR152における位置に演算結果を格納する。
次に、図4を参照して、デコード部13のロードストア命令に対するLDSTQ161のエントリの仮の割り当て及びロードストア命令のRSA142への発行の具体的な回路の一例について説明する。図4は、デコード部の回路構成の一例を表すブロック図である。
本実施例では、デコード部13は、ロードストア命令に対するLDSTQ161のエントリの仮の割り当てとして、ロードストア命令にLDSTQ161のエントリ数を上限としたLDSTQ番号とグループ番号とを組にして表す仮LDSTQ番号を割り当てる。ここでは、LDSTQ161のエントリ数を10個とし、命令発行上限数をLDSTQ161のエントリ数の4倍の40個とした場合で説明する。すなわち、命令発行上限数は、40となる。
命令解釈回路403は、命令バッファ12から入力された命令が演算命令かロードストア命令かを判定する。命令解釈回路403は、命令が演算命令の場合は0をNAND(Not AND)ゲート404及びANDゲート406へ出力し、命令がロードストア命令の場合は1をNANDゲート404及びANDゲート406へ出力する。
仮LDSTQ番号発行数カウンタ401は、デコード部13から発行され且つLDSTQ161で処理が完了していないロードストア命令に発行した仮LDSTQ番号の数、すなわちロードストア命令の滞留数のカウンタである。仮LDSTQ番号発行数カウンタ401は、減算器408と加算器409とによる計算結果の入力を受ける。そして、仮LDSTQ番号発行数カウンタ401は、自己が有するカウンタに入力された値を加えたカウント値をロードストア命令の滞留数として求める。そして、仮LDSTQ番号発行数カウンタ401は、算出したロードストア命令の滞留数をFull判定回路402へ出力し、さらに、カウント値を表す信号を減算器408へ出力する。
Full判定回路402は、デコード部13から発行され且つLDSTQ161で処理が完了していないロードストア命令に発行した仮LDSTQ番号の数、すなわちロードストア命令の滞留数の入力を仮LDSTQ番号発行数カウンタ401から受ける。Full判定回路402は、ロードストア命令の滞留数が命令発行上限数である40であるか否かを判定する。ロードストア命令の滞留数が40でなければ、Full判定回路402は、0をNANDゲート404へ出力する。これに対して、ロードストア命令の滞留数が40の場合、Full判定回路402は、1をNANDゲート404へ出力する。
NANDゲート404は、命令がロードストア命令か否かを表す信号の入力を命令解釈回路403から受ける。また、NANDゲート404は、ロードストア命令の滞留数が命令発行上限数に達しているか否かを表す信号をFull判定回路402から受ける。そして、NANDゲート404は、入力された2つの信号の否定論理積を出力する。すなわち、命令がロードストア命令であり且つロードストア命令の滞留数が命令発行上限数に達していない場合、NANDゲート404は、ロードストア命令の発行を表す信号として0をANDゲート405へ出力し、それ以外の場合、ロードストア命令の不発行を表す信号として1をANDゲート405へ出力する。
ANDゲート405は、命令バッファ12から命令が入力されたか否かを表す信号、すなわち命令バッファ12から有効な命令が入力されたか否かを表す有効信号の入力を受ける。ANDゲート405は、命令バッファ12から命令が入力された場合には1の入力を受け、命令バッファ12からの命令の入力が無い場合は0の入力を受ける。また、ANDゲート405は、NANDゲート404からロードストア命令が発行されたか否かを表す信号の入力を受ける。そして、ANDゲート405は、入力された2つの信号の論理積を出力する。すなわち、ANDゲート405は、命令バッファ12から命令が入力され且つロードストア命令の発行の場合に1をANDゲート406及びRSA142へ出力し、それ以外の場合に0をANDゲート406、RSA142及び命令バッファ12へ出力する。命令バッファ12は、ANDゲート405から1の信号の入力を受けると、次の命令を出力する。
ANDゲート406は、命令がロードストア命令か否かを表す信号の入力を命令解釈回路403から受ける。さらに、ANDゲート406は、命令バッファ12から出力された命令がロードストア命令であるか否かを表す信号の入力をANDゲート405から受ける。そして、ANDゲート406は、入力された2つの信号の論理積を出力する。すなわち、命令バッファ12から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令を発行する場合、ANDゲート406は、1を加算器409及び413へ出力し、それ以外の場合0を加算器409及び413へ出力する。
減算器408は、仮LDSTQ番号発行数カウンタ401が出力したカウント値の出力を表す信号の入力を受ける。さらに、減算器408は、LDSTQ解放信号の入力をLDSTQ161から受ける。LDSTQ解放信号の入力を受けていなければ、減算器408は、カウント値の出力を表す信号の入力を受けて、0を加算器409へ出力する。これに対して、LDSTQ解放信号の入力を受けている場合、減算器408は、カウント値の出力を表す信号の入力を受けて、−1を加算器409へ出力する。
加算器409は、減算器408の計算結果の入力を受ける。さらに、加算器409は、命令バッファ12から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令が発行されるか否かを表す信号の入力をANDゲート406から受ける。命令バッファ12から入力されたロードストア命令が発行されることを表す信号の入力を受けた場合、加算器409は、減算器408から入力された値に1を加算した値を仮LDSTQ番号発行数カウンタ401へ出力する。これに対して、命令バッファ12から入力されたロードストア命令が発行される場合でないことを表す信号の入力を受けた場合、加算器409は、減算器408から入力された値をそのまま仮LDSTQ番号発行数カウンタ401へ出力する。すなわち、仮LDSTQ番号発行数カウンタ401のカウンタは、ロードストア命令がデコード部13から発行されると1つインクリメントされ、LDSTQ解放信号がLDSTQ161から出力されると1つデクリメントされる。
LDSTQ番号発行回路411は、0から9までの連続したLDSTQ番号を順番に発行する。LDSTQ番号発行回路411は、加算器413から加算結果の入力を受ける。そして、LDSTQ番号発行回路411は、入力された値をLDSTQ番号に加算して次のLDSTQ番号として発行する。そして、LDSTQ番号発行回路411は、LDSTQ番号として9を発行した場合、次にはLDSTQ番号として0を発行する。LDSTQ番号発行回路411がRSA142にLDSTQ番号を発行すると、インクリメント信号が加算器413に入力される。
加算器413は、LDSTQ番号発行回路411から出力されたインクリメント信号の入力を受ける。さらに、加算器413は、命令バッファ12から命令が入力され、命令がロードストア命令であり、且つ、そのロードストア命令が発行されるか否かを表す信号の入力をANDゲート406から受ける。命令バッファ12から入力されたロードストア命令が発行されることを表す信号の入力を受けた場合、インクリメント信号が入力されると、加算器413は、1を出力する。すなわち、命令バッファ12から入力されたロードストア命令が発行されるとLDSTQ番号発行回路411が発行するLDSTQ番号が1つ増える。そして、加算器413は、1の値を有する信号の10回目の出力の際に、すなわち、LDSTQ番号発行回路411が発行するLDSTQ番号が9から0へ変わるタイミングでオーバーフロー信号を加算器414へ出力する。
グループ番号発行回路412は、0から3までの連続したグループ番号を順番に発行する。命令発行上限数がLDSTQ161のエントリ数の4倍であることから、グループ番号の上限は3となる。グループ番号発行回路412は、加算器414から加算結果の入力を受ける。そして、グループ番号発行回路412は、入力された値をグループ番号に加算して次のグループ番号として発行する。そして、グループ番号発行回路412は、グループ番号として3を発行した場合、次にはグループ番号として0を発行する。グループ番号発行回路412がRSA142にグループ番号を発行すると、インクリメント信号が加算器414に入力される。
加算器414は、グループ番号発行回路412から出力されたインクリメント信号の入力を受ける。さらに、加算器414は、オーバーフロー信号の入力を加算器413から受ける。オーバーフロー信号の入力を受けた場合、インクリメント信号が入力されると、加算器413は、1を出力する。すなわち、LDSTQ番号が9に達すると次はLDSTQ番号が0に戻りグループ番号が1つ増える。
RSA142は、LDSTQ番号発行回路411から入力されたLDSTQ番号の入力をLDSTQ番号発行回路411から受ける。また、RSA142は、グループ番号発行回路412から入力されたグループ番号の入力を受ける。さらに、RSA142は、命令バッファ12から命令が入力され且つロードストア命令が発行された信号の入力をANDゲート405から受ける。そして、RSA142は、グループ番号発行回路412から入力されたグループ番号とLDSTQ番号発行回路411から入力されたLDSTQ番号とを並べた値を仮LDSTQ番号として取得する。すなわち、ここでは、仮LDSTQ番号は、00〜39の番号となる。
次に、図5を参照して、LDSTQ管理部150による実際のLDSTQ161のエントリの割り当ての具体的な回路の一例について説明する。図5は、LDSTQ管理部の回路構成の一例を表すブロック図である。
先頭LDSTQ番号保持回路503は、その時点でLDSTQ161に格納されたロードストア命令に割り当てられた仮LDSTQ番号を構成するLDSTQ番号の先頭の番号である先頭LDSTQ番号を保持する回路である。先頭LDSTQ番号は、初期値が0である。先頭LDSTQ番号保持回路503は、加算器501から加算結果の入力を受ける。そして、先頭LDSTQ番号保持回路503は、保持する先頭LDSTQ番号に加算器501から入力された値を加算して次の先頭LDSTQ番号を生成する。そして、先頭LDSTQ番号保持回路503は、生成した先頭LDSTQ番号を比較器506及び比較器508へ出力する。また、先頭LDSTQ番号保持回路503が先頭LDSTQ番号を出力すると、インクリメント信号が加算器501に入力される。
加算器501は、LDSTQ解放信号の入力をLDSTQ161から受ける。また、加算器501は、先頭LDSTQ番号保持回路503が出力したインクリメント信号の入力を受ける。LDSTQ解放信号の入力を受けた状態でインクリメント信号の入力を受けた場合、加算器501は、1を出力する。すなわち、LDSTQ161から解放信号が出力されると、先頭LDSTQ番号は1つ増える。さらに、加算器501は、1の値を有する信号の10回目の出力の際に、すなわち、先頭LDSTQ番号が9から0へ変わるタイミングでオーバーフロー信号を加算器502へ出力する。
先頭グループ番号保持回路504は、その時点でLDSTQ161に格納されたロードストア命令に割り当てられた仮LDSTQ番号を構成するグループ番号の先頭の番号である先頭グループ番号を保持する回路である。先頭グループ番号は、初期値が0である。先頭グループ番号保持回路504は、0から3までの連続したグループ番号を順番に発行する。先頭グループ番号保持回路504は、加算器502から加算結果の入力を受ける。そして、先頭グループ番号保持回路504は、入力された値を先頭グループ番号に加算して次の先頭グループ番号として加算器505及び比較器509へ発行する。そして、先頭グループ番号保持回路504は、先頭グループ番号として3を発行した場合、次には先頭グループ番号として0を発行する。先頭グループ番号保持回路504が先頭グループ番号を発行すると、インクリメント信号が加算器502に入力される。
加算器502は、先頭グループ番号保持回路504から出力されたインクリメント信号の入力を受ける。さらに、加算器502は、オーバーフロー信号の入力を加算器501から受ける。オーバーフロー信号の入力を受けた場合、インクリメント信号が入力されると、加算器502は、1を出力する。すなわち、先頭LDSTQ番号が9に達すると次は先頭LDSTQ番号が0に戻り先頭グループ番号が1つ増える。
加算器505は、先頭グループ番号保持回路504から入力された先頭グループ番号に1を加算し、比較器507へ出力する。
ここで、フリップフロップ204は、RSA142から出力されたロードストア命令に割り当てられた仮LDSTQ番号を保持する。仮LDSTQ番号は、図5に示すように、LDSTQ番号及びグループ番号で構成される。
比較器506は、フリップフロップ204が保持する仮LDATQ番号を構成するLDSTQ番号の入力を受ける。以下では、RSA142から出力されたロードストア命令に割り当てられた仮LDSTQ番号を構成するLDSTQ番号を入力LDSTQ番号という。さらに、比較器506は、先頭LDSTQ番号の入力を先頭LDSTQ番号保持回路503から受ける。そして、比較器506は、入力LDSTQ番号と先頭LDSTQ番号とを比較する。入力LDSTQ番号が先頭LDSTQ番号より小さい場合、比較器506は、1をANDゲート510へ出力し、それ以外の場合、0をANDゲート510へ出力する。
比較器507は、フリップフロップ204が保持する仮LDATQ番号を構成するグループ番号の入力を受ける。以下では、RSA142から出力されたロードストア命令に割り当てられた仮LDSTQ番号を構成するグループ番号を入力グループ番号という。さらに、比較器507は、先頭グループ番号に1が加算された番号の入力を加算器505から受ける。そして、比較器507は、入力グループ番号と先頭グループ番号に1を加算した番号とを比較する。入力グループ番号と先頭グループ番号に1を加算した番号とが一致する場合、比較器507は、1をANDゲート510へ出力し、それ以外の場合、0をANDゲート510へ出力する。
ANDゲート510は、入力LDSTQ番号が先頭LDSTQ番号より小さいか否かを表す信号の入力を比較器506から受ける。また、ANDゲート510は、入力グループ番号と先頭グループ番号に1を加算した番号とが一致するか否かを表す情報の入力を比較器507から受ける。そして、ANDゲート510は、入力された2つの信号の論理積を出力する。すなわち、ANDゲート510は、入力グループ番号が先頭グループ番号に1を加算した値と一致し且つ入力LDSTQ番号が先頭LDSTQ番号よりも小さい場合に1を出力する。
比較器508は、入力LDSTQ番号の入力をフリップフロップ204から受ける。さらに、比較器508は、先頭LDSTQ番号の入力を先頭LDSTQ番号保持回路503から受ける。そして、比較器506は、入力LDSTQ番号と先頭LDSTQ番号とを比較する。入力LDSTQ番号が先頭LDSTQ番号以上の場合、比較器506は、1をANDゲート510へ出力し、それ以外の場合、0をANDゲート510へ出力する。
比較器509は、入力グループ番号の入力をフリップフロップ204から受ける。さらに、比較器509は、先頭グループ番号の入力を先頭グループ番号保持回路504から受ける。そして、比較器509は、入力グループ番号と先頭グループ番号とを比較する。入力グループ番号と先頭グループ番号とが一致する場合、比較器509は、1をANDゲート511へ出力し、それ以外の場合、0をANDゲート511へ出力する。
ANDゲート511は、入力LDSTQ番号が先頭LDSTQ番号以上か否かを表す信号の入力を比較器508から受ける。また、ANDゲート511は、入力グループ番号と先頭グループ番号とが一致するか否かを表す情報の入力を比較器509から受ける。そして、ANDゲート511は、入力された2つの信号の論理積を出力する。すなわち、ANDゲート511は、入力グループ番号が先頭グループ番号と一致し且つ入力LDSTQ番号が先頭LDSTQ番号以上の場合に1を出力する。
ORゲート512は、入力グループ番号が先頭グループ番号に1を加算した値と一致し且つ入力LDSTQ番号が先頭LDSTQ番号よりも小さいか否かを表す信号の入力をANDゲート510から受ける。また、ORゲート512は、入力グループ番号が先頭グループ番号と一致し且つ入力LDSTQ番号が先頭LDSTQ番号以上か否かを表す信号の入力をANDゲート511から受ける。そして、ORゲート512は、入力された2つの信号の論理和を出力する。すなわち、ORゲート512は、入力グループ番号が先頭グループ番号に1を加算した値と一致し且つ入力LDSTQ番号が先頭LDSTQ番号よりも小さい場合に1を出力する。さらに、ORゲート512は、入力グループ番号が先頭グループ番号と一致し且つ入力LDSTQ番号が先頭LDSTQ番号以上の場合に1を出力する。ORゲート512が出力する1の信号は、RSA142から出力されフリップフロップ204に格納されたロードストア命令がLDSTQ161に格納可能であることを表す信号である。
ここで、図6を参照して、図5におけるORゲート512が1を出力する場合に、RSA142から出力されフリップフロップ204に格納されたロードストア命令がLDSTQ161に格納可能である理由を説明する。図6は、LDSTQに格納されたデータを表すイメージ図である。
仮LDSTQ番号600〜604は、デコード部13から発行される仮LDSTQ番号を全て表している。そして、仮LDSTQ番号602〜604のそれぞれに配置された枠611〜614は、各状態でのLDSTQ161に格納されたロードストア命令に割り当てられた仮LDSTQ番号である。ここでは仮LDSTQ番号を2桁の数字で表すが、1桁目がグループ番号を表し、2桁目がLDSTQ番号を表す。さらに、枠611〜614に含まれる仮LDSTQ番号において「先頭」と記載されている仮LDSTQ番号は、LDSTQ161に格納されたロードストア命令のうち先頭のロードストア命令の仮LDSTQ番号である。すなわち、「先頭」と記載されている仮LDSTQ番号のグループ番号が先頭グループ番号にあたり、LDSTQ番号が先頭LDSTQ番号にあたる。
ロードストア命令に仮LDSTQ番号が00から割り当てられ順次LDSTQ161に格納されると、最初は、LDSTQ161には、仮LDSTQ番号が00〜09であるロードストア命令が格納される。実際には、LDSTQ161には、LDSTQ161のエントリを表すLDSTQ番号が割り当てられたロードストア命令が格納されるが、ここでは、実際のLDSTQ161のエントリの割り当て前の仮LDSTQ番号を用いて説明する。
仮LDSTQ番号601の状態から仮LDSTQ番号が00のロードストア命令が出力され、解放されると次のロードストア命令が格納される場合は仮LDSTQ番号602で表される状態となる。この場合、仮LDSTQ番号が09の次の仮LDSTQ番号は10であるので、LDSTQ161には、仮LDSTQ番号602における枠612に含まれる仮LDSTQ番号を有するロードストア命令が格納される。このようにエントリの解放及び新たなロードストア命令を繰り返すと、仮LDSTQ番号603及び604で表される状態となる。
いずれの状態でも、LDSTQ161に格納されるロードストア命令のグループ番号は、先頭グループ番号か先頭グループ番号に1を加算した番号である。そして、グループ番号が先頭グループ番号と一致するものであれば先頭LDSTQ番号以上のLDSTQ番号を含む仮LDSTQ番号が割り当てられたロードストア命令であれば、LDSTQ161に格納可能である。また、グループ番号が先頭グループ番号に1を加算した番号と一致するものであれば先頭LDSTQ番号未満のLDSTQ番号を含む仮LDSTQ番号が割り当てられたロードストア命令であれば、LDSTQ161に格納可能である。このことから、図5のORゲート512が1を出力した場合であれば、その際にRSA142から出力されフリップフロップ204に格納されたロードストア命令がLDSTQ161に格納可能であるといえる。
ここで、図7を参照して、デコード部13における命令発行処理の流れについて説明する。図7は、デコード部における命令発行処理のフローチャートである。
デコード部13は、命令バッファ12から命令が出力されたことを表す信号、すなわち、値が1の有効信号の入力を受けたか否かを判定する(ステップS1)。この処理は、図4におけるANDゲート405が、命令バッファ12から信号の入力を受けることにあたる。値が1の有効信号の入力が無い場合(ステップS1:否定)、デコード部13は、命令をリザベーションステーション14へ出力せずに命令発行処理を終了する。これは、ANDゲート405が0を出力することにあたる。
これに対して、値が1の有効信号の入力がある場合(ステップS1:肯定)、デコード部13は、命令解釈を行い入力された命令がロードストア命令か否かを判定する(ステップS2)。この処理は、図4におけるNANDゲート404が、命令解釈部403による命令の解釈結果の入力を受けることにあたる。ロードストア命令でない場合(ステップS2:否定)、デコード部13は、ステップS7へ進む。
これに対して、ロードストア命令の場合(ステップS2:肯定)、デコード部13は、ロードストア命令の滞留量が命令発行上限未満か否かを判定する(ステップS3)。この処理は、図4におけるNANDゲート404が、Full判定回路402からの判定結果を表す信号の入力を受けることにあたる。ロードストア命令の滞留量が命令発行上限以上の場合(ステップS3:否定)、デコード部13は、命令をリザベーションステーション14へ出力せずに命令発行処理を終了する。この処理は、NANDゲート404が0を出力し、それを受けてANDゲート405が0を出力することにあたる。
これに対して、ロードストア命令の滞留量が命令発行上限未満の場合(ステップS3:肯定)、デコード部13は、LDSTQ番号をインクリメントする(ステップS4)。この処理は、図4における仮LDSTQ番号発行数カウンタ401の更新及びLDSTQ番号発行回路411によるLDSTQ番号のインクリメントにあたる。
次に、デコード部13は、LDSTQ番号が0か否かを判定する(ステップS5)。この処理は、加算器413におけるオーバーフロー信号の出力判定にあたる。LDSTQ信号が0でない場合(ステップS5:否定)、デコード部13は、ステップS7へ進む。これは、図4において加算器413がオーバーフロー信号を出力しない場合にあたる。
これに対して、LDSTQ信号が0である場合(ステップS5:肯定)、デコード部13は、グループ番号をインクリメントする(ステップS6)。この処理は、図4における加算器414が加算器413からのオーバーフロー信号の入力を受けて1を出力することで、グループ番号発行回路412がグループ番号をインクリメントする処理にあたる。
その後、デコード部13は、仮LDSTQ番号を出力するとともに、命令をリザベーションステーション14へ出力し、さらに、命令発行信号を命令バッファ12に発行する(ステップS7)。
次に、図8を参照して、LDSTQ管理部150におけるリクエスト発行処理の流れについて説明する。図8は、実施例1に係るLDSTQ管理部におけるリクエスト発行処理のフローチャートである。
LDSTQ管理部150は、入力LDSTQ番号が先頭LDSTQ番号未満か否かを判定する(ステップS11)。この処理は、図5における比較器506及び508による判定処理にあたる。
入力LDSTQ番号が先頭LDSTQ番号未満の場合(ステップS11:肯定)、LDSTQ管理部150は、入力グループ番号が先頭グループ番号に1を加算した番号と一致するかを判定する(ステップS12)。この処理は、図5における比較器507による判定処理にあたる。
また、入力LDSTQ番号が先頭LDSTQ番号以上の場合(ステップS11:否定)、LDSTQ管理部150は、入力グループ番号が先頭グループ番号と一致するかを判定する(ステップS13)。この処理は、図5における比較器509による判定処理にあたる。
入力グループ番号が先頭グループ番号に1を加算した番号と一致しない場合(ステップS12:否定)又は入力グループ番号が先頭グループ番号と一致しない場合(ステップS13:否定)、LDSTQ管理部150は、LDSTQ161への格納不能と判定する。この処理は、図5におけるORゲート512が、0の値の信号を出力した場合にあたる。そして、LDSTQ管理部150は、命令コードをRSA142へ戻し、さらに、インターロック信号をRSA142へ送信する(ステップS14)。
一方、入力グループ番号が先頭グループ番号に1を加算した番号と一致する場合(ステップS12:肯定)又は入力グループ番号が先頭グループ番号と一致する場合(ステップS13:肯定)、LDSTQ管理部150は、LDSTQ161への格納可能と判定する。この処理は、図5におけるORゲート512が、1の値の信号を出力した場合にあたる。そして、LDSTQ管理部150は、ロードストア命令に対して実際のLDSTQ161のエントリに対応するLDSTQ番号を割り当てる。そして、LDSTQ管理部150は、命令コードをLDSTQ161のLDSTQ番号で表される位置に格納し、ロードストア命令の実行要求をLDSTQ161へ出力する(ステップS15)。
その後、LDSTQ管理部150はインターロック解除信号を出力してRSA142のインターロックを解除する。また、LDSTQ161は、ロードストア命令の処理完了後にLDSTQ解放信号を出力する(ステップS16)。
以上に説明したように、本実施例に係るコアは、デコード部でLDSTQのエントリ数以上のロードストア命令に対して仮LDSTQ番号を割り当てRSAへ出力する。そして、コアは、LDSTQ管理部において、実際のLDSTQに仮のLDSTQ番号が割り当てられたロードストア命令が格納可能かを判定し、格納可能であればLDSTQのエントリを割り当て、格納する場所が無ければRSAへ戻す。これにより、処理の順番にしたがって命令を出力するデコード部は、LDSTQのエントリ数以上のロードストア命令を出力することができる。そのため、デコード部からのロードストア命令の発行が待機させられる可能性が低くなり、より多くのロードストア命令及び演算命令を処理が可能となり、アドレス生成演算器や固定小数点演算器の使用効率を向上させることが可能となる。
また、LDSTQ解放信号が出力された場合、LDSTQへ格納されるロードストア命令はLDSTQ管理部又はRSAから出力されるため、デコード部から出力されたロードストア命令の到着を待つよりもLDSTQへの格納時間を短縮することができる。これにより、アドレス生成演算器や固定小数点演算器の使用効率を向上させることができる。
また、LDSTQ管理部によるLDSTQへの格納の可否判定は、RSAから出力された1つのロードストア命令に対して行うため、回路規模を値策することができる。さらに、RSAのインターロックの解除やLDSTQ管理部によるLDSTQへの格納の可否判定には、既存のLDSTQ解放信号を用いるため、これらの処理を実現するための回路も規模を小さく抑えることができる。
さらに、ロードストア命令のLDSTQにおける格納場所が無い場合に、インターロックを掛けてそのロードストア命令のRSAからの出力を待機させる。これにより、同じロードストア命令を繰り返し処理する手間を軽減でき、アドレス生成演算器や固定小数点演算器の使用効率を向上させることができる。
ただし、同じロードストア命令を繰り返し処理した場合の処理能力の低下を許容することができる場合には、RSAにおけるインターロックを実行しなくてもよい。その場合でも、デコード部からの命令の出力の増加及びLDSTQのエントリ解放からの次のエントリ割り当てまでの時間の短縮は実現でき、演算器の使用効率を向上させることができる。
次に、実施例2について説明する。本実施例に係るコアは、LDSTQにロードストア命令の格納する場所が無い場合に、そのロードストア命令のプリフェッチを実行することが実施例1と異なる。本実施例に係るコア10も図2のブロック図で表される。以下の説明では、実施例1と同様の各部の動作は説明を省略する。
図9は、実施例2に係るコアにおける命令パイプラインの詳細を表す図である。本実施例に係るロードストアパイプライン200には、アドレス生成演算部153からLDSTQ161を迂回してデータキャッシュ162に接続するバイパス経路が設けられる。
LDSTQ管理部150は、取得したロードストア命令がLDSTQ161に格納可能な場合、フリップフロップ205を介してアドレス生成演算部153へロードストア命令の命令コードを出力する。この場合、LDSTQ管理部150は、ロードストア命令の処理をアドレス生成演算部153に行わせる。
これに対して、取得したロードストア命令の格納場所がLDSTQ161に無い場合、LDSTQ管理部150は、フリップフロップ205を介してアドレス生成演算部153へロードストア命令の命令コードを出力する。そして、LDSTQ管理部150は、プリフェッチとしてロードストア命令をアドレス生成演算部153に処理させる。さらに、LDSTQ管理部150は、RSA142にロードストア命令の命令コードを戻すとともに、インターロック信号をRSA142へ送信する。
アドレス生成演算部153は、ロードストア命令がLDSTQ161に格納可能な場合、命令コードの入力をLDSTQ管理部150から受ける。そして、アドレス生成演算部153は、取得した命令コード及びGPR152から取得した情報を用いてアドレスを生成する。そして、アドレス生成演算部153は、命令コード及び生成したアドレスをLDSTQ161に送信して格納させ、ロードストア命令をLDSTQ161に処理させる。
これに対して、ロードストア命令の格納場所がLDSTQ161に無い場合、アドレス生成演算部153は、命令コードの入力をLDSTQ管理部150から受ける。さらに、アドレス生成演算部153は、プリフェッチとしてのロードストア命令の処理要求をLDSTQ管理部150から受ける。そして、アドレス生成演算部153は、取得した命令コード及びGPR152から取得した情報を用いてアドレスを生成する。その後、アドレス生成演算部153は、フリップフロップ206を介して、メインメモリ2上の生成したアドレスをデータ伽種に送り、生成したアドレスに格納されたデータに対するプリフェッチをデータキャッシュ162に実行させる。例えば、アドレス生成演算部153は、メインメモリ2上の生成したアドレスのデータがデータキャッシュ162に格納されていない場合、メインメモリ2上の生成したアドレスから読み出したデータをデータキャッシュ162に格納させる。
次に、図10を参照して、本実施例に係るLDSTQ管理部150におけるリクエスト発行処理の流れについて説明する。図10は、実施例2に係るLDSTQ管理部におけるリクエスト発行処理のフローチャートである。
LDSTQ管理部150は、入力LDSTQ番号が先頭LDSTQ番号未満か否かを判定する(ステップS21)。
入力LDSTQ番号が先頭LDSTQ番号未満の場合(ステップS21:肯定)、LDSTQ管理部150は、入力グループ番号が先頭グループ番号に1を加算した番号と一致するかを判定する(ステップS22)。
また、入力LDSTQ番号が先頭LDSTQ番号以上の場合(ステップS21:否定)、LDSTQ管理部150は、入力グループ番号が先頭グループ番号と一致するかを判定する(ステップS23)。
入力グループ番号が先頭グループ番号に1を加算した番号と一致しない場合(ステップS22:否定)又は入力グループ番号が先頭グループ番号と一致しない場合(ステップS23:否定)、LDSTQ管理部150は、LDSTQ161への格納不能と判定する。そして、LDSTQ管理部150は、命令コードとともにプリフェッチのリクエストをアドレス生成演算部153へ送信する(ステップS24)。アドレス生成演算部153は、命令コード及びRSA142からの情報を用いてアドレスを生成し、生成したアドレスを用いてデータキャッシュ162にプリフェッチを行わせる。
また、LDSTQ管理部150は、命令コードをRSA142へ戻し、さらに、インターロック信号をRSA142へ送信する(ステップS25)。
一方、入力グループ番号が先頭グループ番号に1を加算した番号と一致する場合(ステップS22:肯定)又は入力グループ番号が先頭グループ番号と一致する場合(ステップS23:肯定)、LDSTQ管理部150は、LDSTQ161への格納可能と判定する。そして、LDSTQ管理部150は、ロードストア命令に対して実際のLDSTQ161のエントリに対応するLDSTQ番号を割り当てる。そして、LDSTQ管理部150は、命令コードをLDSTQ161のLDSTQ番号で表される位置に格納し、ロードストア命令の実行要求をLDSTQ161へ出力する(ステップS26)。
その後、LDSTQ管理部150はインターロック解除信号を出力してRSA142のインターロックを解除する。また、LDSTQ161は、ロードストア命令の処理完了後にLDSTQ解放信号を出力する(ステップS27)。
以上に説明したように、本実施例に係るLDSTQ管理部は、特定のロードストア命令のLDSTQにおける格納場所が無い場合にも、その特定のロードストア命令で指定されたデータのプリフェッチを行い、データキャッシュに予め使用するデータを格納しておく。これにより、その特定のロードストア命令がLDSTQに格納可能なり、その後LDSTQに格納された特定のロードストア命令が実行される場合に、データキャッシュに使用するデータが確実に存在する。そのため、キャッシュミスを減らすことができ、演算処理装置であるコアの処理性能を向上させることができる。
1 CPU
2 メインメモリ
3 ハードディスク
10 コア
11 命令キャッシュ
12 命令バッファ
13 デコード部
14 リザベーションステーション
15 演算実行部
16 ロードストアユニット
17 フリップフロップ
131 仮LDSTQ管理部
141 RSE
142 RSA
150 LDSTQ管理部
151 固定小数点演算器
152 GPR
153 アドレス生成演算部
161 LDSTQ
162 データキャッシュ
200 ロードストアパイプライン
201 エントリ選択部
202〜206 フリップフロップ
300 演算パイプライン
301 エントリ選択部
302〜305 フリップフロップ
401 仮LDSTQ番号発行数カウンタ
402 Full判定回路
403 命令解釈回路
404 NANDゲート
405,406 ANDゲート
408 減算器
409 加算器
411 LDSTQ番号発行回路
412 グループ番号発行回路
413,414 加算器
501,502,505 加算器
503 先頭LDSTQ番号保持回路
504 先頭グループ番号保持回路
506〜509 比較器
510,511 ANDゲート
512 ORゲート
521,522,525,526 レジスタ番号転送部
523,527 リードポート
524,528 データ転送部

Claims (5)

  1. 第1個数を上限としてロードストア命令を格納し、格納した前記ロードストア命令を順次出力して、出力したロードストア命令に応じたデータの処理をキャッシュ又はメモリを用いて動作させる格納部と、
    ロードストア命令を取得し、自己が出力したロードストア命令のうち前記格納部から出力されていないロードストア命令の滞留数を求め、前記滞留数が前記第1個数より大きい第2個数未満の場合、取得したロードストア命令を出力する命令管理部と、
    前記命令管理部から出力されたロードストア命令を取得し、前記格納部が格納するロードストア命令の格納数が前記第1個数未満の場合、取得したロードストア命令を前記格納部へ格納する格納管理部と
    を備えたことを特徴とする演算処理装置。
  2. 前記命令管理部が出力したロードストア命令を取得し蓄積し、蓄積したロードストア命令を前記格納部へ向けて順次出力する蓄積部をさらに備え、
    前記格納管理部は、前記蓄積部から出力された特定のロードストア命令を取得し、前記格納数が前記第1個数以上の場合、前記特定のロードストア命令を破棄し、前記特定のロードストア命令を前記蓄積部に再度出力させることを特徴とする請求項1に記載の演算処理装置。
  3. 前記格納管理部は、前記格納数が前記第1個数以上の場合、前記特定のロードストア命令を破棄し、前記特定のロードストア命令を前記格納部が格納可能な状態になるまで、前記蓄積部からの前記特定のロードストア命令の出力を待機させ、前記特定のロードストア命令を前記格納部が出力可能な状態になった場合、前記特定のロードストア命令を前記蓄積部から再度出力させることを特徴とする請求項2に記載の演算処理装置。
  4. 前記格納管理部は、前記格納数が前記第1個数以上の場合、取得した前記ロードストア命令で指定された処理で取り扱うデータを前記キャッシュに格納させることを特徴とする請求項1〜3のいずれか一つに記載の演算処理装置。
  5. 第1個数を上限としてロードストア命令を格納し、格納した前記ロードストア命令を順次出力して、出力したロードストア命令に応じたデータの処理をキャッシュ又はメモリを用いて動作させるロードストアキューを有する演算処理装置の制御方法であって、
    前記ロードストア命令を命令管理回路に取得させ、
    前記命令管理回路が出力したロードストア命令のうち前記ロードストアキューから出力されていないロードストア命令の滞留数を求め、
    前記滞留数が前記第1個数より大きい第2個数未満の場合、取得したロードストア命令を前記命令管理回路に出力させ、
    前記命令管理回路により出力された前記ロードストア命令を格納管理回路に取得させ、
    前記ロードストアキューが格納するロードストア命令の格納数が前記第1個数未満の場合、前記格納管理回路が取得した前記ロードストア命令を前記ロードストアキューへ格納させる
    ことを特徴とする演算処理装置の制御方法。
JP2017108432A 2017-05-31 2017-05-31 演算処理装置及び演算処理装置の制御方法 Active JP6926681B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017108432A JP6926681B2 (ja) 2017-05-31 2017-05-31 演算処理装置及び演算処理装置の制御方法
US15/976,172 US10884738B2 (en) 2017-05-31 2018-05-10 Arithmetic processing device and method of controlling arithmetic processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017108432A JP6926681B2 (ja) 2017-05-31 2017-05-31 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2018205918A JP2018205918A (ja) 2018-12-27
JP6926681B2 true JP6926681B2 (ja) 2021-08-25

Family

ID=64460118

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017108432A Active JP6926681B2 (ja) 2017-05-31 2017-05-31 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US10884738B2 (ja)
JP (1) JP6926681B2 (ja)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4985452B2 (ja) 2008-02-14 2012-07-25 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置
CN105117202B (zh) * 2015-09-25 2018-11-27 上海兆芯集成电路有限公司 具有融合保留站结构的微处理器

Also Published As

Publication number Publication date
US10884738B2 (en) 2021-01-05
JP2018205918A (ja) 2018-12-27
US20180349139A1 (en) 2018-12-06

Similar Documents

Publication Publication Date Title
US5185868A (en) Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy
US5251306A (en) Apparatus for controlling execution of a program in a computing device
US8325603B2 (en) Method and apparatus for dequeuing data
JP6260303B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP5548037B2 (ja) 命令発行制御装置及び方法
JP2007241918A (ja) プロセッサ装置
US20120089824A1 (en) Processor and vector load instruction execution method
US20180293114A1 (en) Managing fairness for lock and unlock operations using operation prioritization
JP2007514237A (ja) 分岐先バッファにおいてエントリを割り当てる方法及び装置
JP3435267B2 (ja) マイクロプロセッサ及びそのロードアドレス予想方法
US10445096B2 (en) Managing lock and unlock operations using traffic prioritization
TWI587218B (zh) 記憶體事務層級模型模擬方法及系統
JP6520416B2 (ja) 演算処理装置および演算処理装置の処理方法
JP7430173B2 (ja) 分岐信頼スロットル
JP5949327B2 (ja) 演算処理装置および演算処理装置の制御方法
JP6926681B2 (ja) 演算処理装置及び演算処理装置の制御方法
US7765387B2 (en) Program counter control method and processor thereof for controlling simultaneous execution of a plurality of instructions including branch instructions using a branch prediction mechanism and a delay instruction for branching
JP7115203B2 (ja) 演算処理装置および演算処理装置の制御方法
JP7151439B2 (ja) 演算処理装置および演算処理装置の制御方法
US20070043930A1 (en) Performance of a data processing apparatus
JP3726092B2 (ja) ベクトル処理装置およびベクトルロード方法
JP5093237B2 (ja) 命令処理装置
JP7102840B2 (ja) プロセッサコア、命令制御方法、プログラム
US20220075624A1 (en) Alternate path for branch prediction redirect
US7870314B2 (en) Method and system for implementing store buffer allocation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210217

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210302

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210427

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210719

R150 Certificate of patent or registration of utility model

Ref document number: 6926681

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150