用于使用虚拟分区分配存储单元的部分的方法和分配器与流程

文档序号:27430183发布日期:2021-11-17 21:47阅读:193来源:国知局
用于使用虚拟分区分配存储单元的部分的方法和分配器与流程

1.本技术涉及用于分配存储单元的部分以用于存储数据的方法和分配器。


背景技术:

2.有很多应用程序希望多个任务在同一存储单元(例如,存储器)中临时存储多种类型的数据,其中,每种类型的数据所需的存储单元的量可以是可变的。例如,如下文更详细所述,图形处理单元可以包括一个或多个逻辑块(其可以被称为统一着色集群),所述一个或多个逻辑块各自被配置成执行着色任务。每个统一着色集群可以包括或可以访问存储单元(其可以被称为统一储存库),所述存储单元被配置成临时存储与统一着色集群执行的着色任务有关的数据。储存在统一储存库中的数据可以分为两类——属性数据和临时数据。属性数据是在执行任务之前存储的数据,其可以用于初始化或配置任务,而临时数据可以是在执行任务期间存储的数据。
3.一些着色任务被配置为同时存储属性数据和临时数据,而其他着色任务被配置为仅存储临时数据。有时,将更多存储单元用于属性数据是有利的,而其他时间,将更多存储单元用于临时数据是有利的。然而,在数据类型之间可能存在依赖关系,这意味着每个任务都无法有效地获得对整个存储单元的访问。
4.例如,为了减少在任务准备好被执行之前分配给任务的数据量,可以在任务准备好被执行之前将任务分配给存储单元的(多个)部分以用于存储属性数据(使得初始化数据等可以存储在存储单元中),但是仅可以在任务准备好被执行时为任务分配存储单元的(多个)部分用于存储临时数据。这在属性数据和临时数据之间产生了依赖性,在向任务分配存储单元的部分时如果不考虑这种依赖性就可能导致死锁。例如,如果每个任务都可以分配到存储单元的任何部分以用于存储属性数据或临时数据,那么有可能在为任何任务分配任何存储单元以用于存储临时数据之前,就为多个任务一起分配了存储单元的所有部分以用于存储属性数据,从而导致死锁。具体地说,由于任何任务都将无法获得任何存储单元用于存储临时数据,因此这些任务均无法执行。
5.因此,需要一种将共享存储器分配给多个任务以用于存储至少两种不同类型的数据的方法,当每种类型的数据所需的存储单元量可变时,所述方法能够高效率地使用存储单元,但在不同类型的数据之间存在依赖性时仍然确保不会发生死锁。
6.下文描述的实施例仅以举例的方式提供,而不构成对解决用于向多个任务分配存储单元的多个部分用于存储至少两种不同类型数据的已知方法和存储单元分配器的任何或所有缺点的实施方式的限制。


技术实现要素:

7.提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
8.本文描述了用于将存储单元的一个或多个部分分配给多个任务以用于存储至少两种类型的数据的方法和存储单元分配器。所述方法包括:接收要存储单元的一个或多个部分存储用于多个任务中的任务的至少两种类型的数据中的特定类型数据的请求;基于请求的一个或多个特性,将请求与存储单元的多种虚拟分区中的一种相关联,每种虚拟分区将存储单元的零个、一个或多于一个部分分配给至少两种类型的数据中的每一种;以及将存储单元的被请求的一个或多个部分从与请求相关联的虚拟分区中分配给特定类型数据的存储单元的零个、一个或多于一个部分中分配给所述任务。
9.第一方面提供了一种将存储单元的一个或多个部分分配给多个任务用于存储至少两种类型的数据的方法,所述方法包括:接收要存储单元的一个或多个部分存储用于多个任务中的任务的至少两种类型的数据中的特定类型数据的请求;基于请求的一个或多个特性,将请求与存储单元的多种虚拟分区中的一种相关联,每种虚拟分区将存储单元的零个、一个或多于一个部分分配给至少两种类型的数据中的每一种;以及将存储单元的被请求的一个或多个部分从与请求相关联的虚拟分区中分配给特定类型数据的存储单元的零个、一个或多于一个部分中分配给所述任务。
10.多个任务中的每一个可以与多个任务主部件中的一个任务主部件相关联,并且该请求的一个或多个特性可以包括与任务相关联的任务主部件。
11.多种虚拟分区可以包括针对多个任务主部件中的每个任务主部件的虚拟分区。
12.多个任务主部件的任务主部件可以与在存储单元中存储至少两种类型的数据的第一类型的数据和第二类型的数据的任务相关联。要存储单元的一个或多个部分,最多达最大数量的部分用于存储与任务主部件相关联的任务的第二类型数据的请求可以是在对存储单元的一个或多个部分作出用于存储那一任务的第一类型数据的请求之后作出的。针对任务主部件的虚拟分区将至少存储单元的最大数量的部分可以分配给第二类型的数据。
13.每个虚拟分区可以将存储单元的不多于x

g个部分分配给第一类型的数据,其中,x是存储单元的部分的总数量,并且g是任务用于存储第二类型的数据的存储单元的部分的保证数量。
14.g可以是将被多个任务中的任何任务请求用于存储第二类型的数据的存储单元的部分的最大数量。
15.g可以少于将被多个任务中的任何任务请求用于存储第二类型的数据的存储单元的部分的最大数量。
16.该方法在接收请求之前还可以包括:确定该任务是否要求存储单元的多于保证数量的部分用于第二类型的数据;以及响应于确定对于第二类型的数据任务需要多于存储单元的保证数量的部分,动态地调整虚拟分区中的一种或多种,使得虚拟分区中没有任何虚拟分区将存储单元的多于x

r个部分分配给第一类型的数据,其中,r是对于第二类型的数据任务所需的存储单元的部分的数量,并且r大于g。
17.与任务相关联的多个任务主部件的该任务主部件可以由请求中的字段或伴随请求的边带数据标识。
18.该任务可以是多种类型的任务中的一种,并且该请求的一个或多个特性可以包括一种所述任务。
19.多种虚拟分区可以包括针对多种类型任务中的每种类型任务的虚拟分区。
20.虚拟分区中的至少一种可以将存储单元的所有部分分配给至少两种类型的数据中的一种。
21.可以在存储器中存储针对多种虚拟分区的每种虚拟分区的信息,所述信息指示将存储单元的零个、一个或多于一个部分分配给至少两种类型的数据中的每种类型的数据,并且所述方法可以进一步包括读取存储器中针对与请求相关联的虚拟分区的信息,以确定与每种类型的数据相关联的存储单元的零个、一个或多于一个部分。
22.所述方法还可以包括:接收要存储单元的一个或多个部分存储用于多个任务中的第二任务的至少两种类型的数据中的特定类型数据的第二请求;基于第二请求的一个或多个特性,将第二请求与多种虚拟分区中的不同一种相关联;以及将存储单元的被请求的一个或多个部分从与第二请求相关联的虚拟分区中分配给特定类型数据的存储单元的零个、一个或多于一个部分中分配给所述第二任务。
23.多种虚拟分区中的至少两种可以不同。
24.多个任务中的每个任务可以是在图形处理单元上执行的着色器任务。
25.所述至少两种类型的数据可以包括临时数据和属性数据。
26.所述至少两种类型的数据可以包括几何形状数据和镶嵌数据。
27.存储单元可以是包括多个寄存器的寄存器文件。
28.第二方面提供了一种将存储单元的一个或多个部分分配给多个任务用于存储至少两种类型的数据的存储单元分配器,所述存储单元分配器包括被配置成执行如下操作的逻辑:接收要存储单元的一个或多个部分存储用于多个任务中的任务的至少两种类型的数据中的特定类型数据的请求;基于请求的一个或多个特性,将请求与存储单元的多种虚拟分区中的一种相关联,每种虚拟分区将存储单元的零个、一个或多于一个部分分配给至少两种类型的数据中的每一种;以及将存储单元的被请求的一个或多个部分从与请求相关联的虚拟分区中分配给特定类型数据的存储单元的零个、一个或多于一个部分中分配给所述任务。
29.第三方面提供了一种被配置为执行第一方面的方法的存储单元分配器。
30.第四方面提供了一种包括第二方面或第三方面所述的存储单元分配器的图形处理单元。
31.本文所述的存储单元分配器和图形处理单元可以包含在集成电路上的硬件中。可以提供一种在集成电路制造系统中制造如本文所述的存储单元分配器或图形处理单元的方法。可以提供一种集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集配置该系统以制造该存储单元分配器或图形处理单元。可以提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有存储单元分配器或图形处理单元的计算机可读描述,所述计算机可读描述当在集成电路制造系统中处理时,使得所述集成电路制造系统制造包含存储单元分配器或图形处理单元的集成电路。
32.可以提供一种集成电路制造系统,包括:非暂态计算机可读存储介质,其上存储有本文描述的存储单元分配器或图形处理单元的计算机可读描述;布局处理系统,其被配置为处理该计算机可读描述,以便生成包含该存储单元分配器或图形处理单元的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造该存储单元分配器或图形处理单元。
33.可以提供用于执行如本文所述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,当在计算机系统处执行时,所述计算机可读指令使计算机系统执行如本文所述的方法。
34.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
35.现在将参考附图详细描述示例,在附图中:
36.图1是示例性图形处理单元的框图,所述图形处理单元包括多个统一着色集群,所述多个统一着色集群各自具有用于存储与由对应统一着色集群执行的任务有关的至少两种不同类型的数据的统一储存库;
37.图2是示出将存储单元的各部分分配给多个任务以存储至少两种不同类型的数据的第一示例性方法的示意图;
38.图3是使用多个虚拟分区将存储单元的各部分分配给多个任务以用于存储至少两种类型的数据的示例性方法的流程图;
39.图4是示出用于实施图3的方法的示例性存储单元分配器和示例性虚拟分区的示意图;
40.图5是示出数据间主部件依赖性的示意图;
41.图6是示出动态调节一个或多个虚拟分区以适应大型临时数据任务的示例性情境的示意图;
42.图7是图1的图形处理单元的一部分的框图,其包括被配置成用于存储变换的几何形状数据的统一顶点缓冲器和用于存储镶嵌因子的镶嵌因子储存库;
43.图8是示出当启用镶嵌以及当未启用镶嵌时图7的统一顶点缓冲器和镶嵌因子储存库的使用的示意图;
44.图9是图形处理单元的一部分的框图,其包括用于存储变换的几何形状数据和镶嵌因子的统一顶点缓冲器;
45.图10是示出用于将图9的统一顶点缓冲器的各部分分配给多个任务的以用于存储变换的几何形状数据和镶嵌因子的示例性存储单元分配器的示意图;
46.图11是示出当启用镶嵌以及当未启用镶嵌时图9的统一顶点缓冲器的使用的示意图;
47.图12是其中可以实现本文所述的存储单元分配器和/或图形处理单元的示例性计算机系统的框图;以及
48.图13是用于生成包含本文所述的存储单元分配器和/或图形处理单元的集成电路的示例性集成电路制造系统的框图。
49.附图示出各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同附图标记来指示相似特征。
具体实施方式
50.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开的实施例的各种修改对于所属领域的技术人员而言将是显而易见的。仅通过示例的方式描述实施例。
51.如上所述,有许多计算系统和应用使用共享存储单元来存储多种类型的数据,并且在一些操作状态下,将更多存储单元用于一种类型的数据可能是有利的,而在另一操作状态下,将更多存储单元用于另一种类型的数据可能是有利的。
52.例如,图形处理单元(gpu)可以用来处理由应用程序生成的几何形状数据(例如,限定图元或补片的顶点),以便生成图像数据。例如,gpu可以确定要存储在帧缓冲器中的图像的像素值(例如,颜色值),该像素值可以被输出到显示器。输入几何形状数据的处理的一部分可以包括在所接收的数据上运行一个或多个着色器。如本领域技术人员所知,着色器是由gpu运行的用于实现渲染效果的程序。它们被称为着色器,因为它们通常用于控制照明和着色效果,但它们也可以实现其它效果。示例性着色器包括但不限于顶点着色器(vs),其用于变换几何形状(例如,三角形)顶点的属性,例如颜色、纹理、位置和方向;能够在运行中产生新几何形状的几何形状着色器(gs);以及像素着色器(ps)和片段着色器(fs),其被配置成分别对个别像素和片段进行操作以产生复杂视觉效果。取决于要实现的效果,可以将一个或多个着色器应用于输入数据。
53.gpu可以分两个阶段处理所接收的几何形状数据——几何形状处理阶段和光栅化阶段。在几何形状处理阶段期间,将从应用程序(例如游戏应用程序)接收的几何形状数据(例如限定图元或补片的顶点)变换到渲染空间(例如屏幕空间)中。在几何形状处理阶段中还可以执行例如裁剪和剔除的其他功能以移除落在视锥外的几何形状数据(例如图元或补片),和/或照明/属性处理。在光栅化阶段期间,将经过变换的图元映射到像素并且针对每个像素标识颜色。这可以包括使经过变换的几何形状数据光栅化(例如,通过执行扫描转换)以生成图元片段,移除隐藏的(例如,被其它片段隐藏的)图元片段,以及对未隐藏的图元片段执行纹理化和/或着色以确定所渲染图像的像素值。所渲染的像素值可以接着被存储在存储器中。在执行纹理化和/或着色之前执行隐藏表面移除的gpu被称为实施“延迟”渲染。在其它示例中,gpu可能不实施延迟渲染,在这种情况下,可以在对片段执行隐藏表面去除之前将纹理化/着色应用于这些片段。
54.术语“片段”在本文中用于意指采样点处的图元的样本,所述样本将被处理以对图像的像素进行渲染。在一些示例中,可以存在像素到片段的一对一映射。不过,在其他示例中,片段可以多于像素,并且此过采样可以允许像素值的较高质量渲染,例如通过促进可以应用于多个片段以用于对每个像素值进行渲染的抗混叠和其他滤波器。
55.可以在不同阶段期间应用不同的着色器。例如,顶点着色器和几何形状着色器可以应用于几何形状处理阶段中,并且片段着色器可以应用于光栅化阶段中。传统上,gpu具有单独的硬件来执行几何形状处理阶段着色(例如顶点着色和/或几何形状着色)和光栅化阶段着色(例如像素着色或片段着色)。然而,gpu现在已转变到统一着色模型,其中,它们具有可以执行任何类型的着色任务的公共或统一着色器硬件。例如,图1示出了具有多个着色器处理单元102的示例性gpu 100。每个着色器处理单元102包括多个统一着色集群(usc)104,其可以执行任何类型的着色任务。具体地说,每个usc 104从调度器106接收着色器任
务,所述着色器任务指定待处理的数据和待应用于所述数据的着色器程序。响应于接收到任务,usc104针对所识别的数据运行所识别的着色器程序。
56.着色器任务可以由多个不同部件发起,所述多个不同部件可以被称为任务主部件(master)或数据主部件。例如,图1的gpu 100包括顶点数据主部件(vdm)110、计算数据主部件(cdm)112、射线追踪数据主部件(rdm)114、域数据主部件(ddm)116、像素数据主部件(pdm)118和2d数据主部件(tdm)120,每个都可以发起或调用着色器任务。对于本领域技术人员显而易见的是,这些仅仅是可以发起或调用着色器任务的示例性任务主部件或数据主部件,并且在其它示例中,可能存在更少、额外和/或不同的任务主部件或数据主部件。
57.图1的gpu 100还包括固件处理器121,其运行被配置成控制gpu 100上的工作的调度的固件。例如,工作可以被划分到可以单独地调度的处理阶段中。可以存在多个不同类型的处理阶段。例如,可以存在顶点或几何形状处理阶段、计算处理阶段、射线追踪处理阶段、像素或片段处理阶段以及2d处理阶段。每个处理阶段与一个或多个数据主部件相关联,并使用gpu内的多种不同部件对数据集合进行某些处理。一些部件,例如usc 104,可以在处理阶段之间共享,而其它部件仅可以在单一类型的处理阶段中使用。
58.在一些情况下,主计算机(例如,cpu)可以被配置成为每个处理阶段(除了像素或片段处理阶段)生成控制流,并且与处理阶段相关联的一个或多个数据主部件经由针对该处理阶段的控制流消耗工作。在这些情况下,固件处理器121可以被配置成通过通知适当的数据主部件存在待处理的控制流来启动处理阶段(其可以被称为启动处理阶段)。这使得数据主部件发起一个或多个着色器任务以在usc 104上执行。在一些情况下,固件处理器121可以被配置成通过向与数据主部件相关联的特定寄存器(其可以被称为启动寄存器)写入来通知数据主部件存在待处理的控制流。例如,为了使顶点数据主部件110开始顶点或几何形状处理阶段,固件处理器121可以向顶点数据主部件的启动寄存器进行写入。在一些情况下,在使数据主部件启动处理阶段之前,固件处理器121可以被配置成对一个或多个配置寄存器进行编程,所述一个或多个配置寄存器可以例如指定如何执行或进行处理阶段。当数据主部件已完成处理控制流时,则称数据主部件已完成处理阶段,并且可以通知固件处理器121(例如,通过发起中断)。
59.固件处理器121可以被配置成根据一个或多个规则和/或调度标准经由处理阶段来调度控制流的处理。例如,可以允许同时运行多个不同的处理阶段,但是可以不允许同时运行任何类型的多于一个处理阶段。例如,可以允许使几何形状处理阶段与像素/片段处理阶段同时运行,但是可以不允许使两个像素/片段处理阶段同时运行。在其它示例中,固件处理器121可能必须基于控制流和处理阶段之间的依赖性来安排控制流和处理阶段。例如,可能不能执行或进行第一片段处理阶段,直到第一几何形状处理阶段完成,因为两者之间具有依赖性。对于本领域技术人员显而易见的是,这仅仅是示例,并且其它gpu可能没有固件处理器121,并且gpu上的工作的调度可以由例如运行在主计算机(例如cpu)上的驱动程序控制。本领域的技术人员还将显而易见的是,gpu还可以包括未示出的其它部件,例如但不限于平铺引擎(如果gpu支持基于平铺的渲染)、系统级高速缓存和存储器管理单元(mmu)。
60.如图1所示,每个着色器处理单元102可以包括其它部件,例如,但不限于用于存储在几何形状处理阶段中执行的着色器任务的输出的存储单元(称为统一顶点缓冲器(uvb))
122;被配置成将补片细分成更小的图元的镶嵌单元124;以及针对每个usc 104的用于临时存储usc 104执行的任务的数据的存储单元126(称为统一储存库(us))。在一些情况下,每个us 126可以实现为寄存器文件。
61.具体地说,为了执行着色器任务,可能需要临时存储数据。在一个示例性实施方式中,为着色器任务存储的数据可以分为两个类别、大类或类型:(i)在任务被执行之前由任务主部件或发起器(例如,数据主部件)存储的属性数据;以及(ii)在任务执行期间由usc(例如,由着色器程序)存储的临时数据。属性数据可以用来为任务提供输入数据或初始化参数。诸如顶点着色器任务和计算着色器任务等一些任务可以存储两种类型的数据,而诸如2d着色器任务或像素着色器任务等其它任务仅可以存储一种类型的数据(例如,临时数据)。诸如顶点着色器任务等一些任务可以存储比临时数据更多的属性数据;并且诸如像素着色器任务等其它任务可以存储比属性数据更多的临时数据。因此,在任务可以由usc 104执行之前,必须要为任务针对每种类型的需要存储的数据分配us 126的一个或多个部分(例如,寄存器)。
62.在申请人已知的(并非承认实施在申请人公司外部是众所周知或已知的)一种实施方式中,每个us 126在各种数据类型之间被静态地分区。例如,如图2中所示,us 126可以分成保留用于存储临时数据的第一区段202(可称为临时寄存器);以及保留用于存储属性数据的第二区段204(可称为属性寄存器)。在图2所示的示例中,第一区段202比第二区段204大得多。这样允许比顶点着色器任务更多的像素着色器任务运行,在一些情况下这可能是有益的。不过,对本领域的技术人员将显而易见的是,这仅是示例。
63.在图2所示的示例中,可以存储在us 126中的每种类型的数据有一个分配器。具体而言,在usc 104中有一个临时寄存器分配器206,其被配置成接收要us 126的一个或多个部分存储任务的临时数据的请求(在图2的示例中示为“临时寄存器请求”);并且在调度器106中有一个属性寄存器分配器208,其被配置成接收要us126的一个或多个部分存储任务的属性数据的请求(在图2的示例中示为“属性寄存器请求”)。临时寄存器分配器206被配置成接收要us 126的一个或多个部分(例如,寄存器)存储任务的临时数据的请求,并且分配来自第一区段202的us 126的所请求部分。类似地,属性寄存器分配器208被配置成接收要us 126的一个或多个部分(例如,寄存器)存储任务的属性数据的请求,并且分配来自第二区段204的所请求部分。在此示例中,为了减少在任务准备好被执行之前分配给任务的数据量,可以在任务准备好被执行之前将任务分配给存储单元的(多个)部分以用于存储属性数据(使得初始化数据等可以存储在存储单元中),但是仅可以在任务准备好被执行时为任务分配存储单元的(多个)部分用于存储临时数据。一旦任务已被分配us 126的所请求部分,就可以由usc 104执行任务。
64.图2中所示的已知实施方式的问题在于其在许多情况下不允许高效率地或有效地使用us 126。例如,当gpu 100仅运行几何形状处理阶段使得每个usc 104主要执行顶点着色器任务时,顶点着色器任务不能有效地将us 126用于属性,因为属性被限于us 126的第二区段204。这样限制了usc 104可以并行运行的顶点着色器任务的数量,这降低了gpu 100的效率。类似地,当gpu 100仅运行光栅化阶段使得每个usc 104主要执行片段着色器任务时,片段着色器任务不能有效地将us 126用于临时数据,因为它们无权访问保留用于存储属性数据的us 126的第二区段204。根据us是如何分区的,这可能会使15

25%的us得不到
使用。这可能会限制usc104可以并行运行的片段着色器任务的数量,特别是当每个片段着色器任务的临时数据量较大时。类似于仅几何形状处理阶段的示例,这可能会降低gpu的效率。
65.此外,在一些情况下,能够分配给任务用于存储临时数据的us 126的部分可能存在某一最大数量。可以基于保留用于存储临时数据的us 126的第一区段202的大小来设置此最大值。虽然编译器可以被配置成尝试将任务需要存储的临时数据限制为最大数量的部分中能够存储的临时数据,但在一些情况下,可能无法避免任务要存储比最大数量的部分中能够存储的更多临时数据。在这种情况下,usc将不能分配足够的us 126部分以存储所需量的数据,这样可能需要任务将一些或全部数据存储在其它存储器(例如主存储器)中。每当任务必须使用其它存储器(例如,主存储器)时,它就降低了gpu的效率。通常,可以分配给任务以用于存储临时数据的最大数量的us部分越多,必须使用存储器来存储临时数据的任务数量就越少。因此,增加可用于存储临时数据的us 126的部分的最大数量可以减少必须使用其他存储器(例如,主存储器)来存储临时数据的任务数量,这可以提高gpu的性能。
66.例如但不限于寄存器文件的存储单元在面积和功率方面也很昂贵,因此将其使用最大化是有利的。因此,需要一种将共享存储器分配给多个任务以用于存储至少两种不同类型的数据的方法,当每种类型的数据所需的存储单元量可变时,所述方法能够高效率地使用存储单元。
67.因此,本文描述了将共享存储单元分配给多个任务以使用虚拟分区来存储至少两种不同类型的数据的方法和分配器。具体地说,在本文所述的方法和分配器中,存在存储单元的多个虚拟分区。每个虚拟分区向所述至少两种类型的数据中的每一种分配零个、一个或多于一个存储单元的部分。例如,一种虚拟分区可以将存储单元的50%分配给第一类型的数据,将存储单元的另外50%分配给第二类型的数据;而另一种虚拟分区可以将存储单元的25%分配给第一类型的数据,将存储单元的其余75%分配给第二类型的数据。换句话说,每种虚拟分区呈现存储单元的一种视图。然后,当请求存储单元的一个或多个部分以存储与任务相关联的特定类型的数据时,该请求基于请求的一个或多个特性与虚拟分区中的一种相关联。然后,将存储单元的(多个)被请求部分从与该请求相关联的虚拟分区中分配给特定类型数据的存储单元的零个、一个或多于一个部分中分配给任务。例如,如果接收到用两个寄存器存储任务的属性数据的请求,并且该请求与将25%的寄存器文件分配给属性数据的虚拟分区相关联,那么这两个寄存器从该25%的寄存器文件被分配给任务。
68.在一些情况下,任务可以由多个任务主部件(例如,数据主部件)生成或发起,并且每个任务主部件都可以有虚拟分区。在这些情况下,每个请求可以与发起相应任务的数据主部件的虚拟分区相关联。在其它情况下,任务可以包括多个不同类型的任务,并且每种类型的任务都可能存在虚拟分区。在这些情况下,每个请求可以与该类型任务的虚拟分区相关联。
69.现在参考图3,其示出了将共享存储单元的一个或多个部分分配给多个任务中的每一个以用于存储至少两种不同类型的数据的示例性方法300。术语“存储单元”在本文中用于表示能够存储电子数据的任何物理装置。术语“存储单元”包括但不限于存储器,例如随机存取存储器(ram)、寄存器文件、缓冲器等。存储单元的示例包括但不限于图1和图2的统一储存库(us)126和图1的统一顶点缓冲器(uvb)122。存储单元的一部分(也可以被称为
存储单元的区域)是可以单独分配给任务并且由任务使用以存储数据的存储单元的部分。存储单元的部分小于整个存储单元。部分的大小可以被称为分配粒度。部分的大小可以用任何合适的单位(例如,寄存器(其中存储单元是寄存器文件)、位、字节、字、双字等)来表示。在一些情况下,存储单元的每个部分可以具有相同的大小。例如,在一些情况下,存储单元可以分成多个相等大小的部分,其可以被单独分配给任务。在存储单元是寄存器文件的情况下,寄存器文件的一部分可以是单个寄存器或多个寄存器(例如,两个寄存器或四个寄存器)。
70.方法300开始于框302,在此,在例如图4的存储单元分配器402的存储单元分配器处接收要存储单元(例如,us 126)的一个或多个部分用于存储任务的至少两种类型的数据中的特定类型数据的请求。
71.该请求可以包括标识被请求存储单元的部分的数量的信息。例如,该请求可以包括指示正在请求的存储单元的部分的数量的字段等。
72.存储在存储单元中的数据的类型可以取决于存储单元的位置和目的。例如,如果存储单元是图1和图2的us 126,则至少两种类型的数据可以包括临时数据和属性数据。不过,在其它情况下,可能有额外和/或不同类型的数据存储在存储单元中。例如,如下文更详细地描述,如果存储单元是图1的uvb 122,则至少两种类型的数据可以包括变换的几何形状数据和镶嵌因子。
73.在一些情况下,请求可以包括标识该请求涉及的数据类型的信息(例如,边带数据),或者可以与之相关联。例如,在两种类型的数据是临时数据和属性数据的情况下,请求可以包括指示请求与临时数据还是属性数据相关的字段等。然而,在其它情况下,请求涉及的数据类型可以由请求者确定。具体地讲,在一些情况下,每种类型的数据都可能有不同的请求者。例如,如图4所示(其中存储单元是被配置成存储临时数据和属性数据的us 126),调度器106可以被配置成接收由数据主部件(例如,vdm、ddm)发起的任务并向存储单元分配器402发送让寄存器存储这些任务的属性数据的请求(在图4中示为“属性寄存器请求”);并且usc 104可以被配置成接收由数据主部件发起的任务并向存储单元分配器402发送让寄存器存储这些任务的临时数据的请求(在图4中示为“临时寄存器请求”)。在此示例中,存储单元分配器402可以被配置成确定从调度器106接收的请求与属性数据有关,并且从usc 104接收的请求与临时数据有关。
74.在一些情况下,该请求可以包括额外信息(例如,边带数据)或者可以与之相关联。例如,在任务可以由多个不同的任务主部件发起的情况下,该请求可以包括标识发起任务的任务主部件的信息(例如,边带数据)或者可以与之相关联。例如,在存储单元是us 126的情况下,该请求可以包括指示哪个数据主部件(例如vdm110、cdm 112、rdm 114、ddm 116、pdm 118或tdm 120)发起任务的信息。在其它示例中,在任务可以是多种不同类型的情况下,任务可以另外或替代地包括标识任务类型的信息(例如,边带数据)或者可以之相关联。例如,在任务是着色器任务的情况下,该请求可以标识着色器任务的类型(例如,顶点着色器、域着色器、像素着色器、片段着色器等)。一旦接收到请求,方法300就前进到框304。
75.在框304处,存储单元分配器(例如,存储单元分配器402)基于请求的一个或多个特性将请求与存储单元的多种虚拟分区中的一种动态地相关联。如上所述,每种虚拟分区将存储单元的零个、一个或多于一个部分分配给或指定给可以存储在存储单元中的每种类
型的数据。例如,如果两种类型的数据可以存储在存储单元中(例如,第一类型的数据和第二类型的数据),所述存储单元的第一虚拟分区可以将存储单元的25%分配给第一类型的数据,并将存储单元的其余75%分配给第二类型的数据;第二虚拟分区可以将存储单元的50%分配给第一类型的数据和第二类型的数据中的每一种;并且第三虚拟分区可以将存储单元的100%分配给第一类型的数据,并且将存储单元中的任何部分都不分配给第二类型的数据。
76.优选地,每种虚拟分区都将存储单元的相同区段分配给每种类型的数据。例如,如果有两种类型的数据,则优选地,分配给第一类型数据的存储单元的任何区段始终从存储单元的同一侧开始(例如,始终是顶部(例如,最高地址或寄存器号)或始终是底部(例如,最低地址或寄存器号)),分配给第二类型数据的存储单元的任何区段始终从另一侧开始——例如,分配给第一类型数据的存储单元的任何区段可以始终从存储单元的顶部(例如,最高地址或寄存器号)开始,并且分配给第二类型数据的存储单元的任何区段可以始终从底部(例如,最低地址或寄存器号)开始。
77.用于选择与请求相关联的虚拟分区的请求的特性可以取决于存储单元的位置、存储单元的目的和/或存储单元的所分配部分的使用和释放方式。在一些情况下,任务可以由多个任务主部件发起,并且每个任务主部件都可以有虚拟分区。在这些情况下,发起相应任务的数据主部件的虚拟分区与该请求相关联。换言之,在这些情况下,用于选择虚拟分区的该请求的特性是与对应任务相关联的任务主部件。
78.例如,如图4中所示(其中存储单元是图1的us 126,并且任务主部件是图1的数据主部件(例如,vdm 110、cdm 112、rdm 114、ddm 116、pdm 118、tdm 120)),可以有针对pdm的虚拟分区404、针对vdm的虚拟分区406、针对cdm的虚拟分区408、针对rdm的虚拟分区410、针对ddm的虚拟分区(未示出)和针对tdm的虚拟分区(未示出)。在图4的示例中,针对pdm的虚拟分区404将us 126的100%分配给临时数据;针对vdm的虚拟分区406将us 126的顶部25%分配给临时数据,将剩余75%分配给属性数据;针对cdm的虚拟分区408将us 126的顶部60%分配给临时数据,将剩余40%分配给属性数据;针对rdm的虚拟分区410将us 126的顶部80%分配给临时数据,将剩余20%分配给属性数据。下文更详细地描述用于将us 126的部分分配给由不同数据主部件发起的任务的这些特定虚拟分区的益处。
79.在其他情况下,可以使用请求的不同特性来选择多个虚拟分区中的哪些与请求相关联。例如,在一些情况下,任务可以包括多种不同类型的任务,并且每种类型的任务都可以有虚拟分区。例如,如下文更详细所述,其中任务是在几何形状处理阶段执行的着色器任务,例如顶点着色器任务、几何形状着色器任务、域着色器任务和外壳着色器任务,对于这些类型的着色器任务中的每一种,都可以有虚拟分区。在这些情况下,针对该请求有关的任务类型的虚拟分区与该请求相关联。换言之,在这些情况下,用于选择虚拟分区的该请求的特性是任务的类型。对于本领域技术人员显而易见的是,这些仅为示例,可以使用请求的其他特性或特性组合来选择针对该请求的适当虚拟分区。
80.在一些情况下,虚拟分区可以是可配置的。例如,在一些情况下,可以为每个虚拟分区(例如,在配置存储单元中)存储信息,该信息指示存储单元向不同类型数据的每种的分配,该分配可以由软件(例如,固件)或以其他方式配置。具体地说,在一些情况下,针对指定将存储单元的多少(例如,多少部分)分配给每种类型的数据的每种虚拟分区可以有一组
一个或多个寄存器。在一个示例中,当存在两种类型的数据时,每种虚拟分区可以有一个寄存器,其中寄存器的第一t位指定分配给第一类型数据的存储单元部分的数量,寄存器的剩余t位指定分配给第二类型数据的存储单元的部分的数量。t可以基于寄存器的大小和存储单元的部分的数量。例如,在一些情况下,每个寄存器可以是32位寄存器并且t等于16。当虚拟分区永远不会将任何存储单元分配给一种类型的数据时,可以不使用与这种类型的数据有关的寄存器部分。对于本领域技术人员显而易见的是,这仅仅是一个示例,并且可以以任何合适的方式存储关于每种虚拟分区的信息。具有可配置虚拟分区的优点之一在于,可以通过将所有虚拟分区配置为相同来实现存储单元的有效静态分区,这可以实现与使用静态分区的系统向后兼容。
81.在虚拟分区可配置的情况下,存储单元分配器(例如,存储单元分配器402)可以被配置成通过以下方式将请求与虚拟分区相关联:基于请求的一个或多个特性选择多种虚拟分区中的一种;从配置存储单元(例如,存储器或寄存器)读取定义所选择虚拟分区的信息,以确定将存储单元的多少(例如,多少部分)分配给针对所选择虚拟分区的每种类型的数据;并标识分配给每种类型数据的存储单元的部分。确定分配给每种类型的数据的哪些部分可以基于存储单元中数据类型的已知或可配置的排序。例如,如果分配给第一类型数据的部分始于存储单元的顶部(例如,最高地址、寄存器号或部分编号),那么分配给第一类型数据的部分的范围可以如方程(1)和(2)所述由max_first和min_first定义,其中,k是分配给第一类型数据的部分的数量并且x是存储单元的部分的总数量。类似地,如果分配给第二类型数据的部分始于存储单元的底部(例如,最低地址、寄存器号或部分编号),那么分配给第二类型数据的部分的范围可以如方程(3)和(4)所述由max_second和min_second定义,其中,h是分配给第二类型数据的部分的数量。
82.max_first=x
–1ꢀꢀ
(1)
83.min_first=x

k
ꢀꢀ
(2)
84.max_second=h
‑1ꢀꢀ
(3)
85.min_second=0
ꢀꢀ
(4)
86.下文将描述为两个不同示例性存储单元配置虚拟分区的示例性方法。
87.一旦多种虚拟分区中的一种已经与请求相关联,则方法300前进到框306。
88.在框306处,存储单元分配器(例如,存储单元分配器402)被配置成将存储单元的(多个)被请求部分从分配给虚拟分区中的特定类型数据的存储单元的(多个)部分分配到任务。例如,如果该请求针对的是用于由顶点数据主部件发起的任务的临时数据的us 126的两个部分,并且每个任务主部件都有虚拟分区,则该请求可以与针对顶点数据主部件的虚拟分区相关联。当针对顶点数据主部件的虚拟分区如图4中在406处所示时(其中存储单元的顶部25%被分配给临时数据,存储单元的底部75%被分配给属性数据),存储单元分配器(例如,存储单元分配器402)可以被配置成从分配给临时数据的存储单元(us 126)的25%分配存储单元的被请求两个部分。
89.类似地,如果该请求针对的是用于由计算数据主部件发起的任务的属性数据的us 126的六个部分,并且每个任务主部件都有虚拟分区,则该请求可以与针对计算数据主部件的虚拟分区相关联。当针对计算数据主部件的虚拟分区如图4中在408处所示时(其中存储单元的顶部60%被分配给临时数据,存储单元的底部40%被分配给属性数据),存储单元分
配器(例如,存储单元分配器402)可以被配置成从分配给属性数据的存储单元(us 126)的40%分配存储单元的被请求六个部分。
90.从分配给相关类型数据的部分分配所请求的部分可以首先包括确定(多个)所分配部分是否有足够的自由或未分配部分满足请求。例如,如果该请求针对用于临时数据的两个部分,但分配给临时数据的存储单元的25%中只有一个未分配部分,则存储单元分配器无法满足请求,并且存储单元分配器可能会停止请求。不过,如果该请求针对用于临时数据的存储单元的两个部分,并且存储单元的分配给临时数据的25%中有四个未分配部分,则存储单元分配器能够满足该请求。因此,存储单元分配器在该25%中选择两个自由或可用的部分,并将这两个部分分配给任务。
91.在一些情况下,存储单元分配器(例如,存储单元分配器402)可以被配置成按次序(例如,按接收它们的次序)处理与相同类型的数据有关的请求,但存储单元分配器可以能够不按次序处理与不同类型的数据有关的请求。例如,在两种类型的数据是临时数据和属性数据的情况下,存储单元分配器可以被配置成按照接收它们的次序处理要存储单元的部分存储临时数据的请求,并且按照接收它们的次序处理要存储单元的部分存储属性数据的请求。在一些情况下,为了实现这一点,存储单元分配器可以包括每种类型的请求的队列,并且可以按次序存储和处理每个队列中的请求。然而,如果请求被停止(例如,因为无法满足请求),那么存储单元分配器可以被配置成尝试满足要存储单元的部分用于其它类型数据的请求。例如,如果存储单元分配器无法满足要存储单元的一个或多个部分存储临时数据的请求,则存储单元分配器可以尝试满足要存储单元的一个或多个部分存储属性数据的下一个请求(反之亦然)。当不同类型的请求由不同请求者提出时,如图4所示,存储分配器可以通过按次序处理来自每个请求者的请求来实施请求,并且如果它不能满足来自一个请求者的请求,那么尝试满足来自另一个请求者的下一个请求。
92.当以这种方式配置存储单元分配器时,存储单元分配器可以被描述为非阻塞的。将存储单元配置为非阻塞通过在其能够满足针对第一类型数据(例如,属性数据)的请求之前停止操作,确保存储单元分配器导致死锁。例如,如果存储单元分配器被配置成按照接收请求的次序(无论类型如何)处理所有请求,则可能有要求存储单元的部分存储第一类型数据(例如,属性数据)的请求的连续流,从而消耗分配用于存储第一类型数据(例如,属性数据)的存储单元的区段。那么,如果存储单元分配器接收到要存储单元的部分存储第一类型数据(例如,属性数据)的另一请求,则存储单元分配器可能不能满足该请求,直到存储单元的部分被释放,并且存储单元的部分仅在向任务分配存储单元的部分用于存储第二类型数据(例如,临时数据)且接着由usc执行时才被释放。这会导致死锁。
93.结合图3描述的使用虚拟分区来分配共享存储单元的部分的方法可以用于分配用于存储多种类型数据的任何共享存储单元的部分,并且每种类型的数据所需的存储单元的量是可变的。下文描述:(1)图3的方法的示例性实施方式,用以将图1的gpu的统一储存库(us)的部分分配给着色器任务;以及(2)图3的方法的示例性实施方式,用以将gpu的统一顶点缓冲器(uvb)的部分分配给几何形状处理阶段着色器任务。然而,本领域的技术人员将显而易见的是,这些仅是示例,并且所述方法的使用不限于us或uvb,也不限于形成gpu的一部分的存储单元。
94.统一储存库的分配
95.如上所述,在属性数据和临时数据之间对图1的us 126进行静态分区的问题之一在于,在一些状况下或在一些操作条件下,us 126不能被有效或完全利用。例如,当gpu 100仅运行几何形状处理阶段使得每个usc 104主要执行顶点着色器任务时,顶点着色器任务不能有效地将us 126用于属性,因为属性被限于us 126的第二区段204。这样限制了usc 104可以并行运行的顶点着色器任务的数量,这降低了gpu 100的效率。类似地,当gpu 100仅运行光栅化阶段使得每个usc 104主要执行片段着色器任务时,片段着色器任务不能有效地将us 126用于临时数据,因为它们无权访问us 126的第二区段204。这可能会限制usc可以并行运行的片段着色器任务的数量,特别是当每个片段着色器任务的临时数据量较大时。类似于仅几何形状处理阶段的示例,这可能会降低gpu的效率。
96.申请人主张,通过使用图3的虚拟分区方法将us 126的部分分配给着色器任务,可以实现对us 126的更高效率和/或更有效的使用,其中,每个任务主部件(例如,数据主部件)都有虚拟分区。具体地说,由于任务主部件(例如,数据主部件)是独立的,因此这可以用以产生us 126的独立视图——例如,它允许为每个任务主部件(例如,数据主部件)提供us 126的有利视图。
97.例如,由于像素数据主部件任务仅存储临时数据(而非属性数据),因此像素数据主部件的虚拟分区可以被配置成将所有存储单元分配给临时数据(不将任何存储单元分配给属性数据);并且由于顶点数据主部件任务存储属性数据和临时数据两者,因此顶点数据主部件的虚拟分区可以将us 126的一个或多个部分分配给属性数据,并且将us 126的一个或多个部分分配给临时数据,但是,由于顶点数据主部件任务通常存储的属性数据多于临时数据,可以向属性数据分配比临时数据更多的us 126的部分。与上述静态分区方案相比,使用这样的虚拟分区,当仅有像素数据主部件任务运行时,允许像素数据主部件任务将整个us 126用于临时数据,当仅有顶点数据主部件任务运行时,允许顶点数据主部件任务将更多的us 126用于属性数据。当像素数据主部件任务和顶点数据主部件任务都在运行时,两个数据主部件会争夺us 126的相同部分。
98.通常,针对每个数据主部件的虚拟分区可以被配置成使得us 126的一部分被分配给该数据主部件的任务将存储的每种类型的数据。例如,如果一个数据主部件生成的任务同时存储属性数据和临时数据,那么将us 126的至少一个部分分配给属性数据,并且将us 126的至少一个部分分配给临时数据;如果另一个数据主部件生成的任务仅存储临时数据,则将us 126的至少一个部分分配给临时数据,但可以不将us 126中的任何部分分配给属性数据。
99.在一些情况下,可以对虚拟分区施加进一步的限制以避免死锁。具体地说,在一些情况下,可以对虚拟分区设置进一步的限制,其中,在针对用于任务的第一类型数据(例如,属性数据)的us 126的部分作出请求以及针对用于相同任务的第二类型数据(例如,临时数据)的us 126的部分作出请求之间,存在时间上的滞后或延迟。例如,如上所述,一些任务(例如,由顶点数据主部件、计算数据主部件、射线追踪数据主部件和域数据主部件发起的任务)存储属性数据和临时数据两者,但要us 126的(多个)部分用于存储属性数据的请求在要us 126的(多个)部分用于存储临时数据的请求之前作出。具体地说,当这些数据主部件中的一个准备好发起任务时,数据主部件将任务发送至调度器106。然后,调度器106向存储单元分配器402发送请求,要us 126的一个或多个部分用于存储任务的属性数据。在已经
为任务分配us的(多个)部分用于存储属性数据后,任务被发送或发布到usc104。然后,usc 104向存储单元分配器402发送请求,要us 126的一个或多个部分用于存储任务的临时数据。一旦已经为任务分配us的所请求部分用于存储临时数据,就可以由usc执行任务。由于在为任务分配us的(多个)部分用于存储属性数据和请求us的(多个)部分用于存储临时数据之间存在时间延迟,因此,数据主部件(例如,顶点数据主部件)有可能向调度器发送若干任务,并且有可能在usc 104请求us 126的(多个)部分用于存储任何任务的临时数据之前向那些任务的每个任务分配us 126的(多个)部分用于存储属性数据。然而,如果这些任务都被分配所有us 126用于属性数据,那么这些任务将无法完成,因为us将没有足够的自由部分用于存储甚至其中一个任务的临时数据。此问题在本文中可以被称为数据内主部件依赖性。
100.可以通过如下方式来避免此问题:配置每个虚拟分区,从而将足够数量的us126部分分配给第二类型数据(例如,临时数据),以允许在任务被分配us 126的(多个)部分用于第一类型数据(例如,属性数据)时执行对应数据主部件的至少一个任务。例如,在由数据主部件发起的任务可以为第二类型的数据(例如,临时数据)请求的us 126的部分存在最大数量的情况下,那么该数据主部件的虚拟分区可以被配置成至少将us 126的最大数量的部分分配给第二类型的数据(例如,临时数据)。这确保了数据主部件不能通过为第一类型数据(例如,属性数据)消耗过多的us 126的部分来停止其自己任务的执行。例如,如果vdm任务将用于临时数据的寄存器最大数量为20,则针对vdm的虚拟分区可以至少将us的20个寄存器分配给临时数据。
101.在为第一类型和第二类型数据请求us的(多个)部分之间存在延迟的情况下,配置每个数据主部件的虚拟分区,使得有足够数量的us部分被分配给每种类型的数据主部件以执行由该数据主部件发起的至少一个任务,但在一些情况下这样做可能不足以避免死锁。例如,如果可以不按次序执行任务,并且不同的数据主部件将为第二类型数据(例如,临时数据)请求的us 126的部分具有不同最大数量,这可能还不足以避免死锁。将参考图5解释此潜在问题。在本示例中,vdm发起的任务将请求最多25%的us 126用于存储临时数据,因此(为了解决数据内主部件依赖性问题),针对vdm的虚拟分区502将顶部25%的us分配给临时数据,将剩余75%的us分配给属性数据;cdm发起的任务将请求最多30%的us 126用于存储临时数据,因此(为了解决数据内主部件依赖性问题),针对cdm的虚拟分区504将30%的us 126分配给临时数据,将剩余70%的us 126分配给属性数据。在本示例中,有两个vdm任务(vdm任务0和vdm任务1)和一个cdm任务被发送至调度器106。这些任务中的每一个任务被分配us 126的一个或多个部分用于存储属性数据,之后任何任务被分配us 126的部分用于存储临时数据。在此示例中,虽然调度器106被配置成将相同数据主部件的任务按次序发送至usc 104(例如,调度器106被配置成在vdm任务1之前将vdm任务0发送至usc 104),但调度器106可以能够不按次序发送来自不同数据主部件的任务。例如,即使在vdm任务之后在调度器106处接收到cdm任务,调度器106也可以在vdm任务之前将cdm任务发送至usc 104。
102.在usc 104被配置成按次序执行其接收的任务的情况下,如果cdm任务在vdm任务之前到达usc 104,则usc必须在其能够执行vdm任务之前执行cdm任务。然而,如果cdm任务需要30%的us来用于存储临时数据,因为三个任务已被分配了us 126的很多用于属性数据,所以没有足够多的us 126的自由部分供cdm任务来存储其临时数据,并且将不会释放更
多的us 126的部分,因为已经被分配了us 126的剩余部分的任务(即,vdm任务0和1)被卡在cdm任务后面了。因此,usc 104变得死锁。此问题在本文中可以被称为数据间主部件依赖性。
103.可以通过如下方式来避免此问题:进一步限制针对每个数据主部件的虚拟分区,使得在每个数据主部件都具有任何其任务将为第二类数据(例如,临时数据)请求的us 126的部分的最大数量的情况下,没有任何虚拟分区会向第一类型数据(例如,属性数据)分配多于x

m的部分,其中,x是存储单元(例如,us 126)中的部分总数,并且m是将为第二类型数据(例如,临时数据)请求的部分的最大数量中的最大值。例如,如果vdm任务为临时数据使用最多20个寄存器,ddm任务为临时数据使用最多25个寄存器,cdm任务为临时数据使用最多15个寄存器,rdm任务为临时数据使用最多40个寄存器,则每种虚拟分区都可以被配置成将不多于x

40个部分分配给属性数据。这有效地将可以分配给属性数据的部分的数量上限限制为x

m。上限与部分总数量之间的差值被称为临时部分的保证数量g(在本示例中为m)。
104.如上所述,在一些情况下,虚拟分区可以是可配置的。例如,针对指定将存储单元的多少分配给每种类型的数据的每种虚拟分区可以有一组一个或多个寄存器。在一些情况下,虚拟分区可以是动态可配置的,即它们可以在操作期间或在与对应数据主部件有关的任务当前正被执行时被重新配置或调整。例如,在一些情况下,可能有利的是让每种虚拟分区具有大多数情况下使用的默认配置,但允许动态地调整一个或多个虚拟分区以允许或适应异常或罕见的情况。在这些情况下,虚拟分区可以最初配置有对应的默认配置,然后响应于一个或多个触发事件,虚拟分区中的一个或多个可以被动态地重新配置。
105.例如,在一些情况下,大多数任务可能请求us 126的q个部分或更少用于存储临时数据,但可能有一些任务可能请求us 126的多于q个部分用于存储临时数据。可能有利的是,在大部分时间中操作配置成保证q个临时部分的虚拟分区,并且当出现需要多于q个部分用于存储临时数据的任务时,调整虚拟分区以暂时保证多于q个临时部分。动态地调整虚拟分区以适应需要us的大量部分用于临时数据的偶发任务,而不是一直保持较高保证数量的临时部分,这样允许大部分时间将us的更多部分用于属性数据,这可以提高gpu的性能和/或效率。具体而言,如果存储单元有40个部分并且大多数任务请求5个部分或更少用于存储临时数据,但一些任务可能请求最多30个部分用于存储临时数据,那么在大部分时间,仅保留存储单元的5个部分用于临时数据(留下35个部分用于属性数据(如果需要的话)),而不是将存储单元的30个部分保留用于临时数据(仅留下10个部分用于属性数据(如果需要的话))来确保任何任务都可以获得存储单元的最多30个部分用于临时数据。以这种方式动态调整虚拟分区还可以将可分配给任何任务的用于存储临时数据的部分的最大数量增加到存储单元的部分数量,如上所述,这可以减少必须使用其它存储器(例如,主存储器)来存储临时数据的任务数量。
106.因此,在一些情况下,可能存在临时部分的默认保证数量d(其可以小于任何任务可能请求的us部分的最大数量),并且每个虚拟分区的默认配置可以使得存储单元的不多于x

d个部分被分配到属性数据。可以选择临时部分的默认保证数量以适应大多数任务(例如,任务的阈值百分比)。然后,如果出现需要多于默认保证数量的临时部分的任务,则可以调整一个或多个虚拟分区以保证更多数量的临时部分。
107.例如,一些计算数据主部件任务可能需要同时分配us的大量部分用于存储临时数
据。例如,计算数据主部件可以能够发起需要us的大量部分来存储临时数据的任务;或者计算数据主部件可以能够发起包括一组具有屏障的一个或多个任务的计算工作组,并且工作组的一组任务可能共同需要us的大量部分来存储临时数据。计算工作组是多个应用程序编程接口(api)的特征,它允许一系列线程/实例合作处理数据集。如果计算内核包含屏障指令,则工作组中的所有线程/实例必须在允许任何线程/实例继续之前到达屏障指令。因此,同时执行工作组的任务是有利的。为了保证具有屏障的工作组中的所有任务能够同时执行,同时分配us的部分以存储工作组中每个任务的临时数据。因此,即使每个个体任务不需要多于默认保证数量的临时部分,工作组中的任务总共可能需要多于默认保证数量的临时部分。例如,如果临时部分的默认保证数量为10,并且存在包括四个任务的工作组,并且每个任务需要us的5个部分来存储临时数据,则即使每个任务不超过默认保证数量的临时部分,但工作组的任务总共需要us的20个部分来存储临时数据。在该示例中,由于虚拟分区仅可以被配置成保证us的10个部分用于临时数据,因此,除非调整虚拟分区,否则无法保证us的20个部分将始终共同空闲而用于存储临时数据。
108.在这些情况下,计算数据主部件可以被配置成,在其发起任务(例如,向调度器发送任务)之前,确定任务是否在其可以被执行之前同时需要分配多于默认保证数量的临时部分用于存储临时数据(例如,因为任务本身需要多于默认保证数量的临时部分,或任务是同时共同需要分配多于默认保证数量的临时部分用于存储临时数据的组(例如,工作组)的一部分)。此类任务在本文中可以被称为大型临时数据任务。如果计算数据主部件确定任务是大型临时数据任务,则计算数据主部件可以被配置成调整一个或多个数据主部件的虚拟分区,以确保us有足够的部分腾空,以允许执行任务(或任务组)。一旦已经调整相关虚拟分区,计算数据主部件可以将大型临时数据任务发送至调度器。
109.在一些情况下,调整一个或多个数据主部件的虚拟分区以确保us的足够部分将腾空以允许执行大型临时数据任务可以包括调整虚拟分区,使得虚拟分区不会将多于阈值量的部分分配给属性数据。例如,如果临时部分的默认保证数量为10,并且计算数据主部件需要us的20个部分用于存储临时数据,则计算数据主部件可以被配置成调整将us的至少一个部分分配给属性数据的任何虚拟分区,使得这些虚拟分区中的每一个虚拟分区将us的不多于x

20个部分分配给属性数据,其中,x是us的部分的总数量。例如,如果vdm、ddm、cdm和rdm被配置成发起存储属性数据的任务,那么这些数据主部件中的每一个的默认虚拟分区可以将us的至少一个部分分配给属性数据。在本示例中,如果计算数据主部件识别到大型临时数据任务,所述计算数据主部件可以被配置成动态地调整针对vdm、ddm、cdm和rdm的虚拟分区的配置,使得这些虚拟分区都不会分配usc的多于x

r个部分给属性数据,其中,x是us的部分的总数量,r是分配给临时数据以便能够执行任务的部分的数量,并且r>临时部分的默认保证数量(d)。在一些情况下,这些情况的每种情况下分配给临时数据的部分的数量可以不进行调整——例如,在一些示例中,分配给属性数据的us部分的数量可以减少,但分配给临时数据的us部分的数量可能不会增加。此外,可以不调整其他数据主部件(例如,pdm和tdm)的虚拟分区。该调整确保了在usc队列中的计算任务之后,将不会有许多其他任务一直占用us的大量部分用于属性数据,那样会阻止计算任务能够获得us的r个部分用于存储临时数据。当每种虚拟分区的配置作为一个或多个值存储在存储器中(例如,一个或多个寄存器的集合中)时,可以通过更新针对那一虚拟分区的存储值来调整虚拟分区的配置。在一些
情况下,一旦已经调整虚拟分区,计算数据主部件就可以将任务发送至调度器106。
110.在一些情况下,可能可以在来自一个或多个其他数据主部件的任务已在默认配置下被分配us的部分用于存储属性数据之后,但在来自其他数据主部件的任务已被分配us的部分用于存储临时数据之前,向调度器发送来自计算数据主部件的任务。在这些情况下,如果大型临时数据计算任务在其他任务之前被发送到usc,并且其他任务已被分配us的如此多部分用于存储属性数据,以至于us没有足够的自由部分供计算任务存储其临时数据,则可能发生死锁。具体而言,usc将无法执行计算数据主部件任务,因为它将无法获得us的足够多部分来存储计算数据主部件任务的临时数据,并且其他任务(可能腾空us的部分)被卡在计算数据主部件任务的后面。为了确保这种情况不会发生,计算数据主部件可以被配置成,在其已识别到大型临时数据任务后,确定是否发起存储属性数据的任务的任何其他数据主部件(可以称为属性数据主部件)目前具有与usc一起正在进行中(in

flight)的任何任务。如果任务已由数据主部件发起(例如,被发送至调度器),但尚未由usc104执行,则任务可能正在与usc一起在进行中。如果确定至少一个属性数据主部件有至少一个任务在进行中,则计算数据主部件可以被配置成在调整相关虚拟分区并将任务发布到调度器之前等待任何进行中的属性数据主部件任务已被执行。
111.在一些情况下,计算数据主部件(或另一部件)可以被配置成在已经执行大型临时数据计算任务之后将虚拟分区设置回其默认配置。由于通过任何虚拟分区增加了分配给属性数据的us量,所以没有发生死锁的风险,因此,一旦已经执行任务,就可以将虚拟分区设置回其默认配置。
112.现在参考图6,其示出了可以动态调整虚拟分区以适应大型临时数据计算数据主部件(cdm)任务的示例性情境。在此示例中,系统在时间t0时开始,其中每个虚拟分区具有其默认配置,在默认配置中,每个虚拟分区将不多于x

10个us的部分分配给属性数据。因此,临时部分的默认保证数量为10。在时间t1时,计算数据主部件希望发起大型临时数据任务(例如,需要20个us部分来存储临时数据的任务)。然而,在时间t1时,vdm具有一个或多个进行中的任务,因此此时调整虚拟分区是不安全的。所以,计算数据主部件等待或停止,直到执行或完成vdm进行中任务为止,然后在时间t2,计算数据主部件动态地重新配置针对属性数据主部件(例如,vdm、cdm、rdm和ddm)的虚拟分区,使得这些虚拟分区中的每一种都分配不多于x

20个us的部分给属性数据(其中x是us的部分的总数量),并发起大型临时数据任务(例如,将任务发送至调度器)。应当指出,由于pdm任务不存储属性数据,计算数据主部件不必等待或停止,直到执行或完成进行中pdm任务。一旦在t3时执行或完成了大型临时数据计算数据主部件任务,虚拟分区就被设置回到其默认配置(例如,被配置成保证10个临时部分用于临时数据)。应当指出,尽管在时间t3时存在进行中的vdm任务,但计算数据主部件不必等待它们被执行或完成,然后再将虚拟分区设置回到默认配置。
113.然后,在时间t4时,计算数据主部件希望发起第二大型临时数据任务(例如,需要40个us部分来存储临时数据的任务)。然而,在时间t4时,vdm具有一个或多个进行中的任务,因此此时调整虚拟分区是不安全的。所以,计算数据主部件等待,直到执行或完成vdm进行中任务为止,然后在时间t5,动态地重新配置针对属性数据主部件(例如,vdm、cdm、rdm和ddm)的虚拟分区,使得它们中的每一种都分配不多于x

40个us的部分给属性数据(其中x是us的部分的总数量),并发起第二大型临时数据任务(例如,将任务发送至调度器)。一旦在
时间t6时执行或完成了大型临时数据任务,虚拟分区就被设置回到其默认配置。应当指出,尽管在时间t6时存在进行中的vdm任务,但计算数据主部件不必等待它们被执行或完成,然后再将虚拟分区设置回到默认配置。
114.然后,在时间t7时,计算数据主部件希望发起常规临时数据任务(例如,需要少于默认保证数量的临时部分的任务)。由于任务是常规临时数据任务,计算数据主部件不必等待执行或完成任何其他进行中的任务,因此在时间t7发起任务并且不改变虚拟分区(即虚拟分区继续具有其默认配置)。
115.对于本领域技术人员显而易见的是,这仅仅是一个示例,其它数据主部件或任务主部件可能能够发起需要多于默认数量的us部分用于存储第二类型数据(例如,临时数据)的任务。
116.尽管上文已描述,当触发事件发生时(例如,当数据主部件检测到大型临时数据任务时),数据主部件(例如,计算数据主部件)可以调整针对一个或多个数据主部件的虚拟分区,但在其它示例中,当触发事件发生时,gpu的另一部件或单元可以负责调整虚拟分区。例如,在gpu包括负责使数据主部件向调度器106发布任务的固件处理器的情况下,例如上文关于图1描述的固件处理器121,当触发事件发生时,可能是固件处理器121调整虚拟分区。例如,在一些情况下,供应几何形状数据的主机(例如,cpu)的驱动程序可以被配置成通知固件处理器121控制流是否与大型临时数据任务相关联。然后,当固件处理器121接收到被识别为与大型临时数据任务相关联的控制流时,固件处理器121可以被配置成:(i)推迟对应数据主部件对控制流的处理,直到没有任何进行中的属性数据主部件任务(例如,没有活动几何形状处理阶段,并且没有射线追踪处理阶段在活动);以及(ii)在使所述数据主部件处理控制流之前,动态调整针对vdm、ddm、cdm和rdm的虚拟分区的配置,使得这些虚拟分区都不会分配多于x

r个usc的部分给属性数据,其中,x是us的部分的总数量,并且r是分配给大型临时数据任务的部分的数量。在此示例中,是主机(例如,cpu)的驱动程序被配置成计算与控制流相关联的单个任务和工作组(例如,具有屏障的工作组)将需要的临时寄存器的数量,并且确定此数量是否超过临时部分的默认保证数量d。
117.对于本领域技术人员显而易见的是,统一储存库仅是示例性存储单元,上文关于统一储存库描述的用于分配存储单元的部分的相同方法和技术可以应用于用于为不同任务主部件发起的任务存储至少两种类型的数据的其它存储单元,具体而言,可以应用于其中在为第一类型的数据对存储单元的部分提出请求的时间和为第二类型的数据对存储单元的部分提出请求的时间之间存在时间间隔的存储单元。
118.统一顶点缓冲器的分配
119.如上文参考图1所述,gpu 100可以在几何形状处理阶段中在所接收的几何形状数据上运行一个或多个着色器。例如,所接收的几何形状数据可以分成多个绘制调用,并且可以在针对不同绘制调用的几何形状处理阶段调用不同的着色器。通常,针对每个绘制调用调用顶点着色器(vs),可以或可以不针对绘制调用调用几何形状着色器(gs),并且如果针对绘制调用启用了镶嵌,则还调用外壳着色器(hs)和域着色器(ds)。在一些情况下,首先调用vs,随后调用hs(如果镶嵌)、ds(如果镶嵌)和gs(如果启用几何形状着色)。在一些情况下,vs和hs(如果启用镶嵌)由顶点数据主部件调用;ds(如果启用镶嵌)由域数据主部件调用;并且如果未启用镶嵌,则由顶点数据主部件调用几何形状着色器(如果启用几何形状着
色),而如果启用了镶嵌,则由域数据主部件调用几何形状着色器。这在表1中示出。
120.表1
[0121][0122]
在图1的示例性gpu 100中,几何形状处理阶段中最后一次着色器运行的输出(可以被称为几何形状数据或变换的几何形状数据)被存储在共享存储单元中,所述共享存储单元可以被称为统一顶点缓冲器(uvb)122。例如,在既未启用镶嵌也未启用几何形状着色的情况下,所述顶点着色器是几何形状处理阶段中运行的最后一个着色器,并且顶点着色器的输出被存储在uvb中;在启用几何形状着色器的情况下,则所述几何形状着色器是几何形状处理阶段中运行的最后一个着色器,并且几何形状着色器的输出被存储在uvb中;并且在启用镶嵌但未启用几何着色的情况下,则域着色器的输出是几何形状处理阶段中运行的最后一个着色器,并且域着色器的输出被存储在uvb 122中。
[0123]
因此,与几何形状处理阶段的最后着色器有关的任何任务可能需要uvb的一个或多个部分来存储其输出(例如,几何形状数据或变换的几何形状数据)。例如,如图7所示,顶点数据主部件110和域数据主部件116可以被配置成通过将几何形状处理阶段着色器任务(例如vs、gs、hs或ds着色任务)发送至调度器106来发起或调用这些任务。如果被发起或调用的任务与针对绘制调用的几何形状处理阶段中的最后一个着色器有关,则调度器106可以向uvb分配器702发送要uvb 122的一个或多个部分用于存储任务的输出数据的请求。在任务已被分配uvb 122的所请求部分之后,就可以将任务发布到usc,在此将执行任务。
[0124]
如本领域技术人员所知,镶嵌用于从原始表面计算更详细表面。换句话说,镶嵌允许使用更低细节模型来生成更高细节图像。如果针对绘制调用(几何形状数据集合)启用镶嵌,hs生成提供给镶嵌单元124的镶嵌因子。然后,镶嵌单元124基于镶嵌因子镶嵌一个或多个补片,并且ds生成顶点在镶嵌单元124输出中的位置。因此,域数据主部件116被配置成接收镶嵌单元的输出,并且调用或发起域着色器以计算顶点在镶嵌单元输出中的位置。在申请人已知(且如图7所示)的一种实施方式中(并非承认其是众所周知的或甚至在申请人公司外部已知),镶嵌单元124包括单独的存储单元,称为镶嵌因子存储库(tfs)704,以用于存储由hs任务生成的镶嵌因子。因此,在该实施方式中,usc 104将hs任务的输出直接写入tfs704。
[0125]
然而,将镶嵌因子和几何形状数据存储在单独的存储单元中的问题之一在于,在许多情况或操作状态下,它不允许高效率地使用几何形状处理阶段存储单元资源。例如,如图8中所示,当镶嵌被禁用时,hs未被调用(并且因此不存在镶嵌因子),因此不使用tfs;并且当启用镶嵌时,使用tfs 704,但其只能由hs任务使用以存储镶嵌因子。因此,如果由于其它资源限制而仅运行几个hs任务,例如,tfs 704的至少一部分可能仍未使用。由于许多应
用不使用镶嵌,因此tfs常常保持闲置或未使用。当uvb为72kb且tfs为28kb时,使得28%的可用存储装置未使用。
[0126]
发明人已发现,如果有单个存储单元用于存储由vs、gs或ds任务输出的经变换的几何形状数据以及由hs任务输出的镶嵌因子,则可以更有效地利用几何形状处理阶段的存储容量。如果根据图3的虚拟分区方法300为vs、gs、ds和hs任务分配组合存储单元的部分,尤其会有这种效果,其中,每种类型的任务(vs、gs、ds和hs)都有虚拟分区,该虚拟分区将组合存储单元的零个、一个或多于一个部分分配给变换的几何形状数据,并将组合存储单元的零个、一个或多于一个部分分配给镶嵌因子。
[0127]
现在参考图9,其示出了变换的几何形状数据和镶嵌因子存储在相同存储单元中的示例性实施方式。具体地说,在此实施方式中,镶嵌单元124不具有单独的存储单元(例如,tfs 704)用于存储由hs任务生成的镶嵌因子,而是镶嵌因子和变换的几何形状数据两者都存储在uvb 122中。因此,uvb 122用于存储两种不同类型的数据。在此示例中,调度器106被配置成从顶点数据主部件110和/或域数据主部件116接收几何形状处理阶段着色器任务(例如,vs、hs、ds和/或gs任务)。如果该任务是hs任务,则调度器被配置成从uvb分配器902请求uvb的一个或多个部分以用于存储镶嵌因子;如果该任务是与对于一组几何形状数据(例如,对于绘制调用)的几何形状处理阶段的最后着色器阶段相关的vs、ds或gs任务,则调度器106被配置成从uvb分配器902请求uvb的一个或多个部分用于存储变换的几何形状数据。当该任务被分配uvb的所需数量的部分时,该任务可以被发送至或发布到usc,在usc处执行任务,并且其结果按要求被写入uvb。这允许usc仅向uvb,而不是向uvb和tfs两者写入输出,这可以简化gpu的硬件实施。例如,可以移除每个usc与镶嵌单元之间的接口(例如,这样可以省引脚)。
[0128]
当uvb分配器902接收到要uvb的一个或多个部分用于存储变换的几何形状数据或用于存储任务的镶嵌因子的请求时,uvb分配器根据图3的方法300分配所请求的一个或多个部分。具体地,uvb分配器902将该请求与uvb的多种虚拟分区中的一种相关联。在此示例中,存在针对几何形状处理阶段中的每种类型的着色器任务的uvb的虚拟分区。例如,如图10中所示,可能存在针对vs任务的虚拟分区1002、针对hs任务的虚拟分区1004、针对ds任务的虚拟分区1006和针对gs任务的虚拟分区1008。然后,uvb分配器902从分配给与请求相关联的虚拟分区中的适当类型的数据的一个或多个部分分配所请求数量的部分。例如,如果请求uvb 122的三个部分用于存储由hs任务产生的镶嵌因子,则该请求可以与hs任务的虚拟分区1004相关联,所述虚拟分区将uvb的底部25%分配给镶嵌因子,uvb分配器902可以被配置成从分配给镶嵌因子的25%的uvb为hs任务分配uvb的三个部分。类似地,如果请求uvb 122的六个部分用于存储由vs任务生成的变换的几何形状数据,则该请求可以与vs任务的虚拟分区1002相关联,所述虚拟分区将100%的uvb分配给变换的几何形状数据,uvb分配器902可以被配置成从uvb中的任何地方为vs任务分配uvb的六个部分。
[0129]
在一些情况下,虚拟分区可以被配置成使得如果禁用镶嵌,则可以将整个uvb用于存储由vs或gs任务生成的变换的几何形状数据;并且如果启用镶嵌,则hs不能消耗所有uvb,使得ds或gs任务无法将其输出写入uvb。这可以通过如图10所示配置虚拟分区来实现。具体地,这可以通过如下方式完成:针对可以生成存储在uvb中的变换的几何形状数据的任务,即vs、ds和gs任务,配置虚拟分区,使得它们将uvb的100%分配给变换的几何形状数据,
将uvb的0%(即,无)分配给镶嵌因子;以及将针对hs任务的虚拟分区配置成分配小分数(例如,25%)的uvb用于存储镶嵌因子。如图11中所示,这意味着当禁用镶嵌时,vs或gs任务将具有整个uvb可用于存储变换的几何形状数据,并且当启用镶嵌时,hs任务不能消耗过多的uvb,从而阻止ds或gs任务存储变换的几何形状数据。
[0130]
在一些情况下,用于存储变换的几何形状数据和镶嵌因子两者的uvb的大小(与用于仅存储变换的几何形状数据的uvb的大小相比)可以增大tfs的大小。这样可改进禁用镶嵌时gpu的性能,因为它可以允许更多几何形状处理阶段着色器任务同时在进行中。不过,在其他情况下,用于存储变换的几何形状数据和镶嵌因子两者的uvb的大小可以不增大到超过用于仅存储变换的几何形状数据的uvb的大小。这样可以减少gpu中的存储器量,而不影响当禁用镶嵌时(在大多数情况下是这样的)gpu的性能。然而,这可能在禁用镶嵌时降低gpu的性能。在任一情况下,由于镶嵌单元不再需要其自身的存储单元来存储镶嵌因子,因此在硬件中实施镶嵌的成本降低。
[0131]
图12示出了其中可以实现本文所述的存储单元分配器的计算机系统。计算机系统包括cpu 1202、gpu 1204、存储器1206和其它装置1214,例如显示器1216、扬声器1218及相机1220。处理块1210(可以是本文所述的存储单元分配器402、902)实现于gpu 1204上。在其他示例中,处理块1210可以实现于cpu 1202上。计算机系统的部件可以通过通信总线1222彼此进行通信。
[0132]
图1、图2、图4、图5、图7、图9和图10的存储单元分配器和图形处理单元被示为包括多个功能块或单元。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块或单元可以任何合适的方式提供。应当理解,本文描述为由块或单元形成的中间值不需要由存储单元分配器或图形处理单元在任何点物理生成,并且可以仅表示逻辑值,该逻辑值方便地描述了由存储单元分配器或图形处理单元在其输入和输出之间执行的处理。
[0133]
本文所述的存储单元分配器和/或图形处理单元可以包含在集成电路上的硬件中。本文所述的存储单元分配器和/或图形处理单元可以被配置成执行本文所述的任何方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
[0134]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由
所述代码指定的任务。
[0135]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
[0136]
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可以提供一种其上编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中处理(即,运行)时,该计算机可读程序代码将该系统配置成制造被配置成执行本文所述任何方法的存储单元分配器或图形处理单元,或者制造包括本文所述任何设备的处理器。集成电路定义数据集可以是例如集成电路描述。
[0137]
因此,可以提供一种在集成电路制造系统中制造如本文所述的存储单元分配器或图形处理单元的方法。此外,可以提供一种集成电路定义数据集,其在集成电路制造系统中处理时使制造存储单元分配器或图形处理单元的方法得以执行。
[0138]
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
[0139]
现在将参考图13描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造存储单元分配器或图形处理单元的示例。
[0140]
图13示出了集成电路(ic)制造系统1302的示例,该集成电路制造系统被配置为制造如本文的任一示例中所描述的存储单元分配器和/或图形处理单元。具体地,ic制造系统1302包括布局处理系统1304和集成电路生成系统1306。ic制造系统1302配置成接收ic定义数据集(例如定义如本文中的任何示例中所描述的存储单元分配器或图形处理单元),处理ic定义数据集,并根据ic定义数据集生成ic(例如其包含如本文中的任何示例中所描述的存储单元分配器或图形处理单元)。ic定义数据集的处理将ic制造系统1302配置成制造集成电路,所述集成电路包含如本文中的任何示例中所描述的存储单元分配器或图形处理单元。
[0141]
布局处理系统1304被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定要生成的电路的门级表示,例如就逻辑部件(例如nand、nor、and、or、mux和flip

flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1304已经确定电
路布局时,其可将电路布局定义输出到ic生成系统1306。电路布局定义可以是例如电路布局描述。
[0142]
如本领域已知的,ic生成系统1306根据电路布局定义来生成ic。例如,ic生成系统1306可实现生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1306的电路布局定义可呈计算机可读代码的形式,ic生成系统1306可使用所述计算机可读代码来形成用于生成ic的合适掩模。
[0143]
由ic制造系统1302执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1302可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下级中的一些可以在不同位置和/或由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
[0144]
在其它示例中,集成电路定义数据集在集成电路制造系统处的处理可将系统配置成制造其中ic定义数据集不进行处理以便确定电路布局的存储单元分配器或图形处理单元。例如,集成电路定义数据集可以定义例如fpga的可重新配置的处理器的配置,并且对所述数据集进行的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有所述定义的配置的可重新配置的处理器。
[0145]
在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集,以上文关于图13描述的方式对集成电路制造系统的配置,可制造出如本文中所述的装置。
[0146]
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图13所示的示例中,ic生成系统还可以由集成电路定义数据集另外配置,以在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
[0147]
与已知的实现方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实现方式可以引起性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施例之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实现方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
[0148]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1