CN108352052A - 用于在计算设备处高效处理图形数据的三重缓冲常量缓冲器 - Google Patents
用于在计算设备处高效处理图形数据的三重缓冲常量缓冲器 Download PDFInfo
- Publication number
- CN108352052A CN108352052A CN201680066677.2A CN201680066677A CN108352052A CN 108352052 A CN108352052 A CN 108352052A CN 201680066677 A CN201680066677 A CN 201680066677A CN 108352052 A CN108352052 A CN 108352052A
- Authority
- CN
- China
- Prior art keywords
- memory block
- data
- buffer
- memory
- processor
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20021—Dividing image into blocks, subimages or windows
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
描述了一种用于促进在计算设备处使用三重缓冲常量缓冲器来高效处理图形数据的机制。如本文所述的实施例的方法包括检测由应用程序生成多块缓冲器以在计算设备的图形处理器处执行数据处理,并且将多块缓冲器的第一存储器块映射到图形处理器,其中映射还包括将多块缓冲器的第二存储器块和第三存储器块映射到应用程序处理器。该方法还包括执行交换操作以促进图形处理器处理与应用程序处理器相关联的当前数据集。
Description
技术领域
这里描述的实施例一般涉及计算机。更具体地,描述了用于促进在计算设备处使用三重缓冲常量缓冲器来高效处理图形数据的实施例。
背景技术
众所周知,虚拟现实(VR)设备(如OculusTMRiftTM等)具有头部和位置追踪功能,可让用户在虚拟世界中移动和环视。相应地,头部跟踪数据不断被轮询并用于以非常高的速率(例如至少90Hz)和低等待时间更新虚拟世界是非常重要的,因为不能这样做会被用户感知并且会引起不适甚至疾病,如恶心。
旨在解决这些问题的常规技术(例如试图减少头部跟踪输入与渲染图像之间的任何延迟等)是麻烦且低效的,因为它们通常需要同步图形处理单元(GPU)和中央处理单元(CPU),这导致停顿和性能降低。
附图说明
在附图中通过举例而非限制的方式示出了实施例,其中相似的附图标记指代类似的元件。
图1是根据实施例的处理系统的框图。
图2是具有一个或多个处理器核心、集成存储器控制器和集成图形处理器的处理器的实施例的框图。
图3是图形处理器的框图,其可以是离散图形处理单元,或者可以是与多个处理核心集成的图形处理器。
图4是根据一些实施例的图形处理器的图形处理引擎的框图。
图5是图形处理器的另一个实施例的框图。
图6示出了包括在图形处理引擎的一些实施例中采用的处理元件阵列的线程执行逻辑。
图7是示出根据一些实施例的图形处理器指令格式的框图。
图8是图形处理器的另一个实施例的框图。
图9A是示出根据实施例的图形处理器命令格式的框图,图9B是示出根据实施例的图形处理器命令序列的框图。
图10示出了根据一些实施例的用于数据处理系统的示例性图形软件架构。
图11是示出根据实施例的可用于制造集成电路以执行操作的IP核开发系统的框图。
图12是示出根据实施例的可以使用一个或多个IP核制造的示例性片上系统集成电路的框图。
图13示出根据一个实施例的采用三重缓冲常量缓冲机制的计算设备。
图14示出根据一个实施例的三重缓冲常量缓冲机制。
图15A、15B和15C示出了需要同步的传统技术。
图15D示出根据一个实施例的事务序列。
图16示出根据一个实施例的事务序列。
图17示出根据一个实施例的架构布置。
图18A、18B和18C分别示出根据一个实施例的促进映射、取消映射和交换操作的方法。
图19示出根据一个实施例的促进用于映射、取消映射和交换操作的控制和数据流的方法。
具体实施方式
在以下描述中,阐述了许多具体细节。然而,如本文所述,可以在没有这些具体细节的情况下实施实施例。在其他情况下,众所周知的电路、结构和技术未被详细示出以免混淆对本说明的理解。
实施例提供了一种提供三重缓冲常量缓冲器(“TBCB”)的新颖技术,其用于连续更新各种内容(例如但不限于VR设备的头部跟踪位置等),而不需要任何CPU-GPU同步或导致停顿或性能下降。
例如,GPU被设计为尽可能多地并行执行工作,因此通常缓冲几个绘制命令(有时跨越多个帧),这可能在渲染流水线中引入延迟。因此,如果在帧的发出命令开始时查询头部位置,则在用户的屏幕上呈现最终渲染的内容时,延迟可能变得相当大。
某些常规技术通过在GPU开始处理帧的任何渲染调用之前尽可能长地延迟头部跟踪位置的读取并将该位置写入常量缓冲器来解决延迟问题。
例如,几个应用程序从视图不敏感渲染开始,例如环境贴图和阴影贴图创建等,在这种情况下,在执行视图不敏感(也称为“视图不可知”或“视图独立”)渲染之后读取头部跟踪位置是可行的,稍微减少延迟;然而,应用程序很难知道GPU何时完成视图独立渲染,因为这样做需要如前所述的CPU和GPU的同步,这会造成停顿并严重降低性能。
在一个实施例中,新颖的TBCB包括两个对CPU可见的存储器块(包括显示驱动器)和一个对GPU可见的存储器块。这启用来自应用程序的无锁更新。每次应用程序(如映射函数)映射缓冲器时,循环函数都会返回一个指向CPU可见存储器块的指针,而只有一个当前更新的存储器块可能处于不一致状态。例如,在GPU侧,一个新的交换命令被引入到命令流中,其中该交换命令促进将GPU可见存储器块与最为近期(most recently)更新的当前未被映射的CPU可见存储器块交换。该交换可以通过交换GPU可见存储器块和CPU可见存储器块的指针或将CPU可见存储器块的内容复制到GPU可见存储器块来实现。
预期诸如“请求”、“查询”、“作业”、“工作”、“工作项目”和“工作负载”之类的术语在本文件中可以互换地引用。类似地,“应用程序”或“代理”可以指或包括通过API提供的计算机程序、软件应用程序、游戏、工作站应用程序等,诸如免费渲染API,诸如开放图形库 等,其中“调度”可以互换地称为“工作单元”或“绘制”,同样,“应用程序”可以互换地称为“工作流”或只是“代理”。例如,诸如3D游戏的工作负载可以包括并发布任何数量和类型的“帧”,其中每个帧可以表示图像(例如,帆船、人脸)。此外,每个帧可以包括并提供任何数量和类型的工作单元,其中每个工作单元可以表示由其对应帧代表的图像(例如,帆船、人脸)的一部分(例如,帆船的桅杆、人脸的前额)。然而,为了一致性,在整个本文档中每个项目可以由单个术语来引用(例如,“调度”、“代理”等)。
在一些实施例中,诸如“显示屏幕”和“显示表面”之类的术语可以互换地使用,指的是显示设备的可见部分,而显示设备的其余部分可以嵌入到计算设备中,诸如智能手机、可穿戴设备等。可以设想并且要注意的是,实施例不限于任何特定的计算设备、软件应用程序、硬件组件、显示设备、显示屏幕或表面、协议、标准等。例如,实施例可以应用于并与诸如台式机、笔记本电脑、平板电脑、智能电话、头戴式显示器和其他可穿戴设备和/或类似物的任何数量和类型的计算机上的任何数量和类型的实时应用程序一起使用。此外,例如,使用这种新颖技术为高效性能渲染场景的范围可以从简单场景(如桌面合成)到复杂场景(如3D游戏、增强现实应用程序等)。
系统总览
图1是根据实施例的处理系统100的框图。在各种实施例中,系统100包括一个或多个处理器102和一个或多个图形处理器108,并且可以是单处理器桌面系统、多处理器工作站系统或具有大量处理器102或处理器核心107的服务器系统。在实施例中,系统100是合并在用于移动、手持或嵌入式设备中的片上系统(SoC)集成电路内的处理平台。
系统100的实施例可以包括或者并入在基于服务器的游戏平台、包括游戏和媒体控制台的游戏控制台、移动游戏控制台、手持游戏控制台或在线游戏控制台内。在一些实施例中,系统100是移动电话、智能电话、平板计算设备或移动互联网设备。数据处理系统100还可以包括、耦合或集成在可穿戴设备(诸如智能手表可穿戴设备、智能眼镜设备、增强现实设备或虚拟现实设备)内。在一些实施例中,数据处理系统100是具有一个或多个处理器102和由一个或多个图形处理器108生成的图形界面的电视或机顶盒设备。
在一些实施例中,一个或多个处理器102各自包括一个或多个处理器核心107以处理在被执行时执行用于系统和用户软件的操作的指令。在一些实施例中,一个或多个处理器核心107中的每一个被配置为处理特定指令集109。在一些实施例中,指令集109可以促进复杂指令集计算(CISC)、精简指令集计算(RISC)或经由超长指令字(VLIW)进行计算。多个处理器核心107可以各自处理不同的指令集109,其可以包括促进其他指令集的仿真的指令。处理器核心107还可以包括其他处理设备,诸如数字信号处理器(DSP)。
在一些实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多个级别的内部高速缓存。在一些实施例中,高速缓存存储器在处理器102的各种组件之间共享。在一些实施例中,处理器102还使用外部高速缓存(例如,级别3(L3)高速缓存或最终级高速缓存(LLC))(未示出),其可以使用已知的高速缓存一致性技术在处理器核心107之间共享。处理器102中另外包括寄存器文件106,其可以包括用于存储不同类型的数据(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)的不同类型的寄存器。一些寄存器可以是通用寄存器,而其他寄存器可以专用于处理器102的设计。
在一些实施例中,处理器102耦合到处理器总线110以在处理器102和系统100中的其他组件之间传输诸如地址、数据或控制信号的通信信号。在一个实施例中,系统100使用示例性“中心”系统架构,包括存储器控制器中心116和输入输出(I/O)控制器中心130。存储器控制器中心116促进存储器设备和系统100的其他组件之间的通信,而I/O控制器中心(ICH)130提供经由本地I/O总线到IO设备的连接。在一个实施例中,存储器控制器中心116的逻辑被集成在处理器内。
存储器设备120可以是具有合适性能以充当过程存储器的动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备、相变存储器设备或一些其他存储设备。在一个实施例中,存储器设备120可以作为系统100的系统存储器来操作,以存储数据122和指令121供在一个或多个处理器102执行应用程序或过程时使用。存储器控制器中心116还与可选的外部图形处理器112耦合,该外部图形处理器112可以与处理器102中的一个或多个图形处理器108通信以执行图形和媒体操作。
在一些实施例中,ICH 130使得外围设备能够经由高速I/O总线连接到存储器设备120和处理器102。I/O外围设备包括但不限于音频控制器146、固件接口128、无线收发器126(例如,Wi-Fi、蓝牙)、数据存储设备124(例如硬盘驱动器、闪速存储器等)以及用于将传统(例如,个人系统2(PS/2))设备耦合到系统的传统I/O控制器140。一个或多个通用串行总线(USB)控制器142连接诸如键盘和鼠标144组合的输入设备。网络控制器134还可以耦合到ICH 130。在一些实施例中,高性能网络控制器(未示出)耦合到处理器总线110。将理解,所示的系统100是示例性的而不是限制性的,因为也可以使用不同配置的其他类型的数据处理系统。例如,I/O控制器中心130可以被集成在一个或多个处理器102内,或者存储器控制器中心116和I/O控制器中心130可以被集成到诸如外部图形处理器112的离散的外部图形处理器中。
图2是具有一个或多个处理器核心202A-202N、集成存储器控制器214和集成图形处理器208的处理器200的实施例的框图。图2中与本文任何其他图中的元素具有相同附图标记(或名称)的那些元素可以以与本文其他地方所描述类似的任何方式操作或起作用,但不限于此。处理器200可以包括额外的核心,直到并且包括由虚线框表示的附加核心202N。处理器核心202A-202N中的每一个包括一个或多个内部高速缓存单元204A-204N。在一些实施例中,每个处理器核心还可以访问一个或多个共享高速缓存单元206。
内部高速缓存单元204A-204N和共享高速缓存单元206表示处理器200内的高速缓存存储器分层结构。高速缓存存储器分层结构可以包括每个处理器核心中的至少一个级别的指令和数据高速缓存以及一个或多个级别的共享中级高速缓存,例如级别2(L2)、级别3(L3)、级别4(L4)或其他级别的高速缓存,其中外部存储器之前的最高级别的高速缓存被分类为LLC。在一些实施例中,高速缓存一致性逻辑保持各种高速缓存单元206和204A-204N之间的一致性。
在一些实施例中,处理器200还可以包括一组一个或多个总线控制器单元216和系统代理核心210。一个或多个总线控制器单元216管理一组外围总线,诸如一个或多个外围组件互连总线(例如,PCI、PCI Express)。系统代理核心210为各种处理器组件提供管理功能。在一些实施例中,系统代理核心210包括一个或多个集成存储器控制器214以管理对各种外部存储器设备(未示出)的访问。
在一些实施例中,处理器核心202A-202N中的一个或多个包括对同步多线程的支持。在这样的实施例中,系统代理核心210包括用于在多线程处理期间协调和操作核心202A-202N的组件。系统代理核心210可以另外包括功率控制单元(PCU),其包括调节处理器核心202A-202N和图形处理器208的功率状态的逻辑和组件。
在一些实施例中,处理器200另外包括图形处理器208以执行图形处理操作。在一些实施例中,图形处理器208与该组共享高速缓存单元206以及包括一个或多个集成存储器控制器214的系统代理核心210耦合。在一些实施例中,显示控制器211与图形处理器208耦合以将图形处理器输出驱动到一个或多个耦合的显示器。在一些实施例中,显示控制器211可以是经由至少一个互连与图形处理器耦合的单独的模块,或者可以集成在图形处理器208或系统代理核心210内。
在一些实施例中,使用基于环的互连单元212来耦合处理器200的内部组件。然而,可以使用替代互连单元,诸如点对点互连、交换互连或其他技术,包括本领域众所周知的技术。在一些实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213表示多种I/O互连中的至少一种,包括促进各种处理器组件与高性能嵌入式存储器模块218(诸如eDRAM模块)之间的通信的封装上I/O互连。在一些实施例中,处理器核心202-202N和图形处理器208中的每一个使用嵌入式存储器模块218作为共享的最后级高速缓存。
在一些实施例中,处理器核心202A-202N是执行相同指令集架构的同构核心。在另一个实施例中,处理器核心202A-202N在指令集架构(ISA)方面是异构的,其中一个或多个处理器核心202A-N执行第一指令集,而其他核心中的至少一个核心执行第一指令集的子集或不同的指令集。在一个实施例中,就微架构而言,处理器核心202A-202N是异构的,其中具有相对较高功耗的一个或多个核心与具有较低功耗的一个或多个功率核心耦合。另外,除了其他组件之外,处理器200可以在一个或多个芯片上实现,或者作为具有所示组件的SoC集成电路来实现。
图3是图形处理器300的框图,其可以是离散图形处理单元,或者可以是与多个处理核心集成的图形处理器。在一些实施例中,图形处理器经由存储器映射的I/O接口与图形处理器上的寄存器以及放置在处理器存储器中的命令进行通信。在一些实施例中,图形处理器300包括访问存储器的存储器接口314。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存和/或到系统存储器的接口。
在一些实施例中,图形处理器300还包括显示控制器302以将显示输出数据驱动到显示设备320。显示控制器302包括用于一个或多个覆盖平面的硬件,用于多层视频或用户界面元素的显示和合成。在一些实施例中,图形处理器300包括视频编解码器引擎306,以将媒体编码为一个或多个媒体编码格式,从一个或多个媒体编码格式解码或在一个或多个媒体编码格式之间转码,所述媒体编码格式包括但不限于诸如MPEG-2的运动图像专家组(MPEG)格式,诸如H.264/MPEG-4AVC的高级视频编码(AVC)格式,以及电影和电视工程师协会(SMPTE)421M/VC-1和联合摄影专家组(JPEG)格式,如JPEG和Motion JPEG(MJPEG)格式。
在一些实施例中,图形处理器300包括用于执行二维(2D)光栅化器操作(包括例如位边界块传输)的块图像传输(BLIT)引擎304。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件来执行2D图形操作。在一些实施例中,图形处理引擎310是用于执行图形操作的计算引擎,包括三维(3D)图形操作和媒体操作。
在一些实施例中,GPE 310包括3D流水线312,用于执行3D操作,诸如使用作用于3D基元形状(例如矩形、三角形等)的处理功能来渲染三维图像和场景。3D流水线312包括执行元件内的各种任务和/或将执行线程产生到3D/媒体子系统315的可编程和固定功能元件。尽管3D流水线312可以用于执行媒体操作,但是GPE 310的实施例还包括专门用于执行媒体操作(例如视频后处理和图像增强)的媒体流水线316。
在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元以代替视频编解码器引擎306或代表视频编解码器引擎306执行诸如视频解码加速、视频去隔行和视频编码加速之类的一个或多个专用媒体操作。在一些实施例中,媒体流水线316另外包括线程产生单元以产生用于在3D/媒体子系统315上执行的线程。产生的线程执行针对包括在3D/媒体子系统315中的一个或多个图形执行单元上的媒体操作的计算。
在一些实施例中,3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316产生的线程的逻辑。在一个实施例中,流水线将线程执行请求发送到3D/媒体子系统315,其包括用于仲裁和调度对可用线程执行资源的各种请求的线程调度逻辑。执行资源包括一系列图形执行单元来处理3D和媒体线程。在一些实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,子系统还包括共享存储器,包括寄存器和可寻址存储器,以在线程之间共享数据并存储输出数据。
3D/媒体处理
图4是根据一些实施例的图形处理器的图形处理引擎410的框图。在一个实施例中,GPE 410是图3中所示的GPE 310的版本。图4中具有与本文的任何其他图中的元件相同的附图标记(或名称)的元件可以以与本文其他地方描述的方式类似的任何方式操作或起作用,但不限于此。
在一些实施例中,GPE 410与命令流转化器403耦合,命令流转化器403向GPE 3D和媒体流水线412、416提供命令流。在一些实施例中,命令流转化器403耦合到存储器,存储器可以是系统存储器、或者一个或多个内部高速缓存存储器和共享高速缓存存储器。在一些实施例中,命令流转化器403从存储器接收命令并将命令发送到3D流水线412和/或媒体流水线416。这些命令是从环形缓冲器中取出的指令,环形缓冲器存储用于3D和媒体流水线412、416的命令。在一个实施例中,环形缓冲器可以另外包括存储批量多个命令的批量命令缓冲器。3D和媒体流水线412、416通过经由相应流水线内的逻辑执行操作或通过将一个或多个执行线程调度到执行单元阵列414来处理命令。在一些实施例中,执行单元阵列414是可缩放的,使得阵列包括基于GPE 410的目标功率和性能水平的可变数量的执行单元。
在一些实施例中,采样引擎430与存储器(例如,高速缓存存储器或系统存储器)和执行单元阵列414耦合。在一些实施例中,采样引擎430为执行单元阵列414提供存储器访问机制,其允许执行阵列414读取来自存储器的图形和媒体数据。在一些实施例中,采样引擎430包括对媒体执行专用图像采样操作的逻辑。
在一些实施例中,采样引擎430中的专用媒体采样逻辑包括去噪/去隔行模块432、运动估计模块434以及图像缩放和滤波模块436。在一些实施例中,去噪/去隔行模块432包括对解码的视频数据执行去噪或去隔行算法中的一个或多个的逻辑。去隔行逻辑将隔行视频内容的交替场组合成单个视频帧。去噪逻辑减少或消除视频和图像数据中的数据噪音。在一些实施例中,去噪逻辑和去隔行逻辑是运动自适应的,并且基于在视频数据中检测到的运动量,使用空间或时间滤波。在一些实施例中,去噪声/去隔行模块432包括专用运动检测逻辑(例如,在运动估计引擎434内)。
在一些实施例中,运动估计引擎434通过对视频数据执行诸如运动矢量估计和预测的视频加速功能来为视频操作提供硬件加速。运动估计引擎确定描述连续视频帧之间的图像数据变换的运动矢量。在一些实施例中,图形处理器媒体编解码器使用视频运动估计引擎434来对宏块级别上的视频执行操作,否则该操作可能在计算上太密集以致于不能用通用处理器执行。在一些实施例中,运动估计引擎434通常可用于图形处理器组件以辅助对视频数据内的运动的方向或幅度敏感或自适应的视频解码和处理功能。
在一些实施例中,图像缩放和滤波模块436执行图像处理操作以增强生成的图像和视频的视觉质量。在一些实施例中,缩放和过滤模块436在将数据提供给执行单元阵列414之前在采样操作期间处理图像和视频数据。
在一些实施例中,GPE 410包括数据端口444,其提供图形子系统访问存储器的附加机制。在一些实施例中,数据端口444促进对包括渲染目标写入、常量缓冲器读取、临时存储器空间读取/写入和媒体表面访问的操作的存储器访问。在一些实施例中,数据端口444包括高速缓存存储器空间,用于对存储器的高速缓存访问。高速缓存存储器可以是单个数据高速缓存,或者分成针对经由数据端口访问存储器的多个子系统的多个高速缓存(例如,渲染缓冲器高速缓存、常量缓冲器高速缓存等)。在一些实施例中,在执行单元阵列414中的执行单元上执行的线程通过经由耦合GPE 410的每个子系统的数据分配互连交换消息来与数据端口通信。
执行单元
图5是图形处理器500的另一个实施例的框图。图5中具有与本文任何其它图的元件相同的附图标记(或名称)的元件可以以与本文其他地方所描述的方式类似的任何方式操作或起作用,但不限于此。
在一些实施例中,图形处理器500包括环形互连502、流水线前端504、媒体引擎537和图形核心580A-580N。在一些实施例中,环形互连502将图形处理器耦合到包括其他图形处理器或一个或多个通用处理器核心的其他处理单元。在一些实施例中,图形处理器是集成在多核处理系统内的许多处理器中的一个。
在一些实施例中,图形处理器500经由环形互连502接收批量命令。传入命令由流水线前端504中的命令流转化器503解释。在一些实施例中,图形处理器500包括可缩放执行逻辑,用于经由图形核心580A-580N执行3D几何处理和媒体处理。对于3D几何处理命令,命令流转化器503将命令提供给几何流水线536。对于至少一些媒体处理命令,命令流转化器503将命令提供给与媒体引擎537耦合的视频前端534。在一些实施例中,媒体引擎537包括用于视频和图像后处理的视频质量引擎(VQE)530和用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(MFX)533引擎。在一些实施例中,几何流水线536和媒体引擎537各自为由至少一个图形核心580A提供的线程执行资源生成执行线程。
在一些实施例中,图形处理器500包括以模块化核心580A-580N(有时被称为核心切片)为特征的可缩放线程执行资源,每个模块化核心具有多个子核心550A-550N、560A-560N(有时被称为核心子切片)。在一些实施例中,图形处理器500可具有任何数量的图形核心580A到580N。在一些实施例中,图形处理器500包括具有至少第一子核心550A和第二核心子核心560A的图形核心580A。在其他实施例中,图形处理器是具有单个子核心(例如,550A)的低功率处理器。在一些实施例中,图形处理器500包括多个图形核心580A-580N,每个图形核心包括一组第一子核心550A-550N和一组第二子核心560A-560N。该组第一子核心550A-550N中的每个子核心至少包括第一组执行单元552A-552N和媒体/纹理采样器554A-554N。该组第二子核心560A-560N中的每个子核心包括至少第二组执行单元562A-562N和采样器564A-564N。在一些实施例中,每个子核心550A-550N、560A-560N共享一组共享资源570A-570N。在一些实施例中,共享资源包括共享高速缓存存储器和像素操作逻辑。其他共享资源也可以被包括在图形处理器的各种实施例中。
图6示出了包括在GPE的一些实施例中采用的处理元件阵列的线程执行逻辑600。图6中的具有与本文任何其它图的元件相同的附图标记(或名称)的元件可以以与本文其他地方所描述的方式类似的任何方式来操作或起作用,但不限于此。
在一些实施例中,线程执行逻辑600包括像素着色器602、线程调度器604、指令高速缓存606、包括多个执行单元608A-608N的可缩放执行单元阵列、采样器610、数据高速缓存612和数据端口614。在一个实施例中,所包括的组件经由链接到每个组件的互连结构互连。在一些实施例中,线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610和执行单元阵列608A-608N中的一个或多个的、到存储器(例如系统存储器或高速缓存存储器)的一个或多个连接。在一些实施例中,每个执行单元(例如608A)是能够执行多个并发线程并且对于每个线程并行处理多个数据元素的单独矢量处理器。在一些实施例中,执行单元阵列608A-608N包括任何数量的单独执行单元。
在一些实施例中,执行单元阵列608A-608N主要用于执行“着色器”程序。在一些实施例中,阵列608A-608N中的执行单元执行包括对许多标准3D图形着色器指令的本机支持的指令集,使得来自图形库(例如,Direct3D和OpenGL)的着色器程序以最小的转换执行。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如像素着色器、片段着色器)和通用处理(例如,计算和媒体着色器)。
执行单元阵列608A-608N中的每个执行单元对数据元素阵列进行操作。数据元素的数量是“执行大小”或指令的通道数量。执行通道是指令内数据元素访问、掩码和流程控制的逻辑执行单元。通道的数量可以独立于特定图形处理器的物理算术逻辑单元(ALU)或浮点单元(FPU)的数量。在一些实施例中,执行单元608A-608N支持整数和浮点数据类型。
执行单元指令集包括单指令多数据(SIMD)指令。各种数据元素可以作为打包数据类型存储在寄存器中,并且执行单元将根据元素的数据大小处理各种元素。例如,当在256位宽度的矢量上进行操作时,矢量的256位被存储在寄存器中,并且执行单元作为四个独立的64位打包数据元素(四字(QW)大小的数据元素)、8个独立的32位打包数据元素(双字(DW)大小的数据元素)、16个独立的16位打包数据元素(字(W)大小的数据元素)或32个独立的8位数据元素(字节(B)大小的数据元素)在矢量上进行操作。但是,不同的矢量宽度和寄存器大小是可能的。
一个或多个内部指令高速缓存(例如606)被包括在线程执行逻辑600中以缓存执行单元的线程指令。在一些实施例中,包括一个或多个数据高速缓存(例如,612)以在线程执行期间缓存线程数据。在一些实施例中,包括采样器610以提供用于3D操作的纹理采样和用于媒体操作的媒体采样。在一些实施例中,采样器610包括专门的纹理或媒体采样功能,以在提供采样数据给执行单元之前,在采样处理期间处理纹理或媒体数据。
在执行期间,图形和媒体流水线经由线程产生和调度逻辑将线程启动请求发送到线程执行逻辑600。在一些实施例中,线程执行逻辑600包括本地线程调度器604,其对来自图形和媒体流水线的线程启动请求进行仲裁并且在一个或多个执行单元608A-608N上实例化所请求的线程。例如,几何流水线(例如,图5的536)将顶点处理、曲面细分或几何处理线程调度给线程执行逻辑600(图6)。在一些实施例中,线程调度器604还可以处理来自正在执行的着色器程序的运行时线程产生请求。
一旦一组几何对象已被处理并光栅化为像素数据,调用像素着色器602以进一步计算输出信息并使结果被写入输出表面(例如,颜色缓冲器、深度缓冲器、模板缓冲器等)。在一些实施例中,像素着色器602计算要在光栅化对象上内插的各种顶点属性的值。在一些实施例中,像素着色器602然后执行应用程序编程接口(API)供应的像素着色器程序。为了执行像素着色器程序,像素着色器602经由线程调度器604将线程调度给执行单元(例如,608A)。在一些实施例中,像素着色器602使用采样器610中的纹理采样逻辑来访问存储在存储器中的纹理映射中的纹理数据。纹理数据和输入几何数据的算术运算计算每个几何片段的像素颜色数据,或丢弃一个或多个像素不再进一步处理。
在一些实施例中,数据端口614提供存储器访问机制,以便线程执行逻辑600将经处理的数据输出到存储器以在图形处理器输出流水线上进行处理。在一些实施例中,数据端口614包括或耦合到一个或多个高速缓存存储器(例如,数据高速缓存612)以经由数据端口缓存用于存储器访问的数据。
图7是示出根据一些实施例的图形处理器指令格式700的框图。在一个或多个实施例中,图形处理器执行单元支持具有多种格式的指令的指令集。实线框说明通常包含在执行单元指令中的组件,而虚线包括可选组件或仅包含在指令的子集中的组件。在一些实施例中,所描述和说明的指令格式700是宏指令,因为它们是提供给执行单元的指令,而不是在指令被处理时由指令解码产生的微操作。
在一些实施例中,图形处理器执行单元本机支持128位格式710的指令。基于所选择的指令、指令选项和操作数的数量,64位压缩指令格式730可用于某些指令。本机128位格式710提供对所有指令选项的访问,而一些选项和操作受限于64位格式730。以64位格式730可用的本机指令因实施例而异。在一些实施例中,部分地使用索引字段713中的一组索引值来压缩指令。执行单元硬件基于索引值参考一组压缩表并使用压缩表输出来重建128位格式710的本机指令。
对于每种格式,指令操作码712定义执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行地执行每条指令。例如,响应于添加指令,执行单元在表示纹理元素或图片元素的每个颜色通道上执行同步添加操作。默认情况下,执行单元在操作数的所有数据通道上执行每条指令。在一些实施例中,指令控制字段714使得能够控制某些执行选项,诸如信道选择(例如,预测)和数据信道顺序(例如,调配)。对于128位指令710,执行大小字段716限制将被并行执行的数据信道的数量。在一些实施例中,执行大小字段716不可用于64位压缩指令格式730。
一些执行单元指令具有多达三个操作数,包括两个源操作数src0 722、src1 722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中隐含目的地之一。数据操纵指令可以具有第三源操作数(例如,SRC2724),其中指令操作码712确定源操作数的数量。指令的最后源操作数可以是与指令一起传递的立即(例如,硬编码)值。
在一些实施例中,128位指令格式710包括访问/地址模式信息726,其指定例如是使用直接寄存器寻址模式还是间接寄存器寻址模式。当使用直接寄存器寻址模式时,一个或多个操作数的寄存器地址直接由指令710中的位提供。
在一些实施例中,128位指令格式710包括访问/地址模式字段726,其指定该指令的地址模式和/或访问模式。在一个实施例中,访问模式用于为该指令定义数据访问对齐。一些实施例支持包括16字节对齐访问模式和1字节对齐访问模式的访问模式,其中访问模式的字节对齐确定指令操作数的访问对齐。例如,当处于第一模式时,指令710可以针对源操作数和目的地操作数使用字节对齐寻址,并且当处于第二模式时,指令710可以针对所有源操作数和目的地操作数使用16字节对齐寻址。
在一个实施例中,访问/地址模式字段726的地址模式部分确定指令是使用直接寻址还是间接寻址。当使用直接寄存器寻址模式时,指令710中的位直接提供一个或多个操作数的寄存器地址。当使用间接寄存器寻址模式时,可以基于指令中的地址寄存器值和地址立即数字段来计算一个或多个操作数的寄存器地址。
在一些实施例中,基于操作码712位字段对指令进行分组以简化操作码解码740。对于8位操作码,位4、5和6允许执行单元确定操作码的类型。所示的精确操作码分组仅仅是一个例子。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(MSB),其中移动(mov)指令为0000xxxxb的形式并且逻辑指令为000lxxxxb的形式。流程控制指令组744(例如,调用,跳转(jmp))包括形式为0010xxxxb(例如,0x20)的指令。杂项指令组746包括指令混合,包括为0011xxxxb(例如,0x30)的形式的同步指令(例如,等待、发送)。并行数学指令组748包括0100xxxxb(例如,0x40)形式的分量方式算术指令(例如,加法、乘法(mul))。并行数学组748跨数据通道并行执行算术运算。矢量数学组750包括0101xxxxb(例如0x50)形式的算术指令(例如,dp4)。矢量数学组对矢量操作数执行算术运算,例如点积计算。
图形流水线
图8是图形处理器800的另一个实施例的框图。图8中的具有与本文任何其它图的元件相同的附图标记(或名称)的元件可以以与本文其它地方描述的方式类似的任何方式操作或起作用,但不限于此。
在一些实施例中,图形处理器800包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850和渲染输出流水线870。在一些实施例中,图形处理器800是多核心处理系统内的图形处理器,该多核心处理系统包括一个或多个通用处理核心。图形处理器通过向一个或多个控制寄存器(未示出)的寄存器写入或经由通过环形互连802向图形处理器800发出的命令来控制。在一些实施例中,环形互连802将图形处理器800耦合到其他处理组件,诸如其他图形处理器或通用处理器。来自环形互连802的命令由命令流转化器803解释,命令流转化器803向图形流水线820或媒体流水线830的各个组件提供指令。
在一些实施例中,命令流转化器803引导从存储器读取顶点数据的顶点获取器805的操作,并且执行由命令流转化器803提供的顶点处理命令。在一些实施例中,顶点获取器805将顶点数据提供给顶点着色器807,其对每个顶点执行坐标空间转换和照明操作。在一些实施例中,顶点获取器805和顶点着色器807通过经由线程调度器831将执行线程调度给执行单元852A、852B来执行顶点处理指令。
在一些实施例中,执行单元852A、852B是具有用于执行图形和媒体操作的指令集的矢量处理器的阵列。在一些实施例中,执行单元852A、852B具有附接的L1高速缓存851,其专用于每个阵列或在阵列之间共享。高速缓存可以配置为数据高速缓存、指令高速缓存或被分区以在不同分区中包含数据和指令的单个高速缓存。
在一些实施例中,图形流水线820包括曲面细分组件,用于执行3D对象的硬件加速曲面细分。在一些实施例中,可编程外壳着色器811配置曲面细分操作。可编程域着色器817提供曲面细分输出的后端评估。曲面细分器813在外壳着色器811的方向上操作并且包含专用逻辑以基于作为输入提供给图形流水线820的粗糙几何模型来生成一组详细几何对象。在一些实施例中,如果不使用曲面细分,曲面细分组件811、813、817可以被绕过。
在一些实施例中,完整的几何对象可以由几何着色器819经由调度到执行单元852A、852B的一个或多个线程来处理,或者可以直接进行到剪取器829。在一些实施例中,几何着色器对整个几何对象进行操作,而不是像在图形流水线的前面阶段那样对顶点或顶点贴片进行操作。如果曲面细分被禁用,则几何着色器819从顶点着色器807接收输入。在一些实施例中,如果曲面细分单元被禁用,则几何着色器819可由几何着色器程序编程以执行几何曲面细分。
在光栅化之前,剪取器829处理顶点数据。剪取器829可以是固定功能剪取器或具有剪取功能和几何着色器功能的可编程剪取器。在一些实施例中,渲染输出流水线870中的光栅化器和深度测试组件873调度像素着色器以将几何对象转换为它们的每像素表示。在一些实施例中,像素着色器逻辑被包括在线程执行逻辑850中。在一些实施例中,应用程序可以绕过光栅化器873并且经由流出单元823访问未光栅化的顶点数据。
图形处理器800具有允许数据和消息在处理器的主要组件之间传递的互连总线、互连结构或一些其他互连机制。在一些实施例中,执行单元852A、852B和相关联的高速缓存851、纹理和媒体采样器854以及纹理/采样器高速缓存858经由数据端口856互连以执行存储器访问并且与处理器的渲染输出流水线组件进行通信。在一些实施例中,采样器854、高速缓存851、858和执行单元852A、852B各自具有分离的存储器访问路径。
在一些实施例中,渲染输出流水线870包含将基于顶点的对象转换成相关联的基于像素的表示的光栅化器和深度测试组件873。在一些实施例中,光栅化逻辑包括执行固定功能三角形和线光栅化的加窗器/掩码器单元。在一些实施例中,相关联的渲染高速缓存878和深度高速缓存879也是可用的。像素操作组件877对数据执行基于像素的操作,但是在一些情况下,与2D操作相关联的像素操作(例如,利用混合的位块图像传送)由2D引擎841执行,或者在显示时间通过显示器控制器843使用重叠显示平面来替代。在一些实施例中,共享L3高速缓存875可用于所有图形组件,允许在不使用主系统存储器的情况下共享数据。
在一些实施例中,图形处理器媒体流水线830包括媒体引擎837和视频前端834。在一些实施例中,视频前端834从命令流转化器803接收流水线命令。在一些实施例中,媒体流水线830包括单独的命令流转化器。在一些实施例中,视频前端834在将命令发送到媒体引擎837之前处理媒体命令。在一些实施例中,媒体引擎337包括线程产生功能,用于产生线程以经由线程调度器831调度给线程执行逻辑850。
在一些实施例中,图形处理器800包括显示引擎840。在一些实施例中,显示引擎840在处理器800的外部并且经由环形互连802或一些其他互连总线或结构与图形处理器耦合。在一些实施例中,显示引擎840包括2D引擎841和显示控制器843。在一些实施例中,显示引擎840包含能够独立于3D流水线而操作的专用逻辑。在一些实施例中,显示控制器843与显示设备(未示出)耦合,该显示设备可以是如膝上型计算机中的系统集成显示设备,或者经由显示设备连接器附接的外部显示设备。
在一些实施例中,图形流水线820和媒体流水线830可配置为基于多个图形和媒体编程接口来执行操作,并且不特定于任何一个应用编程接口(API)。在一些实施例中,用于图形处理器的驱动器软件将对特定图形或媒体库特定的API调用转换成可由图形处理器处理的命令。在一些实施例中,对来自Khronos集团的开放图形库(OpenGL)和开放计算语言(OpenCL)、来自微软公司的Direct3D库提供支持,或可以对OpenGL和D3D提供支持。也可以对开源计算机视觉库(OpenCV)提供支持。如果能够实现从未来API的流水线到图形处理器的流水线的映射,则还将支持具有兼容3D流水线的未来API。
图形流水线编程
图9A是示出根据一些实施例的图形处理器命令格式900的框图。图9B是示出根据实施例的图形处理器命令序列910的框图。图9A中的实线框示出通常包含在图形命令中的组件,而虚线包括可选的组件或仅包含在图形命令的子集中的组件。图9A的示例性图形处理器命令格式900包括用于标识该命令的目标客户端902、命令操作码(操作码)904以及该命令的相关数据906的数据字段。子操作码905和命令大小908也包含在一些命令中。
在一些实施例中,客户端902指定处理命令数据的图形设备的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段以调节命令的进一步处理并将命令数据路由到适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2D单元、3D单元和媒体单元。每个客户端单元都有处理命令的对应处理流水线。一旦客户端单元接收到该命令,客户端单元就读取操作码904和子操作码905(如果存在)以确定要执行的操作。客户端单元使用数据字段906中的信息来执行命令。对于一些命令,预期显式命令大小908将指定命令的大小。在一些实施例中,命令解析器基于命令操作码自动确定至少一些命令的大小。在一些实施例中,命令经由双字的倍数对齐。
图9B中的流程图示出了示例性图形处理器命令序列910。在一些实施例中,以图形处理器的实施例为特征的数据处理系统的软件或固件使用所示的命令序列的版本来建立、执行和终止一组图形操作。仅出于示例的目的示出并描述了样本命令序列,因为实施例不限于这些特定命令或该命令序列。而且,命令可以作为命令序列中的一批命令发布,使得图形处理器将至少部分地同时处理命令序列。
在一些实施例中,图形处理器命令序列910可以以流水线冲洗命令912开始,以使任何活动图形流水线完成流水线的当前未决命令。在一些实施例中,3D流水线922和媒体流水线924不同时操作。执行流水线冲洗以使活动图形流水线完成任何未决命令。响应于流水线冲洗,图形处理器的命令解析器将暂停命令处理,直到活动绘图引擎完成未决操作并且相关读取高速缓存失效。可选地,渲染高速缓存中标记为“脏”的任何数据都可以冲洗到存储器。在一些实施例中,流水线冲洗命令912可以用于流水线同步或者在将图形处理器置于低功率状态之前使用。
在一些实施例中,当命令序列要求图形处理器在流水线之间显式切换时使用流水线选择命令913。在一些实施例中,在发布流水线命令之前,在执行上下文中仅需要一次流水线选择命令913,除非该上下文将发布两个流水线的命令。在一些实施例中,紧接在经由流水线选择命令913的流水线切换之前需要流水线冲洗命令912。
在一些实施例中,流水线控制命令914配置用于操作的图形流水线并用于对3D流水线922和媒体流水线924进行编程。在一些实施例中,流水线控制命令914配置活动流水线的流水线状态。在一个实施例中,流水线控制命令914被用于流水线同步并且在处理一批命令之前清除来自活动流水线内的一个或多个高速缓存存储器的数据。
在一些实施例中,返回缓冲器状态命令916被用于为相应流水线配置一组返回缓冲器,用于写入数据。一些流水线操作需要分配、选择或配置一个或多个返回缓冲器,操作在处理期间将中间数据写入所述返回缓冲器。在一些实施例中,图形处理器还使用一个或多个返回缓冲器来存储输出数据并执行交叉线程通信。在一些实施例中,返回缓冲器状态916包括选择用于一组流水线操作的返回缓冲器的大小和数量。
命令序列中的其余命令根据操作的活动流水线而不同。基于流水线确定920,命令序列适合从3D流水线状态930开始的3D流水线922或从媒体流水线状态940开始的媒体流水线924。
用于3D流水线状态930的命令包括用于顶点缓冲器状态、顶点元素状态、恒定颜色状态、深度缓冲器状态以及在处理3D基元命令之前要配置的其他状态变量的3D状态设置命令。这些命令的值至少部分地基于正在使用的特定3D API来确定。在一些实施例中,3D流水线状态930命令还能够选择性地禁用或绕过某些流水线元件(如果那些元件将不被使用的话)。
在一些实施例中,使用3D基元932命令来提交将由3D流水线处理的3D基元。经由3D基元932命令传递给图形处理器的命令和相关联参数被转发到图形流水线中的顶点获取功能。顶点获取功能使用3D基元932命令数据来生成顶点数据结构。顶点数据结构存储在一个或多个返回缓冲器中。在一些实施例中,3D基元932命令被用于经由顶点着色器对3D基元执行顶点操作。为了处理顶点着色器,3D流水线922将着色器执行线程调度给图形处理器执行单元。
在一些实施例中,3D流水线922经由执行934命令或事件来触发。在一些实施例中,寄存器写入触发命令执行。在一些实施例中,经由命令序列中的“go”或“kick”命令触发执行。在一个实施例中,使用流水线同步命令触发命令执行以通过图形流水线冲洗命令序列。3D流水线将执行3D基元的几何处理。一旦操作完成,产生的几何对象被光栅化,并且像素引擎为所得像素着色。针对那些操作,也可以包含用于控制像素着色和像素后端操作的另外的命令。
在一些实施例中,当执行媒体操作时,图形处理器命令序列910遵循媒体流水线924路径。通常,媒体流水线924的具体使用和编程方式取决于要执行的媒体或计算操作。在媒体解码期间,特定的媒体解码操作可以被卸载到媒体流水线。在一些实施例中,媒体流水线也可以被绕过,并且可以全部或部分地使用由一个或多个通用处理核心提供的资源执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中图形处理器用于使用与图形基元的渲染不显式相关的计算着色器程序来执行SIMD矢量操作。
在一些实施例中,媒体流水线924以与3D流水线922类似的方式被配置。在媒体对象命令942之前,一组媒体流水线状态命令940被调度或放置在命令队列中。在一些实施例中,媒体流水线状态命令940包括用于配置将用于处理媒体对象的媒体流水线元素的数据。这包括配置媒体流水线内的视频解码和视频编码逻辑的数据,如编码或解码格式。在一些实施例中,媒体流水线状态命令940还支持使用一个或多个指向包含一批状态设置的“间接”状态元素的指针。
在一些实施例中,媒体对象命令942提供指向媒体对象的指针以供媒体流水线处理。媒体对象包括包含要处理的视频数据的存储器缓冲器。在一些实施例中,在发布媒体对象命令942之前,所有媒体流水线状态必须是有效的。一旦流水线状态被配置并且媒体对象命令942排队,则媒体流水线924经由执行命令944或等同的执行事件(例如寄存器写入)触发。然后,来自媒体流水线924的输出可以由3D流水线922或媒体流水线924提供的操作进行后处理。在一些实施例中,GPGPU操作以与媒体操作类似的方式被配置和执行。
图形软件架构
图10图示根据一些实施例的用于数据处理系统1000的示例性图形软件架构。在一些实施例中,软件架构包括3D图形应用程序1010、操作系统1020和至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032和一个或多个通用处理器核心1034。图形应用程序1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。
在一些实施例中,3D图形应用程序1010包含一个或多个着色器程序,其包括着色器指令1012。着色器语言指令可以用高级着色器语言,诸如高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)。该应用程序还包括采用适于由通用处理器核心1034执行的机器语言的可执行指令1014。该应用程序还包括由顶点数据定义的图形对象1016。
在一些实施例中,操作系统1020是来自微软公司的 操作系统、专有的类UNIX操作系统或者使用Linux内核的变体的开源类UNIX操作系统。操作系统1020可以支持图形API 1022,诸如Direct3D API或OpenGL API。当Direct3D API被使用时,操作系统1020使用前端着色器编译器1024来将HLSL中的任何着色器指令1012编译成较低级着色器语言。编译可以是准时制(JIT)编译,或者应用程序可以执行着色器预编译。在一些实施例中,在3D图形应用程序1010编译期间将高级着色器编译成低级着色器。
在一些实施例中,用户模式图形驱动器1026包含后端着色器编译器1027以将着色器指令1012转换成硬件特定表示。当OpenGL API被使用时,采用GLSL高级语言的着色器指令1012被传递给用户模式图形驱动器1026以供编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028来与内核模式图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动器1029与图形处理器1032进行通信以调度命令和指令。
IP核实现方式
至少一个实施例的一个或多个方面可以通过存储在代表和/或定义诸如处理器的集成电路内的逻辑的机器可读介质上的代表性代码来实现。例如,机器可读介质可以包括表示处理器内的各种逻辑的指令。当由机器读取时,指令可以使机器制造逻辑以执行本文描述的技术。被称为“IP核”的这种表示是用于集成电路的逻辑的可重用单元,其可以作为描述集成电路的结构的硬件模型存储在有形的机器可读介质上。硬件模型可以提供给各种客户或制造设施,这些客户或制造设施在制造集成电路的制造机器上加载硬件模型。集成电路可以被制造为使得电路执行结合本文描述的任何实施例描述的操作。
图11是示出可用于制造集成电路以执行根据实施例的操作的IP核开发系统1100的框图。IP核开发系统1100可以用于生成模块化的可重用的设计,其可以被结合到更大的设计中或者用于构建整个集成电路(例如,SOC集成电路)。设计设施1130可以用高级编程语言(例如,C/C++)生成IP核设计的软件仿真1110。软件仿真1110可以用于使用仿真模型1112来设计、测试和验证IP核的行为。仿真模型1112可以包括功能、行为和/或时序仿真。随后可以从仿真模型1112创建或合成寄存器传输级(RTL)设计。RTL设计1115是对硬件寄存器之间的数字信号的流进行建模的集成电路的行为的抽象,包括使用建模的数字信号执行的相关联的逻辑。除了RTL设计1115之外,还可以创建、设计或合成逻辑级别或晶体管级别的低级设计。因此,初始设计和仿真的具体细节可能会有所不同。
RTL设计1115或等同物可以进一步由设计设施合成为硬件模型1120,其可以是硬件描述语言(HDL)或物理设计数据的一些其他表示。可以进一步仿真或测试HDL以验证IP核设计。可以使用非易失性存储器1140(例如,硬盘、闪存或任何非易失性存储介质)来存储IP核设计以便递送到第三方制造设施1165。可替代地,IP核设计可以通过有线连接1150或无线连接1160传输(例如,经由因特网)。制造设施1165然后可以制造至少部分地基于IP核设计的集成电路。所制造的集成电路可以被配置为执行根据在此描述的至少一个实施例的操作。
图12是示出根据实施例的可以使用一个或多个IP核制造的示例性片上系统集成电路1200的框图。示例性集成电路包括一个或多个应用程序处理器1205(例如,CPU)、至少一个图形处理器1210,并且可以另外包括图像处理器1215和/或视频处理器1220,其中的任何一个可以是来自相同或多个不同的设计设施的模块化IP核。集成电路包括外围设备或总线逻辑,其包括USB控制器1225、UART控制器1230、SPI/SDIO控制器1235和I2S/I2C控制器1240。另外,集成电路可包括显示设备1245,显示设备1245耦合到一个或多个高清晰度多媒体接口(HDMI)控制器1250和移动工业处理器接口(MIPI)显示接口1255。存储可以由包括闪存和闪存控制器的闪存子系统1260提供。存储器接口可以经由存储器控制器1265被提供以访问SDRAM或SRAM存储器设备。一些集成电路还包括嵌入式安全引擎1270。
另外,集成电路1200的处理器中可以包括其他逻辑和电路,包括附加的图形处理器/核心、外围接口控制器或通用处理器核心。
图13图示了根据一个实施例的采用三重缓冲常量缓冲机制1310的计算设备1300。计算设备1300(例如,智能可穿戴设备、VR设备、头戴式显示器(HMD)、移动计算机、物联网(IoT)设备、膝上型计算机、台式计算机、服务器计算机等)可以与图1的数据处理系统100相同并且因此为了简洁、清楚和易于理解,以上参考图1-12所述的许多细节不在下文中进一步讨论或重复。如图所示,在一个实施例中,计算设备1300被示出为托管三重缓冲常量缓冲机制(“缓冲机制”)1310。
在所示实施例中,缓冲机制1310被示出为由图形驱动器1316托管;然而,预期实施例不限于此。例如,在一个实施例中,缓冲机制1310可以是GPU 1314的固件的一部分,或者在另一个实施例中,由操作系统1306托管。在又一个实施例中,缓冲机制1310可以是由GPU1314托管的硬件组件。在另一个实施例中,缓冲机制1310可以由计算设备1300的多个组件部分且同时托管,诸如驱动器1316、GPU 1314、GPU固件、操作系统和/或类似物中的一个或多个。
例如,如关于图17将进一步示出的,尽管缓冲机制110可以托管交换逻辑以促进添加和实现交换命令的添加,但是GPU 1314可能能够托管能够实施或执行对应的交换功能的交换执行逻辑1320,而在一个实施例中可以通过图形API/运行时1703或在另一个实施例中通过图形驱动器1316提供或暴露例如用于映射、取消映射和添加交换命令等的应用编程接口(API)。
在整个文档中,术语“用户”可以可互换地称为“观看者”,“观察者”,“人”,“个人”,“最终用户”等。要注意的是,贯穿本文档,诸如“图形域”的术语可以与“图形处理单元”或简称“GPU”可互换地引用,并且类似地,“CPU域”或“主机域”可以与“计算机处理单元”或简称“CPU”可互换地引用。
计算设备1300可以包括任何数量和类型的通信设备,诸如大型计算系统,诸如服务器计算机、台式计算机等,并且还可以包括机顶盒(例如,基于互联网的有线电视机顶盒等)、基于全球定位系统(GPS)的设备等。计算设备1300可以包括用作通信设备的移动计算设备,诸如包括智能手机的蜂窝电话、个人数字助理(PDA)、平板电脑、膝上型计算机、电子阅读器、智能电视、电视平台、可穿戴设备(例如,眼镜、手表、手镯、智能卡、珠宝、衣物等)、媒体播放器等。例如,在一个实施例中,计算设备1300可以包括采用诸如片上系统(“SoC”或“SOC”)的集成电路(“IC”)的移动计算设备,将计算设备1300的各种硬件和/或软件组件集成在单个芯片上。
如图所示,在一个实施例中,计算设备1300可以包括任何数量和类型的硬件和/或软件组件,诸如(但不限于)图形处理单元1314、图形驱动器(也称为“GPU驱动器”、“图形驱动器逻辑”、“驱动器逻辑”、用户模式驱动器(UMD)、UMD、用户模式驱动器框架(UMDF)、UMDF或简称“驱动器”)1316、中央处理单元1312、存储器1308、网络设备、驱动器或类似物,以及输入/输出(I/O)源1304,诸如触摸屏、触摸板、触摸垫、虚拟或常规键盘、虚拟或常规鼠标、端口、连接器等。计算设备1300可以包括操作系统(OS)1306,充当计算机设备1300的硬件和/或物理资源与用户之间的接口。可以设想,CPU 1312可以包括一个或多个处理器,诸如图1的处理器102,而GPU 1314可以包括一个或多个图形处理器,诸如图1的图形处理器108。
需要注意的是,诸如“节点”、“计算节点”、“服务器”、“服务器设备”、“云计算机”、“云服务器”、“云服务器计算机”、“机器”、“主机”、“设备”、“计算设备”、“计算机”、“计算系统”等的术语可以在整个文档中可互换地使用。需要进一步注意的是,在整个文档中可以可互换地使用诸如“应用程序”、“软件应用程序”、“程序”、“软件程序”、“包”、“软件包”等的术语。而且,诸如“作业”、“输入”、“请求”、“消息”等的术语在本文档中可以可互换地使用。
可以预期并且如参考图1-12进一步描述,如上所述的图形流水线的一些处理以软件实现,而其余部分以硬件实现。图形流水线可以在图形协处理器设计中实现,其中CPU1312被设计为与GPU 1314一起工作,该GPU1314可以被包括在CPU 1312中或者与CPU 1312位于同一位置。在一个实施例中,GPU 1314可以采用执行与图形渲染有关的常规功能的任何数量和类型的传统软件和硬件逻辑以及执行任何数量和类型的指令(诸如图1的指令121)以执行如本文档通篇所公开的缓冲机构1310的各种新颖功能的新颖软件和硬件逻辑。
如上所述,存储器1308可以包括包含具有对象信息的应用程序数据库的随机存取存储器(RAM)。诸如图1的存储器控制器中心116之类的存储器控制器中心可访问RAM中的数据并将其转发给GPU 1314用于图形流水线处理。RAM可以包括双倍数据速率RAM(DDR RAM)、扩展数据输出RAM(EDO RAM)等。如参照图3所示,CPU 1312与硬件图形流水线交互以共享图形流水线功能。处理后的数据被存储在硬件图形流水线中的缓冲器中,并且状态信息被存储在存储器1308中。然后所得到的图像被传送到I/O源1304,诸如显示组件,诸如图3的显示设备320,用于显示图像。可以设想,显示设备可以是各种类型的,诸如阴极射线管(CRT)、薄膜晶体管(TFT)、液晶显示器(LCD)、有机发光二极管(OLED)阵列等以显示信息给用户。
存储器1308可以包括缓冲器(例如,帧缓冲器)的预分配区域;然而,本领域普通技术人员应该理解,实施例不限于此,并且可以使用可由较低图形流水线访问的任何存储器。计算设备1300还可以包括如图1所参考的输入/输出(I/O)控制中心(ICH)130、一个或多个I/O源1304等。
CPU 1312可以包括一个或多个处理器以执行指令以执行计算系统实现的任何软件例程。指令通常涉及对数据执行的某种操作。数据和指令都可以存储在系统存储器1308和任何相关联的高速缓存中。高速缓存通常被设计为具有比系统存储器1308更短的等待时间;例如,高速缓存可以集成到与处理器相同的硅芯片上和/或用更快的静态RAM(SRAM)单元构建,而系统存储器1308可以用更慢的动态RAM(DRAM)单元构建。通过倾向于将更频繁使用的指令和数据存储在高速缓存中而不是系统存储器1308,计算设备1300的整体性能效率得到改善。可以设想,在一些实施例中,GPU1314可以作为CPU 1312的一部分(诸如物理CPU封装的一部分)存在,在这种情况下,存储器1308可以由CPU 1312和GPU 1314共享或保持分离。
系统存储器1308可以对计算设备1300内的其他组件可用。例如,从计算设备1300的各种接口(例如,键盘和鼠标、打印机端口、局域网(LAN)端口、调制解调器端口等)接收或者从计算机设备1300的内部存储元件(例如,硬盘驱动器)取回的任何数据(例如,输入图形数据)通常在软件程序的实现中在被一个或多个处理器操作之前暂时被在系统存储器1308中排队。类似地,软件程序确定的应当通过计算系统接口之一从计算设备1300发送到外部实体,或者存储到内部存储元件中的数据,通常在其被发送或者存储之前暂时被在系统存储器1308中排队。
此外,例如,诸如图1的ICH 130的ICH可以用于确保这样的数据在系统存储器1308与其适当的对应计算系统接口(以及在计算系统如此设计的情况下是内部存储设备)之间适当地传递,并且可以在其自身与观察到的I/O源/设备1304之间具有双向点对点链路。类似地,诸如图1的MCH 116的MCH可以用于管理针对在CPU 1312和GPU 1314之间的系统存储器1308访问、可以在时间上相对于彼此近似地出现的接口和内部存储元件的各种争用请求。
I/O源1304可以包括一个或多个I/O设备,其被实现用于向和/或从计算设备1300(例如,网络适配器)传送数据;或者用于在计算设备1300内的大规模非易失性存储设备(例如,硬盘驱动器)。包括字母数字和其他键的用户输入设备可用于向GPU 1314传送信息和命令选择。另一类型的用户输入设备是光标控件,诸如鼠标、轨迹球、触摸屏、触摸板或光标方向键,用于将方向信息和命令选择传送给GPU 1314并控制显示设备上的光标移动。计算机设备1300的相机和麦克风阵列可以被用来观察姿势,记录音频和视频以及接收和发送视觉和音频命令。
计算设备1300还可以包括网络接口以提供对诸如LAN、广域网(WAN)、城域网(MAN)、个域网(PAN)、蓝牙、云网络、移动网络(例如,第三代(3G)、第四代(4G)等)、内联网、因特网等的网络的访问。网络接口可以包括例如具有天线的无线网络接口,天线可以代表一个或多个天线。网络接口还可以包括例如有线网络接口,以经由网络电缆与远程设备通信,所述网络电缆可以是例如以太网电缆、同轴电缆、光纤电缆、串行电缆或者并行电缆。
网络接口可以提供对LAN的访问,例如,通过符合IEEE 802.11b和/或IEEE802.11g标准,和/或无线网络接口可以例如通过符合蓝牙标准来提供对个域网的访问。也可以支持其他无线网络接口和/或协议,包括标准的先前版本和后续版本。除了或者代替经由无线LAN标准的通信,网络接口可以使用例如时分多址(TDMA)协议、全球移动通信系统(GSM)协议、码分多址(CDMA)协议和/或任何其他类型的无线通信协议来提供无线通信。
网络接口可以包括一个或多个通信接口,诸如调制解调器、网络接口卡或其他公知的接口设备,诸如用于耦合到以太网、令牌环或其他类型的用于提供通信链路以支持例如LAN或WAN的目的的物理有线或无线附件的接口设备。以这种方式,例如,计算机系统还可以经由常规网络基础设施(例如包括内联网或因特网)耦合到多个外围设备、客户端、控制表面、控制台或服务器。
应该理解的是,对于某些实施方式,比上述示例更少或更多配备的系统可能是优选的。因此,取决于许多因素,例如价格限制、性能要求、技术改进或其他情况,计算设备1300的配置可以随实施而变化。电子设备或计算机系统1300的示例可以包括(但不限于)移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手机、单向寻呼机、双向寻呼机、消息传送设备、计算机、个人计算机(PC)、台式计算机、膝上型计算机、笔记本计算机、手持式计算机、平板计算机、服务器、服务器阵列或服务器群、web服务器、网络服务器、因特网服务器、工作站、微型计算机、主框架计算机、超级计算机、网络设备、web设备、分布式计算系统、多处理器系统、基于处理器的系统、消费电子产品、可编程消费者电子设备、电视机、数字电视、机顶盒、无线接入点、基站、订户站、移动订户中心、无线电网络控制器、路由器、集线器、网关、网桥、交换机、机器或其组合。
实施例可以被实现为以下中的任一个或其组合:使用主板互连的一个或多个微芯片或集成电路、硬连线逻辑、由存储器设备存储并由微处理器执行的软件、固件、专用集成电路(ASIC)和/或现场可编程门阵列(FPGA)。作为示例,术语“逻辑”可以包括软件或硬件和/或软件和硬件的组合。
实施例可以例如被提供为计算机程序产品,其可以包括其上存储有机器可执行指令的一个或多个机器可读介质,所述机器可执行指令在由一个或多个机器(例如计算机)、计算机网络或其他电子设备执行时可以导致一个或多个机器根据在此描述的实施例执行操作。机器可读介质可以包括但不限于软盘、光盘、CD-ROM(光盘只读存储器)和磁光盘、ROM、RAM、EPROM(可擦除可编程只读存储器),EEPROM(电可擦除可编程只读存储器)、磁卡或光卡、闪存或适用于存储机器可执行指令的其他类型的介质/机器可读介质。
此外,实施例可以作为计算机程序产品下载,其中程序可以通过一个或多个数据信号从远程计算机(例如,服务器)传输到请求计算机(例如,客户端),该数据信号体现在经由通信链路(例如,调制解调器和/或网络连接)的载波或其他传播介质中和/或由经由通信链路(例如,调制解调器和/或网络连接)的载波或其他传播介质调制。
图14示出根据一个实施例的三重缓冲常量缓冲机制1310。为了简洁起见,参考图1-13已经讨论的许多细节在下文中不再重复或讨论。在一个实施例中,缓冲机制1310可以包括任何数量和类型的组件,诸如(但不限于):检测/接收逻辑1401;缓冲器逻辑1403;映射逻辑1405;取消映射逻辑1407;交换逻辑1409;访问/接口逻辑1411;以及通信/兼容性逻辑1413。在一个实施例中,GPU 1314被示出为托管交换执行逻辑1320。
计算设备1300被进一步示出为与一个或多个存储库、数据集和/或数据库(诸如数据库1430(例如,云存储、非云存储等))进行通信,其中通信可以是直接的和/或通过通信介质(诸如一个或多个网络(例如,云网络、邻近网络、移动网络、内联网、因特网等))。计算设备1300还可以通过一个或多个网络与一个或多个计算设备(例如,游戏设备、移动设备、HMD、VR设备等)进行通信。
如前所述,缓冲机制1310提供了一种不需要任何明确的CPU-GPU同步的技术,并且因此允许按期望或必要,周期性和机会性地更新TBCB。此外,例如,诸如在计算设备1300处运行或被计算设备1300托管或促进的软件应用程序的应用程序可以运行线程轮询头跟踪位置,诸如每毫秒(ms),更新缓冲器。相应地,在这种情况下,恰在渲染视图相关(也称为“视图敏感”)绘制调用之前,当GPU 1314执行如交换逻辑1320所促进的缓冲器交换时,该位置可以落后最多1ms。可以调整该周期以找到低等待时间和低CPU开销之间的最佳平衡,如将参照图15B进一步示出的。
已经预期并且应该注意的是,虽然为了简洁和清楚起见,在整个本文档中讨论了单个TBCB,但实施例不限于此,并且可以由应用程序创建多于一个的TBCB,例如多个TBCB可以彼此独立地生成和操作。此外,在一个实施例中,每个TBCB可以具有其自己的一组三个底层存储器块以及一组指针,例如CPU当前、GPU当前和CPU下一个指针的集合,其中TBCB的三个存储器块可以是也可以不是共同的单个连续存储器块的部分。此外,CPU当前、GPU当前和CPU下一个指针可以作为存储器指针或作为索引存储到(隐式或显式)存储器指针列表中。
在一个实施例中,可以使用检测/接收逻辑1401来检测或接收各种内容和组件,诸如图13的CPU 1312、GPU 1314、存储器等,以促进缓冲机制1310所促进的任何数量和类型的操作。例如,可以使用检测/接收逻辑1401来检测TBCB是否被生成(诸如由应用程序或如缓冲逻辑1403所促进的),以及检测TBCB的存储器分配以存储相等大小的存储器块,其中为了简洁和清楚起见,在本文档中,三个存储器块可以被任意参考为存储器块“A”、“B”和“C”。此外,例如,由于三个存储器块中的两个存储器块可以从CPU可见,例如CPU当前和CPU下一个,而三个存储器块中的剩余的一个(例如GPU当前)可以从GPU 1314可见。现在,返回参考参考A、B和C,一旦TBCB被创建,参考块和存储器块可如下匹配:CPU当前=A、CPU下一个=B、并且GPU当前=C,如块逻辑1403所促进的。
如前所述,可以在TBCB上执行三个操作,例如映射、取消映射和交换。在一个实施例中,映射逻辑1405可以被触发以将CPU下一个映射设置到既不被CPU当前也不被GPU当前参考的存储器块(诸如A),以确保由CPU下一个参考的存储器块的内容不是、并且可能不是被GPU 1314读取直到它通过取消映射逻辑1407取消映射为止。如果CPU当前和GPU当前参考相同的存储器块,则剩下的两个存储器块中的任何一个可以被分配给CPU下一个。此外,在一些实施例中,CPU下一个的确定可以在取消映射操作结束时执行,而不是在映射操作期间执行,使得映射仅仅返回预定的CPU下一个。在一个实施例中,如映射逻辑1405所促进的,映射TBCB的映射函数可以简单地将指向CPU下一个的指针返回给CPU应用程序。
在一个实施例中,取消映射逻辑1407被触发以将CPU当前设置为CPU下一个,将新取消映射的存储器块标记为可用于消费的最为近期数据。如上所述,在一些实施例中,可以在取消映射操作结束时执行CPU下一个的确定。
在一个实施例中,映射和取消映射可以分别通过映射逻辑1405和取消映射逻辑1407在CPU上同步执行(例如当被调用时立即执行),而在CPU上异步发布交换,如交换逻辑1407所促进的,并且稍后在GPU 1314上执行,如交换执行逻辑1320所促进的。参考TBCB的图形命令在GPU上执行,从GPU当前参考的存储器块读取数据。
在一个实施例中,如取消映射逻辑1407所促进的取消映射函数可以交换CPU当前和CPU下一个指针,改变TBCB指针,使得最近更新的存储器块变为“当前(current)”,而另一个存储器块成为下一个(next)更新的目标。
此外,在一个实施例中,与由驱动器1316在CPU上执行的映射和取消映射操作相对的,交换逻辑1409可以将交换命令插入到由GPU 1314执行的命令流中。例如,当执行该功能时,GPU 1314使GPU当前以CPU当前数据为目标,使得“当前”CPU存储器块对GPU 1314变得可见。这可以优选地被实现为简单的指针交换,或者通过复制存储器,取决于一个或多个因素,诸如计算设备1300的硬件限制。
一旦交换命令通过交换逻辑1409被插入到命令流或队列中并且因此被启动,当从命令流识别和处理交换命令时,交换随后可以由GPU 1314执行,如交换执行逻辑1320所促进的。例如,在一个实施例中,交换使得GPU当前变成CPU当前,使得从执行交换时包含最为近期可用数据的存储器块读取任何后续的渲染命令。
在一个实施例中,可以使用访问/接口逻辑1411来促进在诸如TBCB的A、B、C的存储器块之间的接口和执行事务,诸如访问一个或多个存储器块中的数据。
可以预期的是,头部跟踪和VR设备以及应用程序贯穿本文档,可以预期实施例不限于此。例如,对诸如计算设备1300处的主应用程序的应用程序的改变可能相对较小,并且在创建时,包含头部跟踪数据的常量缓冲器可以被标记为TBCB,并且进一步地,在提交视点相关的绘制调用之前,交换命令可以提交给常量缓冲器。关于头部跟踪线程,应用程序可以创建线程,该线程周期性地(例如,每毫秒)轮询头部跟踪数据,其中常量缓冲器被映射(例如,调用ID3DllDeviceContext::Map),数据被更新,并且缓冲器被取消映射(例如,调用ID3DIIDeviceContext::Unmap)。
通信/兼容性逻辑1413可以用于促进计算设备1300与任何数量和类型的其他计算设备(诸如移动计算设备、台式计算机、服务器计算设备等)、处理设备(诸如CPU、GPU等)、捕获/感测/检测设备(诸如包括相机、深度感测相机、相机传感器、RGB传感器、麦克风等的捕获/感测组件)、显示装置(诸如包括显示屏幕、显示区域、显示投影仪等的输出组件)、用户/情境感知组件和/或识别/验证传感器/设备(诸如生物传感器/检测器、扫描仪等)、存储器或存储设备、数据库和/或数据源(诸如数据存储设备、硬盘驱动器、固态驱动器、硬盘、存储卡或设备、存储器电路等)、通信信道或网络(例如,云网络、因特网、内联网、蜂窝网络、邻近网络,诸如蓝牙、蓝牙低功耗(BLE)、蓝牙智能、Wi-Fi接近、射频识别(RFID)、近场通信(NFC)、体域网(BAN)等)、无线或有线通信和相关协议(例如WiMAX、以太网等)、连接和位置管理技术、软件应用程序/网站(例如,社交和/或商业网络网站等,商业应用、游戏和其他娱乐应用等)、编程语言等之间的动态通信和兼容性,同时确保与不断变化的技术、参数、协议、标准等的兼容性。
在整篇文档中,像“逻辑”、“组件”、“模块”、“框架”、“引擎”、“机制”等的术语可以被可互换地引用并且例如包括软件、硬件和/或软件和硬件的任何组合,诸如固件。在一个示例中,“逻辑”可以指代或包括能够与计算设备(诸如计算设备1300)的操作系统(例如,操作系统1306)、图形驱动器(例如,图形驱动器1316)等中的一个或多个一起工作的软件组件。在另一个例子中,“逻辑”可以指或包括能够与一个或多个系统硬件元件一起物理安装或者作为其一部分的硬件组件,所述系统硬件元件例如是计算设备(诸如计算设备1300)的应用程序处理器(例如,CPU 1312)、图形处理器(例如,GPU 1314)等。在又一个实施例中,“逻辑”可以指或包括固件组件,该固件组件能够作为诸如计算设备(诸如计算设备1300)的应用程序处理器(例如,CPU 1312)或图形处理器(例如,GPU 1314)等的固件的系统固件的一部分。
此外,诸如“GPU”、“GPU域”、“GPGPU”、“CPU”、“CPU域”、“图形驱动器”、“工作量”、“应用程序”、“帧”、“工作单元”、“绘制”、“调度”、“API”、“硬件”、“软件”、“代理”、“图形驱动器”、“内核模式图形驱动器”、“用户模式驱动器”、“UMD”、“用户模式驱动器框架”、“UMDF”、“3D图形API”、“三重缓冲常量缓冲器”或“TBCB”,“虚拟现实”或“VR”、“映射为”或“映射”、“取消映射为”或“取消映射”、“交换了”或“交换”、“交换执行”、“交换命令”、“存储器块”、“当前数据”、“下一个数据”、“GPU当前”、“CPU当前”、“CPU下一个”、“命令缓冲器”、“命令列表”、“数据结构”等的特定品牌、词语、术语、短语、名称和/或缩略词的任何使用不理解为将实施例限制为在产品或该文档之外的文献中携带该标签的软件或设备。
可以预期的是,任何数量和类型的组件可以被添加到缓冲机构1310和/或从缓冲机构1310移除以促进各种实施例,包括添加、去除和/或增强某些特征。为了简洁、清楚并易于理解缓冲机制1310,许多标准和/或已知组件(诸如计算设备的)未在这里示出或讨论。可以设想,如本文所述的实施例不限于任何特定的技术、拓扑、系统、架构和/或标准,并且足够动态以采用和适应任何未来的变化。
图15A、图15B和图15C示出了常规技术1500、1520、1540。如图所示,常规技术1500反映了CPU与GPU之间的原始同步模型,在一些情况下包括同步围栏,并且因此诸如1500、1520、540的常规技术在渲染开始之前未能更新头部跟踪数据。例如,应用程序要么必须冲洗GPU流水线,要么估算用于渲染所需的时间量,这延迟在容易出错的CPU上的、并且随GPU模型而变化的操作。例如,关于传统技术1500,在时间线1501上,应用排队命令1503用于执行一对任务A和B,但是如图所示,处理任务A1505可以继续一段未知的持续时间,并且是在这个未知的时间跨度期间确定修改用于处理任务B 1507的数据是安全的,诸如尽可能迟地延迟任务B的头部跟踪信息,这导致错误,诸如修改任务B的数据的错误。
现在,如参考常规技术1520所示,如果应用程序高估图15A的常规技术1500的未知持续时间1501,例如通过单独估计的定时或等待GPU发信号通知任务A 1505的处理完成,该过程导致不希望的GPU停止1521,其中GPU使任务A出队,使围栏出队,直到其到达不希望的停止1521,然后最终使B出队,随后CPU更新数据和信号围栏。
相反,参考传统技术1540,如果应用低估了未知的持续时间1501,该过程导致来自更新数据和信号围栏的CPU和在去往处理任务B 1507之前使围栏出队的GPU的不希望的等待时间1541。此外,由于应用程序每帧仅有一次机会来发信号通知围栏,错误预测可能会很大并且在帧之间不一致。
图15D示出根据一个实施例的事务序列1560。事务序列1560可以由处理逻辑来执行,所述处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑等)、软件(诸如在处理设备上运行的指令)或其组合,如图13的缓冲机制1310和/或交换逻辑1320所促进的。事务序列1560的过程为了简洁和清晰呈现而以线性序列示出;然而,可以预期的是,它们中的任意数量可以并行、异步或以不同的顺序执行。为了简洁起见,参考之前的附图讨论的许多细节可能在下文中不被讨论或重复。
在实施例中,事务顺序1560不需要任何CPU-GPU同步,因此,TBCB可以周期性或机会性地更新。例如,随着时间1561,应用程序可以在达到一段时间(例如1ms)时运行线程轮询,例如头部跟踪位置,更新TBCP。在这种情况下,当相关GPU执行缓冲器交换时,恰在渲染视图相关的绘制调用之前,该位置可以落后最多1ms。例如,随着命令被排队1563并且任务A和B被处理1565、1567,该周期可以被巧妙地调整,以便例如找到低等待时间和低CPU开销之间的最佳平衡。例如,即使在更坏的情况下,如图所示在CPU的数据更新和缓冲器交换1569之一与使交换出队的GPU之间所示,完全更新的等待时间段(例如不希望的等待时间1571)可能更显著地短。
图16示出根据一个实施例的事务序列1610、1620、1630。事务序列1610、1620、1630可以通过处理逻辑来执行,该处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑等)、软件(诸如在处理设备上运行的指令)或其组合,如图13的缓冲机制1310和/或交换执行逻辑1320所促进的。为了简洁和清晰呈现,事务序列1610、1620、1630的过程以线性顺序示出;然而,可以预期的是,它们中的任意数量可以并行、异步或以不同的顺序执行。为了简洁起见,参考之前的附图讨论的许多细节可能在下文中不被讨论或重复。
事务序列1610、1620、1630开始于生成具有所示的三个存储器块(例如存储器块A1601、存储器块B 1603和存储器块C 1605的TBCB,并且在映射级1610处,这些存储器块1601、1603、1605的初始配置(映射级)1610被执行,使得两个存储器块1603、1605被映射到CPU并且从CPU可见,而一个存储器块1601被映射到GPU并且从GPU可见,如图14的映射逻辑1405所促进的。在一个实施例中,映射级1610建立映射操作如下:GPU当前(数据,指针)1611映射到存储器块A 1601,CPU当前(数据,指针)1613映射到存储器块B 1603,并且CPU下一个(数据,指针)1615映射到存储器块C 1615。
在一个实施例中,这种映射允许应用程序被提供位置来路由数据和命令以及CPU可能愿意或允许在某些处理分配上花费多少时间。例如,在一个实施例中,映射到CPU当前1613的存储器块1603可能能够缓存将立即处理的某些数据。类似地,映射到CPU下一个1615的存储器块1605可能能够缓存在处理存储器块1603的当前数据之后下一步将要处理的未来数据,或者换句话说,预期未来“下一个数据”变为“当前数据”。最后,映射到CPU当前1611的存储器块1601能够缓存准备好并分配给GPU以供GPU处理的数据。
事务序列1610、1620、1630进一步提供调用,用于在取消映射级1620处存储器块1601-1605的取消映射,如图14的取消映射逻辑1407所促进的,例如在存储器块C 1605中更新了数据之后。在一个实施例中,在取消映射级1620处执行的取消映射操作包括交换CPU当前1613和CPU下一个1615指针,使得最近更新的存储器块C 1605变为“当前”,而“当前”存储器块B1603变为用于“下一个”更新的目标块。
继续事务序列1610、1620、1630,如图14的交换逻辑1407所促进的,一旦映射操作完成并且交换命令被置于交换级1630处的命令流中,则触发图13的交换执行逻辑1320以促进GPU处理或执行交换命令,如交换级1630所示。与常规技术相比,在将交换命令插入到命令流中时,在GPU(与CPU相对)上执行该交换命令。如图所示,在一个实施例中,交换命令的这种执行促进GPU当前1611将存储器块C 1605处的CPU当前1613数据定为由CPU当前1613指向,导致存储器块C 1605对GPU可见。这样,GPU就可以访问并执行当前数据。在一个实施例中,根据需要或基于可用资源(诸如计算设备的硬件限制)需要,该交换技术可以被实现为指针交换或通过存储器块1601-1605之间的数据的实际复制实现。
图17示出根据一个实施例的架构布局1700、1750。为了简洁起见,参考之前的附图讨论的许多细节可能在下文中不被讨论或重复。此外,预期并且应当注意的是,实施例不限于任何特定的布局、设置、布置、结构等,诸如(但不限于)架构布局1700、1750。
在架构布局1700中,示出了四个组件(诸如应用程序1701、图形API/运行时1703、图形驱动器1316和GPU 1314)的布置。如图所示,可以使用应用程序1701来渲染使用TBCB的代码,而可以通过图形API/运行时1703来提供用于映射、取消映射、将交换命令添加到命令流等的图形API。可以设想,实施例不限于任何特定的软件、硬件和/或固件组件,因此,API可以作为图形API 1703的一部分或作为图形供应商扩展或图形API而暴露。
类似地,如图所示,可以通过图形驱动器1316提供映射、取消映射和/或添加交换组件(诸如图14的映射逻辑1405、取消映射逻辑1407、交换逻辑1409),如关于图14所示出的,并且如关于图14进一步示出的,可以通过GPU 1314提供或者在GPU 1314处实现用于执行的交换组件,诸如图14的交换执行逻辑1320。例如,在一些实施例中,映射组件和取消映射组件可以通过图形运行时1703来实现,在这种情况下,驱动器1316可以替代地仅需要暴露访问机制/逻辑,例如针对GPU当前(读取)和CPU当前(读取/写入)的图14的访问/接口逻辑1411。
如图所示,架构布局1750提供另一个设置,其中用于映射、取消映射、添加交换命令的API的扩展通过驱动器1316提供,用于映射、取消映射、添加交换命令的实现。可以预期,无论布局1700、1750或任何其他架构设置如何,图14的交换逻辑1409都可以用于将交换命令添加到命令流,该命令流然后可以负责促进在GPU 1314处的图13的交换执行逻辑1320通过执行交换命令所定义的交换来响应的命令的编码。
图18A、18B和18C分别图示了根据一个实施例的促进映射、取消映射和交换操作的方法1800、1820和1840。方法1800、1820、1840可以通过处理逻辑来执行,处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑等)、软件(诸如在处理设备上运行的指令)或其组合,如图13的缓冲机制1310和/或交换执行逻辑1320所促进的。为了简洁和清晰的呈现,以线性序列示出了方法1800、1820和1840的过程;然而,可以预期的是,它们中的任意数量可以并行、异步或以不同的顺序执行。为了简洁起见,参考之前的附图讨论的许多细节可能在下文中不被讨论或重复。
首先参考图18A,在一个实施例中,方法1800开始于框1801,其中生成具有多个存储器块(例如存储器块A、B和C)的TBCB(例如通过在计算设备上运行或由计算设备托管或促进的应用程序),然后将其映射到CPU和/或GPU,其中至少两个存储器块(例如存储器块B和C)被映射并且对CPU可见,而剩余的一个存储器块(诸如存储器块A)被映射并且对GPU可见,如图14的映射逻辑1405所促进的。在框1803处,在一个实施例中,CPU下一个既不设置为CPU当前又不设置为GPU当前,使得GPU当前被映射到第一存储器块,诸如存储器块A,CPU当前被映射到第二存储器块,诸如存储器块B,并且CPU下一个被设置为第三存储器块,诸如存储器块C。在一个实施例中,在框1805,与CPU下一个相关联的第三存储器块被返回到应用程序以便写入。在框1807处,方法1800结束。
现在参考图18B,在一个实施例中,方法1820从框1821开始,随着对存储器块的取消映射的启动,如图14的取消映射逻辑1407所促进的,其中,在框1823处,CPU当前被设置为CPU下一个,使得初始映射到CPU下一个的第三存储器块(例如存储器块C)处的“下一个”数据可以被访问并且被CPU当前视为“当前”数据,以便其随后可以在稍后阶段由GPU处理。相反,CPU下一个可以被设置为CPU当前。在框1825处,方法1820结束。
图18C示出了与由交换逻辑1409启动并由图14的交换执行逻辑1320执行的交换操作有关的方法1840。例如,在框1841,通过将交换命令插入到命令流中来启动交换,如图14的交换逻辑1409所促进的。一旦启动,在框1843处,由图14的GPU 1314托管的交换执行逻辑1320可以执行交换,诸如通过经由复制数据或执行指针开关来将GPU当前设置为CPU当前,诸如GPU当前现在指向现在具有“当前”数据的第三存储器块(诸如存储器块C),CPU当前现在指向第三存储器块(诸如存储器块C),以提供或填充“当前”数据,并且CPU下一个现在指向第二存储器块,诸如存储器块B,以收集“下一个”数据。
图19示出根据一个实施例的促进用于映射、取消映射和交换操作的控制和数据流的方法1900。方法1900可以通过处理逻辑来执行,处理逻辑可以包括硬件(例如,电路、专用逻辑、可编程逻辑等)、软件(诸如在处理设备上运行的指令),或者其组合,如由图13的缓冲机制1310和/或交换执行逻辑1320所促进的。为了简洁和清晰呈现,以线性序列示出了方法1900的过程;然而,可以预期的是,它们中的任意数量可以并行、异步或以不同的顺序执行。为了简洁起见,参考之前的附图讨论的许多细节可能在下文中不被讨论或重复。
方法1900在框1901开始,启动诸如CPU线程A的CPU线程,并且在框1903处添加不需要最新数据的渲染命令,其在框1907处示出为与添加需要最新数据的渲染命令通信,导致在框1909处结束。在框1905处,在一个实施例中,交换命令被添加到诸如命令队列1911的命令队列,该命令队列被传送到诸如读取命令1913的读取命令并且由该读取命令准备,如GPU1314所促进的。
在框1915处,在一个实施例中,做出是否要执行命令交换的决定。如果不是,则在框1917处理所渲染的命令。然而,如果是,则在框1919处执行交换,诸如通过在框1921处将GPU当前设置为CPU当前,其中框1923被示出为从框1921读取数据。如前面所讨论的,可以在框1923通过另一个CPU线程(例如CPU线程B)获得新数据,在框1925处,贡献于并继续框1923处的一个或多个映射操作。此外,如图所示,在框1923处的映射写入框1925处的CPU下一个,然后进行到框1931,其将新数据写入存储器(诸如存储器1933),然后在框1927处进行取消映射。如图所示,在继续到框1929(等待直到下一次更新到期)之前,在1927处的取消映射在框1925处从CPU下一个读取并在框1921处写入CPU当前。
在一个实施例中,一旦执行取消映射操作,方法1900可以简单地等待下一个更新在框1929发生或到期。在另一个实施例中,在取消映射后,方法1900继续,在框1921通过将GPU当前设置为CPU当前来启动交换操作。如图所示,在框1927处的取消映射在框1921处写入数据并且继续到框1929(等待直到下一次更新到期)。回头参考框1923处的映射操作,方法1900可以在框1931处继续,将新数据写入存储器(诸如存储器1933),并且随后在框1917处理渲染命令。
对“一个实施例”、“实施例”、“示例实施例”、“各种实施例”等的引用指示如此描述的实施例可以包括特定的特征、结构或特性,但不是每个实施例都必然包括特定的特征、结构或特性。此外,一些实施例可能具有针对其他实施例描述的特征中的一些、全部或者不具有上述特征。
在前述说明书中,参考其具体示例性实施例描述了实施例。然而,显而易见的是,可以对其进行各种修改和改变而不脱离如所附权利要求书中阐述的实施例的更宽泛的精神和范围。因此,说明书和附图被认为是说明性的而不是限制性的。
在以下描述和权利要求中,可以使用术语“耦合”及其衍生词。“耦合”用于指示两个或更多个元素彼此协作或相互作用,但是它们可以在它们之间具有或者不具有中间物理或电子组件。
如权利要求中所使用的,除非另外指明,否则使用序数形容词“第一”、“第二”、“第三”等来描述共同元素仅仅指示正在引用相似元素的不同实例,并不旨在意味着如此描述的元素必须按照给定顺序,无论是时间上、空间上、排名上或任何其他方式。
以下条款和/或示例涉及进一步的实施例或示例。这些示例中的细节可以在一个或多个实施例中的任何地方使用。不同实施例或示例的各种特征可以与所包括的一些特征以及排除在外的其他特征进行各种组合,以适应各种不同的应用。示例可以包括诸如方法、用于执行方法的动作的单元、包括在由机器执行时使机器执行方法的动作的指令的至少一个机器可读介质、或者用于根据在此描述的实施例和示例来促进混合通信的装置或系统的主题。
一些实施例涉及示例1,其包括用于在计算设备处使用三重缓冲常量缓冲器来促进高效处理图形数据的装置,包括:检测/接收逻辑,用于检测由应用程序生成多块缓冲器以在所述装置的图形处理器处执行数据处理;映射逻辑,用于将所述多块缓冲器的第一存储器块映射到所述图形处理器,其中所述映射逻辑还将所述多块缓冲器的第二存储器块和第三存储器块映射到应用程序处理器;以及交换执行逻辑,用于执行交换操作以促进所述图形处理器处理与所述应用程序处理器相关联的当前数据集。
示例2包括示例1的主题,还包括:交换逻辑,用于通过将交换命令插入能够由图形处理器执行的命令流中来启动交换操作;以及取消映射逻辑,用于取消映射所述第二存储器块和所述第三存储器块以促进所述交换操作的启动,其中取消映射包括将所述第三存储器块的下一个数据集与所述第二存储器块的所述当前数据集进行交换。
示例3包括示例1或2的主题,其中多块缓冲器的第一、第二和第三存储器块用于存储包括当前数据集的数据,其中生成数据的第一速率独立于消费数据的第二速率。
示例4包括示例1的主题,其中所述命令流包括能够消费所述数据的多个图形命令,其中,所述多块缓冲器用于促进与能够由多个图形命令消费的数据的生成异步地生成所述多个图形命令。
示例5包括示例1的主题,其中图形处理器利用多块缓冲器的存储器块来促进数据的消费,并且其中应用程序处理器促进将数据写入到多块缓冲器的一个或多个存储器块,其中所述应用程序处理器还用于促进在所述一个或多个存储器块的最非近期(leastrecently)更新的存储器块中重写所述数据的一个或多个部分。
示例6包括示例1或2的主题,其中所述交换操作包括通过以下操作来将与所述应用程序处理器相关联的所述第二和第三存储器块的最为近期更新的存储器块与被映射为被所述图形处理器消费的所述第一存储器块进行交换:切换与最为近期更新的存储器块和所述第一存储器块相关联的指针。
示例7包括示例6的主题,其中通过改变最为近期更新的存储器块和第一存储器块的虚拟到物理存储器映射来进一步执行交换。
示例8包括示例6的主题,其中交换包括用第一存储器块复制最为近期更新的存储器块。
一些实施例涉及包括用于促进在计算设备处使用三重缓冲常量缓冲器高效处理图形数据的方法的示例9,包括:检测由应用程序生成多块缓冲器以在计算设备的图形处理器处执行数据处理;将所述多块缓冲器的第一存储器块映射到所述图形处理器,其中映射进一步包括将所述多块缓冲器的第二存储器块和第三存储器块映射到应用程序处理器;以及执行交换操作以促进图形处理器处理与所述应用程序处理器相关联的当前数据集。
示例10包括示例9的主题,还包括:通过将交换命令插入能够由所述图形处理器执行的命令流中来启动所述交换操作;以及取消映射所述第二存储器块和所述第三存储器块以促进所述交换操作的启动,其中取消映射包括将所述第三存储器块的下一数据集与所述第二存储器块的当前数据集进行交换。
示例11包括示例9或10的主题,其中所述多块缓冲器的第一、第二和第三存储器块用于存储包括所述当前数据集的数据,其中生成所述数据的第一速率独立于消费所述数据的第二速率。
示例12包括示例9的主题,其中所述命令流包括能够消费所述数据的多个图形命令,其中所述多块缓冲器用于促进与能够由多个图形命令消费的数据的生成异步地生成所述多个图形命令。
示例13包括示例9的主题,其中所述图形处理器促进使用所述多块缓冲器的存储器块对所述数据的消费,并且其中所述应用程序处理器促进将所述数据写入所述多块缓冲器的一个或多个存储器块,其中所述应用程序处理器进一步促进在所述一个或多个存储器块的最非近期更新的存储器块中重写所述数据的一个或多个部分。
示例14包括示例9或10的主题,其中所述交换操作包括通过以下操作来将与所述应用程序处理器相关联的所述第二和第三存储器块的最为近期更新的存储器块与被映射以由所述图形处理器消费的所述第一存储器块进行交换:切换与所述最为近期更新的存储器块和所述第一存储器块相关联的指针。
示例15包括示例14的主题,其中通过改变最为近期更新的存储器块和所述第一存储器块的虚拟到物理存储器映射来进一步执行交换。
示例16包括示例14的主题,其中交换包括利用所述第一存储器块复制所述最为近期更新的存储器块。
与示例17有关的一些实施例包括一种系统,该系统包括具有指令的存储设备以及执行指令以促进机构执行一个或多个操作的处理器,所述操作包括:检测由应用程序生成多块缓冲器以在计算设备的图形处理器处执行数据处理;将所述多块缓冲器的第一存储器块映射到所述图形处理器,其中映射进一步包括将所述多块缓冲器的第二存储器块和第三存储器块映射到应用程序处理器;以及执行交换操作以促进图形处理器处理与所述应用程序处理器相关联的当前数据集。
示例18包括示例17的主题,其中所述一个或多个操作还包括:通过将交换命令插入能够由所述图形处理器执行的命令流中来启动所述交换操作;以及取消映射所述第二存储器块和所述第三存储器块以促进所述交换操作的启动,其中取消映射包括将所述第三存储器块的下一个数据集与所述第二存储器块的当前数据集进行交换。
示例19包括示例17或18的主题,其中所述多块缓冲器的第一、第二和第三存储器块用于存储包括所述当前数据集的数据,其中生成所述数据的第一速率独立于消费所述数据的第二速率。
示例20包括示例17的主题,其中所述命令流包括能够消费所述数据的多个图形命令,其中所述多块缓冲器用于促进与能够由多个图形命令消费的数据的生成异步地生成所述多个图形命令。
示例21包括示例17的主题,其中所述图形处理器促进使用所述多块缓冲器的存储器块对所述数据的消费,并且其中所述应用程序处理器促进将所述数据写入所述多块缓冲器的一个或多个存储器块,其中所述应用程序处理器进一步促进在所述一个或多个存储器块的最非近期更新的存储器块中重写所述数据的一个或多个部分。
示例22包括示例17或18的主题,其中所述交换操作包括通过以下操作来将与所述应用程序处理器相关联的所述第二和第三存储器块的最为近期更新的存储器块与被映射以由所述图形处理器消费的所述第一存储器块进行交换:切换与所述最为近期更新的存储器块和所述第一存储器块相关联的指针。
示例23包括示例22的主题,其中通过改变最为近期更新的存储器块和所述第一存储器块的虚拟到物理存储器映射来进一步执行交换。
示例24包括示例22的主题,其中交换包括利用所述第一存储器块复制所述最为近期更新的存储器块。
一些实施例涉及示例25,包括一种装置,该装置包括:用于检测由应用程序生成多块缓冲器以在计算设备的图形处理器处执行数据处理的单元;用于将所述多块缓冲器的第一存储器块映射到所述图形处理器的单元,其中映射还包括将所述多块缓冲器的第二存储器块和第三存储器块映射到应用程序处理器;以及用于执行交换操作以促进所述图形处理器处理与所述应用程序处理器相关联的当前数据集的单元。
示例26包括示例25的主题,还包括:用于通过将交换命令插入能够由所述图形处理器执行的命令流中来启动所述交换操作的单元;以及用于取消映射所述第二存储器块和所述第三存储器块以促进所述交换操作的启动的单元,其中取消映射包括交换所述第三存储器块的下一个数据集与所述第二存储器块的当前数据集。
示例27包括示例25或26的主题,其中所述多块缓冲器的第一、第二和第三存储器块用于存储包括所述当前数据集的数据,其中生成所述数据的第一速率独立于消费所述数据的第二速率。
示例28包括示例25的主题,其中所述命令流包括能够消费所述数据的多个图形命令,其中所述多块缓冲器用于促进与能够由所述多个图形命令消费的数据的生成异步地生成所述多个图形命令。
示例29包括示例25的主题,其中所述图形处理器促进使用所述多块缓冲器的存储器块对所述数据的消费,并且其中所述应用程序处理器促进将所述数据写入到所述多块缓冲器的一个或多个存储器块,其中所述应用程序处理器进一步促进在所述一个或多个存储器块中的最非近期更新的存储器块中重写所述数据的一个或多个部分。
示例30包括示例25或26的主题,其中所述交换操作包括通过以下操作来将与所述应用程序处理器相关联的所述第二和第三存储器块的最为近期更新的存储器块与被映射为被所述图形处理器消费的所述第一存储器块进行交换:切换与最为近期更新的存储器块和所述第一存储器块相关联的指针。
示例31包括示例30的主题,其中交换还通过改变最为近期更新的存储器块和所述第一存储器块的虚拟到物理存储器映射来执行。
示例32包括示例30的主题,其中交换包括用所述第一存储器块复制所述最为近期更新的存储器块。
示例33包括至少一个包括多个指令的非暂时性或有形的机器可读介质,当在计算设备上执行时,该指令用于实现或执行如权利要求或示例9-16中的任一项所述的方法。
示例34包括至少一个包括多个指令的机器可读介质,当其在计算设备上执行时,用于实现或执行如权利要求或示例9-16中的任一项所述的方法。
示例35包括包含实现或执行如权利要求或示例9-16中的任一项所述的方法的机制的系统。
示例36包括一种装置,该装置包括用于执行如权利要求或示例9-16中的任一项所述的方法的单元。
示例37包括被布置为实现或执行如权利要求或示例9-16中的任一项所述的方法的计算设备。
示例38包括被布置成实现或执行如权利要求或示例9-16中的任一项所述的方法的通信设备。
示例39包括至少一个包括多个指令的机器可读介质,当在计算设备上执行时,该指令用于实现或执行一种方法或实现如任何前述权利要求所述的装置。
示例40包括至少一个包括多个指令的非暂时性或有形的机器可读介质,当在计算设备上执行时所述多个指令实现或执行如任何前述权利要求所述的方法或实现如任何前述权利要求所述的装置。
示例41包括一种系统,该系统包括实现或执行如任何前述权利要求所述的方法或实现如任何前述权利要求所述的装置的机制。
示例42包括一种装置,该装置包括用于执行如任何前述权利要求所述的方法的单元。
示例43包括计算设备,该计算设备被布置为实现或执行如任何前述权利要求所述的方法或实现如任何前述权利要求所述的装置。
示例44包括通信设备,该通信设备被布置为实现或执行如任何前述权利要求所述的方法或实现如任何前述权利要求所述的装置。
附图和前面的描述给出了实施例的示例。本领域技术人员将认识到,所描述的元素中的一个或多个可以很好地组合成单个功能元素。可替代地,某些元素可能会被分成多个功能元素。来自一个实施例的元素可以被添加到另一实施例。例如,这里描述的过程的顺序可以被改变并且不限于这里描述的方式。此外,任何流程图的操作都不需要按所示顺序执行;也不一定需要执行所有这些动作。而且,那些不依赖于其他动作的动作可以与其他动作并行执行。实施例的范围决不受这些具体示例的限制。许多变化,无论是否在说明书中明确给出,诸如结构、尺寸和材料使用方面的差异都是可能的。实施例的范围至少与所附权利要求所给出的范围一样宽。
Claims (21)
1.一种用于促进在计算设备处使用三重缓冲常量缓冲器来高效处理图形数据的装置,包括:
检测/接收逻辑,用于检测由应用程序生成多块缓冲器以在所述装置的图形处理器处执行数据处理;
映射逻辑,用于将所述多块缓冲器的第一存储器块映射到所述图形处理器,其中所述映射逻辑还用于将所述多块缓冲器的第二存储器块和第三存储器块映射到应用程序处理器;以及
交换执行逻辑,用于执行交换操作以促进所述图形处理器处理与所述应用程序处理器相关联的当前数据集。
2.根据权利要求1所述的装置,还包括:
交换逻辑,用于通过将交换命令插入到能够由所述图形处理器执行的命令流中来启动所述交换操作;以及
取消映射逻辑,用于对所述第二存储器块和所述第三存储器块取消映射以促进所述交换操作的启动,其中取消映射包括交换所述第三存储器块的下一个数据集与所述第二存储器块的当前数据集。
3.根据权利要求1或2所述的装置,其中所述多块缓冲器的第一存储器块、第二存储器块和第三存储器块用于存储包括所述当前数据集的数据,其中生成所述数据的第一速率独立于消费所述数据的第二速率。
4.根据权利要求1所述的装置,其中所述命令流包括能够消费所述数据的多个图形命令,其中所述多块缓冲器用于促进与能够由所述多个图形命令消费的数据的生成异步地生成所述多个图形命令。
5.根据权利要求1所述的装置,其中所述图形处理器用于促进使用所述多块缓冲器的存储器块对所述数据的消费,并且其中所述应用程序处理器用于促进将所述数据写入到所述多块缓冲器的一个或多个存储器块,其中所述应用程序处理器进一步用于促进在所述一个或多个存储器块的最非近期更新的存储器块中重写所述数据的一个或多个部分。
6.根据权利要求1或2所述的装置,其中所述交换操作包括通过以下操作来将与所述应用程序处理器相关联的所述第二存储器块和所述第三存储器块的最为近期更新的存储器块与被映射为被所述图形处理器消费的所述第一存储器块进行交换:切换与所述最为近期更新的存储器块和所述第一存储器块相关联的指针。
7.根据权利要求6所述的装置,其中交换还通过改变所述最为近期更新的存储器块和所述第一存储器块的虚拟到物理存储器映射来执行。
8.根据权利要求6所述的装置,其中交换包括利用所述第一存储器块复制所述最为近期更新的存储器块。
9.一种用于促进在计算设备处使用三重缓冲常量缓冲器高效处理图形数据的方法,包括:
检测由应用程序生成多块缓冲器以在计算设备的图形处理器处执行数据处理;
将所述多块缓冲器的第一存储器块映射到所述图形处理器,其中映射进一步包括将所述多块缓冲器的第二存储器块和第三存储器块映射到应用程序处理器;以及
执行交换操作以促进所述图形处理器处理与所述应用程序处理器相关联的当前数据集。
10.根据权利要求9所述的方法,还包括:
通过将交换命令插入到能够由所述图形处理器执行的命令流中来启动所述交换操作;以及
对所述第二存储器块和所述第三存储器块取消映射以促进所述交换操作的启动,其中取消映射包括将所述第三存储器块的下一数据集与所述第二存储器块的当前数据集进行交换。
11.根据权利要求9所述的方法,其中所述多块缓冲器的第一存储器块、第二存储器块和第三存储器块用于存储包括所述当前数据集的数据,其中生成所述数据的第一速率独立于消费所述数据的第二速率。
12.根据权利要求9所述的方法,其中所述命令流包括能够消费所述数据的多个图形命令,其中所述多块缓冲器用于促进与能够由所述多个图形命令消费的数据的生成异步地生成所述多个图形命令。
13.根据权利要求9所述的方法,其中所述图形处理器用于促进使用所述多块缓冲器的存储器块对所述数据的消费,并且其中所述应用程序处理器用于促进将所述数据写入到所述多块缓冲器的一个或多个存储器块,其中所述应用程序处理器进一步用于促进在所述一个或多个存储器块的最非近期更新的存储器块中重写所述数据的一个或多个部分。
14.根据权利要求9所述的方法,其中所述交换操作包括通过以下操作来将与所述应用程序处理器相关联的所述第二存储器块和所述第三存储器块的最为近期更新的存储器块与被映射为被所述图形处理器消费的所述第一存储器块进行交换:切换与所述最为近期更新的存储器块和所述第一存储器块相关联的指针。
15.根据权利要求13所述的方法,其中通过改变所述最为近期更新的存储器块和所述第一存储器块的虚拟到物理存储器映射来进一步执行交换。
16.根据权利要求13所述的方法,其中交换包括利用所述第一存储器块复制所述最为近期更新的存储器块。
17.至少一种机器可读介质,其包括多个指令,所述指令当在计算设备上执行时实现或执行根据权利要求9-16中任一项所述的方法。
18.一种包括实施或执行根据权利要求9-16中任一项所述的方法的机制的系统。
19.一种装置,包括用于执行根据权利要求9-16中任一项所述的方法的单元。
20.一种计算设备,其被布置为实施或执行根据权利要求9-16中任一项所述的方法。
21.一种通信设备,其被布置为实现或执行根据权利要求9-16中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/954,899 | 2015-11-30 | ||
US14/954,899 US20170154403A1 (en) | 2015-11-30 | 2015-11-30 | Triple buffered constant buffers for efficient processing of graphics data at computing devices |
PCT/US2016/043190 WO2017095478A1 (en) | 2015-11-30 | 2016-07-20 | Triple buffered constant buffers for efficient processing of graphics data at computing devices |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108352052A true CN108352052A (zh) | 2018-07-31 |
Family
ID=58777059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680066677.2A Pending CN108352052A (zh) | 2015-11-30 | 2016-07-20 | 用于在计算设备处高效处理图形数据的三重缓冲常量缓冲器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20170154403A1 (zh) |
CN (1) | CN108352052A (zh) |
WO (1) | WO2017095478A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326818A (zh) * | 2021-08-02 | 2021-08-31 | 湖南高至科技有限公司 | 视频编码的海量人脸识别方法、系统、设备和介质 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10235811B2 (en) | 2016-12-29 | 2019-03-19 | Intel Corporation | Replicating primitives across multiple viewports |
US11049211B2 (en) | 2017-07-06 | 2021-06-29 | Channel One Holdings Inc. | Methods and system for asynchronously buffering rendering by a graphics processing unit |
CA3044477A1 (en) | 2018-06-01 | 2019-12-01 | Gregory Szober | Display buffering methods and systems |
US10628910B2 (en) | 2018-09-24 | 2020-04-21 | Intel Corporation | Vertex shader with primitive replication |
WO2020140145A1 (en) * | 2019-01-04 | 2020-07-09 | Tomislav Malnar | Interrupt-free multiple buffering methods and systems |
US11164496B2 (en) | 2019-01-04 | 2021-11-02 | Channel One Holdings Inc. | Interrupt-free multiple buffering methods and systems |
US11854433B2 (en) * | 2019-02-04 | 2023-12-26 | Pearson Education, Inc. | Systems and methods for item response modelling of digital assessments |
US11423035B2 (en) | 2019-02-04 | 2022-08-23 | Pearson Education, Inc. | Scoring system for digital assessment quality with harmonic averaging |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5953014A (en) * | 1996-06-07 | 1999-09-14 | U.S. Philips | Image generation using three z-buffers |
US7196710B1 (en) * | 2000-08-23 | 2007-03-27 | Nintendo Co., Ltd. | Method and apparatus for buffering graphics data in a graphics system |
US20090037653A1 (en) * | 2007-07-31 | 2009-02-05 | Brokenshire Daniel A | Methods and arrangements for multi-buffering data |
US7668979B1 (en) * | 2005-03-25 | 2010-02-23 | Tilera Corporation | Buffering data in a parallel processing environment |
CN101911125A (zh) * | 2008-01-18 | 2010-12-08 | 高通股份有限公司 | 图形处理系统中对离屏表面的多重缓冲支持 |
US20110279463A1 (en) * | 2010-05-13 | 2011-11-17 | Chin-Jung Yang | Graphics processing method applied to a plurality of buffers and graphics processing apparatus thereof |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5475836A (en) * | 1987-04-01 | 1995-12-12 | Lotus Development Corporation | Interface for providing access to external data sources/sinks |
US5347634A (en) * | 1990-03-15 | 1994-09-13 | Hewlett-Packard Company | System and method for directly executing user DMA instruction from user controlled process by employing processor privileged work buffer pointers |
JPH0799512B2 (ja) * | 1992-11-18 | 1995-10-25 | インターナショナル・ビジネス・マシーンズ・コーポレイション | プログラム可能な外部記憶制御装置 |
US6552723B1 (en) * | 1998-08-20 | 2003-04-22 | Apple Computer, Inc. | System, apparatus and method for spatially sorting image data in a three-dimensional graphics pipeline |
JP2000322312A (ja) * | 1999-04-28 | 2000-11-24 | Internatl Business Mach Corp <Ibm> | メモリアクセス制御装置およびその方法 |
US6731282B2 (en) * | 2001-06-19 | 2004-05-04 | Intel Corporation | System and method for parallel rendering of images |
US6891543B2 (en) * | 2002-05-08 | 2005-05-10 | Intel Corporation | Method and system for optimally sharing memory between a host processor and graphics processor |
US7525548B2 (en) * | 2005-11-04 | 2009-04-28 | Nvidia Corporation | Video processing with multiple graphical processing units |
US9375635B2 (en) * | 2009-03-23 | 2016-06-28 | Sony Interactive Entertainment America Llc | System and method for improving the graphics performance of hosted applications |
CA2782832C (en) * | 2011-07-19 | 2017-04-18 | Research In Motion Limited | Method and system for displaying using buffer swapping |
JP5968463B2 (ja) * | 2012-01-06 | 2016-08-10 | インテル コーポレイション | データを別の記憶装置にコピーせずにデータソースによりバッファに格納されたデータを処理するためのポインタのスワッピング |
US8937623B2 (en) * | 2012-10-15 | 2015-01-20 | Apple Inc. | Page flipping with backend scaling at high resolutions |
US9069674B2 (en) * | 2012-11-27 | 2015-06-30 | International Business Machines Corporation | Coherent proxy for attached processor |
US9129394B2 (en) * | 2012-12-14 | 2015-09-08 | Microsoft Technology Licensing, Llc | CPU-GPU parallelization |
-
2015
- 2015-11-30 US US14/954,899 patent/US20170154403A1/en not_active Abandoned
-
2016
- 2016-07-20 WO PCT/US2016/043190 patent/WO2017095478A1/en active Application Filing
- 2016-07-20 CN CN201680066677.2A patent/CN108352052A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5953014A (en) * | 1996-06-07 | 1999-09-14 | U.S. Philips | Image generation using three z-buffers |
US7196710B1 (en) * | 2000-08-23 | 2007-03-27 | Nintendo Co., Ltd. | Method and apparatus for buffering graphics data in a graphics system |
US7668979B1 (en) * | 2005-03-25 | 2010-02-23 | Tilera Corporation | Buffering data in a parallel processing environment |
US20090037653A1 (en) * | 2007-07-31 | 2009-02-05 | Brokenshire Daniel A | Methods and arrangements for multi-buffering data |
CN101911125A (zh) * | 2008-01-18 | 2010-12-08 | 高通股份有限公司 | 图形处理系统中对离屏表面的多重缓冲支持 |
US20110279463A1 (en) * | 2010-05-13 | 2011-11-17 | Chin-Jung Yang | Graphics processing method applied to a plurality of buffers and graphics processing apparatus thereof |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326818A (zh) * | 2021-08-02 | 2021-08-31 | 湖南高至科技有限公司 | 视频编码的海量人脸识别方法、系统、设备和介质 |
CN113326818B (zh) * | 2021-08-02 | 2021-09-24 | 湖南高至科技有限公司 | 视频编码的海量人脸识别方法、系统、设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
US20170154403A1 (en) | 2017-06-01 |
WO2017095478A1 (en) | 2017-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111539518B (zh) | 用于深度神经网络的计算优化机制 | |
CN108734648B (zh) | 计算优化机制 | |
CN108694080B (zh) | 高效线程组调度 | |
US20210279571A1 (en) | Neural network optimization mechanism | |
US20220284539A1 (en) | Method and apparatus for efficient loop processing in a graphics hardware front end | |
EP3822788A1 (en) | Neural network scheduling mechanism | |
US20200137380A1 (en) | Multi-plane display image synthesis mechanism | |
CN108352052A (zh) | 用于在计算设备处高效处理图形数据的三重缓冲常量缓冲器 | |
CN109478310A (zh) | 在计算环境中使用纹素着色器的多分辨率延迟着色 | |
TW201706840A (zh) | 促進圖形處理命令的動態運行時變換以用於在計算裝置之改善的圖形效能 | |
CN108701053B (zh) | 促进针对计算环境中的任务执行的执行感知混合抢占 | |
WO2018026482A1 (en) | Mechanism to accelerate graphics workloads in a multi-core computing architecture | |
US10776156B2 (en) | Thread priority mechanism | |
US20170069054A1 (en) | Facilitating efficient scheduling of graphics workloads at computing devices | |
US11550632B2 (en) | Facilitating efficient communication and data processing across clusters of computing machines in heterogeneous computing environment | |
WO2016200539A1 (en) | Facilitating configuration of computing engines based on runtime workload measurements at computing devices | |
US10552211B2 (en) | Mechanism to increase thread parallelism in a graphics processor | |
CN111724294A (zh) | 分布式拷贝引擎 | |
EP3618007B1 (en) | Apparatus and method for runtime training of a denoising machine learning engine | |
CN113577758A (zh) | 云游戏自适应同步机制 | |
CN111667396A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180731 |
|
WD01 | Invention patent application deemed withdrawn after publication |