WO2022232008A1 - Address hashing in a multiple memory controller system - Google Patents
Address hashing in a multiple memory controller system Download PDFInfo
- Publication number
- WO2022232008A1 WO2022232008A1 PCT/US2022/026111 US2022026111W WO2022232008A1 WO 2022232008 A1 WO2022232008 A1 WO 2022232008A1 US 2022026111 W US2022026111 W US 2022026111W WO 2022232008 A1 WO2022232008 A1 WO 2022232008A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- memory
- given
- slice
- address
- granularity
- 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.)
- Ceased
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0607—Interleaved addressing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0615—Address space extension
- G06F12/063—Address space extension for I/O modules, e.g. memory mapped I/O
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
Definitions
- Embodiments described herein are related to memory addressing in computer systems, and particularly to distributing a memory address space over multiple memory devices.
- Various computer systems exist that include a large amount of system memory, that is directly accessible to processors and other hardware agents in the system via a memory address space (as compared to, for example, an I/O address space that is mapped to specific I/O devices).
- the system memory is generally implemented as multiple dynamic random access memory (DRAM) devices.
- DRAM dynamic random access memory
- other types of memory such as static random access memory (SRAM) devices, magnetic memory devices of various types (e.g., MRAM), non-volatile memory devices such as Flash memory or read-only memory (ROM), other types of random access memory devices can be used as well.
- SRAM static random access memory
- MRAM magnetic memory devices of various types
- ROM read-only memory
- a portion of the memory address space can be mapped to such devices (and memory mapped I/O devices can be used as well) in addition to the portions of the memory address space that are mapped to the RAM devices.
- mapping of memory addresses to the memory devices can strongly affect the performance of the memory system (e.g., in terms of sustainable bandwidth and memory latency).
- NUMA non-uniform memory architecture
- the computing nodes communicate and one computing node can access data in another computing node, but at increased latency.
- the memory address space is mapped in large continuous sections (e.g., one node includes addresses 0 to N-l, where N is the number of bytes of memory in the node, another node includes addresses N to 2N-1, etc.).
- This mapping optimizes access to local memory at the expense of accesses to non-local memory.
- this mapping also constrains the operating system in both the manner of mapping virtual pages to physical pages and the selection of the computing node in which a given process can execute in the system to achieve higher performance.
- the bandwidth and latency of the accesses by a process to large amounts of data is bounded by the performance of a given local memory system, and suffers if memory in another computing node is accessed.
- Fig. l is a block diagram of one embodiment of a plurality of systems on a chip (SOCs), where a given SOC includes a plurality of memory controllers.
- SOCs systems on a chip
- FIG. 2 is a block diagram illustrating one embodiment of memory controllers and physical/logical arrangement on the SOCs.
- Fig. 3 is a block diagram of one embodiment of a binary decision tree to determine a memory controller that services a particular address.
- FIG. 4 is a block diagram illustrating one embodiment of a plurality of memory location configuration registers.
- Fig. 5 is a flowchart illustrating operation of one embodiment of the SOCs during boot/power up.
- Fig. 6 is a flowchart illustrating operation of one embodiment of the SOCs to route a memory request.
- Fig. 7 is a flowchart illustrating operation of one embodiment of a memory controller in response to a memory request.
- Fig. 8 is a flowchart illustrating operation of one embodiment of monitoring system operation to determine memory folding.
- Fig. 9 is a flowchart illustrating operation of one embodiment of folding a memory slice.
- Fig. 10 is a flowchart illustrating operation of one embodiment of unfolding a memory slice.
- FIG. 11 is a flowchart illustrating one embodiment of a method of memory folding.
- Fig. 12 is a flowchart illustrating one embodiment of a method of hashing a memory address.
- Fig. 13 is a flowchart illustrating one embodiment of a method of forming a compacted pipe address.
- Fig. 14 is a block diagram one embodiment of a system and a variety of implementations of the system.
- Fig. 15 is a block diagram of a computer accessible storage medium.
- Fig. l is a block diagram of one embodiment of a plurality of systems on a chip (SOCs) 10 forming a system.
- the SOCs 10 may be instances of a common integrated circuit design, and thus one of the SOCs 10 is shown in more detail. Other instances of the SOC 10 may be similar.
- the SOC 10 comprises a plurality of memory controllers 12A-12H, one or more processor clusters (P clusters) 14A-14B, one or more graphics processing units (GPUs) 16A-16B, one or more I/O clusters 18A-18B, and a communication fabric that comprises a west interconnect (IC) 20 A and an east IC 20B.
- P clusters processor clusters
- GPUs graphics processing units
- I/O clusters 18A-18B I/O clusters 18A-18B
- IC west interconnect
- the I/O clusters 18A-18B, P clusters 14A-14B, and GPUs 16A-16B may be coupled to the west IC 20 A and east IC 20B.
- the west IC 20 A may be coupled to the memory controllers 12A- 12D
- the east IC 20B may be coupled to the memory controllers 12E-12H.
- the system shown in Fig. 1 further includes a plurality of memory devices 28 coupled to the memory controllers 12A-12H.
- memory devices 28 are coupled to each memory controller 12A-12H.
- Other embodiments may have more or fewer memory devices 28 coupled to a given memory controller 12A-12H.
- different memory controllers 12A-12H may have differing numbers of memory devices 28.
- Memory devices 28 may vary in capacity and configuration, or may be of consistent capacity and configuration (e.g., banks, bank groups, row size, ranks, etc.).
- Each memory device 28 may be coupled to its respective memory controller 12A-12H via an independent channel in this implementation. Channels shared by two or more memory devices 28 may be supported in other embodiments.
- the memory devices 28 may be mounted on the corresponding SOC 10 in a chip-on-chip (CoC) or package-on-package (PoP) implementation. In another embodiment, the memory devices 28 may be packaged with the SOC 10 in a multi-chip-module (MCM) implementation. In yet another embodiment, the memory devices 28 may be mounted on one or more memory modules such as single inline memory modules (SIMMs), dual inline memory modules (DIMMs), etc. In an embodiment the memory devices 28 maybe dynamic random access memory (DRAM), such as synchronous DRAM (SDRAM) and more particularly Double data rate (DDR) SDRAM. In an embodiment, the memory devices 28 may be implemented to the low power (LP) DDR SDRAM specification, also known and mobile DDR (mDDR) SDRAM.
- LP low power
- mDDR SDRAM low power SDRAM specification
- the interconnects 20A-20B may also be coupled to an off-SOC interface to the other instance of the SOC 10, scaling the system to more than one SOC (e.g., more than one semiconductor die, where a given instance of the SOC 10 may be implemented on a single semiconductor die but multiple instances may be coupled to form a system).
- the system may be scalable to two or more semiconductor dies on which instances of SOC 10 are implemented.
- the two or more semiconductor dies may be configured as a single system in which the existence of multiple semiconductor dies is transparent to software executing on the single system.
- the delays in a communication from die to die may be minimized, such that a die-to-die communication typically does not incur significant additional latency as compared to an intra-die communication as one aspect of software transparency to the multi-die system.
- the communication fabric in the SOC 10 may not have physically distinct interconnects 20A-20B, but rather may be a full interconnect between source hardware agents in the system (that transmit memory requests) and the memory controllers 12A-12H (e.g., a full crossbar). Such embodiments may still include a notion of interconnects 20A-20B logically, for hashing and routing purposes, in an embodiment.
- the memory controller 12A is shown in greater detail in Fig. 1 and may include a control circuit 24 and various internal buffer(s) 26. Other memory controllers 12B-12H may be similar.
- the control circuit 24 is coupled to the internal buffers 26 and the memory location configuration registers 22F (discussed below).
- the control circuit 24 may be configured to control the access to memory devices 28 to which the memory controller 12A is coupled, including controlling the channels to the memory devices 28, performing calibration, ensuring correct refresh, etc.
- the control circuit 24 may also be configured to schedule memory requests to attempt to minimize latency, maximize memory bandwidth, etc.
- the memory controllers 12A-12H may employ memory caches to reduce memory latency, and the control circuit 24 may be configured to access the memory cache for memory requests and process hits and misses in the memory cache, and evictions from the memory cache.
- the memory controllers 12A-12H may manage coherency for the memory attached thereto (e.g., a directory -based coherency scheme) and the control circuit 24 may be configured to manage the coherency.
- a channel to a memory device 28 may comprise the physical connections to the device, as well as low level communication circuitry (e.g., physical layer (PHY) circuitry).
- PHY physical layer
- the I/O clusters 18A-18B, the P clusters 14A-14B, the GPUs 16A-16B, and the memory controllers 12A-12H include memory location configuration (MLC) registers (reference numerals 22A-22H, 22J-22N, and 22P).
- MLC memory location configuration
- the west and east IC 20A-20B may, in some embodiments, also include memory location configuration registers. Because the system includes multiple memory controllers 12A-12H (and possibly multiple sets of memory controllers in multiple instances of the SOC 10), the address accessed by a memory request may be decoded (e.g., hashed) to determine the memory controller 12A-12H, and eventually the specific memory device 28, that is mapped to the address.
- the memory addresses may be defined within a memory address space that maps memory addresses to memory locations in the memory devices.
- a given memory address in the memory address space uniquely identifies a memory location in one of the memory devices 28 that is coupled to one of the plurality of memory controllers 12A-12H.
- the MLC registers 22A-22H, 22J-22N, and 22P may be programmable to describe the mapping, such that hashing the memory address bits as specified by the MLC registers 22A- 22H, 22J-22N, and 22P may identify the memory controller 12A-12H, and eventually the memory device 28 (and the bank group and/or bank within the memory device 28, in an embodiment), to which the memory request is directed.
- MLC registers there may be more than one MLC register in a given circuit.
- the number of levels decoded by a given circuit may depend on how many levels of granularity the given circuit uses to determine how to route a memory request to the correct memory controller 12A-12H, and in some cases to even lower levels of granularity within the correct memory controller 12A-12H.
- the memory controllers 12A-12H may include MLC registers for each level of hierarchy, down to at least the specific memory device 28.
- levels of granularity may be viewed as a recursive power of 2 at least two of the plurality of memory controllers 12A-12H. Accordingly, while the MLC registers 22A-22H, 22J-22N, and 22P are given the same general reference number, the MLC registers 22A-22H, 22J-22N, and 22P may not be all the same set of registers. However, instances of the registers 22A-22H, 22J-22N, and 22P that correspond to the same level of granularity may be the same, and may be programmed consistently. Additional details are discussed further below.
- the memory controllers 12A-12H may be physically distributed over the integrated circuit die on which the SOC 10 is implemented.
- the memory controllers in the system may be physically distributed over multiple integrated circuit die, and physically distributed within the integrated circuit die. That is, the memory controllers 12A-12H may be distributed over the area of the semiconductor die on which the SOC 10 is formed.
- the location of the memory controllers 12A-12H within the SOC 10 may be representative of the physical locations of those memory controllers 12A-12H within the SOC 10 die area. Accordingly, determining the memory controller 12A-12H to which a given memory request is mapped (the “targeted memory controller”) may be used to route the memory request over a communication fabric in the SOC 10 to the targeted memory controller.
- the communication fabric may include, e.g., the West IC 20 A and the East IC 20B, and may further include additional interconnect, not shown in Fig. 1.
- the memory controllers 12A-12H may not be physically distributed. Nevertheless, a hashing mechanism such as described herein may be used to identify the targeted memory controller 12A-12H
- the I/O clusters 18A-18B, the P clusters 14A-14B, and the GPUs 16A-16B may be examples of hardware agents that are configured to access data in the memory devices 28 through the memory controllers 12A-12H using memory addresses. Other hardware agents may be included as well.
- a hardware agent may be a hardware circuit that may be a source of a memory request (e.g., a read or a write request). The request is routed from the hardware agent to the targeted memory controller based on the contents of the MLC registers.
- memory addresses may be mapped over the memory controllers 12A-12H (and corresponding memory controllers in other instances of the SOC 10 included in the system) to distribute data within a page throughout the memory system.
- Such a scheme may improve the bandwidth usage of the communication fabric and the memory controllers for applications which access most or all of the data in a page. That is, a given page within the memory address space may be divided into a plurality of blocks, and the plurality of blocks of the given page may be distributed over the plurality of memory controllers in a system.
- a page may be the unit of allocation of memory in a virtual memory system. That is, when memory is assigned to an application or other process/thread, the memory is allocated in units of pages.
- the virtual memory system creates a translation from the virtual addresses used by the application and the physical addresses in the memory address space, which identify locations in the memory devices 28.
- Page sizes vary from embodiment to embodiment. For example, a 16 kilobyte (16 kB) page size may be used. Smaller or larger page sizes may be used (e.g., 4 kB, 8 kB, 1 Megabyte (MB), 4 MB, etc.). In some embodiments, multiple page sizes are supported in a system concurrently. Generally, the page is aligned to a page-sized boundary (e.g., a 16 kB page is allocated on 16 kB boundaries, such that the least significant 14 address bits form an offset within a page, and the remaining address bits identify the page).
- a page-sized boundary e.g., a 16 kB page is allocated on 16 kB boundaries, such that the least significant 14 address bits form an offset within a page, and the remaining address bits identify the page).
- the number of blocks into which a given page is divided may be related to the number of memory controllers and/or memory channels in the system.
- the number of blocks may be equal to the number of memory controllers (or the number of memory channels).
- an equal number of memory requests may be sent to each memory controller/memory channel.
- Other embodiments may have a number of blocks equal to a multiple of the number of memory controllers, or to a fraction of the memory controllers (e.g., a power of two fraction) such that a page is distributed over a subset of the memory controllers.
- the MLC registers may be programmed to map adjacent blocks of a page to memory controllers that are physically distant from each other within the SOC(s) 10 of the system. Accordingly, an access pattern in which consecutive blocks of a page are accessed may be distributed over the system, utilizing different portions of the communication fabric and interfering with each other in a minimal way (or perhaps not interfering at all). For example, memory requests to adjacent blocks may take different paths through the communication fabric, and thus would not consume the same fabric resources (e.g., portions of the interconnects 20A-20B). That is, the paths may be at least partially non overlapping. In some cases, the paths may be completely non-overlapping. Additional details regarding the distribution of memory accesses are provided below with regard to Fig.
- the MLC registers 22A-22H, 22J-22N, 22P may independently specify the address bits that are hashed to select each level of granularity in the system for a given memory address. For example, a first level of granularity may select the semiconductor die to which the memory request is routed. A second level of granularity may select a slice, which may be a set of memory controllers (e.g., the upper 4 memory controllers 12A-12B and 12E-12F may form a slice, and the lower 4 memory controllers 12C-12D and 12F-12G may form another slice). Other levels of granularity may include selecting a “side” (East or West in Fig. 1), and a row within a slice.
- a “side” East or West in Fig. 1
- levels of granularity within the memory controllers 12A-12H, finally resulting in a selected memory device 28 (and perhaps bank group and bank within the device 28, in an embodiment). Any number of levels of granularity may be supported in various embodiments. For example, if more than two die are included, there may be one or more levels of granularity coarser than the die level, at which groups of die are selected.
- the independent specification of address bits for each level of granularity may provide significant flexibility in the system. Additionally, changes to the design of the SOC 10 itself may be managed by using different programming in the MLC registers, and thus the hardware in the memory system and/or interconnect need not change to accommodate a different mapping of addresses to memory devices. Furthermore, the programmability in the MLC registers may allow for memory devices 28 to be depopulated in a given product that includes the SOC(s) 10, reducing cost and power consumption if the full complement of memory devices 28 is not required in that product.
- each level of granularity is a binary determination: A result of binary zero from the hash selects one result at the level, and a result of binary one from the hash select the other result.
- the hashes may be any combinatorial logic operation on the input bits selected for the levels by the programming of the MLC registers.
- the hash may be an exclusive OR reduction, in which the address bits are exclusive-ORed with each other, resulting in a binary output.
- Other embodiments may produce a multi-bit output value to select among more than two results.
- the internal buffers 26 in a given memory controller 12A-12H may be configured to store a significant number of memory requests.
- the internal buffers 26 may include static buffers such as transaction tables that track the status of various memory requests being processed in the given memory controller 12A-12H, as well as various pipeline stages through which the requests may flow as they are processed.
- the memory address accessed by the request may be a significant portion of the data describing the request, and thus may be a significant component of the power consumption in storing the requests and moving the requests through the various resources within the given memory controller 12A-12H.
- the memory controllers 12A-12H may be configured to drop a bit of address from each set of address bits (corresponding to each level of granularity) used to determine the targeted memory controller.
- the remaining address bits may be used to recover the dropped address bits if needed.
- the dropped bit may be an address bit that is not included in any other hash corresponding to any other level of granularity.
- the exclusion of the dropped bit from other levels may allow the recovery of the drop bits in parallel, since the operations are independent. If a given dropped bit is not excluded from other levels, it may be recovered first, and then used to recover the other dropped bits. Thus, the exclusion may be an optimization for recovery. Other embodiments may not require recovery of the original address and thus the dropped bits need not be unique to each hash, or may recover the bits in a serial fashion if exclusion is not implemented.
- the remaining address bits may form a compacted pipe address that maybe used internal to the memory controller for processing.
- the dropped address bits are not needed, because the amount of memory in the memory devices 28 coupled to the given memory controller 12A-12H may be uniquely addressed using the compacted pipe address.
- the MLC registers 22A-22H, 22J-22N, and 22P may include registers programmable to identify the drop bits, in an embodiment.
- the SOC 10 in Fig. 1 includes a particular number of memory controllers 12A- 12H, P clusters 14A-14B, GPUs 16A-16B, and I/O clusters 18A-18B.
- various embodiments may include any number of memory controllers 12A-12H, P clusters 14A-14B, GPUs 16A-16B, and I/O clusters 18A-18B, as desired.
- the P clusters 14A-14B, the GPUs 16A-16B, and the I/O clusters 18A-18B generally comprise hardware circuits configured to implement the operation described herein for each component.
- the memory controllers 12A-12H generally comprise hardware circuits (memory controller circuits) to implement the operation described herein for each component.
- the interconnect 20A-20B and other communication fabric generally comprise circuits to transport communications (e.g., memory requests) among the other components.
- the interconnect 20A-20B may comprise point to point interfaces, shared bus interfaces, and/or hierarchies of one or both interfaces.
- the fabric may be circuit-switched, packet-switched, etc.
- Fig. 2 is a block diagram illustrating one embodiment of a plurality of memory controllers and physical/logical arrangement on the SOC die(s), for one embodiment.
- the memory controllers 12A-12H are illustrated for two instances of the SOC 10, illustrated as die 0 and die 1 in Fig. 2 (e.g., separated by short dotted line 30).
- Die 0 may be the portion illustrated above the dotted line 30, and die 1 may be the portion below the dotted line 30.
- the memory controllers 12A-12H on a given die may be divided into slices based on the physical location of the memory controllers 12A-12H.
- slice 0 may include the memory controllers 12A-12B and 12E-12F, physically located on one half of the die 0 or die 1.
- Slice 1 may include the memory controllers 12C-12D and 12G-12H, physically located on the other half of die 0 or die 1.
- Slice on a die are delimited by dashed lines 32 in Fig. 2.
- memory controllers 12A-12H may be divided into rows based on physical location in the slice. For example, slice 0 of die 0 is shown in Fig.
- a given memory controller 12A-12H may be reachable via either the west interconnect 20 A or the east interconnect 20B.
- the memory address may be hashed at multiple levels of granularity.
- the levels may include the die level, the slice level, the row level, and the side level (east or west).
- the die level may specify which of the plurality of integrated circuit die includes the given memory controller.
- the slice level may specify which of the plurality of slices within the die includes the given memory controller, where the plurality of memory controllers on the die are logically divided into a plurality of slices based on physical location on the given integrated circuit die and a given slice includes at least two memory controllers of the plurality of memory controllers within a die.
- memory controllers may be logically divided into a plurality of rows based on physical location on the die, and more particularly within the given slice.
- the row level may specify which of the plurality of rows includes the given memory controller.
- the row may be divided into a plurality of sides, again based on physical location in the die and more particularly within the given row.
- the side level may specify which side of a given row includes the given memory controller.
- Other embodiments may include more or fewer levels, based on the number of memory controllers 12A-12H, the number of die, etc.
- an embodiment that includes more than two die may include multiple levels of granularity to select the die (e.g., die groups may be used to group pairs of SOCs 10 in a four die implementation, and the die level may select among die in the selected pair).
- die groups may be used to group pairs of SOCs 10 in a four die implementation, and the die level may select among die in the selected pair.
- an implementation that includes four memory controllers per die instead of 8 may eliminate one of the slice or row levels.
- An implementation that includes a single die, rather than multiple die, may eliminate the die level.
- a binary determination is made based on a hash of a subset of address bits to select one or the other level.
- the hash may logically operate on the address bits to generate a binary output (one bit, either zero or one) Any logical function may be used for the hash.
- exclusive-OR (XOR) reduction may be used in which the hash XORs the subset of address bits together to produce the result.
- An XOR reduction may also provide reversibility of the hash. The reversibility may allow the recovery of the dropped bits, but XORing the binary result with the address bits that where not dropped (one dropped bit per level).
- the dropped address bit may be excluded from subsets of address bits used for other levels.
- Other bits in the hash may be shared between hashes, but not the bit that is to be dropped. While the XOR reduction is used in this embodiment, other embodiments may implement any logically reversible Boolean operation as the hash.
- Fig. 3 is a block diagram of one embodiment of a binary decision tree to determine a memory controller 12A-12H (and die) that services a particular memory address (that is, the memory controller to which the particular memory address is mapped).
- the decision tree may include determining a die (reference numeral 40), a slice on the die (reference numeral 42), a row in the slice (reference numeral 44), and a side within the row (reference numeral 46).
- the embodiment of Fig. 3 may include a plane level 48 and a pipe level 50.
- the internal levels of granularity may map the memory request to the specific memory device 28 that stores the data affected by the memory request. That is, the finest level of granularity may be the level that maps to the specific memory device 28.
- the memory planes may be independent, allowing multiple memory requests to proceed in parallel. Additionally, the various structures included in the memory controller (e.g., a memory cache to cache data previously accessed in the memory devices 28, coherency control hardware such as duplicate tags or a directory, various buffers and queues, etc.) may be divided among the planes and thus the memory structures may be smaller and easier to design to meet timing at a given frequency of operation, etc. Accordingly, performance may be increased through both the parallel processing and the higher achievable clock frequency for a given size of hardware structures. There may be additional levels of internal granularity within the memory controller as well, in other embodiments.
- the binary decision tree illustrated in Fig. 3 is not intended to imply that the determinations of die level 40, slice level 42, row level 44, side level 46, plane level 48, and pipe 50 are made serially.
- the logic to perform the determinations may operate in parallel, selecting sets of address bits and performing the hashes to generate the resulting binary decisions.
- the programmability of the address mapping to the memory controllers 12A-12H and the dies 0 and 1 may provide for a distribution of consecutive addresses among physically distant memory controllers 12A-12H. That is, if a source is accessing consecutive addresses of a page of memory, for example, the memory requests may distribute over the different memory controllers (at some address granularity). For example, consecutive cache blocks (e.g., aligned 64 byte or 128 byte blocks) may be mapped to different memory controllers 12A-12H. Less granular mappings may be used as well (e.g., 256 byte, 512 byte, or 1 kilobyte blocks may map to different memory controllers).
- consecutive cache blocks e.g., aligned 64 byte or 128 byte blocks
- Less granular mappings may be used as well (e.g., 256 byte, 512 byte, or 1 kilobyte blocks may map to different memory controllers).
- mapping consecutive blocks to physically distributed memory controllers 12A- 12H may have performance benefits. For example, since the memory controllers 12A-12H are independent of each other, the bandwidth available in the set of memory controllers 12A- 12H as a whole may be more fully utilized if a complete page is accessed. Additionally, in some embodiments, the route of the memory requests in the communication fabric may be partially non-overlapped or fully non-overlapped.
- At least one segment of the communication fabric that is part of the route for one memory request may not be part of the route for another memory request, and vice versa, for a partially non-overlapped route.
- Fully non-overlapped routes may use distinct, complete separate parts of the fabric (e.g., no segments may be the same).
- the traffic in the communication fabric may be spread out and may not interfere with each other as much as the traffic might otherwise interfere.
- the MLC registers 22A-22H, 22J-22N, and 22P may be programmable with data that causes the circuitry to route a first memory request having a first address to a first memory controller of the plurality of memory controllers and to route a second memory request having a second address to a second memory controller of the plurality of memory controllers that is physically distant from the first memory controller when the first address and the second address are adjacent addresses at a second level of granularity.
- the first route of the first memory request through the communication fabric and a second route of the second memory request through the communication fabric are completely non-overlapped, in an embodiment. In other cases, the first and second routes may be partially non-overlapped.
- the one or more registers may be programmable with data that causes the communication fabric to route a plurality of memory requests to consecutive addresses to different ones of the plurality of memory controllers in a pattern that distributes the plurality of memory requests over to physically distant memory controllers.
- the memory controllers 12A-12H on die 0 and die 1 are labeled MC 0 to MC 15. Beginning with address zero in a page, consecutive addresses at the level of granularity defined in the programming of the MLC registers 22A-22H, 22J-22N, and 22P may first access MC0 (memory controller 12A in die 0), then MCI (memory controller 12Gin die 1), MC2 (memory controller 12D in die 1), MC3 (memory controller 12F in die 0), MC4 (memory controller 12A in die 1), MC5 (memory controller 12G in die 0), MC6 (memory controller 12D in die 0), MC7 (memory controller 12F in die 1), MC8 (memory controller 12C in die 0), MC9 (memory controller 12E in die 1), MCIO (memory controller 12B in die 1), MCI 1 (memory controller 12H in die
- the next consecutive access after MC15 may return to MC0. While a more random access pattern may result in memory requests routing to physically near memory controllers, the more common regular access patterns (even if a stride is involved in which one or more memory controller is skipped in the above order) may be well distributed in the system.
- Fig. 4 is a block diagram illustrating one embodiment of a plurality of memory location configuration registers 60 and 62.
- the registers 60 in a given hardware agent may be programmable with data identifying which address bits are included in the hash at one or more of the plurality of levels of granularity.
- the registers 60 may include a die register, a slice register, a row register, a side register, a plane register, and a pipe register corresponding to the previously-described levels, as well as a bank group (BankG) and bank register the define the bank group and bank within a memory device 28 that stores the data (for an embodiment in which the DRAM memory devices have both bank groups and banks).
- BankG bank group
- FIG. 4 other embodiments may combine two or more levels of granularity as fields within a single register, as desired.
- the die register is shown in exploded view for one embodiment, and other registers 60 may be similar.
- the die register may include an invert field 66, and a mask field 68.
- the invert field 66 may be a bit with the set state indicating invert and the clear state indicating no invert (or vice-versa or a multi-bit value may be used).
- the mask field 68 may be a field of bits corresponding to respective address bits.
- the set state in a mask bit may indicate the respective address bit is included in the hash, and the clear state may indicate that the respective address bit is excluded from the hash, for that level of granularity (or vice-versa).
- the invert field 66 may be used to specify that the result of the hash of the selected address bits is to be inverted.
- the inversion may permit additional flexibility in the determination of the memory controller. For example, programming a mask of all zeros results in a binary 0 at that level of granularity for any address, forcing the decision the same direction each time. If a binary 1 is desired at a given level of granularity for any address, the mask may be programmed to all zeros and the invert bit may be set.
- Each of MLC registers 22A-22H, 22J-22N, and 22P may include a subset or all of the registers 60, depending on the hardware agent and the levels of granularity used by that hardware agent to route a memory request.
- a given hardware agent may employ all of the levels of granularity, down to the bank level, if desired (curly brace labeled “Bank” in Fig. 4).
- some hardware agents need not implement that many levels of granularity.
- a hardware agent may employ the die, slice, row, and side levels of granularity, delivering the memory requests to the targeted memory controller 12A-12H on the targeted die (curly brace labeled “MC” in Fig. 4).
- the memory controller 12A-12H may handle the remaining hashing levels.
- Another hardware agent may have two routes to a given memory controller 12A-12H, one for each plane.
- Such a hardware agent may employ the die, slice, row, side, and plane registers (curly brace labeled “Plane” in Fig. 4).
- Yet another hardware agent may include the die, slice, row, side, and plane levels of granularity, as well as the pipe level, identifying the desired channel (curly brace labeled “Channel” in Fig. 4).
- a first hardware agent may be programmable for a first number of the plurality of levels of granularity and a second hardware agent may be programmable for a second number of the plurality of levels of granularity, wherein the second number is different from the first number.
- bank group, bank, and other intradevice levels of granularity may be specified differently than the other levels of granularity and thus may be separately-defined registers not included in the registers 60.
- bank group, bank, and other intradevice levels of granularity may be fixed in hardware.
- drop registers 62 shown in Fig. 4.
- the drop registers 62 may be included in the MLC registers 22F-22H and 22J- 22N, in the memory controllers 12A-12H.
- the drop registers 62 may include a register for each level of granularity and may be programmable to identify at least one address bit in the subset of address bits corresponding to that level of granularity that is to be dropped by the targeted memory controller 12A-12H.
- the specified bit is one of the bits specified in the corresponding register 60 as a bit included in the hash of that level of granularity.
- the dropped address bit may be exclusively included in the hash of for that level of granularity (e.g., the dropped address bit is not specified at any other level of granularity in the registers 60). Other bits included in a given hash may be shared in other levels of granularity, but the dropped bit may be unique to the given level of granularity.
- the drop registers 62 may be programmed in any way to indicate the address bit that is to be dropped (e.g., a bit number may be specified as a hexadecimal number, or the bit mask may be used as shown in Fig. 4).
- the bit mask may include a bit for each address bit (or each selectable address bit, if some address bits are not eligible for dropping).
- the bit mask may be a “one hot” mask, in which there is one and only one set bit, which may indicate the selected drop bit.
- a single bit mask in a single drop register 62 may specify a drop bit for each level of granularity and thus may not be a one hot mask.
- the memory controller may be programmed via the drop registers 62 to specify the drop bits.
- the memory controller (and more particularly, the control circuit 24 may be configured to generate an internal address for each memory request (the “compacted pipe address” mentioned above, or more briefly “compacted address”) for use internally in the memory controller in the internal buffers 26 and to address the memory device 28.
- the compacted pipe address may be generated by dropping some or all of the specified address bits, and shifting the remaining address bits together.
- the numerous internal buffers with copies of the address may save power by removing unnecessary address bits. Additionally, with a reversible hash function dropped bits may be recovered to recover the full address.
- the existence of the memory request in a given memory controller 12A-12H provides the result of the hash at a given level of granularity, and hashing the result with the other address bits that are included in that level of granularity results in the dropped address bit. Recovery of the full address may be useful if it is needed for a response to the request, for snoops for coherency reasons, etc.
- Fig. 5 a flowchart illustrating operation of one embodiment of the SOCs during boot/power up is shown.
- the operation of illustrated in Fig. 5 may be performed by instructions executed by a processor (e.g., low level boot code executed to initialize the system for execution of the operating system).
- a processor e.g., low level boot code executed to initialize the system for execution of the operating system.
- all or a portion of the operation shown in Fig. 5 may be performed by hardware circuitry during boot. While the blocks are shown in a particular order for ease of understanding, other orders may be used. Blocks may be performed in parallel in combinatorial logic in the SOCs 10. Blocks, combinations of blocks, and/or the flowchart as a whole may be pipelined over multiple clock cycles.
- the boot code may identify the SOC configuration (e.g., one or more chips including SOC 10 instances, SOC design differences such as a partial SOC that includes fewer memory controllers 12A-12H or one of a plurality of SOC designs supported by the system, memory devices 28 coupled to each memory controller 12A-12H, etc.) (block 70). Identifying the configuration may generally be an exercise in determining the number of destinations for memory requests (e.g., the number of memory controllers 12A-12H in the system, the number of planes in each memory controller 12A-12H, the number of memory controllers 12A-12H that will be enabled during use, etc.). A given memory controller 12A- 12H could be unavailable during use, e.g., if the memory devices 28 are not populated at the given memory controller 12A-12H or there is a hardware failure in the memory devices 28.
- SOC configuration e.g., one or more chips including SOC 10 instances, SOC design differences such as a partial SOC that includes fewer memory controllers 12A-12H or
- Identifying the configuration may also include determining the total amount of memory available (e.g., the number of memory devices 28 coupled to each memory controller 12A-12H and the capacity of the memory devices 28).
- the boot code may thus determine the block size to be mapped to each memory controller 12A-12H (block 72).
- a linear mapping of addresses to memory controllers 12A-12H may be used (e.g., mapping the entirety of the memory devices 28 in on memory controller 12A-12H to a contiguous block of addresses in the memory address space), or a hybrid of interleaved at one or more levels of granularity and linear at other levels of granularity may be used.
- the boot code may determine how to program the MLC registers 22A-22H, 22J-22N, and 22P to provide the desired mapping of addresses to memory controllers 12A-12H (block 74).
- the mask registers 60 may be programmed to select the address bits at each level of granularity and the drop bit registers 62 may be programmed to select the drop bit for each level of granularity.
- Fig. 6 is a flowchart illustrating operation of various SOC components to determine the route for a memory request from a source component to the identified memory controller 12A-12H for that memory request. While the blocks are shown in a particular order for ease of understanding, other orders may be used. Blocks may be performed in parallel in combinatorial logic in the SOCs 10. Blocks, combinations of blocks, and/or the flowchart as a whole may be pipelined over multiple clock cycles.
- the component may apply the registers 60 to the address of the memory request to determine the various levels of granularity, such as the die, slice, row, side, etc. (block 76). Based on the results at the levels of granularity, the component may route the memory request over the fabric to the identified memory controller 12A-12H (block 78).
- Fig. 7 is a flowchart illustrating operation of one embodiment of a memory controller 12A-12H in response to a memory request. While the blocks are shown in a particular order for ease of understanding, other orders may be used. Blocks may be performed in parallel in combinatorial logic in the SOCs 10. Blocks, combinations of blocks, and/or the flowchart as a whole may be pipelined over multiple clock cycles.
- the memory controller 12A-12H may use the plane, pipe, bank group, and bank mask registers 60 to identify the plane, pipe, bank group, and bank for the memory request (block 80). For example, the memory controller 12A-12H may logically AND the mask from the corresponding register 60 with the address, logically combine the bits (e.g., XOR reduction) and invert if indicated. The memory controller 12A-12H may use the drop masks from the drop registers 62 to drop the address bits specified by each level of granularity (e.g., die, slice, row, side, plane, pipe, bank group, and bank), and may shift the remaining address bits together to form the compacted pipe address (block 82).
- each level of granularity e.g., die, slice, row, side, plane, pipe, bank group, and bank
- the memory controller 12A-12H may mask the address with the logical AND of the inverse of the drop masks, and may shift the remaining bits together. Alternatively, the memory controller 12A- 12H may simply shift the address bits together, naturally dropping the identified bits.
- the memory controller 12A-12H may perform the specified memory request (e.g., read or write) (block 84) and may respond to the source (e.g., with read data or a write completion if the write is not a posted write). If the full address is needed for the response or other reasons during processing, the full may be recovered from the compacted pipe address, the contents of the registers 60 for each level, and the known result for each level that corresponds to the memory controller 12A-12H that received the memory request (block 86).
- the specified memory request e.g., read or write
- the source e.g., with read data or a write completion if the write is not a posted write.
- the large number of memory controllers 12A-12H in the system, and the large number of memory devices 28 coupled to the memory controllers 12A-12H, may be a significant source of power consumption in the system. At certain points during operation, a relatively small amount of memory may be in active use and power could be conserved by disabling one or more slices of memory controllers/memory devices when accesses to those slices have been infrequent. Disabling a slice may include any mechanism that reduces power consumption in the slice, and that causes the slice to be unavailable until the slice is re enabled. In an embodiment, data may be retained by the memory devices 28 while the slice is disabled.
- the power supply to the memory devices 28 may remain active, but the memory devices 28 may be placed in a lower power mode (e.g., DRAM devices may be placed in self-refresh mode in which the devices internally generate refresh operations to retain data, but are not accessible from the SOC 10 until self-refresh mode is exited).
- the memory controller(s) 12A-12H in the slice may also be in a low power mode (e.g., clock gated).
- the memory controller(s) 12A-12H in the slice may be power gated and thus may be powered up and reconfigured when enabling the slice and after disable.
- software may monitor activity in the system to determine if a slice or slices may be disabled.
- the software may also monitor attempts to access data in the slice during a disabled time, and may reenable the slice as desired.
- the monitor software may detect pages of data in the slice that are accessed at greater than a specified rate prior to disabling the slice, and may copy those pages to another slice that will not be disabled (remapping the virtual to physical address translations for those pages). Thus, some pages in the slice may remain available, and may be accessed while the slice is disabled.
- Folding a slice.
- Reenabling a folded slice may be referred to as “unfolding” a slice, and the process of reenabling may include remapping the previously reallocated pages to spread the pages across the available slices (and, if the data in the reallocated pages was modified during the time that the slice was folded, copying the data to the reallocated physical page).
- Fig. 8 is a flowchart illustrating operation of one embodiment of monitoring system operation to determine whether or not to fold or unfold memory. While the blocks are shown in a particular order for ease of understanding, other orders may be used.
- One or more code sequences (“code”) comprising a plurality of instructions executed by one or more processors on the SOC(s) 10 may cause operations including operations as shown below.
- code comprising a plurality of instructions executed by one or more processors on the SOC(s) 10 may cause operations including operations as shown below.
- a memory monitor and fold/unfold code may include instructions which when executed by the processors on the SOC(s) 10, may cause the system including the SOCs to perform operations including the operations shown in Fig. 8.
- the memory monitor and fold/unfold code may monitor conditions in the system to identify opportunities to fold a slice or activity indicating that a folded slice is to be unfolded (block 90).
- Activity that may be monitored may include, for example, access rates to various pages included in a given slice. If the pages within a given slice are not accessed at a rate above a threshold rate (or a significant number of pages are not access at a rate above the threshold rate), then the given slice may be a candidate for folding since the slice is often idle.
- Power states in the processors within the SOCs may be another factor monitored by the memory monitor and fold/unfold code, since processors in lower power states may access memory less frequently. Particularly, processors that are in sleep states may not access pages of memory.
- Consumed bandwidth on the communication fabrics in the SOC(s) 10 may be monitored.
- Other system factors may be monitored as well. For example, memory could be folded due to the system detecting that a battery that supplies power is reaching a low state of charge.
- Another factor could be a change in power source, e.g., the system was connected to a continuous, effectively unlimited power source (e.g., a wall outlet) and was unplugged so it is now relying on battery power.
- Another factor could be system temperature overload, power supply overload, or the like were folding memory may reduce the thermal or electrical load. Any set of factors that indicate the activity level in the system may be monitored in various embodiments.
- the memory monitor and fold/unfold code may initiate a fold of at least one slice (block 94). If the activity indicates that demand for memory may be increasing (or may soon be increasing) (decision block 96, “yes” leg), the memory monitor and fold/unfold code may initiate an unfold (block 98).
- FIG. 9 is a flowchart illustrating one embodiment of a gradual fold of a slice. While the blocks are shown in a particular order for ease of understanding, other orders may be used.
- Code executed by one or more processors on the SOC(s) 10 may cause operations including operations as shown below.
- the folding process may begin by determine a slice to fold (block 100).
- the slice may be selected by determining that the slice is least frequently-accessed among the slices, or among the least frequently accessed.
- the slice may be selected randomly (not including slices that may be designated to remain active, in an embodiment).
- the slice may be selected based on a lack of wired and/or copy-on-write pages (discussed below) in the slice, or the slice may have fewer wired and/or copy-on write pages than other slices.
- a slice may be selected based on its relative independence from other folded slices (e.g., physical distance, lack of shared segments in the communication fabric with other folded slices, etc.). Any factor or factors may be used to determine the slice.
- the slice may be marked as folding.
- folding process may disable slices in powers of 2, matching the binary decision tree for hashing. At least one slice may be designated as unfoldable, and may remain active to ensure that data is accessible in the memory system.
- Initiating a fold may include inhibiting new memory allocations to physical pages in the folding slice.
- the memory monitor and fold/unfold code may communicate with the virtual memory page allocator code that allocates physical pages for virtual pages that have not yet been mapped into memory, to cause the virtual memory page allocator to cease allocating physical pages in the slice (block 102).
- the deactivation/disable may also potentially wait for wired pages in the slice to become unwired.
- a wired page may be a page that is not permitted to be paged out by the virtual memory system. For example, pages of kernel code and pages of related data structures may be wired.
- Copy-on-write pages may be used to permit independent code sequences (e.g., processes, or threads within a process or processes) to share pages as long as none of the independent code sequences writes the pages.
- independent code sequences e.g., processes, or threads within a process or processes
- the write may cause the virtual memory page allocator to allocate a new page and copy the data to the newly-allocated page.
- the virtual memory page allocator may be aware of which physical pages are mapped to which slices.
- linear mapping of addresses to memory may be used employed instead of spreading the blocks each page across the different memory controllers/memory.
- the mapping of addresses may be contiguous to a given slice, but the pages may be spread among the memory controllers/memory channels within the slice.
- the address space may be mapped as single contiguous blocks to each slice (e.g., one slice may be mapped to addresses 0 to slice_size-l, another slice may be mapped to addresses slice size to 2*slice_size-l, etc.
- Other mechanisms may use interleave between page boundaries, or map pages to a limited number of slices that may be folded/unfolded as a unit, etc.
- the pages in the selected (folding) slice may be tracked over a period of time to determine which pages are actively accessed (block 104). For example, access bits in the page table translations may be used to track which pages are being accessed (checking the access bits periodically and clearing them when checked so that new accesses may be detected). Pages found to be active and dirty (the data has been modified since being loaded into memory) may be moved to a slice that will remain active. That is, the pages may be remapped by the virtual memory page allocator to a different slice (block 106). Pages found to be active but clean (not modified after the initial load into memory) may be optionally remapped to a different slice (block 108).
- the memory devices 28 e.g., DRAMs
- the memory devices 28 may be actively placed into self-refresh (block 110).
- the memory devices 28 may descend naturally into self-refresh because accesses are not occurring over time, relying on the power management mechanisms built into the memory controller 12A-12H hardware to cause the transition to self-refresh.
- memory controllers 12A-12H in the slice may be reduced to a lower power state due to the lack of traffic but may continue to listen and respond to memory requests if they occur (block 112).
- a hard fold may be applied as a more aggressive mode on top the present folding. That is, the memory devices 28 may actually be powered off if there is no access to the folded slice over a prolonged period.
- Unfolding (re-enabling or activate) a slice may be either gradual or rapid. Gradual unfolding may occur when the amount of active memory or bandwidth needed by the running applications is increasing and is approaching a threshold at which the currently active slices may not serve the demand and thus would limit performance. Rapid unfolding may occur at a large memory allocation or a significant increase in bandwidth demand (e.g., if the display turned on, a new application is launched, a user engages with the system such as unlocking the system or otherwise interacting with the system by pressing a button or other input device, etc.).
- Fig. 10 is a flowchart illustrating one embodiment of unfolding a memory slice. While the blocks are shown in a particular order for ease of understanding, other orders may be used. Code executed by one or more processors on the SOC(s) 10 may cause operations including operations as shown below.
- a slice to unfold may be selected (block 120), or multiple slices such as a power of 2 number of slices as discussed above. Any mechanism for selecting a slice/slices may be used. For example, if a memory access to a folded slice occurs, the slice may be selected. A slice may be selected randomly. A slice may be selected based on its relative independence from other non-folded slices (e.g., physical distance, lack of shared segments in the communication fabric with non-folded slices, etc.). Any factor or combinations of factors may be used to select a slice for unfolding.
- the power state of the memory controller(s) 12A-12H in the unfolding slice may optionally be increased, and/or the DRAMs may be actively caused to exit self-refresh (or other low power mode, for other types of memory devices 28) (block 122).
- the memory controllers 12A-12H and the memory devices 28 may naturally transition to higher performance/power states in response to the arrival of memory requests when physical pages within the unfolding memory slice arrive.
- the memory monitor and fold/unfold code may inform the virtual memory page allocator that physical page allocations within the selected memory slice are available for allocation (block 124). Over time, the virtual memory page allocator may allocate pages within the selected memory slice to newly-requested pages (block 126). Alternatively or in addition to allocating newly-requested pages, the virtual memory page allocator may relocate pages that were previously allocated in the selected memory slice back to the selected memory slice. In other embodiment, the virtual memory page allocator may rapidly relocate pages to the selected slice.
- the slice may be defined as previously described with regard to Fig. 2 (e.g., a slice may be a coarser grain then a row). In other embodiments, for the purposes of memory folding, a slice may be any size down to a single memory channel (e.g., single memory device 28). Other embodiments may define a slice as one or more memory controllers 12A- 12H. Generally, a slice is a physical memory resource to which a plurality of pages are mapped. The mapping may be determined according to the programming of the MLC registers 22A-22H, 22J-22N, and 22P, in an embodiment. In another embodiment, the mapping may be fixed in hardware, or programmable in another fashion.
- the choice of slice size may be based, in part, on the data capacity and bandwidth used by low power use cases of interested in the system. For example, a slice size may be chosen so that a single slice may sustain a primary display of the system and have the memory capacity to hold the operating system and a small number of background applications. Use cases might include, for example, watching a movie, playing music, screensaver on but fetching email or downloading updates in background.
- Fig. 11 is a flowchart illustrating one embodiment of a method for folding a memory slice (e.g., for disabling or deactivating the slice). While the blocks are shown in a particular order for ease of understanding, other orders may be used. Code executed by one or more processors on the SOC(s) 10 may cause operations including operations as shown below.
- the method may include detecting whether or not a first memory slice of a plurality of memory slices in a memory system is to be disabled (decision block 130). If the detection indicates that the first memory slice is not to be disabled (decision block 130, “no” leg), the method may be complete. If the detection indicates that the first memory slice is to be disabled, the method may continue (decision block 130, “yes” leg). Based on detecting that the first memory slice is to be disabled, the method may include copying a subset of physical pages within the first memory slice to another memory slice of the plurality of memory slices. Data in the subset of physical pages may be accessed at greater than a threshold rate (block 132).
- the method may include, based on the detecting that the first memory slice is to be disabled, remapping virtual addresses corresponding to the subset of physical pages to the other memory slice (block 134).
- the method may also include, based on the detecting that the first memory slice is to be disable, disabling the first memory slice (block 136).
- disabling the first memory slice may comprise actively placing one or more dynamic access memories (DRAMs) in the first memory slice in self refresh mode.
- disabling the first memory slice may comprise permitting one or more dynamic access memories (DRAMs) in the first memory slice to transition to self-refresh mode due to a lack of access.
- DRAMs dynamic access memories
- the memory system comprises a plurality of memory controllers, and the physical memory resource comprises at least one of the plurality of memory controllers.
- the memory system comprises a plurality of memory channels and a given dynamic random access memory (DRAM) is coupled to one of the plurality of memory channels.
- the given memory slice comprises at least one of the plurality of memory channels.
- the given memory slice is one memory channel of the plurality of memory channels.
- determining that the first memory slice is to be disabled may comprise: detecting that an access rate to the first memory slice is lower than a first threshold; and identifying the subset of physical pages that is accessed more frequently than a second threshold.
- the method may further comprise disabling allocation of the plurality of physical pages corresponding to the first memory slice to virtual addresses in a memory allocator based on detecting that the access rate is lower than the first threshold.
- the method may further comprise performing the identifying subsequent to disabling allocation of the plurality of physical pages.
- the copying comprises copying data from one or more physical pages of the subset that include data that has been modified in the memory system to the other memory slice.
- the copying further comprises copying data from remaining physical pages of the subset subsequent to copying the data from the one or more physical pages.
- a system may comprise one or more memory controllers coupled to one or more memory devices forming a memory system, wherein the memory system includes a plurality of memory slices, and wherein a given memory slice of the plurality of memory slices is a physical memory resource to which a plurality of physical pages are mapped.
- the system may further comprise one or more processors; and a non- transitory computer readable storage medium storing a plurality of instructions which, when executed by the one or more processors, cause the system to perform operations comprising the method as highlighted above.
- the non-transitory computer readable stored medium is also an embodiment.
- Fig. 12 is a flowchart illustrating one embodiment of a method for hashing an address to route a memory request for the address to a targeted memory controller and, in some cases, to a targeted memory device and/or bank group and/or bank in the memory device. While the blocks are shown in a particular order for ease of understanding, other orders may be used.
- Various components of the SOC 10, such as source hardware agents, communication fabric components, and/or memory controller components may be configured to perform portions or all of the method.
- the method may include generating a memory request having a first address in a memory address space that is mapped to memory devices in a system having a plurality of memory controllers that are physically distributed over one or more integrated circuit die (block 140).
- a given memory address in the memory address space uniquely identifies a memory location in one of the memory devices coupled to one of the plurality of memory controllers, a given page within the memory address space is divided into a plurality of blocks, and the plurality of blocks of the given page are distributed over the plurality of memory controllers.
- the method may further comprise hashing independently- specified sets of address bits from the first address to direct the memory request to a first memory controller of the plurality of memory controllers, wherein the independently- specified sets of address bits locate the first memory controller at a plurality of levels of granularity (block 142).
- the method may still further comprise routing the memory request to the first memory controller based on the hashing (block 144).
- the one or more integrated circuit die are a plurality of integrated circuit die; the plurality of levels of granularity comprise a die level; and the die level specifies which of the plurality of integrated circuit die includes the first memory controller.
- the plurality of memory controllers on a given integrated circuit die are logically divided into a plurality of slices based on physical location on the given integrated circuit die; at least two memory controllers of the plurality of memory controllers are included in a given slice of the plurality of slices; the plurality of levels of granularity comprise a slice level; and the slice level specifies which of the plurality of slices includes the first memory controller.
- the at least two memory controllers in the given slice are logically divided into a plurality of rows based on physical location on the given integrated circuit die; the plurality of levels of granularity comprise a row level; and the row level specifies which of the plurality of rows includes the first memory controller.
- the plurality of rows include a plurality of sides based on physical location on the given integrated circuit die; the plurality of levels of granularity comprise a side level; and the side level specifies which side of a given row of the plurality of rows includes the first memory controller.
- a given hardware agent of a plurality of hardware agents that generate memory requests comprises one or more registers, and the method further comprises programming the one or more registers with data identifying which address bits are included in the hash at one or more of the plurality of levels of granularity.
- a first hardware agent of the plurality of hardware agents is programmable for a first number of the plurality of levels of granularity and a second hardware agent of the plurality of hardware agents is programmable for a second number of the plurality of levels of granularity, wherein the second number is different from the first number.
- a given memory controller of the plurality of memory controllers comprises one or more registers programmable with data identifying which address bits are included in the plurality of levels of granularity and one or more other levels of granularity internal to the given memory controller.
- Fig. 13 is a flowchart illustrating one embodiment of a method for dropping address bits to form a compacted pipe address in a memory controller. While the blocks are shown in a particular order for ease of understanding, other orders may be used.
- the memory controller may be configured to perform portions or all of the method.
- the method may include receiving an address comprising a plurality of address bits at a first memory controller of a plurality of memory controllers in a system.
- the address is routed to the first memory controller and a first memory device of a plurality of memory devices controlled by the first memory controller is selected based on a plurality of hashes of sets of the plurality of address bits (block 150).
- the method may further include dropping a plurality of the plurality of address bits (block 152). A given bit of the plurality of the plurality of address bits is included in one of the plurality of hashes and is excluded from remaining ones of the plurality of hashes.
- the method may include shifting remaining address bits of the plurality of address bits to form a compacted address used within the first memory controller (block 154).
- the method may further comprise recovering the plurality of the plurality of address bits based on the sets of the plurality of address bits used in the plurality of hashes and an identification of the first memory controller.
- the method may further comprise accessing a memory device controlled by the memory controller based on the compacted address.
- the method may further comprise programming a plurality of configuration registers to identify the sets of the plurality address bits that included in respective ones of the plurality of hashes.
- the programming may comprises programming the plurality of configuration registers with bit masks that identify the sets of the plurality of address bits.
- the method further comprises programming a plurality of configuration registers to identify the plurality of the plurality of address bits that are dropped.
- the programming comprises programming the plurality of configuration registers with one-hot bit masks.
- a block diagram of one embodiment of a system 700 is shown.
- the system 700 includes at least one instance of a system on a chip (SOC) 10 coupled to one or more peripherals 704 and an external memory 702.
- a power supply (PMU) 708 is provided which supplies the supply voltages to the SOC 10 as well as one or more supply voltages to the memory 702 and/or the peripherals 154.
- PMU power supply
- more than one instance of the SOC 10 may be included (and more than one memory 702 may be included as well), as previously discussed.
- the memory 702 may include the memory devices 28 as illustrated in Fig. 1, in an embodiment.
- the peripherals 704 may include any desired circuitry, depending on the type of system 700.
- the system 704 may be a mobile device (e.g., personal digital assistant (PDA), smart phone, etc.) and the peripherals 704 may include devices for various types of wireless communication, such as Wi-Fi, Bluetooth, cellular, global positioning system, etc.
- the peripherals 704 may also include additional storage, including RAM storage, solid state storage, or disk storage.
- the peripherals 704 may include user interface devices such as a display screen, including touch display screens or multitouch display screens, keyboard or other input devices, microphones, speakers, etc.
- the system 700 may be any type of computing system (e.g., desktop personal computer, laptop, workstation, net top etc.).
- the external memory 702 may include any type of memory.
- the external memory 702 may be SRAM, dynamic RAM (DRAM) such as synchronous DRAM (SDRAM), double data rate (DDR, DDR2, DDR3, etc.) SDRAM, RAMBUS DRAM, low power versions of the DDR DRAM (e.g., LPDDR, mDDR, etc.), etc.
- DRAM dynamic RAM
- the external memory 702 may include one or more memory modules to which the memory devices are mounted, such as single inline memory modules (SIMMs), dual inline memory modules (DIMMs), etc.
- the external memory 702 may include one or more memory devices that are mounted on the SOC 20 in a chip-on-chip or package-on-package implementation.
- system 700 is shown to have application in a wide range of areas.
- system 700 may be utilized as part of the chips, circuitry, components, etc., of a desktop computer 710, laptop computer 720, tablet computer 730, cellular or mobile phone 740, or television 750 (or set-top box coupled to a television).
- a smartwatch and health monitoring device 760 are illustrated.
- smartwatch may include a variety of general-purpose computing related functions.
- smartwatch may provide access to email, cellphone service, a user calendar, and so on.
- a health monitoring device may be a dedicated medical device or otherwise include dedicated health related functionality.
- a health monitoring device may monitor a user’s vital signs, track proximity of a user to other users for the purpose of epidemiological social distancing, contact tracing, provide communication to an emergency service in the event of a health crisis, and so on.
- the above-mentioned smartwatch may or may not include some or any health monitoring related functions.
- Other wearable devices are contemplated as well, such as devices worn around the neck, devices that are implantable in the human body, glasses designed to provide an augmented and/or virtual reality experience, and so on.
- System 700 may further be used as part of a cloud-based service(s) 770.
- the previously mentioned devices, and/or other devices may access computing resources in the cloud (i.e., remotely located hardware and/or software resources).
- system 700 may be utilized in one or more devices of a home other than those previously mentioned.
- appliances within the home may monitor and detect conditions that warrant attention.
- various devices within the home e.g., a refrigerator, a cooling system, etc.
- a thermostat may monitor the temperature in the home and may automate adjustments to a heating/cooling system based on a history of responses to various conditions by the homeowner.
- system 700 may be used in the control and/or entertainment systems of aircraft, trains, buses, cars for hire, private automobiles, waterborne vessels from private boats to cruise liners, scooters (for rent or owned), and so on.
- system 700 may be used to provide automated guidance (e.g., self-driving vehicles), general systems control, and otherwise.
- a computer accessible storage medium may include any storage media accessible by a computer during use to provide instructions and/or data to the computer.
- a computer accessible storage medium may include storage media such as magnetic or optical media, e.g., disk (fixed or removable), tape, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, or Blu-Ray.
- Storage media may further include volatile or non-volatile memory media such as RAM (e.g., synchronous dynamic RAM (SDRAM), Rambus DRAM (RDRAM), static RAM (SRAM), etc.), ROM, or Flash memory.
- SDRAM synchronous dynamic RAM
- RDRAM Rambus DRAM
- SRAM static RAM
- the storage media may be physically included within the computer to which the storage media provides instructions/data.
- the storage media may be connected to the computer.
- the storage media may be connected to the computer over a network or wireless link, such as network attached storage.
- the storage media may be connected through a peripheral interface such as the Universal Serial Bus (USB).
- USB Universal Serial Bus
- the computer accessible storage medium 800 may store data in a non- transitory manner, where non-transitory in this context may refer to not transmitting the instructions/data on a signal.
- non-transitory storage may be volatile (and may lose the stored instructions/data in response to a power down) or non-volatile.
- the computer accessible storage medium 800 in Fig. 15 may store a database 804 representative of the SOC 10.
- the database 804 may be a database which can be read by a program and used, directly or indirectly, to fabricate the hardware comprising the SOC 10.
- the database may be a behavioral -level description or register-transfer level (RTL) description of the hardware functionality in a high-level design language (HDL) such as Verilog or VHDL.
- HDL high-level design language
- the description may be read by a synthesis tool which may synthesize the description to produce a netlist comprising a list of gates from a synthesis library.
- the netlist comprises a set of gates which also represent the functionality of the hardware comprising the SOC 10.
- the netlist may then be placed and routed to produce a data set describing geometric shapes to be applied to masks.
- the masks may then be used in various semiconductor fabrication steps to produce a semiconductor circuit or circuits corresponding to the SOC 10.
- the database 804 on the computer accessible storage medium 800 may be the netlist (with or without the synthesis library) or the data set, as desired.
- the computer accessible storage medium 800 stores a representation of the SOC
- other embodiments may carry a representation of any portion of the SOC 10, as desired, including any subset of the components shown in Fig. 1.
- the database 804 may represent any portion of the above.
- the computer accessible storage medium 800 may further store one or more of a virtual memory page allocator 806 and memory monitor and fold/unfold code 808.
- the virtual memory page allocator 806 may comprise instructions which, when executed on a computer such as the various computer systems described herein including one or more SOCs 10 (and more particularly executed on a processor in one or more of the P clusters 14A-14B), cause the computer to perform operations including those described above for the virtual memory page allocator (e.g., with respect to Figs. 8-11).
- memory monitor and fold/unfold code 808 may comprise instructions which, when executed on a computer such as the various computer systems described herein including one or more SOCs 10 (and more particularly executed on a processor in one or more of the P clusters 14A-14B), cause the computer to perform operations including those described above for the memory monitor and fold/unfold code (e.g., with respect to Figs. 8-11).
- a particular implementation might include other circuitry outside the scope of the disclosure that, in conjunction with one of the disclosed embodiments, negates or diminishes one or more the disclosed advantages.
- suboptimal design execution of a particular implementation e.g., implementation techniques or tools
- realization of advantages may still depend upon other factors such as the environmental circumstances in which the implementation is deployed.
- inputs supplied to a particular implementation may prevent one or more problems addressed in this disclosure from arising on a particular occasion, with the result that the benefit of its solution may not be realized.
- any potential advantages described herein are not to be construed as claim limitations that must be met to demonstrate infringement.
- references to a singular form of an item i.e., a noun or noun phrase preceded by “a,” “an,” or “the” are, unless context clearly dictates otherwise, intended to mean “one or more.” Reference to “an item” in a claim thus does not, without accompanying context, preclude additional instances of the item.
- a “plurality” of items refers to a set of two or more of the items.
- a recitation of “w, x, y, or z, or any combination thereof’ or “at least one of ... w, x, y, and z” is intended to cover all possibilities involving a single element up to the total number of elements in the set.
- these phrasings cover any single element of the set (e.g., w but not x, y, or z), any two elements (e.g., w and x, but not y or z), any three elements (e.g., w, x, and y, but not z), and all four elements.
- w, x, y, and z thus refers to at least one element of the set [w, x, y, z], thereby covering all possible combinations in this list of elements. This phrase is not to be interpreted to require that there is at least one instance of w, at least one instance of x, at least one instance of y, and at least one instance of z.
- labels may precede nouns or noun phrases in this disclosure.
- different labels used for a feature e.g., “first circuit,” “second circuit,” “particular circuit,” “given circuit,” etc.
- labels “first,” “second,” and “third” when applied to a feature do not imply any type of ordering (e.g., spatial, temporal, logical, etc.), unless stated otherwise.
- a determination may be solely based on specified factors or based on the specified factors as well as other, unspecified factors.
- an entity described or recited as being “configured to” perform some task refers to something physical, such as a device, circuit, a system having a processor unit and a memory storing program instructions executable to implement the task, etc. This phrase is not used herein to refer to something intangible.
- circuits may be described in this disclosure. These circuits or “circuitry” constitute hardware that includes various types of circuit elements, such as combinatorial logic, clocked storage devices (e.g., flip-flops, registers, latches, etc.), finite state machines, memory (e.g., random-access memory, embedded dynamic random-access memory), programmable logic arrays, and so on. Circuitry may be custom designed, or taken from standard libraries. In various implementations, circuitry can, as appropriate, include digital components, analog components, or a combination of both.
- combinatorial logic e.g., clocked storage devices (e.g., flip-flops, registers, latches, etc.), finite state machines, memory (e.g., random-access memory, embedded dynamic random-access memory), programmable logic arrays, and so on. Circuitry may be custom designed, or taken from standard libraries. In various implementations, circuitry can, as appropriate, include digital components, analog components, or a combination of both.
- circuits may be commonly referred to as “units” (e.g., a decode unit, an arithmetic logic unit (ALU), functional unit, memory management unit (MMU), etc.). Such units also refer to circuits or circuitry.
- units e.g., a decode unit, an arithmetic logic unit (ALU), functional unit, memory management unit (MMU), etc.
- ALU arithmetic logic unit
- MMU memory management unit
- circuits/units/components and other elements illustrated in the drawings and described herein thus include hardware elements such as those described in the preceding paragraph.
- the internal arrangement of hardware elements within a particular circuit may be specified by describing the function of that circuit.
- a particular “decode unit” may be described as performing the function of “processing an opcode of an instruction and routing that instruction to one or more of a plurality of functional units,” which means that the decode unit is “configured to” perform this function.
- This specification of function is sufficient, to those skilled in the computer arts, to connote a set of possible structures for the circuit.
- circuits, units, and other elements defined by the functions or operations that they are configured to implement The arrangement and such circuits/units/components with respect to each other and the manner in which they interact form a microarchitectural definition of the hardware that is ultimately manufactured in an integrated circuit or programmed into an FPGA to form a physical implementation of the microarchitectural definition.
- the microarchitectural definition is recognized by those of skill in the art as structure from which many physical implementations may be derived, all of which fall into the broader structure described by the microarchitectural definition.
- HDL hardware description language
- Such an HDL description may take the form of behavioral code (which is typically not synthesizable), register transfer language (RTL) code (which, in contrast to behavioral code, is typically synthesizable), or structural code (e.g., a netlist specifying logic gates and their connectivity).
- the HDL description may subsequently be synthesized against a library of cells designed for a given integrated circuit fabrication technology, and may be modified for timing, power, and other reasons to result in a final design database that is transmitted to a foundry to generate masks and ultimately produce the integrated circuit.
- Some hardware circuits or portions thereof may also be custom-designed in a schematic editor and captured into the integrated circuit design along with synthesized circuitry.
- the integrated circuits may include transistors and other circuit elements (e.g., passive elements such as capacitors, resistors, inductors, etc.) and interconnect between the transistors and circuit elements. Some embodiments may implement multiple integrated circuits coupled together to implement the hardware circuits, and/or discrete elements may be used in some embodiments. Alternatively, the HDL design may be synthesized to a programmable logic array such as a field programmable gate array (FPGA) and may be implemented in the FPGA.
- FPGA field programmable gate array
- a method comprising: detecting that at least one first memory slice of a plurality of memory slices in a memory system is to be disabled, wherein a given memory slice of the plurality of memory slices is a physical memory resource to which a plurality of physical pages are mapped; and based on detecting that the first memory slice is to be disabled: copying a subset of physical pages within the first memory slice to another memory slice of the plurality of memory slices, wherein data in the subset of physical pages are being accessed at greater than a threshold rate; remapping virtual addresses corresponding to the subset of physical pages to the other memory slice; and disabling the first memory slice.
- the at least one first memory slice is a plurality of the plurality of memory slices, wherein a number of the plurality of the plurality of memory slices is a power of 2.
- disabling the first memory slice comprises actively placing one or more dynamic access memories (DRAMs) in the first memory slice in self refresh mode.
- DRAMs dynamic access memories
- disabling the first memory slice comprises permitting one or more dynamic access memories (DRAMs) in the first memory slice to transition to self-refresh mode due to a lack of access.
- DRAMs dynamic access memories
- the memory system comprises a plurality of memory channels, wherein a given dynamic random access memory (DRAM) is coupled to one of the plurality of memory channels, and wherein the given memory slice comprises at least one of the plurality of memory channels.
- DRAM dynamic random access memory
- determining that the first memory slice is to be disabled comprises: detecting that an access rate to the first memory slice is lower than a first threshold; and identifying the subset of physical pages that is accessed more frequently than a second threshold.
- copying comprises: copying data from one or more physical pages of the subset that include data that has been modified in the memory system to the other memory slice.
- copying further comprises: copying data from remaining physical pages of the subset subsequent to copying the data from the one or more physical pages.
- determining that the first memory slice is to be disabled is based on detecting one or more factors in the system that indicate a reduction in power consumption.
- a system comprising: one or more memory controllers coupled to one or more memory devices forming a memory system, wherein the memory system includes a plurality of memory slices, and wherein a given memory slice of the plurality of memory slices is a physical memory resource to which a plurality of physical pages are mapped; one or more processors; and a non-transitory computer readable storage medium storing a plurality of instructions which, when executed by the one or more processors, cause the system to perform operations comprising: detecting that a first memory slice of a plurality of memory slices in the memory system is to be disabled; and based on detecting that the first memory slice is to be disabled: copying a subset of physical pages within the first memory slice to another memory slice of the plurality of memory slices, wherein data in the subset of physical pages are being accessed at greater than a threshold rate; remapping virtual addresses corresponding to the subset of physical pages to the other memory slice; and disabling the first memory slice.
- disabling the first memory slice comprises actively placing one or more dynamic access memories (DRAMs) in the first memory slice in self refresh mode.
- DRAMs dynamic access memories
- disabling the first memory slice comprises permitting one or more dynamic access memories (DRAMs) in the first memory slice to transition to self-refresh mode due to a lack of access.
- DRAMs dynamic access memories
- the memory system comprises a plurality of memory channels, wherein a given dynamic random access memory (DRAM) is coupled to one of the plurality of memory channels, and wherein the given memory slice comprises at least one of the plurality of memory channels.
- DRAM dynamic random access memory
- determining that the first memory slice is to be disabled comprises: detecting that an access rate to the first memory slice is lower than a first threshold; and identifying the subset of physical pages that is accessed more frequently than a second threshold.
- a non-transitory computer readable storage medium storing a plurality of instructions which, when executed by one or more processors in a system including a memory system, cause the system to perform operations comprising: detecting that a first memory slice of a plurality of memory slices in the memory system is to be disabled, wherein a given memory slice of the plurality of memory slices is a physical memory resource to which a plurality of physical pages are mapped; and based on detecting that the first memory slice is to be disabled: copying a subset of physical pages within the first memory slice to another memory slice of the plurality of memory slices, wherein data in the subset of physical pages are being accessed at greater than a threshold rate; remapping virtual addresses corresponding to the subset of physical pages to the other memory slice; and disabling the first memory slice.
- a system comprising: a plurality of memory controllers configured to control access to memory devices; a plurality of hardware agents configured to access data in the memory devices using memory addresses; and a communication fabric coupled to the plurality of memory controllers and the plurality of hardware agents, wherein: the communication fabric is configured to route a memory request having a first memory address to a first memory controller of the plurality of memory controllers based on the first memory address, a plurality of subsets of address bits of the first memory address are hashed to direct the memory request to the first memory controller at a plurality of levels of granularity, at least one address bit in a given one of the plurality of subsets is not included in remaining ones of the plurality of subsets; the first memory controller is configured to drop a plurality of address bits of the first memory address to form a second address used within the first memory controller; and respective bits of the plurality of address bits are the at least one address bit in the given one of the plurality of subsets.
- a method comprising: receiving an address comprising a plurality of address bits at a first memory controller of a plurality of memory controllers in a system, wherein the address is routed to the first memory controller and a first memory device of a plurality of memory devices controlled by the first memory controller is selected based on a plurality of hashes of sets of the plurality of address bits; dropping a plurality of the plurality of address bits, wherein a given bit of the plurality of the plurality of address bits is included in one of the plurality of hashes and is excluded from remaining ones of the plurality of hashes; and shifting remaining address bits of the plurality of address bits to form a compacted address used within the first memory controller.
- 36 The method as recited in example 35 further comprising: recovering the plurality of the plurality of address bits based on the sets of the plurality of address bits used in the plurality of hashes and an identification of the first memory controller.
- a memory controller comprising: a plurality of configuration registers programmable to identify respective pluralities of address bits that are hashed to select the memory controller as a destination for a memory request that includes an address that comprises the address bits; and a control circuit coupled to the plurality of configuration registers, wherein the control circuit is configured to generate a compacted address to access one or memory devices controlled by the memory controller, wherein the control circuit is configured to drop a plurality of the address bits and to shift remaining bits of the address to generate the compacted address.
- the memory controller as recited in example 42 further comprising a second plurality of configuration registers coupled to the control circuit, wherein the second plurality of configuration registers are programmable to identify the plurality of the address bits that are dropped.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System (AREA)
Abstract
Description
Claims
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| DE112022002417.8T DE112022002417T5 (en) | 2021-04-26 | 2022-04-25 | ADDRESS HASHING IN A MULTIPLE MEMORY CONTROL SYSTEM |
| KR1020237036724A KR20230159602A (en) | 2021-04-26 | 2022-04-25 | Address hashing in multi-memory controller systems |
| CN202280030701.2A CN117255989A (en) | 2021-04-26 | 2022-04-25 | Address hashing in a multiple memory controller system |
Applications Claiming Priority (8)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US202163179666P | 2021-04-26 | 2021-04-26 | |
| US63/179,666 | 2021-04-26 | ||
| US17/353,371 | 2021-06-21 | ||
| US17/353,349 | 2021-06-21 | ||
| US17/353,371 US11714571B2 (en) | 2021-04-26 | 2021-06-21 | Address bit dropping to create compacted pipe address for a memory controller |
| US17/353,349 US11693585B2 (en) | 2021-04-26 | 2021-06-21 | Address hashing in a multiple memory controller system |
| US17/519,284 US11567861B2 (en) | 2021-04-26 | 2021-11-04 | Hashing with soft memory folding |
| US17/519,284 | 2021-11-04 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| WO2022232008A1 true WO2022232008A1 (en) | 2022-11-03 |
Family
ID=81603493
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PCT/US2022/026111 Ceased WO2022232008A1 (en) | 2021-04-26 | 2022-04-25 | Address hashing in a multiple memory controller system |
Country Status (3)
| Country | Link |
|---|---|
| KR (1) | KR20230159602A (en) |
| DE (1) | DE112022002417T5 (en) |
| WO (1) | WO2022232008A1 (en) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN116700790A (en) * | 2023-05-09 | 2023-09-05 | 上海壁仞智能科技有限公司 | Data processing apparatus, register management method, and machine-readable storage medium |
| EP4432103A1 (en) * | 2023-03-17 | 2024-09-18 | INTEL Corporation | Hashing to provide memory addressing for arbitrary enablement or disablement of memory resources |
| WO2025165457A1 (en) * | 2024-01-29 | 2025-08-07 | Qualcomm Incorporated | Hardy are and software hybrid configuration of dram channel interleaving management |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20100037024A1 (en) * | 2008-08-05 | 2010-02-11 | Convey Computer | Memory interleave for heterogeneous computing |
| US20100042759A1 (en) * | 2007-06-25 | 2010-02-18 | Sonics, Inc. | Various methods and apparatus for address tiling and channel interleaving throughout the integrated system |
| US8327187B1 (en) * | 2009-09-21 | 2012-12-04 | Tilera Corporation | Low-overhead operating systems |
-
2022
- 2022-04-25 WO PCT/US2022/026111 patent/WO2022232008A1/en not_active Ceased
- 2022-04-25 DE DE112022002417.8T patent/DE112022002417T5/en active Pending
- 2022-04-25 KR KR1020237036724A patent/KR20230159602A/en active Pending
Patent Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20100042759A1 (en) * | 2007-06-25 | 2010-02-18 | Sonics, Inc. | Various methods and apparatus for address tiling and channel interleaving throughout the integrated system |
| US20100037024A1 (en) * | 2008-08-05 | 2010-02-11 | Convey Computer | Memory interleave for heterogeneous computing |
| US8327187B1 (en) * | 2009-09-21 | 2012-12-04 | Tilera Corporation | Low-overhead operating systems |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP4432103A1 (en) * | 2023-03-17 | 2024-09-18 | INTEL Corporation | Hashing to provide memory addressing for arbitrary enablement or disablement of memory resources |
| CN116700790A (en) * | 2023-05-09 | 2023-09-05 | 上海壁仞智能科技有限公司 | Data processing apparatus, register management method, and machine-readable storage medium |
| WO2025165457A1 (en) * | 2024-01-29 | 2025-08-07 | Qualcomm Incorporated | Hardy are and software hybrid configuration of dram channel interleaving management |
| US12596641B2 (en) | 2024-01-29 | 2026-04-07 | Qualcomm Incorporated | Hardware and software hybrid configuration of DRAM channel interleaving management |
Also Published As
| Publication number | Publication date |
|---|---|
| KR20230159602A (en) | 2023-11-21 |
| DE112022002417T5 (en) | 2024-03-14 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US12236130B2 (en) | Address hashing in a multiple memory controller system | |
| US20260044451A1 (en) | Scalable System on a Chip | |
| US10403333B2 (en) | Memory controller with flexible address decoding | |
| WO2022232008A1 (en) | Address hashing in a multiple memory controller system | |
| US20220066947A1 (en) | Translation Lookaside Buffer Striping for Efficient Invalidation Operations | |
| US12079140B2 (en) | Reducing translation lookaside buffer searches for splintered pages | |
| US11567861B2 (en) | Hashing with soft memory folding | |
| US20240168887A1 (en) | Criticality-Informed Caching Policies with Multiple Criticality Levels | |
| US12423235B2 (en) | Coherence directory way tracking in coherent agents | |
| US20240126457A1 (en) | Dynamic Allocation of Cache Memory as RAM | |
| US20240176744A1 (en) | Prediction Confirmation for Cache Subsystem | |
| US11972140B2 (en) | Hashing with soft memory folding | |
| US20260046261A1 (en) | Segment to Segment Network Interface | |
| US11704245B2 (en) | Dynamic allocation of cache memory as RAM | |
| US11513848B2 (en) | Critical agent identification to modify bandwidth allocation in a virtual channel | |
| US11893241B1 (en) | Variable hit latency cache | |
| US11755489B2 (en) | Configurable interface circuit | |
| US11609878B2 (en) | Programmed input/output message control circuit | |
| CN117255989A (en) | Address hashing in a multiple memory controller system | |
| US11675710B2 (en) | Limiting translation lookaside buffer searches using active page size | |
| US12326819B1 (en) | Renaming context identifiers in a processor | |
| WO2023033955A1 (en) | Dynamic allocation of cache memory as ram |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 22722955 Country of ref document: EP Kind code of ref document: A1 |
|
| WWE | Wipo information: entry into national phase |
Ref document number: 202317070116 Country of ref document: IN |
|
| ENP | Entry into the national phase |
Ref document number: 20237036724 Country of ref document: KR Kind code of ref document: A |
|
| WWE | Wipo information: entry into national phase |
Ref document number: 202280030701.2 Country of ref document: CN Ref document number: 1020237036724 Country of ref document: KR |
|
| WWE | Wipo information: entry into national phase |
Ref document number: 112022002417 Country of ref document: DE |
|
| 122 | Ep: pct application non-entry in european phase |
Ref document number: 22722955 Country of ref document: EP Kind code of ref document: A1 |
|
| WWD | Wipo information: divisional of initial pct application |
Ref document number: 202618012194 Country of ref document: IN |
|
| WWP | Wipo information: published in national office |
Ref document number: 202618012194 Country of ref document: IN |