CN107148619B - 用于多线程图形流水线的自由排序线程模型 - Google Patents
用于多线程图形流水线的自由排序线程模型 Download PDFInfo
- Publication number
- CN107148619B CN107148619B CN201580058642.XA CN201580058642A CN107148619B CN 107148619 B CN107148619 B CN 107148619B CN 201580058642 A CN201580058642 A CN 201580058642A CN 107148619 B CN107148619 B CN 107148619B
- Authority
- CN
- China
- Prior art keywords
- queue
- primitives
- threads
- logic
- draw
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/363—Graphics controllers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
描述了涉及用于多线程图形流水线的自由排序线程模型的方法和装置。在实施例中,将与图像中的一个或多个图元相对应的绘制请求存储在队列的条目中(例如,以接收的顺序)。每个条目保持锁定,直到图形流水线的前端和后端都完成了与所述绘制请求相关联的一个或多个操作。还公开并要求保护其他实施例。
Description
技术领域
本公开总体上涉及电子装置领域。更具体地,实施例涉及用于多线程图形流水线的自由排序(sort-free)线程模型。
技术背景
目前的软件光栅化程序或者是单线程的或者仅是图形流水线的线程部分,从而降低了渲染大顶点数工作负荷的有效性,像可以渲染几百万三角形的HPC(高性能计算)工作负荷。
附图说明
参照附图提供了详细说明。在附图中,参考号最左边的(多个)数字标识该参考号首次出现的附图。在不同的附图中使用相同的参考号指示相似或完全相同的项。
图1和图5至图7展示了计算系统的实施例的框图,其可以用来实现在此讨论的各个实施例。
图2展示了根据一些实施例的样本排序操作的比较图。
图3至图4展示了根据一些实施例的图形流水线的框图。
具体实施方式
在以下描述中,阐述了许多具体的细节以便提供对各实施例的彻底理解。然而,可以在没有特定细节的情况下实践各实施例。在其他实例中,未详细地描述熟知的方法、程序、部件以及电路,以便不使具体实施例模糊。进一步,可以使用各种装置执行实施例的各方面,比如集成半导体电路(“硬件”)、被组织到一个或多个程序(“软件”)中的计算机可读指令或硬件与软件的某种组合。就本公开的目的而言,对“逻辑”的引用将指或者硬件、软件、固件或其某种组合。
一些实施例提供了一种用于多线程(例如,软件)图形流水线的自由排序线程模型。实施例提供了用于图形流水线的高性能多线程(例如,基于图块的)软件渲染(或处理)。而且,提供了一种允许跨整个图形流水线完全多线程支持的架构,例如提供针对某些工作负荷与分立的GPU(图形处理单元)的性能竞争的软件光栅化解决方案。进一步,用于线程的自由排序算法可以允许顶点流水线是完全多线程的,例如避免顶点与像素流水线之间高代价同步和/或三角形重排,如其他解决方案中可见的。
虽然总体上参照图形逻辑(比如图形流水线)讨论了一些实施例,但实施例并不仅限于图形相关逻辑并且还可以应用于能够执行在此所讨论的操作的其他类型的非图形(例如,一般用途的)逻辑。进一步,一些实施例可以应用于包括一个或多个处理器(例如,具有一个或多个处理器核)的计算系统,比如参照图1至图7所讨论的那些,包括例如移动计算设备,例如智能手机、平板计算机、UMPC(超级移动个人计算机)、膝上计算机、超级本TM计算设备、智能手表、智能眼镜等。更具体地,图1展示了根据实施例的计算系统100的框图。系统100可以包括一个或多个处理器102-1至102-N(在此一般地称为“多个处理器102”或“处理器102”)。在各实施例中,这些处理器102可以是一般用途的CPU和/或GPU。处理器102可以经由互连或总线104通信。每个处理器可以包括各种部件,为了清楚起见,仅参照处理器102-1讨论了其中的一部分。相应地,剩余处理器102-2至102-N中的每一个可以包括参照处理器102-1所讨论的相同或相似部件。
在实施例中,处理器102-1可以包括一个或多个处理器核106-1至106-M(在此称为“多个核106”或“核106”)、高速缓存108、和/或路由器110。这些处理器核106可以在单个集成电路(IC)芯片上实现。而且,所述芯片可以包括一个或多个共享和/或私有高速缓存(比如高速缓存108)、总线或互连(比如总线或互连112)、图形和/或存储器控制器(比如参照图5至图7所讨论的那些)或其他部件。
在一个实施例中,路由器110可以用于在处理器120-1和/或系统100的各部件之间通信。而且,处理器102-1可以包括不止一个路由器110。此外,所述多个路由器110可以通信以使得数据能够在处理器102-1内部或外部的各部件之间路由。
高速缓存108可以存储由处理器102-1的一个或多个部件(比如,核106)利用的数据(例如,包括指令)。例如,高速缓存108可以本地高速缓存存储在存储器114中的数据以用于由处理器102的部件进行更快速的访问(例如,由核106进行更快速的访问)。如图1中所示,存储器114可以经由互连104与处理器102通信。在实施例中,(可被共享的)高速缓存108可以是中层高速缓存(MLC)、最后一层高速缓存(LLC)等。同样,核106中的每一个可以包括第一层(L1)高速缓存(116-1)(在此总体地称为“L1高速缓存116”)或其他层高速缓存比如第二层(L2)高速缓存。而且,处理器102-1的各部件可以通过总线(例如,总线112)和/或存储器控制器或集线器与高速缓存108直接通信。
如图1中所示,处理器102可以进一步包括图形逻辑140(例如,其可以包括图形流水线,比如参照图2至图7所讨论的那些)用于执行各种图形和/或(多种)一般用途计算相关的操作,比如在此所讨论的。逻辑140可以访问在此所讨论的一个或多个存储设备(比如高速缓存108、L1高速缓存116、存储器114、(多个)寄存器或系统100中的另一存储器)用于存储于逻辑140的操作相关的信息,比如与系统100的各部件通信的信息,如在此所讨论的。同样,虽然逻辑140被示为在处理器102的内部,但在各实施例中,它可以位于系统100中其他地方。例如,逻辑140可以代替核106之一,可以直接耦合至互连112和/或互连104等。
如上所提及的,一些实施例提供了一种允许跨整个图形流水线的完全多线程支持的架构,例如提供针对某些工作负荷与分立的GPU(图形处理单元)的性能竞争的软件光栅化解决方案。进一步,自由排序算法可以用于线程,允许顶点流水线是完全多线程的,并且避免顶点与像素流水线之间高代价同步和三角形重排,如其他解决方案中可见的。相比之下,目前的软件光栅化程序不能够解决三角形排序的问题,并且因此它们被迫按顺序处理三角形,通常来自单个线程,严重地降低某些工作负荷的性能(例如,主要是如HPC虚拟化中发现的顶点绑定的工作负荷)。
此外,图2展示了根据一些实施例的图形流水线中自由排序、中部排序、和前部排序样本操作的对比图。一般地,为了从软件渲染实现更好的性能,使用了多线程,其中,每个线程执行与图像的一个或多个部分相关联的操作。这些图像部分在此一般指几何图元(或更一般地,图元),这些几何图元是被处理、存储等的几何对象。这种劳动分工允许并行处理。可以将图形流水线(例如,在图2中针对每种类型的自由排序、中部排序、和前部排序操作竖直地示出的)概念化为具有两个主要部分,前端(例如,执行几何处理)和后端(例如,执行光栅化处理)。
图形流水线的基本属性之一是图元被按照用户所限定的顺序进行渲染。由于这一点,目前工艺水平所采取的线程模型总体上落在两个范畴内,前部排序(C)和中部排序(B)。在前部排序模型(C)中,图元在图形流水线的早期被排序或分配。在中部排序模型(B)中,图元在图形流水线的中期被存储/分配。这些方法中的每一种引入了限制性能可能性的高代价瓶颈。为此,实施例(可以称为“自由排序”)通过去除排序瓶颈解决了这些限制。这允许线程自由地运行前端和后端工作两者,同时仍维持用户所指定的图元顺序。
图3至图4展示了根据一些实施例的图形流水线的框图。更具体地,图3展示了前端怎样被线程化。当从用户接收到绘制请求(例如,经由软件应用或接口,比如应用程序接口(API)302)时,它们被放置在循环队列304(被称为绘制_上下文(DRAW_CONTEXT)队列)内。队列中每个条目存在一次绘制,并且它们完全按照它们被从用户接收的顺序(例如,0、1、2等)被排序。一旦条目被放入绘制_上下文队列304中,线程(例如,(多个)FE(前端)线程306)就可以自由索取有效绘制_上下文条目(例如,如图3中的绘制0、1和2所展示的)。通过锁定,我们可以强制单个线程针对任何绘制_上下文执行前端工作(图3中展示为1:1)。队列304可以被设置大小为使足够的绘制在进行中,从而确保线程有足够的工作要执行(即,通过确保在一段时间内保持线程忙于处理绘制请求,提供对线程更高效/持续的使用)。相应的队列条目保持锁定,直到前端和后端都充分地完成与队列条目中所存储的绘制请求相关联的工作。
更确切地,每个前端线程306对图元进行渲染并将每个图元装入/放入与其交叉的相应图块(图3中标记为图块A-D)中。一旦前端线程已经完成了将所有的图元装入,绘制_上下文条目就被标记为‘前端完成’,这表明线程现在可以拾取这个绘制_上下文以执行后端渲染,如图4中所展示的。后端(BE)线程402可以自由地从任何有效绘制_上下文条目拾取任何图块,只要同一图块的所有之前的绘制_上下文都已经被渲染。单个绘制_上下文内的图块可以由多个BE线程402同时地渲染。如在此所讨论的,“图块”一般指图像的一部分。例如,每个图像可以被划分成被安排成阵列或矩阵格式的多个图块。
相应地,对一般用途的(或图形)逻辑(比如逻辑140)的高性能软件光栅化可以提供高代价的分立式GPU的替代方案。另外,由于GPU/处理器功能变得更多重叠,在此所讨论的一些实施例可以用来影响或辅助GPU硬件。
图5展示了根据实施例的计算系统500的框图。计算系统500可以包括经由互连网络(或总线)504通信的一个或多个中央处理单元(CPU)502或处理器。处理器502可以包括通用处理器、网络处理器(所述网络处理器对通过计算机网络503传达的数据进行处理)或其他类型的处理器(包括精简指令集计算机(RISC)处理器或复杂指令集计算机(CISC))。
而且,处理器502可以具有单核或多核设计。具有多核设计的处理器502可以将不同类型的处理器核集成在同一集成电路(IC)管芯上。同样,具有多核设计的处理器502可以被实现为对称或非对称多重处理器。在实施例中,处理器502中的一个或多个可以与图1中的处理器102相同或相似。例如,系统500的一个或多个部件可以包括逻辑140,参照图1至图4所讨论的。同样,参照图1至图4所讨论的操作可以由系统500的一个或多个部件执行。
芯片组506还可以与互连网络504通信。芯片组506可以包括图形存储器控制集线器(GMCH)508,所述图形存储器控制集线器可以位于系统500的各部件中(比如图5中所示的那些)。GMCH 508可以包括存储器控制器510,所述存储器控制器可以与存储器512(其可以与图1的存储器114相同或类似)通信。存储器512可以存储数据,包括指令序列,所述指令序列可以被CPU 502或计算系统500中所包括的任何其他设备执行。在一个实施例中,存储器512可以包括一个或多个易失性存储(或存储器)设备,比如随机存取存储器(RAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、静态RAM(SRAM)或其他类型的存储设备。还可以利用非易失性存储器,比如硬盘。附加设备可以经由互连网络504(比如多个CPU和/或多个系统存储器)通信。
GMCH 508还可以包括与显示器设备516通信的图形接口514。在一个实施例中,图形接口514可以经由加速图形端口(AGP)或外围部件互连(PCI)(或PCI Express(PCIe)接口)与显示器设备516通信。在实施例中,显示器516(比如扁平面板显示器)可以通过例如信号转换器与图形接口514通信,所述信号转换器将存储设备(比如视频存储器或系统存储器)中所存储的图像的数字表示转换成由显示器516解释并显示的显示信号。显示器设备所产生的显示信号可以在被显示器516解释并随后显示在其上之前传递通过各控制设备。
集线器接口518可以允许GMCH 508和输入/输出控制集线器(ICH)520通信。ICH520可以提供至与计算系统500通信的(多个)I/O设备的接口。ICH520可以通过外围桥接器(或控制器)524比如外围部件互连(PCI)桥接器、通用串行总线(USB)控制器或其他类型的外围桥接器或控制器与总线522通信。桥接器524可以在CPU 502与外围设备之间提供数据路径。可以利用其它类型的拓扑结构。同样,多个总线可以例如通过多个桥接器或控制器与ICH 520通信。而且,在各实施例中,与ICH 520通信的其他外围设备可以包括集成驱动电子设备(IDE)或(多个)小型计算机系统接口(SCSI)硬盘驱动、(多个)USB端口、键盘、鼠标、(多个)并行端口、(多个)串行端口、(多个)软盘驱动、数字输出支持(例如,数字视频接口(DVI)或其他设备。
总线522可以与音频设备526、一个或多个磁盘驱动528、和(与计算机网络503通信的)网络接口设备530通信。其他设备可以经由总线522通信。同样,在一些实施例中,各部件(比如网络接口设备530)可以与GMCH 508通信。另外,处理器502和GMCH 508可以组合以形成单个芯片。此外,在其他实施例中,GMCH 508中可以包括图形加速器。
此外,计算系统500可以包括易失性和/或非易失性存储器(或存储设备)。例如,非易失性存储器可以包括一下各项中的一项或多项:只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电EPROM(EEPROM)、磁盘驱动(例如528)、软盘、紧凑盘ROM(CD-ROM)、数字多功能盘(DVD)、闪存存储器、磁光盘或能够存储电子数据(例如,包括指令)的其他类型的非易失性机器可读介质。
图6展示了根据实施例的被安排为点到点(PtP)配置的计算系统600。具体地,图6示出了一种系统,在所述系统中,处理器、存储器以及输入/输出设备通过许多点对点接口互连。参照图1至图5所讨论的操作可以由系统600的一个或多个部件执行。
如图6所展示的,系统600可以包括若干处理器,为清楚起见,仅示出了其中两个,即处理器602和604。处理器602和604可以各自包括本地存储器控制器集线器(MCH)606和608用于使能与存储器610和612的通信。存储器610和/或612可以存储各种数据,比如参照图5的存储器512所讨论的那些。
在实施例中,处理器602和604可以是参照图5所讨论的处理器502之一。处理器602和604可以分别使用点到点(PtP)接口电路616和618经由PtP接口614交换数据。同样,处理器602和604中可以各自使用点到点接口电路626、628、630和632经由单独的PtP接口622和624来与芯片组620交换数据。芯片组620可以进一步经由图形接口636(例如使用PtP接口电路637)与图形电路634交换数据。
处理器602和604内可以提供至少一个实施例。例如,系统600的一个或多个部件可以包括图1至图5的逻辑140,包括位于处理器602和604内部。然而,图6的系统600内的其他电路、逻辑单元或设备中可以存在其他实施例。此外,其他实施例可以贯穿图6中所展示的若干电路、逻辑单元或设备分布。
芯片组620可以使用PtP接口电路641与总线640通信。总线640可以与一个或多个设备通信,如总线桥接器642和I/O设备643。通过总线644,总线桥接器642可以与其他设备通信,如键盘/鼠标645、通信设备646(如调制解调器、网络接口设备或可以与计算机网络503通信的其他通信设备)、音频I/O设备647、和/或数据存储设备648。数据存储设备648可以存储代码649,所述代码可以由处理器602和/或604执行。
而且,在此所讨论的场景、图像或帧(例如,在各实施例中,其可以由图形逻辑进行处理)可以被图像捕获设备(比如数码相机(其可以具体化在另一设备中,比如智能电话、平板计算机、膝上计算机、独立式相机等)或模拟设备捕获,所述模拟设备的捕获到的图像随后被转换成数字形式)。同样,在此所讨论的场景、图像或帧可以通过艺术设计、游戏设计或任何类型的3D/2D(二维/三维)工业设计生成。例如,场景可以指一组几何结构和相关的纹理图、光照效果等。而且,在实施例中,图像捕获设备可能能够捕获多个帧。进一步,在一些实施例中,场景中的一个或多个帧在计算机上设计/生成。同样,场景的一个或多个帧可以经由显示器(比如参照图5和/或图6所讨论的显示器,包括例如扁平面板显示器设备等)呈现。
在一些实施例中,在此所讨论的部件中的一个或多个可以被具体化为片上系统(SOC)设备。图7展示了根据实施例的SOC封装体的框图。如图7中所展示的,SOC 702包括一个或多个中央处理单元(CPU)核720、一个或多个图形处理器单元(GPU)核730、输入/输出(I/O)接口740、和存储器控制器742。SOC封装体702的各部件可以耦合至互连或总线,比如在此参照其他附图所讨论的。同样,SOC封装体702可以包括更多或更少的部件,比如,如在此参照其他附图所讨论的那些。进一步,SOC封装体720的每个部件可以包括一个或多个其他部件,例如,如在此参照其他附图所讨论的那些。在一个实施例中,SOC封装体702(及其部件)设置在一个或多个集成电路(IC)管芯上,例如,所述管芯被封装至单个半导体设备中。
如图7中所展示的,SOC封装体702经由存储器控制器742耦合至存储器760(其可以与在此参照其他附图所讨论的存储器类似或相同)。在实施例中,存储器760(或其一部分)可以被整合在SOC封装体702上。
I/O接口740可以耦合至一个或多个I/O设备770,例如经由互连和/或总线,比如在此参照其他附图所讨论的。(多个)I/O设备770可以包括以下各项中的一项或多项:键盘、鼠标、触摸板、显示器、图像/视频捕获设备(比如照相机或摄录像机/录像机)、触摸屏、扬声器等。此外,在实施例中,SOC封装体702可以包括/整合逻辑140。可替代地,逻辑140可以设置在SOC封装体702外部(即,作为分立的逻辑)。
以下示例涉及进一步的实施例。示例1包括一种装置,包括:逻辑,所述逻辑至少部分地包括硬件逻辑,用于使得将与图像中的一个或多个图元相对应的绘制请求存储在队列的条目中,其中,所述条目要在所述逻辑的前端和后端两者都完成了与所述绘制请求相关联的一个或多个操作之后被解锁。示例2包括如示例1所述装置,其中,在处理器上执行的一个或多个线程用于执行与所述绘制请求相对应的所述一个或多个操作。示例3包括如示例1所述装置,其中,前端线程用于:处理所述一个或多个图元;以及将经处理的图元中的每一个装入与那个经处理的图元相交的相应图块中。示例4包括如示例1所述装置,其中,一旦前端线程完成了将所有图元装入所述图像的图块中,所述队列的相应条目就将被标记为前端完成。示例5包括如示例4所述装置,其中,多个后端线程中的任何一个能够被选择以对所述图块执行后端处理。示例6包括如示例1所述装置,其中,单个绘制上下文中的多个图块用于由多个后端线程同时处理。示例7包括如示例1所述装置,其中,所述图像用于被划分成以阵列或矩阵格式安排的多个图块。示例8包括如示例1所述装置,其中,所述队列用于被设置大小以存储足够量的绘制请求从而保持多个线程在一段时间期间忙于处理所述绘制请求。示例9包括如示例1所述装置,其中,所述队列的每个条目用于存储单个绘制请求。示例10包括如示例1所述装置,其中,所述队列是循环队列。示例11包括如示例1所述装置,其中,所述逻辑用于使得将多个接收到的绘制请求按照接收的顺序存储在循环队列中。示例12包括如示例1所述装置,其中,所述逻辑包括图形流水线。示例13包括如示例1所述装置,其中,处理器包括所述逻辑。示例14包括如示例1所述装置,其中,具有一个或多个处理器核的处理器、所述逻辑或所述队列中的一者或多者位于单个集成电路管芯上。
示例15包括一种包括一条或多条指令的计算机可读介质,所述一条或多条指令当在处理器上被执行时将所述处理器配置成用于执行以下一个或多个操作:使得将与图像中的一个或多个图元相对应的绘制请求存储在队列的条目中,其中,所述条目用于在所述图形流水线的前端和后端两者都完成了与所述绘制请求相关联的一个或多个操作之后被解锁。示例16包括如示例15所述的计算机可读介质,进一步包括一条或多条指令,所述一条或多条指令当在所述处理器上被执行时将所述处理器配置成用于执行以下一个或多个操作:使得前端线程处理所述一个或多个图元并将经处理的图元中的每一个装入与那个经处理的图元相交的相应图块中。示例17包括如示例15所述的计算机可读介质,其中,一旦在所述处理器上执行的前端线程完成了将所有图元装入所述图像的图块中,所述队列的相应条目就要被标记为前端完成。示例18包括如示例17所述的计算机可读介质,进一步包括一条或多条指令,所述一条或多条指令当在所述处理器上被执行时将所述处理器配置成用于执行以下一个或多个操作:使得多个后端线程中的任何一个被选择以对所述图块执行后端处理。
示例19包括一种方法,包括:使得将与图像中的一个或多个图元相对应的绘制请求存储在队列的条目中,其中,所述条目在图形流水线的前端和后端两者都完成了与所述绘制请求相关联的一个或多个操作之后被解锁。示例20包括如示例19所述方法,进一步包括:在处理器上执行的一个或多个线程执行与所述绘制请求相对应的所述一个或多个操作。示例21包括如示例19所述方法,进一步包括:使得前端线程处理所述一个或多个图元,并将经处理的图元中的每一个装入与那个经处理的图元相交的相应图块中。示例22包括如示例19所述方法,进一步包括:一旦前端线程完成了将所有图元装入所述图像的图块中,就将所述队列的相应条目标记为前端完成。示例23包括如示例22所述方法,进一步包括:使得多个后端线程中的任何一个被选择以对所述图块执行后端处理。示例24包括如示例19所述方法,进一步包括:单个绘制上下文中的多个图块被多个后端线程同时处理。示例25包括如示例19所述方法,进一步包括:将所述图像划分成以阵列或矩阵格式安排的多个图块。示例26包括如示例19所述方法,进一步包括:设置所述队列的大小以便存储足够量的绘制请求从而保持多个线程在一段时间期间忙于处理所述绘制请求。示例27包括如示例19所述方法,进一步包括:所述队列的每个条目存储单个绘制请求。示例28包括如示例19所述的方法,其中,所述队列是循环队列。示例29包括如示例19所述方法,进一步包括:使得将多个接收到的绘制请求按照接收的顺序存储在循环队列中。
示例30包括一种系统,所述系统包括:处理器,所述处理器具有一个或多个处理器核;存储器,所述存储器用于存储有待由所述一个或多个处理器核中的至少一个处理器核访问的、与场景的至少一个帧相对应的数据;显示器设备,所述显示器设备用于呈现所述场景的所述至少一个帧;以及逻辑,所述逻辑至少部分地包括硬件逻辑,用于使得将与图像中的一个或多个图元相对应的绘制请求存储在队列的条目中,其中,所述条目要在所述逻辑的前端和后端两者都完成了与所述绘制请求相关联的一个或多个操作之后被解锁。示例31包括如示例30所述系统,其中,前端线程用于处理所述一个或多个图元,并将经处理的图元中的每一个装入与这个经处理的图元相交的相应图块中。示例32包括如示例30所述系统,其中,一旦前端线程完成了将所有图元装入所述图像的图块中,所述队列的相应条目就将被标记为前端完成,其中,多个后端线程中的任何一个能够被选定用于对所述图块执行后端处理。
示例33包括一种装置,所述装置包括用于执行如任一前述示例中所提出的方法的装置。
示例34包括一种包括机器可读指令的机器可读存储器,所述机器可读指令当被执行时用于实施如任一前述示例所提出的方法或实现如任一前述示例所提出的装置。
在各实施例中,在此(例如,参照图1至图7)所讨论的操作可以被实现为硬件(例如,逻辑电路)、软件、固件或其组合,其可以被设置为计算机程序产品,例如包括具有存储在其上用于对计算机编程以执行在此所讨论的过程的指令(或软件程序)的有形(例如,非瞬态)机器可读或计算机可读介质。所述机器可读介质可以包括存储设备,比如参照图1至图7所讨论的那些。
另外,这种计算机可读介质可以作为计算机程序产品被下载,其中,所述程序可以经由通信链路(例如,总线、调制解调器或网络连接)以载波或其他传播介质中所提供的数据信号的方式被从远程计算机(例如,服务器)传送至进行请求的计算机(例如,客户端)。
本说明书中对“一个实施例”或“实施例”的引用意味着结合所述实施例所描述的具体特征、结构、和/或特性可以包括在至少一种实现方式中。短语“在一个实施例中”在本说明书中各地方的出现可以或可以不全都引用相同的实施例。
同样,在说明书和权利要求书中,可以使用术语“耦合”和“连接”及其衍生词。在一些实施例中,“连接”可以用于指示两个或更多元件彼此进行直接物理或电气接触。“耦合”可以意指两个或更多个元件进行直接物理或电气接触。然而,“耦合”还可以意指两个或更多个元件可以并非彼此直接接触,但仍可以彼此合作或交互。
因而,虽然已经使用特定于结构特征和/或方法行为的语言描述了实施例,将理解的是,所要求保护的主题可以不限于所述的特定特征或行为。相反,所述特定特征和行为被作为实现所要求保护的主题的示例形式而公开。
Claims (25)
1.一种用于提供用于多线程图形流水线的自由排序线程模型的装置,所述装置包括:
逻辑,所述逻辑至少部分地包括硬件逻辑,用于使得将与图像中的一个或多个图元相对应的绘制请求存储在队列的条目中,
其中,所述逻辑包括前端和后端,所述前端包括多个前端线程,通过锁定,每个前端线程被强制执行针对与所述队列中的有效条目对应的绘制请求的前端工作,所述条目用于在所述逻辑的所述前端和后端两者都完成了与所述绘制请求相对应的一个或多个操作之后被解锁,其中,所述逻辑能够在不首先对所述一个或多个操作的任何部分进行排序的情况下处理所述一个或多个图元。
2.如权利要求1所述的装置,其中,在处理器上执行的一个或多个线程用于执行与所述绘制请求相对应的所述一个或多个操作。
3.如权利要求1所述的装置,其中,所述多个前端线程用于:处理所述一个或多个图元;以及将经处理的图元中的每一个装入与那个经处理的图元相交的相应图块中。
4.如权利要求1所述的装置,其中,一旦所述多个前端线程完成了将所有图元装入所述图像的图块中,所述队列的相应条目就将被标记为前端完成。
5.如权利要求4所述的装置,其中,所述后端所包括的多个后端线程中的任何一个能够被选择以对所述图块执行后端处理。
6.如权利要求1所述的装置,其中,单个绘制上下文中的多个图块用于由所述后端所包括的多个后端线程同时处理。
7.如权利要求1所述的装置,其中,所述图像用于被划分成以阵列或矩阵格式安排的多个图块。
8.如权利要求1所述的装置,其中,所述队列用于被设置大小以存储足够量的绘制请求从而保持多个线程在一段时间期间忙于处理所述绘制请求。
9.如权利要求1所述的装置,其中,所述队列的每个条目用于存储单个绘制请求。
10.如权利要求1所述的装置,其中,所述队列是循环队列。
11.如权利要求1所述的装置,其中,所述逻辑用于使得将多个接收到的绘制请求按照接收的顺序存储在循环队列中。
12.如权利要求1所述的装置,其中,
所述逻辑包括图形流水线;或者
处理器包括所述逻辑;或者
以下一者或多者位于单个集成电路管芯上:具有一个或多个处理器核的处理器、所述逻辑或所述队列。
13.一种用于提供用于多线程图形流水线的自由排序线程模型的方法,所述方法包括:
使得将与图像中的一个或多个图元相对应的绘制请求存储在队列的条目中,
其中,通过锁定,图形流水线的前端的多个前端线程中的每个线程被强制执行针对与所述队列中的有效条目对应的绘制请求的前端工作,所述条目在所述图形流水线的所述前端和后端两者都完成了与所述绘制请求相对应的一个或多个操作之后被解锁,其中,所述一个或多个图元用于在不首先对所述一个或多个操作的任何部分进行排序的情况下被处理。
14.如权利要求13所述的方法,进一步包括:在处理器上执行的一个或多个线程执行与所述绘制请求相对应的所述一个或多个操作。
15.如权利要求13所述的方法,进一步包括:使得所述多个前端线程处理所述一个或多个图元,并将经处理的图元中的每一个装入与那个经处理的图元相交的相应图块中。
16.如权利要求13所述的方法,进一步包括:一旦前端线程完成了将所有图元装入所述图像的图块中,就将所述队列的相应条目标记为前端完成。
17.如权利要求16所述的方法,进一步包括:使得所述后端所包括的多个后端线程中的任何一个被选择以对所述图块执行后端处理。
18.如权利要求13所述的方法,进一步包括:单个绘制上下文中的多个图块被所述后端所包括的多个后端线程同时处理。
19.如权利要求13所述的方法,进一步包括:将所述图像划分成以阵列或矩阵格式安排的多个图块。
20.如权利要求13所述的方法,进一步包括:设置所述队列的大小以便存储足够量的绘制请求从而保持多个线程在一段时间期间忙于处理所述绘制请求。
21.如权利要求13所述的方法,进一步包括:所述队列的每个条目存储单个绘制请求。
22.如权利要求13所述的方法,其中,所述队列是循环队列。
23.如权利要求13所述的方法,进一步包括:使得将多个接收到的绘制请求按照接收的顺序存储在循环队列中。
24.一种机器可读介质,包括代码,所述代码当被执行时使机器执行权利要求13至23中任一项所述的方法。
25.一种用于提供用于多线程图形流水线的自由排序线程模型的设备,包括用于执行如权利要求13至23中任一项要求保护的方法的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/542,571 US9824413B2 (en) | 2014-11-15 | 2014-11-15 | Sort-free threading model for a multi-threaded graphics pipeline |
US14/542,571 | 2014-11-15 | ||
PCT/US2015/056267 WO2016077036A1 (en) | 2014-11-15 | 2015-10-19 | Sort-free threading model for a multi-threaded graphics pipeline |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107148619A CN107148619A (zh) | 2017-09-08 |
CN107148619B true CN107148619B (zh) | 2021-04-27 |
Family
ID=55954843
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580058642.XA Active CN107148619B (zh) | 2014-11-15 | 2015-10-19 | 用于多线程图形流水线的自由排序线程模型 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9824413B2 (zh) |
EP (1) | EP3218869A4 (zh) |
CN (1) | CN107148619B (zh) |
WO (1) | WO2016077036A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9824413B2 (en) | 2014-11-15 | 2017-11-21 | Intel Corporation | Sort-free threading model for a multi-threaded graphics pipeline |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101563712A (zh) * | 2006-12-22 | 2009-10-21 | 高通股份有限公司 | 快速像素渲染处理 |
CN101573690A (zh) * | 2006-12-30 | 2009-11-04 | 英特尔公司 | 线程排队的方法和装置 |
CN101578629A (zh) * | 2007-01-10 | 2009-11-11 | 高通股份有限公司 | 三维图形管线的自动负载平衡 |
WO2014063067A1 (en) * | 2012-10-19 | 2014-04-24 | uCIRRUS | Multi-threaded, lockless data parallelization |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6535905B1 (en) * | 1999-04-29 | 2003-03-18 | Intel Corporation | Method and apparatus for thread switching within a multithreaded processor |
US7436531B2 (en) * | 2002-05-14 | 2008-10-14 | Xerox Corporation | Systems and methods for using multiple processors for imaging |
US7496917B2 (en) * | 2003-09-25 | 2009-02-24 | International Business Machines Corporation | Virtual devices using a pluarlity of processors |
US7814243B2 (en) * | 2007-06-01 | 2010-10-12 | Sonics, Inc. | Shared storage for multi-threaded ordered queues in an interconnect |
US20100262979A1 (en) * | 2009-04-08 | 2010-10-14 | Google Inc. | Circular command queues for communication between a host and a data storage device |
US20100289804A1 (en) * | 2009-05-13 | 2010-11-18 | International Business Machines Corporation | System, mechanism, and apparatus for a customizable and extensible distributed rendering api |
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
US9824413B2 (en) | 2014-11-15 | 2017-11-21 | Intel Corporation | Sort-free threading model for a multi-threaded graphics pipeline |
-
2014
- 2014-11-15 US US14/542,571 patent/US9824413B2/en active Active
-
2015
- 2015-10-19 EP EP15859719.5A patent/EP3218869A4/en not_active Withdrawn
- 2015-10-19 CN CN201580058642.XA patent/CN107148619B/zh active Active
- 2015-10-19 WO PCT/US2015/056267 patent/WO2016077036A1/en active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101563712A (zh) * | 2006-12-22 | 2009-10-21 | 高通股份有限公司 | 快速像素渲染处理 |
CN101573690A (zh) * | 2006-12-30 | 2009-11-04 | 英特尔公司 | 线程排队的方法和装置 |
US7975272B2 (en) * | 2006-12-30 | 2011-07-05 | Intel Corporation | Thread queuing method and apparatus |
CN101578629A (zh) * | 2007-01-10 | 2009-11-11 | 高通股份有限公司 | 三维图形管线的自动负载平衡 |
WO2014063067A1 (en) * | 2012-10-19 | 2014-04-24 | uCIRRUS | Multi-threaded, lockless data parallelization |
Also Published As
Publication number | Publication date |
---|---|
EP3218869A4 (en) | 2018-04-18 |
EP3218869A1 (en) | 2017-09-20 |
US20160140684A1 (en) | 2016-05-19 |
CN107148619A (zh) | 2017-09-08 |
US9824413B2 (en) | 2017-11-21 |
WO2016077036A1 (en) | 2016-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10013731B2 (en) | Maximizing parallel processing in graphics processors | |
US10217183B2 (en) | System, method, and computer program product for simultaneous execution of compute and graphics workloads | |
JP6335335B2 (ja) | タイルベースのレンダリングgpuアーキテクチャのための任意のタイル形状を有する適応可能なパーティションメカニズム | |
US8542247B1 (en) | Cull before vertex attribute fetch and vertex lighting | |
US20140292771A1 (en) | Techniques for locally modifying draw calls | |
US20160026494A1 (en) | Mid-thread pre-emption with software assisted context switch | |
US9477482B2 (en) | System, method, and computer program product for implementing multi-cycle register file bypass | |
JP2013541748A (ja) | 多重処理ユニット内のオンチップメモリを用いるデータ処理 | |
US9812093B2 (en) | Programmable power performance optimization for graphics cores | |
US10572399B2 (en) | Memory request arbitration | |
WO2017071176A1 (zh) | 一种图像处理方法与图像处理装置 | |
CN110036375B (zh) | 无序高速缓存返回 | |
CN114529658A (zh) | 一种图形渲染方法及其相关设备 | |
US20140372703A1 (en) | System, method, and computer program product for warming a cache for a task launch | |
US8564616B1 (en) | Cull before vertex attribute fetch and vertex lighting | |
US20130187956A1 (en) | Method and system for reducing a polygon bounding box | |
US9171525B2 (en) | Graphics processing unit with a texture return buffer and a texture queue | |
CN107148619B (zh) | 用于多线程图形流水线的自由排序线程模型 | |
US9165396B2 (en) | Graphics processing unit with a texture return buffer and a texture queue | |
US9251557B2 (en) | System, method, and computer program product for recovering from a memory underflow condition associated with generating video signals | |
US8704835B1 (en) | Distributed clip, cull, viewport transform and perspective correction | |
US10796399B2 (en) | Pixel wait synchronization | |
US20230169621A1 (en) | Compute shader with load tile |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |