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

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

Info

Publication number
JP7020304B2
JP7020304B2 JP2018109332A JP2018109332A JP7020304B2 JP 7020304 B2 JP7020304 B2 JP 7020304B2 JP 2018109332 A JP2018109332 A JP 2018109332A JP 2018109332 A JP2018109332 A JP 2018109332A JP 7020304 B2 JP7020304 B2 JP 7020304B2
Authority
JP
Japan
Prior art keywords
instruction
register
memory access
unit
arithmetic
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
JP2018109332A
Other languages
English (en)
Other versions
JP2019212152A (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 JP2018109332A priority Critical patent/JP7020304B2/ja
Priority to US16/423,898 priority patent/US11055101B2/en
Publication of JP2019212152A publication Critical patent/JP2019212152A/ja
Application granted granted Critical
Publication of JP7020304B2 publication Critical patent/JP7020304B2/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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)
  • Storage Device Security (AREA)

Description

本発明は、演算処理装置及び演算処理装置の制御方法に関する。
セキュリティ脆弱性の指摘を契機に、CPU(Central Processing Unit)等の演算処理装置(又は、プロセッサ)のセキュリティに対する関心が高まっている。セキュリティ脆弱性のうち、例えばスペクタ(Spectre)と呼ばれる攻撃は、(1)誤った経路の分岐先を実行させることで、プログラムの動作によって保護されている領域のアドレスに対して、ハードウェアが投機的にメモリアクセスを行ってデータを読み出し、(2)読み出したデータをアドレスに変換してメモリアクセスを行う、という手順を含む。上記(1),(2)の手順は、分岐予測ミスによる誤った経路に対する投機的な実行であるため最終的にはキャンセルされるが、上記(2)の手順におけるメモリアクセスの痕跡がキャッシュに残ってしまう。メモリアクセスの痕跡がデータキャッシュに残っていると、メモリアクセスの実行時間から上記(1)の手順で読み出したデータの内容を推定することができてしまう。
投機実行のハードウェア動作を止めれば、上記スペクタの如き攻撃は阻止できる。しかし、上記スペクタの如き攻撃への対策として投機実行を抑止すると、演算処理装置の性能が著しく劣化してしまう。
特開平3-240131号公報
Jann Horn, "Reading privileged memory with a side-channel", [online], [searched on May 9, 2018], internet<https://***projectzero.blogspot.jp/ 2018/01/reading-privileged-memory-with-side.html?m=1>
従来、セキュリティ脆弱性を突いた攻撃に対して投機実行を抑止すると、演算処理装置の性能が著しく劣化してしまう。
そこで、1つの側面では、セキュリティ脆弱性を突いた攻撃に対して投機実行を抑止する場合に、性能劣化を抑えることができる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
1つの案によれば、命令をデコードした結果である命令コードを出力するデコード部と、前記命令コードを蓄積し、演算実行部へ投入できる命令コードから選択して投入するリザベーションステーションと、投入された前記命令コードが演算命令である場合、演算に前記演算命令の書き込み先の演算用のレジスタを使用し、前記投入された前記命令コードがメモリアクセス命令である場合、アドレス計算に前記レジスタを使用し、命令の完了時にレジスタ更新用のバッファに一旦書き込まれた演算結果及びロードデータを前記バッファから前記レジスタに書き込む演算実行部と、を備え、前記リザベーションステーションは、前記演算実行部に前記メモリアクセス命令を発行するときは、前記メモリアクセス命令が完了するまで、後続命令を前記演算実行部に発行することを待機し、前記演算実行部に前記演算命令を発行するときは、演算に使用するオペランドが揃ったことを検出した次のサイクルで、後続命令を前記演算実行部に発行する、演算処理装置が提供される。
一態様によれば、セキュリティ脆弱性を突いた攻撃に対して投機実行を抑止する場合に、性能劣化を抑えることができる。
演算処理装置のリザベーションステーション周辺の構成の一例を示すブロック図である。 一実施例における演算処理装置の構成の一例を示すブロック図である。 リオーダバッファと命令完了の一例を説明する図である。 エントリを選択する処理を説明するフローチャートである。 GUB_READY信号を生成する回路の一例を示す図である。 GPR_VALID信号を生成する回路の一例を示す図である。 READY信号を生成する回路の一例を示す図である。 リザベーションステーションの構成の一例を示す図である。 READY信号を生成する処理を説明するフローチャートである。
開示の演算処理装置及び演算処理装置の制御方法では、リザベーションステーションが、メモリアクセス命令と演算命令とを区別し、抑止対象をメモリアクセス命令に絞り、演算命令は投機的に実行可能とする。リザベーションステーションは、メモリアクセス命令が投機的であるか否かを、先行命令の状態に応じて判断する。演算実行部にメモリアクセス命令を発行するときは、先行命令の処理が完了するまで、後続命令を演算実行部に発行することを待機する。また、リザベーションステーションは、演算実行部に演算命令を発行するときは、演算に使用するオペランドが揃ったことを検出した次のサイクル以降で、後続命令を演算実行部に発行する。
以下に、開示の演算処理装置及び演算処理装置の制御方法の各実施例を図面と共に説明する。
図1は、演算処理装置のリザベーションステーション(RS:Reservation Station)周辺の構成の一例を示すブロック図である。リザベーションステーション11は、命令コードを蓄積するキューで、準備が整った命令コードから投機的に固定小数点演算器12、アドレス計算演算器13、及びデータキャッシュ14に発行する。
スペクタ(Spectre)と呼ばれる攻撃は、
(1)誤った経路の分岐先を実行させることで、プログラムの動作によって保護されているアクセス禁止領域のアドレスに対して、ハードウェアが投機的にメモリアクセスを行ってデータを読み出し、(2)読み出したデータをアドレスに変換してメモリアクセスを行う、という手順を含む。アクセス禁止領域は、例えばオペレーティングシステム(OS:Operating System)により設定されている。この投機的なメモリアクセスは、ハードウェアが投機的に実行した、本来は実行されない命令であるため、上記(1),(2)の手順は、最終的にはキャンセルされるが、上記(2)の手順におけるメモリアクセスの痕跡がキャッシュに残ってしまう。メモリアクセスの痕跡がデータキャッシュに残っていると、メモリアクセスの実行時間から上記(1)の手順で読み出したデータの内容を推定することができてしまう。
しかし、スペクタの如き攻撃への対策として投機実行を抑止すると、演算処理装置の性能が著しく劣化してしまう。そこで、一実施例では、上記(2)の手順におけるメモリアクセスの投機実行を、リザベーションステーション11で抑止するようにする。具体的には、上記(1)の手順におけるロード命令の完了、即ち、投機的なメモリアクセスでキャンセルされるか否かの判断を待つようにする。投機的なメモリアクセスがキャンセルされない場合は、上記(1)の手順も上記(2)の手順も実行されるべきロード命令である。これに対し、投機的なメモリアクセスがキャンセルされる場合は、上記(2)の手順におけるメモリアクセスを行う前に投機実行がキャンセルされるので、データキャッシュ14にメモリアクセスの痕跡が残らない。このため、メモリアクセスの痕跡を用いて、メモリアクセスの実行時間から上記(1)の手順で読み出したデータの内容を推定することはできない。
リザベーションステーション11は、命令コードがメモリアクセス命令であるか、或いは、演算命令であるかを区別し、抑止対象をメモリアクセス命令のみに絞り、演算命令等のメモリアクセス以外の命令は投機的に実行可能とする。また、リザベーションステーション11は、メモリアクセス命令が投機的であるか否かを、先行の命令の状態に応じて判断するため、先行の命令が完了(以下、「命令完了」とも言う)している場合は、投機的であるか否かの判断待ちの時間は発生しない。これにより、セキュリティ脆弱性に対する対策を取る場合に、演算処理装置の性能劣化を抑えることができる。言い換えると、セキュリティ脆弱性を突いた攻撃に対して投機実行を部分的に抑止する場合に、演算処理装置の性能劣化を抑えることができる。なお、命令完了の定義については後述する。
図2は、一実施例における演算処理装置の構成の一例を示すブロック図である。図2は、演算処理装置の一例であるプロセッサ1の、プロセッサコアを示す。プロセッサ1は、リザベーションステーション11、データキャッシュ14、命令キャッシュ15、命令バッファ16、デコード部17、レジスタ管理部18、リオーダバッファ19、及び演算実行部20を有する。演算実行部20は、固定小数点演算器12と、アドレス計算演算器13と、レジスタ部21とを含む。
命令キャッシュ15は、命令を格納し、命令バッファ16は、命令キャッシュ15に格納された命令を蓄積する。デコード部17は、命令バッファ16に蓄積された命令を解釈し(即ち、命令解釈を行い)、リザベーションステーション11への命令コードの投入を行う。つまり、デコード部17は、命令をデコードした結果である命令コードを出力する。リザベーションステーション11は、命令解釈された命令コードを蓄積する。
リザベーションステーション11は、演算実行部20内の固定小数点演算器12及びアドレス計算演算器13へ命令コードを投入するか否かを判断する。リザベーションステーション11は、本来のプログラムの命令順序(インオーダ)ではなく、演算実行部20へ投入できる命令コードから選択し固定小数点演算器12又はアドレス計算演算器13へアウトオブオーダで投入することができる。また、リザベーションステーション11は、後述するGUB番号及びGPR番号を演算実行部20内のレジスタ部21へ送る。GUB番号は、第1の番号の一例であり、GPR番号は、第2の番号の一例である。
演算実行部20のレジスタ部21は、固定小数点演算用の汎用レジスタであるGPR(General-Purpose Register)211と、演算速度の向上のために設けられた汎用レジスタ更新用のバッファであるGUB(GPR Update Buffer)212とを含む。演算実行部20は、リザベーションステーション11が選択して投入した命令コードが、演算命令であると演算にGPR211を使用し、メモリアクセス命令であるとアドレス計算にGPR211を使用する。GPR211は、GUB212を含んでも良い。演算結果やロードデータは、一旦GUB212に書き込まれ、命令の完了時にGUB212からGPR211に書き込まれる。演算命令の演算にGUB212を使用することはできるが、メモリアクセス命令のアドレス計算にGUB212を使用することはできない。
具体的には、演算命令の場合、GUB212若しくはGPR211のデータを読んで固定小数点演算器12の演算に用いる。メモリアクセス命令(ロード/ストア命令)の場合、GPR211のデータを読んでアドレス計算演算器13のアドレス計算に用い、計算したメモリアドレスをデータキャッシュ14に入力してデータを読み出す。データキャッシュ14から読み出したデータは、GUB212に一旦書き込まれ、命令の完了時にGUB212からGPR211に書き込まれる。なお、パイプラインの後でキャッシュミスしても、GPR211のデータさえ読めれば命令の投機実行は可能である。
固定小数点書き込みデータは、固定小数点演算器12からレジスタ部21へ送られる。固定小数点読み出しデータは、レジスタ部21から固定小数点演算器12へ送られると共に、アドレス計算演算器13へ送られる。データキャッシュ14からのロードデータは、レジスタ部21へ送られる。
デコード部17は、演算命令の書き込み先のGPR211に対して、GUB212を割り当てる。レジスタ管理部18は、この例ではデコード部17が割り当てたGUB212のUBA(Update Buffer Address)を記録するGPRT(GPR Pending Register Table)を有する。GUB212のUBAは、GUB番号の一例である。命令コードは、デコード部17からリザベーションステーション11に発行される際に、レジスタ管理部18内の、GPR番号で指定された書き込み先のGPR211に対応したGPRTのエントリにUBAを登録すると共に、演算に使用するGPR番号のGPR211に対応したGPRTのエントリに登録されたUBA(即ち、GUB番号)を読み出す。つまり、レジスタ管理部18のGPRTにGUB番号が登録されている場合、命令コードはGUB番号のGUB212を参照し、GUB番号が登録されていない場合、命令コードはGPR番号で指定されたGPR211を参照し、命令が実行される。また、命令の完了時にGUB212のデータはGPR211に書き込まれるため、レジスタ管理部18のGPRTのGUB番号は、セットした命令が完了した時に無効となる。このため、リザベーションステーション11は、保持しているGUB番号を破棄し、演算実行部20は、GPR番号のGPR211を参照して命令コードを実行する。
ロード命令が実行される際のパイプラインステージは、以下に説明するサイクルを含む。
デコード(D:Decode)サイクルでは、命令をデコードし、リザベーションステーション11へ送る。
プライオリティ(P:Priority)サイクルでは、リザベーションステーション11からアドレス計算演算器13へ投入する命令を決定する。命令がリザベーションステーション11に滞留している場合は、Pサイクルに移行しない。
バッファ(B:Buffer)サイクルでは、演算に必要なデータを決定する。Bサイクルでは、GPR211の読み出しも行う。
アドレス(A:Address)サイクルでは、アドレス計算を実行し、生成したアドレスをデータキャッシュ14へ送る。
タグリード(T:Tag read)サイクルでは、データキャッシュ14のタグを引く。
タグマッチ(M:tag Match)サイクルでは、データキャッシュ14のタグマッチを行い、キャッシュヒットの判定、或いは、キャッシュミスの判定を行う。判定結果がキャッシュミスであると、Aサイクルに戻る。なお、判定結果がキャッシュミスであると、Dサイクルに戻るようにしても良い。
リザルト(R:Result)サイクルでは、キャッシュヒットしたデータを、GUB212へ書き込む。
コミット(C:Commit)サイクルでは、命令完了の判定を行う。命令完了は、本来の命令順序に従うので、先行の命令が完了(コミット)していない場合は、Cサイクルに移行しない。
ライト(W:Write)サイクルでは、GUB212のデータをGPR211に書き込み、UBAを破棄する。
Bサイクルでは、GUB212又はGPR211を参照した結果を選択する。即値を使う場合や、演算器12,13やロード命令からのバイパスを行う場合等のデータ選択も、このBサイクルで行う。GUB212のデータは、命令完了の処理を行うWサイクルでGPR211に書き込まれる。空いたGUB212のエントリは、後続の命令に割り当てられるため、命令が完了した時点からそのGUB212のエントリを参照してはならない。このため、リザベーションステーション11は、各エントリに演算がGPR211を参照するか否かを示すGPR_VALID信号を保持している。GPR_VALID信号が「1」の場合は、BサイクルでGPR211の読み出しデータを選択する。一方、GPR_VALID信号が「0」の場合は、バイパスデータ又はGUB212のデータを選択する。GPR_VALID信号は、GPRTにUBAと共に保持されており、UBAの割り当て時に「0」がセットされ、命令の完了時に「1」がセットされる。リザベーションステーション11への登録は、GPRTの参照時にUBAと併せて行う。リザベーションステーション11でのGPR_VALID信号のセットは、GPRTと同様に命令の完了時に行う。
プロセッサ1は、アウトオブオーダで処理を行い、命令の実行は実際のプログラムの命令順序とは異なっても良いが、命令の完了は本来の命令順序に従ってインオーダで行われる。このため、命令の演算実行から命令の完了までは、即座に行われる場合も、先行の命令の命令実行を待つ場合等のように間が空く場合もある。
リオーダバッファ19は、アウトオブオーダで命令コードを投入しても良いが、命令コードを本来の順序に従ってインオーダで完了させる。リオーダバッファ19は、デコード部17からGPR番号と、レジスタ管理部18からGUB番号とを受け取る。また、リオーダバッファ19は、命令完了時に、GPR番号とGUB番号を演算実行部20へ送る。更に、リオーダバッファ19は、完了した命令の書き込み先UBAであるW_UBAをリザベーションステーション11へ送る。演算実行部20は、GUB番号のGUB212のデータを、GPR番号のGPR211に書き込む。この命令完了時の処理を行うことで、GPR211に演算やロードの結果が反映される。つまり、GPR211に演算やロードの結果が、ソフトウェアから観測可能に反映される。
図3は、リオーダバッファと命令完了の一例を説明する図である。図3に示す例では、説明の便宜上、リオーダバッファ19が4つのエントリを有する。
命令を完了して良いか否かの判断には、固定小数点演算器12からの演算終了通知やデータキャッシュ14からのメモリアクセス終了通知等の、終了通知を使う。リオーダバッファ19は、終了通知を受け取ったエントリを先頭から順に完了させて行く。図3中、終了通知を受け取ったエントリには「終了」と付す。リオーダバッファ19は、例えばFIFO(First-In-First-Out)キューで形成されており、先頭から順に完了処理を行う。図3の上部に示す例ExAでは、先頭が命令I1で命令I1は終了通知を受け取っているので、命令I1は完了できる。同時に複数の命令が完了できる場合は、命令I2は命令I1が終了しているので同時に完了できる。図3の上部に示す例ExBでは、命令I2は終了通知を受け取っているが、命令I1が終了していないので、命令I2は完了できない。図3の上部に示す例ExCでは、命令I1は終了しており先頭なので完了できるが、命令I3は命令I2が終了通知を受け取っていないので、命令I3自体は終了通知を受け取っているにも関わらず完了できない。なお、参考までに上記の例ExA,ExB,ExC夫々の次の状態を、図3の下部に示す。夫々完了した命令は、キューから追い出されるので、その分が繰り下がり先頭位置が示す命令が変わっている。例ExBの次の状態では命令が完了していないので、例ExBの状態と、例ExBの次の状態とは同じである。
一実施例では、リザベーションステーション11が各エントリに対して保持するGPR_VALID信号を使用してメモリアクセス命令の発行抑止を行う。リザベーションステーション11は、メモリアクセス命令だけではなく、演算命令も蓄積するが、メモリアクセス命令と演算命令を区別するために、各エントリに対してMEM_INSTフラグを保持している。各エントリに対するMEM_INSTフラグは、対応するエントリに対するGUB_READY信号が立って例えば「1」になっても、対応するエントリに対するREADY信号を有効、即ち、この例では「1」にしないために設けられるフラグである。各エントリに対するGUB_READY信号は、GUB212の対応するエントリからデータを読み出せるか否かを示す。エントリに対するMEM_INSTフラグが「1」の時は、当該エントリの命令がメモリアクセス命令であることを示す。デコード部17は、命令を解釈する際に、このMEM_INSTフラグをセットするか否か、即ち、「1」にセットするか、或いは、「0」にリセットするかを判断する。つまり、デコード部17は、命令がメモリアクセス命令であるか、或いは、演算命令であるかを区別するための情報の一例であるMEM_INSTフラグを、リザベーションステーション11にセットする。リザベーションステーション11の各エントリは、GPR_VALID信号とGUB_READY信号とを、演算に使用するソースオペランドの数だけ保持する。
例えば、この例では2つのソースオペランドを使用するものとするが、オペランドの数は2つに限定されず、1つであっても、例えば3つであっても良い。2つのソースオペランドSRC1, SRC2は、夫々UBAとGPR_VALID信号を保持しており、1つ目のソースオペランドSRC1はSRC1_UBAとSRC1_GPR_VALID信号、2つ目のソースオペランドSRC2はSRC2_UBAとSRC2_GPR_VALID信号を保持している。各UBAとGPR_VALID信号には、命令デコード時にレジスタ管理部18のGPRTを参照して得られた値を登録する。GPRTとリザベーションステーション11が保持するGPR_VALID信号のセットは、命令の完了時に行う。また、ソースオペランドSRC1は、GUB212のデータが読み出し可能であるか否かを示すSRC1_GUB_READY信号を保持する。ソースオペランドSRC2は、GUB212のデータが読み出し可能であるか否かを示すSRC2_GUB_READY信号を保持する。例えばSRC1_GUB_READY信号が立っていて「1」であると、対応するソースオペランドSRC1はGUB212から読み出し可能、即ち、先行の命令が演算を実行したことを示す。演算命令に関しては、このGUB_READY信号又はGPR_VALID信号が全てのソースオペランドに対して立っていて「1」であれば、先行の依存がある命令が全て実行済であり、演算に使用するソースオペランドが揃ったことが分かる。この場合、リザベーションステーション11は、命令コードを発行可能であることを示すREADY信号を立てて「1」とし、次サイクルで固定小数点演算器12又はアドレス計算演算器13に発行することができる。
図4は、リザベーションステーションのエントリを選択する処理を説明するフローチャートである。図4は、エントリ数が5である場合の例を示す。エントリを選択する方法は、特に限定されないが、この例ではバブルアップするようなキュー構成を前提として説明する。
この例では、リザベーションステーション11のエントリ0が最も古く、エントリ4が最も新しい。このため、エントリを選択する際の優先度は、エントリ0が最も高い。エントリ0が選ばれた場合は、エントリ1以降のエントリは全て1エントリ分移動する。投機的にエントリを選ぶことができるので、エントリ1以降のエントリが選択される場合がある。例えば、エントリ1が選ばれた場合は、エントリ2以降のエントリが移動する。このような規則に基づくので、エントリの選択は、図4に示すようになる。
図4において、最初にエントリ0が「1」であるREADY信号であるか否かの判定を行う(ステップS1)。ステップS1の判定結果がYESの場合は、エントリ0が固定小数点演算器12又はアドレス計算演算器13に投入される(ステップS2)。ステップS1の判定結果がNOの場合は、エントリ1が「1」であるREADY信号であるか否かの判定を行う(ステップS3)。ステップS3の判定結果がYESの場合は、エントリ1が固定小数点演算器12又はアドレス計算演算器13に投入される(ステップS4)。ステップS3の判定結果がNOの場合は、エントリ2が「1」であるREADY信号であるか否かの判定を行う(ステップS5)。ステップS5の判定結果がYESの場合は、エントリ2が固定小数点演算器12又はアドレス計算演算器13に投入される(ステップS6)。ステップS5の判定結果がNOの場合は、エントリ3が「1」であるREADY信号であるか否かの判定を行う(ステップS7)。ステップS7の判定結果がYESの場合は、エントリ3が固定小数点演算器12又はアドレス計算演算器13に投入される(ステップS8)。ステップS7の判定結果がNOの場合は、エントリ4が「1」であるREADY信号であるか否かの判定を行う(ステップS9)。
ステップS9の判定結果がYESの場合は、エントリ4が固定小数点演算器12又はアドレス計算演算器13に投入される(ステップS10)。ステップS9の判定結果がNOの場合は、全てのエントリに「1」であるREADY信号が無いため、固定小数点演算器12又はアドレス計算演算器13に命令を投入しない(ステップS11)。ステップS2,S4,S6,S8,S10,S11のいずれかの後、処理は終了する。
なお、バブルアップを実現するバブルアップ回路自体は周知であるため、バブルアップ回路の図示及び説明は省略する。
一実施例において、メモリアクセス命令のREADY信号を立てて「1」にするのに、GUB_ READY信号のみに依存するのではなく、GPR_VALID信号が立っていて「1」であるときにREADY信号を立てて「1」にする。これにより、メモリアクセス命令はGUB212を参照せず、GPR211を参照して演算を実行することが保証される。GUB212からGPR211への書き込みは、命令の完了後、即ち、GPR211を更新する命令が既に投機的でなく、キャンセルされないことが確定してから行われる。先行の命令が完了することなく投機実行がキャンセルされた場合は、GPR_VALID信号が立たず「0」であるため、スペクタの如き攻撃の上記(2)の手順におけるメモリアクセス命令はリザベーションステーション11から発行されることなくキャンセルされるため、投機的にデータキャッシュ14をアクセスをすること無く、データキャッシュ14に痕跡が残ることもない。一方、演算命令は、GUB_READY信号を使用して演算命令のREADY信号を立てて「1」にするので、上記制御による直接的な影響を受けず、投機的に命令を実行できる。
図5は、リザベーションステーションのGUB_ READY信号を生成する回路の一例を示す図である。図5では、ソースオペランドSRC1について、1つのエントリに対する回路を示すが、ソースオペランドSRC2についての回路も同様の構成を有する。従って、各ソースオペランドについて、リザベーションステーション11の各エントリに対して同様の回路が設けられる。図5に示す回路は、アンド(AND)回路51,52と、オア(OR)回路53,54と、一致検出回路55とを含む。AND回路51には、レジスタ管理部18のGPRTからのGUB_ READY信号と、デコード部17からこのエントリへのVALID信号とが入力される。AND回路52には、ENTRY_VALID信号と、OR回路54の出力とが入力される。OR回路53には、AND回路51,52の出力が入力される。一致検出回路55には、SRC1_UBAとT_UBAとが入力される。SRC1_UBAには、依存のある先行の命令の書き込み先UBAが入っている。データキャッシュ14からのT_UBAは、ロード命令の書き込み先UBAであり、Tサイクルの信号である。OR回路54には、一致検出回路55の出力SET_SRC1_GUB_READY信号と、OR回路53の出力SRC1_GUB_ READY信号とが入力される。
リザベーションステーション11に命令コードを登録するとき(Dサイクルでは)、デコード部17からこのエントリへのVALID信号が「1」になる。空いているエントリに命令コードを登録するので、リザベーションステーション11のエントリが埋まっていて有効であるか否かを示すENTRY_VALID信号は「0」になる。このため、AND回路52の出力は0になり、SRC1_GUB_ READY信号に「0」がセットされるか、或いは、「1」がセットされるかは、GPRTからのGUB_ READY信号によって決まる。ENTRY_VALID信号が「1」の場合はエントリが空いていないので、デコード部17からこのエントリへのVALID信号が「1」にならないことが保証され、AND回路51の出力は「0」になる。ENTRY_VALID信号が「1」のとき、SRC1_GPR_VALID信号にセットされる値はOR回路54の出力によって決まり、OR回路54の入力の一方はOR回路53の出力であるSRC1_GPR_VALID信号の値がループバックして入力されている。ここで、SRC1_GUB_READY信号が「1」の状態を保持しており、SRC1_GPR_VALID信号が「0」にリセットされるときは、ENTRY_VALID信号が「0」になるとき、即ち、命令コードがリザベーションステーション11から固定小数点演算器12又はアドレス計算演算器13に投入されたときである。ENTRY_VALID信号が「1」のときにSRC1_GUB_READY信号を「1」にするには、一致検出回路55の出力であるSET_SRC1_GUB_ READY信号が「1」であれば良い。SRC1_UBAには、依存のある先行の命令の書き込み先UBAが入っている。T_UBAは、ロード命令の書き込み先UBAであり、Tサイクルの信号である。Tサイクルの信号を使っている理由は、GUB212への書き込みから後続命令のGUB212からの読み出しのタイミングを最短にするためである。SRC1_UBAとT_UBAが一致した時に、ロード結果がGUB212へ書き込まれたことが分かり、SRC1_GUB_ READY信号に「1」がセットされる。なお、図5では図示を省略するが、演算命令もGUB212を更新するため、一致検出回路55は複数存在し得る。この場合は、全ての一致検出結果のオアを求める回路が一致検出回路55の後段に追加される。
図6は、リザベーションステーションのGPR_VALID信号を生成する回路の一例を示す図である。図6では、ソースオペランドSRC1について、1つのエントリに対する回路を示しているが、ソースオペランドSRC2についての回路も同様の構成を有する。従って、各ソースオペランドについて、リザベーションステーション11の各エントリに対して同様の回路が設けられる。図6に示す回路は、アンド(AND)回路61,62と、オア(OR)回路63,64と、一致検出回路65とを含む。AND回路61には、レジスタ管理部18のGPRTからのGPR_VALID信号と、デコード部17からこのエントリへのVALIDとが入力される。AND回路62には、ENTRY_VALID信号と、OR回路64の出力とが入力される。OR回路63には、AND回路61,62の出力が入力される。一致検出回路65には、SRC1_UBAと、リオーダバッファ19からの、完了した命令の書き込み先UBAであるW_UBAとが入力される。OR回路64には、一致検出回路65の出力SET_SRC1_GPR_VALID信号と、OR回路63の出力SRC1_GPR_VALID信号とが入力される。
リザベーションステーション11に命令コードを登録するとき(Dサイクルでは)、デコード部17からこのエントリへのVALID信号が「1」になる。空いているエントリに命令を登録するので、リザベーションステーション11のエントリが埋まっていて有効であるか否かを示す信号ENTRY_VALID信号は「0」になる。このため、AND回路62の出力は「0」になり、SRC1_GPR_VALID信号に「0」がセットされるか、或いは、「1」がセットされるかは、GPRTからのGPR_VALID信号によって決まる。ENTRY_VALID信号が「1」の場合は、エントリが空いていないので、デコード部17からこのエントリへのVALID信号が「1」にならないことが保証され、AND回路61の出力は「0」になる。ENTRY_VALID信号が「1」のとき、SRC1_GPR_VALID信号にセットされる値はOR回路64の出力によって決まり、OR回路64の入力の一方はOR回路63の出力であるSRC1_GPR_VALID信号の値がループバックして入力されている。ここで、SRC1_GPR_VALID信号が「1」の状態を保持しており、SRC1_GPR_VALIDが「0」にリセットされるときは、ENTRY_VALID信号が0になるとき、即ち、命令コードが固定小数点演算器12又はアドレス計算演算器13に投入されてリザベーションステーション11から抜けたときである。ENTRY_VALID信号が「1」のときにSRC1_GPR_VALID信号を「1」にするには、一致検出回路65の出力が「1」であれば良い。SRC1_UBAには、依存のある先行の命令の書き込み先UBAが入っている。この書き込み先UBAと、完了した命令の書き込み先UBAであるW_UBAとが一致した時に、依存元の命令が完了しSRC1_UBAが破棄され、GUBからGPRへの書き込みが行われたことが分かり、SRC1_GPR_VALID信号に1がセットされる。
図7は、リザベーションステーションのREADY信号を生成する回路の一例を示す図である。図7に示す回路は、1つのエントリに対して設けられ、インバータ回路71と、アンド(AND)回路72,73,76と、オア(OR)回路74,75とを含む。MEM_INSTフラグは、インバータ回路71を介してAND回路72,73に入力される。AND回路72には、SRC1_GUB_ READY信号も入力され、AND回路73には、SRC2_GUB_ READY信号も入力される。OR回路74には、AND回路72の出力と、SRC1_GPR_VALID信号とが入力される。OR回路75には、AND回路73の出力と、SRC2_GPR_VALIDとが入力される。SRC1_GPR_VALID信号は、演算がこのエントリのソースオペランドSRC1を格納するGPR番号のGPR211を参照するか否かを示す。SRC2_GPR_VALID信号は、演算がこのエントリのソースオペランドSRC2を格納するGPR番号のGPR211を参照するか否かを示す。AND回路76には、OR回路74,75の出力が入力される。AND回路76は、READY信号を出力する。
READY信号は、GPR211及びGUB212が読み出し可能でないと「1」にならない。SRC1_GUB_ READY信号とSRC2_GUB_ READY信号は、ソースオペランドSRC1とソースオペランドSRC2の依存元命令の演算結果がGUB212に格納されていて読み出せるか否かを示す。SRC1_GUB_READY信号は、このエントリのソースオペランドSRC1を格納するGUB番号のGUB212のデータを読み出せるか否かを示す。SRC2_GUB_READY信号は、このエントリのソースオペランドSRC2を格納するGUB番号のGUB212からデータを読み出せるか否かを示す。SRC1_GUB_READY信号及びSRC2_GUB_READY信号は、先行の命令が固定小数点演算器12、アドレス計算演算器13やデータキャッシュ14へ発行された際にUBAの一致検出によってセットされる。MEM_INSTフラグは、デコード部17が行った命令解釈により生成された信号がリザベーションステーション11に登録され、MEM_INSTフラグが「0」のときこのエントリの命令は演算命令であることを示す。MEM_INSTフラグは、インバータ回路71によって極性反転され、「1」がAND回路72,73に入力される。この場合は、AND回路72,73のもう一方の入力のSRC1_GUB_ READY信号とSRC2_GUB_ READY信号がAND回路72,73の結果として出力される。MEM_INSTフラグが「1」のとき、このエントリの命令はメモリアクセス命令である。この場合は、AND回路72,73の入力の一方が「0」になるため、出力は「0」になる。OR回路74では、AND回路72の出力とSRC1_GPR_VALID信号の値がオアされる、つまりOR回路74の出力はソースオペランドSRC1がGUB又はGPRにデータがあって読み出し可能であることを示す。OR回路75の出力も同様に、ソースオペランドSRC2がGUB又はGPRにデータがあって読み出し可能であることを示す。AND回路76では、ソースオペランドSRC1とソースオペランドSRC2のどちらも読み出し可能な時に出力が「1」になりREADY信号に「1」がセットされる。
一実施例では、MEM_INSTフラグを極性反転した信号とGUB_ READY信号をAND回路72,73にてアンドしている。これにより、メモリアクセス命令では常にAND回路72,73の出力が「0」になるため、必然的にGPR_VALID信号が「1」になるまでREADY信号が「1」にならない。
図8は、リザベーションステーションの構成の一例を示す図であり、図5、図6、及び図7の接続関係を示す図である。図8では説明の便宜上、デコード部17からの接続やその他信号の図示は省略する。図8は、説明の便宜上、10のエントリに対する回路部分を示すが、エントリの数は用途に応じて設定可能である。
回路85-0~85-9は、10のエントリ0~9に対して設けられ、夫々が図5に示す構成を有する。回路81は、各エントリのGUB_ READY信号を記憶するフリップフロップ(Flip-Flop)等の記憶素子を有する。回路81は、例えばエントリ「0」に対しては、回路85-0からのソースオペランドSRC1,SRC2についてのRS_0_SRC1/2_GUB_READY信号を記憶する。回路86-0~86-9は、10のエントリ0~9に対して設けられ、夫々が図6に示す構成を有する。回路82は、各エントリのGPR_VALID信号を記憶するフリップフロップ等の記憶素子を有する。回路82は、例えばエントリ0に対しては、回路86-0からのソースオペランドSRC1,SRC2についてのRS_0_SRC1/2_GPR_READY信号を記憶する。回路87-0~87-9は、10のエントリ0~9に対して設けられ、夫々が図7に示す構成を有する。回路83は、各エントリのREADY信号を記憶するフリップフロップ等の記憶素子を有する。回路83は、例えばエントリ0に対しては、回路87-0からのRS_0 _READY信号を記憶する。セレクタ回路84は、回路83が記憶するエントリ0~9に対するRS_0 _READY信号~RS_9 _READY信号のうち、「1」となった信号から古い順に選択してREADY信号として演算実行部20へ出力する。
図9は、READY信号を生成する処理を説明するフローチャートである。図9に示す処理は、図8に示すセレクタ回路84の動作に対応する。
最初に、メモリアクセス命令であるか否かを判定する(ステップS21)。メモリアクセス命令であると(ステップS21がYES)、ソースオペランドSRC1のGPR_VALID信号が立っているか否かを判定する(ステップS22)。ステップS22の判定結果がYESであると、ソースオペランドSRC2のGPR_VALID信号が立っているか否かを判定する(ステップS23)。ステップS23の判定結果がYESであると、対応するREADY信号を「1」(READY=1)にセットして(ステップS24)、処理は終了する。
一方、ソースオペランドSRC1のGPR_VALID信号が立っておらずステップS22の判定結果がNO、或いは、ソースオペランドSRC2のGPR_VALID信号が立っておらずステップS23の判定結果がNOであると、対応するREADY信号を「0」(READY=0)にセットして(ステップS25)、終了は終了する。
最初のメモリアクセス命令であるか否かの判定でメモリアクセス命令ではなく、演算命令であると、ステップS21の判定結果はNOである。この場合、ソースオペランドSRC1のGUB_ READY信号又はGPR_VALID信号が立っているか否かを判定する(ステップS26)。ステップS26の判定結果がYESであると、ソースオペランドSRC2のGUB_ READY信号又はGPR_VALID信号が立っているか否かを判定する(ステップS27)。ステップS27の判定結果がYESであると、対応するREADY信号を「1」(READY=1)にセットして(ステップS24)、処理は終了する。
ソースオペランドSRC1のGUB_READY信号とGPR_VALID信号がどちらも立っておらずステップS26の判定結果がNO、或いは、ソースオペランドSRC2のGUB_ READY信号とGPR_VALID信号がどちらも立っておらずステップS27の判定結果がNOであると、対応するREADY信号を「0」(READY=0)にセットして(ステップS25)、処理は終了する。
なお、図9の点線で囲ったステップS21~S23の処理により、スペクタの如き攻撃への対策として、上記(2)の手順におけるメモリアクセスの投機実行を、リザベーションステーション11で抑止することができる。具体的には、上記(1)の手順におけるロード命令の完了、即ち、投機的なアクセスでキャンセルされるか否かの判断を待つ。投機的なアクセスがキャンセルされる場合は、上記(2)の手順におけるメモリアクセスを行う前に実行がキャンセルされるので、データキャッシュ14にメモリアクセスの痕跡が残らない。
上記の例では、既存のGPR_VALID信号を使って一実施例の動作を実現しているが、GPR_VALID信号に相当する信号が存在しない場合でも、命令完了状態を見分けられるGPR_VALID信号相当の、ソースオペランドに対する依存元の命令の完了状態が見分けられる信号を追加して実現しても良い。
上記の実施例では、リザベーションステーションは、抑止対象をメモリアクセス命令に絞り、演算実行部にメモリアクセス命令を発行するときは、メモリアクセス命令が完了するまで、後続命令を演算実行部に発行することを待機する。また、リザベーションステーションは、演算実行部に演算命令を発行するときは、演算に使用するオペランドが揃ったことを検出した次のサイクルで、後続命令を演算実行部に発行することで、演算命令は投機的に実行可能とする。アドレス生成の依存元の命令の完了を待って演算実行部にメモリアクセス命令を発行するため、プロセッサの性能劣化を抑えると共に、投機実行を部分的に抑止することで、プロセッサのセキュリティ脆弱性に対するセキュリティ強度を上げることができる。
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
命令をデコードした結果である命令コードを出力するデコード部と、
前記命令コードを蓄積し、演算実行部へ投入できる命令コードから選択して投入するリザベーションステーションと、
投入された前記命令コードが演算命令の場合、演算に前記演算命令の書き込み先の演算用のレジスタを使用し、前記投入された前記命令コードがメモリアクセス命令である場合、アドレス計算に前記レジスタを使用し、命令の完了時にレジスタ更新用のバッファに一旦書き込まれた演算結果及びロードデータを前記バッファから前記レジスタに書き込む演算実行部と、
を備え、
前記リザベーションステーションは、
前記演算実行部に前記メモリアクセス命令を発行するときは、前記メモリアクセス命令が完了するまで、後続命令を前記演算実行部に発行することを待機し、
前記演算実行部に前記演算命令を発行するときは、演算に使用するオペランドが揃ったことを検出した次のサイクルで、後続命令を前記演算実行部に発行する、
ことを特徴とする、演算処理装置。
(付記2)
前記リザベーションステーションは、前記メモリアクセス命令が投機的であるか否かを、先行の命令の状態に応じて判断して、前記メモリアクセス命令が完了するまで、後続命令を前記演算実行部に発行することを待機することを特徴とする、付記1記載の演算処理装置。
(付記3)
前記デコード部は、
前記命令を解釈する際に、前記命令がメモリアクセス命令であるか、或いは、演算命令であるかを区別するための情報を、前記リザベーションステーションにセットし、
前記レジスタに対して前記バッファを割り当てることを特徴とする、付記1又は2記載の演算処理装置。
(付記4)
前記メモリアクセス命令は、前記バッファを参照せず、前記レジスタを参照して演算を実行し、前記バッファから前記レジスタへの書き込みは、命令の完了後に、当該命令が既に投機的でなくキャンセルされないことが確定してから行い、
先行の命令が完了することなく投機実行がキャンセルされた場合は、前記メモリアクセス命令は前記リザベーションステーションから発行されずにキャンセルされ、投機的なデータキャッシュへのアクセスを抑止する、
ことを特徴とする、付記1乃至3のいずれか1項記載の演算処理装置。
(付記5)
前記デコード部が前記レジスタに対して割り当てた前記バッファの第1の番号を記録するテーブルを有するレジスタ管理部と、
命令を本来の順序に従って完了させるリオーダバッファをと更に備え、
前記リオーダバッファは、前記デコード部から第2の番号を受け取り、前記レジスタ管理部から前記第1の番号を受け取り、命令完了時に前記演算実行部に前記第2の番号と前記第1の番号を送り、
前記演算実行部は、前記バッファのデータを前記レジスタに書き込み、命令完了時の処理を行うことで、前記レジスタに演算及びロードの結果を、ソフトウェアから観測可能に反映する、
ことを特徴とする、付記1乃至4のいずれか1項記載の演算処理装置。
(付記6)
前記演算実行部は、
前記演算命令の場合、前記レジスタのデータを読んで演算に用いる固定小数点演算器と、
前記メモリアクセス命令の場合、前記バッファのデータを読んで演算に用いるアドレス計算演算器と、
を有し、
前記アドレス計算演算器が計算したアドレスを入力してデータを読み出すデータキャッシュを更に備えたことを特徴とする、付記1乃至5のいずれか1項記載の演算処理装置。
(付記7)
前記リザベーションステーションが有する複数のエントリの各々は、演算が前記レジスタを参照するか否かを示す信号と、前記バッファの対応するエントリからデータを読み出せるか否かを示す信号とを、当該演算に使用するソースオペランドの数だけ保持することを特徴とする、付記1乃至6のいずれか1項記載の演算処理装置。
(付記8) デコード部とリザベーションステーションと演算実行部とを有する演算処理装置の制御方法であって、
前記デコード部が、命令をデコードした結果である命令コードを出力し、
前記リザベーションステーションが、命令を解釈した命令コードを蓄積し、前記演算実行部へ投入できる命令コードから選択して投入し、
前記演算実行部が、投入された前記命令コードが演算命令である場合、演算に前記演算命令の書き込み先の演算用のレジスタを使用し、前記投入された前記命令コードがメモリアクセス命令である場合、アドレス計算に前記レジスタを使用し、レジスタ更新用のバッファに一旦書き込まれた演算結果及びロードデータを命令の完了時に前記バッファから前記レジスタに書き込み、
前記リザベーションステーションが、前記演算実行部に前記メモリアクセス命令を発行するときは、前記メモリアクセス命令が完了するまで、後続命令を前記演算実行部に発行することを待機し、
前記リザベーションステーションが、前記演算実行部に前記演算命令を発行するときは、演算に使用するオペランドが揃ったことを検出した次のサイクルで、後続命令を前記演算実行部に発行する、
ことを特徴とする、演算処理装置の制御方法。
(付記9)
前記リザベーションステーションが、前記メモリアクセス命令が投機的であるか否かを、先行の命令の状態に応じて判断して、前記メモリアクセス命令が完了するまで、後続命令を前記演算実行部に発行することを特徴とする、付記8記載の演算処理装置の制御方法。
(付記10)
デコード部が、前記命令を解釈する際に、前記命令がメモリアクセス命令であるか、或いは、演算命令であるかを区別するための情報を、前記リザベーションステーションにセットし、
前記デコード部が、前記レジスタに対して前記バッファを割り当てることを特徴とする、付記8又は9記載の演算処理装置の制御方法。
(付記11)
前記メモリアクセス命令は、前記バッファを参照せず、前記レジスタを参照して演算を実行し、前記バッファから前記レジスタへの書き込みは、命令の完了後に、当該命令が既に投機的でなくキャンセルされないことが確定してから行い、
先行の命令が完了することなく投機実行がキャンセルされた場合は、前記メモリアクセス命令は前記リザベーションステーションから発行されずにキャンセルされ、投機的なデータキャッシュへのアクセスを抑止する、
ことを特徴とする、付記8乃至10のいずれか1項記載の演算処理装置の制御方法。
(付記12)
レジスタ管理部のテーブルが、デコード部が前記レジスタに対して割り当てた前記バッファの第1の番号を記録し、
リオーダバッファが、命令を本来の順序に従って完了し、
前記リオーダバッファが、前記デコード部から第2の番号を受け取り、前記レジスタ管理部から前記第1の番号を受け取り、命令完了時に前記演算実行部に前記第2の番号と前記第1の番号を送り、
前記演算実行部が、前記バッファのデータを前記レジスタに書き込み、命令完了時の処理を行うことで、前記レジスタに演算及びロードの結果を、ソフトウェアから観測可能に反映する、
ことを特徴とする、付記8乃至11のいずれか1項記載の演算処理装置の制御方法。
(付記13)
前記演算実行部の固定小数点演算器が、前記演算命令の場合、前記レジスタのデータを読んで演算に用い、
前記演算実行部のアドレス計算演算部が、前記メモリアクセス命令の場合、前記バッファのデータを読んで演算に用い、
データキャッシュに対して、前記アドレス計算演算器が計算したアドレスを入力してデータを読み出すことを特徴とする、付記8乃至12のいずれか1項記載の演算処理装置の制御方法。
(付記14)
前記リザベーションステーションが有する複数のエントリの各々が、演算が前記レジスタを参照するか否かを示す信号と、前記バッファの対応するエントリからデータを読み出せるか否かを示す信号とを、当該演算に使用するソースオペランドの数だけ保持することを特徴とする、付記8乃至13のいずれか1項記載の演算処理装置の制御方法。
以上、開示の演算処理装置及び演算処理装置の制御方法を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
1 プロセッサ
11 リザベーションステーション
12 固定小数点演算器
13 アドレス計算演算器
14 データキャッシュ
15 命令キャッシュ
16 命令バッファ
17 デコード部
18 レジスタ管理部
19 リオーダバッファ
20 演算実行部
21 レジスタ部
211 GPR
212 GUB

Claims (6)

  1. 命令をデコードした結果である命令コードを出力するデコード部と、
    前記命令コードを蓄積し、演算実行部へ投入できる命令コードから選択して投入するリザベーションステーションと、
    投入された前記命令コードが演算命令である場合、演算に前記演算命令の書き込み先の演算用のレジスタを使用し、前記投入された前記命令コードがメモリアクセス命令である場合、アドレス計算に前記レジスタを使用し、命令の完了時にレジスタ更新用のバッファに一旦書き込まれた演算結果及びロードデータを前記バッファから前記レジスタに書き込む演算実行部と、
    を備え、
    前記リザベーションステーションは、
    前記演算実行部に前記メモリアクセス命令を発行するときは、前記メモリアクセス命令が完了するまで、後続命令を前記演算実行部に発行することを待機し、
    前記演算実行部に前記演算命令を発行するときは、演算に使用するオペランドが揃ったことを検出した次のサイクルで、後続命令を前記演算実行部に発行する、
    ことを特徴とする、演算処理装置。
  2. 前記リザベーションステーションは、前記メモリアクセス命令が投機的であるか否かを、先行の命令の状態に応じて判断して、前記メモリアクセス命令が完了するまで、後続命令を前記演算実行部に発行することを待機することを特徴とする、請求項1記載の演算処理装置。
  3. 前記デコード部は、
    前記命令を解釈する際に、前記命令がメモリアクセス命令であるか、或いは、演算命令であるかを区別するための情報を、前記リザベーションステーションにセットし、
    前記レジスタに対して前記バッファを割り当てることを特徴とする、請求項1又は2記載の演算処理装置。
  4. 前記メモリアクセス命令は、前記バッファを参照せず、前記レジスタを参照して演算を実行し、前記バッファから前記レジスタへの書き込みは、命令の完了後に、当該命令が既に投機的でなくキャンセルされないことが確定してから行い、
    先行の命令が完了することなく投機実行がキャンセルされた場合は、前記メモリアクセス命令は前記リザベーションステーションから発行されずにキャンセルされ、投機的なデータキャッシュへのアクセスを抑止する、
    ことを特徴とする、請求項1乃至3のいずれか1項記載の演算処理装置。
  5. 前記デコード部が前記レジスタに対して割り当てた前記バッファの第1の番号を記録するテーブルを有するレジスタ管理部と、
    命令を本来の順序に従って完了させるリオーダバッファをと更に備え、
    前記リオーダバッファは、前記デコード部から第2の番号を受け取り、前記レジスタ管理部から前記第1の番号を受け取り、命令完了時に前記演算実行部に前記第2の番号と前記第1の番号を送り、
    前記演算実行部は、前記バッファのデータを前記レジスタに書き込み、命令完了時の処理を行うことで、前記レジスタに演算及びロードの結果を、ソフトウェアから観測可能に反映する、
    ことを特徴とする、請求項1乃至4のいずれか1項記載の演算処理装置。
  6. デコード部とリザベーションステーションと演算実行部とを有する演算処理装置の制御方法であって、
    前記デコード部が、命令をデコードした結果である命令コードを出力し、
    前記リザベーションステーションが、命令を解釈した命令コードを蓄積し、前記演算実行部へ投入できる命令コードから選択して投入し、
    前記演算実行部が、投入された前記命令コードが演算命令である場合、演算に前記演算命令の書き込み先の演算用のレジスタを使用し、前記投入された前記命令コードがメモリアクセス命令である場合、アドレス計算に前記レジスタを使用し、レジスタ更新用のバッファに一旦書き込まれた演算結果及びロードデータを命令の完了時に前記バッファから前記レジスタに書き込み、
    前記リザベーションステーションが、前記演算実行部に前記メモリアクセス命令を発行するときは、前記メモリアクセス命令が完了するまで、後続命令を前記演算実行部に発行することを待機し、
    前記リザベーションステーションが、前記演算実行部に前記演算命令を発行するときは、演算に使用するオペランドが揃ったことを検出した次のサイクルで、後続命令を前記演算実行部に発行する、
    ことを特徴とする、演算処理装置の制御方法。
JP2018109332A 2018-06-07 2018-06-07 演算処理装置及び演算処理装置の制御方法 Active JP7020304B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018109332A JP7020304B2 (ja) 2018-06-07 2018-06-07 演算処理装置及び演算処理装置の制御方法
US16/423,898 US11055101B2 (en) 2018-06-07 2019-05-28 Processing apparatus and controlling method for processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018109332A JP7020304B2 (ja) 2018-06-07 2018-06-07 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2019212152A JP2019212152A (ja) 2019-12-12
JP7020304B2 true JP7020304B2 (ja) 2022-02-16

Family

ID=68764616

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018109332A Active JP7020304B2 (ja) 2018-06-07 2018-06-07 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US11055101B2 (ja)
JP (1) JP7020304B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6941972B2 (ja) 2017-05-16 2021-09-29 Tdk株式会社 磁気センサ
US11119784B2 (en) * 2018-06-29 2021-09-14 Intel Corporation Efficient mitigation of side-channel based attacks against speculative execution processing architectures

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018045370A (ja) 2016-09-13 2018-03-22 富士通株式会社 演算処理装置および演算処理装置の制御方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2819733B2 (ja) 1990-02-16 1998-11-05 日本電気株式会社 情報処理装置
US5553256A (en) * 1994-02-28 1996-09-03 Intel Corporation Apparatus for pipeline streamlining where resources are immediate or certainly retired
JP2000112754A (ja) * 1998-10-06 2000-04-21 Mitsubishi Electric Corp データ処理装置
JP2000163265A (ja) * 1998-11-30 2000-06-16 Nec Corp 命令発行回路
JP3808013B2 (ja) * 2002-07-05 2006-08-09 富士通株式会社 命令実行装置
US7590826B2 (en) * 2006-11-06 2009-09-15 Arm Limited Speculative data value usage
JP5104863B2 (ja) * 2007-06-20 2012-12-19 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP6520416B2 (ja) * 2015-06-02 2019-05-29 富士通株式会社 演算処理装置および演算処理装置の処理方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018045370A (ja) 2016-09-13 2018-03-22 富士通株式会社 演算処理装置および演算処理装置の制御方法

Also Published As

Publication number Publication date
JP2019212152A (ja) 2019-12-12
US20190377581A1 (en) 2019-12-12
US11055101B2 (en) 2021-07-06

Similar Documents

Publication Publication Date Title
JP6011194B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP2875909B2 (ja) 並列演算処理装置
US9135005B2 (en) History and alignment based cracking for store multiple instructions for optimizing operand store compare penalties
JP2005025788A (ja) コンピュータシステム
US10853072B2 (en) Arithmetic processing apparatus and method of controlling arithmetic processing apparatus
JP2003519833A (ja) 依存性連鎖の発行および再発行が可能なスケジューラ
US10073789B2 (en) Method for load instruction speculation past older store instructions
JP7064134B2 (ja) 演算処理装置及び演算処理装置の制御方法
EP0651331A1 (en) A write buffer for a superpipelined, superscalar microprocessor
KR20190051036A (ko) 벡터 명령들에 대한 요소간 어드레스 해저드들의 처리
JP7020304B2 (ja) 演算処理装置及び演算処理装置の制御方法
US20030126409A1 (en) Store sets poison propagation
JP4243271B2 (ja) データ処理装置およびデータ処理方法
US7213130B2 (en) Instruction rollback processor system, an instruction rollback method and an instruction rollback program
JP7064135B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP3683439B2 (ja) 分岐予測を抑止する情報処理装置および方法
US10831482B2 (en) Arithmetic processing apparatus and control method for arithmetic processing apparatus
JP3741945B2 (ja) 命令フェッチ制御装置
JP7100258B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP5104862B2 (ja) 命令実行制御装置及び命令実行制御方法
JP5696210B2 (ja) プロセッサ及びその命令処理方法
JP5093237B2 (ja) 命令処理装置
JP2021168036A (ja) 演算処理装置
JP7487535B2 (ja) 演算処理装置
US11663014B2 (en) Speculatively executing instructions that follow a status updating instruction

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211216

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220117

R150 Certificate of patent or registration of utility model

Ref document number: 7020304

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150