CN113918217A - 向量函数的处理方法及相关设备 - Google Patents
向量函数的处理方法及相关设备 Download PDFInfo
- Publication number
- CN113918217A CN113918217A CN202010964520.XA CN202010964520A CN113918217A CN 113918217 A CN113918217 A CN 113918217A CN 202010964520 A CN202010964520 A CN 202010964520A CN 113918217 A CN113918217 A CN 113918217A
- Authority
- CN
- China
- Prior art keywords
- vector
- branch
- elements
- function
- register
- 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
- 239000013598 vector Substances 0.000 title claims abstract description 1038
- 238000003672 processing method Methods 0.000 title abstract description 19
- 238000012545 processing Methods 0.000 claims abstract description 140
- 230000006870 function Effects 0.000 claims description 202
- 238000000034 method Methods 0.000 claims description 102
- 230000008569 process Effects 0.000 claims description 34
- 230000001419 dependent effect Effects 0.000 claims description 7
- 238000012163 sequencing technique Methods 0.000 abstract description 3
- 230000008707 rearrangement Effects 0.000 description 49
- 238000013507 mapping Methods 0.000 description 22
- 238000004364 calculation method Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 10
- 238000004590 computer program Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000000926 separation method Methods 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
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
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
Abstract
本申请提供了一种向量函数的处理方法及相关设备,属于计算机技术领域。本申请提供的方案可以根据预设规则对第一输入向量中的向量元素进行排序。由于该预设规则是根据向量函数所包括的各个分支的依赖关系设置的,因此可以确保排序后的向量元素的排列顺序与各个分支的依赖关系相关。进而可以确保按照排序后的向量元素执行向量函数的处理时,可以有效利用向量函数的处理装置的计算资源,提高计算资源的利用率。
Description
本申请要求于2020年07月08日提交的申请号为202010649625.6、发明名称为“向量计算的方法和系统”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及计算机技术领域,特别涉及一种向量函数的处理方法、装置、处理器、计算机设备和计算机可读存储介质。
背景技术
向量处理器是指能够对一个向量中的各个元素执行相同的运算,从而有效提高运算速度的处理器。该向量处理器通常使用单指令多数据(single instruction multipledata,SIMD)的方式对向量进行处理。
传统技术中,向量处理器包括向量寄存器和计算单元。其中,向量寄存器用于存储从内存中读取到的待运算的向量,计算单元用于采用向量函数对向量寄存器中存储的向量进行处理。
但是,当向量函数包括多个函数分支时,对于某个函数分支,向量寄存器中存储的向量中可能仅有部分元素满足该函数分支的执行条件。此时,计算单元采用该函数分支仅需对向量中的部分元素进行处理,导致计算资源的浪费。
发明内容
本申请提供了一种向量函数的处理方法、装置、处理器、计算机设备和计算机可读存储介质,可以解决相关技术中的方法无法有效利用向量处理器的计算资源,导致计算资源浪费的技术问题。
第一方面,提供了一种向量函数的处理方法,该方法包括:获取第一输入向量,该第一输入向量包括向量元素;根据预设规则对该第一输入向量中的向量元素进行排序,该预设规则根据该向量函数的分支的依赖关系设置;以及按照排序后的向量元素执行向量函数处理。
由于对向量元素进行重新排序时所依据的预设规则是根据向量函数所包括的各个分支的依赖关系设置的,因此可以确保排序后的向量元素的排列顺序与各个分支的依赖关系相关。进而可以确保按照排序后的向量元素执行向量函数的处理时,可以有效利用向量函数的处理装置的计算资源,提高计算资源的利用率。
可选地,该向量函数包括无依赖关系,且并行的第一分支和第二分支;该预设规则可以包括:用于执行该第一分支的向量元素连续排列;和/或,用于执行该第二分支的向量元素连续排列。
可选地,该向量函数包括无依赖关系,且并行的第一分支和第二分支;根据预设规则对该第一输入向量中该向量元素进行排序的过程可以包括:将用于执行该第一分支的向量元素连续排列;和/或,将用于执行该第二分支的向量元素连续排列。
本申请提供的方法,可以仅将用于执行部分分支的向量元素连续排列,用于执行其他分支的向量元素则可以保留初始排列顺序,由此可以避免向量元素的重排过程占用的计算资源过多。或者,也可以将用于执行每个分支的向量元素均连续排列,由此可以确保后续执行向量函数的处理时,能够有效提高计算资源的利用率。
可选地,该第一输入向量的数据长度大于寄存器的数据长度;在根据预设规则对该第一输入向量中的向量元素进行排序之前,该方法还可以包括:将该第一输入向量中的第一向量元素写入该寄存器,该第一向量元素的数据长度等于该寄存器的数据长度,该寄存器用于存储待处理的向量元素;确定该第一向量元素所需执行的分支;若该第一向量元素所需执行的分支包括该第一分支和该第二分支,则将该第一输入向量中除该第一向量元素之外的第二向量元素写入该寄存器;确定该第二向量元素所需执行的分支。
通过将第二向量元素写入寄存器,并确定该第二向量元素所需执行的分支,可以确保在执行后续分支前,提前确定出第一输入向量中每个向量元素所需执行的分支。由此,可以便于后续根据各个向量元素所需执行的分支,重新对第一输入向量中的向量元素进行排序。
可选地,该第一输入向量为从重排缓存中读取的中间结果向量,该中间结果向量是执行该向量函数中的第三分支得到的,该第一分支和该第二分支均依赖于该第三分支,该重排缓存用于存储该第一输入向量和该中间结果向量。
可选地,用于执行该方法的向量函数的处理装置与第一存储器连接;该第一输入向量为从该第一存储器中读取的初始输入向量。
本申请提供的方法不仅可以对初始输入向量中的向量元素进行重排,还可以对中间结果向量中的向量元素进行重排,由此可以确保在该向量函数的处理过程中,始终能够有效利用向量处理器的计算资源。
可选地,按照排序后的向量元素执行向量函数处理的过程可以包括:将排序后的向量元素写入寄存器;然后采用该向量函数的分支处理写入寄存器中的向量元素。
由于写入至寄存器中的向量元素是经过重新排序的,因此采用该向量函数的分支处理写入寄存器中的向量元素后,可以提高每个向量元素的执行结果均为有效结果的概率,即可以有效提高计算资源的利用率。
可选地,在该将排序后的向量元素写入寄存器之前,该方法还可以包括:在线性表中记录分支处理信息,该分支处理信息包括待执行的分支的标识,以及用于执行该待执行的分支的向量元素的索引,其中,该线性表按照先进后出的方式存储分支处理信息;相应的,该将排序后的向量元素写入寄存器的过程可以包括:将排序后的向量元素中,该索引指示的向量元素写入寄存器;采用该向量函数的分支处理写入该寄存器中的向量元素的过程可以包括:采用该标识指示的分支处理写入该寄存器中的该向量元素;并且,该方法还可以包括:在该向量函数包括的并行的分支执行完成之后,将该分支处理信息从该线性表中删除。该线性表可以为栈、队列或者链表等。
本申请提供的方法,向量函数的处理装置通过线性表维护向量函数包括的各个分支的分支处理信息,可以实现对各个分支的处理进度以及各个向量元素的排序情况的有序管理。
可选地,按照排序后的向量元素执行向量函数处理的过程还可以包括:在该向量函数包括的并行的分支执行完成之后,将该向量元素的执行结果按照该向量元素在该第一输入向量中的初始排列顺序排列。
其中,向量函数的处理装置可以根据对向量元素进行重排时记录的映射状态,恢复该向量元素的执行结果的排列顺序。本申请提供的方法,在并行的分支执行完成之后,即恢复该向量元素的执行结果的排列顺序,从而可以及时删除该映射状态。由此,可以避免向量元素多次重排而导致需要在向量函数处理过程中记录大量的向量元素的映射状态的情况。
可选地,按照排序后的向量元素执行向量函数处理的过程还可以包括:在该向量函数执行完成之后,将该向量元素的执行结果按照该向量元素在该第一输入向量中的初始排列顺序排列。
由于第一输入向量中各个向量元素之间无依赖关系,因此也可以在该向量函数全部执行完成之后,再恢复向量元素的执行结果的排序。并且,本申请提供的方法,通过将向量元素的执行结果恢复至初始排列顺序,可以确保最终得到的结果向量中各个向量元素能够与初始输入向量中的各个向量元素一一对应。
第二方面,提供了一种向量函数的处理装置,该装置可以包括向量重排器和向量处理器,且该向量重排器和向量处理器可以用于实现上述第一方面所提供的向量函数的处理方法。
第三方面,提供一种向量函数的处理装置,该装置包括用于执行第一方面或第一方面任一种可能实现方式中的向量函数的处理方法的各个模块。
第四方面,提供了一种处理器,该处理器包括可编程逻辑电路和/或程序指令,当该处理器运行时,用于实现如上述第一方面所提供的向量函数的处理的方法。
第五方面,提供了一种计算机设备,该计算机设备包括:内存,以及与该内存连接的向量处理装置,该向量处理装置为如上述第二方面所提供的向量函数的处理装置,或者为如上述第四方面所提供的处理器。
可选地,该计算机设备还包括:通用处理器;该通用处理器和该向量处理装置集成设置,且该通用处理器和该向量处理装置通过共享缓存与该内存连接;或者,该通用处理器独立于该向量处理装置设置,且该通用处理器也与该内存连接。
第六方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,该指令由处理器执行以实现如上述第一方面及第一方面任意一种可能实现方式中所提供的向量函数的处理方法。
第七方面,提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行如上述第一方面及第一方面任意一种可能实现方式中所提供的向量函数的处理方法。
综上所述,本申请提供了一种向量函数的处理方法及相关设备,可以根据预设规则对第一输入向量中的向量元素进行排序。由于该预设规则是根据向量函数所包括的各个分支的依赖关系设置的,因此可以确保排序后的向量元素的排列顺序与各个分支的依赖关系相关。进而可以确保按照排序后的向量元素执行向量函数的处理时,可以有效利用向量函数的处理装置的计算资源,提高计算资源的利用率。
附图说明
图1是本申请实施例提供的一种向量函数的处理方法的应用场景的示意图;
图2是本申请实施例提供的另一种向量函数的处理方法的应用场景的示意图;
图3是本申请实施例提供的一种向量函数的处理装置的结构示意图;
图4是本申请实施例提供的一种向量函数的处理方法的流程图;
图5是本申请实施例提供的一种向量函数的示意图;
图6是本申请实施例提供的一种重排栈的示意图;
图7是本申请实施例提供的另一种向量函数的示意图;
图8是本申请实施例提供的另一种重排栈的示意图。
具体实施方式
下面结合附图详细介绍本申请实施例提供的向量函数的处理方法及装置。
向量函数的处理在高性能计算(high performance computing,HPC)和大数据等领域具有广泛应用。该向量函数的输入和输出都是以数组形式连续存储的向量。向量函数用于对输入向量中的每个向量元素执行函数运算,执行结果保存到输出向量的相应位置。例如,假设输入向量为X,输出向量为Y,则该输出向量中索引为i的向量元素,即为对输入向量X中索引为i的向量元素执行函数运算后得到的执行结果,即Y[i]=f(X[i])。其中,f表示向量函数,i为非负整数,且i小于该输入向量或输出向量所包括的向量元素的个数。
向量函数中通常包括多个分支,每个分支可以是一段程序,且每段程序包括至少一条指令。该每段程序也可以称为一个代码块或者一个指令序列。
在本申请实施例中,该向量函数包括的多个分支中存在无依赖关系且并行的至少两个分支。该无依赖关系且并行的至少两个分支中,不同的分支用于对输入向量中不同的向量元素进行处理,这种情况称为分支分离。
图1是本申请实施例提供的一种向量函数的处理方法的应用场景的示意图。作为一种可选的实现方式,如图1所示,该应用场景可以包括向量函数的处理装置01、通用处理器02、共享缓存03、内存控制器04以及内存05。其中,该向量函数的处理装置01和通用处理器02均通过缓存总线06与该共享缓存03连接。即该向量函数的处理装置01可以与通用处理器02共享该共享缓存03。
在该实现方式中,向量函数的处理装置01可以通过内部总线与通用处理器02连接,该内部总线可以为快速通道互联(quickpath interconnect,QPI)总线。也即是,该向量函数的处理装置01可以与该通用处理器02封装为一个异构处理器,该向量函数的处理装置01可以作为该通用处理器02的协处理器。例如,该向量函数的处理装置01可以为图形处理器(graphics processing unit,GPU)。
图2是本申请实施例提供的另一种向量函数的处理方法的应用场景的示意图。作为另一种可选的实现方式,如图2所示,该应用场景可以包括向量函数的处理装置01、通用处理器02、内存控制器04以及内存05。其中,该向量函数的处理装置01和通用处理器02均通过内存总线07与该内存控制器04连接。
在该实现方式中,向量函数的处理装置01可以作为一个独立的外设与该内存总线07连接,即该向量函数的处理装置01和通用处理器02可以为相互独立的两个芯片。例如,该向量函数的处理装置01可以通过扩展外设部件互连标准(peripheral componentinterconnect-express,PCI-E)接口与该内存总线07连接。
可选地,该通用处理器02可以为X86架构或者高级精简指令集处理器(advancedRISC machines,ARM)架构的处理器。其中,RISC是指精简指令集计算机(reducedinstruction set computer)。该内存05可以为双列直插式存储模块(dual-inline-memory-modules,DIMM)。
在本申请实施例中,通用处理器02和向量函数的处理装置01之间可以通过共享存储空间(例如共享内存或共享缓存)的方式通信。该通用处理器02可以将输入数据(包括向量函数,以及输入向量)写入该共享存储空间中的输入缓存,并可以在该共享存储空间中为该输入向量的执行结果(即输出向量)分配输出缓存。该通用处理器02还可以通过写寄存器等方式将输入缓存的地址和输出缓存的地址传递至该向量函数处理装置01。该向量函数处理装置01采用向量函数处理完成该输入向量,得到输出向量后,可以通过中断或轮询的方式告知该通用处理器02。该通用处理器02进而可以从输出缓存中获取该输出向量。
图3是本申请实施例提供的一种向量函数的处理装置01的结构示意图,如图3所示,该向量函数的处理装置01可以包括:向量重排器011、向量处理器012以及访存接口013。其中,该向量重排器011分别与该向量处理器012和该访存接口013连接。该访存接口013还通过访存总线与第一存储器连接,该访存接口013用于从该第一存储器中读取待处理的输入向量,以及向该第一存储器写入输出向量。其中,该访存接口013每次读写的向量的数据长度可以等于该访存总线的宽度,该访存总线的宽度也可以称为最大访存事务宽度,或者访存带宽。
可选地,参考图1,该第一存储器可以为共享缓存03。相应的,该访存总线为缓存总线06,该缓存总线06的宽度为一个缓存行(cache line)。或者,参考图2,该第一存储器可以为内存05。相应的,该访存总线为内存总线07,该内存总线07的宽度可以大于或等于一个缓存行。
继续参考图3,该向量处理器012可以包括寄存器0121、计算单元0122以及向量控制器0123。其中,寄存器0121用于存储待处理的向量元素。计算单元0122用于执行向量函数,即采用该向量函数对寄存器0121中存储的向量元素进行函数运算。该计算单元0122可以为算术逻辑单元(arithmetic and logic unit,ALU)。该向量控制器0123用于与向量重排器011交互。
如图3所示,该向量重排器011可以包括重排缓存0111、重排控制器0112以及重排单元0113。该重排缓存0111分别与访存接口013以及重排单元0113连接,该重排缓存0111用于存储该访存接口013从第一存储器读取的输入向量,以及用于存储输出向量。并且,该重排缓存0111的数据长度大于向量处理器012中寄存器0121的数据长度,且该重排缓存0111的数据长度可以大于或等于访存总线的宽度。其中,重排缓存0111的数据长度和寄存器0121的数据长度均是指单次能够存储的数据的大小。
该重排控制器0112分别与向量控制器0123和重排单元0113连接,重排控制器0112能够根据该向量控制器0123指示的各个向量元素所需执行的分支,对该重排单元0113进行配置。该重排单元0113可以为基于交叉开关矩阵(crossbar)原理的逻辑电路。该重排单元0113能够基于该配置,读取重排缓存0111中存储的输入向量(或输出向量),对该输入向量(或输出向量)中的向量元素进行重新排序后再输出至重排缓存0111。并且,该重排控制器0112还可以向该向量控制器0112发送后续所需执行的向量函数的分支的代码入口(即分支的存储地址)。向量控制器0112可以将重排缓存0111中排序后的向量元素写入寄存器0121,并可以基于该代码入口获取向量函数的分支,进而可以指示计算单元0122采用该分支对寄存器0121中写入的向量元素进行处理。
可选地,在本申请实施例中,该向量重排器011与该向量处理器012可以集成设置,即集成在一个处理器中。或者,该向量重排器011与该向量处理器012也可以独立设置。
本申请实施例提供了一种向量函数的处理方法,该方法可以应用于如上述实施例提供的向量函数的处理装置01中,例如可以应用于如图1至图3任一所示的向量函数的处理装置01。如图4所示,该方法可以包括:
步骤101、向量重排器读取第一输入向量。
该第一输入向量可以包括多个向量元素,每个向量元素为一个标量,且各个向量元素的数据长度相同。并且,该第一输入向量的数据长度(即各个向量元素的数据长度之和)大于向量处理器012中寄存器0121的数据长度。例如,该第一输入向量的数据长度可以是寄存器0121的数据长度的n倍,n为大于1的整数。其中,向量元素的数据长度是指该向量元素占用的存储空间的大小。例如,若第一输入向量包括8个向量元素,每个向量元素为单精度浮点数,则每个向量元素的数据长度为32位,该第一输入向量的数据长度为256位。
作为一种可选的实现方式,该第一输入向量可以是向量重排器011从第一存储器(例如共享缓存03或内存05)中读取的初始输入向量。参考图3,该向量重排器011中的重排缓存0111可以通过访存接口013从第一存储器中读取第一输入向量。该第一输入向量的数据长度等于该重排缓存0111的数据长度,且该第一输入向量中各个向量元素的排列顺序与其在第一存储器中的初始排列顺序相同。若该重排缓存0111的数据长度等于访存总线的宽度,则重排缓存0111可以通过一次访存操作(也可以称为访存事务)读取到该第一输入向量。若该重排缓存0111的数据长度大于该访存总线的宽度,则重排缓存0111可以通过多次连续的访存操作读取到该第一输入向量。
作为另一种可选的实现方式,该第一输入向量可以是从重排缓存0111中读取到的中间结果向量,该中间结果向量是执行向量函数中的某个分支后得到的。在本申请实施例中,向量函数包括多个分支,该多个分支可以包括无依赖关系且并行的第一分支和第二分支,且还可以包括第三分支。该第一分支和第二分支均依赖于该第三分支,即该第一分支和第二分支的执行均需依赖于第三分支的执行结果。相应的,若当前待执行的分支为第一分支或第二分支,则该第一输入向量可以是从重排缓存0111中读取到的该第三分支的中间结果向量。
示例的,假设向量处理器012中寄存器0121的数据长度为4个向量元素的数据长度,该重排缓存0111的数据长度为8个向量元素的数据长度,且该第一输入向量为重排缓存0111通过访存接口013从第一存储器中读取的初始输入向量。则该第一输入向量可以包括8个向量元素,该8个向量元素可以包括:a、b、c、d、e、f、g和h。
在本申请实施例中,由于该重排缓存0111的数据长度大于或等于访存总线的宽度,因此,该重排缓存0111每次能够从第一存储器中连续读取到数据长度较长的输入向量。由此,有效减少了访存次数,提高了访存效率以及访存带宽的利用率。并且,由于该重排缓存0111每次读取到的输入向量的数据长度较长,有助于后续在出现分支分离时,能够确定出足够多的用于执行同一个分支的向量元素,进而提高向量函数的执行效率。
并且,由于本申请实施例提供的方法不仅可以对初始输入向量中的向量元素进行重排,还可以对中间结果向量中的向量元素进行重排,因此可以确保在该向量函数的处理过程中,始终能够有效利用向量处理器012的计算资源。
步骤102、向量重排器将该第一输入向量中的第一向量元素写入向量处理器中的寄存器。
在执行向量函数中的某个待执行的分支之前,向量重排器011可以将第一输入向量中的第一向量元素按序写入向量处理器012中的寄存器0121。其中,该第一向量元素为第一输入向量中的前若干个向量元素,且该第一向量元素的数据长度等于该寄存器0121的数据长度。参考图3,重排控制器0112可以将重排缓存0111中的第一向量元素按序写入寄存器0121。
示例的,假设寄存器0121的数据长度为4个向量元素的数据长度,重排缓存0111中存储的第一输入向量包括顺序排列的向量元素a至向量元素h共8个向量元素。则重排控制器0112可以将该第一输入向量中的前4个第一向量元素a、b、c和d写入该寄存器0121。
步骤103、向量处理器检测该第一向量元素所需执行的分支的个数是否大于1。
若该第一向量元素所需执行的分支为同一个分支,即所需执行的分支的个数不大于1,则可以执行步骤104。若该第一向量元素所需执行的分支的个数大于1,即所需执行的分支至少包括并行的第一分支和第二分支,则可以确定该第一向量元素后续所需执行的分支出现分离,并执行步骤105。
在本申请实施例中,向量处理器012可以根据向量函数中各个分支的依赖关系,从入口分支开始依次执行各个分支。若向量函数中包括无依赖关系,且并行的第一分支和第二分支,则该向量函数还可以包括条件分支,该第一分支和第二分支依赖于该条件分支。向量处理器012可以通过执行该条件分支来确定各个第一向量元素后续所执行的分支。其中,对于该第一输入向量为第三分支的中间结果向量的场景,该条件分支还依赖于该第三分支。也即是,该条件分支需在该第三分支执行完成之后执行。
示例的,如图5所示,假设向量函数包括分支A、分支B、分支C和分支D共4个分支。其中,分支B和分支C为无依赖关系且并行的两个分支,并且该两个分支均依赖于条件分支:分支A。分支D依赖于分支B和分支C。则在向量处理器012的寄存器0121中写入第一向量元素a至d后,向量控制器0123可以指示计算单元0122采用该分支A处理该第一向量元素a至d,进而可以确定该第一向量元素a至d中每个第一向量元素后续所需执行的分支为分支B还是分支C。若第一向量元素a至d后续所需执行的分支均为分支B,则向量控制器0123可以执行步骤104。若第一向量元素a和c后续所需执行的分支为分支B,而第一向量元素b和d后续所需执行的分支为分支C,则向量控制器0123可以确定出现分支分离,并可以执行步骤105。
步骤104、向量处理器采用该分支处理该第一向量元素。
若该第一向量元素所需执行的分支的个数不大于1,即该第一向量元素所需执行的分支均为同一个分支,则向量处理器012可以直接采用该分支处理该第一向量元素。并且,向量处理器012采用该分支处理完成第一向量元素后,还可以将该第一向量元素的执行结果写入寄存器0121。重排缓存0111可以从寄存器0121中读取并存储该执行结果。
例如,若向量控制器0123确定出当前写入寄存器0121的第一向量元素a至d后续所需执行的分支均为分支B,则可以直接采用该分支B处理该第一向量元素a至d。
步骤105、向量处理器向该向量重排器发送第一向量元素的分支执行情况。
若该第一向量元素所需执行的分支的个数大于1,例如包括并行的第一分支和第二分支,则向量处理器012中的向量控制器0123可以向该向量重排器011中的重排控制器0112发送第一向量元素的分支执行情况。该分支执行情况用于指示每个第一向量元素所需执行的分支。可选地,该分支执行情况可以包括:第一向量元素在重排缓存0111中的索引,与该第一向量元素所需执行的分支的标识的对应关系。
可选地,第一输入向量中的每个向量元素在重排缓存0111中均具有唯一的索引,该索引可以是该向量元素在第一输入向量中的排列序号。由于向量元素在重排缓存0111中的排列顺序可以调整,因此向量元素的索引也会随着排列顺序的变化而变化。向量函数中每个分支的标识可以是该分支在第一存储器中的存储地址。或者,若该向量重排器011中还包括用于存储向量函数的缓存,则该分支的标识可以为该分支在向量重排器011内部的缓存中的存储地址。
示例的,假设第一输入向量包括的8个向量元素当前在重排缓存0111中的排列顺序为a至h,则该8个向量元素当前的索引依次为0至7。其中,当前写入寄存器0121的4个第一向量元素a至d的索引分别为0至3,则向量控制器0123向重排控制器0112发送的分支执行情况可以如表1所示。参考表1可以看出,第一向量元素a的索引0以及第一向量元素c的索引2,均与分支B的标识B对应。第一向量元素b的索引1以及第一向量元素d的索引3,均与分支C的标识C对应。
表1
索引 | 0 | 1 | 2 | 3 |
分支的标识 | B | C | B | C |
步骤106、向量重排器将该第一输入向量中除该第一向量元素之外的第二向量元素写入寄存器。
向量重排器011中的重排控制器0112在接收到该分支执行情况后,可以确定该第一向量元素所需执行的分支出现分离。为了使得写入寄存器0121中的每个向量元素的执行结果均为有效的结果,以确保向量处理器012的计算资源的利用率以及向量函数的计算效率,向量重排器011可以将该第一输入向量中除该第一向量元素之外的第二向量元素均写入寄存器0121。由此,可以在执行后续分支前,提前确定出第一输入向量中每个向量元素所需执行的分支,进而便于后续根据各个向量元素所需执行的分支,重新对重排缓存0111中存储的各个向量元素进行排序。
示例的,假设第一输入向量包括向量元素a至h,在上述步骤102中写入寄存器0121的第一向量元素包括a至d。则重排控制器0112可以将重排缓存0111中剩余的第二向量元素e至f均写入该寄存器0121。
可选地,重排控制器0112还可以通过线性表记录向量元素的执行状态信息,该执行状态信息可以包括当前待执行的分支的分支处理信息。该分支处理信息可以包括:待执行的分支的标识,以及用于执行该待执行的分支的向量元素的索引。该分支处理信息还可以包括:与该待执行的分支并行的其他分支的标识,其中,该线性表可以采用先进后出的方式存储分支处理信息。例如,该线性表可以为栈、队列或者链表等。
在本申请实施例中,该执行状态信息还可以包括该第一输入向量中各个向量元素所需执行的分支的分布状态,以及各个向量元素在重排缓存中的映射状态。该分布状态可以采用标识序列表示,该标识序列包括第一输入向量中各个向量元素所需执行的分支的标识,且各个向量元素所需执行的分支的标识按照各个向量元素在重排缓存中的初始排列顺序排列。该映射状态可以采用索引序列表示,该索引序列包括第一输入向量中各个向量元素的初始索引,且该各个向量元素的初始索引按照各个向量元素当前在重排缓存中的排列顺序排列。其中,向量元素的初始索引可以是基于该向量元素在重排缓存中的初始排列顺序确定的,或者,该初始索引可以是基于向量元素在前一次重排后,在重排缓存中的排列顺序确定的。
示例的,假设该线性表为栈,本申请实施例中称之为重排栈。则在执行分支A之前,重排控制器0112可以在该重排栈中压入一个新项,即新的栈顶。如图6中的(1)所示,该栈顶中记录有该待执行的分支A的分支处理信息,该分支处理信息包括分支A的第一标识A,以及用于执行该分支A的第一向量元素a至d的索引:0-3。由于该向量函数中不包括与分支A并行的其他分支,因此该分支处理信息中记录的并行分支仅包括分支A的第一标识A。
并且,从图6中的(1)还可以看出,该栈顶中还记录有第一输入向量中向量元素a至h所需执行的分支的分布状态,以及向量元素a至h在重排缓存0111中的映射状态。由于当前该第一输入向量中的向量元素a至h按照初始排列顺序排列,因此用于表示该映射状态的索引序列可以为:01234567。由于向量元素a至h均用于执行分支A,因此用于表示该分布状态的标识序列可以为:AAAAAAAA。
继续参考图6,向量处理器012在采用分支A对第一向量元素a至d进行处理,并将第一向量元素a至d的分支执行情况发送至重排控制器0112后,若该第一向量元素a至d所需执行分支包括分支B和分支C,则该重排控制器0112可以在重排栈中压入一个新的栈顶。由于出现分支分离,且还未确定该第一输入向量中剩余的第二向量元素所需执行的分支,因此该栈顶为临时栈顶。如图6中的(2)所示,该临时栈顶仅记录了待执行的并行的分支B和分支C的标识,以及第一向量元素a至d的所需执行的分支的分布状态:BCBC。
步骤107、向量处理器确定该第二向量元素所需执行的分支。
参考上述步骤106,向量处理器012可以通过执行条件分支来确定第二向量元素后续所执行的分支。例如,向量控制器0123可以指示计算单元0122采用分支A处理当前写入寄存器0121的第二向量元素e至h,进而可以确定该第二向量元素e至h中每个第二向量元素后续所需执行的分支为分支B还是分支C。
步骤108、向量处理器向该向量重排器发送第二向量元素的分支执行情况。
该分支执行情况用于指示每个第二向量元素所需执行的分支。可选地,该分支执行情况可以包括:第二向量元素在重排缓存中的索引,与该第二向量元素所需执行的分支的标识的对应关系。
示例的,假设当前写入寄存器0121的4个第二向量元素e至h的索引分别为4至7。则向量控制器0123向该重排控制器0112发送的分支执行情况可以如表2所示。参考表2可以看出,第二向量元素e的索引4以及第二向量元素g的索引6,均与分支B的标识B对应。第二向量元素f的索引5以及第二向量元素h的索引7,均与分支C的标识C对应。
表2
索引 | 4 | 5 | 6 | 7 |
分支的标识 | B | C | B | C |
可选的,在本申请实施例中,若该第一输入向量中,除该第一向量元素之外的第二向量元素的数据长度大于该寄存器0121的数据长度,则重排控制器0112可以将该第二向量元素分多次写入该寄存器0121。其中,每次写入寄存器0121的第二向量元素的数据长度不大于该寄存器0121的数据长度。例如,重排控制器0112可以将第二向量元素按照长度切分为不同部分,具体切分方法可以按照长度平均切分、按数据的关联性切分、或者随机切分等切分方式,使得每部分的长度均小于或等于寄存器0121的数据长度。也即是,向量重排器011和向量处理器012可以重复执行上述步骤106至步骤108所示的方法,直至向量重排器011确定出每个第二向量元素所需执行的分支。
步骤109、向量重排器对第一输入向量中的向量元素进行排序。
向量重排器在确定第一输入向量中每个向量元素所需执行的分支后,可以根据预设规则对该第一输入向量中的向量元素进行排序。该预设规则可以根据该向量函数的分支的依赖关系设置。
在本申请实施例中,该向量函数包括无依赖关系且并行的多个分支,该并行的多个分支可以包括第一分支和第二分支,该第一分支和第二分支可以为该并行的多个分支中的任意两个分支。该预设规则可以包括:用于执行该第一分支的向量元素连续排列;和/或,用于执行该第二分支的向量元素连续排列。相应的,上述步骤109可以包括:将用于执行该第一分支的向量元素连续排列;和/或,将用于执行该第二分支的向量元素连续排列。
也即是,在本申请实施例中,对于向量函数包括的多个并行的分支,向量重排器011可以将用于执行每个分支的向量元素均连续排列,由此可以确保后续执行向量函数的处理时,能够有效提高计算资源的利用率。或者,向量重排器011也可以仅将用于执行部分分支的向量元素连续排列,其他向量元素则可以保留初始排列顺序,由此可以避免向量元素的重排过程占用过多的计算资源。
示例的,参考表1和表2,由于第一输入向量中的向量元素a、c、e和g用于执行分支B,向量元素b、d、f和h用于执行分支C。因此,如图6中的(3)所示,重排控制器0112可以对重排单元0113的映射参数进行配置(该映射参数用于指示输入和输出之间的对应关系),使得该重排单元0113可以将该重排缓存0111中存储的向量元素a至h重新排列为:acegbdfh。重新排列后的第一输入向量中,用于执行分支B的4个向量元素a、c、e和g连续排列,用于执行分支B的4个向量元素b、d、f和h也连续排列。
在本申请实施例中,重排控制器0112在接收到第二向量元素的分支执行情况后,还可以将该临时栈顶中记录的第二向量元素所需执行的分支的分布状态补充完整。并且,在重排单元0113将该重排缓存0111中存储的向量元素重新排列后,该重排控制器0112还可以根据重新排列后的向量元素的顺序,更新栈顶中记录的各个向量元素在重排缓存0111中的映射状态。
例如,参考图6中的(3),用于表示该分布状态的索引序列可以更新为:BCBCBCBC。并且,由于重排缓存0111中存储的向量元素a至h重新排列为:acegbdfg,因此用于表示该映射状态的索引序列可以更新为:02461357。参考该索引序列可以看出,由于初始索引为0的向量元素a在重新排列后还位于第一位,因此该索引序列的第一位为0;由于初始索引为1的向量元素b在重新排列后位于第五位,因此该索引序列的第五位为1。
步骤110、向量重排器在线性表中记录待执行的分支的分支处理信息。
向量重排器011在完成对向量元素的重新排序后,可以从多个并行的分支中确定后续待执行的分支,并可以在线性表中记录待执行分支的分支处理信息。该待执行的分支可以是向量重排器011从多个并行的分支中随机确定的,或者,可以是向量重排器011根据向量函数中预先设定的分支执行顺序确定的。该分支处理信息包括待执行的分支的标识,以及用于执行该待执行的分支的向量元素的索引,索引是指向量元素当前在重排缓存中的索引,即重新排序后的向量元素的索引。可选地,该分支处理信息还可以包括与该待执行的分支并行的其他分支的标识。通过该线性表维护向量函数包括的各个分支的分支处理信息,可以实现对各个分支的处理进度以及各个向量元素的排序情况的有序管理。
示例的,假设对于无依赖关系且并行的分支B和分支C,重排控制器0112确定后续待执行的分支为分支B,则如图6中的(4)所示,重排控制器0112可以在重排栈的栈顶中记录该分支B的分支处理信息。该分支处理信息包括:分支B的第一标识B,以及用于执行该分支B的向量元素的索引:0-3。并且,该分支处理信息还可以包括与该分支B并行的分支C的标识。例如,分支处理信息中可以记录有并行分支:BC。
步骤111、向量重排器将排序后的向量元素中,该分支处理信息中的索引指示的向量元素写入寄存器。
在本申请实施例中,向量重排器011中的重排控制器0112可以基于线性表中记录的分支处理信息,将该分支处理信息中的索引指示的向量元素写入寄存器0121。
示例的,参考图6中的(4),该重排栈的栈顶中记录的分支处理信息中,用于执行分支B的向量元素的索引为0-3,该索引0-3指示的向量元素为a、c、e和g。因此,该重排控制器0112可以将该向量元素为a、c、e和g写入寄存器0121。
步骤112、向量重排器将该待执行的分支的标识发送至向量处理器。
在本申请实施例中,向量重排器011中的重排控制器0112还可以将该待执行的分支的标识发送至向量处理器012中的向量控制器0123。例如,重排控制器0112可以将分支B的标识B发送至向量控制器0123。
步骤113、向量处理器采用该标识指示的分支处理写入寄存器中的向量元素。
向量处理器012中的向量控制器0123获取到该待执行的分支的标识后,可以从向量函数的存储空间(例如第一存储器或者向量重排器011的内部缓存)中读取该分支,并指示计算单元0122采用该分支处理写入寄存器0121中的向量元素。并且,计算单元0122执行完成该分支,得到各个向量元素的执行结果后,还可以将该执行结果写回寄存器0121。
例如,向量控制器0123可以指示计算单元0122采用分支B,处理当前写入寄存器0121中的向量元素a、c、e和g。并且,计算单元0122可以将向量元素a、c、e和g的执行结果写回寄存器0121。
步骤114、向量处理器向该向量重排器发送指示信息。
在向量处理器012中的计算单元0122执行完成分支后,该向量控制器0123可以向该向量重排器011的重排控制器0112发送指示信息,以指示已采用该分支处理完成该寄存器0121中的向量元素。重排控制器0112进而可以指示重排缓存0111从寄存器0121中读取该向量元素的执行结果。
在本申请实施例中,若用于执行该分支的向量元素的数据长度大于寄存器0121的数据长度,则向量重排器011可以将用于执行该分支的向量元素分多次写入至寄存器0121。其中每次写入的向量元素的数据长度不大于该寄存器0121的数据长度。也即是,向量重排器011和向量处理器012可以重复执行上述步骤111至步骤114,直至采用该分支处理完成用于执行该分支的每个向量元素。
并且,向量重排器011在确定向量处理器011执行完成一个分支后,若检测到向量函数中还包括与该分支并行的其他未执行的分支,则对于其他每个未执行的分支,向量重排器011和向量处理器012均可以通过上述步骤110至步骤114所示的方法,执行该分支,直至执行完成所有并行的分支。
可选地,该向量函数中多个并行的分支可以共享线性表中的同一个分支处理信息。也即是,向量重排器011在执行多个并行的分支中的第一个分支之前,可以基于该第一分支生成一个新的分支处理信息。在该第一个分支执行完成之后,向量重排器011可以基于后续待执行的分支,更新该分支处理信息。在该多个并行的分支均执行完成之后,向量重排器011即可删除该分支处理信息。
示例的,参考图6中的(5),重排控制器0112在确定分支B执行完成后,由于向量函数中还包括与该分支B并行的分支C,因此可以将分支C确定为待执行的分支,并更新重排栈的栈顶。该更新后的栈顶中记录有分支C的分支处理信息:待执行的分支C的标识C,与该分支C并行的分支B的标识B,以及用于执行该分支C的向量元素的索引:4-7。
之后,重排控制器0112可以将该索引4-7指示的向量元素b、d、f和h写入寄存器0121,并可以将该分支C的第一标识C发送至向量控制器0123。向量控制器0123进而可以指示计算单元0122采用分支C处理该向量元素b、d、f和h。计算单元0122执行完成分支C后,可以将该向量元素b、d、f和h的执行结果写回寄存器0121,并且向量控制器0123可以向重排控制器0112发送指示信息,该指示信息用于指示已采用该分支C处理完成向量元素b、d、f和h。重排控制器0112进而可以基于该指示信息,指示重排缓存0111从寄存器0121中读取该执行结果。
步骤115、向量重排器在确定向量函数中并行的分支均执行完成之后,将向量元素的执行结果按照向量元素在第一输入向量中的初始排列顺序排列。
向量重排器011中的重排控制器0112在基于向量控制器0123发送的指示信息,确定向量函数中并行的分支均执行完成之后,可以根据对向量元素进行重排时记录的映射状态再次对重排单元0113的映射参数进行配置。该重排单元0113进而可以将重排缓存0111中存储的向量元素的执行结果,按照向量元素在第一输入向量中的初始排列顺序排列。
例如,如图6中的(6),重排单元0113可以将第一输入向量中8个向量元素的执行结果,按照初始排列顺序,即a至h的顺序排列,由此即可得到中间结果向量。该中间结果向量可以作为后续分支(例如分支D)的输入向量。
本申请实施例提供的方法,在并行的分支执行完成之后,即恢复各个向量元素的执行结果的排列顺序,从而可以及时删除该映射状态。由此,可以避免向量元素多次重排而导致需要在向量函数处理过程中记录大量的向量元素的映射状态的情况。
可选地,在本申请实施例中,该向量重排器011也可以在该向量函数包括的各个分支均执行完成之后,再将向量元素的执行结果按照向量元素在第一输入向量中的初始排列顺序排列。也即是,该向量重排器011和向量处理器012也可以基于重新排列后的第一输入向量,继续执行向量函数中后续的分支,直至所有分支均执行完成之后,再恢复排序。
例如,向量重排器011可以在后续执行的分支的分支处理信息中均记录该重新排列后的第一输入向量中各向量元素在重排缓存0111中的映射状态,以便在所有分支均执行完成之后,可以基于该映射状态恢复执行结果的排列顺序。
由于第一输入向量中各个向量元素之间无依赖关系,因此也可以在该向量函数全部执行完成之后,再恢复向量元素的执行结果的排序。并且,本申请提供的方法,通过将向量元素的执行结果恢复至初始排列顺序,可以确保最终得到的结果向量中各个向量元素能够与初始输入向量中的各个向量元素一一对应。
步骤116、向量重排器将该分支处理信息从线性表中删除。
向量重排器011中的重排控制器0112在完成对向量元素的执行结果的顺序恢复之后,可以将该分支处理信息从线性表中删除。并且,重排控制器0112可以在线性表中记录后续待执行的分支的分支处理信息。
例如,对比图6中的(5)和(6),重排控制器0112可以将重排栈的栈顶弹出。并且,参考图5,由于在并向的分支B和分支C均执行完成后,后续待执行的分支为分支D,因此如图6中的(6),重排控制器0112可以在线性表中记录该分支D的分支处理信息。该分支D的分支处理信息包括:分支D的第一标识,以及当前用于执行该分支D的向量元素的索引0-3。
在本申请实施例中,向量重排器011在检测到向量函数包括的所有分支均执行完成之后,可以将重排缓存0111中存储的输出向量写入至该第一存储器。其中,该输出向量中各个向量元素的排列顺序与从第一存储器中读取的初始输入向量中各个元素的初始排列顺序相同。
可选地,该向量函数中可能还存在分支嵌套的情况,即并行的多个分支中,某个分支还嵌套有多个并行的分支。例如参考图7,该向量函数包括并行的分支B和分支C,且该分支C还嵌套有并行的分支E和F。
对于分支嵌套的场景,若多个并行的分支中,目标分支还嵌套有多个并行的分支,则向量重排器011对第一输入向量中的向量元素进行重新排序后,还可以参考上述步骤109所示的方法,对该第一输入向量中用于执行该目标分支的向量元素再次进行重新排序。可选地,再次重排后的向量元素中,用于执行该目标分支所嵌套的每个分支的向量元素连续排列。
例如,参考图7和图8,假设目标分支为分支C,用于执行该分支C的向量元素b、d、f和h中,向量元素b和f用于执行分支E,向量元素d和h用于执行分支F,则向量重排器011可以对重排后的向量元素b、d、f和h再次进行重排。如图8所示,再次重排后的向量元素的排列顺序为:bfdh,其中,用于执行分支E的向量元素b和f连续排列,用于执行分支F的向量元素d和h连续排列。
可选地,向量重排器011在执行目标分支所嵌套的多个并行的分支之前,还可以在线性表中增加新的一项(即添加新增项),以记录该多个并行的分支的分支处理信息。向量重排器011在检测到该目标分支所嵌套的多个并行的分支均执行完成之后,再删除该新增项。其中,该线性表中的新增项中还可以记录有该第一输入向量中各向量元素所需执行的分支的分布状态,以及各向量元素在重排缓存中的映射状态。或者,该新增项中也可以仅记录该第一输入向量中用于执行该多个并行的分支的向量元素所需执行的分支的分布状态,以及用于执行该多个并行的分支的向量元素在重排缓存中的映射状态。
例如,参考图8,在执行分支E和F之前,重排控制器0112可以在重排栈中压入新的栈顶,该新的栈顶中可以记录有分支E的分支处理信息:分支E的标识E,用于执行该分支4的向量元素的索引4-5,以及与该分支E并行的分支F的标识F。并且,如图8中的(1)所示,该栈顶中还可以记录有用于表示第一输入向量中各向量元素所需执行的分支的分布状态的标识序列:BCBCEFEF,以及用于表示各向量元素在重排缓存0111中的映射状态的索引序列:02461537。或者,该栈顶中记录的标识序列还可以仅用于表示第一输入向量中向量元素b、d、f和h所需执行的分支的分布状态,即该标识序列可以为:EFEF。该栈顶中记录的索引序列也可以仅用于表示向量元素b、d、f和h在重排缓存0111中的映射状态,即该索引序列可以为:1537。上述索引序列中的初始索引是基于各个向量元素在重排缓存0111中的初始排列顺序确定的。
又或者,如图8中的(2)所示,该栈顶中记录的用于表示分布状态的标识序列可以为:----EFEF,该栈顶中记录的映射状态的索引序列可以为:01234657。其中,-表示对应的向量元素在当前的栈顶的控制期间不执行任何分支。该索引序列中的初始索引是基于向量元素在前一次重排后,在重排缓存0111中的排列顺序确定的。由于相比于前一次重排,本次重排后前4个向量元素的排列顺序不变,仅第6个向量元素和第7个向量元素的排列顺序交换,因此该索引序列中的前4位为0123,后4位为4657。
重排控制器0112在确定该分支E执行完成之后,可以将该栈顶的信息更新为分支F的分支处理信息。重排控制器0112在确定该分支F执行完成之后,即可将该栈顶弹出。
可选地,在本申请实施例中,向量函数的输入可以包括多个输入向量,该多个输入向量的数据长度相同。例如,该向量函数可以对多个输入向量执行加法或乘法操作。对于向量函数的输入包括多个输入向量的场景中,重排控制器0112可以在重排缓存0111中存储多个输入向量。对于其中每个输入向量,向量重排器011和向量处理器012均可以采用上述步骤101至步骤116所示的方法进行处理。并且,该多个输入向量可以共享同一个线性表。相应的,向量重排器011在执行重排操作时,可以对共享该线性表的多个输入向量均执行相同的重排操作。
本申请上述实施例均是以该向量处理器012为单核处理器为例进行的说明。当然,该向量处理器012也可以为多核处理器。
对于该向量处理器012为多核处理器的场景,作为一种可选的实现方式,该向量函数的计算装置01可以包括与该多个处理器核一一对应的多个向量重排器011。其中,每个向量重排器011能够与向量处理器012中对应的一个处理器核交互数据,以实现上述实施例提供的向量函数的处理方法。也即是,每个向量重排器011均能够与一个处理器核绑定,以便该向量重排器011仅用于与绑定的处理器核进行数据交互,由此实现上述实施例提供的向量函数的处理方法。
在该实现方式中,该向量函数的计算装置01还可以包括调度管理器。该调度管理器可以按照各个向量重排器011中重排缓存0111的数据长度,对待处理的输入向量进行切分,得到多个第一输入向量。然后调度管理器可以该多个第一输入向量分发至各个向量重排器011以进行后续处理。也即是,该调度管理器可以调度多个向量重排器011和多个处理器核,并行处理多个第一输入向量。
对于该向量处理器012为多核处理器的场景,作为另一种可选的实现方式,该向量函数的计算装置01可以仅包括一个向量重排器011,该向量重排器011能够与该向量处理器012中的各个处理器核交互数据,即该多个处理器核可以共享一个向量重排器011。在该实现方式中,该向量重排器011可以将读取到的输入向量划分为多个第一输入向量,每个处理器核可以处理其中一个第一输入向量,从而实现多个第一输入向量的并行处理。
或者,向量重排器011也可以无需对读取到的输入向量进行划分,而是可以指示该多个处理器核并行执行该向量函数中的不同分支。例如,对于向量函数中并行的分支B和分支C,向量重排器011可以指示其中一个处理器核处理该分支B,另一个处理器核处理该分支C。
应理解,本申请实施例提供的向量函数的处理方法的步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减。例如,步骤112可以在步骤111之前执行;步骤116可以在步骤115之前执行;步骤110和步骤116可以根据情况删除。任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
综上所述,本申请实施例提供了一种向量函数的处理方法,该方法可以根据预设规则对第一输入向量中的向量元素进行排序。由于该预设规则是根据向量函数所包括的各个分支的依赖关系设置的,因此可以确保排序后的向量元素的排列顺序与各个分支的依赖关系相关。进而可以确保按照排序后的向量元素执行向量函数的处理时,可以有效利用向量函数的处理装置的计算资源,提高计算资源的利用率。
并且,本申请实施例提供的方法,可以将用于执行同一个分支的向量元素连续排列,进而可以确保后续写入寄存器的向量元素均能够满足同一个分支的执行条件。也即是,可以确保采用向量函数的某个分支对寄存器中的各个向量元素进行处理后,该各个向量元素的执行结果均为有效的执行结果。由此不仅避免了计算资源的浪费,而且减少了向量函数中并行的分支重复执行的次数,从而有效提高了向量函数的执行效率。
又由于本申请实施例提供的方法中,该重排缓存的数据长度大于或等于访存总线的宽度,因此该重排缓存每次能够从第一存储器中连续读取到数据长度较长的输入向量。由此,有效减少了访存次数,提高了访存效率以及访存带宽的利用率。并且,由于该重排缓存每次读取到的输入向量的数据长度较长,有助于后续在出现分支分离时,能够确定出足够多的用于执行同一个分支的向量元素,进而提高向量函数的执行效率。
本申请实施例还提供了一种向量函数的处理装置,如图3所示,该向量函数的处理装置01包括:向量重排器011和向量处理器012。
该向量重排器011,用于获取第一输入向量,该第一输入向量包括向量元素。该向量重排器011的功能实现可以参考上述方法实施例中步骤101的相关描述。
该向量重排器011,还用于根据预设规则对该第一输入向量中该向量元素进行排序,该预设规则根据该向量函数的分支的依赖关系设置。其中,该向量重排器011的功能实现还可以参考上述方法实施例中步骤109的相关描述。
该向量处理器012,用于按照排序后的向量元素执行向量函数处理。该向量处理器012的功能实现可以参考上述方法实施例中步骤113的相关描述。
可选地,该向量函数包括无依赖关系,且并行的第一分支和第二分支;该预设规则包括:用于执行该第一分支的向量元素连续排列;和/或,用于执行该第二分支的向量元素连续排列。
可选地,该向量函数包括无依赖关系,且并行的第一分支和第二分支;该向量重排器011可以用于:将用于执行该第一分支的向量元素连续排列;和/或,将用于执行该第二分支的向量元素连续排列。例如,参考图3,该向量重排器011还包括重排单元0113,该重排单元0113可以用于对向量元素进行重新排列。
可选地,如图3所示,该向量处理器012可以包括寄存器0121;该第一输入向量的数据长度大于该寄存器0121的数据长度。
该向量重排器011,还可以用于在该根据预设规则对该第一输入向量中该向量元素进行排序之前,将该第一输入向量中的第一向量元素写入该寄存器0121,该第一向量元素的数据长度等于该寄存器0121的数据长度,其中,该寄存器0121用于存储待处理的向量元素。
例如,参考图3,该向量重排器011还可以包括重排缓存0111和重排控制器0112,该重排缓存0111可以用于存储该第一输入向量,该重排控制器0112可以用于将该第一输入向量中的第一向量元素写入该寄存器0121。该向量重排器011的功能实现可以参考上述方法实施例中步骤102的相关描述。
该向量处理器012,可以用于确定该第一向量元素所需执行的分支。例如,参考图3,该向量处理器012还包括向量控制器0123,该向量控制器0123可以用于确定寄存器0121中写入的第一向量元素所需执行的分支。该向量处理器012的功能实现可以参考上述方法实施例中步骤103的相关描述。
该向量重排器011,还用于若该第一向量元素所需执行的分支包括该第一分支和该第二分支,则将该第一输入向量中除该第一向量元素之外的第二向量元素写入该寄存器0121。例如,该向量重排器011中的重排控制器0112可以用于将该第二向量元素写入该寄存器0121。该向量重排器011的功能实现还可以参考上述方法实施例中步骤106的相关描述。
该向量处理器012,还用于确定该第二向量元素所需执行的分支。例如,该向量处理器012中的向量控制器0123可以用于确定该寄存器0121中写入的第二向量元素所需执行的分支。该向量处理器012的功能实现还可以参考上述方法实施例中步骤107的相关描述。
可选地,该第一输入向量可以为从该重排缓存0111中读取的中间结果向量,该中间结果向量是执行该向量函数中的第三分支得到的,该第一分支和该第二分支均依赖于该第三分支,该重排缓存0111用于存储该第一输入向量和该中间结果向量。
可选地,该向量函数的处理装置01还可以与第一存储器连接;该第一输入向量可以为从该第一存储器中读取的初始输入向量。
在本申请实施例中,如图1所示,该第一存储器可以为该向量函数的处理装置01与通用处理器02共享的共享缓存03。或者,如图2所示,该第一存储器可以为内存05。
可选地,该向量重排器011,还可以用于将排序后的向量元素写入该向量处理器012中的寄存器0121。例如,该向量重排器011中的重排控制器0112可以用于将排序后的向量元素写入该寄存器0121。
该向量处理器012,可以用于采用该向量函数的分支处理写入该寄存器0121中的向量元素。例如,参考图3,该向量处理器012还可以包括计算单元0122,该计算单元0122可以用于采用该向量函数的分支处理写入该寄存器0121中的向量元素。
可选地,该向量重排器011,还可以用于在该将排序后的向量元素写入寄存器0121之前,在线性表中记录分支处理信息,该分支处理信息包括待执行的分支的标识,以及用于执行该待执行的分支的向量元素的索引,其中,该线性表按照先进后出的方式存储分支处理信息。
例如,该向量重排器011中的重排控制器0112可以用于在线性表中记录分支处理信息。该向量重排器011的功能实现还可以参考上述方法实施例中步骤110的相关描述。
该向量重排器011,可以用于将排序后的向量元素中,该索引指示的向量元素写入寄存器0121。该向量重排器011的功能实现可以参考上述方法实施例中步骤111的相关描述。
相应的,该向量处理器012,可以用于采用该标识指示的分支处理写入该寄存器中的该向量元素。该向量处理器012的功能实现可以参考上述方法实施例中步骤113的相关描述。
该向量重排器011,还可以用于在该向量函数包括的并行的分支执行完成之后,将该分支处理信息从该线性表中删除。例如,该向量重排器011中的重排控制器0112可以用于将该分支处理信息从该线性表中删除。该向量重排器011的功能实现还可以参考上述方法实施例中步骤116的相关描述。
可选地,该向量重排器011,还可以用于在该向量函数包括的并行的分支执行完成之后,将该向量元素的执行结果按照该向量元素在该第一输入向量中的初始排列顺序排列。
或者,该向量重排器011,还可以用于在该向量函数执行完成之后,将该向量元素的执行结果按照该向量元素在该第一输入向量中的初始排列顺序排列。
例如,该向量重排器011中的重排单元0113可以用于将该向量元素的执行结果按照该向量元素在该第一输入向量中的初始排列顺序排列。该向量重排器011的功能实现还可以参考上述方法实施例中步骤115的相关描述。
综上所述,本申请实施例提供了一种向量函数的处理装置,该装置可以根据预设规则对第一输入向量中的向量元素进行排序。由于该预设规则是根据向量函数所包括的各个分支的依赖关系设置的,因此可以确保排序后的向量元素的排列顺序与各个分支的依赖关系相关。进而可以确保按照排序后的向量元素执行向量函数的处理时,可以有效利用向量函数的处理装置的计算资源,提高计算资源的利用率。
并且,本申请实施例提供的装置,可以将用于执行同一个分支的向量元素连续排列,进而可以确保后续写入寄存器的向量元素均能够满足同一个分支的执行条件。也即是,可以确保采用向量函数的某个分支对寄存器中的各个向量元素进行处理后,该各个向量元素的执行结果均为有效的执行结果。由此不仅避免了计算资源的浪费,而且减少了向量函数中并行的分支重复执行的次数,从而有效提高了向量函数的执行效率。
又由于本申请实施例提供的装置中,该重排缓存的数据长度大于或等于访存总线的宽度,因此该重排缓存每次能够从第一存储器中连续读取到数据长度较长的输入向量。由此,有效减少了访存次数,提高了访存效率以及访存带宽的利用率。并且,由于该重排缓存每次读取到的输入向量的数据长度较长,有助于后续在出现分支分离时,能够确定出足够多的用于执行同一个分支的向量元素,进而提高向量函数的执行效率。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的向量函数的处理装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
应理解的是,本申请实施例提供的向量函数的处理装置还可以用专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logic device,PLD)实现,上述PLD可以是复杂程序逻辑器件(complexprogrammable logical device,CPLD),现场可编程门阵列(field-programmable gatearray,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现上述方法实施例提供的向量函数的处理方法,当通过软件实现上述方法实施例提供的向量函数的处理方法时,该向量函数的处理装置中的各个模块也可以为软件模块。
本申请实施例还提供了一种处理器,该处理器包括可编程逻辑电路和/或程序指令,当该处理器运行时,可以用于实现上述方法实施例所提供的向量函数的处理方法。
本申请实施例还提供了一种计算机设备,参考图1和图2,该计算机设备包括:内存05,以及与该内存05连接的向量处理装置。如图1和图2所示,该向量处理装置可以为上述实施例所提供的向量函数的处理装置01,或者可以为上述实施例所提供的处理器。
可选地,如图1和图2所示,该计算机设备还可以包括:通用处理器02。
参考图1,该通用处理器02和该向量处理装置01可以集成设置,且该通用处理,02和该向量处理装置01可以通过共享缓存03与该内存05连接。
或者,参考图2,该通用处理器02可以独立于该向量处理装置01设置,且该通用处理器02也与该内存05连接。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该计算机可读存储介质在计算机上运行时,使得计算机执行如上述方法实施例中的步骤。
本申请实施例还提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述方法实施例中的步骤。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
以上所述,仅为本申请的可选实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (24)
1.一种向量函数的处理方法,其特征在于,所述方法包括:
获取第一输入向量,所述第一输入向量包括向量元素;
根据预设规则对所述第一输入向量中所述向量元素进行排序,所述预设规则根据所述向量函数的分支的依赖关系设置;
按照排序后的向量元素执行向量函数处理。
2.根据权利要求1所述的方法,其特征在于,所述向量函数包括无依赖关系,且并行的第一分支和第二分支;所述预设规则包括:用于执行所述第一分支的向量元素连续排列;和/或,用于执行所述第二分支的向量元素连续排列。
3.根据权利要求1所述的方法,其特征在于,所述向量函数包括无依赖关系,且并行的第一分支和第二分支;所述根据预设规则对所述第一输入向量中所述向量元素进行排序,包括:
将用于执行所述第一分支的向量元素连续排列;和/或,
将用于执行所述第二分支的向量元素连续排列。
4.根据权利要求2或3所述的方法,其特征在于,所述第一输入向量的数据长度大于寄存器的数据长度;在所述根据预设规则对所述第一输入向量中所述向量元素进行排序之前,所述方法还包括:
将所述第一输入向量中的第一向量元素写入所述寄存器,所述第一向量元素的数据长度等于所述寄存器的数据长度,所述寄存器用于存储待处理的向量元素;
确定所述第一向量元素所需执行的分支;
若所述第一向量元素所需执行的分支包括所述第一分支和所述第二分支,则将所述第一输入向量中除所述第一向量元素之外的第二向量元素写入所述寄存器;
确定所述第二向量元素所需执行的分支。
5.根据权利要求2至4任一所述的方法,其特征在于,
所述第一输入向量为从重排缓存中读取的中间结果向量,所述中间结果向量是执行所述向量函数中的第三分支得到的,所述第一分支和所述第二分支均依赖于所述第三分支,所述重排缓存用于存储所述第一输入向量和所述中间结果向量。
6.根据权利要求1至4任一所述的方法,其特征在于,用于执行所述方法的向量函数的处理装置与第一存储器连接;
所述第一输入向量为从所述第一存储器中读取的初始输入向量。
7.根据权利要求1至6任一所述的方法,其特征在于,所述按照排序后的向量元素执行向量函数处理,包括:
将排序后的向量元素写入所述寄存器;
采用所述向量函数的分支处理写入所述寄存器中的所述向量元素。
8.根据权利要求7所述的方法,其特征在于,在所述将排序后的向量元素写入寄存器之前,所述方法还包括:
在线性表中记录分支处理信息,所述分支处理信息包括待执行的分支的标识,以及用于执行所述待执行的分支的向量元素的索引,其中,所述线性表按照先进后出的方式存储分支处理信息;
所述将排序后的向量元素写入所述寄存器,包括:
将排序后的向量元素中,所述索引指示的向量元素写入所述寄存器;
所述采用所述向量函数的分支处理写入所述寄存器中的所述向量元素,包括:
采用所述标识指示的分支处理写入所述寄存器中的所述向量元素;
所述方法还包括:在所述向量函数包括的并行的分支执行完成之后,将所述分支处理信息从所述线性表中删除。
9.根据权利要求7或8所述的方法,其特征在于,所述按照排序后的向量元素执行向量函数处理,还包括:
在所述向量函数包括的并行的分支执行完成之后,将所述向量元素的执行结果按照所述向量元素在所述第一输入向量中的初始排列顺序排列。
10.根据权利要求7或8所述的方法,其特征在于,所述按照排序后的向量元素执行向量函数处理,还包括:
在所述向量函数执行完成之后,将所述向量元素的执行结果按照所述向量元素在所述第一输入向量中的初始排列顺序排列。
11.一种向量函数的处理装置,其特征在于,所述向量函数的处理装置包括:向量重排器和向量处理器;
所述向量重排器,用于获取第一输入向量,所述第一输入向量包括向量元素;
所述向量重排器,还用于根据预设规则对所述第一输入向量中所述向量元素进行排序,所述预设规则根据所述向量函数的分支的依赖关系设置;
所述向量处理器,用于按照排序后的向量元素执行向量函数处理。
12.根据权利要求11所述的装置,其特征在于,所述向量函数包括无依赖关系,且并行的第一分支和第二分支;所述预设规则包括:用于执行所述第一分支的向量元素连续排列;和/或,用于执行所述第二分支的向量元素连续排列。
13.根据权利要求11所述的装置,其特征在于,所述向量函数包括无依赖关系,且并行的第一分支和第二分支;所述向量重排器,用于:
将用于执行所述第一分支的向量元素连续排列;和/或,
将用于执行所述第二分支的向量元素连续排列。
14.根据权利要求12或13所述的装置,其特征在于,所述向量处理器包括寄存器;所述第一输入向量的数据长度大于所述寄存器的数据长度;
所述向量重排器,还用于在所述根据预设规则对所述第一输入向量中所述向量元素进行排序之前,将所述第一输入向量中的第一向量元素写入所述寄存器,所述第一向量元素的数据长度等于所述寄存器的数据长度,所述寄存器用于存储待处理的向量元素;
所述向量处理器,用于确定所述第一向量元素所需执行的分支;
所述向量重排器,还用于若所述第一向量元素所需执行的分支包括所述第一分支和所述第二分支,则将所述第一输入向量中除所述第一向量元素之外的第二向量元素写入所述寄存器;
所述向量处理器,还用于确定所述第二向量元素所需执行的分支。
15.根据权利要求12至14任一所述的装置,其特征在于,所述向量重排器包括重排缓存;
所述第一输入向量为从所述重排缓存中读取的中间结果向量,所述中间结果向量是执行所述向量函数中的第三分支得到的,所述第一分支和所述第二分支均依赖于所述第三分支,所述重排缓存用于存储所述第一输入向量和所述中间结果向量。
16.根据权利要求11至14任一所述的装置,其特征在于,所述装置与第一存储器连接;
所述第一输入向量为从所述第一存储器中读取的初始输入向量。
17.根据权利要求11至16任一所述的装置,其特征在于,所述向量重排器,还用于将排序后的向量元素写入所述向量处理器中的寄存器;
所述向量处理器,用于采用所述向量函数的分支处理写入所述寄存器中的所述向量元素。
18.根据权利要求17所述的装置,其特征在于,所述向量重排器,还用于在所述将排序后的向量元素写入寄存器之前,在线性表中记录分支处理信息,所述分支处理信息包括待执行的分支的标识,以及用于执行所述待执行的分支的向量元素的索引,其中,所述线性表按照先进后出的方式存储分支处理信息;
所述向量重排器,用于将排序后的向量元素中,所述索引指示的向量元素写入所述寄存器;
所述向量处理器,用于采用所述标识指示的分支处理写入所述寄存器中的所述向量元素;
所述向量重排器,还用于在所述向量函数包括的并行的分支执行完成之后,将所述分支处理信息从所述线性表中删除。
19.根据权利要求17或18所述的装置,其特征在于,所述向量重排器,还用于:
在所述向量函数包括的并行的分支执行完成之后,将所述向量元素的执行结果按照所述向量元素在所述第一输入向量中的初始排列顺序排列。
20.根据权利要求17或18所述的装置,其特征在于,所述向量重排器,还用于:
在所述向量函数执行完成之后,将所述向量元素的执行结果按照所述向量元素在所述第一输入向量中的初始排列顺序排列。
21.一种处理器,其特征在于,所述处理器包括可编程逻辑电路和/或程序指令,当所述处理器运行时,用于实现如权利要求1至10任一所述的方法。
22.一种计算机设备,其特征在于,所述计算机设备包括:内存,以及与所述内存连接的向量处理装置,所述向量处理装置为如权利要求11至20任一所述的向量函数的处理装置,或者为如权利要求21所述的处理器。
23.根据权利要求22所述的计算机设备,其特征在于,所述计算机设备还包括:通用处理器;
所述通用处理器和所述向量处理装置集成设置,且所述通用处理器和所述向量处理装置通过共享缓存与所述内存连接;
或者,所述通用处理器独立于所述向量处理装置设置,且所述通用处理器也与所述内存连接。
24.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,所述指令由处理器执行以实现如权利要求1至10任一所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010649625 | 2020-07-08 | ||
CN2020106496256 | 2020-07-08 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113918217A true CN113918217A (zh) | 2022-01-11 |
Family
ID=79231265
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010964520.XA Pending CN113918217A (zh) | 2020-07-08 | 2020-09-15 | 向量函数的处理方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113918217A (zh) |
-
2020
- 2020-09-15 CN CN202010964520.XA patent/CN113918217A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3832499B1 (en) | Matrix computing device | |
US10346507B2 (en) | Symmetric block sparse matrix-vector multiplication | |
US10235398B2 (en) | Processor and data gathering method | |
US8094157B1 (en) | Performing an occurence count of radices | |
CN103262058A (zh) | 利用simd进行冲突检测的机制 | |
CN107430628B (zh) | 具有直接数据传输机制的加速框架 | |
US7689541B1 (en) | Reordering data using a series of offsets | |
US10885115B2 (en) | Accessing an N-way linked list | |
US11308171B2 (en) | Apparatus and method for searching linked lists | |
US7624107B1 (en) | Radix sort algorithm for graphics processing units | |
JPWO2003091872A1 (ja) | 並列マージソート処理装置及び方法並びにプログラム | |
CN110609807B (zh) | 用于删除快照数据的方法、设备和计算机可读存储介质 | |
US9513923B2 (en) | System and method for context migration across CPU threads | |
US10067763B2 (en) | Handling unaligned load operations in a multi-slice computer processor | |
CN107391508B (zh) | 数据加载方法和系统 | |
US7093102B1 (en) | Code sequence for vector gather and scatter | |
JP7044118B2 (ja) | 並列ユニオン制御装置、並列ユニオン制御方法、および並列ユニオン制御用プログラム | |
WO2005106713A1 (ja) | 情報処理方法及び情報処理システム | |
CN113918217A (zh) | 向量函数的处理方法及相关设备 | |
CN116108914A (zh) | 用于神经网络中稀疏矩阵乘法的加速器 | |
CN114064123A (zh) | 指令处理方法、装置、设备及存储介质 | |
US7421453B2 (en) | Asynchronous linked data structure traversal | |
CN116561120B (zh) | 一种用于时序数据库的数据文件快速合并方法及系统 | |
CN111158886A (zh) | 用于优化操作系统任务调度的方法、装置和智能设备 | |
CN113448962B (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 |