在低功率结构中维护数据的系统和方法与流程

文档序号:15803591发布日期:2018-11-02 21:38阅读:178来源:国知局
在低功率结构中维护数据的系统和方法与流程
本专利申请要求于2017年4月18日提交的美国临时专利申请no.62/486,957以及2017年6月26日提交的美国非临时专利申请no.15/633,746在35u.s.c.§119(e)下的优先权,其公开内容以全文引用的方式并入本文中。本文公开的主题涉及图形处理单元(gpu)。更具体地,本文公开的主题涉及在低功率结构中维护数据的系统和方法。
背景技术
gpu执行可以与应用相关联的图形程序。gpu可以包括通用可编程引擎,该通用可编程引擎可以用于执行例如着色器程序(着色器)。在统一gpu架构中,可被称为着色器内核的相同可编程引擎针对特定图形配置来运行多个程序中的每个程序。考虑到图形程序的本质,gpu是具有并行运行的大线程集的高度并行的机器。高度并行的系统经常在系统的不同部分之间移动大量的数据-一种倾向于消耗相对大量功率的操作。因此,如果gpu被设计为手持设备的一部分,则低功率设计就变得极其重要。技术实现要素:示例实施例提供了gpu,其可以包括寄存器文件存储器、处理元件(pe)和加载存储单元(lsu)。寄存器文件存储器可以包括多个寄存器。pe可以耦接到寄存器文件存储器,以及pe可以处理图形应用的线程向量的至少一个线程,其中,线程向量中的每个线程要以无拖延方式来处理,以及pe可以在寄存器文件存储器中的多个寄存器的第一预定集合中存储通过处理所述至少一个线程来生成的且要向pe外部的第一可拖延逻辑单元路由的数据。lsu可以耦接到寄存器文件存储器,且lsu可以访问多个寄存器的第一预定集合中的数据并可以向第一可拖延逻辑单元路由该数据。gpu还可以包括耦接到lsu的工作订单送料存储器,其中,工作订单送料存储器能够存储与pe对图形应用的线程向量的至少一个线程的处理相关联的至少一个工作订单消息,以及其中,至少一个工作订单消息可以包括多个寄存器的第一预定集合的存储要向第一可拖延逻辑单元路由的数据的第一位置。至少一个工作订单消息还可以包括寄存器文件存储器中的多个寄存器的第二预定集合的指示在哪里存储第一可拖延逻辑单元的结果的第二位置。示例实施例提供了gpu,其可以包括pe、指令流水线解析器和lsu。该pe可以处理图形应用的线程向量的至少一个线程,其中,线程向量中的每个线程要以无拖延方式来处理。如果图形应用的线程向量的至少一个线程的指令包括向pe外部的第一可拖延逻辑单元路由数据的操作,则指令流水线解析器可以生成工作订单消息。工作订单消息可以包括存储由pe处理的且要向第一可拖延逻辑单元路由的数据的第一位置。lsu可以包括能够存储工作订单消息的工作订单送料存储器。lsu可以接收工作订单送料存储器中的工作订单消息并可以向第一可拖延逻辑单元路由第一位置处的数据。pe可以包括寄存器文件存储器,该寄存器文件存储器包括多个寄存器,其中,存储数据的第一位置包括寄存器文件存储器中的多个寄存器的第一集合。工作订单消息还可以包括寄存器文件存储器中的多个寄存器的第二预定集合的指示在哪里存储第一可拖延逻辑单元的结果的第二位置。一个示例实施例提供了处理图形应用的方法,该方法可以包括:通过处理图形应用的线程向量的至少一个线程在pe中生成数据,其中,线程向量的每个线程要在无拖延进程中处理,以及该数据可以向无拖延进程外部的可拖延进程路由;在寄存器文件存储器中多个寄存器的第一预定集合中存储数据,其中,寄存器文件存储器可以耦接到pe;由耦接到寄存器文件存储器的lsu访问在多个寄存器的第一预定集合中存储的数据;以及由所述lsu向可拖延进程路由所访问的数据。该方法还可以包括:如果图形应用的线程向量的至少一个线程的指令包括向可拖延进程路由数据的操作,则由指令流水线解析器生成工作订单消息,其中,工作订单消息可以包括多个寄存器的第一预定集合的存储要向可拖延进程路由的数据的第一位置。工作订单消息还可以包括寄存器文件存储器中的具有多个寄存器的第二预定集合的指示存储可拖延进程的结果的第二位置。一个示例实施例提供了处理图形应用的方法,该方法可以包括:如果图形应用的指令包括向可拖延进程路由数据的操作,则在指令流水线解析器处生成工作订单消息,其中,图形应用可以包括至少一个线程向量,其中,每个线程要在无拖延进程中处理,以及工作订单消息可以包括存储通过执行指令所生成的数据的第一位置;在lsu的工作订单送料存储器中存储工作订单消息;通过在图形应用的线程向量的至少一个线程上的无拖延进程中执行指令在pe中生成数据,其中,所生成的数据可以向可拖延进程路由;在寄存器文件存储器的多个寄存器的第一预定集合中存储数据,其中,多个寄存器的第一预定集合对应于第一位置,以及寄存器文件存储器耦接到pe;由lsu访问在多个寄存器的第一预定集合中存储的数据;以及由所述lsu向所述可拖延进程路由所访问的数据。附图说明在下节中,将参考附图中示出的示例实施例来描述本文公开的主题的各方面,在附图中:图1示出了根据本文公开主题的gpu系统的示例实施例;图2示出了线程束(warp)的示例实施例,该线程束包括被组织为空间维度上的八个线程和时间维度上的四个线程的对线程的单指令多线程分组;图3示出了根据本文公开主题的发射缓冲器的示例实施例;图4示出了示例字段,当确定示例发射缓冲器400要被用作tcbuf相关指令处理的一部分时指令流水线顶部解析器可以探查示例tcbuf指令;以及图5示出了根据本文公开主题在pe和lsu之间的示例存储器交互的序列图。具体实施方式在以下详细描述中,阐述了许多具体细节以便提供对本公开的透彻理解。然而,本领域技术人员将理解的是:所公开的方面可以在没有这些具体细节的情况下实施。在其他情况下,未详细描述公知的方法、流程、组件和电路,以免不必要地模糊本文公开的主题。贯穿本说明书对“一个实施例”或“实施例”的提及意味着结合实施例描述的特定特征、结构或特性可被包括在本文公开的至少一个实施例中。因此,在说明书的各个位置中出现短语“在一个实施例中”或“在实施例中”或“根据一个实施例”(或具有类似含义的其他短语)不一定均是指相同的实施例。此外,可以在一个或多个实施例中通过任何合适的方式来组合特定特征、结构或特性。就此而言,如本文所使用的,词语“示例性的”意指“用作示例、实例或说明”。本文中描述为“示例性的”任何实施例不必解释为相比其他实施例优选或者有利。此外,取决于本文讨论的上下文,单数术语可以包括相应的复数形式且复数术语可以包括相应的单数形式。还注意到:本文所示和所讨论的各个附图(包括组件图)仅用于说明目的,且未按比例绘制。类似地,仅为了说明目的来示出各种波形和时序图。例如,为了清楚,一些元素的尺寸可以相对于其他元素被夸张。此外,如果认为恰当,则可以在附图之间重复附图标记,以指示对应或相似的元素。本文中所使用的术语仅仅是为了描述具体示例实施例的目的,而不是意在限制所要求保护的主题。如本文中使用的,单数形式“一”,“一个”和“所述”意在还包括复数形式,除非上下文明确地给出相反的指示。还应该理解,术语“包括”和/或“包含”在本说明书中使用时,表明存在所述的特征、整体、步骤、操作、元素和/或组件,但是并没有排除存在或另外添加一个或多个其它特征、整体、步骤、操作、元素、组件和/或它们的组。如本文所使用的术语“第一”、“第二”等被用作跟在它们后面的名词的标签,且不暗示着任何类型的排序(例如,空间、时间、逻辑等),除非明确如此定义。此外,可以跨两个或更多附图来使用相同的附图标记,以指代具有相同或相似功能的部分、组件、块、电路、单元或模块。然而这种使用仅为了简化说明并方便讨论;其并不暗示:这些组件或单元的构造或架构细节跨所有实施例都相同或这些共同引用的部分/模块是实现本文公开的具体实施例的教导的唯一方式。除非另外定义,否则本文使用的所有术语(包括技术和科学术语)具有与本主题所属领域的普通技术人员通常所理解的含义相同的含义。例如,如本文所使用的术语“mod”意味着“模”。还应理解,诸如在常用词典中定义的术语等的术语应被解释为其含义与在相关技术的上下文中的含义相一致,而不应将其解释为理想的或过于正式的含义,除非本文明确如此定义。如本文所使用的,术语“模块”指代被配置为结合模块来提供本文所述功能的软件、固件和/或硬件的任何组合。在应用于本文所述任何实现时,术语“软件”可以体现为软件包、代码和/或指令集或指令。在应用于本文所述任何实现时,术语“硬件”可以包括例如具有单独或任何组合方式的硬连线电路、可编程电路、状态机电路、和/或存储由可编程电路执行的指令的固件。模块可以统一地或单独地体现为形成较大系统的一部分的软件、固件和/或硬件,例如(但不限于):集成电路(ic)、片上系统(soc)等。本文公开的主题提供了包括pe的gpu系统,该pe在不利用滑动缓冲器(skidbuffer)和/或可调触发器(enablableflip-flop)的情况下运行无拖延主进程。可能包括潜在未知或不可知时延在内的无拖延主进程的所有方面可以在无拖延进程外部执行,由此以无拖延方式来高效地处理潜在未知或不可知时延。在一个实施例中,gpu系统可以包括无拖延中央引擎,该无拖延中央引擎通过相对大的静态随机存取存储器(sram)与潜在拖延第二进程交换数据。无拖延中央引擎可以包括pe,该pe对sram进行动态寻址,使得无拖延主进程可以生成数据并在sram中存储数据。潜在拖延第二进程可以访问sram,以针对所存储数据来执行附加功能,用于具有未知或不可知时延的操作。因此,本文公开的gpu系统的高效存储结构允许生成并在该存储结构中保持可被用于满足无拖延主进程中的操作但可具有可拖延方面的输入,直到诸如第二进程可以完成潜在可拖延方面之类的时间为止。附加地,与包括拖延流水线的传统图形pe相比,该pe的无拖延特性允许该pe被配置为使用较少的芯片面积并耗散较少的功率。即,无拖延主进程通过sram来交换数据的配置提供了使用最少量存储空间的相对低功率的gpu系统。与可以在传统gpu中使用的将存储器制造为触发器(flip-flop)相比,当前用于将存储器制造为sram的技术允许相对大的sram在面积和功率方面更有效率。附加地,与使用大量相对较小的sram相比,如本文所公开的使用较少数量的相对较大的sram可以更有效,这是因为与大量相对较小的sram相比,内部sram结构可以在较少的相对较大的sram上更高效地分摊。在一个实施例中,pe可以耦接到在本文中被称为向量寄存器文件(vrf)的相对大的sram,该向量寄存器文件(vrf)可以保持由pe执行的无拖延进程正发出的数据。该数据可以是响应于指令集架构(isa)的显式发射指令来发出的,或者可以是作为可能引起数据离开pe的任何其他指令的一部分而隐式发出的。被发出的具体数据可被包含在作为vrf的一部分的可识别发射缓冲器中。从编程角度来说,使用发射缓冲器可以是高效的,因为未使用显式指令时隙,由此消除了与附加程序获取能量和时延相关联的开销,并减少程序存储空间。在一个实施例中,gpu系统可以提供着色器内核引擎,该着色器内核引擎可以用无拖延方式工作,且可以在不将触发器组用于数据输入和输出的情况下在无拖延着色器内核引擎之外执行可能拖延的任何操作。着色器内核引擎可被配置为使得内核中的操作始终使用相同数目的周期。由着色器内核引擎正处理的所有大数据保留在基于sram的寄存器文件中,且对特定寄存器文件的管理可以是以下各项的组合:可以在编译时执行对寄存器文件配置的各种优化的着色器程序编译器、以及可以在操作期间提供寄存器的精确地址的一个或多个运行时定序器。通过基于sram的寄存器文件来互换数据可以是灵活的,且可以涉及与在基于sram的寄存器文件内的寄存器文件分配相关的最少编译器知识。因此,与传输在消息内包括所有扩展部分的整个大数据消息相对比,本文公开主题实质上提供了通过引用(而不是通过值)来调用的进程,其中,较小的描述或工作订单指示了在哪里找到向可拖延引擎发送的大消息的各部分。取代按图形应用所呈现的精确顺序来显式运行着色器程序的所有指令,本文公开主题可以允许操作(在现代gpu的通用处理器部分中的已编译指令)要么按顺序执行,要么在操作的任何方面包括未知时延方面(例如,对某个外部资源的依赖性)时可以引起将操作放在队列中供稍后处理。从而,本文公开主题提供了针对小指令集的高效解耦技术,其提供了处理队列中放置的操作(例如,存储器i/o(即,纹理和属性获取))和内核外的其它图形操作的具有可拖延辅助处理单元的高效无拖延核心,尽管指令操作可以不按应用提供的顺序来实际运行,指令操作逻辑上保持顺序,其中,可能拖延的指令在单独队列中运行。在本文公开的gpu系统的一个实施例中,着色器的通用处理可以由可被分组为一个或多个pe集群(pec)的一个或多个pe来执行。如本文所使用的pe指代能够按无拖延方式来执行指令流的通用处理器。如本文所使用的pec指代形成并行处理阵列的多重pe。在一个实施例中,可以是每pec四个pe。在另一实施例中,每pec的pe数目可以不同于每pec四个pe。对于每个周期,pe在线程集中的每个线程或线程束上处理相同的指令。为了高性能,pe可以是多线程机器。在一个实施例中,pe可以是单指令多线程(simt)引擎。如本文所使用的线程指代可以执行指令的控制点。如本文所使用的轨迹(trace)指代在无拖延连续序列中运行的指令集。轨迹可以使用一个或多个周期来执行。例如,一个周期可以专门用于轨迹中的每个指令。每个线程的活跃状态可以由执行掩码中的相应比特来控制。如本文所使用的,线程束(warp)是多个线程的集合,且线程束可以指代周期中执行的所有线程。在pe上执行的程序可以包括一个或多个轨迹,且可以利用外部可拖延单元,例如lsu。如本文所使用的lsu指的是处理诸如加载和存储等的可拖延操作以及其它潜在可拖延操作(诸如,但不限于,纹理访问或共享资源(例如数学协处理器等)的使用)的处理单元。一个或多个lsu可以与每个pec相关联。图1示出了根据本文公开主题的gpu系统100的示例实施例。gpu系统100可以包括控制器单元101、pec102、gpu系统100的其它单元103、以及在pec102和其它单元103之间的通信结构104。控制器单元101可以耦接到pec102和其它单元103,以提供对gpu系统100的操作的整体控制。其它单元103可以包括可拖延单元,例如(但不限于):纹理单元、光栅化单元、图像缓冲单元、超越运算单元、共享存储器、数学协处理器单元、一级高速缓存、插值属性单元以及片上网络(noc)。pec102可以包括工作向量构造器105、一个或多个pe106、一个或多个lsu107和定序器108。如图1所示,pec102可以包括四个pe106,然而pec102可以包括任何数目的pe106。取决于相对处理要求,单一lsu107可以为多个pe106服务,由此进一步减少了整体面积和存储要求。在图1所示示例实施例中,pec102的两个pe106可以利用单一lsu107,然而pec102可以包括任何数目的lsu107。工作向量构造器105、pe106、lsu107和定序器108中的一个或多个可以体现为模块。每个pe106可以包括vrf109和标量寄存器文件(srf)110。如本文所使用的vrf指代通过提供每线程存储来支持pe106的相对大的存储器,且其一般可以由pe106和与pe106相关联的lsu107来访问。如本文所使用的srf指代通过提供标量数据存储来支持pe106的存储器,例如但不限于线程执行掩码。vrf109一般可以远大于srf110。另外,vrf109和srf110可以被配置为提供充足的存储,以允许可以在pe106上执行的多个线程束之间进行切换,以在由于线程束可能等待资源而导致一个或多个线程束不能进行的情况下最大化效率。在一个实施例中,vrf109和srf110可以由sram形成。工作向量构造器105耦接到一个或多个pe106和定序器108。工作向量构造器105进行操作以组装被放入由pec102处理的线程中的工作项目。在图形的情况下,工作项目可以包括但不限于要处理的像素或顶点。定序器108可以包括指令流水线顶部(totip)解析器108a,指令流水线顶部(totip)解析器108a可以包括对pec102执行的程序指令进行解析的逻辑,以确定指令是否可以包括可拖延方面,如果包括,则totip解析器108a生成本文中称为工作订单的消息,该消息可被存储在lsu107中的工作订单送料器111中。如本文所使用的,工作订单可以是指令包,其可以包含发射缓冲器(在vrf109和/或srf110中)的位置以及要针对发射缓冲器中的数据执行的一个或多个动作(即,数据操纵)。pe106可以进行操作,以处理形成线程束的多个线程,其中,线程束的每个线程是不可拖延的。由于gpu系统100的线程并行特性,pe106可以发起的很多消息可以较大。从而,pe106可以是大量大数据的产生器,且相关联的lsu107可以路由该大数据,并且在一些情况下可以“实时(inflight)”操作数据,例如如果数据可能包含用于加载或存储的地址阵列,该地址阵列可以被合并,以改进去往和/或来自高速缓存的访问的效率。pe106和lsu107之间的交互可以通过vrf109和srf110,使得可以在发送和存储固有大量数据的能量和开销方面最小化成本。由pe106生成的大数据保持在vrf109和/或srf110本地,直到其可由其他单元103使用。lsu107可以包括针对pe106的vrf的专用接口,和/或可以周期挪用针对pesram的读/写访问端口。线程束可以被配置为在空间维度和时间维度上管理线程。图2示出了线程束200的示例实施例,线程束200包括被组织为空间维度上的八个线程和时间维度上的四个线程的32个线程201的simt分组。在四个周期上并行工作的八个线程如图2所示在时间/空间上实现32个工作单元。执行宽度为八的特性可以由八路(eightlane)pe106来处理,即并行的八个算术逻辑单元。时间维度上的四个线程可以作为计算单元流水线中的四个系统时钟节拍来管理。在本文中可以将四节拍组织称为“轮(pass)”。应当理解的是,本文公开的主题可以支持vrf109和srf110中任意数目的线程束和任意数目的寄存器文件。线程束中的每个线程可以具有独立资源以及线程可以操纵的数据,因此线程束的线程数据量可以变得较大,特别是在数据是浮点值的情况下。例如,每次指令调用线程的任何数据时,三十二个32比特值形成了1k比特数据。线程束的较宽宽度可以既用于pe106内部的操作,也可以用于在与外部单元(即,图1中的其他单元103)通信时的操作。回到图1,除了在pe106和lsu107之间的分工(即pe106产生数据,lsu107路由并操作数据)之外,在创建数据时和在lsu107处理数据时之间也可以存在延迟。如果lsu107在该时刻碰巧被pec102的另一pe106占用,或者由于等待来自另一单元103的响应而延迟,则延迟的范围可以从几乎零到相当长的时间。与在lsu107中具有较大缓冲器不同,可以在pe106的vrf109内的逻辑形成的子缓冲器中保持pe产生的大数据。这种子缓冲器在本文中可称为发射缓冲器300(图3)。发射缓冲器300可以保持正被pe106发出的数据,不管是由于isa中的显式发射指令还是由于隐含地作为使得数据要离开pe106的任何其他指令的部分。pe106可以计算写入发射缓冲器300的位置以及lsu107可以从发射缓冲器300读取的位置。lsu107对来自pe106的数据向pe106外部的系统100的其余部分的分发进行管理。在一个实施例中,lsu107可以包括可变深度队列,在本文中被称为工作订单送料器111。如本文所使用的,工作订单送料器指代可以用于从gpu系统100的无拖延引擎(即,pe106)向可拖延引擎部分传递工作订单的输入队列结构。在一个实施例中,工作订单送料器111的深度可以设置为16。在其他实施例中,工作订单送料器111的深度可以不同于16。工作订单送料器111可以是小于vrf109的存储器,但是能够在不负面影响主pe执行引擎的情况下支持对工作订单指令的后台执行。工作订单送料器111的实际维度可以是完全灵活的。由totip108a写入的工作订单放在lsu107的工作订单送料器111中,且可以按到达顺序来处理,但是与引发的pe指令是异步的。即,lsu107可以按工作订单送料器111中将工作订单加入队列的相同顺序来处理工作订单送料器111中的工作订单。备选地,如果lsu107可以为多于一个pe106服务,则lsu107可以使用循环(round-robin)或其它仲裁方案来选择接下来要服务哪个工作订单/pe。进程的涉及到lsu107的部分开始于:定序器108中的totip解析器108a解析指令并向lsu107中的工作订单送料器111发送工作订单。在一个实施例中,从定序器108到lsu107的工作订单送料器111的路径中的时延可以充分长,使得pe106所涉及的用于产生要由工作订单所加工的数据的任何操作都可用。表1阐述了示例四字段32比特工作订单的一个实施例,其提供了可以用于处理vrf109和/或srf110中的数据的最少量信息。表1阐述了32比特工作订单的示例配置。第一字段(比特[31∶24])可以用于选择或识别工作订单,以及随后的[23∶15]比特可以提供针对工作订单的修饰符。随后的[14∶7]和[6∶0]字段可以分别用于访问pe的vrf和srf中的数据。在lsu107处理工作订单期间,可能需要例如掩码和其它数据来正确执行工作订单并向恰当的寄存器文件返回工作订单的结果。表1[31∶24]8比特类型工作订单[23∶15]9比特工作订单特定字段[14∶7]8比特vrf位置[6∶0]7比特srf位置图3示出了根据本文公开主题的发射缓冲器300的示例实施例。发射缓冲器300可以是位于形成pe106的vrf109的、且已被分配给线程束的寄存器集合内的一系列寄存器位置。可基于指示了特定vrf空间位于特定线程束的哪里的warpid.rfbase寄存器中包含的信息,将pe106的vrf109划分为空间集合。可以在定序器108中维护warpid.rfbase寄存器。在一个实施例中,存在定序器108控制的针对每个pe的这些寄存器中每个寄存器的副本。因此,vrf109可以被配置为包含多个发射缓冲器300。可以基于例如warpid.rfbase寄存器的内容加上warpid.emitbase寄存器的内容来定位并访问特定发射缓冲器300。可以在定序器108中维护warpid.emitbase寄存器。随着向发射缓冲器添加条目(如由totip解析器108a所确定的),定序器108递增warpid.emitbase寄存器。在一个实施例中,发射缓冲器300的生命周期可以等同于轨迹的长度。从而,可以在单一轨迹内创建和消费发射缓冲器300中的数据。如图3所示,vrf109包括寄存器r0、r1、...的布置,寄存器被分配给一个或多个线程束中的每个线程束。应当理解的是:尽管在图3中仅示出了线程束301a-301c,但vrf109可以包括任意数目的线程束。每个线程束301可以被配置为包括例如32个线程,其可以类似于图2所示的示例线程束。发射缓冲器300中的数据与向lsu107的工作订单送料器111发送的工作订单直接相关。更具体地,发射缓冲器109中的数据可以包含要由pe106发出的大的向量值,且相应工作订单可以包含与发射缓冲器300中的数据有关的特定请求。随着例如着色器程序的指令执行,如果存在要从pe106向可拖延单元103传递的数据,则可以将要传递的数据寄存在pe106的vrf109内的发射缓冲器300中。可以在设计时(即,合成时)确定可以导致向发射缓冲器发出数据的isa级指令的确切列表,或者可以在运行时维护的表中将该isa级指令的确切列表以表形式列出。表2中阐述了示例指令列表。在任一情况下,在运行期间,每次指令由例如定序器108中的totip解析器108a解析时,可以确定指令是否在pe106中完全运行,或者指令是否还可以包括可以在lsu107中加入队列以供进一步可拖延处理的指令部分。图3可以示出以下示例情形:轨迹执行已执行了指定例如以下各项的指令:纹理坐标缓冲器、利用64比特地址的输出存储器访问、然后针对输出寄存器的两次不同写入(o#)。如本文所使用的纹理坐标缓冲器(tcbuf)指代可以用于接收和存储纹理坐标的远程存储元件(即,远离vrf)。在图3中执行的轨迹还可以包括指令,例如fmultcbuf2,r1,r2,其可以引起在发射缓冲器300的第一条目中放置乘积r1×r2。fmul指令中tcbuf目的地的下标“2”可以是工作订单的一部分,该工作订单可以是要向lsu107的工作订单送料器111发送。当lsu107执行该工作订单时,lsu107向vrf109发出请求,以访问发射缓冲器300的位置,以及在标签指定例如tex.ta.tcbuf(即,纹理单元中寻址子模块中的纹理坐标缓冲器)的情况下(其指示了操作是纹理坐标缓冲器加载操作且正被访问的tex.ta.tcbuf是编号2),则要写入到tex.ta.tcbuf的数据向量在vrf109中被识别为发射缓冲器109的位置处可用。应当注意到:针对如“加载”或“存储”操作之类的操作的引用与正被服务的单元或存储器有关。即,进入到纹理缓冲器单元实体中的写入被称为“加载(load)”,例如“tcbufload”,即使从lsu107或pe106的角度来说,该操作也可以被视为存储操作。继续图3所示示例情形,在轨迹的指令中的稍后的某个时间,可以存在利用64比特地址的存储器访问。这可以导致由pe106向发射缓冲器300中写入两个32比特地址部分。在vrf109中维护大的向量数据(即,地址),并且可以在lsu107基于lsu107的工作订单送料器111中的工作订单向vrf109发出请求时向lsu107传输该存储器操作。在轨迹中再稍后,可以存在引用输出寄存器(即,o#)的指令,例如指令faddo3,r14,r6,其导致图3所示的特定情形。发射缓冲器300可以包含要向o[3]写入的向量值,且工作订单包含常数“3”。随后,第二输出寄存器写入发生且可以向发射缓冲器300写入第二向量,以及相应地向lsu107的工作订单送料器111发送第二o#工作订单。着色器程序的当前着色器类型可以由pec.wsq.totip寄存器来指示。pec.wsq.totip寄存器可以位于定序器108中。除了其他用途之外,着色器类型还可以用于区分如何处理o#操作。还可以在向lsu107发送的工作订单中指示o#是否针对前端着色器(在该情况下,输出寄存器写入是针对共享存储器的),或者o#是否针对像素着色器(在该情况下,输出寄存器写入是针对光栅化子系统的)。表2阐述了isa指令(或指令变体)的示例列表,例如在向纹理坐标缓冲器写入的情况下,其可以包括与发射缓冲器300相关联的动作。表2阐述了包括发射缓冲器动作在内的示例指令和指令变体。表2中的题为“指定形式”的第二列指示了定序器108可以通过totip解析器108a来检验什么字段以确定发射缓冲器300是否可以用于特定指令。对于一些情况,对指令操作码(opcode)的探查可能足够了,但是在其他情况下,可以进一步限定(qualify)该确定。表2根据表2中的第二列,检测指令是否包括发射缓冲器操作可以不仅涉及对主/次操作码进行解码,还涉及对其他比特进行解码,并且可能需要探查指令字中的附加字段。例如,可以将双精度浮点运算可以与单精度浮点运算区分开,因为仅双精度浮点运算可以调用发射缓冲器动作,反之单精度浮点运算可以在pe106内计算,而无需定序器108的任何额外动作,也无需lsu107的任何交互。在双精度或单精度浮点运算之间的区分可以包括探查指令的精度类型字段。在表3中提供totip解析器108a如何检测表2所示情况的附加细节。表3阐述了用于识别引发发射缓冲器的场景的附加细节。在一个实施例中,表3的最右侧两列分别呈现了当处理特定指令时在发射缓冲器300中消耗的向量和标量寄存器的数目。图4示出了示例字段401,其中,当确定示例发射缓冲器400要用作处理tcbuf相关指令的一部分时totip解析器108a可以探查示例tcbuf指令。表3出于时序原因,在向pe106发送指令之前,totip解析器108a可以不修改轨迹中的任何指令,而取而代之的,可以在恰当的情况下提供备选目的地字段比特,pe106可以在流水线中稍后使用该备选目的地字段比特来代替指令中的目的地字段比特。用于确定表3所示的vrf和srf条目的数目的一般规则可以包括以下考虑因素。对于发射缓冲器的分配,可以存在两个计数器emitvrf和emitsrf,其中取决于手头上的指令,可以针对每个源或目的地向量来分配0、1或2个vrf条目。可以将vrf分配指针递减所分配的vrf条目的数目。可以分配四个srf条目,以包含报头、执行掩码以及各种其他字段。每个srf条目的确切维度以及存在的条目数目可以由设计考虑因素来决定。可以从s63..s60开始分配第一srf块,并以4为单位向下延伸。在完成指令时,可以从totip解析器108a向lsu107的工作订单送料器111传递工作订单。lsu可以读取srf和vrf条目。在另一实施例中,到向量和标量寄存器文件中的寻址可以进行向下计数,从而在轨迹开始处,emitvrf可以是vrfsize-1且emitsrf可以是60..63。如果vrf空间未用作发射缓冲器中的条目,则编译器可以使用未分配空间来保持持久数据,由此减少gpu系统100所需的总存储器占用。发射缓冲器可以从根本上受到srf中存储的报头的数目的限制。在一个实施例中,可以允许八个srf报头。编译器可以通过不在会被报头盖写的srf条目中放置持久数据来使用更多的报头。具体地,可以向双精度单元发送的示例指令fmad.64仅可以使用一个srf报头,但是可以使用六个vrf条目来提供三个64比特操作数,其中每个vrf是32比特条目的向量,因此是成对使用来形成操作数。所消耗的srf报头的最大数目可以是每isa指令一个。发射缓冲器可以提供用于远程单元{超越,双精度,纹理地址计算,...}的操作数。远程操作可能需要一个或多个操作数,例如sin(x)或a*b分别涉及一个或两个操作数。可以将“动态”源操作对象复制到发射缓冲器中新分配的条目。动态操作数可以是可以来自于例如以下各项的操作数:标量寄存器、常量暂存寄存器、可以被移动到发射缓冲器位置的立即值(以例如存储isa级别的立即值)或者转发值(即,可以直接使用而不是作为中间步骤已存储在vrf中的先前指令的输出);或本地临时寄存器。每个这样的操作数可以消耗发射缓冲器条目。发射缓冲器条目可以占用发射缓冲器中的一个{q,h,s}或者两个{d}向量。如本文所使用的,首字母q、h、s和d分别代表四分之一、二分之一、单倍和双倍宽度,且分别表示8、16、32和64比特量。在一个实施例中,使用发射缓冲器的每个指令可以消耗作为报头之用的一个发射缓冲器报头(四个srf条目)。如果可以在远程单元中计算指令,vrf源操作数不占用发射缓冲器,而是可以从其源位置直接访问。发射缓冲器中的这种非条目(non-entry)依然可以消耗四个srf条目,该四个srf条目用作例如执行掩码等的报头。如果指令通过发射缓冲器来传递结果,则该结果可以由非远程计算指令来产生,从而源发射缓冲器使用和目的地发射缓冲器使用可以是正交的。如果指令通过发射缓冲器来传递结果,则可以向发射缓冲器条目分配一个或两个vrf条目以及四个srf条目。可以将计算的结果放在所分配的条目中。可以设立标量寄存器文件,使得lsu107可以在恰当时间向作为目标的功能单元路由数据。图5示出了根据本文公开的主题在pe106和lsu107之间的示例存储器交互的序列图500。在图5中501处,totip解析器108a(图1)解析作为例如正在被执行的着色器程序的指令流的一部分的指令,且作为指令的操作的一部分,确定应当将该指令仅定向到系统的无拖延进程还是定向到系统的无拖延进程和可拖延进程这二者。对于该示例,totip解析器108a确定应当将该指令定向到无拖延进程和可拖延进程这二者,因此在502处,向pe106发送指令(例如,向vrf109写入)以执行,以及在503处,向lsu107的工作订单送料器111发送工作订单。该工作订单可以包含与要被该指令操作的发射缓冲器的位置有关的信息。对于可以具有相关联返回值的任何操作(其可以是除了存储操作之外的实质上所有操作),工作订单送料器111中的工作订单还可以包括与数据返回要返回到哪里(即,pe的vrf109中的哪里返回数据)有关的小指针。形成工作订单的操作的一部分还可以包括pe106的某些功能。可以引起向lsu107的工作订单送料器111输入工作订单的指令示例可以包括加载(但不限于从存储器加载)、向存储器存储、原子存储器操作、向纹理坐标缓冲器发送数据、针对经滤波的纹理样本的请求、超越运算、对数和反对数函数、倒数、倒数平方根、从属性插值器读取以及双精度运算。一些操作可以是图形特定的,例如引用纹理和属性插值器的操作,然而应当理解的是,可以经由工作订单送料器中的工作订单来访问可以在无拖延pec102之外的任何可拖延单元103。例如,考虑指令sinr3,r2,其可以用于计算寄存器r2中的值的正弦并将结果放在寄存器r3中。诸如超越运算之类的运算可以在pe106的外部执行,例如在呈现可拖延时序简档的共享数学协处理器(即单元103)中。totip解析器108a对sin运算进行解码,并生成工作订单,同时还向pe106提供指令。pe106可以负责任何本地处理,例如操作数范围减小,以及还可负责保存在执行超越运算的向量时可以由协处理器使用的相关信息。gpu架构100的高度并行特性允许针对pe操作的整个线程向量来给定sin指令。从而,pe106、lsu107以及超越单元103(未示出)都必须能够在遭遇sin指令时实际上访问特定向量状态。这包括其他信息,该其他信息包含以下字段,例如但不限于:可以用于指示哪些线程可以活跃或可以不活跃的掩码、针对函数的任何虚拟化指针(例如,寄存器重命名)、以及任何其他模式(即,精度、格式转换等)。所有字段形成了大数据量,该大数据量对于在lsu107中的队列中存储来说是昂贵且麻烦的。相反,保持小指针作为针对pe106中vrf109和srf110的大本地存储的引用,其中大块数据保持在原位。稍后在504处,lsu107处理工作订单送料器111中的工作订单,并在505处对pe106的vrf109和/或srf110中的数据进行一次或多次访问。某些操作可以是一元的且可以涉及单个存储器访问,而其他操作(例如,原子比较和交换操作)可以涉及三个操作数和相应数目的访问。在一个实施例中,可以在工作订单中使用8比特值来引用操作数,即使每个操作数的大小可能是1024比特(三十二个32比特操作数),因此面积和功耗的节约可以是显著的。作为要由lsu107来操作的在vrf109和/或srv110中存储的数据可以在506被访问,并在507例如通过解析、格式化和/或路由到目的地单元103来被处理以根据指令进一步处理。如果在507处完成处理,则在508处向totip解析器108a发送依赖性清除消息。如果在507处要访问单元103,则在509处确定访问类型。如果访问是写入,则在510处执行该写入。如果访问是读取,则在511处执行读取,在512处格式化以在513处存储在vrf109中。作为另一示例,考虑在pe106中运行的示例着色器程序,其要向纹理坐标缓冲器写入数据以作为准备访问纹理映射的一部分,这可以是计算机图形中的标准操作。纹理单元103可以是主子系统,其可以在各种处理引擎之间共享并可拖延,因此可以呈现不可知的时延。因此可以经由作为相对于无拖延pe106的外部单元的lsu107来访问纹理单元。访问纹理坐标缓冲器可以涉及以下序列。totip解析器108a可以对针对tcbuf的引用进行解码,向pe106提供发射缓冲器地址,并生成要在lsu107的工作订单送料器111中存储的工作订单。pe106计算要向纹理单元103路由的数据,并将这些数据存储在与totip解析器108a所提供的发射缓冲器地址相对应的寄存器中。lsu107接收并处理工作订单,且针对要向纹理单元103写入的数据向vrf109中的发射缓冲器发出读取请求。纹理单元103接收该数据并向纹理单元103的存储器写入该数据。在一个实施例中,可以使用指令中的特殊tcbufn目的地字段在着色器程序中对写入纹理坐标缓冲器进行编码。例如,示例指令fmultcbufr1,r2可以操作以在编译器的软件控制下发起针对纹理缓冲器tcbuf的加载。在运行时,可以解析指令,且可以检测特殊tcbufn目的地字段的存在。响应于此,totip解析器108a可以确定应当用pe106的vrf109中的实际位置(即发射缓冲器300中的下一个可用空间)来替换指令中的tcbuf。此外,可以向lsu107的工作订单送料器111输入与该位置相对应的工作订单。pe106可以接收经修改的指令,例如fmulremitr1,r2,其中remit可以是由简单示例计算remit=warpid.emitbase[7∶0]所填写的值。此外,totip解析器108a还可以向pe106提供一对信号,其指示可以保存执行掩码以及在srf110中保存执行掩码的地址。然后totip解析器108可以生成针对lsu107的工作订单,其可以包含用于向tcbuf移动数据的操作码并提供针对tcbuf的地址。对于本示例,在工作订单处理期间,一旦lsu107能够访问纹理单元103(即,在任何给定时刻纹理单元103可能可用或者可能不可用,并可能呈现变化的时延和吞吐量),lsu107可以发送消息,在该消息中lsu107提供:1024比特数据(在一个实施例中,作为256比特/周期),包含三十二个32比特fp32字或六十四个16比特fp16半字;以及执行掩码比特,其可以由纹理单元用来将处理限制为仅活跃线程,其可以通过针对不活跃线程不更新tcbuf值来用于功能正确性且节约功率。注意,从pe的角度来说,本特定示例序列是只写(write-only)操作。着色器程序已向纹理坐标缓冲器写入,且在pe106内的无拖延序列之外的某个时间,该操作完成。稍后,当着色器程序可以从纹理单元读取时,可以生成新的工作订单,其可以请求该读取并提供针对vrf109中的要被写入返回数据的地址。如本领域技术人员将认识到的,可以在较广应用范围上对本文所描述的创新构思进行修改和改变。因此,所要求保护的主题的范围不应当限于以上所讨论的任何具体示例教导,而是由所附权利要求来限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1