CN102985910B - 对无用存储单元收集的系统和方法 - Google Patents
对无用存储单元收集的系统和方法 Download PDFInfo
- Publication number
- CN102985910B CN102985910B CN201180020912.XA CN201180020912A CN102985910B CN 102985910 B CN102985910 B CN 102985910B CN 201180020912 A CN201180020912 A CN 201180020912A CN 102985910 B CN102985910 B CN 102985910B
- Authority
- CN
- China
- Prior art keywords
- instruction
- garbage collection
- cpu
- processing unit
- subregion
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000012545 processing Methods 0.000 claims abstract description 103
- 238000003860 storage Methods 0.000 claims description 24
- 230000004044 response Effects 0.000 claims description 17
- 238000005516 engineering process Methods 0.000 abstract description 8
- 230000008569 process Effects 0.000 description 30
- 238000009826 distribution Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 8
- 238000002203 pretreatment Methods 0.000 description 7
- 238000004040 coloring Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 238000009877 rendering Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000001427 coherent effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000008034 disappearance Effects 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000003990 capacitor Substances 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 238000013481 data capture Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 201000006549 dyspepsia Diseases 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003471 mutagenic agent Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000011079 streamline operation Methods 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
- Stored Programmes (AREA)
- Advance Control (AREA)
Abstract
本发明公开了一种用于有效无用存储单元收集的系统和方法。通用中央处理单元(CPU)根据分代无用存储单元收集技术对分配的堆进行分区。代被分成固定大小的卡。所述CPU在应用程序执行期间标记自上一次无用存储单元收集以来的合格脏卡的指示。当所述CPU检测到下一次无用存储单元收集起始条件被满足时,所述CPU向专用处理单元(SPU)发送与一个或多个卡根地址的确定相对应的通知,每个卡根地址对应于所述标记指示之一。所述SPU具有单指令多数据(SIMD)并行架构,并且可为图形处理单元(GPU)。所述SPU可利用其SIMD核心的并行架构来同时计算多个卡根地址。然后,所述SPU将这些地址发送至所述CPU以供无用存储单元收集算法中使用。
Description
背景技术
技术领域
本发明涉及计算系统,并且更具体地涉及计算机无用存储单元收集机制。
相关领域的描述
当软件程序员根据一种算法或方法编写应用程序以执行工作时,程序员通常会利用变量来引用临时数据和结果数据。可称为数据对象的此数据要求在计算机存储器中分配空间。在一个或多个应用程序的执行期间,可用于数据对象的分配的计算机存储器的未分配或空闲的量可减少至次优水平。空闲空间量的这种减少可使系统性能降低,并且最终可能不存在任何可用空闲空间。可在应用程序执行期间使用自动存储器管理技术,例如无用存储单元收集。无用存储单元收集维持足够的空闲空间,识别并移除内存泄漏,将可获得的数据对象中的一些或全部复制到新存储区中,根据需要更新对数据对象的引用等。
无用存储单元收集算法在带来益处的同时也有一些设计代价。例如,无用存储单元收集算法通常包括若干步骤,并且可能比较耗时。因此,当无用存储单元收集算法执行其任务时,计算系统可能会经历暂停。如果无用存储单元收集程序实时运行或在执行应用程序的同时运行,则无用存储单元收集暂停的时长可能是不可接受的。此外,该算法可能在其执行期间利用高速缓存空间。高速缓存空间的使用又可能导致有用信息被排除,一旦该算法完成就必须重新获取该信息。
对存储器的一部分而非整个存储器执行无用存储单元收集算法的步骤可减少与无用存储单元收集相关的暂停时间。此外,研究已表明在许多软件应用程序中大多数数据对象存活时间不长。因此,对于上述无用存储单元收集的问题的一个解决方案包括对具有最新数据对象的存储器的一部分执行无用存储单元收集算法。一种此类技术为分代无用存储单元收集。
在确定运行无用存储单元收集时,执行一些预处理步骤,然后才进行无用存储单元收集。例如,在此时计算指向较新数据对象的较旧数据对象的地址。无用存储单元收集算法随后使用这些地址以将所有可获得的数据对象定位。随着地址的数量和大小的增加,用于地址计算的时间也增加,并且可能减少分代无用存储单元收集技术的有益效果。
鉴于以上情况,需要用于进行计算机无用存储单元收集的有效方法和机制。
发明概述
考虑了用于进行有效无用存储单元收集的系统和方法。
在一个实施方案中,处理节点包括通用中央处理单元(CPU)、专用处理单元(SPU)和存储器。在一个实施方案中,SPU具有单指令多数据(SIMD)并行架构,并且可为图形处理单元(GPU)。CPU进行操作以将存储器内的分配的堆分成多个区域。在各个实施方案中,这些区域可按照龄期来排序或识别,并且可称为“代”。此外,每个区域均可包括多个子区域或“卡”。在一些实施方案中,每个卡均具有固定大小,例如128个字节、4KB虚拟页或其它大小。在应用程序执行期间,CPU响应于检测到对存储于卡中的数据对象的修改有资格作为潜在跨代引用来标记与特定卡相对应的指示。例如,在一个实施方案中,可修改存储于数据对象中的指针值以指向存储于另一代中的数据对象。在另一个实施方案中,当修改指针值以指向存储于最新代中的数据对象时,对相应指示进行标记。可能存在且可考虑其它资格条件。
在各个实施方案中,CPU可检测到无用存储单元收集起始条件被满足,例如最新代具有小于预定阈值的空闲存储空间。响应于确定无用存储单元收集起始条件被满足,CPU将指示SPU将执行预定无用存储单元收集相关任务的通知发送至SPU。在一个实施方案中,SPU可确定一个或多个卡根地址,每个卡根地址均对应于标记的指示之一。SPU可利用SIMD核心的并行架构来同时计算多个卡根地址。当SPU执行无用存储单元收集相关任务时,CPU可继续处理其它任务。因此,可在CPU不引起无用存储单元收集暂停的情况下确定这些卡根地址。另外,这些任务无需CPU的高速缓存子系统。因此,可提高总体系统性能。在各个实施方案中,第一处理节点的CPU可经由网络连接将上述通知发送至位于第二处理节点中的SPU。然后,如上所述,SPU可确定卡根地址,以便卸载CPU。
这些和其它实施方案将通过参考以下描述和附图来进一步理解。
附图简述
图1为包括具有并行架构的专用处理单元的示例性处理节点的一个实施方案的总体框图。
图2为进程地址空间的一个实施方案的总体框图。
图3为分区存储器的一个实施方案的总体框图。
图4为一种通过具有并行架构的专用处理单元来进行有效无用存储单元收集的方法的一个实施方案的流程图。
图5为一种用于计算卡根地址以供无用存储单元收集算法中使用的方法的一个实施方案的流程图。
图6为通用处理器核心的一个实施方案的总体框图。
图7为图形处理器核心的一个实施方案的总体框图。
图8为示出计算系统的一个实施方案的总体框图。
虽然本发明可具有各种修改和替代形式,但是具体实施方案以举例的方式在附图中示出,并且在本文中被详细描述。然而,应当理解,附图及其详细描述并不旨在使本发明受限于所公开的特定形式,而相反地,本发明应涵盖由所附权利要求所限定的本发明的精神和范围内的所有修改、等同形式和替代形式。
具体实施方式
在以下描述中,阐述了许多具体细节,以提供对本发明的充分理解。然而,本领域的普通技术人员应意识到,本发明可在无需这些具体细节的情况下实施。在某些情况下,未详细示出所熟知的电路、结构和技术,以避免使本发明难以理解。
参照图1,示出了带有具有并行架构的专用处理单元(SPU)的示例性处理节点110的一个实施方案。处理节点110可包括存储器控制器(MC)120;接口逻辑140;一个或多个处理单元115,其可包括一个或多个处理器核心112和相应高速缓冲存储器子系统114;包处理逻辑116;以及共享高速缓冲存储器子系统118。此外,处理节点110可包括一个或多个专用处理单元(SPU)170。SPU170可包括具有并行架构的专用处理器核心172,例如单指令多数据(SIMD)核心。SIMD核心的示例包括图形处理单元(GPU)、数字信号处理(DSP)核心或其它。
在一个实施方案中,处理节点110可包括作为图形处理单元(GPU)来实施的SPU170,以替代或补充到第二通用处理单元115(未示出)。GPU170可包括一个或多个图形处理器核心172和数据存储缓冲器174。GPU可为用于个人计算机、工作站或视频游戏控制台的专用图形呈现装置。在一个实施方案中,处理节点110的所述功能包括在单个集成电路上。
处理器核心112包括用于根据预定义通用指令集来执行指令的电路。例如,可选择x86指令集架构。或者,可选择Alpha、PowerPC或任何其它通用指令集架构。一般来讲,处理器核心112分别为了数据和指令访问高速缓冲存储器子系统114。如果请求的块在高速缓冲存储器子系统114或共享高速缓冲存储器子系统118中未找到,则可生成读请求,并且将其传送至位于缺失块映射到的节点内的存储器控制器(MC)。
现代GPU170在处理和显示计算机图形方面非常有效,并且对于一系列复杂算法而言,其高度并行的结构使其比通用中央处理单元(CPU)(例如处理单元115)更有效。GPU通常执行图形和视频所需的计算,而CPU执行不止图形的更多系统进程的计算。常规的GPU170使用非常广泛的单指令多数据(SIMD)架构,以在图像渲染应用程序中实现高吞吐量。此类应用程序通常需要对大量对象(顶点或像素)执行相同的程序,例如顶点着色器或像素着色器。因为每个对象独立于其它对象被处理,但使用相同的操作序列,所以SIMD架构可提供可观的性能增强。
GPU170中的发展包括对可编程着色器的支持,这些可编程着色器可操纵顶点和纹理、用于减少混叠的过采样和内插技术以及极高精度的色彩空间。这些计算中的很多涉及矩阵和矢量运算。因此,已考虑将GPU119用于非图形计算中。
在一个实施方案中,为了管理存储器,CPU执行分代无用存储单元收集(GC)算法的步骤;见H.Lieberman等,AReal-TimeGarbageCollectorBasedontheLifetimeofObjects,CommunicationsoftheACM26(6),第419-429页。CPU115在执行分代无用存储单元收集算法之前可利用卡标记技术的预处理步骤,见P.Wilson等,Acard-markingschemeforcontrollingintergenerationalreferencesingeneration-basedGConstockhardware,SIGPLANNotices24(5),第87-92页。为了减少无用存储单元收集暂停时间,算法可在存储器的一部分而非整个存储器上运行。在一个实施方案中,在存储器中的分配的堆可分成区域。这些区域可称为“代”。在一个实施方案中,每个代对应于其中所包含的数据对象的龄期。在一个实施方案中,无用存储单元收集算法可在仅一个或多个最新代上运行。此技术可减少无用存储单元收集期间的无用存储单元收集暂停时间和高速缓存的利用。
位于一个或多个较新代中的第一数据对象可被较旧代中的第二数据对象引用。该较旧代不包括在一个或多个较新代之内。因为仅对这一个或多个较新代执行无用存储单元收集,所以该引用可能丢失。如果发生这样的丢失,则可能错误地确定位于较新代中的第一数据对象为不可获得。经确定为不可获得的数据对象从存储器中被移除。因此,采取步骤以确定引用较新代中的数据对象的位于较旧代中的任何数据对象的地址。这些步骤作为分代无用存储单元收集技术的一部分来执行,并且随后被进一步描述。
在一个实施方案中,每个代被分成子区域。这些子区域可称为“卡”。在一个实施方案中,每个卡对应于其中所包含的数据对象的龄期。在一个实施方案中,无用存储单元收集算法可在位于较新代中的每个卡上运行。无用存储单元收集可仅在较旧代中的标记的卡上运行。在应用程序执行期间,在一个实施方案中,当确定卡包含指向位于一个或多个最新代中的另一个数据对象的数据对象时,可对该卡进行标记。在另一个实施方案中,当确定卡包含已修改的数据对象时,可对该卡进行标记。可能存在且可考虑其它卡标记条件。在一个实施方案中,在执行无用存储单元收集算法之前执行的预处理步骤可确定标记的卡的地址。随后,在算法中,执行步骤以确定引用较新代中的数据对象的位于较旧代中的任何数据对象的地址。
再参照图1,在一个实施方案中,当CPU115检测到分代GC起始条件时,CPU115可向GPU170发送通知。响应于接收到该通知,GPU170可计算地址。这些地址可对应于较旧代中的卡,这些代可能存储指向较新代中的卡的指针值。这些地址可称为根地址或卡根地址。
上述根地址的计算可为可高度并行化的任务。与CPU相比,GPU170可更有效地执行可高度并行化的任务。此外,可执行GPU170所执行的工作,同时CPU115继续执行一个或多个软件应用程序。因此,执行用于获得根地址的计算步骤不会产生GC暂停。通过消除预处理步骤的GC暂停,可提高总体系统性能。下面将进一步描述用于执行这些预处理步骤的CPU115与GPU170之间的协议的更多细节。
在一个实施方案中,GPU170可位于视频卡上。在另一个实施方案中,GPU170可集成于母板上。在又一个实施方案中,处理节点110的所述功能可包括在单个集成电路上。在该实施方案中,CPU115和GPU170可为来自不同设计中心的专有核心。另外,GPU170现在可能能够经由来自处理节点110的存储器控制器120来直接访问本地存储器114和118以及主存储器,而非经由接口140在芯片外进行存储器访问。该实施方案可减少GPU170的存储器访问的等待时间,这可转化成更高的性能。
继续描述图1中处理节点110的组件,高速缓存子系统114和118可包括被配置成存储数据块的高速缓存存储器。高速缓冲存储器子系统114可集成于相应处理器核心112内。或者,根据需要,高速缓冲存储器子系统114可耦接至后部高速缓存配置或内联配置中的处理器核心114。更进一步地,高速缓冲存储器子系统114可作为高速缓存的一个层次结构来实施。如果需要,更靠近处理器核心112(在层次结构内)定位的高速缓存可集成于处理器核心112中。在一个实施方案中,高速缓冲存储器子系统114各自均表示L2高速缓存结构,而共享高速缓存子系统118表示L3高速缓存结构。高速缓冲存储器子系统114和共享高速缓冲存储器子系统118均可包括耦接至相应高速缓存控制器的高速缓冲存储器。
一般来讲,包处理逻辑116被配置成对在处理节点110耦接到的链路上所接收的控制包作出响应、响应于处理器核心112和/或高速缓冲存储器子系统114来生成控制包、响应于存储器控制器120为服务所选择的事务来生成探测命令和响应包以及通过接口逻辑140将包路由到其它节点(对于这些包,节点110为中间节点)。接口逻辑140可包括用以接收包且使这些包与包处理逻辑116所使用的内部时钟同步的逻辑。
参照图2,示出了总体进程地址空间200的一个实施方案。现代计算系统使用虚拟存储器,以便在多个进程之间共享较少量的物理存储器。地址空间200可为相连虚拟地址空间,其中虚拟地址和物理地址之间的映射确定了值210-250在物理存储器或磁盘中的位置。多处理器系统上可例如使处理节点110的资源的再现的操作系统可为软件应用程序分配存储器的区域。当编译软件应用程序时,应用程序可包括多个进程。在此实施方案中,每个进程均可在应用程序执行之前拥有其自身的资源,例如存储器的映像或者指令和数据的实例。另外,每个进程均可包含进程特定信息,例如处理代码、数据且可能处理堆和栈的地址空间;诸如栈指针、通用和浮点寄存器、程序计数器及其它等数据和控制寄存器中的变量;以及诸如stdin、stdout及其它等操作系统描述符,以及诸如处理器所有者和进程权限集合等安全属性。
一般而言,对于给定软件应用程序,操作系统的内核为该应用程序设置地址空间200,将该应用程序的代码210加载到存储器中,为该程序设置栈250,分支到应用程序代码210内的给定位置,并且开始应用程序代码210的执行。在一些实施方案中,并非所有代码210和数据220都需在开始执行之前存储于物理存储器中。软件应用程序如何使用指令集架构(ISA)受编译器与高级别语言的交互的影响。例如,对于软件应用程序的开发,需要知道如何分配变量和为其定址以及需要多少个寄存器来分配变量。在一个实施方案中,静态数据220、栈250和堆230确定数据分配。
静态数据220可用于分配静态声明的对象,例如全局变量和常量。大多数这些对象可为阵列。栈250可用于分配标量变量而非阵列,例如当前被调用的函数中的局部变量和参数。栈250可分别在过程调用或返回时增长和收缩。堆230可用于分配通过指针访问的动态对象,并且通常不为标量变量。堆230可用于通过在串/列表操作期间存储临时串或列表的内容来降低复制串和列表内容的频率。堆不受函数调用的返回的影响。
在源代码中示出栈250和堆230的使用的方法的一个简单示例如下:
以上示例具有称为Students的类,并且Students类包括两个公共字段:name(名字)和score(分数)。Students类通过Classroom方法来访问。在Classroom方法中,创建了属于类型Students的名为jeff的对象。该对象的名字和分数字段被初始化。在一个实施方案中,在执行该代码示例之后,栈250包含调入例如图2中的条目252j的Classroom方法。对象jeff的条目可包括在图2中的条目252k中。对象jeff可不指向某个值,而是其可引用堆230中的对象232h。对象232h可存储为一个类或引用类型的Students对象。对象232h的字段234a可存储name字段值,而字段234b可存储score字段值。
在Classroom方法已完成执行之后,栈250可使条目252j出栈,因为该条目仅包含关于正在执行或将要执行的代码的信息。因为该示例中未剩下要执行的内容(其可表示整个应用程序的仅一部分),所以栈250可具有被调整为当前指向条目252i而非条目252j的栈指针。另一方面,堆仍然可包含对象232h的字段234a和234b中的数据。
随后,可执行无用存储单元收集算法,以便从堆230中清除未被引用的(未使用)的数据。例如,可从对象232h中移除上述Students类,因为它将不再被使用。在一个实施方案中,无用存储单元收集算法包括以下操作中的一个或多个:扫描系统存储器、标记所有可获得的数据对象(这可能需要递归搜索)、删除经确定为不可用或不可获得的数据对象以及移动数据对象以占用存储器中的相连位置。该最后一个步骤可称为压缩。
虽然未在上述示例中使用,但在图2中示出了在堆230中对象232b被对象232g中的指针引用。当执行无用存储单元收集以清除未使用的数据时,通过无用存储单元收集程序算法使有用数据仍保持在存储器中。在一些实施方案中,无用存储单元收集算法可产生需保留以供以后应用程序使用的数据对象的列表。该列表的产生可从根或根地址开始。根地址可对应于静态数据220中的静态全局指针、栈250中的指针以及由CPU中的存储器地址指向的堆230中的任何数据对象。在GC算法进行递归搜索期间,可确定对象232g为可获得的。在一个示例中,对象232b可由于被对象232g中的指针引用而可为可获得的。可获得的对象可被定义为通过根地址定位的对象或被此前确定为可获得的对象引用的对象。
在一个实施方案中,利用了周期性地执行无用存储单元收集的无用存储单元收集算法。一个周期开始于收集程序决定(或被通知)需要回收内存时。例如,当系统内存不足时,可启动无用存储单元收集。无用存储单元收集算法试图回收无用存储单元或绝不会被应用程序再次访问或改变的对象所使用的内存。可得出语法无用存储单元(程序不可能获得的数据对象)与语义无用存储单元(程序实际上绝不会再次使用的数据对象)之间的一个区别。访问存储器的软件线程可称为存取器(mutator)。已经开发出且可使用许多种不同的无用存储单元收集技术。
在一些情况下,无用存储单元收集系统通常经历了各种程度的过多暂停时间的问题。该问题出现在实时执行无用存储单元收集(即与运行于一个或多个处理器上的其它正在执行的程序的执行同时进行)时。例如,假定系统包含多个存取器线程和单个无用存储单元收集线程。如果这些存取器正被用于多媒体应用程序,则这些线程可能需要以某个速率来提供该应用程序,例如电影。不能承受可观的GC暂停时间的代价的一些关键应用程序的示例包括网上股票交易、电子商务应用程序以及多媒体应用程序(例如电影和视频游戏)。
现转向图3,示出了分区的存储器300的一个实施方案。分代无用存储单元收集(GC)可利用存储器中可分成代360a、360b、360c等的分配的堆230。在各个实施方案中,操作系统或其它软件可执行分区,并且确定代360a、360b和360c的大小。此外,代360a、360b和360c中的每个均可分成子区域。这些子区域可称为卡。例如,代360a可分成卡350a、350b、350f等。在一个实施方案中,卡350a、350b和350f中的每个均具有相同的固定大小,例如128个字节、4千字节(KB)虚拟页或其它大小。
在一个实施方案中,堆230中的卡350a-350g中的每个均存储一个或多个数据对象。例如,卡350a存储数据对象320a、320g等。虽然卡可仅存储单个数据对象,但通常卡存储多个数据对象。卡根地址380a、380b和380f可用于定位相应的卡350a、350b和350f。对应于代和卡的元数据可存储于存储器中。该元数据可包括用于定位代360a、360b和360c的代基地址370a、370b和370c。此外,该元数据可包括数据结构,例如包括条目312a、312b、312j、312k等的卡表310。在一个实施方案中,卡表310可针对存储器中的每个卡包括一个条目。在另一个实施方案中,卡表310可针对每个代(除了最新代之外)内的每个卡包括一个条目。在此实施方案中,可跳过最新代,因为最新代内的每个卡可在GC算法期间被无条件扫描。在另一个实施方案中,卡表310可针对堆中的每个数据对象包括一个条目。此实施方案使卡表310显著增大。
在一个实施方案中,条目312a、312b、312j和312k中的每个均包括单个位。条目312a、312b、312j和312k中的每个内的单个位可通过处理器核心112在其执行软件应用程序时进行设置。在一个实施方案中,可在存储于相应卡中的相应数据对象被修改时设置此单个位。在另一个实施方案中,可在相应数据对象内的指针值被修改以指向存储于另一代中的数据对象时设置此单个位。例如,如果修改了数据对象320g内的指针值以指向存储于代360b的卡350g中的数据对象,则可设置条目312a中的相应单个位。在又一个实施方案中,可在数据对象内的指针值被修改以指向存储于最新代中的数据对象时设置此单个位。在又一个实施方案中,可在数据对象内的指针值被修改以指向存储于预定要在下一次执行GC算法期间收集的多个最新代之一中的数据对象时设置此单个位。可能存在且可考虑对卡表310内的指示进行标记的其它条件。
存储检验操作执行上述步骤,以确定是否要标记指示。存储检验操作也可称为写屏障操作。存储检验操作可确定在应用程序执行期间是否要在存储操作访问堆时设置相应单个位。存储操作可创建指针值,以供随后在GC算法期间使用。对于一些存储操作,编译器可静态地知晓不需要任何存储检验。例如,当应用程序存储整数且整数作为立即值而非堆分配的对象来实现时,可能不需要任何存储检验操作。然而,在一般情况下,可针对访问堆的每个存储操作执行存储检验操作。因为应用程序中可能频繁地进行存储,所以存储检验操作的有效实施可能是必要的。
对应于处理器核心112的操作系统或其它软件可被配置成检测GC起始条件。在一个实施方案中,GC起始条件包括其中最新的卡具有小于预定阈值的空闲空间的条件。在另一个实施方案中,GC起始条件包括其中最新代具有小于预定阈值的空闲空间的条件。在又一个实施方案中,GC起始条件包括其中整个堆具有小于预定阈值的空闲空间的条件。可能存在且可考虑其它条件。当检测到GC起始条件时,可扫描卡表310的以寻找标记的指示或设置位。对于每个设置位,可计算卡根地址。
为了计算卡根地址,在一个实施方案中,可使用相应条目在卡表310中的位置。卡的大小可乘以相应设置位在卡表310内的条目位置。所得乘积可加上代基地址,以确定卡根地址。例如,卡可具有128字节的大小。卡表310中的条目312j可存储设置位。条目312j可为卡表310中的第20个位。20的二进制值(例如b10100)可向左侧移动7个位置。选择7个位置的移位是因为卡的大小为128个字节或在27字节界上对准的27个字节。所得乘积可加上代基地址370a。
上述用于确定卡根地址380的操作为可并行化的操作。因此,利用具有并行架构的处理器(例如单指令多数据(SIMD)核心)可能有利。SIMD核心的示例包括图形处理单元(GPU)和数字信号处理(DSP)核心。在一个实施方案中,当处理器核心112检测到GC起始条件时,核心112可向SIMD核心172发送通知。在一个实施方案中,该通知可包括在存储器中与卡表310的位置相对应的地址以及一个或多个代的基地址。当SIMD核心172计算卡根地址时,处理器核心112可继续执行一个或多个软件应用程序,从而减少GC暂停时间。
CPU、GPU、DSP或其它内的核心172可根据卡表310内的标记的指示以及代基地址来同时计算两个或更多个卡根地址。在一个实施方案中,核心172可将计算的卡根地址直接发送至处理器核心112。在另一个实施方案中,核心172可将在存储器中的地址发送至处理器核心112,该地址对应于存储计算的卡根地址的位置。当处理器核心112获得对卡根地址值的访问时,处理器核心112可开始执行预定GC算法的步骤。例如,处理器核心112可扫描与计算的卡根地址相对应的已修改卡或脏卡内的每个数据对象。处理器核心112可如前所述追踪这些数据对象内的指针值,以确定至少一个最新代中的可获得的数据对象。
现转向图4,示出了通过单独的专用处理核心来进行无用存储单元收集的方法400的一个实施方案。为了讨论的目的,按顺序示出了该实施方案和随后描述的方法的后续实施方案中的步骤。然而,一些步骤可以不同于所示顺序的顺序来进行,一些步骤可同时进行,一些步骤可与其它步骤结合,并且一些步骤在另一个实施方案中可能不存在。
在框402中,操作系统或其它软件可为软件应用程序分配地址空间。在框404中,分配的堆可分成两个或更多个代。在一个实施方案中,这些代对应于相应数据对象的龄期。此外,每个代可分成子区域或卡。
在框406中,正在执行一个或多个软件应用程序的指令。在框410中,在执行期间,可将数据对象分配在堆中。可在存储器中维护日志来存储每个分配的数据对象的相应信息。例如,日志可包括每个分配的数据对象的条目,其中该条目包括数据对象名称、地址、大小及其它信息。在一个实施方案中,执行软件应用程序的通用处理器可维护日志。此外,在执行期间,可修改存储于分配的数据对象中的值。
在框412中,在执行期间可确定对分配的数据对象的修改是否满足预定条件。在一个实施方案中,预定条件可包括存储于较旧代的数据对象中的指针值被修改以指向存储于最新代中的数据对象。在此实施方案中,可在新指针值和预定地址范围之间进行比较。该地址范围可对应于代,例如图3中所示的代360a、360b和360c。在一个实施方案中,可在执行软件应用程序期间针对向堆的每个存储操作执行该比较。该比较可为存储检验操作的一部分。可能存在且可考虑其它预定条件,例如以上关于卡标记描述的那些。
如果对分配的数据对象的修改满足预定条件(条件框414),则在框416中进行标记。在一个实施方案中,存储检验操作确定对堆内数据对象的修改是否符合标记条件。存储检验操作可使用至少新指针值和堆中每个代的地址范围之间的比较。在一个实施方案中,对相应指示的标记包括在数据结构(例如卡表310)中设置相应位。在一个实施方案中,存储检验操作也可使用新指针值和堆中每个卡的地址范围之间的比较。这些比较可与与代的地址范围的比较同时进行。
在条件框408中,可确定是否要启动无用存储单元收集。可使用不同要求来确定何时开始此无用存储单元收集,例如空闲存储器的可用量(例如与某个阈值相比)、最新代内空闲存储器的可用量、自上一次无用存储单元收集以来所经过的给定时间量或其它。如果确定不启动无用存储单元收集(条件框408),则方法400的控制流返回到框406。在框406中,继续执行应用程序的指令。如果确定要启动无用存储单元收集(条件框408),则在框420中可向专用处理单元(SPU)发送通知。该通知可指示SPU开始计算卡根地址,例如图3中所示的地址380a、380b和380f。卡根地址的计算可基于自上一次无用存储单元收集以来在应用程序执行期间进行的存储器分配和修改更新。例如,可针对框416中出现的每个标记的指示来计算一个卡根地址。在一个实施方案中,标记的指示对应于卡表310内的设置位。
在框422中,SPU可进行计算以确定卡根地址。在一个实施方案中,这些计算可包括对相应基地址的移位和加法运算,如前所述。随后,SPU可将卡根地址发送至CPU。或者,SPU可向CPU发送与存储器中存储卡根地址的位置相对应的地址。在框424中,CPU可利用计算的卡根地址来执行GC算法的步骤。
现参照图5,示出了用于计算卡根地址以供无用存储单元收集算法中使用的方法500的一个实施方案。类似于方法400,为了讨论的目的,按顺序示出了该实施方案和随后描述的方法的后续实施方案中的步骤。然而,一些步骤可以不同于所示顺序的顺序来进行,一些步骤可同时进行,一些步骤可与其它步骤结合,并且一些步骤在另一个实施方案中可能不存在。
在框502中,可将通知从CPU发送至SPU,以计算用于GC算法的卡根地址。在一个实施方案中,CPU可向SPU发送一个或多个代基地址,例如图3中所示的代基地址370a、370b和370c。此外,CPU可向SPU发送数据结构(例如卡表310)的地址。该数据结构可存储自上一次无用存储单元收集以来在应用程序执行期间任何合格的引用的指示。在框504中,SPU可利用其SIMD核心的并行架构来扫描数据结构(例如卡表310)中的存储的指示。该扫描操作可确定堆中的哪些子区域或卡存储着合格的跨代引用。在框506中,SPU可利用其SIMD核心的并行架构来同时计算多个卡根地址。这些计算可在无需CPU中止软件应用程序的执行的情况下进行。因此,可在无需无用存储单元收集暂停时间的情况下确定卡根地址。
在框508中,CPU可从SPU接收卡根地址。或者,CPU可接收与存储器中存储卡根地址的位置相对应的一个或多个地址。在一个实施方案中,CPU更新在方法400的框410中创建和维护的日志。该日志在应用程序执行期间存储堆中每个分配的数据对象的相应信息。该日志可使用计算的卡根地址来更新。在框510中,CPU可利用存储于日志中的信息来执行预定GC算法的步骤。
在上文中,描述了利用SIMD核心的并行架构来执行无用存储单元收集算法的预处理步骤。在一个实施方案中,预处理步骤包括扫描卡表并计算相应卡根地址。在此处,进一步描述了通用核心与并行架构的SIMD核心之间的区别。首先,描述了通用核心。图6示出了进行乱序执行的通用处理器核心600的一个实施方案。指令高速缓存(i-cache)和相应转换后备缓冲器(TLB)602可存储软件应用程序的指令以及用于访问指令的地址。如果无i-cache缺失,则指令获取单元(IFU)604可在每个时钟周期从i-cache602获取多个指令。IFU604可包括程序计数器,其保存指向要在i-cache602中获取的后续指令的地址的指针,该指针可与i-TLB中的地址相比较。IFU604也可包括分支预测单元,以在执行单元在随后的流水线阶段确定实际结果之前预测条件指令的结果。
解码器单元606解码多个获取的指令的操作码,并且可分配有序回退队列(例如重排序缓冲器618)、保留站608和加载/存储单元614中的条目。在保留站608中分配条目被视为分派。保留站608可作为指令队列,其中指令等待直到其操作数变得可用时。当操作数可用且硬件资源也可用时,可从保留站608向整数和浮点功能单元610或加载/存储单元614无序发出指令。存储器访问(例如加载和存储操作)被发向加载/存储单元614。功能单元610可包括用于诸如加、减、乘、除和平方根等计算运算的算术逻辑单元(ALU)。可包括逻辑以确定条件指令的结果。加载/存储单元614可包括队列和逻辑,以执行存储器访问指令。另外,验证逻辑可位于加载/存储单元614中,以确保加载指令从正确的最新存储指令接收转发数据。
加载/存储单元614可将存储器访问请求622发送至芯片上的一级或多级数据高速缓存(d-cache)616。每级高速缓存可具有其自身的TLB,用于与存储器请求622进行地址比较。每级高速缓存616可以串行或并行方式来搜索。如果请求的存储器线在高速缓存616中未找到,则将存储器请求622发送至存储器控制器,以便在芯片外访问系统存储器中的存储器线。
来自功能单元610和加载/存储单元614的结果可呈现在公用数据总线612上。可将这些结果发送至重排序缓冲器618。在一个实施方案中,重排序缓冲器618可为先进先出(FIFO)队列,该队列根据程序顺序确保指令的有序回退。在此处,标记接收其结果的指令以进行回退。如果该指令为队列首,则该指令可将其结果发送至寄存器文件620。寄存器文件620可保存处理器核心600的通用寄存器的架构状态。然后,重排序缓冲器中的指令可有序回退,并且可调整其队列首指针以指向程序顺序中的后续指令。
可将公用数据总线612上的结果发送至保留站608,以便将值转发至等待这些结果的指令的操作数。例如,算术指令可具有依赖于前一个算术指令的结果的操作数,或者加载指令可能需要由功能单元610中的地址生成单元(AGU)计算的地址。当这些等待指令具有用于其操作数的值且硬件资源可用于执行这些指令时,可从保留站608向功能单元610或加载/存储单元614中的适当资源无序发出这些指令。
未提交或非回退的存储器访问指令在加载/存储单元中具有条目。来自最新的未提交的较旧存储指令的未完成或未提交的加载指令的转发数据值可置于公用数据总线112上或者简单地路由至加载/存储单元614内的加载缓冲器中的适当条目。应注意,虽然通用处理器核心(例如核心600)可执行高度并行算法(例如单指令多数据(SIMD)应用程序)的指令,但是其效率可能低于具有并行架构的专用处理核心,例如SIMD核心。具有并行架构的专用处理核心的示例包括数字信号处理器(DSP)、图形处理单元(GPU)或其它。
现转向图7,示出了图形处理器核心700的一个实施方案的框图。核心700为SIMD核心中并行架构的一个示例。可能存在且可考虑其它示例,例如DSP的核心。本领域的技术人员可修改核心700,以便获得替代实施方案。用特定布局示出了该实施方案中的框。然而,核心700的布局可不同于所示布局。在其它实施方案中,一些框可被集成,一些框可具有另一个框或单独的独立框中的内部功能和电路,并且一些功能和电路可位于另一个集成电路中。
在所示实施方案中,命令和数据获取单元710可从处理器核心(例如图1中的核心112)上的图形驱动器接收用于浮点运算的渲染命令流、状态信息和几何数据。在一些实施方案中,处理器核心可提供对存储器(如存储该信息的存储器)中的位置的引用,而不是直接提供该信息。从而,单元710从指定位置检索该信息。
可使用渲染命令流、状态信息和几何数据来定义所需的一个或多个呈现的图像,包括场景的几何形状、布光、阴影、纹理、移动和/或摄像机参数。在一个实施方案中,几何数据包括用于可存在于场景中的对象(例如桌子、树、人或动物)的多个定义。多组图元(例如点、线条、三角形和/或其它多边形)可用于对对象建模。这些图元可通过对其顶点的引用来定义。对于每个顶点,可在对象坐标系中指定位置,以表示该顶点相对于正被建模的对象的位置。除了位置之外,每个顶点可具有与其相关的各种其它属性。其它顶点属性的示例可包括用于确定诸如颜色、纹理、透明度、布光、阴影和顶点及其相关几何图元的动画等性质的标量或矢量属性。
对场景中对象的管理可包括状态管理开销并且此开销可在工作分组为小批量的情况下增加。在一个实施方案中,单元710可为从来自主机CPU(如CPU115)的图形驱动器卸载工作的处理器。通常,图形驱动器执行此管理工作,但之后由处理单元115承担此工作。因此,通过加强单元710的处理能力,图形驱动器并且随后处理单元115可免除开销操作。
然后,输入数据汇编器720准备供处理的数据。由汇编器720执行的功能的三个示例可包括用于顶点着色器的顶点组装、用于几何着色器的几何形状组装和用于像素着色器的扫描转换和内插。每种功能均可向分派单元730提交线程。
在一个实施方案中,分派单元730可将接收的工作负荷划分成线程并以最优方式在包括一个或多个流核心742的着色器阵列740与包括一个或多个纹理单元752的功能单元750之间分配线程。分派单元730可确定核心742内部一些流处理单元744的空闲时刻可并向其指定新任务。
流处理应用程序的特征在于需要以及时且响应的方式处理大容量数据流。此类应用程序可采用多个计算单元(例如GPU上的浮点单元),而无需明确地管理这些单元之间的分配、同步或通讯。流处理可通过限制可执行的并行计算来简化并行软件和硬件。作为给定的一组数据的流可具有应用于该流中每个元素的一系列操作。其中一种操作应用于流中所有元素的均匀流型是典型的。操作通常是流水线操作,并且本地芯片上存储器被重新利用来最小化外部存储器带宽。
流抽象暴露数据依赖关系,且因此编译器工具可使芯片上管理任务完全自动化和优化。当依赖关系变为已知时,流处理硬件可使用记分板(scoreboarding)例如来在运行时发起直接存储器存取(DMA)。消除手动DMA管理可降低软件复杂性,而消除硬件高速缓存可减少未专用于计算单元(如算术逻辑单元(ALU))的管芯区域的量。
通过针对传统数字信号处理(DSP)或GPU型应用程序运行良好的数据中心模型来驱动流处理。对于具有更多随机化数据访问的通用处理(如数据库)而言,流处理并非最佳。
在一个实施方案中,每个流核心742为SIMD核心并且包括多个流处理单元(SPU)744。每个SPU744可包括多个ALU,且因此着色器阵列740可具有大量的计算能力。着色器阵列740可通过按提供的状态信息所选择的程序来对顶点数据执行顶点和/或几何着色程序。着色程序可对顶点和其它数据执行使用多种数学和逻辑运算的算法,并且该程序可包括条件或分支执行路径以及直接和间接存储器访问。待使用的着色程序可存储于图1中示出的系统存储器或缓冲器174中。着色程序可经由本领域已知的适当的渲染命令和状态信息识别到着色器阵列740。
功能单元750包括一个或多个纹理单元752,用于执行像素着色程序,以获得视觉效果。在一个实施方案中,纹理单元752与流核心742结合,使得增加更多的着色能力相当于增加更多的纹理绘制能力。纹理单元752可利用高速缓冲存储器子系统754来在程序执行期间进行数据存储。
参照图8,示出计算系统800的一个实施方案。对应于图1中那些元件的电路部分具有相同标号。计算系统800包括多个处理节点110a-110d。尽管图8中示出了四个节点,但其它实施方案可包括不同数量的节点,其中每个节点包括一个或多个处理器核心。如本文所用,通过后面带有字母的参考数字标示的元件可只通过该数字来总称。例如,处理节点110a-110d可总称为处理节点110或节点110。每个节点110可经由相应存储器控制器120耦接至相应存储器130。另外,每个处理节点110可包括用于与处理节点110中的其它节点通信的接口逻辑140。例如,处理节点110a包括用于与处理节点110b和110c通信的接口逻辑140a。类似地,处理节点110b包括用于与处理节点110a和110d等通信的接口逻辑140b。
在图8的实施方案中,示出处理节点110d被耦接以经由接口逻辑140d与输入/输出(I/O)装置160a通信,并且I/O装置160a进一步被耦接至第二I/O装置160b。其它处理节点可以类似的方式与其它I/O装置通信。或者,处理节点可与耦接至I/O总线的I/O桥通信。
计算系统800可实现用于节点间通信的基于分组的链路。在所述实施方案中,链路被实现为一组单向线路(例如,线路150a用于将包从处理节点110a发送至处理节点110b,而线路150b用于将包从处理节点110b发送至处理节点110a)。其它线路组150c-150h用于将包在图8所示的其它处理节点之间传送。链路可以高速缓存相干方式运行以在处理节点之间通信或以非相干方式作为I/O装置160a-160b(和其它I/O装置,根据需要)之间的菊花链结构运行。应注意,待从一个处理节点110发送至另一个节点的包可经过一个或多个中间节点。例如,由处理节点110a发送至处理节点110d的包可经过处理节点110b或处理节点110c,如图8所示。可使用任何合适的路由算法。计算系统800的其它实施方案可包括比图8所示的实施方案更多或更少的处理节点。此外,可存在其中每个处理节点通过点对点网络耦接至每个其它处理节点的其它实施方案。除了示出的存储器控制器和接口逻辑之外,每个处理节点110可包括一个或多个处理器和相关高速缓存,如此前在图1中示出和描述的。
存储器130可包括任何合适的存储器装置。例如,存储器130可包括一个或多个RAMBUS动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、DRAM、静态RAM等。计算系统800的地址空间在存储器130间划分。每个处理节点110可包括用于确定哪个地址映射到哪个存储器130的存储器映像,且因此确定对于特定地址的存储器请求应路由至哪个处理节点110。在一个实施方案中,计算系统800内的地址的相干点为耦接至存储对应于该地址的字节的存储器的存储器控制器120。存储器控制器120可包括用于与存储器130接口连接的控制电路。另外,存储器控制器120可包括用于对存储器请求排队的请求队列。
通常,接口逻辑140可包括缓冲器,其用于接收来自链路的包并用于缓存待通过链路发送的包。计算系统800可采用任何合适的流控制机制来发送包。I/O装置160为任何所需的外围装置的示意。例如,I/O装置160可包括网络接口卡、视频加速器、音频卡、硬盘或软盘驱动器或驱动器控制器、小型计算机系统接口(SCSI)适配器和电话卡、调制解调器、声卡和各种数据采集卡如通用接口总线(GPIB)或现场总线接口卡。
如先前所述,每个处理节点110可包括一个或多个处理器和相关高速缓存,如此前在图1中示出和描述的。每个节点110可包括一个或多个通用处理器核心112。此外,处理节点110可包括具有并行架构的专用处理器核心172,例如单指令多数据(SIMD)核心。处理器核心112可在执行GC算法步骤之前利用SIMD核心172来计算根地址,如前文所述。或者,处理节点110a中的处理器核心112例如可在无SIMD核心172的情况下利用包括SIMD核心172的单独节点(如节点110b)中的SIMD核心172。在此实施方案中,当节点110a内的处理器核心112检测到满足的GC起始条件时,核心112可向单独节点110b内的SIMD核心172发送计算根地址的通知。该通知可包括在任何所选节点间通信中。
应注意,上述实施方案可包括软件。在此类实施方案中,实现方法和/或机制的程序指令可通过计算机可读介质来传递或存储。被配置成存储程序指令的许多类型的介质是可用的并且包括硬盘、软盘、CD-ROM、DVD、闪速存储器、可编程ROM(PROM)、随机存取存储器(RAM)以及各种其它形式的易失性或非易失性存储器。
尽管相当详细地描述了以上实施方案,但本领域的技术人员一旦完全理解上述公开内容,则这些实施方案的许多变化和修改将是显而易见的。所附权利要求应被理解为涵盖所有此类变化和修改。
Claims (14)
1.一种处理装置,其包括:
通用中央处理单元;
专用处理单元;以及
存储器;
其中所述中央处理单元被配置成:
响应于检测到存储于所述存储器的一部分中的数据对象已被修改,存储对应于所述部分的指示;并且
响应于检测到无用存储单元收集起始条件被满足,向所述专用处理单元发送通知,所述通知包括对应于所述部分的所述存储的指示和所述存储器的区域的基地址;
其中响应于从所述中央处理单元接收到所述通知,所述专用处理单元被配置成计算多个根地址,每个根地址对应于存储的指示,并将所述计算的根地址发送至所述中央处理单元以供无用存储单元收集算法使用,以识别一个或多个预定可收集区域中的可获得的数据对象,其中所述一个或多个预定可收集区域为多个区域中的最新区域。
2.根据权利要求1所述的处理装置,
其中所述中央处理单元还被配置成:
将所述存储器分成多个区域,每个区域均包括多个子区域,所述部分对应于所述子区域之一。
3.根据权利要求1所述的处理装置,其中所述中央处理单元还被配置成响应于检测到存储于所述多个子区域中的子区域中的数据对象包含指向所述一个或多个预定可收集区域之一的指针值来存储与所述子区域相对应的指示。
4.根据权利要求1所述的处理装置,其中所述专用处理单元还被配置成:
并行读取两个或更多个存储的指示,以定位两个或更多个相应子区域;并且
针对所述两个或更多个定位的子区域中的每一个,基于相应基地址并行计算一个根地址。
5.根据权利要求4所述的处理装置,其中所述专用处理单元包括单指令多数据并行架构。
6.根据权利要求4所述的处理装置,其中所述专用处理单元在不引起使所述中央处理单元停止执行的暂停的情况下计算所述多个根地址。
7.一种用于无用存储单元收集的方法,所述方法包括:
通用中央处理单元响应于检测到存储于存储器的一部分中的数据对象已被修改来存储对应于所述部分的指示;
响应于检测到无用存储单元收集起始条件被满足,从所述中央处理单元向专用处理单元发送通知,所述通知包括对应于所述部分的所述存储的指示和所述存储器的区域的基地址;并且
所述专用处理单元计算多个根地址,每个根地址对应于存储的指示,并且所述专用处理单元将所述计算的根地址发送至所述中央处理单元以供无用存储单元收集算法使用,以识别一个或多个预定可收集区域中的可获得的数据对象,其中所述一个或多个预定可收集区域为多个区域中的最新区域。
8.根据权利要求7所述的方法,其还包括:
所述中央处理单元将所述存储器分成多个区域,每个区域均包括多个子区域,所述部分对应于所述子区域之一。
9.根据权利要求8所述的方法,其还包括响应于检测到存储于所述多个子区域中的子区域中的数据对象包含指向所述一个或多个预定可收集区域之一的指针值来存储与所述子区域相对应的指示。
10.根据权利要求7所述的方法,其还包括:
并行读取两个或更多个存储的指示,以定位两个或更多个相应子区域;并且
针对所述两个或更多个定位的子区域中的每一个,基于相应基地址并行计算一个根地址。
11.根据权利要求7所述的方法,其中所述无用存储单元收集起始条件包括其中最新子区域具有小于预定阈值的空闲空间的条件。
12.一种计算系统,其包括:
第一处理装置,其包括通用中央处理单元;
存储器,其耦接至所述第一处理装置;以及
第二处理装置,其包括专用处理单元;
其中所述中央处理单元被配置成:
响应于检测到存储于所述存储器的一部分中的数据对象已被修改,存储对应于所述部分的指示;并且
响应于检测到无用存储单元收集起始条件被满足,向所述专用处理单元发送通知,所述通知包括对应于所述部分的所述存储的指示和所述存储器的区域的基地址;
其中响应于从所述中央处理单元接收到所述通知,所述专用处理单元被配置成计算多个根地址,每个根地址对应于存储的指示,并将所述计算的根地址发送至所述中央处理单元以供无用存储单元收集算法使用,以识别一个或多个预定可收集区域中的可获得的数据对象,其中所述一个或多个预定可收集区域为多个区域中的最新区域。
13.根据权利要求12所述的计算系统,其中所述中央处理单元还被配置成:
将所述存储器分成多个区域,每个区域均包括多个子区域,所述部分对应于所述子区域之一。
14.根据权利要求13所述的计算系统,其中所述中央处理单元还被配置成响应于检测到存储于所述多个子区域中的子区域中的数据对象包含指向所述一个或多个预定可收集区域之一的指针值来存储与所述子区域相对应的指示。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/715,835 US8327109B2 (en) | 2010-03-02 | 2010-03-02 | GPU support for garbage collection |
US12/715,835 | 2010-03-02 | ||
PCT/US2011/025779 WO2011109191A1 (en) | 2010-03-02 | 2011-02-22 | Gpu support for garbage collection |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102985910A CN102985910A (zh) | 2013-03-20 |
CN102985910B true CN102985910B (zh) | 2016-04-13 |
Family
ID=43971395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180020912.XA Active CN102985910B (zh) | 2010-03-02 | 2011-02-22 | 对无用存储单元收集的系统和方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8327109B2 (zh) |
EP (1) | EP2542973B1 (zh) |
JP (1) | JP5805675B2 (zh) |
KR (1) | KR101626533B1 (zh) |
CN (1) | CN102985910B (zh) |
WO (1) | WO2011109191A1 (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5382383B2 (ja) * | 2011-03-24 | 2014-01-08 | 日本電気株式会社 | データベース処理装置、データベース処理方法、プログラム及びデータベースのデータ構造 |
US20120254588A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask |
US9053017B2 (en) * | 2011-09-09 | 2015-06-09 | Microsoft Technology Licensing, Llc | Managing object lifetime in a cyclic graph |
US8838929B2 (en) * | 2011-10-05 | 2014-09-16 | Arm Limited | Allocation and deallocation of bounded time relative portions of a graphics memory |
US9530245B2 (en) | 2011-12-29 | 2016-12-27 | Qualcomm Incorporated | Packing multiple shader programs onto a graphics processor |
US9448928B2 (en) * | 2013-04-26 | 2016-09-20 | Oracle International Corporation | System and method for two-tier adaptive heap management in a virtual machine environment |
US9740716B2 (en) * | 2013-08-21 | 2017-08-22 | Oracle International Corporation | System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions |
US8719374B1 (en) | 2013-09-19 | 2014-05-06 | Farelogix, Inc. | Accessing large data stores over a communications network |
US9477516B1 (en) | 2015-03-19 | 2016-10-25 | Google Inc. | Concurrent in-memory data publication and storage system |
US9734052B2 (en) | 2015-06-30 | 2017-08-15 | International Business Machines Corporation | Multi-section garbage collection |
US9734053B2 (en) | 2015-06-30 | 2017-08-15 | International Business Machines Corporation | Garbage collection handler to update object pointers |
US10176093B2 (en) | 2015-06-30 | 2019-01-08 | International Business Machines Corporation | Pauseless location and object handle based garbage collection |
US10180902B2 (en) | 2015-06-30 | 2019-01-15 | International Business Machines Corporation | Pauseless location and object handle based garbage collection |
US9740626B2 (en) * | 2015-08-11 | 2017-08-22 | Oracle International Corporation | Sharing data structures between processes by semi-invasive hybrid approach |
US10942864B2 (en) | 2015-11-20 | 2021-03-09 | Hewlett Packard Enterprise Development Lp | Shared memory for distributed data |
CN108459898B (zh) * | 2017-02-20 | 2022-01-14 | 阿里巴巴集团控股有限公司 | 一种资源回收方法及装置 |
US11593262B1 (en) * | 2018-04-25 | 2023-02-28 | Seagate Technology Llc | Garbage collection command scheduling |
US11650916B2 (en) * | 2018-06-14 | 2023-05-16 | Microsoft Technology Licensing, Llc | Closed loop garbage collector |
US11169804B2 (en) * | 2018-09-24 | 2021-11-09 | Oracle International Corporation | Method for vectorizing d-heaps using horizontal aggregation SIMD instructions |
EP3699771A1 (en) * | 2019-02-21 | 2020-08-26 | CoreMedia AG | Method and apparatus for managing data in a content management system |
US11016778B2 (en) | 2019-03-12 | 2021-05-25 | Oracle International Corporation | Method for vectorizing Heapsort using horizontal aggregation SIMD instructions |
US11620215B2 (en) * | 2019-06-26 | 2023-04-04 | International Business Machines Corporation | Multi-threaded pause-less replicating garbage collection |
US11573793B2 (en) | 2020-03-18 | 2023-02-07 | Oracle International Corporation | Lazy push strategies for vectorized D-Heaps |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5355483A (en) * | 1991-07-18 | 1994-10-11 | Next Computers | Asynchronous garbage collection |
US7512745B2 (en) * | 2006-04-28 | 2009-03-31 | International Business Machines Corporation | Method for garbage collection in heterogeneous multiprocessor systems |
CN101615143A (zh) * | 2008-06-27 | 2009-12-30 | 国际商业机器公司 | 用于内存泄漏诊断的方法和装置 |
Family Cites Families (59)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4775932A (en) * | 1984-07-31 | 1988-10-04 | Texas Instruments Incorporated | Computer memory system with parallel garbage collection independent from an associated user processor |
US4989134A (en) * | 1987-03-20 | 1991-01-29 | Hewlett-Packard Company | Method and apparatus for enhancing data storage efficiency |
US5136706A (en) * | 1987-04-30 | 1992-08-04 | Texas Instruments Incorporated | Adaptive memory management system for collection of garbage in a digital computer |
JPS6441043A (en) * | 1987-08-06 | 1989-02-13 | Ricoh Kk | Parallel garbage collector system for list processing |
DE69332696T2 (de) * | 1992-06-15 | 2003-08-21 | Microsoft Corp | Rechnerverfahren und System zur Speicherverwaltung |
JPH06511582A (ja) * | 1992-07-24 | 1994-12-22 | マイクロソフト コーポレイション | メモリを割り当てそして解放するコンピュータ方法及びシステム |
US5416915A (en) * | 1992-12-11 | 1995-05-16 | International Business Machines Corporation | Method and system for minimizing seek affinity and enhancing write sensitivity in a DASD array |
US5560003A (en) * | 1992-12-21 | 1996-09-24 | Iowa State University Research Foundation, Inc. | System and hardware module for incremental real time garbage collection and memory management |
US5530850A (en) * | 1993-10-25 | 1996-06-25 | International Business Machines Corporation | Data storage library array with log-structured file system which allows simultaneous write and garbage collection |
US5687368A (en) * | 1994-07-22 | 1997-11-11 | Iowa State University Research Foundation, Inc. | CPU-controlled garbage-collecting memory module |
US5751613A (en) * | 1996-09-03 | 1998-05-12 | Doty; Douglas E. | Persistent heap for dynamic picture objects |
US6115782A (en) * | 1997-04-23 | 2000-09-05 | Sun Micosystems, Inc. | Method and apparatus for locating nodes in a carded heap using a card marking structure and a node advance value |
US6199075B1 (en) * | 1997-05-30 | 2001-03-06 | Sun Microsystems, Inc. | Method and apparatus for generational garbage collection of a heap memory shared by multiple processors |
US6081665A (en) * | 1997-12-19 | 2000-06-27 | Newmonics Inc. | Method for efficient soft real-time execution of portable byte code computer programs |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6300962B1 (en) * | 1998-12-23 | 2001-10-09 | Scientific-Atlanta, Inc. | Method and apparatus for providing reliable graphic memory operations in a set-top box environment |
US6931423B2 (en) * | 1999-02-11 | 2005-08-16 | Oracle International Corp. | Write-barrier maintenance in a garbage collector |
US6470361B1 (en) * | 2000-01-10 | 2002-10-22 | International Business Machines Corporation | Method and apparatus for performing generational garbage collection using middle-aged objects |
US6526422B1 (en) * | 2000-05-15 | 2003-02-25 | Sun Microsystems, Inc. | Striding-type generation scanning for parallel garbage collection |
US6826583B1 (en) * | 2000-05-15 | 2004-11-30 | Sun Microsystems, Inc. | Local allocation buffers for parallel garbage collection |
US6823351B1 (en) * | 2000-05-15 | 2004-11-23 | Sun Microsystems, Inc. | Work-stealing queues for parallel garbage collection |
US6839725B2 (en) * | 2000-05-16 | 2005-01-04 | Sun Microsystems, Inc. | Dynamic adaptive tenuring of objects |
US6760815B1 (en) * | 2000-06-02 | 2004-07-06 | Sun Microsystems, Inc. | Caching mechanism for a virtual heap |
US6763440B1 (en) * | 2000-06-02 | 2004-07-13 | Sun Microsystems, Inc. | Garbage collection using nursery regions for new objects in a virtual heap |
US6804762B1 (en) * | 2000-07-31 | 2004-10-12 | Microsoft Corporation | Method and system for garbage collection using a dynamically tuned write barrier |
US6738875B1 (en) * | 2000-07-31 | 2004-05-18 | Microsoft Corporation | Efficient write-watch mechanism useful for garbage collection in a computer system |
US6865585B1 (en) * | 2000-07-31 | 2005-03-08 | Microsoft Corporation | Method and system for multiprocessor garbage collection |
CA2421591C (en) * | 2000-09-13 | 2011-08-23 | Geodesic Systems, Incorporated | Conservative garbage collectors that can be used with general memory allocators |
GB0027053D0 (en) * | 2000-11-06 | 2000-12-20 | Ibm | A computer system with two heaps in contiguous storage |
US6964039B2 (en) * | 2000-12-13 | 2005-11-08 | Esmertec Ag | Method to create optimized machine code through combined verification and translation of JAVA™ bytecode |
US7017162B2 (en) * | 2001-07-10 | 2006-03-21 | Microsoft Corporation | Application program interface for network software platform |
JP3939975B2 (ja) * | 2001-12-14 | 2007-07-04 | 松下電器産業株式会社 | ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム |
GB0212119D0 (en) * | 2002-05-25 | 2002-07-03 | Ibm | A method and system for the garbage collection of shared data |
US6999980B2 (en) * | 2002-08-23 | 2006-02-14 | Sun Microsystems, Inc. | Eliminating write barriers for young objects |
US7010555B2 (en) * | 2002-10-17 | 2006-03-07 | International Business Machines Corporation | System and method for compacting a computer system heap |
US7016923B2 (en) * | 2002-11-05 | 2006-03-21 | Sun Microsystems, Inc. | Multi-threaded garbage collector employing cascaded memory arrays of task identifiers to implement work stealing queues for task identification and processing |
US7136887B2 (en) * | 2002-12-04 | 2006-11-14 | Sun Microsystems, Inc. | Method and mechanism for finding references in a card in time linear in the size of the card in a garbage-collected heap |
US20040111718A1 (en) * | 2002-12-04 | 2004-06-10 | Detlefs David L. | Block-offset table employing gaps in value set |
US7031990B2 (en) * | 2002-12-06 | 2006-04-18 | Sun Microsystems, Inc. | Combining external and intragenerational reference-processing in a garbage collector based on the train algorithm |
US7069280B2 (en) * | 2002-12-06 | 2006-06-27 | Sun Microsystems, Inc. | Collection-tick mechanism for a collector based on the train algorithm |
US6868488B2 (en) * | 2002-12-20 | 2005-03-15 | Sun Microsystems, Inc. | Binned remembered sets |
JP4116877B2 (ja) * | 2002-12-26 | 2008-07-09 | 富士通株式会社 | ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム |
US20040128329A1 (en) * | 2002-12-31 | 2004-07-01 | International Business Machines Corporation | Parallel incremental compaction |
US7058781B2 (en) * | 2003-02-14 | 2006-06-06 | Sun Microsystems, Inc. | Parallel card table scanning and updating |
US7043509B2 (en) * | 2003-02-19 | 2006-05-09 | Sun Microsystems, Inc. | Parallel non-contiguous allocation and card parsing |
US7100003B2 (en) * | 2003-11-24 | 2006-08-29 | International Business Machines Corporation | Method and apparatus for generating data for use in memory leak detection |
US7519639B2 (en) * | 2004-01-05 | 2009-04-14 | International Business Machines Corporation | Method and apparatus for dynamic incremental defragmentation of memory |
KR100608606B1 (ko) * | 2004-01-28 | 2006-08-03 | 삼성전자주식회사 | 적응형 가비지 컬렉션 방법 및 상기 방법을 수행하는 장치 |
US8131955B2 (en) * | 2004-04-15 | 2012-03-06 | Microsoft Corporation | Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles |
US7149870B2 (en) * | 2004-06-04 | 2006-12-12 | International Business Machines Corporation | Assigning sections within a memory heap for efficient garbage collection of large objects |
US7171527B2 (en) * | 2004-06-10 | 2007-01-30 | Sun Microsystems, Inc | Method and apparatus for keeping track of memory usage for tasks in a shared heap |
US8607016B2 (en) * | 2004-07-21 | 2013-12-10 | Sandisk Technologies Inc. | FAT analysis for optimized sequential cluster management |
EP1800237A2 (en) * | 2004-08-31 | 2007-06-27 | Silicon Optix Inc. | Method and apparatus for management of bit plane resources |
US7788300B2 (en) * | 2004-09-15 | 2010-08-31 | Sap Ag | Garbage collection for shared data entities |
US7412466B1 (en) * | 2005-05-31 | 2008-08-12 | Sun Microsystems, Inc. | Offset-based forward address calculation in a sliding-compaction garbage collector |
JP4996073B2 (ja) * | 2005-07-13 | 2012-08-08 | 富士通株式会社 | 世代別ガベージコレクションプログラム |
US8825718B2 (en) * | 2006-12-28 | 2014-09-02 | Oracle America, Inc. | Methods and apparatus for marking objects for garbage collection in an object-based memory system |
US7408782B2 (en) * | 2007-01-04 | 2008-08-05 | Tellabs Bedford, Inc. | Multiple printed circuit board heat transfer guide plates |
US8301672B2 (en) | 2008-09-22 | 2012-10-30 | Advanced Micro Devices, Inc. | GPU assisted garbage collection |
-
2010
- 2010-03-02 US US12/715,835 patent/US8327109B2/en active Active
-
2011
- 2011-02-22 JP JP2012556102A patent/JP5805675B2/ja active Active
- 2011-02-22 EP EP11707742.0A patent/EP2542973B1/en active Active
- 2011-02-22 KR KR1020127025736A patent/KR101626533B1/ko active IP Right Grant
- 2011-02-22 CN CN201180020912.XA patent/CN102985910B/zh active Active
- 2011-02-22 WO PCT/US2011/025779 patent/WO2011109191A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5355483A (en) * | 1991-07-18 | 1994-10-11 | Next Computers | Asynchronous garbage collection |
US7512745B2 (en) * | 2006-04-28 | 2009-03-31 | International Business Machines Corporation | Method for garbage collection in heterogeneous multiprocessor systems |
CN101615143A (zh) * | 2008-06-27 | 2009-12-30 | 国际商业机器公司 | 用于内存泄漏诊断的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2011109191A1 (en) | 2011-09-09 |
EP2542973B1 (en) | 2020-04-01 |
JP5805675B2 (ja) | 2015-11-04 |
US20110219204A1 (en) | 2011-09-08 |
EP2542973A1 (en) | 2013-01-09 |
KR101626533B1 (ko) | 2016-06-01 |
JP2013521570A (ja) | 2013-06-10 |
CN102985910A (zh) | 2013-03-20 |
KR20130018742A (ko) | 2013-02-25 |
US8327109B2 (en) | 2012-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102985910B (zh) | 对无用存储单元收集的系统和方法 | |
US8797332B2 (en) | Device discovery and topology reporting in a combined CPU/GPU architecture system | |
CN102498477B (zh) | Tlb预取 | |
US8639730B2 (en) | GPU assisted garbage collection | |
US8719547B2 (en) | Providing hardware support for shared virtual memory between local and remote physical memory | |
CN101310259B (zh) | 用于共享l2映射高速缓存的对称分配的方法和系统 | |
US20100223432A1 (en) | Memory sharing among computer programs | |
CN102713837A (zh) | 用于管理并行高速缓存层级的指令 | |
US20140173216A1 (en) | Invalidation of Dead Transient Data in Caches | |
EP2791933A1 (en) | Mechanism for using a gpu controller for preloading caches | |
EP3654178A2 (en) | Mechanism for issuing requests to an accelerator from multiple threads | |
CN104756090A (zh) | 提供扩展的缓存替换状态信息 | |
CN110196757A (zh) | 虚拟机的tlb填写方法、装置及存储介质 | |
CN111164581A (zh) | 用于修补页的系统、方法和装置 | |
US11868306B2 (en) | Processing-in-memory concurrent processing system and method | |
CN114816666B (zh) | 虚拟机管理器的配置方法、tlb管理方法及嵌入式实时操作系统 | |
EP1103898A2 (en) | Microprocessor and memory | |
US11321241B2 (en) | Techniques to improve translation lookaside buffer reach by leveraging idle resources | |
EP3885921A1 (en) | Apparatuses, methods, and systems for dynamic bypassing of last level cache | |
US20080072009A1 (en) | Apparatus and method for handling interrupt disabled section and page pinning apparatus and method | |
US20230315632A1 (en) | Two-stage cache partitioning | |
WO2022266828A1 (en) | Architectural extensions for memory mirroring at page granularity on demand | |
US20230393849A1 (en) | Method and apparatus to expedite system services using processing-in-memory (pim) | |
CN110569122B (zh) | 多处理器系统、多核处理设备及其操作方法 | |
CN111699506B (zh) | 指令处理 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |