没有合适的资源?快使用搜索试试~ 我知道了~
342××→使用长SIMD指令的高效直接卷积Alexandre de LimasSantanaBarcelonaSupercomputing Center巴塞罗那,加泰罗尼亚,西班牙Universitat Politècnica de Catalunya巴塞罗那,加泰罗尼亚,西班牙alexandre. delimassantana@bsc.es阿德里亚·阿梅亚赫巴塞罗那超级计算中心西班牙巴塞罗那加泰罗尼亚加泰罗尼亚理工大学西班牙巴塞罗那加泰罗尼亚adria. bsc.es马克·卡萨斯巴塞罗那超级计算中心西班牙加泰罗尼亚巴塞罗那加泰罗尼亚理工大学西班牙加泰罗尼亚巴塞罗那marc. bsc.es摘要本文表明,国家的最先进的建议,以计算卷积的架构与CPU支持-ING SIMD指令提供性能不佳的长SIMD长度,由于频繁的高速缓存冲突未命中。我们首先讨论如何适应国家的最先进的SIMD直接卷积的架构,使用长SIMD指令,并分析增加SIMD长度的算法公式的影响接下来,我们提出了两种新的算法方法:有界直接卷积(BDC),它适应暴露于多门缓存未命中的计算量,和多块直接卷积(MBDC),它重新定义激活存储器布局,以改善存储器访问模式。我们评估BDC,MBDC,最先进的技术,以及一个专有的库上的架构,具有16,384位SIMD寄存器,使用ResNet卷积的CPU。 我们的结果表明,与ResNet-101的最先进技术相比,BDC和MBDC分别实现了1.44和1.28倍的速度提升,与专有库相比,分别实现了1.83倍和1.63倍的速度提升。CCS概念:·计算理论算法的设计和分析;·计算机系统组织→单指令,多数据。关键词:高性能卷积,软件优化,SIMD架构,向量架构1介绍卷积核是深度神经网络(DNN)的基本构建块。它们高度平行的性质允许制作本作品的全部或部分数字或硬拷贝供个人或课堂使用,无需付费,前提是复制品不以营利或商业利益为目的制作或分发,并且复制品在第一页上带有此通知和完整的引用。版权的组成部分,这项工作所拥有的其他人比ACM必须尊重。允许用信用进行提取复制,或重新发布,张贴在服务器上或重新分发到列表,需要事先特定的许可和/或费用。请求权限请发邮件至permissions@acm.org。PPoPP©2023计算机协会ACM ISBN 979-8-4007-0015-6/23/02。- 是的- 是的十五块https://doi.org/10.1145/3572848.3577435使它们成为利用单指令多数据(SIMD)并行结构的一个非常有吸引力的选择。配备支持SIMD指令的CPU的处理器已成为现代超级计算机上应用的并行架构的关键组件[24],这激发了大量研究工作,重点是加速具有SIMD指令的架构上的卷积[8,10,31]。 虽然这部分工作集中在512位寄存器上运行的SIMD指令上,但有一种趋势是SIMD架构实现大于512位的寄存器。 新兴的指令集架构(ISA),如ARM可扩展向量扩展(SVE)[26]或RISC V“V”向量扩展[6],支持在非常大的寄存器上操作的SIMD指令,以及具有2KB寄存器的商业产品,如SX-Aurora处理器[30],证实了CPU支持在大寄存器上操作的SIMD指令的趋势。本文表明,最先进的方法,在支持SIMD指令的CPU上计算卷积[10]在长SIMD架构上运行时性能较差。我们表明,性能差源于架构SIMD长度与优化变量的不必要关联,导致大内存占用和内存访问模式,局部性差和缓存冲突未命中[13]。我们提出了两种新的算法,有效地运行卷积的lution工作负载上长SIMD架构,并克服了两个主要问题的国家的最先进的方法。 第一种算法,有界直接卷积(BDC),防止存储器访问模式触发大量的缓存未命中,通过节流的寄存器阻塞优化,同时仍然暴露足够的计算,以避免停滞的浮点功能单元。 第二种算法,多块直接卷积(MBDC),重新定义了张量的内存布局,有利于常规的内存访问模式,完全消除了缓存冲突未命中的可能性。 我们使用代码生成引擎,无论是即时(JIT)汇编程序还是静态调优例程的集合,来生成针对每个卷积工作负载和架构的需求定制的BDC或MBDC的代码。本文的贡献如下PPoPPAlexandre de Limas Santana、Adrià Armejach和Marc Casas343××××()()()()()()·········演示了在SIMD架构上运行卷积工作负载的最先进方法在长SIMD架构的上下文中性能不佳提出了有界直接卷积(BDC)算法,该算法明智地限制了暴露于硬件的计算量,以减少数据缓存冲突未命中而不使功能单元停止。提出了多块直接卷积(MBDC)算法,该算法通过重新定义张量存储器布局来改进存储器访问模式。评估BDC、MBDC和SX-Aurora [30]处理器上最先进方法的性能,SX-Aurora [ 30 ]处理器是一种具有16,384位SIMD寄存器的CPU架构我们的分析包括vednn[22]中的卷积算法,vednn是一个高度调优的供应商专有库。 我们的研究结果表明,BDC和MBDC在ResNet-101工作负载上分别实现了1.44和1.28的速度提升,以及1.83和1.63的速度提升。2卷积原语二维卷积广泛用于计算机视觉模型[11,25,28],是三个秩为4的张量操作数的函数:两个张量描述源( )和目的地( )激活,最后一个张量( )表示滤波器权重。 激活张量( 和 )维度表示:小批量大小( ),输入或输出特征映射的数量(和),激活高度(和)和宽度(和)。权重张量包含input()和output()特征图以及感知场高度()和宽度()维度。在本文中,我们使用元组描述这些张量形状,遵循最先进的惯例[1,15]。 我们将和分别表示为、和、, 张量表示为、。在前向卷积过程中,张量在张量上滑动,在它们的共享维度上创建一系列形状为“”、“”、“”的 每个交叉点生成一个输出元素,该输出元素通过交叉区域内的逐元素乘法的总和来计算。 这个例程扫描 张量空间域,然后在小批量中的不同索引和图像上重复,最终组成 张量数据。额外的卷积参数,stride卷积参数和padding卷积参数,控制如何在通过跳过激活或考虑在空间域的边缘处的零填充来训练DNN模型需要另外两个过程:向后数据和向后权重。张 量在向后的数据方向上滑过 张量,并计算关于 张量操作数的偏导数。后向数据输出一个新的张量,算法1朴素卷积Input:,输出:1:对于θ=0,θ= 0二: 对于=0,做3:对于=0,做4:对于=0,做5:对于=0,������做6:对于=0,做������������7:ih = oh *+ kh -8:对于=0,做9:iw = ow *最大功率+ kw -最大功率10:n[n,oc,oh,ow]+=n[n,ic,ih,iw]*n[oc,ic,kh,kw]shape作为x2,并将其传播回前一个模型层,在那里它被称为x2,x2,输出张量梯度。在向后权重传递期间,算法卷积和卷积张量以计算权重梯度,或者,应用于 张量以调整权重。虽然不同的方向改变了张量的作用,但这些变化不会深刻影响计算的方式。事实上,该算法在所有方向上都具有相同的结构和优化,只有少数例外,包括大型过滤器和非单位步幅[10],这在计算机视觉工作负载中不是标准的。算法1示出了简单的2维前向卷积,突出显示了包裹单个融合乘法和累加(FMA)操作的七个嵌套循环。 循环和底层张量内存布局可能会改变,但输出保持不变,前提是内存偏移量的计算保持一致。后向权重和后向数据方向使用类似的循环结构,并且不同之处在于哪个张量是输出,即, 在后向数据传递期间和 在后向加权期间。2.1高性能卷积每个卷积输出元素是独立的,适合SIMD并行执行模型。 前向、后向数据和后向权重方向包含,和独立的输出元件,将卷积定义为高度并行的。事实上,高效的卷积算法主要依赖于正确地将并行资源映射到卷积循环和策略,以增加各种内存级别的数据重用[4,27]。 卷积可以转换为GEMM [2,5,29]和FFT[19]问题,并使用高度优化的数学内核库解决。加速卷积的其他技术涉及使用量化和降低精度的数据类型[3,17],这以模型精度为代价减少了张量内存占用。····使用长SIMD指令的PPoPP344EEE()··E··表1.SIMD处理器体系结构分析模型。假设是32位浮点数据库。建筑学英特尔Skylake 16 2 5 160NEC SX-Aurora512 3 8 122882.2SIMD直接卷积算法卷积的直接算法公式通过使用缓存阻塞和循环重新排序等优化来加速计算。先前的工作为配备SIMD ISA的CPU提出了高效的卷积算法[8,10,31],报告了AVX512处理器上某些ResNet [11]层的理论峰值性能的90%。 这些建议制定了SIMD直接卷积算法,避免了基于FFT和GEMM的解决方案所需的im2col变换的内存开销[5,19]。尽管存在微小差异,但所有SIMD直接卷积变体都应用由分析架构模型驱动的标准优化集[12,18]。 这些模型指导寄存器阻塞因子等优化变量的定义。 现代数值内核库,如oneDNN [15]和VEDNN[22],包含SIMD直接卷积算 法的实现,支持Tensorflow[1],Caffe [16]和PyTorch [23]等软件工具。我们稍后在第5节中展示了最大SIMD长度与优化变量之间的不必要关联会破坏每E ≥(1)���������������������������������������表1显示了SX-Aurora [30]和Intel Skylake [9]架构的、和参数的值。如该表所示,与512位架构(如IntelSkylake)相比,长SIMD架构(如SX-Aurora)需要并行算法来显示大量的独立FMA计算。 这种差异不仅源于较大的向量长度(),还源于FMA单元数量()和FMA延迟()的增加。4长SIMD结构上的直接卷积本节描述如何应用最先进的技术[8,10,31]来制定长SIMD架构上的直接卷积 我们在第5节中使用这个公式来揭示长SIMD架构上表现出的缺点。 我们在第6节中提出的建议,通过调整某些算法方面以适应更长的SIMD长度来改进此公式。除非另有说明,否则我们将在本节中讨论关于前向数据方向的卷积,并在需要时提供适当的注释。第8节评估了所有方向,证明我们的贡献使所有方向受益。4.1使用SIMD指令和寄存器阻塞使用SIMD指令允许CPU利用数据-在具有CPU的架构上使用此技术长SIMD寄存器。级别并行性,对应于贡献,贡献3体系结构分析模型我们使用用于指导高性能GEMM [18]和卷积[31]内核优化效果的分析SIMD机器模型来激励我们的算法设计选择。 该模型考虑SIMD架构的以下硬件特征:SIMD寄存器:SIMD指令消费和生产,从/到SIMD寄存器,其中每一个与SIMD长度的数据,其中的 每个元素。 存在通过SIMD指令可寻址的总共逻辑向量寄存器。FMA单元:这些单元支持SIMD融合乘加(FMA)指令,延迟时间为2000个周期.硬件将SIMD FMA指令调度到独立的FMA处理单元。 可以通过在每个周期发出指令来完全流水线化每个FMA单元。SIMD架构达到理论峰值perfor-曼斯时,完全订阅所有的可编程逻辑器件的矢量FMA单位。维持这种性能需要将几个独立的计算()暴露给架构。 公式1表示模型架构变量之间的关系,以避免寄存器依赖性停顿,并充分受益于CPU深度SIMD流水线。Formula1的缩写。 该寄存器阻塞优化子与独立的计算,以防止由于指令之间的数据依赖性的CPU失速所有FMA单位。公式1的变量������������和������������说明了SIMDFMA单元的数量和延迟。 我们使用SIMD指令在特征图维度������上运行计算,遵循当前实践[8,10,31]。我们将寄存器分块应用于输出张量空间维度(空间维度和空间维度),因子为空间维度和空间维度。以来并且根据公式1,在约束条件下,区组因子必须满足公式2���������������创建独立的累加链的累加元素 。���������������������������������������������<���������������������������������������������对于反向数据传播,输出张量为我们在循环中使用SIMD指令,尺寸并对和尺寸应用寄存器阻塞。在后向权重传递期间,输出张量是最大的,我们选择最大的特征映射方向(最大或最小)进行矢量化,因为两者都可用。 我们使用单个寄存器阻塞因子()将寄存器阻塞应用于较小的特征映射维度。PPoPPAlexandre de Limas Santana、Adrià Armejach和Marc Casas345I1.0 I1.1 I1、2 一,三…Ih-1,0I h-1,1I h-1,2I1.0 I1.1 I1、2 一,三…Ih-1,0I h-1,1I h-1,2I1.0 I1.1 I1、2 一,三…Ih-1,0I h-1,1I h-1,2((−(+))/)()()(−)()////////()()高度宽度算法2长SIMD架构的直接卷积算法输入:源激活张量(K1),权重张量(K2)输出:目标激活张量(K3)架构变量:架构变量,架构变量1:=,2:=,3:=1,4:=1,1������������������������������������������5:SIMD=SIMD长度,���SIMD长度������������6:对于θ=0,θ= 0第七章:对于=0,/做图1.SIMD直接卷积中使用的高性能激活张量存储器布局。箭头表示连续存储器位置中的数据元素。请注意,特征图块会交错相邻空间点的数据4.2张量内存布局最先进的卷积实现[15]使用十进制存储器布局,通过单位步幅SIMD加载/存储指令将部分和移动到寄存器/从寄存器移动。 图1描绘了这种内存布局,通过使用黑色箭头指示单位步幅访问来应用于激活张量。 内存布局是通过按以下因子分块和特征映射维度来构建的和,都设置为,并将块拉到内存中最内层的维度。下面的元组代表了我们考虑的张量的内存布局从最外层到最内层的维度顺序为:(,,,,),( ,,,, ) and(,,,, ,).前所未有的条件,如:<<<<发生在长SIMD架构上。典型的SIMD架构通常使用条带挖掘或零填充最小操作数来处理这些场景。然而,支持长SIMD指令的ISA [6,26,30]可以通过动态减少SIMD长度来处理这种情况。为了充分利用这一特性,我们使用了独 立 的 动 态 阻 塞 因 子=、和=、,完全避免了充填和露天开采。4.3循环顺序和多线程我们应用最先进的优化[8,10,31]来优先考虑缓存重用的缓存张量。 我们将循环放置在权重空间维度和输入特征映射块(������. 、循环嵌套、循环嵌套和循环嵌套)。 在分块输出空间域上的循环(������. ,���������������和������������循环),然后是块特征映射循环(������. ,������和)。���������������最后一个循环迭代minibatch元素,并且可以并行执行,其中每个计算单元处理一个8: 对于=0,/9:���对于=0,/10:对于=0,/11:for(,)=(0:,0:)doUnrolled���������12:,=([������][][+][���+ ][0],������)������13:for(,������������,)=(0:,0:������,0:)do������������14:=([]][0],������)������������������������15:for(,)=(0:,0:)doUnrolled���������16:,=[ ][][++][++][] ������������17:,=(������,)������������������18:for(,)=(0:,0:)doUnrolled���������19:(���,,[][][+][+ ][0],������)������������������������在共享来自末级缓存(LLC)的权重张量数据的同时,我们考虑了来自最新技术水平的不同并行化策略,以在向后权重方向上并行化计算[8,10]。 我们在向后权重传播期间并行地在最小特征映射维度上执行循环。例如,当>然后,将该循环向量化,并将该循环接收寄存器阻塞优化和并行执行4.4长SIMD结构的直接卷积算法我们在算法2中展示了在长SIMD架构上计算前向直接卷积的算法。 我们在第1-2行中设置动态缓存阻塞因子。第3-4行驱动寄存器阻塞,如第4.1节所述。接下来,第5行设置所有SIMD指令的工作SIMD长度以下代码行指定(i)出现在第6-10行中的调度循环;以及(ii)包含第11-19行的微内核。调度循环组织子卷积的顺序,而微内核指的是计算密集型区域。后一段在第11、15和18行中展示了完全展开的循环,这些循环通常由即时(JIT)汇编器[8,10]或静态编译技术和手动调优代码段[14,32]产生。Nvlen我0.0 I0.1 I0.2 I0.3...I 0,我我0,2 0.3我0,w-1…我,0我,1我,2我,3… I I1.1 I1、2一,三…I0,wI1,w-I0,w-1I 1,w-1I1,w-1Ih-1.0 Ih-1.1 Ih-1,2 … I特征图Ih-1,w-1Ih-1,w-1-1我0.2我0.3我0.0我0.1Ih-1,w-I1,w-我0.0我0.1使用长SIMD指令的PPoPP346()···(+)·(+)·····≥···10410310210156x56,64 28x28,128 14x14,2567x7,5125.2内存访问模式显示高缓存未命中率第4.2节中描述的激活内存布局和寄存器块优化定义了标量内存访问模式,该模式导致支持长SIMD指令的CPU上频繁的L1数据缓存冲突未命中。 图3展示 了在前向传递期间跨张量的这种内存访问模式。黑色箭头表示图2. SIMD直接卷积算法微内核区域的内存占用,考虑在具有不同向量长度的架构上进行3x3卷积。最里面的卷积循环(第13行)包含对共享操作数的向量加载���(第14行)和一系列标量加载(第16行)以及SIMDFMA指令(第17行)。我们使用SIMD FMA,其中一个标量被乘数是标量乘法器,第17行中的标量乘法器,它受到所有主要新兴向量ISA(如RISC-V V [6],ARMSVE [26]和NEC SX)的支持奥罗拉[30]。 在该FMA操作中,CPU隐式地广播标量元素以形成临时向量操作数,而不使用专用向量寄存器。5直接卷积的简化5.1大型微内核内存占用卷积微内核的内存占用量由卷积、卷积和卷积子张量驱动在算法2的第14行中访问的 子张量被多次重用,因为它被应用于所有空间输出点(. ,第9行和第10行中的循环)。因此,它应该被保存在高速缓存的缓存结构中,直到第8行的循环的下一次迭代将卷积微内核区域的内存占用量限制为最后一级缓存(LLC)大小足以完全满足此标准,并避免第14行中不必要的片外内存访问的扩散。微内核区域加载������������������������������权重元素、������������������������������������������������源张量元素,并将源张量元素移动到目的���������������地张���������量/从目的地张量移动源张量元素。由于参数为���������正如我们在第4.2节中所解释的,两者都与架构向量长度的增加有关,这使得权重子张量大小呈二次增长。这主要影响具有大滤波器的卷积,其中,卷积和卷积循环中的迭代次数进一步加剧了问题。图2描述了VGG [25]和ResNet[11]模型中3x3卷积的内存占用,其中内存占用在具有16384位向量的架构上最多可达9 MB。X轴描述了激活空间大小和特征图通道数量方面的卷积层。访问,匹配特征图阻塞因子。 这种模式也体现在 向后数据和权重方向的张量中。当使用长SIMD指令时,具有等于SIMD长度()的步幅的一系列存储器访问在围绕高速缓存寻址空间的累积偏移循环之前仅访问高速缓存集的一小部分。和缓存行大小()之间的关系,通常遵循= 2和 0,导致访问完全相同的缓存集序列,与缓存关联性无关。最后,如果一系列这样的访问足够大以循环总的高速缓存大小,则第一高速缓存行可能在它们可以在随后的卷积循环上被访问时被重用之前被驱逐。公式3指定了指示高速缓存冲突未命中何时出现在直接卷积中的不等式。该公式取决于(i)L1缓存大小( 1������������);(ii)空间点之间的距离,构成卷积步幅参数( ���������)和激活张量特征图阻塞因子(���);以及(iii)在重用先前访问的缓存行之前访问的空间点的数量(由寄存器阻塞优化定义为������)���������。激活张量特征图分块因子是分块因子或分块因子,这取决于算法使用标量指令访问哪个张量���������������2017年10月21日星期一上午10:00- 11:00������������������������������<根据公式2和表1的数据,具有32 KB L1缓存和16384位宽向量寄存器(如SX-Aurora [30])的架构需要24的组合寄存器阻塞因子(CLK���),以避免数据依赖性停顿。假设一个卷积,其中,为1,为16384( ),由于不可解的不等式(16>���������������������������������������<���������������冲突未命中严重破坏了第4.1节和第4.2节中描述的优化的有效性,使得计算不可能饱和,这要么是因为寄存器文件未被充分使用,产生流水线依赖性停顿,要么是因为SIMD通道饥饿等待来自L1的数据依赖性。我们对第8节的评价证实了SX-Aurora中的这一现象512位1024位2048位16384位内存占用(KB)PPoPPAlexandre de Limas Santana、Adrià Armejach和Marc Casas347∗/··++··()(+ −)···()(+ −)····������������···第一接入…...寄存器块高度(RBh= 2)特征图块(ICb=Nvlen)寄存器块宽度(RBw= 7)在权重张量存储格式上也是如此,其中我们将权重张量的维度阻塞因子从并将其关联到张量张量元组,将张量张量元组表示从(张量/张 量元组,张量/张量元组,张量)更改为( 张量 / 张 量元 组 ,张 量/ 张量 元组 , 张 量)。算法3自动调整算法输入:输入、输出架构变量、������������������������������������������输入������������������������������������������������������������������������1:=���������2:=图3.前向传递期间张量上的SIMD直接卷积内存访问模式 的示例。这种访问模式强调少量的高速缓存集时,使用- ING长SIMD指令,这将导致冲突未命中。6使用长SIMD指令的高效直接卷积本节介绍我们的算法解决方案,以有效地运行直接卷积运算使用长SIMD指令。第6.1节描述了一种动态减少卷积微内核的内存占用的方法,并解决了第5.1节中讨论的问题。第6.2节和第6.3节介绍了两个建议,通过明智地限制暴露给SIMD单元的计算量来减少缓存冲突未命中的数量,并分别根据激活张量内存布局进行调整。6.1动态适应微内核内存占用我们提出了一种方法来自动适应卷积微内核的内存占用许多SIMD架构,包括那些长向量。我们的方法结合了两种策略:循环重新排序和循环重复,实现到一个动态的自动调整算法。循环重新排序:减少卷积的内存占用的最简单方法是将权重空间域上的循环从微内核移动到子卷积调度区域。然而,这种技术不适用于1x1卷积,并减少 了常规卷积上的张量L1缓存重用,需要额外的张量 激活。循环调整大小:另一策略是减少微内核循环在输入特征映射块上的迭代次数(算法2的第13行中的最后一个循环迭代器)。这个循环的迭代次数不必要地与变量的向量长度联系在一起。将此循环的迭代次数从最小循环减少到最小循环,可以以相同的速率减少内存占用,同时仍然可以访问带到L1缓存的所有数据 我们反映这种变化3:=4:=,5:=,1������������������������������6:=,17:=������������������ℎ������������八: ������������=���ℎ���������9:=������������ ������ℎ���������10:while>11:如果>2然后12:=213:else if变量1then������14:=1������15:=16:如果不满足条件,则17: 否则如果不满足条件>1,则18:不满足条件=1���������������������������19:=20:=(,)21:=���������������������ℎ������������22:=���������������ℎ���������23:=���������������������return(���返回,返回,返回)我们通过一个优先考虑循环重排序的算法来应用上述策略。 算法���使用张量大小和以下架构参数作为输入来找到适合高速缓存的最大子张量大小:(i)向量长度( ������������),(ii)高速缓存行大小( ���������������),以及(iii)LLC存储容量(������������)。该算法快速生成阻塞因子,������算法2中第13行的三个循环的卷积和卷积,在运行时根据卷积问题和目标架构决定它们的大小。算法3显示该过程。该方法最初假设卷积微内核区域中的权重子张量上的最高可能循环值(第1-3行)。首先在第4-9行计算LLC、LLC和LLC张量的内存占用,然后在第10行与LLC大小该例程应用第11-12行中的循环大小调整策略,减少缓存循环大小,除非这种减少会导致它小于缓存步幅=ICb = N= 2n *N弗伦克莱因0,0,Nvlen0,1,Nvlen0,2,Nvlen0,3,Nvlen0,4,Nvlen0,5,Nvlen0,6,Nvlen0,0,20,1,20,2,20,3,20,4,20,5,20,6,20,0,10,1,10,2,10,3,10,4,10,5,10,6,10,0,00,1,00,2,00,3,00,4,00,5,00,6,01,0,Nvlen1,1,Nvlen1,2,Nvlen1,3,Nvlen1,4,Nvlen1,5,Nvlen1,6,Nvlen1,0,21,1,21,2,21,3,21,4,21,5,21,6,21,0,11,1,11,2,11,3,11,4,11,5,11,6,11,0,01,1,01,2,01,3,01,4,01,5,01,6,0使用长SIMD指令的PPoPP348行大小。 循环重新排序回退策略发生在第13-16行和第17-20行,方法是将和循环迭代计数设置为1。在这些安排之后,例程重新计算微内核的内存占用(第 21-23行),并在第10行开始另一次迭代算法3通过将激活张量6.2有界直接卷积有界直接卷积(BDC)算法通过降低缓存冲突未命中的下限来缓解算法4MBDC(最大值=1,最小值=0)输入:源激活量,权重张量输出:输出激活模式架构变量:输出激活模式、输出激活模式、输出激活模式优化变量:输出激活模式、输出激活模式、输出激活模式������������������������������1:=2:=3:=(,)4:=((−)/������,1)������ ���������������5:=_(,,)6:=(���,)向量长度���������������������������优化变量,并采用7:对于θ=0,θ= 0八: 对于=0,/做我们在第6.1节中描述了一种方法,用于使微内核内存占用适应缓存层次存储。我们放松公式2的不等式,基于以下观察:具有支持长SIMD指令的CPU的架构是加载/存储机器,因此需要标量代码来加载FMA标量操作数并更新用于未来标量加载的存储器偏移 这些标量instruc- tions被放置在SIMD FMA指令之间,并在相关的SIMD FMA之间创建一些距离。我们还使用公式3来设置寄存器阻塞因素的上限,防止内存访问模式产生缓存冲突未命中。 我们结合这两种方法来制定一个值范围的������优化和���������优化变量,在公式4中描述,避免数据依赖性失速和缓存冲突的失误。9: 对于=0,/10:���对于=0,/11:对于=0,/12:���对于=0,/������������13:对于=0,/14:for(,)=(0:,0:)doUnrolled���������15:,=������������������([][][+][+]���������][0],16:for(,������,)=(0:���,0:,0:)do������������������17:=(���[��������� ][/][][ %] [0 ],)18: for(,)=(0:,0:)do展开19:,=[][][+���������������������������������������������������������20:,=(������,)������������������21:for(,)=(0:,0:)doUnrolled���������22:(,,[���][������][+������·���联系我们≤������ℎ ·��������� < 1联系我们(四)][0],公式4引入了一个新的变量,它是直接卷积微内核区域内的子SIMD FMA之间的指令方面的最小距离。 经验观察表明,针对RISC-V“V”[6]和SX-Aurora [30] ISA的编译器在向量FMA指令之间使用两个标量指令:(i)标量加载以将值带到寄存器,以及(ii)加法以更新张量存储器指针。因此,在这种情况下,由于后续的SIMD FMA在三个指令之前,因此SIMD FMA距离为三在SX-Aurora中,设置为3允许寄存器阻塞因子低至8,而之前的最小值为24。6.3多块直接卷积多块直接卷积(MBDC)算法重新定义了表征张量卷积布局的分块因子,改善了卷积微内核的内存访问模式,减少了缓存冲突未命中。第5.2节中描述的 张量存储器访问模式在=时不会导致冲突未命中,因为两者和也变得等于,即。,在这种情况下,对缓存张量的访问之间的步幅仅为一个缓存行,这意味着所有缓存集都将受到压力平等地基于这一观察,我们建议阻止张量是用“”代替“”。这一更改将架构向量长度与优化变量和分离,以改善张量标量访问模式局部性。我们的建议,以减少从激活张量存储器布局的特征映射维度到更小的块分散,从激活张量存储器布局的特征映射维度到更小的块。由于最里面的维度小于,使用单位步幅向量加载/存储(即,算法2中的第12和19行)。因此,我们支持我们提出的存储器布局使用粗粒度聚集/分散指令时,访问激活张量与SIMD指令行12和19算法2。算法4描述了MBDC。通过我们在第6.1节中描述的动态方法来确定Δε、Δε和Δε的值。���第15行和第22行中的聚集/分散操作替换了涉及Al-���出租m2的张量的向量加载/存储。 索引在第5行计算,并在等式5中定义32位元素。要素图块中包含PPoPPAlexandre de Limas Santana、Adrià Armejach和Marc Casas349/(/)······大小为1000字节的子张量形成大小为1000字节的子张量,导致 32位元素的块之间的距离为1000字节。我们注意到第9行和第16行中循环的迭代次数,这两行利用了由自动调优器动态确定的���������������������������������������������������������������������[存储器到寄存器的收集操作和寄存器到存储器的分散通常会导致显著的性能成本。新兴的SIMD ISA通过支持结合连续和非连续存储器访问的不同种类的聚集/分散操作来降低这种成本。例如,RISC-V V1.0 [6]支持每个元素高达128位的聚集/分散,可以看作是四个连续的32位字的块。ARM SVE [26]支持组合的聚集/分散操作,通过为每个索引返 回 两 个 连 续 的 元 素 来 减 少 单 个 内 存 请 求 的 数 量 。 SX-Aurora[30]支持二维向量加载/存储,它以整个128字节缓存行的粒度模拟向量聚集/分散。 我们利用粗粒度gath- er/分散操作加载/存储非连续块的连续元素到/从SIMD寄存器,并减少CPU发出的内存请求的数量。6.4总结表2描述了本节的摘要和我们的设计贡献,显示了针对512位SIMD指令的原始直接卷积,其对长SIMD架构的适应(第4节),以及我们的两个新算法贡献:(i)BDC和(ii)MBDC。激活块列描述了每个算法用于���������和���������变量,它定义了激活张量内存布局。 “权重块”列描述权重张量的分块因子,它还负责定义权重张量内存布局。 调度粒度定义卷积微内核区域内块上循环的最小迭代次数������。寄存器块列定义了不同算法的组合寄存器阻塞因子的值范围 该表突出了我们的提案的要点:(i)BDC上的新寄存器块大小约束,以及(ii)MBDC上激活存储器布局的重新定义。6.5执行我们在oneDNN [15]库设计之后阐明了我们的贡献,其中内核的实例化遵循两步过程,包括:(i)初始问题声明和(ii)内核执行。算法3在问题声明期间接收架构变量和卷积参数,包括张量形状,并计算所有优化变量。这些信息被编入法典并转发到代码生成器引擎,或者是JIT汇编器,或者是静态调优函数的集合。 代码生成器返回对应于卷积微内核区域的函数指针。随后,卷积调度循环在内核执行期间调用微内核函数指针。7实验方法卷积工作负载:我们考虑ResNet [11]模型上使用的卷积层。表3根据第2节中详细描述的卷积参数描述了这些层。硬件平台:我们在NEC SX-Aurora系统上运行实验活动[30]。 该SX-极光处理器,排序功能SIMD寄存器的容量为16,384位。SIMD处理单元采用8周期深的流水线,并且每个周期对64个32位元素进行操作。有三个向量单元端口专用于计算向量融合乘加指令,每个周期每个核心产生64 3 2 = 384个32位浮点运算的最大吞吐量。在这项工作中使用的SX-Aurora系统容纳八个核心运行在1.6GHz的频率,配置的理论峰值性能为614 GFLOP/s的每核心和4912GFLOP/s时,使用所有八个矢量核心。每个核心fea-tures两个32 KB的2路集的指令和数据关联缓存,分别和一个256 KB的二级缓存4路集associative涵盖指令和数据。二维网状片上网络(NoC)将内核连接到共享的16 MB LLC。LLC 128字节高速缓存行交错到16个存储体中,用于在服务单位步幅向量存储器指令时进行并行访问,并处理标量和SIMD请求。处理器采用48 GB片内HBM2 RAM,总带宽为1.35 TB/s。卷积算法:我们考虑以下方法来运行卷积工作负载:1. 长SIMD架构的直接卷积(DC):这种方法应用了针对长SIMD架构定制的最先进的优化[8,10,31]。 我们在第4节中描述了DC。2. NEC专有库(vednn):这种方法基于vednn [22],这是一个高性能库,具有针对SX-Aurora的优化卷积内核,最初创建用于支持TensorFlow-VE [21]。对于给定的问题,我们总是使用vednn中性能最好的算法,它可以是直接卷积或隐式/显式GEMM卷积核。3. 有界卷积(BDC):我们在6.2节中描述了这个算法。4. 多块直接卷积(MBDC):我们在6.3节中描述了该
下载后可阅读完整内容,剩余1页未读,立即下载
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)