CN113227957A - 基于缓存行地址在流中聚合命令 - Google Patents
基于缓存行地址在流中聚合命令 Download PDFInfo
- Publication number
- CN113227957A CN113227957A CN201980084845.4A CN201980084845A CN113227957A CN 113227957 A CN113227957 A CN 113227957A CN 201980084845 A CN201980084845 A CN 201980084845A CN 113227957 A CN113227957 A CN 113227957A
- Authority
- CN
- China
- Prior art keywords
- command
- address
- read
- write
- write address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000004931 aggregating effect Effects 0.000 title description 2
- 238000012545 processing Methods 0.000 claims abstract description 20
- 238000000034 method Methods 0.000 claims description 30
- 230000004044 response Effects 0.000 claims description 19
- 238000010586 diagram Methods 0.000 description 14
- 230000008901 benefit Effects 0.000 description 9
- 230000004048 modification Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 5
- 238000004880 explosion Methods 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 230000006835 compression Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000007704 transition 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
-
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- 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/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- 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/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- 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/0656—Data buffering arrangements
-
- 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
- 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
- G06F3/0674—Disk device
- G06F3/0677—Optical disk device, e.g. CD-ROM, DVD
-
- 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/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
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)
- Image Generation (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
操作组合器[240]接收具有读取地址、修改操作和写入地址的一系列命令。在某些情况下,命令具有串行依赖性,这些依赖性限制了它们的处理速度。操作组合器比较地址的兼容性、转换操作以打破串行依赖性,并将多个源命令组合为较少数量的聚合命令,所述聚合命令的执行速度比源命令快得多。操作组合器的一些实施方案接收包括一个或多个第一读取地址和第一写入地址的第一命令。操作组合器将所述第一读取地址和所述第一写入地址与存储在缓冲区中的第二命令的一个或多个第二读取地址和第二写入地址进行比较。操作组合器基于比较来选择性地组合第一命令和第二命令以形成聚合命令。
Description
背景技术
压缩用于减少表示一条信息的字节数,例如,减少通过接口传输信息所需的带宽量。典型的压缩技术使用向后引用来将当前数据块表示为指向先前数据块(或另一个空间或时间位置中的数据)的指针加上指示对先前数据块的修改的信息。例如,可以通过将第一地址处的三个字节的数据表示为指向与第一地址偏移一千字节(kB)的第二地址的指针加上指示修改(诸如向第二地址处的三个字节的数据添加一)的信息来压缩所述三个字节的数据。通过复制先前接收的数据(例如,第二地址处的三个字节的数据)并执行所指示的修改(诸如添加一)在目的地处重构数据。
附图说明
通过参考附图,可更好地理解本公开,并且它的许多特征和优点对本领域技术人员来说变得显而易见。在不同附图中使用相同附图标记来指示类似或相同项。
图1是根据一些实施方案的包括用于创建意图输出到显示器的视觉图像的图形处理单元(GPU)的处理系统的框图。
图2是根据一些实施方案的用于对在处理系统之内或之间进行传输的信息进行解码和解压缩的解码器的框图。
图3是根据一些实施方案的命令的框图。
图4是根据一些实施方案的表示缓存行的被输入到不同命令的各部分的掩码的合并的框图。
图5是根据一些实施方案的操作组合器的第一部分的框图。
图6是根据一些实施方案的操作组合器的第二部分的框图。
图7是根据一些实施方案的将匹配命令组合成聚合命令的方法的流程图。
具体实施方式
压缩导致用于压缩不同数据块的命令或操作之间的串行依赖性。例如,第一最新命令使用指向第二先前数据块的指针(在某些情况下加上对第二数据块的修改)来压缩数据块,该第二先前数据块通过将第二数据块表示为指向第三早先数据块的指针(在某些情况下加上对第三数据块的对应修改)的第二先前命令来压缩,依此类推。在某些命令流中交错了多个串行依赖性链。例如,可能存在一系列(高度可压缩)相同的命令,用于将先前的值(例如,DWord、短字或字节)复制到输出中。该系列可以与先前的值模式匹配,然后将其用于复制该模式以生成输出。然而,由于流中当前命令的源是流中先前命令的结果,因此需要串行地执行所标识的命令模式。如果复制的命令添加了值(诸如一)以生成下一个输出,例如,以生成一系列递增的值,则对命令的执行被进一步复杂化。
由诸如用于实现解压缩的命令之类的命令流执行的操作被组合以生成单个命令,该单个命令在诸如与缓存行相对应的32字节窗口之类的预定地址范围内操作。在流水线的前端接收的命令存储在缓冲区中。当每个新命令到达前端时,会将新命令与先前在前端接收并存储在缓冲区中的命令进行比较。如果新命令与先前接收的命令之一匹配,则将新命令和匹配的先前命令组合成聚合命令,该聚合命令存储在缓冲区中,以最终分派到流水线的后端。在一些实施方案中,新命令与匹配命令的比较包括比较新命令和匹配命令的写入地址或读取地址,以及确定写入地址和读取地址是否在相同的地址范围(诸如32字节窗口)内。聚合命令存储在缓冲区中,用于与随后接收的命令进行比较。缓冲区可以包括多个不同的聚合命令,诸如与串行依赖命令的交错链相关联的聚合命令。在一些实施方案中,组合新命令和匹配命令包括定义掩码,该掩码应用于与新命令和匹配命令相关联的地址范围中的数据,以标识由聚合命令操作的地址。例如,如果命令流包括对与当前地址的第一偏移处的数据进行操作的第一命令和对与当前地址的第二偏移处的数据进行操作的第二命令,则聚合命令包括基于第一偏移和第二偏移定义的掩码。
图1是根据一些实施方案的包括用于创建意图输出到显示器110的视觉图像的图形处理单元(GPU)105的处理系统100的框图。GPU 105执行存储在存储器115中的指令。存储器115的一些实施方案被实现为动态随机存取存储器(DRAM)。然而,存储器115也可使用包括静态随机存取存储器(SRAM)、非易失性RAM等的其他类型的存储器来实现。在所示的实施方案中,GPU 105通过总线120与存储器115通信。然而,GPU 105的一些实施方案通过直接连接或经由其他总线、桥、开关、路由器等与存储器115通信。GPU 105可将诸如所执行指令的结果的信息存储在存储器115中。例如,存储器115可存储将由GPU 105执行的来自程序代码的指令的副本125。GPU 105的一些实施方案包括独立地同时或并行执行指令的多个处理器核心、计算单元或固定功能电路(为清楚起见,未示出)。
处理系统100包括用于执行指令的中央处理单元(CPU)130。CPU 130的一些实施方案包括独立地同时或并行执行指令的多个处理器核心(为清楚起见,未示出)。CPU 130也连接到总线120,并且因此可通过总线120与GPU 105和存储器115通信。CPU 130可执行存储在存储器115中的诸如程序代码135的指令,并且CPU 130可将诸如所执行指令的结果的信息存储在存储器115中。CPU 130还能够通过向GPU 105发出绘制调用来发起图形处理。GPU105渲染对象以产生像素值,所述像素值被提供给显示器110,该显示器110使用像素值来显示表示所渲染对象的图像。
输入/输出(I/O)引擎140处理与显示器110以及处理系统100的其他元件(诸如键盘、鼠标、打印机、外部磁盘等)相关联的输入或输出操作。I/O引擎140耦接到总线120,使得I/O引擎140与GPU 105、存储器115或CPU 130通信。在所示的实施方案中,I/O引擎140读取存储在外部存储介质145(诸如光盘(CD)、数字视频光盘(DVD)等)上的信息。外部存储介质145存储表示用于实现诸如视频游戏的应用程序的程序代码的信息。外部存储介质145上的程序代码被写入到存储器115以形成将分别由GPU 105或CPU 130执行的指令或程序代码135的副本125。
处理系统100还包括处理器150,该处理器150用于执行加密、解密、压缩、解压缩和其他功能,这些功能用于为在处理系统100内传递、由处理系统100从外部实体接收或由处理系统100向外部实体传输的信息提供安全性。处理器150的一些实施方案解压缩包括文字数据、指示数据的相对位置的指针以及用于压缩或解压缩数据的命令的数据流。处理器150还可包括组合用于解压缩所接收的数据的操作的电路,如下所述。
在所示的实施方案中,尽管某些实体直接访问存储器115,但是直接存储器访问(DMA)逻辑155提供对存储器115的访问。DMA逻辑155生成地址并发起存储器读或写周期。例如,GPU 105、CPU 105、I/O引擎140和处理器150经由DMA逻辑155从存储器115读取信息并将信息写入存储器115。在一些实施方案中,处理器150和DMA逻辑155被实现为单个实体。DMA逻辑155的一些实施方案用于内存到内存数据传输或在GPU 105中的计算单元或CPU 130中的处理器内核之间传输数据。GPU 105或CPU 130可以与由DMA逻辑155执行的数据传输同时执行其他操作,这可以向GPU 105或CPU 130提供中断以指示该传输已完成。
图2是根据一些实施方案的用于对在处理系统之内或之间进行传输的信息进行解码和解压缩的解码器200的框图。解码器200在图1所示的处理系统100的一些实施方案中实现。例如,解码器200可以在处理器150或处理系统100内的其他实体中实现。解码器200被划分为前端205、中端210和后端215。解码器200包括高速缓存220(或与其相关联)。高速缓存220中的缓存行225(为了清楚起见,仅用附图标记示出了一个)存储由解码器200接收的压缩数据和通过执行来自比特流的命令产生的解压缩数据。缓存行225具有预定长度,诸如32字节。在一些实施方案中,高速缓存220被实现为缓冲区,并且缓存行225的范围是进入诸如外部DRAM或共享SRAM之类的存储器的部分的窗口。缓冲区不包括缓存行225的标签。
前端205接收压缩比特流,该压缩比特流包括存储在由物理地址指示的存储器位置中的文字数据、指示数据相对于当前地址的位置的指针以及包括输入到命令的数据的一个或多个源地址、通过该命令写入的数据的目标地址和(在某些情况下)对输入数据的修改(诸如向输入数据添加、附加或串接零)的命令。前端205对接收在压缩比特流中的命令进行解码。在一些实施方案中,前端205基于霍夫曼表对命令进行解码,该霍夫曼表使用在压缩比特流中的命令之前的信息来定义。前端205将解码命令提供给中端210。
中端210包括一组符号阵列230,其存储从前端205接收的符号,包括解码命令。中端210还包括命令汇编器235,该命令汇编器生成表示命令的信息。在一些实施方案中,命令汇编器235提供命令,该命令包括指示被复制并有条件地添加到先前接收的数据的文字数据的字节数的文字长度、指示从先前接收的数据复制的字节数的匹配长度以及指示从文字数据的偏移的结尾到先前接收的数据的偏移量的匹配偏移量。
操作(op)组合器240从命令汇编器235接收命令信息。操作组合器240的一些实施方案被实现为流通式流水线,该流通式流水线的深度根据满足计时要求的需要而被流水线化,除了从折叠的字节命令阵列中拉出单个后端命令的最后的串行化周期之外。操作组合器240包括缓冲区245,该缓冲区存储从命令汇编器235接收的命令以及由操作组合器240生成的聚合命令。操作组合器240聚合从命令汇编器235接收的与同一缓存行225相关联的命令。操作组合器240的一些实施方案接收命令,该命令包括由所接收的命令读取的数据的一个或多个源(或读)地址。该命令还包括第一命令写入的数据的目标(或写)地址。在一些情况下,读取和写入地址指示缓存行225的开始,并且命令包括偏移,该偏移指示用于在缓存行225内读取或写入数据的位置。操作组合器240将从命令汇编器235接收的读取和写入地址与存储在缓冲区245中的命令的读取和写入地址进行比较。如果读取和写入地址指示同一缓存行225,例如,接收的命令和缓冲的命令中的读取和写入地址相同,则发生匹配。操作组合器240响应于读取和写入地址之间的匹配而将接收的命令与缓冲的命令组合。
操作组合器240试图将尽可能多的命令分组折叠成尽可能少的聚合命令。然后将聚合命令提供给后端215。减少提供给后端215的聚合命令的数量优化了后端215的吞吐量,并且因此优化了外部存储器接口的吞吐量。后端215检查命令(包括操作组合器230生成的聚合命令)中的读取地址,并根据需要发出获取命令。后端215还弹出、对齐和扩展比特流中的文字数据。
图3是根据一些实施方案的命令300的框图。命令300由包括诸如图2所示的操作组合器240之类的操作组合器的解码器接收。命令300对存储在一个或多个缓存行中的数据进行操作,并将操作结果写入另一缓存行,该另一缓存行可以与包括输入数据的缓存行不同或可以不与其不同。在所示实施方案中,解码器同时处理与两个缓存行相关联的信息,例如,使得解码器可以解码使用不与缓存行边界对齐并因此跨越缓存行的输入数据的命令。两条缓存行与不同的存储体相关联。
因此,命令300包括地址305、310,其分别指示读取缓存行315、320。尽管读取地址305、310指示不同的缓存行315、320的起始地址,但是命令300的一些实施方案包括指示同一缓存行的读取地址305、310。命令300还可包括指示缓存行315、320中的任一个的单个读取地址。命令300还包括指示写入缓存行330的地址325。由命令300表示的操作生成的数据被写入到写入缓存行330中的位置。
偏移指示数据在缓存行315、320、330中的位置。偏移包括在命令300中。例如,命令300包括指示从缓存行315的开始到输入数据在缓存行315中的位置的偏移335的信息。又例如,命令300包括指示从缓存行320的开始到输入数据在缓存行320中的位置的偏移340的信息。还例如,命令300包括指示从缓存行330的开始到由命令300写入的位置的偏移345的信息。在一些实施方案中,从缓存行315、320中的分别由地址305、310和偏移335、340指示的位置读取的数据的部分由掩码表示。因此,将命令300与另一命令组合包括合并两个命令的掩码。
图4是根据一些实施方案的表示缓存行405的被输入到不同命令的各部分的掩码的合并400的框图。合并400通过图2中所示的操作组合器240的一些实施方案来执行,例如,当组合命令以形成聚合命令时。缓存行405被划分成部分410(为了清楚起见,仅由附图标记示出了一个),所述部分表示数据,诸如来自压缩比特流的压缩数据。部分410的大小是任意的,并且在某些情况下不同的部分具有不同的大小,例如,部分410的一个子集可以具有三个字节的大小,而部分410的另一个子集可以具有一个字节的大小。
为对应的命令生成掩码415、420。在一些实施方案中,基于指示由对应命令读取的部分410的位置的命令中的读取地址和对应偏移来生成掩码415、420。命令还包括指示部分410的大小的信息。在所示的实施方案中,掩码415指示第一命令从缓存行405中的位置425、430读取数据。掩码420指示第二命令从缓存行405中的位置435、440读取数据。尽管掩码415、420分别指示位置425、430、435、440,但是为其他命令生成的掩码可以指示单个位置、多个缓存行内的位置等。
掩码415、420被合并以形成由对应的聚合命令使用的聚合掩码445。在所示的实施方案中,聚合掩码445指示位置425、430、435、440,所述位置作为对聚合命令的输入被访问。使用聚合掩码445允许聚合命令同时访问位置425、430、435、440。
图5是根据一些实施方案的操作组合器的第一部分500的框图。第一部分500用于实现图2中所示的操作组合器240的一些实施方案。第一部分500包括地址分配电路505,该地址分配电路从诸如图2所示的前端205之类的前端接收命令集510。在一些实施方案中,如上所述,从提供由文字长度、匹配长度和匹配偏移量表示的输出地址的命令汇编器接收集合510。输出地址被重置为每个新的命令集510的一部分。递增电路511、512、513、514利用每个新的文字和匹配来使命令的输出地址递增。地址分配电路505存储正由操作组合器处理的当前地址515的副本。递增电路511-514的输出是写入地址、文字读取地址和匹配读取地址。在某些情况下,操作组合器随后使用绝对地址来比较命令与操作流水线的内存或缓存行的对齐方式。
地址分配电路505的一些实施方案实现以下伪代码以生成输出地址并更新当前地址:
LiteralWriteAddress=currentAddress
SubLiteralOffset=previousMatchOffset
如果(hasSubliterals)
SubLiteralAddress=currentAddress-SubLiteralOffset
MatchWriteAddress=currentAddress+LiteralLength
matchWrapsAtWriteStart=MatchLength>MatchOffset
如果(matchWrapsAtWriteStart)
MatchRead=MatchOffset
另外:
MatchRead=MatchLength
MatchAddress=currentAddress+LiteralLength-MatchOffset currentAddress+=LiteralLength+MatchLength
伪代码跨命令集510链接,这可能会生成八个子命令。
展平电路520将文字和匹配转换为读取和添加文字的公共命令。从地址分配电路505接收的输入命令分组生成多达两个命令。钳位电路521、522、523、524钳制从地址分配电路505接收的每个命令的匹配长度。在一些实施方案中,每个输入命令被转换成被钳制为写入的一个命令;还生成了两个连续的读取行。将所得的有效子命令从钳位电路521-524推入缓冲区,诸如N*2(8)写+N(4)读先进先出(FIFO)缓冲区。因此,如果存在一系列不带文字的匹配或不带匹配的文字,则可以将它们折叠为单个聚合命令。选择电路525从相同的行中选择下一个有效的N(4)。在一些实施方案中,来自选择电路525的输出包括以下的N(4)实例:
-ReadAddress
-ReadLength:匹配可以比WriteLength短。重复读取以填充输出。
-HasLiterals:如果为真,则子命令具有与输出写入长度一样多的文字。
-WriteAddress
-WriteLength
对齐电路530计算读取和写入所需的行。对齐电路530还展开需要写入多于一个缓存行的命令。在一些实施方案中,缓存行是相对于当前数据块的开始的对齐的32字节地址。如果写入限制为一行,则在一个读取操作中执行读取,因为每个写入行可以执行两次连续读取。如上所述,将输入命令转换为钳制为写入的一个命令,并生成两个连续的读取行。从展平电路520中的缓冲区(诸如FIFO缓冲区)弹出已完成并发送的命令。旋转并拉入后续命令,以填充缓冲区中的后续命令。
对齐电路530中的开始/结束电路535用于基于从展平电路520接收的读取和写入地址来计算读取和写入的开始和结束行。展开电路540用于展开写入行过渡,并提供展开的写入行、读取行以及将信息重复/旋转至拾取电路545,该拾取电路从相同的行中选择下一个有效的N(4)。在一些实施方案中,拾取电路545执行包括以下的操作:拾取到共享与第一命令相同的写入和读取行的之后的N(4)命令。例如,拾取电路545以类似于展平步骤的方式操作为N写+N读FIFO,其输出上具有仅发送具有相同的读取和写入行的命令的过滤器。具有未使用的读存储体的命令可以与使用读存储体的命令一起发送。拾取电路545的输出是:
-WriteLine:相对于块开头的32字节对齐地址
-WriteLength:上限到行的末尾,如果超过则展开
-WriteStart[4:0]:该行内的写入地址。
-ReadLine[2个存储体]:两个不一定连续的32B读取行
-存储体0具有偶数行。
-存储体1具有奇数行。
-ReadStart[5:0]:ReadAddress[5:0]
-ReadLength[5:0]:定义对于短读开始重复的位置,对于长读不执行任何操作。
-RepeatRotate[6:0]:针对读取其自身输出并需要重复源数据的长副本
对齐电路530的一些实施方案实现以下伪代码:
#计算并限制该行的操作。
{oWriteLine,writeStart[4:0]}=iWriteAddress
writeEnd=min(writeStart+iWriteLength,32)
length=writeEnd-writeStart
oWriteLength=length
#计算读取控制
readEnd=iReadAddress+iReadLength-1
firstReadLine=iReadAddress[:5]
lastReadLine=readEnd[:5]
repeatFitsInOneRead=(lastReadLine-firstReadLine)<2
如果(repeatFitsInOneRead或firstCycleOfCommand)
repeatRotate=0
#计算读取行
如果(repeatFitsInOneRead):
oReadLine[firstReadLine[0]]=firstReadLine
oReadLine[lastReadLine[0]]=lastReadLine
另外#走读取数据并在需要时开始新的读取
readBank=iReadAddress[5]
oReadLine[readBank]=iReadAddress[:5]
readLine2=(iReadAddress+length-1)[:5]
readBank2=readLine2[5]
oReadLine[readBank2]=readLine2
#检测并前进到下一个
NextWriteAddress=iWriteAddress+length
NextWriteLength=iWriteLength-length
如果(repeatFitsInOneRead):
oNextRepeatRotate=(repeatRotate+length)%iReadLength
另外:
oNextReadAddress+=length
oHasMore=(NextWriteLength>0)
只要两个命令在同一存储体上不具有不同的有效读取行,则输出ReadLines可以来自不同的命令。
图6是根据一些实施方案的操作组合器的第二部分600的框图。第二部分600用于实现图2中所示的操作组合器240的一些实施方案。第二部分600包括字节爆炸和收集电路605,其从诸如图5所示的对齐电路530之类的对齐电路接收输入命令610。在所示的实施方案中,字节爆炸和收集电路605接收四个输入命令610,并且电路605将输入命令610的读{地址、长度}和{写入地址、文字数}转换为每字节多路复用器控制。将每个输入命令610的WriteAddress[4:0]和WriteLength转换为字节掩码,诸如图4中所示的掩码415、420。针对读取和写入行与第一命令的读取和写入行匹配的每个命令,选择有效字节。有效字节不重叠。
字节爆炸和收集电路605的一些实施方案为输入命令610计算以下内容:
-每字节输出[0…31]:
○ReadSelect:读取行中从0到63的字节选择。MSB上的“奇数”
○ReadEnable:如果需要添加读取
○LiteralSelect:针对该写入行在该批中的文字选择。
■每个写入行中从0到总数(在具有同一写入行的所有命令中的NumLiterals)-1
○WriteEnable:是否启用此字节
○LiteralEnable:是否需要添加文字
-每个收集的命令的输出:
○NumLiterals:要弹出的文字数
■下一条命令共享同一写入行时为零
■写入行完成时写入行的文字总数
○WriteLine:相对于块开头的对齐的32字节地址
○ReadLine[存储体=0…1]
○ReadLineEnable[1:0]:如果需要读取
字节爆炸和收集电路605的一些实施方案实现以下伪代码:
如果(newWriteLine)
consumedLiterals=0
#计算第一文字ID
firstLiterals[0]=consumedLiterals
numLiterals[-1]=0
对于[0..3]中的命令
numLiterals[command]=iHasLiterals[command]?iWriteLength[command]:0
totalLiterals[command]=numLiterals[command-1]+numLiterals[command]
firstLiterals[command]=totalLiterals[command-1]+consumedLiterals
对于具有匹配行的每个命令
writeEnables[31:0]=(~(0xFFFFFFFF<<iWriteLength))<<iWriteStart
literalCount
对于0至31中的b
#选择适当的输入命令
command=WriteEnables[0..3][b]#是一个热多路复用器控制。
writeStart[4:0]=iWriteStart[command]
numLiterals[5:0]=iWriteLength[command]
oLiteralEnable=iHasLiterals[command]
firstLiteral=firstLiterals[command]
readLength=iReadLength[command]
repeatRotate=iReadRotate[command]
readStart=iReadStart[command]
byteInCommand=b-writeStart
oLiteralSelect[b][4:0]=oLiteralEnable?
byteInCommand+firstLiteral:31
oReadEnable=readLength>0
readOffset=(byteInCommand+repeatRotate)%readLength
oReadSelect[b][5:0]=(readStart+readOffset)
oWriteEnable[b]=writeEnables[0..3][b]!=0
isLastOfWriteLine=oWriteEnable[31]
totalConsumedLiterals=totalLiterals[LastOne(iCommandValids[0..3]]+
consumedLiterals
oNumLiterals=isLastOfWriteLine?totalConsumedLiterals:0
nextConsumedLiterals=totalConsumedLiterals
第二部分的一些实施方案实现字节爆炸和收集电路605的N(4)实例。这些实例对不同的命令进行操作,并移除检测图5所示的对齐块530的输出中命令之间的不兼容读取和写入行的过滤器。这种方法的优点是可以更快地执行字节爆炸和收集操作,但是会导致操作组合器的部分600中后续操作发生拥塞。
组合电路615存储预定数量的先前收集的命令,这些命令具有不兼容的写入或读取行,例如,不匹配的读取和写入行。组合电路615组合或聚合随后接收的与所存储的命令之一兼容(例如,匹配)的命令。当呈现新命令时,组合电路615可以将有效读取行与无效读取行合并。组合电路615还通过从所有兼容命令中选择有效字节数据来将命令与匹配的读取和写入行合并。如果组合电路615接收到具有不兼容的行的命令,则将最早的组合命令推出,并且将先前接收的命令下推以为新命令腾出空间。被推出的(潜在聚合或组合的)命令被提供给后端,诸如图2中所示的后端215。
组合电路615的一些实施方案存储两个先前收集的具有不匹配的读或写入地址的命令,例如,不兼容的命令。先前的命令存储在第一组合槽620和第二组合槽625中。新接收的命令存储在第一组合槽620中,并且最早的组合命令存储在第二组合槽625中。由于存在两个组合器620、625,它们可以具有相同的写入行但具有不同的读取行,所以组合电路615允许随后接收的命令通过与第一组合槽620中的命令组合而跳到第二组合槽625中的先前命令之前。组合电路615使用以下伪代码检查以确定向前跳是否会违反写后读一致性风险:
#检测并防止抢先现有行。
cantCombineToSlot1=False
对于0..1中的i
如果(iReadLine[i]==Combined[0].WriteLine):
cantCombineToSlot1=True
如果检测到写后读一致性风险,则不允许向前跳。
使用解析电路630解决组合或聚合命令内的依赖性。由解析电路630接收从组合电路615中推出的命令,该解析电路尝试例如使用字节可通过电路635的实例来解决聚合命令中的任何写后读依赖性。如果解析电路630不能解决依赖性,则将依赖性之前的字节作为单独的命令发送出去,然后解析电路630尝试解决其余字节中的依赖性。解析电路630的一些实施方案实现以下伪代码:
对于0..31中的字节
如果(iWriteEnable[byte])
readBank=iReadSelect[byte][5]
readLine=iReadLines[readBank]
readOverlapsWriteLine=iWriteLine==readLine
如果(readOverlapsWriteLine)
readByte=iReadSelect[byte][4:0]
如果(iWriteEnable[readByte])
readIsCopying=!iLiteralEnable[readByte]&&iReadEnable[readByte]
writeIsAdding=iLiteralEnable[byte]&&iReadEnable[byte]
writeIsCopying=!iLiteralEnable[byte]&&iReadEnable[byte]
#如果风险只是没有文字的匹配,
#只是替代地复制原始的读+文字
如果(writeIsCopying):
ReadSelect[byte]=ReadSelect[readByte]
LiteralSelect[byte]=LiteralSelect[readByte]
#如果风险是没有文字的读取上的读+文字
#替代地使用原始读取
另外,如果(writeIsAdding&&readIsCopying)ReadSelect[byte]=ReadSelect[readByte]
#否则会有读写风险
#其中添加不能被组合
另外
ByteCanGo[byte]=False
#等到所有内容都展开后,再弹出文字。
oNumLiterals=0
在上述伪代码中,为“假”的第一ByteCanGo[]通过后面的字节的考虑而使先前的字节无效,其结果是每个为假的ByteCanGo都会将命令分解为来自32字节源的多个命令。需注意,一个命令中可能存在许多可解决的循环依赖性,因此潜在地可能需要对这些循环依赖性中的许多进行实例化并按顺序进行流水线化以实现目标。
图7是根据一些实施方案的将匹配命令组合成聚合命令的方法700的流程图。方法700在图2所示的操作组合器240和图5和图6中所示的操作组合器的一些实施方案中实现。
在框705处,操作组合器例如从诸如图2中所示的命令汇编器230之类的命令汇编器接收一个或多个命令。所接收的命令包括一个或多个读取地址,这些读取地址指示该命令的源数据的位置。所接收的命令还包括写入地址,该写入地址指示由命令产生的目标数据的位置。在一些实施方案中,读取和写入地址指示诸如32字节缓存行之类的缓存行中的位置。
在框710处,操作组合器将所接收的命令中的读取和写入地址与操作组合器先前接收的缓冲的命令中的读取和写入地址进行比较。缓冲的命令可以是新接收的(例如,未组合或未聚合)命令,或通过组合两个或更多个先前接收的命令而生成的聚合命令。
在决策框715处,操作组合器确定所接收的命令中的读取和写入地址是否与缓冲的命令中的读取和写入地址匹配。在一些实施方案中,命令包括多达两个读取地址,这些读取地址指示存储在不同存储体中的两个缓存行。根据命令中读取地址的数量,操作组合器比较接收的命令和缓冲的命令中的一个或两个读取地址。如果读取和写入地址匹配,则方法700进行到框720。如果读取和写入地址不匹配,则方法700进行到决策框725。
在框720处,操作组合器组合接收的命令和缓冲的命令。在一些实施方案中,组合接收的命令和缓冲的命令包括合并与接收的命令和缓冲的命令相关联的掩码,诸如图4中所示的掩码415、420。方法700然后进行到框730。
在决策框725处,操作组合器确定是否还存在可与接收的命令进行比较的更多的缓冲的命令。如果存在附加的缓冲的命令,则方法700返回框710。如果不存在附加的缓冲的命令,则方法700进行到框730。
在框730处,将命令添加到缓冲区。如果接收的命令中的读或写入地址与任何缓冲的命令中的读取和写入地址都不匹配,则添加到缓冲区的命令就是接收的命令。如果接收的命令中的读或写入地址与缓冲的命令之一中的读取和写入地址匹配,则添加到缓冲区的命令就是组合或聚合命令。
如本文所公开的,一种方法包括:接收命令流,所述命令流包括第一命令,所述第一命令包括由所述第一命令读取的数据的至少一个第一读取地址和由所述第一命令写入的数据的第一写入地址;将所述至少一个第一读取地址和所述第一写入地址与存储在缓冲区中的第二命令的至少一个第二读取地址和第二写入地址进行比较;以及响应于所述至少一个第一读取地址匹配所述至少一个第二读取地址并且所述第一写入地址匹配所述第二写入地址而将所述第一命令和所述第二命令组合以形成第一聚合命令。在一个方面,接收所述第一命令包括响应于所述至少一个第一读取地址不匹配所述至少一个第二读取地址或所述第一写入地址不匹配所述第二写入地址而将所述第一命令存储在所述缓冲区中。在另一个方面,该方法包括:响应于所述至少一个第一读取地址匹配所述至少一个第二读取地址而将所述第一聚合命令存储在所述缓冲区中;以及响应于所述至少一个第一地址匹配所述至少一个第二地址而将所述第一命令从所述缓冲区移除。
在一个方面,所述至少一个第一读取地址、所述至少一个第二读取地址、所述第一写入地址和所述第二写入地址指示具有预定长度的缓存行。在另一个方面,该方法包括:基于所述第一命令中指示的至少一个第一偏移,标识所述缓存行的由所述第一命令读取的至少一个第一部分;以及基于所述第二命令中指示的至少一个第二偏移,标识所述缓存行的由所述第二命令读取的至少一个第二部分。在另一个方面,该方法包括:组合所述第一命令和所述第二命令以生成所述聚合命令包括生成指示所述至少一个第一部分和所述至少一个第二部分的掩码。在另一个方面,该方法包括:接收所述命令流,所述命令流包括第三命令,所述第三命令包括由所述第三命令读取的数据的至少一个第三读取地址和由所述第三命令写入的数据的第三写入地址;将所述至少一个第三读取地址和所述第三写入地址与存储在缓冲区中的第四命令的至少一个第四读取地址和第四写入地址进行比较;以及响应于所述至少一个第三读取地址匹配所述至少一个第四读取地址并且所述第三写入地址匹配所述第四写入地址而将所述第三命令和所述第四命令组合以形成第二聚合命令。
在另一个方面,所述第一命令和所述第二命令与所述第三命令和所述第四命令在所述命令流中交错。在另一个方面,该方法包括:确定所述第一命令和所述第二命令之间是否存在依赖性;并且组合所述第一命令和所述第二命令包括基于所述依赖性是否存在来选择性地组合所述第一命令和所述第二命令。
如本文所公开的,一种设备包括:缓冲区,所述缓冲区被配置为存储第一命令,所述第一命令包括由所述第一命令读取的数据的至少一个第一读取地址和由所述第一命令写入的数据的第一写入地址;以及操作组合器,所述操作组合器被配置为将所述至少一个第一读取地址和所述第一写入地址与存储在所述缓冲区中的第二命令的至少一个第二读取地址和第二写入地址进行比较,并且其中所述操作组合器被配置为响应于所述至少一个第一读取地址匹配所述至少一个第二读取地址并且所述第一写入地址匹配所述第二写入地址而将所述第一命令和所述第二命令组合以形成第一聚合命令。在一个方面,所述缓冲区被配置为响应于所述至少一个第一读取地址匹配所述至少一个第二读取地址而存储所述第一聚合命令,并且响应于所述至少一个第一地址匹配所述至少一个第二地址而将所述第一命令从所述缓冲区移除。在另一个方面,所述至少一个第一读取地址、所述至少一个第二读取地址、所述第一写入地址和所述第二写入地址指示具有预定长度的缓存行。
在一个方面,操作组合器被配置为:基于所述第一命令中指示的至少一个第一偏移,标识所述缓存行的由所述第一命令读取的至少一个第一部分,以及基于所述第二命令中指示的至少一个第二偏移,标识所述缓存行的由所述第二命令读取的至少一个第二部分。在另一个方面,所述操作组合器被配置为生成指示所述至少一个第一部分和所述至少一个第二部分的掩码。在另一个方面:所述缓冲区被配置为存储第三命令,所述第三命令包括由所述第三命令读取的数据的至少一个第三读取地址和由所述第三命令写入的数据的第三写入地址,
所述操作组合器被配置为将所述至少一个第三读取地址和所述第三写入地址与存储在缓冲区中的第四命令的至少一个第四读取地址和第四写入地址进行比较,并且所述操作组合器被配置为响应于所述至少一个第三读取地址匹配所述至少一个第四读取地址并且所述第三写入地址匹配所述第四写入地址而将所述第三命令和所述第四命令组合以形成第二聚合命令。
在一个方面,缓冲区被配置为存储第二聚合命令。在另一个方面,所述第一命令和所述第二命令与所述第三命令和所述第四命令交错。在另一个方面,所述操作组合器被配置为确定所述第一命令和所述第二命令之间是否存在依赖性,并且其中所述操作组合器被配置为基于所述依赖性是否存在来选择性地组合所述第一命令和所述第二命令。
如本文所公开的,一种方法包括:将用于压缩数据的命令流中的第一命令的第一读取和写入地址与所述流中的第二命令的第二读取和写入地址进行比较;以及基于所述第一读取和写入地址是否指示缓存行并且所述第二读取和写入地址是否指示同一缓存行来选择性地组合所述第一命令和所述第二命令以形成聚合命令。在一个方面,命令流用于压缩由图形处理单元生成的图形数据。
计算机可读存储介质可包括在使用期间可由计算机系统访问以将指令和/或数据提供到计算机系统的任何非暂时性存储介质或者非暂时性存储介质的组合。此类存储介质可包括但不限于光学介质(例如,压缩光盘(CD)、数字通用光盘(DVD)、蓝光光盘)、磁性介质(例如,软盘、磁带或磁性硬盘)、易失性存储器(例如,随机存取存储器(RAM)或高速缓存)、非易失性存储器(例如,只读存储器(ROM)或闪存存储器)或基于微机电系统(MEMS)的存储介质。计算机可读存储介质可嵌入在计算系统中(例如,系统RAM或ROM)、固定地附接到计算系统(例如,磁性硬盘驱动器)、可移除地附接到计算系统(例如,光盘或基于通用串行总线(USB)的快闪存储器),或者经由有线或无线网络耦接到计算机系统(例如,网络可存取存储装置(NAS))。
在一些实施方案中,上文所描述的技术的某些方面可由执行软件的处理系统的一个或多个处理器实现。软件包括存储或以其他方式有形地体现在非暂时性计算机可读存储介质上的一个或多个可执行指令集。软件可包括在由一个或多个处理器执行时操纵一个或多个处理器来执行上文所描述的一个或多个方面的指令和某些数据。非暂时性计算机可读存储介质可包括例如磁盘或光盘存储装置、固态存储装置(诸如快闪存储器、高速缓存、随机存取存储器(RAM)或一个或多个其他非易失性存储器装置)等。存储在非暂时性计算机可读存储介质上的可执行指令可以为源代码、汇编语言代码、对象代码或由一个或多个处理器解译或以其他方式执行的其他指令格式。
应注意,并不需要上文在一般描述中所描述的所有活动或元件,特定活动或装置的一部分可能是不需要的,并且可以执行一个或多个其他活动,或者可以包括除所描述的那些元件之外的元件。此外,列出活动的顺序不一定是执行所述活动的顺序。另外,已经参考具体实施方案描述了概念。然而,本领域中的普通技术人员会了解,可在不背离所附权利要求中所阐述的本公开范围的情况下,做出各种修改和改变。因此,本说明书和附图将被视为说明性而非限制性的,并且所有此类修改都意图被包括在本公开的范围内。
上文已经参照具体实施方案描述了相应益处、其它优点以及问题的解决方案。然而,所述益处、优点、问题解决方案以及可使任何益处、优点或解决方案出现或变得更突出的任何特征都不应被解释为是任何或所有权利要求的关键、必需或必要特征。此外,以上所公开的特定实施方案只是说明性的,因为所公开的主题可以按受益于本文教义的本领域的技术人员显而易知的不同但等效的方式来修改和实践。除了如所附权利要求中所描述的之外,并不意图限制本文所示的构造或设计的细节。因此,明显的是,以上所公开的特定实施方案可更改或修改,并且所有此类变化形式被认为在所公开的主题的范围内。因此,本文所寻求的保护正如所附权利要求中所陈述的。
Claims (20)
1.一种方法,其包括:
接收命令流,所述命令流包括第一命令,所述第一命令包括由所述第一命令读取的数据的至少一个第一读取地址和由所述第一命令写入的数据的第一写入地址;
将所述至少一个第一读取地址和所述第一写入地址与存储在缓冲区中的第二命令的至少一个第二读取地址和第二写入地址进行比较;以及
响应于所述至少一个第一读取地址匹配所述至少一个第二读取地址并且所述第一写入地址匹配所述第二写入地址而将所述第一命令和所述第二命令组合以形成第一聚合命令。
2.根据权利要求1所述的方法,其中接收所述第一命令包括响应于所述至少一个第一读取地址不匹配所述至少一个第二读取地址或所述第一写入地址不匹配所述第二写入地址而将所述第一命令存储在所述缓冲区中。
3.根据权利要求2所述的方法,其还包括:
响应于所述至少一个第一读取地址匹配所述至少一个第二读取地址而将所述第一聚合命令存储在所述缓冲区中;以及
响应于所述至少一个第一地址匹配所述至少一个第二地址而将所述第一命令从所述缓冲区移除。
4.根据权利要求1所述的方法,其中所述至少一个第一读取地址、所述至少一个第二读取地址、所述第一写入地址和所述第二写入地址指示具有预定长度的缓存行。
5.根据权利要求4所述的方法,其还包括:
基于所述第一命令中指示的至少一个第一偏移,标识所述缓存行的由所述第一命令读取的至少一个第一部分;以及
基于所述第二命令中指示的至少一个第二偏移,标识所述缓存行的由所述第二命令读取的至少一个第二部分。
6.根据权利要求5所述的方法,其中组合所述第一命令和所述第二命令以生成所述聚合命令包括生成指示所述至少一个第一部分和所述至少一个第二部分的掩码。
7.根据权利要求1所述的方法,其还包括:
接收所述命令流,所述命令流包括第三命令,所述第三命令包括由所述第三命令读取的数据的至少一个第三读取地址和由所述第三命令写入的数据的第三写入地址;
将所述至少一个第三读取地址和所述第三写入地址与存储在缓冲区中的第四命令的至少一个第四读取地址和第四写入地址进行比较;以及
响应于所述至少一个第三读取地址匹配所述至少一个第四读取地址并且所述第三写入地址匹配所述第四写入地址而将所述第三命令和所述第四命令组合以形成第二聚合命令。
8.根据权利要求7所述的方法,其中所述第一命令和所述第二命令与所述第三命令和所述第四命令在所述命令流中交错。
9.根据权利要求1所述的方法,其还包括:
确定所述第一命令和所述第二命令之间是否存在依赖性;并且
其中组合所述第一命令和所述第二命令包括基于所述依赖性是否存在来选择性地组合所述第一命令和所述第二命令。
10.一种设备,其包括:
缓冲区,所述缓冲区被配置为存储第一命令,所述第一命令包括由所述第一命令读取的数据的至少一个第一读取地址和由所述第一命令写入的数据的第一写入地址;以及
操作组合器,所述操作组合器被配置为将所述至少一个第一读取地址和所述第一写入地址与存储在所述缓冲区中的第二命令的至少一个第二读取地址和第二写入地址进行比较,并且
其中所述操作组合器被配置为响应于所述至少一个第一读取地址匹配所述至少一个第二读取地址并且所述第一写入地址匹配所述第二写入地址而将所述第一命令和所述第二命令组合以形成第一聚合命令。
11.根据权利要求10所述的设备,其中:
所述缓冲区被配置为响应于所述至少一个第一读取地址匹配所述至少一个第二读取地址而存储所述第一聚合命令,并且
响应于所述至少一个第一地址匹配所述至少一个第二地址而将所述第一命令从所述缓冲区移除。
12.根据权利要求10所述的设备,其中所述至少一个第一读取地址、所述至少一个第二读取地址、所述第一写入地址和所述第二写入地址指示具有预定长度的缓存行。
13.根据权利要求12所述的设备,其中所述操作组合器被配置为:
基于所述第一命令中指示的至少一个第一偏移,标识所述缓存行的由所述第一命令读取的至少一个第一部分,以及
基于所述第二命令中指示的至少一个第二偏移,标识所述缓存行的由所述第二命令读取的至少一个第二部分。
14.根据权利要求13所述的设备,其中所述操作组合器被配置为生成指示所述至少一个第一部分和所述至少一个第二部分的掩码。
15.根据权利要求10所述的设备,其中:
所述缓冲区被配置为存储第三命令,所述第三命令包括由所述第三命令读取的数据的至少一个第三读取地址和由所述第三命令写入的数据的第三写入地址,
所述操作组合器被配置为将所述至少一个第三读取地址和所述第三写入地址与存储在缓冲区中的第四命令的至少一个第四读取地址和第四写入地址进行比较,并且
所述操作组合器被配置为响应于所述至少一个第三读取地址匹配所述至少一个第四读取地址并且所述第三写入地址匹配所述第四写入地址而将所述第三命令和所述第四命令组合以形成第二聚合命令。
16.根据权利要求15所述的设备,其中所述缓冲区被配置为存储所述第二聚合命令。
17.根据权利要求16所述的设备,其中所述第一命令和所述第二命令与所述第三命令和所述第四命令交错。
18.根据权利要求10所述的设备,其中所述操作组合器被配置为确定所述第一命令和所述第二命令之间是否存在依赖性,并且其中所述操作组合器被配置为基于所述依赖性是否存在来选择性地组合所述第一命令和所述第二命令。
19.一种方法,其包括:
将用于压缩数据的命令流中的第一命令的第一读取和写入地址与所述流中的第二命令的第二读取和写入地址进行比较;以及
基于所述第一读取和写入地址是否指示缓存行并且所述第二读取和写入地址是否指示同一缓存行来选择性地组合所述第一命令和所述第二命令以形成聚合命令。
20.根据权利要求19所述的方法,其中所述命令流用于压缩由图形处理单元生成的图形数据。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/205,094 | 2018-11-29 | ||
US16/205,094 US11614889B2 (en) | 2018-11-29 | 2018-11-29 | Aggregating commands in a stream based on cache line addresses |
PCT/US2019/037657 WO2020112169A1 (en) | 2018-11-29 | 2019-06-18 | Aggregating commands in a stream based on cache line addresses |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113227957A true CN113227957A (zh) | 2021-08-06 |
Family
ID=70850170
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980084845.4A Pending CN113227957A (zh) | 2018-11-29 | 2019-06-18 | 基于缓存行地址在流中聚合命令 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11614889B2 (zh) |
EP (1) | EP3887932A4 (zh) |
JP (1) | JP7561125B2 (zh) |
KR (1) | KR20210086708A (zh) |
CN (1) | CN113227957A (zh) |
WO (1) | WO2020112169A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878521A (zh) * | 2023-01-17 | 2023-03-31 | 北京象帝先计算技术有限公司 | 命令处理系统、电子装置及电子设备 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102050679B (zh) * | 2011-01-14 | 2013-02-06 | 福建工程学院 | 一种秸杆粉基复合肥防结块剂 |
US12105984B2 (en) * | 2020-08-27 | 2024-10-01 | Micron Technology, Inc. | Bubble break register in semiconductor device |
US20210089236A1 (en) * | 2020-12-04 | 2021-03-25 | Intel Corporation | Network device intermediary for memory access requests |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5586294A (en) * | 1993-03-26 | 1996-12-17 | Digital Equipment Corporation | Method for increased performance from a memory stream buffer by eliminating read-modify-write streams from history buffer |
US20020087801A1 (en) * | 2000-12-29 | 2002-07-04 | Zohar Bogin | Method and system for servicing cache line in response to partial cache line request |
CN102377516A (zh) * | 2011-06-22 | 2012-03-14 | 钜泉光电科技(上海)股份有限公司 | 数据处理方法及其装置 |
CN102404564A (zh) * | 2010-09-03 | 2012-04-04 | Arm有限公司 | 利用相对和绝对增量值的数据压缩和解压缩 |
US20120084484A1 (en) * | 2010-09-30 | 2012-04-05 | Apple Inc. | Selectively combining commands for a system having non-volatile memory |
WO2012118743A1 (en) * | 2011-02-28 | 2012-09-07 | Apple Inc. | Efficient buffering for a system having non-volatile memory |
US20160004457A1 (en) * | 2014-07-02 | 2016-01-07 | International Business Machines Corporation | Buffered Automated Flash Controller Connected Directly to Processor Memory Bus |
CN107977321A (zh) * | 2016-10-24 | 2018-05-01 | 三星电子株式会社 | 存储器控制器的操作方法和包括其的存储装置的操作方法 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6249851B1 (en) * | 1998-08-25 | 2001-06-19 | Stmicroelectronics, Inc. | Computer system having non-blocking cache and pipelined bus interface unit |
JP2000132404A (ja) * | 1998-10-22 | 2000-05-12 | Matsushita Electric Ind Co Ltd | 命令列最適化装置 |
US6434639B1 (en) * | 1998-11-13 | 2002-08-13 | Intel Corporation | System for combining requests associated with one or more memory locations that are collectively associated with a single cache line to furnish a single memory operation |
GB9825999D0 (en) * | 1998-11-28 | 1999-01-20 | British Aerospace | A machine for laying up fabric to produce a laminate |
US7440469B2 (en) * | 2003-10-14 | 2008-10-21 | Broadcom Corporation | Descriptor write back delay mechanism to improve performance |
US8301844B2 (en) * | 2004-01-13 | 2012-10-30 | Hewlett-Packard Development Company, L.P. | Consistency evaluation of program execution across at least one memory barrier |
WO2005078579A1 (ja) * | 2004-02-12 | 2005-08-25 | Matsushita Electric Industrial Co., Ltd. | プログラム変換装置およびプログラム変換方法 |
US7328317B2 (en) * | 2004-10-21 | 2008-02-05 | International Business Machines Corporation | Memory controller and method for optimized read/modify/write performance |
US20080235484A1 (en) * | 2007-03-22 | 2008-09-25 | Uri Tal | Method and System for Host Memory Alignment |
US8041755B2 (en) * | 2007-06-08 | 2011-10-18 | Apple Inc. | Fast static rotator/shifter with non two's complemented decode and fast mask generation |
US8112595B1 (en) * | 2008-05-01 | 2012-02-07 | Marvell Semiconductor Israel Ltd. | Command cancellation channel for read—modify—write operation in a memory |
US9183145B2 (en) * | 2009-04-27 | 2015-11-10 | Intel Corporation | Data caching in a network communications processor architecture |
US8984182B2 (en) * | 2011-10-06 | 2015-03-17 | Marvell International Ltd. | SCSI I/O command aggregation |
JP6011194B2 (ja) | 2012-09-21 | 2016-10-19 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US9612972B2 (en) * | 2012-12-03 | 2017-04-04 | Micron Technology, Inc. | Apparatuses and methods for pre-fetching and write-back for a segmented cache memory |
GB2516864A (en) * | 2013-08-02 | 2015-02-11 | Ibm | Increased instruction issue rate and latency reduction for out-of-order processing by instruction chaining and collision avoidance |
US9092345B2 (en) * | 2013-08-08 | 2015-07-28 | Arm Limited | Data processing systems |
JP6493088B2 (ja) | 2015-08-24 | 2019-04-03 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
GB2546510B (en) | 2016-01-20 | 2018-09-26 | Advanced Risc Mach Ltd | Vector atomic memory update instruction |
US10552340B2 (en) * | 2017-02-28 | 2020-02-04 | Oracle International Corporation | Input/output direct memory access during live memory relocation |
US20190034306A1 (en) * | 2017-07-31 | 2019-01-31 | Intel Corporation | Computer System, Computer System Host, First Storage Device, Second Storage Device, Controllers, Methods, Apparatuses and Computer Programs |
US10678478B2 (en) * | 2018-08-24 | 2020-06-09 | Apple Inc. | Ordering memory requests based on access efficiency |
-
2018
- 2018-11-29 US US16/205,094 patent/US11614889B2/en active Active
-
2019
- 2019-06-18 WO PCT/US2019/037657 patent/WO2020112169A1/en unknown
- 2019-06-18 EP EP19888288.8A patent/EP3887932A4/en active Pending
- 2019-06-18 KR KR1020217018960A patent/KR20210086708A/ko active IP Right Grant
- 2019-06-18 JP JP2021530941A patent/JP7561125B2/ja active Active
- 2019-06-18 CN CN201980084845.4A patent/CN113227957A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5586294A (en) * | 1993-03-26 | 1996-12-17 | Digital Equipment Corporation | Method for increased performance from a memory stream buffer by eliminating read-modify-write streams from history buffer |
US20020087801A1 (en) * | 2000-12-29 | 2002-07-04 | Zohar Bogin | Method and system for servicing cache line in response to partial cache line request |
CN102404564A (zh) * | 2010-09-03 | 2012-04-04 | Arm有限公司 | 利用相对和绝对增量值的数据压缩和解压缩 |
US20120084484A1 (en) * | 2010-09-30 | 2012-04-05 | Apple Inc. | Selectively combining commands for a system having non-volatile memory |
WO2012118743A1 (en) * | 2011-02-28 | 2012-09-07 | Apple Inc. | Efficient buffering for a system having non-volatile memory |
CN102377516A (zh) * | 2011-06-22 | 2012-03-14 | 钜泉光电科技(上海)股份有限公司 | 数据处理方法及其装置 |
US20160004457A1 (en) * | 2014-07-02 | 2016-01-07 | International Business Machines Corporation | Buffered Automated Flash Controller Connected Directly to Processor Memory Bus |
CN107977321A (zh) * | 2016-10-24 | 2018-05-01 | 三星电子株式会社 | 存储器控制器的操作方法和包括其的存储装置的操作方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115878521A (zh) * | 2023-01-17 | 2023-03-31 | 北京象帝先计算技术有限公司 | 命令处理系统、电子装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
JP7561125B2 (ja) | 2024-10-03 |
US20200174697A1 (en) | 2020-06-04 |
EP3887932A1 (en) | 2021-10-06 |
KR20210086708A (ko) | 2021-07-08 |
JP2022510281A (ja) | 2022-01-26 |
EP3887932A4 (en) | 2022-08-10 |
WO2020112169A1 (en) | 2020-06-04 |
US11614889B2 (en) | 2023-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113227957A (zh) | 基于缓存行地址在流中聚合命令 | |
US8762609B1 (en) | System and method for multiengine operation with super descriptor in SAS/SATA controller wherein portion of super-descriptor is executed without intervention of initiator | |
US9940230B2 (en) | Compression and decompression of data at high speed in solid state storage | |
CN109726163B (zh) | 一种基于spi的通信系统、方法、设备和储存介质 | |
EP3493084A1 (en) | Method for processing data in bloom filter and bloom filter | |
US8516189B2 (en) | Software technique for improving disk write performance on raid system where write sizes are not an integral multiple of number of data disks | |
US10044370B1 (en) | Lossless binary compression in a memory constrained environment | |
CN112514264A (zh) | 数据压缩、解压方法及相关装置、电子设备、系统 | |
US8407378B2 (en) | High-speed inline data compression inline with an eight byte data path | |
US20150301886A1 (en) | Information processing apparatus, system, and information processing method | |
JP7441045B2 (ja) | Gpu並列ハフマン復号化 | |
KR20220049522A (ko) | 다중 데이터 스트림을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 압축 해제 엔진 | |
KR20170040343A (ko) | 적응형 레이트 압축 해시 프로세싱 디바이스 | |
JP2007034392A (ja) | 情報処理装置及びデータ処理方法 | |
US10103747B1 (en) | Lossless binary compression in a memory constrained environment | |
US20190220223A1 (en) | Buffering and compressing data sets | |
US10515036B2 (en) | Bit manipulation capable direct memory access | |
US11418212B2 (en) | Parallel decoding techniques | |
JP2021129143A (ja) | デコード装置 | |
JP4427393B2 (ja) | 半導体集積回路 | |
US10733199B2 (en) | Optimizing data conversion using pattern frequency | |
EP2757695A1 (en) | Method and apparatus for encoding and decoding a data stream | |
JP5244195B2 (ja) | ネットワーク・アダプタ内で部分ワード書き込みを実施するための方法、システム及びコンピュータ・プログラム | |
US20230342206A1 (en) | Hardware-based generation of uncompressed data blocks | |
CN112749134B (zh) | 用于位图转换的方法、设备和计算机可读存储介质 |
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 |