Gpu发散栅栏的制作方法_5

文档序号:9816368阅读:来源:国知局
时能够将尽可能多的发散线程束一起分组到压缩池中。通过 一次压缩一个栅栏,此技术可通过在后续发散栅栏的压缩期间实现压缩池中的较大数目的 线程束的压缩而提高线程压缩的效率。
[0083]在多个栅栏的情况下,GPU 12可较早开始对发散栅栏执行压缩,即,当队列不完整 时,以同一方式且在上文所描述的同一条件下。那些条件可包含(例如)含有传统栅栏的核 心程序,或引发频繁长时延操作。
[0084] 当多个发散栅栏存在于核心中且与线程束相关联的布尔表达式为至少一个线程 束线程评估为真时,GPU 12将线程束放置到队列中且使前缀与线程束相关联。前缀指示线 程束已到达的特定发散栅栏。作为一个实例,调度器24可将例如"Γ的前缀附加到与线程束 140、146、148、152和154中的每一者相关联的标识符,以指示那些线程束已到达发散栅栏 DB1。调度器24可将类似前缀(例如,"2"、"3")添加到线程束144和150,以分别指示那些线程 束已到达发散栅栏DB3和DB2。
[0085] DBM 52将线程束140、142、144、146、148、150、152和154中的每一者存储在队列中。 线程束140至154起初未排序且与基于线程束已到达的发散栅栏的前缀相关联。DBM 52起初 基于与线程中的每一者相关联的前缀将线程束140、142、144、146、148、150、152和154排序, 且基于前缀数字将线程束一起分组到压缩群组中。
[0086] 具有对应于最早发散栅栏(例如,DB1)的前缀的线程束的群组被称作"压缩池"。在 图1的实例中,压缩池156包含线程束140、146、148、152和154,所述线程束中之全部已到达 发散栅栏DB1,且因此包含同一前缀。
[0087]如上文所描述,GPU 12基于前缀(其基于达到的发散栅栏数目导出)和后缀(其与 每一线程束中的活动线程的数目相关)将压缩池156的线程束排序。在GPU 12暂停栅栏上的 全部线程束(除了已结束执行的那些)并将暂停的线程束插入到队列且将队列中的线程束 排序中之后,GPU 12将第一线程束群组(其表示队列中的最前面的栅栏)从队列分离且形成 具有此群组的压缩池 。GPU 12随后通过将压缩池中的具有大量活动线程的线程束的非活动 线程与压缩池中的具有大量非活动线程的线程束的活动线程调换来执行线程压缩,直到非 活动线程束可不再从压缩池的线程束产生为止。一旦GPU 12结束任何新线程束的线程压 缩,DBM 52将线程束从压缩池156释放以供执行。
[0088] 同时,队列可在它们恢复如上文所描述的执行之后继续接收暂停于任何栅栏上的 线程束。GPU 12可将新近接收到的线程束排序且将其排序在队列中以及使用如上文所描述 的插入排序将现有线程束。一旦全部线程束已暂停于发散栅栏上且移动到中队列,或结束 执行且随后退出,GPU 12将当前第一线程束群组从队列分离以形成压缩池,且对压缩池执 行压缩。
[0089] -些核心应用程序可需要甚至执行核心的线程的调部。对步调(线程以所述步调 执行)敏感的核心还可使发散栅栏的使用复杂化。举例来说,当执行发散栅栏已添加到其的 此类步调敏感核心时,一些线程束可到达发散栅栏且暂停,而其它线程束可不暂停于发散 栅栏处直到很久之后暂停在核心的指令序列中为止。因此,发散栅栏可导致不均匀的线程 和线程束调步。为使具有第一相关联布尔条件的第一发散栅栏周围的线程调步均匀,编程 器可插入具有为第一布尔条件的布尔补充的第二相关联布尔表达式的第二发散栅栏指令。
[0090] 以下伪代码说明此技术:
[0092]在以上伪码中,GPU 12执行包含与第一布尔条件相关联的第一发散栅栏指令的循 环。代码包含环路外部的第二发散栅栏指令,所述环路具有为第一布尔条件的补充的第二 布尔条件。因为第二布尔条件所述第一的补充,因此GPU 12将暂停第一或第二发散栅栏指 令处的每一线程束,进而确保恒定的线程调步。
[0093]图6为说明根据本发明的技术的用于执行发散栅栏指令的技术的流程图。GPU 12 可经配置以执行图6中所说明的方法。在一些实例中,GPU 12可为多个线程束中的每一线程 束确定对于每一线程束的对应线程布尔表达式是否为真(200) APU 12可暂停执行具有对 于其表达式为真的对应线程的每一线程束(202),且确定对于其表达式为真的多个线程束 中的每一者的活动线程的数目(204) APU 12可基于多个线程束中的每一者中的活动线程 的数目将对于其表达式为真的多个线程束排序(206) APU 12可随后将多个线程束中的第 一线程束的活动线程的线程数据与多个线程束中的第二线程束的非活动线程的线程数据 调换(208),且恢复执行对于其表达式为真的多个线程束中的至少一者(210)。
[0094]在不同实例中,图6的方法可进一步包括在恢复执行多个线程束中的至少一者之 前调换对于其表达式为真的多个线程的每线程上下文数据48。活动线程的线程数据可包括 活动线程的寄存器数据,且非活动线程的线程数据可包括非活动线程的寄存器数据。在一 些实例中,将多个线程束排序可包括使用插入排序将多个线程束排序。
[0095]在一些实例中,GPU 12可为对于其表达式为真的多个线程束中的每一线程束进一 步确定多个发散栅栏中的相关联发散栅栏,且基于每一线程束的相关联发散栅栏将多个线 程束中的每一线程束分组到多个压缩池中。为将多个线程束排序,GPU 12可经进一步配置 以将多个线程束排序,包括将属于多个压缩池中的同一者的多个线程束排序。在不同实例 中,第一线程束和第二线程束包括属于多个压缩池中的同一者的线程束,且为恢复执行对 于其条件为真的多个线程束中的至少一者,GPU 12可经配置以恢复执行同一个压缩池的至 少一个线程束。
[0096]在一些实例中,GPU 12可基于与多个线程束中的每一者相关联的发散栅栏进一步 将前缀指派到多个线程束中的每一者,且为将多个线程束分组到至少一个压缩池中,GHJ 12可基于所指派的前缀将多个线程束分组到至少一个压缩池中。
[0097]在又其它实例中,GPU 12可进一步确定多个线程束包含具有全部活动线程的线程 束;以及恢复执行具有全部活动线程的线程束。在又另一实例中,为将对于其表达式为真的 多个线程束排序,GPU 12可经配置以将多个线程束存储在队列中,基于活动线程的数目将 对于其表达式为真的多个线程束排序,且将经排序多个线程束存储在队列中。
[0098] 在又另一实例中,编译程序/驱动程序18可经进一步配置以确定很可能发生发散 的位置和将显著影响执行在多个线程束上的核心20内的性能的位置中的至少一者。编译程 序/驱动程序18可将发散栅栏指令插入到至少一个位置的核心中。图6的方法的布尔表达式 可与在此实例中的发散栅栏指令相关联。
[0099] 本发明中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。举例 来说,所描述技术的各种方面可实施于一或多个处理器中,包含一或多个微处理器、数字信 号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效集成或 离散逻辑电路,以及此类组件的任何组合。术语"处理器"或"处理电路"可大体上指前述逻 辑电路中的任一者(单独或结合其它逻辑电路)或例如执行处理的离散硬件等任何其它等 效电路。
[0100]此硬件、软件和固件可实施于相同装置内或单独装置内以支持本发明中所描述的 各种操作和功能。另外,所描述单元、模块或组件中的任一者可一起或单独作为离散但可互 操作逻辑装置而实施。将不同特征描述为模块或单元意图强调不同功能方面且未必暗示此 等模块或单元必须由单独硬件或软件组件实现。确切地说,与一或多个模块或单元相关联 的功能性可由单独硬件、固件和/或软件组件执行,或集成到共用或单独硬件或软件组件 内。
[0101]本发明中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令 的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可致使一或多个处理 器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。计算机可读存储媒 体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储(PROM)、可擦除可编程 只读存储器(EPROM )、电可擦除可编程只读存储器(EEPR0M )、闪存、硬盘、CD-ROM、软盘、卡 盒、磁性媒体、光学媒体或其他有形计算机可读存储媒体。
[0102] 计算机可读媒体可包含计算机可读存储媒体,其对应于例如上文所列的有形存储 媒体的有形存储媒体。计算机可读媒体也可包括通信媒体,其包含促进计算机程序从一个 地点到另一地点的传送(例如,根据通信协议)的任何媒体。以此方式,短语"计算机可读媒 体"大体上可对应于(1)非暂时性有形计算机可读存储媒体,和(2)例如暂时性信号或载波 等非有形计算机可读通信媒体。
[0103] 已描述各种方面和实例。然而,可在不脱离以下权利要求书的范围的情况下对本 发明的结构或技术作出修改。
【主权项】
1. 一种由至少一个可编程处理器执行的方法,所述方法包括: 为多个线程束中的每一线程束确定布尔表达式对于每一线程束的对应线程是否为真; 暂停执行具有对于其所述表达式为真的对应线程的每一线程束; 确定对于其所述表达式为真的所述多个线程束中的每一者的活动线程的数目; 基于所述多个线程束中的每一者中的活动线程的所述数目将对于其所述表达式为真 的所述多个线程束排序; 将所述多个线程束中的第一线程束的活动线程的线程数据与所述多个线程束中的第 二线程束的非活动线程的线程数据调换;以及 恢复执行对于其所述表达式为真的所述多个线程束中的所述至少一者。2. 根据权利要求1所述的方法,所述方法进一步包括: 在恢复执行所述多个线程束中的所述至少一者之前,调换对于其所述表达式为真的所 述多个线程的每线程上下文数据。3. 根据权利要求1所述的方法,其中所述至少一个可编程处理器包括图形处理单元 GPU〇4. 根据权利要求1
当前第5页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1