CN111986279A - 有效访问存储器和避免不必要的计算的技术 - Google Patents

有效访问存储器和避免不必要的计算的技术 Download PDF

Info

Publication number
CN111986279A
CN111986279A CN201911201912.4A CN201911201912A CN111986279A CN 111986279 A CN111986279 A CN 111986279A CN 201911201912 A CN201911201912 A CN 201911201912A CN 111986279 A CN111986279 A CN 111986279A
Authority
CN
China
Prior art keywords
value
memory
locality
tile
texture
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201911201912.4A
Other languages
English (en)
Inventor
R·兰根
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN111986279A publication Critical patent/CN111986279A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Multimedia (AREA)
  • Software Systems (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Image Generation (AREA)

Abstract

一种技术,选择性地避免在实时图形着色器程序中对部分均匀纹理的存储器提取,而是使用专用于一个或更多个频繁出现的值的程序路径。一方面通过使用称为值局部性映射或脏图块映射(DTM)的预构造的粗粒度表示来避免对部分均匀纹理的存储器查找和依赖计算。是否使用专门的快速路径的决定是通过咨询这种粗粒度的脏图块映射表示来动态地做出的。线程共享值重用可以用DTM机制实现或代替DTM机制实现。

Description

有效访问存储器和避免不必要的计算的技术
相关申请的交叉引用
无。
关于联邦政府赞助研究或开发的声明
无。
技术领域
本技术涉及用于有效地处理表面(诸如纹理)以利用值局部性的技术。 更具体地,本文的技术涉及压缩表面的运行时检查,以及减少对存储器负 载和/或计算的需要的专用执行路径。
背景技术
对照片般逼真的实时渲染和增加显示分辨率的无止境追求意味着图形 密集型应用程序继续对现代图形处理单元(GPU)寄予高内存带宽和计算 需求。GPU制造商历来通过利用技术扩展和构建具有更高处理能力的GPU 并供应更多内存带宽来应对这些挑战。然而,随着技术扩展接近尾声,采 用第一原理方法来提高GPU效率以发现满足现代图形应用需求的替代方法 变得非常重要。
纹理映射是一种普遍存在的技术,用于有效地在计算机生成的图像中 实现各种效果,例如对粗糙表面(例如,砖或石墙)、织物图案、桌面的 纹理、树的叶子或任何不需要3D细节的复杂图像特征的真实建模。纹理映 射通常涉及定义纹理映射,最常见的是纹理元素(或“纹素”)的阵列。简 单来说,纹理是这种浮点或整数纹素值的一维、二维或三维阵列。纹素值 通常表示颜色或其他可视化参数。因此,在大多数纹理中,每个纹素具有 唯一的坐标(例如,在一维、二维或三维中,诸如坐标u,v,w),颜色, 并且在一些情况下,其他属性(诸如表面法线)。
纹理可以是静态的,或者它们可以动态生成。静态纹理通常存储在大 容量存储中,并由应用程序开发人员作为应用程序的一部分提供。动态纹 理是帧内生成的,可以采用多种形式,例如阴影映射、光照映射、反射映 射等。着色器可以将动态纹理与其他场景效果(例如,其他纹理、几何渲 染等)结合以产生用于存储和/或显示的图像。作为一个示例,可以使用实 时光线跟踪来生成阴影和/或反射的映射,然后着色器可以将其与从几何图形生成的场景图像混合以产生实时显示。
在现代图形应用中使用的纹理中存在显著的值局部性。在纹理的情况 下,值局部性意味着纹素的值与同一纹理映射中的其他纹素的值非常相似 或甚至相同。值局部性可以在纹理表面上在空间上局部地或全局地表现出 来。例如,一些动态表面被清除为背景颜色(例如,黑夜用于夜景,或天 蓝色用于白天场景)然后有条件地渲染,使得当它们作为纹理读入时,它 们的大部分返回相同的背景颜色。
示例纹理中的值局部性-案例研究
图1A-1F示出了来自各种实际应用的具有高值局部性(在本文中也称 为部分均匀纹理)的示例纹理。这样的纹理可以是静态的或动态的,并且 可以在运行时预先确定或生成。例如,图1A-1C是光照映射,图1D和图 1E是在运行时生成的反射映射,并且图1F可以是由应用程序开发者预先 确定并随应用程序一起提供的静态纹理。
“高值局部性”是指几个纹素具有完全相同的颜色值,使得纹理映射或 这些纹素的其他操作将导致共同(相同)纹理映射值。这种值局部性通常 表现为一个或更多个空间连续的纹素区域。可以看出,动态渲染的纹理具 有非平凡量的值局部性。在一个示例性采样的平均值上,38%的纹理具有> 其30%的值完全相同。
作为非限制性示例,图2示出了静态(未在帧内生成)和动态(在帧 内生成)纹理的总计数的标准化分解以及各种不同的应用的每个类别中的 部分均匀纹理的比例。图2是通过对12种不同应用的帧中所有纹理中的值 进行直方图来获得的。对于该特定的非限制性测试,帧中所有纹理的平均 38%倾向于显示部分均匀性,在一个示例中,非限制性上下文可以在某种 程度上任意地定义为具有完全相同颜色值的纹理中的30%或更多纹素。在 此上下文中,“纹素”表示多维纹理阵列的一个单元。纹理通常存储浮点颜 色值。相邻纹素虽然在视觉上看起来相同,但它们的实际浮点值可能存在 细微差别。因此,38%的纹理显示出部分均匀性的事实是显著的。另外, 在特定的图2采样中,动态纹理表现出比静态纹理高得多的部分均匀性。
现代GPU的存储器系统已被设计为有效地操作用于图形应用,其中存 储器访问模式表现出大量的值局部性。例如,一些当前的GPU标识并利用 纹理表面中的这个值局部性来有效地压缩纹理并节省内存带宽(但是这些 GPU不一定对这样的值局部性做很多其他事情)。纹理和其他图像表面(尤 其是高分辨率图像)的尺寸可能很大。从主存储器加载它们可能需要许多 处理器周期。为了减少存储大小和加载时间,通常会尽可能压缩纹理。特 别是,现代GPU通过压缩它们来识别和利用部分均匀纹理中的值局部性以 节省内存带宽。参见例如Brennan,C.,“变量增量颜色压缩综述(Delta Color Compression Overview)”(2016年3月14日);Smith,R.,“NVIDIA Geforce GXT 980回顾:Maxwell Mark 2”(2014年9月18日);以及美国专利No. US8330766B1。
常用的纹理压缩/解压CODEC包括DXT、ETC和ASTC。纹理压缩技 术通常提供不同的模式,其利用纹理数据中的冗余来增加压缩比。例如, 一些模式(有时称为“缩减压缩”模式)基于冗余减少整体纹理数据大小。 例如,如果纹理包括许多相同的颜色值(例如,许多相邻纹理像素具有相 同的蓝色或黑色天空明暗度(shade)),则纹理压缩CODEC可以将指令一次存储颜色值以在纹理被解压时重复该值。其他模式(有时称为“差分压 缩”)确定纹理值相对于一个或更多个基线颜色的差异,并对差异进行编码。 这有点像写下篮球队中心的高度,然后测量其他人相对于中心的高度(“Jane 比Alyssa矮2英寸,而Katie比Alyssa高一英寸”)。可以通过例如向一个 或更多个基线颜色添加或从基线颜色中减去差异来恢复每个纹素。参见, 例如,USP 8,594,441。
纹理压缩技术通常生成并存储与压缩纹理相关联的元数据,有时称为 “压缩状态”信息。压缩状态信息通常描述压缩模式以及压缩结果的一些特 征。CODEC使用这种压缩状态信息作为解压纹理的指南。在某些情况下, 压缩状态信息存储在与压缩纹理分开的存储器表中,因此可以更方便地访 问它(例如,从片上高速缓冲存储器而不是主存储器)。一些专有纹理压 缩格式完全在GPU内部运行,并且只能通过内核授权访问。
用于更有效地存储和处理纹理的另一种已知技术是纹理图块。参见例 如Wei,图形硬件(图形硬件2004)上的基于图块的纹理映射。在某些情 况下,可以通过重复较少数量的纹理图块来生成较大的虚拟纹理。在其他 情况下,整个纹理或其他表面被明确地存储,但是仍被分成子区域或“图块”(有点像厨房地板上的图块)以辅助存储和内存管理。例如,自Maxwell 以来,NVIDIA GPU已经支持图块高速缓存,通过以足够小的块处理几何 和纹理来利用局部性和L2高速缓存,因此输入和输出都可以驻留在片上高 速缓存中。这种图块化也可用于辅助并行处理。一般参见例如McCormack 等,“氖:单芯片3D工作站图形加速器(Neon:A single-chip 3D Workstation Graphics Accelerator)”,p123,ACM/SIGGRAPH/EUROGRAPHICS图形硬 件研讨会论文集(计算机协会1998年8月);Akenine-Moeller等,实时渲 染(Real-Time Rendering),尤其是第6章和第23章(第4版,CRC出版 社2018年)。
利用纹理和其他表面值局部性来减少或消除动态计算冗余(例如,通 过计算值重用)将是有用的。
附图说明
结合附图阅读以下对示例性非限制性说明性实施例的详细描述:
图1A-1F是示例部分均匀纹理的图像。
图2示出了对于多个不同的示例应用静态和动态纹理中的部分均匀性 的示例性非限制性表征(纹理中部分均匀性的描述)(在该非限制性示例 中“部分均匀性”意味着纹理中的>=30%的纹素具有相同的颜色)。
图3示出了示例非限制性系统处理。
图3A示出了示例非限制性系统。
图3B示出了示例非限制性过程。
图4A-4D示出了脏图块映射示例。
图5示出了示例脏图块映射构建预通过。
图6A、6B示出了具有许多均匀的图块的示例纹理。
图7示出了示例有效的脏图块映射构造。
图7A示出了示例非限制性代码片段。
图8示出了示例查询图块和脏图块映射图块操作。
图9示出了片段之前和之后,示出了UniformTexOpti如何变换API 代码序列以及着色器程序中的单个纹理查找。
图10示出了示例部分评估和重用。
图11示出了依赖于压缩模式的具有领导者和非领导者的示例部分评 估和重用。
图12A示出了跨帧看到的示例非限制性唯一FP颜色值。
图12B示出了简单UniformTexOpti的示例非限制性能上升。
图12C示出了来自UniformTexOpti的纹理查找减少。
图13示出了根据实施例的由PPU实现的示例图形处理管线的概念图。
示例非限制性实施例的详细描述
本文的示例性非限制性技术描述了利用表面/纹理值局部性来避免动 态计算冗余的方式。例如,假设能够避免对图1A-1F中图像的黑色区域进 行纹理查找的内存提取,并直接将值0.0(对于黑色)写入此类查找的目标 寄存器。然后,想象能够为具有实质值局部性的这些纹理专门化依赖代码。
示例非限制性实施例提供了可称为“UniformTexOpti”的软件优化,其 利用表面存储器压缩信息来有效地构建称为值局部性映射或“脏图块映射” (“DTM”)的表面的粗粒度表示,并且然后使用这些DTM(和/或其他预 先信息机制)来避免动态计算冗余并通过非推测性软件优化来优化着色器 程序的运行时性能(例如,避免冗余存储器查找和/或数学运算)。
本文的示例非限制性技术可以应用于处理CPU和/或GPU上的任何压 缩数据(图像、视频、音频、磁盘文件等)。示例优化(对于处理压缩数 据阵列的CPU或GPU系统)包括:
·均匀纹理优化-受益于图像纹理(或更一般地,数据阵列)中少量值的 广泛重复
·部分评估和重用-受益于图像纹理(或更一般地,数据阵列)中的局部 均匀性(重复值或低的值可变性)。
·可以“在运行中”操作
·适用于图块视频、视频分析等图像
·适用于任何压缩。
·适用于深度学习。
深度学习:
深度学习系统中的权重向量通常具有大多数权重为0。通过查询压缩 信息并预先了解权重的哪些部分为0,不仅可以避免存储器查找,而且还可 以对许多相关的数学代码进行专门化和优化。培训和推理都可以受益。
高值局部性纹理(“全局部分均匀性”):
->用均匀压缩模式很好地压缩
->压缩信息可以用于有效的脏图块映射构建
->确定uniformTexOpti的版本控制条件
->版本创建优化的快速路径和默认慢速路径
->对于高的值局部性的数据,更频繁地采用快速路径,其提供性能益 处。
该优化已在实时图形应用中显示出前景,包括但不限于虚拟现实、游 戏、平视显示器以及利用纹理或其他表面的任何其他环境。它的工作原理 是在着色器程序中选择性地避免存储器提取部分均匀纹理,而是使用专用 于一个或更多个频繁出现的值的程序路径。是否使用专用快速路径的决定 是通过咨询部分均匀纹理的粗粒度表示来动态做出的,称为脏图块映射 (“DTM”)。这些技术可以加速部分均匀纹理的处理,提高帧速率,并且 可能也节省能量(这对于移动芯片和实时图形系统尤其重要)。
应用包括实时图形和深度学习。在许多情况下,机器学习是作为强力 技术实现的,其中设计者不知道如何设计优雅的方法来解决难题,并且因 此转而使用机器学习。通常,设计者可能不知道哪些特征是重要的而哪些 特征不重要。当训练完成时,可以确定只有一些特征实际上重要并且有助 于最终结果。如果确定某些特征无关紧要,则可以将对应于这些特征的权 重(例如,在神经网络中)设置为零。在机器学习系统中看到一个非平凡的权重比例最终被设置为零并不罕见。然而,目前,GPU和其他处理器仍 然对从机器学习向量加载的每个单独的值(零或非零)执行矩阵乘法运算。 如果处理器事先知道权重部分是零,则可以减少处理器需要执行的计算次 数。类似地,在深度神经网络(DNN)的训练期间,称为激活的中间层的 输出(其可以被认为是特征组合的权重)也倾向于表现出部分均匀性并且 该知识可以在随后的DNN层中被有益地利用。
示例非限制性整体系统
图3示出了用于避免动态计算冗余的示例非限制性系统200。在该示 例实施例中,表面(诸如纹理)以压缩形式存储在存储器中,例如缩减压 缩204、差分压缩206,并且使用称为“零带宽清除”202的技术。与这种压 缩相关联的元数据(例如,压缩状态)也可以存储在存储器中-通常存储在 处理器芯片存储器(诸如L2高速缓冲存储器)中。访问(208)这样存储 的信息以构造称为“脏图块映射”(DTM)(201)的缩写或简化(例如,粗 粒度)数据结构,并且还在着色器执行(212)中重构表达式。DTM和表 达式重构的组合允许着色器使用/访问这样的表面以避免动态计算冗余(例 如,通过跳过存储器提取、提供专用代码等)(214)。
示例非限制性实时图形系统
作为一个非限制性示例,图3A示出了示例性非限制性实时图形系统 50,其包括使用这种DTM和技术来避免动态计算冗余。
响应于来自输入设备54的实时输入,执行一个或更多个着色器58的 CPU和/或GPU56访问存储在DRAM 62中的图形信息(例如几何和纹理 阵列64)以生成用于在显示器60上显示的图像。
在所示的实施例中,图块纹理或其他表面64存储在DRAM 62中,并 且相应的DTM64'存储在与CPU和/或GPU 56相同的芯片上的L2高速缓 存存储器66中。在简单的情况下,DTM 64'使用纹理或其他表面64的每个 图块中的一个或少量位来表示或指示该纹理/表面的每个纹理图块中的所 有位置是否具有均匀值。虽然可以使用其他区域,但是在该实施例中,粒 度在纹理图块级别上,并且DTM 64'针对每个图块指示图块中的所有纹素 是否具有相同的值。如果图块中的所有位置不具有相同的值,则该图块被 视为“脏”。DTM 64'可以根据需要由软件(SW)灵活定义。它们可以例如 简单地定义为例如32b字的一维阵列,其中每个字保持相应纹理64图块的 脏或不脏状态。
可以再次灵活地定义图块本身的粒度。例如,本文的图块可以指代ROP (光栅操作)图块或更高粒度区域。同样,可以基于使用灵活地定义DTM 中每个图块的位数。在它们最简单的形式中,DTM使用1位表示来简单地 传达相应的图块的值是否处于被清除(即,初始)状态或未被清除(即, 脏)。更一般地,DTM实现可以每图块使用n位,并且使用2n个可能状态 的2n-1个来传达图块具有的2n-1个唯一均匀值中的哪一个以及剩余的一位 模式来传达其他2n-1个值中没有一个适用。
DTM 64'构造可以非常有效,使得避免存储器取出的收益远远超过 DTM构造的成本。在性能方面,用于取回和分析纹理中所有纹素的值的简 单DTM 64'实现可能非常昂贵。更快的替代方案是直接或间接地使用例如 256B图块的存储器压缩状态(简称为压缩状态(compstatus))。压缩状 态可以反映几种压缩模式中的一种。在一些示例非限制性实施例中,特别 感兴趣的是颜色和深度零带宽清除(ZBC)压缩状态(参见例如美国专利No.US8330766B1)和8:1缩减压缩模式。
因此,图3A示出了存储在主存储器DRAM 62中的压缩图块表面/纹 理64。压缩表面/纹理64通常包括指示表面/纹理64中的每个图块的压缩 状态的元数据(压缩状态信息)。在一个示例非限制性实施例中,驱动器 软件(其也可以由CPU和/或GPU 56执行)可以分析该压缩相关元数据以 生成DTM 64'。可以添加硬件支持以辅助有效的DTM 64'构造。因此,上 述功能不依赖于任何特定的硬件特征或实现。
整个过程的示例
在图3B中所示的实施例中,过程分析纹理或其他表面的均匀性和/或 兴趣值(82),并基于观察到的均匀性和/或任何识别的兴趣值,使用专用 执行路径编译着色器代码58(84)。例如,优化编译器52(其可以在开发 计算机52上运行,尽管优化在CPU和/或GPU56上执行的解释器也是可 能的)创建可执行着色器目标代码,其在“脏”(正常或默认)执行路径以 外,还具有“干净”专用执行路径。优化的着色器目标代码可执行文件58根 据DTM64'的内容(尚未创建,但其格式和规范是预先指定的)确定是执 行专用路径还是正常路径。
在运行时,系统使用驱动器预通过程来检查表面并创建DTM 64'(86)。 当DTM 64'指示均匀性和/或兴趣值(88)时,CPU/GPU 58执行编译的着 色器代码并调用一个或更多个专用执行路径。如下面详细描述的,执行专 用执行路径可以节省从DRAM 62加载表面/纹理64和/或对加载的表面/纹 理数据执行计算的需要。
因此,示例性非限制性技术可以通过检测和优化动态纹理中的值局部 性来帮助GPU应用。它可以通过检测和优化稀疏权重和激活矩阵来帮助深 度学习应用程序。例如,它的益处源于避免了TEX流量(减少存储器拥塞 和提高有效L1高速缓存容量)以及启用代码专业化。
示例非限制性技术通过消除源自具有高的值局部性的纹理/表面的动 态计算冗余来提高GPU效率。这提高了性能,因此甚至可以节省能量。
本文的一些示例非限制性实施例提供称为“UniformTexOpti”的软件改 进和/或优化以及启用技术来读取存储器压缩状态以利用现代GPU中已经 可用的存储器压缩信息,从而避免图形密集型应用中的动态计算冗余。在 一个示例实施例中,“UniformTexOpti”通过选择性地避免存储器提取着色器 程序中的部分均匀纹理并且反而使用专用于静态已知值的程序路径来工 作。在一些非限制性实施例中,在程序执行期间通咨询先前存储的这种部 分均匀纹理的粗粒度表示(即,“脏”图块映射(DTM)或其他高级信息, 其指示给定图块(例如,8x8或16x16纹素)是否“脏”(即,具有与为程序 专门化假设的值不同的值))来动态地做出是否使用专用快速路径的决定。
术语“脏”的使用与高速缓冲存储器上下文中的术语的常规用法有些不 同,其中“脏”通常表示“写入”(处理器自从主存储器读取后已修改的高速 缓冲存储器中的数据块,因此需要在释放相关的高速缓存线之前将其写回 主存储器中))。在诸如零带宽清除(ZBC)之类的某些上下文中,术语“脏” 确实意味着在已清除表面/纹理的区域之后写入数据。但在其他情况下,“脏” 仅仅意味着表面/纹理区域是不均匀的。尽管用于纹理映射目的的纹理存储 器访问在某些上下文中是只读的,因为纹理映射通常不会改变纹理,因此 纹理映射操作通常不会通过写入来“弄脏”存储器中的纹理,在其他上下文 中,例如动态纹理处理器在被清除为均匀颜色后将写入纹理。当其纹素(通 过任何机制)被发现为非相似或不相同时,一些示例性非限制性实施例可 以将纹理图块声称为“脏”。示例非限制性实施例可以使用有效技术(诸如 图3B中所示的驱动器预通过)来确定纹理图块何时“脏”。
例如,在示例非限制性实施例中,前述DTM 64'可以通过在绘制调用 为“UniformTexOpti”之前执行的显式驱动程序引入的预通过而在帧内动态 地构造。图3A中所示的用于辅助快速和有效DTM构造的一个示例非限制 性实施例涉及在DTM构造代码中使用vanilla存储器加载指令来直接从虚 拟存储器系统(包括高速缓存和主存储器)或从专用硬件结构(系统可以 选择在专用存储结构中保持或高速缓存压缩状态)读取图块的压缩状态。 该实施例要求压缩状态存储可由驱动程序软件直接寻址。在替代实施例中, 其中压缩状态存储不能由用户模式驱动器(UMD)直接访问,可以使用简 单的硬件增强以及适当增强的存储器加载指令的风格来将图块的数据地址 映射到相应的压缩状态地址。上述简单、非侵略性形式的“UniformTexOpti” 的原型能够将存储器查找的总数减少例如高达16.5%并且实现通过现代高 性能GPU 56上的概念验证软件实现,在一组现代图形应用程序中实现平均 2.5%和高达6.5%的帧时间加速。。
本文的其他示例性非限制性实施例提供以下非限制性特征和/或优点:
1)称为“UniformTexOpti”的软件优化,以通过咨询称为脏图块映射 (DTM)64'的预先构建的粗粒度表示来避免对部分均匀纹理的存储器查找 和从属计算。
2)用于通过用户模式驱动器(UMD)软件读取存储器压缩信息的方 式,以辅助快速和有效的DTM 64'构造。
在以下描述中,第一部分以API不可知的方式提供关于3D图形编程 的各种突出方面的高级背景,并且引入了一些术语。下一部分描述了用于 开发脏纹理映射(DTM)的非限制性实施例。下一部分描述了用于提供着 色器执行效率和专门执行以避免冗余计算和利用值均匀性的非限制性实施 例。最后部分呈现了定量结果。
3D图形编程的各种显著方面的高级背景
在高级别,可以将在图3A系统上执行的类型的实时3D图形应用的帧 (诸如虚拟现实、增强现实、平视显示、游戏等)采用(例如,虚拟)眼 睛位置,观看者在3D场景中所处的水平,以及各种静态纹理作为其输入, 以产生输出到显示器的最终图像。从软件的角度来看,将这些应用程序视 为API调用和着色器程序的两级层次结构非常有用。帧执行一个或更多个 从属API调用(在现代应用程序中,这可以高达例如5000次调用)。调用 可以是图形绘制调用、计算分派、清除、复制以及操纵API状态的其他调 用。根据资源可用性,多个API调用可以同时在GPU 56中进行。
绘制或分派调用消耗零个或多个输入纹理64并产生一个或更多个输 出纹理或其他表面。在绘制或分派调用期间,着色器程序58通常用于在所 需位置读取输入纹理,对读取值执行数学变换,并在该绘制调用的输出表 面/纹理中产生特定于位置的输出值。一些高性能GPU实现以大规模并行 方式执行此类操作。有关示例GPU架构及其用于实时图形、深度学习和其 他环境的更多细节,请参见图13及其后的内容。
脏图块映射的示例构造
用于提供上述“高级知识”的一个示例性非限制性技术是使用“脏图块 映射”(DTM)64'。
更详细地,一个示例非限制性实施例提供UniformTexOpti,其是在图 形应用中显示出前景的驱动器管理的计算值重用(CVR)技术。它的工作 原理是选择性地避免在着色器程序中提取部分均匀纹理的存储器提取,而 是使用专门用于最常出现的值的程序路径。在一些非限制性实施例中,通 过咨询部分均匀纹理的粗粒度表示(称为脏图块映射(DTM)64'),可以 动态地做出使用专用快速路径的决定。
在一个示例非限制性实施例中,DTM 64'每个图块使用一个或少量位 来传达给定图块中的所有位置是否具有均匀值。DTM 64'可以由软件(SW) 根据其需要灵活地定义。例如,这里的图块可以指代光栅操作(ROP)粒 度图块或更高粒度区域。同样,可以基于使用灵活地定义DTM 64'中每个 图块的位数。在它们最简单的形式中,DTM 64'可以使用1位表示来简单地 传达相应的块的值是否处于被清除(即,初始)状态或未被清除状态(即, 脏)。更一般地,DTM 64'实现可以使用每个图块n位,并且使用2n个可 能状态中的2n-1个来传达图块具有的2n-1个唯一均匀值中的哪一个以及剩 余的一位模式来传达其他2n-1个值中没有一个适用。
因此,示例表面(诸如纹理)被划分为粗粒度区域,例如图块区域。 一些示例非限制性实施例使用预通过来确定该区域中的所有纹素是否具有 相同的值。如果它们具有相同的值,则元数据设置为“干净”。如果纹素不 具有相同的值,则将该区域的元数据设置为“脏”。在一些示例实施例中, 每个区域的单个位可用于表示该区域是“干净”还是“脏”。在其他实施例中, 多个位可用于表示图块是“脏”还是“干净”。例如,在重复使用两种不同颜色的纹理中,使得多个图块中的所有纹素是第一颜色,并且多个其他图块 中的所有纹素是与第一颜色不同的第二颜色,则它可用于表示具有取决于 颜色的两种不同位模式的“干净”状态(例如,干净状态“01”表示所有黑色 纹理像素,且干净状态“10”表示所有白色纹理像素,并使用状态“11”表示 不属于上述任何一种类型的脏图块)。在一般情况下,N位可用于表示2N种可能性。
软件可以定义由单个DTM图块表示的纹素的数量以及用于表示DTM 中的图块的位的数量,例如:
·每个图块DTM的单位-如果图块中所有纹素的值等于特定(全局)值, 则传送图块的位。0表示干净(即预期值),1表示脏。
·每个图块DTM的多位-如果图块中的所有纹素的值等于最多2n-1个特 定(全局)值中的一个或者根本不存在(对于总共2n种可能性),则传送 图块的n位。
可以设计版本控制变换(将在下面讨论)以处理2n个案例。
示例DTM
图4A-4D示出了使用示例非限制性自动基础设施构造的“脏”DTM 64' 的示例:
·图4B示出图4A纹理具有“脏”(非均匀)区域d和均匀颜色c0的“干 净”区域。
·图4D示出了图4C纹理包含均匀颜色c0的“干净”区域,第二均匀颜 色c1的“干净”区域和“脏”区域d。(在这个特定示例中,c1是这个特定中 间纹理中前景中草的颜色,因此草实际上不是绿色,而是一些蓝色的阴影)。
图4B、4D中所示的脏图块映射可以比相应的纹理小得多。例如,图 4B DTM 64'可以是8192x较小的1位DTM(单个位表示“干净”或“脏”,并 且图4D DTM可以是4096x较小的2位DTM(2位用于表示三种状态:脏, 颜色为c0的“干净”;颜色为c1的“干净”)。
创建这种脏图块映射的示例详细过程可包括:
·将表面划分为尺寸合适的粗粒度图块(参见原始纹理的图6A和分割 纹理的图6B)
·确定图块中的所有纹素是否具有给定的兴趣值(在图6B的情况下, 0.0表示黑色)
·如果是,则在DTM 64'中将该图块标记为干净;否则,脏
·因此,在DTM 64'中,具有耀斑或其他特征的图块将标记为脏。
在一些示例性实施例中,DTM 64'可以由在绘制调用之前运行的显式 预通过中的软件构造,该绘制调用需要它们的输出。在一些示例非限制性 实施例中,可以基于所标识的兴趣值来执行测试。可以基于分析、程序员 知识、启发式、人工智能/机器学习或任何其他技术来标识这样的兴趣值。 然后,驱动程序软件可以引入专门的通道来测试这些兴趣值,并使用这些 测试的结果来构造这样的脏图块映射。因此,在一些示例非限制性实施例中,驱动程序预通过不仅标识图块,其所有纹素具有相同的颜色;它还可 以调节关于图块的纹素是否具有一小组预定颜色中的一种的标识。然后, DTM可用于编译的程序,这些程序用于处理原始的部分均匀纹理。在另一 个示例性非限制性实施例中,驱动程序预通过不仅可以标识均匀的图块, 其所有组成的纹理像素具有相同的颜色,而且还动态地发现纹理中的2n-1个最流行的颜色,然后用每个DTM块的n位适当地编码它们。在这样的实 施例中,预通过不仅将DTM传递到作为UniformTexOpti的目标的后续程 序,而且还传递2n-1个最流行颜色的辅助阵列。
在一个示例非限制性实施例中,黑色可以是在图6B示例的预通过中 检测到的唯一颜色。因此,预通过操作将图块标记为“干净”的唯一时间是 当预通过检测到(a)图块中的纹素值是黑色时,以及(b)图块的高级信 息指示所有图块中的纹素具有相同的颜色(下面有更多细节)。当所有纹 素具有相同值时,高级信息将指示。
编译器和驱动程序软件一起工作以提供版本控制转换。在示例非限制 性实施例中,驱动程序使用DTM信息将其预通过检查的结果传送到执行着 色器或其他应用程序进程。因此,编译着色器的编译器也可以知道驱动程 序预通过正在检查哪些特定兴趣值,并且可以基于那些特定的兴趣值生成 专门的执行路径(例如,跳过混合操作,混合成黑色以产生黑色,同时对 不同颜色(如粉色或蓝色)执行块混合操作)。
使用DTM的整体变换
如上所述,示例性非限制性实施例使用DTM 64'来避免进行不必要的 工作和/或存储器访问。图5示出了如何使用图4B DTM在默认执行路径和 更快的专用执行路径之间进行选择的示例:
示例基线程序;
R0=TEX(u,v)
R1=expensiveWork()
R0=R0 x R1
DTM construction pre-pass(low overhead)
以粗粒度读取压缩信息并构建DTM用于输入纹理
Figure BDA0002296087090000131
注意,在上面的代码中,指令“DTM[TileID]测试图块的DTM 64'以确 定图块是否”脏“。如果图块不是脏的(”!=“),则采用快速路径。否则, 采用慢速(默认)路径。因此,当图块不脏时,DTM 64'使代码能够避免执 行expensiveWork()。
利用存储器压缩信息的高效DTM构造
DTM 64'构造应该优选地非常有效,使得避免存储器取出的收益远远 超过DTM构造的成本。这样做的一个示例性非限制性方式是利用可能已经 可用于表面/纹理图块的压缩信息,而不增加任何进一步的开销。
在许多现有系统中,已经以存储器压缩信息的形式捕获值局部性。历 史上,压缩用于节省带宽并可选地节省存储。GPU将压缩均匀动态纹理以 最小化存储要求。压缩信息存储为压缩状态(元数据)和压缩数据。具体 情况取决于压缩类型。着色器等程序可以通过某种方式读取压缩状态和压 缩数据。
读取区域中的每一个纹素以确定该区域中的所有纹素是否具有相同 值是昂贵的。因此,一些示例非限制性实施例利用压缩信息以便推断关于 给定区域中的所有纹素是否具有相同值(并且在一些情况下,哪个值)的 高级信息。在一些示例实施例中,可以基于与已经驻留在贮存器中的纹理 图块(例如,8×8或其他大小的区域)相关联的压缩信息来执行预通过。
惯常的纹理压缩是用于减小存储在存储器中的纹理的大小的有价值 的工具。例如,在一些纹理压缩布置中,纹理图块本身驻留在(纹理)存 储器中,而图块的压缩信息(例如,压缩状态)驻留在L2或其他高速缓冲 存储器中。在给定图块中的所有纹素具有相同值的情况下,相应的索引值 可以存储在也驻留在L2高速缓冲存储器中的表中。因此,处理器不需要离 开芯片以创建DTM 64'和/或以其他方式确定是否应该由默认执行路径或专 用执行路径处理该图块-处理器可以在运行时通过检查其片上L2高速缓冲 存储器的内容来确定。此外,在示例实施例中,如果采用专用路径,则根 本不需要在存储器中访问原始纹理图块-因为处理器仅在确定图块中的纹 素都具有相同的预定已知值(例如,黑色)时才采用专用路径,使得专用 路径可以绕过/消除纹素本身上的逐个纹素操作。
因此,一个示例非限制性实施例使用压缩信息来推断值局部性并消除 依赖于值的动态计算冗余并改善程序性能。因此,这样的示例实施例可以 使用已经可用的解压信息来了解值局部性。例如,可以利用图块来确定图 块中的所有值是否相同。一些示例是动态生成的,但该技术也适用于静态 或“固定”版本。
在一个示例上下文中,惯常的软件和/或硬件存储器压缩可用并且部 署在被优化的系统上。某些固定粒度的数据(例如,1KB DRAM块)被压 缩为较小的字节数,以节省内存带宽并可选地节省存储器存储。一个示例 非限制性实施例使用颜色和深度零带宽清除(ZBC)压缩(参见例如标题 为“零带宽清除(Zero-Bandwidth Clears)”的美国专利No.US8330766B1);压 缩模式为8:1(参见Smith,R,“NVIDIA Geforce GTX 980回顾:Maxwell Mark 2(The NVIDIA Geforce GTX 980Review:Maxwell Mark 2)”(2014 年9月18日))。
当纹理被压缩时,关于压缩类型的元数据和与压缩有关的其他参数通 常作为压缩状态和压缩数据存储在DRAM 62和/或高速缓存66中,分别称 为压缩状态(compstatus)和压缩数据(compdata)。压缩状态是有关压缩 的元数据,而压缩数据是压缩数据本身。系统使用压缩状态元数据来解压 压缩数据。压缩状态和压缩数据将根据压缩类型而变化,例如,压缩类型: 零带宽清除、减少、差分压缩等。一个示例实施例使用例如256B或其他大 小的图块的存储器压缩状态(简称为压缩状态)以推断底层纹理的值局部 性特征,而无需读取或分析压缩数据。压缩状态在某些情况下可以构成 DTM或DTM的等价物,并且因此可以由着色器程序直接使用以确定何时 遵循专用执行路径,或者它可以用于生成DTM。因此,着色器程序可以使 用压缩状态作为“高级信息”,着色器程序可以使用该信息来推断表面的值局部性特征,而不需要着色器程序读取或访问表面本身。
例如,在一些实施例中,驱动程序检查存储在存储器中的信息的已知 值,以确定在“清除”API函数调用中使用的已知值的存在。这种“清除”操作 可用于初始化纹理或其他表面的大部分。如果稍后仅动态更改某些图块, 则剩余图块将保留由“清除”初始化的颜色值,并且驱动程序可以在预通过 中对此进行测试。作为一个示例,假设使用“清除”功能来清除整个屏幕以 将屏幕绘制为天蓝色(或者对于夜空来说是黑色)。然后,假设一个动态过程增加了云、月亮和火箭,但大部分天空仍然是蓝色或黑色。本文的示 例非限制性技术可用于识别大多数图块或其他屏幕区域何时保持其初始化 值,并使用专门的路径执行来避免花费处理时间和存储器访问来检索和处 理冗余值的需要。
图7示出了使用两个不同的示例均匀压缩模式的示例场景,其可以用 于压缩具有高的值局部性的纹理,其中至少一个跟踪这样的“清除”:
·零带宽清除(ZBC)(参见美国专利8330766B1)
·减少(“红色”)压缩。
在该示例中,纹理以压缩或紧凑的形式存储在DRAM 224中。例如, 纹理1(具有图块232a、232b、232c、232d)存储在DRAM中,并且纹理 2(具有图块234a、234b、234c、234d)也存储在DRAM中(这里,“红色” 不是指颜色为红,而是如上所述使用某种类型的缩减压缩来压缩图块的事 实)。
无论压缩模式如何,在编码多种颜色的示例性非限制性实施例中,通 常需要实际数据值来构造DTM 64'(例如,图4D)。对于ZBC(零带宽清 除)压缩状态,有关数据值的知识嵌入在压缩状态本身中。
在图7中,与压缩类型/特性相关联的“压缩状态”元数据存储在L2高 速缓存222中。数据结构ZBC压缩状态226传达包含相同值的块中的所有 位置,并且指向值的指针被在压缩状态块中编码。众所周知,可以响应于 将初始值分配给纹理表面的API级清除()调用(即初始化调用)来触发 ZBC压缩。在一个示例非限制性实施例中,响应于这样的清除(0)调用, 软件驱动程序利用期望的清除值对L2高速缓存222中的清除值表(或“ZBC 表”)进行编程,从而被清除的表面的所有图块将具有其压缩状态“ZBC”并 包含指向相关ZBC表条目230的指针,该条目包含区域被清除的值。对单 个图块的后续写入可以改变压缩状态,但是在稍后读取时,如果发现图块 具有ZBC状态,则给定所有其组成像素自被清除以来未被修改(即,“不 脏”))。因此,对于基于ZBC的DTM 64'构造,软件或其他查询功能仅 需要访问压缩状态-而不是存储在DRAM 224中的纹理232本身或任何更 详细的压缩相关信息-至少在区域被标记为ZBC-清除的情况下。
对于8:1减少图块,在示例非限制性实施例中的DTM 64'构造从存 储器224访问压缩状态228和8:1减少数据234。在这种情况下,DTM 构造着色器可能需要发出复数个加载(例如,两个后续常规16B加载)以 提取大(例如,256B)图块的减少值。即使在DRAM 224中访问压缩数据 234的这种情况下,用于8:1减少图块的DTM 64'结构也比简单地读取每 个纹素快8倍。
查询图块和DTM图块
许多表面被定义为可以不同地压缩的不同分辨率的多个n维阵列(数 据矩阵)。在一个非限制性示例性实施例中,可以通过系统中的压缩粒度 来确定查询的粒度,称为“查询图块”。
一个或更多个查询图块可以形成DTM图块,其状态将等于所有组成 查询图块的“脏”状态的逻辑或。查询图块中的纹素数量将取决于纹素的大 小(写为每像素位或bpp)。DTM图块的粒度由整体DTM尺寸预算和输 入表面的大小确定。
图8示出了每个DTM图块的查询图块的大小和数量如何可以根据每 像素位而变化。此示例示出三个不同的查询图块:
128-bpp 4x4查询图块252;
32-bpp 8x8查询图块254;
8-bpp 16x16查询图块256。
通过对具有不同大小和分辨率的三个查询图块252、254、256的“脏” 结果进行逻辑或运算来构造公共DTM图块250。
有效的DTM构造
以下是1b/图块DTM的代码片段,用于捕获2种可能性中的1种:
Figure BDA0002296087090000171
以下是用于2b/图块DTM捕获4个可能性中的1个的示例代码片段;
Figure BDA0002296087090000172
Figure BDA0002296087090000181
分层的DTM
在另一个非限制性实施例中,可以进一步分层地压缩如此构造的 “DTM”,以甚至更粗糙的粒度传送信息。例如,第一级DTM传达一组8x8 纹素是否具有相同的颜色。从第一级DTM构建的下一级DTM可以表示第 一级DTM的16×16区域的信息,实际上表示原始表面的128×128个纹素 (16×16乘以8×8)。由于其非常粗糙的粒度,这个二级DTM可以在几个 字节中非常简洁地表示整个原始纹理表面。此外,该第二级DTM可以传达 至少三个可能的值,可以以2位表示每16x16区域。这些值将传达16x16 区域中的所有第一级DTM位是否“干净”(由2位模式“00”表示),或者它 们是否都是“脏”(由2位模式“11”表示),或者它们是否混合了干净和脏 的图块(由2位模式”10“表示)。对于第一级DTM,3840×2160纹理将需 要(3840×2160)/(8×8)/8=16,200字节,对于第二级DTM,需要 (3840×2160)×2/(128×128)/8=127字节。
消费者着色器将首先访问第二级DTM,并且仅当第二级DTM指示特 定纹素属于具有干净和脏的混合的16×16区域时才访问第一级DTM。如果 大多数查找可以在第二级(甚至更高级别)DTM之外进行服务,则由于 DTM查找而导致的动态工作字节集以及由此的运行时开销可以保持非常 低。
分析(Profiling)以提供更高的效率
存在确定关于纹理或其他表面的值均匀性的高级信息的其他方式。例 如,可以执行执行分析以收集关于纹理值均匀性的信息。例如,可以使用 分析来确定哪些纹理和哪些着色器程序/过程在效率的潜在增加方面是感 兴趣的,以及哪些局部化的纹素值是由处理一个或更多个这样的纹理产生 的。这种分析可以离线(基于从程序执行记录的结果)或在线(当应用程 序实时运行时)执行。例如,在线分析可以作为后台进程运行以分析一个 或更多个特定场景。分析可以考虑在特定系统上运行特定应用程序的单个 用户和/或跨多个系统运行应用程序的多个用户,或者可以使用深度学习以 各种不同方式执行应用程序和/或分析在执行应用程序时导致最大延迟的 表面/纹理任务。可以通过这种分析来收集表面/纹理访问和计算信息,并用 于导出兴趣值。在其他上下文中,开发人员(设计纹理的人)可以提供识 别特定纹理的最常见纹素值的信息。或者深度学习可以用于分析应用程序 的所有表面/纹理以标识一个或更多个最流行的值。
在这种基于分析反馈的系统中,例如可以将如下所述的8:1减少的 图块中的一些或全部收获为ZBC的图块。通过检测先验(例如,通过在线 或离线分析)纹理呈现高的值局部性并且其图块被8:1减少压缩,驱动程 序软件可以引入具有分析确定的清除值的显式清除()调用,如果它们要 写入的值等于清除值,则修改所有这些表面的写入者以删除它们的写入。 这样,压缩状态保留为ZBC,这反过来将实现快速DTM构造。DTM可以 在线或离线构建,具体取决于压缩数据何时可用于汇总。
示例执行专业化
如上所述,可以利用值局部性的高级知识来消除动态计算冗余(“计 算值重用”)。假设一个程序要对图6A/6B纹理的所有纹素进行以下操作, 这可能非常大(例如,16,777,216个纹素):
result=tex(u,v)x expensiveWork()
今天,处理器将简单地提取并处理每个单个纹素,就好像每个纹素的 值是唯一的一样。然而,所有例如黑色区域的纹素值是相同的,即0.0。一 遍又一遍地重做同样的事情是浪费的。
通过DTM 64'对这种仅黑色区域的高级知识不仅可以帮助避免存储 器提取,而且还有助于通过代码专业化(编译器常量折叠)避免 expensiveWork(),例如:
Figure BDA0002296087090000191
以上代码片段提供具有优化的快速和默认慢速路径的版本控制变换。 默认的慢速路径声明“result=tex(u,v)x expensiveWork()”。但是代码 还考虑到如果在坐标u,v处的纹素的高级知识表示纹素颜色值是黑色的, 那么纹素的产物和“昂贵的工作”的任何结果将是零,意味着处理器做“昂贵 的工作”花费的时间将被浪费。因此,代码添加了更多快速(专用)指令, 这些指令基于预先知道该产品将为零,将结果设置为零而不进行“昂贵的工 作”。这有点像当事先知道客户没有钱时餐厅拒绝准备客户订购的餐。
干净的图块越多,动态采用快速路径的频率越高,性能增益越高。软 件系统可以基于关于该路径中的纹理值的静态可用知识,选择在“快速”路 径中进行进一步的代码专业化。
关于特定值的知识将帮助我们避免不相关的计算。例如,如果我们知 道图块全部为黑色,则我们可以避免存储器查找并将输出设置为零。可以 基于上下文执行不同的代码片段(例如,基于特定的标识值提供专用路径)。 有关特定值的知识可以帮助我们避免不必要的存储器查找以及否则需要对 这些特定值执行的其他计算。
确保得到的程序在功能上是正确的是有用的。因此,我们引入了正常 (慢)路径。但大多数时候我们都希望在优化的快速路径中执行。
因此,版本控制依赖于特定位置处的值。如果特定位置包含特定值, 则代码将以一种方式执行(例如,在专门的优化路径中),并且如果该特 定位置包含不同的值,则将以不同的方式执行(例如,在非特定的默认路 径中)。在本文的一些示例非限制性实施例中,这通过编译器优化来实现。 因此,编译器可以避免快速路径中的任何计算,因为编译器知道对于该路 径,计算的结果将为零。在某些情况下,编译器执行的优化可能是戏剧性 的,例如,消除了对存储器负载的需要以及对由负载本该已经检索的数据 的任何相关计算。在其他情况下,编译器执行的优化可能不那么戏剧性(例 如,对仍然从存储器加载的值提供“快捷方式”或其他更有效的计算)。
图7A示出了来自应用程序的样本DirectX汇编代码片段,以说明着 色器程序中的专业化优势。在该示例中,从纹理t47加载的4向量寄存器 r1.xyzw在99%的时间为零(0)。当纹理t47的值为零时,常见的99%情 况,通过代码复制和版本控制的专业化可以帮助消除纹理t47(与纹理t47 结合)的查找。此示例说明了专业化如何进一步用于减少存储器提取以及 减少相关计算。这些优化可以通过减少或避免动态计算冗余来显著提高 GPU效率。
“DTM”可以为执行专业化提供高级知识
传递图块粒度值局部性的粗粒度DTM表示用于通知图9示例中的执 行专业化,这也在下面以附加注释阐述:
基线代码:
Clear(&A)#清除表面A
Draw1(&A)#更新表面A
Clear(&B)#清除表面B
Draw2(&B)#更新表面B
Draw3(&C,srv A,srv B)#读取A和B
其可被转换成以下经修改的代码:
Figure BDA0002296087090000211
在上面的斜体代码行中(其中一些在图9中的块中阐述),引入一个 或更多个预通过以创建脏图块映射(DTM),其被绑定为Draw3()的只 读资源(例如,作为常量缓冲区)。然后修改Draw3()的着色器以查找 A和B的DTM,并根据DTM查找的结果跳转到优化的快速路径或默认慢 速路径。
图9示出了另一个基线消费者着色器片段,其示出了具有优化的“干 净”路径的示例着色器代码专业化,其避免了存储器提取,而是直接提供来 自DTM的结果:
均匀纹素优化着色器代码片段:
//从u,v坐标生成索引和位的数学运算
(dtm_index,dtm_bit)=GetDTMIndexAndBit(u,v);
if(DTM[dtm_index]&(1<<dtm_bit)){
//图块到(u,v)映射为脏,所以转到存储器
result=tex(u,v)
//重复的依赖代码
dependent_code(result)
}else{
//图块为“干净”,因此直接避免存储器提取和短路结果
result=CLEAR_VALUE;
//专用于静态已知结果值的重复依赖代码
dependent_code(result);
}
部分评估和表达结果重用
在一些情况下,在诸如纹理的表面内没有广泛的整体均匀性,但是存 在局部均匀性。想象一下棋盘,每个块都是独一无二的。在这种情景中, 可能没有好的或有效的方法来构造具有每个图块一个或两个位的DTM。例 如,图块可以大部分是均匀的,但是显示出微小的变化(例如,使得图块 适合于使用差分压缩方案进行压缩)。例如,假设纹素不具有完全相同的 颜色,而是相对于基值仅相差小幅度。为了使用差分压缩来压缩这样的图 块,可以存储基值,然后用指示纹素的值和基值之间的差(例如,幅度和 符号)的值对每个纹素进行编码。
代替或除了使用预先计算的DTM以避免冗余工作之外,利用值局部 性的另一种方式是通过表达式结果重用,其中工作在领导者线程中完成, 而非领导者线程简单地重用来自领导者线程。当没有全局均匀性(因此 DTM无效)时,这是一种有用的策略,但是存在局部值局部性(例如,具 有唯一彩色块的棋盘)。因此,具有全局可变性的表面通常不适合DTM,但它们可能适合于领导/非领导者工作分区。在这种情况下,编译器执行分 区和领导/非领导者通信设置。领导者读取压缩状态和压缩数据,并计算其 结果。非领导者可以直接重用领导者的结果或重用领导者的结果以及少量 额外的重构工作,具体取决于压缩模式(编译器为不同的压缩模式和重用 可能性创建版本)。在非领导者线程中可以减少存储器提取和数学运算, 从而节省能源并可能提高性能。
局部值局部性可以是两种宽泛类型:1)重复,或2)显示相对于基值 的微小变化。因此,压缩机器可以用不同的算法压缩它们(例如,对于重 复值的减少或对于温和变化的值的差分压缩)。
对于重复值,可以从领导者线程直接重用任何适用的表达式。对于非 重复值局部性,理解底层压缩技术对于重构代码是有用的,并且只有某些 表达式可以适用于重构和部分结果重用。
玩具示例:部分评估和重用
图10示出了一个示例。假设一个4x4矩阵,每个2x2具有相同的数 据。假设一个程序想要为矩阵的每个元素添加一个常量,即matrix[i][j]+ K。
如果16个线程在该4×4矩阵上工作(每个块一个线程),则仅4个 线程计算唯一输出。其余12个线程可以简单地重用4个唯一线程的结果。
重复值局部性的直接重用
假设在图块矩阵中存在多个图块,并且每个图块以与所有其他图块相 同的方式被处理(例如,与纯色混合等)。在这种情况下可以对“领导者” 图块执行处理,然后使用这些结果处理所有其他图块(考虑每个其他图块 和“领导者”图块之间的变化)。因此,处理器对“领导者”图块执行的艰苦 工作然后可以被重用于一些或所有其他图块。假设线程0和线程1分别在 4B元素阵列的两个相邻位置(分别为位置0和位置1)上运行。在不失一 般性的情况下,假设位置0和位置1处的值相同并且已经以2比1的减少 压缩(即,存储2:1减少压缩状态+一个4B压缩数据)进行压缩。
还假设线程0是2线程组(线程0,线程1)中的领导者线程。在重 用之前,情况将是:
线程0
A=value[loc0]x K1
B=A+K2
线程1
A=value[loc1]x K1
B=A+K2。
在该“之前”情况下,线程独立工作并且不知道值局部性,这导致冗余 工作。
如上所示,原始值查找线程0对存储在位置“位置0”的值执行乘以常 数K1,并且将第二常数K2添加到乘积以提供结果“B”。请注意,线程1 对存储在“位置1”位置的值执行相同的操作。如果整个过程可以确定存储在 位置“位置1”的值与存储在位置“位置0”的值相同,则进程可以在线程0中 对存储在位置“位置0”的值执行计算并且只是通过结果到线程1所以线程1 不需要访问值[位置1]或再次执行计算。尽管线程0和线程1是可以并行执 行的独立线程,但结果效率可以将存储器加载减少一半并减少数学处理开 销。一个潜在的缺点是线程1现在依赖于线程0,根据情况可能会或可能不 会容忍。
相反,在“后”场景中,可以替代地执行以下操作;
线程0:
(leader_data)=LOAD.CD(loc0)
A=leader_data x K1
B=A+K2
SEND(B)
线程1:
(leader_B)=RECEIVE()
B=leader_B
在该“后”场景中,存储器负载被减半并且减少了数学开销。线程现在 是具有线程0消息传递线程1的依赖线程。
非重复值局部性的代码重构
作为另一示例,假设差分压缩用于压缩特定图块或其他区域的值。在 这种情况下,图块中所有纹素的值基本相同,并且仅仅少量(例如,最后 几个最低有效位)不同。在所示的示例中,线程0可以将基于“领导者”纹 素的计算结果以及指示值[位置0]和值[位置1]之间的差异的“delta”值发送 到线程1。线程1现在可以重用线程0计算的值[位置0]的结果,并计算校 正因子(例如,Δx K1),该校正因子校正了领导者线程的值[位置0]和值[位置1]之间的差异的结果。这种重用节省了可能耗时的值x K1的乘法,但仍 然需要乘法(ΔxK1)和加法(“leader_B+[乘法的结果])。但是,有一些 方法可以利用特定值来提供提供进一步优化的专门执行。
直觉:如果f(x)=x.K1+K2,则f(x+d)=(x+d).K1+K2=(x.K1 +K2)+d.K1=f(x)+d.K1.
这与上面的示例类似。在不失一般性的情况下,现在假设已经使用差 分压缩成功压缩了阵列,使得值[位置1]保证在值[位置0]的小的约束增量 内:
线程0
(leader_data,delta)=LOAD.CD(loc0)
A=leader_data x K1
B=A+K2
SEND(B,delta)
线程1
(leader_B,delta)=RECEIVE()
B=leader_B+delta x K1
如果已知delta的范围,则可以静态地优化该过程。
非重复值局部的代码重构
示例非限制性实施例使用编译器来重构非领导者线程上的某些表达, 并将它们表达为领导者纹素的部分结果和静态可评估常量的更简单的函 数。
重构具有以下益处:
·存储器加载仅在领导者线程中执行,
·通过部分评估和重用简化了非领导者线程中的表达式评估;
·有助于节省内存系统带宽和能量;
·再次处理核心的操作更少,从而节省能源
以下示例假设2x4B被压缩为1x4B+4b delta。这个示例一般是用f(), f'()和g()来编写的,并示出了如何为小delta范围专门化f'():
Figure BDA0002296087090000251
Figure BDA0002296087090000261
更详细地,下表给出了编译器如何重构表达式并利用差分压缩来组合 来自领导者线程和编译时评估表达式的部分评估结果以导出非领导者的最 终结果的一些示例。主题:
Figure BDA0002296087090000262
上述表达式中的K1,K2,K3在感兴趣的线程中是均匀的。表达式 d.K1,d.K2和K1^d突出显示在delta值上评估的f'()函数。
领导者和非领导者依赖于压缩模式
假设应用程序正在运行创建阴影映射。在创建阴影映射时,它将其存 储在L2高速缓存中(因此也可能存储在主存储器中)。当计算阴影映射时, GPU检测粗粒度区域(例如,高速缓存线,ROP图块等)中的值均匀性并 压缩(例如,使用缩减压缩)阴影映射以进行存储。GPU还将存储压缩状 态值和/或索引阴影映射,这些压缩状态值指示减少压缩。当着色器进程然 后希望利用该阴影映射将图像渲染到显示器时,着色器进程(可以在多个 线程和/或线程束中运行)读取先前存储的压缩状态值并发现对于阴影映射 的多个图块的多个纹素压缩是相同的。在该阶段,一个或更多个领导者线 程检索/解压纹素,基于那些纹素计算结果,并在渲染中使用结果。一个或 更多个领导者线程还向其他(跟随者)线程发送消息,将计算结果发送给 其他(跟随者)线程。其他(跟随者)线程基于它们读取的压缩状态值独 立地识别领导者线程正在计算其他(跟随者)线程可以重用的值。因此, 其他(跟随者)线程等待领导者线程将其计算结果发送给其他(跟随者) 线程。当领导者线程发送其结果时,其他(跟随者)线程重用结果,避免 检索和解压纹理的需要,并且还需要重新计算领导者线程已经计算的相同 值。
在以上的变形中,假设阴影映射被差分压缩。其他(跟随者)线程可 以基于它们正在处理的纹素值与领导者线程正在处理的纹素值之间的差异 来计算结果差分(Δs)(差分结果基于在差分压缩映射或其他数据结构中 提供的差分值来计算)。其他(跟随者)线程使用它们各自计算的Δs来校 正由领导者线程发送的计算值。每个线程的计算由编译器在编译时指定, 期望阴影映射可以差分压缩。因此,其他(跟随者)线程仍然需要自己做 一些工作,但不像领导者线程没有将其计算结果共享给其他(跟随者)线 程那么多。此外,其他(跟随者)线程不需要执行存储器负载;当其他(跟 随者)线程开始访问其各自的纹素时,他们确定纹素被差分压缩,因此他 们读取对应于纹素的差分值,然后等待领导者线程发送计算值而不是自己 加载并解压。压缩状态通常保持驻留在芯片上(例如,在L2高速缓存中), 因此与加载图块的所有纹素(例如,从纹理、L2和/或主存储器)相比,加 载单个图块的压缩状态通常更便宜。
图11示出了另外的非限制性示例。和以前一样,我们首先要做一个 LOAD.CS来理解每次内存查找的压缩模式。根据模式,可以灵活地确定领 导者和非领导者线程。假设在图11中(位置0,位置1),(位置2,位置 3)为2:1减少压缩(线程0(因为它读取位置0)是线程1的领导者(读 取位置1),同样线程2是线程3的)。对于下一次查找,如果(位置4, 位置5,位置6,位置7)为4:1缩减压缩,则线程0(因为它读取位置4) 将成为线程1,线程2和线程3的领导者。
高级别的内容是编译器基于初始压缩状态加载为每个查找创建版本。 每个版本都会知道当前线程是否是该特定查找的领导者或其他方面,并且 适当地做出反应。例如:
Figure BDA0002296087090000271
Figure BDA0002296087090000281
在一些应用中,系统可能遇到一些经历减少压缩的图块,一些经历差 分压缩的图块,以及一些未经受压缩的图块。在这种情况下,编译器可以 创建多个版本。一个版本可以针对减少压缩的图块进行定制,另一个版本 可以针对差分压缩的图块进行定制,而另一个版本可以针对未使用任一方 法压缩的图块进行定制。
示例性能统计/结果
图12A示出了在可能的情况下每单帧以及跨越多帧的采样中看到的 唯一FP颜色值的数量。对于大多数应用,一个示例非限制性实验框架仅针 对每个应用使用一个单帧APIC。对于一些应用,我们能够捕获和使用多个 单帧APIC,对于那些我们已经呈现了所有研究帧中看到的唯一值的数量。
从图12A中我们观察到,平均而言,单个帧可能需要驱动程序跟踪和 设置ZBC表以保持多达20种独特颜色。对于我们有多个APIC的应用程序, 我们看到跨帧看到的独特颜色总数通常比单个帧所需的平均颜色数量多3 或4个。无论如何,普通应用程序的独特颜色总数似乎低于32个。除了GPU的ZBC表有多大的确切细节之外,看起来32条ZBC表并非不合理。参见例如NVIDIA Geforce GTX 1080(2016)。这意味着我们研究的帧中 的所有值局部性理论上都可以作为ZBC收获。
图12B示出了来自对示例非限制性GPU的保守评估的清除值优化的 性能提升。相对于主y轴绘制的性能加速是保守的,因为一个示例非限制 性原型使用关于部分均匀性的知识来仅避免纹理查找,但是不基于清除值 执行任何代码专门化。即便如此,这个示例非限制性原型显示通过均匀纹 素优化的平均上升2.5%。如图12C所示,纹理查找计数本身下降了8.5%。
纹理访问的减少没有那么多的性能提升,因为帧的不同区域/绘制调 用的性能倾向于受到不同GPU瓶颈的限制,因此纹理查找的减少不直接转 化为等效的性能改进。但是,预计这种工作量的减少将转化为一些节能效 果。
结论
值局部性是许多实时图形应用中固有的。均匀纹素优化(UniformTexOpti) 利用存储器压缩信息来消除动态计算冗余,从而提高GPU效率。软件优化 利用已有的和未来的压缩功能来构建称为脏图块映射的纹理的粗粒度表 示。
图形处理管线
在一个实施例中,PPU 300被配置为接收指定用于处理图形数据的着色 程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边 形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空 间坐标系中)的数据以及与图元的每个顶点相关联的属性。PPU可以被配置 为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数 据)。
应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸 如系统存储器或存储器)。模型数据定义可能在显示器上可见的对象中的每一 个。然后应用程序对驱动程序内核进行API调用,其请求要被渲染和显示的 模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行 操作来处理模型数据。这些命令可以参考要在PPU的SM上实现的不同着色 程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或 更多个。例如,SM中的一个或更多个可以被配置为执行顶点着色程序,其处 理由模型数据定义的多个顶点。在一个实施例中,不同的SM可以被配置为 并发执行不同的着色程序。例如,SM的第一子集可以被配置为执行顶点着色 程序,而SM的第二子集可以被配置为执行像素着色程序。SM的第一子集处 理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓 存和/或存储器。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏 幕空间中的二维数据)以产生片段数据之后,SM的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存 储器中的帧缓冲区。顶点着色程序和像素着色程序可以并发执行,以管线方 式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到 帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
图13是根据一个实施例的由PPU实现的图形处理管线600的概念图。 图形处理管线600是被实现以从3D几何数据生成2D计算机生成图像的处理 步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更 高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。 因此,图形处理管线600接收从图形处理管线600的一个阶段传送到下一阶 段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600 可表示由
Figure BDA0002296087090000301
API定义的图形处理管线。作为选择,图形处理管线600 可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实 现。
如图13所示,图形处理管线600包括包含多个阶段的管线架构。这些 阶段包括但不限于数据组装阶段610、顶点着色阶段620、图元组装阶段630、 几何着色阶段640、视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC) 阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。如上所 述,可以优化与这种着色硬件结合工作的软件着色算法以减少计算时间。
在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形 处理管线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、 三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(例 如,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构 中。
数据组装阶段610接收输入数据601,其指定用于高阶表面、图元等的 顶点数据。数据组装阶段610收集临时存储或队列中的顶点数据,诸如通过 从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读 取顶点数据。顶点数据然后被传送到顶点着色阶段620以进行处理。
顶点着色阶段620通过对顶点中的每一个执行一次一组操作(例如,顶 点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个 顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例 如,<x,y,z,w>)。顶点着色阶段620可以操纵各个顶点属性,诸如位置、 颜色、纹理坐标等。换句话说,顶点着色阶段620对与顶点相关联的顶点坐 标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点 的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对 象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵 将坐标从对象坐标空间转换到世界空间或归一化设备坐标 (normalized-device-coordinate,NCD)空间。顶点着色阶段620生成被传送 到图元组装阶段630的经变换的顶点数据。
图元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点分组 成几何图元以由几何着色阶段640处理。例如,图元组装阶段630可以被配 置为将每三个连续顶点分组为用于传送到几何着色阶段640的几何图元(例 如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例 如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段630将 几何图元(例如,相关联的顶点的集合)传送到几何着色阶段640。
几何着色阶段640通过对几何图元执行一组操作(例如,几何着色器或 程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生 成一个或更多个几何图元。换言之,几何着色阶段640可以将每个几何图元 细分为两个或更多个几何图元的更精细的网格,以由图形处理管线600的其 余部分进行处理。几何着色阶段640将几何图元传送到视口SCC阶段650。
在一个实施例中,图形处理管线600可以在流式多处理器和顶点着色阶 段620、图元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其 相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成, 在一个实施例中,视口SCC阶段650可以利用数据。在一个实施例中,由图 形处理管线600中的阶段的一个或更多个处理的图元数据可以被写入高速缓 存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施 例中,视口SCC阶段650可以访问高速缓存中的数据。在一个实施例中,视 口SCC阶段650和光栅化阶段660被实现为固定功能电路。
视口SCC阶段650执行几何图元的视口缩放、剔除和裁剪。正被渲染 的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者 的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后 平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例 如,丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于 视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为 被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段660。
光栅化阶段660将3D几何图元转换成2D片段(例如,能够用于显示 等)。光栅化阶段660可以被配置为利用几何图元的顶点来设置一组平面方程, 从中可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩码, 其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中, 还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。 光栅化阶段660生成片段数据(例如,与每个被覆盖像素的特定样本位置相 关联的内插顶点属性),其被传送到片段着色阶段670。
片段着色阶段670通过对片段中的每一个执行一组操作(即,片段着色 器或程序)来处理片段数据。片段着色阶段670可以生成片段的像素数据(即, 颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理贴图。 片段着色阶段670生成像素数据,其被发送到光栅操作阶段680。
光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、 模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的 其他像素数据混合。当光栅操作阶段680已经完成对像素数据(即,输出数 据602)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲 区等。光栅引擎包括被配置为执行各种光栅操作的多个固定功能硬件单元。 在一个实施例中,光栅引擎包括设置引擎、粗光栅引擎、剔除引擎、裁剪 引擎、精细光栅引擎和图块聚合引擎。设置引擎接收变换后的顶点并生成 与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎 以生成图元的覆盖信息(例如,图块的x、y覆盖掩码)。粗光栅引擎的输 出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除, 并且未剔除的片段被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪 掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以 基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎的输出包 括例如要由在DPC内实现的片段着色器处理的片段。
应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个 或更多个,一个或更多个额外的阶段可以被包括在图形处理管线600中。抽 象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例 中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色 阶段640)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。 此外,图形处理管线600的任何阶段可以由图形处理器(诸如PPU)内的一 个或更多个专用硬件单元来实现。图形处理管线600的其他阶段可以由可编程硬件单元(诸如PPU的SM)来实现。
图形处理管线600可以经由由主机处理器(诸如CPU)执行的应用程序 来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(API), 其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱 动程序是软件程序,其包括控制PPU的操作的多个指令。API为程序员提供 抽象,其允许程序员利用专用图形硬件(诸如PPU)来生成图形数据而不要 求程序员利用PPU的特定指令集。应用程序可以包括被路由到PPU的设备驱 动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API 调用。在一些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。 在其他情况下,设备驱动程序可以至少部分地通过利用CPU和PPU之间的输 入/输出接口在PPU上启动操作来执行操作。在一个实施例中,设备驱动程序 被配置为利用PPU的硬件来实现图形处理管线600。
可以在PPU内执行各种程序以便实现图形处理管线600的各个阶段。例 如,设备驱动程序可以启动PPU上的内核以在一个SM(或多个SM)上执行 顶点着色阶段620。设备驱动程序(或由PPU执行的初始内核)还可启动PPU 上的其他内核以执行图形处理管线600的其他阶段,诸如几何着色阶段640 和片段着色阶段670。另外,图形处理管线600的阶段中的一些可以在固定单 元硬件(诸如在PPU内实现的光栅器或数据组装器)上实现。应当领会,在被SM上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中 间固定功能硬件单元处理。
SM包括被配置为处理由多个线程表示的任务的可编程流式处理器。 每个SM是多线程的并且被配置为并发执行来自特定线程组的多个线程(例 如,32个线程)。在一个实施例中,SM实现SIMD(单指令、多数据)体 系架构,其中线程组(例如,线程束)中的每个线程被配置为基于相同的 指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在 另一个实施例中,SM实现SIMT(单指令、多线程)体系架构,其中线程 组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中 线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线 程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使 线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中, 为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内 和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护 执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效 率。实现多级存储器分层结构。在一个实施例中,存储器分区单元支持统 一存储器以为CPU和PPU存储器提供单个统一的虚拟地址空间,使能虚 拟存储器系统之间的数据共享。在一个实施例中,由PPU对位于其他处理 器上的存储器的访问频率被跟踪,以确保存储器页面被移动到更频繁地访 问页面的PPU的物理存储器。在一个实施例中,NVLink支持地址转换服 务,其允许PPU直接访问CPU的页表并且提供由PPU对CPU存储器的完 全访问。
在一个实施例中,复制引擎在多个PPU之间或在PPU与CPU之间传 输数据。复制引擎可以为未映射到页表的地址生成页错误。然后,存储器 分区单元可以服务页错误,将地址映射到页表中,之后复制引擎可以执行 传输。在常规系统中,针对多个处理器之间的多个复制引擎操作,存储器 是固定的(例如,不可分页),其显著减少了可用存储器。由于硬件页错误, 地址可以传递到复制引擎而不用担心存储器页是否驻留,并且复制过程是 否透明。
来自存储器62或其他系统存储器的数据可以由存储器分区单元取回 并存储在L2高速缓存66中,L2高速缓存66位于芯片上并且在各个GPC 之间共享。每个存储器分区单元包括与对应的存储器设备相关联的L2高速 缓存66的一部分。然后可以在GPC内的多个单元中实现较低级高速缓存。 例如,每个SM可以实现一级(L1)高速缓存。L1高速缓存是专用于特定 SM的专用存储器。来自L2高速缓存66的数据可以被获取并存储在每个 L1高速缓存中,以在SM的功能单元中进行处理。L2高速缓存66被耦合 到存储器接口和XBar。
ROP单元执行与像素颜色相关的图形光栅操作,诸如颜色压缩、像素 混合等。ROP单元还与光栅引擎一起实现深度测试,从光栅引擎的剔除引 擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置 相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测 试,则ROP单元更新深度缓冲区并将深度测试的结果发送给光栅引擎。将 理解的是,分区单元的数量可以不同于GPC的数量,并且因此每个ROP 单元可以耦合到每个GPC。ROP单元跟踪从不同GPC接收到的分组并且 确定由ROP单元450生成的结果通过Xbar被路由到哪个GPC。尽管ROP 单元包括在图14B中的存储器分区单元内,但是在其他实施例中,ROP单 元可以在存储器分区单元之外。例如,ROP单元可以驻留在GPC或另一个 单元中。
每个SM包括L个处理核心。在一个实施例中,SM包括大量(例如 128个等)不同的处理核心。每个核心可以包括完全管线化的、单精度、双 精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单 元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心包括64个单精度(32位)浮点核 心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensor core)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多 个张量核心被包括在核心中。具体地,张量核心被配置为执行深度学习矩 阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每 个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A·B+C, 其中A、B、C和D是4×4矩阵。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩 阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入 数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精 度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。 在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高 维的矩阵运算。API(诸如CUDA9C++API)公开了专门的矩阵加载、矩 阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的 张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束 的全部32个线程。
在一些实施例中,转置硬件包括在处理核心或另一功能单元中,并且 被配置为生成由对角线存储的矩阵数据和/或从对角线存储的矩阵数据生 成原始矩阵和/或转置矩阵。可以在共享存储器内部提供转置硬件以注册 SM的文件加载路径。
在一个示例中,由对角线存储的矩阵数据可以从DRAM获取并存储 在共享存储器中。当处理使用由对角线存储的矩阵数据执行处理的指令时, 设置在共享存储器的路径中的转置硬件和寄存器文件可以提供原始矩阵、 转置矩阵、压缩的原始矩阵和/或压缩的转置矩阵。直到指令之前的最后一 次存储,可以保持由对角线存储的单个矩阵数据,并且根据需要在寄存器 文件中生成由指令指定的矩阵类型。
每个SM还包括执行特殊函数(例如,属性评估、倒数平方根等)的 M个SFU。在一个实施例中,SFU可以包括树遍历单元,其被配置为遍历 分层树数据结构。在一个实施例中,SFU可以包括被配置为执行纹理映射 过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器加载 纹理映射(例如,纹素的2D阵列)并且对纹理映射进行采样以产生经采样 的纹理值,用于在由SM执行的着色器程序中使用。在一个实施例中,纹 理映射被存储在共享存储器/L1高速缓存中。纹理单元实现纹理操作,诸如 使用mip映射(例如,不同细节层次的纹理映射)的过滤操作。在一个实 施例中,每个SM包括两个纹理单元。
每个SM还包括N个LSU,其实现共享存储器/L1高速缓存和寄存器 文件之间的加载和存储操作。每个SM包括将每个功能单元连接到寄存器 文件以及将LSU连接到寄存器文件、共享存储器/L1高速缓存的互连网络。 在一个实施例中,互连网络是交叉开关,其可以被配置为将任何功能单元 连接到寄存器文件中的任何寄存器,以及将LSU连接到寄存器文件和共享 存储器/L1高速缓存中的存储器位置。
共享存储器/L1高速缓存是片上存储器阵列,其允许数据存储和SM 与图元引擎之间以及SM中的线程之间的通信。在一个实施例中,共享存 储器/L1高速缓存包括128KB的存储容量并且在从SM到分区单元的路径 中。共享存储器/L1高速缓存570可以用于高速缓存读取和写入。共享存 储器/L1高速缓存、L2高速缓存和存储器中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型 的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储 器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和 加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存内的集成使 共享存储器/L1高速缓存起到用于流式传输数据的高吞吐量管道的作用, 并且同时提供对频繁重用数据的高带宽和低延迟的访问。
PPU可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、 超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、 数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施 例中,PPU包含在单个半导体衬底上。在另一个实施例中,PPU与一个或 更多个其他器件(诸如附加PPU、存储器62、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包 括在片上系统(SoC)上。
在一个实施例中,PPU可以被包括在图形卡上,图形卡包括一个或更 多个存储器设备62。图形卡可以被配置为与台式计算机的主板上的PCIe 插槽接口。在又一个实施例中,PPU可以是包含在主板的芯片集中的集成 图形处理单元(iGPU)或并行处理器。
示例计算系统
具有多个GPU和CPU的系统被用于各种行业,因为开发者在应用(诸 如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和 超级计算机中部署具有数十至数千个计算节点的高性能GPU加速系统,以 解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传 输机制需要扩展以支持该增加带宽。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯 一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台 也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规 总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件 还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模 块可以被实现为电路板衬底,并且PPU和/或存储器中的每一个可以是封装 器件。在一个实施例中,CPU、交换机和并行处理模块位于单个半导体平 台上。
如图3A所示,提供系统50,其包括连接到通信总线的至少一个中央 处理单元56。通信总线可以使用任何合适的协议来实现,诸如PCI(外围 组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线 或一个或更多个点对点通信协议。系统50还包括主存储器62。控制逻辑(软 件)和数据被存储在主存储器62中,主存储器62可以采取随机存取存储 器(RAM)的形式。
系统50还包括输入设备54、并行处理系统56和显示设备60,即常 规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子 显示器等。可以从输入设备54(例如键盘、鼠标、触摸板、麦克风等)接 收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台 上以形成系统50。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,系统50可以出于通信目的通过网络接口耦合到网络(例如, 电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、 对等网络、电缆网络等)。
系统50还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘 驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动 器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪 存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入 可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器62和/或辅助 存储中。这些计算机程序在被执行时使得系统50能够执行各种功能。存储 器62、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机系统、电路板 系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的 系统的上下文中实现。例如,系统565可以采取台式计算机、膝上型计算 机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、 个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子 设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式系统和/或任 何其他类型的逻辑的形式。
上文提及的所有专利和印刷出版物均通过引用并入本文,如同明确阐 述一样。
虽然已经结合目前被认为是最实用和优选的实施例描述了本发明,但 是应该理解,本发明不限于所公开的实施例,而是相反的,意图是包括在 所附权利要求的精神和范围内的各种修改和等同布置。

Claims (22)

1.一种由耦合到存储器的处理器执行的方法,包括:
(a)不访问存储在存储器中的数据阵列,推断所存储的数据阵列的值局部性特征;以及
(b)响应于推断的值局部性特征,选择性地执行专用执行路径,所述路径避免访问所述所存储的数据阵列的至少一部分。
2.如权利要求1所述的方法,其中,所述专用执行路径选择性地在线程之间共享信息以实现值重用。
3.如权利要求1所述的方法,其中,当高级信息指示所述数据阵列包含已知值时,所述专用执行路径避免对所述数据阵列的访问。
4.如权利要求3所述的方法,其中,所述高级信息至少部分地从描述所述数据阵列的压缩的元数据导出。
5.如权利要求3所述的方法,其中,所述高级信息包括指示值局部性的粗粒度图块映射。
6.如权利要求1所述的方法,其中,所述数据阵列包括表面、纹理和神经网络系数中的至少一个。
7.一种系统,包括:
处理器,所述处理器读取表面存储器压缩信息以构造表面的值局部性映射表示;以及
着色器,所述着色器使用所述值局部性映射表示和专门执行来减少处理所述表面时的动态计算冗余。
8.如权利要求7所述的系统,其中,所述着色器包括响应于由所述值局部性映射指示的值局部性的专用执行路径。
9.如权利要求7所述的系统,其中,所述值局部性映射提供所述表面的每个图块的至少一个位,所述至少一个位指示给定表面图块是否具有值局部性。
10.如权利要求7所述的系统,其中所述值局部性映射为所述表面的每个区域提供多个位,所述多个位指示给定表面图块是否具有多个可能值之一的局部性,并且如果是,则至少一个位模式值与所述每种类型的值局部性和一个位模式相关联,以传达任何这些值的局部性缺失。
11.如权利要求10所述的系统,其中,它们的值局部性映射可以进一步概括为更粗粒度的值局部性映射,以传达粗粒度区域是否包含关于一个或更多个值的值局部性,或者根本没有值,或者如果它包含有和没有值局部性的图块混合。
12.如权利要求7所述的系统,其中,所述着色器基于由所述值局部性映射指示的值局部性来体现表达式重构。
13.如权利要求7所述的系统,其中,所述表面存储器压缩信息存储在所述处理器的L2高速缓存中。
14.如权利要求7所述的系统,其中,所述表面存储器压缩信息包括零带宽清除数据。
15.如权利要求7所述的系统,其中,所述表面存储器压缩信息包括减少压缩数据。
16.如权利要求7所述的系统,其中,所述表面存储器压缩信息包括差分压缩。
17.如权利要求7所述的系统,其中,所述处理器使用驱动器来读取表面存储器压缩信息并构建表面的所述值局部性映射表示。
18.如权利要求7所述的系统,其中所述着色器被编译为使用所述值局部性映射表示来选择性地触发所述专门执行。
19.如权利要求7所述的系统,其中,所述处理器允许通过使用存储器加载操作由用户模式驱动器软件读取存储器压缩信息,以辅助构建所述表面的所述值局部性映射表示。
20.如权利要求7所述的系统,其中,所述过程执行查询图块处理,以将来自不同大小和/或分辨率的表面阵列的值局部性组合成公共值局部性映射表示。
21.如权利要求7所述的系统,其中,所述着色器是多线程的,并且基于所述值局部性映射表示,多个线程共享和重用计算。
22.一种方法,包括:
读取表面存储器压缩信息以构造表面的值局部性映射表示;以及
使用所述值局部性映射表示来减少着色器动态计算冗余。
CN201911201912.4A 2019-05-24 2019-11-29 有效访问存储器和避免不必要的计算的技术 Pending CN111986279A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/422,776 US11069023B2 (en) 2019-05-24 2019-05-24 Techniques for efficiently accessing memory and avoiding unnecessary computations
US16/422,776 2019-05-24

Publications (1)

Publication Number Publication Date
CN111986279A true CN111986279A (zh) 2020-11-24

Family

ID=73052377

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911201912.4A Pending CN111986279A (zh) 2019-05-24 2019-11-29 有效访问存储器和避免不必要的计算的技术

Country Status (3)

Country Link
US (1) US11069023B2 (zh)
CN (1) CN111986279A (zh)
DE (1) DE102020103893A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022110084A1 (zh) * 2020-11-28 2022-06-02 华为技术有限公司 像素处理方法以及图形处理器

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11062507B2 (en) * 2019-11-04 2021-07-13 Apple Inc. Compression techniques for pixel write data
US11636625B2 (en) * 2020-12-11 2023-04-25 Qualcomm Incorporated Image compression and decompression

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7787691B2 (en) * 2006-04-11 2010-08-31 Telefonaktiebolaget Lm Ericsson (Publ) High quality image processing
US8627041B2 (en) * 2009-10-09 2014-01-07 Nvidia Corporation Efficient line and page organization for compression status bit caching
US9734548B2 (en) * 2012-10-26 2017-08-15 Nvidia Corporation Caching of adaptively sized cache tiles in a unified L2 cache with surface compression
KR102477264B1 (ko) * 2015-09-22 2022-12-13 삼성전자주식회사 텍스쳐를 처리하는 방법 및 장치
US10186076B2 (en) * 2016-03-29 2019-01-22 Intel Corporation Per-sample MSAA rendering using comprehension data

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022110084A1 (zh) * 2020-11-28 2022-06-02 华为技术有限公司 像素处理方法以及图形处理器

Also Published As

Publication number Publication date
US20200372603A1 (en) 2020-11-26
DE102020103893A1 (de) 2020-11-26
US11069023B2 (en) 2021-07-20

Similar Documents

Publication Publication Date Title
US11676321B2 (en) Graphics library extensions
US8319784B2 (en) Fast reconfiguration of graphics pipeline state
US11113790B2 (en) Adding greater realism to a computer-generated image by smoothing jagged edges
Seiler et al. Larrabee: a many-core x86 architecture for visual computing
US20200342632A1 (en) Efficient matrix format suitable for neural networks
KR102003655B1 (ko) 그래픽 프로세싱에서 셰도우 레이들에 대한 트리 횡단을 위한 시작 노드 결정
EP1594091B1 (en) System and method for providing an enhanced graphics pipeline
US7692660B2 (en) Guided performance optimization for graphics pipeline state management
US7394464B2 (en) Preshaders: optimization of GPU programs
US20050140669A1 (en) API communications for vertex and pixel shaders
US20130271465A1 (en) Sort-Based Tiled Deferred Shading Architecture for Decoupled Sampling
US10699427B2 (en) Method and apparatus for obtaining sampled positions of texturing operations
CN111986279A (zh) 有效访问存储器和避免不必要的计算的技术
US11501467B2 (en) Streaming a light field compressed utilizing lossless or lossy compression
US10395423B2 (en) Apparatus and method for rendering adaptive mesh refinement (AMR) data
US20210398253A1 (en) Adding greater realism to a computer-generated image by smoothing jagged edges
WO2019204352A1 (en) Improving realism of scenes involving water surfaces during rendering
Sellers et al. Rendering massive virtual worlds
Sander et al. Guest Editor's Introduction to the Special Section on the ACM Symposium on Interactive 3D Graphics and Games (I3D).
Huang Parallelized Ray Casting Volume Rendering and 3D Segmentation with Combinatorial Map
Ohmer Computer vision applications on graphics processing units
Olsson Real-Time Shading and Accurate Shadows Using GPGPU Techniques
Rajagopalan Functionality distribution in graphics

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination