LIMITED PROPAGATION OF UNNECESSARY MEMORY UPDATES
A processing system limits the propagation of unnecessary memory updates by bypassing writing back dirty cache lines to other levels of a memory hierarchy in response to receiving an indication from software executing at a processor of the processing system that the value of the dirty cache line is dead (i.e., will not be read again or will not be read until after it has been overwritten). In response to receiving an indication from software that data is dead, a cache controller prevents propagation of the dead data to other levels of memory in response to eviction of the dead data or flushing of the cache at which the dead data is stored.
To support execution of instructions, a processing system typically includes a memory subsystem having memory modules to store data to be accessed by the executing instructions. The memory subsystem can be organized into a memory hierarchy having main memory at the top of the hierarchy to store a larger quantity of data that can be accessed by the executing instructions, and one or more caches at lower levels of the memory hierarchy to store subsets of the data stored at main memory. For example, a processing system includes a processor and a memory hierarchy having two caches, a lower level cache (closer to main memory in the memory hierarchy) and a higher level cache (closer to a processor core of the processing system).
Data to be cached in the memory hierarchy is typically manipulated as blocks of data referred to as “cache lines”, and which are addressed or otherwise located in a memory hierarchy using a physical address of the main memory. Because a cache tends to be of limited size relative to main memory, a cache controller for the cache implements a replacement policy wherein, in response to receiving a new cache line, the controller identifies if there is room available in the cache to store the new cache line and, if not, selects a cache line already stored in the cache for eviction. If the cache line selected for eviction has been modified by the processor (referred to as a “dirty” cache line), the cache controller writes the cache line back to main memory or one or more lower-level caches. Evictions, therefore, consume memory bandwidth, which can negatively impact processing efficiency in certain scenarios.
Further, it is often advantageous to deactivate, or “power down”, caches when not in use. To deactivate a cache, the cache is flushed and any valid cache lines are sent to main memory. However, writing back dirty cache lines to main memory or one or more lower-level caches consumes memory bandwidth and increases latency.
The present disclosure may be better understood, and its numerous features and advantages made apparent to those skilled in the art by referencing the accompanying drawings. The use of the same reference symbols in different drawings indicates similar or identical items.
Keeping multiple processing devices and their associated caches coherent in a large-scale processing system incurs latency costs, even for data that is never read again, or that is read by a limited subset of processing devices. Writing back dirty cache lines in response to evictions or cache flushes consume significant bandwidth as a processing system scales. Further, machine intelligence (MI) and high-performance computing (HPC) workloads tend to exhibit high write demand, frequent synchronization, and limited inter-device communication. For example, MI workloads often use fine-grain modular kernels to execute a network of layers that produce and consume new data at every iteration. Writing back data that has already been consumed and that will not need to be read again to the rest of a coherent memory hierarchy is unnecessary and contributes to network congestion and latency. As systems scale larger, the mechanisms required to keep many devices coherent in a system can incur significant bandwidth and latency costs for propagating data updates, even if the data is never read again or is only read again by a limited set of devices. For example, in some MI and HPC workloads, propagation of memory updates accounts for over 20% of graphics processing unit (GPU) execution time. The latency is attributable to traversing lower-level caches for dirty cache lines, probing remote caches such as central processing unit (CPU) caches that may contain copies of the dirty cache lines, and requesting memory accesses to main memory.
In some instances, the propagation of memory updates is not beneficial to workload execution because the updated data is not used again. For example, in some cases a workload writes (produces) data to shared memory, and the data is consumed by another workload without being read again by any other device in the processing system until the data is overwritten. If the producer of the data and the consumer of the data share a cache, they can fulfill the data exchange without the need to propagate changes to the data to main memory or other levels of caches. MI and HPC applications are often programmed using high-level languages that have explicit knowledge of producer-consumer relationships among processing devices. Thus, the software infers the location(s) at which produced data will be consumed or infers that the produced data will not be read again before it is next written. By communicating from software to hardware of a memory hierarchy of the system an indication that a cache block contains dead data and does not require further propagation, the system avoids unnecessary propagation of local writes.
In some embodiments, address ranges of dead data are tracked at the cache where avoiding dirty writebacks is likely to be most beneficial. In some embodiments, address ranges of dead data are tracked at the cache controller for the last level cache (LLC), and in other embodiments, address ranges of dead data are tracked at, for example, a write combining GPU L2. A dead ranges buffer may be used for this purpose, updating to add new addresses to the dead ranges buffer in response to receiving a dead data operation and removing addresses that match incoming store operations that make data live again. In response to a request to perform a write-back operation, such as a write-back operation triggered by a flush operation or eviction of a dirty cache line or block of data, the cache controller for the LLC performs a range check to determine whether the address of the dirty cache line or addresses for the block of data fall within an address range of dead data maintained at the dead ranges buffer. If the address falls within an address range of dead data, the cache controller ignores the request to perform the write-back operation, bypassing writing back the dirty cache line to other levels of memory.
In some embodiments, when handling a dead data operation that data at the target address or address range is dead or that this is the last read operation for the target data, the memory system propagates the request through the device cache hierarchy and clears the dirty bit of any block of data found at the target address or address range. Once the dirty bit is cleared, the data will not be written back to other levels of memory in the cache hierarchy in response to being evicted or the cache in which the data is stored being flushed.
As illustrated in
The processing unit 101 includes compute units 111, 112, 113, 114 that are collectively referred to herein as “the compute units 111-114.” Although not shown in
Cache lines are accessed from the system memory 116 by a memory controller (not shown) in response to memory requests from the cache hierarchy 104. Likewise, when a cache line containing modified data is evicted from the cache hierarchy 104 and thus needs to be updated in the system memory 116, the memory controller manages this write-back process.
The cache hierarchy 104 includes two or more levels of caches. In the illustrated example, the cache hierarchy 104 includes three cache levels: level 1 (L1), level 2 (L2), and level 3 (L3). For L1, the processing unit 101 implements small private caches for each compute unit 111-114, which are depicted as L1 caches 121, 122, 123, 124, each associated with a corresponding one of compute units 111, 112, 113, 114. The processing unit 101 implements larger private caches for each compute unit 111-114, which are depicted as L2 caches 131, 132, 133, 134 corresponding to compute units 111, 112, 113, 114, respectively. Each of the L2 caches 131-134 is private to its corresponding compute unit, but the cache hierarchy 104 operates to maintain coherency between the L2 caches 131-134. For the L3 caching level, the cache hierarchy 104 implements an L3 cache 140 that is shared by the compute units of the processing unit 101, and thus shared by at least the L2 caches 131-134.
In some embodiments, the processing system 100 employs a non-uniform memory access (NUMA) architecture, whereby the one or more caches and main memory are composed of memory modules having different memory architectures. Thus, in the depicted example, one or more of the caches of the cache hierarchy 104 are composed of fast memory, such as dynamic random access memory (DRAM), and main memory 116 is composed of slow memory, such as non-volatile memory. The NUMA architecture supports more flexible and robust data storage at main memory while maintaining processing efficiency. It will be appreciated that the techniques described herein can be applied to other processing systems having different memory architectures.
To access the memory hierarchy of the processing system 100, the compute units 111-114 generate operations, referred to as memory access requests, to store data (a write operation) to or load data (a read operation) from the memory hierarchy, and provide the memory access requests to a cache controller, such as L3 cache controller 142, for processing. As described further herein, the cache controller 142 works together with the one or more modules of cache of the cache hierarchy 104, the memory controller, and main memory 116 to satisfy the memory access requests. Although for purposes of illustration two private cache modules for each compute unit, one shared cache module, and one module of main memory are depicted in
Each of the L1 caches 121-124 and L2 caches 131-134 is a memory module that stores data for access by the associated compute unit 111-114. In at least one embodiment, each L1 cache 121-124 and L2 cache 131-134 is composed of a set of entries, each of which can store an associated cache line. In some embodiments, the L1 caches 121-124 and L2 caches 131-134 are set-associative caches, wherein each cache is divided into a number of sets. Each set includes a number of ways, with each way corresponding to a cache entry that can store a cache line. Each set only stores a cache line associated with a subset of memory addresses, wherein the subset associated with a set is identified by the cache controller 142 based on a portion of the memory address referred to as the index. By employing set associativity, the L1 caches 121-124 and L2 caches 131-134 facilitate relatively quick identification of cache misses and cache hits.
Each cache of the L1 caches 121-124 and L2 caches 131-134 is associated with a cache controller which receives memory access requests for data from the compute units 111-114 and reads and writes data to memory. For ease of illustration, only the L3 cache controller 142 is depicted in
The L1 caches 121-124 and the L2 caches 131-134 are configured as a cache hierarchy. Each of the L1 caches 121-124, L2 caches 131-134, and the L3 cache 140 is sized such that it typically is unable to store, at a given point in time, all the data that is requested, or may be requested, by the corresponding compute unit 111-114, thereby requiring data to be transferred through the memory hierarchy as described above. To ensure data coherency and efficient transfer of data through the memory hierarchy, each of the cache controller associated with each L1 cache 121-124 and L2 cache 131-134 and the L3 cache controller 142 implements a replacement policy to identify if there is an entry in a set available to store a received cache line and, if not, to select one of the entries in the set for replacement.
To replace a valid cache line at an entry with an incoming cache line, the cache controller for a cache first evicts the valid cache line by transferring it to one or more other levels of the memory hierarchy and then stores the incoming cache line at the entry. To maintain memory coherency, in the event the cache line that is selected pursuant to the replacement policy is in a modified state (i.e., is “dirty”), the cache line is written back to main memory 116 and to any other cache 121-124, 131-134, 140 that stores the cache line upon eviction from the cache 121-124, 131-134, 140.
In some embodiments, to limit unnecessary write backs of dirty data that will not be read again, the L3 cache controller 142 maintains a dead ranges buffer 144 to track data identified as “dead” by software executing as an application 116. The application 110 generates dead data operations that identify that the values of data stored at a region of memory are dead. In some embodiments, an indication that the value or values of data is dead is included in metadata associated with an operation. For example, Dataflow programming languages such as TensorFlow®, Caffe, Theano, and Spark provide programmers with knowledge of producer-consumer relationships between compute units 111-114 and between processing units 101, 102, and 103 such that a programmer can indicate that some target data is dead. For example, in some embodiments the application 110 is programmed to generate a dead data operation to indicate that the target data to be stored has been read for the last time or that the data will be overwritten before it is next read. In some embodiments, if a programmer or compiler knows that a given address range is dead, the programmer or compiler generates a “target data is dead” operation specifying the target address or range of addresses in the metadata of the operation. Similarly, a programmer or compiler generates a “last read” operation by using a separate opcode or extra bit of metadata in the read operation (in addition to the target address or range of addresses that are already used by a load operation) to indicate that the data can be marked as dead following the read. In response to receiving an indication from the application 110 that the value of the target data is dead, the L3 cache controller 142 prevents propagation of the target data to other levels of the memory hierarchy in response to eviction of the dead data or flushing of the L3 cache.
In some embodiments, the L3 cache controller 142 tracks address ranges of dead data at the dead ranges buffer 144. The L3 cache controller 142 updates the dead ranges buffer 144 in response to receiving a dead data operation, adding the target range to the dead ranges buffer 144 (or potentially merging with an existing entry if they are contiguous). In response to receiving a request for a store operation for live data (i.e., a standard store operation that makes the target data live), the L3 cache controller 142 checks the dead ranges buffer 144 to determine if the address of the data that is the subject of the store operation matches an address or address range stored at the dead ranges buffer 144. If the address matches an address or address range stored at the dead ranges buffer 144, the L3 cache controller 142 updates the dead ranges buffer 144 to remove the matching address to prevent the newly stored live data from being discarded.
In response to a request to perform a write-back operation, such as a write-back operation triggered by a flush operation or eviction of a dirty cache line or block of data, the L3 cache controller 142 performs a range check to determine whether the address of the dirty cache line or addresses for the block of data fall within an address range of dead data maintained at the dead ranges buffer 144. If the address falls within an address range of dead data, the L3 cache controller 142 ignores the request to perform the write-back operation and bypasses writing back the dirty cache line to other levels of the memory hierarchy, reducing write congestion and latency.
In some embodiments, instead of (or in addition to) a dead range buffer, the memory system handles dead data operations by modifying the state of the targeted dirty data in the cache hierarchy. For example, for a deep neural network (DNN) workload that executes two successive write-intensive layers such as an activation layer and a subsequent convolutional layer, on the same processing unit 101 such that the two layers share a local cache, after the produced data has been consumed and will not be consumed again until after it has been written again, propagation of the produced data to lower cache levels (131, 140), to remote caches (122-124, 132-134), or to memory (116) would consume network bandwidth and add unnecessary latency to the completion of system-scope synchronization. The programmer can infer that the produced data will not be read before it is written again based on the high-level structure of the workload algorithm and can program a fine-grain or coarse-grain “last read” load operation or a “mark as dead” operation at the consumer kernel, both of which have the effect of marking the data as dead. To prevent unnecessary propagation of the produced data, these operations may be sent through the cache hierarchy, marking target data as dead in each cache they encounter. When a cache receives a dead data operation, it looks up the state of target data. If the state of the target data is modified/dirty, then the state is updated to the analogous non-dirty state according to the coherence protocol (e.g., M->E for MESI, DirtyValid->Valid for GPU coherence). If the state is not dirty, then the dead-data operation may be propagated to the next cache level in case it is dirty there. Dead data requests may be propagated down to a set cache level (below which minimal benefits are expected for avoiding dirty data propagation) or until the LLC is reached, after which they may simply be dropped.
In response to receiving the dead data indication 210, the L3 cache controller 142 updates the dead ranges buffer 244 maintained at the L3 cache 140 by adding the address or address range of the data targeted by the operation. In some embodiments, in response to a subsequent eviction of the data targeted by the operation or in response to a flush of a cache at which the data targeted by the operation is stored, the L3 cache controller 142 bypasses writing back the data to other levels of the memory hierarchy in response to the address of the data matching an address or address range of the dead ranges buffer 144.
In some embodiments, in response to receiving the dead data indication 210, the L3 cache controller clears the dirty bit for the dead data stored at the L2 cache 131 and the L1 cache 121. Clearing the dirty bit (also referred to as unsetting the modified bit) occurs at any cache level at which the data is modified. Once the dirty bit has been cleared, the cache controllers for the L1 cache 121 and the L2 cache 131 will not write back the value of the data in response to eviction of the data from the L1 cache 121 or the L2 cache 131 or in response to a flush of the L1 cache 121 or the L2 cache 131. It will be appreciated that in some embodiments the L3 cache controller 142 propagates the dead data operation through the cache hierarchy 104 of all of the processing units 101-103 to clear the dirty bit of any block of data found at the target address or address range.
The dead ranges buffer 344 includes a column 305 that includes a field for storing addresses associated with the dead address ranges. In some embodiments, dead address range entries are defined at a fixed granularity (e.g., cache line granularity or page granularity), enabling simple index lookup and insertion. In some embodiments, dead address range entries specify a custom range via a base address and length, and logic tests whether an address falls within each range on a lookup. In some embodiments, the dead ranges buffer 344 is implemented as a separate structure from the cache and is sized to track the most recent address ranges of dead data because the most recent address ranges are those ranges that are most likely to be resident in the cache hierarchy 104 and dirty. Entries of the dead ranges buffer 344 are evicted according to a replacement policy such as least recently used (LRU). It will be appreciated that early eviction of an entry from the dead ranges buffer 344 will simply result in write backs of dirty data having an address matching the entry in the event of an eviction or cache flush.
At block 402, the L3 cache controller 142 receives an operation from the application 110. At block 404, the L3 cache controller 142 determines whether the operation is a dead data operation. If at block 404, the L3 cache controller 142 determines that the operation is a dead data operation, the method flow continues to block 406. At block 406, the L3 cache controller 142 updates the dead ranges buffer 144 to add the address or the address range of the cache line(s) targeted by the dead data operation. If the dead ranges buffer 144 is full, the L3 cache controller 142 evicts an entry from the dead ranges buffer 144 according to a replacement policy and installs the address or address range of the cache line(s) targeted by the dead data operation. The method flow then continues back to block 402.
If at block 404, the L3 cache controller 142 determines that the operation is not a dead data operation, the method flow continues to block 408. If at block 408, the L3 cache controller 142 determines that the operation is not a store operation, the method flow continues back to block 402. If at block 408, the L3 cache controller 142 determines that the operation is a store, the method flow continues to block 410. At block 410, the L3 cache controller 142 determines whether the address or address range of the cache line(s) targeted by the store operation match an address or address range of the dead ranges buffer 144. If not, the method flow continues back to block 402. If at block 410, the L3 cache controller 142 determines that the address or address range of the cache line(s) targeted by the store operation matches an address or an address range of the dead ranges buffer 144, the method flow continues to block 412. At block 412, the L3 cache controller 142 updates the dead ranges buffer 144 to remove the address or address range of the cache line(s) targeted by the store operation to prevent the data that is the subject of the store operation from being subsequently overwritten (discarded) in the event it is evicted or flushed from a cache.
At block 502, the L3 cache controller 142 receives a request to perform a write-back operation triggered by a flush of a cache or an eviction of a dirty cache line or block of data. At block 504, the L3 cache controller 142 determines whether the address of the evicted dirty cache line matches an address or address range stored at the dead ranges buffer 144. In the case of a cache flush, the L3 cache controller 142 determines whether the addresses of any dirty cache lines stored in the cache to be flushed match an address or address range stored at the dead ranges buffer 144. If at block 504, the L3 cache controller 142 determines that the address of the dirty cache line matches an address or address range stored at the dead ranges buffer 144, the method flow continues to block 506. At block 506, the L3 cache controller 142 (and the cache controllers associated with any other caches storing the dirty cache line) bypasses writing back the evicted dirty cache line or lines having addresses that match an address or address range stored at the dead ranges buffer 144. If at block 504, the L3 cache controller determines that the address of the dirty cache line does not match an address or address range stored at the dead ranges buffer 144, the method flow continues to block 508. At block 508, the L3 cache controller (and the cache controllers associated with any other caches storing the dirty cache line) write back the value of the dirty cache line in response to the eviction or cache flush.
In some embodiments, the apparatus and techniques described above are implemented in a system including one or more integrated circuit (IC) devices (also referred to as integrated circuit packages or microchips), such as the processing system described above with reference to
A computer readable storage medium may include any non-transitory storage medium, or combination of non-transitory storage media, accessible by a computer system during use to provide instructions and/or data to the computer system. Such storage media can include, but is not limited to, optical media (e.g., compact disc (CD), digital versatile disc (DVD), Blu-Ray disc), magnetic media (e.g., floppy disc, magnetic tape, or magnetic hard drive), volatile memory (e.g., random access memory (RAM) or cache), non-volatile memory (e.g., read-only memory (ROM) or Flash memory), or microelectromechanical systems (MEMS)-based storage media. The computer readable storage medium may be embedded in the computing system (e.g., system RAM or ROM), fixedly attached to the computing system (e.g., a magnetic hard drive), removably attached to the computing system (e.g., an optical disc or Universal Serial Bus (USB)-based Flash memory), or coupled to the computer system via a wired or wireless network (e.g., network accessible storage (NAS)).
In some embodiments, certain aspects of the techniques described above may implemented by one or more processors of a processing system executing software. The software includes one or more sets of executable instructions stored or otherwise tangibly embodied on a non-transitory computer readable storage medium. The software can include the instructions and certain data that, when executed by the one or more processors, manipulate the one or more processors to perform one or more aspects of the techniques described above. The non-transitory computer readable storage medium can include, for example, a magnetic or optical disk storage device, solid state storage devices such as Flash memory, a cache, random access memory (RAM) or other non-volatile memory device or devices, and the like. The executable instructions stored on the non-transitory computer readable storage medium may be in source code, assembly language code, object code, or other instruction format that is interpreted or otherwise executable by one or more processors.
Note that not all of the activities or elements described above in the general description are required, that a portion of a specific activity or device may not be required, and that one or more further activities may be performed, or elements included, in addition to those described. Still further, the order in which activities are listed are not necessarily the order in which they are performed. Also, the concepts have been described with reference to specific embodiments. However, one of ordinary skill in the art appreciates that various modifications and changes can be made without departing from the scope of the present disclosure as set forth in the claims below. Accordingly, the specification and figures are to be regarded in an illustrative rather than a restrictive sense, and all such modifications are intended to be included within the scope of the present disclosure.
Benefits, other advantages, and solutions to problems have been described above with regard to specific embodiments. However, the benefits, advantages, solutions to problems, and any feature(s) that may cause any benefit, advantage, or solution to occur or become more pronounced are not to be construed as a critical, required, or essential feature of any or all the claims. Moreover, the particular embodiments disclosed above are illustrative only, as the disclosed subject matter may be modified and practiced in different but equivalent manners apparent to those skilled in the art having the benefit of the teachings herein. No limitations are intended to the details of construction or design herein shown, other than as described in the claims below. It is therefore evident that the particular embodiments disclosed above may be altered or modified and all such variations are considered within the scope of the disclosed subject matter. Accordingly, the protection sought herein is as set forth in the claims below.
Claims
1. A method comprising:
- in response to evicting a dirty cache line from a first cache of a processor, bypassing writing the dirty cache line to a second cache or memory of the processor in response to receiving an indication from software executing at the processor that the dirty cache line is dead.
2. The method of claim 1, wherein the indication comprises a dead data operation indicating that a value of the dirty cache line of the first cache will not be read again or will be subsequently overwritten before being read again.
3. The method of claim 1, further comprising:
- tracking, at a buffer, address ranges corresponding to dirty cache lines that will not be subsequently read or that will be overwritten before being subsequently read.
4. The method of claim 3, further comprising:
- comparing an address corresponding to the dirty cache line to the address ranges tracked at the buffer; and
- bypassing writing the dirty cache line to the second cache or memory in response to the address corresponding to the dirty cache line being included in the address ranges.
5. The method of claim 3, further comprising:
- clearing a dirty bit associated with an address range corresponding to a dirty cache line that will not be subsequently read.
6. The method of claim 3, further comprising:
- querying the buffer prior to copying a page of data to a new physical location; and
- bypassing copying a portion of the page of data to the new physical location in response to determining that the portion includes an address tracked at the buffer.
7. A method comprising:
- receiving, at a cache controller for a first cache of a processor, the first cache storing a plurality of dirty cache lines, an indication from software executing at the processor that a subset of the dirty cache lines are dead; and
- in response to a flush operation or eviction of a dirty cache line from the first cache, selectively writing back only the dirty cache lines not included in the subset of the dirty cache lines to a second cache.
8. The method of claim 7, wherein the indication comprises a dead data operation indicating that values of the subset of the dirty cache lines will not be subsequently read or will be overwritten before being subsequently read.
9. The method of claim 8, further comprising:
- tracking, at a buffer, address ranges corresponding to dirty cache lines that will not be subsequently read or that will be overwritten before being subsequently read.
10. The method of claim 9, further comprising:
- comparing an address corresponding to a dirty cache line to the address ranges tracked at the buffer; and
- bypassing writing the dirty cache line to the second cache in response to the address corresponding to the dirty cache line being included in the address ranges.
11. The method of claim 9, further comprising:
- clearing a dirty bit associated with an address range corresponding to a dirty cache line that will not be subsequently read.
12. The method of claim 9, further comprising:
- querying the buffer prior to copying a page of data to a new physical location; and
- bypassing copying a portion of the page of data to the new physical location in response to determining that the portion includes an address tracked at the buffer.
13. A processor comprising:
- a first cache configured to store dirty cache lines;
- a second cache; and
- a cache controller associated with the first cache, the cache controller to: receive an indication from software executing at the processor that a dirty cache line is dead; and in response to a flush operation or eviction of dirty cache lines from the first cache, bypass writing back the dirty cache line to the second cache based on the indication.
14. The processor of claim 13, wherein the indication comprises a dead data operation indicating that a value of the dirty cache line will not be subsequently read or will be overwritten before being subsequently read.
15. The processor of claim 13, wherein the cache controller is further to:
- in response to a new store operation for the dirty cache line, indicate the dirty cache line is no longer dead.
16. The processor of claim 13, further comprising:
- a buffer, wherein the cache controller is further to:
- track, at the buffer, address ranges corresponding to dirty cache lines that will not be subsequently read or will be overwritten before they are subsequently read.
17. The processor of claim 16, wherein the cache controller is further to:
- compare an address corresponding to the dirty cache line to the address ranges tracked at the buffer; and
- bypass writing the dirty cache line to the second cache in response to the address corresponding to the dirty cache line being included in the address ranges.
18. The processor of claim 16, wherein the cache controller is further to:
- modify the address ranges to remove a tracked address in response to receiving a store operation indicating that data stored at the tracked address has been overwritten.
19. The processor of claim 16, further comprising:
- an operating system to: query the buffer prior to copying a page of data to a new physical location; and bypass copying a portion of the page of data to the new physical location in response to determining that the portion includes an address tracked at the buffer.
20. The processor of claim 13, wherein the cache controller is further to:
- clear a dirty bit associated with an address range corresponding to a dirty cache line that is dead.
Type: Application
Filed: Aug 31, 2020
Publication Date: Mar 3, 2022
Patent Grant number: 11526449
Inventors: Johnathan ALSOP (Bellevue, WA), Pouya FOTOUHI (Santa Clara, CA), Bradford BECKMANN (Bellevue, WA), Sergey BLAGODUROV (Bellevue, WA)
Application Number: 17/007,133