CN103729167A - 用于改进多线程处理单元中的性能的技术 - Google Patents

用于改进多线程处理单元中的性能的技术 Download PDF

Info

Publication number
CN103729167A
CN103729167A CN201310479294.6A CN201310479294A CN103729167A CN 103729167 A CN103729167 A CN 103729167A CN 201310479294 A CN201310479294 A CN 201310479294A CN 103729167 A CN103729167 A CN 103729167A
Authority
CN
China
Prior art keywords
subtask
task
processing engine
copy
engine
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
CN201310479294.6A
Other languages
English (en)
Inventor
桑缪尔·H·邓肯
加里·瓦尔德
M·瓦西乌·帕西德
林肯·G·加利克
沃伊切赫·简·特鲁缇
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 CN103729167A publication Critical patent/CN103729167A/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/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals

Abstract

提供用于改进多线程处理单元中的性能的技术。多线程处理单元包括耦连到一个或多个处理引擎(例如拷贝引擎、GPC等)的硬件预处理器,其通过将任务分成较小子任务并基于任务的优先级在处理引擎上调度子任务来实现先占技术。通过限制子任务的大小,可快速执行较高优先级任务而不用切换处理引擎的上下文状态。可基于阈值大小或通过考虑诸如存储器系统的物理边界的其他因素来再分任务。

Description

用于改进多线程处理单元中的性能的技术
技术领域
本发明总地涉及调度,并且,更具体地,涉及用于改进多线程处理单元中的性能的技术。
背景技术
典型地,计算机系统在多个应用之间共享硬件。在中央处理单元(CPU)中,应用被执行直到事件使上下文切换到不同应用为止。可由于某些操作条件触发上下文切换,诸如到达执行流中的、要求由不同进程或硬件单元进行某动作的特定点、分配到进程的时间量子(time quanta)的超期、或系统需要运行较高优先级进程(即先占,pre-emption)的结果。
存在数个公用方法以实现上下文切换。在一个实现方案中,CPU可在指令边界停止处理、将上下文状态推到栈上、以及加载不同上下文。在由图形处理单元(GPU)实现的不同方法中,GPU停止发出新指令并等待当前工作通过管线完成处理(即等待闲置Wait-For-Idle或WFI)。在该方法中,不要求GPU保存任何上下文状态,因为允许已发出的工作完成处理。在由GPU实现的另一方法中,GPU可停止处理当前在管线中的所有工作、将上下文状态写到存储器、以及加载不同上下文。
典型地,GPU上下文状态比CPU上下文状态大得多。此外,GPU典型地实现花费数百或数千时钟周期来完成的较长管线。因此,在上文阐述的后两个方法的任何一个中,引入大上下文切换时延惩罚。在第一方法中(WFI方法),要求先前发出的指令在管线中完成处理,其在可发出与不同上下文相关联的新指令之前花费数百或数千时钟周期。在第二方法中,保存大GPU上下文状态同样可花费数百或甚至数千时钟周期。
因此,本领域中需要的是用于在具有大图形管线的GPU上执行多线程操作的更高效的方法。
发明内容
本发明的一个实施例阐述用于改进多线程处理引擎中的性能的方法。方法包括以下步骤:接收要由处理引擎执行的第一任务,将第一任务分成子任务的第一集合,以及发出来自子任务的第一集合的至少一个子任务到处理引擎用于处理,其中子任务的第一集合中的每个子任务小于阈值大小。方法进一步包括以下步骤:接收要由处理引擎执行的第二任务(第二任务比第一任务具有更高优先级),将第二任务分成子任务的第二集合,以及通过在发出来自子任务的第一集合的所有子任务到处理引擎用于处理之前发出来自子任务的第二集合的至少一个子任务到处理引擎用于处理来先占第一任务,其中子任务的第二集合中的每个子任务小于阈值大小。
本发明的另一实施例阐述用于改进多线程处理引擎中的性能的系统。系统包括配置为执行任务的一个或多个处理引擎和耦连到一个或多个处理引擎的预处理器。预处理器配置为实施上文阐述的方法。本发明的又一实施例阐述包括配置为执行任务的一个或多个处理引擎和耦连到一个或多个处理引擎的预处理器的计算设备。计算设备的预处理器配置为实施上文阐述的方法。
所公开的技术的一个优点是在每个单独的处理引擎的上下文切换是不必要的,因此不采用复杂的调度逻辑和/或上下文切换能力实现处理引擎。可通过让小任务完成执行并随后切换到较高优先级任务来简单地先占应用。此外,技术对程序员完全透明,其可生成任何大小的任务而不用担心系统中可能生成的阻止较高优先级任务被执行的时延。
附图说明
因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
图3A是根据本发明的一个实施例的、图2的前端的框图;
图3B是根据本发明的一个实施例的、图2的并行处理单元之一内的通用处理集群的框图;
图3C是根据本发明的一个实施例的、图3B的流多处理器的一部分的框图;
图4示出根据本发明的一个实施例的、图2的并行处理单元(PPU);
图5A和5B示出根据本发明的一个实施例的、用于将任务分成子任务的集合的两个方法;以及
图6是根据本发明的一个实施例的、用于改进多线程处理引擎中的性能的方法步骤的流程图。
为了清楚起见,在适用的地方已使用同样的参考数字,以标明在图示之间是共同的同样的元素。可预期的是,一个实施例的特征可包含在其他实施例中而无需进一步详述。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本公开更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
系统概述
图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如快速外围部件互连(PCIe)、加速图形端口或超传输链路)耦连到存储器桥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从CPU 102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU 202。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU 202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU 202可输出数据到一个或多个显示设备110。
在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU 102发出控制PPU202的操作的命令。在一些实施例中,CPU 102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU 102和PPU 202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)(即存储器中的存储用于PPU 202的命令流的缓冲区)以发起对数据结构中的命令流的处理。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都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC 208用于处理不同类型的程序或用于执行不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
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个SM 310,其中M≥1,每个SM 310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元—在图3C中示出为Exec单元302和LSU 303),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
如本文之前所定义的,传送到特定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的硬件资源诸如存储器或寄存器的容量来确定。
每个SM 310包含一级(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。在GPC208中具有多个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高速缓存读取纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC 208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM 310将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM 310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM 310或纹理单元315、preROP 325可以包括在GPC 208内。进一步地,如图2所示,PPU 202可以包括任何数目的GPC 208,所述GPC 208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC 208接收特定处理任务。进一步地,每个GPC 208有利地使用分开且各异的处理单元、L1高速缓存来独立于其他GPC 208操作以为一个或多个应用程序执行任务。
本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
在本发明的实施例中,使用计算系统的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。线程束调度器和指令单元312从指令L1高速缓存370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM 310功能单元。SM 310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU)303。
SM 310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU 303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM 310内的每exec单元302)一个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD 322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储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的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD 322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD 322中或与TMD 322分开存储,在该情况下TMD 322存储指向该队列的队列指针。有利地,当代表子任务的TMD 322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD 322相关联用于一个或多个任务的并发执行。此外,单个GPC 208可以并发执行多个任务。
参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU 303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM 310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM 310内的任何exec单元302)可以通过存储器接口214访问全局存储器。可以将全局存储器的各部分存储在L1高速缓存320中。
每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU 303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致L1高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU 303的每个通道的一致值或常数值。
共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器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。
任务管理单元300管理要被调度为存储在调度器表321中的TMD组的阵列的计算任务。TMD组是具有相同调度优先级的计算任务的集合。TMD组的数目或优先级级别可以是一个或多个。在每个TMD组内,在各自的优先级级别的计算任务存储在列表中,该列表可采用链表来实现,并且在下文中假定链表。链表中的每个进入点存储指向存储器中的TMD 322的任务指针和指向各自链表中的下一进入点的指针。针对每个TMD组存储用于链表的头指针和尾指针。没任务的TMD组具有等于尾指针的头指针并且空位被设定为TRUE(真)。
当从主机接口206接收计算任务时,任务管理单元300将计算任务插入到TMD组中。更具体地,除非设定使任务添加到链表的头部的特殊TMD位,否则与计算任务相对应的指向TMD 322的任务指针被添加到用于该组的链表的尾部。尽管TMD组内的所有任务具有相同的调度优先级级别,但TMD组链表的头部是由任务管理单元300所选择并调度用于执行的第一计算任务。因此,在链表头部的计算任务与在相同优先级级别的其他计算任务相比具有相对较高的优先级。类似地,链表中的在相同优先级级别的每个相继的计算任务相对于链表中在前的计算任务具有较低优先级。因此,任务管理单元300能够以相对于彼此的输入的次序调度TMD组内的计算任务(假定没有任务被特别标记以添加到TMD组的头部)。因为TMD组被指定为TMD结构的一部分,所以在计算任务正在执行的同时,计算任务的TMD组不能改变。还可从处理集群阵列230接收计算任务。
在调度计算任务之前基于优先级级别分成组的计算任务的收集允许计算任务被任务管理单元300所接收的速率与计算任务被输出到工作分布单元340用于执行的速率解耦。任务管理单元300一般能够以比计算任务可被输出用于由工作分布单元340执行的更快的速率,从一个或多个入栈缓冲区接受由主机接口206所输出的计算任务。来自不同入栈缓冲区的输入是独立的流,典型地由相同应用程序所生成以具有从属任务的多个集合,但在一些实施例中,多个应用程序可写到入栈缓冲区。任务管理单元300可配置为缓冲调度器表321中的计算任务并且稍后从调度器表321选择一个或多个计算任务用于输出到工作分布单元340。与随着计算任务被接收选择计算任务相比,通过在计算任务被缓冲后对其加以选择,任务管理单元可基于更多信息做出选择。例如,任务管理单元300可缓冲在高优先级任务之前所接收的数个低优先级任务。缓冲使能任务管理单元300在低优先级任务之前选择高优先级任务用于输出。
任务管理单元300可使用数个不同技术实施选择以调度计算任务:轮叫、优先级、或分区优先级调度。对于不同调度技术中的每一个,当计算任务被选择以被调度时,被选择的计算任务从其中存储被选择的计算任务的TMD组中移除。与调度技术无关,任务管理单元300能够通过选择适当组的链表中的第一进入点来快速选择计算任务。任务管理单元300可以通过简单地改变TMD组的链表中的任务指针的次序来容易地组织,并且如果需要的话,重新排序计算任务。因此,可以以与通过任务管理单元300从主机接口206接收任务指针的次序不同的次序调度和/或执行计算任务。
最简单的调度方案是任务管理单元300调度在每个组的头部的计算任务(如果组中存在计算任务)并以轮叫的次序遍历(rotate through)组。另一调度技术是以严格的优先级次序选择计算任务的优先级调度。任务管理单元300从具有至少一个计算任务的最高优先级TMD组选择计算任务,从组的头部开始。
时延降低的多线程架构
图4示出根据本发明的一个实施例的、图2的PPU 202(0)。如图4所示,PPU 202(0)包括接收要由PPU 202(0)的一个或多个处理引擎执行的工作(即任务)的I/O单元205。例如,I/O单元205可接收被导向主机接口206的与处理任务相关的命令或经由交叉开关单元210被导向存储器接口214的与存储器存取操作(即读/写操作)相关的命令。与处理任务相关的命令可指定包括用于由PPU 202(0)执行的命令流的一个或多个入栈缓冲区。主机接口206从入栈缓冲区中的每一个读命令并将存储在入栈缓冲区中的命令流传送到适当的处理引擎。例如,一些命令可以与图形渲染任务相关,其可经由前端单元212和任务/工作单元207(未明确示出)被传送到处理集群阵列230。其他命令可以与数据转移任务(即拷贝操作)相关,其可被传送到一个或多个拷贝引擎450。
拷贝引擎450配置为实施将数据从一个存储器位置移动到另一存储器位置的拷贝操作。例如,拷贝引擎450(0)可接收指示存储器的16MB块应从PP存储器204(0)被拷贝到系统存储器104中的指令。一个类型的拷贝命令包括源地址、目标地址、以及要拷贝的数据的长度。另一类型的拷贝命令包括指示要从源阵列拷贝到目标阵列的地址的2D阵列(即拷贝矩形命令)的参数。拷贝引擎450可以与处理集群阵列230并发地执行。为了实施拷贝操作,拷贝引擎450配置交叉开关210使得存储器的读和写可在拷贝命令中所标识的具体的存储器位置之间实施。数据可从DRAM220被拷贝到拷贝引擎并随后传送到目标地址(例如从拷贝引擎450到系统存储器104),或者拷贝引擎450可配置交叉开关使得数据直接传送到I/O单元205并经由通信路径113传送到系统存储器104。
常规地,拷贝操作的大小,如应用所指定的,被物理存储器的大小所限制。例如,应用可传送命令到PPU 202(0),该命令指定拷贝操作需从PP存储器204拷贝存储器的1GB块到系统存储器104。随着拷贝引擎450(0)处理命令,拷贝引擎450(0)配置交叉开关210以访问特定存储器分区(例如存储器分区215(0))用于与存储存储器的1GB块的至少一部分的DRAM(例如DRAM 220(0))通信。拷贝引擎450(0)随后传送存储器读请求到DRAM 220(0),从而访问存储器的1GB块的第一个256位。拷贝引擎450(0)接收由DRAM 220(0)响应于存储器读请求所输出的256位数据。拷贝引擎450(0)随后配置交叉开关210使得拷贝引擎450(0)可经由I/O单元205传送写请求到系统存储器104,在目标地址存储256位数据。随后,拷贝引擎450(0)配置交叉开关210以与DRAM 220(0)通信并传送第二存储器读请求到DRAM 220(0)以访问存储器的1GB块的下一256位。DRAM 220(0)将下一256位的数据输出到拷贝引擎450(0),其经由I/O单元205传送包括下一256位的数据的写请求到系统存储器104。拷贝引擎450(0)以该方式继续,直到存储器的整个1GB块已从DRAM 220(0)(或其他DRAM单元,如果块跨多个DRAM单元的话)转移到系统存储器104。在可替代实施例中,拷贝引擎450(0)可配置存储器接口214以通过配置I/O单元205和交叉开关210来在DRAM 220(0)和系统存储器104之间实施直接存储器转移,使得DRAM 220(0)可直接与I/O单元205通信并传送写命令到系统存储器104而无需拷贝引擎450(0)的直接介入。在其他实施例中,拷贝引擎450具有使能多个拷贝命令并发执行的管线架构。例如,与第一拷贝操作相关联的第一读命令可发出到DRAM 220。在与第一读命令相关联的数据被获取的同时,与第二拷贝操作相关联的第二读命令可发出到DRAM 220。在这种实施例中,在较低优先级拷贝操作已完成执行之前,较高优先级拷贝操作可发出到拷贝引擎,其开始较高优先级拷贝操作的执行。
应理解的是,拷贝操作可能花费大数目的时钟周期来完成,取决于要拷贝的存储器的块的大小。常规拷贝引擎不实现先占能力,意味着一旦拷贝操作被传送到拷贝引擎,则在另一拷贝操作可被传送到拷贝引擎之前将执行完整的拷贝操作。换句话说,当较高优先级应用将拷贝操作传送到PPU202(0)时,较高优先级拷贝操作无法执行,直到与较低优先级应用相关联的先前经调度的拷贝操作完成为止。存在许多方式解决该长时延期。
首先,可通过对PPU 202(0)的每个单独的处理引擎(例如拷贝引擎450(0)、拷贝引擎450(1)、GPC 208(0)等)添加先占能力、从而使能与较高优先级应用相关联的操作先占与较低优先级应用相关联的操作来解决长时延期。例如,可通过包括附加的优先级调度逻辑和/或上下文切换逻辑来将先占能力添加到处理引擎。使用本领域技术人员已知的调度算法,拷贝引擎450可跟踪多个拷贝操作并越过较低优先级拷贝操作执行较高优先级拷贝操作。然而,这些硬件级别的改变将增加PPU 202(0)中的处理引擎中的每一个的大小和复杂性。大小增加意味着成本增加以及附加的功耗和从附加逻辑中生成的热量。因此,在每个单独的处理引擎中实现先占无法令人满意。
其次,可通过限制由每个单独应用发出到PPU 202(0)的拷贝操作(或其他处理任务)的大小来解决长时延期。该方法要求程序员管理处理任务的大小,使得绝不将与长时延期相关联的大任务传送到PPU 202(0)。该方法无法令人满意,因为其使编程更复杂,要求应用手动地调度数百或数千个分开的操作而非发送一个操作到PPU 202。此外,可能需要将附加逻辑添加到设备驱动程序103和/或PPU 202以确保拷贝操作不超过将触发长时延期的阈值大小。如果没添加该逻辑,那么程序员可能简单地在PPU 202上调度不允许低时延先占的大处理任务。
上文阐述的两个方法无法令人满意,因为其不必要地增加PPU 202(0)的复杂性和大小或因为其显现太多的对应用级别的先占实现,依赖于程序员的高效操作。因此,本文所描述的技术实现在应用和PPU 202(0)的各种处理器之间引入硬件实现的预处理器410的不同方法。预处理器410配置为接收从一个或多个应用传送到PPU 202(0)的任务并实现由高优先级任务对低优先级任务的先占。预处理器410通过将任务分成较小的子任务的集合、使得发出每个子任务可以与其他子任务中的每一个独立地实施来实现先占。每个子任务的大小限于阈值大小,使得通过处理引擎进行的子任务的执行在由处理引擎可执行不同子任务之前不引入长时延期。在一个实施例中,预处理器410包括用于跟踪任务状态的逻辑。例如,预处理器410可包括用于存储诸如要在存储器的块中所拷贝的、与拷贝操作相关联的下一存储器位置的任务状态的寄存器。在另一实施例中,预处理器410可在PP存储器204中存储任务状态。
例如,为示出拷贝引擎450的操作,可由主机接口206接收拷贝操作作为包括在入栈缓冲区中的命令流的一部分。拷贝操作可指定存储器的要从PP存储器204拷贝到系统存储器104的大块。在常规系统中,主机接口将解码命令的至少一部分以确定命令应传送到可用的拷贝引擎之一并且整个拷贝操作将传送到第一拷贝引擎。拷贝引擎随后将执行拷贝操作,直到存储器的整个块被拷贝到系统存储器中为止。
相反,图4的主机接口206实现硬件预处理器410,其将拷贝操作再分成与拷贝操作相关联的多个子任务用于由初始拷贝操作所指定的存储器的块的小的组块(chunk)。例如,拷贝操作可请求将存储器的大的256MB块从PP存储器204拷贝到系统存储器104。预处理器410传送拷贝命令到拷贝引擎450(0)用于存储器的256MB块的存储器的第一4kB。预处理器410随后通过将包括在拷贝命令中的起始存储器地址增量4kB来修改原始拷贝操作,并存储经修改的拷贝命令,直到拷贝引擎450(0)已完成第一4kB拷贝操作的执行为止。随后,预处理器410传送新拷贝命令到拷贝引擎450(0)用于存储器的下一4kB,等等。然而,如果在已拷贝存储器的整个256MB块之前主机接口206从较高优先级应用接收另一拷贝操作,那么预处理器410通过传送与较高优先级拷贝操作相关联的第一拷贝命令而非与较低优先级拷贝操作相关联的下一后续拷贝命令到拷贝引擎450(0)来先占较低优先级拷贝操作。因此,在相对少的数目的时钟周期中,较高优先级应用可在给定的处理引擎上先占特定任务的执行,因为处理引擎绝不被分配到超过最大数目的时钟周期的特定任务。与通过该方式实现先占相关联的时延期可以比与直接在执行无约束(unbounded)任务(即保存上下文状态和加载分开的上下文以执行较高优先级任务)的处理引擎内实现先占相关联的时延期小得多,并且不要求程序员通过限制传送到PPU 202的任务的大小来手动地管理先占时延。
在一些实施例中,由应用生成的拷贝操作可指定一旦拷贝操作完成要由拷贝引擎450执行的附加的操作(例如信号量释放、触发中断、转储存储器等)。该附加操作可作为命令中额外的位被包括在传送到拷贝引擎450的拷贝命令中,或可在拷贝命令之后作为分开的命令发送。预处理器410可配置为调度与用于给定任务的子任务相关的附加操作。例如,如果在原始拷贝操作中指定附加操作,那么预处理器410可配置子任务中的每一个,使得仅原始任务的最终子任务包括附加操作。
在一个实施例中,预处理器410跟踪根据优先级排列的经排序的列表420中挂起的操作中的每一个。预处理器410配置为调度最高优先级的挂起的操作。在另一实施例中,主机接口206包括若干FIFO(未示出),每个FIFO与给定的优先级级别相关联。随着主机接口206接收任务,任务被添加到与该任务优先级级别相关联的特定FIFO。预处理器410随后在包括至少一个在可用的处理引擎上调度的挂起的任务的最高优先级FIFO中选择下一挂起的任务。挂起的任务分成较小子任务的集合并且子任务在适当的处理引擎上被调度。
在一些实施例中,主机接口206与各种处理引擎异步地操作。换句话说,主机接口206调度给定的处理引擎上的任务和该处理引擎执行任务之间可以存在某时延。在这种实施例中,每个处理引擎可将用于执行的若干挂起的任务排队。例如,拷贝引擎450(0)可包括存储多达8个挂起的拷贝命令的FIFO。因此,主机接口206可传送多达8个拷贝命令到拷贝引擎450(0),其以拷贝命令被拷贝引擎450(0)所接收的次序执行。在执行拷贝命令的同时,主机接口206还可传送其他命令或操作到其他处理引擎,诸如处理集群阵列230。应理解的是,在一些情况下,可期望传送多个子任务到给定的处理引擎,以避免由调度和执行之间的固有时延所导致的闲置时间。
主机接口206可针对多个不同处理引擎同时管理许多任务。每个时钟周期中,主机接口206可检查特定处理引擎以确定处理引擎是否闲置(即可用来执行新子任务)。在一个实施例中,主机接口206和处理引擎具有专用接口,诸如单线互连,其指示处理引擎是否闲置。在另一实施例中,主机接口206和处理引擎通过已有的双向通信总线进行通信,其使能处理引擎发送指示处理引擎是否闲置的命令到主机接口206。在又一实施例中,主机接口206和处理引擎实现基于信用(credit)的流控制接口。例如,如果拷贝引擎450(0)包括用于存储要执行的多个拷贝命令的FIFO,那么拷贝引擎450(0)可发出若干信用到主机接口206,其中信用的数目反映拷贝引擎450(0)中的FIFO中的开槽的数目。随着预处理器410发出拷贝命令到拷贝引擎450(0),主机接口206将信用的数目记入借方,并且随着拷贝引擎450(0)完成先前发送到拷贝引擎450(0)的拷贝命令的执行,新信用被发送到主机接口206,指示FIFO中的另一槽可用。
取决于PPU 202中的处理引擎的数目,在主机接口206能够调度处理引擎上的下一子任务之前,处理引擎可闲置若干时钟周期。因此,在一个实施例中,预处理器410配置为确保无论何时存在至少两个子任务准备好用于执行时两个或更多个子任务被排队用于由给定处理引擎执行。例如,拷贝引擎450(0)可包括存储经排队用于后续执行的多达8个拷贝命令的FIFO。当闲置时,拷贝引擎450(0)可随后执行来自FIFO的下一拷贝命令而不用等待由主机接口206发出新命令。如果没有该实现方案,拷贝引擎450(0)可能浪费许多周期在单纯地将空闲状态通信到主机接口206并等待预处理器发出下一拷贝命令上。拷贝引擎450(0)中的FIFO使能更高效的执行,在预处理器410确定哪个子任务应接下来被发送到拷贝引擎450(0)以及是否应由较高优先级应用先占当前执行的操作的同时,允许拷贝引擎450(0)开始处理下一子任务。在一个实施例中,可编程寄存器设定在给定时间在处理引擎挂起的子任务的数目。例如,寄存器可指示4个子任务应被排队用于由处理引擎在任一时间执行。基于寄存器中的值,预处理器410可将存储在FIFO中的所设定数目的拷贝命令发送到拷贝引擎450(0)。随着每个拷贝命令完成执行,预处理器410发送新拷贝命令到拷贝引擎450(0),使得FIFO大致具有所设定数目的、准备好在任一时间执行的、挂起的拷贝命令。换句话说,寄存器的值设定可被排队用于由处理引擎执行的未完成的子任务的阈值数目。当处理引擎中的未完成的子任务的数目小于未完成的子任务的阈值数目时,处理引擎视为可用。可设定未完成的子任务的阈值数目以确保在最大数目的时钟周期中完成给定任务的先占(即因为未完成的子任务的最大大小和最大数目定出处理引擎将会闲置之前的最大时间)。
如上文结合图4所描述的,预处理器410将任务分成较小子任务的集合,使得子任务可在被来自较高优先级应用的不同任务先占之前被传送到处理引擎而不用分配该处理引擎来完成整个任务。在一个实施例中,预处理器410简单地基于用于每个子任务的阈值大小来划分任务。但是,在另一些实施例中,预处理器410可配置为还考虑其他用于再分任务的准则。
图5A和5B示出根据本发明的一个实施例的、用于将任务分成子任务的集合的两个方法。如图5A所示,拷贝操作可指示拷贝引擎450(0)应将存储器510的块从PP存储器204拷贝到系统存储器104。指定拷贝操作的指令可包括用于PP存储器204中的存储器510的块的起始地址(例如0x07005800)、用于系统存储器104中的存储器的目标块的起始地址、以及与存储器的块相关联的长度(例如24,064字节)。如所示,每个唯一存储器地址是引用存储器的单个字节的32位地址,然而在本发明的范围内也预期到其他寻址架构,诸如64位寻址或其中每32位地址引用存储器的四字节(即32个位)的情况。
在一个实施例中,预处理器410配置为将拷贝操作分成实施小于或等于诸如4kB(即4096字节)阈值的数据拷贝的较小拷贝操作的集合。例如,系统100可实现使用4kB页面的统一虚拟存储器架构。在4kB页面或更小的页面上实施数据拷贝操作是更高效的,因为用于完成4kB的拷贝操作的时延不是过分地长,并且假定操作是页面对齐的,那么来自拷贝操作的数据被包括在单个存储器页面中。除将每个子任务限制在小于或等于阈值的拷贝操作以外,预处理器410还配置为将拷贝操作对齐在物理存储器的边界上。适当的存储器对齐允许更高效的存储器访问。例如,GDDR5 SDRAM(图形双数据速率同步动态随机存取存储器)采用允许每个存储器访问请求读或写256个位(即32字节)的8n预取架构实现32位数据总线。然而,为了读在对GDDR5 DRAM的单个存储器请求中的256个位,256个位必须被对齐在32字节边界上。
如图5A所示,第一子任务511具有0x07005800的起始地址,其被对齐在32字节边界上(即在二进制中,存储器地址的五个最低有效位是零)。然而,第一子任务511的起始地址未对齐在4kB存储器边界(例如页面边界)上。因此,预处理器410生成用于第一子任务511的拷贝命令,其包括第一子任务511的起始地址、用于第一子任务的目标地址(等于用于原始拷贝操作的目标地址)、以及2kB的长度,其与第一子任务511的起始地址与下一4kB存储器边界之间的差相对应。预处理器410随后传送用于第一子任务511的拷贝命令到拷贝引擎450(0)用于执行,并通过将源地址和目标地址增量第一子任务511的长度(即2kB)和将原始拷贝操作的长度减量来修改原始拷贝操作,其表示要作为原始拷贝操作的一部分被拷贝的存储器的剩余块。
当拷贝引擎450(0)对用于执行的另一拷贝命令做好准备时(即由于拷贝引擎450(0)是闲置的或由于在挂起的命令的FIFO中包括空槽),预处理器410生成用于经修改的拷贝操作的下一子任务的另一拷贝命令。预处理器410生成用于第二子任务512的拷贝命令,其包括第二子任务512的起始地址(即0x07006000)、用于第二子任务的目标地址、以及长度。因为剩余拷贝操作与比4kB阈值长的存储器块相关联,所以预处理器410将第二子任务的长度设定为4kB。用于第二子任务512的拷贝命令被传送到拷贝引擎450(0)并且经修改的拷贝操作通过将源地址和目标地址增量第一子任务512的长度(即4kB)和将经修改的拷贝操作的长度减量来被再次修改。
预处理器410持续发出拷贝命令到与附加子任务(即子任务513、514、515、516和517)相关的拷贝引擎450(0)。最后的子任务517与用于小于4kB阈值的存储器的块的拷贝操作相关联。因此,如图5A所示,用于最后的子任务517的拷贝命令具有1536字节的长度,其表示要作为原始拷贝操作的一部分被拷贝的剩余存储器。
应理解的是,在将原始任务分成子任务的集合的过程期间,主机接口206可从较高优先级应用接收另一任务。例如,在预处理器410传送与第二子任务512相关联的拷贝命令之后,主机接口206可从较高优先级应用接收新任务。来自较高优先级应用的新任务可以用于不同存储器块的拷贝操作。因为新任务的优先级比原始任务高,所以预处理器410将新任务分成子任务的集合,并且,代替将与第三子任务513相关联的拷贝命令传送到拷贝引擎450(0),预处理器410将与新任务的第一子任务相关的拷贝命令传送到拷贝引擎450(0)。预处理器410可随后传送与新任务的其他子任务相关联的后续拷贝命令,直到新任务已完全执行为止。一旦拷贝引擎450(0)可用,预处理器410将原始拷贝操作的第三子任务513传送到拷贝引擎450(0)。预处理器410随后完成将与原始拷贝操作的剩余子任务相关的拷贝命令传送到拷贝引擎450(0)直到完整的拷贝操作已完全执行为止。
在另一实施例中,如图5B所示,一些类型的存储器拷贝操作可在矩形上(即以行和列排列的存储器的2D阵列)实施。可通过起始存储器位置(即矩形中的左上的存储器地址)以及水平维度和垂直维度(例如以各异的存储器地址或字节数)来指定每个矩形。以该方式访问存储器地址可以是高效的,因为可针对多个连续的存储器位置访问具体的存储器行地址或列地址,并且可分别增量列地址或行地址(即通过不改变行地址或列地址二者之一)以更高效地检索后续数据。例如,矩形520表示用于存储器的块的拷贝操作,在水平维度上是272字节并且在垂直维度上是160字节。
对于矩形520,预处理器410将拷贝操作分成多个子任务(即521、522等),其每个与用于存储器的较小矩形的拷贝操作相对应。例如,在该实施例中,可被拷贝的大小最大的矩形是64个地址宽(即水平)、64个地址高(即垂直)。阈值矩形的总大小是4kB。首先,预处理器410将把矩形分成64行或更少行的较小矩形(例如子任务521到525、子任务526到530、以及子任务531到535)。随后,较小矩形被进一步分成与小于或等于阈值大小的矩形相对应的子任务。子任务也可对齐到具体的存储器边界。例如,第一子任务521与48个地址宽、64个地址高(要被对齐在64字节边界上)的拷贝矩形命令相对应,第二子任务522与64个地址宽、64个地址高的拷贝矩形命令相对应,等等。因为原始拷贝矩形命令的水平维度未对齐在64字节边界上,所以第五子任务525与32个地址宽、64个地址高的拷贝矩形命令相对应。例如,可在PP存储器204中将帧缓冲区实现为存储器地址的2D阵列,每个4kB块存储帧缓冲区的16像素乘16像素图块(tile)的数据,其中每个像素包括16字节的数据(例如每信道RGBA 32位)。
应理解的是,上文阐述的各种拷贝操作可在虚拟存储器架构中实现。例如,矩形520可表示虚拟存储器中的数据结构,其中每个对齐的子矩形(例如子任务521、522等)与不同的虚拟存储器页面相对应,并且因此,原始拷贝矩形操作可以不与物理存储器中的存储器的邻近块相关联(尽管例如每个图块存储在邻近的物理存储器位置的4kB块中)。
图6是根据本发明的一个实施例的、用于改进多线程处理引擎中的性能的方法步骤的流程图。虽然结合图1-5的系统描述方法步骤,但本领域普通技术人员应理解的是,配置为以任何次序实施方法步骤的任何系统在本发明的范围内。
如所示,方法600开始于步骤602,其中主机接口206接收要由处理引擎执行的第一任务。在一个实施例中,主机接口206中的预处理器410从一个或多个入栈缓冲区读命令。命令可包括意图被传送到拷贝引擎450(0)的拷贝操作(即任务)。例如,第一任务可以是拷贝操作,当其被拷贝引擎450(0)执行时,使拷贝引擎450(0)将数据从第一存储器位置移动到第二存储器位置。在步骤604,主机接口206将第一任务分成子任务的第一集合。在一个实施例中,预处理器410生成拷贝命令的新集合,当其被拷贝引擎450(0)执行时,使拷贝引擎450(0)将与原始拷贝操作相关联的数据的部分移动到第二存储器位置的部分。在步骤606,主机接口206发出子任务的第一集合中的至少一个子任务到处理引擎。在一个实施例中,预处理器410将与第一任务相关联的第一子任务(即拷贝命令)传送到拷贝引擎450(0)。拷贝引擎450(0)执行第一子任务,从而拷贝与原始拷贝操作相关联的存储器块的第一部分。随着拷贝引擎450(0)成为可用,附加子任务(即拷贝命令)被发出到拷贝引擎450(0)。在一个实施例中,主机接口206一次发出一个子任务到处理引擎。在另一实施例中,处理引擎可包括队列或FIFO,使得主机接口206一次发出两个或更多个子任务到处理引擎。
在步骤608,在主机接口206已完成执行与第一任务相关联的每个子任务、从而完整地执行原始任务之前,主机接口206接收要由处理引擎执行的第二任务,其中与第一任务相比,第二任务与更高优先级的应用相关联。在步骤610,主机接口206将第二任务分成子任务的第二集合。在步骤612,为了处理引擎上的第一任务的先占执行,主机接口206在发出子任务的第一集合中的每个和每一个子任务到处理引擎之前发出子任务的第二集合中的至少一个子任务到处理引擎。例如,在已发送与来自入栈缓冲区的第一拷贝操作相关联的的多个拷贝命令到拷贝引擎450(0)之后,主机接口206发出与到处理引擎的第二、较高优先级的拷贝操作相关联的多个拷贝命令到拷贝引擎450(0)。在与第二、较高优先级的拷贝操作相关联的每个拷贝命令已在拷贝引擎450(0)中完成执行之后,主机接口206可恢复将与第一拷贝操作相关联的任何剩余拷贝命令传送到拷贝引擎450(0)。
应理解的是,本发明的范围不限于并行处理引擎(PPU)202的拷贝命令和拷贝引擎450,并且各种类型的处理引擎可使用中间硬件单元诸如预处理器410来实现先占技术。例如,GPC 208诸如通过在顶点的集合上执行顶点着色器(即图形程序)来实施图形任务。预处理器410可实现用于接收定义两个或更多个在3D模型中所定义的基元(即三角形、四边形、三角形带、网眼(mesh)等)的顶点的集合以及将网眼粉碎成要传送到GPC 208的较小网眼的集合的算法。预处理器410可实现为为接收能够被分成较小子任务的输入的任何类型的处理引擎添加先占能力。
总而言之,多线程处理引擎可通过包括中间硬件单元以将两个或更多个任务分成较小子任务并基于任务的优先级调度用于两个或更多个任务的子任务来在一个或多个处理引擎(即拷贝引擎、GPC等)中实现先占能力。通过限制子任务的大小,在可利用处理引擎执行较高优先级任务之前的时延期可被控制,以确保较高优先级任务快速并高效地执行。
所公开的技术的一个优点是,每个单独处理引擎处的上下文切换是不必要的,因此不采用复杂的调度逻辑和/或上下文切换能力来实现处理引擎。可通过让小任务完成执行并随后切换到较高优先级任务来简单地先占应用。此外,技术对程序员完全透明,其可生成任何大小的任务而不用担心系统中可能生成的、阻止执行较高优先级任务的时延。
上文已参考具体实施例描述本发明。然而,本领域普通技术人员应理解的是,可对其作出各种修改和改变而不脱离本发明如所附权利要求中所阐述的较宽精神和范围。因此,前述说明书和附图视为是说明性的而非限制性的意义。
因此,本发明的实施例的范围在下面的权利要求中阐述。

Claims (10)

1.一种用于改进多线程处理引擎中的性能的计算机实现的方法,所述方法包括:
接收要由处理引擎执行的第一任务;
将所述第一任务分成子任务的第一集合,其中所述子任务的第一集合中的每个子任务小于阈值大小;
发出来自所述子任务的第一集合的至少一个子任务到所述处理引擎用于处理;
接收要由所述处理引擎执行的第二任务,其中所述第二任务比所述第一任务具有更高优先级;
将所述第二任务分成子任务的第二集合,其中所述子任务的第二集合中的每个子任务小于所述阈值大小;
通过在发出来自所述子任务的第一集合的所有子任务到所述处理引擎用于处理之前发出来自所述子任务的第二集合的至少一个子任务到所述处理引擎用于处理来先占所述第一任务;以及
在发出来自所述子任务的第二集合的所述至少一个子任务到所述处理引擎之后,发出来自所述子任务的第一集合的至少一个附加子任务到所述处理引擎用于处理。
2.根据权利要求1所述的方法,其中所述第一任务包括拷贝操作并且所述处理引擎是拷贝引擎。
3.根据权利要求2所述的方法,其中将所述第一任务分成子任务的第一集合包括将由所述拷贝操作所指定的存储器的源块分成两个或更多个存储器的子块,以及生成与所述两个或更多个存储器的子块相对应的两个或更多个拷贝命令用于由所述拷贝引擎执行。
4.根据权利要求3所述的方法,其中所述存储器的子块对齐在存储器边界上。
5.根据权利要求3所述的方法,其中所述拷贝操作包括拷贝矩形操作,并且所述存储器的子块包括存储器的二维阵列。
6.根据权利要求1所述的方法,其中所述第一任务包括与多个基元相关联的图形操作,并且所述子任务的第一集合中的子任务包括与和所述多个基元相关联的基元的不同子集相关联的至少两个图形操作。
7.根据权利要求1所述的方法,进一步包括跟踪基于优先级的经排序的列表中的所述第一任务和所述第二任务。
8.根据权利要求1所述的方法,其中将所述第一任务分成所述子任务的第一集合包括:
基于所述第一任务生成小于或等于所述阈值大小的第一子任务;
修改所述第一任务以生成经修改的第一任务;
监视所述处理引擎以确定所述处理引擎何时可用于进一步处理;以及
当所述处理引擎可用时,基于所述经修改的第一任务生成小于或等于所述阈值大小的第二子任务;
其中,当所述处理引擎中的未完成的子任务的数目小于未完成的子任务的阈值数目时,所述处理引擎可用于进一步处理。
9.根据权利要求1所述的方法,进一步包括传送两个或更多个子任务到所述处理引擎以排队用于执行。
10.一种用于改进多线程处理引擎中的性能的计算设备,所述设备包括:
一个或多个处理引擎,配置为执行任务;以及
预处理器,耦连到所述一个或多个处理引擎并配置为:
接收要由处理引擎执行的第一任务,
将所述第一任务分成子任务的第一集合,其中所述子任务的第一集合中的每个子任务小于阈值大小,
发出来自所述子任务的第一集合的至少一个子任务到所述处理引擎用于处理,
接收要由所述处理引擎执行的第二任务,其中所述第二任务比所述第一任务具有更高优先级,
将所述第二任务分成子任务的第二集合,其中所述子任务的第二集合中的每个子任务小于所述阈值大小,
通过在发出来自所述子任务的第一集合的所有子任务到所述处理引擎用于处理之前发出来自所述子任务的第二集合的至少一个子任务到所述处理引擎用于处理来先占所述第一任务;以及
在发出来自所述子任务的第二集合的所述至少一个子任务到所述处理引擎之后,发出来自所述子任务的第一集合的至少一个附加子任务到所述处理引擎用于处理。
CN201310479294.6A 2012-10-12 2013-10-14 用于改进多线程处理单元中的性能的技术 Pending CN103729167A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/651,131 US10095526B2 (en) 2012-10-12 2012-10-12 Technique for improving performance in multi-threaded processing units
US13/651,131 2012-10-12

Publications (1)

Publication Number Publication Date
CN103729167A true CN103729167A (zh) 2014-04-16

Family

ID=50383316

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310479294.6A Pending CN103729167A (zh) 2012-10-12 2013-10-14 用于改进多线程处理单元中的性能的技术

Country Status (4)

Country Link
US (1) US10095526B2 (zh)
CN (1) CN103729167A (zh)
DE (1) DE102013016871A1 (zh)
TW (1) TWI624791B (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105892996A (zh) * 2015-12-14 2016-08-24 乐视网信息技术(北京)股份有限公司 一种批量数据处理的流水线作业方法及装置
WO2016202153A1 (zh) * 2015-06-19 2016-12-22 华为技术有限公司 一种gpu资源的分配方法及系统
CN106547611A (zh) * 2015-09-16 2017-03-29 中兴通讯股份有限公司 基于业务流的任务调度方法及装置
CN107861766A (zh) * 2017-06-26 2018-03-30 平安普惠企业管理有限公司 应用启动方法、装置及计算机可读存储介质
CN108268283A (zh) * 2016-12-31 2018-07-10 英特尔公司 用于利用约简操作来支持数据并行循环的计算引擎架构
CN108694153A (zh) * 2017-04-01 2018-10-23 英特尔公司 用于启用经由管芯上存储的高速上下文切换的引擎
CN108804205A (zh) * 2017-04-28 2018-11-13 英特尔公司 原子操作的智能线程分派和向量化
WO2018223932A1 (zh) * 2017-06-05 2018-12-13 捷开通讯(深圳)有限公司 一种基于gpp的5g终端通用平台优化方法及系统
CN110958183A (zh) * 2019-10-24 2020-04-03 中国科学院计算技术研究所 一种异构系统的带宽利用率提升方法及系统
CN111651351A (zh) * 2020-05-29 2020-09-11 成都新潮传媒集团有限公司 一种基于Jenkins的软件性能测试方法及装置
CN112765128A (zh) * 2020-12-31 2021-05-07 北京知因智慧科技有限公司 基于repl的数据开发方法、系统和电子设备
CN115134658A (zh) * 2022-05-27 2022-09-30 阿里巴巴云计算(北京)有限公司 视频处理方法、装置、设备及存储介质
CN115335851A (zh) * 2020-02-28 2022-11-11 超威半导体公司 多租户图形处理单元的动态透明重新配置

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9483423B2 (en) * 2013-05-17 2016-11-01 Nvidia Corporation Techniques for assigning priorities to memory copies
US9542238B2 (en) * 2013-05-23 2017-01-10 Nxp Usa, Inc. Systems and methods for direct memory access coherency among multiple processing cores
US20150134933A1 (en) * 2013-11-14 2015-05-14 Arm Limited Adaptive prefetching in a data processing apparatus
US9589311B2 (en) * 2013-12-18 2017-03-07 Intel Corporation Independent thread saturation of graphics processing units
US9530174B2 (en) 2014-05-30 2016-12-27 Apple Inc. Selective GPU throttling
US20160021196A1 (en) * 2014-07-17 2016-01-21 Microsoft Corporation Processing changes in a multi-tenant system
US9996386B2 (en) 2014-07-23 2018-06-12 Intel Corporation Mid-thread pre-emption with software assisted context switch
US10120938B2 (en) * 2015-08-01 2018-11-06 MapScallion LLC Systems and methods for automating the transmission of partitionable search results from a search engine
KR102480016B1 (ko) * 2015-08-18 2022-12-21 삼성전자 주식회사 다수의 맵핑 단위를 이용하는 불휘발성 메모리 시스템 및 그 동작방법
US9842376B2 (en) 2015-09-29 2017-12-12 Qualcomm Incorporated Graphics processing unit preemption with pixel tile level granularity
JP6532385B2 (ja) * 2015-11-02 2019-06-19 キヤノン株式会社 情報処理システムおよびその制御方法、並びにプログラム
US10409560B1 (en) 2015-11-18 2019-09-10 Amazon Technologies, Inc. Acceleration techniques for graph analysis programs
US10180916B2 (en) * 2015-12-03 2019-01-15 Nvidia Corporation Managing copy operations in complex processor topologies
US10275275B2 (en) * 2015-12-03 2019-04-30 Nvidia Corporation Managing copy operations in complex processor topologies
US10263909B2 (en) * 2016-05-27 2019-04-16 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. System, method, and computer program for managing network bandwidth by an endpoint
US10387207B2 (en) * 2016-12-06 2019-08-20 International Business Machines Corporation Data processing
US10282812B2 (en) * 2017-04-09 2019-05-07 Intel Corporation Page faulting and selective preemption
US10325341B2 (en) 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
CN107239334B (zh) * 2017-05-31 2019-03-12 清华大学无锡应用技术研究院 处理不规则应用的方法及装置
US10459751B2 (en) * 2017-06-30 2019-10-29 ATI Technologies ULC. Varying firmware for virtualized device
US10754706B1 (en) 2018-04-16 2020-08-25 Microstrategy Incorporated Task scheduling for multiprocessor systems
CN110838990A (zh) * 2018-08-17 2020-02-25 上海诺基亚贝尔股份有限公司 一种在c-ran中对层1进行加速的方法和装置
US10901647B2 (en) * 2019-03-19 2021-01-26 Intel Corporation Distributed copy engine
US11106495B2 (en) * 2019-06-13 2021-08-31 Intel Corporation Techniques to dynamically partition tasks
US11416176B2 (en) * 2020-06-23 2022-08-16 Western Digital Technologies, Inc. Function processing using storage controllers for load sharing
CN112685158B (zh) * 2020-12-29 2023-08-04 杭州海康威视数字技术股份有限公司 一种任务调度方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6260058B1 (en) * 1994-07-19 2001-07-10 Robert Bosch Gmbh Process for controlling technological operations or processes
CN1387649A (zh) * 1999-08-31 2002-12-25 英特尔公司 并行处理器结构
US20110292057A1 (en) * 2010-05-26 2011-12-01 Advanced Micro Devices, Inc. Dynamic Bandwidth Determination and Processing Task Assignment for Video Data Processing

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5055999A (en) * 1987-12-22 1991-10-08 Kendall Square Research Corporation Multiprocessor digital data processing system
US7472258B2 (en) 2003-04-21 2008-12-30 International Business Machines Corporation Dynamically shared group completion table between multiple threads
US7370156B1 (en) * 2004-11-04 2008-05-06 Panta Systems, Inc. Unity parallel processing system and method
US7506134B1 (en) * 2006-06-16 2009-03-17 Nvidia Corporation Hardware resource based mapping of cooperative thread arrays (CTA) to result matrix tiles for efficient matrix multiplication in computing system comprising plurality of multiprocessors
US7730119B2 (en) * 2006-07-21 2010-06-01 Sony Computer Entertainment Inc. Sub-task processor distribution scheduling
WO2008154411A2 (en) * 2007-06-06 2008-12-18 Hewlett-Packard Development Company, L.P. Binary-level update of compressed read-only file systems
US8990812B2 (en) * 2008-07-07 2015-03-24 Infosys Limited Task decomposition with throttled message processing in a heterogeneous environment
US20100205606A1 (en) * 2009-02-12 2010-08-12 Panzer Adi System and method for executing a complex task by sub-tasks
US8069446B2 (en) * 2009-04-03 2011-11-29 Microsoft Corporation Parallel programming and execution systems and techniques
US8074093B1 (en) * 2011-06-03 2011-12-06 Johnson Daniel L Method and system for optimizing the completion of computing operations

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6260058B1 (en) * 1994-07-19 2001-07-10 Robert Bosch Gmbh Process for controlling technological operations or processes
CN1387649A (zh) * 1999-08-31 2002-12-25 英特尔公司 并行处理器结构
US20110292057A1 (en) * 2010-05-26 2011-12-01 Advanced Micro Devices, Inc. Dynamic Bandwidth Determination and Processing Task Assignment for Video Data Processing

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016202153A1 (zh) * 2015-06-19 2016-12-22 华为技术有限公司 一种gpu资源的分配方法及系统
US10614542B2 (en) 2015-06-19 2020-04-07 Huawei Technologies Co., Ltd. High granularity level GPU resource allocation method and system
CN106547611A (zh) * 2015-09-16 2017-03-29 中兴通讯股份有限公司 基于业务流的任务调度方法及装置
CN105892996A (zh) * 2015-12-14 2016-08-24 乐视网信息技术(北京)股份有限公司 一种批量数据处理的流水线作业方法及装置
CN108268283A (zh) * 2016-12-31 2018-07-10 英特尔公司 用于利用约简操作来支持数据并行循环的计算引擎架构
CN108694153A (zh) * 2017-04-01 2018-10-23 英特尔公司 用于启用经由管芯上存储的高速上下文切换的引擎
CN108804205A (zh) * 2017-04-28 2018-11-13 英特尔公司 原子操作的智能线程分派和向量化
WO2018223932A1 (zh) * 2017-06-05 2018-12-13 捷开通讯(深圳)有限公司 一种基于gpp的5g终端通用平台优化方法及系统
CN107861766B (zh) * 2017-06-26 2021-04-23 平安普惠企业管理有限公司 应用启动方法、装置及计算机可读存储介质
CN107861766A (zh) * 2017-06-26 2018-03-30 平安普惠企业管理有限公司 应用启动方法、装置及计算机可读存储介质
CN110958183A (zh) * 2019-10-24 2020-04-03 中国科学院计算技术研究所 一种异构系统的带宽利用率提升方法及系统
CN110958183B (zh) * 2019-10-24 2022-02-25 中国科学院计算技术研究所 一种异构系统的带宽利用率提升方法及系统
CN115335851A (zh) * 2020-02-28 2022-11-11 超威半导体公司 多租户图形处理单元的动态透明重新配置
CN115335851B (zh) * 2020-02-28 2024-04-02 超威半导体公司 多租户图形处理单元的动态透明重新配置
CN111651351A (zh) * 2020-05-29 2020-09-11 成都新潮传媒集团有限公司 一种基于Jenkins的软件性能测试方法及装置
CN112765128A (zh) * 2020-12-31 2021-05-07 北京知因智慧科技有限公司 基于repl的数据开发方法、系统和电子设备
CN112765128B (zh) * 2020-12-31 2023-10-03 北京知因智慧科技有限公司 基于repl的数据开发方法、系统和电子设备
CN115134658A (zh) * 2022-05-27 2022-09-30 阿里巴巴云计算(北京)有限公司 视频处理方法、装置、设备及存储介质

Also Published As

Publication number Publication date
US20140109102A1 (en) 2014-04-17
US10095526B2 (en) 2018-10-09
DE102013016871A1 (de) 2014-04-17
TW201423600A (zh) 2014-06-16
TWI624791B (zh) 2018-05-21

Similar Documents

Publication Publication Date Title
CN103729167A (zh) 用于改进多线程处理单元中的性能的技术
TWI490782B (zh) 來源運算元收集器快取的方法和裝置
TWI498819B (zh) 執行成型記憶體存取作業的系統和方法
CN103365631B (zh) 用于存储器访问的动态库模式寻址
CN103226481A (zh) 自动从属任务启动
US9710306B2 (en) Methods and apparatus for auto-throttling encapsulated compute tasks
CN103425533A (zh) 用于管理嵌套执行流的方法和系统
US9069609B2 (en) Scheduling and execution of compute tasks
TWI489392B (zh) 多個應用程式分享的圖形處理單元
CN104050033A (zh) 用于有索引的屏障的硬件调度的系统和方法
TWI533222B (zh) 處理任務的工作分配控制
CN103886547A (zh) 用于存储共享顶点的技术
CN103885893A (zh) 用于访问内容寻址存储器的技术
CN103885902A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN103810743A (zh) 在上游着色器中设置下游渲染状态
CN103279379A (zh) 用于在没有指令解码的情况下调度指令的方法和装置
CN103176848A (zh) 计算工作分布参考计数器
CN103886538A (zh) 用于存储共享顶点的技术
TW201337829A (zh) 暫存器檔案型讀取
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
CN103885903A (zh) 用于经由纹理硬件实施存储器访问操作的技术
CN103996216A (zh) 用于曲面细分和几何着色器的电力高效属性处置
CN103294449B (zh) 发散操作的预调度重演
TWI501156B (zh) 多頻時間切面組
CN103793206A (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
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20140416