CN106575431B - 用于高度高效的图形处理单元(gpu)执行模型的方法和装置 - Google Patents

用于高度高效的图形处理单元(gpu)执行模型的方法和装置 Download PDF

Info

Publication number
CN106575431B
CN106575431B CN201580045602.1A CN201580045602A CN106575431B CN 106575431 B CN106575431 B CN 106575431B CN 201580045602 A CN201580045602 A CN 201580045602A CN 106575431 B CN106575431 B CN 106575431B
Authority
CN
China
Prior art keywords
child
gpu
workloads
workload
execution
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
Application number
CN201580045602.1A
Other languages
English (en)
Other versions
CN106575431A (zh
CN106575431A8 (zh
Inventor
J.N.劳
P.K.兰卡
M.姆罗泽克
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of CN106575431A publication Critical patent/CN106575431A/zh
Publication of CN106575431A8 publication Critical patent/CN106575431A8/zh
Application granted granted Critical
Publication of CN106575431B publication Critical patent/CN106575431B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)

Abstract

描述了用于在没有主机介入的情况下执行工作负荷的装置和方法。例如,装置的一个实施例包括:主机处理器;以及图形处理器单元(GPU),以响应于由所述主机处理器发布的一个或多个命令而执行分层工作负荷,所述分层工作负荷包括父工作负荷和在逻辑图形结构中互连的多个子工作负荷;以及调度器内核,其由所述GPU实现以在没有主机介入的情况下调度所述多个子工作负荷的执行,所述调度器内核用以评估对于执行所述子工作负荷所需的条件并基于所评估的条件来确定其中在所述GPU上执行所述子工作负荷的顺序;所述GPU用以以由所述调度器内核确定的顺序执行所述子工作负荷并用以在执行所述子工作负荷中的所有之后将父和子工作负荷的结果提供给所述主机处理器。

Description

用于高度高效的图形处理单元(GPU)执行模型的方法和装置
背景技术。
技术领域
本发明一般地涉及计算机处理器的领域。更特别地,本发明涉及用于高度高效的图形处理单元(GPU)执行模型的方法和装置。
相关技术描述
图形处理单元上的通用计算(GPGPU)涉及到图形处理单元(GPU)的使用,其通常处置计算机图形计算,用于执行传统上由中央处理单元(CPU)处置的应用中的计算。提供在任意位上执行的功能上完整的操作集的任何GPU可以计算任何可计算的值。因为GPU通常包括众多执行单元并且因为计算机系统可以包括多个GPU芯片,当前的GPU平台实现了用于执行某些类型的并行程序代码的理想平台。
OpenCL是用于GPGPU计算的行业标准应用编程接口(API)。本说明书的OpenCL2.0版本介绍了称作“嵌套并行度”的在GPU上执行工作的新概念,其指向特定类型的并行数据问题,其中仅在工作负荷的执行期间才知晓工作的规模和量级。图形遍历是此类工作负荷的一个好的示例,其中仅在处理图形节点之后才知晓处理量。这是新的GPGPU处理范例。
在当前配置中,主机处理器准确地控制GPU处理什么指令和数据、何时处理以及如何处理。因此,GPU通常是对主机处理器的从设备,所述主机处理器充当主人。在主机的控制GPU的执行用于图形遍历的强力方法情况下,例如,GPU每次处理一个或几个节点,并且主机将决定接下来处理什么节点。这意味着GPU和主机不得不来回传送状态/结果,导致了功率和性能影响。
附图说明
可以从结合以下附图的以下详细描述获得对本发明的更好理解,在附图中:
图1是有具有一个或多个处理器核的处理器和图形处理器的计算机系统的实施例的框图;
图2是具有一个或多个处理器核、集成存储器控制器以及集成图形处理器的处理器的一个实施例的框图;
图3是可以是分立的图形处理单元或者可以是与多个处理核集成的图形处理器的图形处理器的一个实施例的框图;
图4是用于图形处理器的图形处理引擎的实施例的框图;
图5是图形处理器的另一实施例的框图;
图6是包括处理元件阵列的线程执行逻辑的框图;
图7图示出根据实施例的图形处理器执行单元指令格式;
图8是包括图形流水线、媒体流水线、显示引擎、线程执行逻辑以及渲染输出流水线的图形处理器的另一实施例的框图;
图9A是图示出根据实施例的图形处理器命令格式的框图;
图9B是图示出根据实施例的图形处理器命令序列的框图;
图10图示出根据实施例的用于数据处理系统的示例性图形软件架构;
图11图示出包括父节点/工作负荷和多个子节点/工作负荷的示例性分层工作负荷;
图12图示出根据本发明的一个实施例的包括调度器内核的系统架构;
图13图示出根据本发明的一个实施例的被实行以执行子工作负荷的操作。
图14图示出根据本发明的一个实施例的被采用以调度和执行工作负荷的示例性程序代码;
图15图示出示出针对使用CPU和GPU介入以及仅GPU介入执行工作负荷的性能结果的表格;以及
图16图示出示出针对使用CPU和GPU介入以及仅GPU介入执行工作负荷的性能结果的图表。
具体实施方式
在以下描述中,出于解释的目的,阐述众多具体细节以便提供对下面描述的本发明的实施例的透彻理解。然而,对于本领域技术人员来说将会显而易见的是,可以在没有这些具体细节中的某些的情况下实践本发明的实施例。在其它情况下,在框图形式中示出公知的结构和设备以避免模糊本发明的实施例的根本原理。
示例性图形处理器架构和数据类型
概览-图1-3
图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总线的到I/O设备的连接。
存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备或具有适当性能以担任过程存储器的一些其它存储器设备。存储器120可以存储数据122和指令121以供在处理器102执行过程时使用。存储器控制器集线器116还与可选的外部图形处理器112耦合,其可以与处理器102中的一个或多个图形处理器108通信以执行图形和媒体操作。
ICH 130使外围设备能够经由高速I/O总线连接到存储器120和处理器102。I/O外围设备包括音频控制器146、固件接口128、无线收发器126(例如,Wi-Fi、蓝牙)、数据存储设备124(例如,硬盘驱动、闪速存储器等)以及用于将传统(例如,个人系统2(PS/2))设备耦合到系统的传统I/O控制器。一个或多个通用串行总线(USB)控制器142连接输入设备,诸如键盘和鼠标144组合。网络控制器134还可以耦合到ICH 130。在一个实施例中,高性能网络控制器(未示出)耦合到处理器总线110。
图2是具有一个或多个处理器核202A-N、集成存储器控制器214以及集成图形处理器208的处理器200的实施例的框图。处理器200可以包括直到并包括由虚线框表示的附加核202N的附加核。核202A-N中的每一个包括一个或多个内部高速缓存单元204A-N。在一个实施例中,每个核还能够访问一个或多个共享的高速缓存单元206。
内部高速缓存单元204A-N和共享高速缓存单元206表示处理器200内的高速缓存存储器层级。高速缓存存储器层级可以包括在每个核内的至少一级的指令和数据高速缓存和共享中级高速缓存的一级或多级,诸如级2(L2)、级3(L3)、级4(L4)或其它级的高速缓存,其中在外部存储器之前的高速缓存的最高级被分类为末级高速缓存(LLC)。在一个实施例中,高速缓存一致性逻辑维持各个高速缓存单元206和204A-N之间的一致性。
处理器200还可以包括一组一个或多个总线控制器单元216和系统代理210。所述一个或多个总线控制器单元管理一组外围设备总线,诸如一个或多个外围组件互连总线(例如,PCI、PCI高速)。系统代理210为各个处理器组件提供管理功能性。在一个实施例中,系统代理210包括一个或多个集成存储器控制器214以管理对各个外部存储器设备(未示出)的访问。
在一个实施例中,核202A-N中的一个或多个包括对同时多线程的支持。在这样的实施例中,系统代理210包括用于在多线程处理期间协调并操作核202A-N的组件。系统代理210可以附加地包括功率控制单元(PCU),其包括用以调节核202A-N和图形处理器208的功率状态的逻辑和组件。
处理器200附加地包括图形处理器208以执行图形处理操作。在一个实施例中,图形处理器208与该组共享高速缓存单元206和系统代理单元210耦合,系统代理单元210包括所述一个或多个集成存储器控制器214。在一个实施例中,显示器控制器211被与图形处理器208耦合以驱动到一个或多个耦合的显示器的图形处理器输出。显示器控制器211可以是经由至少一个互连与图形处理器耦合的分离的模块,或者可以被集成在图形处理器208或系统代理210内。
在一个实施例中,使用基于环的互连单元212来耦合处理器200的内部组件,然而,可以使用替换互连单元,诸如点对点互连、切换互连或包括本领域中公知的技术的其它技术。在一个实施例中,图形处理器208经由I/O链路213与环形互连212耦合。
示例性I/O链路213表示多种I/O互连中的至少一种,包括促进各个处理器组件与高性能嵌入式存储器模块218(诸如eDRAM模块)之间的通信的封装上I/O互连。在一个实施例中,核202A-N中的每一个和图形处理器208使用嵌入式存储器模块218作为共享末级高速缓存。
在一个实施例中,核202A-N是执行相同指令集架构的同质核。在另一实施例中,核202A-N在指令集架构(ISA)方面是异质,其中核202A-N中的一个或多个执行第一指令集,而其它核中的至少一个执行第一指令集的子集或不同指令集。
处理器200可以是一个或多个基底的一部分或者可以使用多个工艺技术中的任何而被实现在一个或多个基底上,所述工艺技术例如,互补金属氧化物半导体(CMOS)、双极结/互补金属氧化物半导体(BiCMOS)或N类金属氧化物半导体逻辑(NMOS)。附加地,可以将处理器200实现在一个或多个芯片上或实现为具有除其它组件之外的所例证的组件的片上系统(SoC)集成电路。
图3是可以是分立的图形处理单元或者可以是与多个处理核集成的图形处理器的图形处理器300的一个实施例的框图。在一个实施例中,图形处理器与经由存储器映射I/O接口通信到图形处理器上的寄存器并且经由放置到处理器存储器中的命令。图形处理器300包括存储器接口314以访问存储器。存储器接口314可以是到本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存和/或到系统存储器的接口。
图形处理器300还包括显示器控制器302以驱动到显示器设备320的显示器输出数据。显示器控制器302包括用于显示和组合多层视频或用户接口元件的一个或多个覆盖面的硬件。在一个实施例中,图形处理器300包括视频编解码器引擎306以编码、解码或转码到一个或多个媒体编码格式、来自一个或多个媒体编码格式或在一个或多个媒体编码格式之间的媒体,所述媒体编码格式包括但不限于诸如MPEG-2的运动图像专家组(MPEG)格式、诸如H.264/MPEG-4 AVC的高级视频编码(AVC)格式、以及电影电视工程师协会(SMPTE)421M/VC-1和诸如JPEG的联合图像专家组(JPEG)格式和运动JPEG(MJPEG)格式。
在一个实施例中,图形处理器300包括块图像传输(BLIT)引擎304以执行二维(2D)光栅化操作,包括例如位边界块传输。然而,在一个实施例中,使用图形处理引擎(GPE)310的一个或多个组件执行2D图形操作。图形处理引擎310是用于执行包括三维(3D)图形操作和媒体操作的图形操作的计算引擎。
GPE 310包括用于执行3D操作的3D流水线312,诸如使用在3D原始形状(例如,矩形、三角形等)上起作用的处理函数渲染三维图像和场景。3D流水线312包括执行元件内的各种任务和/或产生到3D/媒体子系统315的执行线程的可编程和固定功能元件。虽然可以使用3D流水线312来执行媒体操作,但是GPE 310的实施例还包括媒体流水线316,其专门地用于执行媒体操作,诸如视频后处理和图像增强。
在一个实施例中,媒体流水线316包括固定功能或可编程逻辑单元以代替(或代表)视频编解码器引擎306执行一个或多个专门媒体操作,诸如视频解码加速、视频去隔行和视频编码加速。在一个实施例中,媒体流水线316附加地包括线程产生单元以产生用于在3D/媒体子系统315上执行的线程。所产生的线程在3D/媒体子系统中包括的一个或多个图形执行单元上执行用于媒体操作的计算。
3D/媒体子系统315包括用于执行由3D流水线312和媒体流水线316产生的线程的逻辑。在一个实施例中,流水线将线程执行请求发送到3D/媒体子系统315,其包括用于仲裁和派遣各个请求到可用的线程执行资源的线程派遣逻辑。执行资源包括图形执行单元的阵列以处理3D和媒体线程。在一个实施例中,3D/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一个实施例中,该子系统还包括共享存储器,其包括寄存器和可寻址存储器以在线程之间共享数据并存储输出数据。
3D/媒体处理-图4
图4是用于图形处理器的图形处理引擎410的实施例的框图。在一个实施例中,图形处理引擎(GPE)410是图3中所示的GPE 310的一个版本。GPE 410包括3D流水线412和媒体流水线416,其中的每一个可以或者不同于或者类似于图3的3D流水线312和媒体流水线316的实现。
在一个实施例中,GPE 410与命令流式传输器403耦合,其提供到GPE 3D和媒体流水线412、416的命令流。命令流式传输器403被耦合到存储器,其可以是系统存储器,或者是内部高速缓存存储器和共享高速缓存存储器中的一个或多个。命令流式传输器(streamer)403从存储器接收命令并将命令发送至3D流水线412和/或媒体流水线416。3D和媒体流水线通过经由各自流水线内的逻辑执行操作或者通过将一个或多个执行线程派遣到执行单元阵列414来处理命令。在一个实施例中,执行单元阵列414是可缩放的,使得基于GPE 410的目标功率和性能等级,该阵列包括可变数目的执行单元。
采样引擎430与存储器(例如,高速缓存存储器或系统存储器)和执行单元阵列414耦合。在一个实施例中,采样引擎430为可缩放执行单元阵列414提供存储器存取机制,其允许执行阵列414从存储器读取图形和媒体数据。在一个实施例中,采样引擎430包括一个逻辑以执行针对媒体的专门图像采样操作。
采样引擎430中的专门媒体采样逻辑包括去噪/去隔行模块432、运动估计模块434以及图像缩放和滤波模块436。去噪/去隔行模块432包括一个逻辑以对经解码的视频数据执行去噪或去隔行算法中的一个或多个。去隔行逻辑将隔行视频内容的交替字段组合到视频的单个帧中。去噪逻辑从视频和图像数据降低或移除数据噪声。在一个实施例中,去噪逻辑和去隔行逻辑是运动自适应的并且基于在视频数据中检测到的运动的量使用空间或时间滤波。在一个实施例中,去噪/去隔行模块432包括专用运动检测逻辑(例如,在运动估计引擎434内)。
运动估计引擎434通过对视频数据执行视频加速功能(诸如运动向量估计和预测)来为视频操作提供硬件加速。运动估计引擎确定描述连续的视频帧之间的图像数据的变换的运动向量。在一个实施例中,图形处理器媒体编解码器使用视频运动估计引擎434来在宏块等级上对视频执行操作,所述宏块等级可以以其它方式对于使用通用处理器执行来说是计算上密集的。在一个实施例中,运动估计引擎434一般地可用于图形处理器组件以辅助视频解码和敏感或适应于视频数据内的运动的方向或量级的处理功能。
图像缩放和滤波模块436执行图像处理操作以增强所生成的图像和视频的视觉质量。在一个实施例中,缩放和滤波模块436在将数据提供给执行单元阵列414之前的采样操作期间处理图像和视频数据。
在一个实施例中,图形处理引擎410包括数据端口444,其为图形子系统提供附加机制以访问存储器。数据端口444促进针对包括渲染目标写入、常量缓冲器读取、暂存存储器空间读取/写入以及媒体表面访问的操作的存储器访问。在一个实施例中,数据端口444包括高速缓存存储器空间以高速缓存对存储器的访问。高速缓存存储器可以是单个数据高速缓存或被分离成针对经由所述数据端口访问存储器的多个子系统的多个高速缓存(例如,渲染缓冲器高速缓存、常量缓冲器高速缓存等)。在一个实施例中,在执行单元阵列414中的执行单元上执行的线程通过经由数据分布互连交换消息来与数据端口通信,所述数据分布互连耦合图形处理引擎410的子系统中的每一个。
执行单元-图5-7
图5是图形处理器的另一实施例的框图。在一个实施例中,图形处理器包括环形互连502、流水线前端504、媒体引擎537和图形核580A-N。环形互连502将图形处理器耦合到其它处理单元,包括其它图形处理器或一个或多个通用处理器核。在一个实施例中,图形处理器是集成在多核处理系统内的许多处理器之一。
图形处理器经由环形互连502接收成批命令。通过流水线前端504中的命令流式传输器503解译进入的命令。图形处理器包括用于经由(一个或多个)图形核580A-N执行3D几何处理和媒体处理的可缩放执行逻辑。对于3D几何处理命令,命令流式传输器503将命令提供给几何流水线536。对于至少一些媒体处理命令,命令流式传输器503将命令提供给视频前端534,其与媒体引擎537耦合。媒体引擎537包括用于视频和图像后处理的视频质量引擎(VQE)530以及用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(MFX)533引擎。几何流水线536和媒体引擎537每个为由至少一个图形核580A提供的线程执行资源生成执行线程。
图形处理器包括以模块化核580A-N(有时称为核切片)为特色的可缩放的线程执行资源,每个核580A-N均具有多个子核550A-N、560A-N(有时称为核子切片)。图形处理器可具有任何数目的图形核580A-580N。在一个实施例中,图形处理器包括至少具有第一子核550A和第二核子核560A的图形核580A。在另一个实施例中,图形处理器是具有单个子核(例如,550A)的低功率处理器。在一个实施例中,图形处理器包括多个图形核580A-N,每个核均包括第一子核集550A-N和第二子核集560A-N。第一子核集550A-N中的每个子核均至少包括执行单元552A-N和媒体/纹理采样器554A-N的第一集合。第二子核集560A-N中的每个子核均至少包括执行单元562A-N和采样器564A-N的第二集合。在一个实施例中,每个子核550A-N、560A-N共享共享资源集570A-N。在一个实施例中,共享资源包括共享高速缓存存储器和像素操作逻辑。在图形处理器的各种实施例中还可以包括其它共享资源。
图6图示出包括在图形处理引擎的一个实施例中采用的处理元件的阵列的线程执行逻辑600。在一个实施例中,线程执行逻辑600包括像素着色器602、线程派遣器604、指令高速缓存606、包括多个执行单元608A-N的可缩放执行单元阵列、采样器610、数据高速缓存612和数据端口614。在一个实施例中,所包括的组件经由链接到所述组件中的每一个的互连构造互连。线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610和执行单元阵列608A-N中的一个或多个到诸如系统存储器或高速缓存存储器的存储器的一个或多个连接。在一个实施例中,每个执行单元(例如,608A)都是能够执行多个同时线程并且对于每个线程并行地处理多个数据元素的单独的向量处理器。执行单元阵列608A-N包括任何数目的单独的执行单元。
在一个实施例中,执行单元阵列608A-N主要用于执行“着色器”程序。在一个实施例中,阵列608A-N中的执行单元执行包括对许多标准3D图形着色器指令的原生支持的指令集,使得在最少转译的情况下执行来自图形库(例如,Direct 3D和OpenGL)的着色器程序。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)以及通用处理(例如,计算和媒体着色器)。
执行单元阵列608A-N中的每个执行单元对数据元素的阵列进行操作。数据元素的数目是对于指令的“执行大小”或通道数目。执行通道是在指令内针对数据元素访问、掩蔽和流控制而执行的逻辑单元。通道数目可以独立于用于特定图形处理器的物理ALU或FPU的数目。执行单元608A-N支持整数和浮点数据类型。
执行单元指令集包括单个指令多个数据(SIMD)指令。可以将各个数据元素作为打包数据类型存储在寄存器中,并且执行单元将基于元素的数据大小处理各个元素。例如,当对256位宽的向量进行操作时,将向量的256个位存储在寄存器中,并且执行单元对该向量作为4个分离的64位包装数据元素(四字(QW)大小的数据元素)、8个分离的32位包装数据元素(双字(DW)大小的数据元素)、16个分离的16位包装数据元素(字(W)大小的数据元素)或32个分离的8位数据元素(字节(B)大小的数据元素)进行操作。然而,不同的向量宽度和寄存器大小是可能的。
在线程执行逻辑600中包括用于缓存用于执行单元的线程指令的一个或多个内部指令高速缓存(例如,606)。在一个实施例中,包括用于在线程执行期间缓存线程数据的一个或多个数据高速缓存(例如,612)。包括采样器610以为3D操作提供纹理采样并为媒体操作提供媒体采样。在一个实施例中,采样器610包括用于在将采样的数据提供给执行单元之前在采样过程期间处理纹理或媒体数据的专门纹理或媒体采样功能性。
在执行期间,图形和媒体流水线经由线程产生和派遣逻辑将线程启动请求发送给线程执行逻辑600。线程执行逻辑600包括用于仲裁来自图形和媒体流水线的线程启动请求并在一个或多个执行单元608A-N上实例化所请求的线程的本地线程派遣器604。例如,几何流水线(例如,图5的536)将顶点处理、镶嵌或几何处理线程派遣给线程执行逻辑600。线程派遣器604还可处理来自执行着色器程序的运行时间线程产生请求。
一旦已经处理一组几何对象并将其光栅化成像素数据,就调用像素着色器602以进一步计算输出信息并引起结果被写入到输出表面(例如,颜色缓冲器、深度缓冲器、模板缓冲器等)。在一个实施例中,像素着色器602计算要跨光栅化对象内插的各个顶点属性的值。然后,像素着色器602执行API提供的像素着色器程序。为了执行像素着色器程序,像素着色器602经由线程派遣器604将线程派遣给执行单元(例如,608A)。像素着色器602使用采样器610中的纹理采样逻辑来访问存储在存储器中的纹理图中的纹理数据。对纹理数据和输入几何数据的算术操作针对每个几何片段计算像素颜色数据,或从进一步处理中丢弃一个或多个像素。
在一个实施例中,数据端口614提供存储器访问机制用于线程执行逻辑600将经处理的数据输出到存储器以在图形处理器输出流水线上处理。在一个实施例中,数据端口614包括或耦合到一个或多个高速缓存存储器(例如,数据高速缓存612)以高速缓存数据以用于经由数据端口的存储器访问。
图7是图示出根据实施例的图形处理器执行单元指令格式的框图。在一个实施例中,图形处理器执行单元支持具有多种格式的指令的指令集。实线框图示出执行单元指令中一般包括的组成,而虚线包括可选的或者只包括在指令的子集中的组成。所图示出并描述的指令格式是宏指令,因为与一旦处理指令由指令解码造成的微操作相比,它们是被提供给执行单元的指令。
在一个实施例中,图形处理器执行单元原生地支持以128位格式710的指令。基于所选指令、指令选项和操作数的数目,64位压缩指令格式730可用于一些指令。原生128位格式710提供对所有指令选项的访问,而在64位格式730中,一些选项和操作受到限制。64位格式730中可用的原生指令随实施例不同而不同。在一个实施例中,使用索引字段713中的索引值集部分地压缩指令。执行单元硬件基于索引值来引用压缩表集,并使用压缩表输出来重构以128位格式710的原生指令。
对于每种格式,指令操作码712定义执行单元要执行的操作。执行单元跨每个操作数的多个数据元素并行地执行每个指令。例如,响应于加法指令,执行单元跨代表纹理元素或图片元素的每个颜色通道执行同时加法操作。默认地,执行单元跨操作数的所有数据通道执行每个指令。指令控制字段712使实现对诸如通道选择(例如,预测)和数据通道顺序(例如,调配(swizzle))的某些执行选项的控制。对于128位指令710,执行大小字段716限制将并行执行的数据通道的数目。执行大小字段716不可在64位压缩指令格式730中使用。
一些执行单元指令具有高达三个操作数,包括两个源操作数src0 722、src1 722和一个目的地718。在一个实施例中,执行单元支持双目的地指令,其中一个目的地是隐含的。数据操纵指令可以具有第三源操作数(例如,SRC2 724),其中指令操作码JJ12确定源操作数的数目。指令的最后一个源操作数可以是与指令一起传递的中间(例如,硬编码的)值。
在一个实施例中,基于操作码位字段将指令分组以便简化操作码解码740。对于8位操作码,位4、5和6允许执行单元确定操作码的类型。示出的精确操作码分组是示例性的。在一个实施例中,移动和逻辑操作码群组742包括数据移动和逻辑指令(例如,mov、cmp)。移动和逻辑群组742共享5个最高有效位(MSB),其中移动指令是以0000xxxxb(例如,0x0x)的形式,而逻辑指令是以0001xxxxb(例如,0x01)的形式。流控制指令群组744(例如,call、jmp)包括以0010xxxxb(例如,0x20)形式的指令。混杂指令群组746包括指令的混合,包括以0011xxxxb(例如,0x30)形式的同步化指令(例如,wait、send)。并行数学指令群组748包括以0100xxxxb(例如,0x40)形式的逐个分量算术指令(例如,add、mul)。并行数学群组748跨数据通道并行执行算术操作。向量数学群组750包括以0101xxxxb(例如,0x50)形式的算术指令(例如,dp4)。向量数学群组对向量操作数执行诸如点积计算的算术。
图形流水线-图8
图8是包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850以及渲染输出流水线870的图形处理器的另一实施例的框图。在一个实施例中,图形处理器是在包括一个或多个通用处理核的多核处理系统内的图形处理器。通过到一个或多个控制寄存器(未示出)的寄存器写入或经由通过环形互连802发布给图形处理器的命令来控制图形处理器。环形互连802将图形处理器耦合到其它处理组件,诸如其它图形处理器或通用处理器。通过命令流式传输器803解译来自环形互连的命令,命令流式传输器803将指令提供给图形流水线820或媒体流水线830的各个组件。
命令流式传输器803引导从存储器读取顶点数据并执行由命令流式传输器803提供的顶点处理命令的顶点提取器805组件的操作。顶点提取器805将顶点数据提供给顶点着色器807,顶点着色器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中包括像素着色器逻辑。
图形引擎具有互连总线、互连构造或允许在图形引擎的主要组件中传递数据和消息的某其它互连机制。在一个实施例中,执行单元852A、852B和(一个或多个)相关联的高速缓存851、纹理和媒体采样器854、以及纹理/采样器高速缓存858经由数据端口856互连以执行存储器访问并与图形引擎的渲染输出流水线组件通信。在一个实施例中,采样器854、高速缓存851、858和执行单元852A、852B每个均具有分离的存储器访问路径。
在一个实施例中,渲染输出流水线870包含将基于顶点的对象转化成它们的相关联的基于像素的表示的光栅化器和深度测试组件873。在一个实施例中,光栅化器逻辑包括用以执行固定功能三角形和线性光栅化的窗口器/掩蔽器单元。在一个实施例中,相关联的渲染和深度缓冲器高速缓存878、879也是可用的。像素操作组件877对数据执行基于像素的操作,但是在一些情况下,由2D引擎841执行与2D操作相关联的像素操作(例如,位块图像传输和混合),或者在显示时间处通过显示器控制器843使用覆盖显示器平面代替。在一个实施例中,共享L3高速缓存875可用于所有图形组件,从而允许在不使用主要系统存储器的情况下共享数据。
图形处理器媒体流水线830包括媒体引擎337和视频前端834。在一个实施例中,视频前端834从命令流式传输器803接收流水线命令。然而,在一个实施例中,媒体流水线830包括分离的命令流式传输器。视频前端834在将命令发送给媒体引擎837之前处理媒体命令。在一个实施例中,媒体引擎包括用于产生线程以便经由线程派遣器831派遣给线程执行逻辑850的线程产生功能性。
在一个实施例中,图形引擎包括显示器引擎840。在一个实施例中,显示器引擎840位于图形处理器的外部,并经由环形互连802或某其它互连总线或构造与图形处理器耦合。显示器引擎840包括2D引擎841和显示器控制器843。显示器引擎840包含能够独立于3D流水线进行操作的专用逻辑。显示器控制器843与显示器设备(未示出)耦合,所述显示器设备可以如在膝上型计算机中那样是系统集成的显示器设备,或者可以是经由显示器设备连接器附连的外部显示器设备。
图形流水线820和媒体流水线830可配置成基于多个图形和媒体编程接口执行操作,并且不专用于任何一个应用编程接口(API)。在一个实施例中,用于图形处理器的驱动器软件将专用于特定图形或媒体库的API调用转译成可以通过图形处理器处理的命令。在各个实施例中,对由Khronos Group支持的开放图形库(OpenGL)和开放计算语言(OpenCL)、来自微软公司的Direct3D库、或者在一个实施例中对于OpenGL和D3D两者提供支持。也可以对开放源计算机视觉库(OpenCV)提供支持。如果可以进行从具有兼容的3D流水线的未来API的流水线到图形处理器的流水线的映射,那么还将支持该未来API。
图形流水线编程-图9A-B
图9A是图示出根据实施例的图形处理器命令格式的框图,并且图9B是图示出根据实施例的图形处理器命令序列的框图。 图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将着色器执行线程派遣给图形处理器执行单元。
经由执行934命令或事件触发3D流水线922。在一个实施例中,寄存器写入触发命令执行。在一个实施例中,经由命令序列中的‘去(go)’或‘踢(kick)’命令触发执行。在一个实施例中,通过使用流水线同步化命令以便通过图形流水线刷新命令序列来触发命令执行。3D流水线将对3D图元执行几何处理。一旦操作完成,便对所得几何对象进行光栅化,并且像素引擎对所得像素进行上色。还可以包括用于控制像素着色和像素后端操作的附加命令以用于那些操作。
当执行媒体操作时,采样命令序列910跟随媒体流水线924路径。一般来说,对于媒体流水线924的特定使用和编程方式取决于要执行的媒体或计算操作。在媒体解码期间,可以将特定媒体解码操作卸载到媒体流水线。也可以绕过媒体流水线,并且可以使用由一个或多个通用处理核提供的资源整体或部分地执行媒体解码。在一个实施例中,媒体流水线还包括用于通用图形处理器单元(GPGPU)操作的元件,其中图形处理器用于使用与图形图元的渲染明确无关的计算着色器程序来执行SIMD向量操作。
以与3D流水线922类似的方式配置媒体流水线924。在媒体对象命令942之前派遣媒体流水线状态命令集940,或将它们放在命令队列中。媒体流水线状态命令940包括用于配置将用于处理媒体对象的媒体流水线元件的数据。这包括用于配置媒体流水线内的视频解码和视频编码逻辑的数据,诸如编码或解码格式。媒体流水线状态命令940还支持使用到包含一批状态设置的“间接”状态元素的一个或多个指针。
媒体对象命令942提供到媒体对象的指针以便通过媒体流水线进行处理。媒体对象包括包含要处理的视频数据的存储器缓冲器。在一个实施例中,在发布媒体对象命令942之前,所有媒体流水线状态都必须是有效的。一旦配置了流水线状态并将媒体对象命令942排队,就经由执行934命令或等价执行事件(例如,寄存器写入)触发媒体流水线924。然后,可以通过由3D流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一个实施例中,以与媒体操作类似的方式配置和执行GPGPU操作。
图形软件架构-图10
图10图示出根据实施例的用于数据处理系统的示例性图形软件架构。该软件架构包括3D图形应用1010、操作系统1020和至少一个处理器1030。处理器1030包括图形处理器1032和一个或多个通用处理器核1034。图形应用1010和操作系统1020每一个都在数据处理系统的系统存储器1050中执行。
在一个实施例中,3D图形应用1010包含包括着色器指令1012的一个或多个着色器程序。着色器语言指令可以是高级着色器语言,诸如高级着色器语言(HLSL)或OpenGL着色器语言(GLSL)。该应用还包括适用于通过通用处理器核1034执行的机器语言的可执行指令1014。该应用还包括由顶点数据定义的图形对象1016。
操作系统1020可以是来自微软公司的Microsoft® Windows®操作系统、使用Linux内核的变体的专有UNIX类操作系统、或开放源UNIX类操作系统。当Direct3D API在使用中时,操作系统1020使用前端着色器编译器1024将以HLSL的任何着色器指令1012编译为较低级着色器语言。编译可以是及时编译,或者应用可以执行共享预编译。在一个实施例中,在3D图形应用1010的编译期间,将高级着色器编译为低级着色器。
用户模式图形驱动器1026可以包含用于将着色器指令1012转化为硬件特定表示的后端着色器编译器1027。当OpenGL API在使用中时,将以GLSL高级语言的着色器指令1012传递给用户模式图形驱动器1026以用于编译。用户模式图形驱动器使用操作系统内核模式功能1028与内核模式图形驱动器1029通信。内核模式图形驱动器1029与图形处理器1032通信以派遣命令和指令。
在本文中描述各种操作或功能程度上,可以将它们描述或定义为硬件电路、软件代码、指令、配置和/或数据。可以将内容体现在硬件逻辑中,或体现为可直接执行的软件(“对象”或“可执行”形式)、源代码、被设计成在图形引擎上执行的高级着色器代码、或用于特定处理器或图形核的指令集中的低级汇编语言代码。本文中描述的实施例的软件内容可以经由其上存储有该内容的制品、或经由操作通信接口以经由通信接口发送数据的方法来提供。
非暂时性机器可读存储介质可以引起机器执行所描述的功能或操作,并且包括存储以可由机器(例如,计算设备、电子系统等)访问的形式的信息的任何机制,诸如可记录/不可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪速存储器设备等)。通信接口包括对接到硬接线、无线、光等介质中的任何以便通信到另一设备的任何机制,诸如存储器总线接口、处理器总线接口、互联网连接、盘控制器等。可以通过提供配置参数或发送信号来配置通信接口以将通信接口准备成提供描述软件内容的数据信号。可以经由发送给通信接口的一个或多个命令或信号来访问该通信接口。
所描述的各种组件可以是用于执行所描述的操作或功能的部件。本文中描述的每个组件包括软件、硬件或这些的组合。可以将所述组件实现为软件模块、硬件模块、专用硬件(例如,应用专用硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入式控制器、硬接线电路等。除了本文中的描述以外,可以对所公开的本发明的实施例和实现进行各种修改而不脱离其范围。因此,本文中的图示和示例应理解为是例证性的而不是限制性意义。应当仅参考随后的权利要求来衡量本发明的范围。
用于执行更高效的图形处理单元(GPU)执行模型的方法和装置
下面描述的本发明的实施例利用现存GPU硬件能力来允许GPU在没有主机介入的情况下执行诸如图形遍历的并行工作负荷。在这些实施例中,GPU动态地管理为其自身工作的其自己的资源、调度并只在必要时通知主机,从而减少在主机处理器和GPU之间需要的通信并改进性能和能量消耗。
图11图示出具有父节点和多个子节点A1-2、B1-4、C1-7的典型图形执行模型。子节点中的某些是“叶”节点,诸如节点1102-1103,其自身不具有任何子节点(即,它们形成图形的边缘)。如本文中使用的,“内核”是定义每个节点中必须完成的工作的GPU工作负荷。图形中的每个节点对应于表示在该节点处必须完成的工作负荷的特定内核。与父节点1101相关联的父内核发起图形处理,并且GPU通过动态地评估与每个节点相关联的条件来遍历树。因此,GPU可以执行父节点->A1->B1或父节点->A2->B4->C5,取决于在执行时已知的一定条件。
在图12中图示出本发明的一个实施例的概览,其示出操作系统(OS)1210、图形驱动器1211和图形处理器单元(GPU)1212。在一个实施例中,由OS 1210响应于由应用(未示出)生成的API调用来执行程序代码1200。在一个实施例中,程序代码1200包括由编译器生成的用于一个或多个父内核1204和子内核1201的二进制和状态信息。驱动器1211然后可以解析二进制和状态信息并如本文中描述的那样(在没有由OS/主机处理器的介入的情况下)管理父和子内核的动态执行。
在一个实施例中,首先在GPU 1212上执行父内核1204,并且父内核1204设置调度器内核1203以用于调度子内核1201的执行(如在图12中的1206处指示的)。例如,父内核1204结合驱动器1211设置GPU中用于执行调度器内核1203所需的状态信息。在一个实施例中,调度器内核1203(潜在地被实现为分离的OpenCL内核)知晓驱动器1211的策略和机制使得其可以正确地设置GPU硬件状态信息。调度器内核1203然后实行下面描述的用于执行子内核1201的各种任务。
在一个实施例中,调度器内核1203利用队列缓冲器1202来调度子内核1201的执行。队列缓冲器1202可以用于存储诸如要由GPU执行的指令/命令的信息,并且可以由内核用来存储关于内核派遣参数、事件相关性和封装的局部变量值的信息。调度器内核1204可以从队列缓冲器1202读取并分析数据以确定其中可以执行子内核1201的顺序。例如,调度器内核1204可以确定条件执行所需的条件和/或子内核1201之间的相关性。其然后可以基于其分析重新排序子内核1201的执行,从而以正确且最高效的顺序执行子内核(例如,以对于执行每下一个子内核所需的命令/指令对队列缓冲器1202编程)。
在一个实施例中,一旦调度器内核1203确定下一个要执行的子内核,调度器内核1203就设置实行GPU 1212中的执行所需的状态,分派必要的GPU资源(例如,执行资源、存储资源等)以及命令GPU 1212执行子内核。调度器内核1203然后针对其余子内核中的每一个执行相同的一组操作直到已经执行了所有的子内核(例如,针对每个子内核确定条件/相关性、分析/重新排序队列缓冲器、分派资源、设置状态变量等)。
虽然在图12中被图示为单个实体,但是实际上可以使用多个队列/缓冲器来实现队列缓冲器1202,其每一个都可由调度器内核1203访问以调度子内核1201。在一个实施例中,一个队列/缓冲器缓冲器可以存储用于每个子内核的GPU命令/指令并且另一队列/缓冲器可以存储关于内核派遣参数、事件相关性和封装的局部变量值的信息。例如,如下面讨论的,在一个实施例中,将需要执行的所有子内核放置在内核队列(例如,在调度器内核内部的数据结构)中并将所有的指令/命令存储在链式批缓冲器(CBB)中。调度器内核1203将评估并处理内核队列中的每个子内核以用于调度,并且然后将会将相关联的指令/命令从CBB(与相关数据一起)发送给GPU。然而应注意的是,本发明的根本原理不限于队列缓冲器1202的任何特定物理布置。
图13图示出根据本发明的一个实施例的跨包括调度器内核1203的各个软件层执行的操作序列。在1301处,应用使用适当的API调用集(例如,在一个实施例中,OpenCL API调用)调用用户模式驱动器。在1302处,用户模式驱动器分派GPU资源并将父内核提交给OS的内核模式驱动器(KMD)。在1303处,OS/KMD提交父内核以用于由GPU执行(例如,将指令和数据放置在GPU命令缓冲器中)。
在1304处,在GPU上执行父内核。如上面提及的,在一个实施例中,父内核设置调度器内核1203用于调度子内核的执行(例如,设置GPU中调度器内核1203的执行所需的状态信息)。在1305处,执行调度内核,并且如果在1306处确定了存在子内核,那么在1307处,调度器内核选择第一个/下一个子内核以用于执行。如上面提及的,调度器内核1203可以在调度子内核用于执行时评估子内核之间的相关性和其它相关信息。一旦调度器内核1203确定了子内核准备好执行(例如,因为其取决于的数据可用),其就在1308处在GPU上设置执行。例如,调度器内核1203可以按需编程GPU状态使得GPU可以执行子内核。在1309处,一旦已经在GPU上设定了状态,就执行子内核。过程然后循环返回通过操作1305-1309以执行下一个子内核,潜在地基于检测到的条件/相关性重新排序子内核以用于执行。当在1306处确定了没有更多的子内核可用时,在1310处,过程终止并将父/主机内核执行的结果返回至主机应用。
图13中示出的流程图图示了,一旦用户模式驱动器对父内核排队,GPU就管理资源并在GPU上调度更多工作而无需任何主机介入。GPU将结果提供给主机并且仅在已经执行了所有子内核之后才退出,从而节约功率并改进性能。
现在将提供与队列缓冲器1202和调度器内核1203的一个实施例相关联的各个细节。然而应注意的是,本发明的根本原理不限于具有这些具体细节的实施例。
在一个实施例中,队列缓冲器1202包括链式批缓冲器(CBB),其包含用于GPU执行的命令/指令。一些GPU支持两个级别的批缓冲器,主要和次要。在一个实施例中,CBB是从主要批缓冲器调用的批缓冲器。由OS管理主要批缓冲器分派和地址,而CBB缓冲器的图形地址在派遣时间时对驱动器已知。因此,可以对GPU内核(例如,本文中描述的父和子内核)编程以修改这些缓冲器。在一个实施例中,CBB被预填充有所需命令。然后可以仅出于性能原因按需更新CBB(或CBB的某些部分)。在一个实施例中,可以重新使用CBB以最小化由缓冲器消耗的存储器的大小。如所提及的,在一个实施例中,调度器内核1203将基于接下来需要执行的内核(例如,下一个子内核)对CBB编程。
在一个实施例中,调度器内核1203被实现为分离的OpenCL内核,其知晓驱动器1211的策略和机制使得其可以用于正确地设置GPU硬件状态信息。在一个实施例中,调度器内核在选择下一个要执行的子内核时执行以下任务:
a. 堆积管理: 在一个实施例中,使用动态状态堆积(DSH)来将比如派遣大小等的“按值”变元以及其它关键状态信息一起传递给内核。调度器内核在GPU中分派空间以用于子内核执行。如所提及的,可以由驱动器1211设置用于调度器内核其自身连同父内核1204的状态信息。
b. 内核队列: 在一个实施例中,调度器内核1202将放入内核队列中需要执行的所有子内核,所述内核队列是内部数据结构。调度器内核将评估并处理该结构中的每个子内核以用于调度。
c. 内核相关性决议: 在OpenCL中使用“事件”来控制内核执行顺序。因此,可以使用多个事件来指定子内核之间的相关性。在一个实施例中,可以仅在所有相关联的事件都“完成”时(即,在决定了所有相关性时)才调度子内核。因此,在一个实施例中,由调度器内核评估事件状态以确定每个子内核是否“准备好”执行。
d. 内核重新排序: 如果子内核“没有准备好”,那么调度器内核将该子内核放置在封锁状态中。调度器内核将继续处理内核队列中的其它子内核以避免死锁。
e. 子内核状态设置: 为了执行内核,必须编程若干GPU状态和命令。该内核将编程CBB缓冲器和DSH堆积。
f. 一旦调度器内核完成了处理,从SBB执行的下一个命令就将执行下一个子内核。
在图14中图示出本发明的一个实施例中实现的示例性程序代码集。如下地突出某些部分以识别本实施例的相关方面。特别地,在1401处,在主机上调用父内核,其后所有内容发生在GPU域中。不需要返回到主机直到执行完成。在1402处,发起子内核的条件执行。例如,仅在执行父内核时才知晓是否执行子内核A1或A2。
在1403处指示事件。如所提及的,可以使用事件来控制子内核的执行顺序。因此,在调度子内核之前,进行关于子内核是否“准备好”的确定。如果没有,对内核重新排序因此首先派遣准备好的内核。
在1404处,使用队列缓冲器来存储排队信息。在一个实施例中,由内核使用队列缓冲器来放入关于派遣参数、事件相关性和封装的局部变量值的信息。稍后由调度器内核使用同一队列缓冲器来确定可以运行哪些内核。
如在1405处指示的,在执行时间时也知晓需要派遣的线程数目(Ndrange)。最终,如在1406处指示的,如果在同一子内核中需要更多工作的话内核可以进行自排队决定。
针对不同实施例的性能结果
以下章节例证了在有主机介入和没有主机介入的情况下使GPU执行这些类型的工作负荷的性能益处。
案例 1: 自排队测试,只要需要就循环。
方法 1: 此处,在循环中主机将如需要的许多内核排队。
Figure 224209DEST_PATH_IMAGE001
Figure 203666DEST_PATH_IMAGE002
方法 2: 此处,主机仅对一个内核排队,并且GPU算出需要执行多少个内核。
Figure 983404DEST_PATH_IMAGE003
图15图示出示出针对方法#1(主机辅助排队)和方法#2(GPU自排队)之间的不同循环计数的差的表格。图13图示出一图表,其图示其中在X轴上绘制循环计数并在Y轴上绘制执行时间的相同数据。显著地,随着循环计数增加,GPU自排队(在没有主机介入的情况下)胜出。
B. 案例 2:
方法 #1: 假设按阶段运行的算法;在每个阶段之后其需要在主机上同步并且决定是否需要下一阶段,并且如果是这样的话对下一阶段进行调度。存在用以解决此问题的两种方法。在方法1中,主机决定是否需要执行随后的内核。在方法2(下面)中,GPU决定是否需要执行随后的(一个或多个)内核。因此,对于方法#1,可以如下实现伪代码:
Figure 690197DEST_PATH_IMAGE004
方法 #2(将该逻辑移动到内核):
Figure 566886DEST_PATH_IMAGE005
在前述说明书中,已经参考本发明的具体示例性实施例描述了本发明。然而,将显而易见的是,可以对其进行各种修改和改变而不脱离如在随附权利要求中阐述的本发明的较宽泛的精神和范围。因此,应以例证性而不是限制性意义看待说明书和附图。
本发明的实施例可以包括上面已经描述的各个步骤。所述步骤可以被体现在机器可执行指令中,其可以用于引起通用或专用处理器执行所述步骤。替换地,可以通过包含用于执行所述步骤的硬接线逻辑的特定的硬件组件,或者通过经编程的计算机组件和定制硬件组件的任何组合执行这些步骤。
如本文中所述,指令可以指代硬件的具体配置(诸如被配置成执行某些操作或具有预定功能性的专用集成电路(ASIC))或存储在体现在非暂时性计算机可读介质中的存储器中的软件指令。因此,可以使用在一个或多个电子设备(例如,末端站、网络元件等)上存储并执行的代码和数据来实现附图中所示的技术。这样的电子设备使用计算机机器可读介质存储并(内部地和/或通过网络与其它电子设备)传送代码和数据,所述计算机机器可读介质诸如非暂时性计算机机器可读存储介质(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储器设备;相变存储器)和暂时性计算机机器可读通信介质(例如,电学、光学、声学或其它形式的传播信号——诸如载波、红外信号、数字信号等)。另外,这样的电子设备通常包括耦合到一个或多个其它组件的一组一个或多个处理器,所述一个或多个其它组件诸如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)以及网络连接。该组处理器与其它组件的耦合通常是通过一个或多个总线和桥(也称为总线控制器)。存储设备和承载网络通信量的信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储设备通常存储代码和/或数据以用于在该电子设备的该组一个或多个处理器上执行。当然,可以使用软件、固件和/或硬件的不同组合来实现本发明的实施例的一个或多个部分。贯穿本详细描述,出于解释的目的,阐述众多具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员来说将会显而易见的是,可以在没有这些具体细节中的某些的情况下实践本发明。在某些情况下,没有在详尽的细节中描述公知的结构和功能以便避免模糊本发明的主题。因此,应依照下面的权利要求来评判本发明的范围和精神。

Claims (32)

1.一种装置,包括:
主机处理器;以及
图形处理器单元(GPU),以响应于由所述主机处理器发布的一个或多个命令而执行分层工作负荷,所述分层工作负荷包括父工作负荷和在逻辑图形结构中互连的多个子工作负荷;以及
调度器内核,其由所述GPU实现以在没有主机介入的情况下调度所述多个子工作负荷的执行,其中,由调度器内核用于调度多个子内核的执行所需的状态信息由GPU首先执行父工作负载来建立,所述调度器内核用以评估对于执行所述子工作负荷所需的条件并基于所评估的条件来确定其中在所述GPU上执行所述子工作负荷的顺序,其中为了评估所述子工作负荷的执行所需的条件,所述调度器内核是要评估与所述子内核中的每一个相关联的一个或多个事件,所述事件指定所述子工作负荷中的每一个之间的相关性并且用于基于指定的相关性确定其中在GPU上执行子工作负荷的顺序;
所述GPU用以以由所述调度器内核确定的顺序执行多个子工作负荷的第一子工作负荷;
调度器内核在执行第一子工作负载之后重新评估条件,以确定是否对GPU上所有剩余子工作负载的执行进行重新排序;以及
在执行所述子工作负荷中的所有之后将父和子工作负荷的结果提供给所述主机处理器。
2.根据权利要求1所述的装置,其中,由所述主机处理器发布的所述一个或多个命令要经由操作系统的内核模式驱动器被传递至所述GPU,所述命令识别所述分层工作负荷。
3.根据权利要求1所述的装置,还包括:
由所述GPU实现的一个或多个队列,用以存储与用于所述子工作负荷中的每一个的派遣参数、事件相关性和/或封装的本地变量值相关的信息,所述调度器内核用以评估存储在队列缓冲器中的所述信息以确定其中要执行所述子工作负荷的顺序。
4.根据权利要求3所述的装置,其中,所述一个或多个队列包括用以存储当处理所述子工作负荷时用于所述GPU执行的命令/指令的队列。
5.根据权利要求4所述的装置,其中,用以存储所述命令/指令的所述队列包括链式批缓冲器(CBB)以从由所述主机处理器实现的主要批缓冲器接收命令/指令。
6.根据权利要求5所述的装置,其中,所述调度器内核根据要由所述GPU执行的下一个子内核来编程所述CBB。
7.根据权利要求1所述的装置,其中,所述调度器内核被实现为能够访问GPU驱动器的策略和机制的分离的OpenCL内核以在执行所述子工作负荷中的每一个时设置所述GPU上的硬件状态。
8.根据权利要求1所述的装置,其中,所述调度器内核是用于分配资源并将状态信息提供给所述GPU以用于每个子工作负荷的执行。
9.根据权利要求1所述的装置,其中,由所述调度器内核评估所述事件的当前状态以确定子工作负荷是否准备好执行。
10.根据权利要求9所述的装置,其中,如果子工作负荷没有准备好执行,那么所述调度器内核将该子工作负荷放置在封锁状态中。
11.一种方法,包括:
由主机处理器向图形处理器单元(GPU)发布一个或多个命令;以及
响应于所述一个或多个命令而在所述GPU上执行分层工作负荷,所述分层工作负荷包括父工作负荷和在逻辑图形结构中互连的多个子工作负荷;
在没有主机介入的情况下调度所述多个子工作负荷的执行,由调度器内核用于调度多个子内核的执行所需的状态信息由GPU首先执行父工作负载来建立,其中,调度包括评估对于执行所述子工作负荷所需的条件并基于所评估的条件来确定其中在所述GPU上执行所述子工作负荷的顺序,其中评估所述子工作负荷的执行所需的条件还包括评估与所述子内核中的每一个相关联的一个或多个事件,所述事件指定所述子工作负荷中的每一个之间的相关性并且用于基于指定的相关性确定其中在GPU上执行子工作负荷的顺序;
以确定的顺序执行多个子工作负荷的第一子工作负荷;
在执行第一子工作负载之后重新评估条件,以确定是否对GPU上所有剩余子工作负载的执行进行重新排序;以及
在执行了所述子工作负荷中的所有之后将父和子工作负荷的结果提供给所述主机处理器。
12.根据权利要求11所述的方法,其中,由所述主机处理器发布的所述一个或多个命令要经由操作系统的内核模式驱动器被传递至所述GPU,所述命令识别所述分层工作负荷。
13.根据权利要求11所述的方法,还包括:
在所述GPU中实现一个或多个队列以存储与用于所述子工作负荷中的每一个的派遣参数、事件相关性和/或封装的本地变量值相关的信息;
评估存储在队列缓冲器中的所述信息以确定其中执行所述子工作负荷的顺序。
14.根据权利要求13所述的方法,其中,所述一个或多个队列包括用以存储当处理所述子工作负荷时用于所述GPU执行的命令/指令的队列。
15.根据权利要求14所述的方法,其中,用以存储所述命令/指令的所述队列包括链式批缓冲器(CBB)以从由所述主机处理器实现的主要批缓冲器接收命令/指令。
16.根据权利要求15所述的方法,还包括:
根据要由所述GPU执行的下一个子内核来编程所述CBB。
17.根据权利要求11所述的方法,还包括:
使用OpenCL内核提供对GPU驱动器的策略和机制的访问以在执行所述子工作负荷中的每一个时设置所述GPU上的硬件状态。
18.根据权利要求11所述的方法,还包括:
分配资源并将状态信息提供给所述GPU以用于每个子工作负荷的执行。
19.根据权利要求11所述的方法,其中,评估所述事件的当前状态以确定子工作负荷是否准备好执行。
20.根据权利要求19所述的方法,其中,如果子工作负荷没有准备好执行,那么将该子工作负荷放置在封锁状态中。
21.一种系统,包括:
输入/输出(I/O)接口,以经由鼠标、键盘和/或其它光标控制设备接收用户输入;
存储器,用于存储指令和数据;
高速缓存器,具有多个高速缓存器级以用于高速缓存所述指令和数据;
主机处理器,用于响应于所述用户输入执行所述指令和数据并用于引起一个或多个命令被发布到图形处理器单元(GPU);
所述GPU用以响应于由所述主机处理器发布的所述命令中的一个或多个而执行分层工作负荷,所述分层工作负荷包括父工作负荷和在逻辑图形结构中互连的多个子工作负荷;以及
调度器内核,其由所述GPU实现以在没有主机介入的情况下调度所述多个子工作负荷的执行,其中,由调度器内核用于调度多个子内核的执行所需的状态信息由GPU首先执行父工作负载来建立,所述调度器内核用以评估对于执行所述子工作负荷所需的条件并基于所评估的条件来确定其中在所述GPU上执行所述子工作负荷的顺序,其中为了评估所述子工作负荷的执行所需的条件,所述调度器内核是要评估与所述子内核中的每一个相关联的一个或多个事件,所述事件指定所述子工作负荷中的每一个之间的相关性并且用于基于指定的相关性确定在GPU上执行子工作负荷的顺序;
所述GPU用以以由所述调度器内核确定的顺序执行多个子工作负荷的第一子工作负荷;
调度器内核在执行第一子工作负载之后重新评估条件,以确定是否对GPU上所有剩余子工作负载的执行进行重新排序;
在执行所述子工作负荷中的所有之后GPU将父和子工作负荷的结果提供给所述主机处理器。
22.一种设备,包括:
用于由主机处理器向图形处理器单元(GPU)发布一个或多个命令的装置;以及
用于响应于所述一个或多个命令而在所述GPU上执行分层工作负荷的装置,所述分层工作负荷包括父工作负荷和在逻辑图形结构中互连的多个子工作负荷;
用于在没有主机介入的情况下调度所述多个子工作负荷的执行的装置,其中由调度器内核用于调度多个子内核的执行所需的状态信息由GPU首先执行父工作负载来建立,其中,用于调度的装置包括用于评估对于执行所述子工作负荷所需的条件的装置并用于基于所评估的条件来确定其中在所述GPU上执行所述子工作负荷的顺序的装置,其中用于评估所述子工作负荷的执行所需的条件还包括用于评估与所述子内核中的每一个相关联的一个或多个事件的装置,所述事件指定所述子工作负荷中的每一个之间的相关性并且用于基于指定的相关性确定在GPU上执行子工作负荷的顺序;
用于执行多个子工作负荷的第一子工作负荷的装置;
用于在执行第一子工作负载之后重新评估条件,以确定是否对GPU上所有剩余子工作负载的执行进行重新排序的装置;以及
用于在执行了所述子工作负荷中的所有之后将父和子工作负荷的结果提供给所述主机处理器的装置。
23.根据权利要求22所述的设备,其中,由所述主机处理器发布的所述一个或多个命令要经由操作系统的内核模式驱动器被传递至所述GPU,所述命令识别所述分层工作负荷。
24.根据权利要求22所述的设备,还包括:
用于在所述GPU中实现一个或多个队列以存储与用于所述子工作负荷中的每一个的派遣参数、事件相关性和/或封装的本地变量值相关的信息的装置;
用于评估存储在队列缓冲器中的所述信息以确定其中执行所述子工作负荷的顺序的装置。
25.根据权利要求24所述的设备,其中,所述一个或多个队列包括用以存储当处理所述子工作负荷时用于所述GPU执行的命令/指令的队列。
26.根据权利要求25所述的设备,其中,用以存储所述命令/指令的所述队列包括链式批缓冲器(CBB)以从由所述主机处理器实现的主要批缓冲器接收命令/指令。
27.根据权利要求26所述的设备,还包括:
用于根据要由所述GPU执行的下一个子内核来编程所述CBB的装置。
28.根据权利要求22所述的设备,还包括:
用于使用OpenCL内核提供对GPU驱动器的策略和机制的访问以在执行所述子工作负荷中的每一个时设置所述GPU上的硬件状态的装置。
29.根据权利要求22所述的设备,还包括:
用于分配资源并将状态信息提供给所述GPU以用于每个子工作负荷的执行的装置。
30.根据权利要求22所述的设备,其中,评估所述事件的当前状态以确定子工作负荷是否准备好执行。
31.根据权利要求30所述的设备,其中,如果子工作负荷没有准备好执行,那么将该子工作负荷放置在封锁状态中。
32.一种计算机可读介质,具有存储在其上的指令,当所述指令被执行时使计算设备执行根据权利要求11-20任一个的方法。
CN201580045602.1A 2014-09-26 2015-09-10 用于高度高效的图形处理单元(gpu)执行模型的方法和装置 Active CN106575431B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/498,220 US10521874B2 (en) 2014-09-26 2014-09-26 Method and apparatus for a highly efficient graphics processing unit (GPU) execution model
US14/498,220 2014-09-26
PCT/US2015/049345 WO2016048671A1 (en) 2014-09-26 2015-09-10 Method and apparatus for a highly efficient graphics processing unit (gpu) execution model

Publications (3)

Publication Number Publication Date
CN106575431A CN106575431A (zh) 2017-04-19
CN106575431A8 CN106575431A8 (zh) 2017-07-11
CN106575431B true CN106575431B (zh) 2020-05-22

Family

ID=55581807

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580045602.1A Active CN106575431B (zh) 2014-09-26 2015-09-10 用于高度高效的图形处理单元(gpu)执行模型的方法和装置

Country Status (4)

Country Link
US (1) US10521874B2 (zh)
EP (1) EP3198551A4 (zh)
CN (1) CN106575431B (zh)
WO (1) WO2016048671A1 (zh)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10068306B2 (en) 2014-12-18 2018-09-04 Intel Corporation Facilitating dynamic pipelining of workload executions on graphics processing units on computing devices
EP3065051A1 (en) * 2015-03-05 2016-09-07 Ingo Josopait Flow control for language-embedded programming in general-purpose computing on graphics processing units
US9654753B1 (en) * 2015-09-01 2017-05-16 Amazon Technologies, Inc. Video stream processing
EP3465546A4 (en) * 2016-06-03 2020-03-04 INTEL Corporation FOLDING REFERENCE LAYER IN A NEURONAL FOLDING NETWORK
US10229470B2 (en) * 2016-08-05 2019-03-12 Intel IP Corporation Mechanism to accelerate graphics workloads in a multi-core computing architecture
US10719760B2 (en) * 2017-04-09 2020-07-21 Intel Corporation Neural network scheduling mechanism
US10672175B2 (en) * 2017-04-17 2020-06-02 Intel Corporation Order independent asynchronous compute and streaming for graphics
US10304154B2 (en) 2017-04-24 2019-05-28 Intel Corporation Coordination and increased utilization of graphics processors during inference
US10580190B2 (en) * 2017-10-20 2020-03-03 Westghats Technologies Private Limited Graph based heterogeneous parallel processing system
US10467722B2 (en) * 2017-11-06 2019-11-05 Basemark Oy Combined rendering and computing resource allocation management system
CN108053361B (zh) * 2017-12-29 2021-08-03 中国科学院半导体研究所 多互连视觉处理器及采用其的图像处理方法
US10719970B2 (en) * 2018-01-08 2020-07-21 Apple Inc. Low latency firmware command selection using a directed acyclic graph
US10475152B1 (en) * 2018-02-14 2019-11-12 Apple Inc. Dependency handling for set-aside of compute control stream commands
US10853147B2 (en) * 2018-02-20 2020-12-01 Microsoft Technology Licensing, Llc Dynamic processor power management
CN108459912B (zh) * 2018-04-10 2021-09-17 郑州云海信息技术有限公司 一种末级缓存管理方法及相关装置
US20220188965A1 (en) * 2019-06-24 2022-06-16 Intel Corporation Apparatus and method for scheduling graphics processing resources
US20210117246A1 (en) 2020-09-25 2021-04-22 Intel Corporation Disaggregated computing for distributed confidential computing environment
CN112801855B (zh) * 2021-04-14 2021-07-20 南京芯瞳半导体技术有限公司 基于图元的渲染任务调度的方法、装置及存储介质
US20230195517A1 (en) * 2021-12-22 2023-06-22 Advanced Micro Devices, Inc. Multi-Cycle Scheduler with Speculative Picking of Micro-Operations

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1538296A (zh) * 2003-02-18 2004-10-20 图形处理单元的多线程内核
CN101802789A (zh) * 2007-04-11 2010-08-11 苹果公司 多处理器上的并行运行时执行

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5119477A (en) * 1989-10-23 1992-06-02 International Business Machines Corporation Memory manager for hierarchical graphic structures
US6618117B2 (en) * 1997-07-12 2003-09-09 Silverbrook Research Pty Ltd Image sensing apparatus including a microcontroller
US7593915B2 (en) * 2003-01-07 2009-09-22 Accenture Global Services Gmbh Customized multi-media services
US20080161914A1 (en) * 2006-12-29 2008-07-03 Advanced Medical Optics, Inc. Pre-stressed haptic for accommodating intraocular lens
US8341611B2 (en) 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US8040699B2 (en) * 2007-07-09 2011-10-18 Active-Semi, Inc. Secondary side constant voltage and constant current controller
US20090160867A1 (en) * 2007-12-19 2009-06-25 Advance Micro Devices, Inc. Autonomous Context Scheduler For Graphics Processing Units
US20100110089A1 (en) * 2008-11-06 2010-05-06 Via Technologies, Inc. Multiple GPU Context Synchronization Using Barrier Type Primitives
US8310492B2 (en) 2009-09-03 2012-11-13 Ati Technologies Ulc Hardware-based scheduling of GPU work
EP2383648B1 (en) 2010-04-28 2020-02-19 Telefonaktiebolaget LM Ericsson (publ) Technique for GPU command scheduling
JP5799227B2 (ja) * 2010-07-15 2015-10-21 パナソニックIpマネジメント株式会社 ズームレンズ系、交換レンズ装置及びカメラシステム
US9519943B2 (en) * 2010-12-07 2016-12-13 Advanced Micro Devices, Inc. Priority-based command execution
US9177742B2 (en) * 2011-10-18 2015-11-03 G & W Electric Company Modular solid dielectric switchgear
US20130124805A1 (en) 2011-11-10 2013-05-16 Advanced Micro Devices, Inc. Apparatus and method for servicing latency-sensitive memory requests
US8842122B2 (en) 2011-12-15 2014-09-23 Qualcomm Incorporated Graphics processing unit with command processor
US8707314B2 (en) 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US20130162661A1 (en) * 2011-12-21 2013-06-27 Nvidia Corporation System and method for long running compute using buffers as timeslices
US8928677B2 (en) * 2012-01-24 2015-01-06 Nvidia Corporation Low latency concurrent computation
US9928109B2 (en) * 2012-05-09 2018-03-27 Nvidia Corporation Method and system for processing nested stream events
DE102012211892B4 (de) * 2012-07-09 2015-03-19 Siemens Aktiengesellschaft Verfahren zur Extraktion eines Datensatzes aus einem medizinischen Bilddatensatz sowie medizinische Bildaufnahmeeinrichtung und Computerprogramm
US8884268B2 (en) * 2012-07-16 2014-11-11 Taiwan Semiconductor Manufacturing Co., Ltd. Diffusion barrier layer for group III nitride on silicon substrate
US8928678B2 (en) 2012-08-02 2015-01-06 Intel Corporation Media workload scheduler
US9633230B2 (en) * 2012-10-11 2017-04-25 Intel Corporation Hardware assist for privilege access violation checks
US10585801B2 (en) * 2012-11-26 2020-03-10 Advanced Micro Devices, Inc. Prefetch kernels on a graphics processing unit
US9799088B2 (en) * 2014-08-21 2017-10-24 Qualcomm Incorporated Render target command reordering in graphics processing
WO2016039774A1 (en) 2014-09-12 2016-03-17 Intel Corporation Facilitating dynamic parallel scheduling of command packets at graphics processing units on computing devices

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1538296A (zh) * 2003-02-18 2004-10-20 图形处理单元的多线程内核
CN101802789A (zh) * 2007-04-11 2010-08-11 苹果公司 多处理器上的并行运行时执行

Also Published As

Publication number Publication date
CN106575431A (zh) 2017-04-19
US20160093012A1 (en) 2016-03-31
CN106575431A8 (zh) 2017-07-11
EP3198551A1 (en) 2017-08-02
EP3198551A4 (en) 2018-03-28
WO2016048671A1 (en) 2016-03-31
US10521874B2 (en) 2019-12-31

Similar Documents

Publication Publication Date Title
CN106575431B (zh) 用于高度高效的图形处理单元(gpu)执行模型的方法和装置
CN107430523B (zh) 图形处理器的高效抢占
US10152764B2 (en) Hardware based free lists for multi-rate shader
CN106575430B (zh) 用于像素哈希的方法和装置
CN106662999B (zh) 用于simd结构化分支的方法和装置
US20170300361A1 (en) Employing out of order queues for better gpu utilization
WO2017039864A1 (en) Compiler optimization to reduce the control flow divergence
CN106575451B (zh) 用于对像素区域进行着色的方法、装置、设备及存储介质
KR20190027367A (ko) 멀티 코어 컴퓨팅 아키텍처에서 그래픽 작업부하를 가속화하기 위한 메커니즘
CN106575440B (zh) 恒定缓冲器大小多采样抗混叠深度压缩
US10789071B2 (en) Dynamic thread splitting having multiple instruction pointers for the same thread
US20200371804A1 (en) Boosting local memory performance in processor graphics
EP3198404A1 (en) Method and apparatus for unstructured control flow for simd execution engine
US20170178278A1 (en) Method and apparatus for updating a shader program based on current state
US9830676B2 (en) Packet processing on graphics processing units using continuous threads
US10339624B2 (en) Reversed polish notation processing elements
US20170178370A1 (en) Rasterization Based on Partial Spans
US10546362B2 (en) Method and apparatus for adaptive pixel hashing for graphics processors
CN107003934B (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
CI01 Correction of invention patent gazette

Correction item: Priority

Correct: 14/498,220 2014.09.26 US

Number: 16

Volume: 33

CI01 Correction of invention patent gazette
CI02 Correction of invention patent application

Correction item: Priority

Correct: 14/498,220 2014.09.26 US

Number: 16

Page: The title page

Volume: 33

CI02 Correction of invention patent application
GR01 Patent grant
GR01 Patent grant