平码五不中公式规律
  • / 33
  • 下载费用:30 金币  

用于SIMD结构化分支的方法和装置.pdf

关 键 ?#21097;?/dt>
用于 SIMD 结构 化分 方法 装置
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201580044432.5

申请日:

2015.09.10

公开号:

CN106662999A

公开日:

2017.05.10

当前法律状态:

实审

有效性:

审中

法?#19978;?#24773;: 实质审查的生效IPC(主分类):G06F 9/38申请日:20150910|||公开
IPC分类号: G06F9/38 主分类号: G06F9/38
申请人: 英特尔公司
发明人: 苏布拉马尼亚姆·梅尤拉恩; 达林·M·斯塔基; ?#26032;?#26031;·A·皮亚扎
地址: 美国加利福尼亚州
优?#28909;ǎ?/td> 2014.09.26 US 14/498,561
专利代理机构: 北京东方亿思知识产权代理有限责任公司 11258 代理人: 孙洋
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201580044432.5

授权公告号:

|||

法律状态公告日:

2017.06.06|||2017.05.10

法律状态类型:

实质审查的生效|||公开

摘要

用于SIMD结构化分支的方法和装置。例如,处理器的一个实施例包括具有多个通道的执行单元,该执行单元执行指令;以及分支单元,该分支单元处理控制流指令并维护针对每个通道的每通道计数和针对控制流指令的控制指令计数,该分支单元至少基于每通道计数来启用和禁用通道。

权利要求书

1.一种处理器,包括:
具有多个通道的执行单元,该执行单元执行指令;以及
分支单元,该分支单元处理控制流指令并维护针对每个通道的每通道计数和针对所述
控制流指令的控制指令计数,所述分支单元至少基于所述每通道计数来启用和禁用所述通
道。
2.如权利要求1所述的处理器,其中,所述分支单元生成指示每个通道是否被启用的通
道启用掩码,其中,每通道掩码基于存储在与每个通道相关联的每个每通道计数器中的值
而被生成。
3.如权利要求2所述的处理器,其中,通道掩码包括每通道的单一位,其?#26800;?#19968;二进制
值指示通道被启用,并?#19994;?#20108;二进制值指示通道被禁用。
4.如权利要求3所述的处理器,其中,通道掩码位响应于针对每个通道所维护的每通道
计数值而被更新。
5.如权利要求4所述的处理器,其中,每通道计数值为0指示通道被启用,并且其中任何
其它每通道计数值指示通道被禁用。
6.如权利要求5所述的处理器,其中,当通道被禁用时,其对应的每通道计数包括所述
控制指令计数的值。
7.如权利要求1所述的处理器,其中,每个控制流指令包括谓词掩码,所述分支单元解
译所述谓词掩码以确定每个通道是否符合所述控制流指令的条件。
8.如权利要求7所述的处理器,其中,如果所述谓词掩码对于所有通道是一致的,则所
述每通道计数不被更新,而执行指令指针被更新。
9.如权利要求7所述的处理器,其中,如果所述谓词掩码对于所有通道不是一致的,则
所述控制指令计数被增大,并?#20063;?#31526;合所述条件的每个通道的所述每通道计数被使用当前
控制流指令类型的所述控制指令计数进行更新。
10.如权利要求1所述的处理器,其中,所述控制流指令包括分岔指令和汇聚指令。
11.如权利要求10所述的处理器,还包括:
用于存储汇聚指令的指令指针的栈,其中栈顶指针由所述分支单元针对每个控制流指
令类型进行维护。
12.如权利要求11所述的处理器,其中所述控制流指令类型包括IF/ELSE/ENDIF、DO/
BREAK/CONTINUE/WHILE、CALL/RETURN、HALT和/或BRANCH。
13.一种方法,包括:
确定控制流指令的指令谓词掩码是否对于执行单元的所有通道是一致的,其中所述谓
词掩码指示哪些通道能处理所述控制流指令类型;以及
如果所述指令谓词掩码对于所有通道不是一致的,则增大与所述控制流指令相关联的
控制指令计数,并更新与不处理所述控制流指令类型的与每个通道相关联的每通道计数。
14.如权利要求13所述的方法,其中,更新每通道计数包括用与所述控制流指令类型相
关联的所述控制指令计数来更?#28388;?#36848;每通道计数。
15.如权利要求13所述的方法,其中,如果所述指令谓词掩码对于所有通道是一致的,
则更新执行指令指针。
16.如权利要求15所述的方法,其中,更?#28388;?#36848;执行指令指针包括将下一指令指针设置
为等于当前指令指针和汇聚指令偏移量的和。
17.如权利要求15所述的方法,其中,更?#28388;?#36848;执行指令指针包括将下一指令指针设置
为等于当前指令指针和跳转指令偏移量的和。
18.如权利要求13所述的方法,还包括:
确定每个通道是被启用还是被禁用,并且仅针对被启用的那些通道更?#28388;?#36848;每通道计
数。
19.如权利要求13所述的方法,还包括:
确定谓词值是否指示了通道针对所述控制流指令类型被启用,并且仅针对所述谓词值
所指示的针对所述控制流指令类型未被启用的那些通道更?#28388;?#36848;每通道计数。
20.如权利要求19所述的方法,还包括:
将汇聚指令的指令指针存储在栈中;并且
维护针对每个控制流指令类型的栈顶指针。
21.如权利要求20所述的处理器,其中,所述控制流指令类型包括IF/ELSE/ENDIF、DO/
BREAK/CONTINUE/WHILE、CALL/RETURN、HALT和/或BRANCH。
22.一种方法,包括:
将当前指令指针与和汇聚指令类型相关联的栈顶指令指针进行比较;以及
如果所述当前指令指针等于所述栈顶指令指针,则将针对执行单元的每个通道维护的
每通道计数与针对所述汇聚指令类型维持的控制指令计数进行比较,并且如果所述每通道
计数等于所述控制指令计数,则将所述每通道计数设置为指示启用的通道的第一值。
23.如权利要求22所述的方法,其中,所述第一值包括0。
24.如权利要求22所述的方法,其中,如果所有通道对应于汇聚指令类型而被启用,则
减小所述控制指令计数。
25.如权利要求24所述的方法,还包括:
使用所述栈顶指令指针来标识与其相关联的所述汇聚指令的指令指针。

说明书

用于SIMD结构化分支的方法和装置

技术领域

本发明一般涉及计算机处理器领域。更具体地,本发明涉及用于执行单指令多数
据(SIMD)结构化分支的装置和方法。

背景技术

在单指令多数据(SIMD)程序中管理控制流是一个复杂的问题。传统上,图形处理
单元(GPU)使用标量代码和程序例程来控制针对每个SIMD通道的指令指针(IP)地址。这在
性能和功率使用方面都是低效的。

在一些架构上通过针对每个通道维持唯一的IP地址来管理控制流。例如,当遇到
控制流指令时,用基于该指令的谓词掩码的特定IP来更新每个通道的IP。对于各个指令,将
执行IP与通道的IP进行比较以确定该通道是否针对在当前IP处的特定指令被启用。

附图说明

通过以下结合附图的详?#35813;?#36848;可以更好地理解本发明,其中:

图1是带有具有一个或多个处理器核和图形处理器的处理器的计算机系统的实施
例的框图;

图2是具有一个或多个处理器核、集成存储器控制器和集成图形处理器的处理器
的一个实施例的框图;

图3是图形处理器的一个实施例的框图,该图形处理器可以是离散图形处理单元
或者可以是与多个处理?#24605;?#25104;的图形处理器;

图4是图形处理器的图形处理引擎的实施例的框图;

图5是图形处理器的另一实施例的框图;

图6是包括处理元件阵列的线程执行逻辑的框图;

图7示出了根据实施例的图形处理器执行单元指令格式;

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

图9A是示出根据实施例的图形处理器命令格式的框图;

图9B是示出根据实施例的图形处理器命令序列的框图;

图10示出了根据实施例的用于数据处理系统的示例性图形软件架构;

图11示出了用于执行SEVID分支操作的系统架构的一个实施例;

图12示出了根据本发明的一个实施例的分支单元;

图13示出了根据本发明的一个实施例的用于处理发散控制流指令的方法;以及

图14示出了根据本发明的一个实施例的用于处理收敛控制流指令的方法。

具体实施方式

在下面的描述中,出于说明的目的,阐述了许多具体?#38468;?#20197;便提供对下面描述的
本发明的实施例的透彻理解。然而,对于本领域技术人员清楚的是,可以在没有这些具体细
节中的一些?#38468;?#30340;情况下实践本发明的实施例。在其他实例中,以框图形式示出了公知的
结构和设备,以避免模糊本发明的实施例的基本原理。

示例性图形处理器架构和数据类型

概览——图1-图3

图1是根据实施例的数据处理系统100的框图。数据处理系统100包括一个或多个
处理器102和一个或多个图形处理器108,并且可以是单处理器台式系统、多处理器工作站
系统或具有大量处理器102或处理器核107的服务器系统。在实施例中,数据处理系统100是
用于移动、手?#21482;蚯度?#24335;设备中的片上系统(SOC)集成电路。

数据处理系统100的实施例可以包括基于服务器的游戏平台、游戏控制台(包括游
戏和媒体控制台、移动游戏控制台、手持游戏控制台或在线游戏控制台),或者被并入其中。
在一个实施例中,数据处理系统100是移动电话、智能电话、平板计算设备或移动互联网设
备。数据处理系统100还可以包括、耦合到可穿戴设备(例如,智能手表可穿戴设备、智能眼
镜设备、增强现实设备或虚拟现实设备),或者集成于其中。在一个实施例中,数据处理系统
100是具有一个或多个处理器102和由一个或多个图形处理器108生成的图?#35859;?#38754;的电视或
机顶盒设备。

一个或多个处理器102各自包括一个或多个处理器核107以处理在被运行时执行
系统和用户软件的操作的指令。在一个实施例中,一个或多个处理器核107中的每个被配置
为处理具体指令集109。指令集109可以辅助复杂指令集计算(CISC)、精简指令集计算
(RISC)或者经由超长指令字(VLIW)的计算。多个处理器核107可以各自处理不同的指令集
109,指令集109可以包括用于辅助其他指令集的仿真的指令。处理器核107还可以包括其它
处理设备,例如数?#20013;?#21495;处理器(DSP)。

在一个实施例中,处理器102包括缓存存储器104。根据架构,处理器102可以具有
单一内部缓存或多级内部缓存。在一个实施例中,缓存存储器在处理器102的各种组件之间
共享。在一个实施例中,处理器102还使用外部缓存(例如,第3级(L3)缓存或末级缓存
(LLC))(未示出),该外部缓存可以使用已知的缓存一致性技术在处理器核107之间共享。寄
存器文件106附加地包括在处理器102中,其可以包括用于存储不同类型数据的不同类型的
寄存器(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器)。一些寄存器可以
是通用寄存器,而其他寄存器可以特定于处理器102的设计。

处理器102耦合到处理器总线110,以在处理器102和系统100中的其他组件之间传
输数据信号。系统100使用示例性“集线器(hub)”系统架构,其包括存储器控制器集线器116
和输入输出(I/O)控制器集线器130。存储器控制器集线器116辅助存储器设备与系统100的
其它组件之间的通信,而I/O控制器集线器(ICH)130提供经由?#38236;豂/O总线到I/O设备的连
接。

存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器
(SRAM)设备、快闪存储器设备、或具有用作过程存储器的合适性能的某些其它存储器设备。
存储器120可以存储数据122和指令121,以在处理器102执行处理时使用。存储器控制器集
线器116还与可选的外?#23458;?#24418;处理器112耦合,可选的外?#23458;?#24418;处理器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也可以耦合到ICH130。在一个实施例中,高性能网络控制
器(未示出)耦合到处理器总线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 Express)。系统代理210为各种处理器组件提供管理功能。在一个实施例中,系统
代理210包括一个或多个集成存储器控制器214,以管理对各种外部存储器设备(未示出)的
访问。

在一个实施例中,核202A-N中的一个或多个包括对同步多线程的支持。在这样的
实施例中,系统代理210包括用于在多线程处理期间协调和操作核202A-N的组件。系统代理
210还可以包括功率控制单元(PCU),其包括用于调节核202A-N和图形处理器208的功?#39318;?br />态的逻辑和组件。

处理器200还包括图形处理器208以执行图形处理操作。在一个实施例中,图形处
理器208与一组共享缓存单元206和系统代理单元210(包括一个或多个集成存储器控制器
214)耦合。在一个实施例中,显示器控制器211与图形处理器208耦合,以将图形处理器输出
驱动到一个或多个耦合的显示器。显示器控制器211可以是经由至少一个互连与图形处理
器耦合的单独模块,或者可以集成在图形处理器208或系统代理210内。

在一个实施例中,基于环的互连单元212被用于耦合处理器200的内部组件,然而,
可以使用替代的互连单元,例如,点对点互连、交换互连、或包括本领域公知技术在内的其
它技术。在一个实施例中,图形处理器208经由I/O链路213与环?#20301;?#36830;212耦合。

示例性I/O链路213表示多种I/O互连中的至少一个,其中,多种I/O互连包括封装
上I/O互连,其辅助各种处理器组件和高性能?#24230;?#24335;存储器模块218(例如,eDRAM模块)之间
的通信。在一个实施例中,核202A-N中的每个和图形处理器208将?#24230;?#24335;存储器模块218用
作共享的末级缓存。

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

处理器200可以是一个或多个基板的一部分或在一个或多个衬底上实现,其中基
板使用下述多种处理技术中的任何一种:例如,互补金属氧化物半导体(CMOS)、双极结/互
补金属氧化物半导体(BiCMOS)或N型金属氧化物半导体逻辑(NMOS)。此外,处理器200可以
在一个或多个芯片上实?#21482;?#23454;现为具有所示组件(除了其他组件之外)的片上系统(SOC)集
成电路。

图3是图形处理器300的一个实施例的框图,图形处理器300可以是离散图形处理
单元,或者可以是与多个处理?#24605;?#25104;的图形处理器。在一个实施例中,图形处理器经由到图
形处理器上的寄存器的存储器?#25104;銲/O接口以及经由置于处理器存储器内的命令进行通
信。图形处理器300包括用于访问存储器的存储器接口314。存储器接口314可以是到?#38236;?#23384;
储器、一个或多个内部缓存、一个或多个共享外部缓存和/或到系统存储器的接口。

图形处理器300还包括显示器控制器302,以将显示输出数据驱动到显示设备320。
显示器控制器302包括针对一个或多个重叠平面的?#24067;?#19968;个或多个重叠平面用于显示和
组合多层的视频或用户界面元素。在一个实施例中,图形处理器300包括视频编解码器引擎
306,以将媒体编码、解码或转码到一个或多个媒体编码格式,从一个或多个媒体编码格式
编码、解码或转码,或在一个或多个媒体编码格式之间进行编码、解码或转码,其中,一个或
多个媒体编码格式包括但不限于运动图像专家组(MPEG)格式(例如,MPEG-2)、高级视频编
码(AVC)格式(例如,H.264/MPEG-4AVC)、电影电视工程师协会(SMPTE)421MA/C-1、联合图像
专家组JPEG格式(例如,JPEG)以及动态JPEG(MJPEG)格式。

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

GPE 310包括3D管线312,3D管线312用于执行3D操作,例如,使用作用于3D基本形
状(例如,矩形、三角形等)的处理功能来渲染三维图像和场景。3D管线312包括执行元件内
的各种任务和/或向3D/媒体子系统315产生执行线程的可编程和固定功能元件。虽然3D管
线312可用于执行媒体操作,但GPE 310的实施例还包括具体地用于执行媒体操作(例如,视
频后处理和图像增强)的媒体管线316。

在一个实施例中,媒体管线316包括固定功能或可编程逻辑单元,以代替或代表视
频编解码器引擎306执行一个或多个专门媒体操作,例如视?#21040;?#30721;加速、视?#31561;?#20132;错和视频
编码加速。在实施例中,媒体管线316还包括线程产生单元以产生在3D/媒体子系统315上执
行的线程。所产生的线程执行针对在3D/媒体子?#20302;持?#25152;包括的一个或多个图形执行单元
上的媒体操作的计算。

3D/媒体子系统315包括用于执行由3D管线312和媒体管线316产生的线程的逻辑。
在一个实施例中,管线向3D/媒体子系统315发送线程执行请求,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耦合,命令流送器403向GPE 3D和媒体
管线412、416提供命令流。命令流送器403耦合到存储器,该存储器可以是系统存储器或者
内部缓存存储器和共享缓存存储器中的一个或多个。命令流送器403从存储器接收命令并
将命令发送到3D管线412和/或媒体管线416。3D和媒体管线通过经?#19978;?#24212;管线内的逻辑执
行操作或通过分派一个或多个执行线程到执行单元阵列414来处理这些命令。在一个实施
例中,执行单元阵列414是可扩展的,使得阵列基于GPE410的目标功率和性能水平而包括可
变数目的执行单元。

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

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

运动估计引擎434通过执行视频加速功能(例如,对视频数据的运动向量估计和预
测)来为视频操作提供?#24067;?#21152;速。运动估计引擎确定描述连续视频帧之间的图像数据的变
换的运动向量。在一个实施例中,图形处理器媒体编解码器使用视频运动估计引擎434来在
宏块级别上对视频执行操作,否则使用通用处理器来执行可能是计算密集的。在一个实施
例中,运动估计引擎434通常可用于图形处理器组件以协助对视频数据内的运动的方向或
量级敏感或适应的视?#21040;?#30721;和处理功能。

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

在一个实施例中,图形处理引擎410包括数据端口444,该数据端口444为图形子系
?#31243;?#20379;访问存储器的附加机制。数据端口444辅助针对包括下述内容的操作的存储器访?#21097;?br />渲染目标写入、常量缓冲区读取、暂时存储器空间读/写、和介?#26102;?#38754;访问。在一个实施例
中,数据端口444包括用于缓存对存储器的访问的缓存存储器空间。缓存存储器可以是单个
数据缓存或者被分成用于经由数据端口访问存储器的多个子系统的多个缓存,例如,渲染
缓冲区缓存、常数缓冲区缓存等。在一个实施例中,在执行单元阵列414中的执行单元上执
行的线程通过经由数据分布互连交换消息来与数据端口通信,其中该数据分布互连耦合图
形处理引擎410的每个子系统。

执行单元——图5-图7

图5是图形处理器的另一实施例的框图。在一个实施例中,图形处理器包括环?#20301;?br />连502、管线前端504、媒体引擎537和图形核580A-N。环?#20301;?#36830;502将图形处理器耦合到其它
处理单元,包括其它图形处理器或一个或多个通用处理器核。在一个实施例中,图形处理器
是集成在多核处理系统内的许多处理器中的一个。

图形处理器经由环?#20301;?#36830;502接收成批的命令。管线前端504中的命令流送器503
解译传入的命令。图形处理器包括可扩展执行逻辑以经由(一个或多个)图形核580A-N执行
3D几何处理和媒体处理。对于3D几何处理命令,命令流送器503将命令供应给几何管线536。
对于至少一些媒体处理命令,命令流送器503将命令提供给与媒体引擎537耦合的视频前端
534。媒体引擎537包括用于视频和图像后处理的视频质量引擎(VQE)530和提供?#24067;?#21152;速的
媒体数据编码和解码的多格式编码/解码(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。在一个实施例中,线程执行逻辑600包括像素?#27966;?#22120;602、线程分派器604、指令
缓存606,包括多个执行单元608A-N的可扩展执行单元阵列、采样器610、数据缓存612和数
据端口614。在一个实施例中,所包括的组件经由链接到每个组件的互连结构互连。线程执
行逻辑600包括通过指令缓存606、数据端口614、采样器610和执行单元阵列608A-N中的一
个或多个到存储器(例如,系统存储器或缓存存储器)的一个或多个连接。在一个实施例中,
每个执行单元(例如,608A)是能够执行多个同?#36739;?#31243;并且针对每个线程并行处理多个数据
元素的单个向量处理器。执行单元阵列608A-N包括任何数目的单独执行单元。

在一个实施例中,执行单元阵列608A-N主要用于执行“?#27966;?#22120;”程序。在一个实施
例中,阵列608A-N中的执行单元执行包括针对许多标准3D图形?#27966;?#22120;指令的本机支持的指
令集,以使得来自图形库(例如,Direct 3D和OpenGL)的?#27966;?#22120;程序在最小转译的情况下被
执行。执行单元支持顶点和几何处理(例如,顶点程序、几何程序、顶点?#27966;?#22120;)、像素处理
(例如,像素?#27966;?#22120;,片段?#27966;?#22120;)和通用处理(例如,计算和媒体?#27966;?#22120;)。

执行单元阵列608A-N中的每个执行单元对数据元素的阵列进行操作。数据元素的
数目是“执行大小”或用于指令的通道的数目。执行通道是用于数据元素访问、掩码、和指令
内的流控制的逻辑执行单元。通道的数目可以与特定图形处理器的物理ALU或FPU的数目无
关。执行单元608A-N支持整数和浮点数据类型。

执行单元指令集包括单指令多数据(SIMD)指令。可以将各种数据元素作为分组数
据类型存储在寄存器中,并且执行单元将基于元素的数据大小来处理各种元素。例如,当对
256位宽的向量进行操作时,向量的256位被存储在寄存器中,并且执行单元对作为四个单
独的64位分组数据元素(四字(QW)大小数据元素)、八个单独的32位分组数据元素(双字
(DW)大小的数据元素)、十六个单独的16位分组数据元素(字(W)大小的数据元素)或三十二
个单独的8位数据元素(?#32440;?B)大小的数据元素)的向量进行操作。然而,不同的向量宽度
和寄存器大小是可能的。

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

在执行期间,图形和媒体管线经?#19978;?#31243;产生和分派逻辑向线程执行逻辑600发送
线程发起请求。线程执行逻辑600包括?#38236;?#32447;程分派器604,其对来自图形和媒体管线的线
程发起请求进行仲裁,并在一个或多个执行单元608A-N上实例化所请求的线程。例如,几何
管线(例如,图5的536)将顶点处理、镶嵌或几何处理线程分派到线程执行逻辑600。线程分
派器604还可以处理来自正在执行的?#27966;?#22120;程序的运行时间线程产生请求。

一旦一组几何对象已被处理并光栅化?#19978;?#32032;数据,则调用像素?#27966;?#22120;602以进一
步计算输出信息并使得结果被写入输出表面(例如,颜色缓冲区、深度缓冲区、模板缓冲区
等)。在一个实施例中,像素?#27966;?#22120;602计算将跨光栅化的对象被插值的各种顶点属性的值。
像素?#27966;?#22120;602然后执行API提供的像素?#27966;?#22120;程序。为执行像素?#27966;?#22120;程序,像素?#27966;?#22120;
602经?#19978;?#31243;分派器604将线程分派到执行单元(例如,608A)。像素?#27966;?#22120;602使用取样器
610中的纹理采样逻辑来访问存储在存储器中的纹理图中的纹理数据。对纹理数据和输入
几何数据的算术运算计算针对每个几何片段的像素颜色数据,或丢弃来自进一步处理的一
个或多个像素。

在一个实施例中,数据端口614为线程执行逻辑600提供将经处理的数据输出到存
储器以在图形处理器输出管线上进行处理的存储器访问机制。在一个实施例中,数据端口
614包括或者耦合到一个或多个缓存存储器(例如,数据缓存612)以缓存数据供经由数据端
口进行存储器访问。

图7是示出根据实施例的图形处理器执行单元指令格式的框图。在一个实施例中,
图形处理器执行单元支持具有多?#25351;?#24335;的指令的指令集。实线框示出了通常包括在执行单
元指令中的组分,而虚线包括可选的或仅包括在指令子集中的组分。与处理指令时从指令
解码产生的微操作相反,所描述和示出的指令格式是宏指令,因为它们是被提供给执行单
元的指令。

在一个实施例中,图形处理器执行单元本机地支持128位格式710的指令。基于所
选择的指令、指令选项和操作数的数目,64位压缩指令格式730可用于一些指令。本机128位
格式710提供对所有指令选项的访?#21097;?#32780;一些选项和运算被限制在64位格式730中。在64位
格式730中可用的?#38236;?#25351;令随实施例变化。在一个实施例中,使用索引字段713中的一组索
引?#36947;?#37096;分地压缩指令。执行单元?#24067;?#22522;于索引值引用一组压缩表,并使用压缩表输出来
重构128位格式710的本机指令。

对于每?#25351;?#24335;,指令操作码712定义了执行单元要执行的操作。执行单元跨每个操
作数的多个数据元素并行地执行每个指令。例如,响应于加指令,执行单元跨表示纹理元素
或?#35745;?#20803;素的每个颜色通道执行同步的加运算。默认情况下,执行单元跨操作数的所有数
据通道执行每个指令。指令控制字段712使得能够控制某些执行选项,例如,通道选择(例
如,预测)和数据通道顺序(例如,拌和(swizzle))。对于128位指令710,执行大小字段716限
制?#31169;?#34987;并行执行的数据通道的数目。执行大小字段716不可用于64位压缩指令格式730
中。

一些执行单元指令具有多达三个操作数,包括两个源操作数src0 722、Src1 722,
以及一个目的地718。在一个实施例中,执行单元支持双目的地指令,在该指令中目的地之
一是隐含的。数据操纵指令可以具有第三源操作数(例如,SRC2 724),其中指令操作码JJ12
确定源操作数的数目。指令的最后一个源操作数可以是随指令一起被传递的立即(例如,硬
编码)值。

在一个实施例中,基于操作码位字段对指令进行分组以简化操作码解码740。对于
8位操作码,位4、5和6允许执行单元确定操作码的类型。所示的精确的操作码分组是示例性
的。在一个实施例中,移动和逻辑操作码分组742包括数据移动和逻辑指令(例如,mov、
cmp)。移动和逻辑分组742共享五个最高有效位(MSB),其中移动指令是0000xxxxb(例如,
0x0x)的形式的,而逻辑指令是0001xxxb(例如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的图形处理器的另一实施例的框图。在一个实施例中,图形处理器是在包括一个
或多个通用处理核的多核处理系统内的图形处理器。图形处理器由到一个或多个控制寄存
器(未示出)的寄存器写入来控制或者通过经由环?#20301;?#36830;802发布到图形处理器的命令来控
制。环?#20301;?#36830;802将图形处理器耦合到其它处理组件,例如,其它图形处理器或通用处理器。
来自环?#20301;?#36830;的命令由命令流送器803解译,命令流送器803向图形管线820或媒体管线830
的各个组件提供指令。

命令流送器803指导顶点获取器805组件的操作,顶点获取器805从存储器读取顶
点数据并执行由命令流送器803提供的顶点处理命令。顶点获取器805将顶点数据提供给顶
点?#27966;?#22120;807,顶点?#27966;?#22120;807对每个顶点执行坐标空间变换和光照操作。顶点获取器805和
顶点?#27966;?#22120;807通过经?#19978;?#31243;分派器831将执行线程分派到执行单元852A、852B来执行顶点
处理指令。

在一个实施例中,执行单元852A、852B是具有用于执行图形和媒体操作的指令集
的向量处理器的阵列。执行单元852A、852B具有附着的L1缓存851,其特定于每个阵列或在
阵列之间共享。缓存可以被配置作为数据缓存、指令缓存或被分区以将数据和指令包括在
不同分区中的的单个缓存。

在一个实施例中,图形管线820包括镶嵌组件以执行3D对象的?#24067;?#21152;速镶嵌。可编
程外壳?#27966;?#22120;811配置镶嵌操作。可编程域?#27966;?#22120;817提供镶嵌输出的后端评估。镶嵌器813
在外壳?#27966;?#22120;811的方向上进行操作,并且包括基于作为到图形管线820的输入而提供的粗
略的几?#25991;?#22411;来生成一组详细的几何对象的专用逻辑。如果不使用镶嵌,则可以绕过镶嵌
组件811、813、817。

完整的几何对象可以由几何?#27966;?#22120;819经由分派到执行单元852A、852B的一个或
多个线程来处理,或者可以直接进行到剪裁器829。几何?#27966;?#22120;对整个几何对象进行操作,
而不是对如在图形管线的先前阶段中的顶点或顶点片。如果镶嵌被禁用,则几何?#27966;?#22120;819
接收来自顶点?#27966;?#22120;807的输入。几何?#27966;?#22120;819可由几何?#27966;?#22120;程序编程,以在镶嵌单元
被禁用时执行几何镶嵌。

在光栅化之前,顶点数据由剪裁器829处理,剪裁器829是固定功能的剪裁器或者
是具有剪裁和几何?#27966;?#22120;功能的可编程剪裁器。在一个实施例中,渲染输出管线870中的光
栅化器873对像素?#27966;?#22120;进行分派以将几何对象转换成它们的每像素表示。在一个实施例
中,像素?#27966;?#22120;逻辑被包括在线程执行逻辑850中。

图?#25105;?#25806;具有互连总线、互连结构或允许数据和消息在图?#25105;?#25806;的主要组件之间
传递的一些其它互连机制。在一个实施例中,执行单元852A、852B和(一个或多个)相关联的
缓存851、纹理和媒体采样器854、以及纹理/采样器缓存858经由数据端口856互连以执行存
储器访问并与图?#25105;?#25806;的渲染输出管线组件通信。在一个实施例中,采样器854、缓存851、
858和执行单元852A、852B每个都具有单独的存储器访问路径。

在一个实施例中,渲染输出管线870包括光栅化器和深度测试组件873,其将基于
顶点的对象转换成与其相关联的基于像素的表示。在一个实施例中,光栅化器逻辑包括执
行固定功能三角和线性光栅化的加窗/遮蔽单元。在一个实施例中,相关联的渲染和深度缓
冲区缓存878、879也是可用的。像素操作组件877对数据执行基于像素的操作,但在一些实
例中,与2D操作(例如,利用混合的位块图像传送)相关联的像素操作由2D引擎841执行,或
者代替为在显示时?#19978;?#31034;器控制器843使用覆盖显示平面来执行。在一个实施例中,共享L3
缓存875可用于所有图形组件,从而允许在不使用主系统存储器的情况下共享数据。

图形处理器媒体管线830包括媒体引擎337和视频前端834。在一个实施例中,视频
前端834?#29992;?#20196;流送器803接收管线命令。然而,在一个实施例中,媒体管线830包括单独的
命令流送器。视频前端834在将命令发送到媒体引擎837之前处理媒体命令。在一个实施例
中,媒体引擎包括线程产生功能,以产生用于经?#19978;?#31243;分派器831分派到线程执行逻辑850
的线程。

在一个实施例中,图?#25105;?#25806;包括显示引擎840。在一个实施例中,显示引擎840在图
形处理器的外部,并且经由环?#20301;?#36830;802或某一其它互连总线或结构与图形处理器耦合。显
示引擎840包括2D引擎841和显示器控制器843。显示引擎840包括能够独立于3D管线操作的
专用逻辑。显示器控制器843与显示设备(未示出)耦合,其中该显示设备可以是系统集成的
显示设备(例如,在膝上型计算机中),或者经?#19978;?#31034;设备连接器附着的外部显示设备。

图形管线820和媒体管线830可配置为基于多个图形和媒体编程接口来执行操作,
并?#20063;?#29305;定于任何一个应用编程接口(API)。在一个实施例中,图形处理器的驱动器软件将
特定于具体图形或媒体库的API调用转换为可以由图形处理器处理的命令。在各种实施例
中,对由科纳斯组织(Khronos Group)支持的开放图形库(OpenGL)和开放计算语言
(OpenCL)、来自微软公司的Direct3D库提供支持,或者在一个实施例中,对OpenGL和D3D两
者?#32487;?#20379;支持。还可以对开源计算机视觉库(OpenCV)提供支持。如果可以实?#25191;?#26410;来API的
管线到图形处理器的管线的?#25104;洌?#21017;还将支持具有兼容3D管线的未来API。

图形管线编程——图9A-B

图9A是示出根据实施例的图形处理器命令格式的框图,并且图9B是示出根据实施
例的图形处理器命令序列的框图。图9A中的实线框示出了通常包括在图形命令中的组分,
而虚线包括可选的或仅包括在图形命令的子集中的组分。图9A的示例性图形处理器命令格
式900包括标识命令的目标客户端902、命令操作码(操作码)904和命令的相关数据906的数
据字段。子操作码905和命令大小908也包括在一些命令中。

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

图9B中的流程图示出了采样命令序列910。在一个实施例中,以图形处理器的实施
例为特征的数据处理系统的软件或固件使用所示出的命令序列的版本来建立、执行并终止
一组图形操作。出于示例性的目的而示出和描述了采样命令序列,然而实施例不限于这些
命令或命令序列。此外,命令可以作为命令序列中的一批命令被发出,使得图形处理器将以
至少部分地同步的方式处理命令序列。

采样命令序列910可以开始于管线刷新命令912,以使得任何活动图形管线完成管
线当前待处理的命令。在一个实施例中,3D管线922和媒体管线924不同步操作。执行管线刷
新以使得活动图形管线完成任?#26410;?#22788;理的命令。响应于管线刷新,图形处理器的命令解析
器将暂停命令处理,直到活动绘图引擎完成待处理的操作并且相关的读取缓存被无效为
止。可选地,可以将在渲染缓存中标记为“脏位(dirty)”的任何数据刷新到存储器。管线刷
新命令912可以用于管线同步或者在将图形处理器置于低功?#39318;?#24577;之前被使用。

当命令序?#34892;?#35201;图形处理器在管线之间显式地进行切换时,使用管线选择命令
913。在发出管线命令之前,在执行上情境仅需要执行一次管线选择命令913,除非该情境要
发出针对两个管线的命令。在一个实施例中,需要在紧接通过管线选择命令913的管线切换
之前执行管线刷新命令912。

管线控制命令914配置要操作的图形管线,并且用于对3D管线922和媒体管线924
进行编程。管线控制命令914配置针对活动管线的管线状态。在一个实施例中,管线控制命
令914用于管线同步,并?#20197;?#22788;理一批命令之前从活动管线内的一个或多个缓存存储器中
清除数据。

返回缓冲区状态命令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命令被用于经由顶点?#27966;?#22120;对3D图元执行顶点操作。为处理顶点?#27966;?#22120;,3D
管线922将?#27966;?#22120;执行线程分派到图形处理器执行单元。

通过执行934命令或事件来触发3D管线922。在一个实施例中,寄存器写入触发命
令执行。在一个实施例中,通过命令序列中的“go”或“kick”命令触发执行。在一个实施例
中,通过使用管线同步命令来触发命令执行以通过图形管线刷新命令序列。3D管线将执行
针对3D图元的几何处理。一旦操作完成,所得到的几何对象?#36824;?#26629;化,并且像素引擎对所得
到的像素?#27966;?#36824;可以包括针对这些操作的用于控制像素?#27966;?#21644;像素后端操作的附?#29992;?br />令。

当执行媒体操作时,采样命令序列910遵循媒体管线924路径。一般来说,针对媒体
管线924的编程的具体使用和方式取决于要执行的媒体或计算操作。在媒体解码期间,可以
将特定媒体解码操作?#23545;?#21040;媒体管线。还可以绕过媒体管线,并且可以使用由一个或多个
通用处理核提供的资源来整体或部分地执行媒体解码。在一个实施例中,媒体管线还包括
用于通用图形处理器单元(GPGPU)操作的元素,其中图形处理器用于使用未与图形图元的
渲染显式相关的计算?#27966;?#22120;程序来执行SIMD向量操作。

以与3D管线922类似的方式来配置媒体管线924。在媒体对象命令942之前,将一组
媒体管线状态命令940分派到或置入到命令队列中。媒体管线状态命令940包括用于配置将
用于处理媒体对象的媒体管线元素的数据。这包括用于配置媒体管线内的视?#21040;?#30721;和视频
编码逻辑(例如,编码或解码格式)的数据。媒体管线状态命令940还支持使用指向包括一批
状态设置的“间接”状态元素的一个或多个指针。

媒体对象命令942提供指向要由媒体管线处理的媒体对象的指针。媒体对象包括
包含要处理的视频数据的存储器缓冲区。在一个实施例中,在发出媒体对象命令942之前,
所有媒体管线状态必须是有效的。一旦配置?#26031;?#32447;状态并且媒体对象命令942已入列,则通
过执行934命令或等同的执行事件(例如,寄存器写入)来触发媒体管线924。然后可以通过
由3D管线922或媒体管线924提供的操作来对来自媒体管线924的输出进行后处理。在一个
实施例中,以与媒体操作类似的方式来配置和执行GPGPU操作。

图形软件架构——图10

图10示出了根据实施例的用于数据处理系统的示例性图形软件架构。软件架构包
括3D图形应用1010、操作系统1020和至少一个处理器1030。处理器1030包括图形处理器
1032和一个或多个通用处理器核1034。图形应用1010和操作系统1020各自在数据处理系统
的系统存储器1050中运行。

在一个实施例中,3D图形应用1010包括了包括?#27966;?#22120;指令1012的一个或多个?#27966;?br />器程序。?#27966;?#22120;语言指令可以是高级?#27966;?#22120;语言,例如,高级?#27966;?#22120;语言(HLSL)或OpenGL着
色器语言(GLSL)。该应用还包括适于由通用处理器核1034执行的机器语言格式的可执行指
令1014。该应用还包括由顶点数据定义的图形对象1016。

操作系统1020可以是来自微软公司的操作系统、专有
的类UNIX操作系统、或者是使用Linux内核的变形的开源类UNIX操作系统。当使用Direct3D
API时,操作系统1020使用前端?#27966;?#22120;编译器1024将HLSL格式的任何?#27966;?#22120;指令1012编译
为较?#22270;蹲派?#22120;语言。编译可以是即时编译,或者应用可以执行共享预编译。在一个实施例
中,在3D图形应用1010的编译期间将高级?#27966;?#22120;编译为?#22270;蹲派?#22120;。

用户模式图形驱动器1026可以包括后端?#27966;?#22120;编译器1027以将?#27966;?#22120;指令1012
转换成?#24067;?#29305;定表示。当使用OpenGL API时,将GLSL高级语言形式的?#27966;?#22120;指令1012传递
到用户模式图形驱动器1026以进行编译。用户模式图形驱动器使用操作系统内核模式功能
1028来与内核模式图形驱动器1029通信。内核模式图形驱动器1029与图形处理器1032通信
以分派命令和指令。

就本文描述的各种操作或功能而言,它们可以被描述或定义为?#24067;?#30005;路、软件代
码、指令、配置和/或数据。内容可以实现为?#24067;?#36923;辑或直接作为可执行软件(“对象”或“可
执行”形式)、源代码、设计用于在图?#25105;?#25806;上执行的高级?#27966;?#22120;代码,或者用于特定处理器
或图形核的指令集中的?#22270;?#27719;编语?#28304;?#30721;。本文描述的实施例的软件内容可以通过在其上
存储有该内容的制造品,或者通过操作通信接口以经由通信接口发送数据的方法来提供。

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

所描述的各种组件可以是用于执行所描述的操作或功能的装置。本文所描述的每
个组件包括软件、?#24067;?#25110;其组合。组件可以被实现为软件模块、?#24067;?#27169;块、特定用途的?#24067;?br />(例如,专用?#24067;?#19987;用集成电路(ASIC)、数?#20013;?#21495;处理器(DSP)等)、?#24230;?#24335;控制器、硬连线
电路等。除了本文所描述的内容,可以对所公开的本发明的实施例和实现方式进行各?#20013;?br />改,而不背离它们的范围。因此,本文的说明和示例应当解释为说明性的,而非限制性的。本
发明的范围应仅通过参考所附权利要求来度量。

用于SIMD结构化分支的装置和方法

本发明的一个实施例在?#24067;?#20013;执行SIMD控制流,从而提高性能和?#26723;?#21151;率。具体
地,描述了可以在SIMD线程中使用的SIMD处理器功能单元,其中通道使用结构化流分岔和
重新汇聚。通道分岔的一个示例是IF/ELSE/ENDIF序列,其中如果满足“IF”条件,则指令流
分岔到第一指令序列,但是如果不满足“IF”条件时,指令流分岔到(由“ELSE”条件指定的)
第二指令序列。响应于ENDIF语句(例如,当“IF”和/或“ELSE”语句所要求的所有分岔指令都
已完成时)进行通道汇聚。

在本发明的一个实施例中,通过响应地启用和禁用每个通道的新分支单元(例如,
通过新指令)来检测通道分岔和汇聚。分支单元可以在执行单元(EU)中的所有线程之间共
享,并且可以计算针对处理器中所有通道的所有结构化控制流指令的结果。

分支单元的一个实施例计算每通道一位的通道掩码,以在结构化控制流处理期间
启用或禁用通道。这消除了针对每个指令比较通道IP的必要性。在一个实施例中,通道掩码
被原样地用于由另一单元处理的所有非控制流指令。

在一个实施例中,?#29992;?#20010;通道的计数器生成通道启用掩码,该通道启用掩码指示
了通道是否被禁用,以及如果是,则通过?#35009;?#25511;制流指令(即,IF/ELSE/ENDIF、CALL/RETURN
等)。与现有的每通道IP解决方案相比,这节省了门,并节省了每指令计算周期。本发明的实
施例可以用由标准(例如,c/c++)支持的任何结构化控制流指令来实现。以示例而非限制的
方式,这包括:IF/ELSE/ENDIF、DO/BREAK/CONTINUE/WHILE、CALL/RETURN、HALT、BRANCH,并
且可以与任何其他结构化控制流指令共同作用。

在一个实施例中,还通过使用区分控制流指令出现的计数器来支持递归。具体地,
在一个实施例中,维护针对每个分支类型(IF/ELSE/ENDIF、DO/BREAK/CONTINUE/WHILE、
CALL/RETURN等)的“控制指令计数”,它提供了该分支类型的当前嵌套级别的计数。例如,IF
分支类型的值为2表示两个嵌套的IF语句。在一个实施例中,如果当前IP在任何分支条件块
之外,则控制指令计数为零。

一个实施例还维护“每通道计数”以确定通道是否被启用。如果每通道计数为0,则
通道被启用。在一个实施例中,当通道被禁用时,其相应的计数包括如下控制指令计数值,
在该值时该通道以及表示分支类型的编码ID一起被禁用(例如,IF,2表示具有2个嵌套IF语
句的IF分支类型)。

在一个实施例中,n通道条?#31354;?#29992;于存储收敛指令的地址(IP)(例如,对于IF指令,
存储ENDIF指令的IP)。维护针对每个分支类型的栈顶指针,以对栈内的收敛指令的IP进行
标识。

此外,在一个实施例中,每个指令包括谓词掩码。谓词掩码的每一位表示一个通
道,并且用于确定通道是否符合条件(例如,对于IF,通道可以进入IF块,或者跳到ELSE块)。
在一个实施例中,仅对启用的通道进行评估以供执行。

图11示出了执行单元1100的架构,其中根据本发明的一个实施例实?#33267;?#20998;支单元
1101。多个通道0-2执行存储在指令存储器1105中的指令,指令存储器1105可以是指令缓冲
器、指令缓存或适于在执行之前存储指令的任何其它存储器。虽然在图11中示出了3个通
道,但是可以利用任何数目的通道来实现本发明的基本原理。与每个通道0-2相关联的指令
指针1110-1112分别对要在其相应通道上执行的下一个指令进行标识。指令分派逻辑1120-
1122然后分派要在多个功能单元1130上执行的指令,多个功能单元1130可以包括例如矢量
功能单元、标量功能单元和逻辑功能单元(和/或设计用于执行指令的任何其他类型的功能
单元)。

图11所示的执行单元1100可以在诸如上述的图形处理单元架构(例如,参见图6所
示的执行单元608)内实现。然而,本发明的基本原理不限于图形处理实现方式。

如上所述,由分支单元1101检测通道分岔和汇聚,并响应地启用和禁用每个通道。
分支单元1101可以在EU 1100中的所有线程之间共享,并且可以计算处理器中的所有通道
的所有结构化控制流指令的结果。在一个实施例中,每个线程在不同的通道0-2上执行。

图12示出了与分支单元1101的一个实施例相关联的附加?#38468;凇?#22914;图所示,分支单
元1101的该实施例计算每通道一位的通道启用掩码1250,以在结构化控制流处理期间启用
或禁用通道(从而消除了针对每个指令比较通道IP的必要性)。在一个实施例中,通道掩码
1250被原样地用于由另一单元处理的所有非控制流指令。

在一个实施例中,根据一组每通道计数器1200-1202生成通道启用掩码1250,该通
道启用掩码1250指示通道是否被禁用,以及如果是,则通过?#35009;?#25511;制流指令(即,IF/ELSE/
ENDIF、CALL/RETURN等)。一组控制指令计数器1211用针对每种分支类型(IF/ELSE/ENDIF、
DO/BREAK/ENDIF、CONTINUE/WHILE、CALL/RETURN等)维护的“控制指令计数”来区分控制流
指令的出现。在一个实施例中,控制指令计数指示该分支类型的嵌套的当前级别。在图12所
示的示例中,针对IF分支类型所示的值为2,表示两个嵌套的IF语句。对于指示1级嵌套的
CALL/RETURN和DO/BREAK/CONTINUE/WHILE指令,所示的值为1。在一个实施例中,如果当前
IP在任何分支条件块之外,则控制指令计数为零。

在一个实施例中,如果每通道计数器1200-1202中的每通道计数为0,则如通道掩
码1250中的0所指示的,启用对应的通道。在一个实施例中,当通道被禁用时,则其每通道计
数器1200-1202中其对应的计数包括如下控制指令计数(由控制指令计数器1211提供),在
该控制指令计数时该通道以及表示分支类型的编码ID一起被禁用。

图12还示出了用于存储汇聚指令的地址(IP)(例如,对于IF指令,存储ENDIF指令
的IP)的n通道条?#31354;?260。针对每种分支类型维护栈顶指针1261以对栈1260内的汇聚指令
的IP 1250-1254进行标识。在一个实施例中,当执行分岔指令时,将相应的汇聚指令的IP添
加到堆栈。

如上所述,在一个实施例中,每个指令包括谓词掩码,其每位表示一个通道,并且
用于确定通道是否符合条件(例如,对于IF,通道可以进入IF块,或跳转到ELSE块)。在一个
实施例中,仅对启用的通道进行评估以供执行。

在图13中阐述了用于执行分岔指令的方法。该方法可以在图11-12所示的系统的
情?#25345;?#23454;现,但不限于任何特定的系统架构。

在1301处开始,针对每个通道n,在1302处确定每通道计数是否为0。如上所述,在
一个实施例中,如在1303处确定的,通道计数0指示相应通道被启用。如在1304处确定的,如
果每通道计数非零,则相应通道未被启用。对每个通道n执行上述处理。

在1305处,将汇聚IP的标签设置为等于当前IP+汇聚偏移(即,从当前IP到汇聚IP
的距离)。在1306处,确定所有启用的通道是否具有与其相关联的相同谓词值(例如,指令的
谓词掩码是否相同)。如果不是,则在1307处,增大针对当前控制流指令类型的控制指令计
数(例如,在相应的控制指令计数器1211内增大IF计数)。

在1308处,对于每个通道n,确定通道在1309处是否被启用。如果是,则在1310处,
基于谓词启用字段确定是否针对当前指令启用通道。如果不是,则在1311处将每通道计数
设置为等于控制流指令的控制指令计数(从而禁用通道)。对每个通道n重复上述处理。在
1312处,增大下一指令指针(例如,将下一指令指针设置为等于当前指令指针+1)。

返回到判定框1306,如果所有启用的通道具有与其相关联的相同谓词值(即,指令
的谓词掩码相同),则在1313处,确定是否所有活动通道符合当前条件(例如,所有通道是否
可以处理控制流指令)。如果是,则在1315,将下一指令指针设置为等于当前指令指针加跳
转偏移(即,分岔指令的IP位置)。如果不是,则在1314处,将下一指令指针设置为等于当前
指令指针加汇聚偏移(即,汇聚指令的位置)。

作为上述方法的结果,如果谓词对于所有通道是一致的,则不更新每通道计数,并
且仅更新执行IP。如果谓词掩码对于所有通道不是一致的,这被称为分岔,并?#20197;?#36825;种情况
下,一些通道符合条件,而一些通道不符合条件。在这种情况下,增大控制指令计数,并且用
当前分支类型的控制指令计数更新不符合该条件的每个通道的每通道计数。将标签推入栈
(以存储汇聚指令的IP),并更新栈顶指针。

图14示出了用于处理汇聚控制流指令的方法的一个实施例。该方法可以在图11-
12所示的处理器架构的情?#25345;?#23454;现,但不限于任何特定架构。

在1401处,将标签设置为等于当前指令指针。在1402处,如果标签等于栈(例如,栈
1260)顶部处的指令指针,则处理进行到1403。对于每个通道n,如果在1404处确定每通道计
数等于控制指令计数,则在1405处将每通道计数设置为等于0(以启用通道)。

一旦完成了针对每个通道的处理,则在1406处确定是否有任何通道计数等于控制
指令计数。如果不是,则在1407处,减小控制指令计数并从栈弹出指令指针。在1408处确定
是否有任何通道被启用。如果是,则在1409处,增大指令指针(即,将下一指令指针设置为当
前指令指针+1)。如果不是,则在1410处,将下一指令指针设置为等于当前指令指针加跳转
偏移(即,到分岔控制流指令的IP)。

作为上述方法的结果,将当前IP与栈顶IP进行比较。如果这些值匹配,则对于具有
启用的谓词掩码位的通道,将每个每通道计数与分支类型的控制指令计数进行比较。如果
这些值匹配,则将每通道计数设置为0(指示活动通道)。如果对应于特定控制指令计数而启
用所有通道,则减小该计数并执行出栈。增大IP,程序照常继续。

本发明的实施例可以包括上面已经描述的各种步骤。这些步骤可以在可用于使通
用或专用处理器执行这些步骤的机器可执行指令中实现。可替代地,这些步骤可由包括了
用于执行步骤的硬连线逻辑的特定?#24067;?#32452;件或由编程的计算机组件和定制?#24067;?#32452;件的任
何组合来执行。

如本文所描述,指令可以指?#24067;?#30340;特定配置,例如,被配置为执行某些操作或具有
预定功能的专用集成电路(ASIC),或者存储于在非暂态计算机可读介质中实现的存储器中
的软件指令。因此,可以使用在一个或多个电子设备(例如,端站、网络元件等)上存储和执
行的代码和数据来实现图中所示的技术。这种电子设备通过使用计算机机器可读介质(例
如,非暂态计算机机器可读存储介质(例如,磁盘?#36824;?#30424;;随机存取存储器;只读存储器;闪存
设备;相变存储器)和暂态计算机机器可读通信介质(例如,电、光、声或其他形式的传播信
号(例如,载波、红外信号、数?#20013;?#21495;等)))来存储和传递(内部地和/或与网络上的其他电子
设备)代码和数据。另外,这种电子设备通常包括耦合到一个或多个其他组件(例如,一个或
多个存储设备(非暂态机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或
显示器)、以及网络连接)的一个或多个处理器的集合。该处理器的集合和其他组件的耦合
通常通过一个或多个总线和桥(也被称为总线控制器)。承载了网络业务的存储设备和信号
分别表示一个或多个机器可读存储介质和机器可读通信介质。因此,给定电子设备的存储
设备通常存储用于在该电子设备的一个或多个处理器的集合上执行的代码和/或数据。当
然,本发明的实施例的一个或多个部分可以使用软件、固件和/或?#24067;?#30340;不同组合来实现。
在整个具体实施方式部分中,出于说明的目的,阐述了许多具体?#38468;?#20197;便提供对本发明详
尽的理解。然而,对于本领域技术人员显而?#20934;?#30340;是,可以在没有这些具体?#38468;?#20013;的一些的
情况下实践本发明。在某些实例中,没有详尽描述众所周知的结构和功能,以避免模糊本发
明的主题。因此,应根据所附权利要求来?#21368;?#26412;发明的范围和精神。

关于本文
本文标题:用于SIMD结构化分支的方法和装置.pdf
链接地址:http://www.pqiex.tw/p-6091767.html
关于我们 - 网站声明 - 网?#38236;?#22270; - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
平码五不中公式规律 从零开始学炒股 股票理财 股票交易手续费怎么算 股票融资风险ˉ杨方配资 包钢稀土股票行情 股票推荐排名的有多坑 上证指数最低点 股票融资融券买入是什么意思 关于st股票涨跌限制 三板股票涨跌幅