CN103226463A - 用于使用预解码数据调度指令的方法和装置 - Google Patents

用于使用预解码数据调度指令的方法和装置 Download PDF

Info

Publication number
CN103226463A
CN103226463A CN2012105645899A CN201210564589A CN103226463A CN 103226463 A CN103226463 A CN 103226463A CN 2012105645899 A CN2012105645899 A CN 2012105645899A CN 201210564589 A CN201210564589 A CN 201210564589A CN 103226463 A CN103226463 A CN 103226463A
Authority
CN
China
Prior art keywords
instruction
unit
scheduling
pre decoding
prompting
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.)
Pending
Application number
CN2012105645899A
Other languages
English (en)
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
QuickSilver Technology Inc
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 CN103226463A publication Critical patent/CN103226463A/zh
Pending legal-status Critical Current

Links

Images

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, 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, look ahead
    • G06F9/3802Instruction prefetching
    • 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, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding

Abstract

用于使用与每个指令相对应的预解码数据调度指令的系统和方法。在一个实施例中,多核处理器包括每个内核中的调度单元,其用于每个调度周期从两个或两个以上线程选择指令以在该特定内核上执行。随着调度线程用于在内核上执行,来自线程的指令在未被解码的情况下获取到缓冲区中。预解码数据由编译器确定并在运行时由调度单元提取以及用来控制线程的选择用于执行。预解码数据可以指定在调度指令之前等待若干调度周期。预解码数据还可以为指令指定调度优先级。一旦调度单元选择指令以发出用于执行,解码单元就完全解码该指令。

Description

用于使用预解码数据调度指令的方法和装置
技术领域
本公开总地涉及多线程指令调度,并且,更具体地,涉及用于使用预解码数据调度指令的方法和装置。
背景技术
并行处理器具有使用不同的硬件资源来使多个线程能够同时执行的多个独立内核。SIMD(单指令、多数据)架构处理器在多个内核的每一个上均执行相同的指令,其中每个内核处理不同的输入数据。MIMD(多指令、多数据)架构处理器利用供应给每个内核的不同的输入数据在不同的内核上执行不同的指令。并行处理器也可以是多线程的,其使用单个处理内核的资源使两个或更多个线程能够大体上同时执行(即在不同的时钟周期期间在内核上执行不同的线程)。指令调度是指用于确定在下一个时钟周期期间哪个线程执行在哪个内核上的技术。
通常,指令调度算法在从存储器获取指令之后将解码多个指令以确定每个特定操作所需的特定资源和与那些资源相关联的延迟。之后系统可以评估该延迟以为该多个指令确定最佳调度顺序。例如,一个指令可以指定操作数(即寄存器值),该操作数取决于正在由来自同一线程的前一个指令所执行的计算。之后调度器延迟该一个指令的执行直到前一个指令完成执行。
上述系统的一个问题是解码多个指令、识别指令之间的依赖关系以及分析与由指令所指定的所有计算相关联的延迟需要处理器中的大量管理资源和大量状态信息存储。处理器可以确定由指令所指定的特定操作码、与操作相关联的资源(例如作为操作数传递到每个指令的特定寄存器)、指令之间的相互依赖关系以及与指令相关联的任意其他重要数据。这类算法的实现可采取许多时钟周期来完成以及采取大量存储器用于存储和解码指令。
因此,本领域需要的是用于在不需要为输入到其他指令的计算确定延迟的情况下而实施指令调度的系统和方法。
发明内容
在一个实施例中,多核处理器包括每个内核中的调度单元,其用于每个调度周期从两个或两个以上线程选择指令以在该特定内核上执行。随着调度线程用于在内核上执行,来自所述线程的指令在未被解码的情况下获取到缓冲区。预解码数据由编译器确定并在运行时由调度单元提取以及用来控制线程的选择用于执行。所述预解码数据可以指定在发出所述指令之前要等待的若干调度周期。所述预解码数据还可以为所述指令指定调度优先级或指定应该在单个调度周期中发出两个指令。一旦所述调度单元已经选择指令以发出用于执行,解码单元就完全解码所述指令。
本公开的一个示范性实施例提出了用于在并行处理计算装置内调度指令的计算机实现的方法。所述方法包括以下步骤:从指令高速缓存单元获取与两个或两个以上线程组相对应的指令,以及接收与所述指令的每一个相关联的预解码数据,其中当编译所述指令时确定所述预解码数据。所述步骤进一步包括至少部分基于所述预解码数据来选择指令用于执行、解码所述指令以及将所述指令分派到所述并行处理单元用于执行。
本公开的另一示范性实施例提出了一种调度单元,包括指令高速缓存获取单元、宏调度器单元、微调度器仲裁器、解码单元和分派单元。所述指令高速缓存获取单元配置为将与两个或两个以上线程组相对应的指令路由到第一缓冲区并将与所述指令的每一个相关联的预解码数据路由到第二缓冲区。所述宏调度器单元耦合到所述指令高速缓存获取单元并配置为接收预解码数据,其中当编译所述指令时确定所述预解码数据。所述微调度器仲裁器耦合到所述宏调度器单元和所述第二缓冲区并配置为至少部分基于所述预解码数据来在运行时选择第一指令用于由处理单元执行。所述解码单元耦合到所述第一缓冲区并配置为解码所述第一指令。所述分派单元耦合到所述解码单元并配置为将所述第一指令分派到处理单元用于执行。
本公开的又一示范性实施例提出了一种包括中央处理单元和并行处理单元的计算设备。所述并行处理单元包括调度单元,所述调度单元配置为从指令高速缓存单元获取与两个或两个以上线程组相对应的多个指令,以及接收与所述指令的每一个相关联的预解码数据,其中当编译所述指令时确定所述预解码数据。所述调度单元进一步配置为至少部分基于所述预解码数据来选择指令用于执行,解码所述指令以及将所述指令分派到所述并行处理单元用于执行。
有利地,使用与每个指令相对应的所述预解码数据减轻了所述调度单元上的工作负载。具体地,所述调度单元不再需要识别所述指令之间的依赖关系以及分析与由所述指令指定的所有计算相关联的所述延迟。因此,减少了所述处理器中的管理资源量并且减少了由所述调度单元所维护的状态信息量。
附图说明
因此,可以详细地理解上述本公开的特征,并且可以参考示范性实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本公开的典型实施例,因此不应被认为是对其范围的限制,本公开可以具有其他等效的实施例。
图1为示出了配置为实现本公开一个或多个方面的计算机系统的框图;
图2为根据本公开一个实施例的用于图1的计算机系统的并行处理子系统的框图;
图3A为根据本公开一个实施例的图2的前端的框图;
图3B为根据本公开一个实施例的在图2的并行处理单元之一内的通用处理集群的框图;
图3C为根据本公开一个实施例的图3B的流多处理器的一部分的框图;以及
图4为根据本公开一个示范性实施例的图3C的warp调度器和指令单元的框图;
图5A示出了根据本公开一个示范性实施例的从指令L1高速缓存所获取的高速缓存线;
图5B示出了根据本公开一个示范性实施例的图5A的特殊指令ss-inst;
图6示出了根据本公开一个示范性实施例的用于在没有指令解码的情况下调度指令的方法;以及
图7示出了根据本公开一个示范性实施例的用于使用预解码数据调度指令的方法。
具体实施方式
在下面的描述中,将阐述大量的特定细节以提供对本公开更透彻的理解。然而,本领域的技术人员应该清楚,本公开可以在没有一个或多个这些特定细节的情况下得以实施。
本公开描述了用于在解码指令之前调度指令以在处理器内核上执行的系统和方法。在一个实施例中,多核处理器包括每个内核中的调度单元,用于在该特定内核上从两个或两个以上线程调度指令的。随着线程被调度用于执行以及被发出到处理器内核,来自线程的指令在未被解码的情况下被从指令高速缓存获取到缓冲区中。调度单元包括用于实施执行相同或不同指令集的线程组的优先级排序的宏调度器单元。微调度器仲裁器确定每个调度周期从线程组之一选择至少一个指令并发出该至少一个指令用于执行。微调度器仲裁器使用预解码数据来实现调度算法。对于每个指令在编译期确定预解码数据。在运行时,通过仅解码指令的小部分来提取预解码数据。可替代地,预解码数据可以随着指令一起被接收诸如与指令嵌入同一高速缓存线中。一旦微调度器仲裁器已经选择指令以发出到执行单元,解码单元就完全解码该指令。
系统概述
图1为示出了配置为实现本公开的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU)102和经由可以包括存储器桥105的互连路径通信的系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将所述输入转发到CPU 102。并行处理子系统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、CPU 102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU 102而不是通过桥,并且其他设备经由存储器桥105和CPU 102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或两个以上的CPU 102以及两个或两个以上的并行处理系统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中的一些或所有PPU 202是具有渲染管线的图形处理器,它可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所提供的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常用帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU 202以及包括一个或多个用于通用计算的其他PPU 202。这些PPU可以是相同的或不同的,并且每个PPU均可具有专用并行处理存储器设备或不具有专用的并行处理存储器设备。并行处理子系统112中的一个或多个PPU 202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU 202均可输出数据到一个或多个显示设备110。
在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102为每个PPU 202写入命令流到数据结构中(在图1或图2中未明确示出),所述数据结构可位于系统存储器104、并行处理存储器204、或CPU 102和PPU 202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU 202从一个或多个入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
现在返回参考图2和图1,每个PPU 202均包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU 102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU 202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可作为外插卡来实现,所述外插卡可被插入到计算机系统100的扩展槽中。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥一起集成在单个芯片上。而在其他实施例中,PPU 202的一些或所有元件可以和CPU 102一起集成在单个芯片上。
在一个实施例中,通信路径113是PCI-EXPRESS链路,如本领域所知的,其中专用通道被分配到每个PPU 202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传输的数据包(或其他信号),并且还从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引导到PPU 202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而可将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU 202都实现高度并行处理架构。如详细示出的,PPU 202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC 208都能够并发执行大量的(例如,几百或几千)线程,其中每个线程均是程序的实例(instance)。在各种应用中,可分配不同的GPC 208用于处理不同类型的程序或用于执行不同类型的计算。取决于因每种类型的程序或计算所产生的工作量,GPC 208的分配可以变化。
GPC 208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。所述工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC 208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制是否将TMD添加到处理任务列表(或指向处理任务的指针列表)的头部或尾部的参数,从而提供除优先级以外的另一级别的控制。
存储器接口214包括D个分区单元215,每个分区单元215均直接耦合到一部分并行处理存储器204,其中D≥1。如所示的,分区单元215的数量一般等于动态随机存取存储器(DRAM)220的数量。在其他实施例中,分区单元215的数量也可以不等于存储器设备的数量。本领域的技术人员应该理解DRAM 220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM 220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
任意一个GPC 208都可以处理要被写到并行处理存储器204内的任意DRAM 220的数据。交叉开关单元210配置为路由每个GPC 208的输出到任意分区单元215的输入或到另一个GPC 208用于进一步处理。GPC 208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC 208内的处理内核能够与系统存储器104或对于PPU 202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC 208与分区单元215之间的业务流。
另外,GPC 208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色、顶点着色、几何着色、和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理所述数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU 102或另一个并行处理子系统112。
PPU 202可配备有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU 202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU 202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI-EXPRESS)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU 202连接到系统存储器。
如上所述,在并行处理子系统112中可以包括任意数量的PPU 202。例如,可在单个外插卡上提供多个PPU 202、或可将多个外插卡连接到通信路径113、或可将一个或多个PPU 202集成到桥式芯片中。在多PPU系统中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU 202的情况下,可并行操作那些PPU从而以高于单个PPU 202所可能达到的吞吐量来处理数据。包含一个或多个PPU 202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
多个并发任务调度
可以在GPC 208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务以由GPC 208执行。
图3A为根据本公开一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD 322的指针列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD 322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务以执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集若干任务。之后可以基于优先级信息或使用其他技术诸如循环调度来调度所收集的任务。
工作分布单元340包括具有槽的任务表345,每个槽均可以被用于正在执行的任务的TMD 322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务以执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针列表以使得任务的执行稍后将恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针列表。可以由在处理集群阵列230中执行的TMD 322生成子任务。
不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入帧缓冲区或传输到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU 102。通过帧缓冲区提供的任务与子任务之间的另一个区别是通过帧缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间自动生成的。
任务处理概述
图3B为根据本公开一个实施例的在图2的PPU 202之一内的GPC208的框图。每个GPC 208均可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC 208中的每一个内的处理引擎集发出指令的共有指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行相同指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。
经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC 208的操作。管线管理器305还可配置为通过为由SM 310所输出的处理数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC 208均包括M个SM310,其中M≥1,每个SM 310均配置为处理一个或多个线程组。另外,如本领域已知的,每个SM 310均有利地包括可以管线化的相同的功能执行单元集(例如执行单元和加载-存储单元—作为Exec单元302和LSU 303在图3C中示出),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任意组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同的功能单元硬件可均衡的用来(beleveraged to)实施不同的操作。
如本文之前所定义的,传输到特定GPC 208的一系列指令构成线程,以及跨SM 310内的并行处理引擎(未示出)的某一数量的并发执行线程的集合在本文中称为“warp”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM 310内的不同处理引擎。线程组可以包括比SM 310内的处理引擎数量少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM 310内的处理引擎数量多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM 310均可以并发支持多达G个线程组,结果是在任意给定时间在GPC 208中可以执行多达G*M个线程组。
此外,多个相关线程组可以在SM 310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数量并且通常是SM 310内的并行处理引擎数量的整数倍,以及m是SM310内同时活动的线程组的数量。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
每个SM310均包含一级(L1)高速缓存(图3C所示)或使用用于实施加载和存储操作的SM 310外部的相应L1高速缓存中的空间。每个SM 310都还有权访问在所有GPC 208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM 310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU 202外部的任意存储器均可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC 208内,其配置为接收并保持由SM 310所请求的经由存储器接口214从存储器获取的数据,包括指令、标准(uniform)数据和常数数据,并将所请求的数据提供给SM 310。在GPC 208中具有多个SM 310的实施例有利地共享了高速缓存在L1.5高速缓存335中的共有指令和数据。
每个GPC 208均可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)328。在其他实施例中,MMU 328可以驻留在存储器接口214内。MMU 328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存线索引。MMU 328可以包括地址转换后备缓冲区(TLB)或可以驻留在多处理器SM 310或L1高速缓存或GPC 208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存线索引可用于确定用于高速缓存线的请求是否命中或未命中。
在图形和计算应用中,GPC 208可配置为使得每个SM 310均耦合到用于实施纹理映射操作例如确定纹理样本位置、读出纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SM 310内的L1高速缓存读出纹理数据并根据需要从在所有GPC 208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了经由交叉开关单元210将所处理的任务提供给另一个GPC 208用于进一步处理或为了将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM 310均将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM 310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
应该理解本文所述的内核架构是示例性的并且各种变化和修改都是可能的。任意数量的处理单元例如SM 310或纹理单元315、preROP325均可以包括在GPC 208内。进一步地,如图2所示,PPU 202可以包括任意数量的GPC 208,所述GPC 208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC 208接收特定处理任务。进一步地,每个GPC 208有利地均使用单独的和各异的处理单元、L1高速缓存来独立于其他GPC 208操作以为一个或多个应用程序执行任务。
本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任意经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元等等。
在本发明的实施例中,使用PPU 202或计算系统的其他处理器以使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程均指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
每线程指令序列可包括定义代表性线程和线程阵列的一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程自动读出和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读出的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读出数据。因此,数据在线程之间共享的任意期望形式可以得到支持,以及CTA中的任意线程可以与同一个CTA中的任意其他线程分享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相分享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
图3C为根据本公开一个实施例的图3B的SM 310的框图。SM 310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令L1高速缓存370。warp调度器和指令单元312从指令L1缓冲370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM310功能单元。SM 310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。
SM 310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU 303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM 310内的每exec单元302)一个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD 322所代表的同一个处理任务的所有线程(或由所有LSU 303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD 322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD 322的标识符。
如果TMD 322是网格TMD,则TMD 322的执行会启动和执行固定数量的CTA以处理存储在队列525中的固定量的数据。将CTA的数量指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD 322中或TMD 322可以存储指向将由CTA所处理的数据的指针。TMD 322还存储由CTA所执行的程序的开始地址。
如果TMD 322是队列TMD,那么使用TMD 322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD 322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD 322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD 322中或与TMD 322分开存储,在该情况下TMD 322存储指向该队列的指针。有利地,当代表子任务的TMD 322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA均与特定TMD 322相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
参数存储器(未示出)存储可由同一个CTA内的任意线程(或任意LSU 303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM 310开始执行使用参数的任务之前将这些参数提供给参数存储器。任意CTA内的任意线程(或SM 310内的任意exec单元302)均可以通过存储器接口214访问全局存储器。可以将全局存储器的各部分存储在L1高速缓存320中。
每个线程均将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任意一个中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数量的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元中和P个下载-存储单元LSU 303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,这实现特殊寄存器之一。此外,标准L1高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU 303的每个通道的标准或常数值。
共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任意位置对于同一个CTA内的任意线程(或对于SM 310内的任意处理引擎)可访问。共享存储器306可以实现为具有允许任意处理引擎对共享存储器中的任意位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区域上并被高速缓存在L1高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU 303对其具有只读访问权限的单独的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,这实现特殊寄存器的各部分。SM 310中的每个LSU 303均耦合到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个相异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任意一个。
每个SM 310中的L1高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在L1高速缓存320中。LSU 303经由存储器和高速缓存互连380耦合到共享存储器306和L1高速缓存320。
指令调度
图4为根据本公开一个示范性实施例的图3C的warp调度器和指令单元312的框图。如图4所示,warp调度器和指令单元312包括指令高速缓存获取单元412,其配置为从指令L1高速缓存370获取包含用于warp的指令的高速缓存线。在一个实施例中,每个高速缓存线均为512位宽,在单个高速缓存线中存储八个指令(64位宽)。指令高速缓存获取单元412在没有解码从指令L1高速缓存370获取的指令的情况下将指令路由到指令获取缓冲区(IFB)422用于临时存储。此外,指令高速缓存获取单元412将与指令相关联的预解码数据路由到指令预解码缓冲区(IPB)424和宏调度器单元420。预解码数据可以编码与指令相关联的(由编译器预定的)延迟值(例如,执行该指令将在来自warp的下一个指令可以执行之前需要4个时钟周期)。预解码数据可以指示指令必须与下一个指令在同一调度周期中发出。预解码数据可以指示指令和下一个指令应该在连续的调度周期中发出。最后,预解码指令可以为指令调整选择优先级级别以增加或减少当用于另一线程组的指令没有资格被发出时该指令被选择以发出的可能性。
在一个实施例中,可通过仅解码指令的一部分(例如解码指令的前3位)来生成预解码数据。应该理解无论在实施解码操作所需的时钟周期的数目方面还是在SM 310中的物理逻辑电路量方面,仅解码指令的该一小部分远比解码整个64位指令更加高效。在另一实施例中,预解码数据可以作为单独的指令包括在高速缓存线中。例如,用于PPU 202的ISA(指令集架构)可以定义特殊指令(ss-inst),其当由PPU 202所解码用于执行时相当于NOP(无实施操作)指令。
当程序被编译以产生机器代码用于在PPU 202上执行各线程时,编译器可配置为将ss-inst指令写到存储器每行的开始(其中存储器的每行均与高速缓存线宽相对应)。ss-inst可以包括将指令标识为ss-inst指令的8位操作码以及七个8位值,所述七个8位值存储用于被写到存储器相应行的其他七个指令的每一个的预解码数据。在又一实施例中,可以通过其他技术可行的手段,诸如通过将预解码数据写到PPU 202中的特殊寄存器来将预解码数据传递到宏调度器单元420和IPB 424。
在一个实施例中,IPB 424实现简单读调度器以确保warp FIFO 442不为空。在一个实施例中,warp FIFO 442可以实现为存储与经调度以在SM 310上执行的warp的每一个相对应的ss-inst指令的若干FIFO。IPB 424使高速缓存获取能够与将指令分派到SM 310的逻辑单元相异步地实施。宏调度器单元420维护与在SM 310上所调度的warp的每一个相关联的优先级并基于优先级实施与所获取的指令相关联的预解码数据的排序。例如,宏调度器单元420可以在任意给定时间维护与在SM 310上所调度的16个不同warp的每一个相关联的6位或10位优先级值。可以基于各因素来指派优先级。在一个实施例中,优先级可以基于何时在SM 310上调度warp(即最长挂起的warp可以具有最高的优先级)。在其他实施例中,对于每个warp可由程序指定优先级,其由该warp所执行的指令来定义。
在一个实施例中,宏调度器单元420每j个时钟周期实施一次新的排序。例如,对于16个warp,宏调度器单元420可以每4个时钟周期实施一次优先级排序。在第一时钟周期中,宏调度器单元420可以对于16个挂起warp的每一个采样当前的优先级值,优先级的起始顺序基于前一次排序顺序。在第二时钟周期中,宏调度器单元420基于与两个warp相关联的优先级值来比较并交换warp0和warp2、warp1和warp3、warp4和warp6……以及warp13和15(warp0与最高优先级值相对应而warp15与最低优先级值相对应)。在第三时钟周期中,宏调度器单元420基于优先级值来比较并交换warp0和warp1、warp2和warp3、warp4和warp5……以及warp14和15。在第四时钟周期中,宏调度器单元420比较并交换warp1和warp2、warp3和warp4……以及warp13和14。之后由微调度器仲裁器440使用基于该优先级排序的新顺序来确定从哪个warp分派下一个指令。
微调度器仲裁器440基于对由宏调度器单元420所生成的warp顺序的优先级调整和预解码数据来选择存储在IFB 422中的指令。微调度器仲裁器440不一定按照由宏调度器单元420所指定的新顺序来选择指令。当第一指令可以基于预解码数据发出时,该指令由微调度器仲裁器440发出。当第一指令不可基于预解码数据发出时,微调度器仲裁器440确定用于不同warp的指令是否可以基于用于各指令的预解码数据而发出。在某些情况下,第一指令可以发出,除非预解码数据指定第一指令是低优先级,使得(来自不同warp的)另一指令可以代替发出。在所有情况下,用于每个warp个体的指令按照从宏调度器单元420所接收的用于各warp个体的指令的顺序而发出。因此,对于任意调度周期,微调度器仲裁器440按照由宏调度器单元420所提供的新顺序来考虑第一指令用于选择。取决于用于第一指令的预解码数据,微调度器仲裁器440可以从不同的warp选择指令。
微调度器仲裁器440维护SM 310的状态模式,所述SM 310的状态模式基于所发出的指令而更新。该状态模式允许微调度器仲裁器440基于程序的动态执行和SM 310内资源的可用性来选择指令。例如,可以将执行指令的SM 310或SM 310内的功能单元标识为指令所需的资源并且资源的可用性可以由微调度器仲裁器440使用。
一旦微调度器仲裁器440选择了下一个指令以发出,则微调度器仲裁器440就使得指令从IFB 422路由到解码单元450。在一些实施例中,取决于SM 310的架构,指令可以是双重或四重发出的,这意味着在特定时钟周期中可以发出并解码一个以上的指令。
解码单元450从IFB 422接收所要分派的下一个指令。解码单元450实施指令的全解码并将所解码的指令传输到分派单元470。另外,在一些实施例中,指令可以是双重或四重发出的并且解码单元450可以对每个所发出的指令实现单独的解码逻辑。分派单元470实现FIFO并将所解码的值写到本地寄存器堆304以由执行单元302或加载/存储单元303执行。在同时发出多个指令的实施例中,分派单元470可以发出每个指令到SM 310的功能单元的不同部分。记分板单元480管理并追踪每个线程组已经解码并分派的指令数量。
warp调度器和指令单元312还可以包括重播缓冲区430。在一些实例中,由分派单元470所分派的指令可能被SM 310中的功能执行单元所拒绝。在这些实例中,可以将所解码的指令存储在重播缓冲区430中以在以后的时钟周期再次发出和分派,而不是重新获取指令和重新解码指令。投机式(speculatively)发出和未被执行的指令可能需要重发并输入到重播缓冲区430。指令可能由于高速缓存未命中或不正确的分支而未被执行。不是等待高速缓存未命中得到解决并导致该指令后面已经发出的指令被延迟,而是在以后的时间重发指令。
微调度器仲裁器440从重播缓冲区430接收所要重发的指令。微调度器仲裁器440通常配置为从重播缓冲区430选择重发指令而不是选择warpFIFO 442中的任意指令。然而,用于warp FIFO 442中的第一指令的预解码数据可以指定即使当重发指令可用时也应该由微调度器仲裁器440选择第一指令。
图5A示出了根据本公开一个示范性实施例的从指令L1高速缓存370所获取的高速缓存线500。如图所示,高速缓存线500为512位宽并包括八个指令。位0到63存储特殊指令(ss-inst)510,与图4中的上述指令相似,其包括与高速缓存线500中的其他七个指令的每一个相关联的预解码数据。除ss-inst 510之外,高速缓存线500的位64到127存储第一指令(inst_1)521,位128到191存储第二指令(inst_2)522,位192到255存储第三指令(inst_3)523,位256到319存储第四指令(inst_4)524,位320到383存储第五指令(inst_5)525,位384到447存储第六指令(inst_6)526以及位448到512存储第七指令(inst_7)527。应该理解在不同实施例中高速缓存线500的大小可以变化。例如,在一个实施例中,指令可以是32位宽而高速缓存线500可以是256位宽。在其他实施例中,每指令的预解码数据的量可以长于8位以及因此驱动程序103可以将两个连续的ss-inst指令写到高速缓存线500的位0到128以及将六个指令写到位128到512中,其中每个ss-inst为高速缓存线500中的六个指令中的三个提供预解码数据。
图5B示出了根据本公开一个示范性实施例的图5A的特殊指令ss-inst510。如图5B所示,ss-inst510包括操作码530,所述操作码530为8位宽并存储在ss-inst510的位0到7。ss-inst510指令还包括用于与ss-inst510相关联的七个指令的预解码数据。将第一预解码数据集(P_1)541存储在位8到15,将第二预解码数据集(P_2)542存储在位16到23,将第三预解码数据集(P_3)543存储在位24到31,将第四预解码数据集(P_4)544存储在位32到39,将第五预解码数据集(P_5)545存储在位40到47,将第六预解码数据集(P_6)546存储在位48到55,以及将第七预解码数据集(P_7)547存储在位56到63。如上所简要论述的,预解码数据541-547可以编码与为相应指令调度信息相关联的一个或多个值。例如,预解码数据可以编码具有四位(即0和15之间的值)的延迟值以及具有其他四位的特殊调度提示,诸如向warp调度器和指令单元312指示在相应指令之后至少八个调度周期不应发出来自同一warp的附加指令的代码。
有被编码在用于指令的预解码数据中的四种不同类型的调度提示,例如缺省、配对(pair)、保持和等待。定义(固定或编程)缺省调度提示并将其用于为其指定缺省调度提示的指令。配对调度提示指定第一指令应该在同一调度周期中与用于同一warp的下一个指令一起发出。将为下一个指令所指定的提示施加到与下一个指令配对的第一指令。保持调度提示指定应该在用于任意其他warp的指令之前选择第一指令。此外,保持调度提示还指定在第一指令之前是否可以选择从重播缓冲区430所接收的重发指令。在一个实施例中,保持调度提示还指定对于warp是否即使先前所发出的加载或存储操作尚未完成也可以发出第一指令。
等待调度提示指定微调度器仲裁器440在发出第一指令之前应该等待w个发出周期。此外,调度提示可以指示对于warp的指令应该提高(boost)特定warp的发出优先级。相反,调度提示可以指示应该降低特定warp的发出优先级,使得对于给定指令来说该warp让位以允许用于其他warp的指令发出。在为等待调度提示所指定的调度周期的数量已经发生之后增高或降低用于warp的指令的调度优先级。当用于warp的指令的优先级降低时,可以指定特定数量的调度周期,在此之后调度优先级增高回到中性水平。当与等待调度提示相对应的指令发出时,用于warp的调度优先级可在用于该warp的另一指令是从warp FIFO 442提供到微调度器仲裁器440的第一指令时改变。最后,调度提示还可以指示当warp中的一个或多个线程在执行期间发散时指令是否可能重发一次或多次。
表1示出了用于每个调度提示的不同类型的预解码数据和操作。
表1调度提示类型和操作
Figure BDA00002633244700191
图6示出了根据本公开一个示范性实施例的用于在没有指令解码的情况下调度指令的方法600。尽管结合图1、2、3A-3C、4和5的系统描述了该方法步骤,但是本领域普通技术人员应该理解任意配置为以任意顺序实施该方法步骤的系统均在本公开的范围内。
方法600始于步骤610,其中warp调度器和指令单元312从指令L1高速缓存370获取与两个或两个以上线程组相关联的多个指令。每次获取均可检索高速缓存线,所述高速缓存线包含存储在同一高速缓存线中的若干各异指令。在一个实施例中,高速缓存线的第一指令是特殊指令(ss-inst)510,包括用于存储在高速缓存线中的其他指令的预解码数据。在步骤612,warp调度器和指令单元312将指令存储在warp调度器和指令单元312内的IFB 422中。在步骤614,warp调度器和指令单元312将预解码数据传输到IPB 424。在一个实施例中,通过实施指令的部分解码来生成预解码数据。在另一实施例中,从包括在高速缓存线中的特殊指令读出预解码数据。在又一实施例中,可以从存储器中的特殊位置读出预解码数据。
在步骤616,包括在warp调度器和指令单元312中的宏调度器单元420实施优先级排序以确定两个或两个以上线程组的顺序。在一个实施例中,warp调度器和指令单元312可以管理多达十六个不同线程组用于并行执行。线程组的顺序代表每个线程组的优先级用于调度决策。宏调度器单元420可以将6位优先级值指派到线程组的每一个。宏调度器单元420根据线程组优先级值将IPB 422中的预解码数据排序到warp FIFO 442中,生成用于线程组的指令顺序。在步骤618,包括在warp调度器和指令单元312中的微调度器仲裁器440至少部分基于线程组的顺序和warp FIFO 442中的预解码数据来选择指令用于执行。
在步骤620,包括在warp调度器和指令单元312中的解码单元450解码所选择的指令用于在SM 310上执行。在一个实施例中,解码单元450可以实现两个或两个以上单独和各异的逻辑块用于并行解码多个指令。在步骤622,分派单元470将所解码的指令传输到本地寄存器堆304用于由SM 310的功能单元执行。在步骤624,warp调度器和指令单元312确定IFB422中是否有更多挂起指令。如果有更多挂起指令,那么方法600返回到步骤610并且选择另一指令用于执行。然而,如果IFB 422中没有挂起指令,那么方法600终止。
所公开系统的一个优势是解码单元仅解码所要调度的下一个指令,这减小了由在确定调度哪个指令之前等待直到已经解码多个指令为止所引入的延迟。所公开系统的另一优势是在利用微调度器仲裁器调整线程组的顺序之前利用宏调度器单元实施优先级排序,其大大减少了实现调度算法所需的逻辑量,仅要求所排序线程组的快速树遍历以确定准备分派的最高优先级指令。
图7示出了根据本公开一个示范性实施例的用于使用预解码数据调度指令的方法700。方法700中所示的步骤可以用于实施图6的步骤618的至少一部分。尽管结合图1、2、3A-3C、4和5的系统描述了该方法步骤,但是本领域普通技术人员应该理解任意配置为以任意顺序实施该方法步骤的系统均在本公开的范围内。
对于每个调度周期由微调度器仲裁器440实施方法700。方法700始于步骤705,其中微调度器仲裁器440确定预解码数据是否编码保持调度提示,以及如果是,那么在步骤710微调度器仲裁器440确定是否为保持调度提示指定“全部(all)”操作。如果指定“全部”操作,那么在步骤762,微调度器仲裁器440发出第一指令。即使重发指令可以发出也发出第一指令。
如果在步骤710微调度器仲裁器440确定没有为保持调度提示指定“全部”操作,那么为保持调度提示指定IFB操作,以及在步骤714微调度器仲裁器440确定重发指令在重播缓冲区430中是否可用。如果重发指令在重播缓冲区430中不可用,那么在步骤762微调度器仲裁器440发出第一指令。如果在步骤714重发指令在重播缓冲区430中可用,那么在步骤716微调度器仲裁器440发出重发指令。
返回步骤705,如果微调度器仲裁器440确定预解码数据不编码保持调度提示,那么在步骤706微调度器仲裁器440确定重发指令在重播缓冲区430中是否可用。如果重发指令在重播缓冲区430中可用,那么在步骤716微调度器仲裁器440发出重发指令。
如果在步骤706微调度器仲裁器440确定重发指令在重播缓冲区430中不可用,那么在步骤715微调度器仲裁器确定是否配对调度提示,如果是,则在步骤717在同一调度周期中发出第一和第二指令。第一指令是由宏调度器单元420提供到微调度器仲裁器440的用于warp的指令的新顺序中的第一个指令。第二指令是用于与第一指令相同的warp的第二个指令。换言之,第二指令不一定是指令新顺序中的第二个指令。
如果在步骤715,微调度器仲裁器440确定解码数据不编码配对调度提示,那么在步骤730微调度器仲裁器440确定预解码数据是否编码等待调度提示。如果预解码数据不编码等待调度提示,那么预解码数据编码应该使用缺省调度提示。缺省调度提示可以是具有关联操作的配对、等待或保持调度提示。在步骤732微调度器仲裁器440使用缺省调度提示并返回步骤705以确定由缺省调度提示所指定的调度提示。
如果在步骤730微调度器仲裁器440确定预解码数据编码等待调度提示,那么在步骤735微调度器仲裁器440确定第一指令是否是在前一个调度周期中尚未考虑选择的新指令。如果第一指令是新指令,那么在步骤740基于为等待调度提示所指定的w值来初始化用于warp的等待计数器。每个调度周期均对用于warp的等待计数器进行更新(递增或递减)。第一指令不会发出直到至少w个调度周期已经发生之后。如果在步骤735微调度器仲裁器440确定第一指令不是新指令,那么在步骤745微调度器仲裁器440确定用于warp的等待计数器是否已经到期,这指示对于第一指令来说w个调度周期已经发生。如果在步骤745等待计数器还未到期,那么在步骤780发出来自另一warp的指令。
如果在步骤745微调度器仲裁器440确定用于warp的等待计数器已经到期,那么在步骤750微调度器仲裁器440确定是否为等待调度提示指定提高操作。当指定提高操作时,在步骤755微调度器仲裁器440更新用于warp的优先级以增高调度优先级。在步骤780第一指令被尽快发出。
当不指定提高操作时,在步骤760微调度器仲裁器440确定是否为等待调度提示指定让位操作。如果不指定让位操作,则在步骤762发出第一指令。否则在步骤765微调度器仲裁器440确定对于第一指令来说等待计数器是否刚刚到期。当对于warp来说等待计数器刚刚到期时,那么应该初始化让位计数器。在步骤767更新用于warp的调度优先级。在步骤770基于为等待调度提示所指定的y值来初始化用于warp的让位计数器。每个调度周期均对用于warp的让位计数器进行更新(递增或递减)直到y个调度周期已经发生为止。当用于warp的调度优先级减小时,微调度器仲裁器440将选择用于具有较高调度优先级的不同warp的指令。因此,在步骤780微调度器仲裁器440发出用于不同warp的指令。
返回步骤765,当微调度器仲裁器440确定等待计数器尚未到期,那么对于warp已经初始化让位计数器以及在步骤775微调度器仲裁器440确定用于warp的让位计数器是否已经到期,这指示对于第一指令来说y个调度周期已经发生。如果在步骤775让位计数器尚未到期,那么在步骤780发出来自另一warp的指令。否则在步骤755将用于warp的优先级更新到中性值。
预解码数据对调度提示进行编码以在运行时用来控制相对于用于同一warp的其他指令何时发出指令以执行,以及用来调整优先级级别以控制微调度器仲裁器440如何在不同warp之间选择指令用于发出。由编译器来确定调度提示。调度提示可以指定若干调度周期以在调度指令之前等待并且还可以为指令指定调度优先级。一旦微调度器仲裁器440选择指令以发出用于执行,解码单元就完全解码指令。仅解码指令的预解码数据部分以控制指令的调度远比解码整个64位指令并分析用于每个warp的指令序列更加高效。
本公开的一个实施例可以作为与计算机系统一起使用的程序产品实现。程序产品的程序定义实施例的功能(包括本文所述的方法)并且可以被包含在各种计算机可读存储介质上。示意性的计算机可读存储介质包括,但不限于:(ⅰ)信息被永久保存在其上的非可写存储介质(例如,计算机内的只读存储器设备,诸如可被压缩光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器);和(ⅱ)可变信息被保存在其上的可写存储介质(例如,磁盘驱动器内的软盘或者硬盘驱动器或者任何类型的固态随机存取半导体存储器)。
以上已经参照特定实施例描述了本公开。然而,本领域的普通技术人员应该理解在不脱离如所附权利要求提出的本公开更宽的精神和范围的情况下,可以做出各种修改和改变。因此,前述的描述和附图应被视为示意性的而非限制性的意义。

Claims (11)

1.一种用于在并行计算装置内调度指令的计算机实现的方法,所述方法包括:
从指令高速缓存单元获取与两个或两个以上线程组相对应的指令;
接收与所述指令的每一个相关联的预解码数据,其中所述预解码数据在编译所述指令时确定;
在运行时至少部分地基于所述预解码数据来选择第一指令以发出用于由并行处理单元执行;
解码所述第一指令;以及
将所述第一指令分派到所述并行处理单元用于执行。
2.根据权利要求1所述的方法,其中所述预解码数据编码等待调度提示,所述等待调度提示包括在发出所述第一指令用于执行之前发生的若干调度周期。
3.根据权利要求1所述的方法,其中所述预解码数据指定使用缺省调度提示来调度所述第一指令。
4.根据权利要求1所述的方法,其中所述预解码数据编码保持调度提示,所述保持调度提示配置调度单元来选择所述第一指令以越过以前所发出的指令而发出,所述以前所发出的指令未能执行并为可用于发出的重发指令。
5.根据权利要求1所述的方法,其中所述预解码数据编码保持调度提示,所述保持调度提示配置调度单元来选择以越过所述第一指令而发出以前所发出的指令,所述以前所发出的指令未能执行并为可用于发出的重发指令。
6.根据权利要求1所述的方法,其中所述预解码数据编码配对调度提示,所述配对调度提示配置调度单元来选择以在单个调度周期中发出所述第一指令和第二指令,并且其中所述第一指令和所述第二指令与所述两个或两个以上线程组的第一线程组相关联。
7.一种调度单元,包括:
指令高速缓存获取单元,其配置为将与两个或两个以上线程组相对应的指令路由到第一缓冲区并将与所述指令的每一个相关联的预解码数据路由到第二缓冲区;
宏调度器单元,其耦合到所述指令高速缓存获取单元并配置为接收预解码数据,其中所述预解码数据在编译所述指令时确定;
微调度器仲裁器,其耦合到所述宏调度器单元和所述第二缓冲区并配置为在运行时至少部分地基于所述预解码数据选择第一指令用于由处理单元执行;
解码单元,其耦合到所述第一缓冲区并配置为解码所述第一指令;以及
分派单元,其耦合到所述解码单元并配置为将所述第一指令分派到处理单元用于执行。
8.根据权利要求7所述的调度单元,其中所述预解码数据编码等待调度提示,所述等待调度提示包括在发出所述第一指令用于执行之前发生的若干调度周期。
9.根据权利要求7所述的调度单元,其中所述预解码数据指定使用缺省调度提示来调度所述第一指令。
10.根据权利要求7所述的调度单元,其中所述预解码数据编码保持调度提示,所述保持调度提示配置调度单元来选择所述第一指令以越过以前所发出的指令而发出,所述以前所发出的指令未能执行并为可用于发出的重发指令。
11.根据权利要求7所述的调度单元,其中所述预解码数据编码保持调度提示,所述保持调度提示配置调度单元来选择以越过所述第一指令而发出以前所发出的指令,所述以前所发出的指令未能执行并为可用于发出的重发指令。
CN2012105645899A 2011-12-21 2012-12-21 用于使用预解码数据调度指令的方法和装置 Pending CN103226463A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/333,879 2011-12-21
US13/333,879 US9798548B2 (en) 2011-12-21 2011-12-21 Methods and apparatus for scheduling instructions using pre-decode data

Publications (1)

Publication Number Publication Date
CN103226463A true CN103226463A (zh) 2013-07-31

Family

ID=48575843

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2012105645899A Pending CN103226463A (zh) 2011-12-21 2012-12-21 用于使用预解码数据调度指令的方法和装置

Country Status (4)

Country Link
US (1) US9798548B2 (zh)
CN (1) CN103226463A (zh)
DE (1) DE102012222913A1 (zh)
TW (1) TWI493451B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103761073A (zh) * 2014-01-08 2014-04-30 东南大学 一种面向ARMv7的基于推测的指令动态调度方法
WO2016131428A1 (zh) * 2015-02-20 2016-08-25 上海芯豪微电子有限公司 一种多发射处理器系统和方法
CN107729127A (zh) * 2016-08-12 2018-02-23 北京小米移动软件有限公司 智能控制方法及装置
CN109144687A (zh) * 2017-06-16 2019-01-04 想象技术有限公司 对任务进行调度
CN109922159A (zh) * 2019-03-27 2019-06-21 宁波大学 一种物联网设备间云端双向虚拟连接的方法
CN110008009A (zh) * 2017-11-14 2019-07-12 辉达公司 在运行时绑定常量以提高资源利用率

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9201636B2 (en) * 2013-11-21 2015-12-01 National Tsing Hua University Method for divergence analysis of pointer-based program
US9626218B1 (en) 2014-03-10 2017-04-18 Altera Corporation Repartitioning and reordering of multiple threads into subsets based on possible access conflict, for sequential access to groups of memory banks in a shared memory
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US11301256B2 (en) * 2014-08-22 2022-04-12 Advanced Micro Devices, Inc. System and method for page-conscious GPU instruction
US9919212B2 (en) * 2014-12-22 2018-03-20 Gree, Inc. Server apparatus, control method for server apparatus, and program
KR102370733B1 (ko) * 2015-04-13 2022-03-08 에스케이하이닉스 주식회사 출력 커맨드들을 전송하는 컨트롤러 및 그것의 동작 방법
GB2540970B (en) * 2015-07-31 2018-08-15 Advanced Risc Mach Ltd Executing Groups of Instructions Atomically
US10838871B2 (en) * 2016-11-07 2020-11-17 International Business Machines Corporation Hardware processor architecture having a hint cache
US10324726B1 (en) 2017-02-10 2019-06-18 Apple Inc. Providing instruction characteristics to graphics scheduling circuitry based on decoded instructions
US11442795B2 (en) 2018-09-11 2022-09-13 Nvidia Corp. Convergence among concurrently executing threads
US10606603B1 (en) * 2019-04-08 2020-03-31 Ye Tao Methods and apparatus for facilitating a memory mis-speculation recovery
US11934867B2 (en) 2020-07-23 2024-03-19 Nvidia Corp. Techniques for divergent thread group execution scheduling
US20230115044A1 (en) * 2021-10-08 2023-04-13 Nvidia Corp. Software-directed divergent branch target prioritization
CN114168202B (zh) * 2021-12-21 2023-01-31 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质
US11954492B1 (en) * 2022-09-19 2024-04-09 Apple Inc. Fence enforcement techniques based on stall characteristics
US20240095065A1 (en) * 2022-09-19 2024-03-21 Apple Inc. Multi-stage Thread Scheduling

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060037021A1 (en) * 2004-08-12 2006-02-16 International Business Machines Corporation System, apparatus and method of adaptively queueing processes for execution scheduling
CN1760826A (zh) * 2004-10-14 2006-04-19 国际商业机器公司 用于处理指令的方法、处理器以及系统
US20060242645A1 (en) * 2005-04-26 2006-10-26 Lucian Codrescu System and method of executing program threads in a multi-threaded processor

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5687339A (en) * 1995-09-14 1997-11-11 Elan Microelectronics Corp. Pre-reading and pre-decoding of instructions of a microprocessor within single cycle
US5845101A (en) * 1997-05-13 1998-12-01 Advanced Micro Devices, Inc. Prefetch buffer for storing instructions prior to placing the instructions in an instruction cache
EP0936539B1 (de) 1998-02-12 2012-10-31 Infineon Technologies AG Vorrichtung und Verfahren zum Holen von Befehlen für eine programmgesteuerte Einheit
US20020087821A1 (en) * 2000-03-08 2002-07-04 Ashley Saulsbury VLIW computer processing architecture with on-chip DRAM usable as physical memory or cache memory
GB2382422A (en) * 2001-11-26 2003-05-28 Infineon Technologies Ag Switching delay stages into and out of a pipeline to increase or decrease its effective length
US20030101336A1 (en) * 2001-11-28 2003-05-29 Sun Microsystems, Inc. Technique for associating instructions with execution events
US7363474B2 (en) 2001-12-31 2008-04-22 Intel Corporation Method and apparatus for suspending execution of a thread until a specified memory access occurs
US20030212881A1 (en) * 2002-05-07 2003-11-13 Udo Walterscheidt Method and apparatus to enhance performance in a multi-threaded microprocessor with predication
US20040064756A1 (en) * 2002-09-26 2004-04-01 Sudarshan Kadambi Method and apparatus for improving reliability in computer processors by re-executing instructions
US7484075B2 (en) 2002-12-16 2009-01-27 International Business Machines Corporation Method and apparatus for providing fast remote register access in a clustered VLIW processor using partitioned register files
US7284117B1 (en) 2003-11-04 2007-10-16 Advanced Micro Devices, Inc. Processor that predicts floating point instruction latency based on predicted precision
US7580914B2 (en) * 2003-12-24 2009-08-25 Intel Corporation Method and apparatus to improve execution of a stored program
JP2006107338A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置
US7681014B2 (en) 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US8205200B2 (en) * 2005-11-29 2012-06-19 Intel Corporation Compiler-based scheduling optimization hints for user-level threads
US7509481B2 (en) 2006-03-03 2009-03-24 Sun Microsystems, Inc. Patchable and/or programmable pre-decode
US7840786B2 (en) 2007-04-16 2010-11-23 Advanced Micro Devices, Inc. Techniques for storing instructions and related information in a memory hierarchy
US7958333B2 (en) * 2007-05-30 2011-06-07 XMOS Ltd. Processor with memory access stage adapted to fetch an instruction of a thread when no memory access operation is detected
CN101325063B (zh) 2007-06-12 2011-02-16 建兴电子科技股份有限公司 全息储存系统中寻找定位点位置的方法
US8898437B2 (en) 2007-11-02 2014-11-25 Qualcomm Incorporated Predecode repair cache for instructions that cross an instruction cache line
US8086825B2 (en) 2007-12-31 2011-12-27 Advanced Micro Devices, Inc. Processing pipeline having stage-specific thread selection and method thereof
US7917735B2 (en) * 2008-01-23 2011-03-29 Arm Limited Data processing apparatus and method for pre-decoding instructions
US8082426B2 (en) 2008-11-06 2011-12-20 Via Technologies, Inc. Support of a plurality of graphic processing units
US8799582B2 (en) 2008-12-30 2014-08-05 Intel Corporation Extending cache coherency protocols to support locally buffered data
GB2466984B (en) 2009-01-16 2011-07-27 Imagination Tech Ltd Multi-threaded data processing system
US8533435B2 (en) 2009-09-24 2013-09-10 Nvidia Corporation Reordering operands assigned to each one of read request ports concurrently accessing multibank register file to avoid bank conflict
US8522000B2 (en) 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060037021A1 (en) * 2004-08-12 2006-02-16 International Business Machines Corporation System, apparatus and method of adaptively queueing processes for execution scheduling
CN1760826A (zh) * 2004-10-14 2006-04-19 国际商业机器公司 用于处理指令的方法、处理器以及系统
US20060242645A1 (en) * 2005-04-26 2006-10-26 Lucian Codrescu System and method of executing program threads in a multi-threaded processor

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MARK GEBHART等: "Energy-efficient Mechanisms for Managing Thread Context in Throughput Processors", 《2011 38TH ANNUAL INTERNATIONAL SYMPOSIUM ON COMPUTER ARCHITECTURE》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103761073A (zh) * 2014-01-08 2014-04-30 东南大学 一种面向ARMv7的基于推测的指令动态调度方法
WO2016131428A1 (zh) * 2015-02-20 2016-08-25 上海芯豪微电子有限公司 一种多发射处理器系统和方法
CN107729127A (zh) * 2016-08-12 2018-02-23 北京小米移动软件有限公司 智能控制方法及装置
CN109144687A (zh) * 2017-06-16 2019-01-04 想象技术有限公司 对任务进行调度
CN109144687B (zh) * 2017-06-16 2023-11-07 想象技术有限公司 对任务进行调度
US11868807B2 (en) 2017-06-16 2024-01-09 Imagination Technologies Limited Scheduling tasks using work fullness counter
CN110008009A (zh) * 2017-11-14 2019-07-12 辉达公司 在运行时绑定常量以提高资源利用率
CN109922159A (zh) * 2019-03-27 2019-06-21 宁波大学 一种物联网设备间云端双向虚拟连接的方法
CN109922159B (zh) * 2019-03-27 2021-10-08 宁波大学 一种物联网设备间云端双向虚拟连接的方法

Also Published As

Publication number Publication date
US20130166881A1 (en) 2013-06-27
TWI493451B (zh) 2015-07-21
US9798548B2 (en) 2017-10-24
DE102012222913A1 (de) 2013-06-27
TW201342212A (zh) 2013-10-16

Similar Documents

Publication Publication Date Title
CN103226463A (zh) 用于使用预解码数据调度指令的方法和装置
CN103279379A (zh) 用于在没有指令解码的情况下调度指令的方法和装置
CN104050033A (zh) 用于有索引的屏障的硬件调度的系统和方法
US9830156B2 (en) Temporal SIMT execution optimization through elimination of redundant operations
CN103197916A (zh) 用于源操作数收集器高速缓存的方法和装置
US10255228B2 (en) System and method for performing shaped memory access operations
US10346212B2 (en) Approach for a configurable phase-based priority scheduler
US9606808B2 (en) Method and system for resolving thread divergences
CN103729167A (zh) 用于改进多线程处理单元中的性能的技术
CN103309702A (zh) 用于并行线程子集的一致加载处理
CN104050032A (zh) 用于有条件的屏障和急迫的屏障的硬件调度的系统和方法
CN103777926A (zh) 多线程处理单元中的高效存储器虚拟化
US9069609B2 (en) Scheduling and execution of compute tasks
CN103226481A (zh) 自动从属任务启动
CN103885893A (zh) 用于访问内容寻址存储器的技术
CN103365631A (zh) 用于存储器访问的动态库模式寻址
CN103294536A (zh) 控制用于处理任务的工作分布
CN103885902A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN103257931A (zh) 成形的寄存器堆读取
CN103207810A (zh) 计算任务状态封装
CN103870309A (zh) 用于集群多级寄存器堆的寄存器分配
CN103996216A (zh) 用于曲面细分和几何着色器的电力高效属性处置
CN103885903A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN103197918B (zh) 多通道时间片组
CN103294449B (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
AD01 Patent right deemed abandoned

Effective date of abandoning: 20161228

C20 Patent right or utility model deemed to be abandoned or is abandoned