CN116483536B - 数据调度方法、计算芯片及电子设备 - Google Patents

数据调度方法、计算芯片及电子设备 Download PDF

Info

Publication number
CN116483536B
CN116483536B CN202310446262.XA CN202310446262A CN116483536B CN 116483536 B CN116483536 B CN 116483536B CN 202310446262 A CN202310446262 A CN 202310446262A CN 116483536 B CN116483536 B CN 116483536B
Authority
CN
China
Prior art keywords
data
thread
type
memory
bundles
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
CN202310446262.XA
Other languages
English (en)
Other versions
CN116483536A (zh
Inventor
沈斌华
李光周
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.)
Shanghai Zhirui Electronic Technology Co ltd
Original Assignee
Shanghai Zhirui Electronic Technology Co ltd
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 Shanghai Zhirui Electronic Technology Co ltd filed Critical Shanghai Zhirui Electronic Technology Co ltd
Priority to CN202310446262.XA priority Critical patent/CN116483536B/zh
Publication of CN116483536A publication Critical patent/CN116483536A/zh
Application granted granted Critical
Publication of CN116483536B publication Critical patent/CN116483536B/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/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
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Complex Calculations (AREA)

Abstract

本申请提供一种数据调度方法、计算芯片及电子设备,方法包括:通过第一类线程束向设备内存依次发出数据请求,并将所述设备内存返回的所述数据请求对应的待处理数据存入目标存储器的目标区域内;其中,所述目标存储器为所述第一类线程束所属的线程块的存储器,所述目标区域为所述目标存储器内与该数据请求对应的区域;针对任一所述数据请求,在所述线程块的所有第一类线程束均将该数据请求对应的待处理数据存入所述目标存储器的所述目标区域内的情况下,通过第二类线程束从所述目标存储器的目标区域中取出所述待处理数据至向量寄存器,以对所述待处理数据进行处理。本申请可以在兼顾掩盖访问设备内存时存在的长延迟问题的同时,提高数据重用率。

Description

数据调度方法、计算芯片及电子设备
技术领域
本申请涉及数据处理技术领域,具体而言,涉及一种数据调度方法、计算芯片及电子设备。
背景技术
在GPU(Graphics Processing Unit,图形处理器)的编程模型中,数据是按层级存放在内部的SRAM(Static Random-Access Memory,静态随机存取存储器)中;其中,如图1所示,最上面一层是VRF(向量寄存器),对应的是CUDA(Compute Unified DeviceArchitecture,是一种操作GPU计算的硬件和软件架构)编程中的Warp(线程束),存放在VRF里的数据,只能在本Warp里共享。中间一层是L1 Cache(缓存)或者是SLB(共享本地缓冲),对应的是CUDA编程中的Block(线程块),存放在L1/SLB内的数据,可以在Block内所有Warp共享。最下一层是L2 Cache,对应的是CUDA编程概念中的Grid,在L2存放的数据,可以在Grid内所有Block共享。那么在Warp、Block和Grid中都会存在数据重用的情况。而在整个系统中,共享范围越广,即数据重用率越高,则带宽需求就越低。而由于VRF位于整个系统的最里层,因此提高Warp内的数据重用率在功耗上是最友好的。
然而,Warp内的数据重用率的最大值,是由VRF的物理容量以及流处理器上运行的Warp数决定的。假设一个流处理器上每个Lane(线)有V个VRF,而每个流处理器上并行运行n个Warp,那么每个Warp能访问的VRF个数为V/n。GPU的SIMT(Single Instruction MultipleThreads,单指令多线程)结构决定了一个流处理器上需要多个Warp相互配置来掩盖访问设备内存时存在的长延迟问题,但这就导致存在以下矛盾:要掩盖访问设备内存时存在的长延迟问题,需要一个流处理器上运行的Warp越多越好,但Warp越多(n越大),每个Warp能访问的VRF个数越少(V/n),而每个Warp能访问的VRF个数越少,数据重用率就越低,数据重用率越低,就需要更多的VRF读带宽,更多的SLB/L1读带宽,而实际上硬件的带宽是有限的,那么带宽受限的情况下,SIMT的计算单元就只能处于等待状态。
发明内容
本申请实施例的目的在于提供一种数据调度方法、计算芯片及电子设备,用以在兼顾掩盖访问设备内存时存在的长延迟问题的同时,提高数据重用率。
本申请实施例提供了一种数据调度方法,包括:通过第一类线程束向设备内存依次发出数据请求,并将所述设备内存返回的所述数据请求对应的待处理数据存入目标存储器的目标区域内;其中,所述目标存储器为所述第一类线程束所属的线程块的存储器,所述目标区域为所述目标存储器内与该数据请求对应的区域;针对任一所述数据请求,在所述线程块的所有第一类线程束均将该数据请求对应的待处理数据存入所述目标存储器的所述目标区域内的情况下,通过第二类线程束从所述目标存储器的目标区域中取出所述待处理数据至向量寄存器,以对所述待处理数据进行处理。
在上述实现过程中,通过将线程束分为两类,第一类线程束用于向设备内存依次请求待处理数据,并将待处理数据加载到所属的线程块的存储器中,而第二类线程束用于在任一数据请求的待处理数据被所有第一类线程束加载完毕(即被所有第一类线程束存入目标存储器的目标区域内)后,第二类线程束即可从目标存储器中取出待处理数据至向量寄存器,以对待处理数据进行处理,完成数据处理工作。同时,由于第一类线程束向设备内存依次发出数据请求,并将所述设备内存返回的所述数据请求对应的待处理数据存入目标存储器的目标区域内(即load操作)这一操作是长延迟的操作,因此通过第一类线程束和第二类线程束相互配合,利用第二类线程束不断从存储器中取出数据进行处理,并在第二类线程束从存储器中取出数据进行处理的过程中,由于目标存储器中的目标区域被腾出,第一类线程束可以继续从设备内存中搬运新的待运算数据到目标存储器中,这样就可以掩盖访问设备内存时存在的长延迟问题。同时,由于只需要第一类线程束和第二类线程束这两类线程束配合即可进行数据处理,因此每个流处理器上所需的线程束的数量最少可以仅需要两个,从而提高了数据重用率。
进一步地,所述第一类线程束用于在预设的计数器的计数值小于等于预设值时发出所述数据请求;其中,所述计数器的计数值在所有的所述第一类线程束发出所述数据请求时加一,在所有的所述第一类线程束将所述设备内存返回的所述数据请求对应的待处理数据存入目标存储器的目标区域内时减一。
可以理解,目标存储器的空间是有限的,因此为了避免出现发出过多的请求而没有足够的空间存储待处理数据的情况,在上述实现过程中,通过设置计数器来控制第一类线程束的数据请求是否发出,只需合理设置预设值的大小,由于计数器的计数值与数据请求的发出和数据请求对应的待处理数据的返回相关,而所有的第一类线程束将设备内存返回的数据请求对应的待处理数据存入目标存储器的目标区域内后,第二类线程束会将该目标区域内的待处理数据取出,从而可以供新的数据请求对应的待处理数据存入,因此可以实现数据请求发出与待处理数据存储的动态平衡,可以降低因存储器溢出而造成数据丢失的风险。
进一步地,所述预设值小于所述目标存储器被预先划分的区域数。
在上述实现过程中,通过预先划分目标存储器的区域,并将预设值配置为小于目标存储器被预先划分的区域数的值,从而可以在预留一部分区域用于执行其他指令的同时,有效控制数据请求的发送速度,实现数据请求发出与待处理数据存储的动态平衡。
进一步地,每一个后端分配有一个所述第一类线程束和一个所述第二类线程束;所述后端模块为对所述待处理数据进行处理的模块。
在上述实现过程中,每一个后端模块(例如SIMT的计算单元)的向量寄存器只需要被2个线程束分配,因此用于提供运算服务的第二类线程束至少可以分得1/2的向量寄存器资源,从而提高数据重用率。
进一步地,为所述第一类线程束分配的向量寄存器资源小于为所述第二类线程束分配的向量寄存器资源。
可以理解,第一类线程束主要工作在于将待运算数据从设备内存加载至存储器中,对于向量寄存器的资源需求较少,而第二类线程束主要工作在于从存储器中取出待处理数据至向量寄存器以对待处理数据进行处理,因此对于向量寄存器的资源需求较多,因此在上述实现过程中,将更多的向量寄存器资源向第二类线程束倾斜而非平均进行分配,这就可以使得有更多的向量寄存器资源可以用于进行运算结果的驻留,从而可以进一步提高数据重用率,并减少带宽需求,降低功耗。
进一步地,所述第一类线程束分配的向量寄存器资源和所述第二类线程束分配的向量寄存器资源的比例为1比7。
进一步地,所述方法还包括:在启用所述第一类线程束和所述第二类线程束之前,通过线程束分配器解析编译器传来的模式信息,并在所述模式信息为目标模式时,通过所述线程束分配器为所述第一类线程束和所述第二类线程束分配向量寄存器资源;其中,为所述第一类线程束分配的向量寄存器资源小于为所述第二类线程束分配的向量寄存器资源。
可以理解,在处理器框架中,向量寄存器资源默认是在各线程束上均分的。而在上述实现过程中,通过额外配置一个模式信息,从而对模式信息进行解析就可以实现按需地向量寄存器资源不均衡分配,使得向量寄存器资源可以更多的向第二线程束倾斜。
进一步地,所述模式信息为编译器对预设程序进行识别后得到的信息;其中,所述预设程序包括用于记录所述第一类线程束所需的向量寄存器资源的第一程序块和用于记录所述第二类线程束所需的向量寄存器资源的第二程序块。
可以理解,在处理器框架中,向量寄存器资源默认是在各线程束上均分的。而在上述实现过程中,通过在预设程序中采用第一程序块和第二程序块分别进行第一类线程束和第二类线程束所需的向量寄存器资源的设置,这就使得通过编译器可以实现对于第一类线程束和第二类线程束的向量寄存器资源分配模式的快速确定,从而使得向量寄存器资源可以更多的向第二线程束倾斜。
本申请实施例还提供了一种计算芯片,包括:流处理器,包括第一类线程束和第二类线程束;存储器,用于供所述第一类线程束加载待处理数据;向量寄存器,用于存储所述第二类线程束从所述存储器中取出的待处理数据,并供后端模块进行处理;其中,所述第一类线程束和所述第二类线程束配合实现上述任一种的数据调度方法。
本申请实施例还提供了一种电子设备,包括前述计算芯片。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为相关技术中的数据存放层级示意图;
图2为本申请实施例提供的一种数据调度方法的流程示意图;
图3为本申请实施例提供的一种调度顺序示意图;
图4为本申请实施例提供的一种计算芯片的结构示意图;
图5为本申请实施例提供的一种向量寄存器资源分配变化示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
为便于理解本申请实施例的方案,下面先对计算芯片中的数据重用情况进行说明:
Warp内的数据重用:
假设Warp内要完成一个M×k(矩阵A)*k×N(矩阵B)=M×N的矩阵运算,假设M=N=16,k=16,那么需要读入的矩阵A有256个数据,矩阵B也有256个数据,需要进行的乘加运算次数是16*16*16=4096次。
假设M=N=16×4,k=16,那么读入矩阵A和矩阵B的数据都是1024个数据,此时需要的运算是(16*4)*16*(16*4)=65536次运算。显然,后者读入的数据是前者的4倍,但是实现的运算是前者的16倍,也就是后者的数据重用率是前者的4倍,或者同样的计算性能下,后者带宽的需求是前者的1/4。假设M=N=16的情况下的重用系数为标准重用系数RWarp=1,那么Warp的结果矩阵M=N=16×4,重用系数就为RWarp=4。
需要注意的是,在实际编程的时候,考虑到矩阵的大小,因此通常需要进行分块切割,每次处理小分块之间的运算,然后把分块的运算结果累加到结果矩阵上,所以结果矩阵需要驻留在VRFs里的。可以理解,VRFs越大,则可以驻留的结果矩阵就越大,从而可以使得重用率更高。
Block内数据的重用:
假设Block内有4个Warp,组成一个2×2的方阵,每个Warp计算的结果矩阵大小为M*N;一个block内完成的结果矩阵是(2*M)×(2*N);
假设Block内有16个Warp,组成一个4×4的方阵,每个Warp计算的结果矩阵大小为M*N;一个block内完成的结果矩阵是(4*M)×(4*N);
假设上述两种情况中Warp内的数据重用率一致,且假设Warp内的结果矩阵尺寸为64×64,那么对于上述第一种情况,Block=2×2Warps,重用系数RBlock=RWarp×2=8;对于上述第二种情况,Block=4×4Warps,重用系数RBlock=RWarp×4=16。显然,上述第二种情况的数据重用率是上述第一种情况的2倍,或者说block内要实现同样的计算性能,后者的带宽需求是前者的1/2。
L2里的数据重用:
与前文类似的,假设Grid内有16个block,组成一个4*4的方阵,那么此时在L2中重用系数为4*Rblock。假设Grid内有64个block,组成一个8*8的方阵,那么此时在L2中重用系数为8*Rblock。显然,第二种情况的数据重用率是第一种情况的2倍,或者说L2内要实现同样的计算性能,后者的带宽需求是前者的1/2。
在计算芯片中,共享范围越广,带宽需求越低。VRFs的读带宽要比L1/SLB的读带宽更大,L1/SLB的读带宽要比L2的读带宽更大,L2的读带宽比MC(内存控制器的读带宽更大)。
那么,若要减少各级的读带宽需求,则提高VRFs中的重用率(即Warp的数据重用率)效果最好,VRFs中的重用率提高了,则L1/SLB以及L2的重用率都会提高。
Warp的数据重用率的最大值,是由VRFs的物理容量以及流处理器上运行的Warp数决定的。假设一个流处理器上每个Lane有V个VRF,而每个流处理器上并行运行n个Warp,那么每个Warp能访问的VRF个数为V/n。GPU的SIMT结构决定了一个流处理器上需要多个Warp相互配置来掩盖访问设备内存时存在的长延迟问题,但这就导致存在以下矛盾:要掩盖访问设备内存时存在的长延迟问题,需要一个流处理器上运行的Warp越多越好,但Warp越多(n越大),每个Warp能访问的VRF个数越少(V/n),而每个Warp能访问的VRF个数越少,数据重用率就越低,数据重用率越低,就需要更多的VRF读带宽,更多的SLB/L1读带宽,而实际上硬件的带宽是有限的,那么带宽受限的情况下,SIMT的计算单元就只能处于等待状态。
那么,为了解决能够在掩盖访问设备内存时存在的长延迟问题的同时,提高数据重用率问题,本申请实施例中提供了一种数据调度方法。可以参见图2所示,图2为本申请实施例中提供的数据调度方法的流程示意图,包括:
S201:通过第一类线程束向设备内存依次发出数据请求,并将所述设备内存返回的所述数据请求对应的待处理数据存入目标存储器的目标区域内。
需要注意的是,在本申请实施例中,目标存储器是指第一类线程束所属的线程块的存储器,目标区域是指目标存储器内与该数据请求对应的区域
在本申请实施例中,目标存储器可以是SLB(共享本地缓冲)。
可以理解,在本申请实施例中,待处理数据可以是直接从设备内存中获得的,也可以是通过L2缓存从设备内存中获得的。
在本申请实施例中,第一类线程束主要用于执行Load(加载)指令,即向设备内存发出数据请求并接收设备内存返回的与该数据请求对应的待处理数据,并把待处理数据存入所属的线程块的存储器的目标区域中。可以理解,第一类线程束在把待处理数据存入所属的线程块的存储器的目标区域中时,可以进行地址计算,以将待处理数据加载至存储器的正确位置。地址计算过程需要用到一定的向量寄存器资源。
S202:针对任一数据请求,在线程块的所有第一类线程束均将该数据请求对应的待处理数据存入目标存储器的目标区域内的情况下,通过第二类线程束从目标存储器的目标区域中取出待处理数据至向量寄存器,以对该待处理数据进行处理。
在本申请实施例中,第二类线程束是负责提供计算服务的线程束,主要用于把待处理数据从存储器中取到向量寄存器中,以供后端模块处理。可以理解,本申请实施例中所述的后端模块是指可以对向量寄存器中的数据进行处理的模块,例如SIMT的计算单元等。
在本申请实施例中,可以设置计数器以控制第一类线程束对于待处理数据的加载工作(即控制第一类线程束对于数据请求的发出以及待处理数据的存入)。具体而言,第一类线程束可以被配置为在计数器的计数值小于等于预设值时发出数据请求。而计数器被配置为在所有的第一类线程束发出数据请求时加一,在所有的第一类线程束将设备内存返回的数据请求对应的待处理数据存入目标存储器的目标区域内时减一。这样,通过设置计数器来控制第一类线程束的数据请求是否发出,只需合理设置预设值的大小,由于计数器的计数值与数据请求的发出和数据请求对应的待处理数据的返回相关,而所有的第一类线程束将设备内存返回的数据请求对应的待处理数据存入目标存储器的目标区域内后,第二类线程束会将该目标区域内的待处理数据取出,从而可以供新的数据请求对应的待处理数据存入,因此可以实现数据请求发出与待处理数据存储的动态平衡,可以降低因存储器溢出而造成数据丢失的风险。
可以理解,上段中所述的所有的第一类线程束是指属于同一线程块block的所有第一类线程束。
还可以理解,在本申请实施例中,该预设值可以根据存储器的空间大小设置,但不作为限制。示例性的,在一种可选实施方式中,可以预先对线程快的存储器进行区域划分,本申请称划分的区域为stage。预设值等于线程快的存储器被划分的区域数。例如,线程快的存储器可以被划分为4个区域,而预设值可以设置为3,但不作为限制。
在本申请实施例中,为了实现同一个流处理器上第一类线程束和第二类线程束之间的同步(即在线程块的所有第一类线程束均将一数据请求对应的待处理数据存入目标存储器的目标区域内时,第二类线程束可以知晓去从该目标区域取出待处理数据),可以采用CUDA中定义的block.sync指令实现。可以理解,一个block可以有很多线程,大量线程构成线程束,block中所有的线程执行到该block.sync指令都会停下来,等到所有线程都执行到该block.sync指令时,才可以继续往下执行,因此基于该指令机制可以实现第一类线程束与第二类线程束之间的同步。在本申请实施例中,为便于描述,将所有线程都执行到该block.sync指令的时间点称之为同步点。
在本申请实施例中,第二类线程束可以在线程块block内的所有线程束都到达同步点后,再从目标存储器中取出待处理数据至向量寄存器,这样就可以很容易地实现同一个流处理器上第一类线程束和第二类线程束之间的同步,使得第二类线程束是在第一类线程束加载完毕后进行的待处理数据取出操作,降低数据计算错误的风险。
在本申请实施例中,第二类线程束还可以用于将数据处理结果写回设备内存中。
可以理解,在本申请实施例的一种可行实施方式中,当一个待处理数据被处理后,相应的数据处理结果可以是先驻留在向量寄存器中的,当所有相关的数据被处理完毕后,最后再由第二类线程束将数据处理结果整体返回给设备内存。例如对于矩阵运算,假设要进行的是M×K*K×N的矩阵运算,而每一次执行的处理是M×k*k×N的矩阵运算(其中,k小于K),则每一次进行的M×K*K×N运算后得到的结果矩阵先驻留在向量寄存器中,当下一次进行的M×K*K×N运算后得到的结果矩阵会累加到驻留的结果矩阵上,当M×K*K×N所能拆分出的所有的M×k*k×N的矩阵运算均被运算后,即得到了最终的结果矩阵,此时第二类线程束可以将该结果矩阵写回设备内存。可以理解,受限于第二类线程束所能占用的向量寄存器的大小,驻留在向量寄存器中的结果矩阵的大小不能超过于第二类线程束所能占用的向量寄存器的大小,因此在本可行实施方式的一种可选示例中,第二类线程束除了可以在所要完成的目标运算(例如M×K*K×N)所拆分出的所有小运算均处理完毕后将最终的数据处理结果返回给设备内存外,还可以在数据处理结果的大小超过警戒值(例如可以为第二类线程束所能占用的向量寄存器的大小,但不作为限制)后,就将驻留的数据处理结果返回给设备内存。
在本申请实施例的另一种可选的实施方式中,第二类线程束也可以是在接收到一个后端模块的数据处理结果后,就将该数据处理结果写回设备内存中。
在本申请实施例的一些可选实施方式中,每一个后端可以仅分配有一个第一类线程束和一个第二类线程束。这样,用于提供运算服务的第二类线程束至少可以分得1/2的向量寄存器资源,从而提高数据重用率。当然,在另一些可选实施方式中,每一个后端可以仅分配有多个第一类线程束和第二类线程束。
为便于理解本申请实施例的方案,下面结合图3所示的情况对本申请实施例作示例性说明。
假设一个流处理器有L个计算单元,为了最大的复用率,每个计算单元上分配2个Warp,一个Block有2L个Warp。
2L个Warp分成2组,L个Load Warp(第一类线程束),L个Calc Warp(第二类线程束)。其中:
Load Warp:负责把数据从设备内存Load到SLB里,期间包括地址计算工作;
Calc Warp:是为计算单元直接提供服务的Warp,负责把数据从SLB取到向量寄存器中,以供计算单元执行计算指令。
参见图3所示,图3中:
L:代表从设备内存搬运待处理数据到SLB的操作,表征load指令被执行(记为Load操作),是一个长延迟的操作。每次数据请求发出,CNT(计数器)往上计数,每次数据请求的待处理数据返回(即所有Load Warp的同一数据请求的待处理数据都被存入SLB),CNT往下计数。且数据请求顺序发送,数据请求对应的待处理数据也顺序返回。
W:代表等待,等待CNT数小于等于预设值后执行后续操作。如图3所示,发出3次L,那么CNT=3;在第一个batch(批)的最后,W2,也就是等待CNT=2,也就是等待L0所取的数据返回。
S:表征sync barrier(同步点),可以通过CUDA编程里定义的block.sync指令实现。
D:表征从SLB把数据放入向量寄存器。
C:表征矩阵运算指令。
WB:表征将最后的结果矩阵写回设备内存。
图3示例了将M×K*K×N的矩阵运算拆分成6个M×k*k×N的矩阵运算(其中,k等于K/6)的情况。
在本示例中,可以把SLB的容量分成4个stage,先执行3次load操作,依次请求从设备内存取3个待处理数据L0、L1和L2分别放入3个stage中。由于数据请求顺序发送,数据请求对于的待处理数据也会顺序返回,因此会先等到所有Load Warp的L0都被存入SLB,此时可以由Calc Warp从SLB中取出L0进行矩阵运算(即执行图中的D0和C0指令),同时LoadWarp可以执行L3的load操作(即向设备内存发出L3的数据请求,并在接收到L3的数据请求对应的待处理数据L3后,将L3存入原L0对应的stage)。
等到针对L0的矩阵运算结束时,等待所有Load Warp的L1都被存入SLB。在所有Load Warp的L1都被存入SLB后,由Calc Warp从SLB中取出L1进行矩阵运算,同时Load Warp可以执行L4的load操作。对L1进行矩阵运算得到的结果矩阵累加到对L0进行矩阵运算得到的结果矩阵R0上,得到结果矩阵R1。
等到针对L1的矩阵运算结束时,等待所有Load Warp的L2都被存入SLB。在所有Load Warp的L2都被存入SLB后,由Calc Warp从SLB中取出L2进行矩阵运算,同时Load Warp可以执行L5的load操作。并且将对L2进行矩阵运算得到的结果矩阵累加到R1上,得到结果矩阵R2。
等到针对L2的矩阵运算结束时,等待所有Load Warp的L3都被存入SLB。在所有Load Warp的L3都被存入SLB后,由Calc Warp从SLB中取出L3进行矩阵运算。并且将对L3进行矩阵运算得到的结果矩阵累加到R2上,得到结果矩阵R3。
等到针对L3的矩阵运算结束时,等待所有Load Warp的L4都被存入SLB。在所有Load Warp的L4都被存入SLB后,由Calc Warp从SLB中取出L4进行矩阵运算。并且将对L4进行矩阵运算得到的结果矩阵累加到R3上,得到结果矩阵R4。
等到针对L4的矩阵运算结束时,等待所有Load Warp的L5都被存入SLB。在所有Load Warp的L5都被存入SLB后,由Calc Warp从SLB中取出L5进行矩阵运算。并且将对L5进行矩阵运算得到的结果矩阵累加到R4上,得到结果矩阵R5。
等到针对L5的矩阵运算结束时,将结果矩阵R5写回设备内存。
通过本申请实施例的上述方法,可通过3个stage的计算时间来掩盖访问设备内存的长延迟,而且每个warp可占用物理VRFs的1/2,因此数据重用率很高。且同一个流处理器上,Load Warp和Calc Warp的同步非常简单,用CUDA的Barrier即可,彼此咬合,Load在填充SLB,Calc在消耗SLB,刚释放的马上就会被填充,降低了出现普通的编程方法中多Warp的StepLock情况(即多个warp同步运行,无法相互提供掩护的情况)的风险。
在本申请实施例中,考虑到第一类线程束主要用于向设备内存发出数据请求并接收设备内存返回的与该数据请求对应的待处理数据,并把待处理数据存入所属的线程块的存储器的目标区域中,以及用于进行在把待处理数据存入所属的线程块的存储器的目标区域中时的地址计算,因此仅地址计算过程需要用到一定的向量寄存器资源。相比于第二类线程束而言,所需用到的向量寄存器资源更少。而第二类线程束的向量寄存器中还需要进行结果矩阵的驻留,而驻留的结果矩阵尺寸越大,则数据重用率越高,所需带宽就越小。例如,假设可驻留的结果矩阵的尺寸从4*4变为了4*8,那么数据重用率可以变为原本的16/3,带宽变为原本的3/4。可以理解,可驻留的结果矩阵的尺寸为4*4时,向量寄存器中需要加载4+4=8份数据,需要进行16次计算;而4*8需要加载4+8=12份数据,进行32次计算;假设完成的计算量一样,都是需要进行32次计算,那么前者由于每一次加载8份数据需要进行16次计算,那么前置加载两次8份数据可进行32次计算。而后者只需要加载12份数据就会进行32次计算,因此前者的带宽和后者需要的带宽比是8*2:12=4:3;即后者需要的带宽是前者的3/4,也即可驻留的结果矩阵的尺寸从4*4变为了4*8后,带宽变为原本的3/4,带宽降低。相应的,对于一个n*n的驻留矩阵,数据重用率的计算公式是(n*n)*2/(n+n),那么对于4*4的驻留矩阵,数据重用率为(4*4)*2/(4+4)=4,而可驻留的结果矩阵的尺寸变为4*8后,数据重用率变为(4*8)*2/(4+8)=16/3,数据重用率变高。
因此,为了进一步提高数据重用率,在本申请实施例的一种可选实施方式中,可以对第一类线程束和第二类线程束所占用的向量寄存器资源进行配置,使得第一类线程束和第二类线程束不再均分向量寄存器资源,而是满足如下关系:为第一类线程束分配的向量寄存器资源小于为第二类线程束分配的向量寄存器资源。这样,可以将更多的向量寄存器资源向第二类线程束倾斜而非平均进行分配,这就可以使得有更多的向量寄存器资源可以用于进行运算结果的驻留,从而可以进一步提高数据重用率,并减少带宽需求,降低功耗。
示例性的,可参见图5所示,图5左侧示出了常规方式中的向量寄存器资源的分配情况。向量寄存器资源在第一类线程束Load Warp和第二类线程束Calc Warp之间均分。而采用本申请实施例的上述可选实施方式,如图5右侧所示的情况,将更多的向量寄存器资源分配给第二类线程束Calc Warp,而第一类线程束Load Warp仅占有少量的向量寄存器资源以保证自身可正常运作。这样,这就可以使得有更多的向量寄存器资源可以用于进行运算结果的驻留,从而可以进一步提高数据重用率,并减少带宽需求,降低功耗。可以理解,图5中的C_base是分配给Calc Warp的向量寄存器起始位置的序号,C_size是指分配给CalcWarp的向量寄存器的尺寸或数量;L_base是分配给Load Warp的向量寄存器起始位置的序号,L_size是指分配给Load Warp的向量寄存器的尺寸或数量。
在本申请实施例的一种可选实施方式中,可以配置第一类线程束分配的向量寄存器资源和第二类线程束分配的向量寄存器资源的比例为1比7。
例如,对于一个具有256个向量寄存器的计算单元,常规方式是为第一类线程束分配128个向量寄存器,为第二类线程束也分配128个向量寄存器。但是,在本申请实施例中,经测试发现,对于一个具有256个向量寄存器的计算单元,在仅使用32个向量寄存器的情况下,可以完全满足第一类线程束对于地址计算的需求,因此可以将为第一类线程束分配32个向量寄存器,为第二类线程束也分配224个向量寄存器,从而使得第二类线程束占有更多的向量寄存器资源,从而可以驻留更大的结果矩阵,从而提高数据重用率,并减少带宽需求,降低功耗。
可以理解,上述比例以及上述为第一类线程束分配的向量寄存器数量可以根据实际情况进行不同的设置,例如第一类线程束分配的向量寄存器资源和第二类线程束分配的向量寄存器资源的比例为1比3等等,或者又例如可以设置为第一类线程束分配的向量寄存器资源不超过32个向量寄存器,或者不超个64个向量寄存器等,对此本申请实施例不作限制。
那么,为了实现对于第一类线程束与第二类线程束之间的向量寄存器资源的差异化分配,在本申请实施例的一种可行实施方式中,可以通过编译器、程序代码(通常为CUDA代码)相互配合与支持实现。
具体而言,可以在启用第一类线程束和第二类线程束之前,通过线程束分配器解析编译器传来的模式信息,并在模式信息为目标模式时,通过线程束分配器为第一类线程束和第二类线程束分配向量寄存器资源。其中,为第一类线程束分配的向量寄存器资源小于为第二类线程束分配的向量寄存器资源。这样,通过额外配置一个模式信息,从而对模式信息进行解析就可以实现按需地向量寄存器资源不均衡分配,使得向量寄存器资源可以更多的向第二线程束倾斜。
在本申请实施例中,该模式信息可以是1比特大小的信息,可以携带于传递给线程束分配器的数据包中。
在本申请实施例中,模式信息可以为编译器对预设程序进行识别后得到的信息。其中,预设程序包括用于记录第一类线程束所需的向量寄存器资源的第一程序块和用于记录第二类线程束所需的向量寄存器资源的第二程序块。
示例性的,预设程序可以为如下形式:
//Pragma LOAD_CALC_PAIRIf(LOAD_WARP){
Load代码;
}else{
Calc代码;
}
其中Pragma LOAD_CALC_PAIR表征模式名为LOAD_CALC_PAIR,程序代码包括if和else两个程序块,对编译器来说,if程序块和else程序块是不同的命名空间,可以用相同的寄存器名字来代表不同的变量,因此可以在两个程序块中独立的配置第一类线程束和第二类线程束所占用的向量寄存器资源,并被编译器正确识别。
在本申请实施例中,编译器可以识别出程序代码,进而生成二进制的kernel代码,并将该代码传递给driver(驱动程序),该代码中会通知driver目前的工作模式是每个计算资源上有一对Warp,一个是Load Warp,一个是Calc Warp,且工作模式为LOAD_CALC_PAIR模式。
然后driver给硬件的线程束分配器也送入该信号,线程束分配器在初始化Warp的时候,按照设定的比例或数量进行第一类线程束和第二类线程束的向量寄存器资源分配。
下面以向量寄存器总数为256个,第一类线程束和第二类线程束的向量寄存器资源分配比例为1比7的情况为例对方案做示例性说明。
首先,程序仍旧按照前述示例撰写,在if的程序块里向量寄存器的资源是224个,而在else的程序块里向量寄存器的资源是32个。编译器识别该//Pragma程序,生成二进制kernel代码,并传递给driver,driver将模式信息以1比特的大小携带于数据包中传输给线程束分配器。
线程束分配器解码这1比特的模式信息,确定工作在LOAD_CALC_PAIR模式,然后按照下述分配方案初始化Warp:
C_base=0;C_size=224;(起始位置为序号0的向量寄存器,尺寸为224个)
L_base=224;L_size=32。(起始位置为序号224的向量寄存器,尺寸为32个)
本申请实施例所提供的数据调度方法,通过将线程束分为两类,第一类线程束用于向设备内存依次请求待处理数据,并将待处理数据加载到所属的线程块的存储器中,而第二类线程束用于在任一数据请求的待处理数据被所有第一类线程束加载完毕(即被所有第一类线程束存入目标存储器的目标区域内)后,第二类线程束即可从目标存储器中取出待处理数据至向量寄存器,以对待处理数据进行处理,完成数据处理工作。同时,由于第一类线程束向设备内存依次发出数据请求,并将所述设备内存返回的所述数据请求对应的待处理数据存入目标存储器的目标区域内(即load操作)这一操作是长延迟的操作,因此通过第一类线程束和第二类线程束相互配合,利用第二类线程束不断从存储器中取出数据进行处理,并在第二类线程束从存储器中取出数据进行处理的过程中,由于目标存储器中的目标区域被腾出,第一类线程束可以继续从设备内存中搬运新的待运算数据到目标存储器中,这样就可以掩盖访问设备内存时存在的长延迟问题。同时,由于只需要第一类线程束和第二类线程束这两类线程束配合即可进行数据处理,因此所需的线程束的数量最少可以仅需要两个,从而提高了数据重用率。
此外,本申请实施例的方案还可以对向量寄存器资源进行差异化分配,将更多的向量寄存器资源向第二类线程束倾斜而非平均进行分配,使得有更多的向量寄存器资源可以用于进行运算结果的驻留,从而可以进一步提高数据重用率,并减少带宽需求,降低功耗。
基于同一发明构思,本申请实施例中还提供了一种计算芯片,参见图4所示,该计算芯片内可以包括流处理器、存储器和向量寄存器。其中,流处理器包括第一类线程束和第二类线程束;存储器用于供第一类线程束加载待处理数据;向量寄存器,用于存储所述第二类线程束从所述存储器中取出的待处理数据,并供后端模块进行处理。
其中,第一类线程束和第二类线程束配合实现前述的数据调度方法。
可以理解,计算芯片中还可以具有更多的电子元件或功能电路,例如还可以具有线程束分配器等功能电路,对此本申请实施例中不做限制。
可以理解,本申请实施例中提供的计算芯片可以是但不限于AI(ArtificialIntelligence,人工智能)芯片、CPU(Central Processing Unit,中央处理器)芯片、GPU(Graphics Processing Unit,图形处理器)芯片、IPU(基础设施处理器)芯片、GPGPU(General-Purpose Graphics Processing Unit,通用图形处理器)芯片等,但不作为限制。
基于同一发明构思,本申请实施例中还提供了一种电子设备,该电子设备中具有前述计算芯片。
可以理解,本申请实施例提供的电子设备可以是具有前述芯片的板卡,例如显卡等,也可以是具有前述芯片的主板,例如电脑主板、手机主板等。此外,本申请实施例提供的电子设备还可以是但不限于:移动终端(如手机、笔记本电脑等)、固定终端(如台式电脑等)、服务器等具有内部数据交互与处理需求的设备。
可以理解,电子设备内除了具有前述计算芯片外,还可以具有其他的部件。例如,电子设备除了可以具有计算芯片外,还可以具有I/O接口、存ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存储器等部件,并可通过总线连接。
在本申请所提供的实施例中,应该理解到,所揭露方法,可以通过其它的方式实现。以上所描述的实施例仅仅是示意性的。
另外,在本申请各个实施例中的各模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体与另一个实体区分开来,而不一定要求或者暗示这些实体之间存在任何这种实际的关系或者顺序。
在本文中,多个是指两个或两个以上。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (9)

1.一种数据调度方法,其特征在于,包括:
通过第一类线程束向设备内存依次发出数据请求,并将所述设备内存返回的所述数据请求对应的待处理数据存入目标存储器的目标区域内;其中,所述目标存储器为所述第一类线程束所属的线程块的存储器,所述目标区域为所述目标存储器内与该数据请求对应的区域;
针对任一所述数据请求,在所述线程块的所有第一类线程束均将该数据请求对应的待处理数据存入所述目标存储器的所述目标区域内的情况下,通过第二类线程束从所述目标存储器的目标区域中取出所述待处理数据至向量寄存器,以供后端模块对所述待处理数据进行处理;所述后端模块为对所述待处理数据进行处理的模块;
其中:所述第一类线程束为属于同一线程块的所有第一类线程束;所述第一类线程束在将所述待处理数据存入所述目标存储器的目标区域中时,进行地址计算,以将所述待处理数据加载至所述目标存储器中计算出的地址所对应的目标区域;且为所述第一类线程束分配的向量寄存器资源小于为所述第二类线程束分配的向量寄存器资源。
2.如权利要求1所述的数据调度方法,其特征在于,所述第一类线程束用于在预设的计数器的计数值小于等于预设值时发出所述数据请求;
其中,所述计数器的计数值在所有的所述第一类线程束发出所述数据请求时加一,在所有的所述第一类线程束将所述设备内存返回的所述数据请求对应的待处理数据存入目标存储器的目标区域内时减一。
3.如权利要求2所述的数据调度方法,其特征在于,所述预设值小于所述目标存储器被预先划分的区域数。
4.如权利要求1-3任一项所述的数据调度方法,其特征在于,每一个所述后端模块分配有一个所述第一类线程束和一个所述第二类线程束。
5.如权利要求1所述的数据调度方法,其特征在于,所述第一类线程束分配的向量寄存器资源和所述第二类线程束分配的向量寄存器资源的比例为1比7。
6.如权利要求1所述的数据调度方法,其特征在于,所述方法还包括:
在启用所述第一类线程束和所述第二类线程束之前,通过线程束分配器解析编译器传来的模式信息,并在所述模式信息为目标模式时,通过所述线程束分配器为所述第一类线程束和所述第二类线程束分配向量寄存器资源;
其中,为所述第一类线程束分配的向量寄存器资源小于为所述第二类线程束分配的向量寄存器资源。
7.如权利要求6所述的数据调度方法,其特征在于,所述模式信息为编译器对预设程序进行识别后得到的信息;
其中,所述预设程序包括用于记录所述第一类线程束所需的向量寄存器资源的第一程序块和用于记录所述第二类线程束所需的向量寄存器资源的第二程序块。
8.一种计算芯片,其特征在于,包括:
流处理器,包括第一类线程束和第二类线程束;
存储器,用于供所述第一类线程束加载待处理数据;
向量寄存器,用于存储所述第二类线程束从所述存储器中取出的待处理数据,并供后端模块进行处理;
其中,所述第一类线程束和所述第二类线程束配合实现如权利要求1-7任一项所述的数据调度方法。
9.一种电子设备,其特征在于,包括如权利要求8所述的计算芯片。
CN202310446262.XA 2023-04-24 2023-04-24 数据调度方法、计算芯片及电子设备 Active CN116483536B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310446262.XA CN116483536B (zh) 2023-04-24 2023-04-24 数据调度方法、计算芯片及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310446262.XA CN116483536B (zh) 2023-04-24 2023-04-24 数据调度方法、计算芯片及电子设备

Publications (2)

Publication Number Publication Date
CN116483536A CN116483536A (zh) 2023-07-25
CN116483536B true CN116483536B (zh) 2024-05-10

Family

ID=87213355

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310446262.XA Active CN116483536B (zh) 2023-04-24 2023-04-24 数据调度方法、计算芯片及电子设备

Country Status (1)

Country Link
CN (1) CN116483536B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108595258A (zh) * 2018-05-02 2018-09-28 北京航空航天大学 一种gpgpu寄存器文件动态扩展方法
CN108830777A (zh) * 2017-04-27 2018-11-16 辉达公司 用于全面同步执行线程的技术
CN109886407A (zh) * 2019-02-27 2019-06-14 上海商汤智能科技有限公司 数据处理方法、装置、电子设备及计算机可读存储介质
CN110032395A (zh) * 2017-11-14 2019-07-19 辉达公司 用于提高资源利用率的统一寄存器文件
CN111488177A (zh) * 2020-04-14 2020-08-04 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机设备和存储介质
CN112214243A (zh) * 2020-10-21 2021-01-12 上海壁仞智能科技有限公司 配置向量运算系统中的协作线程束的装置和方法
CN112241290A (zh) * 2019-07-16 2021-01-19 辉达公司 用于在并行处理单元中有效执行数据规约的技术
CN113918356A (zh) * 2021-12-13 2022-01-11 广东睿江云计算股份有限公司 基于cuda数据快速同步方法、装置、计算机设备及存储介质
CN113918883A (zh) * 2021-11-03 2022-01-11 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI768649B (zh) * 2021-01-08 2022-06-21 國立成功大學 執行緒束排程方法及使用該方法的串流多處理器
US20230086989A1 (en) * 2021-09-17 2023-03-23 Nvidia Corporation Parallel processing of thread groups

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108830777A (zh) * 2017-04-27 2018-11-16 辉达公司 用于全面同步执行线程的技术
CN110032395A (zh) * 2017-11-14 2019-07-19 辉达公司 用于提高资源利用率的统一寄存器文件
CN108595258A (zh) * 2018-05-02 2018-09-28 北京航空航天大学 一种gpgpu寄存器文件动态扩展方法
CN109886407A (zh) * 2019-02-27 2019-06-14 上海商汤智能科技有限公司 数据处理方法、装置、电子设备及计算机可读存储介质
CN112241290A (zh) * 2019-07-16 2021-01-19 辉达公司 用于在并行处理单元中有效执行数据规约的技术
CN111488177A (zh) * 2020-04-14 2020-08-04 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机设备和存储介质
CN112214243A (zh) * 2020-10-21 2021-01-12 上海壁仞智能科技有限公司 配置向量运算系统中的协作线程束的装置和方法
CN113918883A (zh) * 2021-11-03 2022-01-11 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质
CN113918356A (zh) * 2021-12-13 2022-01-11 广东睿江云计算股份有限公司 基于cuda数据快速同步方法、装置、计算机设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Countering Load-to-Use Stalls in the NVIDIA Turing GPU;R.Rangan等;《IEEE Micro》;第40卷(第6期);59-66 *
关键稀疏数值计算核心在国产众核架构上的性能优化研究;王欣亮;《中国博士学位论文全文数据库 基础科学辑》(第04期);A002-2 *
面向实时应用的深度学习研究综述;张政馗等;《软件学报》;第31卷(第09期);2654-2677 *

Also Published As

Publication number Publication date
CN116483536A (zh) 2023-07-25

Similar Documents

Publication Publication Date Title
US10768989B2 (en) Virtual vector processing
US8478926B1 (en) Co-processing acceleration method, apparatus, and system
US8839259B2 (en) Thread scheduling on multiprocessor systems
CN103207774B (zh) 用于解决线程发散的方法和系统
US20080313624A1 (en) Dynamic loading and unloading for processing unit
CN103218208A (zh) 用于实施成形的存储器访问操作的系统和方法
CN103425534A (zh) 在许多应用之间共享的图形处理单元
JP2006216060A (ja) データ処理方法およびデータ処理システム
US20210232325A1 (en) Application-specific memory scaling in multi-device systems
CN116400982B (zh) 配置中继寄存器模块的方法和装置、计算设备和可读介质
WO2024108800A1 (zh) 数据处理方法和装置、电子设备和计算机可读存储介质
CN116483536B (zh) 数据调度方法、计算芯片及电子设备
CN111240745A (zh) 交叉执行的增强型标量向量双管线架构
US9405470B2 (en) Data processing system and data processing method
CN112068955B (zh) 一种异构多核平台处理器内的通信优化方法及电子设备
US20080295097A1 (en) Techniques for sharing resources among multiple devices in a processor system
CN113094099A (zh) 矩阵数据广播架构
WO2023142091A1 (zh) 计算任务调度装置、计算装置、计算任务调度方法和计算方法
CN117311910B (zh) 一种高性能虚拟密码机运行方法
US20240168639A1 (en) Efficient reduce-scatter via near-memory computation
CN117873664A (zh) 任务调度模块、处理器、电子装置、设备及方法
CN117312224A (zh) 数据处理系统、方法、装置和控制器
CN116402102A (zh) 神经网络处理器和电子设备
CN116627887A (zh) 图数据处理的方法和芯片
CN116302504A (zh) 线程块的处理系统、方法及相关设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant