CN114428936A - 针对矩阵-矩阵乘法分配处理线程 - Google Patents
针对矩阵-矩阵乘法分配处理线程 Download PDFInfo
- Publication number
- CN114428936A CN114428936A CN202110393705.4A CN202110393705A CN114428936A CN 114428936 A CN114428936 A CN 114428936A CN 202110393705 A CN202110393705 A CN 202110393705A CN 114428936 A CN114428936 A CN 114428936A
- Authority
- CN
- China
- Prior art keywords
- matrix
- dimension
- sub
- decomposition
- candidate
- 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
- 239000011159 matrix material Substances 0.000 title claims abstract description 304
- 238000012545 processing Methods 0.000 title claims abstract description 123
- 238000000354 decomposition reaction Methods 0.000 claims description 181
- 239000000872 buffer Substances 0.000 claims description 44
- 238000000034 method Methods 0.000 claims description 32
- 230000008569 process Effects 0.000 claims description 27
- 230000000116 mitigating effect Effects 0.000 description 37
- 238000005192 partition Methods 0.000 description 10
- 230000008901 benefit Effects 0.000 description 9
- 238000000638 solvent extraction Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 239000004065 semiconductor Substances 0.000 description 5
- 230000003044 adaptive effect Effects 0.000 description 4
- 238000012804 iterative process Methods 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
公开了针对矩阵‑矩阵乘法分配处理线程。一种装置,包括处理器和存储指令的存储器。指令当由处理器执行时,使得处理器沿着第一矩阵的第一维度和该矩阵的第二维度执行第一矩阵的线程化。线程化表示用于分配给乘法算法的处理线程的第一矩阵的块大小,乘法算法用于确定表示第一矩阵和第二矩阵的乘积的第三矩阵。块大小包括沿着第一维度的第一块大小和沿着第二维度的第二块大小。第二矩阵与第一矩阵共用第二维度。指令当由处理器执行时,使得处理器向乘法算法提供表示第一块大小和第二块大小的数据。
Description
技术背景
给定的计算机系统可以包含专门的数学库,该库提供程序以支持各种工程、数据挖掘、数字处理、数据分析和机器学习应用中的算术运算。一个这样的程序可以实现广义矩阵-矩阵乘法(GEMM)算法的一个版本,用于执行矩阵-矩阵乘法。对于一些应用,矩阵-矩阵乘法所涉及的矩阵可能相对较大(例如,给定的矩阵可能具有数万或数十万的行和列,或者更多),导致每个矩阵-矩阵乘法的相对大量的浮点乘法运算。
附图说明
图1是根据示例实施方式的计算机系统的示意图。
图2是描绘由根据示例实施方式的图1的计算机系统的线程分解引擎和争用缓解引擎使用的进程的流程图。
图3是根据示例实施方式的广义矩阵-矩阵乘法(GEMM)算法的嵌套处理循环的图示。
图4是根据示例实施方式的由K组处理线程进行的矩阵-矩阵乘法处理的图示。
图5A和5B示出了根据示例实施方式的执行自适应K维度线程化的进程的流程图。
图6是描绘根据示例实施方式的确定用于处理线程子循环的子块大小的进程的流程图。
图7是描绘根据示例实施方式的确定是否推荐使用本地临时缓冲器以缓解处理线程争用的进程的流程图。
图8是根据示例实施方式的存储机器可执行指令的非瞬时性存储介质的图示,机器可执行指令当由机器执行时使得机器提供表示分解的数据,以用于处理线程分配。
图9是根据示例实施方式的装置的示意图,该装置包括处理器,该处理器提供表示用于通过乘法算法进行线程化的块大小的数据。
图10是描绘根据示例实施方式的使矩阵相乘的进程的流程图。
具体实施方式
可以在具有一个或多个多核中央处理单元(CPU)半导体封装(或“芯片”)的计算机系统中执行两个矩阵的乘法(在本文中称为“矩阵-矩阵乘法”或“矩阵乘法”)。CPU半导体封装可以包含多个可访问本地片上存储器的CPU处理内核。此外,CPU半导体封装可以采用非统一内存访问(NUMA)架构。一般来说,NUMA架构认识到处理节点对本地存储器的访问时间比对非本地存储器的访问时间快。因此,在NUMA架构中,处理核可以根据NUMA域进行分组,诸如每个NUMA域的处理核使用本地存储器访问来执行它们的大部分计算。NUMA域可以具有一个或多个缓存级,使得通过将最近访问的数据存储在更快的缓存存储器中,使得能够更加有效地访问本地片上存储器。
对于矩阵-矩阵计算,计算机系统可以采用广义矩阵-矩阵乘法(GEMM)算法,该算法依赖于(在对应NUMA节点和套接字上的)不同的处理线程,以用于执行乘法的不同部分。矩阵-矩阵乘法可涉及使相当大的矩阵相乘,该矩阵包含数万、或者数十万(或者更多)的行和列。
为了适应这种计算量大的运算,可以使用称为“线程化”的进程以在计算机系统的处理线程之间分配矩阵-矩阵乘法处理工作量的不同部分。在此情况下,“处理线程”(或“线程”)指的是被分配给计算机系统的处理核的机器可执行指令的单元。可以通过被分配给处理线程的处理核并行(即,同时)执行处理线程。
在本公开的背景下,“线程化”指的是将矩阵-矩阵乘法的处理工作量分配给计算机系统的不同处理线程。线程化可以例如,对矩阵-矩阵乘法中涉及的输入矩阵进行分区,并将所得的分区分配给相应处理线程。
一种类型的线程化是“M/N”线程化,其中沿着M维度和N维度执行矩阵分区,以形成对应M×N子矩阵或块,这些子矩阵或块被分配给不同的处理线程。在本文中,“M维度”指的是矩阵-矩阵乘法的输入矩阵A的行维度,“N维度”指的是矩阵-矩阵乘法的输入矩阵B的列维度,矩阵-矩阵乘法的定义如下:A×B=C,其中“C”表示输出矩阵,或者矩阵-矩阵乘法的结果。因此,输出矩阵C的维度为M×N,或M行乘N列。输入矩阵A和输入矩阵B共用公共维度,该公共维度在本文中称为“K维度”。更具体地,K维度是输入矩阵A的列维度和输入矩阵B的行维度。
使用M/N线程化的挑战是对应于子矩阵的结果数据单元可能太小而不能有效利用缓存(例如,CPU的最后一级缓存(LLC)的缓存线边界)。因此,由于缓存未充分利用,可能没有足够的缓存数据以摊销从主系统存储器移动数据的成本,导致矩阵-矩阵乘法的处理较慢。
根据本文所描的示例实施方式,在K维度,即输入矩阵共用的维度上执行线程化。更具体地,根据示例实施方式,具有自适应K维度分块引擎的线程分解(在本文称为“线程分解引擎”)向GEMM算法提供处理线程分配。相应子矩阵或子块按大小排列以提高缓存存储器利用率,并且一般地,减少矩阵-矩阵乘法的处理时间。根据示例实施方式,线程分解引擎基于二维矩阵分区将处理线程分配给子矩阵或块,其中一个维度是K维度,另一个维度或者是M维度或者是N维度。
本文所描的基于K维度的线程化可以是两种形式中的一种:“M/K线程化”,指的是将处理线程分配给通过沿着M维度和K维度分区而得到的各自矩阵块的线程化;以及“N/K线程化”,指的是将处理线程分配给沿着N维度和K维度进行矩阵分区而得到的矩阵块的线程化。M/K或N/K处理线程分配导致更接近或对应于最优缓存块大小的块大小,即,与M/N线程化相比,在执行矩阵-矩阵乘法时导致更多缓存命中和更好利用缓存存储器的块大小。此外,根据示例实施方式,线程分解引擎以考虑最优缓存块大小的自适应方式沿着K维度执行分区。
还如本文所述,根据示例实施方式,争用缓解引擎向GEMM算法提供进一步的信息,这在处理矩阵-矩阵乘法时减少(或者消除)了处理线程之间的存储器争用。更具体地,根据示例实施方式,争用缓解引擎进一步沿着M维度和/或N维度进行细分或分区,以创建输出矩阵C的每个M×N块的子块。每个处理线程可以在相应子块上“子循环”。作为子块和子循环的结果,可以减少“K组”处理线程之间的存储器资源争用。在此情况下,“K组”处理线程指的是对输出矩阵C的给定的M×N块做出贡献的所有处理线程。
此外,根据示例实施方式,作为减少存储器资源争用的进一步措施,争用缓解引擎建议K组处理线程是否应各自使用本地临时缓冲器(即,“暂存器”缓冲器)以确定输出矩阵C的相应M×N块的结果。如果K组处理线程使用本地临时缓冲器,那么K组的每个处理线程使用本地临时缓冲器以确定对输出矩阵C的M×N块的贡献,并且来自本地临时缓冲器的贡献然后可以通过添加更新被转移到输出矩阵C的最终输出缓冲器。
参考图1,作为更具体的示例,根据一些实施方式,计算机系统100可以包括GEMM引擎110。在此情况下,“GEMM引擎110”表示软件驱动的引擎,其中多个并行处理线程112共同地应用GEMM算法以执行矩阵-矩阵乘法。结合图1参考图2,对于本文所述的示例实施方式,矩阵-矩阵乘法指的是输入矩阵A 210和输入矩阵B 214的乘法,以确定输出矩阵C 220。换言之,GEMM引擎110确定由以下矩阵-矩阵乘法描述的乘积:A×B=C。
输入矩阵A 210具有沿着行维度M的行(即,由M索引索引的M行)和沿着K维度的列(即,由K索引索引的K列)。输入矩阵B 214具有沿着K维度的行(即,由K索引索引的K行)和沿着N维度的列(即,由N索引索引的N列)。这样,输入矩阵A210和输入矩阵B 214共用公共维度K。输出矩阵C 220具有沿着M维度的行(即,由M索引索引的M行)和沿着N维度的列(即,由N索引索引的N列)。
为了配置GEMM引擎110(图1)以执行矩阵-矩阵乘法,GEMM引擎110接收数据250,根据示例实施方式,数据250表示分配处理线程分配,并且如本文进一步所述,可以表示进一步增强矩阵-矩阵乘法处理的其他参数。根据示例实施方式,数据250的至少一部分是由具有自适应K线程化引擎114(在本文中称为“线程分解引擎114”)的线程分解引擎提供。如本文所述,线程分解引擎114使用某些标准来分析矩阵210、214和220的行和列大小,以提供表示用于处理线程112的分配的矩阵分区的参数(在本文中称为“BSM”、“BSN”和“BSK”)。根据示例实施方式,沿着K维度以及沿着或者N维度或者M维度执行分区。
BSM参数(在本文中称为“BSM块大小”)表示每个矩阵分区或块在M维度上的行数。BSN参数(在本文中称为“BSN块大小”)表示每个矩阵块沿着N维度的列数。BSK参数(在本文中称为“BSK块大小”)表示矩阵分区或块沿着K维度的行数/列数(取决于是输入矩阵A 210还是输入矩阵B 214)。
根据示例实施方式,对于给定的矩阵-矩阵乘法,线程分解引擎114执行M/K线程化(对应于沿着M维度和K维度的矩阵分区)或者N/K线程化(对应于沿着N维度和K维度的矩阵分区)以确定被分配给处理线程112的矩阵块。对于N/K线程化,线程分解引擎114将输入矩阵B 214分区成大小为BSK×BSN的块(即,每个块具有BSK行乘BSN列的大小);并且输入矩阵B 214的每个BSK×BSN块被分配给不同的对应处理线程112。更具体地,线程分解引擎114提供以下块大小作为N/K线程化的结果:表示每个矩阵块沿着N维度的列数的BSN块大小;表示每个矩阵块沿着K维度的行数/列数的BSK块大小;和默认的BSM块大小,因为用于工作共用的分区不会出现在用于N/K线程化的M维度中。每个处理线程112处理与其分配到的输入矩阵B 214的BSK×BSN块相关的矩阵-矩阵乘法的运算,以得到输出矩阵220的相应BSM×BSN块。
对于M/K线程化,线程分解引擎114将输入矩阵A 210分区成块,并且输入矩阵A210的每个BSM×BSK块被分配给不同的对应处理线程112。更具体地,线程分解引擎114为M/K线程化提供以下块大小:表示每个矩阵块沿着M维度的行数的BSM块大小;表示每个矩阵块沿着K维度的行数/列数的BSK块大小;和默认的BSN块大小,因为用于工作共用的分区不会出现在用于M/K线程化的N维度中。每个处理线程112处理与其分配到的输入矩阵A 210的BSM×BSK块相关的矩阵-矩阵乘法的运算,以得到输出矩阵220的相应BSM×BSN块。
作为更具体的示例,线程分解引擎114可以应用N/K线程化以确定16个处理线程112的分配。对于该示例,矩阵可以具有以下维度:输入矩阵A 210可以具有沿着M维度的96行和沿着K维度的3840列,由“(96×3840)”的M×K维度表示;输入矩阵B214可以具有(3840×192)的K×N维度;并且输出矩阵C 220可以具有(96×192)的对应M×N维度。如本文进一步所述,线程分解引擎114可估算这些维度,并且确定BSM、BSN和BSK块大小分别为96、48和960。这样,该示例的16个处理线程112被分配给输入矩阵B的16个48×960块。
结合图1参考图3,根据一些实施方式,GEMM引擎110对矩阵-矩阵乘法的处理遵循嵌套的处理循环。在这方面,图3描绘了外部mc循环304,其指的是在M维度的处理。对于M/K线程化,当处理线程112分别在内部相应kc循环308和内部nc循环312中的K维度和N维度上索引时,给定的处理线程112处理其分配到的BSM×BSK块的运算。对于N/K线程化,当处理线程112分别在相应mc循环304和kc循环308中的M维度和K维度上索引时,给定的处理线程112处理其分配到的BSN×BSK块的运算。
图3还描绘了以下三个嵌套的最内部循环,它们是GEMM引擎110的宏内核的一部分:mr循环324、nr循环328和kr循环332。在循环324、328和332中,对于输出矩阵C 220(图2)的给定的BSM×BSN块,处理线程112分别在M维度、N维度和K维度上迭代。子循环在GEMM引擎110的宏内核之外引入了两个处理循环:对应于在M维度上的子循环的m_sub循环316和对应于在N维度上的子循环的n_sub循环320。更具体地,结合图1参考图2,根据示例实施方式,计算机系统100的争用缓解引擎118将BSM和BSN块大小细分成相应子矩阵或子块,分别具有BSMsub和BSNsub维度。GEMM引擎110包括以下嵌套的循环以执行子循环:m_sub循环316以在每个矩阵块的BSMsub大小的子块上子循环,以及n_sub循环320以在每个矩阵块的BSNsub大小的子块上子循环。根据示例实施方式,BSMsub和BSNsub可分别是BSMR和BSNR。如本文进一步所述,根据示例实施方式,当处理线程112共同地处理输出矩阵C 220的BSM×BSN块时,该子循环可以防止K组处理线程112的存储器争用。
除了提供BSMsub和BSNsub大小作为数据250的一部分之外,根据示例实施方式,争用缓解引擎118可以向GEMM引擎110提供关于是否使用临时本地输出缓冲器的建议。在此情况下,“临时输出缓冲器”指的是“暂存器”缓冲器,其可由共同地处理输出矩阵C 220的特定BSM×BSN块的K组处理线程中的每个处理线程使用。代替K组处理线程112中的每个处理线程112对最终结果缓冲器中的BSM×BSN块进行更新,处理线程112代替地更新临时输出缓冲器。此外,根据示例实施方式,临时本地输出缓冲器与缓存边界最优地对齐。当K组处理线程112已经完成输出矩阵C 220的BSM×BSN块的处理并且临时本地输出缓冲器存储了输出矩阵的子块的完整结果时,那么临时缓冲器的内容可以被转移(例如,经由GEMM引擎110的更新例程和添加更新)到矩阵C 220的最终输出缓冲器。
重新参考图1,根据许多可能的实施方式,GEMM引擎110、线程分解引擎114和争用缓解引擎118可以由若干种不同的计算机架构中的任何一种来提供。对于图1的示例实施方式,计算机系统100包括一个或多个中央处理单元(CPU)102(例如,CPU半导体封装或“芯片”),其中每个CPU 102包括一组处理核101。根据一些实施方式,给定的CPU 102上的若干处理核101可以形成相应NUMA域;并且每个CPU102可以有多个NUMA域。
根据进一步的示例实施方式,可以使用除了中央处理器处理核之外的处理核。以这种方式,根据进一步的实施方式,处理核101可以是图形处理单元(GPU)核、现场可编程门阵列(FPGA)、节点加速器核等。
根据示例实施方式,计算机系统100可以由一个或多个物理机器形成,其中每个物理机由实际软件和实际硬件制成或形成。以这种方式,根据示例实施方式,每个物理机器可以包括一个或多个CPU 102和存储器。物理机器的存储器共同地通过存储器106在图2中表示。作为示例,存储器106可以存储机器可执行指令108,当由CPU 102执行时,机器可执行指令108形成本文所述的一个或多个软件组件,诸如GEMM引擎110、线程分解引擎114和争用缓解引擎118。
根据示例实施方式,存储器106可以存储数据,诸如,作为示例,表示输入矩阵A的数据;表示输入矩阵B的数据;表示输出矩阵C的中间和最终结果的数据;表示临时本地输出缓冲器的数据;表示本文所述的参数的数据,诸如块大小、子块大小等;表示处理线程112的块分配的数据;等等。
通常,存储器106是非瞬时性存储介质,其可以由半导体存储设备、基于忆阻器的存储设备、磁存储设备、相变存储设备、对应于这些存储技术中的一种或多种的存储设备的组合等形成。此外,存储器106可以是易失性存储器、非易失性存储器或不同存储类型的组合,诸如易失性存储器和/或非易失性存储器。
计算机系统100的物理机器可以采取许多不同的形式,诸如一个或多个机架安装模块、一个或多个服务器刀片、桌面型计算机、膝上型计算机、平板计算机、智能手机、可穿戴计算机等等。取决于特定实施方式,GEMM引擎110、线程分解引擎114和争用缓解引擎118可以由整个物理机器、多个物理机器或其一部分形成。此外,根据一些实施方式,GEMM引擎110、线程分解引擎114和争用缓解引擎118可以包括和/或对应于实际物理机器的一个或多个虚拟组件或一个或多个虚拟环境,诸如一个或多个虚拟机、一个或多个容器等。
根据示例实施方式,线程分解引擎114执行图5A和5B所描绘的进程500,用于确定或者BSM和BSK块大小(对于M/K线程化)或者BSN和BSK块大小(对于N/K线程化)。通常,块大小的确定具有两个部分:第一部分,其中线程分解引擎114确定候选矩阵分解(框502)和BSK块大小(框504);和第二部分(即,进程500的剩余部分),其中线程分解引擎114执行迭代过程,该迭代过程估算候选矩阵分解,用于确定剩余BSM块大小(对于M/K线程化)或BSN块大小(对于N/K线程化)。
现在转到具体示例,根据一些实施方式,线程分解引擎114可以如下确定BSK块大小(按照图5A的框504)。首先,线程分解引擎114最初如下定义BSM、BSN和BSK块大小(其中下标“init”表示初始状态):
BSMinit=min(BSMopt,M) 等式1
BSNinit=min(BSNopt,N)和 等式2
BSKinit=min(BSKopt,K) 等式3
在这些等式中,“BSMopt”、“BSNopt”和“BSKopt”分别表示BSM、BSN和BSK块大小的最优值;“min()”表示最小函数,即,选择多个值的元组中的最小值的函数。在这种情况下,最优块大小指的是对应于与缓存行边界对齐或几乎对齐的数据单元的行数或列数。因此,根据示例实施方式,最优块大小可以例如是缓存架构(例如,最后一级缓存(LLC)的架构)和矩阵条目的大小的函数。
对于M/K线程化,线程分解引擎114可以确定用于推导BSK块大小的几个参数。这些参数包括N维度中BSN大小的块的数量(称为“nblk”);M维度中BSMR大小的块的称为“mblk_max”的数量,其中“BSMR”表示输出矩阵C的最小可能的子块大小(即,M行);重新确定的BSM块大小;和M维度中BSM大小的块的数量(称为“mblk”):
nblk=ceil(N/BSN) 等式4
mblk_max=ceil(M/BSMR) 等式5
BSM=min(BSMinit,ceil(mblk_max/div_m)*BSMR),和 等式6
mblk=ceil(M/BSM) 等式7
在这些等式中,ceil()表示应用上限或极限函数;“div_m”表示M维度中的线程的数量;“N”表示输入矩阵B的列数;而“M”表示输入矩阵A的行数。
根据示例实施方式,优选M块的数量是M维度中线程的数量的整数倍;并且根据该优选,线程分解引擎114估算以下等式:
if(mblk>div_m)mblk=ceil(mblk/div_m)*div_m。
然后线程分解引擎如下确定K维度中线程的相应数量(在本文中称为“div_k”):
div_k=maxth/div_m 等式8
其中“maxth”表示处理线程的总数。
对于N/K线程化,根据示例实施方式,线程分解引擎114如下确定mblk数:
mblk=ceil(M/BSM) 等式9
此外,根据示例实施方式,对于N/K线程化,线程分解引擎114如下确定N维度中BSNR大小的块的数量(在本文中称为“nblk_max”),其中“BSNR”表示沿着输出矩阵C的N维度的最小可能的子块大小;BSN区块大小;和N维度中BSN大小的块的数量(在本文中称为“nblk”):
nblk_max=ceil(N/BSNR) 等式10
BSN=min(BSNinit,ceil(nblk_max/div_n)*BSNR,以及 等式11
nblk=ceil(N/BSN) 等式12
根据示例实施方式,优选N块的数量是N维度中线程的数量的整数倍;并且因此,根据示例实施方式,线程分解引擎114估算以下等式:
If(nblk>div_n)nblk=ceil(nblk/div_n)*div_n。
然后,根据示例实施方式,线程分解引擎114如下确定K维度中线程化的div_k数:
div_k=maxth/div_n 等式13
根据示例实施方式,不管使用M/K线程化还是N/K线程化,线程分解引擎114动态地调整BSK块大小的值,用于优化效率。对于不合适的/复制的GEMM内核(即,将输入矩阵A和B复制到用于连续存储器访问的缓冲器中的GEMM内核),线程分解引擎114如下确定输入矩阵A和B的打包缓冲器的最优驻留大小:
Packing Buffer Size=BSKopt*(BSMopt+BSNopt) 等式14
使用打包缓冲器的最优驻留大小,线程分解引擎114可以如下确定最大可能的BSK块大小:
BSK=BSKopt*(BSMopt+BSNopt)/(BSM+BSN) 等式15
BSK=ceil(BSK/BSKR)*BSKR 等式16
BSK=min(BSK,K)和 等式17
kblk=ceil(K/BSK) 等式18
其中“BSKR”表示在宏内核中最内部的K循环324(图3)的展开因子。展开是循环转换技术,通过在每次循环行程中完成多次迭代来提高性能,并且“展开因子”指的是每次循环行程的迭代次数。
根据示例实施方式,线程分解引擎114然后可以如下调整BSK块大小。对于M/K线程化,线程分解引擎114估算以下等式:
if(div_k>kblk)AND if(nblk*kblk%div_k!=0)kblk=div_k。
如果上述等式为真,那么根据示例实施方式,线程分解引擎114使用如上所述确定的最优BSK,因为有足够的N块用于相等的工作分配。
对于N/K线程化,确定以下等式:
If(div_k>kblk)AND if(mblk*kblk%div_k!=0)kblk=div_k。
如下所述,如果等式为真,那么线程分解引擎114计算另一个BSK块大小。否则,可以使用最优BSK块大小,因为有足够的M块用于相等的工作分配。
如果线程分解引擎114确定不能使用最优BSK块大小,那么,根据示例实施方式,线程分解引擎114如下重新计算BSK块大小:
BSK=min(BSK,ceil(ceil(K/BSKR)/kblk)*BSKR) 等式19
线程分解引擎114然后可以如下确定K维度中线程的数量:
kblk=ceil(K/BSK) 等式20
仍然参考图5A,根据示例实施方式,线程分解引擎114使用在M维度和K维度(对于M/K线程化)之间或者在N维度和K维度(对于N/K线程化)之间划分的线程的数量的所有可能除数来确定(框502)候选矩阵分解。线程分解引擎114基于BSM、BSN和BSK块大小来确定(框508)每个候选矩阵分解的条件值。注意到,根据示例实施方式,如果使用了M/K线程化,那么使用默认的BSN块大小;如果使用了N/K线程化,那么使用默认的BSM块大小。
按照框512,线程分解引擎114归一化条件值。在此情况下,“归一化”特定条件值指的是确定每个候选矩阵分解的条件值的最大值,并基于该最大值归一化条件值。这反过来有效地加权特定条件值类别的条件值。线程分解引擎114然后按照框516基于归一化条件值确定每个候选矩阵分解的适应度值(例如,线程分解引擎114将经归一化的条件值加在一起)。
参考图5B,根据示例实施方式,线程分解引擎114基于候选矩阵分解的相应个体适应度值对候选矩阵分解分类或排序(框520)。例如,根据一些实施方式,线程分解引擎114根据候选矩阵分解的适应度值以升序对候选矩阵分解排序,使得具有最低相应适应度值的候选矩阵分解位于排序的顶部,即,是排序最高的候选矩阵分解。
线程分解引擎114然后使用排序的候选矩阵分解来执行迭代过程(例如,框524和528中阐述的迭代过程),用于基于排序选择特定候选矩阵分解。更具体地,根据示例实施方式,线程分解引擎114基于排序选择(框524)下一个候选矩阵分解。例如,对于初始选择,线程分解引擎114选择排序最高的候选矩阵分解。如本文进一步所述,线程分解引擎114然后基于一个或多个选择标准来确定(判定框528)该候选矩阵分解是否是可接受的。如果候选矩阵分解是不可接受的,那么,根据示例实施方式,线程分解引擎114返回到框524,以选择排序次高(相对于上一次的选择)的下一个候选矩阵分解,并继续执行判定框528,以确定该候选矩阵分解是否是可接受的。
基于一个或多个选择标准,线程分解引擎114最终选择可接受的特定候选矩阵分解,并且按照框532,然后向GEMM引擎110传送表示所选矩阵分解的块大小的数据。
作为线程分解引擎114可以用来确定相应适应度值的条件值的示例(按照图5A的框508、512和516),根据示例实施方式,对于M/K线程化,线程分解引擎114可以确定候选矩阵分解的以下七个条件值中的一个或多个(或全部),用于确定适应度值:
条件值一:K维度上子块的数量与最小的这样的值的绝对差(优选使用BSK设置的块的数量)。
条件值二:BSN和BSK块大小的绝对差。
条件值三:M维度上线程的数量与可用于共用打包的输入矩阵B的可分解块的最大数之比的归一化上限计算。
条件值四:M维度上局部大小除以BSM块大小的余数。
条件值五:BSMopt和BSM块大小的差。
条件值六:如果BSM块大小严格地小于BSMinit块大小,BSM和BSMinit块大小的差。
条件值七:如果BSK块值不等于BSKinit块大小,则加1;如果BSM块大小不等于BSMinit块大小(严格不等式),也加1。
根据示例实施方式,对于N/K线程化,线程分解引擎114可以确定候选矩阵分解的以下八个条件值中的一个或多个(或全部),用于确定适应度值:
条件值一:N维度上子块的数量与最小的这样的值的绝对差(优选使用BSN设定的子块的数量)。
条件值二:BSN和BSK块大小的绝对差。
条件值三:如果N维度上线程的数量是每个NUMA节点的处理核的数量的整数倍,则为0,否则为1。
条件值四:如果N维度上线程的数量小于或等于每个NUMA节点的处理核的数量,则为0,否则为1。
条件值五:N维度上线程的数量与每个LLC的处理核的数量的绝对差。
条件值六:N维度上线程的数量与可用于共用打包的输入矩阵A的可分解块的最大数之比的归一化上限计算。
条件值七:BSN块大小和BSNinit块大小的差,如果该差严格地小于BSNinit块大小,。
条件值八:如果BSK块大小不等于BSKinit块大小,则加1,如果BSN块大小不等于BSNinit块大小(严格不等式),也加1。
根据示例实施方式,线程分解引擎114随后在所有可能的候选矩阵分解中归一化(相对于最大值)每个条件值,以提供相应加权贡献;并且然后,根据示例实施方式,线程分解引擎114对每个候选矩阵分解的条件值求和,以确定候选矩阵分解的相应单个适应度值。接下来,线程分解引擎114以升序(例如,按照图5B的框520排序)对候选矩阵分解分类或排序,并且如果满足以下条件,选择具有最小相应适应度值的候选矩阵分解。
根据示例实施方式,对于M/K线程化,线程分解引擎114基于以下两个条件是否均满足确定特定候选分解(由排序识别)是否是可接受的(例如,执行图5B的判定框528):
条件一:K维度上线程的数量>1;和
条件二:BSK块大小小于或等于BSM块大小,或者ceil(BSN/BSNR)小于线程的总数。
根据示例实施方式,对于N/K线程化,如果以下两个条件值均满足,线程分解引擎114选择候选矩阵分解(由排序识别)是可接受的(例如,执行图5B的判定框528):
条件一:K维度上线程的数量>1;和
条件值二:BSK块大小小于或等于BSN块大小,或者ceil(BSM/BSMR)小于线程的总数。
如上结合图5A和5B所讨论,如果对于由排序识别的给定的候选矩阵分解,条件值不满足,那么选择下一个最高的候选矩阵分解,然后重新估算相应条件值。
图4是M/K线程化的示例图示400,并且具体地,图示了将输入矩阵A 210分区成相应块410,其中每个BSM×BSK块410被分配给特定处理线程112(图1)。注意到,尽管示例图示400将BSN块大小描绘为等于N(即,输入矩阵B 214的列数和输出矩阵C220的列数),但是根据进一步的示例实施方式,BSN块大小可以小于N。注意到,尽管在图4中将块410描绘成是正方形的,但是块410可以是矩形的,因为BSM和BSK块大小可以不同。特定K组处理线程112(诸如K组处理线程,其对应于图4中块410的行412的块410)共同地确定输出矩阵C 220的相应BSM×BSN块420。换言之,对应于行412的每个块410的处理线程计算输出矩阵C 220的BSM×BSN块420的一部分。例如,分配给例如行412的块410-1的处理线程112基于输入矩阵B 214的块410-1和块414-1执行矩阵乘法运算,以产生对输出矩阵C 220的块420的相应贡献。作为另外的示例,分配给块410-2的处理线程112基于输入矩阵B 214的块410-2和块414-2执行矩阵乘法运算,以产生对输出矩阵C 220的块420的另外的贡献。因为给定的K组中的处理线程112更新输出矩阵C的相同的共用BSM×BSN块,所以这些处理线程112可能存在存储器资源争用。
根据示例实施方式,争用缓解引擎118(图1)以允许给定的K组中的处理线程112通过访问较小的数据块来更有效地执行矩阵-矩阵乘法运算的方式,确定输出矩阵220的块在M维度和/或N维度上的最优分解。沿着M维度和/或N维度的进一步细分允许每个处理线程112在相应子块上“子循环”。因此,作为子循环的一部分,每个处理线程112根据图3的循环316和320一次一个地处理其相关联的子块。
图6示出了根据示例实施方式的由争用缓解引擎118用来进一步分解M维度和/或N维度的进程600。结合图1参考图6,根据示例实施方式,争用缓解引擎118通过考虑给定的K组中的线程的数量的所有除数来确定(框630)候选子矩阵分解。更具体地,根据示例实施方式,争用缓解引擎118可以确定(框634)每个候选子矩阵分解的一组条件值,并为确定每组条件值的适应度值。例如,根据示例实施方式,争用缓解引擎118可以基于以下条件值确定每个候选子矩阵分解的适应度值:
条件值一:如果BSMsub子块大小大于或等于BSNsub块大小(即,优选M维度大于N维度),则加1。
条件值二:如果BSNsub子块大小等于BSNopt块大小(即,优选使用N维度的最优缓存块大小),则加1。
按照框638,争用缓解引擎118可以基于相关联的条件值对候选子矩阵分解分类或排序(例如,基于从条件值确定的适应度值对子矩阵分解排序)。争用缓解引擎118然后可以基于排序选择(框642)子矩阵分解。例如,根据一些实施方式,争用缓解引擎118可以基于候选子矩阵分解的相应适应度值以降序对候选子矩阵分解排序,并且争用缓解引擎118然后可以选择如上从两个条件值确定的、具有最大相应适应度值的候选子矩阵分解。
争用缓解引擎118然后可以确定(判定框650)特定矩阵分解线程是否仅在K维度中,如果是,那么确定(判定框654)是否使用M/K线程化。对于M/K线程化(即,判决框654的“是”分支),争用缓解引擎118向GEMM引擎110传送(框662)表示仅在M维度上子循环的数据,其中M维度根据等于BSMR块大小的M维度子块大小(BSMsub)被细分。否则,如果线程化仅在K维度中发生,并且使用N/K线程化(判定框662的“否”分支),那么按照框656,争用缓解引擎118向GEMM引擎110传送表示仅在N维度上子循环的数据,其中N维度根据等于BSNR块大小的的N维度子块大小(BSNsub)。如果线程化发生在除了K维度之外的维度中(判定框650的“否”分支),那么按照进程600,争用缓解引擎118向GEMM引擎110传送(框668)表示BSNsub和BSMsub值的数据。
根据一些实施方式,争用缓解引擎118可以建议每个K处理线程组是否使用临时本地缓冲器以得到输出矩阵C的相应BSM×BSN块,使得当处理线程K组完成对该块的处理时,临时本地缓冲器的内容可以被转移到输出矩阵C的输出缓冲器。根据一些实施方式,本地临时缓冲器与缓存边界对齐,并且对临时本地缓冲器的更新本质上是添加的。
争用缓解引擎118可以执行图7所描绘的进程700,用于确定是否建议使用临时本地输出缓冲器。根据示例实施方式,进程700涉及如果满足双分支测试的两个分支,那么竞争缓解引擎118推荐使用临时本地输出缓冲器。否则,争用缓解引擎118不建议使用临时本地输出缓冲器。结合图1参考图7,根据示例实施方式,对于第一分支,争用缓解引擎118确定BSM块大小(判定框704)、BSN块大小(判定框708)或BSK块大小(判定框712)中的任何一个是否分别等于或大于最优块大小BSMopt、BSNopt和BSKopt。如果是,那么已经满足第一分支,并且对于第二分支,争用缓解引擎118确定(判定框720)K维度中的线程的数量是否小于预定阈值数(例如,阈值数“8”)。如果K维度中的线程的数量大于该预定阈值,那么根据示例实施方式,两个分支均已满足,并且争用缓解引擎118推荐使用本地临时缓冲器,并传送带有该推荐的数据(框724)。否则,如果任一分支不满足,那么根据示例实施方式,如框716所描绘,争用缓解引擎118向GEMM引擎110传送表示不使用本地临时输出缓冲器的数据。
重新参考图1,根据一些实施方式,GEMM引擎110可以具有一个或多个以下负载均衡特征。GEMM引擎110通过公平共用原则来调整合作地打包矩阵A和/或B任一的共用块的线程的数量,以帮助改善组同步。如果使用带有子循环的本地临时输出缓冲器,那么GEMM引擎110计算特定子块的GEMM解,并且在更新函数上使用非阻塞循环。如果GEMM引擎110使用没有子循环的本地临时输出缓冲器,那么GEMM引擎110计算GEMM解,然后立即调用特定子块的更新函数。如果GEMM引擎110使用没有本地临时输出缓冲器的子循环,那么在循环内,GEMM引擎110本地打包输入矩阵A或B,并等待锁定,以计算更新输出矩阵C的GEMM解。如果GEMM引擎110既不使用子循环也不使用本地临时输出缓冲器,那么GEMM引擎110等待锁定,以计算更新输出矩阵C的GEMM解。
作为线程分解引擎114和争用缓解引擎118的输出的具体示例,对于16个处理线程112,引擎114和118可以确定以下矩阵的块大小、子块大小和其他参数:矩阵A(192×3840)、矩阵B(3840×96)和矩阵C(192×96)。对于该示例,假设中央处理单元102具有64个处理核、4个NUMA域和4个处理核共用最后一级缓存(LLC)。对于该示例,还假设使用N/K线程化。
对于该示例,线程分解引擎114估算以下M×N×K候选分解:1×1×16、1×2×8、1×4×4、1×8×2和1×16×1,尽管1×16×1是无效的(因为在N维度中没有分区)。考虑到选择标准,线程分解引擎114选择1×1×16分解,因此线程化将仅在K维度上。对于该示例,线程分解引擎114选择BSM、BSN和BSK块大小为192/96/240。
对于该示例,争用缓解引擎118确定用BSMR大小的块在M维度上子循环。此外,对于该示例,争用缓解引擎118确定不推荐使用本地临时输出缓冲器。
作为另外的示例,对于上述示例计算机系统,线程分解引擎114和争用缓解引擎118可以处理以下矩阵:矩阵A(96×3840)、矩阵B(3840×192)和矩阵C(96×192)。对于该示例,假设使用N/K线程化。
对于该示例,线程分解引擎114估算以下候选M×N×K分解:1×1×16、1×2×8、1×4×4、1×8×2和1×16×1,虽然1×16×1是无效的(因为沿着N维度没有线程化或分解发生)。基于选择标准,线程分解引擎114选择1×4×4分解,使得线程化将在N维度和K维度上。对于该示例,线程分解引擎114选择BSM/BSN/BSK块为96/48/960。
对于该第二示例,争用缓解引擎118在M维度和N维度上子循环。此外,对于该第二示例,争用缓解引擎118建议使用本地临时输出缓冲器以提高效率。
参考图8,根据示例实施方式,非瞬时性存储介质800存储机器可读指令804,机器可读指令804当由机器执行时,使得机器访问表示第一矩阵的第一维度、第二矩阵的第二维度以及由第一矩阵和第二矩阵共用的第三维度的数据。指令804当由机器执行时,进一步使得机器确定第一矩阵的多个候选分解,其中候选分解沿着第一维度和第三维度相对彼此大小不同。指令804当由机器执行时,还使得机器确定多个候选分解中的每个候选分解的相关联的适应度值,并且基于适应度值选择多个候选分解中的候选分解,以提供所选择的候选分解。指令804当由机器执行时,进一步使机器提供表示所选择的候选分解的数据,以使得将处理线程分配给第一矩阵的子矩阵。处理线程基于第一矩阵和第二矩阵的乘法来确定第三矩阵。
参考图9,根据示例实施方式,装置900包括处理器910和存储指令908的存储器904。指令908当由处理器910执行时,使得处理器910沿着第一矩阵的第一维度和该矩阵的第二维度执行第一矩阵的线程化。线程化表示用于分配给乘法算法的处理线程的第一矩阵的块大小,乘法算法用于确定表示第一矩阵和第二矩阵的乘积的第三矩阵。块大小包括沿着第一维度的第一块大小和沿着第二维度的第二块大小。第二矩阵与第一矩阵共用第二维度。指令908当由处理器910执行时,使得处理器910向乘法算法提供表示第一块大小和第二块大小的数据。
参考图10,根据示例实施方式,技术1000包括至少一个硬件处理器,访问(框1002)表示第一矩阵、第二矩阵、第一块大小和第二块大小的数据。第一块大小表示第一矩阵沿着第一维度的子矩阵分解大小;第二块大小表示第一矩阵沿着第二维度的子矩阵分解大小。第二矩阵和第一矩阵共用第二维度。技术1000包括硬件处理器将第一矩阵和第二矩阵相乘(框1004)以确定第三矩阵。乘法包括基于第一块大小和第二块大小将处理线程分配给第一矩阵的子矩阵。
根据示例实施方式,沿着第三维度确定多个候选分解的块大小,使得多个候选分解根据块大小沿着第三维度各自被分解。具体优点是可以提高矩阵-矩阵乘法的处理效率。
根据示例实施方式,可以基于处理线程用来确定第三矩阵的缓存存储器的特征来确定块大小。具体优点是可以提高矩阵-矩阵乘法的处理效率。
根据示例实施方式,对于每个适应度值,确定相关联的候选分解的多个条件;并且基于多个条件来确定每个适应度值。具体优点是可以提高矩阵-矩阵乘法的处理效率。
根据示例实施方式,对于每个适应度值,对多个条件中的每个条件进行归一化,以提供多个经归一化的条件值。组合多个经归一化的条件值以确定适应度值。具体优点是可以提高矩阵-矩阵乘法的处理效率。
根据示例实施方式,对适应度值排序,以提供多个候选分解的相应排序。基于排序选择所选择的候选分解。具体优点是可以提高矩阵-矩阵乘法的处理效率。
根据示例实施方式,基于排序选择第一候选分解;并且确定第一候选分解不满足选择标准。基于排序选择除第一候选分解之外的第二候选分解;并且确定第二候选分解满足选择标准。第二候选分解被确定为所选择的候选分解。具体优点是可以提高矩阵-矩阵乘法的处理效率。
根据示例实施方式,所选择的候选分解对应于被细分为多个子矩阵的第三矩阵。每个子矩阵与一组进程相关联,并且确定多个子矩阵的子矩阵分解。提供表示子矩阵分解的数据,以使得每个处理线程基于子矩阵分解进行子循环。具体优点是可以提高矩阵-矩阵乘法的处理效率。
根据示例实施方式,基于所选择的候选分解的特点,确定是否推荐使用缓冲器来存储乘法的初步结果。例程使用来自存储在缓冲器中的内容的添加更新来更新第三矩阵。具体优点是可以提高矩阵-矩阵乘法的处理效率。
虽然本公开内容是针对有限数量的实施方式进行描述的,但是受益于本公开内容的本领域技术人员将从中理解许多修改和变化。所附权利要求旨在覆盖所有这些修改和变化。
Claims (20)
1.一种存储机器可读指令的非瞬时性存储介质,所述指令当由机器执行时,使得所述机器:
访问表示第一矩阵的第一维度、第二矩阵的第二维度以及由所述第一矩阵和所述第二矩阵共用的第三维度的数据,
确定所述第一矩阵的多个候选分解,其中所述候选分解沿着所述第一维度和所述第三维度相对彼此大小不同;
确定所述多个候选分解中的每个候选分解的相关联的适应度值;
基于所述适应度值,选择所述多个候选分解中的候选分解,以提供经选择的候选分解;以及
提供表示所述经选择的候选分解的数据,以使得将处理线程分配给所述第一矩阵的子矩阵,其中所述处理线程基于所述第一矩阵和所述第二矩阵的乘法来确定第三矩阵。
2.根据权利要求1所述的存储介质,其中,所述指令当由所述机器执行时,还使得所述机器确定所述多个候选分解的块大小,使得所述多个候选分解中的每个候选分解根据所述块大小沿着第三维度被分解。
3.根据权利要求2所述的存储介质,其中,所述指令当由所述机器执行时,还使得所述机器基于在所述第三矩阵的确定中由所述处理线程使用的缓存存储器的特征来确定所述块大小。
4.根据权利要求1所述的存储介质,其中,所述指令当由所述机器执行时,还使得所述机器:
对于所述适应度值中的每个适应度值:
确定所述相关联的候选分解的多个条件;以及
基于所述多个条件确定所述每个适应度值。
5.根据权利要求4所述的存储介质,其中,所述指令当由所述机器执行时,还使得所述机器:
对于所述每个适应度值:
归一化所述多个条件中的每个条件,以提供多个经归一化的条件值;以及
组合所述多个经归一化的条件值以确定所述每个适应度值。
6.根据权利要求1所述的存储介质,其中,所述指令当由所述机器执行时,还使得所述机器:
对所述适应度值排序,以提供所述多个候选分解的相应排序;以及
基于所述排序选择所述经选择的候选分解。
7.根据权利要求6所述的存储介质,其中,所述指令当由所述机器执行时,还使得所述机器:
基于所述排序,选择第一候选分解;
确定所述第一候选分解不满足选择标准;
基于所述排序,选择除所述第一候选分解之外的第二候选分解;
确定所述第二候选分解满足所述选择标准;以及
确定所述第二候选分解为所述经选择的候选分解。
8.根据权利要求1所述的存储介质,其中,所述经选择的候选分解对应于被细分为多个子矩阵的所述第三矩阵,其中所述多个子矩阵中的每个子矩阵与所述多个进程的一组进程相关联,并且所述指令当由所述机器执行时,还使得所述机器:
确定多个候选子矩阵分解,其中所述候选子矩阵分解沿着所述第一维度和所述第二维度相对彼此大小不同;
确定所述多个候选子矩阵分解中的每个候选子矩阵分解的相关联的第二适应度值;
基于所述第二适应度值,选择所述多个候选子矩阵分解中的候选子矩阵分解,以提供经选择的候选子矩阵分解;以及
提供表示所述经选择的候选子矩阵分解的数据,以使得所述处理线程的每个处理线程基于所述经选择的子矩阵分解进行子循环。
9.根据权利要求1所述的存储介质,其中,所述经选择的候选分解对应于被细分为多个子矩阵的所述第三矩阵,其中所述多个子矩阵中的每个子矩阵与所述多个进程的一组进程相关联,并且所述指令当由所述机器执行时,还使得所述机器:
确定所述多个子矩阵的子矩阵分解;以及
提供表示所述子矩阵分解的数据,以使得所述处理线程的每个处理线程基于所述子矩阵分解进行子循环。
10.根据权利要求1所述的存储介质,其中,所述指令当由所述机器执行时,还使得所述机器基于所述经选择的候选分解的至少一个特征以确定是否建议使用缓冲器来存储所述乘法的初步结果,其中,例程使用来自存储在所述缓冲器中的内容的添加更新来更新所述第三矩阵。
11.根据权利要求10所述的存储介质,其中,所述指令当由所述机器执行时,还使得所述机器基于以下中的至少一项确定是否推荐使用所述缓冲器:沿着所述第一维度的所述候选分解的第一块大小与沿着所述第一维度的第一缓存最优块大小的比较,沿着所述第二维度的所述候选分解的第二块大小与沿着所述第二维度的第二缓存最优块大小的比较,或者沿着所述第三维度的所述候选分解的第三块大小与沿着所述第三维度的第三缓存最优块大小的比较。
12.根据权利要求1所述的存储介质,其中:
所述第一矩阵包括M×K矩阵,所述第二矩阵包括K×N矩阵;
所述第一维度对应于所述M×K矩阵的M维度;
所述第二维度对应于所述K×N矩阵的N维度;
所述第三维度对应于所述M×K矩阵的K维度和所述K×N矩阵的K维度;
所述乘法包括(M×K)(K×N)矩阵乘法;以及
确定所述第一矩阵的所述多个候选分解包括M/K线程化。
13.根据权利要求1所述的存储介质,其中:
所述第二矩阵包括M×K矩阵,所述第一矩阵包括K×N矩阵;
所述第一维度对应于所述K×N矩阵的N维度;
所述第二维度对应于所述M×K矩阵的M维度;
所述第三维度对应于所述M×K矩阵的K维度和所述K×N矩阵的K维度;
所述乘法包括(M×K)(K×N)矩阵乘法;以及
确定所述第一矩阵的所述多个候选分解包括N/K线程化。
14.一种装置,包括:
处理器;以及
存储器,用于存储指令,所述指令当由所述处理器执行时,使得所述处理器:
沿着第一矩阵的第一维度和所述矩阵的第二维度执行所述第一矩阵的线程化,其中,所述线程化表示要分配给乘法算法的处理线程的所述第一矩阵的块大小,所述乘法算法用于确定表示所述第一矩阵和第二矩阵的乘积的第三矩阵,所述块大小包括沿着所述第一维度的第一块大小和沿着所述第二维度的第二块大小,并且所述第二矩阵与所述第一矩阵共用所述第二维度;以及
向所述乘法算法提供表示所述第一块大小和所述第二块大小的数据。
15.根据权利要求14所述的装置,其中,所述乘法算法包括广义矩阵-矩阵乘法(GEMM)算法。
16.根据权利要求14所述的装置,其中,所述指令当由所述处理器执行时,还使得所述处理器:
确定所述第二块大小;以及
估算候选矩阵分解,所述候选矩阵分解各自根据所述第二块大小沿所述第二维度被分解,其中,所述估算用于确定所述第二块大小。
17.根据权利要求14所述的装置,其中,所述线程化对应于所述第三矩阵被细分为多个子矩阵,其中,所述多个子矩阵中的每个子矩阵与所述多个线程中的一组线程相关联,并且所述指令当由所述处理器执行时,还使得所述处理器:
确定所述多个子矩阵的子矩阵分解;以及
提供表示所述子矩阵分解的数据,以使得所述多个线程中的每个线程基于所述子矩阵分解进行子循环。
18.根据权利要求14所述的装置,其中,所述指令当由所述处理器执行时,还使得所述处理器基于所述块大小中的至少一个确定是否建议使用缓冲器以存储所述乘法的初步结果,其中,例程使用来自存储在所述缓冲器中的内容的添加更新来更新所述第三矩阵。
19.一种方法,包括:
至少一个硬件处理器访问表示第一矩阵、第二矩阵、第一块大小和第二块大小的数据,其中,所述第一块大小表示所述第一矩阵沿第一维度的子矩阵分解大小,所述第二块大小表示所述第一矩阵沿第二维度的子矩阵分解大小,并且所述第二矩阵与所述第一矩阵共用所述第二维度;以及
所述至少一个硬件处理器将所述第一矩阵和所述第二矩阵相乘以确定第三矩阵,其中,所述相乘包括基于所述第一块大小和所述第二块大小将处理线程分配给所述第一矩阵的子矩阵。
20.根据权利要求19所述的方法,其中,所述相乘包括所述处理线程的每个处理线程在分配给该处理线程的子矩阵的子块上子循环。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/083,373 US11989257B2 (en) | 2020-10-29 | 2020-10-29 | Assigning processing threads for matrix-matrix multiplication |
US17/083,373 | 2020-10-29 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114428936A true CN114428936A (zh) | 2022-05-03 |
Family
ID=81184271
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110393705.4A Pending CN114428936A (zh) | 2020-10-29 | 2021-04-13 | 针对矩阵-矩阵乘法分配处理线程 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11989257B2 (zh) |
CN (1) | CN114428936A (zh) |
DE (1) | DE102021108482A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109992743B (zh) * | 2017-12-29 | 2020-06-16 | 华为技术有限公司 | 矩阵乘法器 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8924455B1 (en) | 2011-02-25 | 2014-12-30 | Xilinx, Inc. | Multiplication of matrices using systolic arrays |
US10073815B2 (en) | 2016-05-31 | 2018-09-11 | Palo Alto Research Cener Incorporated | System and method for speeding up general matrix-matrix multiplication on the GPU |
EP3998539A1 (en) | 2016-12-30 | 2022-05-18 | INTEL Corporation | Deep learning hardware |
US10354733B1 (en) | 2017-10-17 | 2019-07-16 | Xilinx, Inc. | Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC |
US11640443B2 (en) * | 2020-05-28 | 2023-05-02 | Hewlett Packard Enterprise Development Lp | Distributing matrix multiplication processing among processing nodes |
-
2020
- 2020-10-29 US US17/083,373 patent/US11989257B2/en active Active
-
2021
- 2021-04-05 DE DE102021108482.2A patent/DE102021108482A1/de active Pending
- 2021-04-13 CN CN202110393705.4A patent/CN114428936A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220138281A1 (en) | 2022-05-05 |
DE102021108482A1 (de) | 2022-05-05 |
US11989257B2 (en) | 2024-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Khorasani et al. | Scalable simd-efficient graph processing on gpus | |
Lipshitz et al. | Communication-avoiding parallel strassen: Implementation and performance | |
JP2016119084A (ja) | 効率的な疎行列表現及び処理のためのコンピュータ実装システム及び方法 | |
CN108170639B (zh) | 基于分布式环境的张量cp分解实现方法 | |
Dang et al. | CUDA-enabled Sparse Matrix–Vector Multiplication on GPUs using atomic operations | |
US20230281271A1 (en) | Distributing matrix multiplication processing among processing nodes | |
Niu et al. | Tilespmv: A tiled algorithm for sparse matrix-vector multiplication on gpus | |
Anh et al. | Balanced hashing and efficient gpu sparse general matrix-matrix multiplication | |
CN114503125A (zh) | 结构化剪枝方法、系统和计算机可读介质 | |
Zheng et al. | BiELL: A bisection ELLPACK-based storage format for optimizing SpMV on GPUs | |
Mohammadi et al. | Accelerating Louvain community detection algorithm on graphic processing unit | |
Wyrzykowski et al. | Parallelization of 2D MPDATA EULAG algorithm on hybrid architectures with GPU accelerators | |
CN113569511A (zh) | 一种量子电路的模拟方法及装置 | |
Huang et al. | Strassen's algorithm for tensor contraction | |
KR20220154698A (ko) | 병렬 프로세싱 동안 전력 영향들을 감소시키기 위한 프로세싱 데이터 스트림 수정 | |
Bisseling et al. | Two-dimensional approaches to sparse matrix partitioning | |
Kang et al. | HPMaX: heterogeneous parallel matrix multiplication using CPUs and GPUs | |
Jo et al. | Efficient sparse matrix multiplication on gpu for large social network analysis | |
CN114428936A (zh) | 针对矩阵-矩阵乘法分配处理线程 | |
Kopysov et al. | Hybrid Multi-GPU solver based on Schur complement method | |
Ashari et al. | A model-driven blocking strategy for load balanced sparse matrix–vector multiplication on GPUs | |
Yu et al. | Numa-aware optimization of sparse matrix-vector multiplication on armv8-based many-core architectures | |
Novikov et al. | Layer-by-layer partitioning of finite element meshes for multicore architectures | |
CN113986816A (zh) | 可重构计算芯片 | |
US9600446B2 (en) | Parallel multicolor incomplete LU factorization preconditioning processor and method of use thereof |
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 |