CN103294449B - 发散操作的预调度重演 - Google Patents

发散操作的预调度重演 Download PDF

Info

Publication number
CN103294449B
CN103294449B CN201310052239.9A CN201310052239A CN103294449B CN 103294449 B CN103294449 B CN 103294449B CN 201310052239 A CN201310052239 A CN 201310052239A CN 103294449 B CN103294449 B CN 103294449B
Authority
CN
China
Prior art keywords
thread
scheduling
instruction
recurred
multistage pipeline
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
CN201310052239.9A
Other languages
English (en)
Other versions
CN103294449A (zh
Inventor
迈克尔·费特曼
斯图尔特·格伦·卡尔顿
杰克·希莱尔·肖凯特
瑟利斯·加德雷
奥利维尔·吉普
道格拉斯·J·哈恩
史蒂文·詹姆斯·海因里希
埃里克·莱尔·希尔
查尔斯·麦卡弗
奥姆卡尔·帕兰杰佩
阿杰纳·拉杰卓
拉杰史沃拉·塞尔瓦桑
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.)
Nvidia Corp
Original Assignee
Nvidia 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 Nvidia Corp filed Critical Nvidia Corp
Publication of CN103294449A publication Critical patent/CN103294449A/zh
Application granted granted Critical
Publication of CN103294449B publication Critical patent/CN103294449B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本公开的一个实施例阐述了在并行处理子系统中执行用于发散操作的预调度重演操作的优化方式。具体地,流多处理器(SM)包括配置为将预调度重演操作插入到多级管线中的多级管线。预调度重演单元检测与当前指令相关联的操作是否正在访问公共资源。如果线程正在访问跨多个高速缓存行分布的数据,那么预调度重演单元在当前指令后插入预调度重演操作。多级管线顺序执行指令和相关联的预调度重演操作。如果在指令和预调度重演操作的执行之后附加的线程保持未被服务,那么经由重演环路插入附加的重演操作直到所有线程被服务为止。所公开的技术的一个优点是要求一个或多个重演操作的发散操作的执行具有减少的时延。

Description

发散操作的预调度重演
技术领域
本发明大体涉及计算机架构,并且更具体地,涉及发散操作的预调度重演。
背景技术
并行处理系统中的普遍做法是设计同时执行一些数目的线程的处理器。在处理器内,每个线程可在分开的执行管线中执行。当所有这种线程均需要执行相同的指令序列时(通常利用用于每个线程的不同数据),共享线程的控制结构存在有形优点。例如,仅必须获取一个指令,并且所有线程随后执行该相同指令。可在单指令多线程(SIMT)处理器和单指令多数据(SIMD)处理器上找到该类操作。
随着并行进行执行,不同的线程可通过可使线程遭遇资源冲突的方式来访问诸如共享存储器的公共资源。例如,线程可执行公共资源访问操作,诸如存储器加载指令,其中存储器位置的集合跨两个或两个以上高速缓存行。因为各种线程所要求的存储器位置在发散的高速缓存行上,所以这样的加载指令可称为“发散(divergent)”操作。在这种情况下,管线从一些线程正在访问的高速缓存行之一转移数据,并且那些线程能够完成公共资源访问操作。然而,指向不同高速缓存行内的位置的其他线程不能够完成公共资源访问操作并且保持未被服务。因此,在通过管线的单个通道的情况下,一些线程能够完成公共资源访问操作而其他线程则不能。缺少处理多个执行周期的装置,操作不能成功地完成。
一种实现多个执行周期的方法是重新插入指令到处理管线的先前级中并且再次执行加载指令用于未能从其目标存储器地址位置访问数据的线程。这样的技术被称为“重演”操作。实质上,在管线中的级实施不可在当前周期中完成的操作处,管线对于包括至少一个目标地址的每个高速缓存行“重演”一次加载指令,直到每个线程实施相关公共资源访问操作为止。在该处理期间,利用管线的一部分来完成重演操作。因此,暂停(stall)管线以防止新指令进入管线,直到已经完成所有重演操作为止。该方法的一个缺点是,管线被暂停直到所有重演操作完成为止。上游指令不可在管线中前进直到释放管线暂停为止,其减少了总体系统性能。附加的缺点是,并行处理系统可能不能够在一个管线级延迟内暂停所有管线级。如果并行处理系统不能及时暂停管线,那么一个或多个进入管线的新指令可能被不正确地丢弃或者重演操作也被丢弃。不论哪种情况,新指令或者重演操作不能正确完成。
另外一种实现多个执行周期的方法是将指令更远地重新插回管线中。利用该方法,正被“重演”的指令与新指令一起在管线中加以交错,减少了管线暂停的频率,从而提高管线性能。然而,该方法的一个缺点是正被重演的指令的经增加的时延。例如,考虑具有32个正同时执行的线程的处理器。在发散加载操作中,用于32个线程的目标地址位置可跨32个不同的高速缓存行进行发散。如果重演操作被插回一个管线级,那么当31个重演操作执行时,管线可暂停31个管线周期。将重演操作插回5个管线级将用于正被重演的指令的时延增加至5个管线级乘31个重演操作或者155个管线周期。
如前文示出的,本领域需要的是执行用于发散操作的重演操作的更有效的方式。
发明内容
本发明的一个实施例阐述了用于公共资源访问操作的预调度重演的计算机实现的方法。流多处理器(SM)接收要由多级管线中的一组线程执行的指令。该SM确定预调度重演操作应插入到多级管线中以允许来自该组线程的一个或多个线程的第二集合执行该指令。该SM自该组线程选择一个或多个线程的第一集合以在多级管线中执行该指令。该SM将该指令插入到多级管线中用于由一个或多个线程的第一集合执行。该SM将预调度重演操作插入到多级管线中以允许一个或多个线程的第二集合执行第一指令。一个或多个线程的第一集合旨在访问公共资源的第一方面或部分,并且一个或多个线程的第二集合旨在访问该公共资源的第二方面或部分。
所公开的技术的一个优点是,要求一个或多个重演操作的发散操作的执行具有减少的时延。进一步地,因为一个或多个预调度重演操作通过重演环路与原始指令一起串行进行,所以更有效地利用了该多级管线。
附图说明
因此,可以详细地理解本公开的上述特征,并且可以参考示例性实施例得到对如上面所简要概括的本公开更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本公开的典型实施例,因此不应被认为是对其范围的限制,本公开可以具有其他等效的实施例。
图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图。
图2是根据本发明的一个实施例的,用于图1计算机系统的并行处理子系统的框图。
图3A是根据本发明的一个实施例的,图2的前端的框图。
图3B是根据本发明的一个实施例的,图2的并行处理单元之一内的通用处理集群的框图。
图3C是根据本发明的一个实施例的,图3B的流多处理器的一部分的框图。
图4示出了根据本发明的一个实施例的,配置为实现发散操作的预调度重演的多级管线;以及
图5是根据本发明的一个实施例的,用于在多级管线中执行预调度重演操作的方法步骤的流程图。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
系统概述
图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到显示设备110(例如传统的基于阴极射线管或液晶显示器的监视器)的图形子系统。系统盘114也连接到I/O桥107。交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩磁盘(CD)驱动器、数字视频光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或两个以上的CPU102以及两个或两个以上的并行处理子系统112。本文所示的特定部件是可选的;例如,任意数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
图2示出了根据本发明一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
在一个实施例中,通信路径113是PCIExpress链路,如本领域所知的,其中专用通路被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
存储器接口214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
任意一个GPC208都可以处理要被写到并行处理存储器204内的任意DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任意分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色、顶点着色、几何着色、和/或像素着色程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
PPU202可配备有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCIExpress)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
如上所示,在并行处理子系统112中可以包括任意数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
多个并发任务调度
可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。
图3A为根据本发明一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD322的指针的列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集数个任务。之后可以基于优先级信息或使用其他技术诸如轮叫调度来调度所收集的任务。
工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针的列表以使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD322生成子任务。
不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入入栈缓冲区或传送到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU102。通过入栈缓冲区提供的任务与子任务之间的另一个区别是通过入栈缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间动态生成的。
任务处理概述
图3B为根据本发明一个实施例的在图2的PPU202之一内的GPC208的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。
经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC208包括M个SM310,其中M≥1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元—在图3C中示出为Exec单元302和LSU303),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任意组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在任意给定时间在GPC208中可以执行多达G*M个线程组。
此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
每个SM310包含一级(L1)高速缓存(图3C所示)或使用用于实施加载和存储操作的SM310外部的相应L1高速缓存中的空间。每个SM310都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任意存储器可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC208内,其配置为接收并保持由SM310所请求的经由存储器接口214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。
每个GPC208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)328。在其他实施例中,MMU328可以驻留在存储器接口214内。MMU328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存行索引。MMU328可以包括地址转换后备缓冲区(TLB)或可以驻留在多处理器SM310或L1高速缓存或GPC208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。
在图形和计算应用中,GPC208可配置为使得每个SM310耦连到用于实施纹理映射操作例如确定纹理样本位置、读出纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SM310内的L1高速缓存读出纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任意数目的处理单元例如SM310或纹理单元315、preROP325可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任意数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、L1高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。
本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任意经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读出和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读出的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读出数据。因此,数据在线程之间共享的任意期望模式可以得到支持,以及CTA中的任意线程可以与同一个CTA中的任意其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
图3C为根据本发明一个实施例的图3B的SM310的框图。SM310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令L1高速缓存370。warp调度器和指令单元312从指令L1高速缓存370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。
SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302)一个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属栅格(grid)的维数(或队列位置,如果TMD322编码队列任务而不是栅格任务的话)、以及CTA被指派到的TMD322的标识符。
如果TMD322是栅格TMD,则TMD322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为栅格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD322中或TMD322可以存储指向将由CTA所处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。
如果TMD322是队列TMD,那么使用TMD322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD322分开存储,在该情况下TMD322存储指向该队列的队列指针。有利地,当代表子任务的TMD322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
属于栅格的CTA具有指示栅格内各自CTA的位置的隐含栅格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD322相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
参数存储器(未示出)存储可由同一个CTA内的任意线程(或任意LSU303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任意CTA内的任意线程(或SM310内的任意exec单元302)可以通过存储器接口214访问全局存储器。可以将全局存储器的各部分存储在L1高速缓存320中。
每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任意部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通路的寄存器堆,每个通路具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通路指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通路中的对应条目以帮助SIMD执行。可以将通路的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致L1高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通路的一致值或常数值。
共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任意位置对于同一个CTA内的任意线程(或对于SM310内的任意处理引擎)可访问。共享存储器306可以实现为具有允许任意处理引擎对共享存储器中的任意位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在L1高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTAID和任务ID,以及CTA和栅格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任意一个。
每个SM310中的L1高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在L1高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和L1高速缓存320。
发散操作的预调度重演
图4示出了根据本发明的一个实施例的,配置为实现发散操作的预调度重演的多级管线400。如所示,多级管线400包括预调度重演单元420、管线级402、逻辑元件404、重演单元406以及重演多路复用器408。在各种实现方案中,多级管线400可驻留在流多处理器(SM)310的Exec单元302或LSU303内,如图3C所示。
预调度重演单元420在指令进入多级管线400时接收新指令412。当新指令412进入多级管线400时,Exec单元302确定指令是否是可从使用预调度重演操作中获益的公共资源访问操作。如果新指令412是公共资源访问操作,那么LSU303从经调度以执行该指令的一组线程中选择第一线程。LSU303选择与该第一线程相关联的一组线程,其中该组线程可在多级管线400的单个执行通道内全部完成公共资源访问操作。这样的一组线程在本文中被标识为线程家族(family)。可与选择第一线程并发地选择与该第一线程相关联的线程家族,或者该线程家族可在稍后加以确定。LSU303随后选择在通过多级管线400的初始通道期间进行处理的一个或多个附加的线程。在执行指令用于第一线程和第一线程家族之后,附加的线程可在保持未被服务的基础上而被选择。LSU303选择与附加的线程的每一个相关联的线程家族。可与选择附加的线程并发地选择与每个附加的线程相关联的线程家族,或者线程家族可在稍后加以确定。可选择多达B个操作用于在初始通道期间处理,其中B包括用于第一线程的初始指令和用于附加的所选择的线程的预调度重演操作。Exec单元302经由预调度重演单元420将操作插入到多级管线中来执行指令用于第一线程和第一线程家族。一旦与该第一线程相关联的初始操作到达管线级402(0),Exec单元302经由预调度重演单元420与初始操作串行地插入与附加的线程相关联的预调度重演操作。
在用于各种指令的中间结果行进通过多级管线400时,管线级402存储该中间结果。管线级402在多级管线400的每个时钟周期的开始时存储中间结果。多个指令可在行进的各个阶段存在于多级管线400中。例如,在特定时钟周期的开始,指令进入多级管线400并且被存储到管线级402(0)中。在下一个时钟周期的开始,该指令行进到管线级402(1),而另一个指令进入多级管线400并且被存储到管线级402(0)中。每个指令对于多级管线400的每一个时钟周期通常行进一个管线级402。
逻辑元件404分开管线级402。逻辑元件404可实施SM310所要求的任何功能,该功能包括但不限于算术操作、逻辑操作以及加载/存储操作。例如,存储到管线级402(0)的指令呈现为逻辑元件404(0)的输入。在一段时间的延迟之后,逻辑元件404(0)的输出呈现为对管线级402(1)的输入的功能的结果。该结果可随后在多级管线400的下一个时钟周期被存储在管线级402(1)中。这样,随着指令沿着管线级402行进,指令实施由逻辑元件404确定的各种功能。指令随着每个时钟周期前进通过多级管线400,直到该指令已经通过所有管线级402为止。通常,通过多级管线400的总体时延等于多级管线400内的管线级402的数目乘以在连续的管线时钟周期之间的时段。为了最小化到管线级402的时钟周期时间,通过逻辑元件404的延迟通常为低,从而最大化管线性能。一旦指令到达管线级402(S-1),LSU303就确定指令正在访问公共资源,诸如指令访问存储在高速缓存内的存储器位置。LSU303转移由至少一个线程引用的高速缓存行并且为正在访问相同高速缓存行的所有线程服务。如果与指令相关联的预调度重演操作已经插入到多级管线400中,那么LSU303转移由预调度重演操作中被引用的至少一个线程所引用的高速缓存行并且为正在访问相同高速缓存行的所有线程服务。LSU303重复用于与该指令相关联的任何其他预调度重演操作的处理。如果一些线程在处理指令和预调度重演操作之后保持未被服务,那么LSU303根据要求准备附加的重演操作并且经由重演环路410将重演操作递送到重演单元406。
重演单元406经由重演环路410接收重演操作并且将不同重演操作插入回多线程的管线400中。针对发散的公共资源实现重演操作,其中在处理与公共资源访问指令相对应的初始操作和任何相关联的预调度重演操作之后,一个或多个线程保持未被服务。在这种情况下,重演单元406经由重演多路复用器408的输入416将一个或多个重演操作插入到多级管线400中。重演操作前进通过多级管线400。一旦重演操作到达逻辑元件404(S-1),LSU303就确定是否留有任何未被服务的线程。如果存在任何未被服务的线程,那么LSU303以上文所论述的方式准备一个或多个重演操作,直到与给定指令相关联的所有线程已得到服务为止。
重演多路复用器408选择是新指令412还是重演操作被允许在管线级402(0)进入多级管线400。重演多路复用器408由重演指示器414控制。最初,重演指示器414被设定为选择重演多路复用器408的输入418。传入的新指令412通过预调度重演单元420到重演多路复用器408的输入418,并且随后到第一管线级402(0)的输入。如上所述,如果LSU303检测到发散操作,那么为了跨所有线程完成指令,可要求一个或多个重演操作。Exec单元302允许如果存在的来自预调度重演单元420的预调度重演操作经由重演多路复用器408的输入418插入到多级管线400中。在处理初始操作和相关联的预调度操作之后,如果线程保持未被服务,那么LSU303确立重演指示器414来选择重演多路复用器408的输入416。作为回应,来自重演单元406的一个或多个重演操作通过重演环路410到重演多路复用器408的输入416,以及随后到第一管线级402(0)的输入。一旦重演操作已经进入多级管线400,LSU303就可移除重演指示器414,并允许新指令412再次经由重演多路复用器408的输入418进入多级管线400。一旦重演操作已经经处理通过多级管线400,LSU303就确定是否所有线程已被服务。如果一些线程保持未被服务,那么LSU303确立重演指示器414,递送另一个重演操作通过重演环路410,并且随后移除重演指示器414。继续处理直到所有线程均被服务为止,即所有线程已执行与公共资源访问操作相关联的指令。
新指令412可在初始操作的执行期间、在预调度重演操作之一的执行期间或以后完成用于所有线程的执行。例如,一旦与第一线程和相应的线程家族相关联的初始操作被处理,那么LSU303可确定所有线程已被服务。在这种情况下,不要求预调度重演操作。如果任何预调度重演操作插入到多级管线400中,那么LSU303丢弃预调度重演。在另一个示例中,由预调度重演单元420插入的预调度重演操作可能能够为那些在初始操作的处理期间没有执行指令的线程服务。在该情况下,又一个预调度重演操作通过被调度用于与初始操作串行地执行来起到减少时延的作用。在另一个示例中,即使在处理初始操作和预调度重演操作之后,一些线程也可能保持未被服务。在这种情况下,预调度重演操作可能已经减少了指令的执行时延,但是可能要求比由通过多级管线400的单个通道所能处理的操作更多的操作。可以任何技术上可行的方式选择经选择用于预调度重演操作的线程。当限制预调度重演单元420的复杂性以满足多级管线400的计时、功率以及空间要求时,通常选择这样的线程以提高该经选择线程不与任何其他经选择线程在相同的线程家族中的可能性。
在初始通道期间经选择用于预调度重演操作的线程可代表实际上要求分开的重演操作的线程家族。在这种情况下,预调度重演操作减小或者消除通过重演环路410的重演操作的数目,因此减少总体执行时延。如果在初始操作或先前的预调度重演操作期间已经处理了经选择用于预调度重演操作的线程,那么丢弃相关联的预调度重演操作。本领域普通技术人员将理解如何相对于延迟新操作相关联的可能的机会成本评估预调度重演操作的价值。
Exec单元302可使用若干方法的任何一个或多个来确定是否插入预调度重演到多级管线400中。例如,预调度重演单元420可确定新指令412将要求基于该指令自身的重演操作。如果指令要求128位操作数,但是与操作数相关联的公共资源具有64位数据路径,那么Exec单元302知悉将要求至少一个重演操作以便经由64位数据路径检索128位数据。在这种情况下,Exec单元302可与初始操作串行地插入一个预调度重演操作。在另一个示例中,Exec单元302可以概率性地确定新指令412可能要求预调度重演操作。某些指令可具有要求重演操作的高概率。在这种情况下,给定实际利用预调度重演的可能性,Exec单元302可确定与初始操作串行地插入一个或多个预调度重演操作。如果LSU303随后确定不需要预调度重演,那么LSU303可丢弃未使用的预调度重演操作。在另一个示例中,新指令412可包括生成一个或多个与新指令412相关联的预调度重演操作的命令。可由软件程序员手动地或由编译器在编译时间自动地插入命令。在这种情况下,对于软件程序员或对编译器可用的预测模型可指示相关联的指令要求一个或多个预调度重演操作的高概率。此外,编译器可经由“重演命令(replaycommand)”插入计时信息来调度具体预调度重演操作在相对于新指令412的具体时间进入多级管线400。预调度重演单元420可辨识由编译器插入的新指令412内的重演命令并且因此插入预调度重演操作。可替代地,Exec单元302可利用任何其他技术上可行的方法来确定是否将一个或多个预调度重演操作插入到多级管线中。
LSU303可利用各种方法来防止重演单元406重复已经被预调度重演单元420插入到多级管线400中的操作。当初始操作达到逻辑元件404(S-1)时,多级管线400可能不知道已由预调度重演单元420插入附加的预调度重演操作。因此,LSU303可能调度不必要的重演操作。为了防止这种情况发生,Exec单元302可插入与初始操作相关联的指示器以指示一个或多个预调度重演操作跟随该初始操作。随后在插入附加的重演操作之前,LSU303可等待直到预调度重演操作被处理为止。可替代地,逻辑元件404(S-1)可包括在预调度重演单元420中所使用的用来创建预调度重演操作的相同的逻辑。在这种情况下,逻辑元件404(S-1)能够确定由预调度重演单元420所插入的预调度重演操作的数目和类型。随后在确定是否应调度附加的重演操作之前,LSU303等待直到预调度重演操作清除多级管线400。可替代地,可由LSU303实现任何技术上可行的方法来防止重演单元406插入与预调度重演单元420所插入的那些复制性的重演操作。
下面的示例示出了如何在示例性多级管线400中处理预调度重演操作,其中B=3。新指令412可经由预调度重演单元420进入多级管线400。Exec单元302可确定指令被编程为执行公共资源访问操作,诸如被引导到共享存储器的加载指令。Exec单元302经由预调度重演单元420将操作插入到多级管线中来执行指令用于第一线程和第一线程家族。LSU303可随后经由预调度重演单元420并经由重演多路复用器408的输入418将附加的预调度重演操作与初始操作串行地插入到多级管线400中。如果新指令412是公共资源访问操作,那么LSU303可从经调度以执行该指令的一组线程中选择第一线程。LSU303选择与第一线程相关联的线程家族。在通过多级管线400的初始通道期间,LSU303可随后从需要服务的线程之中选择多达两个附加的线程来处理。LSU303可选择与附加的线程的每一个相关联的线程家族。LSU303可创建与附加的线程的每一个相关联的预调度重演操作。LSU303可确定在多级管线400处理初始操作和预调度重演操作之后,是否有任何线程将保持未被服务。LSU303可经由重演环路410插入附加的重演操作直到所有线程已被服务为止。
在该示例中,其中最大预调度重演批(batch)大小B=3,并且重演环路410的长度是5个管线级402,具有两个重调度重演操作的公共资源访问操作可在7个时钟周期的单个通道中从管线级402(0)递送到402(S),用于初始指令的5个时钟周期加上用于两个预调度重演操作的每一个均有一个的附加的时钟周期。如果没有预调度重演操作,这种要求两个重演操作的指令可能要求15个时钟周期,用于初始指令的5个时钟周期加上用于两个重演操作的每一个均有5个的时钟周期。在这个示例中,完成公共资源访问操作的时钟周期的数目已减少了一半多。
应予以理解的是,本文所描述的架构仅是示例性的并且变化和修改是可能的。例如,本文所描述的架构围绕流多处理器310的Exec单元302和加载-存储单元303内的多级管线400加以呈现,但可使用在访问公共资源的、包括但不限于与中央处理单元(CPU)、通用处理单元(GPU)相关联的任何多级管线400中,或可使用在任何其他技术上可行的计算环境中。在另一个示例中,在最大预调度重演批大小B是3以外的数目的情况下,可取得更高的效率。本领域普通技术人员应理解,B的最优值可由重演环路410的长度S、行进通过多级管线400的指令的性质以及其他因素来确定。在另一个示例中,通常将初始操作和相关联的预调度重演操作在连续的时钟周期插入到多级管线400中,使得批内的操作一个管线级402彼此分开地行进通过多级管线400。然而,连续的插入可在大于一个时钟周期的其他间隔发生。
关于公共资源访问操作描述了本文所描述的技术,公共资源访问操作诸如跨多个线程的加载指令,其中线程访问跨发散的高速缓存行的存储器位置。该技术充分灵活使用在存在发散操作的其他应用中。在一个示例中,本文所描述的技术不限于线程的执行,而是可被使用可经由通过多级管线的一个或多个级的多个通道前进的任何操作。在另一个示例中,指令除了跨高速缓存内的高速缓存行发散还可跨公共资源发散。这样的资源可包括但不限于高速缓存标签、高速缓存数据、寄存器库以及共享存储器。执行指令的线程可通过访问公共资源的不同方面或部分来发散。在另一个示例中,LSU303可在任何给定操作期间检索诸如多个高速缓存行的多个公共资源。在线程在已检索多个公共资源的操作后保持未被服务的情况中,仍可使用预调度重演操作。
本领域普通技术人员应理解可确定并选择线程用于处理的方式。在一个示例中,可在相同时钟周期中确定线程和相应的线程家族的总数。可将一个或多个线程加标签用于在通过多级管线400的当前通道中处理,而剩余的线程保持未被服务直到以后的通道。在另一个示例中,可在给定时钟周期期间选择单个线程。当该经选择线程开始处理时,下一个线程如果存在的话,可在接着的时钟周期期间对其进行选择。因此,可如所需的一次一个地确定经选择用于预调度重演操作的线程,直到所有线程被服务为止。除了这两种方法,还可使用选择线程和选择相关联线程家族的任何技术上可行的方法。可用任何合理的标准来选择具体线程用于处理。例如,可从要求服务的线程中随机地选择线程。可替代地,可基于哪个线程产生最大的线程家族或者再以任何其他合理方式来选择线程。
图5是根据本发明的一个实施例的,用于在多级管线400中执行预调度重演操作的方法步骤500的流程图。尽管结合图1-4的系统描述了方法步骤500,但是本领域普通技术人员将理解,配置为以任何顺序实施方法步骤500的任何系统均在本发明的范围内。
方法500在步骤502处开始,其中SM310接收诸如从共享存储器在用于一些数目的线程的经指定地址处加载数据值的指令的公共资源访问操作。经调度以执行指令的每个线程可编程为从可在相同或者发散的高速缓存行上的不同存储器位置加载数据。在步骤504处,SM310从要求服务以完成公共资源访问操作的各种线程中选择线程。可基于若干标准或策略选择该线程。在步骤506处,SM310选择与第一线程相关联的第一线程家族。第一线程家族包括需要访问与第一线程相同的公共资源的部分或方面的线程的集合,诸如高速缓存存储器内的相同高速缓存行。在步骤508处,SM310将初始操作插入到配置为执行指令用于第一线程和第一线程家族的多级管线400中。在步骤510处,SM310确定是否与初始指令串行地插入附加的预调度操作。如果SM310确定不插入预调度操作,那么方法500终止。如果SM310确定插入预调度操作,那么方法500前进到步骤512,其中SM310从经调度以执行指令的线程中选择附加的线程。在步骤514处,SM310选择与附加的线程相关联的线程家族。在步骤516处,SM310将预调度重演操作插入到配置为执行指令用于经选择线程和相关联的线程家族的多级管线400中。
在步骤518处,SM310确定包括初始指令和预调度重演操作的每一个的批大小是否等于B,其中B是可在通过多级管线400的初始通道期间所处理的、包括初始指令的操作的最大数目。如果批大小不等于B,那么方法500返回到步骤512,其中SM310选择附加的线程。如果批大小等于B,那么方法500终止。
总而言之,所公开的技术提供了在并行处理子系统中执行用于发散操作的重演操作的经优化的方式。具体地,流多处理器(SM)310包括配置为将一个或多个预调度重演操作插入到多级管线400的多级管线400。预调度重演单元420检测与当前指令相关联的操作是否正在访问公共资源,诸如从共享存储器加载数据。如果线程正在访问跨多个诸如发散高速缓存行的公共资源分布的数据,那么预调度重演单元420在初始操作后插入预调度重演操作以执行当前指令。多级管线400顺序执行初始操作和预调度重演操作。如果附加的线程在初始操作和预调度重演操作的执行后保持未被服务,那么经由重演环路410插入附加的重演操作直到所有线程均被服务为止。
有利地,要求一个或多个重演操作的发散操作的执行具有减少的时延。因为一个或多个预调度重演操作与初始指令一起串行地行进通过多级管线400,所以多级管线400得到更有效地利用。附加地,在插入点处等待以进入多级管线400的新指令412经历由要求重演操作的指令所导致的减少的延迟。而且,可在编译时间确定预调度重演操作的数目和计时,使与在指令执行的时间在多级管线400内排他地确定预调度重演操作相比效率更高。
尽管前文针对本发明的实施例,但是在不脱离其基本范围的情况下可设计本发明的其他和进一步实施例,并且其范围由下面的权利要求加以确定。

Claims (12)

1.一种用于公共资源访问操作的预调度重演的子系统,包括:
加载-存储单元(LSU),配置为:
接收要由多级管线中的一组线程执行的第一指令;
确定预调度重演操作应插入到所述多级管线中以允许来自该组线程的一个或多个线程的第二集合执行所述第一指令;
自该组线程选择一个或多个线程的第一集合以在所述多级管线中执行所述第一指令;
将所述第一指令插入到所述多级管线中用于由所述一个或多个线程的第一集合执行;以及
将所述预调度重演操作插入到所述多级管线中以允许所述一个或多个线程的第二集合执行所述第一指令,
其中所述一个或多个线程的第一集合旨在访问公共资源的第一方面或部分,并且所述一个或多个线程的第二集合旨在访问所述公共资源的第二方面或部分。
2.根据权利要求1所述的子系统,其中所述公共资源包括存储器高速缓存。
3.根据权利要求1所述的子系统,进一步包括将与所述预调度重演操作相对应的标识符插入到所述多级管线中,其中所述标识符指示一个或多个预调度重演操作的存在。
4.根据权利要求1所述的子系统,其中所述预调度重演操作相对于所述第一指令串行地插入到所述多级管线中。
5.根据权利要求1所述的子系统,其中第二指令相对于所述预调度重演操作串行地插入到所述多级管线中。
6.根据权利要求1所述的子系统,其中所述第一指令指示至少一个预调度重演操作应插入到所述多级管线中。
7.根据权利要求1所述的子系统,其中所述预调度重演操作被要求执行所述第一指令用于该组线程内的所有线程。
8.根据权利要求1所述的子系统,其中所述预调度重演操作概率性地被要求执行所述第一指令用于该组线程内的所有线程。
9.一种计算设备,包括:
子系统,包括加载-存储单元(LSU),所述加载-存储单元配置为:
接收要由多级管线中的一组线程执行的第一指令;
确定预调度重演操作应插入到所述多级管线中以允许来自该组线程的一个或多个线程的第二集合执行所述第一指令;
自该组线程选择一个或多个线程的第一集合以在所述多级管线中执行所述第一指令;
将所述第一指令插入到所述多级管线中用于由所述一个或多个线程的第一集合执行;以及
将所述预调度重演操作插入到所述多级管线中以允许所述一个或多个线程的第二集合执行所述第一指令,
其中所述一个或多个线程的第一集合旨在访问公共资源的第一方面或部分,并且所述一个或多个线程的第二集合旨在访问所述公共资源的第二方面或部分。
10.根据权利要求9所述的计算设备,其中所述第一指令指示至少一个预调度重演操作应插入到所述多级管线中。
11.根据权利要求9所述的计算设备,其中所述预调度重演操作被要求执行所述第一指令用于该组线程内的所有线程。
12.根据权利要求9所述的计算设备,其中所述预调度重演操作概率性地被要求执行所述第一指令用于该组线程内的所有线程。
CN201310052239.9A 2012-02-09 2013-02-18 发散操作的预调度重演 Active CN103294449B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/370,173 US10152329B2 (en) 2012-02-09 2012-02-09 Pre-scheduled replays of divergent operations
US13/370173 2012-02-09
US13/370,173 2012-02-09

Publications (2)

Publication Number Publication Date
CN103294449A CN103294449A (zh) 2013-09-11
CN103294449B true CN103294449B (zh) 2016-08-03

Family

ID=48868444

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310052239.9A Active CN103294449B (zh) 2012-02-09 2013-02-18 发散操作的预调度重演

Country Status (4)

Country Link
US (1) US10152329B2 (zh)
CN (1) CN103294449B (zh)
DE (1) DE102013201195A1 (zh)
TW (1) TWI489289B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10133572B2 (en) 2014-05-02 2018-11-20 Qualcomm Incorporated Techniques for serialized execution in a SIMD processing system
US20160188519A1 (en) * 2014-12-27 2016-06-30 Intel Corporation Method, apparatus, system for embedded stream lanes in a high-performance interconnect
US10474468B2 (en) * 2017-02-22 2019-11-12 Advanced Micro Devices, Inc. Indicating instruction scheduling mode for processing wavefront portions
CN108509791B (zh) * 2018-02-09 2021-06-04 清华大学 检测处理器的方法、检测装置以及检测系统
US11803391B2 (en) * 2020-10-20 2023-10-31 Micron Technology, Inc. Self-scheduling threads in a programmable atomic unit

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6385715B1 (en) 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US7363470B2 (en) 2003-05-02 2008-04-22 Advanced Micro Devices, Inc. System and method to prevent in-flight instances of operations from disrupting operation replay within a data-speculative microprocessor
US7788468B1 (en) * 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
US8438370B1 (en) * 2006-12-08 2013-05-07 Nvidia Corporation Processing of loops with internal data dependencies using a parallel processor
US7861066B2 (en) 2007-07-20 2010-12-28 Advanced Micro Devices, Inc. Mechanism for predicting and suppressing instruction replay in a processor
US8312254B2 (en) * 2008-03-24 2012-11-13 Nvidia Corporation Indirect function call instructions in a synchronous parallel thread processor
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8086801B2 (en) 2009-04-08 2011-12-27 International Business Machines Corporation Loading data to vector renamed register from across multiple cache lines
US8458440B2 (en) 2009-09-25 2013-06-04 Nvidia Corporation Deferred complete virtual address computation for local memory space requests
US8751771B2 (en) * 2010-09-29 2014-06-10 Nvidia Corporation Efficient implementation of arrays of structures on SIMT and SIMD architectures
US8732713B2 (en) * 2010-09-29 2014-05-20 Nvidia Corporation Thread group scheduler for computing on a parallel thread processor
US9817668B2 (en) * 2011-12-16 2017-11-14 Nvidia Corporation Batched replays of divergent operations
US9606808B2 (en) * 2012-01-11 2017-03-28 Nvidia Corporation Method and system for resolving thread divergences
US10095548B2 (en) * 2012-05-21 2018-10-09 Nvidia Corporation Mechanism for waking common resource requests within a resource management subsystem
US9836325B2 (en) * 2012-05-21 2017-12-05 Nvidia Corporation Resource management subsystem that maintains fairness and order
US9755994B2 (en) * 2012-05-21 2017-09-05 Nvidia Corporation Mechanism for tracking age of common resource requests within a resource management subsystem

Also Published As

Publication number Publication date
TWI489289B (zh) 2015-06-21
CN103294449A (zh) 2013-09-11
US10152329B2 (en) 2018-12-11
DE102013201195A1 (de) 2013-08-14
US20130212364A1 (en) 2013-08-15
TW201346576A (zh) 2013-11-16

Similar Documents

Publication Publication Date Title
TWI490782B (zh) 來源運算元收集器快取的方法和裝置
US9436504B2 (en) Techniques for managing the execution order of multiple nested tasks executing on a parallel processor
TWI498819B (zh) 執行成型記憶體存取作業的系統和方法
US8732713B2 (en) Thread group scheduler for computing on a parallel thread processor
US8732711B2 (en) Two-level scheduler for multi-threaded processing
CN103729167A (zh) 用于改进多线程处理单元中的性能的技术
US9069609B2 (en) Scheduling and execution of compute tasks
US20130232322A1 (en) Uniform load processing for parallel thread sub-sets
US20160224386A1 (en) Approach for a configurable phase-based priority scheduler
CN104050033A (zh) 用于有索引的屏障的硬件调度的系统和方法
US9069664B2 (en) Unified streaming multiprocessor memory
CN103226481A (zh) 自动从属任务启动
CN103559088A (zh) 维持公平性和顺序的资源管理子系统
CN103176848A (zh) 计算工作分布参考计数器
CN103885902A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN104050032A (zh) 用于有条件的屏障和急迫的屏障的硬件调度的系统和方法
CN103294449B (zh) 发散操作的预调度重演
TW201337829A (zh) 暫存器檔案型讀取
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
CN103885903A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN103996216A (zh) 用于曲面细分和几何着色器的电力高效属性处置
TWI501156B (zh) 多頻時間切面組
CN103793206A (zh) 基于工作队列的图形处理单元工作创建
CN103218259A (zh) 计算任务的调度和执行
CN103218253B (zh) 发散操作的分批重播

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant