CN104516831A - 原子存储器更新单元和方法 - Google Patents
原子存储器更新单元和方法 Download PDFInfo
- Publication number
- CN104516831A CN104516831A CN201410505040.1A CN201410505040A CN104516831A CN 104516831 A CN104516831 A CN 104516831A CN 201410505040 A CN201410505040 A CN 201410505040A CN 104516831 A CN104516831 A CN 104516831A
- Authority
- CN
- China
- Prior art keywords
- updating block
- storer
- renewal
- memory
- value
- 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
Landscapes
- Image Generation (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
在一方面,一种更新单元可以对更新请求中的条件进行评估并且基于该条件评估对一个或多个存储器位置进行更新。该更新单元可以原子地操作用于确定是否使该更新生效和是否进行该更新。更新可以包括对值进行递增和对值进行交换中的一项或多项。更新请求可以指定一个预先确定的更新类型集合中的一种更新类型。某些更新类型可以是有条件的,而其他更新类型可以是无条件的。该更新单元可以耦合用于从多个计算单元接收更新请求。这些计算单元可以不具有直接生成有待在存储器的位置中的至少某些位置上生效的写请求的特权。这些计算单元可以是在从可编程计算元件接收到的输入上操作的固定功能电路。该更新单元可以包括一个用于保持所接收到的更新请求的缓冲器。
Description
技术领域
在一方面,本披露总体上涉及执行多线程处理并且会消耗共享数据的计算构架,其他方面涉及包括用于图形处理的任务特定电路,并且在又一个方面,涉及用于在光线追踪过程中执行的操作的任务特定结构,又进一步方面涉及处理器系统中的高速缓存行为。
背景技术
图形处理单元(GPU)为图形操作提供相对大规模并行处理。某些GPU可以使用一个或多个通常可编程的单指令多数据(SIMD)计算单元。此类GPU可以通过使用更多晶体管来复制计算单元、并且通过向此类存储器提供更大的存储器和更大的带宽在很大程度上获得更高的性能。这种方法理论上允许晶体管的一大部分和GPU的路由预算用于通用计算。某些GPU将不同的处理单元用于图形管线的不同部分,如具有单独几何处理器和像素着色引擎。GPU可以提供允许通过在这些单元中的任一个上执行的指令访问存储器的存储器子系统。GPU可以与其他系统组件(例如,CPU)共享主系统存储器;GPU还可以具有多个内部高速缓存。
发明内容
一个方面涉及一种对存储器进行更新的机器实施的方法。该方法包括从计算单元接收一个更新存储器的请求。该请求包括(例如,引用或明确提供)一个有待写入到存储器中的指定位置的第一值和一个有待满足以便该第一值用于对该存储器中的该指定位置进行更新的条件。该条件包括对该存储器中的一个第二位置的引用和一个通过该存储器中的该第二位置中的一个值满足有待的标准。访问该存储器中的该第二位置并确定该存储器中的该第二位置中的该值是否满足该标准。如果满足,则该第一值用于原子地更新该存储器中的该指定位置。在一个示例中,原子地包括该存储器中的该指定位置中的该值在该更新单元对该存储器中的该第二位置中的该值进行访问的时间与该更新单元对该存储器中的该指定位置中的该值进行更新的时间之间没有变化。
在另一方面,一种用于并行计算的装置包括一个更新单元、一个存储器;以及通过一个互连耦合到该更新单元的多个计算内核。每个计算内核能够执行一个指令序列,并且可操作用于在该指令序列的控制下将更新请求输出至该更新单元。这些更新请求被输出用于改变该指令序列对其具有写权限的该存储器的多个部分中所存储的数据。每个更新请求包括一个有待用于对该存储器中的一个指定位置进行更新的第一值和一个有待满足以便该第一值用于对该存储器中的该指定位置进行更新的条件。在一个示例中,该条件包括对该存储器中的一个第二位置的引用和一个有待通过该存储器中的该第二位置中的一个值满足的标准。该更新单元被配置成用于原子地发起和完成每个更新请求,在一个示例中,该更新请求包括该存储器中的该第二位置中的该值在该更新单元对该存储器中的该第二位置中的该值进行访问的时间与该更新单元将该第一值更新到该存储器中的该指定位置的时间之间没有变化。
一个方面涉及一种对存储器进行更新的机器实施的方法。该方法执行一项操作来生成一个第一值和存储器中的位置的标识符,并且产生包括该第一值和该存储器中的位置的标识符的更新请求。该方法向一个单独更新单元提供更新请求,该更新单元耦合用于从多个计算单元中的每个计算单元接收更新请求。该更新单元原子地执行一种方法,其中,访问存储器中的所标识的位置中的值,基于该第一值确定所访问的值是否满足一项条件,并且该更新单元响应地改变该存储器中的位置内的值。
例如,该更新单元改变该值所在的位置由该更新请求指定并且可以与该存储器中所标识的位置中的位置不同。例如,该更新单元可以使更新增量、减量、对其进行替换,这些更新中的每项更新可以具有更新请求中所指定的标准的条件。在一个示例中,该更新请求进一步指定一个第二值和该存储器中的一个第二位置的标识符。然后,该方法包括原子地用该第二值替换该存储器中的第二位置内的值,并且确定是否满足一项条件。
某些实现方式可以提供不具有独立地在共享存储器上发起写事务的能力的处理单元。该多个处理单元可以包括固定功能处理单元,这些固定功能处理单元被配置成用于在所接收到的输入上执行一种或多种预先确定的算法。如果没有满足该标准,则该更新单元进一步可以丢弃该更新请求。
在本披露的一个进一步方面中,一种计算装置包括一个主存储器、一个与该主存储器耦合的高速缓冲存储器;以及一个可配置有指令线程的处理器。从指令集中选择该线程中的指令,并且该指令集包括引起将所标识的数据从主存储器加载到高速缓冲存储器并且指示针对那项数据进行的预期读计数的指令。该高速缓冲存储器被配置成用于避免将那项数据逐出该高速缓冲存储器,直到确定有效读数量满足所预期的读计数。
该高速缓冲存储器可以包括一个高速缓存读代理,该高速缓存读代理通过接收读请求和使计数增量来追踪那项数据的有效读数量。该处理器可以能够在对该处理器进行配置的指令的控制下生成预提取数据的读请求。这些读请求可以来自与发起预提取的线程不同的线程,并且此类读请求指示那个单一读请求所表示的有效读数量。可以基于使用该数据有待在单指令多数据执行单元上并行处理的元素数量来确定每个读请求所表示的有效读数量。该高速缓冲存储器可以被配置成用于追踪预期读计数和高速缓存行每个字上的读数量。该高速缓冲存储器可以被配置成用于将预期有效读请求数量结合到高速缓存逐出算法中并且对已经针对至少一个数据元素进行的有效读数量进行追踪。响应于确定该高速缓冲存储器已经服务了预期读数量,该高速缓存逐出算法包括对存储如可逐出的预提取数据的至少一部分的位置进行标记。
此类装置还可以包括一个调度器,该调度器被配置成用于对可以参与计算(其涉及到至少一个共同数据元素)的元素的分组进行标识。该调度器可以引起在执行单元执行分组元素的计算过程中将对该至少一个共同数据元素进行标识的预提取请求从主存储器提取到高速缓冲存储器内,并且该请求指示有待针对所标识的至少一个数据元素进行的高速缓存的有效读数量。
在另一方面,一种并行计算系统中的计算方法包括如在调度器中确定有待在多项计算中使用的数据和形成对该数据和该数据有待在该多项计算的执行过程中预期的读数量进行指示的预提取读请求。该方法还可以涉及到向存储器控制器提供预提取读请求。该存储器控制器引起从存储器层次的元素中提取数据并将其存储在距离多个计算单元比从其中提取该数据的元素更近的存储器层次的元素中。在多个计算单元内执行多项计算,并且该多项计算的执行生成对该数据的单独读请求。对这些读请求的数量进行追踪。读请求的数量和所指示的读数量用于控制何时允许从在该多项计算过程中从其中读取预提取数据的存储器层次的元素中逐出该预提取数据。
响应于确定该高速缓冲存储器已经服务了预期读数量,可以通过对存储如可逐出的预提取数据的至少一部分的位置进行标记来控制预提取数据的逐出。还可以通过对一个或多个包含预期读数量所从属的(如最近最少使用的)数据的高速缓存行进行标识来控制预提取数据的逐出。
在一个特定应用示例中,在调度器处,标识一组光线,对这些光线进行与位于3-D场景中的一个或多个形状的相交测试。预提取请求的形成包括定义该一个或多个形状和指示该组中的光线数量作为有效预期读数量。可以在存储器中所包括的机器可执行指令的控制下由机器执行方法。
在根据本披露的另一方面中,一种并行计算系统中的计算方法包括对多个第一数据元素进行标识,该多个第一数据元素在将与这些第一数据元素不同的数据元素用作输入的计算线程的不同实例的执行过程中需要一个共同数据元素。该方法安排这些不同的线程实例在一个或多个计算单元上执行。分发对存储器单元的预提取读请求。该存储器单元与存储器进行接口连接并且被配置成用于响应于该预提取读请求而从该存储器检索数据以便存储在高速缓存中。对所检索的数据的请求是服务,并且对所服务的请求所表示的总有效读数量进行估计。可以防止逐出所检索的数据,直到总有效读请求数量的估计接近对所检索的数据的预期读请求数量。
一个方面包括一种使用光线追踪的3-D场景的图形处理方法。该方法包括在可编程计算单元内执行计算线程。该线程的执行包括执行来自指令集的指令,该指令集定义可以用于对该可编程计算单元进行编程的指令。该指令引起发布操作代码,该操作代码包括对光线、一个或多个形状、和有待针对该光线相对于该一个或多个形状执行的操作进行标识的数据。从预先确定的操作集合选择有待执行的操作。该方法还包括将该操作代码缓冲在非瞬态存储器中并读取该操作代码和在逻辑模块内执行该操作代码针对光线指定的操作,该逻辑模块独立于可编程计算单元执行并且能够执行由来自该预先确定的操作集合的操作组成的操作。
另一个方面包括一种用于对来自3-D场景的描述的图像进行渲染的装置。此类装置具有一个被配置成用于执行指令线程的可编程计算单元。这些指令来自指令集,该指令集定义可以用于对该可编程计算单元进行编程的指令。该指令线程包括一个能够引起发布操作代码的指令,该操作代码包括对光线、一个或多个形状、和有待针对该光线相对于该一个或多个形状执行的操作进行标识的数据。从预先确定的操作集合中选择有待执行的操作。该装置还包括一个互连和一个逻辑模块,该互连被配置成用于从该可编程计算单元接收该操作代码并且将该操作代码缓冲在非瞬态存储器中,该逻辑模块独立于该可编程计算单元执行。该逻辑模块能够执行由来自该预先确定的操作集合的操作组成的操作并且被配置成用于读取所缓冲的操作代码和执行该操作代码针对该光线和该一个或多个形状指定的操作。
附图说明
为了更全面理解在此披露的方面和示例,参照以下描述中的附图。
图1描绘了根据本披露的装置的示例组件的概观;
图2描绘了可以在其中实现本披露的各方面的装置的更详细的示例;
图3描绘了根据本披露的计算单元的示例实现方式的进一步方面和其他系统组件;
图4A至图4F描绘了数据和控制的示例进展,从而使得可编程计算单元可以控制有限功能处理电路;
图5A和图5B描绘了使用操作代码激活专用逻辑模块的示例和系统元件的互操作的各方面;
图6描绘了根据本披露的不同方面的包括多个操作组件的装置的各方面;
图7描绘了排列入队的光线测试操作的和使用更新单元生效的更新的示例过程;
图8A和图8B描绘了通过图3的示例装置的各组件的不同数据流的示例;
图9A和图9B描绘了更新单元的实现方式的不同示例;
图10描绘了可以在图9B的示例中使用的示例未决更新集合;
图11为执行可以在根据本披露操作的装置内实现的更新的进一步的示例过程;
图12描绘了存储器仲裁器服务的队列集合的示例,其中,通过更新单元填充这些队列中的至少某些队列;
图13描绘了根据本披露的示例的当使用更新单元时为读请求服务的示例过程;
图14描绘了由多个操作元件形成的更新单元的示例实现方式;
图15和图16描绘了根据本披露的可以被实施用于对更新进行串行化的示例过程;
图17描绘了可以具有有条件和无条件的更新队列的示例更新单元;
图18描绘了可以发布预提取读请求的示例性结构,这些读请求具有预期读计数并使用此类预期读计数执行存储器层次的分配和管理;
图19描绘了计算装置的示例性框图,其中,可以实施根据本披露的预提取读请求;以及
图20描绘了根据本披露的预提取读取和存储器层次管理的示例过程。。
具体实施方式
介绍以下说明以使得本领域普通技术人员能够制造和使用本发明的各个方面。仅作为示例而给出具体技术、实现方式和应用的说明。对此处描述的示例的各种修改对于本领域技术人员而言可以是明显的,并且在不脱离本发明的范围的情况下,此处定义的一般原理可以适用于其他的示例和应用。
在典型的3-D渲染中,3-D场景被转换成用于显示的2-D表示(尽管此类用法为示例性的并且非限制性的)。此类转换可以包括选择一个从其观看场景的摄像机位置。该摄像机位置通常表示场景的观看者(例如,玩家、观看动画电影的人员等)的位置。2-D表示通常在摄像机与场景之间的平面位置,从而使得2-D表示包括所希望分辨率下的像素阵列。通过渲染确定每个像素的颜色矢量。在光线追踪过程中,光线可以最初从摄像机位置投射并且在不同点处与2-D表示的平面相交,并且继续投射到3-D场景内。
在某些实现方式中,影响有待渲染的图像中的像素的所有数据来自光线追踪操作。在其他实现方式中,光线追踪可以用于实现所选择的效应,如全局照明,同时根据3-D渲染的光栅化方法处理可见表面的表面可见性和初始着色。在这些实现方式中,可以由一个或多个可编程计算单元执行大部分渲染工作。当在可编程计算单元上执行的代码要发布有待在3-D场景中遍历的光线时,此类代码可以直接调用一条将接受光线的定义并返回相交测试结果的光线遍历例程。此类结果可以是针对光线检测到的交点,并且在某些情况下,可以是所检测到的最近交点。此类光线遍历例程可以本身通过在可编程计算单元上执行的代码来实施。
然而,在根据本披露的一个示例实现方式中,软件可以暴露在更细化的光线遍历视图下,其中,在处理器上执行的机器可读代码可以对在光线遍历过程中进行的每项操作进行控制。例如,软件可以对有待在加速结构元素与给定光线之间进行的每个相交测试进行定义。这些测试可以来自多个并行执行元素(例如,不同的计算线程)并且可以被排队成由可配置专用测试单元(这种测试单元可以被实现为支持预定义操作集合的专用电路)来执行。在一个示例中,该可配置专用测试单元可以被配置成用于对光线进行与来自预定义形状类型集合中的任意形状类型的形状的相交测试。当针对由可配置专用测试单元实施的相交测试执行的操作类型允许时,重复使用实现可配置测试单元的电路。具体地,具有多种对给定类型的加速结构元素或图元进行与光线的相交测试的方法。可配置测试单元的实现方式基于将支持哪些测试过程,并且可以通过允许可配置专用测试单元中的各功能组件之间重复使用的设计目标来指导该实现方式。
此类实现方式可以解释有待支持的一种或多种类型的加速结构元素(例如,kD树、体元栅格、轴对准包围盒层次、球体层次等)。此类实现方式还可以解释有待支持的一种或多种类型的图元,如三角形图元。在三角形图元的情况下,具有多种检查光线与三角形图元之间的相交的已知方法。可以根据多种考虑选择三角形测试的实现方式;本披露的上下文中的一种相关考虑可以是选择可以在还可以用于(至少到某种程度)执行加速结构元素相交测试的硬件中实施的三角形测试。因此,该专用测试单元可以被设计成为实现方式特定电路,根据总体系统架构目标,其可以包括支持一种或多种指定类型的加速结构和一种或多种类型的图元。
在另一个方面,任务收集器可以对有待执行的计算部分进行分组。该分组可以基于计算的共同性和/或此类计算过程中有待使用的数据的共同性。该收集器可以与表示计算部分的线程池进行接口连接,可以从这些计算部分选择这些部分的分组来被调度或排队用于执行。该收集器可以根据高速缓存控制指导来生成预提取读取,该指导指示针对在计算分组的执行过程中将使用的数据元素所预期的读数量。本指导用于高速缓存控制或逐出过程中,以便标识从高速缓存逐出的候选项。
在另一方面,计算系统提供了一个更新单元,可以将对存储器位置(如寄存器组中的位置)的写特权委派给该更新单元。更新单元可以原子地执行更新。原子会意味着在更新单元本身内进行的所有操作出现为对该更新单元外部地可见的一项操作。此内容的含义在各实现方式之间可以不同。例如,当更新单元包括可以在一个时钟事件内完成并且在下一个时钟事件之前将数据准备好的组合逻辑时,对于任何子部分而言将不具有在该更新单元内处理从而引起在那下一个时钟边缘之前外部可见的效应的机会。对该处理的哪些部分必须是原子的要求也可以在实现方式上不同。例如,更新单元可能需要从一个或多个存储器位置读取、执行某些计算、确定一个值是否要被写入和一个值是否要写入,并且以原子的方式写入该值。在功能方面,可以提出满足原子性,如要求另一个单元不读取损坏(部分写入的)数据。在其他实现方式中,原子可以规定将一起更新两个或更多个存储器位置。当实现方式执行多周期读取时,当写入正在进行时,可以对有待更新的共享存储器位置进行上锁。不是所有实现方式将要求甚至在此类情况下上锁,并且某些实现方式可以仅仅依赖执行软件的正确性或此类软件的正确调度、和系统中的将尝试冲突存储器事务的其他元件。某些实现方式可以具有引起冲突存储器事务的能力(例如,仅更新存储器的单个端口,例如寄存器组)。其他方法将对此类存储器位置的所有写事务委派给更新单元。
在图形处理的背景下,此类更新单元的示例特定用途包括查找光线的最近交点的任务可以分散在多个并行执行处理元件之间。这些处理元件可以生成对光线的当前最近图元交点的更新。当前最近交点可以存储在寄存器组内。不是在处理元件之间仲裁其本身来使更新生效,更新单元可以接收每项更新并且代表这些处理元件处理这些更新。可以使更新单元以高效的方式实施多种更新。可以指定更新具有不同的特征;例如,针对光线相交测试,可以实现更新的活排序。
以下披露提供了特定示例,并且其他披露涉及这些方面和其他方面。
图1描绘了可以在其中实现本披露的一个或多个方面的示例系统1的组件的框图。系统1包括多个可编程计算单元(描绘了单元2和3)。这些单元能够被编程成用于执行来自指令存储器15的指令。指令存储器15可以被实现为例如指令高速缓存,其从存储器层次14接收指令,可以用例如L2高速缓存、L3高速缓存、和主系统存储器中的一个或多个实现该存储器层次。可编程计算单元2和3各自可以能够执行多个计算线程。调度器5可以调度可编程计算单元2和3。调度器5可以使用进行中的线程数据存储器6(例如,指令指针和已经开始但尚未完成执行的线程中的给定线程的当前状态)。例如,数据可以指示每个线程是处于阻塞状态还是就绪状态,并且可以指示针对那个线程有待执行的下一个指令。
调度器5的实现方式可以在具体的粒度等级下操作,从而使得线程可以被换出或以另外方式被调度来将每个计算单元中的资源子集差不多频繁地用于不同实现方式中。对于每个指令调度机会而言,某些实现方式可以允许独立的线程调度。可编程计算单元2和3的实现方式可以是以给定时钟为周期的单指令发布或多指令发布,并且可以被管线到不同程度。单元2和3中的每个还可以能够在SIMD执行单元中执行单指令多数据(SIMD)指令;此类SIMD指令中的条目数量可以在不同实现方式中(并且针对不同数据类型)不同。
可编程计算单元2和3可以将寄存器组11用作单元2和3之间共享的第一级工作存储器。可编程计算单元2和3还可以直接访问(没有中间存储)来自存储器层次14(例如,L2高速缓存)的元素的数据。在其他实现方式中,来自存储器层次14的数据可以被加载到寄存器组11内并且然后被使用。寄存器组11的各部分可以被存储器映射到存储器层次14的各部分。
可编程计算单元2和3通过互连7与缓冲器8通信。缓冲器8与有限功能处理电路9耦合。在一个示例中,缓冲器8可以被实现为一个队列,进而可以使用专用硬件资源实现该队列。通过设置位线的具体组合(以便在与互连7耦合的不同功能元件之间进行区分),缓冲器8可以是可寻址的。有限功能处理电路9也可以访问寄存器组11。
更新单元10与计算单元2和3耦合并且还可以与有限功能处理电路9耦合。以下将更详细地描述更新单元10。系统1还可以包括分组单元13,该分组单元可以起到全局工作协调器的作用。分组单元13从分组器12接收输入,该分组器耦合用于从可编程计算单元2和3和可选地从有限功能处理单元9接收数据。分组单元13起到组合具有某种共同元件的工作单元的分组的作用。在一个示例中,分组单元13负责确定要开始执行的线程集合(其中,调度器5调度单独指令)。例如,分组可以由是同一程序模块的不同实例的线程形成。还可以针对将在执行过程中使用相同数据元素中的一个或多个的线程形成分组。可以实现多个标准的组合(例如,同一程序的实例和使用相同数据元素)。可以从来自分组器12的数据确定这些分组,并且在某些情况下,还可以将关于数据组织的信息用于寄存器组11和/或存储器层次14。例如,分组器12可以接收关于某个计算部分的结果的信息,对于具体线程或数据元素而言,其控制着接下来要执行什么处理。然而,基于那些结果,分组单元13可以制作将被调度的另一个分组。
在一个特定示例中,可以用贯穿加速结构遍历光线的组成操作在3-D场景中遍历光线,并且然后对光线进行与剩余图元集合的相交测试,在贯穿加速结构的遍历过程中不可以排除该剩余图元集合。在某些实现方式中,可以按照遍历代码模块的单独线程实例来调度每个遍历步骤,该遍历代码模块生成一个对是否需要在加速结构的具体包围元素内进一步遍历一条或多条具体光线进行指示的结果。分组器12接收这些单独结果,并且然后分组单元13可以组合所有需要针对同一元素进行测试的遍历线程实例集合。因此,分组单元13通过引起将使用加速结构的同一元素或相同图元在可编程计算单元2和3上在相似时间帧内执行来减少跨互连到存储器层次14的流量。
在可编程计算单元2和3上执行的指令线程中的某些线程可以被配置成用于发布通过互连7和缓冲器8被引导至有限功能处理电路9的操作代码,这些操作代码将引起本电路9执行从预定义操作集合中选择的操作并且产生可以被输出至分组器12、更新单元10和寄存器组11中的一个或多个的结果。如下提供了此内容的更详细的示例。
图2呈现了来自图1的系统1的示例实现方式,可以在高度并行化的图形处理单元内实现该系统,例如,并且在一个更具体示例中,在具有用于基于渲染加速光线追踪的执行的元件的图形处理单元内实现该系统。在图2中,示例装置39包括接口40,该接口可以用于将系统39与另一个组件接口连接。接口40可以与在处理阵列65、任务分配器50、分组单元105和多个数据管理器45-48之间提供通信通路的总线43进行通信。装置39可以与L1高速缓存36接口连接(或包括该高速缓存),该高速缓存进而可以与高速缓存层次37通信,并且然后通信至系统存储器接口38。存储器接口66在装置39的存储器子系统内在寄存器组25与L1高速缓存36之间划分边界(在某些实现方式中,可以在同一物理存储器中实现L1高速缓存36和寄存器组25;存储器接口66还可以标识L1高速缓存36与高速缓存层次37之间的边界)。在图形处理器的背景下,寄存器组25表示可以用作在集群71-74中的可编程单元上并且还通过单元118-120执行的指令的来源和目的地的第一级存储器。
在处理阵列65内,可以提供处理集群71-74集合。每个处理集群可以包括一个或多个可以在来自其他集群的独立指令流上操作的处理元件。每个处理集群71-74还可以包括单指令多数据(SIMD)能力。互连65将集群71-74与队列61-63集合耦合,每个队列用作对应功能单元的队列。在图2的示例中,处理阵列65包括可以代表在集群71-74中执行的过程对纹理数据进行采样和过滤的纹理单元118、可以执行复杂数学计算(如超越计算)的复杂单元119、以及可以执行光线与加速结构元素和场景图元两者的相交测试的光线测试器120。可以在集群71-74之间共享寄存器组25。寄存器组25用作可以包括L1高速缓存36、进一步高速缓存层次37和系统存储器(接口)38的存储器层次中的第一级存储功能。在一个示例中,可以在逐指令的基础上访问寄存器组25,从而用作指令中所标识的操作数的来源和/或目的地位置。
示例装置39还包括可以在处理阵列65上设置计算块的不同管理器。此类管理器包括顶点管理器45、像素管理器46、计算管理器47、以及光线管理器48。顶点管理器45可以发起在集群71-74上调度顶点处理工作。此类工作可以包括例如几何变换。像素管理器46可以在集群71-74上调度像素着色工作。计算管理器47可以在集群71-74上调度矢量化计算。光线管理器48可以负责在集群71-74上协调光线处理。例如,光线管理器48可以管理装置5的用于光线追踪功能的总体用途,从而在其他管理器所管理的其他任务之间进行仲裁。
更新单元150具有一个或多个到寄存器组25的端口并且与队列81接口连接。队列81可以从多种来源接收更新请求,并且在本示例中,此类来源包括单元118-120。纹理单元118、复杂单元119、和光线测试器120中的每个可以输出所执行的计算的有待返回至发起此类计算请求的集群的结果(并且更具体地,有待通过可在那个集群上执行的过程接收,该集群有待接收此类结果)。集群可以生成有待由更新单元150执行的更新请求。可以基于使用从单元118-120返回的结果的计算来生成这些更新请求。
以下进一步详细描述了更新单元150的操作。可以包括在装置5内的其他功能性为任务分配器功能50,其可以用于在集群71-74之间分配离散计算工作负荷;在某些实现方式中,任务分配还可以将工作直接分配给单元118-120。可以提供中间结果聚合器51。当提供聚合器51时,被调度或分发用于按照分组单元105进行的分组执行的计算任务的中间结果可以通过聚合器51被发送至分组单元105。
然后,分组单元105可以使用这些中间结果来更新工作负荷的当前状态和确定接下来应并行执行哪些工作负荷。在一个示例中,中间结果可以包括与线程标识符相关联的下一个程序计数器,该下一个程序计数器指示所标识的线程要继续在哪儿执行。在另一个示例中,中间结果可以包括所标识的光线和形状(如加速结构元素)之间的相交测试的结果。然后,分组单元105可以使用此中间结果来确定与那条光线测试的一个或多个后续形状。在某些实现方式中,不提供单独中间结果聚合器,并且反而可以按照对可以从其中读取分组单元105的存储器的更新来处理这些中间结果。在某些实现方式中,分组单元105可以指示给定工作负荷要将最后结果写出至存储器,例如,至寄存器组25,从而指示那项工作负荷完成。
在示例装置39中,分组单元105操作用于定义可以通过在集群71-74上的并行执行来实现效率的计算任务合集。此类效率增益可以包括可以使用不同数据元素并行执行的计算部分、以及使用部分重叠并且不相交数据元素的计算部分。装置5可以标识将使用分组单元105进行调度的一种子类型的计算。可以独立于分组单元105调度其他子类型的计算;例如,分组单元可以针对集群71-74的调度进行仲裁。在图2的示例中,分组单元105包括合集定义器107和就绪集合106。
合集定义器107根据一个或多个合集定义启发法操作。第一阶启发法是有待并行执行的任务集合要求执行初始指令共同性(尽管在某一点,那些任务可能具有相异的执行分支)。分组单元105还可以基于在此类执行过程中有待使用的数据的共同性形成有待并行执行的合集。合集定义器107可以追踪需要执行的任务池,并且应用当前正在使用的调度启发法来确定有待在集群71-74上对任务进行调度的相对顺序(在一种实现方式中,任务可以对应于线程,而在其他实现方式中,可以通过计算线程(单个程序指令流)执行多项任务)。就绪集合106可以追踪针对合集定义器107进行的并行执行已经标识的任务集合。实现方式不要求提前标识合集,而是反而可以标识具有共同执行要求和/或共同数据集要求的任务合集。任务分配器50用于将来自给定任务集合的任务分散在集群71-74之间用于执行。在一个示例中,在集群71-74上执行的任务可以被实现为各自引用一个(对应的)指令流的对应计算线程。可以根据每个集群内的细粒度调度器在每个集群上调度此类线程,从而使得这些线程共享执行资源。在某些示例中,可以在逐指令基础上调度线程。
在一个具体示例中,线程可以生成用操作代码表示的有待通过光线测试器120执行的测试操作。此类测试操作可以指定有待对光线进行与例如所标识的形状或形状组的相交测试。在一个特定示例中,如根据图1,可以用操作代码集合表示预先确定的操作集合。在3-D渲染的背景下,这些操作可以包括以下操作:测试单条光线与单个形状、测试多条光线与单个形状、测试多个形状与单条光线、测试多条光线与多个形状、光记录数据库的查询,如可以提供对离轨迹最近的k条光记录进行标识。操作代码还可以支持指定光记录集合的所希望的汇总或平均,从而使得可以响应于操作代码返回一致大小的数据量。在图1和图2的示例中,描绘了一个有限功能处理电路。然而,在某些实现方式中,此类电路支持的所希望的功能集合可以在两个或更多个电路之间进行细分。关于如何实施此类功能或操作的决定可以涉及到确定可以如何在不同功能子集之间重复使用硬件元件。图1和图2描绘了有限功能处理电路可以用于与通常可编程处理电路的通信,这些可编程处理电路可以设置在图形处理单元内或
图3描绘了装置39的示例实现方式,其中,可以重复计算单元集合来形成根据本披露的计算装置。在图3的示例中,每个重复单元(例如,单元115)可以包括算术逻辑单元(ALU)118,该算术逻辑单元可以执行可以生成光线测试请求的程序,这些光线测试请求被提供至耦合到光线测试器120的队列122。在一种实现方式中,光线测试器120可以将此类测试的结果输出至所选择的或多个目的地。可以基于进行的测试类型或计算结果来选择此类目的地。例如,当是光线与图元的相交测试时,光线测试器120可以将测试结果输出至对更新单元150进行馈送的队列127。在另一个示例中,如果该测试是用加速结构元素,则可以形成带有一项或多项此类测试的结果的子分组121。例如,子分组121可以是多个测试结果的聚合点。可以将这些子分组馈送至分组单元105。分组单元105可以输出有待调度的计算分组用于在重复单元的ALU上执行。分组单元105还可以输出有待由重复单元的一个或多个光线测试器执行的计算。更新单元123可以基于从队列127获得的内容来更新寄存器125集合,这些寄存器为单元115所私有(不与另一个重复单元共享)。因此,图1和图2描绘了示例实现方式,其中,可以提供具有本地和共享资源的组合的不同数量的单元。这些单元可以与聚合了多个结果的分组单元进行通信并且可以向具体重复单元、或甚至其子部分分发计算用于执行。
图4A至图4F描绘了可编程计算单元2可以如何协调有限功能处理电路9(图1)的发起和用途的示例。在一个示例中,可编程计算单元2将一个或多个数据元素输出至如图4A中所示的寄存器组11;在操作过程中,有限功能处理电路9有待使用这些数据元素。在图4B中,可编程计算单元2还产生对有待执行的、从来自电路9所支持的预先确定的操作集合中选择的操作进行指示的操作代码并将此输出至缓冲器8。此操作代码对寄存器组11内包含有待在此操作中使用的数据的位置进行标识(或者在可编程计算单元2没有提前将该数据存储在寄存器组内的情况下,明确定义该操作代码中的数据)。
在图4C中,然后,有限功能处理电路9可以访问来自缓冲器8的操作代码。在一个示例中,电路9以先进先出的顺序访问来自实现缓冲器8的队列的操作代码。在图4D中,然后,电路9获得有待在来自寄存器组11和可能来自存储器层次14的操作代码所指定的操作中使用的任何元素。然而,在某些示例性实现方式中,电路9对存储器层次14的访问将是不允许的或不受支持的,因为预期此类访问将引发相对高且可能可变的延迟。在某些实现方式中,可编程计算单元2和3执行所需存储器访问并直接将操作代码中的具体操作所需的所有数据存储在寄存器组11、或其组合。操作代码还可以指定结果将被发送到其上的一个或多个目的地,这些目的地可以包括分组器12、寄存器组11、调度器5、可编程计算单元、以及更新单元10(参考图1)。图4E示出了电路9将结果输出至寄存器组11的示例和对计算单元2的完成指示。图4F示出了电路9将结果输出至分组器12的示例。实现方式可以为电路9提供这些输出选项的任何子集并且可以具有被设计成用于支持那个输出选项子集的数据通路。并且,实现方式所支持的计算模型会影响某些设计标准。例如,可以使用非阻塞计算模型,其中,发布操作代码的线程不包括稍后发生的需要阻塞来等待结果的数据依赖性。反而,结果可获得性可以用于控制独立调度计算的发布。在此类情况下,分组单元13可以接收结果并且发起这些计算。当计算模型支持线程阻塞时,调度器5将换出那个线程并调度可以执行的其他线程。然后,可以为调度器5提供完成指示,这些指示将允许调度器改变已经被阻塞等待结果可获得性的线程的状态。然后,那个线程可以访问(例如)寄存器11中的保存此类结果的位置。这些为示例,并且将理解到,可以在此类示例的实现方式中使用这些技术的其他变化和其他计算模型。并且,使用这些披露的实现方式的某些方法对于某些工作负荷而言比其他工作负荷更高效,并且将理解到,不要求实现方式支持单个计算模型。
图5A和图5B提供了在光线追踪的背景下使用电路9的示例方法的进一步细节。图5A描绘了可以由可编程计算单元2执行的示例代码段,该代码段可以来自第一指令线程(例如,指令1、2等)。这些指令包括达成的“条件(if)”语句,包括盒测试(Boxtest)指令。这种盒测试指令引用加速结构元素的位置(本示例中的盒,如轴对准包围盒)和对光线的引用(另一个示例是直接提供光线数据)。参考图5B,其示出了可以执行的示例过程,这种盒测试指令引起发布(179)有待输出至缓冲器8的操作代码,该缓冲器缓冲(180)该操作代码,以便由电路9最终消耗。该操作代码将指定有待对盒进行与所引用的(或所定义的)光线的相交测试。在图5A中,线程被示出为阻塞以等待此盒测试的结果。
电路9读取(181)该操作代码,并且执行(182)该操作代码所指定的操作,并且如以上所解释的,向一个或多个目的地提供(184)结果。该操作代码被解释用于将电路9配置成用于对所指示的数据进行所指示的操作。电路9如何被配置成用于执行所指示的操作可以取决于实现方式而不同。在一种方法中,电路9包括多个固定功能电路块,这些电路块实施有待在电路9中支持的不同操作的组成子操作。例如,电路9可以包括可以可配置地互连以支持具体操作的加法器、除法器、乘法单元、移位寄存器等。电路9还可以是可以基于所存储的微代码或其他形式的支持预定义操作集合的配置数据而配置和可配置地耦合的元件。如此,电路9不是通常可编程的处理器,而是反而可以被优化成支持预期用于具体任务集合的一系列操作。可以在系统规范和设计过程中、或稍后(如将该设计结合到具体片上系统内)、或在运行时间操作前的配置阶段过程中确定此预先确定的操作集合。
可以与以下部分并行执行图5B中所描绘的过程的此部分(181-184)。由于第一线程要阻塞等待结果,该第一线程的状态(例如,从运行状态)被改变(187)成阻塞状态。调度器5可以换入(189)一个或多个第二线程(如何实现交换可以在各实现方式之间不同,如取决于所支持的指令调度模型)。然后,调度(191)来自该一个或多个些第二线程的指令。可以监控(192)该第一线程在其上被阻塞的结果的可获得性,并且响应于结果可获得性,该第一线程的状态可以被改变成就绪(假设没有其他依赖性未满足)。然后,可以决定(194)重新启动来自该第一线程的指令的调度。
然后,可以确定‘具有图元(HasPrimitives)’。在一个示例中,本确定被实现为在可编程处理器上执行的函数调用。将实施本测试以确定盒是否是包围着图元的叶节点。如果该盒具有图元,则达成图元测试列表(PrimTestList)指令,该指令生成一个引起针对为盒A引用的图元集合对所引用的光线进行测试的操作代码(例如,存储在可从盒A定义数据的位置确定的存储器位置内)。否则,达成盒测试列表(BoxTestList)指令,该指令将生成一个引起针对盒A的子加速结构元素集合对所引用的光线进行测试的操作代码。这些指令中的每个指令可以被理解成根据图5B中所描绘的示例过程的实现方式来处理。
因此,图5A和图5B描绘了可以在其中使用软件控制但在加速硬件支持下实施光线追踪过程的各部分的示例。可使用指示具体操作的指令从软件访问该加速硬件支持。这些指令可以是用于为可编程计算单元写入的软件的指令集的一部分。此类有限功能电路9可以支持的其他指令的示例包括将3-D空间中的一个轨迹点与3-D空间中的其他点之间的距离进行比较的指令以及返回满足所指定的参数的一个或多个点的指令。此类操作可以用于确定所指定的光子是否在例如所指定的最大轨迹半径内。在一种意义下,电路9可以支持查询一个或多个几何元素的第一集合与一个或多个几何元素的第二集合的空间安排的操作。在某些实现方式中,取决于是否可以重复使用现有硬件组件或其某一部分来将操作结合到电路9内、用于对这些单元的互连进行重新配置的逻辑是否可以支持复杂性得到所希望的最大增加的操作来决定是否可以在电路9内支持该操作。这些是以设计为导向的定性指导,将从普通技术人员的角度当实现这些披露时理解这些指导。
图6和图18至图20描绘了系统1可以如何用于实践本披露的第二方面的概述。在图6中,分组单元13发起有待做出的存储器控制器15的预提取读请求。在一个示例中,预提取读请求致使存储器控制器15将数据从存储器14移动到寄存器组11内(或到高速缓存内,如L2高速缓存)。分组单元13可以生成预提取读请求连同分发一组计算任务(例如,新线程)来开始在一个或多个可编程计算单元上的执行,其中,那组任务将使用至少某些预提取的数据。该请求还将包括关于有待由集合中的数据组成的单独的读数量的信息。例如,如果分组单元13制作一个32项任务的分组,每项任务使用特定数据元素一次,则该分组可以指示预期32次读取。如以下解释的,此预期读计数用于控制高速缓存逐出行为。在某些实现方式中,分组单元13可以分发一组用于执行的任务和有待与那组分开执行的第一任务,该第一任务使得存储器控制器15针对指定数据元素的请求可以提供预期多少其他读取的指示符。
在某些实现方式中,可编程计算单元提出数据请求,通过存储器控制来服务这些数据请求。在此类情况下,存储器控制器15可以生成对为差异数据元素保持的读计数的更新,为这些差异数据元素追踪读计数。在其他实现方式中,为所请求的数据服务的存储器(例如,寄存器组或高速缓存)包括对读计数进行追踪的逻辑。在某些实现方式中,更新单元10可以基于更新单元10所接收到的读计数更新来保持这些读计数,这些更新可以来自多种不同来源。在更新单元10的其他用途和操作方面的上下文中解释了更新单元10的用于保持这些读计数的用途。
图7描绘了第一示例过程,通过该过程,更新单元150可以代表计算任务或其他功能单元使存储器(如寄存器组25)上的更新生效。在205,更新或创建更新单元150已经为其委派权限的存储器图。在一个示例中,该存储器图对一个或多个存储器内的、更新单元150已经为其委派了写特权的区域进行标识。在207,执行线程(作为有待执行的任务的示例),并且此类执行生成测试操作。在209,将这些测试操作排队在队列63内。可以按照队列地址的使用或其他标识符将队列63标识为此类任务(而不是例如单元118或119)的目的地。因此,在装置5中,多项任务可以生成有待被排队在队列63内的测试操作。
在213,光线测试器120产生测试操作的结果。在一个示例中,光线测试器120连续地对排队在队列63内的测试进行操作。光线测试器120基于测试操作的结果将更新请求排队入列。例如,如果光线测试器120找到光线与给定几何元素之间的交点,则将最近的交点更新操作排队入列。在一个示例中,尽管测试所找到的交点事实上是否比针对那条光线找到的已经最近的交点更近不是已知的先验知识,但将最近的交点更新操作排队入列。例如,光线测试器120可以不读取寄存器组25中的为正在测试的光线将当前的最近交点所存储在其中的位置。即使光线测试器120要读取此类数据,光线测试器120仍然将必须执行新找到的交点和当前最近的交点的距离之间的比较。更新单元150可以测试指定的条件,在这些条件下进行更新,该更新可以在更新请求中指定。此外,这些更新请求的来源可以在将更新排队入列(决定排队入列)到更新单元之前对其他条件进行评估。
在221,更新单元150从队列检索更新请求,并且在223,评估该更新请求所指定的条件是否指示可以执行该请求。此类条件可以根据情况而不同。评估这些条件可能要求将用该更新提供的一个或多个值与所存储的参数值进行比较。如果要执行该更新,在229,可以检查更新单元150是否已经委派了对更新请求所影响的位置的写特权。检查所委派的写特权是可选的,因为某些实现方式允许更新单元写入任何存储器位置。如果不是可选的,则在227,更新单元150可以生成一个对这些位置上锁的请求。如果更新单元150已经委派了写特权,则在233配置和在235执行更新操作。在231,确定是否已经获得上锁,并且如果获得,则在233配置和在235执行更新。更新单元如何获得上锁取决于实现方式,因为某些实现方式可以提供使单个周期内的写入生效的能力,从而使得只要更新单元获得其将写入的单个周期内的上锁,就不存在单元读取损坏(部分写入)值的危险。
图8A和图8B描绘了根据本披露的某些方面的控制/数据的示例流程,以便实施计算和结果更新。图8A示出了光线测试器120将计算结果输出至集群71,并且然后集群71向队列81提供更新请求以便由更新单元150执行。图8B示出了光线测试器120将更新请求直接输出至队列81。在图8B的方法中,光线测试器120可以执行前述步骤(如果有的话)来确定是否生成更新请求,同时在图8A中,这些步骤可以由集群71执行。图8A和图8B的方法不是二选其一,并且实现方式可以提供两者。
可以用不同能力来实现更新单元150,每种能力将引发不同的成本或引起不同量的实现复杂性。图9A描绘了更新单元150的实现方式的示例,该实现方式实现了所专注的能力集合。具体地,在图9A中,更新单元可以在先进先出的基础上执行所定义的更新操作集合。然而,在一种方法中,这些更新是有条件的。在图9A中,队列接收更新请求,这些更新请求可以包括一个值、一个位置、以及操作和一个或多个条件。在某些实现方式中,不是所有这些元素都可以存在,并且在某些实现方式中,尽管某些更新请求具有所有元素,但不是所有更新请求可以具有所有元素。在某些实现方式中,用值和操作隐含条件。在一种方法中,可以考虑更新请求使用预定义更新请求格式集合。可以提供这些作为指令集架构的一部分(例如,在集群上执行的程序可以发布更新请求指令)。这些更新请求格式还可以是内部的,而不是暴露在外部。示例操作包括测试与集合、有条件增量和减量、比较和交换操作。
尽管指令集架构可以提供比较和交换指令,例如,区别为与实现所披露的本更新单元150的方面的装置相比将如何在典型的处理器指令集架构中实现此类指令。在此,更新单元150对可以来自多种不同处理器的更新请求队列进行操作,并且代表这些处理器使这些更新在存储器上生效。如此,将不通过处理器的典型指令管线来处理这些更新请求。图9A描绘了读单元410可以从队列81读取下一项更新、解析更新请求的各个细节、并且从该更新请求所指定的一个或多个位置读取多个值。逻辑411基于所读取的数据和该更新请求中所提供的信息来确定该更新请求的各个细节。例如,当更新是有条件的时,逻辑411对条件进行评估并且确定该更新是否应该继续进行。上锁单元412可以获得有待更新的位置上的上锁,并且然后,写单元413可以写入数据从而使更新生效。上锁单元412还可以对存储被输入至条件句的数据的位置进行上锁。在某些实现方式中,可以不需要上锁单元412或者其用于所有更新,如当(某些)存储器事务仅需要单个存储器周期时,以及当一致性要求不要求读和写的特定相对排序时。
根据本披露的更新单元的实现方式可以在评估条件与取决于评估的结果而将数据写入至存储器位置之间提供原子更新能力。例如,更新单元可以处理对两个存储器位置进行标识的更新请求,其中,这些存储器位置之一包括一个用在条件句中的数据元素,并且如果该条件评估要求更新,这些存储器位置中的另一个位置是更新数据的目标。在此类情况下,有条件位置的读取、评估和写回可以是原子的,意味着在系统中不暴露不一致架构状态。然而,本披露的实现方式不要求强一致性模型。例如,可以缓冲一项或多项更新,这会引起具体存储器位置的改变,但可以允许那个存储器位置的当前值的读取,在某些实现方式中,尽管鉴于未决更新,那个当前值不是当前的。此更松散的一致性存储器模型可以被限制到存储器中的特定区域,并且更新单元可以被配置成用于针对存储器的不同区域而表现不同。例如,更新单元150可以被配置成用于对存储器位置进行上锁从而防止被读取、搜索其队列来找出对那个位置的所有更新、以及在解锁之前使所有相关更新生效。可以例如基于不同的更新请求类型、或基于每项更新所暗示的存储器区域来激活不同的更新行为。
图9B描绘了更新单元可以在其中无序地处理更新请求的示例。在一个示例中,队列81包括更新纳入逻辑82,该更新纳入逻辑处理所接收的更新并且在此类初始处理之后将那项更新存储在更新存储器83内。更新单元150还可以包括未决更新表152和所拥有的存储器图154,该存储器图追踪存储器更新单元150的哪些区域可以更新而不明确针对访问进行仲裁或寻找上锁。可以通过线程存储器图设置单元160来设置此所拥有的存储器图154。可以通过存储器控制器、或例如存储器管理单元来实现单元160。在图2中,更新单元150与寄存器组25进行接口连接(或举进一步例子来讲,图1的寄存器组11)。然而,更新单元150还可以与其他存储器进行接口连接。
更新请求可以指定有待读取和/或写入的多个元素为条件的一部分、和/或有待更新的位置的一部分。例如,可以基于指定一个值与不同存储器位置进行比较的条件句来更新一个位置。实现方式可以限制这些位置相互之间分离有多远(在虚拟或物理存储器中,取决于支持更新单元150的存储器转换能力)。
更新单元150的某些实现方式可以支持更复杂的更新请求和/或此类请求的更复杂的处理。在图9B中,更新单元150可以支持无序更新完成、更新塌陷(collapsing)、串行化、最大延迟边界、QoS、和优先级、或这些特征的某一子集。此类更新单元150还可以支持存储器位置的不同子集的不同处理。
图10描绘了关于更新单元150的功能性的进一步细节。在图10的示例中,未决更新表152可以被保持成包括每项更新的信息,包括有待更新的存储器地址170、此类更新的更新特征指示符171、以及最大延迟或优先级要求173。更新特征指示符171可以指示更新是可塌陷的,其是指是否可以结合那个地址的另一项更新来使更新操作生效。例如,可以通过使两项或更多项增量操作塌陷成一项具有合适增量值的更新来实现它们。如果更新是可盖写的,则可以通过仅实现稍后进行的更新来使在不同时间对同一位置的两项更新生效。串行化指示不应改变或盖写更新所表示的值,直到其已经被使用。更新还不会具有这些特殊特征中的任何特征,或可以在更新请求中没有特定信息的情况下默认一个特征。在另一个示例中,更新所表示的操作类型控制着如何处理更新。例如,如果追踪对合集定义器107所保持的不同合集中的光线的多个引用,则当光线完成时,可以生成减量操作。此类操作可以结合针对同一光线的其他减量(和增量)。作为可盖写性的示例,当更新所检测到的最近交点距离时,可以认为可用稍后进行的更新盖写早前进行的更新。更新还可以要求串行化。例如,串行化更新流可以用于在不同函数或执行单元之间传递数据,从而使得在已经使用前一个值后使后续更新生效。另一项示例更新操作是混合函数;例如,可以给予当前值和新值加权平均和写回。可以应用其他加权函数并且可以在更新操作本身中对其进行指定。如可以从这些示例证明的,更新单元150可以实现针对不同种类应用工作负荷可以进行的多种不同更新操作。尽管某些更新类型可以不要求总是写入最新值,但更新将通常要求正在更新的存储器位置内存在有效(即使不是当前的)值。
可以强加在更新事务上的示例条件可以包括要求值大于、小于、等于、或不等于所提供的值。此类条件可以包括要求所提供的参考值在一定范围内或不在一定范围内、或在枚举集合内或在其外。例如,更新事务可以用另一个元素(如果枚举集合中不存在的话)补充枚举集合。可以强加多个条件作为替代或联合条件。还可以按照一系列相互依存的有条件更新请求提出更新请求。例如,一个更新请求的结果可以是为该系列中的后续更新请求保留的二进制值,该更新请求可以将那个二进制值用于条件句中,并且最后,可以取决于条件句链使一个或多个存储器位置的一项或多项变化生效。此类系列更新可以用于复杂的如果则(if-then)判定语句生效,其中,可以将计算上困难的操作分流给能够被配置成用于高效地执行此类操作的电路。
图10还描绘了当要对同一位置(例如,寄存器)中的多个不同部分进行更新时,可以在该基础(而不是例如执行对那个位置的多次掩模写入)上聚合更新。此类处理产生寄存器位置177和178的最后内容,这些内容可以用于更新对应的存储器位置。
图11描绘了可以通过更新单元150实现的示例过程,以便提供根据以上描述的特征。在302,接收新更新请求或未决更新的状态信息。在303,确定所接收到的信息是否是未决更新的状态信息。在所介绍的示例中,此类状态更新与是否已经满足对未决更新的串行化要求相关。在一种实现方式中,串行化产生一项要求:以程序顺序提交更新集合,因为某些实现方式允许不严格的更新一致性,而不是要求特定的提交顺序。下面进一步详细描述这一点。如此,在311,确定该信息是否指示满足串行化要求。如果满足,则在330,可以将更新添加至优先级/中间更新队列。此类优先级/中间更新队列可以用于存储具有升高的优先级或者在它们继续进行之前没有其他要满足的条件的更新。如果不满足串行化要求,则该过程可以返回至302。
如果该信息不是针对状态更新,则在本示例中,其表示新的更新。在304,从该更新中获得存储器(例如,寄存器组)中的位置。在311,确定该更新是否要求串行化。如果要求,则可以如此对那项更新进行分类并且将其置于等待状态,假设目前不满足该串行化要求。在306,执行对同一位置的其他未决更新的检查。如果存在此类匹配更新,则在312确定任何此类更新是否可塌陷。在某些实现方式中,可塌陷性的确定可以使用配备有更新的明显指示符或可以基于有待通过更新生效的操作类型。举例来讲,增量和减量操作是可塌陷的。更新单元150还将需要被实现成具有为有待塌陷的最大更新数量表示可能的数字范围。例如,增量操作可以仅引起增量一个预先确定的数字,但如果增量是可配置的,则该操作将需要支持能够表示该增量的位字段。更新单元150中还需要逻辑来支持从未决更新中计算该增量。此类逻辑可以执行多次迭代。
在316,如果具有两项或更多项可塌陷更新,则通过确定表示组合效应的值和设置将存储那个确定值的更新来塌陷这些更新。否则,在318,保持这些更新。在310,确定新的更新是否可以盖写一项或多项现有更新。在314,可以移除可以被盖写的任何更新。例如,当两项或更多项更新指定有待写入同一位置的值时,可以保持按顺序稍后的值,并且可以移除早前的值。在其他实现方式中,更新单元150可以实现用于评价任一值是否比另一个值更好地满足标准并保持此类值的逻辑。例如,在光线追踪中,可以希望光线与场景几何形状最近的交点。如果标识了同一光线的两个或更多个图元交点,则可以在这些更新之间标识更近的交点。实现此类最近交点追踪中的可编程更新150将从其存储位置读取最近的交点并将其与来自更新的值进行比较。实现此内容的逻辑还可以用于对来自多项未决更新的值进行比较。如此,更新单元150可以并行地对与不同操作相关的多项更新进行操作(例如,盖写更新和增量更新可以并行继续进行)。就组合更新可以被限制到更新由于例如上锁条件而不能继续进行的情况的意义而言,组合更新可以是机会性的。
在图11中所描绘的过程中,在324,可以确定上述处理之后剩余的更新是否指定延迟或优先级要求。此类延迟或优先级要求可以包括指定到完成的最大延迟或时间或相对于其他更新的优先级。还可以从更新类型或基于正在被更新的位置推断此类延迟或优先级要求。调度器可以为某些存储器位置输入优先级数据,应针对这些存储器位置确定更新的优先次序。例如,此类调度器可以通过算法而具有对具体数据元素的进展的可见性,或者该一个或多个其他过程等待具体更新。在330,可以将具有相对高的优先级或最大延迟要求的更新添加至优先级/中间队列。如以上介绍的,还可以将要求串行化的更新添加至此类队列,从而反映可能阻塞过程等待此类值,并且这样,串行化可以被视作为有待有区别地处理的更新的特殊示例情况。
图12描绘了根据以上披露的实现方式中针对存储器访问的仲裁的各方面。在图12中,寄存器组313用作有待读取和更新的存储器。寄存器组313具有通过其使事务生效的一个或多个端口。这些端口可以包括一个或多个双向端口,从而支持读和写事务两者。其他实现方式可以具有两个或更多个单向端口。某些实现方式可以具有多个冗余端口。某些实现方式可以为多个计算单元中的每个提供一个单独端口。仲裁器311可以在对寄存器组313的部分的冲突访问之间进行仲裁。
某些实现方式可以支持一个或多个专用单元以便每个单元耦合至寄存器组(例如,每个计算单元)。然而,图12的示例是针对通过更新单元150与一个或多个其他单元(例如,集群71-74中的一个或多个)之间共享的一个或多个端口的访问进行仲裁的一个示例。存储器访问仲裁器311从图12的示例竞争需求之间处理此仲裁。这些需求包括为优先级更新队列305、就绪更新队列306、非上锁读队列308和阻塞读请求队列309服务。因此,本示例例证了通过更新单元150进行更新的情况,代表计算元件做出动作,同时直接从这些计算元件生成读事务。考虑图2作为示例,集群71-74和单元118-120全都可以删除对更新单元150的某些写事务。
继续图12的示例,优先级更新队列305、就绪更新队列306表示有待对寄存器组313进行更新的两个不同来源。由更新单元150中的逻辑馈送这些队列中的每个队列,该更新单元可以盖写或塌陷更新,以及验证有待进行的更新的准备的先决条件。如此,这些队列表示所有准备就绪进行的更新,但具有不同的优先级,并且因此,通过一种允许相对优先次序化的机构来实现这些队列,并且没有隐含对物理或逻辑单独队列的要求。
非上锁读队列308和阻塞读请求队列309分别存储可以被服务而不需检查正在读取的位置的上锁条件的请求、和出于某种原因被阻塞的请求,如等待事务完成或解锁。非上锁读队列可以存储从多个位置的读取,这些位置存储了在一种将达成正确结果的计算中使用的值,即使乱序使用或返回中间结果。例如,可以通过未上锁的读请求读取光线的最近交点,此处,未上锁意味着当更新未决时没有约束位置,意味着确定更新队列(例如,队列306或307)是否包含那个位置的更新,或意味着计算单元可能正在执行可以最终产生那个位置的更新的计算,或其某种组合。
如果以此类方式读取此类最近的光线交点,会存在对最近交点距离的未决更新将排除执行给定相交测试(其中,被测试的图元位于前一个最近交点与等待写入的交点距离之间)的需要的情况。然而,最终,光线的最近交点距离将收敛到正确的结果,因为相交测试将产生一个将生成更新的交点距离,该更新将引起更新单元150对当前最近交点距离(可能已经用然后未决的更近距离对其进行了更新)进行比较,并且取决于那项比较来更新。非上锁读请求的更多琐碎示例包括对已知用于存储静态值(静态适用于给定的计算背景,其可以随时间而变化)(如光线或加速结构元素的定义)的存储器区的读取。
通过将更新责任委派给更新单元150解决了对这些位置的潜在写后写危险,从而使得多个独立参与者在正常程序执行中将不会写入到这些位置。在某些实现方式中,如当更新单元150用于更新高速缓存时,或者当过程在虚拟化地址空间中提出更新请求时,可以在存储器管理单元(MMU)内提供附加写保护。例如,MMU可以强制执行读位置和写位置并且执行地址事务功能。例如,更新事务可以包括进程标识符,更新单元150可以向MMU呈现该标识符,并且MMU可以使用此过程标识符来验证写权限。然而,在寄存器组的背景下,可能不令人希望的是提供此类进程特定存储器保护。
图15描绘了过程流程,通过该过程流程,可以为来自阻塞读请求队列109的读队列服务;图9用作由于存储器上锁而服务阻塞请求的示例。然而,出于不同原因可以阻塞读请求。一种此类原因可以是要将从存储器位置的读取串行化,并且已经读取了当前值,而新值还没有存储在那个位置内,但等待存储在更新队列内。图15还示出了可以在其中为上锁和未上锁读请求实现单一队列的示例。在321,获得读请求,并且在323,标识有待读取的存储器地址。在325,确定该存储器地址是否在可上锁区域内,并且如果在,则在327,检查该地址当前是否上锁。如果该地址没有上锁或该地址没有在可上锁区域内,则在329,允许读取。如果该地址上锁,则可以重复327处的确定,如以一定时间为间隔。可替代地,可以用信号发送解锁,并且响应于用信号发送当前上锁完成,在329可以允许读取。当给定读取不能继续进行时,可以发起队列中的可以继续进行的下一项读取。可以监控读队列的吞吐量以减少或避免不平衡和保持能够在计算单元上执行的工作类型的多样性。存储器访问仲裁器311可以提前检查读请求以确定可以执行的替代读请求(如果主读请求以不能够继续进行而结束)。
因此,以上披露涉及一种计算架构的各个方面,可以在该计算机构中实现可配置专用光线测试单元。可以由队列馈送本单元,由生成光线测试请求的计算单元填充该队列。本单元可以根据存储器中有待生效的更新请求来输出结果。将响应于读请求(来自任一队列)的数据示出为通过数据返回307被返回。此类数据返回307可以被实现为总线或点到点连接或其组合。
图14描绘了可以在其中通过多个操作单元实现的更新单元150的示例。在一个示例中,更新单元404和更新单元405可以读取队列402。更新单元404可以包括一个被配置成用于读取对来自队列402的更新请求进行描述的数据的读单元、和用于对是否要进行更新(更新不必是有条件的)进行评估的逻辑411。在某些实现方式中,更新单元404可以包括上锁单元412,该上锁单元被配置用于获得对存储器中的有待更新的一个或多个位置的上锁。单元404还包括用于向合适的存储器位置提交更新的写单元413。在一个示例中,每个更新单元可以交换当前由任一单元上锁用于更新的地址。可以提供同步器425,该同步器可以控制哪个更新单元为哪些更新请求服务。举例来讲,可以根据所预期或所检测的更新模式配置更新单元。例如,一个更新单元可以处理对具体存储器区的所有更新,或者处理具体的存储器访问模式、或具体的有条件的更新(例如,测试与集合、vs增量)。
图15描绘了处理更新事务的示例。在图15中,更新事务集合530包括两个更新事务。更新事务1用值B更新寄存器2并且不要求串行化,而更新事务2用值A更新寄存器3并且要求串行化。在531,接收更新事务1并对其进行解码;因为该事务没有被串行化并且不包含条件。在533,可以将更新事务1排队入列。在535,接收更新事务2并对其进行解码。此处,由于针对此更新指定了串行化,为寄存器3确定读锁位和写锁位两者是否被清零。如果读锁和写锁两者被清零,则在536,设置读锁位和写锁位两者,并且在537,将更新2排队入列。后续(可能具有可变延迟)执行更新2,并且在539将写锁位清零。因此,图8展现了更新机构。
图16描绘了对应的读取机构。在图15中,指令流540包括用于实施涉及到寄存器2和3的操作541的指令。如以上所讨论的,寄存器3具有要求串行化的未决更新事务。在550,对表示操作541的指令进行解码。550处的解码对操作541中隐含的寄存器进行标识。然后,在551进入延时或等待状态。根据有待在536生效的上锁事件所需的时钟事件的数量选择延时状态。例如,如果在一个时钟输出更新事务2,并且在后续时钟由更新单元150对其进行接收和解码,则延时状态可以持续一个时钟,从而使得如果操作541在与更新事务2相同的时钟发布,则来自更新事务2的上锁事件将在一个时钟内可见,从而允许基于上锁的存在而延迟操作541和避免在使前一个发布的更新生效之前处理读取的危险(因为这是串行化事务)。在552,确定是否设置了写锁。如果设置了,则在554,不允许操作541(当该操作包括来自寄存器3的值的使用时)。如果没有设置写锁,则在556,允许操作541。556之后,在558读锁被清零。该过程可以返回550以便进行进一步的操作解码。某些实现方式可以为所保持的操作提供队列。该队列保持读事务的相对顺序。因此,写锁的使用防止在更新单元150的最后写入已经生效之前读取数据。读锁的使用防止更新单元150盖写还没有在操作中使用的值。可以通过根据本披露设置和清零的位来实现写锁和读锁中的每个。这些位可以实现在充满其他锁位的寄存器中或附加到单独寄存器。锁位的状态可以用于选择更新操作和从串行化位置读取数据的操作,从而使得相关联的计算可以进行。
图17描绘了可以基于更新是否是有条件的和相应地进行来将它们排队入列的示例。在图17中,有条件的更新队列560保持多项更新,针对这些更新,在要执行更新之前要求满足一个条件。在568,对该条件进行评估,并且在569,如果满足该条件,则将更新放入就绪队列572内。否则,在571,将该更新返回至或保持在该有条件的更新队列内。无条件的更新队列直接与就绪队列572接口连接。虽然有条件的更新队列560可以保持多项更新持续一段相对长的时期,但无条件的更新队列可以快速地使更新前进至就绪队列572。就绪队列572可以实现图12的就绪队列306。
图18描绘了可以在根据本披露的计算架构内实现的进一步技术。在图18中,计算元件(例如,线程360-362和专用单元364)或控制组件(例如,分组单元105)可以生成可以直接针对存储器子系统的预提取请求(例如,请求391)。每个预提取请求可以指定有待从其中提取数据的一个或多个地址和数据将被使用或读取的预期次数。在某些实现方式中,此类预提取请求可以与对将用预提取数据进行的处理进行描述的信息捆绑在一起,如有待执行的操作和结果可以存储在其中的位置。此类预提取请求用于使所指定的数据从存储器层次的较远程层级(相对于使用该数据的计算单元)前进到存储器层次的较近程层级(例如,从主存储器到高速缓存)。在许多典型的计算系统中,响应于高速缓存缺失,从远程存储器检索数据,正在执行的将此类数据用作操作数的指令引起该高速缓存缺失。然而,此处,数据被指示为在将来使用时需要。并且,可以使用该数据的计算单元或过程不一定由预提取请求本身指定。例如,分组单元105可以分发预提取请求,并且在所分散的计算单元上执行的线程可以最后读取和使用该预提取数据;可以随着时间分散此类用法。
在图18中,预提取请求会引起将所指定的数据从主存储器390提升至高速缓存36。存储器接口66可以包含存储器管理单元382并且控制对高速缓存36的访问。高速缓存36可以是n路交叉高速缓存。存储器管理单元382可以包括一个用于支持虚拟存储器的地址转换器。存储器接口66还包括光线计数追踪380和逐出逻辑383。光线计数追踪380追踪对高速缓存36内的存储器位置的读计数。在某些实现方式中,读计数追踪仅对高速缓存36内的基于预提取请求填充的位置的读计数进行追踪。逐出逻辑383将来自读计数追踪380的读计数和针对高速缓存36中的位置中不同位置的预期总读取(例如,源自预提取请求)用作确定将要进行逐出高速缓存行时的因素。指令集架构可以为计数追踪预提取读取提供指令。出于高速缓存管理目的,本指令将致使高速缓存与正常高速缓存的读取有区别地对本数据进行处理。此类数据还可以存储在与正常高速缓存管理区域有区别地处理的具体存储器段(虚拟的或物理的)内。某些实现方式可以允许专用单元还发起读计数追踪预提取读取(例如,光线测试器120)。
功能元件(例如,线程360-362和光线测试器120)可以指定单次物理读取表示的读数量。例如,分组单元105可以指示在对给定加速结构元素进行与20条光线的相交测试时预期对那个形状读取20次。然而,线程360可以在4宽(4-wide)SIMD机器上执行以对4条不同光线进行于该形状的相交测试。因此,此读取应被誉为4次读取。在本示例中,还可以基于附加预提取请求使读计数追踪380增量。例如,分组单元105可以确定与同一形状进行相交测试的另一光线集合,并且根据那个集合中的光线计数分发第二预提取请求。该形状已经在高速缓存36内,并且将不需要被重新加载。来自前一预提取请求的剩余计数可以添加至针对下一个光线集合的计数。读计数可以被表示为可以从队列读取的单独数据元素。还可以在高速缓存行的基础上在读计数追踪380内展现读计数。例如,当将数据元素装入高速缓存行内时,需要建立一个惯例,从而使得读取不针对将不用于那次读取的数据元素进行计数。此类惯例可以使用掩模读取,或明确指示该读取与那个数据元素相关。某些实现方式可以尝试将读取聚合到同一高速缓存行,并且该惯例可以是读取适用于所有数据元素,除非另外指明。这些选项为示例性的,并且可以实现在逐元素的基础上或在高速缓存行的基础上追踪读计数的其他方法。
在某些实现方式中,更新单元150可以用于更新所追踪的读计数。例如,更新请求还可以基于产生更新所进行的处理来指定要进行的读计数更新。在此披露的预提取请求还可以用于将数据从高速缓存36提升至寄存器组25,并且读计数可以保持在该寄存器组的多个部分内。
图19描绘了多核计数装置的示例框图,该装置以逐出逻辑(使用计数估计)来使用高速缓存的预提取读取、和更新单元。根据本披露的计算装置可以仅使用这些技术中的一种。图19描绘了可以使用高速缓存的预提取读取数据410的内核405和406。存储在所高速缓存的预提取读取410内的数据来自预提取设置单元420控制下的存储器层次414。更新单元422与用于接收有待在存储器层次414内进行的更新请求的队列耦合。高速缓存逐出逻辑412确定进行逐出的高速缓存行。
图20描绘了可以在其中实现此处的预提取读取披露内容的示例过程。在451,接收读请求,并且在453,为读请求标识存储器地址。可选地,在457可以开始读取可允许性过程(如检查位置的上锁)。如果在459允许读取,则在455,可以检查存储器是否是预提取读请求位置。如果不允许读取,则该过程可以等待直到允许。在某些实现方式中,还可以使读取延迟。如果读取可以进行并且其在预提取读取位置,则可以在461标识读计数并在465使其减量。如以上解释的,该减量可以基于特定读取所表示的读取量。在475,读计数可以进行。在467,如果读计数指示完成,则可以将相关联的位置标记为逐出候选者,并且在480,该过程可以终止。如果读计数没有指示完成,则该过程可以在480终止。
为了描述清楚起见,例如图元(如三角形的三个顶点的坐标)之类的特定类型对象的数据经常被简单地描述为该对象本身,而不是指代该对象的数据。例如,如果提到“提取图元”,则应理解到,正在提取表示图元的数据。
通常通过提供接近对象的表面(即,线框模型)的大量平面几何图元在3-D场景中展现现实的且非常详细的对象。如此,可能需要比更简单的对象更多的图元和更小的图元来展现更错综复杂的对象。尽管提供了更高分辨率的益处,但在多条光线与更大量的图元(如以上所描述的,和以下将进一步描述的)之间执行相交测试是计算密集的,尤其是因为复杂的场景可能具有许多对象。并且,存储要求随着用于展现对象的图元的数量的增加而增加。
此外,尽管以结构特征和/或方法步骤的示例专用的语言描述了某些主题,但应理解的是,所附权利要求书中定义的主题不一定局限于这些所描述的特征或动作。例如,可以将给定结构特征归入另一个结构元素内,或此类特征可以分开在不同组件之间或被分配给不同组件。类似地,过程的示例部分可以被实现为副产品或与另一动作或过程的执行并行实现,在某些实现方式中或者可以按照多个单独动作来执行。如此,根据本披露的实现方式不局限于那些与所描绘和/或描述的示例具有1:1对应关系的实现方式。
以上解释了计算硬件和/或软件编程的各个示例,以及此类硬件/软件可以如何相互通信的示例。这些硬件或配置有软件的硬件的示例和此类计算接口提供了用于完成归属于它们中的每个的功能的装置。例如,用于执行在此披露的软件过程的实现方式的装置包括用于将机器配置成用于执行此类过程的机器可执行代码。本披露的某些方面与有限可配置性或固定功能电路实施的过程相关,并且在此类情况下,用于执行此类过程的装置包括专用和有限可编程性硬件中的一个或多个。在通用计算机上执行的软件可以控制或调用此类硬件。可以作为一个系统来提供软件和硬件的组合以与第三方提供的软件进行接口连接。此类第三方软件可以被写成使用API所指定的编程语义,该API可以提供所指定的内置功能或提供可以在基于光线追踪的渲染过程中使用的技术库。
可以在专用或通用计算机中实现功能的各方面、和所描述和/或要求保护的方法,包括如以下更详细讨论的计算机硬件。此类硬件、固件或软件还可以体现在视频卡或其他外部或内部计算机系统外围设备上。可以在定制的FPGA或ASIC或其他可配置处理器中提供各功能性,通过可以在管理或主处理器中提供某种功能性。此类处理功能性可以用于个人计算机、台式计算机、膝上型计算机、消息处理器、手持式装置、多处理器系统、基于微处理器的或可编程消费电子产品、游戏控制台、网络PC、微型计算机、大型计算机、移动电话、PDA、平板计算机等。
术语“电路”没有隐含单个电连接的电路集合。电路可以是固定功能的、可配置的、或可编程的。通常,实现功能单元的电路更可能是可配置的,或者可以比实现功能单元的特定部分的电路更可配置。例如,当执行不同算术或逻辑操作时,处理器的算术逻辑单元(ALU)可以有区别地重复使用电路的同一部分。如此,当被配置用于执行或以另外方式被互连成用于执行每项不同操作时,那个电路部分对于每项不同操作而言是有效电路或电路的一部分。此类配置可以来自或基于例如指令或微代码。
在所有这些情况下,就处理器的功能性方面对处理器的各部分进行描述向本领域的普通技术人员传达了结构。在本披露的上下文中,在某些实现方式中,术语“单元”是指实现功能或属于那个单元的功能的一类或一组电路。此类电路可以实现附加功能,并且所以执行一项功能的电路的标识不意味着同一电路、或其一部分也不能执行其他功能。在某些情况下,可以标识功能单元,并且可以对有区别地执行某一特征或实现新特征的电路的功能描述进行描述。例如,“更新单元”是指实现根据本披露的更新的多个方面的电路。本说明书解释了,在某些方面,此类更新单元以及因此实现此类更新单元的电路支持指定种类的更新请求,这些更新请求可以在不同实现方式之间不同。存在不同的电路设计方法,例如,关于时钟,电路可以是同步的或不同步的。电路可以被设计成静态的或动态的。不同电路设计理念可以用于实现不同功能单元或其部件。没有某个背景特定基础,“电路”包括所有此类设计方法。
尽管在此描述的电路或功能单元可能非常频繁地通过电气电路并且更具体地通过主要依赖半导体内所实现的晶体管的电路被实现为主开关元件,但本术语应被理解成与所披露的技术相关。例如,不同物理过程可以用于实现本披露的多个方面的电路中,如光学器件、纳米管、微机电元件、量子开关或存储器、磁阻逻辑元件等。尽管用于根据技术构建电路或功能元件的该技术的选择可能随着时间而变化,但本选择是有待根据技术的之后当前状态做出的实现方式决定。通过从将真空管用作开关元件到用离散晶体管使用电路、到使用集成电路的过渡、以及存储器技术的进步例证了本内容,因为虽然这些领域中的每个领域中具有许多发明,但这些发明不一定从根本上改变计算机基础工作方式。例如,具有从指令集架构中选择的指令序列的存储程序的使用是从要求物理重写来改变该程序的计算机的一个重要变化,但随后,此类存储程序计算机内的各功能单元取得了许多进步。
功能模块可以由电路组成,其中,此类电路可以是固定功能的、在程序控制下或在其他配置信息下可配置的、或其某种组合。因此,可以通过功能模块执行的功能来描述功能模块本身,从而抽象出此类功能的组成部分中的某些部分可以被实现的方式。
在某些情况下,可以在功能方面以及在结果方面部分地描述电路和功能模块。在某些情况下,可以在应用于电路或功能模块或两者的配置方面描述此类描述的结构部分。
在此披露的各方面通常存在于较大系统或系统的组件的背景下。例如,可以通过网络(如局域网或广域网)分布处理并且可以用另外方式使用对等技术等实现处理。可以基于产品或系统的所希望的性能、所希望的价格点、或其某种组合来确定任务划分。在至少部分地以软件实现所描述的单元中的任何单元的实施例中,表示单元功能性的计算机可执行指令可以存储在计算机可读介质(例如,磁盘或光盘、闪存存储器、USB装置)上、或存储在存储装置网络内,如NAS或SAN设备等。其他相关信息(如用于处理的数据)也可以存储在此类介质上。
除了硬件实施例(例如,在中央处理单元(“CPU”)内或与其耦合,微处理器、微控制器、数字信号处理器、处理器内核、片上系统(“SOC”),或任何其他可编程或电子装置)以外,实现方式还可以体现在例如被配置成用于存储软件的计算机可用(例如,可读)介质中所布置的软件(例如,计算机可读代码、程序代码、以任何形式布置的指令和/或数据,如来源、对象或机器语言)中。此类软件可以支持例如在此披露的装置和方法的功能、制造、建模、模拟、描述、和/或测试。例如,这可以通过使用通用编程语言(例如,C语言、C+语言)、GDSII数据库、包括Verilog HDL、VHDL、SystemC寄存器传输级(RTL)等的硬件描述语言(HDL)、或其他可用程序、数据库、和/或电路(即,原理图)捕捉工具来完成。实施例可以被布置在计算机可用介质内,包括非瞬态存储器,如使用半导体、磁盘、光盘、铁氧体存储器、电阻存储器等的存储器。
作为特定示例,应理解到,所披露的装置和方法的实现方式可以被实现在可以用于产生特定集成电路实现方式的被体现在硬件描述语言(HDL)中的半导体知识产权内核中(如微处理器内核、或其一部分)。计算机可读介质可以体现或存储此类描述语言数据,并且因此构成制品。非瞬态机器可读介质是计算机可读介质的示例。其他实施例的示例包括存储可以被适配成用于在特定架构或微架构实现方式中使用的寄存器传输语言(RTL)描述的计算机可读介质。此外,在此披露的装置和方法可以被体现为硬件与对硬件进行配置或编程的软件的组合。
并且,在某些情况下,已经在此使用了术语,因为认为其更合理地向普通技术人员传达了突出点,但不应认为此类术语隐含地限制所披露的示例和其他方面所包括的实现方式的范围。例如,为了理解本披露的各方面,如3-D空间中的点和3-D空间中的方向向量分别表示的,光线有时被称为具有原点和方向,并且可以观察到这些单独项中的每一项。然而,可以提供表示光线的多种其他方法中的任一方法,同时保留在本披露内。例如,还可以用球面坐标表示光线方向。还将理解到,以一种格式提供的数据可以被转换或映射成另一种格式,同时保持最初表示的数据信息的意义。
并且,以上披露中已经展示并描述了多个示例,每个示例展示了可以是所体现的根据以下权利要求书的系统、方法、和存储在计算机可读介质上的计算机可执行指令的不同方面。必然地,不是每个示例可以展示每个方面,并且这些示例没有展示此类方面的排他组成部分。反而,关于一个图或示例展示和描述的方面可以与关于其他图所展示和描述的方面一起使用或与其组合。如此,普通技术人员将从这些披露中理解到,关于根据权利要求书的实施例的组成,以上披露不是限制性的,并且而是权利要求书的范围定义此处发明实施例的宽度和范围。概述和摘要章节可以阐述权利要求书的范围内的本发明的一个或多个但不是所有示例性实施例和方面。
Claims (24)
1.一种对存储器进行更新的机器实施的方法,包括:
从计算单元接收对存储器进行更新的请求,所述请求包括有待用于对所述存储器中的指定位置进行更新的第一值和有待满足以便所述第一值用于对所述存储器中的所述指定位置进行更新的条件,所述条件包括对所述存储器中的第二位置的引用和有待于被所述存储器中的所述第二位置中的值满足的标准;
访问所述存储器中的所述第二位置;以及
确定所述存储器中的所述第二位置中的所述值是否满足所述标准,并且如果满足,则使用所述第一值原子地更新所述存储器中的所述指定位置,
其中,原子地包括所述存储器中的所述指定位置中的所述值在所述更新单元对所述存储器中的所述第二位置中的所述值进行访问的时间与所述更新单元使用所述第一值对所述存储器中的所述指定位置进行更新的时间之间没有变化。
2.根据权利要求1所述的对存储器进行更新的机器实施的方法,进一步包括将所接收到的所述请求排队在队列中,所述队列耦合用于从多个计算单元接收请求。
3.根据权利要求1所述的对存储器进行更新的机器实施的方法,进一步包括:在所述计算单元中执行测试来确定光线是否与形状相交,并且响应于确定所述光线与所述形状相交,生成所述请求以包括到所述交点的距离、和针对所述光线发现的当前最近交点所存储在其处的位置,其中,所述更新单元被配置成用于使用当前最近交点所存储在其处的所述位置并且将那个位置中的所述值与所包括的所述距离进行比较以确定是否用所述请求所包括的所述距离对那个位置进行更新。
4.一种用于并行计算的装置,包括:
更新单元;
存储器;以及
多个计算内核,通过互连耦合到所述更新单元,每个计算内核能够执行指令序列,并且这些计算内核可操作用于在所述指令序列的控制下将更新请求输出至所述更新单元,
所述更新请求被输出用于改变所述指令序列对其具有写权限的所述存储器的部分中所存储的数据,每个更新请求包括有待用于对所述存储器中的指定位置进行更新的第一值和有待满足以便所述第一值用于对所述存储器中的所述指定位置进行更新的条件,所述条件包括对所述存储器中的第二位置的引用和有待于被所述存储器中的所述第二位置中的值满足的标准,
其中,所述更新单元被配置成用于原子地发起和完成每个更新请求,包括所述存储器中的所述第二位置中的所述值在所述更新单元对所述存储器中的所述第二位置中的所述值进行访问的时间与所述更新单元将所述第一值更新到所述存储器中的所述指定位置的时间之间没有变化。
5.根据权利要求4所述的用于并行计算的装置,进一步包括用于暂时存储从所述多个计算内核输出的更新请求的缓冲器,所述缓冲器耦合用于由所述更新单元读取。
6.根据权利要求5所述的用于并行计算的装置,其中,所述更新单元被配置成用于追踪所述缓冲器内的位置,对于所述位置而言,一个或多个写请求在所述缓冲器内未决。
7.根据权利要求5所述的用于并行计算的装置,其中,所述更新单元被配置成用于标识位置,对于所述位置而言,多项更新在所述缓冲器内未决,以及用于确定所述多项更新是否能够用更少的离散更新应用于所述位置。
8.根据权利要求4所述的用于并行计算的装置,其中,所述指令序列可操作用于配置所述多个计算内核发布分流事务,专用处理单元有待为所述分流事务服务,并且其中,所述专用处理单元被配置成用于使用所述更新单元使所述存储器的变化生效。
9.根据权利要求8所述的用于并行计算的装置,其中,在发布分流事务的过程中,所述多个计算内核被配置成用于将对用于接收所述分流事务所指定的计算结果的存储器位置的写特权委派给所述更新单元。
10.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元配置成用于根据预先确定的更新类型集合来使更新生效。
11.根据权利要求10所述的用于并行计算的装置,其中,所述更新类型集合包括比较和集合操作,所述操作指定所述标准包括所述比较和集合操作所包括的值与所述第一存储器位置中以及第二存储器位置中的所述值之间的比较,所述第二存储器位置是更新目标,取决于所述比较结果。
12.根据权利要求10所述的用于并行计算的装置,其中,所述更新类型集合包括比较和集合操作,并且所述更新单元可操作用于将未决更新请求中所指定的多项比较和集合操作标识至所述存储器中的同一位置,以及基于与存储器中所述位置相关联的序列信息使那些比较和集合操作塌陷。
13.根据权利要求4所述的用于并行计算的装置,其中,这些更新请求中的至少某些请求与序列信息相关联,能够从所述序列信息确定对同一存储器位置的多个更新请求的相对排序。
14.根据权利要求4所述的用于并行计算的装置,进一步包括存储器控制器单元,所述存储器控制器单元耦合到所述存储器并且被配置成用于控制对所述存储器的访问并且允许从所述存储器的一部分的读事务,对于所述部分而言,已经将写责任委派给所述更新单元,而无需确定是否存在影响所述存储器的那个部分的未决更新事务。
15.根据权利要求14所述的用于并行计算的装置,其中,所述存储器控制器单元被进一步配置成用于为在所述多个计算单元上执行的计算线程提供获得对存储器区域上锁的能力,对于所述存储器区域而言,还没有将写责任分配给所述更新单元。
16.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元被配置成用于,通过确定多项更新的组合效应和用表示所述组合效应的数据对那个存储器位置进行更新,来为同一存储器位置组合所述多项更新。
17.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元被配置成用于支持对更新事务的串行化要求,所述串行化要求包括已经从那个更新事务所标识的存储器位置读取了数据,所述更新单元被配置成用于延迟未决满足所述串行化要求的串行化更新事务。
18.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元被配置成用于针对准备执行的更新访问暂时存储器和针对有条件的更新访问暂时存储器,对于所述有条件的更新而言,还没有确定满足一项条件。
19.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元进一步包括比较单元,所述比较单元被配置成用于对更新事务中的多个值进行评估,以便如果有的话,选择所述多个值中的哪个值用于对那个更新事务所指定的存储器位置进行更新。
20.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元进一步包括就绪队列,并且被配置成用于输入来自所述就绪队列的更新事务、用于确定所述更新事务是否准备继续进行、以及如果所述更新事务准备继续进行则将存储器事务排队到所述就绪队列中。
21.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元被配置成用于确定是否要相对于另一事件对所输入的所述更新事务进行串行化。
22.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元被配置成用于确定所输入的所述更新事务是否要求对存储器位置上锁,并且如果要求,则响应于获得所述上锁而执行所输入的所述更新事务。
23.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元被进一步配置成用于基于与更新事务相关联的优先级值依序执行所述更新事务。
24.根据权利要求4所述的用于并行计算的装置,其中,所述更新单元被进一步配置成用于,对要求对相应存储器位置进行上锁并且为此已经实现了所述上锁的更新事务,确定其优先顺序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910111785.2A CN110097492A (zh) | 2013-09-26 | 2014-09-26 | 原子存储器更新单元和方法 |
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361882755P | 2013-09-26 | 2013-09-26 | |
US61/882,755 | 2013-09-26 | ||
US201461955086P | 2014-03-18 | 2014-03-18 | |
US61/955,086 | 2014-03-18 | ||
US14/494,496 | 2014-09-23 | ||
US14/494,496 US9466091B2 (en) | 2013-09-26 | 2014-09-23 | Atomic memory update unit and methods |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910111785.2A Division CN110097492A (zh) | 2013-09-26 | 2014-09-26 | 原子存储器更新单元和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104516831A true CN104516831A (zh) | 2015-04-15 |
CN104516831B CN104516831B (zh) | 2019-02-22 |
Family
ID=52792167
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910111785.2A Pending CN110097492A (zh) | 2013-09-26 | 2014-09-26 | 原子存储器更新单元和方法 |
CN201410505040.1A Active CN104516831B (zh) | 2013-09-26 | 2014-09-26 | 原子存储器更新单元和方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910111785.2A Pending CN110097492A (zh) | 2013-09-26 | 2014-09-26 | 原子存储器更新单元和方法 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN110097492A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106897230A (zh) * | 2015-11-27 | 2017-06-27 | Arm 有限公司 | 用于处理原子更新操作的装置和方法 |
CN107851027A (zh) * | 2015-07-31 | 2018-03-27 | Arm有限公司 | 数据处理系统 |
CN108073734A (zh) * | 2016-11-10 | 2018-05-25 | 龙芯中科技术有限公司 | 触发器自动布局方法和装置 |
CN108804205A (zh) * | 2017-04-28 | 2018-11-13 | 英特尔公司 | 原子操作的智能线程分派和向量化 |
WO2019148131A1 (en) * | 2018-01-29 | 2019-08-01 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
CN111656334A (zh) * | 2018-01-29 | 2020-09-11 | 美光科技公司 | 具有可编程原子操作的存储器控制器 |
US11182294B2 (en) | 2016-09-28 | 2021-11-23 | Arm Limited | Apparatus and method for providing an atomic set of data accesses |
US12019920B2 (en) | 2018-01-29 | 2024-06-25 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110580172B (zh) * | 2019-09-11 | 2022-12-09 | 北京明略软件系统有限公司 | 配置规则的验证方法及装置、存储介质、电子装置 |
CN112347524B (zh) * | 2020-10-13 | 2024-07-02 | 深圳市宏旺微电子有限公司 | 闪存编程方法、装置及电子设备 |
CN112434235B (zh) * | 2020-11-06 | 2024-06-04 | 金蝶云科技有限公司 | 网页图片加载方法、装置、计算机设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080276025A1 (en) * | 2007-05-04 | 2008-11-06 | Microsoft Corporation | Lock inference for atomic sections |
US20080320240A1 (en) * | 2007-06-22 | 2008-12-25 | On Demand Microelectronics | Method and arrangements for memory access |
US20090128562A1 (en) * | 2007-11-19 | 2009-05-21 | Caustic Graphics, Inc. | Systems and methods for rendering with ray tracing |
US20100122041A1 (en) * | 2008-11-12 | 2010-05-13 | International Business Machines Corporation | Memory control apparatus, program, and method |
CN102591909A (zh) * | 2011-01-14 | 2012-07-18 | 赛门铁克公司 | 在去重复存储系统中提供增强的可扩展性的系统及方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8018457B2 (en) * | 2006-09-19 | 2011-09-13 | Caustic Graphics, Inc. | Ray tracing system architectures and methods |
US9495724B2 (en) * | 2006-10-31 | 2016-11-15 | International Business Machines Corporation | Single precision vector permute immediate with “word” vector write mask |
CN104112291B (zh) * | 2008-03-21 | 2017-03-29 | 想象技术有限公司 | 用于光线追踪渲染的并行相交测试及着色的架构 |
US8593458B2 (en) * | 2008-09-22 | 2013-11-26 | Caustic Graphics, Inc. | Systems and methods of multidimensional query resolution and computation organization |
-
2014
- 2014-09-26 CN CN201910111785.2A patent/CN110097492A/zh active Pending
- 2014-09-26 CN CN201410505040.1A patent/CN104516831B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080276025A1 (en) * | 2007-05-04 | 2008-11-06 | Microsoft Corporation | Lock inference for atomic sections |
US20080320240A1 (en) * | 2007-06-22 | 2008-12-25 | On Demand Microelectronics | Method and arrangements for memory access |
US20090128562A1 (en) * | 2007-11-19 | 2009-05-21 | Caustic Graphics, Inc. | Systems and methods for rendering with ray tracing |
US20100122041A1 (en) * | 2008-11-12 | 2010-05-13 | International Business Machines Corporation | Memory control apparatus, program, and method |
CN102591909A (zh) * | 2011-01-14 | 2012-07-18 | 赛门铁克公司 | 在去重复存储系统中提供增强的可扩展性的系统及方法 |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107851027A (zh) * | 2015-07-31 | 2018-03-27 | Arm有限公司 | 数据处理系统 |
CN106897230A (zh) * | 2015-11-27 | 2017-06-27 | Arm 有限公司 | 用于处理原子更新操作的装置和方法 |
CN106897230B (zh) * | 2015-11-27 | 2021-12-14 | Arm 有限公司 | 用于处理原子更新操作的装置和方法 |
TWI758317B (zh) * | 2016-09-28 | 2022-03-21 | 英商Arm股份有限公司 | 用於提供資料存取行為原子集的裝置及方法 |
US11182294B2 (en) | 2016-09-28 | 2021-11-23 | Arm Limited | Apparatus and method for providing an atomic set of data accesses |
CN108073734B (zh) * | 2016-11-10 | 2021-08-17 | 龙芯中科技术股份有限公司 | 触发器自动布局方法和装置 |
CN108073734A (zh) * | 2016-11-10 | 2018-05-25 | 龙芯中科技术有限公司 | 触发器自动布局方法和装置 |
CN108804205A (zh) * | 2017-04-28 | 2018-11-13 | 英特尔公司 | 原子操作的智能线程分派和向量化 |
WO2019148131A1 (en) * | 2018-01-29 | 2019-08-01 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
US10915271B2 (en) | 2018-01-29 | 2021-02-09 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
CN111656335A (zh) * | 2018-01-29 | 2020-09-11 | 美光科技公司 | 存储器控制器 |
CN111656334A (zh) * | 2018-01-29 | 2020-09-11 | 美光科技公司 | 具有可编程原子操作的存储器控制器 |
WO2019148129A1 (en) * | 2018-01-29 | 2019-08-01 | Micron Technology, Inc. | Memory controller |
US11461048B2 (en) | 2018-01-29 | 2022-10-04 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
US11604605B2 (en) | 2018-01-29 | 2023-03-14 | Micron Technology, Inc. | Memory controller |
CN111656335B (zh) * | 2018-01-29 | 2023-11-17 | 美光科技公司 | 存储器控制器 |
EP4276625A3 (en) * | 2018-01-29 | 2024-01-24 | Micron Technology, Inc. | Memory controller |
US12019920B2 (en) | 2018-01-29 | 2024-06-25 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
Also Published As
Publication number | Publication date |
---|---|
CN104516831B (zh) | 2019-02-22 |
CN110097492A (zh) | 2019-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104516831A (zh) | 原子存储器更新单元和方法 | |
US9466091B2 (en) | Atomic memory update unit and methods | |
US9009711B2 (en) | Grouping and parallel execution of tasks based on functional dependencies and immediate transmission of data results upon availability | |
CN102870096B (zh) | 子缓冲器对象 | |
CN103218309B (zh) | 多级指令高速缓存预取的方法、系统与设备 | |
CN104036537A (zh) | 多分辨率一致光栅化 | |
GB2529075A (en) | Graphics processor with non-blocking concurrent architecture | |
US11880925B2 (en) | Atomic memory update unit and methods | |
CN103425533A (zh) | 用于管理嵌套执行流的方法和系统 | |
CN103559014A (zh) | 用于处理嵌套流事件的方法和系统 | |
CN106104488A (zh) | 用于支持任务间通信的基于硬件的原子操作 | |
CN103309786A (zh) | 用于在非可抢占式图形处理单元上交互调试的方法和装置 | |
DE102012221502A1 (de) | System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen | |
CN103886547A (zh) | 用于存储共享顶点的技术 | |
CN103886634A (zh) | 利用每像素着色器线程的高效超级采样 | |
CN103793876A (zh) | 分布式拼接式进行高速缓存 | |
CN104050705A (zh) | 处置光栅操作中的post-z覆盖数据 | |
CN104050706A (zh) | 用于低功率图形渲染的像素着色器旁路 | |
US9317456B2 (en) | Method and system for performing event-matching with a graphical processing unit | |
CN103870309A (zh) | 用于集群多级寄存器堆的寄存器分配 | |
CN103885902A (zh) | 用于经由纹理硬件实施存储器访问操作的技术 | |
CN103870213A (zh) | 经由管线化的状态包触发性能事件捕获 | |
CN103996216A (zh) | 用于曲面细分和几何着色器的电力高效属性处置 | |
He et al. | Design and implementation of a parallel priority queue on many-core architectures | |
CN103793206A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |