JP2023079640A - 演算処理装置および演算処理方法 - Google Patents
演算処理装置および演算処理方法 Download PDFInfo
- Publication number
- JP2023079640A JP2023079640A JP2021193200A JP2021193200A JP2023079640A JP 2023079640 A JP2023079640 A JP 2023079640A JP 2021193200 A JP2021193200 A JP 2021193200A JP 2021193200 A JP2021193200 A JP 2021193200A JP 2023079640 A JP2023079640 A JP 2023079640A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- conflict
- store
- cache
- data
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 216
- 238000000034 method Methods 0.000 title description 17
- 238000012546 transfer Methods 0.000 claims description 15
- 238000003672 processing method Methods 0.000 claims description 4
- 230000015556 catabolic process Effects 0.000 abstract 1
- 238000006731 degradation reaction Methods 0.000 abstract 1
- 230000008569 process Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 14
- 230000007704 transition Effects 0.000 description 11
- 102220470087 Ribonucleoside-diphosphate reductase subunit M2_S20A_mutation Human genes 0.000 description 4
- 101100464779 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) CNA1 gene Proteins 0.000 description 4
- 102200033501 rs387907005 Human genes 0.000 description 4
- 102100023882 Endoribonuclease ZC3H12A Human genes 0.000 description 2
- 101710112715 Endoribonuclease ZC3H12A Proteins 0.000 description 2
- 102220515133 Hydroxyacid-oxoacid transhydrogenase, mitochondrial_S30A_mutation Human genes 0.000 description 2
- 108700012361 REG2 Proteins 0.000 description 2
- 101150108637 REG2 gene Proteins 0.000 description 2
- 108091058543 REG3 Proteins 0.000 description 2
- 101100120298 Rattus norvegicus Flot1 gene Proteins 0.000 description 2
- 101100412403 Rattus norvegicus Reg3b gene Proteins 0.000 description 2
- 102100027336 Regenerating islet-derived protein 3-alpha Human genes 0.000 description 2
- 230000006866 deterioration Effects 0.000 description 2
- 230000002542 deteriorative effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- QGVYYLZOAMMKAH-UHFFFAOYSA-N pegnivacogin Chemical compound COCCOC(=O)NCCCCC(NC(=O)OCCOC)C(=O)NCCCCCCOP(=O)(O)O QGVYYLZOAMMKAH-UHFFFAOYSA-N 0.000 description 2
- BDEDPKFUFGCVCJ-UHFFFAOYSA-N 3,6-dihydroxy-8,8-dimethyl-1-oxo-3,4,7,9-tetrahydrocyclopenta[h]isochromene-5-carbaldehyde Chemical compound O=C1OC(O)CC(C(C=O)=C2O)=C1C1=C2CC(C)(C)C1 BDEDPKFUFGCVCJ-UHFFFAOYSA-N 0.000 description 1
- 101000915578 Homo sapiens Zinc finger HIT domain-containing protein 3 Proteins 0.000 description 1
- 102100028598 Zinc finger HIT domain-containing protein 3 Human genes 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
- G06F12/0857—Overlapped cache accessing, e.g. pipeline by multiple requestors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0864—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44552—Conflict resolution, i.e. enabling coexistence of conflicting executables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/603—Details of cache memory of operating mode, e.g. cache mode or local memory mode
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】メモリアクセス命令とアトミック命令との競合の判定の精度を向上し、演算処理装置の処理性能の低下を抑制する。【解決手段】複数のスレッドを実行可能な演算処理装置は、複数のウェイを有するキャッシュと、キャッシュヒット判定部と、複数のスレッドのいずれかが実行するアトミック命令の対象データを保持する記憶領域を識別するウェイ番号およびインデックスアドレスを保持する保持部と、保持部に保持されたウェイ番号およびインデックスアドレスのペアが、複数のスレッドの別のいずれかが実行するメモリアクセス命令の対象データを保持する記憶領域を識別するウェイ番号およびインデックスアドレスのペアと一致する場合、命令の競合を判定する競合判定部と、競合判定部により競合が判定された場合、メモリアクセス命令の対象データのキャッシュへの入出力を抑止するアクセス制御部と、を有する。【選択図】図1
Description
本発明は、演算処理装置および演算処理方法に関する。
マルチスレッドで演算を実行可能な演算処理装置は、スレッド間でのデータの競合を避ける制御が実行される。例えば、複数のウェイを含むキャッシュを有する演算処理装置において、スレッド毎に保持されるウェイ番号とキャッシュのライン番号とを比較することで、スレッドの処理の排他制御を行う手法が知られている(例えば、特許文献1参照)。
スレッドの処理の排他制御は、例えば、CAS(Compare And Swap)等のアトミック命令が使用される(例えば、特許文献2参照)。共有バスを介して相互に接続される複数のプロセッサを含むマルチプロセッサシステムにおいても、プロセッサがそれぞれ実行するスレッドの排他制御が実行される(例えば、特許文献3参照)。
複数のスレッドを実行可能な演算処理装置は、スレッドのいずれかでアトミック命令を実行する場合、他のスレッドで実行する、アトミック命令と競合するメモリアクセス命令の実行をアトミック命令の完了まで抑止する。例えば、アトミック命令と競合しないメモリアクセス命令に対して、アトミック命令との競合が判定される場合、本来待たなくてもよいメモリアクセス命令が、アトミック命令の完了まで待たされる。この結果、メモリアクセス命令の実行効率が低下し、演算処理装置の処理性能が低下する。
1つの側面では、本発明は、メモリアクセス命令とアトミック命令との競合の判定の精度を向上し、演算処理装置の処理性能の低下を抑制することを目的とする。
一つの観点によれば、演算処理装置は、複数のスレッドを実行可能な演算処理装置であって、インデックスアドレスにより識別される複数の記憶領域を各々含む複数のウェイを有するキャッシュと、キャッシュヒットを判定するキャッシュヒット判定部と、前記複数のスレッドのいずれかが実行するアトミック命令の対象データを保持する前記記憶領域を識別するウェイ番号およびインデックスアドレスを保持する保持部と、前記保持部に保持されたウェイ番号およびインデックスアドレスのペアが、前記複数のスレッドの別のいずれかが実行するメモリアクセス命令の対象データを保持する前記記憶領域を識別するウェイ番号およびインデックスアドレスのペアと一致する場合、命令の競合を判定する競合判定部と、前記競合判定部により前記競合が判定された場合、前記メモリアクセス命令の対象データの前記キャッシュへの入出力を抑止するアクセス制御部と、を有する。
メモリアクセス命令とアトミック命令との競合の判定の精度を向上し、演算処理装置の処理性能の低下を抑制することができる。
以下、図面を参照して、実施形態が説明される。以下では、信号等の情報が伝達される信号線には、信号名と同じ符号を使用する。また、図中に単線で示す信号線が、複数ビットの場合もある。
図1は、一実施形態における演算処理装置の一例を示す。図1に示す演算処理装置100は、例えば、マルチスレッドで演算を実行可能なCPU(Central Processing Unit)等のプロセッサである。マルチスレッドでは、一つのプロセスを複数のスレッド(処理単位)に分けて処理が並列に実行される。演算処理装置100は、アクセス制御部1、キャッシュヒット判定部2、キャッシュ3、保持部4および競合判定部5を有する。なお、演算処理装置100は、図2に示すストアバッファSTBおよびライトバッファWBを有してもよい。
アクセス制御部1は、図示しない命令発行部が発行するメモリアクセス命令またはアトミック命令等に基づいて、アクセスアドレスを含む命令情報を出力する。例えば、アクセス制御部1は、アトミック命令を受信した場合、後述するロード処理、コンペア処理およびストア処理のフローを順次実行する。
キャッシュヒット判定部2は、TAGアレイTARYおよびコンパレータCMP0、CMP1を有する。例えば、TAGアレイTARYは、複数のウェイWAY(WAY0、WAY1)を有する。各ウェイWAYは、複数のインデックスアドレスIDXの値に対応して複数のタグアドレスTAGを保持する複数のエントリを有する。以下では、インデックスアドレスIDXは、インデックスIDXとも称され、タグアドレスTAGは、タグTAGとも称される。
インデックスIDXは、アクセスアドレスに含まれる所定数のビットにより表される。タグTAGは、アクセスアドレスに含まれる、インデックスIDXとは別の所定数のビットにより表される。例えば、インデックスIDXが8ビットの場合、各ウェイWAYは、256個のエントリにタグTAGを格納可能である。
タグアレイTARYは、アクセスアドレスに含まれるインデックスIDXに対応するエントリからタグTAGをウェイWAY0、WAY1毎に読み出し、コンパレータCMP0、CMP1に出力する。各コンパレータCMP0、CMP1は、対応するウェイWAYから出力されるタグTAGをアクセスアドレスに含まれるタグTAGと比較する。コンパレータCMP0、CMP1のいずれかは、タグTAGが一致する場合、アクセスアドレスに対応するデータがキャッシュ3に保持されていると判定し(キャッシュヒット)、ヒット信号HIT(HIT0、HIT1)を出力する。
キャッシュ3は、例えば、セットアソシアティブ方式の1次キャッシュであり、データアレイDARYを有する。データアレイDARYは、データDTを保持する複数のウェイWAY(WAY0、WAY1)を有する。データアレイDARYの各ウェイWAYは、複数のインデックスIDXの値に対応して、データを保持する複数のエントリを有する。換言すれば、キャッシュ3は、インデックスIDX毎に複数のウェイWAY0、WAY1を有する。例えば、データDTは、2次キャッシュまたはメインメモリ等の下位のメモリに対する入出力の単位であり、キャッシュラインとも称される。
保持部4は、アトミック命令のロード処理によりデータが格納されたキャッシュ3のウェイWAYと、アトミック命令のアクセスアドレスに含まれるインデックスIDXとを保持する。例えば、保持部4には、アトミック命令のロード処理でのアクセス対象のアクセスアドレスがキャッシュヒットしたことに基づいて、アクセスアドレスに含まれるインデックスIDXが保持される。また、保持部4には、アトミック命令のアクセス対象のアクセスアドレスに含まれるタグTAGを保持しているタグアレイTARYのウェイWAYの番号が保持される。以下では、ウェイWAYの番号は、ウェイ番号WAYとも称される。
アトミック命令において、ロード処理に続くコンペア処理およびストア処理が完了した場合、例えば、保持部4に保持されたウェイWAYおよびインデックスIDXは無効にされる。保持部4に保持された情報は、フラグの値により無効化されてもよく、保持部4に無効値を格納することで無効化されてもよい。保持部4に有効なウェイWAYおよびインデックスIDXが保持される期間は、アトミック命令のロック期間に対応する。なお、保持部4には、並列に実行可能な複数のスレッドのそれぞれに対応して、ウェイWAYおよびインデックスIDXを保持する複数の領域を有してもよい。
競合判定部5は、アクセスアドレスに対応するアクセス対象のデータDTが格納されたキャッシュ3のウェイWAYと、アクセスアドレスに含まれるインデックスIDXとのペアと、保持部4に保持されたウェイWAYおよびインデックスIDXのペアとを比較する。競合判定部5は、ウェイWAYおよびインデックスIDXのペアが互いに一致する場合、競合を示す論理値の競合信号CONFをアクセス制御部1に出力する。競合判定部5は、ウェイWAYおよびインデックスIDXのペアが一致しない場合、競合を示さない論理値の競合信号CONFをアクセス制御部1に出力する。ウェイWAYの比較は、タグTAGの比較と等価である。
アクセスアドレスは、例えば、インデックスアドレスIDX、タグアドレスTAGおよびオフセットアドレスで構成される。オフセットアドレスは、下位のメモリに対するデータの入出力単位であるキャッシュライン内のデータDTのバイト位置を示す。このため、競合判定部5は、インデックスアドレスIDXおよびウェイWAYのペアが一致する場合、ロック中のアトミック命令と、アトミック命令と並列に実行されるメモリアクセス命令との競合(データの競合)を判定できる。
これに対して、例えば、ウェイWAYを比較することなく、インデックスアドレスIDXのみの比較により競合が判定される場合、タグアドレスTAGが一致していないにもかかわらずアトミック命令との競合が発生していると判定される場合がある。誤った競合の判定により、メモリアクセス命令の実行が保留された場合、無駄な待ち時間が発生し、演算処理装置100の処理性能は低下する。
アクセス制御部1は、メモリアクセス命令のアクセスアドレスがキャッシュヒット判定部2によりキャッシュヒットした場合、競合信号CONFに応じて次のように動作する。アクセス制御部1は、競合信号CONFが競合を示さない場合、キャッシュヒットしたキャッシュ3のウェイWAYにおいて、インデックスIDXにより示されるエントリにデータDTを入出力する。例えば、ロード命令では、データアレイDARYのエントリからデータDTが読み出され、ストア命令では、データアレイDARYのエントリにデータDTが格納される。アクセス制御部1は、競合信号CONFが競合を示す場合、キャッシュ3がキャッシュヒットした場合でも、キャッシュ3に対するデータDTの入出力を抑止する。
これにより、この実施形態では、アトミック命令によりロック中のアクセスアドレスに対応してキャッシュ3が保持しているデータDTのアクセスを抑止することができる。したがって、アトミック命令の実行中に、アトミック処理の対象データの参照および更新を抑止することができる。この際、競合判定部5は、アクセス対象のデータの格納位置を示すアドレス(IDX、TAG)の全てのビットの一致または不一致を判定するため、アトミック命令と競合するか否かを正しく判定することができる。換言すれば、メモリアクセス命令とアトミック命令との競合の判定の精度を向上することができる。したがって、アトミック命令の実行中に、アトミック処理の対象データの参照および更新を抑止し、アトミック処理の対象データでないデータの参照および更新を実施することができる。この結果、競合の誤った判定により、メモリアクセス命令の実行が保留されることを抑制することができ、演算処理装置100の処理性能の低下を抑制することができる。
図2は、別の実施形態における演算処理装置の一例を示す。上述した実施形態と同様の要素については、詳細な説明は省略する。図2に示す演算処理装置102は、図1に示した演算処理装置100と同様に、マルチスレッドで演算を実行可能なCPU等のプロセッサである。特に限定されないが、例えば、演算処理装置102は、最大4個のスレッドを並列に実行可能である。
演算処理装置102は、命令発行部10、ストア制御部20、ロック制御部30、フェッチポート40、L1キャッシュ50(1次キャッシュ)を有する。ロック制御部30は、4個のスレッドが実行するアトミック命令の各々に対応する4個のレジスタREG(REG0、REG1、REG2、REG3)およびロック判定回路32、34を有する。また、演算処理装置102は、セレクタSEL、TLB(Translation Lookaside Buffer)、タグL1TAG、ストアバッファSTB、ライトバッファWBを有する。図2において、縦長の矩形は、フリップフロップFFを示す。例えば、L1キャッシュ50には、2ウェイセットアソシアティブ方式が採用される。
命令発行部10、ストア制御部20およびフェッチポート40は、L1キャッシュ50に対するデータの入出力を制御するアクセス制御部の一例である。タグL1TAGは、L1キャッシュ50のキャッシュヒット/キャッシュミスを判定するキャッシュヒット判定部の一例である。レジスタREGは、後述するアトミック命令の対象データを保持するL1キャッシュ50の記憶領域を識別するウェイ番号WAYおよびインデックスアドレスIDXを保持する保持部の一例である。ロック判定回路32、34は、競合判定部の一例である。また、ロック判定回路32は、フラグリセット部の一例である。
命令発行部10は、例えば、図示しない命令バッファから受信する命令をデコードし、デコードした命令を発行する。命令発行部10が受信する命令として、各種演算命令、メモリアクセス命令およびアトミック命令等がある。この実施形態では、命令発行部10がメモリアクセス命令およびアトミック命令を受信する例が説明される。このため、図2では演算命令の実行に関係する回路ブロックの記載は省略される。
メモリアクセス命令は、ロード命令またはストア命令である。命令発行部10は、アトミック命令をデコードした場合、ロード命令、比較命令およびストア命令を順に発行する。アトミック命令については、図3で説明される。
セレクタSELは、命令発行部10がデコードした命令、フェッチポート40から出力される保留された命令または後述するストア命令の状態ST1の開始指示のいずれかを調停により選択し、選択した命令に含まれるアドレスをTLBに出力する。TLBは、命令発行部10から出力される仮想アドレスを物理アドレスに変換し、変換した物理アドレスをタグL1TAGに出力する。以下では、物理アドレスは、単にアドレスとも称される。
タグL1TAGは、TLBから出力されるアドレスに基づいて、L1キャッシュ50のキャッシュヒットまたはキャッシュミスを判定する。タグL1TAGは、キャッシュヒットを判定した場合、ロック制御部30にインデックスアドレスIDXおよびウェイ番号WAYを通知する。
タグL1TAGは、キャッシュミスを判定した場合、アクセス対象のデータの転送要求を下位のメモリに発行する。また、タグL1TAGは、ロード命令のキャッシュミスを判定した場合、ロード命令を実行するための情報をフェッチポート40に転送する。これにより、ロード命令の実行は、下位のメモリからデータが転送されるまで保留される。例えば、下位のメモリは、2次キャッシュまたはメインメモリ等である。タグL1TAGからの転送要求に基づいて下位のメモリから転送されたデータは、L1キャッシュ50に格納される。フェッチポート40は、ロック制御部30から転送される保留された命令を保持し、保持した命令をセレクタSELに再発行する。
ストア制御部20は、4個のスレッドのそれぞれでアトミック命令がロック中(実行中)であることを示す4個のロックフラグINTLK(INTLK0、INTLK1、INTLK2、INTLK3)を有する。ストア制御部20は、ストア命令に含まれるアドレス等の情報を命令発行部10から受信して保持する。ストア制御部20は、キャッシュヒットしたストア命令の対象データが格納されているウェイ番号WAYをタグL1TAGから受信して保持する。そして、ストア制御部20は、ロック制御部30からの情報に基づいてストアバッファSTBおよびライトバッファWBの動作を制御する。
ストアバッファSTBは、ストア命令をデコードした命令発行部10から受信するストアデータSTD(他の情報も含む)とLIDフラグとを保持するFIFO(First-In First-Out)形式の複数のエントリを有する。ストアバッファSTBは、第1バッファの一例である。ストアバッファSTBに保持されるストアデータSTDは、第1データの一例である。ストアバッファSTBに保持されるLIDフラグは、第1フラグの一例である。ストアバッファSTBは、ストア制御部20からの指示WBGOに基づいて、エントリに保持しているストアデータSTDおよびLIDフラグをライトバッファWBに転送する。
ライトバッファWBは、ストアバッファSTBから転送されるストアデータSTDとLIDフラグとを保持するFIFO形式の複数のエントリを有する。ライトバッファWBは、ストアバッファSTBから転送されるストアデータSTDおよびLIDフラグをエントリに保持する。
ライトバッファWBは、第2バッファの一例である。ライトバッファWBに保持されるストアデータSTDは、第2データの一例である。ライトバッファWBに保持されるLIDフラグは、第2フラグの一例である。また、ライトバッファWBは、ストア制御部20による制御に基づいて、エントリに保持しているストアデータSTDをL1キャッシュ50に書き込む。
L1キャッシュ50は、図1に示すキャッシュ3と同様のデータアレイDARYを有する。L1キャッシュ50は、命令がキャシュヒットし、かつ、ロック制御部30によりアトミック命令との競合がないことが判定された場合にアクセスされる。L1キャッシュ50は、ロード命令では図示しないデータアレイDARYからデータを読み出し、読み出したデータをデータLDDとして命令発行部10に出力する。L1キャッシュ50は、ストア命令または下位のメモリからデータが転送された場合、データアレイDARYにデータを書き込む。
ロック制御部30は、アトミック命令がキャッシュヒットしたときのインデックスIDXおよびタグL1TAGから出力されるウェイ番号WAYを、アトミック命令を実行中のスレッドに対応するレジスタREGに格納する。ここで、各スレッドは、アトミック命令とロード命令またはストア命令とを同時に実行しないため、ロード命令またはストア命令を実行するスレッドに対応するレジスタREGには、インデックスIDXおよびウェイ番号WAYは保持されない。
ロック制御部30は、後述するストア命令の状態ST0において、ストア命令がキャッシュヒットした場合、ストアバッファSTBのLIDフラグ(STB.LID)をセットする指示STB.LIDsetをストア制御部20に出力する。ストア制御部20は、指示STB.LIDsetに基づいて、ストアバッファSTBにおいてストア対象のデータとともにエントリに保持されたLIDフラグを"1"にセットする。ロック制御部30は、状態ST0において、ストア命令がキャッシュミスした場合、ストアバッファSTBのLIDフラグをリセットする指示STB.LIDrstをストア制御部20に出力する。ストア制御部20は、指示STB.LIDrstに基づいて、ストアバッファSTBにおいてストア対象のデータとともにエントリに保持されたLIDフラグを"0"にリセットする。
ロック判定回路32は、アトミック命令を実行するスレッドに対応するレジスタREGにインデックスIDXおよびウェイ番号WAYが格納された場合、スレッドに対応するロックフラグINTLKをセットする指示INTLKsetをストア制御部20に出力する。ストア制御部20は、指示INTLKsetに基づいて、対応するロックフラグINTLKをセットする。
ロック判定回路32は、セット中のロックフラグINTLKに対応するレジスタREGに有効なインデックスIDXおよびウェイ番号WAYが保持されていると判断する。ロック判定回路32は、リセット中のロックフラグINTLKに対応するレジスタREGに無効なインデックスIDXおよびウェイ番号WAYが保持されていると判断する。
ロック判定回路32は、アトミック命令の完了に基づいて、対応するスレッドのロックフラグINTLKをリセットする指示INTLKrstをストア制御部20に出力する。ストア制御部20は、指示INTLKrstに基づいて、対応するロックフラグINTLKをリセットする。これにより、ロック判定回路32は、スレッド毎にアトミック命令がロックしているか否かを、ロックフラグINTLKにより判定することができる。
ロック判定回路32は、ロード命令がキャッシュヒットしたときのインデックスIDXおよびタグL1TAGから出力されるウェイ番号WAYのペアを受信する。ロック判定回路32は、受信したインデックスIDXおよびウェイ番号WAYのペアを、有効なレジスタREGに保持されたインデックスIDXおよびウェイ番号WAYのペアと比較し、一致または不一致を判定する。
ロック判定回路32は、一致(競合)を判定した場合、ロード命令の実行を抑止するため、ロード命令を実行するための情報をフェッチポート40に転送する。これにより、アトミック命令との競合が判定されたロード命令の実行は保留される。ロック判定回路32は、不一致(競合しない)を判定した場合、ロード命令を実行するために、図示しない経路を介してL1キャッシュ50に読み出しアクセス要求を出力する。ロック判定回路32は、L1キャッシュ50に読み出しアクセス要求を出力した場合、STV(Status Valid)信号を命令発行部10に出力し、ロード命令をコミットさせる。
ロック判定回路32は、アトミック命令に含まれるインデックスIDXおよびウェイ番号WAYがレジスタREGに格納された場合、ライトバッファWBのLIDフラグ(WB.LID)をリセットする指示WB.LIDrstをストア制御部20に出力する。ストア制御部20は、指示WB.LIDrstに基づいて、ライトバッファWBのLIDフラグ(WB.LID)を"0"にリセットする。
また、ロック判定回路32は、ストア命令がキャッシュヒットしたときのインデックスIDXおよびタグL1TAGから出力されるウェイ番号WAYのペアを受信する。ロック判定回路32は、受信したインデックスIDXおよびウェイ番号WAYのペアを、有効なレジスタREGに保持されたインデックスIDXおよびウェイ番号WAYのペアと比較し、一致または不一致を判定する。
ロック判定回路32は、有効なレジスタREGのいずれかとの一致(競合)を判定した場合、ストア命令の実行を抑止するため、ストア命令を実行するための情報をフェッチポート40に転送する。これにより、アトミック命令との競合が判定されたストア命令の実行は保留される。ロック判定回路32は、全ての有効なレジスタとの不一致を判定した場合、ストア命令の実行を継続するために、STV信号を命令発行部10に出力し、ストア命令をコミットさせる。
命令発行部10は、STV信号に基づいてストア命令の状態ST0をコミットし、コミット通知をストア制御部20に出力する。コミット通知を受信したストア制御部20は、ストアバッファSTBに保持されたストアデータSTDおよびLIDフラグをライトバッファWBに転送する(WBGO)。
ロック判定回路32は、後述するストア命令の状態ST1において、ストア命令がキャッシュヒット状態の場合、ストア命令に対応してストア制御部20が保持するインデックスアドレスIDXおよびウェイ番号WAYを受信する(IDX,WAY(ST1))。ロック判定回路32は、受信したインデックスIDXおよびウェイ番号WAYのペアを、有効なレジスタREGに保持されたインデックスIDXおよびウェイ番号WAYのペアと比較し、一致または不一致を判定する。
ロック判定回路32は、有効なレジスタREGのいずれかとの一致(競合)を判定した場合、ライトバッファWBのエントリのLIDフラグ(WB.LID)のセットを抑止する指示WB.LIDen1をストア制御部20に出力する。ロック判定回路32は、全ての有効なレジスタとの不一致を判定した場合、ライトバッファWBのエントリのLIDフラグ(WB.LID)のセットを許可する指示WB.LIDen1をストア制御部20に出力する。ストア制御部20は、指示WB.LIDen1に基づいて、ライトバッファWBのLIDフラグ(WB.LID)をセットを許可し、または、セットを抑止する。
ロック判定回路34は、ストア命令の状態ST0の完了後、状態ST1に遷移する前にストア命令に対応してストア制御部20が保持するインデックスIDXおよびウェイ番号WAYのペアを受信する(IDX,WAY(WBGO))。符号WBGOは、ロック判定回路34に出力するインデックスIDXおよびウェイ番号WAYが、ストアバッファSTBからライトバッファWBに転送されるストアデータSTD等に対応することを示す。ロック判定回路34は、ストア制御部20から受信したインデックスIDXおよびウェイ番号WAYのペアと、有効なレジスタREGに保持されたインデックスIDXおよびウェイ番号WAYのペアとを比較し、一致または不一致を判定する。
ロック判定回路34は、有効なレジスタREGのいずれかとの一致(競合)を判定した場合、ライトバッファWBのLIDフラグ(WB.LID)のセットを抑止する指示WB.LIDen2をストア制御部20に出力する。ロック判定回路34は、全ての有効なレジスタとの不一致を判定した場合、ライトバッファWBに転送されるLIDフラグによるライトバッファWBのLIDフラグ(WB.LID)のセットを許可する指示WB.LIDen2をストア制御部20に出力する。ストア制御部20は、指示WB.LIDen2に基づいて、ライトバッファWBのLIDフラグ(WB.LID)をセットし、または、セットを抑止する。
図3は、図2の演算処理装置102が実行するアトミック命令の処理の一例を示す。図3に示す動作フローは、命令発行部10がアトミック命令をデコードしたことに基づいて開始される。なお、図3から図11は、演算処理装置102による演算処理方法の一例を示す。
まず、ステップS10において、命令発行部10は、アトミック命令を発行する。次に、ステップS20において、演算処理装置102は、アトミック命令の最初のフローであるロード処理を実行する。ロード処理の例は、図4に示される。
次に、ステップS30において、ロック制御部30は、タグL1TAGから出力されるインデックスIDXおよびウェイ番号WAYを、アトミック命令を実行するスレッドに対応するレジスタREGに格納する。次に、ステップS40において、演算処理装置102は、アトミック命令を実行するスレッドに対応するロックフラグINTLKをセットすることで、アトミック命令の対象データをロック状態に設定する。
次に、ステップS50において、ストア制御部20は、アトミック命令を実行中のスレッド以外の他のスレッドのストアデータSTDを保持したライトバッファWBのエントリのLIDフラグをリセットする。
次に、ステップS60において、演算処理装置102は、アトミック命令の2番目のフローである比較処理を実行する。演算処理装置102は、比較処理において、ロード処理で読み出した対象データの値と、アトミック命令の開始前に予め読み出した対象データの値とを比較する。演算処理装置102は、比較結果が一致を示す場合、ステップS70を実行する。図示を省略するが、演算処理装置102は、比較結果が不一致を示す場合、他のスレッドにより対象データが書き換えられた可能性があるため、図3の処理を終了する。
ステップS70において、演算処理装置102は、アトミック命令の最後のフローであるストア処理を実行する。ストア処理の例は、図5から図7に示される。次に、ステップS80において、演算処理装置102は、アトミック命令を実行するスレッドに対応するロックフラグINTLKをリセットすることで、アトミック命令の対象データのロック状態を解除し、図3に示す動作を終了する。
図4は、図3のステップS20のロード処理の一例を示す。なお、通常のロード命令も図4と同様に実行される。
まず、ステップS202において、演算処理装置102は、命令発行部10からロード命令を発行する。次に、ステップS204において、演算処理装置102は、TLBにより変換された物理アドレスを使用してタグL1TAGにL1キャッシュ50のキャッシュヒットを判定させる。演算処理装置102は、キャッシュヒットを判定した場合、ステップS206を実行し、キャッシュミスを判定した場合、ステップS212を実行する。
ステップS206において、演算処理装置102は、ロック判定回路32にインデックスIDXおよびウェイ番号WAYのペアの一致を判定させる。例えば、ロック判定回路32は、セット中のロックフラグINTLKに対応する有効なレジスタREGからインデックスIDXおよびウェイ番号WAYのペアを読み出す。ロック判定回路32は、ロード命令に含まれるインデックスIDXと、ロード対象のデータを保持するウェイWAYの番号とのペアが、有効なレジスタREGから読み出したインデックスIDXおよびウェイ番号WAYのペアと一致するか否かを判定する。
ロック判定回路32により一致が判定された場合、ロード対象のデータの記憶領域はロックされているため、演算処理装置102は、ステップS220を実行する。ロック判定回路32により不一致が判定された場合、ロード対象のデータの記憶領域はロックされていないため、演算処理装置102は、ステップS208を実行する。
ステップS220において、演算処理装置102は、フェッチポート40にロード命令を保留し、フェッチポート40にロード命令を再発行させ、動作をステップS204に戻す。ステップS208において、演算処理装置102は、L1キャッシュ50からロード対象のデータを読み出す。次に、ステップS210において、演算処理装置102は、タグL1TAGにSTV信号を出力させ、L1キャッシュ50から読み出されたデータLDDを命令発行部10に出力し、図4に示すロード処理を終了する。
一方、キャッシュミスした場合、ステップS212において、演算処理装置102は、フェッチポート40にロード命令を保留し、フェッチポート40にロード命令を再発行させる。次に、ステップS214において、演算処理装置102は、下位のメモリにロード命令の対象データを読み出しを要求する。次に、ステップS216において、演算処理装置102は、下位のメモリからロード命令の対象データを受信する。次に、ステップS218において、演算処理装置102は、下位のメモリから受信したデータをL1キャッシュ50に格納し、ロード命令の対象データをL1キャッシュ50から取り出すためにステップS204を再び実行する。
図5から図7は、図3のステップS70のストア処理の一例を示す。なお、通常のストア命令も図5から図7と同様に実行される。図5に示すステップS702からステップS716は、ストア命令の状態ST0の処理の例を示す。図7のステップS730からステップS742は、ストア命令の状態ST1の処理の例を示す。図6のステップS728は、ストア命令の状態ST2の処理の例を示す。
まず、ステップS702において、演算処理装置102は、命令発行部10からストア命令を発行する。次に、ステップS704において、演算処理装置102は、命令発行部10からストア制御部20に、ストア命令の情報を出力させ、命令発行部10からストアバッファSTBにストアデータSTD等の情報を格納させる。
次に、ステップS706において、演算処理装置102は、TLBにより変換された物理アドレスを使用してタグL1TAGにL1キャッシュ50のキャッシュヒットを判定させる。演算処理装置102は、キャッシュヒットを判定した場合、ステップS708を実行し、キャッシュミスを判定した場合、ステップS710を実行する。
ステップS708において、演算処理装置102は、ストアバッファSTBのLIDフラグを"1"にセットし、ステップS712を実行する。ステップS710において、演算処理装置102は、ストアバッファSTBのLIDフラグを"0"にリセットし、ステップS716を実行する。"1"のLIDフラグは、ストア命令の対象領域のデータをL1キャッシュ50が保持していることを示す。"0"のLIDフラグは、ストア命令の対象領域のデータをL1キャッシュ50が保持していないことを示す。
ステップS712において、演算処理装置102は、ロック判定回路32にインデックスIDXおよびウェイ番号WAYのペアの一致を判定させる。例えば、ロック判定回路32は、セット中のロックフラグINTLKに対応する有効なレジスタREGからインデックスIDXおよびウェイ番号WAYのペアを読み出す。ロック判定回路32は、ストア命令に含まれるインデックスIDXとストア対象のデータを保持するウェイWAYの番号とのペアが、有効なレジスタREGから読み出したインデックスIDXおよびウェイ番号WAYのペアと一致するか否かを判定する。
演算処理装置102は、一致が判定された場合、ストア対象のデータの記憶領域は、競合するアトミック命令によりロックされているため、ステップS714を実行する。演算処理装置102は、不一致が判定された場合、ストア対象のデータの記憶領域はロックされていないため、後述する状態ST1または状態ST2を実行するためにステップS716を実行する。
このように、ストア命令の状態ST0においてキャッシュヒットしている場合、インデックスIDXおよびウェイ番号WAYのペアの比較により、アトミック命令との競合を正しく判定することができる。そして、アトミック命令との競合が解消するまでストアバッファSTBからライトバッファWBへのデータSTDおよびLIDフラグの転送を抑止することができる。
ステップS714において、演算処理装置102は、フェッチポート40にストア命令を保留し、フェッチポート40にストア命令を再発行させ、動作をステップS706に戻す。ステップS716において、演算処理装置102は、タグL1TAGにSTV信号を出力させ、命令発行部10にストア命令の状態ST0をコミットさせ、図6のステップS718を実行する。
図6のステップS718において、演算処理装置102は、ストア制御部20を制御して、ストアバッファSTBに保持されたLIDフラグを含む情報をライトバッファWBに移動させる。
次に、ステップS720において、演算処理装置102は、ロック判定回路34にインデックスIDXおよびウェイ番号WAYのペアの一致を判定させる。ロック判定回路34は、セット中のロックフラグINTLKに対応する有効なレジスタREGからインデックスIDXおよびウェイ番号WAYのペアを読み出す。ロック判定回路34は、ストア命令に含まれるインデックスIDXおよびタグL1TAGから出力されるウェイ番号WAYのペアが、有効なレジスタREGから読み出したインデックスIDXおよびウェイ番号WAYのペアと一致するか否かを判定する。
演算処理装置102は、一致が判定された場合、ステップS722を実行し、不一致が判定された場合、ステップS724を実行する。ステップS722において、演算処理装置102は、"1"のLIDフラグ(STB.LID)がWBGO転送される場合のLIDフラグ(WB.LID)の"1"へのセットをストア制御部20に抑止させる。演算処理装置102は、ステップS722の後、ステップS726を実行する。
ステップS724において、演算処理装置102は、"1"のLIDフラグ(STB.LID)がWBGO転送される場合のLIDフラグ(WB.LID)の"1"へのセットをストア制御部20に許可させる。演算処理装置102は、ステップS724の後、ステップS726を実行する。
ステップS726において、演算処理装置102は、ストア制御部20にライトバッファWBのLIDフラグ(WB.LID)を取得させる。そして、演算処理装置102は、LIDフラグ(WB.LID)が"1"にセットされている場合、ステップS728を実行し、LIDフラグ(WB.LID)が"0"にリセットされている場合、図7のS730を実行する。
ストアバッファSTBからライトバッファWBへのデータSTDの転送時にアトミック命令との競合が判定された場合、LIDフラグ(STB.LID)がセット状態の場合にも、LIDフラグ(WB.LID)のセットが抑止される。これにより、図7で説明する状態ST1を経由せずに状態ST0から状態ST2に遷移することを抑止することができる。換言すれば、状態ST1の処理を利用して、アトミック命令との競合を判定することができる。
ステップS728において、演算処理装置102は、ストア制御部20を制御して、ライトバッファWBに保持されたデータをL1キャッシュ50に格納させる。ストアバッファSTBからライトバッファWBへのデータSTDおよびLIDフラグの転送後、アトミック命令との競合がなく、キャッシュヒット状態である場合、演算処理装置102は、ステップS728を実行することができる。すなわち、状態ST1の処理を実行することなく、状態2においてストアデータSTDをL1キャッシュ50に格納することができる。
図7のステップS730において、演算処理装置102は、タグL1TAGにL1キャッシュ50のキャッシュヒットを判定させる。演算処理装置102は、キャッシュヒットを判定した場合、ステップS738を実行し、キャッシュミスを判定した場合、ステップS732を実行する。
ステップS732において、演算処理装置102は、下位のメモリにストア命令の対象領域に記憶されたデータの読み出しを要求する。次に、ステップS734において、演算処理装置102は、下位のメモリからデータを受信する。次に、ステップS736において、演算処理装置102は、下位のメモリから受信したデータをL1キャッシュ50に格納し、ストア命令の対象データをL1キャッシュ50に格納するためにステップS730を再び実行する。
ステップS738において、演算処理装置102は、ロック判定回路32にインデックスIDXおよびウェイ番号WAYのペアの一致を判定させる。ロック判定回路32は、セット中のロックフラグINTLKに対応する有効なレジスタREGからインデックスIDXおよびウェイ番号WAYのペアを読み出す。ロック判定回路32は、ストア命令に含まれるインデックスIDXおよびタグL1TAGから出力されるウェイ番号WAYのペアが、有効なレジスタREGから読み出したインデックスIDXおよびウェイ番号WAYのペアと一致するか否かを判定する。
演算処理装置102は、一致が判定された場合、ストア対象のデータの記憶領域はロックされているため、ステップS740を実行する。演算処理装置102は、不一致が判定された場合、ストア対象のデータの記憶領域はロックされていないため、ステップS742を実行する。
ステップS740において、演算処理装置102は、ライトバッファWBのLIDフラグ(WB.LID)の"1"へのセットをストア制御部20に抑止させる。演算処理装置102は、ステップS740の後、図6のステップS726を実行する。ステップS742において、演算処理装置102は、ライトバッファWBのLIDフラグ(WB.LID)の"1"へのセットをストア制御部20に許可させる。演算処理装置102は、ステップS742の後、図6のステップS726を実行する。
ストアバッファSTBからライトバッファWBへのデータSTDおよびLIDフラグの転送後、状態ST1では、キャッシュミス状態の場合はキャッシュヒットまで待ち、ロック判定回路32によりアトミック命令との競合が判定される。そして、アトミック命令との競合がない場合、LIDフラグ(WB.LID)のセットが許可され、キャッシュヒット状態の場合、LIDフラグ(WB.LID)がセットされる。これにより、図6においてストア命令の状態を状態ST2に遷移することができ、ライトバッファWBに保持されたストアデータSTDをL1キャッシュ50に格納することができる。すなわち、キャッシュヒットし、アトミック命令との競合がない場合のみ、ストアデータSTDをL1キャッシュ50に格納することができ、演算処理装置102のストア動作を正常に実行することができる。
図8は、図2の演算処理装置102により実行されるアトミック命令とロード命令との処理の一例を示す。図8に示す例では、スレッド0のアトミック命令(インデックスIDX=A、ウェイ番号WAY=0)と、スレッド1のロード命令(インデックスIDX=A、ウェイ番号WAY=1)とが並列に実行される。
図3に示したように、アトミック命令では、ロード処理、コンペア処理およびストア処理が順次実行される。対象スレッド0のアトミック命令では、ロード処理の完了に基づいて、ロック制御部30のレジスタREG0にインデックスIDX=Aとウェイ番号WAY=0が設定され、ストア制御部20のロックフラグINTLK0が"1"にセットされる。ロックフラグINTLK0は、ストア処理の完了時に"0"にリセットされる。
スレッド1のロード命令(キャッシュヒット)は、ウェイ番号WAYがアトミック命令のウェイ番号WAYと異なるため、ロック判定回路32は、競合を検出しない(不一致を判定)。このため、ロード命令は、フェッチポートに保留されることなく、アトミック命令のロックフラグINTLK0のリセットを待たずに完了する。
図9は、図2の演算処理装置102により実行されるアトミック命令とストア命令との処理の一例を示す。図9に示す例では、スレッド0のアトミック命令(インデックスIDX=A、ウェイ番号WAY=0)と、スレッド1のストア命令(インデックスIDX=B、ウェイ番号WAY=2)とが並列に実行される。アトミック命令の動作は、図8と同様である。
スレッド1のストア命令は、状態ST0においてキャッシュミスし、LIDフラグ(STB.LID)は、"0"にリセットされる。状態ST0の処理は、アトミック命令のロック前のため、通常通りに実施されて完了される。状態ST1の処理中にアトミック命令がロックされる。状態ST1において、ストア命令の対象領域のデータが下位のメモリからL1キャッシュ50に転送され、L1キャッシュ50がキャッシュヒットする。
ロック判定回路32は、ロック判定の不一致を検出し、LIDフラグ(WB.LID)のセットを許可する。ストア制御部20は、状態ST1でキャッシュヒットしたため、ロック判定回路32からの許可に基づいてLIDフラグ(WB.LID)を"1"にセットする。アトミック命令との競合がないため、状態ST2において、アトミック命令のロックフラグINTLK0のリセットを待たずに、ストアデータSTDがL1キャッシュ50に格納される。そして、ストア命令の処理が完了する。
図10は、図2の演算処理装置102により実行されるアトミック命令とストア命令との処理の別の例を示す。図10に示す例では、スレッド0のアトミック命令(インデックスIDX=A、ウェイ番号WAY=0)と、スレッド1のストア命令(インデックスIDX=C、ウェイ番号WAY=3)とが並列に実行される。アトミック命令の動作は、図8と同様である。
スレッド1のストア命令は、状態ST0においてキャッシュヒットし、LIDフラグ(STB.LID)は、"1"にセットされる。状態ST0から状態ST1への遷移に伴い、ストアデータSTDのライトバッファWBへの転送とともに、ライトバッファWBのLIDフラグ(WB.LID)が"1"にセットされる。この状態で、アトミック命令のロード処理の完了するため、アトミック命令によりLIDフラグ(WB.LID)が"0"にリセットされる。
これにより、図6のステップS726の判定により、ストア命令の状態は、状態ST2に移行されず、状態ST1に移行される。したがって、セット状態のLIDフラグ(STB.LID)がストアバッファSTBからライトバッファWBに転送される場合にも、状態ST2の実行前に状態ST1に遷移させることができる。この結果、状態ST1の処理を利用して、アトミック命令との競合を判定することができる。
この後、図9と同様に、ロック判定回路32は、ロック判定の不一致を検出し、キャッシュヒットによりLIDフラグ(WB.LID)を"1"にセットする。アトミック命令との競合がないため、状態ST2において、アトミック命令のロックフラグINTLK0のリセットを待たずに、ストアデータSTDがL1キャッシュ50に格納される。そして、ストア命令の処理が完了する。
図11は、図2の演算処理装置102により実行されるアトミック命令とストア命令との処理のさらなる別の例を示す。図11に示す例では、スレッド0のアトミック命令(インデックスIDX=A、ウェイ番号WAY=0)と、スレッド1のストア命令(インデックスIDX=D、ウェイ番号WAY=4)とが並列に実行される。アトミック命令の動作は、図8と同様である。
図11では、ストア命令がアトミック命令のロック中に実行される。状態ST0において、スレッド1のストア命令は、キャッシュヒットし、LIDフラグ(STB.LID)は、"1"にセットされる。このため、状態ST0から状態ST1への遷移において、LIDフラグ(STB.LID)の"1"がLIDフラグ(WB.LID)に移動される。したがって、ストア命令の状態は、状態ST1をスキップして状態ST2に遷移する。アトミック命令との競合がないため、状態ST2において、アトミック命令のロックフラグINTLK0のリセットを待たずに、ストアデータSTDがL1キャッシュ50に格納される。そして、ストア命令の処理が完了する。
図12は、図2の演算処理装置102のロック判定回路32の一例を示す。ロック判定回路32は、スレッド毎(レジスタREG毎)に、タグL1TAGからのウェイ番号WAYとレジスタREGのウェイ番号WAYとを比較する比較器CMP3とを有する。ロック判定回路32は、スレッド毎に、タグL1TAGからのインデックスIDXとレジスタREGのインデックスIDXとを比較する比較器CMP4を有する。
また、ロック判定回路32は、スレッド毎に、アンド回路ANDおよびオア回路ORを有する。各アンド回路ANDは、比較器CMP3、CMP4の比較結果がともに一致し、対応するロックフラグINTLKが"1"にセットされている場合、競合信号CNF(CNF0、CNF1、CNF2またはCNF3)を"1"に設定する。各アンド回路ANDは、比較器CMP3、CMP4の比較結果のいずれかが不一致の場合または対応するロックフラグINTLKが"0"にリセットされている場合、対応する競合信号CNFを"0"に設定する。
各競合信号CNFの"1"は、対応するスレッドのメモリアクセス命令の対象領域がアトミック命令によりロックされていることを示す。各競合信号CNFの"0"は、対応するスレッドのメモリアクセス命令の対象領域がアトミック命令によりロックされていないことを示す。
各オア回路ORは、他のスレッドに対応する3個の競合信号CNFの少なくともいずれかが"1"の場合、当該スレッドの命令を保留させる指示と、当該スレッドのLIDフラグ(WB.LID)のセットを抑止する指示WB.LIDen1とを発行する。当該スレッドの命令を保留させる指示は、フェッチポート40に発行され、LIDフラグ(WB.LID)のセットを抑止する指示WB.LIDen1は、ストア制御部20に発行される。
各オア回路ORは、他のスレッドに対応する3個の競合信号CNFが全て"0"の場合、当該スレッドの命令を保留させる指示を発行せず、当該スレッドのLIDフラグ(WB.LID)のセットを許可する指示WB.LIDen1を発行する。
例えば、スレッド0でアトミック命令が実行され、スレッド1のロード命令と競合する場合、競合信号CONF0が"1"になり、競合信号CONF1-CONF3が"0"になる。スレッド0に対応するオア回路ORの出力は、競合信号CONF1-CONF3の"0"により"0"になる。
スレッド1-3に対応するオア回路ORの出力は、競合信号CONF0の"1"により"1"になる。この例では、ロード命令は、スレッド1で実行されているため、スレッド1に対応するオア回路ORから出力される命令の保留指示1が有効になり、スレッド1のロード命令を保留することができる。
図13は、図1の演算処理装置102のロック判定回路34の一例を示す。図12のロック判定回路32と同様の要素については、詳細な説明は省略する。ロック判定回路34は、各比較器CMP3、CMP4が受信する信号と、各アンド回路ANDおよび各オア回路ORが出力する信号が異なることを除き、図12のロック判定回路と同様の論理である。
各比較器CMP3は、ストア制御部20からのウェイ番号WAY(WBGO)とレジスタREGからのウェイ番号WAYとを比較する。各比較器CMP4は、ストア制御部20からのインデックスIDX(WBGO)とレジスタREGからのインデックスIDXとを比較する。
各アンド回路ANDは、競合信号WBCNF(WBCNF0、WBCNF1、WBCNF2またはWBCNF3)を出力する。各アンド回路ANDは、比較器CMP3、CMP4の比較結果がともに一致し、対応するロックフラグINTLKが"1"にセットされている場合、対応する競合信号WBCNFを"1"に設定する。
各オア回路ORは、他のスレッドに対応する3個の競合信号WBCNFの少なくともいずれかが"1"の場合、当該スレッドのWBGO時にLIDフラグ(WB.LID)のセットを抑止する指示WB.LIDen2を発行する。LIDフラグ(WB.LID)のセットを抑止する指示WB.LIDen2は、ストア制御部20に発行される。各オア回路ORは、他のスレッドに対応する3個の競合信号CNFが全て"0"の場合、当該スレッドのLIDフラグ(WB.LID)のセットを許可する指示WB.LIDen2を発行する。
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、ロック判定回路32、34は、アトミック命令とメモリアクセス命令において、L1キャッシュ50でのデータの格納位置を識別するインデックスアドレスIDXおよびウェイ番号WAYの一致を判定する。これにより、メモリアクセス命令とアトミック命令との競合の判定の精度を向上することができる。したがって、アトミック命令の実行中に、アトミック処理の対象データの参照および更新を抑止し、アトミック処理の対象データでないデータの参照および更新を実施することができる。この結果、誤った競合の判定により、メモリアクセス命令の実行が保留されることを抑制することができ、演算処理装置102の処理性能の低下を抑制することができる。
さらに、この実施形態では、ストア命令の状態ST0においてキャッシュヒットしている場合、インデックスIDXおよびウェイ番号WAYのペアの比較により、アトミック命令との競合を正しく判定することができる。そして、アトミック命令との競合が解消するまでストアバッファSTBからライトバッファWBへのデータSTDおよびLIDフラグの転送を抑止することができる。これにより、アトミック命令との競合の有無に応じて、WBGO転送を制御することができる。
ストアバッファSTBからライトバッファWBへのデータSTDおよびLIDフラグの転送後、状態ST1において、LIDフラグ(WB.LID)がキャッシュミスを示す場合、キャッシュヒットまで待った後、アトミック命令との競合が判定される。そして、アトミック命令との競合がない場合、LIDフラグ(WB.LID)のセットを許可することで、状態ST2に遷移することができ、ライトバッファWBに保持されたストアデータSTDをL1キャッシュ50に格納することができる。すなわち、キャッシュヒットし、アトミック命令との競合がない場合のみ、ストアデータSTDをL1キャッシュ50に格納することができ、演算処理装置102のストア動作を正常に実行することができる。
ストアバッファSTBからライトバッファWBへのデータSTDの転送時にアトミック命令との競合が判定された場合、LIDフラグ(STB.LID)がセット状態の場合にも、LIDフラグ(WB.LID)のセットが抑止される。これにより、状態ST1を経由せずに状態ST0から状態ST2に遷移することを抑止することができる。換言すれば、状態ST1の処理を利用して、アトミック命令との競合を判定することができる。
LIDフラグ(WB.LID)は、アトミック命令の実行時にリセットされる。これにより、セット状態のLIDフラグ(STB.LID)をストアバッファSTBからライトバッファWBに転送する場合にも、状態ST1を経由せずに状態ST0から状態ST2に遷移することを抑止することができる。この結果、上述と同様に、状態ST1の処理を利用して、アトミック命令との競合を判定することができる。
状態ST0から状態ST1に遷移する前に、アトミック命令との競合がなく、キャッシュヒット状態である場合、状態ST1の処理を実行することなく、状態ST0から状態2に遷移し、ストアデータSTDをL1キャッシュ50に格納することができる。
図14は、他の演算処理装置の一例を示す。図2と同様の要素については、同じ符号を付し、詳細な説明は省略する。図14に示す演算処理装置104は、図2の演算処理装置102のロック制御部30およびストア制御部20の代わりにロック制御部30Aおよびストア制御部20Aを有する。演算処理装置104のその他の構成は、演算処理装置102の構成と同様である。
ロック制御部30Aは、4個のスレッドの各々に対応するレジスタREG(REG0、REG1、REG2、REG3)およびロック判定回路32Aを有する。各レジスタREGは、アトミック命令がキャッシュヒットしたときにタグL1TAGから出力されるインデックスIDXが格納される。各レジスタREGは、図2のレジスタREGと異なり、ウェイ番号WAYは格納されない。
ロック制御部30Aは、ストア命令の状態ST0において、ストア命令がキャッシュヒットした場合、ストアバッファSTBのLIDフラグ(STB.LID)をセットする指示STB.LIDsetをストア制御部20Aに出力する。ストア制御部20Aは、指示STB.LIDsetに基づいて、ストアバッファSTBにおいてストア対象のデータとともにエントリに保持されたLIDフラグをセットする。ロック制御部30Aは、ストア命令がキャッシュミスした場合、ストアバッファSTBのLIDフラグをリセットする指示STB.LIDrstをストア制御部20Aに出力する。ストア制御部20Aは、指示STB.LIDrstに基づいて、ストアバッファSTBにおいてストア対象のデータとともにエントリに保持されたLIDフラグをリセットする。
ロック制御部30Aは、後述するストア命令の状態ST1において、ストア命令がキャッシュヒットした場合、ライトバッファWBのLIDフラグ(WB.LID)をセットする指示WB.LIDsetをストア制御部20Aに出力する。ストア制御部20Aは、指示WB.LIDsetに基づいて、ライトバッファWBにおいてストア対象のデータとともにエントリに保持されたLIDフラグをセットする。
ロック判定回路32Aは、タグL1TAGからのインデックスIDXと、各レジスタREGからのインデックスIDXと、ストア制御部20AからのロックフラグINTLKとを受信する。ロック判定回路32Aは、アトミック命令を実行するスレッドに対応するレジスタREGにインデックスIDXが格納された場合、スレッドに対応するロックフラグINTLKをセットする指示INTLKsetをストア制御部20Aに出力する。ストア制御部20Aは、指示に基づいて、対応するロックフラグINTLKをセットする。
ロック判定回路32Aは、セット中のロックフラグINTLKに対応するレジスタREGに有効なインデックスIDXが保持されていると判断する。ロック判定回路32Aは、リセット中のロックフラグINTLKに対応するレジスタREGに無効なインデックスIDXが保持されていると判断する。ロック判定回路32Aは、アトミック命令の完了に基づいて、対応するスレッドのロックフラグINTLKをリセットする指示INTLKrstをストア制御部20Aに出力する。ストア制御部20Aは、指示INTLKrstに基づいて、対応するロックフラグINTLKをリセットする。
ロック判定回路32Aは、ロード命令がキャッシュヒットしたときにタグL1TAGから出力されるインデックスIDXを受信する。ロック判定回路32Aは、受信したインデックスIDXを、有効なレジスタREGに保持されたインデックスIDXと比較し、一致または不一致を判定する。ロック判定回路32Aは、一致(競合)を判定した場合、ロード命令の実行を抑止するため、ロード命令を実行するための情報をフェッチポート40に転送する。ロック判定回路32Aは、不一致(競合しない)を判定した場合、ロード命令を実行するために、図示しない経路を介してL1キャッシュ50にアクセス要求を出力する。ロック判定回路32Aは、L1キャッシュ50にアクセス要求を出力した場合、STV信号を命令発行部10に出力し、ロード命令をコミットさせる。
ロック判定回路32Aは、ストア命令の状態ST0において、ストア命令がキャッシュヒットしたときにタグL1TAGから出力されるインデックスIDXを受信する。ロック判定回路32Aは、受信したインデックスIDXを、有効なレジスタREGに保持されたインデックスIDXと比較し、一致または不一致を判定する。ロック判定回路32Aは、有効なレジスタREGのいずれかとの一致(競合)を判定した場合、ストア命令の実行を抑止するため、ストア命令を実行するための情報をフェッチポート40に転送する。ロック判定回路32Aは、全ての有効なレジスタとの不一致を判定した場合、ストア命令の実行を継続するために、STV信号を命令発行部10に出力し、ストア命令をコミットさせる。
ストア制御部20Aは、図2のストア制御部20と同様に、4個のスレッドのそれぞれでアトミック命令がロック中(実行中)であることを示す4個のロックフラグINTLK(INTLK0-INTLK3)を有する。ストア制御部20Aは、ロード命令またはストア命令に含まれるアドレス等の情報を命令発行部10から受信して保持する。ストア制御部20Aは、キャッシュヒットしたロード命令またはストア命令の対象データが格納されているウェイ番号WAYをタグL1TAGから受信して保持する。そして、ストア制御部20Aは、ロック制御部30Aからの情報に基づいてストアバッファSTBおよびライトバッファWBの動作を制御する。
図15は、図14の演算処理装置104が実行するアトミック命令の処理の一例を示す。図3と同様の処理については、詳細な説明は省略する。図15に示す動作フローは、命令発行部10がアトミック命令をデコードしたことに基づいて開始される。
図15では、図3のステップS20、S30、S70の代わりにステップS20A、S30A、S70Aが実行され、図3のステップS50は実行されない。ステップS10、S40、S60、S80の動作は、図3のステップS10、S60、S80の動作と同様である。ステップS20Aのロード処理の例は、図16に示される。ステップS70Aのストア処理の例は、図17および図18に示される。
ステップS30Aでは、ロック制御部30Aは、タグL1TAGから出力されるインデックスIDXを、アトミック命令を実行するスレッドに対応するレジスタREGに格納する。
図16は、図15のステップS20Aのロード処理の一例を示す。図4と同様の動作については、同じステップ番号を付し、詳細な説明は省略する。図16は、図4のステップS206の代わりにステップS206Aが実行されることを除き、図4のロード処理と同様である。
ステップS206Aにおいて、演算処理装置104は、ロック判定回路32AにインデックスIDXの一致を判定させる。ロック判定回路32Aは、セット中のロックフラグINTLKに対応する有効なレジスタREGからインデックスIDXを読み出す。ロック判定回路32Aは、ロード命令に含まれるインデックスIDXが、有効なレジスタREGから読み出したインデックスIDXと一致するか否かを判定する。このように、ロック判定回路32Aは、ロード命令においてウェイ番号WAYを比較せず、インデックスIDXのみに基づいて、アトミック命令との競合を判定する。
演算処理装置104は、一致が判定された場合、ロード対象のデータの記憶領域はロックされているため、ステップS220を実行する。演算処理装置104は、不一致が判定された場合、ロード対象のデータの記憶領域はロックされていないため、ステップS208を実行する。
図17および図18は、図15のステップS70Aのストア処理の一例を示す。図5から図7と同様の動作については、同じステップ番号を付し、詳細な説明は省略する。図17は、図5のステップS712の代わりにステップS712Aが実行されることを除き、図5のロード処理と同様である。図18は、図6のステップS720、S724、S722および図7のステップS738、S740、S742が削除され、ステップS738Aが追加されることを除き、図6および図7のストア処理と同様である。
図17のステップS712Aにおいて、演算処理装置104は、ロック判定回路32AにインデックスIDXの一致を判定させる。ロック判定回路32Aは、セット中のロックフラグINTLKに対応する有効なレジスタREGからインデックスIDXを読み出す。ロック判定回路32Aは、ストア命令に含まれるインデックスIDXが、有効なレジスタREGから読み出したインデックスIDXと一致するか否かを判定する。このように、ロック判定回路32Aは、ストア命令においてウェイ番号WAYを比較せず、インデックスIDXのみに基づいて、アトミック命令との競合を判定する。
演算処理装置104は、一致が判定された場合、ストア対象のデータの記憶領域はロックされているため、ステップS714を実行する。演算処理装置104は、不一致が判定された場合、ストア対象のデータの記憶領域はロックされていないため、ステップS716を実行する。
図18では、ステップS718の後、ステップS726が実行され、ステップS730でキャッシュヒットが判定された場合、ステップS738Aが実行される。ステップS738Aにおいて、演算処理装置104は、ストア制御部20Aに、ライトバッファWBのLIDフラグ(WB.LID)を"1"にセットさせる。演算処理装置104は、ステップS738Aの後、ステップS726に戻る。
図19は、図14の演算処理装置104により実行されるアトミック命令とロード命令との処理の一例を示す。図8と同様の動作については、詳細な説明は省略する。アトミック命令の動作は、図8と同様である。
スレッド1のロード命令は、アトミック命令に対して、インデックスIDXが一致し、ウェイ番号WAYが異なる。アトミック命令のウェイ番号WAYと異なるため、ロック判定回路32Aは、ロード命令とアトミック命令との競合を検出する(一致を判定)。実際には、ウェイ番号WAYが異なる場合、アトミック命令との競合は発生しない。
しかしながら、図14のロック判定回路32Aは、ロード命令とアトミック命令との競合を判定し、ロード命令をフェッチポートに保留する。ロード命令は、アトミック命令の完了後に実行される。したがって、競合が発生していないにもかかわらず、ロード命令が保留され、演算処理装置104の処理性能は低下する。
図20は、図14の演算処理装置104により実行されるアトミック命令とストア命令との処理の一例を示す。図9と同様の動作については、詳細な説明は省略する。アトミック命令の動作は、図19と同様である。また、スレッド1のストア命令の状態ST1までの動作は、図9と同様である。
スレッド1のストア命令の状態ST0では、キャッシュミスするため、LIDフラグ(STB.LID)は、"0"にリセットされる。ストア命令は、アトミック命令に対してインデックスIDXが異なる。このため、ロック判定回路32Aは、状態ST0において、ストア命令とアトミック命令とが競合していないことを検出し(不一致を判定)し、ストア命令の状態を状態ST1に遷移する。
状態ST1において、ストア制御部20Aは、ストア命令のキャッシュヒットに基づいてLIDフラグ(WB.LID)を、"1"にセットし、ストア命令の状態は、状態ST2に遷移する。しかしながらアトミック命令がロック中のため、ストア命令の状態ST2の処理は、アトミック命令のロックが解除されるまで保留される。競合が発生していないにもかかわらず、ロード命令が保留されるため、演算処理装置104の処理性能は低下する。
図21は、図14の演算処理装置104により実行されるアトミック命令とストア命令との処理の別の例を示す。図10と同様の動作については、詳細な説明は省略する。アトミック命令の動作は、図19と同様である。また、スレッド1のストア命令の状態ST0の動作は、図10と同様である。
スレッド1のストア命令は、状態ST0においてキャッシュヒットし、LIDフラグ(STB.LID)は、"1"にセットされる。ストア命令は、アトミック命令に対してインデックスIDXが異なる。このため、ロック判定回路32Aは、状態ST0において、ストア命令とアトミック命令とが競合していないことを検出する(不一致を判定)。
状態ST0の終了時、LIDフラグ(STB.LID)="1"がLIDフラグ(WB.LID)に移動される。このため、ストア命令の状態は、状態ST1を介することなく状態ST2に遷移する。状態ST0から状態ST2に遷移されたとき、アトミック命令はロック中のため、ストア命令の状態ST2の処理は、アトミック命令のロックが解除されるまで保留される。競合が発生していないにもかかわらず、ロード命令が保留されるため、演算処理装置104の処理性能は低下する。
図22は、図14の演算処理装置104により実行されるアトミック命令とストア命令との処理のさらなる別の例を示す。図11と同様の動作については、詳細な説明は省略する。アトミック命令の動作は、図19と同様である。また、スレッド1のストア命令の状態ST0の動作は、図11と同様である。
図22の動作は、アトミック命令がストア命令の開始前からロックしていることを除き、図21の動作と同様である。ストア命令は、アトミック命令に対してインデックスIDXが異なるため、ロック判定回路32Aは、ストア命令とアトミック命令とが競合していないことを検出する。
状態ST0の終了時、LIDフラグ(STB.LID)="1"がLIDフラグ(WB.LID)に移動されるため、ストア命令の状態は、状態ST1を介することなく状態ST2に遷移する。そして、ストア命令の状態ST2の処理は、アトミック命令のロックが解除されるまで保留される。競合が発生していないにもかかわらず、ロード命令が保留されるため、演算処理装置104の処理性能は低下する。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
1 アクセス制御部
2 キャッシュヒット判定部
3 キャッシュ
4 保持部
5 競合判定部
20、20A ストア制御部
30、30A ロック制御部
32、32A ロック判定回路
34 ロック判定回路
40 フェッチポート
50 L1キャッシュ
100、102、104 演算処理装置
AND アンド回路
CMP 比較器
CONF 競合信号
DARY データアレイ
DT データ
FF フリップフロップ
HIT ヒット信号
IDX インデックスアドレス
INTLK ロックフラグ
LDD ロードデータ
LID LIDフラグ
L1TAG タグ
OR オア回路
REG レジスタ
SEL セレクタ
STB ストアバッファ
STD ストアデータ
TAG タグアドレス
TARY タグアレイ
WAY ウェイ
WB ライトバッファ
WBCONF 競合信号
2 キャッシュヒット判定部
3 キャッシュ
4 保持部
5 競合判定部
20、20A ストア制御部
30、30A ロック制御部
32、32A ロック判定回路
34 ロック判定回路
40 フェッチポート
50 L1キャッシュ
100、102、104 演算処理装置
AND アンド回路
CMP 比較器
CONF 競合信号
DARY データアレイ
DT データ
FF フリップフロップ
HIT ヒット信号
IDX インデックスアドレス
INTLK ロックフラグ
LDD ロードデータ
LID LIDフラグ
L1TAG タグ
OR オア回路
REG レジスタ
SEL セレクタ
STB ストアバッファ
STD ストアデータ
TAG タグアドレス
TARY タグアレイ
WAY ウェイ
WB ライトバッファ
WBCONF 競合信号
Claims (7)
- 複数のスレッドを実行可能な演算処理装置であって、
インデックスアドレスにより識別される複数の記憶領域を各々含む複数のウェイを有するキャッシュと、
キャッシュヒットを判定するキャッシュヒット判定部と、
前記複数のスレッドのいずれかが実行するアトミック命令の対象データを保持する前記記憶領域を識別するウェイ番号およびインデックスアドレスを保持する保持部と、
前記保持部に保持されたウェイ番号およびインデックスアドレスのペアが、前記複数のスレッドの別のいずれかが実行するメモリアクセス命令の対象データを保持する前記記憶領域を識別するウェイ番号およびインデックスアドレスのペアと一致する場合、命令の競合を判定する競合判定部と、
前記競合判定部により前記競合が判定された場合、前記メモリアクセス命令の対象データの前記キャッシュへの入出力を抑止するアクセス制御部と、
を有する演算処理装置。 - ストア命令のストア対象の第1データと、前記ストア命令のキャッシュヒット時にセットされる第1フラグとを保持する第1バッファと、
前記第1バッファから転送される第1データおよび第1フラグを第2データおよび第2フラグとして保持する第2バッファと、を有し、
前記アクセス制御部は、
前記第1バッファおよび前記第2バッファを制御し、
前記第1データとセットされた前記第1フラグとが前記第1バッファに保持され、前記競合判定部により前記競合が判定された場合、前記競合が解消するまで前記第1データおよび前記第1フラグの前記第2バッファへの転送を抑止する
請求項1に記載の演算処理装置。 - 前記アクセス制御部は、
前記第1データが前記第1バッファに保持され、前記競合判定部により前記競合が判定されない場合、前記第1データおよび前記第1フラグを前記第2データおよび前記第2フラグとして前記第2バッファに転送し、
前記第2フラグがリセット状態の場合、キャッシュヒットするまで前記キャッシュヒット判定部による判定を繰り返し、
キャッシュヒットが判定された場合で、前記競合判定部による前記競合が判定されない場合、前記第2フラグをセットし、前記第2データを前記キャッシュに格納する
請求項2に記載の演算処理装置。 - 前記アクセス制御部は、
前記第1バッファから前記第2バッファへの前記第1データおよび前記第1フラグの転送時に、前記競合判定部により前記競合が判定された場合、前記第1フラグがセットされている場合にも、キャッシュヒットするまで前記第2フラグのセットを抑止する
請求項2に記載の演算処理装置。 - アトミック命令の実行時に前記第2フラグをリセットするフラグリセット部を有する
請求項3または請求項4に記載の演算処理装置。 - 前記アクセス制御部は、前記第1バッファから前記第2バッファにデータが転送された後、前記競合判定部により前記競合が判定されず、前記第2バッファが保持する前記第2フラグがセット状態の場合、前記第2データを前記キャッシュに格納する
請求項3ないし請求項5のいずれか1項に記載の演算処理装置。 - インデックスアドレスにより識別される複数の記憶領域を各々含む複数のウェイを有するキャッシュを有し、複数のスレッドを実行可能な演算処理装置の演算処理方法であって、
前記演算処理装置が有するキャッシュヒット判定部が、キャッシュヒットを判定し、
前記演算処理装置が有する競合判定部が、保持部に保持された、前記複数のスレッドのいずれかが実行するアトミック命令の対象データを保持する前記記憶領域を識別するウェイ番号およびインデックスアドレスのペアが、前記複数のスレッドの別のいずれかが実行するメモリアクセス命令のアクセス対象のデータを保持する前記記憶領域を識別するウェイ番号およびインデックスアドレスのペアと一致する場合、命令の競合を判定し、
前記演算処理装置が有するアクセス制御部が、前記競合判定部により前記競合が判定された場合、前記メモリアクセス命令の対象データの前記キャッシュへの入出力を抑止する
演算処理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021193200A JP2023079640A (ja) | 2021-11-29 | 2021-11-29 | 演算処理装置および演算処理方法 |
US17/875,456 US20230169009A1 (en) | 2021-11-29 | 2022-07-28 | Computation processing apparatus and method of processing computation |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021193200A JP2023079640A (ja) | 2021-11-29 | 2021-11-29 | 演算処理装置および演算処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023079640A true JP2023079640A (ja) | 2023-06-08 |
Family
ID=86500248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021193200A Pending JP2023079640A (ja) | 2021-11-29 | 2021-11-29 | 演算処理装置および演算処理方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230169009A1 (ja) |
JP (1) | JP2023079640A (ja) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8332374B2 (en) * | 2007-04-13 | 2012-12-11 | Oracle America, Inc. | Efficient implicit privatization of transactional memory |
US20170192791A1 (en) * | 2015-12-30 | 2017-07-06 | Elmoustapha Ould-Ahmed-Vall | Counter to Monitor Address Conflicts |
US10042576B2 (en) * | 2016-08-17 | 2018-08-07 | Advanced Micro Devices, Inc. | Method and apparatus for compressing addresses |
JP6770230B2 (ja) * | 2016-09-30 | 2020-10-14 | 富士通株式会社 | 演算処理装置、情報処理装置及び演算処理装置の制御方法 |
JP6947974B2 (ja) * | 2017-09-13 | 2021-10-13 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
JP7070384B2 (ja) * | 2018-12-10 | 2022-05-18 | 富士通株式会社 | 演算処理装置、メモリ装置、及び演算処理装置の制御方法 |
US11755477B2 (en) * | 2021-10-04 | 2023-09-12 | Advanced Micro Devices, Inc. | Cache allocation policy |
-
2021
- 2021-11-29 JP JP2021193200A patent/JP2023079640A/ja active Pending
-
2022
- 2022-07-28 US US17/875,456 patent/US20230169009A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230169009A1 (en) | 2023-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7553478B2 (ja) | 書き込みミスエントリのドレインをサポートする犠牲キャッシュ | |
US8782348B2 (en) | Microprocessor cache line evict array | |
US8521982B2 (en) | Load request scheduling in a cache hierarchy | |
US5535361A (en) | Cache block replacement scheme based on directory control bit set/reset and hit/miss basis in a multiheading multiprocessor environment | |
US7447845B2 (en) | Data processing system, processor and method of data processing in which local memory access requests are serviced by state machines with differing functionality | |
US8412888B2 (en) | Cache-based speculation of stores following synchronizing operations | |
KR100204741B1 (ko) | 제1및 제2캐시 메모리 사용방법 | |
US7549025B2 (en) | Efficient marking of shared cache lines | |
CN106897230B (zh) | 用于处理原子更新操作的装置和方法 | |
US20070283100A1 (en) | Cache memory device and caching method | |
US20080005504A1 (en) | Global overflow method for virtualized transactional memory | |
US7447844B2 (en) | Data processing system, processor and method of data processing in which local memory access requests are serviced on a fixed schedule | |
US8527708B2 (en) | Detecting address conflicts in a cache memory system | |
US8918591B2 (en) | Data processing system having selective invalidation of snoop requests and method therefor | |
US20120260056A1 (en) | Processor | |
JPH10283261A (ja) | キャッシュ・エントリの予約処理方法及び装置 | |
JP4234361B2 (ja) | 記憶制御装置およびデータ格納方法 | |
US6434665B1 (en) | Cache memory store buffer | |
US9747211B2 (en) | Cache memory, cache memory control unit, and method of controlling the cache memory | |
JPH0340047A (ja) | キヤツシユ・ライン・ストア方法 | |
JP3550092B2 (ja) | キャッシュ装置及び制御方法 | |
US6839806B2 (en) | Cache system with a cache tag memory and a cache tag buffer | |
US20060236040A1 (en) | Multiprocessor system for preventing starvation in case of occurring address competition and method thereof | |
US7353341B2 (en) | System and method for canceling write back operation during simultaneous snoop push or snoop kill operation in write back caches | |
JP2023079640A (ja) | 演算処理装置および演算処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240808 |