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

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

Info

Publication number
JP7014965B2
JP7014965B2 JP2018108952A JP2018108952A JP7014965B2 JP 7014965 B2 JP7014965 B2 JP 7014965B2 JP 2018108952 A JP2018108952 A JP 2018108952A JP 2018108952 A JP2018108952 A JP 2018108952A JP 7014965 B2 JP7014965 B2 JP 7014965B2
Authority
JP
Japan
Prior art keywords
cache
speculative
instruction
memory access
entry
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
JP2018108952A
Other languages
English (en)
Other versions
JP2019212129A (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 JP2018108952A priority Critical patent/JP7014965B2/ja
Priority to US16/430,487 priority patent/US11119930B2/en
Publication of JP2019212129A publication Critical patent/JP2019212129A/ja
Application granted granted Critical
Publication of JP7014965B2 publication Critical patent/JP7014965B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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, 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/507Control mechanisms for virtual memory, cache or TLB using speculative control

Description

本発明は,演算処理装置及び演算処理装置の制御方法に関する。
演算処理装置は、プロセッサまたはCPU(Central Processing Unit)チップである。以下、演算処理装置をプロセッサと称する。プロセッサは、プログラムの命令を効率的に実行するために、様々な構成上または制御上の特徴を有する。例えば、分岐命令の分岐条件が確定する前に分岐予測先の命令を投機的に実行する構成、プログラム順ではないアウトオブオーダーで命令を実行する構成などである。
一方、プロセッサは、ユーザのプログラムを実行するユーザモードに加えて、OS(Operating System)のプログラムを実行する特権モードまたはOSモード(カーネルモード)を有する。プロテクトされたメモリ領域に対しては、特権モードでしかアクセスできず、ユーザモードの命令はアクセスすることが禁じられる。ユーザモードの命令が上記プロテクトされたメモリ領域にアクセスしようとすると、プロセッサは、不正なメモリアクセスを検出してその命令の実行をトラップし、命令の実行をキャンセルする。このような構成を有することで、プロテクトされているメモリ領域内のデータが不正にアクセスされることを防止している。
プロセッサの投機実行やキャッシュメモリの制御などについては、以下の特許文献に記載されている。
特開2007-11689号公報 特開2007-334564号公報 国際公開第2005/103908号
Jann Horn, "Reading privileged memory with a side-channel", [online], [searched on May 9, 2018], internet <https://googleprojectzero.blogspot.jp/2018/01/reading-privileged-memory-with-side.html?m=1>
しかしながら、分岐命令の分岐条件が確定する前に、プログラム内に不正に追加されたロード命令が投機的に実行され、プロテクトされているメモリ領域内の秘密の値が読み出されるリスクがある。そして、その後、秘密の値をアドレスとしてロード命令が投機的に実行されてしまうことが考えられる。
上記の場合、最初にキャッシュメモリをフラッシュしておくと、2番目の秘密の値をアドレスとするロード命令の実行により、キャッシュメモリ内の秘密の値をアドレスとするキャッシュラインにメモリから読み出されたデータが登録され、他のキャッシュラインはデータ未登録のままになる。そして、分岐命令の分岐条件が確定した後に、アドレスをスキャンしながらロード命令を実行しそれぞれのレイテンシを測定すると、秘密の値をアドレスとするロード命令のレイテンシが他のアドレスより短くなる。その結果、秘密の値を不正に獲得できる。
上記のようなプロセッサの脆弱性を回避するためには、例えば、分岐命令の分岐先未確定中に投機的に実行されるメモリアクセス命令(ロード命令)を抑止することが考えられる。
しかし、分岐先未確定中に分岐予測先のメモリアクセス命令の投機的実行を抑止すると、分岐確定まで長い時間を要する場合、不正ではないメモリアクセス命令の投機実行も抑止され、プロセッサの著しい性能低下を招く。
そこで,本実施の形態の第1の側面の目的は,プロセッサの性能低下を回避し、しかし、プロセッサのセキュリティの強化を図る演算処理装置及び演算処理装置の制御方法を提供することにある。
本実施の形態の第1の側面は,命令を発行する命令発行部と、複数のキャッシュエントリを有するキャッシュデータメモリ及びキャッシュタグと、前記命令発行部から発行されたメモリアクセス命令に応答して、前記メモリアクセス命令のアドレスに基づくキャッシュヒット判定を行い、前記キャッシュヒット判定がキャッシュミスの場合にメモリ側にメモリアクセス要求を発行するキャッシュ制御部とを有する、キャッシュユニットとを有し、
前記キャッシュ制御部は、(1)前記命令発行部から発行された、投機的実行を示す投機アクセスフラグと分岐命令の識別子が付加された投機的第1のメモリアクセス命令に応答して、前記メモリアクセス要求を発行したとき、前記メモリアクセス要求により取得したデータを前記キャッシュデータメモリに登録し、前記投機的第1のメモリアクセス命令に付加された前記投機アクセスフラグの投機的実行に基づいて、投機的メモリアクセス命令の実行によりキャッシュ登録されたことを示す仮登録状態の仮登録情報を前記キャッシュタグに登録し、(2)前記投機的第1のメモリアクセス命令の後に発行され、前記投機的第1のメモリアクセス命令と同じアドレス宛の第2のメモリアクセス命令に応答して、前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、投機エントリキャッシュミスと判定して前記メモリアクセス要求を発行する、演算処理装置である。
第1の側面によれば,プロセッサの性能低下を回避しつつ、プロセッサのセキュリティの強化を図ることができる。
プロセッサの脆弱性の一例を説明する図である。 本実施の形態のプロセッサを搭載する情報処理装置の概略図である。 本実施の形態におけるプロセッサの構成例を示す図である。 命令発行部とL1キャッシュ制御部とL2キャッシュ制御部の概略構成例を示す図である。 本実施の形態における命令デコーダの構成例を示す図である。 本実施の形態におけるシングルコアの場合のL1、L2キャッシュ制御部の構成を示す図である。 命令発行部がL1キャッシュ制御部に発行する命令について説明する図である。 L1キャッシュ制御部の動作を示すフローチャート図である。 投機エントリヒット判定部の論理回路の第1の例を示す図である。 制御1の動作を示すシーケンスチャートの図である。 制御2の動作を示すシーケンスチャートの図である。 制御3の動作を示すシーケンスチャートの図である。 L1キャッシュ制御部の制御4のフローチャート図である。 L1キャッシュ制御部の制御4のシーケンスチャート図である。 シングルコアの場合における投機エントリヒット判定部の第2の例である。 マルチコアの場合のL1、L2キャッシュ制御部の構成を示す図である。 マルチコアの場合のL2キャッシュでのL2キャッシュヒット判定と、投機エントリキャッシュヒット判定のフローチャート図である。 コア1から投機実行されるメモリアクセス命令によりデータ登録要求が発行された場合の種々のL2キャッシュタグの状態での、投機エントリキャッシュヒット判定を示す図である。 マルチコアの場合のL1,L2キャッシュでの処理例Aのシーケンスを示す図である。 マルチコアの場合のL1,L2キャッシュでの処理例Bのシーケンスを示す図である。 マルチコアの場合のL1,L2キャッシュでの処理例C-1のシーケンスを示す図である。 マルチコアの場合のL1,L2キャッシュでの処理例C-2のシーケンスを示す図である。 マルチコアの場合のL1,L2キャッシュでの処理例Dのシーケンスを示す図である。 マルチコアの場合における分岐確定処理のフローチャート図である。
図1は、プロセッサの脆弱性の一例を説明する図である。図1には、プロセッサCPUと、メインメモリM_MEMとが示される。また、図1には、プロセッサCPUが実行する命令列の例が示される。
この命令列の例は、不正なプログラムの一つの例であり、各命令の内容は以下のとおりである。
JMP C //分岐先Cに分岐する分岐命令//
B LOAD1 R0 [秘密値格納のアドレス] //秘密値が格納されたアドレスでロードし
レジスタR0に秘密値を格納//
A LOAD2 *[100+R0] //レジスタR0内のアドレス(秘密値)でロードする//
上記の命令列には、不正なロード命令“LOAD1”“LOAD2”が追加されている。不正なプログラムは、最初にキャッシュメモリをクリアしておき(S1)、特権モード(OSモード)に遷移する。そして、プロセッサが、特権モードで、分岐命令JMP Cを実行するが、分岐命令の分岐先Cが確定する前に、分岐予測先Bのロード命令LOAD1を投機的に実行(投機実行)する(S2)。この分岐予測先Bは分岐予測情報として不正に登録されていて、分岐命令の正しい分岐先はCであるとする。
プロセッサが、この誤った分岐予測先Bのロード命令LOAD1を投機的に実行すると(S2)、特権モードでしかアクセスが許可されていないプロテクトされたメモリ領域M0内の秘密値Xを読み出し、レジスタR0に格納する。更に、秘密値Xをアクセス許可領域M1の先頭アドレス「100」に加算し(S3)、次のロード命令A LOAD2を投機的に実行すると、先頭アドレス[100]にレジスタR0内の秘密値Xを加算したアドレス100+Xに対するロード命令LOAD2が、ユーザモードでアクセスが許可されているメモリ領域M1内のアドレス100+XのデータDA1を読み出す(S4)。この結果、プロセッサのキャッシュメモリCACHE内のアドレス100+XのエントリにデータDA1が登録される(S5)。
その後、プロセッサが、アドレスを変更しながら図示しないロード命令LOAD3を繰り返すと(S6)、データDA1が登録されているアドレス100+Xへのロード命令のアクセスレイテンシが他のアドレス100よりも短くなり、アドレス100+Xの内容を知ることができる。これにより、秘密値Xのセキュリティが低下する。このロード命令LOAD3は投機実行でも非投機実行でもよい。
2つのロード命令LOAD1, LOAD2が投機的に実行された後、分岐命令JMP Cの実行が完了して分岐先が確定すると、分岐予測先Bが分岐予測ミスであったことが判明する。その結果、プロセッサ内のパイプライン回路で投機的に実行されたロード命令LOAD1, LOAD2がクリアされ、レジスタR0(投機実行では命令未完了故、レジスタR0はリネーミングレジスタである)の内容がクリアされる。しかし、キャッシュメモリはクリアされないため、キャッシュメモリのレイテンシに基づいて秘密値Xを獲得することができる。
このように、分岐命令JMPの分岐先が確定する前に、誤った分岐予測先へのロード命令LOAD1,LOAD2が実行されることと、LOAD2によるキャッシュ登録状態が維持されることが、プロセッサの脆弱性の原因の一つである。
[本実施の形態のプロセッサ及び情報処理装置]
図2は、本実施の形態のプロセッサを搭載する情報処理装置の概略図である。情報処理装置、HPC:High Performance Computerやスーパーコンピュータは、複数のノードそれぞれに、プロセッサCPU(Central Processing Unit)と、メインメモリM_MEMと、入出力部I/Oとを有する。各ノードのプロセッサCPUは、プロセッサ内に設けたインターコネクトを介して相互にパケット通信する。
演算処理装置であるプロセッサCPUは、複数のコアCORE_0~CORE_nと、複数のコアで共有されるラストレベルキャッシュLL$(Last Level Cache)と、メモリへのアクセスを制御するメモリアクセス制御部MACと、他のノードのプロセッサとの間のパケット通信を制御するインターコネクトI_CNCTとを有する。各コアCOREは、後述するとおり、命令発行部と、演算器と、L1キャッシュとを有する。そして、図2のラストレベルキャッシュLL$は、以下の実施の形態例では2次キャッシュ、第2レベルキャッシュまたはL2キャッシュ、とする。
図3は、本実施の形態におけるプロセッサの構成例を示す図である。図3のプロセッサは、命令発行部として、命令フェッチアドレス生成器I_F_ADD_GENと、L1命令キャッシュL1_ICACHEと、L2命令キャッシュL2_ICACHEと、命令バッファI_BUFと、命令デコーダI_DECと、複数の命令を演算器に発行する命令発行部である、リザベーションステーションRSA, RSE, RSFを有する。また、命令発行部は、分岐命令用リザベーションステーションRSBRと、コミットスタックエントリCSEを有する。
更に、プロセッサは、複数の演算器として、ストレージユニットSU、固定小数点演算器FX_EXC、浮動小数点演算器FL_EXCを有する。これらの演算器は、それぞれ単一または複数個を有する。
ストレージユニットSUは、アドレス計算するための加減算回路を含むオペランドアドレス生成器OP_ADD_GENと、1次データキャッシュL1_DCACHEを有する。1次データキャッシュは、キャッシュメモリに加えて、キャッシュメモリに対する制御を行うL1キャッシュ制御部L1$_CNTを有する。
また、固定小数点演算器FX_EXC、浮動小数点演算器FL_EXCは、例えば、加減算回路と論理演算器と乗算器などを有する。浮動小数点演算器は、例えば、SIMD(Single Instruction Multiple Data)演算ができるように、SIMD幅に対応した数の演算器を有する。プロセッサは、これらの演算器の処理結果を格納する固定小数点用レジスタファイルFX_REGと、浮動小数点用レジスタファイルFL_REGを有する。これらのレジスタファイルは、複数のレジスタを有し、その一部は命令完了前に処理結果が格納されるリネーミングレジスタと、命令完了時に処理結果が格納されるアーキテクチャレジスタである。アーキテクチャレジスタは、ソフトウエアからアクセス可能なレジスタであり、汎用レジスタである。
以上が、プロセッサ内のコアの構成である。プロセッサは、更に、複数のコアで共有されるL2キャッシュL2$を有し、図示しないメモリコントローラを介してメインメモリM_MEMに接続される。また、L2命令キャッシュL2_ICACHEもメモリコントローラを介してメインメモリM_MEMに接続される。L2キャッシュL2$は、前述のラストレベルキャッシュである。
プロセッサ全体の構成について、命令の処理の流れに沿って以下説明する。命令フェッチアドレス生成器I_F_ADD_GENがフェッチアドレスを生成し、プログラム内の実行順に(インオーダーで)、1次命令キャッシュL1_ICACHEからフェッチ命令を一旦命令バッファI_BUFに格納する。そして、命令デコーダI_DECが、命令バッファ内のフェッチ命令をインオーダーで入力しデコードし、実行に必要な情報を付加した実行可能命令(実行命令)を生成する。
次に、命令デコーダで生成された実行命令は、インオーダーで、リザベーションステーションと呼ばれるキュー構造のストレージにキューインされ蓄積される。リザベーションステーションは、実行命令をキューに蓄積する実行キューであり、命令を実行する演算器毎に設けられる。
リザベーションステーションは、例えば、L1データキャッシュL1$を含むストレージユニットSUに設けられた、RSA(Reservation Station for Address generation)と、固定小数点演算器FX_EXCに設けられたRSE(Reservation Station for Execution)と、浮動小数点演算器FL_EXCに設けられたRSF(Reservation Station for Floating point)とを有する。さらに、分岐予測ユニットBR_PRDに対応するRSBR(Reservation Station for Branch)を有する。
以下、リザベーションステーションは、適宜、省略してRSと称する。
そして、各RSにキューインされた実行命令は、命令実行に必要な入力オペランドが前の命令の演算処理の完了処理により汎用レジスタファイルから読み出し可能であるか否か(リードアフターライト(RAW)制約が満たされるか否か)や、演算器の回路資源を使用できるか否かなど、命令の実行条件が整ったものから、順不同で(アウトオブオーダーで)演算器に発行され演算器で実行される。
一方、命令デコーダI_DECは、フェッチ命令をデコードして生成した実行命令に、そのプログラム内の実行順に命令識別子(Instruction Identification: IID)を割り振り、実行命令をインオーダーでコミットスタックエントリCSE(Commit Stack Entry、以下CSEと称する)に送信する。CSEは、送信されてきた実行命令をインオーダーで格納するキュー構造のストレージと、演算器のパイプライン回路からの命令の処理完了報告に応答してキュー内の情報等に基づき各命令のコミット処理(完了処理)を行う命令コミット処理ユニットとを有する。したがって、CSEは命令の完了処理を行う完了処理回路(完了処理部)である。
実行命令は、CSE内のキューにインオーダーで格納され、各演算器からの命令の処理完了報告を待つ。そして、上記したとおり、各RSから実行命令がアウトオブオーダーで演算器に送信され、演算器により実行される。その後、命令の処理完了報告がCSEに送られると、CSEの命令コミット処理ユニットが、キューに格納された処理完了報告待ちの命令の中から処理完了報告に対応する実行命令をインオーダーで完了処理し、レジスタなどの回路資源の更新を行う。CSEは、完了処理でプログラムカウンタPCをインクリメントする。
分岐処理用のRSBRにキューインされた分岐命令は、分岐予測ユニットBR_PRDによって分岐予測され、予測結果に基づいて命令フェッチアドレス生成器I_F_ADD_GENが分岐先アドレスを生成する。その結果、分岐予測に基づく命令が、命令キャッシュから読み出され、命令バッファ、命令デコーダを経由して、演算器により投機的に実行される。RSBRは、分岐命令をインオーダーで実行する。但し、分岐命令の分岐先が確定する前に、分岐先を予測し、予測分岐先の命令を投機的に実行することが行われる。分岐予測が正しければ処理効率が上がり、一方、誤りであれば投機実行した命令はパイプライン内でキャンセルされるため処理効率が下がる。
[L1キャッシュ制御部の概略構成と動作]
図4は、命令発行部とL1キャッシュ制御部とL2キャッシュ制御部の概略構成例を示す図である。命令発行部I_ISSが発行するメモリアクセス命令の処理の概略を以下説明する。
命令発行部I_ISSのRSAは、メモリアクセス命令MA_INSTをL1キャッシュのL1キャッシュ制御部L1$_CNTに発行する。ここでは、メモリアクセス命令は例えばロード命令とする。発行されたメモリアクセス命令は、一旦フェッチポートF_PORTに格納される。フェッチポート内のメモリアクセス命令がまたはそれに対応するメモリアクセス要求MA_RQが、L1キャッシュ制御部のパイプラインに投入(入力)されると、まず、L1キャッシュタグL1$_TAGを検索してキャッシュヒット判定が行われる。ここでキャッシュヒットすると、L1キャッシュデータメモリL1$_D_RAM内のデータがデータ応答DATA_RSPとして命令発行部に返信される。このデータ応答のデータは、前述のリネーミングレジスタまたhアーキテクチャレジスタに格納される。
一方、キャッシュミスL1$_MISSすると、L1キャッシュに要求されたデータを登録することが必要になる。そのために、まずデータ登録要求バッファDA_RQ_BUFが確保される。データ登録要求バッファには、メモリアクセス要求MA_RQの情報が格納される。もしデータ登録要求バッファを確保できない場合、メモリアクセス要求MA_RQはフェッチポートF_PORTに差し戻され、メモリアクセス要求はフェッチポート内に滞留する。
データ登録要求バッファが確保できると、L1キャッシュ制御部は、L2キャッシュのL2キャッシュ制御部L2$_CNTに、データ登録要求DA_RQを発行する。これに応答して、L2キャッシュ制御部は、前述のL1キャッシュ制御部と同様の制御(キャッシュ判定、キャッシュヒットの場合のデータ応答、キャッシュミスの場合のメインメモリへのデータ登録要求(メモリアクセス要求)等)を実行する。
やがて、L2キャッシュ制御部は、データ応答DATA_RSPをL1キャッシュ制御部に送信する。それに応答して、L1キャッシュ制御部は、L1キャッシュデータメモリL1$_D_RAMとL1キャッシュタグL1$_TAGにデータ応答のデータをキャッシュ登録する。そして、L1キャッシュ制御部は、L1キャッシュデータメモリL1$_D_RAMにキャッシュ登録したデータのデータ応答を出力する。
尚、後述するとおり、L1キャッシュ制御部は、L2キャッシュ制御部からデータ応答を受信すると、データ応答のデータをL1キャッシュデータメモリL1$_D_RAMとL1キャッシュタグL1$_TAGにキャッシュ登録し、再度、フェッチポートからメモリアクセス要求MA_RQをL1キャッシュ制御部のパイプラインに投入する。投入されたメモリアクセス要求は、L1キャッシュタグでキャッシュヒットし、L1キャッシュ制御部は、L1キャッシュデータメモリL1$_D_RAM内のデータをデータ応答する。L1キャッシュ制御部は、再投入されたメモリアクセス要求を処理してデータ応答することに替えて、L1キャッシュにデータ登録し、そのデータでデータ応答するようにしてもよい。
上記のL1キャッシュ制御部がL2キャッシュ制御部に発行するデータ登録要求DA_RG_RQと、L2キャッシュ制御部がメインメモリM_MEMに発行するデータ登録要求DA_RG_RQは、いずれもキャッシュミスした場合に、メインメモリ側に向けて発行するメモリアクセス要求の一種である。このメモリアクセス要求によりメインメモリから読み出されたデータ、または高いレベルのキャッシュ制御部のキャッシュメモリから読み出されたデータは、データ応答により返信され、キャッシュ登録される。
[命令デコーダ]
図5は、本実施の形態における命令デコーダの構成例を示す図である。命令デコーダI_DECは、命令バッファI_BUF内のフェッチ命令をインオーダーで入力し、フェッチ命令をデコードし、分岐命令が分岐予測中に発行するメモリアクセス命令に、未確定の分岐命令の命令識別子IID(Instruction ID)と投機アクセスフラグとを付加して、RSAに発行する。
命令デコーダI_DECは、フェッチ命令をデコードするデコーダ10と、分岐命令の命令識別子IIDとそのバリッド信号Vを格納する分岐命令バッファ12と、比較回路14とを有する。命令デコーダ内のデコーダ10は、分岐命令をデコードすると、分岐命令にIIDを割り当てて、分岐命令バッファ12に格納し、そのバリッド信号Vを有効「1」にする。そして、デコーダ10は、分岐命令をRSBRに発行する。
デコーダ10は、分岐命令が未確定中にメモリアクセス命令を発行するとき、バリッド信号Vと分岐命令のIIDとを付加する。このバリッド信号Vは、発行するメモリアクセス命令が投機実行であることを示す投機アクセスフラグとなる。
RSBRは、分岐命令の分岐先が確定すると、分岐確定を示す分岐確定通知信号と分岐命令のIIDとを命令デコーダI_DECに送信する。命令デコーダ内の比較回路14は、分岐命令バッファ12内のIIDとRSBRから分岐確定通知に付加されたIIDとを比較し、一致すると、分岐命令バッファ12のバリッド信号Vを無効「0」にする。これにより、分岐確定状態となる。デコーダ10は、分岐確定状態で発行されるメモリアクセス命令に、無効「0」のバリッド信号Vを投機アクセスフラグとして付加して、RSAに発行する。
そして、デコーダ10は、新たに分岐命令をデコードすると、その分岐命令の命令識別子IIDで分岐命令バッファ12を更新する。このようにして、分岐命令バッファ12には、直前の分岐命令のIIDと、分岐未確定状態(バリッド信号Vが「1」)か、分岐確定状態(バリッド信号Vが「0」)かを示すバリッド信号Vが格納される。
上記の通り、命令デコーダI_DECは、発行するメモリアクセス命令に、投機実行か非投機実行化を示す投機アクセスフラグとその分岐命令のIIDとを付加して、RSAに発行する。
メモリアクセス命令は、RSAの発行キューに格納される。さらに、RSAがメモリアクセス命令を発行すると、発行されたメモリアクセス命令は、L1キャッシュ制御部内のフェッチポートに格納される。そして、RSBRが分岐命令の分岐確定通知信号を分岐命令の命令識別子IIDを付加してRSAとL1キャッシュ制御部に送信すると、RSA内の発行キューに格納されているメモリアクセス命令の投機アクセスフラグが無効化され、L1キャッシュ制御部のフェッチポートに格納されているメモリアクセス命令の投機アクセスフラグも無効化される。L2キャッシュ制御部のフェッチポートに対しても同様に投機アクセスフラグが無効化される。
[本実施の形態のL1、L2キャッシュ制御部の詳細]
図6乃至図14でL1,L2キャッシュ制御部の説明を行うが、説明の前に以下にて各用語の説明を行う。
・投機アクセス情報SP_AC_INF:メモリアクセス命令に付加される投機メモリアクセスに関する情報で、以下の3つの情報である。
・投機アクセスフラグSP_AC_FLG:投機メモリアクセスか否かを示す。「1」で投機メモリアクセス。命令デコーダの分岐命令レジスタのバリッド信号が投機アクセスフラグとして利用される。
・分岐命令IID:直前の分岐命令の命令識別子IID
・投機データ要求済フラグSP_DA_RQ_FLG:投機メモリアクセス要求に対して投機エントリキャッシュミスが発生してデータ登録要求が発行されたか否かを示すフラグ。投機エントリキャッシュミスによりデータ登録要求が発行されるとき「1」にセットされる。その後、投入されたメモリアクセス要求は、L1キャッシュヒットするが、投機データ要求済フラグが「1」であるため投機エントリキャッシュミスせず、再度データ登録要求を発行せずにデータ応答することができる。
・仮登録情報PR_R_INF:キャッシュに投機メモリアクセスにより登録されたか否かを示す情報で、L1キャッシュタグに格納され、投機エントリキャッシュヒット判定に利用される。仮登録情報は、投機エントリフラグSP_EN_FLGと分岐命令の命令識別子IIDとを有する。
・投機エントリフラグSP_EN_FLG:投機メモリアクセス要求の投機アクセスフラグが「1」の場合、「1」にセットされる。
・投機エントリヒット判定部SP_EN_H_JDG:キャッシュヒットした場合に、仮登録状態(投機エントリフラグが「1」)であり、投機データ要求済フラグが未要求「0」であれば、投機エントリキャッシュミスし(L2、メモリにデータ登録要求が発行され)、一方、キャッシュヒットし、仮登録状態であり、投機データ要求済フラグが要求済み「1」であれば、投機エントリキャッシュヒットし、データ応答される。
・キャッシュ確定制御部CA_DTR_CNT:分岐命令が完了して分岐予測成功で分岐先確定すると、キャッシュ確定制御部は、L2キャッシュの仮登録を本登録にし、L1キャッシュの分岐IIDが一致する仮登録のエントリを本登録にする(投機エントリフラグを「0」にリセットする)。分岐予測失敗で分岐先確定すると、L2キャッシュの仮登録のエントリを無効化し、L1キャッシュの仮登録のエントリも無効化する。これにより、その後のLOAD命令では、仮登録のエントリはL1キャッシュミスされる。
・データ登録要求DA_RG_RQ:キャッシュミスまたは投機エントリキャッシュミスしたときにメインメモリ側に発行されるメモリアクセス要求である。
[シングルコアの場合のL1、L2キャッシュ制御部]
図6は、本実施の形態におけるシングルコアの場合のL1、L2キャッシュ制御部の構成を示す図である。図6には、L1キャッシュ制御部L1$_CNTの詳細な構成が示され、以下その構成について説明するが、L2キャッシュ制御部L2$_CNTもL1キャッシュ制御部と同様の構成を有する。
図5と異なり、図6の場合、フェッチポートF_PORT、データ登録要求バッファDA_RG_RQ_BUFには、投機メモリアクセスに関する情報である投機アクセス情報SP_AC_INFとして、投機アクセスフラグSP_AC_FLG, 分岐命令のIIDがメモリアクセス命令または要求に付加されて格納される。フェッチポートF_PORTには、投機データ要求済フラグSP_DA_RQ_FLGも格納される。また、L1$タグL1$_TAG、L2$タグL2$_TAGには、投機メモリアクセス命令で登録されたエントリであることを示す仮登録情報PRV_RG_INFとして、投機エントリフラグSP_EN_FLGと分岐命令のIIDが、通常のタグ情報(アドレスや状態情報(MESI))に付加されて格納される。
そして、図5と異なり、図6の場合、L1キャッシュヒット判定部L1$_H_JDGに加えて、投機エントリキャッシュヒット判定部SP_EN_H_JDGが設けられる。投機エントリキャッシュヒット判定部は、L1キャッシュヒットした場合、ヒットしたL1キャッシュのエントリが仮登録状態であれば(投機エントリフラグSP_EN_FLGが「1」)、一度投機エントリキャッシュミスして、L2キャッシュにデータ登録要求を発行し、メインメモリへのメモリアクセスを実行させる(図8のS20のNO、S21のYES、S22のNO)。
投機メモリアクセス命令により、L1キャッシュタグに登録されている分岐命令の命令識別子IIDと異なるIIDでアクセスがあると、L1キャッシュ制御部は、投機エントリキャッシュミスに基づくデータ登録要求を発行し、それに対するデータ応答時に、投機メモリアクセス命令のIIDでL1キャッシュタグ内のIIDを更新する。または、更新しない方式も可能である。いずれの方式にするかにより、分岐命令が分岐予測成功で完了したときにキャッシュのどのエントリを本登録するかの処理が異なる。
非投機メモリアクセス命令が発行されると、L1キャッシュ制御部は、L1キャッシュヒットした場合、ヒットしたエントリが仮登録状態であれば、上記と同様に、一度投機エントリキャッシュミスする(図8のS20のNO、S21のNO)。そして、その後L2キャッシュからデータ応答を受信すると、L1キャッシュタグの投機エントリフラグを「0」に無効化し、エントリを本登録状態に変更する(図8のS18)。
上記のように、仮登録状態のエントリにアクセスした場合、L1キャッシュ制御部は、投機エントリキャッシュミスにより、一度はキャッシュミスに見せることにより、図1のアドレス100+X宛のメモリアクセス命令LOAD3のメモリアクセスレイテンシを隠蔽する。
但し、投機メモリアクセス命令が発行されると、L1キャッシュ制御部は、キャッシュミスし(S13のNO)、そしてL1キャッシュ内が全て本登録の場合(図8のS29のYES)、投機メモリアクセス命令の分岐命令が確定するまで、投機メモリアクセス命令の処理を抑止し、メモリアクセス要求をフェッチポートに差し戻し、フェッチポート内に滞留させる。これにより、投機実行されるメモリアクセス命令により、既に本登録されているキャッシュメモリ内のデータが追い出されることを回避することができる。この制御は、例えば、L1キャッシュに本登録でキャッシュフィル(登録)済みの状態で、投機LOAD3により攻撃を受けることがあった場合、キャッシュの状態を変更せずに、分岐命令が分岐確定するまで投機LOAD3をフェッチポート内に滞留させる制御である。
一方、投機エントリキャッシュヒット判定部は、L1キャッシュヒットした場合、ヒットしたL1キャッシュのエントリが仮登録状態でなく本登録状態(SP_EN_FLG=0)なら、投機エントリキャッシュヒットし、L1キャッシュデータメモリL1$_DA_RAMからデータを抽出してデータ応答させる。この処理は、通常のメモリアクセス命令と同じである。
また、図5と異なり、図6の場合、キャッシュ確定制御部CA_DTR_CNTは、分岐命令が完了して分岐先が確定したことを知らせる分岐確定通知BR_DTRを命令発行部のRSBRから受信すると、分岐予測成功なら仮登録のエントリを本登録に変更し、失敗なら仮登録のエントリを無効化する。
図7は、命令発行部がL1キャッシュ制御部に発行する命令について説明する図である。命令発行部I_ISSは、前述のとおり、命令デコーダI_DECとリザベーションステーションRSAを有する。図7には、命令発行部I_ISSがデコードする命令列INST_1が図示されている。L1キャッシュ制御部L1$_CNTは、L1キャッシュに対するメモリアクセス命令の処理を制御する回路であり、図7には、L1キャッシュ制御部に発行される命令INST_2が示される。
命令発行部がデコードする命令列INST_1は、命令種とその命令識別子IIDの例が示される。この例によれば、2つの分岐命令BR(B),BR(C)と、分岐命令BR(B)の後ろ側のロード命令LD(B)及びストア命令ST(B)と、分岐命令BR(C)の後ろ側のロード命令LD(C)と、分岐命令に属さないロード命令LD(A)とが含まれる。
一方、L1キャッシュ制御部のフェッチポートには、上記の命令発行部がデコードする命令列INST_1のうち、メモリアクセス命令であるロード命令LDとストア命令STとがキューインされる。そして、図5の命令デコーダで説明したとおり、これらのロード命令とストア命令には、投機アクセスフラグと分岐命令のIIDとが付加される。図7の例では、命令INST_2には、投機アクセスフラグが「0」のロード命令LD(A)と、「1」のロード命令LD(B),ストア命令ST(B),ロード命令LD(C)が含まれ、投機アクセスフラグが「1」のストア命令及びロード命令には、それらの命令が属する分岐命令のIIDが付加される。
図8は、L1キャッシュ制御部の動作を示すフローチャート図である。L2キャッシュ制御部の動作は、L1キャッシュ制御部がキャッシュミスしたときに発行するデータ登録要求がL2キャッシュ制御部宛であることに代えて、メインメモリ宛であることを除いて、L1キャッシュ制御部と同様である。
図8のフローチャートは、命令発行部からのメモリアクセス命令(以下MA命令と称する。)の発行S10、フェッチポートF_PORTにMA命令をセット(格納)する処理S11と、フェッチポートからL1キャッシュにMA命令に対するL1キャッシュアクセス要求が発行される処理S12と、L1キャッシュヒット判定部L1$_H_JDGの処理S13と、投機エントリヒット判定部SP_EN_H_JDGの処理S20-S22と、データ登録要求バッファDA_RG_RQ_BUFでの処理S14-S16、S23-25と、L2キャッシュからのデータ応答時のL1キャッシュでの登録処理S17-S19、S26-S28を有する。
[投機エントリヒット判定部の第1の例]
図9は、投機エントリヒット判定部の論理回路の第1の例を示す図である。この第1の例では、投機エントリヒット判定部SP_EN_H_JDGに、L1キャッシュヒットしたL1キャッシュTAGのエントリの投機エントリフラグSP_EN_FLGと、L1キャッシュヒット判定部L1$_H_JDGからのL1キャッシュヒット信号L1_$HITとが入力される。さらに、フェッチポートF_PORT内の発行されたMA命令の投機アクセスフラグSP_AC_FLGと、投機データ要求済フラグSP_DA_RG_RQ_FLGが入力される。投機エントリヒット判定部は、4つのアンド回路AND_A, AND_B, AND_C,AND_Eと、1つのオア回路OR_1とを有する。
L1キャッシュヒットしたエントリの投機エントリフラグが「0」の場合、そのエントリは本登録状態である。そこで、投機エントリヒット/ミス判定部は、投機エントリフラグが「0」の場合、アンド回路AND_Cにより、L1キャッシュヒット(L1_$HIT=1)であれば、投機エントリキャッシュヒット信号もヒット「1」とし、L1キャッシュミス(L1_$HIT=0)であれば、投機エントリキャッシュヒット信号もミス「0」とする。
一方、L1キャッシュヒットしたエントリの投機エントリフラグが「1」の場合、そのエントリは仮登録状態であり、アンド回路AND_Cの出力は「0」になる。一方、アンド回路AND_Bの出力は「1」となる。そして、フェッチポート内の投機アクセスフラグSP_AC_FLGが「1」であれば、アンド回路AND_Eの出力が「1」となるが、投機データ要求済フラグが未要求「0」であれば、アンド回路AND_Aの出力は「0」となり、投機エントリキャッシュヒット信号もミス「0」となる。但し、投機データ要求済フラグが未要求「1」であれば、アンド回路AND_Aの出力も「1」となり、投機エントリキャッシュヒット信号はヒット「1」となる。この投機データ要求済フラグによる投機エントリキャッシュミスとヒットの制御は、投機メモリアクセスを完了させるための理由であり、以下に記述するL1キャッシュ制御部の制御で詳述する。
また、L1キャッシュヒット「1」で、投機エントリフラグが「1」(仮登録)の場合に、L1キャッシュアクセス要求が非投機メモリアクセス命令であれば(SP_AC_FLG=0)、アンド回路AND_Eが、投機エントリキャッシュヒット信号をミス「0」にする。これは、図8の投機アクセスか否かの判定S21がNOになることによる投機エントリキャッシュミスである。この場合、非投機メモリアクセス命令のデータ登録要求に対するデータ応答のデータは、L1、L2キャッシュタグに投機エントリフラグ「0」(本登録)で登録される(S18)。
以下、図6,図8を参照して、L1キャッシュ制御部の4つの制御について説明する。
[L1キャッシュ制御部の制御1]
L1キャッシュ制御部の制御1は、図1の投機LOAD2に対する制御である。投機LOAD2では、L1キャッシュ制御部は、L1キャッシュミスし、L2キャッシュにデータ登録要求を発行する。L2キャッシュ制御部は、L2キャッシュミスし、メインメモリにアクセスし、L2キャッシュTAGに、投機エントリフラグ「1」(投機エントリまたは仮登録)、分岐命令のIIDで、メインメモリから読み出したデータをキャッシュ登録する。さらに、L1キャッシュ制御部も、L1キャッシュTAGに、投機エントリフラグ「1」(投機エントリまたは仮登録)、分岐命令のIIDで、読み出しデータをキャッシュ登録する。
図10は、制御1の動作を示すシーケンスチャートの図である。最初に、命令発行部が投機LOAD2を発行し(S10)、L1キャッシュ制御部内のフェッチポートに投機LOAD2がキューインされる(S11)。フェッチポートの各エントリには、投機LOAD2の命令種やアクセス先アドレス等に加えて、投機アクセスフラグSP_AC_FLG=1、分岐命令のIID、投機データ要求済フラグSP_DA_RQ_FLG=0が格納される。
次に、フェッチポートから投機LOAD2のL1キャッシュアクセス要求L1$_AC_RQが発行され(S12)、L1キャッシュヒット判定部L1$_H_JDGが、L1キャッシュタグを参照して、キャッシュヒット判定を行う。図1で説明したとおり、最初にキャッシュフラッシュしているので、L1キャッシュタグのエントリはすべて無効であり、ここではL1$ミスする(S13のNO)。
これに応答して、データ登録要求バッファの確保要求BUF_RQが発生する。この要求に対し、データ登録要求バッファが確保できる場合、データ登録要求バッファは、投機LOAD2が投機的命令であるので(S14のYES)、フェッチポート内の投機LOAD2の投機データ要求済フラグをSP_DA_RQ_FLG=1にセットする(S23)。さらに、データ登録要求バッファは、確保したデータ登録要求バッファ内にL1キャッシュアクセス要求の情報と、その投機アクセス情報SP_AC_INFを記録し(S24)、L2キャッシュ制御部に、データ登録要求DA_RG_RQを発行する(S25)。
L2キャッシュ制御部は、L1キャッシュ制御部からのデータ登録要求に対して、上記のL1キャッシュ制御部と同じ制御を行い、L2キャッシュミスが発生し、メインメモリにアクセスして、投機LOAD2のロード先データを読み出し、L2キャッシュに登録する。そして、L2キャッシュ制御部からのデータ応答(S26)に応答して、L1キャッシュ制御部は、L1キャッシュにキャッシュ登録する(S27)。
L1キャッシュにキャッシュ登録されると、フェッチポートから再度L1キャッシュアクセス要求L1$_AC_RQが発行され(S12)、L1キャッシュヒットする(S13のYES)。そして、投機エントリキャッシュヒット判定部が、フェッチポートの投機データ要求済フラグSP_DA_RQ_FLGが「1」であることから、投機エントリキャッシュヒットし(S20のNO、S21のYES、S22のYES)、データ応答DA_RSPが命令発行部に送信される(S29_1)。
以上のように、投機LOAD2を実行することにより、L1キャッシュタグとL2キャッシュタグには、通常のタグの情報(有効ビット、状態値(MESI)、アドレス)に加えて、投機エントリフラグSP_EN_FLG=1と投機LOAD2の直前の分岐命令のIIDが登録され、仮登録であることが記録される。
[L1キャッシュ制御部の制御2]
L1キャッシュ制御部の制御2は、図1の投機LOAD2と同じアドレス100+Xへの投機LOAD3を実行する場合の制御である。この場合、L1キャッシュヒットするが、投機エントリキャッシュヒット判定SP_EN_$H_JDGが、投機エントリキャッシュミスと判定し、L2キャッシュを経由して、メインメモリへのアクセスが発生する。そして、メインメモリからのデータ応答に対して、L2キャッシュ制御部は、L2キャッシュTAGに、投機エントリフラグ「1」(投機エントリまたは仮登録)、分岐命令のIIDで、キャッシュ登録する。さらに、L1キャッシュ制御部も、L1キャッシュTAGに、投機エントリフラグ「1」(投機エントリまたは仮登録)、分岐命令のIIDで、キャッシュ登録する。
このように、投機LOAD3では、L1キャッシュヒットするが、投機エントリキャッシュミスが発生し、メインメモリへのアクセスを発生させる。そして、再度、投機LOAD2の投機アクセス情報でL2キャッシュタグとL1キャッシュタグに仮登録情報(投機アクセスフラグ「1」と分岐命令のIID)を登録し、L2、L1キャッシュデータメモリにメインメモリから読み出したデータを登録する。
図11は、制御2の動作を示すシーケンスチャートの図である。最初に、命令発行部が投機LOAD3を発行し(S10)、L1キャッシュ制御部内のフェッチポートに投機LOAD3が格納される(S11)。フェッチポートには、投機LOAD3の命令種やアクセス先アドレス等に加えて、投機アクセスフラグSP_AC_FLG=1、分岐命令のIID、投機データ要求済フラグSP_DA_RQ_FLG=0が格納される。
次に、フェッチポートから投機LOAD3のL1キャッシュアクセス要求が発行され(S12)、L1キャッシュヒット判定部L1$_H_JDGが、L1キャッシュタグを参照して、キャッシュヒット判定を行う。制御2では、投機LOAD2によりL1キャッシュにデータが既に登録されているので、L1キャッシュヒット判定部はL1キャッシュヒットする(S13のYES)。ここは制御1と異なる。
L1キャッシュヒットに応答して、投機エントリキャッシュヒット判定部は、L1キャッシュタグの投機エントリフラグがSP_EN_FLG=1と仮登録であることから、投機エントリキャッシュミスと判定する(S22のNO)。つまり、図9のアンド回路AND_B、AND_Eの出力が「1」になり、フェッチポートの投機データ要求済フラグのSP_DA_RQ_FLG=0(未要求)により、図9のアンド回路AND_Cの出力が「0」となり、投機エントリキャッシュヒット信号はミス「0」になる。
その結果、データ登録要求バッファの確保要求BUF_RQが発生し、データ登録要求バッファに投機アクセス情報が登録され(S24)、L2キャッシュに対してデータ登録要求DA_RG_RQが発行される(S25)。同時に、フェッチポート内の投機LOAD3の投機データ要求済フラグが「1」される(S23)。この後の制御は、図10の制御1と同じであり、メインメモリからのデータ応答のデータが、L2キャッシュとL1キャッシュで登録され、再度投入されたL1キャッシュアクセス要求に対してL1キャッシュヒットし、投機データ要求済フラグが「1」であるため、投機エントリキャッシュヒットし、データ応答が命令発行部に送信される。
以上のように、投機LOAD3を実行した場合、L1キャッシュヒットするが、L1キャッシュタグの仮登録情報PRV_RG_INF(投機エントリフラグSP_EN_FLGが「1」)により、投機エントリキャッシュミスが発生し、メインメモリへのアクセスが発生する。そのため、投機LOAD3のレイテンシは、他のアドレスのロード命令と同様に長くなり、キャッシュヒットによりレイテンシが短くなることが隠蔽され、アドレス100+Xが悪意の第三者に獲得されることが防止できる。
上記の投機LOAD3に対する制御において、L1キャッシュに仮登録した後(S27)、L1キャッシュアクセス要求を再投入することなく、データ応答(S29_1)を行うようにするようにしてもよい。その場合、投機LOAD3に対する最初のL1キャッシュアクセス要求L1$_AC_RQに応答してL1キャッシュヒットの後、投機エントリキャッシュヒット判定部は、L1キャッシュヒットしたエントリが仮登録であれば(SP_EN_FLG=1)、投機エントリキャッシュミスする。従って、図9の投機エントリキャッシュヒット判定部SP_EN_$H_JDGの論理回路は、アンド回路AND_Cだけとなり、L1キャッシュヒットの場合、投機エントリフラグが「1」の仮登録であれば、投機エントリキャッシュミスと判定し、投機エントリフラグが「0」の本登録であれば、投機エントリキャッシュヒットと判定する。
[L1キャッシュ制御部の制御3]
L1キャッシュ制御部の制御3は、図1のアドレス100+Xへの非投機LOAD3を実行する場合の制御である。この場合、L1キャッシュヒットし、投機エントリキャッシュヒット判定SP_EN_$H_JDGが、投機エントリキャッシュミスと判定し、L2キャッシュを経由して、メインメモリへのアクセスが発生する。そして、メインメモリからのデータ応答に対して、L2キャッシュTAGに、投機エントリフラグ「0」(非投機エントリまたは本登録)、分岐命令のIIDで、本登録する。さらに、L1キャッシュ制御部も、L1キャッシュTAGに、投機エントリフラグ「0」(非投機エントリまたは本登録)、分岐命令のIIDで、キャッシュ登録する。
図12は、制御3の動作を示すシーケンスチャートの図である。最初に、命令発行部が非投機LOAD3を発行し(S10)、L1キャッシュ制御部内のフェッチポートに非投機LOAD3が格納される(S11)。フェッチポートには、非投機LOAD3の命令種やアクセス先アドレス等に加えて、投機アクセスフラグSP_AC_FLG=0、分岐命令のIID、投機データ要求済フラグSP_DA_RQ_FLG=0が格納される。
次に、フェッチポートから投機LOAD3のL1キャッシュアクセス要求L1$_AC_RQが発行され(S12)、L1キャッシュヒット判定部L1$_H_JDGが、L1キャッシュタグを参照して、キャッシュヒット判定を行う。制御3では、投機LOAD2によりL1キャッシュにデータが既に登録されているので、L1キャッシュヒット判定部はL1キャッシュヒットする(S13のYES)。
L1キャッシュヒットに応答して、投機エントリキャッシュヒット判定部は、L1キャッシュタグの投機エントリフラグがSP_EN_FLG=1、即ち、仮登録(S20のNO)であるが、非投機LOAD3であるので、図9のアンド回路AND_Eの出力が「0」となり、投機エントリキャッシュミスと判定する(S21のNO)。
その結果、データ登録要求バッファの確保要求BUF_RQが発生し、データ登録要求バッファに投機アクセス情報が登録され(S15)、L2キャッシュに対してデータ登録要求が発行される(S16)。この場合、フェッチポート内の対応する命令の投機データ要求済フラグをセットすること(S23)は行われない。
データ応答(S17)後の制御は、図11の制御2と異なり、メインメモリからのデータ応答のデータが、L2キャッシュとL1キャッシュで本登録される(S18)。その後、再度投入されたL1キャッシュアクセス要求(S12)に対してL1キャッシュヒットするが(S13のYES)、L1キャッシュが本登録されているため、投機エントリキャッシュヒットと判定され(S20のYES)、データ応答が命令発行部に送信される(S29_1)。非投機LOAD3を発行した場合、投機エントリキャッシュミス後に、L2,L1キャッシュに本登録されるため、再投入されたL1キャッシュアクセス要求に対して投機エントリキャッシュヒットする。
以上のように、非投機LOAD3を実行することにより、L1キャッシュヒットするが、L1キャッシュタグの仮登録情報PRV_RG_INF(投機エントリフラグSP_EN_FLGが「1」)と、フェッチポートの非投機LOAD3の投機アクセス情報(SP_AC_FLGが「0」)により、投機エントリキャッシュミスが発生する。これにより、メインメモリへのアクセスが発生し、非投機LOAD3のレイテンシは、他のアドレスのロード命令と同様に長くなり、アドレス100+Xが悪意の第三者に獲得されることが防止できる。
[L1キャッシュ制御部の制御4]
L1キャッシュ制御部の制御4は、命令発行部のRSBRからの分岐確定通知を受信した場合のキャッシュ確定制御部の処理である。制御4では、分岐確定通知が分岐予測成功の場合、L1,L2キャッシュのキャッシュ確定制御部が分岐命令のIIDが一致するエントリを仮登録から本登録に変更し、分岐予測失敗の場合、L1,L2キャシュの仮登録された全エントリを無効化する(バリッド信号を「0」にする)。
図13は、L1キャッシュ制御部の制御4のフローチャート図である。また、図14は、L1キャッシュ制御部の制御4のシーケンスチャート図である。
まず、命令発行部のRSBRからの受信する分岐確定通知BR_DTRには、分岐予測の成功か失敗のフラグと、分岐命令のIIDが含まれる。分岐確定通知を受信した場合、その分岐予測が成功の場合(S30のYES)、L1キャッシュ制御部内のキャッシュ確定制御部CA_DTR_CNTは、L2キャッシュ制御部に、分岐確定通知BR_DTRを発行する。そして、L2キャッシュ制御部内のキャッシュ確定制御部が、L2キャッシュで仮登録されたエントリのうち、分岐確定通知の分岐命令のIIDと一致するエントリの投機エントリフラグSP_EN_FLGを「0」にして本登録に変更する(S31)。更に、L2キャッシュ制御部のキャッシュ確定制御部がL1キャッシュ制御部に対してキャッシュ本登録の要求$_RG/INV_RQを発行すると、L1キャッシュ制御部のキャッシュ確定制御部$_DTR_CNTが、L1キャッシュで仮登録されたエントリのうち、分岐命令のIIDと一致するエントリの投機エントリフラグSP_EN_FLGを「0」にして本登録に変更する(S32)。
上記の本登録に変更する処理(S31,S32)では、前述した、投機メモリアクセス命令の分岐命令のIIDが、キャッシュタグの仮登録のエントリの分岐命令のIIDと異なる場合に、キャッシュタグのエントリのIIDを更新しない方式であれば、仮登録した最初の分岐命令のIID以降の投機メモリアクセス命令のエントリを一括して本登録に変更できる。一方、更新する方式であれば、分岐確定した分岐命令のIIDに対応するエントリがその都度本登録に変更される。
一方、分岐予測が失敗の場合(S30のNO)、L1キャッシュ制御部内のキャッシュ確定制御部CA_DTR_CNTは、L2キャッシュ制御部に、分岐確定通知BR_DTRを発行する。そして、L2キャッシュ制御部内のキャッシュ確定制御部が、L2キャッシュ内の仮登録された全てのエントリを無効化する(S33)。更に、L2キャッシュ制御部のキャッシュ確定制御部がL1キャッシュ制御部に対してキャッシュ無効化の要求を発行すると、L1キャッシュ制御部のキャッシュ確定制御部が、L1キャッシュ内の仮登録された全てのエントリを無効化する(S34)。
分岐予測が失敗した場合、分岐予測失敗した分岐命令の分岐予測先のメモリアクセス命令と、分岐予測失敗した分岐命令の後ろの分岐命令の分岐予測先のメモリアクセス命令は、パイプライン内で全てキャンセルので、L2キャッシュとL1キャッシュで、仮登録の全てのエントリが無効化される。分岐予測失敗した分岐命令の前の分岐命令は分岐確定済みであるので、前の分岐命令後のメモリアクセス命令に対応する仮登録のキャッシュエントリは存在しない。
上記の分岐予測失敗で分岐確定した場合、本実施の形態では、キャッシュタグの仮登録状態のエントリを無効化することができる。その結果、分岐予測失敗で分岐確定後は、前述の非投機LOAD3によるアタックに対して、キャッシュミスが発生して、レイテンシの違いを隠蔽することができる。
[投機エントリヒット判定部の第2の例]
図15は、シングルコアの場合における投機エントリヒット判定部の第2の例である。第2の例でも、図6の構成と図8のフローチャートは第1の例の場合と同じである。第1の例では、仮登録状態のキャッシュエントリ(SP_EN_FLG=1)の場合、投機データ要求済フラグを利用して、一度目は投機エントリミスを判定し、その後、再投入されたL1キャッシュ要求に対して投機エントリヒットを判定した。
しかしながら、同じ分岐命令後のメモリアクセス命令については、図1のLOAD3のようなセキュリティ攻撃対象ではないので、メモリアクセスの実行時間(レイテンシ)を隠蔽する必要はない。以下は、命令列の一例である。
分岐命令BR1(IID=A)
投機LOAD2(IID=A)
投機LOAD_L(IID=A)
投機LOAD_M(IID=A)
--------
分岐命令BR2(IID=X)
投機又は非投機LOAD3(IID=X)
上記の場合、分岐命令BR1の分岐未確定中に投機LOAD2によりL1キャッシュタグに仮登録され、分岐命令BR2の後の投機又は非投機のLOAD3でメモリアクセスの実行時間を測定してセキュリティ攻撃される。上記の例において、分岐命令BR1の後の投機LOAD_Lと投機LOAD_Mは、セキュリティ攻撃用の命令ではなく、メモリアクセスの実行時間を隠蔽する必要はない。一方、分岐命令BR1とは異なる分岐命令BR2の後の投機又は非投機LOAD3は、セキュリティ攻撃用の命令である可能性が高い。
そこで、第2の例では、上記例の投機LOAD_L,LOAD_Mのように投機LOAD2と同じ分岐命令BR1後の投機メモリアクセス命令の場合は、投機エントリキャッシュヒットとして、キャッシュミスによる性能低下を防ぐ。そのための構成が、分岐命令IIDマッチ回路MTCHと、アンド回路AND_A1である。即ち、L1キャッシュヒットし、L1キャッシュタグが仮登録(投機エントリフラグが「1」)の場合、アンド回路AND_Bの出力が「1」になる。さらに、フェッチポートの分岐IIDとL1キャッシュタグ内の分岐IIDとが一致する場合、分岐命令IIDマッチ回路MTCHの出力が「1」になる。そして、投機LOAD_L,LOAD_Mは投機アクセスフラグが「1」である。従って、アンド回路AND_A1の出力は「1」となり、投機エントリキャッシュヒットと判定される。
一方、上記例の投機又は非投機LOAD3のように投機LOAD2と異なる分岐命令後のメモリアクセス命令の場合は、投機エントリキャッシュミスと判定して、メモリアクセスの実行時間を隠蔽する。すなわち、分岐命令IIDマッチ回路の出力が「0」となり、投機エントリキャッシュミスと判定される。その結果、L2キャッシュ制御部にデータ登録要求が発行され、L2キャッシュ制御部によりメモリアクセスが実行される。
第2の例では、上記の例の、投機LOAD2と同じ分岐命令BR1内の命令である投機LOAD_L,投機LOAD_Mについては、セキュリティ攻撃対象外とみなして、投機エントリキャッシュヒットさせて性能低下を防止することができる。
[マルチコアの場合のL1、L2キャッシュ制御部]
図16は、マルチコアの場合のL1、L2キャッシュ制御部の構成を示す図である。コア0とコア1は、それぞれ図6に示したL1キャッシュ制御部L1$_CNT_0、L1$_CNT_1を有する。一方、コア0とコア1が共有するL2キャッシュ制御部L2$_CNTは、ラストレベルキャッシュの制御部に対応する。L2キャッシュ制御部L2$_CNTも、図6に示した構成を有する。
但し、L2キャッシュ制御部のL2$_TAGは、L1キャッシュ制御部のL1$_TAGと異なり、コア0からのデータ登録要求DA_RG_RQに対応して管理される仮登録情報SP_RG_INF_0(投機エントリフラグSP_EN_FLG、分岐命令のIID)と、コア1からのデータ登録要求DA_RG_RQに対応して管理される仮登録情報SP_RG_INF_1を格納する。また、L2$_TAGには、通常のキャッシュタグと同様に、有効ビットVALIDと、MESI制御の状態ビット、アドレスなども格納される。
マルチコアの場合のL2キャッシュタグに基づくキャッシュ判定は、L1キャッシュタグに基づくキャッシュ判定と同様に、アドレスの一致に基づくL2キャッシュヒット判定と、仮登録情報(投機エントリフラグと分岐命令のIID)やフェッチポート内の投機データ要求済フラグ(図9)または分岐命令のIID(図15)に基づく、L2投機エントリキャッシュヒット判定とがある。L2キャッシュヒット判定は、図16には示していないL2キャッシュヒット判定部が行い、L2投機エントリキャッシュヒット判定は、図16に示していないL2投機エントリキャッシュヒット判定部が行う。図6のL1キャッシュ制御部内の投機エントリキャッシュヒット判定部と同様である。
マルチコアの場合のL2キャッシュタグに基づくL2投機エントリキャッシュヒット判定は、原則として、L2キャッシュタグ内のデータ登録要求を発行した発行元コアに対応する仮登録情報SP_RG_INFに基づいて行われる。つまり、L2キャッシュでの投機エントリヒット判定は、L1キャッシュでのL1キャッシュタグ内の仮登録情報SP_RG_INFに基づいて行った判定と同様の判定になる。
図17は、マルチコアの場合のL2キャッシュでのL2キャッシュヒット判定と、投機エントリキャッシュヒット判定のフローチャート図である。これによれば、前提としてL2キャッシュヒット判定(L2キャッシュタグL2$_TAGの有効ビットVALIDが有効「1」で且つアドレスが一致)の場合(S40のYES)、L2投機エントリキャッシュヒット判定部は、概略すると、次の判定を行う。即ち、L2投機エントリキャッシュヒット判定部は、L2キャッシュタグの情報に基づいて、データ登録要求の発行元のコアがL2キャッシュで、データを未登録か、仮登録か、本登録かを判定する。そして、(1)データが仮登録の場合、図6,8のL1キャッシュ制御と同様に、投機エントリキャッシュヒット判定を行う。(2)データが本登録の場合、L2投機エントリキャッシュヒットと判定し、L2キャッシュヒット判定に従う。(3)データが未登録の場合、L2キャッシュヒット判定は他のコアの仮登録に基づくもの(バリッドビットが「1」)であるので、L2投機エントリキャッシュミスと判定する。この場合、L2キャッシュヒット判定は発行元コアに対する判定としては誤りであったことになる。
具体的には、L2投機エントリキャッシュヒット判定部は、L2キャッシュヒット判定(S40のYES)の場合、以下の制御を行う。
(1)まず、L2投機エントリキャッシュヒット判定部は、発行元コアに対応する投機エントリフラグSP_EN_FLGが仮登録を示す「1」の場合(S42のYES)、図9または図12の論理回路と同様の投機エントリキャッシュ判定を行う(S43)。つまり、図9の例では、投機データ要求済フラグが未要求を示す「0」なら投機エントリキャッシュミスと判定し、要求済みを示す「1」なら投機エントリキャッシュヒットと判定する。図12の例では、フェッチポートの分岐命令のIIDとL2キャッシュタグの分岐命令のIIDとが一致するか不一致かで、投機エントリキャッシュヒットかミスとそれぞれ判定する。
(2)L2投機エントリキャッシュヒット判定部は、発行元コアに対応する投機エントリフラグSP_EN_FLGが「0」の場合で、且つそれが本登録を意味するとき(S42のNO且つS44のNO)、図9または図12の論理回路と同様に投機エントリキャッシュヒットと判定する(S46)。
ここで、注意すべきことは、L2キャッシュタグには全コアに共通のバリッドビットVALIDを有するため、投機エントリフラグSP_EN_FLGを1ビットで構成すると、各コア毎に未登録、仮登録、本登録を区別できない。特に、投機エントリフラグSP_EN_FLGは、未登録も「0」、本登録も「0」となり、未登録と本登録を区別できない。そこで、本実施の形態では、複数コアのうちいずれかのコアでL2キャッシュに本登録された場合、全コアの投機エントリフラグSP_EN_FLGを「0」にして本登録状態が区別できるようにしている。これは、L2キャッシュで本登録されると、投機エントリの判定は不要になり、L2キャッシュではヒット判定となるからである。この点については、後述する図18で説明する。
従って、発行元コアに対応する投機エントリフラグSP_EN_FLGが本登録を示す「0」の場合とは、本実施の形態では、L2キャッシュタグが、バリッドビットが有効「1」で、全コアの投機エントリフラグが「0」の場合を意味する。全コアの投機エントリフラグが「0」か否かの判定は、全コアの投機エントリフラグの論理和(OR)が「0」(OR=0)か否かで行う。
(3)L2投機エントリキャッシュヒット判定部は、発行元コアに対応する投機エントリフラグSP_EN_FLGが「0」の場合で、且つそれが未登録を意味するとき(S42のNO且つS44のYES)、投機エントリキャッシュミスと判定する(S45)。発行元コアとは異なるコアに対応する投機エントリフラグが仮登録を示す「1」の場合、L2キャッシュヒット判定は、発行元コアとは異なるコアの仮登録に基づいて行われたとみなし、発行元コアに対しては投機エントリキャッシュミスと判定し、メモリアクセスを実行させる。これにより、L2キャッシュヒット判定は、否定されることになる。
ここで、注意すべきことは、一般に、キャッシュタグでは未登録の判定はバリッドビットが無効の「0」か否かで行う。しかし、L2キャッシュタグでは、コア別に投機エントリフラグを有するので、あるコアからのデータ登録要求に対して仮登録されると共通のバリッドビットが有効の「1」になる。そのため、コア毎に投機エントリが未登録か否かを判別するためには、バリッドビットだけで判定できない。
本実施の形態では、L2キャッシュタグのバリッドビットが有効の「1」で、発行元コアの投機エントリフラグが「0」、発行元コア以外のいずれかのコアの投機エントリフラグが仮登録の「1」の場合、発行元コアの投機エントリフラグの「0」を未登録とみなし、投機エントリキャッシュミスと判定される。この点も、後述する図18で説明する。
上記の(2)の本登録の判定と、(3)の未登録の判定において、投機エントリフラグSP_EN_FLGが未登録、仮登録、本登録を区別できる場合は、データ登録要求を発行した発行元コアの投機エントリフラグでそれらを区別する判定をしても良い。
図18は、コア1から投機実行されるメモリアクセス命令によりデータ登録要求が発行された場合の種々のL2キャッシュタグの状態での、投機エントリキャッシュヒット判定を示す図である。
まず、状態0(STATE_0)は、バリッドビットが「0」で、各コアの投機エントリフラグも「0」になっているので、コア0とコア1の両方からデータの仮登録も本登録も行われていないことを示す。この状態0に対して、コア1からデータ登録要求が発行されると、L2キャッシュヒット判定部がL2キャッシュミスと判定し、メモリアクセスが実行される。
次の、状態1(STATE_1)では、バリッドビットが「1」で、コア0の投機エントリフラグが「1」でその分岐命令IIDには「0xA」が登録され、コア1の投機エントリフラグは「1」でその分岐命令IIDは「0xB」が登録されている。この状態1は、後述する状態3のとき、コア1が投機LOAD2により、L2キャッシュにデータを仮登録した状態である。この状態1のときにコア1から投機LOAD3によってデータ登録要求が発行された場合、L2キャッシュでは、L2キャッシュヒット判定され、投機エントリキャッシュヒット判定部は、図17の工程S43により、図9または図12の論理回路によりヒット判定またはミス判定になる。
また、状態2(STATE_2)では、バリッドビットが「1」で、コア0の投機エントリフラグが「0」でその分岐命令IIDは無効な状態が登録され、コア1の投機エントリフラグは「1」でその分岐命令IIDは「0xB」が登録されている。この場合は、発行元のコア1については、仮登録状態であるので、状態1と同様に、図17の工程S43により投機エントリキャッシュヒット判定される。
一方、状態3(STATE_3)では、バリッドビットが「1」で、コア0の投機エントリフラグが「1」でその分岐命令IIDには「0xA」が登録され、コア1の投機エントリフラグは「0」でその分岐命令IIDは無効な情報である。これは、状態0からコア0が投機LOAD2により、L2キャッシュにデータを仮登録した状態である。この状態3のときにコア1から投機LOAD3によってデータ登録要求が発行された場合、コア1に対するL2キャッシュの状態は未登録であるので、L2キャッシュでの投機エントリキャッシュヒット判定は、図17の工程S45により、ミス判定になる。つまり、L2キャッシュヒット判定が否定される結果になる。
そして、状態4(STATE_4)は、バリッドビットが「1」で、コア0とコア1の投機エントリフラグが共に「0」でそれらの分岐命令IIDは無効な情報である。この状態4は、状態1(STATE_1)で、いずれかのコア(例えばコア1)からのデータ登録要求で本登録され、コア1の投機エントリフラグが「0」にされた状態に該当する。
この場合、コア1の投機エントリフラグだけを「0」にすると、状態3のL2キャッシュタグの状態と同じになる。そこで、状態3(STATE_3)の未登録と区別するために、コア0とコア1の投機エントリフラグが共に「0」にされ、バリッドビット「1」との組み合わせから、本登録と認識できるようにする。また、この状態4は、状態3(STATE_3)のときにコア1からのデータ登録要求で投機エントリフラグが「0」と本登録された状態にも該当する。状態4の場合、L2キャッシュでは本登録状態であるので、投機エントリキャッシュヒット判定部は、図17の工程S46により、ヒット判定をする。
L2キャッシュに本登録されると、もはや仮登録に対する投機エントリキャッシュヒット判定は不要になるので、全コアに対する投機エントリフラグを「0」にしても問題はない。
[マルチコアのL1、L2キャッシュの処理例A]
図19は、マルチコアの場合のL1,L2キャッシュでの処理例Aのシーケンスを示す図である。この例Aでは、最初にキャッシュをフラッシュ(全て無効化)した後、コア0が投機LOAD2を実行し、コア0でL1,L2キャッシュに仮登録する。その後、コア0が投機LOAD3を同じアドレスに実行し、コア0のL1,L2キャッシュに仮登録する。
この場合、キャッシュフラッシュされているので、コア0の投機LOAD2の発行に応答して、L1キャッシュでキャッシュミスし(L1$_miss)、データ登録要求がL2キャッシュに発行され、L2キャッシュでもキャッシュミスし(L2$_miss)する。メモリアクセス後、L2キャッシュタグのコア0に仮登録(SP_EN_FLG=1, IID=0xA)し、コア0のL1キャッシュタグに仮登録(SP_EN_FLG=1, IID=0xA)する。
次に、コア1の投機LOAD3の発行に応答して、L1キャッシュヒットするが、L1投機エントリキャッシュミス(L1$_SP_miss)し、データ登録要求がL2キャッシュに発行される。L2キャッシュでは、L2キャッシュタグのコア0の投機エントリフラグが仮登録「1」であるので、L2投機エントリキャッシュミスし(L2$_SP_miss)、メモリアクセスが実行される。その後、L2キャッシュタグのコア0に仮登録(SP_EN_FLG=1,IID=0xB)し、コア0のL1キャッシュタグに仮登録(SP_EN_FLG=1, IID=0xB)する。
この例では、L2キャッシュタグの分岐命令のIIDが0xBに更新される処理である。
[マルチコアのL1、L2キャッシュの処理例B]
図20は、マルチコアの場合のL1,L2キャッシュでの処理例Bのシーケンスを示す図である。この例では、最初にキャッシュをフラッシュ(全て無効化)した後、コア0が投機LOAD2を実行し、コア0でL1,L2キャッシュに仮登録する。その後、コア1が投機LOAD3を同じアドレスに実行し、コア1のL1,L2キャッシュに仮登録する。
コア0の投機LOAD2の発行に対する処理は、図19の処理Aと同じである。その後のコア1の投機LOAD3の発行に応答して、L1キャッシュミスし、データ登録要求がL2キャッシュに発行される。L2キャッシュでは、L2キャッシュヒット(L2$_hit)するが、L2キャッシュタグのコア1の投機エントリフラグが「0」であるので、全コアの投機エントリフラグSP_EN_FLGの論理和(OR)が判定され、論理和ORが「1」であるので、コア1については未登録であると判定される。これに基づいて、L2投機エントリキャッシュミスし(L2$_SP_miss)、メモリアクセスが実行される。その後、L2キャッシュタグのコア1に仮登録(SP_EN_FLG=1, IID=0xB)し、コア1のL1キャッシュタグに仮登録(SP_EN_FLG=1,IID=0xB)する。
[マルチコアのL1、L2キャッシュの処理例C-1]
図21は、マルチコアの場合のL1,L2キャッシュでの処理例C-1のシーケンスを示す図である。この例では、最初にキャッシュをフラッシュ(全て無効化)した後、コア0が投機LOAD2を実行し、コア0でL1,L2キャッシュに仮登録する。その後、コア1が非投機LOAD3を同じアドレスに実行し、コア1のL1,L2キャッシュに本登録する。
コア0の投機LOAD2の発行に対する処理は、図19の処理Aと同じである。その後のコア1の非投機LOAD3の発行に応答して、L1キャッシュミスし、データ登録要求がL2キャッシュに発行される。L2キャッシュでは、L2キャッシュヒット(L2$_hit)するが、L2キャッシュタグのコア1の投機エントリフラグが「0」であるので、全コアの投機エントリフラグSP_EN_FLGの論理和(OR)が判定され、論理和ORが「1」であるので、コア1については未登録であると判定される。これに基づいて、L2投機エントリキャッシュミスし(L2$_SP_miss)、メモリアクセスが実行される。その後、L2キャッシュタグのコア1に本登録(SP_EN_FLG=0, IID=0xB)し、コア1のL1キャッシュタグに本登録(SP_EN_FLG=0,IID=0xB)する。更に、L2キャッシュタグのコア0にも本登録(SP_EN_FLG=0, IID=0xA)する。これで、L2キャッシュは本登録状態になる。
[マルチコアのL1、L2キャッシュの処理例C-2]
図22は、マルチコアの場合のL1,L2キャッシュでの処理例C-2のシーケンスを示す図である。この例では、最初にキャッシュをフラッシュ(全て無効化)した後、コア0が投機LOAD2を実行し、コア0でL1,L2キャッシュに仮登録する。その後、コア0が非投機LOAD3(分岐命令IID=0xC)を投機LOAD2と同じアドレスに実行し、コア0のL1,L2キャッシュに本登録する。
コア0の投機LOAD2の発行に対する処理は、図19の処理Aと同じである。その後のコア0の非投機LOAD3の発行に応答して、L1キャッシュヒットし(L1$_hit)、L1タグの投機エントリフラグが「1」であるので、L1投機エントリキャッシュミス(L1$_SO_miss)する。これにより、データ登録要求がL2キャッシュに発行される。L2キャッシュでは、L2キャッシュヒット(L2$_hit)し、L2キャッシュタグのコア0の投機エントリフラグが「1」で仮登録であるので、図17のS43の処理により、L2投機エントリキャッシュミスし(L2$_SP_miss)、メモリアクセスが実行される。その後、L2キャッシュタグのコア0に本登録(SP_EN_FLG=0, IID=0xC)し、コア0のL1キャッシュタグに本登録(SP_EN_FLG=0,IID=0xC)する。更に、L2キャッシュタグのコア1にも本登録(SP_EN_FLG=0)にする。これで、L2キャッシュは本登録状態になる。
[マルチコアのL1、L2キャッシュの処理例D]
図23は、マルチコアの場合のL1,L2キャッシュでの処理例Dのシーケンスを示す図である。この例では、図20の処理Bの後、コア0が非投機LOAD3(IID=0xC)を処理Bと同じアドレスに実行し、コア0のL1,L2キャッシュに本登録する。
図20の終了状態で、コア0の非投機LOAD3の発行に応答して、L1キャッシュヒット(L1$_hit)し、L1タグの投機エントリフラグが「1」の仮登録であるので、L1投機エントリキャッシュミスと判定される(L1$_SP_miss)。これにより、データ登録要求がL2キャッシュに発行される。L2キャッシュでは、L2キャッシュヒット(L2$_hit)するが、L2キャッシュタグのコア0の投機エントリフラグが「1」で仮登録であるので、L2投機エントリキャッシュミスする(L2$_SP_miss)。これにより、メモリアクセスが実行される。その後、L2キャッシュタグのコア0に本登録(SP_EN_FLG=0)し、コア0のL1キャッシュタグに本登録(SP_EN_FLG=0,IID=0xC)する。更に、L2キャッシュタグのコア1にも本登録(SP_EN_FLG=0, IID=0xB)する。これで、L2キャッシュは本登録状態になる。
[マルチコアの場合の分岐確定処理]
図24は、マルチコアの場合における分岐確定処理のフローチャート図である。コア0の命令発行部I_ISSのRSBRから送信された分岐命令の分岐予測が確定したことを知らせる分岐確定通知BR_DTRが、コア0のL1キャッシュ制御部L1$_CNT_0のキャッシュ確定制御部CA_DTR_CNT(図6参照)からL2キャッシュ制御部L2$_CNTのキャッシュ確定制御部に送信される(S50)。分岐確定通知BR_DTRには、分岐予測成功/失敗フラグと、分岐命令のIIDとが付加される。
分岐予測が成功の場合(S51のYES)、L2キャッシュ制御部が、分岐確定通知BR_DTRに付加された分岐命令のIIDで L2キャッシュタグ内に仮登録されたエントリを検索し、その分岐命令IIDとマッチする分岐命令IIDを持つL2キャッシュタグ内のコア0の仮登録中のエントリを、本登録に変更する(S52)。具体的には、分岐確定通知の分岐命令IIDとマッチするL2キャッシュタグのコア0のIIDを検出し、そのマッチしたエントリの全コアの投機エントリフラグを「0」にリセットし、本登録状態にする。
そして、L2キャッシュ制御部のキャッシュ確定制御部が、コア0のL1キャッシュ制御部のキャッシュ制御部にキャッシュ本登録要求CA_RG_RQを発行する。キャッシュ本登録要求にも分岐命令IIDが付加される。これのキャッシュ本登録要求に応答し、コア0のL1キャッシュ確定部は、L1キャッシュタグ内に仮登録されたエントリを検索し、キャッシュ本登録要求に添付される分岐命令のIIDとL1キャッシュタグ内の分岐命令のIIDとがマッチした仮登録中のエントリを、本登録に変更する(S53)。具体的には、マッチしたエントリの投機エントリフラグを「0」に変更する。
一方、分岐予測が失敗の場合(S51のNO)、L2キャッシュ制御部のキャッシュ確定制御部が、L2キャッシュタグ内のコア0の仮登録状態の投機エントリフラグを「0」にリセットして、未登録状態にする(S54)。この投機エントリフラグをリセットしたことで、L2キャッシュタグ内の全コアの投機エントリフラグの論理和(OR)が「0」になると(S55のNO)、全コアで未登録状態になるので、L2キャッシュタグの全コアが未登録状態になったエントリのバリッドビットを「0」にして、そのエントリをインバリッド(無効)にする(S58)。これで、図18の状態3(STATE_3)が、分岐確定後に、状態0(STATE_0)になる。
また、前述の投機エントリフラグをリセットしたことで、L2キャッシュタグ内の全コアの投機エントリフラグの論理和(OR)が「1」のままだと(S55のYES)、未だ仮登録のコアがあるので、そのエントリの仮登録状態を保持する(S56)。これで、図18の状態1(STATE_1)が、分岐確定後に、状態2(STATE_2)になる。
そして、L2キャッシュ制御部のキャッシュ確定制御部が、コア0のL1キャッシュ制御部のキャッシュ制御部にキャッシュ無効化要求CA_INVL_RQを発行する。このキャッシュ無効化要求に応答し、コア0のL1キャッシュ確定部は、L1キャッシュタグ内に仮登録されたエントリを検索し、仮登録中のエントリを無効化し、投機エントリフラグも「0」にリセットする(S57)。
以上の通り、本実施の形態によれば、投機実行されたメモリアクセス命令に対してメインメモリへのアクセスが発生し、メモリから読み出したデータをキャッシュメモリに登録するとき、通常のタグ情報に仮登録状態の仮登録情報を付加して、キャッシュタグに登録する。そして、その後、仮登録状態のキャッシュエントリにメモリアクセス命令または要求が投入されると、キャッシュヒットの場合でも、投機エントリキャッシュミスにより、メモリアクセスを実行させ、キャッシュレイテンシを隠蔽する。これにより、プロセッサのセキュリティの脆弱性をなくすことができる。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
命令を発行する命令発行部と、
複数のキャッシュエントリを有するキャッシュデータメモリ及びキャッシュタグと、前記命令発行部から発行されたメモリアクセス命令に応答して、前記メモリアクセス命令のアドレスに基づくキャッシュヒット判定を行い、前記キャッシュヒット判定がキャッシュミスの場合にメモリ側にメモリアクセス要求を発行するキャッシュ制御部とを有する、キャッシュユニットとを有し、
前記キャッシュ制御部は、
前記命令発行部から発行された、投機的実行を示す投機アクセスフラグと分岐命令の識別子(IID)が付加された投機的第1のメモリアクセス命令に応答して、前記メモリアクセス要求を発行したとき、前記メモリアクセス要求により取得したデータを前記キャッシュデータメモリに登録し、前記投機的第1のメモリアクセス命令に付加された前記投機アクセスフラグの投機的実行に基づいて、投機的メモリアクセス命令の実行によりキャッシュ登録されたことを示す仮登録状態の仮登録情報を前記キャッシュタグに登録し、
前記投機的第1のメモリアクセス命令の後に発行され、前記投機的第1のメモリアクセス命令と同じアドレス宛の第2のメモリアクセス命令に応答して、前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、投機エントリキャッシュミスと判定して前記メモリアクセス要求を発行する、演算処理装置。
(付記2)
前記キャッシュ制御部は、
前記キャッシュヒット判定がキャッシュヒットの場合、前記キャッシュデータメモリ内のデータを付加したデータ応答を出力し、
前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合に発行した前記メモリアクセス要求に基づいて、前記メモリから読み出したデータを前記キャッシュデータメモリ及び前記キャッシュタグに登録した後、再度入力された前記第2のメモリアクセス命令に応答して、投機エントリキャッシュヒットと判定して前記データ応答を出力する、付記1に記載の演算処理装置。
(付記3)
前記キャッシュ制御部は、
前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、前記第2のメモリアクセス命令が非投機的実行されるとき、前記メモリアクセス要求により取得したデータを、前記キャッシュタグ内の前記キャッシュヒットしたエントリの前記仮登録情報を本登録状態に変更してキャッシュ登録する、付記1に記載の演算処理装置。
(付記4)
前記キャッシュ制御部は、
前記キャッシュヒット判定がキャッシュヒットの場合、前記キャッシュデータメモリ内のデータを付加したデータ応答を出力し、
前記仮登録情報は、前記仮登録状態を示す投機エントリフラグと前記投機的第1のメモリアクセス命令に対する分岐命令の識別子を含み、
前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、前記キャッシュヒットしたエントリの前記分岐命令の識別子と前記第2のメモリアクセス命令に対する分岐命令の識別子とが一致する場合、投機エントリキャッシュヒットと判定して前記データ応答を出力し、不一致の場合、前記投機エントリキャッシュミスと判定して前記メモリアクセス要求を発行する、付記1に記載の演算処理装置。
(付記5)
前記キャッシュ制御部は、
前記投機的第1のメモリアクセス命令に付加された分岐命令の識別子と一致する分岐命令が分岐確定したとき、分岐予測成功であれば前記キャッシュタグ内の仮登録状態の仮登録情報を本登録状態に変更し、分岐予測失敗であれば前記キャッシュタグ内の仮登録状態の仮登録情報を有するエントリを無効化する、付記1に記載の演算処理装置。
(付記6)
更に、前記キャッシュユニットと前記メモリとの間に設けられた第2レベルのキャッシュユニットを有し、
前記第2レベルのキャッシュユニットの第2レベルのキャッシュ制御部は、
前記投機的第1のメモリアクセス命令に応答して発行された前記メモリアクセス要求により取得したデータを、第2レベルのキャッシュデータメモリに登録すると共に、第2レベルのキャッシュタグに前記仮登録状態の仮登録情報を登録し、
前記第2のメモリアクセス命令に応答して発行された前記メモリアクセス要求に応答して、前記投機エントリキャッシュミスと判定して前記メモリアクセス要求を前記メモリに発行する、付記1に記載の演算処理装置。
(付記7)
前記命令発行部と、第1レベルの前記キャッシュユニットとをそれぞれ有する複数のコアを有し、
前記第2レベルのキャッシュユニットが、前記複数のコアに共通に設けられ、前記複数のコアから前記メモリアクセス要求を発行され、
前記第2レベルのキャッシュユニットの前記第2レベルのキャッシュ制御部は、
前記複数のコアのうち第1のコアから発行された前記メモリアクセス要求に応答して、前記メモリアクセス要求が前記投機的第1のメモリアクセス命令に応じて発行された場合、第2レベルのキャッシュタグに前記第1のコアに対する前記仮登録情報を登録し、
前記複数のコアのうち第2のコアから発行された前記メモリアクセス要求に応答して、前記メモリアクセス要求が前記投機的第1のメモリアクセス命令に応じて発行された場合、第2レベルのキャッシュタグに前記第2のコアに対する前記仮登録情報を登録し、
前記第2のメモリアクセス命令に基づいて発行されたメモリアクセス要求に応答して、前記メモリアクセス要求の発行元コアに対する前記仮登録情報が前記仮登録状態の場合、前記投機エントリキャッシュミスと判定して前記メモリアクセス要求を前記メモリ側に発行する、付記6に記載の演算処理装置。
(付記8)
前記第2レベルのキャッシュタグは、エントリが登録状態を示すバリッドビットを格納し、
前記第2のキャッシュ制御部は、
前記第2のメモリアクセス命令に基づいて前記第1のコアから発行されたメモリアクセス要求に応答して、前記第2のキャッシュタグに基づいてキャッシュヒットとなった場合、前記第1のコアに対する前記仮登録情報が非仮登録状態の場合、前記第2のコアに対する前記仮登録状態が仮登録状態であれば、投機エントリキャッシュミスと判定し、前記第2のコアに対する前記仮登録状態が非仮登録状態であれば、投機エントリキャッシュヒットと判定する、付記7に記載の演算処理装置。
(付記9)
分岐予測失敗で分岐確定したとき、
前記第2レベルのキャッシュ制御部は、前記第2レベルのキャッシュタグの分岐確定元コアに対する仮登録状態の仮登録情報を非仮登録状態にリセットし、
前記分岐確定元のコアの前記L1キャッシュ制御部は、前記L1キャッシュタグの仮登録状態の仮登録情報を格納するエントリを無効化し、
分岐予測成功で分岐確定したとき、
前記第2レベルのキャッシュ制御部は、前記第2レベルのキャッシュタグの分岐確定元コアに対する前記仮登録情報が仮登録状態であり、前記分岐確定した分岐命令の識別子と一致する分岐命令の識別子が格納されているエントリを、本登録状態に変更し、
前記分岐確定元のコアの前記L1キャッシュ制御部は、前記分岐確定元のコアの前記L1キャッシュタグの前記仮登録情報が仮登録状態であり、前記分岐確定した分岐命令の識別子と一致する分岐命令の識別子が格納されているエントリを、本登録状態に変更する、付記7に記載の演算処理装置。
(付記10)
前記分岐予測失敗で分岐確定したとき、
前記第2のキャッシュ制御部は、
前記第2レベルのキャッシュタグの分岐確定元コアに対する仮登録状態の仮登録情報を非仮登録状態にリセットしたとき、前記分岐確定元コアとは異なるコアに対する仮登録情報も仮登録状態の場合、前記第2レベルのキャッシュタグのエントリを無効化する、付記8に記載の演算処理装置。
(付記11)
命令を発行する命令発行部と、
複数のキャッシュエントリを有するキャッシュデータメモリ及びキャッシュタグと、前記命令発行部から発行されたメモリアクセス命令に応答して、前記メモリアクセス命令のアドレスに基づくキャッシュヒット判定を行い、前記キャッシュヒット判定がキャッシュミスの場合にメモリ側にメモリアクセス要求を発行するキャッシュ制御部とを有する、キャッシュユニットとを有する演算処理装置の制御方法であって、
前記キャッシュ制御部は、
前記命令発行部から発行された、投機的実行を示す投機アクセスフラグと分岐命令の識別子が付加された投機的第1のメモリアクセス命令に応答して、前記メモリアクセス要求を発行したとき、前記メモリアクセス要求により取得したデータを前記キャッシュデータメモリに登録し、前記投機的第1のメモリアクセス命令に付加された前記投機アクセスフラグの投機的実行に基づいて、投機的メモリアクセス命令の実行によりキャッシュ登録されたことを示す仮登録状態の仮登録情報を前記キャッシュタグに登録し、
前記投機的第1のメモリアクセス命令の後に発行され、前記投機的第1のメモリアクセス命令と同じアドレス宛の第2のメモリアクセス命令に応答して、前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、投機エントリキャッシュミスと判定して前記メモリアクセス要求を発行する、演算処理装置の制御方法。
I_ISS:命令発行部
L1$_CNT:L1キャッシュ制御部
L1$_TAG:L1キャッシュタグ
L1$_H_JDG:L1キャッシュヒット判定部
L1_EN_H_JDG:L1エントリキャッシュヒット判定部
L1$_DA_RAM:L1キャッシュデータメモリ
L2$_CNT:L2キャッシュ制御部
M_MEM:メインメモリ
SP_AC_INF:投機アクセス情報
SP_AC_FLG:投機アクセスフラグ
BR_IID:直前の分岐命令の命令識別子IID
SP_DA_RQ_FLG:投機データ要求済フラグ
PRV_RG_INF:仮登録情報
SP_EN_FLG:投機エントリフラグ
SP_EN_H_JDG:投機エントリヒット判定部
CA_DTR_CNT:キャッシュ確定制御部

Claims (10)

  1. 命令を発行する命令発行部と、
    複数のキャッシュエントリを有するキャッシュデータメモリ及びキャッシュタグと、前記命令発行部から発行されたメモリアクセス命令に応答して、前記メモリアクセス命令のアドレスに基づくキャッシュヒット判定を行い、前記キャッシュヒット判定がキャッシュミスの場合にメモリ側にメモリアクセス要求を発行するキャッシュ制御部とを有する、キャッシュユニットとを有し、
    前記キャッシュ制御部は、
    前記命令発行部から発行された、投機的実行を示す投機アクセスフラグと分岐命令の識別子が付加された投機的第1のメモリアクセス命令に応答して、前記メモリアクセス要求を発行したとき、前記メモリアクセス要求により取得したデータを前記キャッシュデータメモリに登録し、前記投機的第1のメモリアクセス命令に付加された前記投機アクセスフラグの投機的実行に基づいて、投機的メモリアクセス命令の実行によりキャッシュ登録されたことを示す仮登録状態の仮登録情報を前記キャッシュタグに登録し、
    前記投機的第1のメモリアクセス命令の後に発行され、前記投機的第1のメモリアクセス命令と同じアドレス宛の第2のメモリアクセス命令に応答して、前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、投機エントリキャッシュミスと判定して前記メモリアクセス要求を発行する、演算処理装置。
  2. 前記キャッシュ制御部は、
    前記キャッシュヒット判定がキャッシュヒットの場合、前記キャッシュデータメモリ内のデータを付加したデータ応答を出力し、
    前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合に発行した前記メモリアクセス要求に基づいて、前記メモリから読み出したデータを前記キャッシュデータメモリ及び前記キャッシュタグに登録した後、再度入力された前記第2のメモリアクセス命令に応答して、投機エントリキャッシュヒットと判定して前記データ応答を出力する、請求項1に記載の演算処理装置。
  3. 前記キャッシュ制御部は、
    前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、前記第2のメモリアクセス命令が非投機的実行されるとき、前記メモリアクセス要求により取得したデータを、前記キャッシュタグ内の前記キャッシュヒットしたエントリの前記仮登録情報を本登録状態に変更してキャッシュ登録する、請求項1に記載の演算処理装置。
  4. 前記キャッシュ制御部は、
    前記キャッシュヒット判定がキャッシュヒットの場合、前記キャッシュデータメモリ内のデータを付加したデータ応答を出力し、
    前記仮登録情報は、前記仮登録状態を示す投機エントリフラグと前記投機的第1のメモリアクセス命令に対する分岐命令の識別子を含み、
    前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、前記キャッシュヒットしたエントリの前記分岐命令の識別子と前記第2のメモリアクセス命令に対する分岐命令の識別子とが一致する場合、投機エントリキャッシュヒットと判定して前記データ応答を出力し、不一致の場合、前記投機エントリキャッシュミスと判定して前記メモリアクセス要求を発行する、請求項1に記載の演算処理装置。
  5. 前記キャッシュ制御部は、
    前記投機的第1のメモリアクセス命令に付加された分岐命令の識別子と一致する分岐命令が分岐確定したとき、分岐予測成功であれば前記キャッシュタグ内の仮登録状態の仮登録情報を本登録状態に変更し、分岐予測失敗であれば前記キャッシュタグ内の仮登録状態の仮登録情報を有するエントリを無効化する、請求項1に記載の演算処理装置。
  6. 更に、前記キャッシュユニットと前記メモリとの間に設けられた第2レベルのキャッシュユニットを有し、
    前記第2レベルのキャッシュユニットの第2レベルのキャッシュ制御部は、
    前記投機的第1のメモリアクセス命令に応答して発行された前記メモリアクセス要求により取得したデータを、第2レベルのキャッシュデータメモリに登録すると共に、第2レベルのキャッシュタグに前記仮登録状態の仮登録情報を登録し、
    前記第2のメモリアクセス命令に応答して発行された前記メモリアクセス要求に応答して、前記投機エントリキャッシュミスと判定して前記メモリアクセス要求を前記メモリに発行する、請求項1に記載の演算処理装置。
  7. 前記命令発行部と、第1レベルの前記キャッシュユニットとをそれぞれ有する複数のコアを有し、
    前記第2レベルのキャッシュユニットが、前記複数のコアに共通に設けられ、前記複数のコアから前記メモリアクセス要求を発行され、
    前記第2レベルのキャッシュユニットの前記第2レベルのキャッシュ制御部は、
    前記複数のコアのうち第1のコアから発行された前記メモリアクセス要求に応答して、前記メモリアクセス要求が前記投機的第1のメモリアクセス命令に応じて発行された場合、第2レベルのキャッシュタグに前記第1のコアに対する前記仮登録情報を登録し、
    前記複数のコアのうち第2のコアから発行された前記メモリアクセス要求に応答して、前記メモリアクセス要求が前記投機的第1のメモリアクセス命令に応じて発行された場合、第2レベルのキャッシュタグに前記第2のコアに対する前記仮登録情報を登録し、
    前記第2のメモリアクセス命令に基づいて発行されたメモリアクセス要求に応答して、前記メモリアクセス要求の発行元コアに対する前記仮登録情報が前記仮登録状態の場合、前記投機エントリキャッシュミスと判定して前記メモリアクセス要求を前記メモリ側に発行する、請求項6に記載の演算処理装置。
  8. 前記第2レベルのキャッシュタグは、エントリが登録状態を示すバリッドビットを格納し、
    前記第2レベルのキャッシュ制御部は、
    前記第2のメモリアクセス命令に基づいて前記第1のコアから発行されたメモリアクセス要求に応答して、前記第2レベルのキャッシュタグに基づいてキャッシュヒットとなった場合、前記第1のコアに対する前記仮登録情報が非仮登録状態の場合、前記第2のコアに対する前記仮登録状態が仮登録状態であれば、投機エントリキャッシュミスと判定し、前記第2のコアに対する前記仮登録状態が非仮登録状態であれば、投機エントリキャッシュヒットと判定する、請求項7に記載の演算処理装置。
  9. 分岐予測失敗で分岐確定したとき、
    前記第2レベルのキャッシュ制御部は、前記第2レベルのキャッシュタグの分岐確定元コアに対する仮登録状態の仮登録情報を非仮登録状態にリセットし、
    前記分岐確定元コアの第1レベルの前記キャッシュ制御部は、第1レベルの前記キャッシュタグの仮登録状態の仮登録情報を格納するエントリを無効化し、
    分岐予測成功で分岐確定したとき、
    前記第2レベルのキャッシュ制御部は、前記第2レベルのキャッシュタグの分岐確定元コアに対する前記仮登録情報が仮登録状態であり、前記分岐確定した分岐命令の識別子と一致する分岐命令の識別子が格納されているエントリを、本登録状態に変更し、
    前記分岐確定元コアの前記第1レベルのキャッシュ制御部は、前記分岐確定元コアの前記第1レベルのキャッシュタグの前記仮登録情報が仮登録状態であり、前記分岐確定した分岐命令の識別子と一致する分岐命令の識別子が格納されているエントリを、本登録状態に変更する、請求項7に記載の演算処理装置。
  10. 命令を発行する命令発行部と、
    複数のキャッシュエントリを有するキャッシュデータメモリ及びキャッシュタグと、前記命令発行部から発行されたメモリアクセス命令に応答して、前記メモリアクセス命令のアドレスに基づくキャッシュヒット判定を行い、前記キャッシュヒット判定がキャッシュミスの場合にメモリ側にメモリアクセス要求を発行するキャッシュ制御部とを有する、キャッシュユニットとを有する演算処理装置の制御方法であって、
    前記キャッシュ制御部は、
    前記命令発行部から発行された、投機的実行を示す投機アクセスフラグと分岐命令の識別子が付加された投機的第1のメモリアクセス命令に応答して、前記メモリアクセス要求を発行したとき、前記メモリアクセス要求により取得したデータを前記キャッシュデータメモリに登録し、前記投機的第1のメモリアクセス命令に付加された前記投機アクセスフラグの投機的実行に基づいて、投機的メモリアクセス命令の実行によりキャッシュ登録されたことを示す仮登録状態の仮登録情報を前記キャッシュタグに登録し、
    前記投機的第1のメモリアクセス命令の後に発行され、前記投機的第1のメモリアクセス命令と同じアドレス宛の第2のメモリアクセス命令に応答して、前記キャッシュタグ内のキャッシュヒットしたエントリの前記仮登録情報が前記仮登録状態の場合、投機エントリキャッシュミスと判定して前記メモリアクセス要求を発行する、演算処理装置の制御方法。
JP2018108952A 2018-06-06 2018-06-06 演算処理装置及び演算処理装置の制御方法 Active JP7014965B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018108952A JP7014965B2 (ja) 2018-06-06 2018-06-06 演算処理装置及び演算処理装置の制御方法
US16/430,487 US11119930B2 (en) 2018-06-06 2019-06-04 Arithmetic processing apparatus and control method for arithmetic processing apparatus

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JP2019212129A JP2019212129A (ja) 2019-12-12
JP7014965B2 true JP7014965B2 (ja) 2022-02-02

Family

ID=68764607

Family Applications (1)

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

Country Status (2)

Country Link
US (1) US11119930B2 (ja)
JP (1) JP7014965B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11068612B2 (en) * 2018-08-01 2021-07-20 International Business Machines Corporation Microarchitectural techniques to mitigate cache-based data security vulnerabilities
US11635965B2 (en) 2018-10-31 2023-04-25 Intel Corporation Apparatuses and methods for speculative execution side channel mitigation
US11334495B2 (en) * 2019-08-23 2022-05-17 Arm Limited Cache eviction
US20210209028A1 (en) * 2020-01-07 2021-07-08 International Business Machines Corporation Controlling processor instruction execution
US11029957B1 (en) 2020-03-27 2021-06-08 Intel Corporation Apparatuses, methods, and systems for instructions to compartmentalize code
CN114721726B (zh) * 2022-06-10 2022-08-12 成都登临科技有限公司 一种多线程组并行获取指令的方法、处理器及电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040162948A1 (en) 2003-02-13 2004-08-19 Marc Tremblay Method and apparatus for avoiding locks by speculatively executing critical sections

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4701166B2 (ja) 2004-04-26 2011-06-15 パナソニック株式会社 暗号又は復号を行うコンピュータシステム及びコンピュータプログラム
JP4520788B2 (ja) * 2004-07-29 2010-08-11 富士通株式会社 マルチスレッドプロセッサ
JP4364166B2 (ja) 2005-06-30 2009-11-11 株式会社東芝 キャッシュ装置
JP2007334564A (ja) 2006-06-14 2007-12-27 Matsushita Electric Ind Co Ltd ユニファイドメモリシステム
JP5154119B2 (ja) * 2007-03-26 2013-02-27 テレフオンアクチーボラゲット エル エム エリクソン(パブル) プロセッサ
US7925867B2 (en) * 2008-01-23 2011-04-12 Arm Limited Pre-decode checking for pre-decoded instructions that cross cache line boundaries

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040162948A1 (en) 2003-02-13 2004-08-19 Marc Tremblay Method and apparatus for avoiding locks by speculatively executing critical sections
JP2006518077A (ja) 2003-02-13 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド 臨界領域を投機的に実行することによりロックを回避するための方法および装置

Also Published As

Publication number Publication date
US11119930B2 (en) 2021-09-14
US20190377677A1 (en) 2019-12-12
JP2019212129A (ja) 2019-12-12

Similar Documents

Publication Publication Date Title
JP7014965B2 (ja) 演算処理装置及び演算処理装置の制御方法
US10853072B2 (en) Arithmetic processing apparatus and method of controlling arithmetic processing apparatus
JP7228592B2 (ja) 投機的キャッシュ記憶領域
US7162613B2 (en) Mechanism for processing speculative LL and SC instructions in a pipelined processor
US7254678B2 (en) Enhanced STCX design to improve subsequent load efficiency
CN111611096A (zh) 受限推测性执行
US7953932B2 (en) System and method for avoiding deadlocks when performing storage updates in a multi-processor environment
US20070067529A1 (en) Method for denying probes during proactive synchronization within a computer system
US20150347134A1 (en) Delaying Branch Prediction Updates Until After a Transaction is Completed
JP7443641B2 (ja) 命令の機密としての動的な指定
Heller et al. Millicode in an IBM zSeries processor
JP7064134B2 (ja) 演算処理装置及び演算処理装置の制御方法
US10831482B2 (en) Arithmetic processing apparatus and control method for arithmetic processing apparatus
CN112148372A (zh) 用于推测性侧信道攻击的硬件加载强化
JP7064135B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP7100258B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP2017167582A (ja) 演算処理装置、情報処理装置、及び演算処理装置の制御方法
JP2019212152A (ja) 演算処理装置及び演算処理装置の制御方法
WO2017112359A1 (en) Method and apparatus for loop-invariant instruction detection and elimination
US20240143502A1 (en) Apparatus and method for a zero level cache/memory architecture
US20240126702A1 (en) Hardware processor core having a memory sliced by linear address
US20240143513A1 (en) Apparatus and method for switching between page table types
US20240143361A1 (en) Apparatus and method for managing deprecated instruction set architecture (isa) features
US11663014B2 (en) Speculatively executing instructions that follow a status updating instruction
TW202213088A (zh) 透過微運算進行暫存器強化的系統、設備及方法

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

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220103