CN113835753A - 用于在纹理处理管线中执行加速的点采样的技术 - Google Patents

用于在纹理处理管线中执行加速的点采样的技术 Download PDF

Info

Publication number
CN113835753A
CN113835753A CN202110690974.7A CN202110690974A CN113835753A CN 113835753 A CN113835753 A CN 113835753A CN 202110690974 A CN202110690974 A CN 202110690974A CN 113835753 A CN113835753 A CN 113835753A
Authority
CN
China
Prior art keywords
texture
memory
unit
instruction
determination
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
CN202110690974.7A
Other languages
English (en)
Inventor
M·费特曼
S·加德雷
M·格布哈特
S·J·海因里希
R·扬德雅拉
W·纽霍尔
O·帕兰杰佩
S·佩斯卡多尔
P·拉奥
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 CN113835753A publication Critical patent/CN113835753A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping

Abstract

本发明公开了一种用于在纹理处理管线中执行加速的点采样的技术。图形处理单元中的纹理处理管线为计算机生成的场景中的对象生成表面外观。在所述纹理处理管线内的多个阶段,该纹理处理管线确定是否可以以加速的速率处理纹理操作和纹理加载。在包括决策点的每个阶段,所述纹理处理管线假定可以加速当前纹理操作或纹理加载,除非特定的、已知的信息表明无法加速纹理操作或纹理加载。结果,相对于未被加速的纹理操作和纹理加载的数量,所述纹理处理管线增加了被加速的纹理操作和纹理加载的数量。

Description

用于在纹理处理管线中执行加速的点采样的技术
技术领域
各种实施例通常涉及并行处理架构,更具体地,涉及用于在纹理处理管线中执行加速的点采样的技术。
背景技术
图形处理单元(GPU)被使用以为各种应用程序生成三维(3D)图形对象和二维(2D)图形对象,其包括故事片、计算机游戏、虚拟现实(VR)和增强型现实(AR)体验、机械设计等。现代GPU包括纹理处理硬件,以生成用于3D图形场景中的3D对象的表面外观(在本文中被称为“表面纹理”)。纹理处理硬件通过“包裹(wrapping)”3D对象周围适当的表面纹理来将表面外观应用于3D对象。生成表面纹理并将其应用于3D对象的过程可为3D图形场景中的那些3D对象提供高度逼真的外观。
纹理处理硬件被配置为执行各种与纹理有关的指令,包括纹理操作和纹理加载。纹理处理硬件通过生成对纹理存储器的存储器引用(在本文中被称为“查询”)来生成访问纹理信息。纹理处理硬件在变化的情况下,例如在3D图形场景中渲染对象表面以在显示设备上显示时,在渲染2D图形场景时或在计算操作期间,从纹理存储器中检索表面纹理信息。
表面纹理信息包括用于对3D图形场景中的对象表面进行纹理化或着色的纹理元素(在本文中被称为“纹理像素(texel)”)。优化了纹理处理硬件和相关联的纹理高速缓存,以实现高效、高吞吐量的只读访问,以在图形渲染期间支持对纹理信息的高要求,而很少或不支持写操作。此外,纹理处理硬件包括用于执行各种纹理操作的专用功能单元,例如细节水平(LOD)计算、纹理采样和纹理滤波。
通常,纹理操作涉及查询3D空间中特定兴趣点周围的多个纹理像素,并且然后执行各种滤波和插值操作以确定该兴趣点的最终颜色。相反,纹理加载通常查询单个纹理像素,并将其直接返回给用户应用程序以进行进一步处理。因为滤波和插值操作通常涉及每个处理线程查询四个或更多个纹理像素,所以通常构造纹理处理硬件以适应每个线程生成多个查询。例如,纹理处理硬件可以被构建为在单个存储周期中容纳多达四个纹理存储器查询。以这种方式,纹理处理硬件能够在一个存储周期中查询和接收大多数或所有所需的纹理信息。
这种用于查询纹理存储器的方法的缺点为,当将纹理处理硬件用于纹理加载时,在单个存储周期中仅执行四个可能的纹理存储器查询之一。结果,在纹理加载期间仅利用了纹理处理硬件的四分之一的存储器访问能力。此外,某些纹理操作(在本文中被称为点采样的纹理操作)仅需要在给定的存储周期中执行一个或两个纹理存储器查询,因此仅利用了纹理处理硬件的四分之一到二分之一的存储器访问能力。当GPU执行纹理加载和点采样的纹理操作时,纹理处理硬件的这种未充分利用会导致效率和性能下降。
如前所述,本领域中需要的是用于在图形处理单元中查询纹理信息的更有效的技术。
发明内容
本公开内容的各种实施例阐述了用于访问图形处理单元中的纹理存储器的计算机实现的方法。该方法包括在纹理处理管线的第一阶段,生成纹理存储器查询在纹理处理管线内有资格进行加速的第一确定。该方法还包括基于第一确定,使纹理存储器查询进行到纹理处理管线中的第二阶段。该方法还包括在纹理处理管线中的第二阶段处,生成纹理存储器查询在纹理处理管线内有资格进行加速的第二确定。该方法还包括基于第一确定和第二确定中的至少一个在纹理处理管线内处理纹理存储器查询。
其他实施例包括但不限于实现所公开技术的一个或更多个方面的系统,以及包括用于执行所公开技术的一个或更多个方面的指令的一个或更多个计算机可读介质。
相对于现有技术,所公开技术的至少一个技术优势在于,利用所公开的技术,在纹理加载期间和简单的纹理操作期间使用了更大百分比的纹理存储器访问能力。结果,相对于现有方法,在纹理加载和纹理操作期间,提高了纹理处理硬件的效率和性能。所公开技术的另一技术优势是纹理处理硬件包括多个阶段,其用于确定是否可以更有效地使用纹理处理硬件的存储器访问能力。结果,相对于仅在纹理处理硬件的单个阶段进行该确定的方法,更多数量的纹理加载和纹理操作能够利用所公开的技术。这些优势表示相对于现有技术方法的一项或更多项技术改进。
附图说明
为了可以详细理解各个实施例的上述特征的方式,可以通过参考各种实施例来对以上简要概述的发明构思进行更详细的描述,其中在附图中示出了一些实施例。然而,应注意,附图仅示出了本发明构思的典型实施例,因此不应视为以任何方式限制范围,并且还有其他等效的实施例。
图1是被配置为实现各种实施例的一个或更多个方面的计算机系统的框图;
图2是根据各种实施例的、包括在图1的并行处理子系统中的并行处理单元(PPU)的框图;
图3A是根据各种实施例的、包括在图2的并行处理单元中的通用处理集群的框图;
图3B是根据各种实施例的、可以在图2的并行处理单元内实现的图形处理管线的概念图;
图4是根据各种实施例的、可以配置图3A的通用处理集群内的纹理单元来实现的纹理处理管线的概念图;以及
图5是根据各种实施例的、用于在纹理处理管线中执行存储器访问操作的方法步骤的流程图。
具体实施方式
在下面的描述中,阐述了许多具体细节以提供对各种实施例的更透彻的理解。然而,对于本领域技术人员将显而易见的是,可以在没有一个或更多个这些具体细节中的情况下实践本发明构思。
系统总览
图1是被配置为实现各个实施例的一个或更多个方面的计算机系统100的框图。如图所示,计算机系统100包括但不限于中央处理单元(CPU)102和经由存储器桥105和通信路径113耦合到并行处理子系统112的系统存储器104。存储器桥105还经由通信路径106耦合到I/O(输入/输出)桥107,并且I/O桥107反过来又耦合到交换机116。
在操作中,I/O桥107被配置为从诸如键盘或鼠标之类的输入设备108接收用户输入信息,并将输入信息转发给CPU 102,以经由通信路径106和存储器桥105进行处理。交换机116被配置为在I/O桥107和计算机系统100的其他组件(例如,网络适配器118和各种附加卡120和121)之间提供连接。
同样如图所示,I/O桥107耦合到系统磁盘114,该系统磁盘114可被配置为存储内容和应用程序以及数据,以供CPU 102和并行处理子系统112使用。通常,系统磁盘114提供用于应用程序和数据的非易失性存储,并且可能包括固定或可移动的硬盘驱动器、闪存设备以及CD-ROM(光盘只读存储器)、DVD-ROM(数字通用光盘-ROM)、蓝光、HD-DVD(高清DVD)或其他磁性、光学或固态存储器设备。最后,尽管未明确示出,但是诸如通用串行总线或其他端口连接、光盘驱动器、数字通用光盘驱动器、胶片记录设备等的其他组件也可以连接至I/O桥107。
在各个实施例中,存储器桥105可以是北桥芯片,并且I/O桥107可以是南桥芯片。另外,可以使用任何技术上合适的协议来实现通信路径106和113以及计算机系统100内的其他通信路径,包括但不限于AGP(加速图形端口)、超传输(HyperTransport)或本领域已知的任何其他总线或点对点通信协议。
在一些实施例中,并行处理子系统112包括将像素传送到显示设备110的图形子系统,该显示设备可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等。在这样的实施例中,并行处理子系统112包括为图形和视频处理而优化的电路,例如包括视频输出电路。如下面在图2中更详细描述的,可以在并行处理子系统112内包括的一个或更多个并行处理单元(PPU)中包括这样的电路。在其他实施例中,并行处理子系统112包括为通用和/或计算处理而优化的电路。再者,可以在并行处理子系统112中包括的一个或更多个PPU中包括这样的电路,该PPU被配置为执行这种通用和/或计算操作。在其他实施例中,并行处理子系统112中包括的一个或更多个PPU可以被配置为执行图形处理操作、通用处理操作和计算处理操作。系统存储器104包括至少一个设备驱动器103,其被配置为管理并行处理子系统112内的一个或更多个PPU的处理操作。
在各个实施例中,并行处理子系统112可以与图1的一个或更多个其他元件集成在一起以形成单个系统。例如,并行处理子系统112可以与CPU 102以及其他连接电路集成在单个芯片上,以形成片上系统(SoC)。
应当理解的是,本文所示的系统是示例性的,并且可以进行各种变化和修改。可以根据需要修改连接拓扑,其包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量。例如,在一些实施例中,系统存储器104可以直接连接到CPU 102,而不是通过存储器桥105连接到CPU 102,并且其他设备将经由存储器桥105和CPU 102与系统存储器104通信。在其他替代拓扑中,并行处理子系统112可以连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。在其他实施例中,I/O桥107和存储器桥105可以集成到单个芯片中,而不是作为一个或更多个分立(discrete)设备存在。最后,在某些实施例中,可能不存在图1所示的一个或更多个组件。例如,可以省去交换机116,并且网络适配器118和附加卡120、121将直接连接到I/O桥107。
图2是根据各种实施例的、包括在图1的并行处理子系统112中的并行处理单元(PPU)202的框图。尽管图2描述了一个PPU 202,但是如上所述,并行处理子系统112可以包括任意数量的PPU 202。如图所示,PPU 202耦合到本地并行处理(PP)存储器204。PPU 202和PP存储器204可以是使用一个或更多个集成电路设备(例如可编程处理器、专用集成电路(ASIC)或存储器设备)或以任何其他技术上可行的方式来实现。
在一些实施例中,PPU 202包括图形处理单元(GPU),其可以被配置为实现图形渲染管线,以基于由CPU 102和/或系统存储器104提供的图形数据来执行与生成像素数据有关的各种操作。当处理图形数据时,PP存储器204可以被用作图形存储器,该图形存储器存储一个或更多个常规帧缓冲器,并且如果需要的话还存储一个或更多个其他渲染目标。其中,PP存储器204可用于存储和更新像素数据并将最终的像素数据或显示帧传送到显示设备110以进行显示。在一些实施例中,PPU 202还可以被配置用于通用处理和计算操作。
在操作中,CPU 102是计算机系统100的主处理器,其用于控制和协调其他系统组件的操作。特别地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102将用于PPU 202的命令流写入数据结构(在图1或图2中未明确示出),该数据结构可以位于系统存储器104、PP存储器204或CPU 102和PPU 202均可访问的另一个存储位置。将指向数据结构的指针写入推送缓冲区(pushbuffer),以启动对数据结构中命令流的处理。PPU 202从推送缓冲区中读取命令流,并且然后相对于CPU 102的操作异步地执行命令。在生成多个推送缓冲区的实施例中,可以由应用程序经由设备驱动器103为每个推送缓冲区指定执行优先级,以控制不同推送缓冲区的调度。
还如图所示,PPU 202包括I/O(输入/输出)单元205,其经由通信路径113和存储器桥105与计算机系统100的其余部分通信。I/O单元205生成数据包(或其他信号)以在通信路径113上传输,并且还从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包导向到PPU 202的适当组件。例如,与处理任务有关的命令可以被导向到主机接口206,而与存储器操作(例如,从PP存储器204中读取或写入到PP存储器中)有关的命令可以被导向到交叉开关单元210。主机接口206读取每个推送缓冲区并将存储在推送缓冲区中的命令流发送到前端212。
如以上结合图1所述,PPU 202与计算机系统100的其余部分的连接可以改变。在一些实施例中,包括至少一个PPU 202的并行处理子系统112被实现为可以插入计算机系统100的扩展槽中的附加卡。在其他实施例中,PPU 202可以与诸如存储器桥105或I/O桥107之类的总线桥一起集成在单个芯片上。同样,在其他实施例中,PPU 202的某些或全部元件可以与CPU 102一起被包括在单个集成电路或芯片系统(SoC)中。
在操作中,前端212将从主机接口206接收的处理任务发送到任务/工作单元207内的工作分发单元(未示出)。工作分发单元接收被编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。TMD的指针被包括在命令流中,该命令流存储为推送缓冲区,并由前端单元212从主机接口206接收。可被编码为TMD的处理任务包括与将处理的数据相关联的索引以及定义数据如何将被处理的状态参数和命令。例如,状态参数和命令可以定义将在数据上执行的程序。任务/工作单元207从前端212接收任务,并确保在启动每个TMD所指定的处理任务之前,将GPC 208配置为有效状态。可以为用于调度处理任务的执行的每个TMD指定优先级。还可以从处理集群阵列230接收处理任务。可选地,TMD可以包括控制TMD是否被添加到处理任务列表(或添加到处理任务的指针列表)的开头或结尾的参数,从而提供了对执行优先级的另一级控制。
PPU 202有利地基于处理集群阵列230实现高度并行处理架构,该处理集群阵列230包括一组C个通用处理集群(GPC)208,其中C≥1。每个GPC 208能够同时执行大量(例如,成百上千个)线程,其中每个线程都是程序的实例。在各种应用程序中,可以分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。GPC 208的分配可以根据每种类型的程序或计算所产生的工作量而变化。
存储器接口214包括一组D个分区单元215,其中D≥1。每个分区单元215耦合到驻留在PPM存储器204中的一个或更多个动态随机存取存储器(DRAM)220。在一个实施例中,分区单元215的数量等于DRAM 220的数量,并且每个分区单元215耦合到不同的DRAM 220。在其他实施例中,分区单元215的数量可以与DRAM 220的数量不同。本领域技术人员将理解的是,可以将DRAM 220替换为任何其他技术上合适的存储器设备。在操作中,可以在DRAM 220中存储各种渲染目标,例如纹理映射和帧缓冲区,从而允许分区单元215并行写入每个渲染对象的部分,以有效地使用PP存储器204的可用带宽。
给定的GPC 208可以处理要写入PP存储器204中的任何DRAM 220的数据。交叉开关单元(Crossbar unit)210被配置为将每个GPC 208的输出路由到任何分区单元215的输入或路由到任何其他GPC 208以进行进一步处理。GPC 208经由交叉开关单元210与存储器接口214通信以从各种DRAM 220读取或写入到各种DRAM 220。在一个实施例中,除了经由存储器接口214与PP存储器204的连接之外,交叉开关单元210还具有与I/O单元205的连接,从而使不同GPC 208内的处理核心能够与系统存储器104或与PPU 202不在本地的其他存储器进行通信。在图2的实施例中,交叉开关单元210与I/O单元205直接连接。在各种实施例中,交叉开关单元210可以使用虚拟信道来分离GPC 208和分区单元215之间的业务流。
同样,GPC 208可以被编程以执行与各种各样的应用程序有关的处理任务,包括但不限于线性和非线性数据变换、视频数据和/或音频数据的过滤、建模操作(例如,应用物理定律确定对象的位置、速度和其他属性)、图像渲染操作(例如,曲面细分着色器、顶点着色器、几何着色器和/或像素/片段着色器程序)、常规计算操作等。在操作中,PPU 202被配置为将数据从系统存储器104和/或PP存储器204传输到一个或更多个片上存储器单元,处理该数据并将结果数据写回到系统存储器104和/或PP存储器204。然后可以由其他系统组件访问结果数据,其他组件包括CPU 102、并行处理子系统112中的另一个PPU 202或计算机系统100中的另一个并行处理子系统112。
如上所述,并行处理子系统112中可以包括任意数量的PPU 202。例如,可以在单个附加卡上提供多个PPU 202,或者可以将多个附加卡连接到通信路径113,或者PPU 202中的一个或更多个可以被集成到桥芯片中。多PPU系统中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理核心和/或不同数量的PP存储器204。在存在多个PPU 202的实施中,这些PPU可以并行运行,以比单个PPU 202可能更高的吞吐量来处理数据。包含一个或更多个PPU 202的系统可以以多种配置和形式因素来实现,包括但不限于台式机、笔记本电脑、手持式个人计算机或其他手持式设备、服务器、工作站、游戏机、嵌入式系统等。
图3A是根据各种实施例的、包括在图2的并行处理单元202中的通用处理集群208的框图。在操作中,GPC 208可以被配置为并行执行大量线程以执行图形操作、通用处理操作和/或计算操作。如本文所使用的,“线程”是指在特定的输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发布技术用于支持大量线程的并行执行,而无需提供多个独立指令单元。在其他实施例中,使用被配置为向GPC 208中的一组处理引擎发出指令的通用指令单元,单指令、多线程(SIMT)技术被用于支持并行执行大量通常同步的线程。与所有处理引擎通常执行相同指令的SIMD执行机制不同,SIMT执行允许不同的线程更容易地通过给定程序遵循不同的执行路径。本领域普通技术人员将理解的是,SIMD处理机制代表SIMT处理机制的功能子集。
GPC 208的操作经由管线管理器305控制,管线管理器305将从任务/工作单元207内的工作分发单元(未示出)接收的处理任务分发给一个或更多个流式多处理器(SM)310。管线管理器305也可以被配置为通过指定由SM 310输出的处理数据的目的地,来控制工作分发交叉开关330。
在一个实施例中,GPC 208包括一组M个SM 310,其中M≥1。此外,每个SM 310包括一组功能执行单元(未示出),例如执行单元和加载存储单元。可以对特定于任何功能执行单元的处理操作进行管线处理(pipeline),这使得能够在前一条指令完成执行之前发出新指令以执行。可以提供给定SM 310内的功能执行单元的任何组合。在各种实施例中,功能执行单元可以被配置为支持各种不同的操作,包括整数和浮点算术(例如,加法和乘法)、比较操作、布尔运算(AND、OR、XOR)、位移位和各种代数函数(例如,平面插值和三角函数、指数函数和对数函数等)的计算。有利的是,相同的功能执行单元可以被配置来执行不同的操作。
在操作中,每个SM 310被配置为处理一个或更多个线程组。如本文所使用的,“线程组”或“线程束(warp)”是指在不同的输入数据上同时执行相同程序的一组线程,该组中的一个线程被分配给SM 310内的不同执行单元。线程组可包括比SM 310中的执行单元的数量更少的线程,在这种情况下,在该线程组正被处理的周期内,某些执行可能是闲置的。线程组还可以包括比SM 310中的执行单元的数量更多的线程,在这种情况下,处理可以在连续的时钟周期内进行。由于每个SM 310可以同时支持多达G个线程组,因此可以在任何给定时间在GPC 208中执行多达G*M个线程组。
另外,多个相关线程组可以在SM 310中同时处于活动状态(处于不同的执行阶段)。线程组的此集合在本文中被称为“合作线程数组”(“CTA”)或“线程数组”。特定CTA的大小等于m*k,其中k是线程组中同时执行的线程的数量,通常是SM 310中执行单元数的整数倍,而m是在SM 310中同时处于活动状态的线程组的数量。
尽管未在图3A中示出,但是每个SM 310都包含一级(L1)高速缓存,或者使用SM310外部的相应L1高速缓存中的空间除了其他之外还支持由执行单元执行的加载操作和存储操作。每个SM 310还可以访问在PPU 202中的所有GPC 208之间共享的二级(L2)高速缓存(未示出)。L2高速缓存可以用于在线程之间传输数据。最终,SM 310也可以访问片外“全局”存储器,其可以包括PP存储器204和/或系统存储器104。需要理解的是,PPU 202外部的任何存储器都可以用作全局存储器。此外,如图3A所示,一点五级(L1.5)高速缓存335可被包括在GPC 208中,并被配置为接收和保存SM 310经由存储器接口214由存储器请求的数据。这些数据包括但不限于指令、统一数据和常量数据。在具有GPC 208内的多个SM 310的实施例中,SM 310可以有益地共享在L1.5高速缓存335中高速缓存的公共指令和数据。
每个GPC 208可以具有相关联的存储器管理单元(MMU)320,该存储器管理单元被配置为将虚拟地址映射为物理地址。在各种实施例中,MMU 320可以存在于GPC 208内或在存储器接口214内。MMU 320包括一组页表项(PTE),其用于将虚拟地址映射到瓦片(tile)或存储器页的物理地址以及可选地将虚拟地址映射到高速缓存行索引。MMU 320可以包括地址转换后备缓冲区(TLB)或可以存在于SM 310中、一个或更多个L1高速缓存中或GPC 208中的高速缓存。
在图形和计算应用程序中,GPC 208可以被配置为使每个SM 310耦合到纹理单元315,以除其他之外还执行纹理加载和纹理操作(例如,确定纹理样本位置、读取纹理数据和滤波纹理数据)。
在操作中,每个SM 310将处理后的任务发送到工作分发交叉开关330,以便将处理后的任务提供给另一个GPC 208以进行进一步处理,或者经由交叉开关单元210将处理后的任务存储在L2高速缓存(未示出)、并行处理存储器204或系统存储器104中。此外,光栅前操作(preROP)单元325被配置为从SM 310接收数据,将数据导向至分区单元215中的一个或更多个光栅操作(ROP)单元,执行颜色混合的优化,组织像素颜色数据以及执行地址转换。
应该理解的是,本文描述的核心架构是示例性的,并且可以进行变化和修改。除了其他之外,GPC 208内可以包括任意数量的处理单元(例如SM 310)、纹理单元315或preROP单元325。此外,如上所述并结合图2,PPU 202可以包括任意数量的GPC 208,其被配置为在功能上彼此相似,使得执行行为不取决于哪个GPC 208接收特定的处理任务。此外,每个GPC208独立于PPU 202中的其他GPC 208而操作以执行针对于一个或更多个应用程序的任务。鉴于前述内容,本领域普通技术人员将理解,图1-图3A中描述的架构绝不限制本公开内容的范围。
图形管线架构
图3B是根据各种实施例的、可以在图2的并行处理单元202内实现的图形处理管线350的概念图。如图所示,图形处理管线350包括但不限于基元分发器(PD)355;顶点属性获取单元(VAF)360;顶点、曲面细分(tessellation)、几何处理单元(VTG)365;视口缩放、剔除(cull)和修剪(clip)单元(VPC)370;拼接(tiling)单元375、设置单元(设置)380、光栅化器(光栅)385;片段处理单元(也被称为像素着色单元(PS))390和光栅操作单元(ROP)395。
PD 355从前端212收集与高阶表面、图形基元等相关联的顶点数据,并将该顶点数据发送到VAF 360。
VAF 360从共享存储器中检索与每个进入的顶点相关联的顶点属性,并将顶点数据以及相关联的顶点属性一起存储到共享存储器中。
VTG 365是可编程执行单元,其被配置为执行顶点着色器程序、曲面细分程序和几何程序。这些程序处理从VAF 360接收到的顶点数据和顶点属性,并在生成图形基元以及图形基元颜色值、表面法线矢量和每个顶点处的透明度值,以在图形处理管线350中进行进一步处理。尽管未明确显示,但在某些实施例中,VTG 365可以包括一个或更多个顶点处理单元、曲面细分初始化处理单元、任务生成单元、任务分发器、拓扑生成单元、曲面细分处理单元和几何处理单元。
VTG 365中的顶点处理单元是可编程执行单元,其被配置为执行顶点着色器程序、照亮和变换由顶点着色器程序指定的顶点数据。例如,顶点处理单元可以被编程为将顶点数据从基于对象的坐标表示(对象空间)变换为基于替代的坐标系统(例如,自然空间或标准化设备坐标(NDC)空间)。顶点处理单元可以读取由VAF存储在共享存储器中的顶点数据和顶点属性,并且可以处理顶点数据和顶点属性。顶点处理单元415将处理后的顶点存储在共享存储器中。
VTG 365中的曲面细分初始化处理单元是可编程执行单元,其被配置为执行曲面细分初始化着色器程序。曲面细分初始化处理单元处理由顶点处理单元产生的顶点,并生成被称为补丁(patch)的图形基元。曲面细分初始化处理单元还生成各种补丁属性。然后,曲面细分初始化处理单元将补丁数据和补丁属性存储在共享存储器中。在一些实施例中,曲面细分初始化着色器程序可以被称为外壳着色器或曲面细分控制着色器。
VTG 365中的任务生成单元从共享存储器中获取顶点和补丁的数据和属性。任务生成单元生成用于处理顶点和补丁的任务,以供图形处理管线350中的后期阶段处理。VTG365中的任务分发器重新分发由任务生成单元产生的任务。由顶点着色器程序和曲面细分初始化程序的各种实例产生的任务,可以在一个图形处理管线350与另一个图形处理管线350之间显着变化。任务分发器重新分发这些任务,以使每个图形处理管线350在后续管线阶段中具有大约相同的工作负载。
VTG 365中的拓扑生成单元检索由任务分发器分发的任务。拓扑生成单元对顶点(包括与补丁相关联的顶点)进行索引,并计算曲面细分顶点的(U,V)坐标以及将曲面细分顶点连接以形成图形图元的索引。然后,拓扑生成单元将索引的顶点存储在共享存储器中。
VTG 365中的曲面细分处理单元是可编程执行单元,其被配置为执行曲面细分着色器程序。曲面细分处理单元从共享存储器读取输入数据并将输出数据写入共享存储器。共享存储器中的该输出数据被传递到下一个着色器阶段(几何处理单元445)作为输入数据。在一些实施例中,曲面细分着色器程序可以被称为域着色器或曲面细分评估着色器。
VTG 365中的几何处理单元是可编程执行单元,其被配置为执行几何着色器程序,从而变换图形基元。顶点被分组以构造用于处理的图形基元,其中图形基元包括三角形、线段、点等。例如,几何处理单元可以被编程为将图形基元细分为一个或更多个新的图形基元,并计算用于光栅化新的图形基元的参数,例如平面方程系数。
VTG 365中的几何处理单元将指定新的图形基元的参数和顶点发送到VPC 370。几何处理单元可以读取存储在共享存储器中的数据,以用于处理几何数据。VPC 370执行修剪、剔除、透视校正和视口变换,以确定哪些图形基元在最终渲染的图像中潜在可见的,以及哪些图形基元是潜在不可见的。然后,VPC 370将处理后的图形基元发送到拼接单元375。
拼接单元375是存在于自然空间管线352和屏幕空间管线354之间的图形基元排序引擎,如本文中进一步描述的。图形基元在自然空间管线352中被处理,并且然后被发送到拼接单元375。屏幕空间被划分为高速缓存瓦片,其中每个高速缓存瓦片与屏幕空间的一部分相关联。对于每个图形基元,拼接单元375识别与图形基元相交的高速缓存瓦片的集合,该过程在本文中称为“拼接”。在拼接一定数量的图形基元之后,拼接单元375基于高速缓存瓦片处理图形基元,其中将与特定的高速缓存瓦片相关联的图形基元发送到设置单元380。拼接单元375将图形基元一次一个高速缓存瓦片发送到设置单元380。与多个高速缓存瓦片相交的图形基元通常在自然空间管线352中被处理一次,但然后多次被发送到屏幕空间管线354。
这样的技术在屏幕空间管线354中的处理期间改善了高速缓存存储器的局部性(locality),其中与第一高速缓存瓦片相关联的多个存储器操作访问L2高速缓存的区域或任何其他技术上可行的高速缓存存储器,该区域可以在第一高速缓瓦片的屏幕空间处理期间保持驻留。一旦与第一高速缓存瓦片相关联的图形基元由屏幕空间管线354处理,则与第一高速缓存瓦片相关联的L2高速缓存的部分就可以被清除(flush),并且拼接单元可以发送与第二高速缓瓦片相关联的图形基元。然后,与第二高速缓存瓦片相关联的多个存储器操作可以访问L2高速缓存的区域,该区域在第二高速缓存瓦片的屏幕空间处理期间可以保持驻留。因此,可以减少到L2高速缓存和到渲染目标的总存储流量。在一些实施例中,自然空间计算对于给定的图形基元仅执行一次,而与屏幕空间中与图形基元相交的高速缓存瓦片的数量无关。
设置单元380经由拼接单元375从VPC 370接收顶点数据,并计算与图形基元相关联的参数,包括但不限于边缘方程、局部平面方程和深度平面方程。然后,设置单元380将处理后的图形基元发送到光栅化器385。
光栅化器385扫描转换新的图形基元,并将片段和覆盖数据发送到像素着色单元390。另外,光栅化器385可被配置为执行z剔除和其他基于z的优化。
像素着色单元390是可编程执行单元,其被配置为执行片段着色器程序,如片段着色器程序所指定的那样,转换从光栅化器385接收的片段。片段着色器程序可以以像素级粒度对片段进行着色,其中此类着色器程序可以被称为像素着色器程序。可替代地,片段着色器程序可以以样本级粒度对片段进行着色,其中每个像素包括多个样本,并且每个样本代表像素的一部分。可替代地,片段着色器程序可以根据编程的采样率以任何其他技术上可行的粒度对片段进行着色。
在各个实施例中,片段处理单元460可以被编程为执行诸如透视校正、纹理映射、着色、混合等的操作,以产生被发送到ROP 395的着色片段。像素着色单元390可以读取存储在共享存储器中的数据。
ROP 395是执行诸如模版(stencil)、z测试、混合等的光栅操作的处理单元,并且将像素数据作为处理后的图形数据发送以经由存储器接口214存储在图形存储器中,其中图形存储器通常被构造为一个或更多个渲染目标。可以将处理后的图形数据存储在图形存储器、并行处理存储器204或系统存储器104中,以在显示设备110上显示或由CPU 102或并行处理子系统112进行进一步处理。在一些实施例中,ROP 395被配置为压缩被写入存储器的z数据或颜色数据,并解压缩从存储器读取的z数据或颜色数据。在各种实施例中,ROP395可以位于存储器接口214中、在GPC 208中、在GPC之外的处理集群阵列230中或者在PPU202内的单独的单元(未示出)中。
图形处理管线350可以由PPU 202内的任何一个或更多个处理元件来实现。例如,图3A中的SM 310之一可以被配置为执行VTG 365和像素着色单元390中的一个或更多个的功能。PD 355、VAF 360、VPC 450、拼接单元375、设置单元380、光栅化器385和ROP 395的功能也可以结合对应的分区单元215通过特定GPC 208中的处理元件来执行。可替代地,可以使用针对上面列出的一个或更多个功能的专用固定功能处理元件来实现图形处理管线350。在各种实施例中,PPU 202可以被配置为实现一个或更多个图形处理管线350。
在一些实施例中,图形处理管线350可以分为自然空间管线352和屏幕空间管线354。自然空间管线352处理3D空间中的图形对象,其中每个图形对象的位置相对其他图形对象以及相对于3D坐标系是已知的。屏幕空间管线354处理已经从3D坐标系投影到代表显示设备110的表面的2D平面上的图形对象。例如,自然空间管线352可以包括从PD 355到VPC370的图形处理管线350中的管线阶段。屏幕空间管线354可以包括从设置单元380到ROP395的图形处理管线350中的管线阶段。拼接单元375将跟随自然空间管线352的最后阶段(即VPC 370)。拼接单元375将位于屏幕空间管线354的第一阶段(即设置单元380)之前。
在一些实施例中,自然空间管线352可以进一步分为阿尔法(alpha)相管线和贝塔(beta)相管线。例如,阿尔法相管线可以包括从PD 355到任务生成单元的图形处理管线350中的管线阶段。贝塔相管线可以包括从拓扑生成单元到VPC 370的图形处理管线350中的管线阶段。图形处理管线350在阿尔法相管线中的处理期间中执行第一组操作,并在贝塔相管线中的处理期间中执行第二组操作。如本文所使用的,一组操作被定义为由单个线程、由线程组或由多个线程组统一执行的一个或更多个指令。
在具有多个图形处理管线350的系统中,可以划分与一组图形对象相关联的顶点数据和顶点属性,以使每个图形处理管线350在整个阿尔法阶段具有大致相同的工作量。阿尔法相处理可能会大大扩展顶点数据和顶点属性的数量,从而使任务生成单元产生的顶点数据和顶点属性的数量明显大于由PD 355和VAF 360处理的顶点数据和顶点属性的数量。此外,即使在两个图形处理管线350在阿尔法相管线的开始处处理相同数量的属性的情况下,与一个图形处理管线350相关联的任务生成单元相比于与另一个图形处理管线350相关联的任务生成单元可以产生明显更多数量的顶点数据和顶点属性。在这样的情况下,任务分发器重新分发由阿尔法相管线产生的属性,使得每个图形处理管线350在贝塔相管线的开始处具有近似相同的工作负载。
请注意,如本文所使用,对共享存储器的引用可以包括任何一种或更多种技术上可行的存储器,包括但不限于由一个或更多个SM 310共享的本地存储器或可经由存储器接口214访问的存储器,例如高速缓冲存储器、并行处理存储器204或系统存储器104。还应注意的是,如本文所使用,对高速缓冲存储器的引用可以包括任何一个或更多个技术上可行的存储器,包括但不限于L1高速缓存、L1.5高速缓存以及L2高速缓存。
应用本文公开的一种或更多种技术生成的图像可以显示在监视器或其他显示设备上。在一些实施例中,显示设备可以直接耦合到生成或渲染图像的系统或处理器。在其他实施例中,显示设备可以例如经由网络间接地耦合到系统或处理器。此类网络的示例包括因特网、移动电信网络、WIFI网络以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,由系统或处理器生成的图像可以通过网络流传输到显示设备。这种流传输允许例如在服务器上或在数据中心中执行渲染图像的视频游戏或其他应用程序,并且渲染的图像将在一个或更多个用户设备(例如,计算机、视频游戏控制台、智能手机、其他移动设备等)上传输和显示,该一个或更多个用户设备与服务器或数据中心物理上分开。因此,本文公开的技术可以应用于增强被流传输的图像,并增强流传输图像的服务,例如NVIDIAGeForceNow(GFN)、Google Stadia等。
此外,应用本文公开的一种或更多种技术生成的图像可以用于训练、测试或证明用于识别现实世界中的对象和环境的深度神经网络(DNN)。这样的图像可以包括道路、工厂、建筑物、城市环境、农村环境、人类、动物以及任何其他物理对象或真实世界设定的场景。这样的图像可以用于训练、测试或证明在机器或机器人中使用的DNN,以操纵、处理或修改现实世界中的物理对象。此外,此类图像可用于训练、测试或证明在自动驾驶车辆中使用的DNN,以在整个现实世界中导航和移动车辆。另外,应用本文公开的一种或更多种技术生成的图像可以用于向这些机器、机器人和车辆的用户传达信息。
用于纹理操作和纹理加载的纹理存储器查询
图4是根据各种实施例的、可以配置图3A的通用处理集群208内的纹理单元315来实现的纹理处理管线400的概念图。如图所示,纹理处理管线400包括纹理输入/输出(TEXIO)单元402、纹理输入(TEXIN)单元404、细节水平(LOD)单元406、采样控制和地址单元408、标签单元410、未命中处理单元412、数据先进先出存储器(FIFO)414、数据单元416、滤波器权重单元418、滤波器权重FIFO 420、滤波器和返回单元422以及加速的点采样(APS)旁路FIFO 424。
如本文所述,纹理是由像素组成并存储在纹理存储器中的2D图片或图像。纹理中包括的像素在本文中被称为“纹理像素”。纹理像素还具有标识纹理像素在纹理中哪里的位置(position)或定位(location)。例如,纹理中第三行的第二列中的纹理像素的位置为(2,3)。在纹理中,纹理像素的列号在本文中被称为“u坐标”,而纹理像素的行号在本文中被称为“v坐标”。当位置表示为一对整数值时,该位置标识纹理中的单个纹理像素。应用程序执行纹理指令,这些指令访问纹理存储器中的一个或更多个纹理像素。这样的纹理指令包括纹理操作和纹理加载,现在对其进行描述。
纹理操作基于纹理中的一个或更多个像素执行计算。通常,纹理操作包括浮点数以描述在纹理中的位置,例如(2.4,3.6)。表示为一对浮点或其他非整数值的位置是在四个纹理像素的范围内。例如,位置(2.4,3.6)将在位于(2,3)、(3,3)、(2,4)和(3,4)的四个纹理像素的范围内。结果,针对(2.4,3.6)位置的纹理操作将检索这四个纹理像素,在四个纹理像素位置执行颜色值的加权平均值,并且然后基于该加权平均值计算最终颜色。在一些实施例中,某些滤波功能可以每个线程访问四个以上的纹理像素。例如,16x三线性各向异性滤波,每个线程最多可以访问高达128个纹理像素。加权平均值可以是任何技术上可行的操作,包括但不限于双线性插值、三线性插值和各种滤波操作。反过来,执行纹理操作的应用程序将基于四个纹理像素的加权平均值接收单个颜色值。
相比之下,纹理加载在纹理存储器中的整数寻址位置处仅检索单个纹理像素值,其中整数寻址位置是由整数坐标标识的纹理像素。在一些实施例中,某些纹理加载和点采样的纹理操作可以采用浮点坐标,其中该浮点坐标隐式地同时寻址四个不同的附近纹理像素。利用纹理加载和点采样的纹理操作,纹理处理管线400不执行滤波操作。应用程序可能更喜欢到期的纹理加载而不是纹理操作,例如当应用程序执行定制的加权平均、内插和滤波操作时,纹理处理管线400执行的内置加权平均不支持这些操作。这样的应用程序执行针对位于(2,3)、(3,3)、(2,4)和(3,4)的纹理像素的四个纹理加载操作,作为回报则接收位于这四个纹理像素位置的单个颜色值。然后,应用程序可以对四个纹理像素执行任何混合或合并操作。
通常,优化纹理处理管线400以执行纹理操作。当特定线程执行纹理操作时,该线程将基于四个单独的纹理像素的颜色值的加权平均值接收颜色值。因此,纹理处理管线400被优化为在单个存储器访问周期中经由四个单独的存储器端口同时访问多达四个纹理像素。当线程执行针对单个纹理像素的纹理纹理像素加载时,纹理像素加载在单个存储器周期中经由单个存储器端口仅访问一个纹理像素。结果,剩余的三个存储器端口未使用。为经由纹理加载访问四个纹理像素,顺序执行四个纹理加载,每个纹理加载一次访问单个存储器端口。结果,单个纹理操作执行的时间大约是四个纹理加载的时间的四分之一。另外,由于纹理加载不执行加权平均以计算最终颜色,因此纹理处理管线400执行加权平均的部分未被使用,导致进一步的低效率。
在一些实施例中,纹理处理管线400可以同时容纳多个线程。例如,如果纹理处理管线400被构造为支持四个并发线程,则纹理处理管线400具有十六个存储器端口以支持执行四个纹理操作的四个线程,每个纹理操作访问四个纹理像素。如果四个线程执行一个纹理加载,则然后使用四个存储器端口来支持四个纹理加载,并且其余十二个存储器端口则未使用。结果,纹理加载以每个时钟周期四个纹理像素访问来执行,而纹理操作以每个时钟周期十六个纹理像素访问来执行。
如本文中进一步描述的,可以在纹理处理管线400中组合对于“N”个不同线程的纹理加载,以提高纹理像素访问的利用率,从而改善纹理加载期间纹理处理管线的性能。一般而言,“N”可以是不超过线程束中的线程数的任何数量。在一些实施例中,如果对整个线程束(warp-wide)纹理指令以每个线程多于一个纹理加载进行编码,则“N”可能会超过线程数。在这样的实施例中,“N”可以不超过整个线程束纹理指令中编码的纹理加载的数量的任何数量。
另外,可以在纹理处理管线400中组合对于“N”个不同线程的某些类型的纹理操作,以提高纹理像素访问的利用率,从而在这些特定类型的纹理操作期间改善纹理处理管线的性能。这些特定类型的纹理操作在本文中被称为点采样的纹理操作。点采样的纹理操作是简单的纹理操作,其请求最接近纹理存储器中特定浮点位置的纹理像素。例如,指向位置(2.4,3.6)的点采样的纹理操作可以返回位于(2,4)的纹理像素的颜色。在一些实施例中,纹理处理管线400可以被配置为改善纹理收集操作的性能,其中每个线程执行来自四个周围纹理元素对一个组件的点采样的加载。更具体地说,纹理收集操作访问纹理存储器中最接近纹理存储器查询所指定的位置的四个相邻纹理元素。例如,针对位置(2.4,3.6)的纹理收集操作可以对位于(2,3)、(2,4)、(3,3)和(3,4)的纹理像素执行红色分量的点采样的加载。如进一步描述的,纹理处理管线400可以被配置为结合针对“N”个不同线程的点采样的纹理操作和/或纹理收集操作,以提高纹理像素访问的利用率。
如果“N”=2,则纹理处理管线400的被配置为对一个线程访问多达四个纹理像素访问的部分,现在可以同时对两个线程中的每个线程访问多达一个纹理像素。如果纹理处理管线400的该部分对两个线程执行纹理加载,则纹理处理管线400访问两个纹理像素,针对两个线程中的每个线程一个纹理像素。例如,如果纹理处理管线400被构造为支持四个并存纹理操作,则在执行纹理加载时,八个存储器端口用于支持八个线程的八个纹理加载,并且其余的八个存储器端口未被使用。结果,纹理加载以每个时钟周期八个纹理像素访问执行,而纹理操作以每个时钟周期十六个纹理像素访问执行。在一些实施例中,纹理像素可以具有多种尺寸。如果纹理像素大于纹理处理管线400内的存储器端口,则每个纹理像素可以采用多个存储器端口。例如,如果纹理处理管线400具有8字节的存储器端口,并且纹理像素大小是每纹理像素16字节,则纹理处理管线400采用成对的存储器端口来支持8个线程/周期的纹理加载,因此完全占用所有16个8字节存储器端口。
如果“N”=4,则纹理处理管线400的被配置为对一个线程访问多达四个纹理像素访问的部分,现在可以对四个线程访问多达一个纹理像素访问。如果纹理处理管线400的该部分对四个线程执行纹理加载,则纹理处理管线400访问四个纹理像素,针对四个线程中的每个线程一个纹理像素。例如,如果纹理处理管线400被构造为支持四个并存纹理操作,则在执行纹理加载时,全部十六个存储器端口用于支持十六个线程的十六个纹理加载,并且没有存储器端口被闲置。结果,纹理加载以每个时钟周期十六个纹理像素访问执行,而纹理操作也以每个时钟周期十六个纹理像素访问执行。
现在描述纹理处理管线400的阶段。
在操作中,TEXIO单元402处理纹理指令,包括纹理加载和纹理操作。TEXIO单元402从SM 310接收纹理指令,以由线程束中的32个线程执行。TEXIO单元402将纹理指令分成多个部分,其中每个部分包括用于线程束中的线程的子集的纹理指令。TEXIO单元402分析纹理指令操作代码(在此也被称为“操作码”)以及纹理指令的某些参数和修饰符,以做出关于纹理指令是否可以以每个时钟周期四个线程执行或以每个时钟周期更多线程执行的第一确定。
最初,TEXIO单元402假定纹理指令可以以每个时钟周期大于四个线程的速率执行。因此,TEXIO单元402以可以支持每个时钟大于四个线程的方式从参数队列(未示出)中检索纹理指令的参数,例如但不限于每个周期八个线程的执行率。结果,三参数纹理指令的参数打包与四参数纹理指令的参数打包不同。在四参数纹理指令的情况下,纹理指令参数以四参数打包方式打包。如果三参数纹理指令也与四参数打包一起打包,则当以每个时钟周期大于四个线程的速率执行时,纹理处理管线400可能无法检索和处理参数。但是,当参数以二的幂次方成组打包时,参数打包更有效。因此,在三参数纹理指令的情况下,纹理指令参数由一参数打包与两参数打包交替打包。以此方式,用于三参数纹理指令的参数被紧凑地以二的幂次方成组打包,并且纹理处理管线可以在每个时钟周期维持大于四个线程的执行速率。
如果TEXIO单元402确定不能以比每个时钟周期四个线程更高的执行速率来执行纹理指令,则TEXIO单元402,该阶段“否决(veto)”可以以根据当前配置的速率来执行纹理指令的确定。然后,TEXIO单元402将指令重新配置为以较低的速率执行。例如,TEXIO单元402可以否决以每个时钟周期八个线程执行的纹理指令的配置,并且可以重新配置纹理指令为以每个时钟周期四个线程来执行。
如果TEXIO单元402确定纹理指令只能以每个时钟周期四个线程执行,则TEXIO单元402将纹理指令拆分为各自具有四个线程的八个部分,以每个时钟周期四个线程的速率执行。如果TEXIO单元402确定纹理指令可以以每个时钟周期大于四个线程的速率执行,例如带有纹理加载,则TEXIO单元402将基于“N”的值将纹理指令拆分为多个部分。例如,如果“N”=2,则可以以更高的速率执行的纹理指令被拆分成各自具有八个线程的四个部分,并且该纹理指令以每个时钟周期八个线程的速率执行。如果“N”=4,则纹理指令将被分成每十六个线程的两个部分,并且纹理指令以每个时钟周期十六个线程的速率执行,依此类推。为了以下的讨论,“N”假定为2。但是,“N”可以是任何技术上可行的数字。
在某些情况下,TEXIO单元402可能无法基于操作码确定纹理指令是否可以以每个时钟周期四个线程执行还是以每个时钟周期八个线程执行。在这种情况下,TEXIO单元402做出乐观的假设,即纹理处理管线400的后续阶段能够支持更高的纹理指令执行速率。随后,纹理处理管线400的任何其他阶段可以确定纹理指令不能在当前配置下执行。如果纹理处理管线400的阶段确定纹理指令不能以当前配置的速率执行,则该阶段否决纹理指令可以以根据当前配置的速率执行的确定。更具体地,当纹理处理管线400中的给定阶段接收到要在一个时钟周期内执行的纹理指令,但是该阶段需要多个时钟周期来执行纹理指令时,该阶段使管线停顿,将纹理指令拆分成子块,并依次执行纹理指令的每个子块。该阶段将纹理指令重新配置为以较低的速率执行。例如,阶段可以否决以每个时钟周期八个线程执行的纹理指令的配置,并重新配置该纹理指令以每个时钟周期四个线程来执行。如本文所述,TEXIN单元404能够否决纹理指令可以以根据当前配置的速率执行的确定。更一般地,纹理处理管线的任何技术上可行的阶段都可以否决该确定。
TEXIN单元404从TEXIO单元402接收拆分的纹理指令。TEXIN单元404基于包括在纹理指令中的纹理头部索引和纹理采样器索引,从存储器中检索纹理头部状态和纹理采样器状态。纹理头部状态和纹理采样器状态被存储在纹理处理管线400外部的存储器中。TEXIN单元404将检索到的纹理头部状态和纹理采样器状态存储在本地存储器高速缓存(未示出)中。纹理处理管线400中的每个阶段都根据需要检索纹理头部状态和纹理采样器状态,以执行该阶段的操作。此外,如果随后的纹理指令包括与先前的纹理指令相同的纹理头部索引和/或纹理采样器索引,则TEXIN单元404可以经由本地存储器高速缓存访问纹理头部状态和纹理采样器状态。经由本地存储器高速缓存访问纹理头部状态和纹理采样器状态,避免了当本地存储器高速缓存中存在该状态时从外部存储器检索纹理头部状态和纹理采样器状态。
纹理头部索引是指向纹理头部状态数据表的指针,该表描述了存储器中纹理的格式,包括但不限于,纹理在存储器中的位置、纹理的维度、每个纹理像素的颜色分量的数量、每个颜色分量的位数以及纹理数据是否被压缩。采样器头部索引是指向纹理采样器状态数据表的指针,该表描述了纹理如何将被采样以及应用于从纹理接收的纹理像素的滤波类型。
TEXIN单元404分析与纹理指令相关联的纹理头部状态和纹理采样器状态,以做出关于纹理指令是可以以每个时钟周期八个线程执行还是以每个时钟周期四个线程执行的第二确定。如果TEXIN单元404确定被配置为以每个时钟周期八个线程执行的进入纹理指令,只能以每个时钟周期四个线程执行,则TEXIN单元404否决该配置。TEXIN单元404重新配置纹理指令为以每个时钟周期四个线程来执行。
例如,TEXIN单元404可以基于纹理采样器状态来确定纹理指令是否是请求最近的纹理像素的点采样的纹理操作。如果纹理指令是点采样的纹理操作,则TEXIN单元404确定该纹理指令可以以每个时钟周期八个线程来执行。另一方面,TEXIN单元404可以基于纹理采样器状态确定纹理指令与更复杂的采样或滤波操作相关联。在这种情况下,TEXIN单元404否决纹理指令并重新配置该指令为以每个时钟周期四个线程执行。类似地,如果纹理头部状态数据指示纹理指令是针对包括压缩数据的纹理的,则TEXIN单元404确定该纹理指令可以以每个时钟周期四个线程来执行。
某些状态数据是纹理指令、头部状态和采样器状态的交叉积(cross product)。在这种情况下,TEXIN单元404基于纹理指令、头部状态和采样器状态的某些组合来确定是否否决纹理指令的配置。纹理处理管线400维持对于纹理指令、头部状态和采样器状态单独的存储,以便适当地访问纹理。维持该单独的存储使得TEXIN单元404和纹理处理管线400的其他阶段能够基于这种交叉积状态数据做出否决决定。
如果纹理指令既不是纹理加载也不是点采样的纹理操作,则TEXIN单元404将指令发送到LOD单元406,用于以每个时钟周期四个线程执行。如果纹理指令是纹理加载或点采样的纹理操作,则TEXIN单元404将该指令发送到APS旁路单元424用于以每个时钟周期“N”个四个线程执行。例如,如果“N”=2,则TEXIN单元404将指令发送到APS旁路单元424用于以每个时钟周期八个线程来执行。
LOD单元406被配置为基于包括在纹理指令内的一组纹理像素坐标的位置和取向来计算要从存储器访问的纹理的“细节水平”。一起操作的四个线程可以执行纹理指令,该纹理指令包括在3D图形场景中的表面上定义几何基元(例如,四边形)的四个位置的坐标。LOD单元406基于四个位置彼此之间的距离计算细节水平并从一组纹理中选择对应的纹理。该组纹理中的每个纹理定义相同的纹理图像,但是具有不同的空间分辨率或细节水平。当四个位置被映射到对应的纹理像素位置时,LOD单元406选择最小化四个纹理像素彼此的距离的纹理。在计算细节水平之后,LOD单元406将纹理指令发送到采样控制和地址单元408。
APS旁路FIFO 424是用以匹配LOD单元406的延迟的延迟匹配FIFO。在一些实施例中,在纹理处理管线400内执行的一些纹理指令可以采用LOD单元406,而在纹理处理管线400内执行的其他纹理指令(例如,纹理加载和点采样的纹理操作)可以不采用LOD单元406。采用LOD单元406的纹理指令通过LOD单元406。不采用LOD单元406的纹理指令不通过LOD单元406。如果LOD单元406当前不处理任何纹理操作,并且TEXIN单元404发送不使用LOD单元406的纹理指令,则纹理指令绕过LOD单元406。纹理指令几乎没有延迟地通过APS旁路FIFO424,并到达采样控制和地址单元408。如果LOD单元406当前正在处理任何纹理操作,并且TEXIN单元404发送不使用LOD单元406的纹理指令,然后该纹理指令绕过LOD单元406。该纹理指令进入APS旁路FIFO 424,并保留在APS旁路FIFO 424中,直到通过LOD单元406的纹理指令处理到达采样控制和地址单元408。随后,APS旁路FIFO 424中的纹理指令到达采样控制和地址单元408。以这种方式,通过LOD单元406的纹理指令处理和APS旁路FIFO 424保持原始顺序。
在操作中,采样控制和地址单元408从LOD单元406和APS旁路FIFO 424接收纹理指令。来自LOD单元406的纹理指令流是有序的。同样,来自APS旁路FIFO 424的纹理指令流是有序的。然而,来自LOD单元406的后续纹理指令可以在来自APS旁路FIFO 424的较早的纹理指令之前到达采样控制和地址单元408。同样,来自APS旁路FIFO 424的后续纹理指令可以在来自LOD单元406的较早的纹理指令之前到达采样控制和地址单元408。由于采样控制和地址单元408从两个不同的源接收纹理指令,因此纹理指令可能会乱序。因此,采样控制和地址单元408检测乱序的纹理指令,并基于哪个纹理指令具有较早的时间戳则从LOD单元406和APS旁路FIFO 424中选择纹理指令。以这种方式,采样控制和地址单元408将来自LOD单元406和APS旁路FIFO 424的纹理指令流按照由TEXIN单元404发送的正确顺序排序。
采样控制和地址单元408对某些纹理指令执行各种采样和滤波操作。采样控制和地址单元408还提供关于如何针对某些纹理指令采样纹理的信息。采样控制和地址单元408还处理纹理指令,该纹理指令具有延伸超过给定纹理的边界或跨越两个纹理之间的边界的纹理像素坐标。采样控制和地址单元408将纹理像素坐标与所选纹理的大小进行比较。如果纹理像素坐标在所选纹理的边界之外,则采样控制和地址单元408执行一个或更多个操作以处理越界纹理像素坐标。采样控制和地址单元408可以将越界坐标钳制(clamp)或限制到纹理的边界。附加地或替代地,采样控制和地址单元408可以通过对越界坐标执行MOD操作来将越界坐标“包裹”到纹理的相对侧。附加地或替代地,采样控制和地址单元408可以使包括一个或更多个越界坐标的纹理操作无效或丢弃。以这种方式,采样控制和地址单元408确保所有纹理像素坐标在相关纹理的边界内。
如果当前纹理操作是纹理加载或点采样的纹理操作,则不执行这些滤波操作。相反,如果用于纹理加载或点采样的纹理操作的坐标为浮点格式,则采样控制和地址单元408将坐标转换为整数纹理像素坐标。这种转换为表面加载指令,使得纹理加载或点采样的纹理操作能够使用现有的表面指令电路,该电路已经被优化以容纳8个线程。
此外,采样控制和地址单元408基于纹理指令内的纹理像素坐标和细节水平来执行各种地址计算以生成标签。标签对应于标签单元410中包括的标签表中的条目。标签标识存储相关纹理像素的存储器中的唯一高速缓存行。在一些实施例中,高速缓存行可以包括128个字节。相关联的偏移量标识相关纹理像素的第一个字节在高速缓存行内的位置。在一些实施例中,标签还与指示相关纹理像素的大小的值相关联。在一些实施例中,可以基于纹理像素的索引、纹理类型以及存储在高速缓存行中的所有纹理像素的坐标的高位来形成标签。特定高速缓存行中的所有纹理像素共享纹理像素坐标的某些高位,其中这些高位部分地被用于形成标签。采样控制和地址单元408将纹理指令、地址计算结果和采样控制信息传递给标签单元410和滤波器权重单元418。采样控制和地址单元408每个时钟周期可以生成多达16个纹理像素标签/偏移/设置标识符组合,以便同时检索多达16个纹理像素。
标签单元410在每个时钟周期从采样控制和地址单元408接收多达16个纹理像素标签/偏移/设置标识符组合,并依次在每个时钟周期访问多达16个纹理像素。标签单元410包括标签表,该标签表存储一组纹理头部条目。标签单元410中的每个纹理头部条目代表数据单元416内的高速缓存行。数据单元416可以表示驻留在纹理单元315内的高速缓存存储器,或者可以表示与SM 310相关联的任何技术上可行的高速缓存存储器。在从采样控制和地址单元408接收存储器访问请求和地址计算结果之后,标签单元410确定标签表是否包括与要检索的纹理数据相对应的纹理头部条目。
当标签表包括与要访问的纹理数据相对应的条目时,发生高速缓存命中,并且标签单元410确定要访问的纹理数据驻留在数据单元416中。标签单元410通过搜索标签表来检索该条目,并检索指向纹理数据实际驻留的数据单元416内的数据的指针。标签单元410将偏移传递到数据FIFO 414。
当标签表不包括与要访问的纹理数据相对应的纹理头条目时,发生高速缓存未命中,并且标签单元410使未命中处理单元412从外部存储器访问所请求的纹理数据。
数据FIFO 414与滤波器权重FIFO 420一起延迟来自标签单元410的信息以插入适当的延迟。结果,来自标签单元410的数据和来自滤波器权重单元418的相应数据同时到达数据单元416。
滤波器权重单元418准备用于插值和/或滤波的每纹理像素权重、滤波器和返回单元422中的纹理像素值。
滤波器权重FIFO 420延迟来自滤波器权重单元418的信息,以匹配通过标签单元410、数据FIFO 414和纹理处理管线400的其他相关阶段的延迟。结果,来自滤波器权重单元418的数据和来自标签单元410的相应数据同时到达数据单元416。
未命中处理单元412通过基于包括在纹理指令、纹理头部和由采样控制和地址单元408计算出的纹理像素坐标内的数据计算虚拟地址来访问所请求的纹理像素。然后,未命中处理单元412发送读取请求以从物理位置读取所请求的数据。在各种实施例中,未命中处理单元512可驻留在纹理单元315内或驻留在图3A所示的MMU 320内。数据单元416经由存储器接口214和交叉开关单元210从外部存储器接收纹理像素数据。数据单元416更新标签单元410内的标签表以反映新高速缓存的纹理像素。
数据单元416从数据FIFO 414接收指向一个或更多个纹理像素的高速缓存线的指针。数据单元416还从滤波器权重FIFO 420接收相应的滤波器权重值(如果有的话)。数据单元416从高速缓存存储器中检索与一个或更多个纹理像素相关联的数据。数据单元416将检索到的数据和相关联的滤波器权重信息传递到滤波器和返回单元422。在某些情况下,数据单元416可以将对纹理像素数据的访问序列化为多个时钟周期,以适应对数据单元416内的存储器高速缓存的某些访问限制。数据单元416收集并反序列化这种纹理像素数据,直到完成从数据FIFO 414接收的每个单独请求所需的所有纹理像素数据被累积为止。通常,执行从数据FIFO 414接收的多个请求,以完成一条整个线程束指令。例如,如果线程束指令具有32个线程,并且纹理滤波操作一次处理4个线程,则执行从数据FIFO 414接收的8个请求或更多个请求以完成纹理指令。另外,可以经由任何技术上可行的压缩技术来压缩存储在数据单元416中的纹理像素数据。在这种情况下,数据单元416可以解压缩纹理像素数据以进行进一步处理。
此时,数据单元416现在具有完成纹理指令的一部分所需的纹理像素数据,其中纹理指令的一部分在本文中被称为“波前(wavefront)”。纹理指令作为一系列这样的波前通过纹理处理管线400进行,其中每个波前每个时钟周期处理“M”个线程。每个时钟周期在纹理处理管线400内从阶段到阶段地传递一个波前。用于点采样的纹理操作和纹理加载的波前可以包括8个线程的数据值。用于滤波纹理操作的波前可以包含多达4个线程的数据。对于某些纹理指令,纹理像素数据每个线程包括一个纹理像素,直到可用存储器端口的数量为止。对于其他某些纹理指令,纹理像素数据对于最多4个线程中的每个线程包括四个纹理像素。
使用传统方法,包括纹理加载或纹理操作的纹理指令每个线程返回相同数量的数据。例如,当前技术可以在两个时钟周期内为四个线程中的每个线程返回多达四个32位数据分量,总共四个线程乘以64位或256位。利用所公开的技术,每个时钟周期纹理指令可以返回多达总共八个线程乘以64位或512位。
滤波器和返回单元422从数据单元416接收数据和相关联的滤波器权重值。滤波器和返回单元422将一个或更多个滤波器应用于接收到的数据,包括但不限于各向同性滤波器和各向异性滤波器。滤波器和返回单元422为纹理指令的各个部分计算最终颜色值,其中每个部分包括线程束中的32个线程的一部分的最终颜色值。对于某些纹理指令,滤波器和返回单元422可以在八个时钟周期内每个时钟周期为四个线程计算四个最终颜色数据值。对于某些其他纹理指令,滤波器和返回单元422可以在四个时钟周期内每个时钟周期为八个线程计算八个最终颜色数据值。滤波器和返回单元422还包括旁路FIFO(未示出),其绕过滤波器以及用于纹理加载和点采样的纹理操作的相关联的逻辑。滤波器和返回单元422为线程束中的32个线程中的每一个组装最终颜色数据。滤波器和返回单元422将所有32个线程的最终颜色数据发送到SM 310。
通常,纹理处理管线400的阶段以每个周期八个线程执行,除非并且直到特定阶段没有足够的资源以该速率执行当前纹理指令。然后,该阶段否决纹理指令的当前配置,并重新配置纹理指令以每个周期四个线程来执行。如本文所述,TEXIO单元402基于纹理指令操作码以及相关联的指令修饰符来生成否决。TEXIN单元404基于纹理指令、头部状态和采样器状态,单独地或以任意组合来生成否决。现在描述导致否决的各种非排他性条件。
在一个示例中,TEXIO单元402可以接收具有操作码的纹理指令,该操作码没有资格以每个时钟周期四个线程以上来执行。结果,TEXIO单元402否决了纹理指令的配置。
在另一个示例中,TEXIO单元402可以接收纹理加载并确定该纹理加载可以有资格以每个时钟周期八个线程来执行。随后,TEXIN单元404访问头部状态数据,并确定纹理由每个96位宽的纹理像素构成。由于纹理处理管线400未被配置为在一个时钟周期内检索和处理8个96位纹理像素,因此TEXIN单元404否决了纹理加载的配置。
在又一个示例中,如果纹理操作执行最接近的纹理像素采样,则TEXIO单元402可以接收纹理操作并确定该纹理操作可以有资格以每个时钟周期八个线程来执行。随后,TEXIN单元404访问采样器状态数据并确定纹理操作是否执行更复杂的采样和/或滤波。因为纹理处理管线400未被配置为在一个时钟周期内处理具有复杂采样和/或滤波的8个纹理像素,所以TEXIN单元404否决了包括这种复杂采样和/或滤波的纹理操作的配置。另一方面,如果纹理操作执行最接近的纹理像素采样,则纹理操作有资格以每个时钟周期八个线程执行,并且TEXIN单元404不否决纹理操作的配置。
在又一个示例中,TEXIO单元402可以接收纹理操作并确定该纹理操作可以有资格以每个时钟周期八个线程执行。随后,TEXIN单元404访问头部状态数据并确定纹理操作针对包括压缩的纹理数据的纹理。由于纹理处理管线400未被配置为在一个时钟周期内解压缩和处理8个纹理像素,因此TEXIN单元404否决了纹理操作的配置。
在又一示例中,TEXIO单元402可以接收纹理操作并且确定该纹理操作可以有资格以每个时钟周期八个线程执行。随后,TEXIN单元404访问头部状态数据并确定纹理操作访问LOD单元406,该LOD单元406仅能够以每个时钟周期四个线程执行。TEXIN单元404根据头部状态数据确定包括在纹理中的细节水平的数量。如果纹理包括多个细节水平,并且纹理指令指定了LOD的计算,则TEXIN单元404否决纹理操作的配置,并将纹理操作定向至LOD单元406。另一方面,如果纹理仅包括一个细节水平,则由于不需要确定要访问哪个细节水平,因此不需要将纹理操作定向至LOD单元406。因此,TEXIN单元404不会否决纹理操作的配置,而是将纹理操作定向至APS旁路FIFO 424。
在又一示例中,TEXIO单元402可以接收纹理操作并且确定该纹理操作可以有资格以每个时钟周期八个线程执行。随后,TEXIN单元404访问头部状态数据并确定由采样控制和地址单元408确定的纹理操作的寻址模式。寻址模式确定如何处理采样控制和地址单元408确定的超出纹理范围的纹理像素地址。如果纹理操作的寻址模式是简单的寻址模式,例如钳位到最接近的边界纹理像素的值,则TEXIN单元404不会否决纹理操作的配置。另一方面,如果纹理操作的寻址模式是更复杂的寻址模式,该寻址模式需要对边界以外的纹理像素进行附加处理,则TEXIN单元404否决纹理操作的配置。
在又一示例中,TEXIO单元402可以接收纹理操作并且确定该纹理操作可以有资格以每个时钟周期八个线程执行。随后,TEXIN单元404访问头部状态数据并且确定纹理操作针对从一个颜色空间转换为另一颜色空间的纹理像素。由于纹理处理管线400未被配置为在一个时钟周期内对8个纹理像素进行处理和执行颜色空间转换,因此TEXIN单元404否决了纹理操作的配置。
在又一示例中,TEXIO单元402可以接收纹理操作并且确定该纹理操作可以有资格以每个时钟周期八个线程执行。随后,TEXIN单元404访问头部状态数据并确定纹理操作生成在将最终颜色值返回给SM 310之前需要进行上转换(upconversion)的最终颜色值。因为纹理处理管线400未被配置为处理8个纹理像素并在一个时钟周期内对最终颜色值执行上转换,TEXIN单元404否决纹理操作的配置。
在又一示例中,TEXIO单元402可以接收纹理收集操作并且确定该纹理收集操作可以有资格以每个时钟周期八个线程执行。随后,TEXIN单元404访问头部状态数据并确定特定纹理收集操作不能以每个时钟周期八个线程执行。例如,由纹理收集操作访问的纹理组件可以具有纹理处理管线400不能以加速的速度访问的特定格式和/或对齐。因此,TEXIN单元404否决纹理收集操作的配置。
在又一示例中,纹理处理管线400的阶段(例如,采样控制和地址单元408)可以确定纹理指令包括表示精确整数坐标的浮点纹理像素坐标。该阶段可以确定具有这种纹理像素坐标的纹理指令有资格以每个时钟周期八个线程来执行。
图5是根据各个实施例的、用于在纹理处理管线400中执行存储器访问操作的方法步骤的流程图。尽管结合图1-图4的系统描述了方法步骤,但是本领域普通技术人员将理解,被配置为以任何顺序执行方法步骤的任何系统都在本公开内容的范围内。
如图所示,方法500在步骤502开始,在该步骤中,纹理处理管线400中的第一阶段生成对纹理存储器查询有资格进行加速的第一确定。在一些实施例中,第一阶段包括图4的纹理处理管线400的TEXIO单元402。TEXIO单元402处理纹理指令,其包括纹理加载和纹理操作。TEXIO单元402从SM310接收纹理指令,用于由线程束中的32个线程执行。TEXIO单元402将纹理指令分成多个部分,其中每个部分包括用于线程束中的线程的子集的纹理指令。TEXIO单元402分析纹理指令操作码以及纹理指令的某些参数和修饰符,以做出关于纹理指令是否可以以每个时钟周期四个线程来执行或以每个时钟周期更高数量的线程来执行的第一确定。
最初,TEXIO单元402假定纹理指令可以以每个时钟周期大于四个线程的速率执行。如果TEXIO单元402确定纹理指令不能以每个时钟周期高于四个线程的执行速率执行,则TEXIO单元402,阶段“否决”纹理指令可以以根据当前配置的速率执行的确定。然后,TEXIO单元402重新配置该指令为以较低的速率执行。例如,TEXIO单元402可以否决以每个时钟周期八个线程执行的纹理指令的配置,并且重新配置该纹理指令以每个时钟周期四个线程执行。
如果TEXIO单元402确定纹理指令只能以每个时钟周期四个线程执行,则TEXIO单元402将纹理指令拆分为各自具有四个线程的八个部分,以每个时钟周期四个线程的速率执行。如果TEXIO单元402确定纹理指令可以以每个时钟周期大于四个线程的速率执行,例如带有纹理加载,则TEXIO单元402将基于“N”的值将纹理指令拆分为多个部分。例如,如果“N”=2,则可以以更高的速率执行的纹理指令被拆分成各自具有八个线程的四个部分,并且该纹理指令以每个时钟周期八个线程的速率执行。如果“N”=4,则纹理指令将被拆分成每十六个线程的两个部分,并且纹理指令以每个时钟周期十六个个线程的速率执行,依此类推。为了以下的讨论,“N”假定为2。但是,“N”可以是任何技术上可行的数字。
在某些情况下,TEXIO单元402可能无法基于操作码确定纹理指令是否可以以每个时钟周期四个线程执行或以每个时钟周期八个线程执行。在这种情况下,TEXIO单元402将纹理指令拆分成各自具有八个线程的四个部分,并假定该纹理指令可以以每个时钟周期八个线程的速率执行。随后,纹理处理管线400的任何其他阶段可以确定纹理指令不能在当前配置下执行。如果纹理处理管线400的阶段确定纹理指令不能以当前配置的速率执行,则该阶段否决纹理指令可以以根据当前配置的速率执行的确定。该阶段将该指令重新配置为以较低的速率执行。例如,阶段可以否决以每个时钟周期八个线程执行的纹理指令的配置,并将纹理指令重新配置为以每个时钟周期四个线程执行。
在步骤504,纹理处理管线的第一阶段使纹理存储器查询进行到纹理处理管线400中的下一阶段。在步骤506,纹理处理管线400中的第二阶段生成纹理存储器查询有资格加速的第二确定。在一些实施例中,第二阶段包括图4的纹理处理管线400的TEXIN单元404。
TEXIN单元404从TEXIO单元402接收拆分的纹理指令。TEXIN单元404基于包括在纹理指令中的纹理头部索引和纹理采样器索引,从存储器中检索纹纹理头部状态和纹理采样器状态。纹理头部状态和纹理采样器状态被存储在纹理处理管线400外部的存储器中。TEXIN单元404将检索到的纹理头部状态和纹理采样器状态存储在本地存储器高速缓存中。纹理处理管线400中的每个阶段都根据需要检索纹理头部状态和纹理采样器状态,以执行该阶段的操作。此外,如果随后的纹理指令包括与先前的纹理指令相同的纹理头部索引和/或纹理采样器索引,则TEXIN单元404可以经由本地存储器高速缓存访问纹理头部状态和纹理采样器状态。经由本地存储器高速缓存访问纹理头部状态和纹理采样器状态,避免了当本地存储器高速缓存中存在该状态时从外部存储器检索纹理头部状态和纹理采样器状态。
TEXIN单元404分析与纹理指令相关联的纹理头部状态和纹理采样器状态,以做出关于纹理指令可以以每个时钟周期八个线程执行还是以每个时钟周期四个线程执行的第二确定。如果TEXIN单元404确定被配置为以每个时钟周期八个线程执行的进入纹理指令只能以每个时钟周期四个线程来执行,则TEXIN单元404否决该配置。TEXIN单元404将纹理指令重新配置为以每个时钟周期四个线程执行。
例如,TEXIN单元404可以基于纹理采样器状态来确定纹理指令是否是请求最接近的纹理像素的点采样纹理操作。如果纹理指令是点采样纹理操作,则TEXIN单元404确定该纹理指令可以以每个时钟周期八个线程执行。另一方面,TEXIN单元404可以基于纹理采样器状态确定纹理指令与更复杂的采样或滤波操作相关联。在这种情况下,TEXIN单元404否决纹理指令并将该指令重新配置为以每个时钟周期四个线程执行。类似地,如果纹理头部状态数据指示纹理指令针对包括压缩数据的纹理,则TEXIN单元404确定纹理指令可以以每个时钟周期四个线程执行。
在步骤508,纹理处理管线400中的一个或更多个阶段基于第一确定和第二确定中的一个或两者来处理纹理存储器查询。然后,方法500终止。
总之,各种实施例包括GPU中的纹理处理管线,其在纹理处理管线的第一阶段确定是否可以以加速的速率处理纹理操作和纹理加载。然后,纹理处理管线在纹理处理管线的一个或更多个附加阶段重新评估该决策。在包括决策点的每个阶段,纹理处理管线假定可以加速当前的纹理操作或纹理加载,除非特定的、已知的信息表明无法加速纹理操作或纹理加载。随着纹理操作或纹理加载进行到不同阶段,纹理处理管线获取有关纹理操作或纹理加载的附加信息。纹理处理管线在多个阶段确定是否可以以加速的速率处理纹理操作和纹理加载。结果,相对于未被加速的纹理操作和纹理加载的数量,纹理处理管线增加了被加速的纹理操作和纹理加载的数量。
相对于现有技术,所公开的技术的至少一个技术优势在于,利用所公开的技术,在纹理加载期间和简单的纹理操作期间使用了更大百分比的纹理存储器访问能力。结果,相对于现有方法,在纹理加载和纹理操作期间,纹理处理硬件的效率和性能提高了。所公开技术的另一技术优点是纹理处理硬件包括用于确定是否可以更有效地使用纹理处理硬件的存储器访问能力的多个阶段。结果,相对于仅在纹理处理硬件的单个阶段进行该确定的方法,更多数量的纹理加载和纹理操作能够利用所公开的技术。这些优点表示相对于现有技术方法的一项或更多项技术改进。
[在Artegis申请之前添加的权利要求组合]
以任何方式,在任何权利要求中记载的任何权利要求元素和/或在本申请中描述的任何元素的任何和所有组合都落入本公开内容和保护的预期范围内。
出于说明的目的,已经给出了各种实施例的描述,但并不旨于详尽的或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变型对于本领域普通技术人员将是明显的。
本实施例的各方面可以体现为系统、方法或计算机程序产品。因此,本公开内容的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或结合了通常在本文中被称为“模块”或“系统”的软件或硬件方面的实施例的形式。此外,本公开内容的各方面可以采取计算机程序产品的形式,该计算机程序产品体现在其上具有计算机可读程序代码的一个或更多个计算机可读介质中。
可以利用一个或更多个计算机可读介质的任何组合。所述计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是例如但不限于电子、磁性、光学、电磁、红外或半导体系统、装置或设备或前述的任何适当组合。计算机可读存储介质的更具体示例(非详尽列表)将包括以下内容:具有一根或更多根电线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、光纤、便携式光盘只读存储器(CD-ROM)、光学存储设备、磁存储设备或前述的任何适当组合。在本文的上下文中,计算机可读存储介质可以是可以包含或存储由指令执行系统、装置或设备使用或与其结合使用的程序的任何有形介质。
参考以上根据本公开内容的实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图来描述了本公开内容的各方面。将理解的是,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可以由计算机程序指令来实现。可以将这些计算机程序指令提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,从而使得经由计算机或其他可编程数据处理装置的处理器执行的指令能够实现流程图和/或框图一个块或多个块中指定的功能/动作。这样的处理器可以是但不限于通用处理器、专用处理器、应用程序专用处理器,或者是现场可编程的。
附图中的流程图和框图示出了根据本公开内容的各种实施例的系统、方法和计算机程序产品的可能的实现的架构、功能和操作。就这一点而言,流程图或框图中的每个框可以代表代码的模块、片段或部分,其包括用于实现指定的逻辑功能的一个或更多个可执行指令。还应注意的是,在一些替代实施方式中,方框中记录的功能可以不按图中记录的顺序发生。例如,取决于所涉及的功能,实际上可以基本上同时执行连续示出的两个框,或者有时可以以相反的顺序执行这些框。还应注意的是,框图和/或流程图图示的每个框,以及框图和/或流程图图示的框的组合,都可以通过执行指定功能或动作的专用的基于硬件的系统或专用硬件和计算机指令的组合来实现。
尽管前面是针对本公开内容的实施例,但是可以在不脱离本本公开内容的基本范围的情况下设计本公开内容的其他和进一步的实施例,并且本公开内容的范围由所附权利要求书确定。

Claims (20)

1.一种用于访问图形处理单元中的纹理存储器的计算机实现的方法,所述方法包括:
在纹理处理管线中的第一阶段处,生成纹理存储器查询在所述纹理处理管线内有资格进行加速的第一确定;
基于所述第一确定,使所述纹理存储器查询进行到所述纹理处理管线中的第二阶段;
在所述纹理处理管线中的所述第二阶段处,生成所述纹理存储器查询在所述纹理处理管线内有资格进行加速的第二确定;
基于所述第一确定和所述第二确定中的至少一个,在所述纹理处理管线内处理所述纹理存储器查询。
2.根据权利要求1所述的计算机实现的方法,其中所述纹理存储器查询与纹理指令相关联,所述纹理指令包括纹理存储器中的单个纹理元素的纹理加载。
3.根据权利要求1所述的计算机实现的方法,其中所述纹理存储器查询与纹理指令相关联,所述纹理指令包括与纹理存储器中最接近由所述纹理存储器查询指定的位置的单个纹理元素相关联的纹理操作。
4.根据权利要求1所述的计算机实现的方法,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第一确定基于包括在所述纹理存储器指令中的操作码。
5.根据权利要求1所述的计算机实现的方法,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第一确定基于将所述纹理存储器指令识别为针对纹理存储器中的单个纹理元素的纹理加载的操作码,其中所述单个纹理元素位于由所述纹理存储器查询指定的存储器地址处。
6.根据权利要求1所述的计算机实现的方法,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第一确定或所述第二确定中的至少一个基于将所述纹理存储器指令识别为针对纹理存储器中的单个纹理元素的纹理操作的操作码,其中所述单个纹理元素最接近由所述纹理存储器查询指定的存储器地址。
7.根据权利要求1所述的计算机实现的方法,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第二确定基于与所述纹理存储器指令相关联的头部状态数据或采样器状态数据中的一个或更多个。
8.一种或更多种非暂时性计算机可读介质,其存储了程序指令,当所述程序指令由一个或更多个处理器执行时,使所述一个或更多个处理器执行以下步骤:
在纹理处理管线中的第一阶段处,生成纹理存储器查询在所述纹理处理管线内有资格进行加速的第一确定;
基于所述第一确定,使所述纹理存储器查询进行到所述纹理处理管线中的第二阶段;
在所述纹理处理管线中的所述第二阶段处,生成所述纹理存储器查询在所述纹理处理管线内有资格进行加速的第二确定;
基于所述第一确定和所述第二确定中的至少一个,在所述纹理处理管线内处理所述纹理存储器查询。
9.根据权利要求8所述的一种或更多种非暂时性计算机可读介质,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第一确定基于包括在所述纹理存储器指令中的操作码。
10.根据权利要求8所述的一种或更多种非暂时性计算机可读介质,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第一确定基于将所述纹理存储器指令识别为针对纹理存储器中的单个纹理元素的纹理加载的操作码,其中所述单个纹理像素位于由所述纹理存储器查询指定的存储器地址处。
11.根据权利要求8所述的一种或更多种非暂时性计算机可读介质,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第一确定或所述第二确定中的至少一个基于将所述纹理存储器指令识别为针对纹理存储器中的单个纹理元素的纹理操作的操作码,其中所述单个纹理元素最接近由所述纹理存储器查询指定的存储器地址。
12.根据权利要求8所述的一种或更多种非暂时性计算机可读介质,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第二确定基于与所述纹理存储器指令相关联的头部状态数据或采样器状态数据中的一个或更多个。
13.根据权利要求8所述的一种或更多种非暂时性计算机可读介质,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第二确定基于包括在如由头部状态数据指定的纹理中的多个细节水平。
14.根据权利要求8所述的一种或更多种非暂时性计算机可读介质,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第二确定基于由头部状态数据指定的纹理元素的大小。
15.根据权利要求8所述的一种或更多种非暂时性计算机可读介质,其中基于所述第一确定和所述第二确定中的至少一个,与所述纹理存储器查询相关联的纹理存储器指令以每个时钟周期第一数量的线程来执行或以每个时钟周期第二数量的线程来执行。
16.一种系统,其包括:
存储指令的存储器;以及
耦合至所述存储器的处理器,所述处理器在执行所述指令时:
在纹理处理管线中的第一阶段处,生成纹理存储器查询在所述纹理处理管线内有资格加速的第一确定;
基于所述第一确定,使所述纹理存储器查询进行到所述纹理处理管线中的第二阶段;
在所述纹理处理管线中的所述第二阶段处,生成所述纹理存储器查询在所述纹理处理管线内有资格进行加速的第二确定;
基于所述第一确定和所述第二确定中的至少一个,在所述纹理处理管线内处理所述纹理存储器查询。
17.根据权利要求16所述的系统,其中所述纹理存储器查询与纹理指令相关联,所述纹理指令包括纹理存储器中的单个纹理元素的纹理加载。
18.根据权利要求16所述的系统,其中所述纹理存储器查询与纹理指令相关联,所述纹理指令包括与纹理存储器中最接近由所述纹理存储器查询指定的位置的单个纹理元素相关联的纹理操作。
19.根据权利要求16所述的系统,其中所述纹理存储器查询与纹理收集操作相关联,所述纹理收集操作包括与纹理存储器中最接近由所述纹理存储器查询指定的位置的四个相邻纹理元素相关联的纹理操作。
20.根据权利要求16所述的系统,其中所述纹理存储器查询与纹理存储器指令相关联,并且所述第一确定基于将所述纹理存储器指令识别为针对纹理存储器中的单个纹理元素的纹理加载的操作码,其中所述单个纹理元素位于由所述纹理存储器查询指定的存储器地址处。
CN202110690974.7A 2020-06-23 2021-06-22 用于在纹理处理管线中执行加速的点采样的技术 Pending CN113835753A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/910,029 US11379944B2 (en) 2020-06-23 2020-06-23 Techniques for performing accelerated point sampling in a texture processing pipeline
US16/910,029 2020-06-23

Publications (1)

Publication Number Publication Date
CN113835753A true CN113835753A (zh) 2021-12-24

Family

ID=78823246

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110690974.7A Pending CN113835753A (zh) 2020-06-23 2021-06-22 用于在纹理处理管线中执行加速的点采样的技术

Country Status (3)

Country Link
US (1) US11379944B2 (zh)
CN (1) CN113835753A (zh)
DE (1) DE102021206410A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030058249A1 (en) * 2001-09-27 2003-03-27 Gabi Malka Texture engine state variable synchronizer
US20120303900A1 (en) * 2011-05-25 2012-11-29 Andreas Due Engh-Halstvedt Processing pipeline control
CN110084738A (zh) * 2018-01-26 2019-08-02 辉达公司 在扩展的图形处理管线中表示和处理几何形状的技术

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001022948A (ja) * 1999-07-08 2001-01-26 Sega Corp 画像処理装置および画像処理方法、並びに記録媒体
US6987517B1 (en) * 2004-01-06 2006-01-17 Nvidia Corporation Programmable graphics processor for generalized texturing
US10657699B1 (en) * 2018-12-08 2020-05-19 Arm Limited Performing texturing operations for sets of plural execution threads in graphics processing systems

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030058249A1 (en) * 2001-09-27 2003-03-27 Gabi Malka Texture engine state variable synchronizer
US20120303900A1 (en) * 2011-05-25 2012-11-29 Andreas Due Engh-Halstvedt Processing pipeline control
CN110084738A (zh) * 2018-01-26 2019-08-02 辉达公司 在扩展的图形处理管线中表示和处理几何形状的技术

Also Published As

Publication number Publication date
DE102021206410A1 (de) 2021-12-23
US20210398241A1 (en) 2021-12-23
US11379944B2 (en) 2022-07-05

Similar Documents

Publication Publication Date Title
US9311097B2 (en) Managing per-tile event count reports in a tile-based architecture
US8941653B2 (en) Order-preserving distributed rasterizer
CN107038742B (zh) 屏幕空间管线中的多通道渲染
US9734548B2 (en) Caching of adaptively sized cache tiles in a unified L2 cache with surface compression
US9589310B2 (en) Methods to facilitate primitive batching
US9830741B2 (en) Setting downstream render state in an upstream shader
US8760455B2 (en) Restart index that sets a topology
US20110243469A1 (en) Selecting and representing multiple compression methods
US9720842B2 (en) Adaptive multilevel binning to improve hierarchical caching
US10068366B2 (en) Stereo multi-projection implemented using a graphics processing pipeline
US9448935B2 (en) Surface resource view hash for coherent cache operations in texture processing hardware
US10430989B2 (en) Multi-pass rendering in a screen space pipeline
US10607390B2 (en) Techniques for tiling compute work with graphics work
US9916680B2 (en) Low-power processing in depth read-only operating regimes
US11379944B2 (en) Techniques for performing accelerated point sampling in a texture processing pipeline
US8947444B1 (en) Distributed vertex attribute fetch
US9501847B1 (en) Parallel line stipple computation
US8749562B1 (en) Sharing binding groups between shaders
CN115439588A (zh) 用于交错纹理的技术

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