改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法与流程

文档序号:11635243阅读:347来源:国知局
改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法与流程



背景技术:

开放计算语言(opencl)是khronos集团支持的框架(可访问www.khronos.org),用于编写跨包括图形处理单元(gpu)和其他处理器在内的异构平台执行的程序。在opencl和其他相关的异构计算框架中,共享本地存储器(slm)是专用于执行单元(eu)作为本地存储器的3级高速缓存的一部分。slm由一个工作组内的不同工作项目使用和共享。

然而,在某些情况下,存在与slm和系统全局存储器(sgm)之间的存储器写到和读取相关的许多操作。例如,诸如生成直方图的操作具有大量的工作组。在这种情况下,将来自slm的数据写到sgm花费很长时间。

附图说明

从下面给出的具体实施方式和本公开的各种实施例的附图将更充分地理解本公开的实施例,然而,不应将本公开限制于特定实施例,而是仅仅用于说明和理解。

图1示出了根据本公开的一些实施例的具有用于改进共享本地存储器(slm)和系统全局存储器(sgm)之间的存储器访问性能的装置的数据处理系统的框图。

图2示出了根据本公开的一些实施例的具有一个或多个处理器核、集成存储器控制器和集成图形处理器以及具有改进slm和sgm之间的存储器访问性能的装置的处理器的框图。

图3示出了根据本公开的一些实施例的图形处理器的框图,所述图形处理器可以是分立的图形处理单元,或者可以是与多个处理核集成的图形处理器。

图4示出了根据本公开的一些实施例的用于图形处理器的图形处理引擎(gpe)的框图。

图5示出了与执行单元相关的图形处理器的另一实施例的框图。

图6示出了包括在gpe的一些实施例中采用的处理元件的阵列的线程执行逻辑。

图7示出了根据本公开的一些实施例的图形处理器执行单元指令格式的框图。

图8是包括图形流水线、媒体流水线、显示引擎、线程执行逻辑和渲染输出流水线的图形处理器的另一实施例的框图。

图9a示出了根据一些实施例的图形处理器命令格式的框图。

图9b示出了根据本公开的一些实施例的图形处理器命令序列的框图。

图10示出了根据本公开的一些实施例的用于数据处理系统的图形软件架构。

图11示出了传统opencl工作组和存储器结构的架构。

图12示出了根据本公开的一些实施例示出超级工作组、工作组和存储器结构的架构。

图13示出了根据本公开的一些实施例的示出了超级工作组如何将数据写回到系统全局存储器(sgm)的架构。

图14是根据本公开的一些实施例的用于改进共享本地存储器(slm)和sgm之间的存储器访问性能的方法的流程图。

具体实施方式

一些实施例通过形成可以在一些工作组之间共享的新的存储器分区(逻辑或物理)来改进共享本地存储器(slm)和系统全局存储器(sgm)之间的性能。在一些实施例中,在工作组的顶部定义了超级工作组。这里,术语“超级工作组”通常是指对在同一子切片(sub-slice)上的不同工作组进行分组。参考超级slm描述超级工作组。这里,术语“超级slm”通常是指可以由超级工作组下的工作组来逻辑地或物理地共享的逻辑或物理slm。

在一些实施例中,将数据从超级slm写到sgm,而不是从传统slm到sgm。在这样的实施例中,存储器写到操作的数量从高速缓存(例如,具有超级slm和slm的3级高速缓存)到sgm是减少的。减少存储器写到操作的数量可以改进计算性能并提高具有sgm和超级slm的计算系统的功率性能。

在下面的描述中,讨论了许多细节以提供本公开的实施例的更彻底的解释。然而,对于本领域技术人员显而易见的是,可以在没有这些具体细节的情况下实践本公开的实施例。在其他实例中,以框图形式而不是详细地示出了公知的结构和设备,以避免模糊本发明的实施例。

注意,在实施例的相应附图中,用线表示信号。一些线可以更粗,以指示更多的组成信号路径,和/或在一个或多个端部有箭头以指示主信息流方向。这种指示并不是要进行限制。而是,这些线结合一个或多个示例性实施例使用以便于更容易地理解电路或逻辑单元。根据设计需要或偏好所规定的任何表示的信号实际上可以包括可以在任一方向上行进并且可以利用任何合适类型的信号方案实现的一个或多个信号。

在整篇说明书和权利要求书中,术语“连接”是指连接的事物之间的直接电连接,没有任何中间设备。术语“耦合”是指所连接的事物之间的直接电连接或通过一个或多个被动或主动中间设备的间接连接。术语“电路”或“模块”可以指被布置为彼此配合以提供所需功能的一个或多个被动和/或主动组件。术语“信号”可以指至少一个电流信号、电压信号或数据/时钟信号。“一个(a)”、“一(an)”和“该(the)”的含义包括复数引用。“在…中(in)”的含义包括“在…中(in)”和“在…上(on)”。

术语“基本上”、“接近”、“近似”、“靠近”和“大约”一般指的是在目标值的+/-20%内。除非另有规定,使用序数形容词“第一”、“第二”和“第三”等来描述一个共同的对象,只是表示提到了类似对象的不同实例,而不是暗示这样描述的对象必须在给定的序列中,无论是在时间上、空间上、排序方式还是以任何其他方式。

为了实施例的目的,各种电路、模块和逻辑块中的晶体管是包括漏极端子、源极端子、栅极端子和体端子的金属氧化物半导体(mos)晶体管。晶体管还包括三栅极(tir-gate)和finfet晶体管、门极全圆柱晶体管、隧道fet(tfet)、方形线或矩形带状晶体管或实现诸如碳纳米管或自旋电子器件的晶体管功能的其他器件。mosfet对称的源极和漏极端子即相同的端子,这里可互换使用。另一方面,tfet器件具有不对称的源极和漏极端子。本领域技术人员将理解,在不脱离本公开的范围的情况下,可以使用其它晶体管,例如双极结型晶体管-bjtpnp/npn、bicmos、cmos、efet等。

图1示出了根据一些实施例的数据处理系统100的框图。数据处理系统100包括一个或多个处理器102和一个或多个图形处理器108,并且可以是单处理器桌面系统、多处理器工作站系统或具有大量处理器102或处理器核107的服务器系统。在一些实施例中,数据处理系统100是用于移动、手持或嵌入式设备的芯片上系统集成电路(soc)。

数据处理系统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之间共享。寄存器文件106还包括在处理器102中,其可以包括用于存储不同类型数据的不同类型的寄存器(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。一些寄存器可以是通用寄存器,而其他寄存器可以是处理器102的设计所特有的。

在一些实施例中,处理器102耦合到处理器总线110以在处理器102和系统100中的其他组件之间发送数据信号。系统100使用示例性的“集线器”系统架构,包括存储器控制器集线器116和输入输出(i/o)控制器集线器130。存储器控制器集线器116便于存储设备与系统100的其他部件之间的通信,而i/o控制器集线器(ich)130通过本地i/o总线提供到i/o设备的连接。

在一些实施例中,存储器设备120可以是动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、闪速存储器设备或具有适合作为进程存储器的性能的一些其它存储器设备。存储器120可以存储当处理器102执行进程时所使用的数据122和指令121。存储器控制器集线器116还与可选的外部图形处理器112耦合,其可与处理器102中的一个或多个图形处理器108通信以执行图形和媒体操作。

ich130使得外围设备能够通过高速i/o总线连接到存储器120和处理器102。i/o外围设备包括音频控制器146、固件接口128、无线收发器126(例如,wi-fi,蓝牙)、数据存储设备124(例如,硬盘驱动器、闪存等),以及用于将旧版(例如,个人系统2(ps/2))设备耦合到系统的旧版i/o控制器。一个或多个通用串行总线(usb)控制器142连接诸如键盘和鼠标144组合的输入设备。网络控制器134还可以耦合到ich130。在一些实施例中,高性能网络控制器(未示出)耦合到处理器总线110。

图2示出了具有一个或多个处理器核202a-n、集成存储器控制器214和集成图形处理器208的处理器200的实施例的框图。具有与任何其他图的元件相同的附图标记(或名称)的图2的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

处理器200可以包括多达并包括由虚线框所表示的附加核202n的附加核。核202a-n中的每一个包括一个或多个内部高速缓存单元204a-n。在一些实施例中,每个核还可以访问一个或多个共享高速缓存单元206。

在一些实施例中,内部高速缓存单元204a-n和共享高速缓存单元106表示处理器200内的高速缓存存储器层级。高速缓存存储器层级可以包括每个核内的指令和数据高速缓存中的至少一个级别以及共享中间级别高速缓存的一个或多个级别,例如2级(l2)、3级(l3)、4级(l4)或其他级别的高速缓存,其中外部存储器之前的最高级别的高速缓存被分类为最后一级高速缓存(llc)。在一些实施例中,高速缓存一致性逻辑维护各种高速缓存单元106和204a-n之间的一致性。

在一些实施例中,处理器200还可以包括一组一个或多个总线控制器单元216和系统代理210。一个或多个总线控制器单元管理一组外围总线,例如一个或多个外围组件互连总线(例如,pci,pciexpress)。在一些实施例中,系统代理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互连的多个品种中的至少一个,包括有助于各种处理器组件之间的通信的封装上i/o互连和诸如edram模块之类的高性能嵌入式存储器模块218。在一些实施例中,核202-n和图形处理器208中的每一个使用嵌入式存储器模块218作为共享的最后一级高速缓存。

在一些实施例中,核202a-n是执行相同指令集架构的同构核。在另一个实施例中,核202a-n在指令集架构(isa)方面是异构的,其中核202a-n中的一个或多个执行第一指令集,而其他核中的至少一个执行第一指令集的子集或不同的指令集。

在一些实施例中,处理器200可以是使用若干工艺技术中的任一种的一个或多个衬底的一部分或实现在其上,例如互补金属氧化物半导体(cmos)、双极结/互补金属氧化物半导体(bicmos)或n型金属氧化物半导体逻辑(nmos)。此外,处理器200可以在一个或多个芯片上实现或实现作为除了其它组件之外具有所示组件的芯片上系统(soc)集成电路。

图3示出了可以是分立图形处理单元或者可以是与多个处理核集成的图形处理器的图形处理器300的一个实施例的框图。需要指出的是,具有与任何其他图的元件相同的附图标记(或名称)的图3的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

在一些实施例中,图形处理器经由存储器映射的i/o接口传送到图形处理器上的寄存器并经由命令放置到处理器存储器中。在一些实施例中,图形处理器300包括访问存储器的存储器接口314。在一些实施例中,存储器接口314可以是用于本地存储器、一个或多个内部高速缓存、一个或多个共享外部高速缓存和/或系统存储器的接口。

在一些实施例中,图形处理器300还包括显示控制器302,以将显示输出数据驱动到显示设备320。在一些实施例中,显示控制器302包括用于一个或多个覆盖平面的硬件,用于多层视频或用户界面元素的显示和复合。在一些实施例中,图形处理器300包括视频编解码器引擎306,用于对到一个或多个媒体编码格式的媒体进行编码、解码或转码,用于对来自一个或多个媒体编码格式的媒体进行编码、解码或转码,或者对一个或多个媒体编码格式之间的媒体进行编码、解码或转码,包括但不限于运动图像专家组(mpeg)格式,例如mpeg-2,诸如h.264/mpeg-4avc等高级视频编码(avc)格式,以及电影和电视工程师协会(smpte)421m/vc-1以及联合图像专家组(jpeg)格式,如jpeg和运动jpeg(mjpeg)格式。

在一些实施例中,图形处理器300包括块图像传输(blit)引擎304,以执行包括例如位边界块传输的二维(2d)光栅化器操作。在一些实施例中,使用图形处理引擎(gpe)310的一个或多个组件来执行2d图形操作。在一些实施例中,gpe310是用于执行图形操作的计算引擎,包括三维(3d)图形操作和媒体操作等。

在一些实施例中,gpe310包括用于执行3d操作的3d流水线312,例如,使用作用于3d图元形状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。在一些实施例中,3d流水线312包括在元件内执行各种任务和/或产生用于3d/媒体子系统315的执行线程的可编程和固定功能元件。尽管3d流水线312可用于执行媒体操作,但是gpe310的实施例还包括专门用于执行诸如视频后处理和图像增强之类的媒体操作的媒体流水线316。

在一些实施例中,媒体流水线316包括固定功能或可编程逻辑单元,以执行一个或多个专门的媒体操作,例如视频解码加速、视频去隔行和视频编码加速来代替或代表视频编解码器引擎306。在一些实施例中,媒体流水线316还包括线程产生单元,以产生用于在3d/媒体子系统315上执行的线程。产生的线程执行针对包括在3d/媒体子系统315中的一个或多个图形执行单元上的媒体操作的计算。

在一些实施例中,3d/媒体子系统315包括用于执行由3d流水线312和媒体流水线316产生的线程的逻辑。在一些实施例中,流水线将线程执行请求发送到3d/媒体子系统315,其包括用于仲裁和调度对可用的线程执行资源的各种请求的线程调度逻辑。执行资源包括处理3d和媒体线程的图形执行单元的阵列。在一些实施例中,3d/媒体子系统315包括用于线程指令和数据的一个或多个内部高速缓存。在一些实施例中,子系统还包括共享存储器,包括寄存器和可寻址存储器,以在线程之间共享数据并存储输出数据。

图4示出了用于图形处理器的gpe410的实施例的框图。需要指出的是,具有与任何其他图的元件相同的附图标记(或名称)的图4的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

在一些实施例中,gpe410是参考图3描述的gpe310的版本。参考图4,在一些实施例中,gpe410包括3d流水线412和媒体流水线416,其中每个流水线可以与图3的3d流水线312和媒体流水线316的实施方式不同或类似。

返回图4,在一些实施例中,gpe410与命令流分送器403耦合,命令流分送器403将命令流提供给gpe3d和媒体流水线412、416。在一些实施例中,命令流分送器403耦合到存储器,存储器可以是系统存储器或内部高速缓存存储器和共享高速缓存存储器中的一个或多个。在一些实施例中,命令流分送器403从存储器接收命令并将命令发送到3d流水线412和/或媒体流水线416。3d流水线和媒体流水线通过经由相应流水线内的逻辑执行操作或者通过调度一个或多个执行线程到执行单元阵列414来处理命令。在一些实施例中,执行单元阵列414是可扩展的,使得阵列基于gpe410的目标功率和性能水平而包括可变数量的执行单元。

在一些实施例中,采样引擎430与存储器(例如,高速缓存存储器或系统存储器)和执行单元阵列414耦合。在一些实施例中,采样引擎430提供用于可扩展执行单元阵列414的存储器访问机制,其允许执行阵列414从存储器读取图形和媒体数据。在一些实施例中,采样引擎430包括执行用于媒体的专门的图像采样操作的逻辑。

在一些实施例中,采样引擎430中的专用媒体采样逻辑包括去噪声/去隔行模块432、运动估计模块434和图像缩放和滤波模块436。在一些实施例中,去噪声/去隔行模块432包括在解码的视频数据上执行去噪声或去隔行算法中的一个或多个的逻辑。去隔行逻辑将隔行视频内容的交替字段组合成视频的单个帧。去噪声逻辑从视频和图像数据中减少或消除数据噪声。在一些实施例中,去噪逻辑和去隔行逻辑是运动自适应的,并且使用基于视频数据中检测到的运动量的空间或时间滤波。在一些实施例中,去噪声/去隔行模块432包括专用运动检测逻辑(例如,在运动估计引擎434内)。

在一些实施例中,运动估计引擎434通过执行诸如运动矢量估计和对视频数据的预测的视频加速功能来提供用于视频操作的硬件加速。运动估计引擎确定描述连续视频帧之间的图像数据的变换的运动矢量。在一些实施例中,图形处理器媒体编解码器使用视频运动估计引擎434对宏块级别的视频执行操作,否则在使用通用处理器执行的情况下可能是计算密集型的。在一些实施例中,运动估计引擎434通常可用于图形处理器组件以帮助视频解码和帮助对于视频数据内的运动的方向或幅度敏感或适应的处理功能。

在一些实施例中,图像缩放和滤波模块436执行图像处理操作以增强所生成的图像和视频的视觉质量。在一些实施例中,缩放和滤波模块436在将数据提供给执行单元阵列414之前,在采样操作期间处理图像和视频数据。

在一些实施例中,gpe410包括数据端口444,其提供用于图形子系统访问存储器的附加机制。在一些实施例中,数据端口444便于包括渲染目标写到、恒定缓冲器读取、暂存存储器空间读取/写到和介质表面访问的操作的存储器访问。在一些实施例中,数据端口444包括用于高速缓存对存储器的访问的高速缓存存储器空间。高速缓存存储器可以是单个数据高速缓存,也可以分为用于经由数据端口访问存储器的多个子系统的多个高速缓存(例如,渲染缓冲器高速缓存、恒定缓冲器高速缓存等)。在一些实施例中,在执行单元阵列414中的执行单元上执行的线程通过经由耦合gpe410的每个子系统的数据分配互连交换消息来与数据端口通信。

图5示出了与执行单元相关的图形处理器的另一实施例的框图500。需要指出的是,具有与任何其他图形的元件相同的附图标记(或名称)的图5的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

在一些实施例中,图形处理器包括环形互连502、流水线前端504、媒体引擎537和图形核580a-n。在一些实施例中,环形互连502将图形处理器耦合到其他处理单元,包括其他图形处理器或一个或多个通用处理器核。在一些实施例中,图形处理器是集成在多核处理系统内的许多处理器之一。

在一些实施例中,图形处理器经由环形互连502接收批次的命令。输入命令由流水线前端504中的命令流分送器503解释。图形处理器包括可扩展的执行逻辑,用于经由图形核580a-n执行3d几何处理和媒体处理。对于3d几何处理命令,命令流分送器503将命令提供给几何流水线536。对于至少一些媒体处理命令,命令流分送器503将命令提供给与媒体引擎537耦合的视频前端534。在一些实施例中,媒体引擎537包括用于视频和图像后处理的视频质量引擎(vqe)530和用于提供硬件加速的媒体数据编码和解码的多格式编码/解码(mfx)533引擎。在一些实施例中,几何流水线536和媒体引擎537各自生成用于由至少一个图形核580a提供的线程执行资源的执行线程。

图形处理器包括以模块化核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。需要指出的是,具有与任何其他图形的元件相同的附图标记(或名称)的图6的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

在一些实施例中,线程执行逻辑600包括像素着色器602、线程计划器604、指令高速缓存606、包括多个执行单元608a-n的可扩展执行单元阵列、采样器610、数据高速缓存612和数据端口614。在一些实施例中,所包括的组件通过连接到每个组件的互连结构互连。在一些实施例中,线程执行逻辑600包括通过指令高速缓存606、数据端口614、采样器610和执行单元阵列608a-n中的一个或多个到存储器诸如系统存储器或高速缓存存储器的一个或多个连接。在一些实施例中,每个执行单元(例如608a)是能够执行多个同时线程并且针对每个线程并行处理多个数据元素的单独矢量处理器。在一些实施例中,执行单元阵列608a-n包括任意数量的各个执行单元。

在一些实施例中,执行单元阵列608a-n主要用于执行“着色器”程序。在一些实施例中,阵列608a-n中的执行单元执行包括对许多标准3d图形着色器指令的本地支持的指令集,使得来自图形库(例如,direct3d和opengl)的着色器程序以最小的变换被执行。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点着色器)、像素处理(例如,像素着色器、片段着色器)和通用处理(例如,计算和媒体着色器)。

执行单元阵列608a-n中的每个执行单元对数据元素的阵列进行操作。数据元素的数量是“执行大小”或指令的通道数。执行通道是用于指令内的数据元素访问、屏蔽和流控制的执行的逻辑单元。通道的数量可以独立于特定图形处理器的物理算术逻辑单元(alu)或浮点单位(fpu)的数量。在一些实施例中,执行单元608a-n支持整数和浮点数据类型。

执行单元指令集包括单指令多数据(simd)指令。各种数据元素可以作为封装的数据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,当在256位宽的矢量上操作时,矢量的256位被存储在寄存器中,并且执行单元对作为四个单独的64位封装的数据元素(四字(qw))大小数据元素)、八个单独的32位封装的数据元素(双字(dw)大小数据元素)、十六个单独的16位封装的数据元素(字(w)大小数据元素)或三十二个单独的8位数据元素(字节(b)大小数据元素)的矢量进行操作。然而,不同的矢量宽度和寄存器大小是可能的。

线程执行逻辑600中包括一个或多个内部指令高速缓存(例如606)以高速缓存用于执行单元的线程指令。在一些实施例中,包括一个或多个数据高速缓存(例如612)以在线程执行期间高速缓存线程数据。在一些实施例中,采样器610被包括以提供3d操作的纹理采样和用于媒体操作的媒体采样。在一些实施例中,采样器610包括专门的纹理或媒体采样功能,以便在将采样数据提供给执行单元之前,在采样过程期间处理纹理或媒体数据。

在执行期间,图形和媒体流水线通过线程产生和调度逻辑向线程执行逻辑600发送线程发起请求。在一些实施例中,线程执行逻辑600包括本地线程计划器604,其仲裁来自图形和媒体流水线的线程发起请求,并在一个或多个执行单元608a-n上实例化所请求的线程。例如,几何流水线(例如,图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定义执行单元要执行的操作。执行单元在每个操作数的多个数据元素之间并行执行每条指令。例如,响应于添加指令,执行单元在表示纹理元素或图片元素的每个颜色通道之间执行同时添加操作。默认情况下,执行单元在操作数的所有数据通道上执行每条指令。在一些实施例中,指令控制字段712使得能够控制某些执行选项,诸如通道选择(例如,预测)和数据通道顺序(例如,重排)。对于128位指令710,执行大小字段716限制将并行执行的数据通道的数量。在一些实施例中,执行大小字段716不可用于64位压缩指令格式730。

一些执行单元指令具有多达三个操作数,包括两个源(src)操作数、src0722、srcl722和一个目的地718。在一些实施例中,执行单元支持双目的地指令,其中隐含目的地之一。数据操作指令可以具有第三源操作数(例如,src2724),其中指令操作码jj12确定源操作数的数量。指令的最后的源操作数可以是与指令一起传递的即时(例如硬编码)值。

在一些实施例中,基于操作码位字段来分组指令以简化操作码解码740。对于8位操作码,位4、5和6允许执行单元确定操作码的类型。所示的精确操作码分组仅仅是示例。在一些实施例中,移动和逻辑操作码组742包括数据移动和逻辑指令(例如,移动(mov)、比较(cmp))。在一些实施例中,移动和逻辑组742共享五个最高有效位(msb),其中移动(mov)指令为0000xxxxb(例如,0x0x)的形式,逻辑指令为000lxxxxb(例如,0x01)的形式。流控制指令组744(例如,呼叫、跳转(jmp)等)包括以0010xxxxb(例如,0x20)的形式的指令。杂项指令组746包括指令的混合,包括以001lxxxxb(例如,0x30)的形式的同步指令(例如,等待、发送)。并行数学指令组748包括0100xxxxb(例如,0x40)形式的逐组件算术指令(例如,加、乘(mul))。并行数学组748在数据通道上并行执行算术运算。矢量数学组750包括形式为010lxxxxb(例如,0x50)的算术指令(例如,dp4)。矢量数学组对矢量操作数执行诸如点积计算之类的算术。

图8是包括图形流水线820、媒体流水线830、显示引擎840、线程执行逻辑850和渲染输出流水线870的图形处理器的另一实施例的框图800。应当指出的是,具有与任何其它图形的元件相同的附图标记(或名称)的图8的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

在一些实施例中,图形处理器是包括一个或多个通用处理核的多核处理系统内的图形处理器。图形处理器由对一个或多个控制寄存器(未示出)的寄存器写到或通过经由环形互连802发给图形处理器的命令来控制。在一些实施例中,环形互连802将图形处理器耦合到其他处理组件,例如其他图形处理器或通用处理器。来自环形互连802的命令由命令流分送器803解释,命令流分送器803向图形流水线820或媒体流水线830的各个组件提供指令。

在一些实施例中,命令流分送器803指示从存储器读取顶点数据并执行由命令流分送器803提供的顶点处理命令的顶点提取器805组件的操作。在一些实施例中,顶点提取器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对整个几何对象进行操作,而不是如图形流水线的先前阶段中的顶点或顶点的修补。如果分割被禁用,则几何着色器819接收来自顶点着色器807的输入。在一些实施例中,如果分割单元被禁用,则几何着色器819可由几何着色器程序来编程以执行几何分割。

在光栅化之前,顶点数据由剪辑器829处理,剪辑器829是具有剪辑和几何着色器功能的固定功能剪辑器或可编程剪辑器。在一些实施例中,渲染输出流水线870中的光栅化器873调度像素着色器将几何对象转换成它们的每像素表示。在一些实施例中,像素着色器逻辑包括在线程执行逻辑850中。

图形引擎具有互连总线、互连结构或允许在图形引擎的主要组件之间传送数据和消息的某些其他互连机制。在一些实施例中,执行单元852a、852b和相关联的高速缓存851、纹理和媒体采样器854以及纹理/采样器高速缓存858经由数据端口856互连以执行存储器访问并与图形引擎的渲染输出流水线组件进行通信。在一些实施例中,采样器854、高速缓存851、885和执行单元852a、852b各自具有单独的存储器访问路径。

在一些实施例中,渲染输出流水线870包含光栅化器和深度测试组件873,其将基于顶点的对象转换成其相关联的基于像素的表示。在一些实施例中,光栅化器逻辑包括用于执行固定功能三角形和线光栅化的加窗器/遮罩单元。在一个实施例中,关联的呈现和深度缓冲器高速缓存878、879也是可用的。在一些实施例中,像素操作部件877对数据执行基于像素的操作,尽管在某些情况下,与2d操作(例如,利用混合的位块图像传输)相关联的像素操作由2d引擎841执行,或者在显示时通过显示控制器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调用转换为可由图形处理器处理的命令。在各种实施例中,可对由khronosgroup支持的开放图形库(opengl)和开放式计算语言(opencl)、来自微软公司的direct3d库、或者在一个实施例中为opengl和d3d提供支持。也可以对开源计算机视觉库(opencv)提供支持。如果可以从未来api的流水线到图形处理器的流水线进行映射,则还将支持具有兼容的3d流水线的未来api。

图9a示出了根据一些实施例的图形处理器命令格式900的框图,并且图9b示出了根据本公开的一些实施例的图形处理器命令序列910的框图。需要指出的是,具有与任何其他图形的元件相同的附图标记(或名称)的9a-b的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

图9a中的实线框示出了通常包括在图形命令中的组件,而虚线包括可选的或者仅包括在图形命令的子集中的组件。图9a的示例图形处理器命令格式900包括用于识别命令的目标客户端902、命令操作代码(操作码)904以及用于该命令的相关数据906的数据字段。在一些实施例中,子操作码905和命令大小908也包括在一些命令中。

在一些实施例中,客户端902指定处理命令数据的图形设备的客户端单元。在一些实施例中,图形处理器命令解析器检查每个命令的客户端字段以调节命令的进一步处理并将命令数据路由到适当的客户端单元。在一些实施例中,图形处理器客户端单元包括存储器接口单元、渲染单元、2d单元、3d单元和媒体单元。每个客户端单元都具有处理命令的相应处理流水线。一旦命令被客户端单元接收,客户端单元读取操作码904,如果存在,则子操作码905来确定要执行的操作。客户端单元使用命令的数据906字段中的信息来执行命令。对于某些命令,显式命令大小908被预期来指定命令的大小。在一些实施例中,命令解析器基于命令操作码自动确定至少一些命令的大小。在一些实施例中,命令通过双字的倍数对齐。

在一些实施例中,图9b的流程图示出了样本命令序列910。虽然流程图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状态设置命令。这些命令的值至少部分地基于使用中的特定3dapi来确定。在一些实施例中,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入队,则媒体流水线924通过执行934命令或等效的执行事件(例如,寄存器写)而触发。然后可以通过由3d流水线922或媒体流水线924提供的操作对来自媒体流水线924的输出进行后处理。在一些实施例中,以与媒体操作类似的方式来配置和执行gpgpu操作。

图10示出了根据本公开的一些实施例的用于数据处理系统的图形软件架构1000。需要指出的是,具有与任何其它图形的元件相同的附图标记(或名称)的图10那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

在一些实施例中,软件架构包括3d图形应用程序1010、操作系统1020和至少一个处理器1030。在一些实施例中,处理器1030包括图形处理器1032和一个或多个通用处理器核1034。在一些实施例中,图形应用1010和操作系统1020各自在数据处理系统的系统存储器1050中执行。

在一些实施例中,3d图形应用1010包含一个或多个着色器程序,包括着色器指令1012。着色器语言指令可以是高级着色器语言,例如,高级着色器语言(hlsl)或opengl着色器语言(glsl)。该应用还包括适于由通用处理器核1034执行的机器语言的可执行指令1014。该应用还包括由顶点数据定义的图形对象1016。

在一些实施例中,操作系统1020可以是来自微软公司的操作系统、专有的类unix操作系统,或者使用linux内核变体的类unix的开源操作系统。当direct3dapi被使用时,操作系统1020使用前端着色器编译器1024将hlsl中的任何着色器指令1012编译成较低级的着色器语言。编译可能是即时编译或应用可以执行共享预编译。在一个实施例中,在3d图形应用1010的编译期间将高级着色器编译成低级着色器。

在一些实施例中,用户模式图形驱动器1026可以包含用于将着色器指令1012转换为硬件特定表示的后端着色器编译器1027。当openglapi被使用时,glsl高级语言中的着色器指令1012被传递给用户模式图形驱动器1026进行编译。在一些实施例中,用户模式图形驱动器1026使用操作系统内核模式功能1028与内核模式图形驱动器1029进行通信。在一些实施例中,内核模式图形驱动程序1029与图形处理器1032通信以调度命令和指令。

在本文描述的各种操作或功能的程度上,它们可被描述或定义为硬件电路、软件代码、指令、配置和/或数据。内容可以以硬件逻辑或直接可执行软件(“对象”或“可执行”形式)、源代码、设计用于在图形引擎上执行的高级着色器代码或指令集中的用于特定处理器或图形核的低级汇编语言代码来体现。本文描述的实施例的软件内容可以经由其上存储有内容的制品提供,或者经由操作通信接口以经由通信接口发送数据的方法来提供。

非暂时的机器可读存储介质可以使机器执行所描述的功能或操作,并且包括以机器(例如,计算设备、电子系统等)可访问的形式存储信息的任何机制,诸如可记录/不可记录介质(例如,只读存储器(rom),随机存取存储器(ram)、磁盘存储介质、光存储介质,闪存设备等)。通信接口包括与硬连线、无线、光学等介质中的任何一种介质通信到另一设备(例如存储器总线接口、处理器总线接口、因特网连接、磁盘控制器等)的任何机制。通信接口通过提供配置参数或发送信号来配置以准备通信接口来提供描述软件内容的数据信号。可以通过发送到通信接口的一个或多个命令或信号来访问通信接口。

所描述的各种组件可以是用于执行所描述的操作或功能的手段。本文描述的每个组件包括软件、硬件或其组合。这些组件可以实现为软件模块、硬件模块、专用硬件(例如,应用特定的硬件、专用集成电路(asic)、数字信号处理器(dsp)等)、嵌入式控制器、硬连线电路等。除了本文所描述的内容之外,在不脱离本发明的范围的情况下,可以对所公开的实施例和实现进行各种修改。因此,这里的说明和示例应当被解释为说明性的而不是限制性的。本公开的范围应仅通过参考以下权利要求来衡量。

图11示出了传统opencl工作组和存储器结构的架构1100。架构1100是简化的架构,显示了系统全局存储器(sgm)1101和共享存储器1102-1到1103-n。sgm1101可以是由通用处理单元管理的存储器。这里,每个共享存储器与具有一个或多个工作项的单个工作组相关联。

在传统的opencl存储器结构中,工作组共享相应的共享本地存储器(slm)。工作组由定义数量的工作项组成。这些工作项由执行单位执行。工作组内的存储器空间是slm。架构1100分别示出“n”个工作组(例如,工作组1102-1至1102-n)和对应的“n”个slm(例如,slm206-1至206-n)。

在架构1100中,每个工作项(例如,1101-1a至1101-1n)的计算结果被收集并存储在slm(例如,206-1)中,然后在工作组中的一个或多个工作项(例如,1102-1)负责通过总线(例如,由联合电子设备工程委员会(jedec)固态技术协会定义的双数据速率(ddr)兼容总线)将数据从slm(例如,206-1)写到全局系统存储器(sgm)218。由于存在许多原子操作,因此从slm(例如,1102-1)到sgm1101的写到可能需要很长时间。特别是当存在多处理器或多个器件时,原子操作的性能损失更差。

图12示出了根据本公开的一些实施例的示出超级工作组、工作组和存储器结构的架构1200。需要指出的是,具有与任何其他图形的元件相同的附图标记(或名称)的图12的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

与图11的传统架构1100相比,架构1200定义一个或多个超级工作组,以及一个或多个超级共享本地存储器(超级slm)。这里,超级slm由1202-1至1201-n指示,其中“n”是整数。在一些实施例中,超级slm是存储器的一部分(例如,3级高速缓存875)。在其它实施例中,超级slm可以是单独的存储器。这里,示出了'n'个超级工作组(即,超级工作组1201-1至120l-n)。传统工作组并行执行或分开执行。在一些实施例中,超级组1201-1至1201-n也并行执行或分开执行。在一些实施例中,超级slm是可以由相同子切片中的不同工作组共享的存储器空间。

在一些实施例中,高速缓存存储器875具有被表征为与多个eu(例如,eu414/608)共享的slm(例如,slm206-1)的部分。eu中的至少一个将在一个子切片的工作组上运行。术语“子切片”这里通常是指图形处理单元(gpu)的最小功能构建块,其包含eu(例如,着色器)以及高速缓存和纹理/数据/媒体采样器。在一个示例中,每个eu依次由两个单指令多数据(simd)4宽矢量组成。例如,单个切片可以包含每个子切片具有10个eu的两个子切片。在另一示例中,单个切片包含每个子切片具有8个eu的三个子切片。

这里,slm(例如,206-1)在工作组1102-1内共享。在一些实施例中,超级slm在逻辑上与传统slm分离,但是可以是相同高速缓存的物理部分。例如,高速缓存875被划分成单独的超级slm和slm。在一些实施例中,超级slm可以是与高速缓存875不同和/或分离的单独存储器。在一些实施例中,超级slm是先进先出(fifo)缓冲器。

根据一些实施例,与由定义数量的工作项组成的传统工作组不同,超级工作组(例如,1202-1)包括动态数量的工作组。这里,术语“动态数量”通常是指不是固定数的数字。例如,开发人员可以在实施期间在工作组中设置固定数量的工作项。一旦设置了工作项的数量,每个工作组都包含相同数量的工作项。在一些实施例中,可以不手动设置超级工作组中的工作组的数量。例如,工作组的数量可以由子切片中的多个工作组来确定。在一些实施例中,每个超级工作组中的工作组的数量可以不同。在一些实施例中,每个超级工作组中的工作组数量相同。

在一些实施例中,超级slm可由一个超级工作组内的不同工作组共享。例如,根据一些实施例,slm可以被工作组共享,并且工作组可以是超级工作组的一部分。在一些实施例中,在超级工作组中的每个工作组完成其操作之后,该工作组将其数据写到到其超级slm。例如,当工作组1102-3完成其任务(即其工作项完成其分配的任务)时,它将其数据写到到超级slm1202-1(如实心粗箭头所示)。

由于超级工作组具有动态数量的工作组,所以当参照图13所述确定/生成最后的工作组时,将数据写到到sgm218。返回参考图12,例如,当超级工作组1201-1中的最后的工作组被创建时,超级slm1202-1将其内容写到sgm218。这样可以在处理器102和sgm218之间的接口上节省多个事务,因为每个slm不写到到sgm218。

例如,通过定义超级slm,针对架构100观察到性能提高了10倍以上。这里,术语“提高”通常是指与从l3高速缓存(例如,206/875)到sgm218的写相比,从l3高速缓存到l3高速缓存执行写操作有多快。

图13示出了根据本公开的一些实施例的架构1300,示出了超级工作组如何将数据写回到sgm218。需要指出的是,具有与任何其他图形的元件相同的附图标记(或名称)的图13的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

在一些实施例中,一旦该超级工作组中的所有工作组完成其计算,则由调度程序1302在超级工作组(例如,1201-1)中生成新工作组1301(此处也称为最后的工作组)。在一些实施例中,计划器1302在作为该超级工作组中的最后的工作组的超级工作组中生成新线程(在opencl中称为工作组)。在一些实施例中,计划器1302是gpu108中的组件。在一些实施例中,计划器1302知道子分片中有多少个工作组以及工作组何时完成其计算/操作。在一些实施例中,当计划器1302确定每个工作组已经完成其计算操作时,计划器1302创建新的工作组/线程以将数据从超级slm1201-1写到sgm218。在一些实施例中,最后的工作组1301负责将数据从超级slm1201-1写回sgm218。

图14是根据本公开的一些实施例的用于改进slm和sgm218之间的存储器访问性能的方法的流程图1400。需要指出的是,具有与任何其他图形的元件相同的附图标记(或名称)的图14的那些元件可以以与所描述的类似的任何方式操作或起作用,但不限于此。

尽管参照图14的流程图1400中的块以特定顺序示出,但是可以修改动作的顺序。因此,所示实施例可以以不同的顺序执行,并且一些动作/块可以并行执行。图14中列出的块和/或操作中的一些根据某些实施例是可选的。所呈现的块的编号是为了清楚起见,并不意图规定必须发生各种块的操作的顺序。此外,来自各种流程的操作可以以各种组合来使用。

在框1401,将两个或更多个工作组分组在一起以形成超级工作组。在一些实施例中,至少一个工作组(例如,1102-1)包括多个工作项(例如,1102-1a至1102-1n)。根据一些实施例,每个工作项负责一个计算/操作动作。例如,工作项中的一个可以执行求和指令以对数求和。

在框1402,将存储器的一部分(例如,3级高速缓存875)(物理或逻辑地)划分成一个或多个超级slm存储器,例如超级slm1202-1至1202-n,其中“n”是整数。在超级工作组(例如,1201-1)内共享的存储器空间形成一个或多个超级slm的至少一个超级slm(例如,1202-1)。在一些实施例中,来自两个或更多个工作组当中的工作组内的存储器空间是slm。

例如,slm206-1是3级高速缓存875中的共享存储器,并且slm206-1在工作组1102中包括多个工作项(例如,1102-1)。在一些实施例中,slm与超级slm分开。在一些实施例中,slm是超级slm的子集,如参照图12和图13所示。

参考图14,在一些实施例中,在创建子切片中的最后的工作组之后,由超级工作组(例如,1201-1a)将数据写到全局存储器(例如,sgm218)。这样,在框1403,当超级工作组中的所有其他工作组完成其各自的操作时,针对超级工作组(例如,1201-1)创建子切片中的最后的工作组(例如,1301)。例如,当超级工作组1201-1中的所有工作组1102-1至1102-n完成其任务时,最后的工作组1301由计划器1302生成。在框1404,在一些实施例中,最后的工作组1301中的工作项将数据从超级slm写到sgm218。

例如,最后的工作组1301将数据从超级slm1202-1写到sgm218。使用图14的这个框架,数据从超级slm(例如,1202-1至1202-n)写到sgm218,而传统上从slm写到全局存储器。因此,根据一些实施例,减少了从3级高速缓存875到sgm218的存储器写到操作,并且整体计算效率得到改进。

下面描述的是用于生成每个元素的和值的伪代码,其需要获得每个项目的数量,然后将它们求和。

对于每个超级工作组,

在同一子切片中创建新线程;

新线程将来自超级slm中的数目与sgm218中的数目相加,其中sgm218中的数目将成为直方图中的元素之一。

利用新架构1200/1300,与传统架构1100相比,可以显著提高存储器操作效率。下面的示例显示了存储器操作效率的改进。

假设有'm'个计算设备,并且每个都有'j'个子切片,并且有一个工作任务,有'n'个工作组一起工作。进一步假设将数据从l3高速缓存875写到sgm218的时间是tg,并且将数据从l4高速缓存写到l3高速缓存的时间为tc,则利用图11的传统架构,从高速缓存(即,slm206-1)到sgm218的存储器写操作将进行“n”次。这意味着总时间是n*tg。

利用图12-13的新架构,在本地高速缓存(例如,超级slm1202)内将有“n”次写,并且从高速缓存(例如,超级slm1202)到sgm118的写有m*j次。根据一个示例,利用图12/13的新架构,总时间为(n*tc+m*j*tg),并且整体性能改进为:(n*tg)-(n*tc+m*j*tg)=(n-m*j)*tg-n*tc。

由于m*j非常小(例如,对于m=1和j=2,m*j=2),在大多数情况下“n”大得多(例如,几百),(n-m*j)*tg接近n*tg,而tg比tc长得多。利用图12/13的新架构,与使用图11的传统架构相比,从l3高速缓存875将所有数据写回sgm218(例如,节省大约n*(tg-tc)定时)花费的时间更少。

虽然参考图形处理描述了超级slm的实施例,但是这些概念可以用于任何存储器子系统。例如,这些实施例可以用于通过在处理器高速缓存或另一存储器中生成超级slm来减少处理器高速缓存和全局系统存储器之间的写到操作的数量。

说明书中对“实施例”、“一个实施例”、“一些实施例”或“其他实施例”的引用意味着结合实施例描述的特定特征、结构或特性包括在至少一些实施例中,但是不一定是所有实施例。“实施例”、“一个实施例”或“一些实施例”的各种出现不一定全部指代相同的实施例。如果说明书规定了组件、特征、结构或特征“可以”,“可能”或“会”被包括,则不要求包含该特定组件、特征、结构或特性。如果说明书或权利要求书是指“一(a)”或“一个(an)”元素,那并不意味着只有一个元素。如果说明书或权利要求书涉及“附加”元件,则不排除存在多于一个附加元件。

此外,特定特征、结构、功能或特性可以以任何合适的方式组合在一个或多个实施例中。例如,在与两个实施例相关联的特定特征、结构、功能或特性不是相互排斥的任何地方,第一实施例可以与第二实施例组合。

尽管已经结合本发明的具体实施例描述了本公开,但是根据前述的描述,这些实施例的许多替代、修改和变化对于本领域普通技术人员是显而易见的。例如,其他存储器架构例如动态ram(dram)可以使用所讨论的实施例。本公开的实施例旨在包括落入所附权利要求的广泛范围内的所有这样的替代、修改和变化。

此外,为了简化说明和讨论且不使本公开内容不清楚,公知的集成电路(ic)芯片和其他组件的电源/接地连接可能显示在或不显示在所呈现的附图中。此外,可以以框图形式示出布置,以避免使本公开变得模糊,并且还考虑到关于这种框图布置的实现的具体细节高度取决于本公开内容的所实施的平台的(即,这些细节应该在本领域技术人员的范围内)。为了描述本公开的示例性实施例而阐明了具体细节(例如电路),对于本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或在不同的情况下实践本公开。因此,该描述被认为是说明性的而不是限制性的。

以下示例涉及另外的实施例。示例中的细节可以在一个或多个实施例中的任何地方使用。本文描述的装置的所有可选特征也可以相对于方法或过程来实现。

例如,提供具有存储在其上的指令的机器可读存储介质,指令当被执行时,使得处理器执行一种方法,该方法包括:对两个或更多个工作组进行分组以形成超级工作组;以及将存储器空间的一部分划分为一个或多个超级共享本地存储器(超级slm),其中在超级工作组内共享的存储器空间形成一个或多个超级slm的至少一个超级slm。

在一些实施例中,机器可读存储介质具有另外的指令,另外的指令当被执行时,使得处理器执行进一步的方法,其包括:由超级工作组将数据写到全局存储器。在一些实施例中,至少一个工作组包括多个工作项。在一些实施例中,来自两个或更多个工作组当中的工作组内的存储器空间是共享本地存储器(slm)。在一些实施例中,slm与超级slm分离。在一些实施例中,slm是超级slm的子集。

在一些实施例中,提供机器可读存储介质,其具有另外的指令,另外的指令当被执行时,使得处理器执行进一步的方法,该方法包括:针对超级工作组确定子切片中的最后的工作组。在一些实施例中,机器可读存储介质具有另外的指令,另外的指令当被执行时,使处理器执行进一步的方法,该方法包括:当超级工作组中的所有其他工作组完成其操作时,生成最后的工作组。在一些实施例中,机器可读存储介质具有另外的指令,另外的指令当被执行时,处理器执行进一步的方法,该方法包括:由最后的工作组将数据从超级slm写回全局存储器。在一些实施例中,存储器的一部分是以下至少之一:高速缓存;fifo;或逻辑分区存储器。在一些实施例中,高速缓存是3级高速缓存。

在另一示例中,提供了一种装置,其包括:多个执行单元;高速缓存存储器,其具有被表征为slm的部分,该slm被与多个执行单元共享,所述多个执行单元中的至少一个执行单元对子切片的工作组进行操作,其中所述slm在所述工作组内共享;以及至少一个超级slm,用于提供由所述子切片中的不同工作组可访问的共享存储器,其中所述执行单元中的至少一个要对不同的工作组进行操作。

在一些实施例中,不同的工作组被分组以形成超级工作组。在一些实施例中,共享存储器可由形成一个或多个超级slm的至少一个超级slm的超级工作组访问。在一些实施例中,超级slm中的超级工作组将数据写到全局存储器。在一些实施例中,该装置包括计划器,用于针对超级工作组确定子切片中的最后的工作组。

在一些实施例中,当超级工作组中的所有其他工作组完成其操作时,计划器可操作用于服务最后的工作组。在一些实施例中,最后的工作组将数据从超级slm写回全局存储器。在一些实施例中,超级slm是slm的超级集合。在一些实施例中,超级slm是以下至少之一:高速缓存;fifo;或逻辑分区存储器。在一些实施例中,高速缓存是4级高速缓存。

在另一示例中,提供了一种系统,其包括存储器;经由输入/输出(i/o)接口耦合到存储器的图形处理器,所述图形处理器包括:多个执行单元;高速缓存存储器,具有表征为slm的部分,slm被与多个执行单元共享,所述多个执行单元中的至少一个执行单元对子切片的工作组进行操作,其中slm在工作组内共享;以及至少一个超级slm,用于提供可由所述子切片中的不同工作组访问的共享存储器,其中所述执行单元中的所述至少一个对不同的工作组进行操作;以及无线接口,用于允许所述图形处理器与另一设备通信。

在一些实施例中,i/o接口是双数据速率(ddr)兼容接口。在一些实施例中,存储器是动态随机存取存储器(dram)。在一些实施例中,不同的工作组被分组以形成超级工作组,并且其中超级slm中的超级工作组将数据写到存储器。

在另一示例中,提供了一种方法,其包括:对两个或更多个工作组进行分组以形成超级工作组;以及将存储器空间的一部分划分成一个或多个超级slm,其中在超级工作组内共享的存储器空间形成一个或多个超级slm的至少一个超级slm。在一些实施例中,该方法包括:由超级工作组将数据写到全局存储器。在一些实施例中,至少一个工作组包括多个工作项。

在一些实施例中,来自两个或更多个工作组当中的工作组内的存储器空间是slm。在一些实施例中,slm与超级slm分离。在一些实施例中,slm是超级slm的子集。在一些实施例中,该方法包括当超级工作组中的所有其他工作组完成其操作时生成最后的工作组;以及由最后的工作组将数据从超级slm写回全局存储器。

在另一示例中,提供了一种装置,其包括:用于对两个或更多个工作组进行分组以形成超级工作组的单元;以及用于将存储器空间的一部分划分成一个或多个超级slm的单元,其中,超级工作组内共享的存储器空间形成一个或多个超级slm的至少一个超级slm。在一些实施例中,该装置包括用于由超级工作组将数据写到全局存储器的单元。在一些实施例中,至少一个工作组包括多个工作项。

在一些实施例中,来自两个或更多个工作组当中的工作组内的存储器空间是slm。在一些实施例中,slm与超级slm分离。在一些实施例中,slm是超级slm的子集。在一些实施例中,所述装置包括:用于当所述超级工作组中的所有其他工作组完成其操作时生成最后的工作组的单元;以及用于由所述最后的工作组将数据从所述超级slm写到全局存储器的单元。

提供了摘要,以允许读者确定技术公开的性质和要点。提交摘要应理解为,它不会用于限制权利要求的范围或含义。以下权利要求被并入具体实施方式中,其中每个权利要求独立地作为单独的实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1