《用于存储共享顶点的技术.pdf》由会员分享,可在线阅读,更多相关《用于存储共享顶点的技术.pdf(31页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103886547 A (43)申请公布日 2014.06.25 CN 103886547 A (21)申请号 201310714610.3 (22)申请日 2013.12.20 13/723,015 2012.12.20 US G06T 1/20(2006.01) G06F 17/30(2006.01) (71)申请人 辉达公司 地址 美国加利福尼亚州 (72)发明人 杰尔姆F小杜鲁克 济亚德S哈库拉 亨利帕尔德莫尔顿 (74)专利代理机构 北京市磐华律师事务所 11336 代理人 董巍 谢栒 (54) 发明名称 用于存储共享顶点的技术 (57) 摘要 公开了用于存。
2、储共享顶点的技术。图形处理 单元包括几何处理单元集, 每个几何处理单元配 置为彼此并行地处理图形图元。给定的几何处理 单元生成一个或多个图形图元或一个或多个几何 对象并且本地地缓存相关联的顶点数据。几何处 理单元还缓存至那些顶点的不同索引集, 其中每 个这类集代表不同的图形图元或几何对象。几何 处理单元可以之后彼此并行地将所缓存的顶点和 索引流传输到全局缓冲区。流输出同步单元通过 为每个几何处理单元提供全局顶点缓冲区内的、 顶点可以被写入的不同基地址来协调顶点和索引 的并行流传输。流输出同步单元还为每个几何处 理单元提供全局索引缓冲区内的、 索引可以被写 入的不同基地址。 (30)优先权数据 。
3、(51)Int.Cl. 权利要求书 2 页 说明书 18 页 附图 10 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书18页 附图10页 (10)申请公布号 CN 103886547 A CN 103886547 A 1/2 页 2 1. 一种用于填充多个全局缓冲区的计算机实现方法, 所述方法包括 : 从第一处理单元接收指示第一本地索引缓冲区内的、 由所述第一处理单元所生成的若 干条目的数据, 其中所述第一处理单元包括在多个处理单元中 ; 以及 将全局索引缓冲区内的第一基地址传送到所述第一处理单元, 所述全局索引缓冲区内 的所述第一基地址反映所述全局索。
4、引缓冲区内的、 所述第一本地索引缓冲区的所述条目应 该被写入的第一位置, 其中所述第一全局索引缓冲区内的所述第一基地址基于所述全局索 引缓冲区内的、 已经分配到包括在所述多个处理单元中的至少一个其他处理单元的若干条 目。 2. 一种图形子系统, 包括 : 流同步单元, 配置为 : 从第一处理单元接收指示第一本地索引缓冲区内的、 由所述第一处理单元所生成的若 干条目的数据, 其中所述第一处理单元包括在多个处理单元中 ; 以及 将全局索引缓冲区内的第一基地址传送到所述第一处理单元, 所述全局索引缓冲区内 的所述第一基地址反映所述全局索引缓冲区内的、 所述第一本地索引缓冲区的所述条目应 该被写入的第。
5、一位置, 其中所述第一全局索引缓冲区内的所述第一基地址基于所述全局索 引缓冲区内的、 已经分配到包括在所述多个处理单元中的至少一个其他处理单元的若干条 目。 3. 如权利要求 2 所述的图形子系统, 其中所述流同步单元进一步配置为基于所述全局 索引缓冲区内的、 已经分配到所述第一处理单元的若干条目更新所述全局索引缓冲区内的 所述第一基地址, 以生成所述全局索引缓冲区内的第二基地址。 4. 如权利要求 3 所述的图形子系统, 其中所述流同步单元进一步配置为 : 从第二处理单元接收指示第二本地索引缓冲区内的、 由所述第二处理单元所生成的若 干条目的数据, 其中所述第二处理单元包括在所述多个处理单元。
6、中 ; 将所述全局索引缓冲区内的所述第二基地址传送到所述第二处理单元, 所述全局索引 缓冲区内的所述第二基地址反映所述全局索引缓冲区内的、 所述第二本地索引缓冲区内的 所述条目应该被写入的第二位置 ; 以及 通过基于所述全局索引缓冲区内的、 分配到所述第二处理单元的若干条目更新所述全 局索引缓冲区内的所述第二基地址来生成所述全局索引缓冲区内的第三基地址。 5. 如权利要求 2 所述的图形子系统, 其中所述流同步单元进一步配置为 : 从所述第一处理单元接收指示第一本地顶点缓冲区内的、 由所述第一处理单元所生成 的若干条目的数据 ; 以及 将全局顶点缓冲区内的第一基地址传送到所述第一处理单元, 所。
7、述全局顶点缓冲区内 的所述第一基地址反映所述全局顶点缓冲区内的、 所述第一本地顶点缓冲区内的所述条目 应该被写入的第一位置, 其中所述全局顶点缓冲区内的所述第一基地址基于所述全局顶点 缓冲区内的、 已经分配到包括在所述多个处理单元中的所述至少一个其他处理单元的若干 条目。 6. 如权利要求 5 所述的图形子系统, 其中所述流同步单元进一步配置为基于所述全局 顶点缓冲区内的、 已经分配到所述第一处理单元的若干条目更新所述全局顶点缓冲区内的 所述第一基地址, 以生成所述全局顶点缓冲区内的第二基地址。 权 利 要 求 书 CN 103886547 A 2 2/2 页 3 7. 如权利要求 6 所述的。
8、图形子系统, 其中所述流同步单元进一步配置为 : 从第二处理单元接收指示第二本地顶点缓冲区内的、 由所述第二处理单元所生成的若 干条目的数据, 其中所述第二处理单元包括在所述多个处理单元中 ; 将所述全局顶点缓冲区内的所述第二基地址传送到所述第二处理单元, 所述全局顶点 缓冲区内的所述第二基地址反映所述全局顶点缓冲区内的、 所述第二本地顶点缓冲区内的 所述条目应该被写入的第二位置 ; 以及 通过基于所述全局顶点缓冲区内的、 分配到所述第二处理单元的若干条目更新所述全 局顶点缓冲区内的所述第二基地址来生成所述全局顶点缓冲区内的第三基地址。 8. 如权利要求 4 所述的图形子系统, 其中所述流同步。
9、单元处理从所述第一处理单元和 所述第二处理单元所接收的数据的顺序基于应用编程接口 (API) 顺序。 9. 一种配置为填充多个全局缓冲区的计算设备, 包括 : 图形处理子系统, 所述图形处理子系统包括流同步单元, 所述流同步单元配置为 : 从第一处理单元接收指示第一本地索引缓冲区内的、 由所述第一处理单元所生成的若 干条目的数据, 其中所述第一处理单元包括在多个处理单元中 ; 以及 将全局索引缓冲区内的第一基地址传送到所述第一处理单元, 所述全局索引缓冲区内 的所述第一基地址反映所述全局索引缓冲区内的、 所述第一本地索引缓冲区的所述条目应 该被写入的第一位置, 其中所述第一全局索引缓冲区内的所。
10、述第一基地址基于所述全局索 引缓冲区内的、 已经分配到包括在所述多个处理单元中的至少一个其他处理单元的若干条 目。 10. 如权利要求 9 所述的计算设备, 其中所述流同步单元进一步配置为 : 从所述第一处理单元接收指示第一本地顶点缓冲区内的、 由所述第一处理单元所生成 的若干条目的数据 ; 将全局顶点缓冲区内的第一基地址传送到所述第一处理单元, 所述全局顶点缓冲区内 的所述第一基地址反映所述全局顶点缓冲区内的、 所述第一本地顶点缓冲区内的所述条目 应该被写入的第一位置, 其中所述全局顶点缓冲区内的所述第一基地址基于所述全局顶点 缓冲区内的、 已经分配到包括在所述多个处理单元中的所述至少一个其。
11、他处理单元的若干 条目 ; 以及 通过基于所述全局顶点缓冲区内的、 已经分配到所述第一处理单元的若干条目更新所 述全局顶点缓冲区内的所述第一基地址来生成所述全局顶点缓冲区内的第二基地址。 权 利 要 求 书 CN 103886547 A 3 1/18 页 4 用于存储共享顶点的技术 技术领域 0001 本发明涉及处理图形数据, 并且更具体地, 涉及用于存储共享顶点的技术。 背景技术 0002 常规的图形处理单元 (GPU) 典型地实现包括图形处理级序列的图形处理管线。在 图形处理管线中的每级处, GPU 可以实施一个或多个不同的面向图形的处理操作。例如, 在 一级处, GPU 可以集合代表图形。
12、场景的图元集, 并且在随后的级处 GPU 可以利用与该图元集 相关联的顶点实施着色操作。最后, GPU 可以将这些顶点光栅化到代表图形场景的像素中。 0003 实现诸如以上示例中所描述的常规图形处理管线的 GPU 典型地包括几何着色单 元, 该几何着色单元配置为利用顶点和基于几何的信息实施着色操作并且之后将具有相对 较大复杂度的一个或多个图形图元或一个或多个几何对象输出到随后的单元用于光栅化。 对于每个所生成的图形图元或几何对象, 几何着色单元输出和与该图形图元或几何对象相 关联的每个顶点相对应的顶点数据。 例如, 当处理三角形时, 几何着色单元将输出用于该三 角形的三个顶点中的每一个的顶点数。
13、据。 用于给定顶点的顶点数据可以描述顶点在场景内 的位置, 与顶点相关联的覆盖数据或与顶点相关联的属性集等等。当生成图形图元或几何 对象时, 几何着色单元典型地将每个所生成的图形图元或构成所生成的几何对象的全部或 一部分的每个图形图元存储为与该图元相关联的顶点集和与该集中的每个顶点相对应的 顶点数据。 0004 另外, 在一些情况下, 几何着色单元可以生成包括互相连接的图形图元的集合的 几何对象, 该互相连接的图形图元共享顶点。 几何对象可以是例如扇型、 条型或网型的几何 对象。 例如, 给定的图形场景可以包括以扇、 条或网相互连接的许多单独的图形图元以创建 具有任意形状的表面的外观。 表面内。
14、的每个图形图元可以由一个或多个顶点连接到邻近的 图形图元, 该一个或多个顶点在两个图形图元之间共享。 在其他情况下, 可以由几何着色单 元生成共享一个或多个公共顶点的多个几何对象, 诸如三角形或条状。 0005 在这些不同的情况下, 几何着色单元典型地存储与在图形图元或几何对象之间共 享的每个顶点相关联的顶点数据的冗余拷贝。然而, 该方法因为典型的图形场景可能包括 数百万共享顶点而成问题。 因此, 常规的几何着色单元可能存储数百万冗余数据的拷贝。 处 理该冗余数据低效地消耗 GPU 资源并且可降低图形场景可被渲染的速度。 0006 因此, 本领域需要用于处理在图形场景内的图形图元或几何对象之间。
15、所共享的顶 点的改进技术。 发明内容 0007 本发明的一个实施例阐述用于填充多个全局缓冲区的计算机实现的方法, 包括从 第一处理单元接收指示第一本地索引缓冲区内的、 由第一处理单元所生成的若干条目的数 据, 其中第一处理单元包括在多个处理单元中, 以及将全局索引缓冲区内的第一基地址传 送到第一处理单元, 该全局索引缓冲区内的第一基地址反映全局索引缓冲区内的、 第一本 说 明 书 CN 103886547 A 4 2/18 页 5 地索引缓冲区内的条目应该被写入的第一位置, 其中第一全局索引缓冲区内的第一基地址 基于全局索引缓冲区内的、 已经分配到包括在多个处理单元中的至少一个其他处理单元的 。
16、若干条目。 0008 所公开的方法的一个优势是, 因为顶点数据被索引, 所以顶点数据的冗余拷贝不 存储在本地于不同几何着色单元的顶点缓冲区或全局顶点缓冲区中, 由此节约了处理单元 资源并且增加整体处理效率。 附图说明 0009 因此, 可以详细地理解本发明的上述特征, 并且可以参考实施例得到对如上面所 简要概括的本发明更具体的描述, 其中一些实施例在附图中示出。然而, 应当注意的是, 附 图仅示出了本发明的典型实施例, 因此不应被认为是对其范围的限制, 本发明可以具有其 他等效的实施例。 0010 图 1 是示出了配置为实现本发明的一个或多个方面的计算机系统的框图 ; 0011 图 2 是根据。
17、本发明的一个实施例的、 用于图 1 的计算机系统的并行处理子系统的 框图 ; 0012 图 3 是根据本发明的一个实施例的、 图 2 的通用处理集群内的流多处理器的一部 分的框图 ; 0013 图 4 是根据本发明的一个实施例的、 图 2 的并行处理单元中的一个或多个可以配 置为实现其的图形处理管线的示意图 ; 0014 图 5 是根据本发明的一个实施例的、 几何处理单元的集合的示意图 ; 0015 图 6 是根据本发明的一个实施例的、 用于将顶点数据和索引数据存储在多个本地 缓冲区内的方法步骤的流程图 ; 0016 图 7 是根据本发明的一个实施例的、 用于将顶点和索引流传输 (stream。
18、) 到多个全 局缓冲区的方法步骤的流程图 ; 0017 图 8 是根据本发明的一个实施例的、 用于填充多个全局缓冲区的方法步骤的流程 图 ; 0018 图 9 是根据本发明的一个实施例的、 示出了配置为本地地缓存索引和顶点的示例 性几何处理单元的示意图 ; 以及 0019 图 10 是根据本发明的一个实施例的、 示出了配置为存储索引或顶点的示例性全 局缓冲区的示意图。 具体实施方式 0020 在下面的描述中, 将阐述大量的具体细节以提供对本发明更透彻的理解。然而, 本领域的技术人员应该清楚, 本发明可以在没有一个或多个这些具体细节的情况下得以实 施。在其他实例中, 未描述公知特征以避免对本发明。
19、造成混淆。 0021 系统概述 0022 图 1 为示出了配置为实现本发明的一个或多个方面的计算机系统 100 的框图。计 算机系统 100 包括经由可以包括存储器桥 105 的互连路径通信的中央处理单元 (CPU) 102 和系统存储器 104。存储器桥 105 可以是例如北桥芯片, 经由总线或其他通信路径 106(例 说 明 书 CN 103886547 A 5 3/18 页 6 如超传输 (HyperTransport) 链路) 连接到 I/O(输入 / 输出) 桥 107。I/O 桥 107, 其可以是 例如南桥芯片, 从一个或多个用户输入设备 108(例如键盘、 鼠标) 接收用户输入。
20、并且经由 通信路径 106 和存储器桥 105 将该输入转发到 CPU102。并行处理子系统 112 经由总线或第 二通信路径 113(例如外围部件互连 (PCI) Express、 加速图形端口或超传输链路) 耦连到存 储器桥 105。在一个实施例中, 并行处理子系统 112 是将像素传递到显示设备 110 的图形 子系统, 该显示设备 110 可以是任何常规的阴极射线管、 液晶显示器、 发光二极管显示器等 等。系统盘 114 也连接到 I/O 桥 107 并且可以配置为存储内容和应用和数据用于由 CPU102 和并行处理子系统 112 使用。系统盘 114 提供非易失性存储用于应用和数据并。
21、且可以包括 固定的或可移动的硬盘驱动器、 闪存设备和 CD-ROM(光盘只读存储器) 、 DVD-ROM(数字多功 能光盘 ROM) 、 蓝光、 HD-DVD(高清 DVD) 或其他磁性、 光学或固态存储设备。 0023 交换器 116 提供 I/O 桥 107 与诸如网络适配器 118 以及各种插卡 120 和 121 的其 他部件之间的连接。其他部件 (未明确示出) , 包括通用串行总线 (USB) 或其他端口连接、 压 缩光盘 (CD) 驱动器、 数字多功能光盘 (DVD) 驱动器、 胶片录制设备及类似部件, 也可以连接 到 I/O 桥 107。图 1 所示的各种通信路径包括具体命名的通。
22、信路径 106 和 113 可以使用任 何适合的协议实现, 诸如 PCI-Express、 AGP (加速图形端口) 、 超传输或者任何其他总线或点 到点通信协议, 并且如本领域已知的, 不同设备间的连接可使用不同协议。 0024 在一个实施例中, 并行处理子系统 112 包含经优化用于图形和视频处理的电路, 包括例如视频输出电路, 并且构成图形处理单元 (GPU) 。在另一个实施例中, 并行处理子系 统 112 包含经优化用于通用处理的电路, 同时保留底层 (underlying) 的计算架构, 本文将 更详细地进行描述。在又一个实施例中, 可以将并行处理子系统 112 与一个或多个其他系 。
23、统元件集成在单个子系统中, 诸如结合存储器桥 105、 CPU102 以及 I/O 桥 107, 以形成片上 系统 (SoC) 。 0025 应该理解, 本文所示系统是示例性的, 并且变化和修改都是可能的。连接拓扑, 包 括桥的数目和布置、 CPU102 的数目以及并行处理子系统 112 的数目, 可根据需要修改。例 如, 在一些实施例中, 系统存储器104直接连接到CPU102而不是通过桥, 并且其他设备经由 存储器桥 105 和 CPU102 与系统存储器 104 通信。在其他替代性拓扑中, 并行处理子系统 112 连接到 I/O 桥 107 或直接连接到 CPU102, 而不是连接到存储。
24、器桥 105。而在其他实施例 中, I/O 桥 107 和存储器桥 105 可能被集成到单个芯片上而不是作为一个或多个分立设备 存在。大型实施例可以包括两个或更多个 CPU102 以及两个或更多个并行处理子系统 112。 本文所示的特定部件是可选的 ; 例如, 任何数目的插卡或外围设备都可能得到支持。 在一些 实施例中, 交换器 116 被去掉, 网络适配器 118 和插卡 120、 121 直接连接到 I/O 桥 107。 0026 图 2 示出了根据本发明的一个实施例的并行处理子系统 112。如所示的, 并行处 理子系统 112 包括一个或多个并行处理单元 (PPU) 202, 每个并行处。
25、理单元 202 都耦连到本 地并行处理 (PP) 存储器 204。通常, 并行处理子系统包括 U 个 PPU, 其中 U 1。 (本文中, 类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。 ) PPU202 和并行处理存储器 204 可使用一个或多个集成电路设备来实现, 诸如可编程处理 器、 专用集成电路 (ASIC) 或存储器设备, 或者以任何其他技术可行的方式来实现。 0027 再参考图 1 以及图 2, 在一些实施例中, 并行处理子系统 112 中的一些或所有 PPU202 是具有渲染管线的图形处理器, 其可以配置为实施与下述相关的各种操作 : 经由存 说 明。
26、 书 CN 103886547 A 6 4/18 页 7 储器桥 105 和第二通信路径 113 从 CPU102 和 / 或系统存储器 104 所供应的图形数据生 成像素数据, 与本地并行处理存储器 204(可被用作图形存储器, 包括例如常规帧缓冲区 (buffer) ) 交互以存储和更新像素数据, 传递像素数据到显示设备 110 等等。在一些实施例 中, 并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多 个用于通用计算的其他 PPU202。这些 PPU202 可以是同样的或不同的, 并且每个 PPU202 可 具有一个或多个专用并行处理存储器设备或不具有专。
27、用并行处理存储器设备。 并行处理子 系统 112 中的一个或多个 PPU202 可输出数据到显示设备 110, 或者并行处理子系统 112 中 的每个 PPU202 可输出数据到一个或多个显示设备 110。 0028 在操作中, CPU102 是计算机系统 100 的主处理器, 控制和协调其他系统部件的操 作。具体地, CPU102 发出控制 PPU202 的操作的命令。在一些实施例中, CPU102 写入用于 每个 PPU202 的命令流到数据结构中 (在图 1 或图 2 中未明确示出) , 该数据结构可位于系统 存储器 104、 并行处理存储器 204、 或 CPU102 和 PPU202。
28、 都可访问的其他存储位置中。将指 向每个数据结构的指针写到入栈缓冲区 (pushbuffer) 以发起对数据结构中的命令流的处 理。 PPU202从一个或多个入栈缓冲区读取命令流, 然后相对于CPU102的操作异步地执行命 令。可以经由设备驱动程序 103 由应用程序为每个入栈缓冲区指定执行优先级以控制对不 同入栈缓冲区的调度。 0029 现在返回参考图 2 和图 1, 每个 PPU202 包括经由连接到存储器桥 105(或者, 在一 个替代性实施例中, 直接连接到CPU102) 的通信路径113与计算机系统100的其余部分通信 的 I/O(输入 / 输出) 单元 205。PPU202 到计算。
29、机系统 100 的其余部分的连接也可以变化。 在一些实施例中, 并行处理子系统 112 可实现为可插入到计算机系统 100 的扩展槽中的插 卡。在其他实施例中, PPU202 可以和诸如存储器桥 105 或 I/O 桥 107 的总线桥集成在单个 芯片上。而在其他实施例中, PPU202 的一些或所有元件可以和 CPU102 集成在单个芯片上。 0030 在一个实施例中, 通信路径 113 是 PCI Express 链路, 如本领域所知的, 其中专用 通道被分配到每个 PPU202。也可以使用其他通信路径。I/O 单元 205 生成用于在通信路 径 113 上传送的包 (或其他信号) , 并。
30、且还从通信路径 113 接收所有传入的包 (或其他信号) , 将传入的包引导到 PPU202 的适当部件。例如, 可将与处理任务相关的命令引导到主机接口 206, 而将与存储器操作相关的命令 (例如, 对并行处理存储器 204 的读取或写入) 引导到存 储器交叉开关单元210。 主机接口206读取每个入栈缓冲区, 并且将存储在入栈缓冲区中的 命令流输出到前端 212。 0031 有利地, 每个 PPU202 都实现高度并行处理架构。如详细示出的, PPU202(0) 包括 处理集群阵列 230, 该阵列 230 包括 C 个通用处理集群 (GPC) 208, 其中 C 1。每个 GPC208 。
31、能够并发执行大量的 (例如, 几百或几千) 线程, 其中每个线程是程序的实例 (instance) 。 在 各种应用中, 可分配不同的 GPC208 用于处理不同类型的程序或用于实施不同类型的计算。 GPC208 的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。 0032 GPC208 从任务 / 工作单元 207 内的工作分布单元接收所要执行的处理任务。工 作分布单元接收指向编码为任务元数据 (TMD) 并存储在存储器中的处理任务的指针。指向 TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。 可 以编码为 TMD 的处理任务包括所要处理的数据的。
32、索引, 以及定义数据将被如何处理 (例如, 什么程序将被执行) 的状态参数和命令。任务 / 工作单元 207 从前端 212 接收任务并确保 说 明 书 CN 103886547 A 7 5/18 页 8 在每一个 TMD 所指定的处理发起前, 将 GPC208 配置为有效状态。可以为每个 TMD 指定用来 调度处理任务的执行的优先级。还可从处理集群阵列 230 接收处理任务。可选地, TMD 可 包括控制将TMD添加到处理任务列表 (或指向处理任务的指针的列表) 的头部还是尾部的参 数, 从而提供除优先级以外的另一级别的控制。 0033 存储器接口214包括D个分区单元215, 每个分区单元。
33、215直接耦连到并行处理存 储器 204 的一部分, 其中 D 1。如所示的, 分区单元 215 的数目一般等于动态随机存取存 储器 (DRAM) 220 的数目。在其他实施例中, 分区单元 215 的数目也可以不等于存储器设备 的数目。本领域的普通技术人员应该理解 DRAM220 可以用其他合适的存储设备来替代并且 可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可 以跨 DRAM220 加以存储, 这允许分区单元 215 并行写入每个渲染目标的各部分以有效地使 用并行处理存储器 204 的可用带宽。 0034 任何一个 GPC208 都可以处理要被写到并行处理存。
34、储器 204 内的任何 DRAM220 的 数据。交叉开关单元 210 配置为路由每个 GPC208 的输出到任何分区单元 215 的输入或到 另一个 GPC208 用于进一步处理。GPC208 通过交叉开关单元 210 与存储器接口 214 通信, 以 对各种外部存储器设备进行读取或写入。在一个实施例中, 交叉开关单元 210 具有到存储 器接口 214 的连接以和 I/O 单元 205 通信, 以及到本地并行处理存储器 204 的连接, 从而使 得在不同 GPC208 内的处理内核能够与系统存储器 104 或对于 PPU202 而言非本地的其他存 储器通信。在图 2 所示的实施例中, 交叉。
35、开关单元 210 直接与 I/O 单元 205 连接。交叉开 关单元 210 可使用虚拟信道来分开 GPC208 与分区单元 215 之间的业务流。 0035 另外, GPC208 可被编程以执行与种类繁多的应用相关的处理任务, 包括但不限于, 线性和非线性数据变换、 视频和 / 或音频数据过滤、 建模操作 (例如, 应用物理定律以确定 对象的位置、 速率和其他属性) 、 图像渲染操作 (例如, 曲面细分 (tessellation) 着色器、 顶 点着色器、 几何着色器、 和 / 或像素着色器程序) 等等。PPU202 可将数据从系统存储器 104 和 / 或本地并行处理存储器 204 转移。
36、到内部 (片上) 存储器中, 处理该数据, 并且将结果数据 写回到系统存储器104和/或本地并行处理存储器204, 其中这样的数据可以由其他系统部 件访问, 所述其他系统部件包括 CPU102 或另一个并行处理子系统 112。 0036 PPU202 可配备有任何容量 (amount) 的本地并行处理存储器 204, 包括没有本地存 储器, 并且可以以任何组合方式使用本地存储器和系统存储器。例如, 在统一存储器架构 (UMA) 实施例中, PPU202 可以是图形处理器。在这样的实施例中, 将不提供或几乎不提供专 用的图形 (并行处理) 存储器, 并且 PPU202 会以排他或几乎排他的方式使。
37、用系统存储器。在 UMA 实施例中, PPU202 可集成到桥式芯片中或处理器芯片中, 或作为具有高速链路 (例如, PCI Express) 的分立芯片提供, 所述高速链路经由桥式芯片或其他通信手段将PPU202连接 到系统存储器。 0037 如上所示, 在并行处理子系统112中可以包括任何数目的PPU202。 例如, 可在单个 插卡上提供多个 PPU202、 或可将多个插卡连接到通信路径 113、 或可将一个或多个 PPU202 集成到桥式芯片中。在多 PPU 系统中的 PPU202 可以彼此同样或不同。例如, 不同的 PPU202 可能具有不同数目的处理内核、 不同容量的本地并行处理存储。
38、器等等。在存在多个 PPU202 的情况下, 可并行操作那些 PPU 从而以高于单个 PPU202 所可能达到的吞吐量来处理数据。 包含一个或多个 PPU202 的系统可以以各种配置和形式因素来实现, 包括台式电脑、 笔记本 说 明 书 CN 103886547 A 8 6/18 页 9 电脑或手持式个人计算机、 服务器、 工作站、 游戏控制台、 嵌入式系统等等。 0038 可以在 GPC208 上并发执行多个处理任务并且处理任务在执行期间可以生成一个 或多个 “子” 处理任务。任务 / 工作单元 207 接收任务并动态调度处理任务和子处理任务 用于由 GPC208 执行。 0039 图 3 。
39、是根据本发明的一个实施例的、 图 2 的 GPC208 内的流多处理器 (SM) 310 的框 图。每个 GPC208 可配置为并行执行大量线程, 其中术语 “线程” 是指在特定输入数据集上 执行的特定程序的实例。在一些实施例中, 单指令、 多数据 (SIMD) 指令发出技术用于在不 提供多个独立指令单元的情况下支持大量线程的并行执行。 在其他实施例中, 单指令、 多线 程 (SIMT) 技术用于使用配置为向 GPC208 中的每一个内的处理引擎集发出指令的公共指令 单元来支持大量一般来说同步的线程的并行执行。 不同于所有处理引擎通常都执行同样指 令的 SIMD 执行机制, SIMT 执行通过。
40、给定线程程序允许不同线程更容易跟随分散执行路径。 本领域普通技术人员应该理解 SIMD 处理机制代表 SIMT 处理机制的功能子集。 0040 经由将处理任务分布到一个或多个流多处理器 (SM) 310的管线管理器 (未示出) 来 有利地控制 GPC208 的操作, 其中每个 SM310 配置为处理一个或多个线程组。每个 SM310 包 括配置为经由 GPC208 内的 L1.5 高速缓存 (未示出) 从存储器接收指令和常数的指令 L1 高 速缓存 370。线程束 (warp) 调度器和指定单元 312 从指令 L1 高速缓存 370 接收指令和常 数并且根据该指令和常数控制本地寄存器文件 3。
41、04 和 SM310 功能单元。SM310 功能单元包 括 N 个 exec(执行或处理) 单元 302 和 P 个加载 - 存储单元 (LSU) 303。如本领域已知的, SM 功能单元可以被管线化, 允许在前一个指令完成之前发出新指令。可提供功能执行单元 的任何组合。在一个实施例中, 功能单元支持各种各样的操作, 包括整数和浮点运算 (例如 加法和乘法) 、 比较操作、 布尔操作 (AND、 OR、 XOR) 、 移位和各种代数函数的计算 (例如平面插 值、 三角函数、 指数函数和对数函数等等) ; 以及相同功能单元硬件可均衡地用来实施不同 的操作。 0041 如本文之前所定义的, 传送到。
42、特定 GPC208 的一系列指令构成线程, 并且跨 SM310 内的并行处理引擎 (未示出) 的某一数目的并发执行线程的集合在本文中称为 “线程束” 或 “线程组” 。如本文所使用的,“线程组” 是指对不同输入数据并发执行相同程序的一组线程, 所述组的一个线程被指派到 SM310 内的不同处理引擎。线程组可以包括比 SM310 内的处理 引擎数目少的线程, 在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于 闲置状态。线程组还可以包括比 SM310 内的处理引擎数目多的线程, 在这种情况下处理将 在连续的时钟周期内发生。 因为每个SM310可以并发支持多达G个线程组, 结果是在包括M。
43、 个流多处理器 310 的 GPC208 中的系统, 在任何给定时间在 GPC208 中可以执行多达 G*M 个 线程组。 0042 此外, 多个相关线程组可以在 SM310 内同时活动 (在执行的不同阶段) 。该线程组 集合在本文中称为 “协作线程阵列” ( “CTA” ) 或 “线程阵列” 。特定 CTA 的大小等于 m*k, 其 中 k 是线程组中并发执行线程的数目并且通常是 SM310 内的并行处理引擎数目的整数倍, 以及 m 是 SM310 内同时活动的线程组的数目。CTA 的大小一般由编程者以及可用于 CTA 的 硬件资源诸如存储器或寄存器的容量来确定。 0043 在本发明的实施例。
44、中, 使用计算系统的 PPU202 或其他处理器来使用线程阵列执 行通用计算是可取的。 为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的 说 明 书 CN 103886547 A 9 7/18 页 10 唯一的线程标识符 ( “线程 ID” ) 。可被定义为一维或多维数值的线程 ID 控制线程处理行为 的各方面。例如, 线程 ID 可用于确定线程将要处理输入数据集的哪部分和 / 或确定线程将 要产生或写输出数据集的哪部分。 0044 每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间 的协作行为的至少一个指令。例如, 每线程指令序列可能包括在序列中的特定点处挂起用 。
45、于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指 令、 用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指 令、 用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程 ID 有权访问的共享存储器中的数据的指令等等。CTA 程序还可以包括计算数据将从其读取的 共享存储器中的地址的指令, 该地址是线程 ID 的函数。通过定义合适的函数并提供同步技 术, 可以以可预测的方式由 CTA 的一个线程将数据写入共享存储器中的给定位置并由同一 个 CTA 的不同线程从该位置读取数据。因此, 数据在线程之间共享的任何期望模式可以得 到支持, 。
46、以及 CTA 中的任何线程可以与同一个 CTA 中的任何其他线程共享数据。如果存在 数据在 CTA 的线程之间的共享, 则其范围由 CTA 程序确定 ; 因此, 应该理解的是, 在使用 CTA 的特定应用中, CTA 的线程可能会或可能不会真正互相共享数据, 这取决于 CTA 程序, 术语 “CTA” 和 “线程阵列” 在本文作为同义词使用。 0045 SM310 提供具有不同级别的可访问性的片上 (内部) 数据存储。特殊寄存器 (未示 出) 对于 LSU303 可读但不可写并且用于存储定义每个线程的 “位置” 的参数。在一个实施 例中, 特殊寄存器包括每线程 (或 SM310 内的每 exe。
47、c 单元 302) 一个的存储线程 ID 的寄存 器 ; 每个线程 ID 寄存器仅由各自的 exec 单元 302 可访问。特殊寄存器还可以包括附加寄 存器, 其对于执行由 TMD322 所代表的同一个处理任务的所有线程 (或由所有 LSU303) 可读, 其存储 CTA 标识符、 CTA 维数、 CTA 所属网格 (grid) 的维数 (或队列位置 , 如果 TMD322 编码 队列任务而不是网格任务的话) 、 以及 CTA 被指派到的 TMD322 的标识符。 0046 如果TMD322是网格TMD, 则TMD322的执行会启动和执行固定数目的CTA以处理存 储在队列525中的固定量的数据。
48、。 将CTA的数目指定为网格宽度、 高度和深度的乘积。 可以 将固定量的数据存储在 TMD322 中或 TMD322 可以存储指向将由 CTA 所处理的数据的指针。 TMD322 还存储由 CTA 所执行的程序的开始地址。 0047 如果 TMD322 是队列 TMD, 那么使用 TMD322 的队列特点, 这意味着将要被处理的数 据量不一定是固定的。队列条目存储用于由指派到 TMD322 的 CTA 所处理的数据。队列条 目还可以代表在线程执行期间由另一个 TMD322 所生成的子任务, 从而提供嵌套并行性。通 常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。 可以将队列存储在TM。
49、D322 中或与 TMD322 分开存储, 在该情况下 TMD322 存储指向该队列的队列指针。有利地, 当代表 子任务的 TMD322 正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循 环队列以使得数据的总量不限于队列的大小。 0048 属于网格的 CTA 具有指示网格内各自 CTA 的位置的隐含网格宽度、 高度和深度参 数。在初始化期间响应于经由前端 212 从设备驱动程序 103 所接收的命令来写特殊寄存器 并且在处理任务的执行期间特殊寄存器不改变。前端 212 调度每个处理任务用于执行。每 个 CTA 与具体 TMD322 相关联用于一个或多个任务的并发执行。此外, 单个 GPC208 可以并 发执行多个任务。 说 明 书 CN 103886547 A 10 8/18 页 11 0049 参数存储器 (未示出) 存储可由同一个 CTA 内的任何线程 (或任何 LSU303) 读取但 不可由其写入的运行时间参数 (常数) 。在一个实施例中, 设备驱动程序 103 在引导 SM310 开始执行使用参数的任务之前将这些参数提供给参数存储器。任何 CT。