CN116249973A - 自适应存储器事务调度 - Google Patents
自适应存储器事务调度 Download PDFInfo
- Publication number
- CN116249973A CN116249973A CN202180064330.5A CN202180064330A CN116249973A CN 116249973 A CN116249973 A CN 116249973A CN 202180064330 A CN202180064330 A CN 202180064330A CN 116249973 A CN116249973 A CN 116249973A
- Authority
- CN
- China
- Prior art keywords
- transactions
- subsets
- dram
- transaction
- subset
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 195
- 230000003044 adaptive effect Effects 0.000 title description 13
- 238000000034 method Methods 0.000 claims description 110
- 238000004590 computer program Methods 0.000 claims description 14
- 230000008901 benefit Effects 0.000 claims description 8
- 230000009977 dual effect Effects 0.000 description 12
- 239000000872 buffer Substances 0.000 description 8
- 230000004044 response Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000001934 delay Effects 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 238000001994 activation Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003116 impacting effect Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1652—Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
- G06F13/1657—Access to multiple memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
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)
- Dram (AREA)
Abstract
可以通过形成对应于指向DRAM的存储器事务请求的一组存储器事务的子集来调度计算设备中的存储器事务。每个子集可以包括由彼此相同的DRAM等级和方向(读取或写入)的组合标识的事务。可以基于效率来确定被选择包括在每个子集中的事务。可以基于应用于每个子集的度量来选择子集中的一个子集,并且可以将所选择的子集中的事务发送到DRAM。
Description
背景技术
便携式计算设备(“PCD”)正成为人们在个人和专业水平的必需品。这些设备可能包括蜂窝电话、平板计算机、掌上计算机、便携式数字助理(“PDA”)、便携式游戏机和其他便携式电子设备。PCD通常包含集成电路或片上系统(“SoC”),这些集成电路或系统包括设计用于一起工作以向用户提供功能的众多元件。例如,SoC可以包含任何数目的处理引擎,诸如具有多个核的中央处理单元(“CPU”)、图形处理单元(“GPU”)、神经处理单元(“NPU”)、数字信号处理器(“DSP”)、无线收发器单元(也称为调制解调器)等。SoC可以耦合到PCD内的其他元件,诸如系统存储器。在包括但不限于PCD的计算设备中,可以在各种处理引擎和系统存储器之间执行存储器事务。PCD和其他计算设备中的系统存储器通常包括动态随机存取存储器(“DRAM”)。
处理引擎可以通过分别请求写入事务或读取事务来发起向系统存储器写入数据或从系统存储器读取数据。存储器控制器可以将来自处理引擎的这样的事务请求转换为包括一组DRAM命令和相关联的数据和目标存储器地址的存储器事务。为了满足DRAM时序约束,存储器控制器必须将其提供给DRAM芯片的某些命令间隔指定的时间量或间隔。这种时序间隔的累积效应有助于完成存储器事务所需的延迟或时间。期望最小化存储器事务延迟并提高存储器访问效率,因为两者都有可能对计算设备性能产生不利影响,并最终对用户体验产生不利影响。
存储器控制器可以处理由多个处理引擎发出的多个存储器事务请求。在存储器控制器先前接收的事务请求已经完成之前,存储器控制器可以从一个或多个处理引擎接收额外的存储器事务请求。“调度”是一个术语,通常用于指用于帮助平衡满足DRAM时序约束的竞争目标,同时最小化延迟并最大化DRAM效率的技术。概括地说,调度涉及选择存储器控制器向DRAM发送事务的顺序或优先级。常规的存储器事务调度算法往往是不灵活的(静态定义的),并且不能动态地适应运行时事务请求的特性。
发明内容
公开了用于调度计算设备中的存储器事务的系统、方法、计算机程序产品和其他实施例。在示例性实施例中,计算设备可以包括耦合到DRAM的存储器控制器。
用于在计算设备中调度DRAM事务的示例性方法可以包括确定与从一个或多个处理器接收的多个事务请求相对应的多个DRAM事务。示例性方法可以进一步包括形成DRAM事务的子集。示例性方法还可以进一步包括选择子集中的一个。示例性方法还可以进一步包括将所选择的子集中的所有事务发送到DRAM。在确定多个DRAM事务时,每个DRAM事务可以通过事务是读取还是写入以及事务指向哪个DRAM等级的组合来标识。每个子集可以包括由彼此相同的DRAM等级和方向的组合标识的一个或多个DRAM事务。
用于在计算设备中调度DRAM事务的示例性系统可以包括事务队列和调度逻辑。调度逻辑可以被配置为确定与从一个或多个处理器接收到的多个事务请求相对应的多个DRAM事务。调度逻辑可以进一步被配置为形成DRAM事务的子集。调度逻辑还可以进一步被配置为选择子集中的一个。调度逻辑还可以进一步被配置为将所选择的子集中的所有事务发送到DRAM。在确定DRAM事务时,调度逻辑可以通过事务是读取还是写入或写入以及事务指向哪个DRAM等级的组合来标识每个事务。每个子集可以包括由彼此相同的DRAM等级和方向的组合标识的一个或多个DRAM事务。
用于在计算设备中调度DRAM事务的另一示例性系统可以包括用于确定与从一个或多个处理器接收到的多个事务请求相对应的多个DRAM事务的部件。示例性系统可以进一步包括用于形成DRAM事务的子集的部件。示例性系统还可以进一步包括用于选择子集中的一个的部件。示例性系统还可以进一步包括用于将所选择的子集中的所有事务发送到DRAM的部件。用于确定示例性系统中的多个DRAM事务的装置可以通过事务是读取还是写入以及事务指向哪个DRAM等级的组合来标识每个存储器事务。每个子集可以包括由彼此相同的DRAM等级和方向的组合标识的一个或多个DRAM事务。
用于在计算设备中调度DRAM事务的示例性计算机程序产品可以包括其上以计算机可执行形式存储有指令的非暂态计算机可读介质,当该指令由存储器控制器的处理系统执行时,配置该存储器控制器以:确定与从一个或多个处理器接收到的多个事务相对应的多个DRAM事务;形成DRAM事务的子集;选择子集中的一个子集;并将所选择的子集中的所有事务发送到DRAM。在示例性计算机程序产品中,DRAM事务可以通过该事务是读取还是写入以及该事务指向哪个DRAM等级的组合来标识。每个子集可以包括由彼此相同的DRAM等级和方向的组合标识的一个或多个DRAM事务。
附图说明
在附图中,除非另有指示,否则在各个视图中,相同的附图标记指代相同的零件。对于带有字母字符名称(诸如“102A”或“102B”)的附图标记,字母字符名称可区分同一图中存在的两个类似零件或元件。当意图是附图标记涵盖所有图中具有相同附图标记的所有零件时,可以省略附图标记的字母字符名称。
图1是图示根据示例性实施例的具有耦合到DRAM的存储器控制器的计算设备的框图。
图2是图示根据示例性实施例的用于在计算设备中调度DRAM事务的系统的框图。
图3是图示根据示例性实施例的用于在计算设备中调度DRAM事务的方法的流程图。
图4是图示根据示例性实施例的用于形成事务的子集的方法的流程图。
图5A是图示根据示例性实施例的用于从事务子集中丢弃低效事务的方法的流程图的一部分。
图5B是图示根据示例性实施例的从图5A继续的用于从事务子集中丢弃低效事务的方法的流程图的另一部分。
图6是图示根据示例性实施例的用于在子集已经开始被发送到DRAM之后添加进一步事务的方法的流程图。
图7是图示根据示例性实施例的图6的方法的时序方面的时间线。
图8是图示根据示例性实施例的通过从多个存储体中选择事务来形成事务子集的示例的概念图。
图9是图示根据示例性实施例的用于选择事务的子集中的一个的方法的流程图。
图10是图示根据示例性实施例的从引导者子集发送事务和从跟随者子集发送事务之间的重叠时段的时间线。
图11是图示根据示例性实施例的用于向DRAM发送所选择的子集的方法的一个方面的流程图。
图12是图示根据示例性实施例的用于向DRAM发送所选择的子集的方法的另一方面的流程图。
图13是图示根据示例性实施例的图12的方法的时序方面的时间线。
图14是根据示例性实施例的计算设备的框图。
具体实施方式
本文使用的“示例性”一词意指“用作示例、实例或说明”。“说明性”一词可与“示例性”同义。本文描述为“示例性”的任何方面不必被解释为比其他方面更优选或更具优势。
如图1中的概念形式所示,在可以是任何类型的计算设备100中,存储器控制器102除了其他功能之外,还可以将来自一个或多个处理引擎(未示出)的传入存储器事务请求104转换成对应的存储器事务106。存储器事务请求104可以是例如读取请求,即从DRAM 108读取数据的请求,或者写入请求,即向DRAM 108写入数据的请求。事务106是一组数据元素,其可以包括指向DRAM 108的一个或多个命令、要写入DRAM 108中的数据字以及DRAM 108内的目标地址。
存储器控制器102的另一功能是调度事务106。事务调度是存储器控制器102确定并以其他方式控制事务106(即,命令、数据和地址集)被发送到DRAM 108的时序的方法或过程。时序的一些方面可以相对于其他事务106,诸如例如,事务106被发送到DRAM 108的顺序或优先级。时序的其他方面可以与DRAM 108的能力所施加的时序约束有关。存储器控制器102可以使用事务队列110(也称为命令队列)对事务106进行排序,并控制事务106的组成DRAM命令112从事务队列110发送到DRAM 108的时间。
事务调度可以基于本公开中称为“自适应事务调度”的技术。在图1所示的示例性实施例中,DRAM 108可以由两个等级组成。在这种双等级DRAM实施例中,基于象限结构114,自适应子集调度可以被称为“自适应象限调度”。在图1中,象限结构114以概念形式示出;象限结构114可以以任何方式体现在存储器控制器102的控制逻辑(图1中未单独示出)中。象限结构114可以例如涉及一个或多个数据结构或有限状态机。在图1所示的示例中,象限结构114在概念上被组织为网格或表格,其中两行对应于事务的方向(即,读取或写入),两列对应于DRAM 108的两个等级。在自适应象限调度中,可以根据象限结构114将事务分组或标识为属于四个组或象限中的一个或与之关联:“R0”是指从DRAM 108的第一等级(等级“0”)读取(“R”);“R1”是指从DRAM 108的第二等级(等级“1”)读取;“W0”,是指对DRAM 108的第一等级的写入(“W”);以及“W1”,是指对DRAM 108的第二等级的写入。
更一般地,在自适应子集调度中,事务可以通过方向(即,读取或写入)和DRAM等级的组合来分组或标识。本文中描述的自适应子集调度的系统、方法和其他实施例可以应用于具有任意数目(N)的等级的DRAM。尽管为了清楚起见未示出,但指向到具有N个等级的DRAM的自适应调度存储器事务可以基于概念上组织为具有两行和N列(或者可替代地,两列和N行)的网格或表的结构,从而定义2N个唯一子集。
以下面关于示例性实施例描述的方式,自适应子集调度基于一个或多个子集中的事务集动态地(即,在运行时)调整上述存储器调度。例如,根据图1中由象限结构114中的每对象限之间的双端箭头指示的自适应象限调度的一个方面,可以动态地适配选择用于将其事务106发送到DRAM 108的象限的顺序。根据自适应象限调度的另一方面,可以选择每个子集中用于发送到DRAM 108的事务106。根据自适应子集调度的又一方面,可以动态地适配所选择的子集中被发送到DRAM 108的事务106的顺序。下面描述自适应子集调度的其他方面。
如图2所示,在说明性或示例性实施例中,存储器控制器202可以从一个或多个处理引擎(诸如中央处理单元(“CPU”)204)接收存储器事务请求。存储器事务请求可以包括指向例如双等级DRAM 206的读取请求和写入请求。DRAM 206可以是例如双倍数据速率同步DRAM(“DDR-SDRAM”)。存储器控制器202可以以常规方式将存储器事务请求转换成DRAM事务(有时缩写为“txns”)。由于本领域普通技术人员很好地理解存储器控制器202的这种常规功能和相关功能,因此本文不描述存储器控制器202的这些方面。
DRAM 206可以具有常规结构并以常规方式操作。虽然本领域普通技术人员很好地理解这种结构和操作,但提供以下简要描述作为背景。术语“双等级”意味着DRAM 206可以包括两个等级208,其可以被称为Rank_0和Rank_1。由于两个等级208彼此相同,以下描述适用于每个等级208。等级208包括两个或更多个存储体210。例如,每个等级208可以由八个存储体210组成。每个存储体210被组织为由行和列索引的存储位置或单元的二维阵列,其中的示例性行和示例性列在图2中以交叉阴影线被突出显示,以便于说明。尽管为了清楚起见,本文描述了双等级DRAM 206,但是应当理解,在其他实施例中,这种DRAM中的等级的数目(N)可以是大于或等于2的任何数目。
每个事务可以包括一个或多个命令212、目标地址214和数据216。命令212可以包括读取命令和写入命令等。目标地址214可以包括行地址、列地址和存储体地址。虽然为了清楚起见未示出,但是响应于由存储器控制器提供的等级地址(例如,包括在读取或写入命令中的芯片选择位),等级地址解码逻辑可以选择等级208中的一个。尽管为了清楚起见同样未示出,但是响应于由存储器控制器提供的存储体地址,存储体解码逻辑可以选择所选择的等级208中的一个存储体210。响应于由存储器控制器提供的行地址,行地址解码器218可以选择所选择的等级208中的所选择的存储体210中的行中的一个。类似地,响应于由存储器控制器提供的列地址,列地址解码器220可以选择所选择的等级208中的所选择的存储体210中的列中的一个。数据216可以包括DRAM 206发送到存储器控制器202的(传出或“读取”)数据和DRAM 206从存储器控制器202接收的(传入或“写入”)数据。为了清楚起见,命令212、地址214等在图2中以概念级别单独示出。在物理级别上,如本领域普通技术人员所理解的,存储器控制器202和DRAM 206之间的存储器总线(未示出)可以在不同时间复用或重新利用某些相同的物理信号线以用于不同类型的信号。
每个等级208可以具有缓冲读取数据的读取锁存器222和缓冲写数据的写锁存器224。每个等级208还可以具有输入/输出(“I/O”)逻辑226,该逻辑226被配置为从所选择的存储器位置引导者读取数据和将写入数据引导者到所选择的存储器位置。
每个存储体210可以具有行缓冲器228。行缓冲器228存储所选择的行的内容(有时称为“页”)。必须选择或“打开”行,才能写入或读取该行。DRAM 206响应于激活(“ACT”)命令打开行,即将该行的内容存储在行缓冲器228中。行地址可以与ACT命令一起提供。一旦激活或打开行,DRAM 206可以读取或写入行缓冲器228中的任意数目的列,以响应读取或写入命令,也称为列地址选择(“CAS”)命令。在读取或写入命令之后,数据在存储器控制器202和DRAM 206之间以称为“突发”的单位串行传输,其可以是,例如,每个数据信号线8位。在写入行缓冲器228或从行缓冲器228读取之后,必须恢复或“关闭”该行。DRAM 206响应于预充电(“pre”)命令关闭行。在转换读取请求或写入请求时,存储器控制器202确定满足该请求所需的一个或多个命令的序列和时序。存储器控制器202还对两个等级208的所有存储体210中的所有行执行周期性刷新操作以保持数据完整性,并且存在与这种刷新操作相关联的命令。
存储器控制器202可以包括事务调度器230,其控制本文描述的调度方法。事务调度器230可以包括调度逻辑232和事务队列234。如下面关于示例性方法所描述的,存储器控制器202的调度逻辑232可以被配置为使用上述象限结构114(图1)将存储器事务形成为象限子集236。更一般地,关于具有N个等级(其中N是大于或等于1的整数)的DRAM,调度逻辑232可以被配置为将存储器事务形成为2N个子集。第一到第N子集中的每一个子集可以包括被标识为指向第一到第N等级中的对应等级的读取的事务,并且第(N+1)到第2N子集中的每个子集可以包括被标识为指向第一到第N等级中的对应等级的写入的事务。尽管为了清楚起见未示出,但调度逻辑232可以包括处理系统(例如,一个或多个处理器和相关联的存储器的组合)、有限状态机或可配置为执行或以其他方式控制本文所述方法的其他逻辑。在调度逻辑232包括处理系统的实施例中,可以通过执行固件指令来配置处理系统。
存储器控制器202可以根据事务可以完成的效率(例如,延迟或带宽)对每个事务进行分类或归类。存储器控制器202可以基于DRAM存储体的当前状态将每个事务标识为“命中”、“未命中”或“冲突”。命中是在存储器控制器202转换事务请求时对存储器控制器202确定为打开的行(在存储体210中)的读取或写入事务。未命中是在存储器控制器202转换事务请求时对存储器控制器202确定关闭或预充电的行(在存储体210中)的读取或写入事务。如果存储器控制器202将读取或写入事务标识为未命中,则存储器控制器202必须在读取或写入该行之前首先打开该行。冲突是在存储器控制器202转换事务请求时对存储器控制器202确定关闭的行(在存储体210中)的读取或写入事务,而存储器控制器202则确定此时打开同一等级和存储体的另一行(存储器事务不指向该行)。如果存储器控制器202将读取或写入事务标识为冲突,则存储器控制器202必须首先对该存储体中的打开行预充电(即,关闭),然后在从该行读取或写入该行之前打开事务所指向的该行。为了简化以下描述,被标识为命中的事务可以缩写为“命中”,而被标识为未命中的事务可缩写为“未命中”,并且被标识为冲突的事务可缩写为“冲突”。
完成事务会导致各种延迟或时间成本,这可能取决于事务是否命中、未命中或冲突、事务是否涉及以与前一事务相反的方向传输数据、事务是否涉及以与前一事务不同的等级传输数据以及其他因素而变化。这些延迟通常由DRAM 206的制造商指定。通常指定的延迟示例包括:tRCD(即行到列延迟),它是向DRAM 206发送ACT命令以打开行和向DRAM 208发送CAS命令以选择打开行上的列之间必须经过的最小时钟周期数;tRP(即,预充电后读取),它是在向DRAM 206发送PRE命令以关闭一行和向DRAM 204发送ACT命令以打开同一存储体上的另一行之间必须经过的最小时钟周期数;tRRD(即,读取到读取延迟),其是在同一等级中不同存储体中的两行激活之间必须经过的最小时钟周期数;tRD2PRE,其是代表性的时序约束,该约束表示发送读取(CAS)命令和发送PRE命令之间必须经过的最小时钟周期数;以及tWR2PRE,其是代表性的时序约束,该约束表示发送写入(CAS)命令和发送PRE命令之间必须经过的最小时钟周期数。
如图3中的流程图形式所示,用于在计算设备中调度DRAM事务的方法300可以包括以下关于框302-308描述的步骤或动作。方法300可以由例如上述存储器控制器202(图2)执行或以其他方式控制。存储器控制器202或其部分(例如,调度逻辑232、事务队列234等)可以是用于执行以下关于方法300描述的功能的部件的示例。
如框302所示,方法300可以包括确定与从一个或多个处理器接收到的多个事务请求相对应的多个DRAM事务。如本领域普通技术人员所理解的,可以以常规方式执行确定与事务请求相对应的DRAM事务。此外,每个事务可以通过方向(即,读取或写入)和事务所指向到DRAM的N个等级中的哪个等级的组合来标识。例如,在诸如上文关于图2所描述的双等级DRAM实施例中,每个事务可以被标识为从第一等级(“R0”)读取、从第二等级(“R1”)读取、向第一等级(“W0”)写入、或向第二等级(“W1”)写入。从概念上讲,根据事务的方向(即读取或写入)和等级,每个事务可以被描述为“在”四个象限中的一个象限中或“与之相关联”。
确定多个DRAM事务可以进一步包括将每个事务标识为命中、未命中、冲突或在未命中/冲突下命中。“在未命中/冲突下命中”是指最初为未命中但在指向同一存储体中同一行的另一未命中已激活该行后立即成为命中的事务,或最初为冲突但在指向同一存储体中同一行的另一冲突已激活该行时立即成为命中的事务。指向DRAM的事务可以包括任意数目(即零或更多)的命中、任意数目的未命中、任意数目的冲突以及任意数目的在未命中/冲突下命中。
如框304所示,方法300可以包括将DRAM事务形成为多个子集。每个子集可以包括由方向(即读取或写入)和它们所指向的DRAM等级的同一组合标识的DRAM事务。在DRAM具有N个等级的实施例中,第一到第N子集中的每个子集可以包括被标识为指向第一到第N等级中的对应等级的读取的事务,并且第(N+1)到第2N子集中的每个子集可以包括被标识为指向第一到第N等级中的对应等级的写入的事务。例如,在双等级DRAM实施例中(即,N=2),这四个子集可以包括第一象限子集、第二象限子集、第三象限子集和第四象限子集,其中,第一象限子集包括被标识为从第一等级读取的一些或所有事务(即,R0中的事务的子集),第二象限子集包括被标识为从第二等级读取的一些或所有事务(即,R1中的事务的子集),第三象限子集包括被标识为向第一等级写入的一些或所有事务(即,W0中的事务的子集),以及第四象限子集包括被标识为向第二等级写入的一些或所有事务(即,W1中的事务的子集)。
再次简要地参考图2,例如,可以由调度逻辑232在事务队列234中(概念上)形成子集。然而,应当理解,事务可以被形成为子集、存储(在队列234或其他地方)或以使得它们能够以任何方式被标识为子集的方式被处理。下面描述用于形成子集的示例性方法。
如框306所示,方法300可以包括选择子集中的一个子集。下面描述用于选择子集中的一个子集的示例性方法。
如框308所示,方法300可以包括将所选择的子集中的事务发送到DRAM,诸如例如,上述双等级DRAM 206(图2)。如下所述,向DRAM发送事务可以包括调度或选择所选择的子集中的事务然后被发送到DRAM的顺序。下面描述用于将所选择的子集中的事务发送到DRAM的示例性方法。
应当理解,方法300可以重复执行。例如,当接收到事务请求并确定对应的事务时,可以基本上连续地执行如上关于框302所述的确定存储器事务、如上关于框304所述的将事务形成为子集以及如上关于框306所述的向DRAM发送事务。例如,关于上面关于图2描述的示例性实施例,当没有事务被确定并且因此调度逻辑232没有选择、发送等事务子集时,调度逻辑232可以处于空闲状态。一旦确定了至少一个事务,并且因此存在调度逻辑232以对其进行操作,调度逻辑232就可以从空闲状态改变到初始状态。
如下面进一步详细描述的,与向DRAM发送所选择的子集相关的某些操作可以与与另一子集相关的其他操作同时或基本上并行地发生。例如,发送ACT、PRE和CAS命令可以与发送一个子集有关,该子集可以被称为“引导者”子集,而仅发送ACT和PRE命令与发送一个子集有关,该子集可以被称为“跟随者”子集。当至少一个事务已经被确定并且因此存在调度逻辑232以对其操作时,调度逻辑232可以从空闲状态改变到初始状态,并且可以将与该事务相关联的子集(例如象限)指定为引导者。一旦存在与不同子集(例如,象限)相关联的至少一个其他事务供调度逻辑232对其进行操作,调度逻辑就可以将该其他子集(例如象限)指定为跟随者。下面描述了与引导者子集和跟随者子集相关的进一步方面。
如图4中的流程图形式所示,用于形成子集的示例性方法400可以包括以下关于框402-414描述的步骤或动作。方法400可以是方法300(图3)的上述框304的示例。方法400可应用于如上文关于框302所描述的标识的事务。也就是说,方法400可以应用于由方向(即,读取或写入)和等级的组合分组或标识的事务。例如,在双等级DRAM实施例中,可以针对每个象限执行方法400,并且子集包括象限中的所选择的事务。概括地说,方法400涉及选择事务的有效子集。效率可以与例如存储体扩展、事务计数、事务突发长度或其他因素有关。
如框402所示,可以选择所有命中,而不管命中可能在哪个存储体中。虽然为了清楚起见未示出,但所选择的命中(H)可以被组织在列表中。如框404所示,可以选择没有命中的存储体(即,没有任何命中并且因此没有在框402中所选择的事务的存储体)中的每个存储体的一次未命中。虽然为了清楚起见未示出,但所选择的未命中(M)可以被组织在列表中。
如框406所示,除了在框402和404中所选择的事务之外,可以选择没有命中或未命中的存储体中的每个存储体的一个冲突(即,不具有任何命中或未命中并且因此不具有在框402中所选择的事务的存储体)。如框408所示,根据在框404和406中所选择的事务,可以选择所有在未命中/冲突下命中。虽然为了清楚起见未示出,但是所选择的冲突(C)以及所选择的在未命中下命中(Mx)和所选择的在冲突下命中(Cx)(统称为所选择的在未命中/冲突下命中(X=Mx+Cx))可以被组织在相应的列表中。
如框409所示,所选择的未命中(M)、在未命中下命中(Mx)、冲突(C)和在冲突下命中(Cx)的列表可以按其数据周期计数的降序排序。事务的数据周期计数是DRAM数据总线上用于传输数据的时钟周期数。例如,对于16位数据总线传输64字节(512位)数据,将花费16个DRAM时钟周期或数据周期。
如框410所示,在某些情况下,可以丢弃也应进行刷新操作的指向存储体的事务。例如,在双等级实施例中,如果在存储器控制器对具有到与上述PBR相同的存储体的事务的象限执行方法400时,存储器控制器需要为存储体调度每存储体刷新(“PBR”),则存储器控制器可以忽略(即,不选择)方法400可能已经指示选择的到该存储体中的所有事务。类似地,例如,如果在存储器控制器对象限执行方法400时,存储器控制器需要为该象限调度全存储体刷新(“ABR”),则存储器控制器可能不会选择与上述ABR相同等级的两个象限的所有事务,否则方法400可能已经指示选择这些事务。换句话说,如果存储器控制器需要为象限调度ABR,则存储器控制器可以不对与ABR处于相同等级的两个象限执行方法400,从而使两个象限子集为空或无效。
如框411所示,可以从子集中丢弃在框402-408中选择的任何低效事务。例如,如果调度存储体中的一个或多个所选择的未命中、冲突或在未命中/冲突下命中会导致效率低下,则可能会丢弃这些未命中、冲突或在未命中/冲突下命中。下面进一步详细描述用于丢弃低效事务的示例性方法。
如框412和414所示,随着形成子集的剩余所选择的事务开始被发送(框412)到DRAM,可以选择进一步的或额外的事务(框414),即,添加到子集。如下面进一步详细描述的,可以在时间约束允许的情况下选择这种进一步的事务(而不会对效率产生负面影响)。选择要添加到子集的进一步或额外事务可以称为“延迟评估”(即,只要时间允许,评估就会延迟)。需注意,在一些情况下,存储器控制器可以在其开始执行方法400之后(例如,响应于额外的传入事务请求)添加事务。在这种情况下,可以以下面描述的方式评估新添加的事务,以确定是否选择它以将其包括在子集中。
如图5A-5B中的流程图形式所示,用于从子集中取消选择或丢弃低效事务的示例性方法500可以包括以下关于框502-526描述的步骤或动作。方法500可以是方法400(图4)的上述框411的示例。如果在框402-408中选择的事务完成效率低,则可以从子集中丢弃这些事务。概括地说,方法500可以从子集中丢弃任何未命中、冲突和在未命中/冲突下命中,对于这些未命中、冲突和在未命中/冲突下命中,剩余的数据周期数不足以完成。
如框502所示,可以确定子集中事务的总数或计数(“subset_txn_cnt”)是否小于最小事务阈值(“min_txn_threshold”)。Min_txn_threshold是固定的或预定的数字,鉴于以下描述和示例,对于该数字,本领域普通技术人员将容易出现合适的值(例如,4或8)。事务的总数或计数可以是上面关于框402-408(图4)描述的H、M、C和X列表中的事务的数目的总和。需注意,H、M、C和X列表中的每个列表中可能有零个或多个事务。如果在框502中确定子集中的事务总数小于最小事务阈值,则方法500可以结束而不从子集丢弃任何事务。
如果在框502中确定子集中的事务总数不小于最小事务阈值,则所有命中(例如,在上面关于图4描述的H列表中)可以被标记为不可丢弃,如框504所示。也就是说,方法500的其余部分从是否从子集丢弃这些事务的进一步考虑中省略了这些事务。标记为不可丢弃的命中数将添加到不可丢弃事务的计数(最初为零)中。
如框506所示,在命中(如果有的话)被标记为不可丢弃之后,则一个或多个未命中(例如,在上述M列表中)可以被标记为不可丢弃。尽管为了清楚起见没有明确地示出为框506的子步骤,但是只要M列表中存在一个或多个事务,并且只要子集中的不可丢弃事务的计数没有达到最小事务阈值,则方法500可以通过事务继续执行M列表事务,将下一个未命中标记为不可丢弃,并相应地递增子集中不可丢弃事务的计数。
如框508所示,在命中(如果有的话)和未命中(如果有的话)已经被标记为不可丢弃之后,则一个或多个冲突(例如,在上述C列表中)可以被标记为不可丢弃。尽管为了清楚起见没有明确地示出为框508的子步骤,但是只要C列表中存在一个或多个事务,并且只要子集中的不可丢弃事务的计数没有达到最小事务阈值,则方法500可以通过事务继续执行C列表事务,将每个冲突标记为不可丢弃,并相应地递增子集中不可丢弃事务的计数。
如框510所示,在命中(如果有的话)、未命中(如果有的话)和冲突(如果有的话)已经被标记为不可丢弃之后,可以确定在子集(例如,在上面引用的M列表中)中是否剩下尚未被标记为不可丢弃并且因此保持潜在可丢弃的任何未命中。如果在框510中确定一个或多个未命中仍然是潜在可丢弃的,则可以确定可用数据周期(“avail_data_cycles”)的数目与未决ACT周期(“pending_ACT_cycles)的数目之间的差异是否大于tRRD和tRCD的总和,如框512所示。
可用数据周期的初始数目(当执行框512时)是未决数据周期的数目和空闲数据周期的数目的总和。这最初可以表示为:
avail_data_cycles=pending_data_cycles+idle_data_ccycles,其中pending_data_cycles是完成当前正在形成的子集中的所有不可丢弃事务所需的数据周期数(在图3的步骤304下)。这可以表示为:
pending_data_cycles=data_cycles(不可丢弃事务)。
Idle_data_cycles是调度页面冲突所需的时间(最坏情况下,tRCD+tRP)和调度前一个子集未决事务所需时间、切换到当前子集的成本和允许的低效率数据周期中的较大者(即“最大”函数)。这可以表示为:
idle_data_cycles=max
(prev_subset_pending_data_ccycles+switch_cost+allowable_inefficiency_data_cycles,tRCD+tRP),
其中prev_subset_pending_data_cycles是完成先前选择的子集中所有未决事务所需的数据周期数。Switch_cost是从发送一个子集中(例如在一个象限中)的最后一个CAS事务切换到发送另一个子集中的第一个CAS事务(例如在另一个象限中)时经过的数据周期数。(以下将更详细地描述从存储器控制器向DRAM发送事务。)换句话说,switch_cost是在方向(即,从读取到写入,或从写入到读取)之间切换、切换等级或两者之间切换的时间惩罚。需注意,当引导者子集和跟随者子集之间没有切换时(因为调度逻辑是空闲的),prev_subset_pending_data_cycles和switch_cost的值都将为零。Allowable_inefficiency_data_cycles是数据总线周期的固定或预定阈值数目,其标识了在当前子集中机会主义地保留更多事务的可允许的低效率度量,并且可以由本领域普通技术人员容易地选择。pending_act_cycles的初始数目(当执行框512时)是调度当前引导者中的所有未决ACT和所考虑的子集中的不可丢弃事务所需的时间。这可以表示为:
pending_act_cycles=pending_act_cycles_in(引导者+以上不可丢弃的txns)*tRRD。
如框514所示,如果在框512中确定可用数据周期的数目与未决ACT周期的数目之间的差大于tRRD和tRCD的总和,则不丢弃M和Mx列表中的未命中(在框510中标识)及任何在该未命中下命中(即,hit-under-miss),而是被允许保留在子集中(例如,在它们相应的M和Mx列表中)。此外,在框514中,可用数据周期的数目可以通过将可用数据周期数目递增用于完成该未命中事务及任何在该未命中事务下命中的数据周期数目来更新。同样,在框514中,可以通过将未决ACT周期的数目递增tRRD来更新未决ACT周期的数目。这些更新可以表示为:
avail_data_cycles+=data_cycles(未命中及任何在该未命中下命中),以及
pending_act_cycles+=tRRD。
在框514之后,方法500可以返回到框510,以确定子集是否包括尚未被标记为不可丢弃的另一未命中。
如果在上述框512中确定可用数据周期的数目和未决ACT周期的数目之间的差小于tRRD和tRCD的总和,则可以从子集中丢弃该子集中(例如,分别在M、C和X列表中)剩下的所有未命中、冲突和在未命中/冲突下命中,即,仍然是可丢弃的,如框516所示。在框516之后,方法500可以结束,并且不再从子集丢弃进一步的事务。
如果在框510中确定在子集中(例如,在上面引用的M列表中)不存在剩下的潜在可丢弃未命中,则方法500可以在框518处继续(图5B)。如框518所示,可以确定在子集(例如,在上面引用的C列表中)中是否剩下尚未被标记为可丢弃并且因此保持潜在可丢弃的任何冲突。
如果在框518中确定不存在剩下潜在可丢弃的冲突,则方法500可以结束,并且不再从子集丢弃进一步的事务。如果在框518中确定一个或多个冲突仍然潜在是可丢弃的,则可以确定可用数据周期的数目与未决ACT周期的数目之间的差是否大于tRRD和tRCD的总和,以及可用数据周期的数目是否大于tRP和tRCD的总和,分别如框520和框522所示。
如框524所示,如果在框520和522中确定可用数据周期的数目与未决ACT周期的数目之间的差大于tRRD和tRCD的总和,并且可用数据周期的数目大于tRP和tRCD的总和,则C和Cx列表中的冲突(在框518中标识)和任何在该冲突下命中(即,在冲突下命中)未被丢弃而是被允许留在子集中(例如,在它们相应的C和Cx列表中)。此外,在框524中,可用数据周期的数目可以通过将可用数据周期数目递增用于完成该冲突事务及任何在该冲突事务下命中的数据周期数目来更新。同样,在框524中,可以通过将未决ACT周期的数目递增tRRD来更新未决ACT周期的数目。在框524之后,方法500可以返回到框518,以确定子集是否包括尚未被标记为不可丢弃的另一冲突。
如果在上述框520中确定可用数据周期的数目与未决ACT周期的数目之间的差不大于tRRD和tRCD的总和,或者如果在上述框522中确定可用数据周期的数目不大于tRP和tRCD的总和,则可以从子集中丢弃该子集中(例如,分别在C、C和Cx列表中)剩下的所有冲突和在冲突下命中,即,仍然是可丢弃的,如框526所示。在框526之后,方法600可以结束,并且不再从子集丢弃进一步的事务。
如图6中的流程图形式所示,用于在存储器控制器已经开始向DRAM发送引导者子集之后向该引导者子集添加进一步事务的示例性方法600可以包括以下关于框601-618描述的步骤或动作。方法600可以是方法400(图4)的上述框414的示例。概括地说,可以添加可以提高子集效率的事务。方法600所涉及的事务可以包括存储器控制器根据框412开始向DRAM发送引导者子集时,即发出第一个CAS命令时,存储器控制器中不存在的事务。此类事务可称为“新”事务。方法600所涉及的事务可以包括根据框402-411(图4)未被选择或丢弃的事务。此类事务可称为“剩余”事务。方法600可在与引导者子集相关联的DRAM命令可以发送到DRAM的每个数据周期上执行,从与引导者子集关联的第一个CAS命令发送到DRAM开始。在将与引导者子集相关联的第一个CAS命令发送到DRAM后,方法600可以在每个数据周期重复(再次从框601开始),即可以将与引导者子集相关联的DRAM命令发送到该DRAM,直到与引导者子集相关联的最后一个CAS命令发送到该DRAM,因为在发送最后一个CAS之前的任何时候都可以添加新的命中。
如框602所示,可以确定是否存在任何新的命中。如果在框602中确定存在一个或多个新的命中,则如框606所示,可以选择新命中,即,当其增加子集的效率时,将其添加到子集,并且更新available_data_cycles以包括新添加命中的数据周期。在框606之后,方法600可以返回到框601,并且在可以发送DRAM命令的下一个数据周期中,再次确定是否发送了最后一个CAS。如果在框601中确定已发送与当前引导者子集相关联的最后一个CAS,则方法600可以结束,并且在发送与下一个引导者子集相关联的第一个CAS之前不会再次执行。
如果在框602中确定没有新的命中,则随后可以确定在任何“未使用”存储体上是否存在任何新的或剩余的未命中,如框608所示。“未使用的”存储体是指当前引导者子集中没有事务所指向的存储体。如果在框608中确定在一个或多个未使用的存储体上存在一个或更多个新的或剩余的未命中,则在框610中确定可用数据周期的数目与未决ACT周期的数目之间的差是否大于tRRD和tRCD的总和,如框610所示。在方法600中,“未决数据周期”的数目是在执行上述方法500(图5A-5B)之后剩余的“可用数据周期”的数目。如框612所示,如果在框610中确定可用数据周期的数目与未决ACT周期的数目之间的差大于tRRD和tRCD的总和,则可以选择新的或剩余的未命中,即,添加到引导者子集中。此外,在框612中,可用数据周期的数目可以通过将可用数据周期数目递增用于完成该未命中事务的数据周期数目来更新。同样,在框618中,可以通过将未决ACT周期的数目递增tRRD来更新未决ACT周期的数目。这些更新可以表示为:
avail_data_cycles+=data_cycles(冲突),以及
pending_act_cycles+=tRRD。
在框612之后,方法600可以返回到框601,并且在可以发送DRAM命令的下一个时钟周期中,再次确定是否发送了最后一个CAS。
如果在框608中确定在任何未使用的存储体上没有新的或剩余的未命中,或者如果在框610中确定可用数据周期的数目与未决ACT周期的数目之间的差不大于tRRD和tRCD的总和,则可以确定任何未使用的存储体上是否存在任何新的或剩余的冲突,如框614所示。
如果在框614中确定在一个或多个未使用的存储体上存在一个或更多个新的或剩余的冲突,则可以确定可用数据周期的数目与未决ACT周期的数目之间的差是否大于tRRD和tRCD的总和,以及可用数据周期的数目是否大于tRP和tRCD的总和,分别如框616和框617所示。如框618所示,如果在框616和617中确定可用数据周期的数目与未决ACT周期的数目之间的差大于tRRD和tRCD的总和,并且可用数据周期的数目大于tRP和tRCD的总和,则可以选择冲突(在框614中标识),即,将该冲突添加到引导者子集。此外,在框618中,可用数据周期的数目可以通过将可用数据周期数目递增用于完成冲突事务的数据周期数目来更新。同样,在框618中,可以通过将未决ACT周期的数目递增tRRD来更新未决ACT周期的数目。这些更新可以表示为:
avail_data_cycles+=data_cycles(冲突),以及
pending_act_cycles+=tRRD。
方法600可在可发送DRAM命令的下一个时钟周期返回框601,再次确定是否已发送最后一个CAS,以及如果未发送,另一事务是否可以被有效地添加。
如果在上述框616中确定可用数据周期的数目与未决ACT周期的数目之间的差不大于tRRD和tRCD的总和,或者如果在上述框617中确定有效数据周期的数目不大于tRP和tRCD的总和,则方法600可以返回到框601,在可以发送DRAM命令的下一个时钟周期,再次确定是否已发送最后一个CAS。
如图7中的时间线700所示,根据上述方法600(图6),在存储器控制器发出与该子集相关联的ACT或PRE命令之后,可以将新的或剩余的命中、未命中或冲突添加到引导者子集。在将与子集相关联的第一个CAS(“CAS_0”)发送到DRAM之后,以及在将与该子集相关联的最后一个CAS(“CAS_n”)发送到DRAM之前,可以添加新的或剩余的命中、未命中或冲突。在发送最后一个CAS之前,可以随时添加命中。只要在最后一次CAS之前至少还剩下tRCD循环,就可以添加未命中。只要在最后一个CAS之前至少还剩下tRCD+tRP周期,就可以添加冲突。在图7所示的示例中,在时间702处,存储器控制器根据方法600(图6)评估新的或剩余的事务。由于时间702小于最后一个CAS之前的tRCD+tRP周期,因此存储器控制器可以确定如果新的或剩余的事务是命中或未命中则可以添加该事务,如果是冲突则无法添加。
在图8中,概念图800图示了将上述方法400(图4)、500(图5)和600(图6)应用于一组事务的示例。已被标识为命中(“H”)、未命中(“M”)、冲突(“C”)和冲突/在未命中下命中(“X”)的事务被示为与事务所指向的存储体相关。每个存储体中的事务也按时间顺序显示,其中存储器控制器产生对应于传入事务请求的事务,从最早或不是最近产生的事务到最新或最近产生的事务。在所图示的示例中:第一存储体(“bank_0”)中的事务按从最早到最新的顺序由命中802、命中804和冲突806组成;第二存储体(“bank_1”)中的事务由冲突808组成;第三存储体(“bank_2”)中的事务按从最早到最新的顺序由两个冲突810和812组成;第四存储体(“bank_3”)中的事务按从最早到最新的顺序由两个冲突814和816以及命中818组成;第五存储体(“bank_4”)中的事务按从最早到最新的顺序由冲突820和在冲突下命中822(即,最初被标识为冲突的事务,但一旦指向同一存储体中的同一行的冲突820激活它,该事务将成为命中)组成;第六存储体(“bank_5”)中的事务由存储器控制器已开始向DRAM发送子集后一段时间产生的命中832组成;第七存储体(“bank_6”)中的事务按从最早到最新的顺序由未命中824和未中826组成;第八存储体(“bank_7”)中的事务按从最早到最新的顺序由未命中828和在未命中下命中830(即,最初标识为未命中的事务,但一旦完成指向同一存储体中的同一行的未命中828,该事务将成为命中)。
可以通过将上述方法400(图4)和500(图5)应用于事务802-830来形成要被发送到DRAM的子集834(在图8中用虚线指示)。在形成子集834时,可以选择所有命中802、804和818(根据图4的框402)。在存储器控制器开始向DRAM发送子集832时可能不存在的命中832可以稍后添加(根据图4的框414)。此外,在形成子集832时,可以分别选择bank_6和bank_7中的未命中824和828(根据图4的框404),因为在这些存储体中不存在要选择的命中。可以分别选择bank_1、bank_2和bank_4中的冲突808、810和820(根据图4的框406),因为在这些存储体中不存在要选择的命中或未命中。当选择冲突820时,也可以选择在冲突下命中822(根据图4的框408)。类似地,当选择未命中828时,也可以选择在未命中下命中830(根据图4的框408)。需注意,在该示例中,不在子集834中的事务包括冲突806、812、814、816和未命中826。
如图9中的流程图形式所示,用于选择四个子集中的哪一个子集来发送到DRAM的示例性方法900可以包括以下步骤。方法900可以是方法300(图3)的上述框306的示例。概括地说,可以基于通过将度量应用于每个子集而产生的度量结果来选择子集。在一些实施例中,可以应用基于度量选择子集的例外。
如框902所示,可以确定是否在最近事务的阈值数(“max_skip”)内没有选择任何子集,或者已被发送到DRAM的最近子集。如果在框902中确定存在在最近事务的阈值数目内尚未选择的子集,则可以选择该子集,如框904所示。
如框906所示,如果在框902中确定在最近事务的阈值数目内没有未被选择的子集,则可以为每个子集评估或计算一个度量。例如,在双等级DRAM实施例中,可以为四个象限子集中的每一个计算度量,从而为每个象限产生对应的度量结果。概括地说,该度量可以基于通过完成子集中的事务数目而获得的收益或效率,并且可以包括基于成本的抵消。成本可以包括例如在子集之间切换的周期中的成本。如下面关于示例所描述的,当子集被发送到DRAM时,可以使用方法900来评估该子集。其数据请求被发送到DRAM(即,通过CAS命令)的子集是引导者子集,使用方法900选择的一旦在当前引导者子集完成向DRAM发送其数据请求就成为下一个引导者子集的子集是跟随者子集。需注意,只要引导者的执行顺序不受影响,引导者象限和跟随者象限的激活和预充电命令可以交错。然而,引导者的CAS总是排在跟随者的CAS之前。存在与等级之间的切换相关联的成本,并且也存在与切换数据传输的方向相关联的(即,从读取到写入,或从写入到读取)成本。
在定义度量时,可以用各种方式来表示益处,诸如例如:数据周期(“data_cycles(H,M,C,X)”),其表示完成子集中所有命中(“H”)、未命中(“M”)、冲突(“C”)和在未命中/冲突下命中(“X”)事务所需的数据周期数;存储体扩展(“bank_spread”),其表示在完成子集中的事务时所横越的唯一存储体的数目;每页平均字节数(“average_bytes_per_page(H,M,C,X)”),其表示在完成子集中所有命中、未命中、冲突和在未命中/冲突下命中事务时将访问的每页平均字节数;以及子集中的在未命中/冲突下命中事务;最小突发长度等效计数(“minBL_equivalent_count(H,M,C,X)”),其是在完成子集中所有命中、未命中、冲突和在未命中/冲突下命中事务时将访问的最小DRAM突发长度的数目;事务计数(“transaction_count(H,M,C,X)”),其是子集中的事务数;以及鉴于本文所提供的描述和示例集,本领域普通技术人员可能会想到的其他度量。
在定义度量时,成本可以用各种方式表示,诸如例如:以周期为单位的切换成本(“switch_cost_in_cycles”),它表示在子集之间切换的最小延迟;循环中的相同等级加法器(“same_rank_adder_in_cycles”),其表示将事务发送到与所考虑的子集的引导者子集相同的存储体的效率低下;以及鉴于本文所提供的描述和示例,本领域技术人员可能会想到的其他度量。Same_rank_adder_in_cycles可以定义为将冲突事务调度到与引导者子集相同的存储体的成本与来自去往与引导者子集不同的存储体的事务的重叠数据周期的益处之间的差异。这大约等于:Same_bank_conflict_cost–Diff_bank_data_cycles,其中Same_bank-conflict_coast为(tRD2PRE或tWR2PRE)+tRP+tRCD,Diff_bank_data_cycle为上述重叠数据周期数。
在定义度量时,可以以各种方式组合上述益处和成本。度量的第一示例可以是:data_cycles(H,M,C,X)-switch_cost_in_cycles。度量的第二示例可以是:data_cycles(H,M,C,X)-switch_cost_in_cycles-same_rank_adder_in_cycles。度量的第三示例可以是:bank_spread x average_bytes_per_page(H,M,C,x)。度量的第四示例可以是:bank_spread x average_bytes_per_page(H,M,C,x)-switch_cost_in_cycles。度量的第五示例可以是:min_BL_equivalt_count(H,M,C,X)。度量的第六示例可以是:transaction_count(H,M,C,X)。鉴于前述描述和示例,本领域普通技术人员可能会想到其他度量。
在框906中将度量应用于每一个子集之后,可以确定是否存在连结(tie),即,度量是否评估为两个或更多个子集或产生了相同的结果,如框908所示。如果确定度量为两个或更多个子集产生了相同的结果(即,两个或更多个子集之间存在连结),则可以选择其度量在与引导者子集不同的等级上产生最高结果的子集,如框910所示。如果在不同等级上的两个子集之间仍然存在连结,则选择其方向相同且等级不同于引导者子集的子集。否则(即,如果度量为一个子集产生的结果高于为其他子集产生的度量的结果),则可以选择度量为其产生最高值的子集,如框912所示。鉴于前述描述和示例,本领域普通技术人员可能会想到关于使用任何上述度量的其他策略。
如图10中的示例性时间线1000所示,存在重叠时段,在该重叠时段期间,子集中的一个子集是引导者,而另一个子集是跟随者。例如,在双等级DRAM实施例中,象限中的一个象限(例如,R0)是引导者象限,而象限中的另一个象限(例如,R1)是跟随者象限。在该示例中,在重叠时段期间,存储器控制器发送与引导者象限相关联的读取和写入(即,CAS)、ACT和PRE命令,而存储器控制器仅发送与跟随者象限相关联的ACT和GRE命令。在发送与引导者象限关联的最后一个CAS(“CAS_m”)后,跟随者象限成为引导者象限。由于存储器控制器已经针对已成为引导者象限的象限调度了ACT或PRE命令,在tSwitch之后,存储器控制器可以立即开始发送CAS命令,从第一个CAS(“CAS_0”)开始,到最后一个CAS(“CAS_n”)结束。因此,在一个象限中打开或关闭行(页)的相关成本与另一象限上的CAS命令有效重叠。
如图11中的流程图形式所示,用于将所选择的子集中的事务发送到DRAM的方法1100可以包括以下步骤。方法1100可以是方法300(图3)的上述框308的示例。方法1100还可以被称为子集内调度的示例。如上所述,当读取或写入命令(即CAS命令)被发送到DRAM时,相关子集可以称为引导者子集。方法1100可以确定将引导者子集中的事务发送到DRAM的顺序或优先级。概括地说,引导者子集中的事务被发送到DRAM的顺序或优先级可以基于同一等级(在相反的事务方向上)的另一个子集中的事务。例如,在有四个子集或象限R0、R1、W0和W1的双等级实施例中:如果R0是引导者象限,则发送R0中事务的顺序或优先级可以基于W0中的事务;如果R1是引导者象限,则发送R1中的事务的顺序或优先级可以基于W1中的事务;如果W0是引导者象限,则发送W0中的事务的顺序或优先级可以基于R0中的事务;并且如果W1是引导者象限,则发送W1中的事务的顺序或优先级可以基于R1中的事务。发送引导者象限中的事务的顺序或优先级可以基于这些事务与同一级别上的其他象限中事务具有公共的存储体。
继续这个涉及四个象限的示例,如果在框1102中确定引导者象限是第一象限(R0),则发送其事务的顺序或优先级可以基于这些事务与第三象限(W0)中的事务具有公共的存储体,如框1104所示。如果在框1106中确定引导者象限是第二象限(R1),则发送其事务的顺序或优先级可以基于这些事务与第四象限(W1)中的事务具有公共的存储体,如框1108所示。如果在框1110中确定引导者象限是第三象限(W0),则发送其事务的顺序或优先级可以基于这些事务与第一象限(R0)中的事务具有公共的存储体,如框1112所示。如果确定(通过框1102、1106和1110中的否定确定)引导者象限是第四象限(W1),则发送其事务的顺序或优先级可以基于这些事务与第一象限(R0)中的事务具有公共的存储体,如框1114所示。
如图12中的流程图形式所示,用于基于与同一等级上的另一个子集(例如,另一象限)公共的存储体来对引导者子集(例如,象限)中的事务被发送到DRAM的顺序进行优先级排序的方法1200可以包括以下步骤。方法1200可以是方法1100(图11)的上述框1104、1108、1112和1114中的每一个的示例。
如框1202所示,引导者象限中的事务可以被分组为三个集合:命中、未命中和冲突。如框1204、1206和1208分别所示,命中、未命中和冲突然后由它们与同一等级上的其他象限中的事务是公共的存储体来排序。“排序”是指在向不同存储体发送事务的DRAM命令之前,向普通存储体发送事务的DRAM命令。如果命中、未命中或冲突中没有一个存储体与同一级别上的其他象限中的事务是公共的,则可以将它们划分为优先级,例如:首先是所有命中,然后是所有未命中(包括任何未命中下命中),然后是全部冲突(包括任何冲突下命中)。
如框1210所指示,CAS、ACT和PRE命令只要符合条件,即满足相应的时序约束,就可以发送到DRAM。如果CAS、ACT和PRE命令在相同的时钟周期上都符合条件,则它们的优先级可以如下:先是CAS,然后是ACT,然后是PRE。
在如何应用方法1200的示例中,引导者象限可以是R0,其中可以有指向bank_0的读取和指向bank_4的读取。在该示例中,同一等级上的另一象限是W0,其可以具有指向bank_4的写入和指向bank_5的写入。应用方法1200,在指向bank_0的读取之前发送指向bank_4的读取,因为bank_4是该事务与W0中的事务之间的公共存储体,而bank_0不是该事务与W0中的事务间的公共存储体。一旦完成了指向bank_4的读取事务,此事务顺序将导致指向bank_4的写入的PRE/ACT与指向bank_0的读取事务的CAS并行发生。相反,如果不应用方法1200,则可以在指向bank_4的读取之前发送指向bank_0的读取。如果按此顺序发送事务,则仅在与读取到bank_0和读取到bank_4相关联的CAS之后,才会发生与指向bank_4的写入相关联的PRE/ACT。
如图13中的示例性时间线1300所示,在时间1302和时间1304之间,象限中的一个象限(例如,R0)是引导者象限,而象限中的另一个象限(例如,R1)是跟随者象限。这可以是上面关于图2描述的初始状态。在时间1302和时间1304之间,存储器控制器可以发送与R0相关联的读取(即CAS)、ACT和PRE命令,并且存储器控制器只可以发送与R1相关联的ACT和PRE命令。与R0相关联的最后一个CAS(“CAS_m”)在时间1304发送。在时间1304,R1成为引导者象限。同样在时间1304,由上述方法900(图9)确定的象限(例如W0)成为下一个跟随者象限。这可以是上面关于图2描述的稳定状态。从时间1306开始,即时间1304之后的tSwitch周期,存储器控制器可以发送与R1相关联的读取(即CAS)、ACT和PRE命令作为新的引导者象限。与R1相关联的最后一个CAS(“CAS_n”)在时间1308发送。在时间1304和时间1308之间,存储器控制器可以仅发送与W0相关联的ACT和PRE命令作为新确定的跟随者象限。在时间1308,W0成为引导者象限。从时间1310开始,即时间1308之后的tSwitch周期,存储器控制器可以发送与W0相关联的写入(即CAS)、ACT和PRE命令作为新的引导者象限。与W0相关联的最后一个CAS(“CAS_p”)在时间1312发送。图13中所示的模式可以重复,其中存储器控制器选择下一个跟随者象限,并且每当存储器控制器完成发送引导者象限子集中的所有所选择的事务时,象限在引导者角色和跟随者角色之间切换。
如图14所示,可在便携式计算设备(“PCD”)1400中提供用于调度DRAM事务的系统和方法的示例性实施例。PCD 1400可以是上述计算设备100(图1)的示例,如上所述,其可以是任何类型的计算设备。
PCD 1400可以包括SoC 1402。SoC 1402可以包括CPU 1404、GPU 1406、DSP 1407、模拟信号处理器1408或其他处理器。CPU 1404可以包括多个核,诸如第一核1404A、第二核1404B等直到第N核1404N。
显示控制器1410和触摸屏控制器1412可以耦合到CPU 1404。SoC 1402外部的触摸屏显示器1414可以耦合到显示控制器1410和触摸屏控制器1412。PCD 1400可以进一步包括耦合到CPU 1404的视频解码器1416。视频放大器1418可以耦合到视频解码器1416和触摸屏显示器1414。视频端口1420可以耦合到视频放大器1418。通用串行总线(“USB”)控制器1422也可以耦合到CPU 1404,USB端口1424可以耦合到USB控制器1422。用户识别模块(“SIM”)卡1426也可以耦合到CPU 1404。
一个或多个存储器可以耦合到CPU 1404。一个或多个存储器可以包括易失性和非易失性存储器。易失性存储器的示例包括静态随机存取存储器(“SRAM”)1428和动态RAM(“DRAM”)1430和1431。此类存储器可以在SoC 1402外部,诸如DRAM 1430,或者在SoC 1402内部,诸如DRAM 1431。耦合到CPU 1404的DRAM控制器1432可以控制向DRAM 1430和DRAM1431写入数据以及从DRAM 1430和DRAM 1431读取数据。在其他实施例中,此类DRAM控制器可以包括在诸如CPU 1404的处理器内。DRAM控制器1432可以是存储器控制器102(图1)或存储器控制器202(图2)的示例。DRAM 1430和1431可以是DRAM 108(图1)或DRAM206(图2)的示例。
立体声音频CODEC 1434可以耦合到模拟信号处理器1408。此外,音频放大器1436可以耦合到立体声音频CODEC 1434。第一立体声扬声器1438和第二立体声扬声器1440可以分别耦合到音频放大器1436。此外,麦克风放大器1442可以耦合到立体声音频CODEC 1434,麦克风1444可以耦合到麦克风放大器1442。调频(“FM”)无线电调谐器1446可以耦合到立体声音频CODEC 1434。FM天线1448可以耦合到FM无线电调谐器1446。此外,立体声耳机1450可以耦合到立体声音频CODEC 1434。可以耦合到CPU 1404的其他设备包括一个或多个数字(例如,CCD或CMOS)相机1452。
调制解调器或RF收发器1454可以耦合到模拟信号处理器1408。RF开关1456可以耦合到RF收发器1454和RF天线1458。此外,小键盘1460、具有麦克风的单声道耳机1462和振动器设备1464可以耦合到模拟信号处理器1408。
SoC 1402可以具有一个或多个内部或片上热传感器1470A,并且可以耦合到一个或更多个外部或片外热传感器1470B。模数转换器(“ADC”)控制器1472可以将由热传感器1470A和1470B产生的电压降转换为数字信号。电源1474和电源管理集成电路(“PMIC”)1476可以向SoC 1402供电。
固件或软件可以被存储在任何上述存储器中,诸如DRAM 1430或1431、SRAM 1428等,或者可以被存储在可由执行软件或固件的处理器硬件直接访问的本地存储器中。这种固件或软件的执行可以控制任何上述方法的各方面或配置任何上述系统的各方面。具有其中以计算机可读形式存储的用于由处理器硬件执行的固件或软件的任何此类存储器或其他非暂态存储介质可以是“计算机程序产品”、“计算机可读介质”等的示例,如在专利词典中所理解的术语。
在不脱离本发明的精神和范围的情况下,替代实施例对于本发明所属领域的普通技术人员将变得显而易见。因此,虽然已经详细说明和描述了所选择的方面,但是应当理解,在不脱离本发明的精神和范围的情况下,可以在其中进行各种替换和改变,如所附权利要求所限定的。
Claims (38)
1.一种用于在计算设备中调度动态随机存取存储器(DRAM)事务的方法,包括:
由存储器控制器确定与从一个或多个处理器接收到的多个事务请求相对应的多个存储器事务,其中确定所述多个存储器事务包括将每个存储器事务标识为读取和写入中的一者并且将其指向到多个DRAM等级中的所标识的一个DRAM等级;
由所述存储器控制器将所述多个存储器事务形成为多个子集,每个子集包括由彼此相同的DRAM等级和方向的组合标识的一个或多个存储事务;
由所述存储器控制器选择所述子集中的一个子集;以及
由所述存储器控制器将所述子集中所选择的所述一个子集中的所有事务发送给所述DRAM。
2.根据权利要求1所述的方法,其中:
确定所述多个存储器事务包括将每个事务标识为命中、未命中、冲突、和在未命中/冲突下命中中的一者,所述DRAM的多个存储体中的每个存储体具有零个或更多个所述存储器事务。
3.根据权利要求2所述的方法,其中将所述多个存储器事务形成为所述多个子集进一步包括,针对所述子集中的每个子集:
选择在所述DRAM的存储体中被标识为命中的每个事务;以及
在所述DRAM的任何如下存储体中选择被标识为未命中的每个事务:在该存储体中,没有被标识为命中的事务被选择;以及
在所述DRAM的任何如下存储体中选择被标识为冲突的每个事务:在该存储体中,没有被标识为命中的事务被选择、并且没有被标识为未命中的事务被选择。
4.根据权利要求3所述的方法,其中将所述多个存储器事务形成为所述多个子集进一步包括,针对所述子集中的每个子集:
根据被标识为未命中的每个所选择的事务以及根据被标识为冲突的每个所选择的事务,选择被标识为在未命中/冲突下命中的每个事务。
5.根据权利要求4所述的方法,其中将所述多个存储器事务形成为所述多个子集进一步包括,针对所述子集中的每个子集,如果调度被标识为未命中、冲突、或在未命中/冲突下命中的一个或多个所选择的事务将导致大于阈值数目的空数据总线周期,则丢弃被标识为未命中、冲突、或在未命中/冲突下命中的一个或多个所选择的事务。
6.根据权利要求1所述的方法,其中选择所述子集中的一个子集包括:
计算针对所述子集的每个子集的度量以产生对应的度量结果;以及
选择与最高度量结果相对应的所述子集中的所述一个子集。
7.根据权利要求6所述的方法,其中,所述度量包括响应于以下至少一项的益处部分:子集中所有所选择的事务之中的数据周期的计数;在所述子集中的所有所选择的事务之中的存储体扩展;在所述子集中的所有所选择的事务之中每页的平均字节数;在所述子集中的所有所选择的事务之中的最小突发长度等效计数;以及所述子集中所有所选择的事务之中的事务计数。
8.根据权利要求6所述的方法,其中,所述度量包括响应于以下中的至少一项的成本部分:子集切换成本;以及相同的等级加法器成本。
9.根据权利要求1所述的方法,其中,将所述子集中所选择的所述一个子集中的所有事务发送给所述DRAM包括:
基于所述子集中的所选择的所述一个子集和与所述子集的所选择的子集同一等级上的另一子集之间的公共存储体,确定所述子集中的所选择的所述一个子集的事务顺序;以及
以所确定的事务顺序将所述子集中所选择的所述一个子集中的所述存储器事务发送给所述DRAM。
10.根据权利要求1所述的方法,其中发送所述子集中的所选择的所述一个子集中的所有事务进一步包括在将与所述子集中的所选择的所述一个子集相关联的最终列地址选择(CAS)命令发送到所述DRAM之前,向所述子集中的所选择的所述一个子集添加一个或多个事务。
11.一种用于在具有存储器控制器和动态随机存取存储器(DRAM)的计算设备中调度存储器事务的系统,包括:
所述存储器控制器中的事务队列;以及
所述存储器控制器中的调度逻辑,所述调度逻辑被配置为:
确定与从一个或多个处理器接收到的多个事务请求相对应的多个存储器事务,其中每个存储器事务被标识为读取和写入中的一者并且被指向到多个DRAM等级中的所标识的一个DRAM等级;
将所述多个存储器事务形成为多个子集,每个子集包括由彼此相同的DRAM等级和方向的组合标识的一个或多个存储器事务;
选择所述子集中的一个子集;以及
经由所述事务队列将所选择的子集中的所有事务发送给所述DRAM。
12.根据权利要求11所述的系统,其中:
所述调度逻辑被配置为将每个事务标识为命中、未命中、冲突、和在未命中/冲突下命中中的一者,所述DRAM的多个存储体中的每个存储体具有所述存储器事务中的零个或更多个所述内存事务。
13.根据权利要求12所述的系统,其中所述调度逻辑被配置为通过进一步被配置为针对所述子集中的每一个子集执行以下来将所述多个存储器事务形成为所述多个子集:
在所述DRAM的存储体中选择被标识为命中的每个事务;以及
在所述DRAM的任何如下存储体中选择被标识为未命中的每个事务:在该存储体中没有被标识为命中的事务被选择;以及
在所述DRAM的任何如下存储体中选择被标识为冲突的每个事务:在该存储体中没有被标识为命中的事务被选择、并且没有被标识为未命中的事务被选择。
14.根据权利要求13所述的系统,其中所述调度逻辑被配置为通过进一步被配置为针对所述子集中的每一个子集执行以下来将所述多个存储器事务形成为所述多个子集:
根据被标识为未命中的每个所选择的事务以及根据被标识为冲突的每个所选择的事务,选择被标识为在未命中/冲突下命中的每个事务。
15.根据权利要求14所述的系统,其中所述调度逻辑被配置为通过进一步被配置为针对所述子集中的每个子集执行以下项来将所述多个内存事务形成为所述多个子集:如果调度被标识为未命中、冲突、或在未命中/冲突下命中的一个或多个所选择的事务将导致大于阈值数目的空数据总线周期,则丢弃被标识为未命中、冲突、或在未命中/冲突下命中的一个或多个所选择的事务。
16.根据权利要求11所述的系统,其中所述调度逻辑被配置为通过被配置为执行以下来选择所述子集中的一个子集:
计算针对所述子集中的每个所述子集的度量以产生对应的度量结果;以及
选择与最高度量结果相对应的所述子集中的所述一个子集。
17.根据权利要求16所述的系统,其中所述度量包括响应于以下中的至少一项的益处部分:子集中所有所选择的事务之中的数据周期计数;在所述子集中的所有所选择的事务之中的存储体扩展;在所述子集中的所有所选择的事务之中每页的平均字节数;在所述子集中的所有所选择的事务中之的最小突发长度等效计数;以及所述子集中所有所选择的事务之中的事务计数。
18.根据权利要求16所述的系统,其中所述度量包括响应于以下至少一项的成本部分:子集切换成本;以及相同的等级加法器成本。
19.根据权利要求11所述的系统,其中所述调度逻辑被配置为通过被配置为执行以下来将所述子集中所选择的所述一个子集中的所有事务发送到所述DRAM:
基于所述子集中的所选择的所述一个子集和与所述子集中的所选择的子集同一等级上的另一子集之间的公共存储体,确定所述子集中的所选择的所述一个子集的事务顺序;以及
以所确定的所述事务顺序将所述子集中所选择的所述一个子集中的所述存储器事务发送给所述DRAM。
20.根据权利要求11所述的系统,其中所述调度逻辑被配置为:通过进一步被配置为在与所述子集中的所选择的所述一个子集相关联的最终列地址选择(CAS)命令发送到所述DRAM之前,向所述子集中所选择的所述一个子集添加一个或多个事务,将所述子集中所选择的所述一个子集中的所有事务发送到所述DRAM。
21.一种用于在计算设备中调度动态随机存取存储器(DRAM)事务的系统,包括:
用于确定与从一个或多个处理器接收到的多个事务请求相对应的多个存储器事务的部件,其中所述用于确定多个存储器事务的部件将每个存储器事务标识为读取和写入中的一者并将其指向到多个DRAM等级中的所标识的一个DRAM等级;
用于将所述多个存储器事务形成为多个子集的部件,每个子集包括由彼此相同的DRAM等级和方向的组合标识的存储器事务;
用于选择所述子集中的一个子集的部件;以及
用于将所述子集中所选择的所述一个子集中的所有事务发送给所述DRAM的部件。
22.根据权利要求21所述的系统,其中:
所述用于确定所述多个存储器事务的部件包括用于将每个事务标识为命中、未命中、冲突、和在未命中/冲突下命中中的一者的部件,所述DRAM的多个存储体中的每个存储体具有零个或更多个所述存储器事务。
23.根据权利要求22所述的系统,其中针对所述子集中的每个子集,所述用于将所述多个存储器事务形成为所述多个子集的部件包括:
用于选择所述DRAM的存储体中被标识为命中的每个事务的部件;
用于在所述DRAM的任何如下存储体中选择被标识为未命中的每个事务的部件:在该存储体中,没有被标识为命中的事务被选择;以及
用于在所述DRAM的任何如下存储体中选择被标识为冲突的每个事务的部件:在该存储体中,没有被标识为命中的事务被选择、并且没有被标识为未命中的事务被选择。
24.根据权利要求23所述的系统,其中针对所述子集中的每个子集,所述用于将所述多个存储器事务形成为所述多个子集的部件进一步包括:
用于根据被标识为未命中的每个所选择的事务以及根据和被标识为冲突的每个所选择的事务,选择被标识为在未命中/冲突下命中的每个事务的部件。
25.根据权利要求24所述的系统,其中所述用于将所述多个存储器事务形成为所述多个子集的部件进一步包括:针对所述子集中的每一个子集,用于如果调度被标识为未命中、冲突或在未命中/冲突下命中的一个或多个所选择的事务将导致大于阈值数目的空数据总线周期,则丢弃被标识为未命中、冲突、或在未命中/冲突下命中的一个或多个所选择的事务的部件。
26.根据权利要求21所述的系统,其中所述用于选择所述子集中的一个子集的部件包括:
用于计算针对每个子集的度量以产生对应的第一度量结果、第二度量结果、第三度量结果和第四度量结果的部件;以及
用于选择与最高度量结果相对应的所述子集中的所述一个子集的部件。
27.根据权利要求26所述的系统,其中:
所述度量包括响应于以下至少一项的益处部分:子集中所有所选择的事务之中的数据周期计数;在所述子集中的所有所选择的事务之中的存储体扩展;在所述子集中的所有所选择的事务之中每页的平均字节数;在所述子集中的所有所选择的事务之中的最小突发长度等效计数;以及所述子集中所有所选择的事务之中的事务计数;以及
所述度量包括响应于以下中的至少一个的成本部分:子集切换成本;以及相同的等级加法器成本。
28.根据权利要求21所述的系统,其中所述用于将所述子集中所选择的所述一个子集中的所有事务发送给所述DRAM的部件包括:
用于基于所述子集中的所选择的所述一个子集和与所述子集中的所选择的所述一个子集同一等级上的另一子集之间的公共存储体,确定所述第一子集、第二子集、第三子集和第四子集中的所选择的所述一个子集的事务顺序的部件;以及
所述用于以所确定的所述事务顺序将所述子集中的所选择的所述一个子集中的所述存储器事务发送给所述DRAM的部件。
29.根据权利要求21所述的系统,其中所述用于发送所述子集中的所选择的所述一个子集中的所有事务的部件进一步包括:用于在将与所述子集中的所选择的所述一个子集相关联的最终列地址选择(CAS)命令发送到所述DRAM之前,向所述子集中的所选择的所述一个子集添加一个或多个事务的部件。
30.一种用于在具有存储器控制器的计算设备中调度动态随机存取存储器(DRAM)事务的计算机程序产品,所述计算机程序产品包括其上以计算机可执行形式存储有指令的非暂态计算机可读介质,当由所述存储器控制器的处理系统执行时,所述指令将所述存储控制器配置为:
确定与从一个或多个处理器接收到的多个事务请求相对应的多个存储器事务,其中每个存储器事务被标识为读取和写入中的一者并且被指向到多个DRAM等级中的所标识的一个;
将所述多个存储器事务形成为多个子集,每个子集包括由彼此相同的DRAM等级和方向的组合标识的一个或多个存储器事务;
选择所述子集中的一个子集;以及
将所述子集中的所选择的所述一个子集中的所有事务发送给所述DRAM。
31.根据权利要求30所述的计算机程序产品,其中:
所述指令配置所述存储器控制器以将每个事务标识为命中、未命中、冲突、和在未命中/冲突下命中中的一者,所述DRAM的多个存储体中的每个存储体具有所述存储器事务中的零个或更多个所述存储器事务。
32.根据权利要求31所述的计算机程序产品,其中:
所述指令通过将所述存储器控制器配置为针对所述子集中的每个子集执行以下来配置所述存储器控制器以将所述多个存储器事务形成为所述多个子集:
在所述DRAM的存储体中选择被标识为命中的每个事务;
在所述DRAM的任何如下存储体中选择被标识为未命中的每个事务:在该存储体中,没有被标识为命中的事务被选择;以及
在所述DRAM的任何如下存储体中选择被标识为冲突的每个事务:在该存储体中,没有被标识为命中的事务被选择、并且没有被标识为未命中的事务被选择。
33.根据权利要求32所述的计算机程序产品,其中所述指令通过将所述存储器控制器配置为针对所述子集中的每个子集执行以下来进一步配置所述存储器控制器以将所述多个存储器事务形成为所述多个子集:
在被标识为未命中的每个所选择的事务和被标识为冲突的每个所选择的事务下,选择被标识为在未命中/冲突下命中的每个事务。
34.根据权利要求33所述的计算机程序产品,其中所述指令将所述存储器控制器配置为通过针对所述子集中的每个子集执行以下来进一步配置所述存储器控制器:如果调度被标识为未命中、冲突、或在未命中/冲突下命中的一个或多个所选择的事务将导致大于阈值数目的空数据总线周期,则丢弃被标识为未命中、冲突或在未命中/冲突下命中的一个或多个所选择的事务,以将所述多个存储器事务形成为所述多个子集。
35.根据权利要求30所述的计算机程序产品,其中所述指令通过配置所述存储器控制器执行以下来将所述存储器控制器配置为选择所述子集中的一个子集:
计算针对所述子集的每个子集的度量以产生对应的度量结果;以及
选择对应于最高度量结果的所述子集中的所述一个子集。
36.根据权利要求35所述的计算机程序产品,其中:
所述度量包括响应于以下至少一项的益处部分:子集中所有所选择的事务之中的数据周期计数;在所述子集中的所有所选择的事务之中的存储体扩展;在所述子集中的所有所选择的事务之中每页的平均字节数;在所述子集中的所有所选择的事务之中的最小突发长度等效计数;以及所述子集中所有所选择的事务之中的事务计数;以及
所述度量包括响应于以下中的至少一个的成本部分:象限切换成本;以及相同的等级加法器成本。
37.根据权利要求30所述的计算机程序产品,其中所述指令配置所述内存控制器来通过配置所述存储器控制器执行以下来将所述子集中的所选择的所述一个子集中的所有事务发送到所述DRAM:
基于所述子集中的所选择的所述一个子集和与所述子集中的所选择的所述一个子集同一等级上的另一子集之间的公共存储体,确定所述子集中的所选择的所述一个子集的事务顺序;以及
以所确定的事务顺序,将所述子集中的所选择的所述一个子集中的所述存储器事务发送给所述DRAM。
38.根据权利要求30所述的计算机程序产品,其中所述指令将所述存储器控制器配置为通过进一步配置所述存储器控制器以在将与所述子集中的所选择的所述一个子集相关联的最终列地址选择(CAS)命令发送给所述DRAM之前,向所述子集中的所选择的所述一个子集添加一个或多个事务,将所述子集中的所选择的所述一个子集中的所有事务发送到所述DRAM。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/061,889 US11494120B2 (en) | 2020-10-02 | 2020-10-02 | Adaptive memory transaction scheduling |
US17/061,889 | 2020-10-02 | ||
PCT/US2021/046575 WO2022072077A1 (en) | 2020-10-02 | 2021-08-18 | Adaptive memory transaction scheduling |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116249973A true CN116249973A (zh) | 2023-06-09 |
CN116249973B CN116249973B (zh) | 2024-01-23 |
Family
ID=77726554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180064330.5A Active CN116249973B (zh) | 2020-10-02 | 2021-08-18 | 自适应存储器事务调度 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11494120B2 (zh) |
EP (1) | EP4222606A1 (zh) |
KR (1) | KR102588408B1 (zh) |
CN (1) | CN116249973B (zh) |
TW (1) | TW202215246A (zh) |
WO (1) | WO2022072077A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11838400B2 (en) * | 2019-11-19 | 2023-12-05 | International Business Machines Corporation | Image encoding for blockchain |
US11914863B2 (en) * | 2021-07-22 | 2024-02-27 | Rambus Inc. | Data buffer for memory devices with unidirectional ports |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070070669A1 (en) * | 2005-09-26 | 2007-03-29 | Rambus Inc. | Memory module including a plurality of integrated circuit memory devices and a plurality of buffer devices in a matrix topology |
CN101228514A (zh) * | 2005-06-23 | 2008-07-23 | 英特尔公司 | 存储器微块化请求重排序 |
US20120331197A1 (en) * | 2011-06-24 | 2012-12-27 | Michael Andrew Campbell | Memory controller and method of operation of such a memory controller |
CN106471485A (zh) * | 2014-06-02 | 2017-03-01 | 美光科技公司 | 用于在可扩展存储器系统协议中重新排序数据包传输的系统及方法 |
CN111133422A (zh) * | 2017-09-20 | 2020-05-08 | 高通股份有限公司 | 用于存储器管理单元的事务调度器 |
US20200210122A1 (en) * | 2018-12-31 | 2020-07-02 | Kyocera Document Solutions Inc. | Memory Control Method, Memory Control Apparatus, and Image Forming Method That Uses Memory Control Method |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7543102B2 (en) | 2005-04-18 | 2009-06-02 | University Of Maryland | System and method for performing multi-rank command scheduling in DDR SDRAM memory systems |
GB0519981D0 (en) * | 2005-09-30 | 2005-11-09 | Ignios Ltd | Scheduling in a multicore architecture |
US20070156960A1 (en) * | 2005-12-30 | 2007-07-05 | Anil Vasudevan | Ordered combination of uncacheable writes |
EP2450800B1 (en) | 2006-02-09 | 2014-04-23 | Google Inc. | Memory circuit system and method |
KR20110066526A (ko) * | 2009-12-11 | 2011-06-17 | 한국전자통신연구원 | 다중포트 메모리 콘트롤러 및 다중포트 캐시 |
WO2014183287A1 (en) | 2013-05-16 | 2014-11-20 | Advanced Micro Devices, Inc. | Memory system with region-specific memory access scheduling |
US10402120B2 (en) * | 2016-07-15 | 2019-09-03 | Advanced Micro Devices, Inc. | Memory controller arbiter with streak and read/write transaction management |
-
2020
- 2020-10-02 US US17/061,889 patent/US11494120B2/en active Active
-
2021
- 2021-08-18 CN CN202180064330.5A patent/CN116249973B/zh active Active
- 2021-08-18 KR KR1020237010163A patent/KR102588408B1/ko active IP Right Grant
- 2021-08-18 WO PCT/US2021/046575 patent/WO2022072077A1/en unknown
- 2021-08-18 EP EP21769577.4A patent/EP4222606A1/en active Pending
- 2021-08-26 TW TW110131600A patent/TW202215246A/zh unknown
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101228514A (zh) * | 2005-06-23 | 2008-07-23 | 英特尔公司 | 存储器微块化请求重排序 |
US20070070669A1 (en) * | 2005-09-26 | 2007-03-29 | Rambus Inc. | Memory module including a plurality of integrated circuit memory devices and a plurality of buffer devices in a matrix topology |
US20120331197A1 (en) * | 2011-06-24 | 2012-12-27 | Michael Andrew Campbell | Memory controller and method of operation of such a memory controller |
CN106471485A (zh) * | 2014-06-02 | 2017-03-01 | 美光科技公司 | 用于在可扩展存储器系统协议中重新排序数据包传输的系统及方法 |
CN111133422A (zh) * | 2017-09-20 | 2020-05-08 | 高通股份有限公司 | 用于存储器管理单元的事务调度器 |
US20200210122A1 (en) * | 2018-12-31 | 2020-07-02 | Kyocera Document Solutions Inc. | Memory Control Method, Memory Control Apparatus, and Image Forming Method That Uses Memory Control Method |
Also Published As
Publication number | Publication date |
---|---|
KR102588408B1 (ko) | 2023-10-11 |
EP4222606A1 (en) | 2023-08-09 |
TW202215246A (zh) | 2022-04-16 |
KR20230048560A (ko) | 2023-04-11 |
WO2022072077A1 (en) | 2022-04-07 |
US11494120B2 (en) | 2022-11-08 |
US20220107753A1 (en) | 2022-04-07 |
CN116249973B (zh) | 2024-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3155521B1 (en) | Systems and methods of managing processor device power consumption | |
JP4742116B2 (ja) | アウトオブオーダdramシーケンサ | |
CN116249973B (zh) | 自适应存储器事务调度 | |
US8380916B2 (en) | Control of page access in memory | |
US9703493B2 (en) | Single-stage arbiter/scheduler for a memory system comprising a volatile memory and a shared cache | |
US20130326113A1 (en) | Usage of a flag bit to suppress data transfer in a mass storage system having non-volatile memory | |
US20100241782A1 (en) | Memory access controller, systems, and methods for optimizing memory access times | |
US20210149594A1 (en) | Solid-state devices to reduce latency by employing instruction time slicing to non-volatile memory (nvm) sets mapped to independently programmable nvm planes | |
US8914571B2 (en) | Scheduler for memory | |
WO2013030628A1 (en) | Integrated circuit device, memory interface module, data processing system and method for providing data access control | |
US6735643B2 (en) | Electronic card with dynamic memory allocation management | |
JPWO2007110906A1 (ja) | データ処理装置 | |
CN105224258B (zh) | 一种数据缓冲区的复用方法与系统 | |
JP5058116B2 (ja) | ストリーミングidメソッドによるdmac発行メカニズム | |
KR101862799B1 (ko) | 메모리 컨트롤러 및 메모리 컨트롤 방법 | |
US20210173772A1 (en) | Memory data access apparatus and method thereof | |
US8452920B1 (en) | System and method for controlling a dynamic random access memory | |
US11106559B2 (en) | Memory controller and memory system including the memory controller | |
US11176039B2 (en) | Cache and method for managing cache | |
US20030163654A1 (en) | System and method for efficient scheduling of memory | |
JP2012003636A (ja) | 電子機器及びその制御方法 | |
US7707450B1 (en) | Time shared memory access | |
KR20150131946A (ko) | 트랜잭션을 갖는 전자 시스템 및 그것의 동작 방법 | |
CN115185866A (zh) | 一种内存控制器、访问内存的控制方法及存储设备 | |
CN117492843A (zh) | 一种基于npu的指令数据读取方法、装置及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |