CN117561501A - 一种多线程数据处理方法及装置 - Google Patents
一种多线程数据处理方法及装置 Download PDFInfo
- Publication number
- CN117561501A CN117561501A CN202180099704.7A CN202180099704A CN117561501A CN 117561501 A CN117561501 A CN 117561501A CN 202180099704 A CN202180099704 A CN 202180099704A CN 117561501 A CN117561501 A CN 117561501A
- Authority
- CN
- China
- Prior art keywords
- thread
- data
- threads
- source
- src1
- 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
Links
- 238000003672 processing method Methods 0.000 title abstract description 12
- 238000000034 method Methods 0.000 claims abstract description 60
- 238000012545 processing Methods 0.000 claims description 72
- 101100534223 Caenorhabditis elegans src-1 gene Proteins 0.000 claims description 17
- 238000004891 communication Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 17
- 238000012546 transfer Methods 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 abstract description 24
- 238000010586 diagram Methods 0.000 description 26
- 238000007667 floating Methods 0.000 description 20
- 230000009467 reduction Effects 0.000 description 11
- 125000004122 cyclic group Chemical group 0.000 description 9
- 238000013461 design Methods 0.000 description 9
- 238000009825 accumulation Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 102100026693 FAS-associated death domain protein Human genes 0.000 description 7
- 101000911074 Homo sapiens FAS-associated death domain protein Proteins 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 230000014509 gene expression Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 230000001133 acceleration Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 230000011664 signaling Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000005012 migration Effects 0.000 description 3
- 238000013508 migration Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 238000009792 diffusion process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 101150071111 FADD gene Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000004148 unit process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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)
- Advance Control (AREA)
Abstract
本申请公开了一种多线程数据处理方法及装置,用以解决跨线程计算复杂开销大的问题。该方法包括:获取第一操作指令,第一操作指令包括如下参数:第一操作码,第一操码用于指示N个线程之间的数据搬移方式,N为大于或者等于2的整数;第一源操作数,第一源操作数用于指示N个线程的第一源数据;第二源操作数,第二源操作数用于确定数据搬移方式对应的线程偏移量;根据第一操作指令对N个线程的第一源数据进行搬移,得到N个线程中每个线程上搬移后的第一数据。
Description
本申请涉及并行计算技术领域,尤其涉及一种多线程数据处理方法及装置。
随着应用程序对数据处理能力需求的增加,在计算机***中引入并行计算处理器,例如单指令多线程(single instruction multiple data,SIMD)处理器。越来越多的并行计算程序需要跨线程计算,涉及线程间数据的交换。
传统并行处理器的解决方法分为软件解决和硬件解决。其中,软件解决方法是使用共享片上存储,将数据存储到共享片上存储,然后修改线程地址再将数据抓取回核内寄存器以实现线程间数据的交换。软件解决方法涉及到频繁的访存操作,导致执行效率较低,且功耗较高。硬件解决方法一般是通过复杂的交叉网络(cross bar),如交叉网络每个输出线程的数据可以来自于任意一个输入线程,从而达到线程数据交换的能力。但是硬件解决方法所需的硬件代价较高。
发明内容
本申请提供一种多线程数据处理方法及装置,能够提升执行性能,以较低的硬件代价实现并行计算中所涉及的跨线程操作。
第一方面,本申请实施例提供一种多线程数据处理方法,该方法包括:获取第一操作指令。所述第一操作指令包括如下参数:第一操作码,所述第一操码用于指示N个线程之间的数据搬移方式,N为大于或者等于2的整数;第一源操作数,所述第一源操作数用于指示所述N个线程的第一源数据;第二源操作数,所述第二源操作数用于确定所述数据搬移方式对应的线程偏移量。根据所述第一操作指令对所述N个线程的第一源数据进行搬移,得到所述N个线程中每个线程上搬移后的第一数据。
本申请实施例中,通过单指令实现并行计算处理器的高效跨线程操作,相较于交叉网络cross bar更为简单,也无需频繁访存,能够以较低硬件或者信令开销实现高性能并行计算处理器中跨线程操作应用的加速处理。
在一种可选的实现方式中,所述数据搬移方式为第一搬移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:将编号为I
1的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1),I
1为(i+SRC1)对N取余的值;其中,SRC1表示所述第二源操作数,SRC1为正整数。通过这样的设计,以低硬件代价实现高效跨线程操作即多线程数据之间的循环搬移操作,能够有效加速并行计算的归约算法。
在一种可选的实现方式中,所述数据搬移方式为第二搬移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:将编号为I
2的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
2为i与SRC1的异或值,SRC1表示所述第二源操作数,SRC1为正整数。通过这样的设计,以低硬件代价实现高效跨线程操作即多线程数据之间的交叉搬移操作,能够有效加速图形处理中的差 分计算。
在一种可选的实现方式中,所述数据搬移方式为第三偏移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:将编号为I
3的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
3的取值为
SRC1表示所述第二源操作数,SRC1为正整数,n为能够整除N的正整数。通过这样的设计,以低硬件代价实现高效跨线程操作即多线程数据之间的一对多搬移操作,能够有效加速图形处理中的差分计算。
在一种可选的实现方式中,所述第一操作指令还包括第二操作码,所述第二操作码用于指示运算类型;所述方法还包括:
针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行所述运算类型对应的运算操作。
在一种可选的实现方式中,所述N个线程中的每个线程关联有线程标志位,所述线程标志位用于指示线程的第一源数据是否参与运算操作。通过这样的设计,可以去掉无需计算的数据,减少计算开销。
在一种可选的实现方式中,所述第一线程上搬移后的第一数据来自于所述N个线程中的第二线程;所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。
在一种可选的实现方式中,所述第一操作指令还包括目的操作数,所述目的操作数用于指示所述第一线程对应运算结果的存储位置。
在一种可选的实现方式中,所述N个线程的第一源数据来自并行计算处理器的N个连续的线程,所述并行计算处理器包含2N个线程,所述方法还包括:获取第二操作指令,所述第二操作指令包括如下参数:所述第一操作码;所述第二源操作数;第三源操作数,所述第三源操作数指示所述N个线程的第二源数据,所述N个线程的第二源数据来自所述并行计算处理器中的剩余N个连续的线程;根据所述第二操作指令对所述N个线程的第二源数据进行搬移,得到所述N个线程中每个线程上搬移后的第二数据。
在一种可选的实现方式中,所述方法还包括:将第三线程上搬移后的第一数据和所述第三线程上搬移后的第二数据进行交换;其中,所述三线程为所述N个线程中编号为r的线程;若SRC1小于N,r大于或者等于(N-SRC1),且r小于N;若SRC1大于或者等于N,r大于或者等于0,且r小于(N-SRC1%N)。通过这样的设计,以更低硬件代价实现更高并行计算处理器如SMID宽度的高效跨线程操作,能够有效加速并行计算的归约算法。
第二方面,本申请实施例提供一种多线程数据处理装置,该装置包括:指令获取模块,用于获取第一操作指令,所述第一操作指令包括如下参数:第一操作码,所述第一操码用于指示N个线程之间的数据搬移方式,N为大于或者等于2的整数;第一源操作数,所述第一源操作数用于指示所述N个线程的第一源数据;第二源操作数,所述第二源操作数用于确定所述数据搬移方式对应的线程偏移量;处理模块,用于根据所述第一操作指令对所述N个线程的第一源数据进行搬移,得到所述N个线程中每个线程上搬移后的第一数据。
本申请实施例中,通过单指令实现并行计算处理器的高效跨线程操作,相较于交叉网络cross bar更为简单,也无需频繁访存,能够以较低硬件或者信令开销实现高性能并行计算处理器中跨线程操作应用的加速处理。
在一种可选的实现方式中,所述数据搬移方式为第一搬移方式,所述处理模块,具体 用于:将编号为I
1的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1),I
1为(i+SRC1)对N取余的值;其中,SRC1表示所述第二源操作数,SRC1为正整数。
在一种可选的实现方式中,所述数据搬移方式为第二搬移方式,所述处理模块,具体用于:将编号为I
2的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
2为i与SRC1的异或值,SRC1表示所述第二源操作数,SRC1为正整数。
在一种可选的实现方式中,所述数据搬移方式为第三偏移方式,所述处理模块,具体用于:将编号为I
3的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
3的取值为
SRC1表示所述第二源操作数,SRC1为正整数,n为能够整除N的正整数。
在一种可选的实现方式中,所述第一操作指令还包括第二操作码,所述第二操作码用于指示运算类型;所述处理模块,还用于:针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行所述运算类型对应的运算操作。
在一种可选的实现方式中,所述N个线程中的每个线程关联有线程标志位,所述线程标志位用于指示线程的第一源数据是否参与运算操作。
在一种可选的实现方式中,所述第一线程上搬移后的第一数据来自于所述N个线程中的第二线程;所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。
在一种可选的实现方式中,所述第一操作指令还包括目的操作数,所述目的操作数用于指示所述第一线程对应运算结果的存储位置。
在一种可选的实现方式中,所述N个线程的第一源数据来自并行计算处理器的N个连续的线程,所述并行计算处理器包含2N个线程;所述指令获取模块,还用于获取第二操作指令,所述第二操作指令包括如下参数:所述第一操作码;所述第二源操作数;第三源操作数,所述第三源操作数指示所述N个线程的第二源数据,所述N个线程的第二源数据来自所述并行计算处理器中的剩余N个连续的线程;所述处理模块,还用于根据所述第二操作指令对所述N个线程的第二源数据进行搬移,得到所述N个线程中每个线程上搬移后的第二数据。
在一种可选的实现方式中,所述处理模块,还用于:将第三线程上搬移后的第一数据和所述第三线程上搬移后的第二数据进行交换;其中,所述三线程为所述N个线程中编号为r的线程;若SRC1小于N,r大于或者等于(N-SRC1),且r小于N;若SRC1大于或者等于N,r大于或者等于0,且r小于(N-SRC1%N)。
第三方面,本申请提供一种通信装置,包括处理器,所述处理器和存储器耦合,所述存储器用于存储计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以执行上述第一方面至第四方面中任一方面的各实现方法。该存储器可以位于该装置之内,也可以位于该装置之外。该处理器的数量为一个或多个。
第四方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可选的实现方式中所述的方法。
第五方面,本申请还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实现方式中所述的方法。
第六方面,本申请还提供一种计算机芯片,所述芯片与存储器相连,所述芯片用于读取并执行所述存储器中存储的软件程序,执行上述第一方面以及第一方面的各个可选的实现方式中所述的方法。
另外,第二方面至第六方面的有益效果可以参见如第一方面及第一方面的各个可选的实现方式所示的有益效果。
图1为一种交叉网络耦合的电路结构示意图;
图2为一种线程内部元素移位示意图;
图3为本申请实施例提供的一种SIMD并行计算处理器***架构示意图;
图4为本申请实施例提供的一种循环搬移示意图;
图5为本申请实施例提供的一种CROSSDOWN跨线程处理单元结构示意图;
图6为本申请实施例提供的线程标志位示意图之一;
图7为本申请实施例提供的一种交叉搬移示意图;
图8为本申请实施例提供的一种CROSS QUAD BUTTERFLY跨线程处理单元结构示意图;
图9为本申请实施例提供的线程标志位示意图之一;
图10为本申请实施例提供的一种一对多搬移示意图;
图11为本申请实施例提供的一种CROSS QUAD-BROADCAST跨线程处理单元结构示意图;
图12为本申请实施例提供的线程标志位示意图之一;
图13为本申请实施例提供的跨线程数据处理流程示意图之一;
图14为本申请实施例提供的一种源数据来源示意图;
图15为本申请实施例提供的另一种循环搬移示意图;
图16为本申请实施例提供的一种数据置换示意图;
图17为本申请实施例提供的跨线程数据处理流程示意图之一;
图18为本申请实施例提供的跨线程数据处理流程示意图之一;
图19为本申请实施例提供的多线程数据处理方法的流程示意图之一;
图20为本申请实施例提供的一种多线程数据处理装置的结构示意图;
图21为本申请实施例提供的一种通信装置的结构示意图。
以下先对现有并行处理线程数据的相关技术进行介绍。
相关技术一:
采用软件的方式,从核内寄存器中读取线程数据,并将线程数据存储到内存例如共享片上存储中。修改数据的线程地址,并按照修改后的线程地址将数据抓取回核内寄存器。使得同一线程地址对应从核内寄存器中所读取的原有数据,以及抓取回至核内寄存器的数 据,从而实现线程间数据的交换。这样的方式涉及到频繁的访存操作,导致执行效率较低,且功耗较高。
相关技术二:
参见图1示意一种交叉网络耦合的电路结构,以虚线将电路划分成4个象限,每个象限包含1个向量处理器(Execution Pipelines)以及2个用于执行跨线程数据搬移操作的交叉网络(cross bar)芯片。其中,4个象限分别记为第一象限、第二象限、第三象限和第四象限。第一象限包含向量处理器455、交叉网络芯片410A(或称,cross bar410A)、交叉网络芯片410B;第二象限包含向量处理器460、交叉网络芯片420A、交叉网络芯片420B;第三象限包含向量处理器465、交叉网络芯片430A、交叉网络芯片430B;第四象限包含向量处理器470、交叉网络芯片440A、交叉网络芯片440B。
cross bar410A、cross bar410B、cross bar 420A、cross bar 420B、cross bar 430A、cross bar 430B、cross bar 440A和cross bar 440B的输出通道与各种向量处理器的这种耦合可以达到用较小线程数的cross bar的组合来达到线程数较大的跨线程操作。其中,cross bar与向量处理器的耦合关系如下表1所示。
表1
向量处理器 | 可使用的cross bar |
455 | 410A,420A,430B,440A |
460 | 410B,420B,430A,440B |
465 | 410B,420B,430A,440B |
470 | 410A,420A,430B,440A |
前述每个cross bar均具有8个输入通道和8个输出通道,即8×8的交叉网络。4个cross bar的组合可以实现16个输入通道、16个输出通道。一条跨线程操作指令可以控制16个通道的置换。对于32线程的跨线程操作,可以使用背对背的两条跨线程操作指令,即时间上连续的两条跨线程操作指令进行32×32置换。其中,记两条跨线程操作指令为第一置换指令和第二置换指令,第一置换指令控制组合交叉网络输入16个线程数据进行置换操作后输出,并写回矢量寄存器文件,第二置换指令控组合交叉网络输入16个线程数据进行置换操作后输出。将读取第一置换指令的输出,将第二置换指令的输出与第一置换指令的输出合并,以生成32×32置换的最终结果。
以上技术二中,虽然采用cross bar共享的设计降低cross bar的数量,但仍然存在较大的硬件代价。且每个cross bar由两个向量处理器共享,同一时间只能被其中一个向量处理器所使用。因此当一个向量处理器在使用的时候,另一个向量处理如果也需要使用同一cross bar,将会造成处理器堵塞。对于32线程的跨线程操作,需要使用两次背靠背的跨线程指令配合,第一次指令需要写入寄存器,再读出来,会消耗额外的功耗。
相关技术三:
设定向量归约指令(VADDREDUCEPS)对于多线程中每个线程内的数据元素进行移位操作,来达到同一线程内部的归约计算。如图2示意,310是一个包含4个线程,每个线程中包含4个元素的向量寄存器,向量归约指令执行之后,将每个线程中的数据向右移位1个元素单元的位宽,每个线程中最右边的元素不移位,与移位下来的元素进行相加、相减或相乘,每个线程中最左边的元素补0,移位操作不会跨过线程边界。如图2示意,按照前述移位操作后,310变更为320,具体的如下:
{A15,A14,A13,A12}->{0,A15,A14,A13+A12}
{A11,A10,A9,A8}->{0,A11,A10,A9+A8}
{A7,A6,A5,A4}->{0,A7,A6,A5+A4}
{A3,A2,A1,A0}->{0,A3,A2,A1+A0}
以上技术三中,使用向量归约指令只能每个线程内的数据进行移位操作,不涉及到真正的跨线程操作,虽然能实现归约计算,但是效率较低。而且只适用于线程数较少的处理器中,对于SIMD处理器而言,由于SIMD处理器的线程数较多,线程内的寄存器位宽较小,该技术无法跨线程操作,适用性差。此外,该技术只能做部分归约计算,无法适用于图形学中的差分计算。
有基于此,本申请实施例提供一种多线程数据处理方法及装置,能够提升执行性能,且以较低的硬件代价实现并行计算中所涉及的跨线程操作,有效加速并行计算的数据处理。例如,本申请实施例提供的多线程数据处理方法可以适用于并行计算中的归约算法,图形处理中的差分计算等。
本申请实施例以下中涉及的多个,是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。另外,应当理解,尽管在本发明实施例中可能采用术语第一、第二等来描述各数据、但这些数据不应限于这些术语。这些术语仅用来将各数据彼此区分开。“至少一个”是指一个或多个。至少两个是指两个或者多个。“至少一个”、“任意一个”或其它类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如a,b,c可以是单个,也可以是多个。
本申请实施例的以下描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
下面结合附图对本申请实施例进行进一步介绍。
参见图3示意一种SIMD并行计算处理器***架构示意图,本申请实施例提供的多线程数据处理方法可以应用于该SMID并行计算处理器***。SIMD并行计算处理器***可以部署在例如个人计算机,笔记本电脑,智能手机,智能机顶盒,车内智能***,智能可穿戴设备等等的设备中。SIMD并行计算处理器***主要用于处理数据量较大的应用,输入编译后的二进制指令码,以及相应的待处理数据,最终输出程序处理后的数据到外部存储中。典型的如图形处理器(graphics processing unit,GPU),输入大量的三维模型顶点数据,以及经过编译器编译的渲染程序指令码,最终输出渲染后的数据到显存。
该SIMD并行计算处理器***主要包含一个或多个处理器核,图3中示意出了一个SIMD处理器核。每个处理器核中包含多个算术逻辑单元(arithmetic logic unit,ALU),通用寄存器(GPR)单元,以及指令处理相关单元如指令调度器,指令解码器,源操作数 收集单元中的一个或多个。主要模块的处理功能如下:
指令调度器,用于从存储器中读取编译器编译的指令编码,根据算术逻辑单元(ALU)的空闲程度以及资源使用程度进行指令编码的分发。其中,指令编码为二进制格式的编码,该指令编码;可选的,指令编码也可以称为操作指令。指令编码可以包含如下参数中的一种或多种:用于指示该指令编码的行为的一个或多个操作码;源操作数,用于指示操作码所需的源数据,如表示源数据的来源可以是寄存器地址编码或者立即数编码;目的操作数,用于指示经过指令操作码执行之后的结果的存储位置,可以是寄存器地址编码。本申请实施例将在后续内容对指令编码进行详细说明。
通用寄存器(GPR)单元,用于存储指令计算所涉及操作数对应的数据,如源操作数对应的数据和目的操作数对应的数据。可选的,通用寄存器单元(GPR)使用静态随机访问存储(SRAM)。初始的数据可以来自外部存储,对应并行计算处理器的多线程,初始的数据可以是SIDM处理器核的多线程的数据。
指令解码器,用于接收并解析指令编码,根据指令编码指示通用寄存器单元(GPR)准备源数据的读取。
源操作数收集器,用于接收通用寄存器返回的多个源数据,并基于通用寄存器返回的多个源数据,执行跨线程数据搬移操作后输出数据至算数逻辑单元。具体的,源操作数收集器中部署有设定数量的线程,源操作数收集器可以将通用寄存器返回的多个源数据作为前述设定数量的线程的源数据,一个线程对应一个源数据,针对该设定数量的线程之间执行数据搬移操作。在本申请实施例中,源操作数收集器还可以将多个源数据输出至算数逻辑单元;或者,也可以由算术逻辑单元直接接收通用寄存器返回的多个源数据。
算术逻辑单元(ALU),包含多级流水线,可以完成多种运算类型的指令计算,例如浮点加法FADD,浮点乘法FMUL,浮点比较FMIN/FMAX,有符号整型加法IADDS,无符号整型加法IADDU,有符号整型减法ISUBS,无符号整型减法ISUBU,有符号整型乘法IMULS,无符号整型乘法IMULU,有符号比较IMINS,无符号比较IMINU,逻辑异或操作XOR,逻辑与操作AND,逻辑或操作OR等浮点,整型和逻辑运算。给算术逻辑单元ALU输入需要运算的数据(也称为运算数)和指示运算类型的指令码作,即可完成相关运算类型的指令计算。在SIMD并行计算处理器***中,每个SIMD处理器核可以包含多个ALU,以达到高计算吞吐。其中,可以为每个ALU单元设定独立的1比特的标志位,以该标志位的取值表示ALU单元是否参与指令计算。例如,若标志位为1则表示该ALU参与指令计算,若标志位为0则表示该ALU不参与指令计算,无需时钟翻转,能够节省功耗。
本申请实施例提供的上述***不需要使用复杂的交叉网络也不需要访问存储来获取数据,执行单个指令编码,一次从通用寄存器读取数据,完成跨线程数据搬移及运算,能够提高跨线程操作的执行性能。
进一步,参见下表2示意一种指令编码的格式,该指令编码具体可以包括如下参数。
表2
第一操作码 | 第二操作码 | 目的操作数 | 源操作数1 | 源操作数2 |
第一操作码用于指示源操作数收集器中部署的设定数目线程之间的数据搬移方式,数据搬移方式包括一种或多种,可以根据实际需求定义。运算类型包括浮点加法FADD,浮点乘法FMUL,浮点比较FMIN/FMAX,有符号整型加法IADDS,无符号整型加法IADDU, 有符号整型减法ISUBS,无符号整型减法ISUBU,有符号整型乘法IMULS,无符号整型乘法IMULU,有符号比较IMINS,无符号比较IMINU,逻辑异或操作XOR,逻辑与操作AND,逻辑或操作OR等浮点,整型和逻辑运算。其中,第一操作码也可以称为主操作码,第二操作码也可以称为副操作码。
可选的,数据搬移方式可以包括如下类型:循环搬移、交叉搬移、一对多搬移。第二操作码用于指示运算类型。循环搬移可以理解为针对每个线程的数据按照相同的线程偏移量以及相同的线程编号排序方向(如高线程往低线程的方向)进行搬移;交叉搬移可以理解为两个线程之间的数据相互交换;一对多搬移,也可称为扩散搬移,可以理解为将一个线程的数据搬移到其它或者包括该线程在内的多个线程。可选的,可采用第一操作码的不同取值表示不同的数据搬移方式,如第一操作码可以为CROSS-DOWN,以CROSS-DOWN指示循环搬移,或者第一操作码可以为CROSS-QUAD-BUTTERFLY,以CROSS-QUAD-BUTTERFLY指示交叉搬移;或者,第一操作码可以为CROSS-QUAD-BROADCAST,以CROSS-QUAD-BROADCAST指示一对多搬移。
在定义时,前述循环搬移、交叉搬移、一对多搬移也可以采用其它的名称所代替,只要其能够被识别令源操作数收集器根据第一操作码可确定执行哪种搬移操作即可,本申请实施例对此并不进行限制。示例性的,可以采用第一数据搬移方式、第二数据搬移方式以及第三数据搬移方式来区分上述数据搬移方式的类型,如第一数据搬移方式指示循环搬移,第二数据搬移方式指示交叉搬移,第三数据搬移方式指示一对多搬移。
源操作数1,用于指示设定数目的线程的源数据;其中,设定数目的线程的源数据可以来自并行计算处理器如SIMD处理器的多线程,前述设定数目中不同线程的源数据来自于SIMD处理器中的不同线程。关于前述源操作数收集器中部署线程的设定数目可以与并行计算处理器如SIMD处理器的线程数目一致,例如均为N,N为大于等于2的整数;或者,前述源操作数收集器中部署线程的设定数目也可以少于并行计算处理器如SIMD处理器的线程数目,例如源操作数收集器中部署线程的设定数目为N,并行计算处理器如SIMD处理器的线程数目为2N。当使用通用寄存器或专用寄存器存储并行计算处理器的多线程的数据时,源操作数1可以具体是通用寄存器地址或者专用寄存器地址。源操作数2用于确定数据搬移方式对应的线程偏移量,源操作数据2可以是根据实际计算需求所设定的立即数。目的操作数用于指示运算结果的存储位置,具体可以是通用寄存器地址或者专用寄存器地址。
具体地,指令编码器可按照该指令编码的格式,从指令编码中获取第一操作数,第二操作数,目的操作数,源操作数1和源操作数2。根据第一操作数指示通用寄存器准备相应的源数据,通用寄存器返回前述设定数目的线程的源数据给源操作数收集器,源操作数收集器可根据指令编码对设定数目的线程的源数据进行搬移,得到每个线程上搬移后的数据。源操作数收集器可将设定数目中部分或者全部线程上的源数据以及搬移后的数据发送给算术逻辑单元,算术逻辑单元则可针对部分或者全部线程并行(同时)执行第二操作码所指示的运算类型得到对应的运算结果,按照目的操作数进行存储。
以下结合方案一至方案四,针对不同数据搬移方式下跨线程数据搬移及运算的方案进行详细说明。
方案一:
源操作数收集器部署与并行计算处理器相同数量的线程,如N个线程。可使用一条指令编码实现N个线程的数据之间的循环搬移。
记该指令编码为第一操作指令,第一操作指令可以包括如下参数:第一操作码、第二操作码、目的操作数、第一源操作数(即第一操作指令中的源操作数1)以及第二源操作数(即第一操作指令中的源操作数2)。示例性的,第一操作码为CROSS-DOWN,指示本方案一中N个线程之间的数据搬移方式为循环搬移或称第一数据搬移方式;第二操作码指示运算类型,例如浮点加法FADD;目的操作数为通用寄存器R0,以通用寄存器地址指示运算结果的存储位置;第一源操作数为通用寄存器R1,以通用寄存器地址指示N个线程的第一源数据,通用寄存器R1中的初始数据为并行计算处理器的N个线程的数据;第二源操作数可以为立即数,第一数据搬移方式对应的线程偏移量即为该立即数,需要说明的是这里的线程偏移量可以理解为搬移数据所涉及的线程跨越程度,例如立即数为2,某一数据搬移前所在的线程与该数据搬移后所在的线程之间相隔2个线程。可选的,该第一操作指令的表达式可以记为:CROSSDOWN.FADD R0,R1,2。
源操作数收集器根据第一操作指令对N个线程的第一源数据进行搬移,具体可以参照如下方式实施:将编号为I
1的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1),I
1为(i+SRC1)对N取余的值;其中,SRC1表示所述第二源操作数,SRC1为正整数。对于编号为i的线程上搬移后的数据可以采用SRC0[i]表示,循环搬移后的结果满足表达式:SRC0[i]=SRC0[(i+SRC1)%N],i∈[0,N-1]。
以源操作数收集器部署与并行计算处理器均有32个线程,SRC1为2示例。如图4示意的一种循环搬移示意图,将箭头尾端对应线程的第一源数据搬移到箭头首端对应线程中。编号为0的线程上搬移后的数据是编号为2的线程上的第一源数据;编号为2的线程上搬移后的数据是编号为4的线程上的第一源数据;编号为25的线程上搬移后的数据为编号为27的线程上的第一源数据;编号为30的线程上搬移后的数据为编号为0的线程上的第一源数据,等等。本申请实施例对此不再进行赘述。
在一种可选的实施方式中,源操作数据收集器中可部署CROSSDOWN跨线程处理单元,如图5示意的CROSSDOWN跨线程处理单元结构,该单元可采用多个二选一选择器MUX来实现循环搬移操作。假设N个线程的每个线程中的数据位宽为M比特,则可通过log2(N)个位宽为2*M*N比特的二选一选择器构造级联电路,进行级联数据选择。级联电路中第一个选择器的输入是基于N个线程的第一源数据生成的:将N个线程中每一线程的第一源数据复制成两倍位宽(2M)作为选择器的第一个输入,记线程的第一源数据为SRC0,图5中以2{SRC0,SRC0}表示复制成两倍位宽的数据;将复制成两倍位宽的数据向右移位M比特作为第二个输入。以SRC1转换为二进制的比特0作为选择位,从两个输入中选取一个输出,例如若SRC1的比特0位为0,则选取前述仅复制两倍位宽的数据输出;若SRC1的比特0位为1,则选取前述复制两倍位宽且向右移位的数据输出;反之亦可。此后的第i级选择器输入之一来自上一级选择器的输出,另一个输入为上一级选择器的输出向右移(i+1)*M比特的数据。以SRC1转换为二进制的比特i作为选择位,例如若SRC1的比特i位为0,则选取前述仅复制两倍位宽的数据输出;若SRC1的比特i位为1,则选取复制两倍位宽且向右移位的数据输出;反之亦可,但需要说明的是每一级选择器关于比特i位取值的定义相同。最后一级的选择器以SRC1转换为二进制的比特log(N)-1作为选择位,输出的数据送给算术逻辑单元ALU作为操作数,ALU根据前述第一操作指令的第二操作码所指示的运算类型,可以对跨 线程搬移前后的操作数进行计算,包括但不限于浮点乘,浮点加,整型乘,整型加,浮点比较,整型比较,逻辑与,逻辑或,逻辑异或等。
具体地,算术逻辑单元ALU可针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行运算类型对应的运算操作。其中,第一线程可以包括N个线程中的部分或者全部线程。
可选的,可为N个线程中每个线程配置线程标志位,线程标志位用于指示线程的第一源数据是否参与运算操作。具体地,所述线程标志位取第一值时,所述线程标志位用于指示线程的源数据参与运算操作;或者,所述线程标志位取第二值时,所述线程标志位用于指示线程的源数据不参与运算操作。其中,第一值可以为1,第二值可以为0。设置线程标志位标记无需计算的线程,通过这样的方式能够节省计算功耗。
算术逻辑单元ALU可根据线程标志位来确定线程上搬移前后的数据是否参与运算,具体地,针对N中编号为i的线程(简称线程i),可以根据线程i的线程标志位和编号为((i+src1)%N)的线程的线程标志位确定线程i上搬移前后的数据是否参与运算。也可以理解为进行数据搬移后,根据该线程i的原有线程标志位与搬移数据的来源即编号为((i+src1)%N)的线程的线程标志位,更新线程i的线程标志位。伪代码可表示为:new_lanemask[i]=lanemask[(i+src1)%N]&lanemask[i]。其中,lanemask[i]表示线程i的原有线程标志位的取值,lanemask[(i+src1)%N]编号为((i+src1)%N)的线程的标志位的取值。当lanemask[(i+src1)%N]和lanemask[i]均为1时,更新后线程i的线程标志位new_lanemask[i]为1即可表示线程上搬移前后的数据参与运算。
以第一线程上搬移后的第一数据来自于所述N个线程中的第二线程为例,第一线程上的搬移前后的数据参与运算,需要符合如下条件:所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。如图6示意的一种线程标志位示意图,以黑色填充示意出搬移之前线程1,线程28的原有线程标志位为0,跨线程数据搬移操作即循环搬移后,更新后的线程1,线程26,线程28,线程31的线程标志位均为0。线程1,线程26,线程28,线程31上搬移前后的数据不参与运算。
本方案一以单条指令实现跨线程数据循环搬移,可以应用于并行计算中的归约计算。本方案一还可用于实现多线程数据累加累乘等运算,如构造多级指令,每级指令使用前述第一操作指令,每一级指令的输出结果可作为下一级指令的输入,最终使得将多线程的数据搬移到同一线程上实现累加累乘等运算。
方案二
源操作数收集器部署与并行计算处理器相同数量的线程,如N个线程。可使用一条指令编码实现N个线程的数据之间的交叉搬移。
记该指令编码为第一操作指令,第一操作指令可以包括如下参数:第一操作码、第二操作码、目的操作数、第一源操作数(即第一操作指令中的源操作数1)以及第二源操作数(即第一操作指令中的源操作数2)。示例性的,第一操作码为CROSS QUAD BUTTERFLY,指示本方案二中N个线程之间的数据搬移方式为交叉搬移或称第二数据搬移方式;第二操作码指示运算类型,例如浮点加法FADD;目的操作数为通用寄存器R0,以通用寄存器地址指示运算结果的存储位置;第一源操作数为通用寄存器R1,以通用寄存 器地址指示N个线程的第一源数据,通用寄存器R1中的初始数据为并行计算处理器的N个线程的数据;第二源操作数可以为立即数,例如2。可选的,该第一操作指令的表达式可以记为:CROSS QUAD BUTTERFLY.FADD R0,R1,2。
源操作数收集器根据第一操作指令对N个线程的第一源数据进行搬移,具体可以参照如下方式实施:将编号为I
2的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
2为i与SRC1的异或值,SRC1表示所述第二源操作数,SRC1为正整数。对于编号为i的线程上搬移后的数据可以采用SRC0[i]表示,循环搬移后的结果满足表达式:SRC0[i]=SRC0[i^SRC1],i∈[0,N-1]。
以源操作数收集器部署与并行计算处理器均有32个线程,SRC1为2示例。如图7示意的一种交叉偏移示意图,将箭头尾端对应线程的第一源数据搬移到箭头首端对应线程中。编号为0的线程上搬移后的数据是编号为2的线程上的第一源数据;编号为2的线程上搬移后的数据是编号为0的线程上的第一源数据;编号为29的线程上搬移后的数据为编号为31的线程上的第一源数据;编号为31的线程上搬移后的数据是编号为29的线程上的第一源数据,等等。本申请实施例对此不再进行赘述。本方案二的CROSS QUAD BUTTERFLY可以使得将N个线程如32个线程以每连续4条线程分为一组成为一个QUAD,在每个QUAD内实现两个线程之间数据的互换。
在一种可选的实施方式中,源操作数据收集器中可部署CROSS QUAD BUTTERFLY跨线程处理单元,该单元采用多个四选一选择器MUX来实现循环搬移操作。假设N个线程的每个线程中的数据位宽为M比特,则可通过N个位宽为M比特的四选一选择器进行并联数据选择。如图8示意CROSS QUAD BUTTERFLY跨线程处理单元其中的第i个四选一选择器MUX,该第i个四选一选择器MUX的输入是该线程所属QUAD的四个线程的第一源数据,前述四个线程的编号分别为:i%4,(i%4)+1,(i%4)+2以及(i%4)+3。第i个选择器以SRC1与i的异或结果作为选择位,从四个输入中选择一个输出给算术逻辑单元ALU,ALU根据前述第一操作指令的第二操作码所指示的运算类型,可以对跨线程搬移前后的操作数进行计算,包括但不限于浮点乘,浮点加,整型乘,整型加,浮点比较,整型比较,逻辑与,逻辑或,逻辑异或等。
具体地,算术逻辑单元ALU可针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行运算类型对应的运算操作。其中,第一线程可以包括N个线程中的部分或者全部线程。
可选的,可为N个线程中每个线程配置线程标志位,线程标志位用于指示线程的第一源数据是否参与运算操作。具体地,所述线程标志位取第一值时,所述线程标志位用于指示线程的源数据参与运算操作;或者,所述线程标志位取第二值时,所述线程标志位用于指示线程的源数据不参与运算操作。其中,第一值可以为1,第二值可以为0。设置线程标志位标记无需计算的线程,通过这样的方式能够节省计算功耗。
算术逻辑单元ALU可根据线程标志位来确定线程上搬移前后的数据是否参与运算,具体地,针对N中编号为i的线程(简称线程i),可以根据线程i的线程标志位和编号为(i^SRC1)的线程的线程标志位确定线程i上搬移前后的数据是否参与运算。也可以理解为进行数据搬移后,根据该线程i的原有线程标志位与搬移数据的来源即编号为(i^SRC1)的线程的线程标志位,更新线程i的线程标志位。伪代码可表示为:new_lanemask[i]=lanemask[i^SRC1]&lanemask[i]。其中,lanemask[i]表示线程i的原有线程标志位的取值,lanemask[i^SRC1]编 号为(i^SRC1)的线程的标志位的取值。当lanemask[i^SRC1]和lanemask[i]均为1时,更新后线程i的线程标志位new_lanemask[i]为1即可表示线程上搬移前后的数据参与运算。
以第一线程上搬移后的第一数据来自于所述N个线程中的第二线程为例,第一线程上的搬移前后的数据参与运算,需要符合如下条件:所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。如图9示意的一种线程标志位示意图,以黑色填充示意出搬移之前线程1,线程28的原有线程标志位为0,跨线程数据搬移操作即价差交叉搬移后,更新后的线程1,线程3,线程28,线程30的线程标志位均为0。线程1,线程3,线程28,线程30上搬移前后的数据不参与运算。
本方案二以单条指令实现跨线程数据交叉搬移,且可以锁定在QUAD较小范围内线程之间的数据交换,可以应用于图像处理中的差分计算,例如位置靠近的两个像素点之间的像素比较等。
方案三
源操作数收集器部署与并行计算处理器相同数量的线程,如N个线程。可使用一条指令编码实现N个线程的数据之间的交叉搬移。
记该指令编码为第一操作指令,第一操作指令可以包括如下参数:第一操作码、第二操作码、目的操作数、第一源操作数(即第一操作指令中的源操作数1)以及第二源操作数(即第一操作指令中的源操作数2)。示例性的,第一操作码为CROSS QUAD-BROADCAST,指示本方案三中N个线程之间的数据搬移方式为一对多搬移或称扩散搬移,又或称第三数据搬移方式;第二操作码指示运算类型,例如浮点加法FADD;目的操作数为通用寄存器R0,以通用寄存器地址指示运算结果的存储位置;第一源操作数为通用寄存器R1,以通用寄存器地址指示N个线程的第一源数据,通用寄存器R1中的初始数据为并行计算处理器的N个线程的数据;第二源操作数可以为立即数,例如2。可选的,该第一操作指令的表达式可以记为:CROSS QUAD-BROADCAST.FADD R0,R1,2。
源操作数收集器根据第一操作指令对N个线程的第一源数据进行搬移,具体可以参照如下方式实施:将编号为I
3的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
3的取值为
SRC1表示所述第二源操作数,SRC1为正整数,n为能够整除N的正整数,
表示向下取整。对于编号为i的线程上搬移后的数据可以采用SRC0[i]表示,循环搬移后的结果满足表达式:
i∈[0,N-1]。可选的,n为4。
以源操作数收集器部署与并行计算处理器均有32个线程,SRC1为2,n为4示例。如图10示意的一种一对多偏移示意图,将箭头尾端对应线程的第一源数据搬移到箭头首端对应线程中。将编号为2的线程的第一源数据搬移至编号为0的线程、编号为1的线程、编号为2的线程以及编号为3的线程。编号为0的线程上搬移后的数据是编号为2的线程上的第一源数据;编号为1的线程上搬移后的数据是编号为2的线程上的第一源数据;编号为2的线程上搬移后的数据依然为编号为2的线程上的第一源数据;编号为3的线程上搬移后的数据是编号为2的线程上的第一源数据,等等。本申请实施例对此不再进行赘述。本方案三的CROSS QUAD-BROADCAST可以使得将N个线程如32个线程以每连续4条线程分为一组,成为一个QUAD,然后针对每个线程,在其所属的QUAD内选择线程编号为SRC1的线程的 第一源数据搬移到本线程。
在一种可选的实施方式中,源操作数据收集器中可部署CROSS QUAD-BROADCAST跨线程处理单元,该单元采用多个四选一选择器MUX来实现循环搬移操作。假设N个线程的每个线程中的数据位宽为M比特,则可通过N个位宽为M比特的四选一选择器进行并联数据选择。如图11示意出CROSS QUAD-BROADCAST跨线程处理单元中的第i个四选一选择器MUX,该第i个四选一选择器MUX的输入是该线程所属QUAD的四个线程的第一源数据,前述四个线程的编号分别为:i%4,(i%4)+1,(i%4)+2以及(i%4)+3。第i个选择器以SRC1作为选择位,从四个输入中选择一个输出给算术逻辑单元ALU,ALU根据前述第一操作指令的第二操作码所指示的运算类型,可以对跨线程搬移前后的操作数进行计算,包括但不限于浮点乘,浮点加,整型乘,整型加,浮点比较,整型比较,逻辑与,逻辑或,逻辑异或等。
具体地,算术逻辑单元ALU可针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行运算类型对应的运算操作。其中,第一线程可以包括N个线程中的部分或者全部线程。
可选的,可为N个线程中每个线程配置线程标志位,线程标志位用于指示线程的第一源数据是否参与运算操作。具体地,所述线程标志位取第一值时,所述线程标志位用于指示线程的源数据参与运算操作;或者,所述线程标志位取第二值时,所述线程标志位用于指示线程的源数据不参与运算操作。其中,第一值可以为1,第二值可以为0。设置线程标志位标记无需计算的线程,通过这样的方式能够节省计算功耗。
算术逻辑单元ALU可根据线程标志位来确定线程上搬移前后的数据是否参与运算,具体地,针对N中编号为i的线程(简称线程i),可以根据线程i的线程标志位和编号为((i+src1)%4)的线程的线程标志位确定线程i上搬移前后的数据是否参与运算。也可以理解为进行数据搬移后,根据该线程i的原有线程标志位与搬移数据的来源即编号为((i+src1)%4)的线程的线程标志位,更新线程i的线程标志位。伪代码可表示为:new_lanemask[i]=lanemask[(i+src1)%4]&lanemask[i]。其中,lanemask[i]表示线程i的原有线程标志位的取值,lanemask[(i+src1)%4]编号为((i+src1)%4)的线程的标志位的取值。当lanemask[(i+src1)%4]和lanemask[i]均为1时,更新后线程i的线程标志位new_lanemask[i]为1即可表示线程上搬移前后的数据参与运算。
以第一线程上搬移后的第一数据来自于所述N个线程中的第二线程为例,第一线程上的搬移前后的数据参与运算,需要符合如下条件:所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。如图12示意的一种线程标志位示意图,以黑色填充示意出搬移之前线程1,线程30的原有线程标志位为0,跨线程数据搬移操作即价差交叉搬移后,更新后的线程1,线程28-31的线程标志位均为0。线程1,线程28-31上搬移前后的数据不参与运算。
本方案三以单条指令实现跨线程数据交叉搬移,且可以锁定在QUAD较小范围内扩散某一线程的数据,可以应用于图像处理中的差分计算,例如位置上相邻的四个像素点,基于其中一个像素点做平滑处理等。
可以理解的是,本申请实施例提供的上述方案一至方案三可以独立实施,也可以结合在一起实施。例如将方案一和方案三结合在一起实施,以方案一各个线程的运算结果作为 方案三中对应线程的源数据,进行一对多搬移操作。
对应上述方案一至方案三的实施例,参见图13,本申请实施例还提一种跨线程数据处理流程,该流程可由并行计算处理器中的各个单元协同执行。主要的包括如下步骤。
(1)指令调度器输入指令。
并行计算程序或图形渲染程序经过编译器编译成二进制指令编码后配置到SIMD处理器中,指令编码作为指令调度器的输入,待处理的数据通过软件配置到存储中,并在指令开始发射前被初始化到寄存器中,作为寄存器模块的数据输入。
(2)指令解码器解析指令编码,得到操作数(如源操作数1,源操作数2,目的操作数等)以及操作码,如第一操作码、第二操作码。
(3)指令解码器解析出源操作数后向通用寄存器发射源操作数读取请求,通用寄存器返回源操作数对应的数据给收集器。
(4)源操作数收集器判断第一操作码是否为CROSS类型指令。如果不是,则执行步骤(5)将数据送给下游ALU进行计算。如果是CROSS类型指令,则在判断是否为CROSS DOWN指令、CROSS QUAD BUTTERFLY指令或CROSS QUAD BROADCAST指令,并通过相应的处理单元进行处理如执行跨线程数据搬移操作后,再执行步骤(5)将数据送给下游ALU进行计算。
(5)ALU按照第二操作码进行相应计算,结果送给下一模块处理。
方案四:
源操作数收集器部署比并行计算处理器数量少的线程,如源操作数收集器部署N个线程,而并行计算处理的线程数量为2N。可使用两条指令编码实现并行计算处理器2N个线程的数据之间的循环搬移。
两条指令编码可记为第一操作指令和第二操作指令,第一操作指令可参照方案一的定义,第一操作指令和第二操作指令中的源操作数1所指示的源数据来源不同。第一操作指令中的第一源操作数所指示N个线程的第一源数据来自并行计算处理器的N个连续的线程。为加以区分记第二操作指令中的源操作数1为第三源操作数,第二源操作数据指示(源操作数据收集器中)N个线程的第二源数据,所述N个线程的第二源数据来自所述并行计算处理器中的剩余N个连续的线程。此外,第二操作指令还可以包括和第一操作指令相同的其余参数,如第一操作码、第二操作码、目的操作数、第二源操作数。
本方案四中,源操作数收集器根据第一操作指令对N个线程的第一源数据进行搬移,以及根据第二操作指令对N个线程的第二源数据进行搬移的具体实施方式可参照方案一进行,本申请实施例对此不再进行介绍。示例性的,源操作数收集器可部署32个线程,并行计算处理器包括64个线程,SRC1为2。在指令调度器阶段第一操作指令发出的时刻提前于第二操作指令发出的时刻;记两条指令相差的发射时序间隔为m,m为1时,表示第一操作指令和第二操作指令为背靠背发送的两条指令。每个指令处理N个线程,如图14示意了一种源数据来源示意图,源操作数收集器的N个线程编号为0~31,第一操作指令所指示N个线程的第一源数据来自并行计算处理器中编号为32~63的线程,其中源操作数据收集器中的线程0的第一源数据来自并行计算处理器中的线程32,源操作数据收集器中的线程1的第一源数据来自并行计算处理器中的线程33,以此类推,源操作数据收集器中的线程31的第一源数据来自并行计算处理器中的线程63;第二操作指令所指示N个线程的第二源数据来 自并行计算处理器中编号为0~31的线程,其中源操作数据收集器中的线程0的第二源数据来自并行计算处理器中的线程0,源操作数据收集器中的线程1的第二源数据来自并行计算处理器中的线程1,以此类推,源操作数据收集器中的线程31的第二源数据来自并行计算处理器中的线程31。
进一步在图14的基础上,如图15示意,本申请实施例提供另一种循环搬移示意图。源操作数据收集器先获取到第一操作指令,源操作数据收集器按照第一操作指令执行跨线程数据的循环搬移后,源操作数据收集器中:线程0上搬移后的数据为线程2上的第一源数据;线程1上搬移后的数据为线程3上的第一源数据;……线程30上搬移后的数据为线程0上的第一源数据;线程31上搬移后的数据为线程1上的第一源数据。源操作数据收集器将第一操作指令对应的搬移结果,记为N个线程的第一数据输入给算术逻辑单元。然后源操作数据收集器获取到第二操作指令,源操作数据收集器按照第二操作指令执行跨线程数据的循环搬移后,源操作数据收集器中:线程0上搬移后的数据为线程2上的第二源数据;线程1上搬移后的数据为线程3上的第二源数据;……线程30上搬移后的数据为线程0上的第二源数据;线程31上搬移后的数据为线程1上的第二源数据。源操作数据收集器将第二操作指令对应的搬移结果,记为N个线程的第二数据输入给算术逻辑单元。
在算术逻辑单元ALU中的处理阶段,第一操作指令相较于第二条操作指令提前到达,假设第二操作指令到达ALU的阶段I,第一操作指令到达ALU的阶段I+m,I为ALU中的任意阶段。则算术逻辑单元ALU可针对第三线程上搬移后的第一数据和第三线程上搬移后的第二数据进行交换;其中,第三线程为源操作数据收集器中N个线程中编号为r的线程。关于r的取值可通过如下方式确定:若SRC1小于N,r大于或者等于(N-SRC1),且r小于N;若SRC1大于或者等于N,r大于或者等于0,且r小于(N-SRC1%N)。
以SRC1为2为例,参见图16示意一种数据置换示意图,在图15的基础上示意出了在第一操作指令到达ALU的阶段0时,将线程30上搬移后的第一数据与线程31上搬移后的第二数据进行置换;以及将线程31上搬移后的第一数据与线程31上搬移后的第二数据进行置换,至此实现并行计算处理器64线程之间数据的循环搬移操作。
进一步地,ALU再按照第一操作指令/第二操作指令中的第二操作码,基于并行计算处理器64线程之间数据的循环搬移结果实施相应的运算操作。具体的运算操作可按照实际需求进行,本申请实施例对此不进行限定。
当然需要说明的是,在本方案四中也可以针对源操作数收集器所部署的N个线程中每个线程配置线程标志位,线程标志位用于指示线程的第一源数据是否参与运算操作。具体的实施方式可参照方案一中的方式进行,本申请实施例对此不再进行赘述。作为示例,在图16中,以黑色填充示意出线程编号为30及31上的搬移前后的数据不参与运算操作。
本方案四中,以源操作数收集器中较少的线程结合ALU的数据交换处理,实现更高SIDM宽度的高效跨线程数据循环搬移,可以应用于并行计算中的归约计算。本方案四还可用于实现多线程数据累加累乘等运算,如构造多级指令,每级指令使用前述第一操作指令,每一级指令的输出结果可作为下一级指令的输入,最终使得将多线程的数据搬移到同一线程上实现累加累乘等运算。
对应上述方案四,参见图17,本申请实施例提供一种跨线程数据处理流程,该流程可由并行计算处理器中的各个单元协同执行。主要的包括如下步骤。
(1)指令调度器输入指令。
并行计算程序或图形渲染程序经过编译器编译成二进制指令编码后配置到SIMD处理器中,指令编码作为指令调度器的输入,待处理的数据通过软件配置到存储中,并在指令开始发射前被初始化到寄存器中,作为寄存器模块的数据输入。
(2)指令解码器解析指令编码,得到操作数(如源操作数1,源操作数2,目的操作数等)以及操作码,如第一操作码、第二操作码。
(3)指令解码器解析出源操作数后向通用寄存器发射源操作数读取请求,通用寄存器返回源操作数对应的数据给收集器。
(4)源操作数收集器判断第一操作码是否为CROSS类型指令。如果不是,则执行步骤(10)将数据送给下一模块。如果是则在确定为CROSS DOWN指令时,执行步骤(5)。
(5)源操作数收集器进行CROSS DOWN数据处理如循环搬移操作。
(6)在ALU阶段I判断是否是CROSS DOWN的第二条指令(即前述第二操作指令)。如果不是,则执行步骤(10)将数据送给下一模块;如果是则指令步骤(7)。
(7)ALU判断SRC1数值是否小于N;如果是,执行步骤(8);如果否,则执行步骤(9)。
(8)将ALU阶段I与ALU阶段I+m中,线程编号大于或等于N-SRC1至线程编号小于N的线程之间的数据进行交换。
(9)将ALU阶段I与ALU阶段I+m中,线程编号大于或等于0至线程编号小于(N-SRC1%N)的线程之间的数据进行交换。
(10)下一模块处理。
进一步,为区分实施方案一至方案四中哪一方案,在输入指令后可先进行判断SIMD的线程数量是否为源操作数收集器中线程数目的2倍。具体地,参见图18示意一种跨线程数据处理流程,主要包括如下步骤。
(1)指令调度器输入指令。
并行计算程序或图形渲染程序经过编译器编译成二进制指令编码后配置到SIMD处理器中,指令编码作为指令调度器的输入,待处理的数据通过软件配置到存储中,并在指令开始发射前被初始化到寄存器中,作为寄存器模块的数据输入。
(2)指令调度器判断是否为SIMD 2N模式,即SIMD的线程数目是否为源操作数收集器中线程数目的2倍。如果是执行(3),指令只发射一次;如果否执行(4),执行发射两次。
(3)指令解码器解析指令编码,得到操作数(如源操作数1,源操作数2,目的操作数等)以及操作码,如第一操作码、第二操作码。
(4)指令解码器解析出源操作数后向通用寄存器发射源操作数读取请求,通用寄存器返回源操作数对应的数据给收集器。
(5)源操作数收集器按照前述方案一至方案四,执行第一操作指令所指示N个线程之间第一源数据的搬移操作。图18中以“进行SIMD N的方案一、方案二、方案三、方案四”示意。
(6)由ALU判断是否是为SIMD 2N的CROSS DOWN指令,或者判断是否收到CROSS DOWN的第二条指令(即前述第二操作指令)。如果否,则执行步骤(8)将数据送给下一模块;如果是则指令步骤(7)。
(7)根据方案四进行ALU阶段的数据交换。
如将ALU阶段I与ALU阶段I+m中,线程编号大于或等于N-SRC1至线程编号小于N的线程之间的数据进行交换。或者,将ALU阶段I与ALU阶段I+m中,线程编号大于或等于0至线程编号小于(N-SRC1%N)的线程之间的数据进行交换。
(8)下一模块处理。
基于相同的构思,本申请实施例提供一种多线程数据处理方法,如图19示意。该方法主要包括如下流程。
S1901,获取第一操作指令。所述第一操作指令包括如下参数:第一操作码,所述第一操码用于指示N个线程之间的数据搬移方式,N为大于或者等于2的整数;第一源操作数,所述第一源操作数用于指示所述N个线程的第一源数据;第二源操作数,所述第二源操作数用于确定所述数据搬移方式对应的线程偏移量;
S1902,根据所述第一操作指令对所述N个线程的第一源数据进行搬移,得到所述N个线程中每个线程上搬移后的第一数据。
本申请实施例中,通过单指令实现并行计算处理器的高效跨线程操作,相较于交叉网络cross bar更为简单,也无需频繁访存,能够以较低硬件或者信令开销实现高性能并行计算处理器中跨线程操作应用的加速处理。
在一种可选的实施方式中,所述数据搬移方式为第一搬移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:将编号为I
1的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1),I
1为(i+SRC1)对N取余的值;其中,SRC1表示所述第二源操作数,SRC1为正整数。
在一种可选的实施方式中,所述数据搬移方式为第二搬移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:
将编号为I
2的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
2为i与SRC1的异或值,SRC1表示所述第二源操作数,SRC1为正整数。
在一种可选的实施方式中,所述数据搬移方式为第三偏移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:
将编号为I
3的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
3的取值为
SRC1表示所述第二源操作数,SRC1为正整数,n为能够整除N的正整数。
在一种可选的实施方式中,所述第一操作指令还包括第二操作码,所述第二操作码用于指示运算类型;所述方法还包括:
针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行所述运算类型对应的运算操作。
在一种可选的实施方式中,所述N个线程中的每个线程关联有线程标志位,所述线程标志位用于指示线程的第一源数据是否参与运算操作。
在一种可选的实施方式中,所述第一线程上搬移后的第一数据来自于所述N个线程中的第二线程;所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。
在一种可选的实施方式中,所述第一操作指令还包括目的操作数,所述目的操作数用 于指示所述第一线程对应运算结果的存储位置。
在一种可选的实施方式中,所述N个线程的第一源数据来自并行计算处理器的N个连续的线程,所述并行计算处理器包含2N个线程,所述方法还包括:
获取第二操作指令,所述第二操作指令包括如下参数:所述第一操作码;所述第二源操作数;第三源操作数,所述第三源操作数指示所述N个线程的第二源数据,所述N个线程的第二源数据来自所述并行计算处理器中的剩余N个连续的线程;
根据所述第二操作指令对所述N个线程的第二源数据进行搬移,得到所述N个线程中每个线程上搬移后的第二数据。
在一种可选的实施方式中,所述方法还包括:
将第三线程上搬移后的第一数据和所述第三线程上搬移后的第二数据进行交换;其中,所述三线程为所述N个线程中编号为r的线程;若SRC1小于N,r大于或者等于(N-SRC1),且r小于N;若SRC1大于或者等于N,r大于或者等于0,且r小于(N-SRC1%N)。
基于相同的构思,如图20示意,本申请实施例还提供一种多线程数据处理装置2000,该多线程数据处理装置包括:
指令获取模块2001,用于获取第一操作指令,所述第一操作指令包括如下参数:第一操作码,所述第一操码用于指示N个线程之间的数据搬移方式,N为大于或者等于2的整数;第一源操作数,所述第一源操作数用于指示所述N个线程的第一源数据;第二源操作数,所述第二源操作数用于确定所述数据搬移方式对应的线程偏移量。
处理模块2002,用于根据所述第一操作指令对所述N个线程的第一源数据进行搬移,得到所述N个线程中每个线程上搬移后的第一数据。
本申请实施例中,通过单指令实现并行计算处理器的高效跨线程操作,相较于交叉网络cross bar更为简单,也无需频繁访存,能够以较低硬件或者信令开销实现高性能并行计算处理器中跨线程操作应用的加速处理。
在一种可选的实施方式中,所述数据搬移方式为第一搬移方式,所述处理模块2002,具体用于:将编号为I
1的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1),I
1为(i+SRC1)对N取余的值;其中,SRC1表示所述第二源操作数,SRC1为正整数。
在一种可选的实施方式中,所述数据搬移方式为第二搬移方式,所述处理模块2002,具体用于:将编号为I
2的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
2为i与SRC1的异或值,SRC1表示所述第二源操作数,SRC1为正整数。
在一种可选的实施方式中,所述数据搬移方式为第三偏移方式,所述处理模块2002,具体用于:将编号为I
3的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I
3的取值为
SRC1表示所述第二源操作数,SRC1为正整数,n为能够整除N的正整数。
在一种可选的实施方式中,所述第一操作指令还包括第二操作码,所述第二操作码用于指示运算类型;所述处理模块2002,还用于:针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行所述运算类型对应的运算操作。
在一种可选的实施方式中,所述N个线程中的每个线程关联有线程标志位,所述线程 标志位用于指示线程的第一源数据是否参与运算操作。
在一种可选的实施方式中,所述第一线程上搬移后的第一数据来自于所述N个线程中的第二线程;所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。
在一种可选的实施方式中,所述第一操作指令还包括目的操作数,所述目的操作数用于指示所述第一线程对应运算结果的存储位置。
在一种可选的实施方式中,所述N个线程的第一源数据来自并行计算处理器的N个连续的线程,所述并行计算处理器包含2N个线程;所述指令获取模块2001,还用于获取第二操作指令,所述第二操作指令包括如下参数:所述第一操作码;所述第二源操作数;第三源操作数,所述第三源操作数指示所述N个线程的第二源数据,所述N个线程的第二源数据来自所述并行计算处理器中的剩余N个连续的线程;所述处理模块2002,还用于根据所述第二操作指令对所述N个线程的第二源数据进行搬移,得到所述N个线程中每个线程上搬移后的第二数据。
在一种可选的实施方式中,所述处理模块2002,还用于:将第三线程上搬移后的第一数据和所述第三线程上搬移后的第二数据进行交换;其中,所述三线程为所述N个线程中编号为r的线程;若SRC1小于N,r大于或者等于(N-SRC1),且r小于N;若SRC1大于或者等于N,r大于或者等于0,且r小于(N-SRC1%N)。
基于相同的技术构思,本申请还提供了一种通信装置2100。该通信装置2100可以是芯片或者芯片***。可选的,在本申请实施例中芯片***可以由芯片构成,也可以包含芯片和其他分立器件。
该通信装置2100可以包括至少一个处理器2110,该处理器2110与存储器耦合,可选的,存储器可以位于该装置之内,存储器可以和处理器集成在一起,存储器也可以位于该装置之外。例如,通信装置2100还可以包括至少一个存储器2120。存储器2120保存实施上述任一实施例中必要计算机程序、配置信息、计算机程序或指令和/或数据;处理器2110可能执行存储器2120中存储的计算机程序,完成上述任一实施例中的方法。
本申请实施例中的耦合是装置、单元或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、单元或模块之间的信息交互。处理器2110可能和存储器2120协同操作。本申请实施例中不限定上述处理器2110以及存储器2120之间的具体连接介质。
通信装置2100中还可以包括通信接口2130,通信装置2100可以通过通信接口2130和其它设备进行信息交互。示例性的,所述通信接口2130可以是收发器、电路、总线、模块或其它类型的通信接口。当该通信装置2100为芯片类的装置或者电路时,该装置2100中的通信接口2130也可以是输入输出电路,可以输入信息(或称,接收信息)和输出信息(或称,发送信息),处理器为集成的处理器或者微处理器或者集成电路或则逻辑电路,处理器可以根据输入信息确定输出信息。
可选的,参见图21,所述通信接口2130、所述处理模块2110以及所述存储器2120之间通过总线2140相互连接。所述总线2140可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便 于表示,图21中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在本申请实施例中,处理器可以是通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
在本申请实施例中,存储器可以是非易失性存储器,比如硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD)等,还可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM)。存储器是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
基于以上实施例,本申请实施例还提供了一种计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行上述多线程数据处理方法。
基于以上实施例,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,所述计算机程序被计算机执行时,使得计算机执行上述方法实施例中所提供的多线程数据处理方法。其中,存储介质可以是计算机能够存取的任何可用介质。以此为例但不限于:计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质。
基于以上实施例,本申请实施例还提供了一种计算机芯片,所述芯片与存储器相连,所述芯片用于读取并执行存储器中存储的软件程序,实现上述方法实施例中所提供的多线程数据处理方法。
基于以上实施例,本申请实施例提供了一种芯片***,该芯片***包括处理器,用于支持计算机装置实现上述方法实施例中多线程数据处理方法的功能。在一种可能的设计中,所述芯片***还包括存储器,所述存储器用于保存该计算机装置必要的程序和数据。该芯片***,可以由芯片构成,也可以包含芯片和其他分立器件。
本申请实施例提供的技术方案可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、终端设备或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机可以存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digital video disc,DVD))、或者半导体介质等。
在本申请实施例中,在无逻辑矛盾的前提下,各实施例之间可以相互引用,例如方法实施例之间的方法和/或术语可以相互引用,例如装置实施例之间的功能和/或术语可以相互引用,例如装置实施例和方法实施例之间的功能和/或术语可以相互引用。
本申请是参照根据本申请的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (23)
- 一种多线程数据处理方法,其特征在于,包括:获取第一操作指令,所述第一操作指令包括如下参数:第一操作码,所述第一操码用于指示N个线程之间的数据搬移方式,N为大于或者等于2的整数;第一源操作数,所述第一源操作数用于指示所述N个线程的第一源数据;第二源操作数,所述第二源操作数用于确定所述数据搬移方式对应的线程偏移量;根据所述第一操作指令对所述N个线程的第一源数据进行搬移,得到所述N个线程中每个线程上搬移后的第一数据。
- 如权利要求1所述的方法,其特征在于,所述数据搬移方式为第一搬移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:将编号为I 1的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1),I 1为(i+SRC1)对N取余的值;其中,SRC1表示所述第二源操作数,SRC1为正整数。
- 如权利要求1所述的方法,其特征在于,所述数据搬移方式为第二搬移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:将编号为I 2的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I 2为i与SRC1的异或值,SRC1表示所述第二源操作数,SRC1为正整数。
- 如权利要求1所述的方法,其特征在于,所述数据搬移方式为第三偏移方式,所述根据所述第一操作指令对所述N个线程的第一源数据进行搬移,包括:将编号为I 3的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I 3的取值为 SRC1表示所述第二源操作数,SRC1为正整数,n为能够整除N的正整数。
- 如权利要求1-4任一项所述的方法,其特征在于,所述第一操作指令还包括第二操作码,所述第二操作码用于指示运算类型;所述方法还包括:针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行所述运算类型对应的运算操作。
- 如权利要求5所述的方法,其特征在于,所述N个线程中的每个线程关联有线程标志位,所述线程标志位用于指示线程的第一源数据是否参与运算操作。
- 如权利要求6所述的方法,其特征在于,所述第一线程上搬移后的第一数据来自于所述N个线程中的第二线程;所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。
- 如权利要求5-7任一项所述的方法,其特征在于,所述第一操作指令还包括目的操作数,所述目的操作数用于指示所述第一线程对应运算结果的存储位置。
- 如权利要求2所述的方法,其特征在于,所述N个线程的第一源数据来自并行计算处理器的N个连续的线程,所述并行计算处理器包含2N个线程,所述方法还包括:获取第二操作指令,所述第二操作指令包括如下参数:所述第一操作码;所述第二源操作数;第三源操作数,所述第三源操作数指示所述N个线程的第二源数据,所述N个线程 的第二源数据来自所述并行计算处理器中的剩余N个连续的线程;根据所述第二操作指令对所述N个线程的第二源数据进行搬移,得到所述N个线程中每个线程上搬移后的第二数据。
- 如权利要求8所述的方法,其特征在于,所述方法还包括:将第三线程上搬移后的第一数据和所述第三线程上搬移后的第二数据进行交换;其中,所述三线程为所述N个线程中编号为r的线程;若SRC1小于N,r大于或者等于(N-SRC1),且r小于N;若SRC1大于或者等于N,r大于或者等于0,且r小于(N-SRC1%N)。
- 一种多线程数据处理装置,其特征在于,包括:指令获取模块,用于获取第一操作指令,所述第一操作指令包括如下参数:第一操作码,所述第一操码用于指示N个线程之间的数据搬移方式,N为大于或者等于2的整数;第一源操作数,所述第一源操作数用于指示所述N个线程的第一源数据;第二源操作数,所述第二源操作数用于确定所述数据搬移方式对应的线程偏移量;处理模块,用于根据所述第一操作指令对所述N个线程的第一源数据进行搬移,得到所述N个线程中每个线程上搬移后的第一数据。
- 如权利要求11所述的装置,其特征在于,所述数据搬移方式为第一搬移方式,所述处理模块,具体用于:将编号为I 1的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1),I 1为(i+SRC1)对N取余的值;其中,SRC1表示所述第二源操作数,SRC1为正整数。
- 如权利要求11所述的装置,其特征在于,所述数据搬移方式为第二搬移方式,所述处理模块,具体用于:将编号为I 2的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I 2为i与SRC1的异或值,SRC1表示所述第二源操作数,SRC1为正整数。
- 如权利要求11所述的装置,其特征在于,所述数据搬移方式为第三偏移方式,所述处理模块,具体用于:将编号为I 3的线程的第一源数据搬移到编号为i的线程中;其中,N个线程的编号为0~(N-1),i取遍0~(N-1);I 3的取值为 SRC1表示所述第二源操作数,SRC1为正整数,n为能够整除N的正整数。
- 如权利要求11-14任一项所述的装置,其特征在于,所述第一操作指令还包括第二操作码,所述第二操作码用于指示运算类型;所述处理模块,还用于:针对所述N个线程中的第一线程,基于所述第一线程的第一源数据和所述第一线程上搬移后的第一数据,执行所述运算类型对应的运算操作。
- 如权利要求15所述的装置,其特征在于,所述N个线程中的每个线程关联有线程标志位,所述线程标志位用于指示线程的第一源数据是否参与运算操作。
- 如权利要求16所述的装置,其特征在于,所述第一线程上搬移后的第一数据来自于所述N个线程中的第二线程;所述第一线程关联的线程标志位指示所述第一线程的第一源数据参与运算操作,且所述第二线程关联的线程标志位指示所述第二线程的第一源数据参与运算操作。
- 如权利要求15-17任一项所述的装置,其特征在于,所述第一操作指令还包括目的操作数,所述目的操作数用于指示所述第一线程对应运算结果的存储位置。
- 如权利要求12所述的装置,其特征在于,所述N个线程的第一源数据来自并行计算 处理器的N个连续的线程,所述并行计算处理器包含2N个线程;所述指令获取模块,还用于获取第二操作指令,所述第二操作指令包括如下参数:所述第一操作码;所述第二源操作数;第三源操作数,所述第三源操作数指示所述N个线程的第二源数据,所述N个线程的第二源数据来自所述并行计算处理器中的剩余N个连续的线程;所述处理模块,还用于根据所述第二操作指令对所述N个线程的第二源数据进行搬移,得到所述N个线程中每个线程上搬移后的第二数据。
- 如权利要求18所述的装置,其特征在于,所述处理模块,还用于:将第三线程上搬移后的第一数据和所述第三线程上搬移后的第二数据进行交换;其中,所述三线程为所述N个线程中编号为r的线程;若SRC1小于N,r大于或者等于(N-SRC1),且r小于N;若SRC1大于或者等于N,r大于或者等于0,且r小于(N-SRC1%N)。
- 一种通信装置,其特征在于,包括处理器,所述处理器和存储器耦合,所述存储器用于存储计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以执行权利要求1至10任一项所述的方法。
- 一种计算机可读存储介质,其特征在于,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1至10任一项所述的方法。
- 一种计算机程序产品,其特征在于,当其在计算机上运行时,使得计算机执行权利要求1至10任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/101533 WO2022266842A1 (zh) | 2021-06-22 | 2021-06-22 | 一种多线程数据处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117561501A true CN117561501A (zh) | 2024-02-13 |
Family
ID=84543861
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180099704.7A Pending CN117561501A (zh) | 2021-06-22 | 2021-06-22 | 一种多线程数据处理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117561501A (zh) |
WO (1) | WO2022266842A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389731B (zh) * | 2023-10-20 | 2024-04-02 | 上海芯高峰微电子有限公司 | 数据处理方法和装置、芯片、设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8996845B2 (en) * | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
CN105302749B (zh) * | 2015-10-29 | 2018-07-24 | 中国人民解放军国防科学技术大学 | Gpdsp中面向单指令多线程模式的dma传输方法 |
US10761741B1 (en) * | 2016-04-07 | 2020-09-01 | Beijing Baidu Netcome Science and Technology Co., Ltd. | Method and system for managing and sharing data using smart pointers |
US10108554B2 (en) * | 2016-12-05 | 2018-10-23 | Intel Corporation | Apparatuses, methods, and systems to share translation lookaside buffer entries |
-
2021
- 2021-06-22 CN CN202180099704.7A patent/CN117561501A/zh active Pending
- 2021-06-22 WO PCT/CN2021/101533 patent/WO2022266842A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022266842A1 (zh) | 2022-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7042466B1 (en) | Efficient clip-testing in graphics acceleration | |
CN111656367A (zh) | 神经网络加速器的***和体系结构 | |
US6954842B2 (en) | Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution | |
CN109062608B (zh) | 用于独立数据上递归计算的向量化的读和写掩码更新指令 | |
CN117724763A (zh) | 用于矩阵操作加速器的指令的装置、方法和*** | |
CN102640131B (zh) | 并行线程处理器中的一致分支指令 | |
CN112099852A (zh) | 可变格式、可变稀疏矩阵乘法指令 | |
EP3623941B1 (en) | Systems and methods for performing instructions specifying ternary tile logic operations | |
US20180121386A1 (en) | Super single instruction multiple data (super-simd) for graphics processing unit (gpu) computing | |
KR20030067892A (ko) | 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법 | |
US20160224386A1 (en) | Approach for a configurable phase-based priority scheduler | |
CN113791820B (zh) | 位矩阵乘法 | |
CN107851010B (zh) | 针对宽数据元素使用寄存器对的具有偶数元素和奇数元素运算的混合宽度simd运算 | |
KR20140131284A (ko) | 스트리밍 메모리의 치환 동작 | |
CN112148251A (zh) | 跳过无意义的矩阵运算的***和方法 | |
WO2016024508A1 (ja) | マルチプロセッサ装置 | |
CN110058886A (zh) | 用于计算两个区块操作数中的半字节的数量积的***和方法 | |
CN109614145B (zh) | 一种处理器核心结构及数据访存方法 | |
US20030097389A1 (en) | Methods and apparatus for performing pixel average operations | |
CN117561501A (zh) | 一种多线程数据处理方法及装置 | |
US7769981B2 (en) | Row of floating point accumulators coupled to respective PEs in uppermost row of PE array for performing addition operation | |
US20230195526A1 (en) | Graph computing apparatus, processing method, and related device | |
CN102012802B (zh) | 面向向量处理器数据交换的方法及装置 | |
CN112463218B (zh) | 指令发射控制方法及电路、数据处理方法及电路 | |
CN117093270B (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 |