一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

在没有维度填充的情况下最大限度地减少由矩阵乘法和卷积内核中的不兼容主导维度引起的缓存冲突的负面影响的技术的制作方法

2022-06-22 22:19:33 来源:中国专利 TAG:


1.实施例概括而言涉及机器学习。更具体而言,实施例涉及深度学习技术,该技术在没有维度填充的情况下最大限度地减少了由矩阵乘法和卷积内核中的不兼容主导维度(leading dimension)引起的缓存冲突的负面影响。


背景技术:

2.深度学习工作负载可能涉及基于矩阵的乘法和卷积操作,其中矩阵数据被存储到缓存存储器以便快速取回。然而,缓存布局和矩阵大小的某些组合可能会导致矩阵数据在仍在使用中时被从缓存中逐出。因此,可能会遇到对性能的不利影响。
附图说明
3.通过阅读以下说明书和所附权利要求,并且通过参考以下附图,实施例的各种优点对于本领域技术人员而言将变得清楚,附图中:
4.图1是传统矩阵缓存方案和根据实施例的矩阵缓存方案的示例的比较图示;
5.图2是根据一实施例的受控矩阵维度的示例的图示;
6.图3是根据一实施例的操作性能增强的计算系统的方法的示例的流程图;
7.图4是根据一实施例的矩阵元素的重用的示例的图示;
8.图5是根据一实施例的内联拷贝的示例的图示;
9.图6是根据一实施例的操作性能增强的计算系统的更详细方法的示例的流程图;
10.图7是根据一实施例的计算加速器构架的示例的框图;
11.图8是根据一实施例的实验性能数据的示例的图表;
12.图9是根据一实施例的性能增强的计算系统的示例的框图;
13.图10是根据一实施例的半导体装置的示例的图示;
14.图11是根据一实施例的处理器的示例的框图;并且
15.图12是根据一实施例的基于多处理器的计算系统的示例的框图。
具体实施方式
16.诸如图像识别和自然语言处理(natural language processing,nlp)之类的应用可以使用深度学习技术,这是人工智能(artificial intelligence,ai)机器学习的一个子集,其中深度神经网络包含多个中间层,来从非结构化或未标记的数据进行无监督学习。由于深度神经网络中涉及的数据量相对较大,所以数据通常可以被组织和处理为n维阵列(例如,张量),这些阵列可被进一步划分为矩阵。在这种情况下,常见的矩阵操作可能包括矩阵乘法操作(例如,经由通用矩阵乘法/gemm内核的“matmul”),卷积操作,等等。
17.例如,典型的矩阵操作可能是以下的矩阵乘法操作:
18.c[m][n]=a[m][k]*b[k][n]。
[0019]
其中c是输出矩阵(具有m行n列的大小),b是输入矩阵(具有k行n列的大小,例如,代表图像的像素或者先前层的输出),a是要被应用到输入矩阵的权重的集合(具有k行n列的大小),并且所有的矩阵都是行为主(row-major)的(例如,行被连续存储在存储器中)。一般而言,在行主序(row-major order)的情况下,二维阵列的“主导维度”(leading dimension)是一个增量(increment),用于在阵列的每个相继行中找到矩阵元素的起始点。从而,在这个示例中,k可以被认为是矩阵a的主导维度,并且n可以被认为是矩阵b的主导维度。
[0020]
矩阵可以被划分(例如,以便部署到不同的处理器核心)。例如,在划分之后,每个计算核心可计算矩阵c的一个子集:
[0021]
c[m][n]=a[m][k]*b[k][n],lda=k,ldb=n,ldc=n。
[0022]
其中lda是子集矩阵a的主导维度,ldb是子集矩阵b的主导维度,并且ldc是子集矩阵c的主导维度。为了论述的目的,可以假设k和n是目标硬件(例如,图形处理器、主机处理器、加速器)的硬件向量v的大小。例如,硬件向量可能是在给定的主机处理器(例如,带高级向量扩展/avx 512支持的中央处理单元/cpu)上的64字节或16双字的向量。正如将更详细论述的,m的维度大小可以被自动控制到相对较小的值,该值由硬件向量寄存器的数目限制。
[0023]
例如,图1示出了传统的矩阵缓存方案20,其中集合关联缓存(set-associative cache)22被组织成多个集合。一般而言,x路集合关联缓存通过在每个集合中提供x个块来减少冲突,在这x个块中可找到到该集合的数据映射。虽然每个存储器地址可映射到特定的集合,但该地址可以映射到该集合中的x个块之中的任何一个。在这个示例中,x也被称为缓存的关联程度(例如,直接映射缓存可能是单路集合关联缓存的另一个名称)。每个集合因此可以包含某个路数(number of ways)(关联程度,例如,“路0”,“路1”,等等),该数目受到处理器中硬件配置(way
hw
)的限制。在图示的示例中,矩阵24(“矩阵a”)的m维度定义了矩阵24的高度(例如,行数)。在传统的矩阵缓存方案20中,当主导维度是一个缓存路大小的倍数并且m维度超过缓存22中的路的数目时,矩阵24的第一元素26和第二元素28可能都映射到同一个缓存行30(“行i”)。结果可能是缓存冲突,这导致第一元素26和/或第二元素28在仍在使用中时被从缓存22逐出(例如,降低性能)。在这种情况下,沿着m维度行进可能是无效的,这导致了由于不兼容(例如,“坏”)的主导维度而引起的缓存冲突。
[0024]
例如,如果缓存22的总大小为32kb(32768字节),并且缓存行大小为64字节,那么缓存22将包含512行(32768字节/64字节=512行)。此外,如果缓存22被构造为8路集合关联缓存,那么集合的数目将是64(512行/8路=64集合)。如果主导维度的长度是集合数*缓存行大小的倍数或分数,则主导维度可能会导致缓存行冲突。例如,尽管有8路集合关联性,但具有模4096(集合数*缓存行大小=64*64=4096字节或4kb)的相同余数的地址被映射到同一缓存行。从而,如果对于浮点指令(“float”)数据类型(例如,元素大小为4),主导维度大小为256字节(8比特,或者28=256字节),则主导维度的长度将是256字节*4=1024字节。沿着外部维度的跨越式访问的每四个元素将会具有冲突缓存行(1024字节*4个元素=4096字节)。如果主导维度的长度是1024字节,那么外部维度的每次相继加载都将会重复地加载和逐出相同的缓存行。这种行为可能会对深度学习性能具有显著的负面影响。
[0025]
相比之下,一种增强型矩阵缓存方案40将m维度控制到小于或等于缓存22中的路
数。因此,第一元素26映射到与第二元素28映射到的缓存行30不同的缓存行44(“行i x”)。因此,在图示的示例中,避免了缓存冲突,并且增强了性能。
[0026]
在gemm内核(例如,数学库可以调用来以嵌套方式执行矩阵乘法的预定义子例程)内部,可以如下计算小的matmul:
[0027]
c[m][v] =a[m][v]*b[v][v],lda=k,ldb=n,ldc=n
[0028]
在下面的伪代码中示出了一种带有向量化寄存器优化的计算划分矩阵乘法的常用的方法:
[0029][0030][0031]
图2表明:转置矩阵50(例如,转置矩阵a,用于确保内部矩阵维度匹配)和另一个矩阵52(例如,矩阵b)之间的矩阵乘法操作可能涉及将向量54加载(例如,b[v][v],b[_k][0]的向量加载,ldb=n)到向量寄存器中,将标量元素53加载(例如,a[m][v],a[_m][_k]的标量加载,lda=k)加载到标量寄存器中,标量加载的复制/广播,以及垂直乘法操作。对于转置矩阵50,缓存冲突可能发生在矩阵a的标量加载期间:其中,对于任何_k,元素a[0][_k]

a[m-1][_k]可能共享相同的缓存行,因为矩阵a的lda是k。对于其他矩阵52(例如,矩阵b)也可能存在冲突。然而,在gemm内核内部,其他矩阵52的每个向量可能只被使用一次。从而,其他矩阵52被认为是处于“流模式”,而不会显著地影响性能。
[0032]
基于gemm内核的上述常见结构,在具有w
hw
路集合关联缓存的系统上,当m》w
hw
时,可能会发生缓存冲突,其中w
hw
是指定硬件系统上的固定数字(例如,八)。因此,如前所述,通过引入m《=w
hw
的限制,可以避免缓存冲突。
[0033]
然而,限制m的大小可能会有副作用。首先,可能会对指令延时产生影响。例如,融合-乘法-累加(fused-multiply-and-accumulation,fma)操作通常可能有多个周期的延时
(例如,十三个周期)。从而,更大的m有助于隐藏fma延时。
[0034]
另一个副作用可能与存储器带宽压力有关。更具体而言,m决定了矩阵b被重用的次数。从而,m的值越大,矩阵b将被重用的次数就越多。从本质上讲,这个情况影响了算术浮点指令和存储器读取指令之间的比率(例如,fp算术/存储器读取指令比率或“fp a/r”比率)。更高的fp a/r比率会节省重复加载存储器的成本,这又减轻了缓存系统上的压力,并且提高了存储器加载带宽的效率。这两方面的考虑都可以通过引入额外的重用维度来解决,这一点将在下文更详细论述。
[0035]
图3示出了操作性能增强的计算系统的方法60。方法60可作为一个或多个模块被实现在存储于诸如随机访问存储器(random access memory,ram)、只读存储器(read only memory,rom)、可编程rom(programmable rom,prom)、固件、闪存等等之类的机器或计算机可读存储介质中的逻辑指令集合中,实现在诸如可编程逻辑阵列(programmable logic array,pla)、现场可编程门阵列(field programmable gate array,fpga)、复杂可编程逻辑器件(complex programmable logic device,cpld)之类的可配置逻辑中,实现在利用诸如专用集成电路(application specific integrated circuit,asic)、互补金属氧化物半导体(complementary metal oxide semiconductor,cmos)或晶体管-晶体管逻辑(transistor-transistor logic,ttl)技术之类的电路技术的固定功能硬件逻辑中,或者实现在这些的组合中。
[0036]
例如,可以以一种或多种编程语言的任何组合来编写用于执行方法60中所示出的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,比如java、smalltalk、c 之类的,还包括传统的过程式编程语言,比如“c”编程语言或类似的编程语言。此外,逻辑指令可包括汇编指令、指令集体系结构(instruction set architecture,isa)指令、机器指令、机器相关指令、微代码、状态设置数据、用于集成电路的配置数据、个性化电子电路和/或硬件原生的其他结构组件(例如,主机处理器、中央处理单元/cpu、微控制器,等等)的状态信息。
[0037]
图示的处理块62提供了确定浮点指令与存储器读取指令的比率。块62可包括在内核执行之前(例如,实时)计算每一个加载的乘法和加法操作的数目。块64至少部分基于该比率来控制矩阵内核的维度大小(例如,m)。在一实施例中,维度大小被控制以防止缓存冲突。图示的方法60因此通过确保维持可接受的fp a/r来增强性能,尽管控制维护内核的维度大小有潜在的副作用。更少的缓存冲突可转化为更少的延时和改善的深度学习结果(例如,更短的训练时间)。
[0038]
矩阵内核一般可以在第一矩阵(例如,矩阵a)和第二矩阵(例如,矩阵b)之间进行操作(例如,乘法操作,卷积操作)。在这种情况下,方法60可以进一步提供将第一矩阵的元素重用于第二矩阵的多个向量行,这一点将在下文更详细论述。如果确定第一矩阵的一部分超过了集合关联缓存中的路数(例如,关联程度)(例如,存在溢出情况),则块64可以响应于该溢出情况而进行溢出部分的内联拷贝。在一个示例中,块64进一步基于硬件约束和/或延时约束来控制维度大小。
[0039]
图示的方法60与可能尝试通过执行维度填充来应对缓存冲突的传统方案相比也是有利的。例如,维度填充方案可填充主导维度,以防止长度是128b或256b的倍数。通常,这种方法可能按一个缓存行的大小来添加或减去维度长度。然而,在具有深度学习(dl)框架
的dl工作负载中,(例如,相对于缺乏高性能计算/hpc工作负载而言),张量的形状是一个设置,该设置通常是固定的并且是在框架提供者和最终用户(例如,客户)之间商定的。除了性能惩罚以外,填充的张量一般不能由框架提供者和最终用户直接处理,这再次影响了对数据科学家而言的可使用性或用户体验。额外的填充也不是一个被广泛接受的方案,因为它可能涉及深度学习框架中的额外重排序。
[0040]
图示的方法60与可能尝试通过拷贝gemm内核来应对缓存冲突的传统方案相比也是有利的。这样的方案可在gemm内核内部应用维度填充。从而,内核可能会拷贝和填充将由当前线程处理的数据的子集,而不是填充整个张量。拷贝-gemm内核方案可以将拷贝开销转移到gemm内核,但性能惩罚仍然存在。
[0041]
现在转到图4,可以通过重用转置矩阵50来增大fma的密度。在每个gemm内核中,可以计算输出矩阵c的z个向量行,如下所示:
[0042]
c[m][z*v]=a[m][v]*b[v][z*v],lda=k,ldb=n,ldc=n
[0043]
在图示的示例中,进行了b[_k][0]的向量加载(例如,用b[v][v],ldb=n),并且进行了a[_m][_k]的标量加载(例如,a[m][v],lda=k)。从而,在z》1的情况下,转置矩阵50被多次重用,其中对转置矩阵50的读取次数可能导致缓存冲突被减少到减少缓存冲突和提高fp a/r比率的新模型涉及加载另一个矩阵58的两个向量54、56以及对转置矩阵50的每个元素53进行两个fma操作。图示的方案因此将对转置矩阵50的加载次数减少了一半。图示的方案还使fma的密度加倍,并且增大了fp a/r比率。
[0044]
实现增强型方案的示例伪代码被描述如下:
[0045][0046]
图5表明:另一种避免可能的缓存冲突的方法是使用额外的缓冲区a'[m-w][v],其中w是集合关联缓存的路数。如前所述,路数可以定义集合关联缓存的关联程度。在图示的示例中,进行了b[_k][0]的向量加载(例如,用b[v][v],ldb=n),进行了a[_m][_k]的标量加载(例如,用a[m][v],lda=k),并且将a'[m][v]拷贝到缓冲区。从而,在fma操作之前,矩阵a缓冲区的溢出部分(例如,m》w)被拷贝到连续的本地缓冲区a'。由于额外的拷贝,矩阵a'的lda现在是v。从而,矩阵c的计算可以被分成两部分,如下:
[0047]
c[w][v]=a[w][v]*b[v][v],lda=k,ldb=n,ldc=n
[0048]
c[m-w][v]=a

[m][v]*b[v][v],lda=v,ldb=n,ldc=n
[0049]
内联拷贝-gemm内核的优化版本,带有主导维度优化,由下面的示例伪代码描述:
[0050][0051][0052]
上述技术:1)使用fp a/r比率来控制矩阵a的相继加载的数目,2)进行双边缓冲区重用,3)进行内联拷贝,这些可被结合在一起以进一步增强性能并且避免主导维度问题。然后,在给定硬件向量大小v
hw
的情况下,带有双边缓冲区重用的完全参数化的gemm内核可以由单个gemm内核的维度大小决定。回顾以下矩阵乘法:
[0053]
c[m][n]=a[m][k]*b[k][n]。
[0054]
假设行为主的gemm,m是gemm内核输出矩阵中的行数,z是gemm内核输出矩阵的列的向量大小。可以通过以下方式来决定每个小矩阵乘法的内核:
[0055]
c[m][z*v
hw
]=a[m][v
hw
]*b[v
hw
][z*v
hw
].
[0056]
在一实施例中,对参数m和z的限制是:
[0057]
1)硬件寄存器限制:基于本文描述的计算模型,一个寄存器被用于加载矩阵a,z个寄存器被用于加载矩阵b,并且m*z个寄存器被用于保存矩阵c的输出。假设总共有r
hw
个寄存器,为了避免寄存器溢出,可以通过以下方式给出限制,
[0058]
(m 1)*z 1≤r
hw
[0059]
2)硬件延时要求:可能有最小数目的管线式向量化fma l
hw
来隐藏fma延时。
[0060]
m*z》l
hw
[0061]
3)fp a/r比率:可以通过以下方式来计算每一个加载的乘法和加法的数目:
[0062][0063]
这个限制表明,为了实现最高的fp a/r比率r,z可以被选择为尽可能地接近m。
[0064]
基于这些限制,可以在几个操作中自动选择m和z的值。对于具有充足计算量的任何gemm/卷积,可以首先基于这些限制来确定理想的m和z。例如,在三十二个hw寄存器的情况下,(m,z)=(6,4)将是初始配置。如果计算量不足(例如,维度大小没有大到足以使核心计算资源饱和)或者维度n要被进一步分割(例如,每核心的n,即n,小于四),则可以使用次优方案,例如(m,z)=(14,2)。此外,对于任何选定的m,,矩阵b的溢出部分m》priori_ratio*w
hw
被内联拷贝到侧缓冲区。priori_ratio可以是基于特定硬件上的算法选择的经验值(例如,0.8)。
[0065]
有了选定的z和m,可以通过双边缓冲区重用来自动加速gemm内核,以提高fp a/r比率,并且通过减少存储器访问来避免缓存冲突。此外,在m≤w
hw
的情况下,该方案通过充分利用由不兼容的主导维度引起的多路集合关联缓存系统的容量,避免了缓存冲突问题。此外,如果m》w
hw
,则该方案避免了内联拷贝的主导维度问题。
[0066]
图6示出了操作性能增强的计算系统的更详细方法80。方法80可作为一个或多个模块被实现在存储于诸如ram、rom、prom、固件、闪存等等之类的机器或计算机可读存储介质中的逻辑指令集合中,实现在诸如pla、fpga、cpld之类的可配置逻辑中,实现在利用诸如asic、cmos或ttl技术之类的电路技术的固定功能硬件逻辑中,或者实现在这些的组合中。
[0067]
图示的处理块82确定是否遇到了坏的/不兼容的主导维度。如果没有,则块84选择正常内核(例如,以执行标准矩阵乘法或卷积操作)。否则,块86基于硬件(hw)限制和fp a/r比率确定参数m和z的初始(例如,“最优”)值。然后,可在块88处确定z的值对于任务平衡(例如,在可用的核心之间)是否是可接受的。如果不是,则在块90处为参数m和z选择其他(例如,“次优”)值,并且方法80返回到块88。一旦在块88处确定z的值对于任务平衡是可接受的,块92就可以将内核参数设置为m和z的值。
[0068]
块94确定m的值是否超过了缓存中的路数(例如,关联程度)。如果是,则在块96参考m和z的当前值选择溢出拷贝内核(例如,以执行溢出部分的内联拷贝)。否则,在块98参考m和z的当前值选择非拷贝内核(例如,以绕过内联拷贝)。图示的方法80因此通过确保维持可接受的fp a/r并且同时消除了控制维护内核的维度大小的潜在副作用来增强性能。更少的缓存冲突可转化为更少的延时和改善的深度学习结果(例如,更短的训练时间)。
[0069]
图7示出了计算加速器框架100,它为深度学习数学内核提供了加速方案。在图示的示例中,形状信息102(例如,张量和/或矩阵维度信息)和硬件信息104(例如,缓存布局,
硬件向量和/或硬件寄存器信息)被输入到内核程序和参数选择器106,它可以被实现在逻辑指令、可配置逻辑、固定功能硬件逻辑等等中,或者实现在这些的任何组合中。图示的选择器106基于形状信息102和硬件信息104确定内核程序108(例如,正常内核、溢出-拷贝内核、非拷贝内核)和内核参数110(例如,m、z)。任务调遣器112将内核程序108作为一个或多个内核实例启动(例如,在使用多个线程来并行计算基元的不同划分的执行环境中)。从而,通过扩展内核程序和参数选择器106来处理更广泛的场景,并且根据操作形状信息102和底层硬件信息104选择最佳的内核程序和内核参数,增强了性能。
[0070]
图8示出了实验数据的图表120,其中,针对以下具有不兼容主导维度的三种不同形状的矩阵乘法实现了本文描述的技术。
[0071]
(m,k,n)=(10752,1024,1024),形状曲线122
[0072]
(m,k,n)=(1764,1024,3072),形状曲线124
[0073]
(m,k,n)=(42,4096,1024),形状曲线126
[0074]
对于每个形状,应用了参数(m,z)的四个不同配置,其中性能数据是在处理器的单个插座上测量的。
[0075]
(m,z)=(28,1),配置a
[0076]
(m,z)=(14,2),配置b
[0077]
(m,z)=(7,2),配置c
[0078]
(m,z)=(6,4),配置d
[0079]
在主导维度不兼容的情况下,在配置a(m,z)=(28,1)中gemm效率相对较低,这遭受了缓存冲突问题。通过在配置b中为双边重用设置z=2,使用与配置a相同的fma管线长度,性能提高了~2倍。然而,配置b仍然遭受着缓存冲突问题,因为14大于集合关联缓存的路数(8)。通过在配置c中将m的长度限制到小于8,在(m,z)=(7,2)的情况下实现了出乎预期的额外的~20%的益处,即使管线长度减半了。最后,对于有充足计算的形状,(m,z)=(6,4)的配置d提供了更大的fp a/r比率,因此性能更好。对于最小的形状曲线126(例如,m对于任务分配而言不够大),(m,z)=(7,2)的次优解甚至更快,因为n维度被用于线程级并行化。
[0080]
现在转到图9,示出了性能增强的计算系统150。系统150一般可以是电子设备/平台的一部分,具有计算功能(例如,个人数字助理/pda、笔记本计算机、平板计算机、可转换平板设备、服务器)、通信功能(例如,智能电话)、成像功能(例如,相机、摄像机)、媒体播放功能(例如,智能电视/tv)、可穿戴功能(例如,手表、眼镜、头饰、鞋类、珠宝)、车辆功能(例如,汽车、卡车、摩托车)、机器人功能(例如,自主机器人),等等,或者这些的任何组合。在图示的示例中,系统150包括具有缓存172的主机处理器152(例如,中央处理单元/cpu)和与系统存储器156耦合的集成存储器控制器(integrated memory controller,imc)154。在一实施例中,缓存172是集合关联缓存。
[0081]
图示的系统150还包括输入输出(io)模块158,其与主机处理器152和图形处理器160一起作为片上系统(system on chip,soc)被实现在半导体管芯162上。图示的io模块158与例如显示器164(例如,触摸屏、液晶显示器/lcd、发光二极管/led显示器)、网络控制器166(例如,有线和/或无线nic)以及大容量存储装置168(例如,硬盘驱动器/hdd、光盘、固态驱动器/ssd、闪存)进行通信。
[0082]
在一实施例中,主机处理器152包括逻辑170(例如,可执行逻辑指令、可配置逻辑、固定功能硬件逻辑,等等,或者这些的任何组合),以执行已经论述过的方法60(图3)和/或方法80(图6)的一个或多个方面。从而,逻辑170可以确定浮点指令与存储器读取指令的比率,并且至少部分地基于该比率来控制矩阵内核的维度大小(例如,m)。在一实施例中,维度大小被控制以防止关于缓存172的缓存冲突。图示的系统150因此至少在如下意义上被认为是性能增强:逻辑170确保维持可接受的fp a/r,尽管控制维护内核的维度大小有潜在的副作用。更少的缓存冲突可转化为更少的延时和改善的深度学习结果(例如,更短的训练时间)。
[0083]
矩阵内核一般可以在第一矩阵和第二矩阵之间进行操作(例如,乘法操作,卷积操作)。在这种情况下,逻辑170可以进一步提供将第一矩阵的元素重用于第二矩阵的多个向量行。如果确定第一矩阵的一部分超过了缓存172中的路数(例如,存在溢出情况),则块170也可响应于该溢出情况而进行溢出部分的内联拷贝。在一个示例中,逻辑170进一步基于硬件约束和/或延时约束来控制维度大小。虽然逻辑170被示出在主机处理器152中,但逻辑170可以驻留在系统150中的其他地方。
[0084]
图10示出了半导体装置180(例如,芯片、管芯、封装)。图示的装置180包括一个或多个衬底184(例如,硅、蓝宝石、砷化镓)和与(一个或多个)衬底184耦合的逻辑186(例如,晶体管阵列和其他集成电路/ic组件)。在一实施例中,逻辑186实现已经论述过的方法60(图3)和/或方法80(图6)的一个或多个方面。从而,逻辑186可以确定浮点指令与存储器读取指令的比率,并且至少部分地基于该比率来控制矩阵内核的维度大小(例如,m)。在一实施例中,维度大小被控制以防止缓存冲突。图示的装置180因此至少在如下意义上被认为是性能增强:逻辑186确保维持可接受的fp a/r,尽管控制维护内核的维度大小有潜在的副作用。更少的缓存冲突可转化为更少的延时和改善的深度学习结果(例如,更短的训练时间)。
[0085]
逻辑186可至少部分被实现在可配置逻辑或固定功能硬件逻辑中。在一个示例中,逻辑186包括被定位(例如,嵌入)在(一个或多个)衬底184内的晶体管沟道区域。从而,逻辑186和(一个或多个)衬底184之间的界面可能不是突变结。逻辑186也可被认为包括在(一个或多个)衬底184的初始晶圆上生长的外延层。
[0086]
图11根据一个实施例图示了处理器核心200。处理器核心200可以是用于任何类型的处理器的核心,例如微处理器、嵌入式处理器、数字信号处理器(digital signal processor,dsp)、网络处理器、或者其他执行代码的设备。虽然在图11中只图示了一个处理器核心200,但处理元件或者可包括多于一个图11中所示的处理器核心200。处理器核心200可以是单线程核心,或者对于至少一个实施例,处理器核心200可以是多线程的,因为其对于每个核心可包括多于一个硬件线程情境(或者说“逻辑处理器”)。
[0087]
图11还图示了与处理器核心200耦合的存储器270。存储器270可以是本领域技术人员已知的或者以其他方式可获得的各种存储器(包括存储器层次体系的各种层)中的任何一者。存储器270可包括要被处理器核心200执行的一个或多个代码213指令,其中代码213可实现已经论述过的方法60(图3)和/或方法80(图6)。处理器核心200遵循由代码213指示的指令的程序序列。每个指令可进入前端部分210并且被一个或多个解码器220处理。解码器220可生成诸如预定格式的固定宽度微操作之类的微操作作为其输出,或者可生成其他指令、微指令或者反映原始代码指令的控制信号。图示的前端部分210还包括寄存器重命
名逻辑225和调度逻辑230,它们一般分配资源并且对与转换指令相对应的操作进行排队以便执行。
[0088]
处理器核心200被示为包括具有一组执行单元255-1至255-n的执行逻辑250。一些实施例可包括专用于特定功能或功能集合的若干个执行单元。其他实施例可只包括一个执行单元或者可执行特定功能的一个执行单元。图示的执行逻辑250执行由代码指令指定的操作。
[0089]
在代码指令所指定的操作的执行完成之后,后端逻辑260使代码213的指令引退。在一个实施例中,处理器核心200允许指令的无序执行,但要求指令的有序引退。引退逻辑265可采取本领域技术人员已知的各种形式(例如,重排序缓冲器之类的)。这样,处理器核心200在代码213的执行期间被变换,至少就由解码器生成的输出、被寄存器重命名逻辑225利用的硬件寄存器和表格以及被执行逻辑250修改的任何寄存器(未示出)而言。
[0090]
虽然在图11中没有图示,但处理元件可包括与处理器核心200一起在芯片上的其他元件。例如,处理元件可包括与处理器核心200一起的存储器控制逻辑。处理元件可包括i/o控制逻辑和/或可包括与存储器控制逻辑相集成的i/o控制逻辑。处理元件也可包括一个或多个缓存。
[0091]
现在参考图12,示出了根据一实施例的计算系统1000实施例的框图。图12中所示出的是多处理器系统1000,其包括第一处理元件1070和第二处理元件1080。虽然示出了两个处理元件1070和1080,但要理解,系统1000的实施例也可包括仅一个这种处理元件。
[0092]
系统1000被图示为点到点互连系统,其中第一处理元件1070和第二处理元件1080经由点到点互连1050耦合。应当理解,图12中所示的任何或所有互连可被实现为多点分支总线,而不是点到点互连。
[0093]
如图12所示,处理元件1070和1080的每一者可以是多核处理器,包括第一和第二处理器核心(即,处理器核心1074a和1074b和处理器核心1084a和1084b)。这种核心1074a、1074b、1084a、1084b可被配置为以与上文联系图11所论述类似的方式来执行指令代码。
[0094]
每个处理元件1070、1080可包括至少一个共享缓存1896a、1896b。共享缓存1896a、1896b可存储被处理器的一个或多个组件利用的数据(例如,指令),所述组件例如分别是核心1074a、1074b和1084a、1084b。例如,共享缓存1896a、1896b可在本地缓存存储器1032、1034中存储的数据,供处理器的组件更快速访问。在一个或多个实施例中,共享缓存1896a、1896b可包括一个或多个中间级别缓存,例如第2级(l2)、第3级(l3)、第4级(4)或者其他级别的缓存,最后一级缓存(last level cache,llc),和/或这些的组合。
[0095]
虽然被示为只具有两个处理元件1070、1080,但要理解,实施例的范围不限于此。在其他实施例中,一个或多个额外的处理元件可存在于给定的处理器中。或者,处理元件1070、1080中的一个或多个可以是除了处理器以外的元件,例如加速器或者现场可编程门阵列。例如,(一个或多个)额外的处理元件可包括与第一处理器1070相同的(一个或多个)额外处理器,与第一处理器1070异构或非对称的(一个或多个)额外处理器,加速器(例如,图形加速器或者数字信号处理(dsp)单元),现场可编程门阵列,或者任何其他处理元件。在处理元件1070、1080之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言,可以有各种差异。这些差异可实际上将其自身展现为处理元件1070、1080之间的非对称性和异构性。对于至少一个实施例,各种处理元件1070、1080
可存在于相同的管芯封装中。
[0096]
第一处理元件1070还可包括存储器控制器逻辑(mc)1072和点到点(p-p)接口1076和1078。类似地,第二处理元件1080可包括mc 1082和p-p接口1086和1088。如图12所示,mc 1072和1082将处理器耦合到各自的存储器,即存储器1032和存储器1034,存储器1032和存储器1034可以是在本地附接到各个处理器的主存储器的一部分。虽然mc 1072和1082被图示为集成到处理元件1070、1080中,但对于替换实施例,mc逻辑可以是在处理元件1070、1080之外的分立逻辑,而不是集成在其中。
[0097]
第一处理元件1070和第二处理元件1080可分别经由p-p互连1076、1086耦合到i/o子系统1090。如图12所示,i/o子系统1090包括p-p接口1094和1098。此外,i/o子系统1090包括接口1092来将i/o子系统1090与高性能图形引擎1038耦合。在一个实施例中,总线1049可用于将图形引擎1038耦合到i/o子系统1090。或者,点到点互连可耦合这些组件。
[0098]
进而,i/o子系统1090可经由接口1096耦合到第一总线1016。在一个实施例中,第一总线1016可以是外围组件互连(peripheral component interconnect,pci)总线,或者诸如快速pci总线或另一种第三代i/o互连总线之类的总线,虽然实施例的范围不限于此。
[0099]
如图12所示,各种i/o设备1014(例如,生物计量扫描仪、扬声器、相机、传感器)可耦合到第一总线1016,以及可将第一总线1016耦合到第二总线1020的总线桥1018。在一个实施例中,第二总线1020可以是低引脚数(low pin count,lpc)总线。各种设备可耦合到第二总线1020,例如包括键盘/鼠标1012、(一个或多个)通信设备1026、以及数据存储单元1019(例如,盘驱动器或者其他大容量存储设备),其中该数据存储单元在一个实施例中可包括代码1030。图示的代码1030可实现已经论述过的方法60(图3)和/或方法80(图6),并且可与已经论述过的代码213(图11)类似。另外,音频i/o 1024可耦合到第二总线1020并且电池1010可向计算系统1000供应电力。
[0100]
注意,设想了其他实施例。例如,取代图12的点到点体系结构,系统可实现多点分支总线或者另外的这种通信拓扑。另外,可改为利用比图12所示更多或更少的集成芯片来划分图12的元件。
[0101]
附加注释和示例:
[0102]
示例1包括一种性能增强的计算系统,包括网络控制器和与所述网络控制器耦合的处理器,其中,所述处理器包括缓存和逻辑,来确定浮点指令与存储器读取指令的比率,并且至少部分基于所述比率来控制矩阵内核的维度大小。
[0103]
示例2包括如示例1所述的计算系统,其中,所述矩阵内核进行第一矩阵和第二矩阵之间的操作,并且其中,与所述一个或多个衬底耦合的所述逻辑将所述第一矩阵的元素重用于所述第二矩阵的多个向量行。
[0104]
示例3包括如示例2所述的计算系统,其中,所述缓存是集合关联缓存,并且其中,所述逻辑检测溢出情况,其中,所述溢出情况包括所述第一矩阵的一部分超过所述集合关联缓存中的路数,并且响应于所述溢出情况而进行所述部分的内联拷贝。
[0105]
示例4包括如示例2所述的计算系统,其中,所述操作是乘法操作或卷积操作之一。
[0106]
示例5包括如示例1至4中的任一者所述的计算系统,其中,进一步基于硬件约束和延时约束来控制所述维度大小。
[0107]
示例6包括如示例1至4中的任一者所述的计算系统,其中,所述维度大小被控制以
防止所述缓存中的冲突。
[0108]
示例7包括一种半导体装置,其包括一个或多个衬底,以及与所述一个或多个衬底耦合的逻辑,其中所述逻辑被至少部分实现在可配置逻辑或者固定功能硬件逻辑之中的一个或多个中,与所述一个或多个衬底耦合的所述逻辑确定浮点指令与存储器读取指令的比率,并且至少部分基于所述比率来控制矩阵内核的维度大小。
[0109]
示例8包括如示例7所述的半导体装置,其中,所述矩阵内核进行第一矩阵和第二矩阵之间的操作,并且其中,与所述一个或多个衬底耦合的所述逻辑将所述第一矩阵的元素重用于所述第二矩阵的多个向量行。
[0110]
示例9包括如示例8所述的半导体装置,还包括集合关联缓存,其中,与所述一个或多个衬底耦合的所述逻辑检测溢出情况,其中,所述溢出情况包括所述第一矩阵的一部分超过所述集合关联缓存中的路数,并且响应于所述溢出情况而进行所述部分的内联拷贝。
[0111]
示例10包括如示例8所述的半导体装置,其中,所述操作是乘法操作或卷积操作之一。
[0112]
示例11包括如示例7至10中的任一者所述的半导体装置,其中,进一步基于硬件约束和延时约束来控制所述维度大小。
[0113]
示例12包括如示例7至10中的任一者所述的半导体装置,其中,所述维度大小被控制以防止缓存冲突。
[0114]
示例13包括至少一个计算机可读存储介质,其包括一组可执行程序指令,所述指令当被计算系统执行时,使得所述计算系统确定浮点指令与存储器读取指令的比率,并且至少部分基于所述比率来控制矩阵内核的维度大小。
[0115]
示例14包括如示例13所述的至少一个计算机可读存储介质,其中,所述矩阵内核进行第一矩阵和第二矩阵之间的操作,并且其中,所述指令当被执行时,还使得所述计算系统将所述第一矩阵的元素重用于所述第二矩阵的多个向量行。
[0116]
示例15包括如示例14所述的至少一个计算机可读存储介质,其中,所述指令当被执行时,还使得所述计算系统检测溢出情况,其中,所述溢出情况包括所述第一矩阵的一部分超过集合关联缓存中的路数,并且响应于所述溢出情况而进行所述部分的内联拷贝。
[0117]
示例16包括如示例14所述的至少一个计算机可读存储介质,其中,所述操作是乘法操作或卷积操作之一。
[0118]
示例17包括如示例13至16中的任一者所述的至少一个计算机可读存储介质,其中,进一步基于硬件约束和延时约束来控制所述维度大小。
[0119]
示例18包括如示例13至16中的任一者所述的至少一个计算机可读存储介质,其中,所述维度大小被控制以防止缓存冲突。
[0120]
示例19包括一种操作性能增强的计算系统的方法,该方法包括确定浮点指令与存储器读取指令的比率,并且至少部分基于所述比率来控制矩阵内核的维度大小。
[0121]
示例20包括如示例19所述的方法,其中,所述矩阵内核进行第一矩阵和第二矩阵之间的操作,并且其中,所述方法还包括将所述第一矩阵的元素重用于所述第二矩阵的多个向量行。
[0122]
示例21包括如示例20所述的方法,还包括检测溢出情况,其中,所述溢出情况包括所述第一矩阵的一部分超过集合关联缓存中的路数,并且响应于所述溢出情况而进行所述
部分的内联拷贝。
[0123]
示例22包括如示例21所述的方法,其中,所述路数定义所述集合关联缓存的关联程度。
[0124]
示例23包括如示例20所述的方法,其中,所述操作是乘法操作或卷积操作之一。
[0125]
示例24包括如示例19至23中的任一者所述的方法,其中,进一步基于硬件约束和延时约束来控制所述维度大小。
[0126]
示例25包括如示例19至23中的任一者所述的方法,其中,所述维度大小被控制以防止缓存冲突。
[0127]
示例26包括用于执行如示例19至25中的任一者所述的方法的装置。
[0128]
从而,本文描述的技术可向用户数据/模型施加零变化(例如,与维度填充方案相比)。该技术还带来了改善的性能,因为它节省了主要存储器拷贝/重排序开销(例如,与gemm内核拷贝方案相比)。
[0129]
实施例适用于与所有类型的半导体集成电路(“ic”)芯片一起使用。这些ic芯片的示例包括但不限于处理器、控制器、芯片组组件、可编程逻辑阵列(programmable logic array,pla)、存储器芯片、网络芯片,片上系统(systems on chip,soc)、ssd/nand控制器asic,等等。此外,在一些附图中,用线条来表示信号导线。某些可能是不同的,以表明更多的构成信号路径,具有数字标注,以表明构成信号路径的数目,和/或在一端或多端具有箭头,以表明主要信息流方向。然而,这不应当被以限制方式来解释。更确切地说,可以联系一个或多个示范性实施例使用这种添加的细节来促进对电路的更容易理解。任何表示的信号线,无论是否具有附加信息,都可实际上包括一个或多个信号,这一个或多个信号可在多个方向上行进并且可利用任何适当类型的信号方案来实现,例如用差分对实现的数字或模拟线路、光纤线路、和/或单端线路。
[0130]
可能给出了示例大小/型号/值/范围,但实施例不限于此。随着制造技术(例如,光刻术)随着时间流逝而成熟,预期能够制造具有更小尺寸的器件。此外,为了图示和论述的简单,并且为了不模糊实施例的某些方面,在附图内可能示出或不示出到ic芯片和其他组件的公知电源/接地连接。另外,可能以框图形式示出布置以避免模糊实施例,并且同时也考虑到了如下事实:关于这种框图布置的实现的具体细节是高度依赖于在其内实现实施例的平台的,即,这种具体细节应当完全在本领域技术人员的视野内。在阐述具体细节(例如,电路)以便描述示例实施例的情况下,本领域技术人员应当清楚,没有这些具体细节,或者利用这些具体细节的变体,也可实现实施例。说明书从而应当被认为是说明性的,而不是限制性的。
[0131]
术语“耦合”在本文中可被用于指所涉组件之间的任何类型的关系,无论是直接的还是间接的,并且可应用到电的、机械的、液体的、光的、电磁的、机电的或者其他连接。此外,除非另外指出,否则术语“第一”、“第二”等等在本文中可能仅仅是为了便于讨论,而不带有特定的时间或先后意义。
[0132]
就在本技术中和权利要求中使用的而言,由术语
“……
中的一个或多个”联接的项目的列表可意指所列出的术语的任何组合。例如,短语“a、b或c中的一个或多个”可意指a、b、c;a和b;a和c;b和c;或者a、b和c。
[0133]
本领域技术人员将从前面的描述中理解:可以以多种形式实现实施例的宽泛技
术。因此,尽管已经结合其特定示例描述了实施例,但实施例的真实范围不应限制于此,因为在本领域技术人员研究了附图、说明书和所附权利要求之后,其他修改将变得显而易见。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献