没有合适的资源?快使用搜索试试~ 我知道了~
342××→→使用长SIMD指令的高效直接转换Alexandre de Limas Santana巴塞罗那超级计算中心巴塞罗那,加泰罗尼亚,西班牙加泰罗尼亚政治大学巴塞罗那,加泰罗尼亚,西班牙亚历山大。delimassantana@bsc.esAdrià Armejach巴塞罗那超级计算中心巴塞罗那,加泰罗尼亚,西班牙加泰罗尼亚政治大学巴塞罗那,加泰罗尼亚,西班牙adria. bsc.es马克·卡萨斯巴塞罗那超级计算中心巴塞罗那,加泰罗尼亚,西班牙加泰罗尼亚政治大学巴塞罗那,加泰罗尼亚,西班牙三月c. bsc.es摘要式本文证明了在CPU支持SIMD指令的体系结构上进行计算转换的最新技术建议,由于频繁的缓存冲突未命中,这些指令在较长的SIMD长度内提供较差的性能。我们首先讨论了如何使用较长的simd指令将最先进的SIMD直接转换到结构中,并分析了增加SIMD长度对算法公式的影响接下来,我们提出了两种新的算法方法:有界直接卷积(BCD),它使暴露于半门高速缓存未命中的计算量适应;以及多块直接卷积(MBDC),它重新定义了激活存储器布局,以改进存储器访问模式。我们评估了BDC、MBDC、最先进的技术以及一个专有库,该库基于一种架构,该架构以使用ResNet卷积的具有16,384位SIMD寄存器的CPU为特色。我们的结果表明,与ResNet-101的最先进技术相比,BDC和MBDC分别实现了1.44和1.28倍的速度提升,与专有库相比,分别实现了1.83倍和1.63倍的速度提升。CCS概念:·计算理论,算法的设计和分析;·计算机系统组织→单指令,多数据。关键词:高性能卷积,软件opti-mization,SIMD架构,矢量架构1介绍性卷积内核是深层神经网络(DNN)的基本构建块。它们具有高度平行的性质。允许制作本作品全部或部分的数字或硬拷贝供个人或课堂使用,不收取任何费用,前提是这些拷贝不是为了利润或商业优势而制作或分发的,并且这些拷贝在第一页上有本通知和完整引用。由ACM以外的其他人拥有的本作品组件的版权必须得到尊重。允许使用信用证进行摘要处理。要以其他方式复制或重新发布,要在服务器上发布或重新分发到列表,需要事先获得特定权限和/或付费。从permissions@acm.org请求许可。PPoPP©2023计算机协会。ACM ISBN 979-8-4007-0015-6/23/02。。。$15.00https://doi.org/10.1145/3572848.3577435这使得它们成为利用单指令多数据(SIMD)对allelism的并行架构的一个非常有吸引力的选择。配备有支持SIMD指令的CPU的处理器已经成为现代超级计算机上实现的并行架构的关键组件[24],这已经激发了大量的研究工作,这些研究工作集中在加速以SIMD指令为特征的架构上的转换[8,10,31]。 虽然本工作集中于在512位寄存器上操作的SIMD指令,但存在实现大于512位的寄存器的SIMD体系结构的趋势。 新兴的指令集架构(ISA),如ARM可扩展向量扩展(SVE)[26]或RISC V "V"向量扩展[6],支持在超大寄存器上操作的SIMD in-structures,以及以2KB寄存器为特征的商用产品,如SX-Aurora进程[30],证实了CPUs支持在大寄存器上操作的SIMD指令的趋势。这篇论文展示了最先进的方法是什么。在支持SIMD指令的CPU上进行的计算运算[10]在长时间运行SIMD架构时会导致性能下降。我们证明了较差的性能源于SIMD架构长度与优化变量之间不必要的关联,导致了较大的内存足迹和内存访问模式,以及较差的本地性和缓存冲突未命中[13]。我们提出了两种新颖的算法来有效地在长的SMD架构上运行convolution工作负载,并克服了最先进方法的两个主要问题。第一种算法,即有界直接卷积(BDC),通过降低寄存器阻塞选项,防止内存访问模式触发大量缓存未命中,同时仍然暴露足够多的计算,以避免阻塞浮点功能单元,从而防止内存访问模式触发大量缓存未命 中 。 第二种算法,即 多 块 直 接 卷 积(MBDC),重新定义了张量的内存布局,以支持规则的内存存取模式,从而消除了缓存冲突丢失的可能性。 我们使用代码生成引擎,无论是准时制(JIT)汇编程序还是静态调整路由的集合,来生成针对每个卷积工作负载和体系结构的需求而定制的BDC或MBDC代码。本文做出了以下贡献:......PPoPP亚历山大·德·利马斯·桑塔纳、阿德里亚·阿梅哈赫和马克·卡萨斯343××××()()()()()()·········它证明了在长时间SIMD体系结构的背景下,在SIMD体系结构上运行卷积工作负载的最先进方法会受到性能较差的影响它提出了有界直接卷积(BDC)算法,该算法合理地限制了暴露于硬件的计算量,以便在不使功能单元停滞的情况下减少数据缓存冲突丢失。提出了多块直接卷积(MBDC)算法,该算法通过重新定义张量存储器布局来改善存储器访问模式。在SX-Aurora [30]处理器(一种具有16,384位SIMD寄存器的CPUs架构)上评估BDC、MBDC和最先进方法的性能我们的分析包括vednn [ 22 ]中的卷积算法,vednn [ 22]是一个经过高度调整的供应商专有库。我们的结果表明,在ResNet-101工作负载上,BDC和MBDC分别实现了1.44和1.28的速度提升,以及1.83和1.63的速度提升。2第1009章原始卷积在计算机视觉模型中广泛使用的二维卷积[11,25,28]是三个4阶张量操作数上的函数:两个张量描述源( )和目的地( )激活,最后一个张量( )表示滤波器权重。 激活张量( 和 )表示的维度:minibatch size (和)、输入或输出特征映射的数量(和)、激活高度(和)和宽度(和)。权重张量包含输入()和输出()特征映射以及感知域的高度()和宽度()维度。在本文中,我们使用元组描述了这些张量形状,遵循了最先进的惯例[1,15]。 我们分别将和表示为、、和、,将张 量 表 示为 、 。在前向卷积过程中,张量滑动到张量 上,产生了一系列形状为、、的三维交集,覆盖了它们的共享维数。每个相交生成一个输出元素,该输出元素通过相交区域内元素方向乘法的总和来计算。 该例程扫描 张量空间域,然后在迷你批处理中跨不同的索引和图像重复,最终 合成张量数据。附加卷积arguments,stride和padding,政府如何移动张量跨越通过在空间域的边缘处跳过激活或考虑零填充来实现空间域训练DNN模型需要另外两个步骤:反向数据和反向权重。 张 量在反向数据方向 上沿张量滑动,并计算与张量操作数相关的偏导数。反向数据输出一个新的张量,具有相同的算法1--朴素的卷积。输入 :、输出:1:对于=0, do2: 对于=0,do3:对于=0,do4:���for=0,do5:for=0,������do6:���for=0,do������7:ih = oh *+ kh-8:对于=0,do9:iw = ow *+ kw -10: [n,oc,oh,ow]+= [n,ic,ih,iw]*[oc,ic,kh,kw]将其整形为,并将其传播回上一个模型层,其中称为,即输出张量梯度。在反向权重传递过程中,算法将和张量卷积以计算权重梯度,或, 这是 应用于张量来调整权重的。虽然不同的方向改变了张量的作用,但这些变化并不显著地影响计算的进行方式。 事实上,该算法在所有方向上共享相同的结构和优化,只有少数例外涉及大过滤器和非单元遍历[10],这在计算机视觉工作负载上不是标准的。算法1显示了一个简单的二维正转,高亮度的七个嵌套循环,围绕一个单一的融合乘法和累积(FMA)操作。 循环和下面的张量存储器布局可以改变,但是只要存储器偏移量的计算保持一致,输出保持相同。反向权重和反向数据地址使用类似的循环结构,并且在哪个张量是输出方面存在差异,即, 在反向数据传递期间和 在反向权重期间。2.1高性能的卷积每个卷积输出元件都是独立的,符合SIMD并行执行模型的要求。前向数据、后向数据和后向权重地址包含和独立的输出元素,将卷积定义为高度并行的。[10] 事实上,高效的卷积算法依赖于将并行资源正确映射到卷积循环和策略,以增加不同内存级别上的数据重用[4,27]。 卷积可以转换为GEMM [2,5,29]和FFT [19]问题,并使用高度优化的数学内核库进行解决。加速卷积的其他技术包括使用量化和降低精度的数据类型[3,17],这以模型准确性的成本降低了张量存储器足迹[4]。····使用长SIMD指令的PPoPP344EEE()···E··表1. 应用于SIMD cpus的架构分析模型。假设32位浮点数据类型。-建筑EIntelSkylake 16 2 5 160NEC SX-Aurora512 3 8 122882.2单核苷酸单核苷酸多态性直接卷积算法用于卷积的直接算法公式通过使用诸如高速缓存阻塞和循环重新排序之类的优化来加速计算。[10]以前的工作为配备了SIMD ISA的CPU提出了高效的卷积算法[8,10,31],报告了AVX512处理器上某些ResNet层[11]理论峰值性能的90%。这些建议制定了SIMD-direct convolution算法,避免了基于TFT和GEMM的解决方案所需的im 2col变换的内存开销[5,19]。尽管存在微小差异,但所有不同的SIMD直接卷积都应用了由分析架构模型驱动的一组标准优化[12,18]。 这些模型指导了优化变量(如寄存器块因子)的定义。 像oneDNN [15]和VEDNN [22]这样的现代数值内核库结合了SIMD直接卷积算法的实现,支持像Tensorflow [1]、Caffe [16]和PyTorch [23]这样的软件工具。我们后来在第5节中表明,最大SID长度与优化变量的不必要关联会破坏最大值。E ≥���·���·(1)���������������������表1显示了SX-Aurora [30]和英特尔Skylake[9]架构的、和参数的值。如本表所示,与英特尔Skylake等512位体系结构相比,像SX-Aurora这样的长SIMD体系结构需要并行算法来实现数量明显更大的独立FMA计算。 这种差异不仅源于更大的向量长度(),还源于FMA单位()和FMA延迟()数量的增加。4长SIMD架构上的直接转换本节描述了如何应用最先进的技术[8,10,31]来制定长SIMD架构上的直接卷积我们将在第5节中使用此公式来揭示长SIMD架构中所体现的缺点。 我们在第6节中提出的建议,通过调整某些算法方面以使其具有更长的SIMD长度来改进该公式。除非另有说明,否则我们将在本节中讨论有关前向数据方向的卷积,并在需要时提供适当的评论。第8节评估所有方向,证明我们的贡献使所有方向受益。4.1使用SIMD指令和寄存器阻塞使用SIMD指令允许CPU利用漏洞利用数据。此技术在以CPU为特征的体系结构上的性能使用较长的SIMD寄存器。水平平行性,对应于的水平平行性contribu-3体系结构分析模型我们通过使用用于指导高性能GEMM [18]和卷积[31]内核上的优化的解析型SIMD机器模型来激励我们的算法设计选择。 该模型考虑了以下硬件丑陋的SIMD体系结构:SIMD寄存器:SIMD指令从SIMD寄存器消耗数据并向SIMD寄存器输出数据,每个寄存器都具有SIMD长度的元素。 存在可由SIMD指令寻址的逻辑向量寄存器的总数。FMA单元:这些单元支持延迟为循环的单指令多融合乘法加法(FMA)指令。硬件将SIMD FMA指令调度到独立的FMA处理单元。通过在每个周期发布指令,可以完全管道化每个FMA单元。当完全订阅所有向量FMA单位时,SIMD架构实现了理论上的最高性能。要保持此性能,需要向体系结构公开几个相互依赖的计算() 公式1表达了模型体系结构变量与避免寄存器依赖性停滞和充分利用CPU深层SIMD流水线之间的关系。一级方程式赛车。 寄存器块优化子脚本所有具有独立计算的FMA单元,以防止CPU由于结构之间的数据依赖性而停止。 变量������������和������������公式1计数,用于表示SIMD FMA单元的数量和延迟。 我们使用SIMD指令在特征映射������维上运行计算,遵循当前实践[8,10,31]。我们通过因子和对输出张量空间尺寸(和)应用配准块。���������自=,根据F1,阻塞因素必须在约束下填充F2������������������������������ℎ������������������,creating���������������ℎindependentaccu-mulation chains of ������������ elements.<���������·������ℎ≥������������·������������(2)For the backward data propagation,the output tensoris,and we use SIMD instructions in the loop over the维度,并将注册表阻止应用于和维度。在反向权重传递期间,输出张量为,我们选择最大特征映射方向(或)进行矢量化,因为两者都是可用的。我们使用单个寄存器块因子()将寄存器块应用于较小的特征映射维。PPoPP亚历山大·德·利马斯·桑塔纳、阿德里亚·阿梅哈赫和马克·卡萨斯345I1.0 I1.1 I1.2 I1,3...Ih-1.0I h-1.1I h-1.2I1.0 I1.1 I1.2 I1,3...Ih-1.0I h-1.1I h-1.2I1.0 I1.1 I1.2 I1,3...Ih-1.0I h-1.1I h-1.2((−(+))/)()()(−)()////////()()高度宽度算法2:用于长SIMD体系结构的直接卷积算法(2009)输入:源激活张量(),权重张量()输出:目标激活张量()建筑变量:,1:=,2:=,3:=1,4:=1,1������������������������������������������5:=���,������������������6:对于=0, do7:对于=0,/do图1.高性能激活张量存储器布局在SIMD直接卷积中使用。 箭头表示连续存储器位置中的数据元素。请注意,要素地图块会将数据插入到相邻空间点中。4.2张量存储器布局最先进的卷积实现[15]使用一种Tensor存储器布局,该布局允许通过单元步长SIMD加载/存储结构将部分和移动到寄存器/从寄存器移动。 图1详细说明了此存储器布局,应用于通过使用黑色箭头指示单元步长访问来激活张量。 内存布局是通过块来构建的--按因子来划分和映射特征维度。和,两者都设置为,并将块拉到内存中的最内层。下面的元组代表了我们考虑的张量、和的内存布局。,从外到内最维顺序:(,,),( ,,,,) and(,,,, ,).无先例条件,如或<<<<它发生在长SIMD架构上。 典型的SIMD架构通常通过使用条带挖掘或零填充最小运算符来处理这些场景。[10]然而,支持长SIMD指令的ISA [6,26,30]可以通过动态地减小SIMD长度来处理这些情况。为了利用此功能,我们使用独立的动态块因子=,,and=,,to和4.3循环排序和多线程我们应用最先进的优化[8,10,31]来先验地调整张量的缓存重用。 我们将循环放置在权重空间维度上,并输入要素映射块(.���)���。、、和)在环绕向量指令的嵌套循环中。���������������在阻塞的输出spa-tial域上的循环(������. ,���������������和������������)是下一个,后面是块特征映射循环(������. . (和������)������。���最后一个循环迭代小批处理元素,并且可以并行执行,其中每个计算单元都处理一个小批处理元素。8: 对于=0,/do9:���对于=0,/do10:对于=0,/do11: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]。 在反向权重传播期间,我们在最小特征映射维度上并行地执行循环。对于实例,当>,theloop is vectorized,and theloop receives the注册表块优化和并行执行程序。4.4用于长SIMD结构的直接卷积算法。我们在Algorithm2中展示了在长SIMD架构上计算前向直接运算的算法。 我们在第1-2行设置动态缓存阻塞因子。第3-4行驱动器寄存器阻塞如第4.1节所述。接下来,第5行设置所有SIMD指令的simd工作长度下面的代码行指定了(i)调度循环,其出现在第6-10行;以及(ii)微内核,出现在第11-19行。调度循环组织子卷积的顺序,而微内核指的是计算密集型区域(图1)。最后一段在第11、15和18行具有完全展开的循环,通常由准时制(JIT)汇编器[8,10]或静态编译技术和手动调整代码段的集合[14,32]产生。NvlenI0,0 I0.1 I0.2 I0.3...I 0,我是0,2 0,3我0,W-1...I0.0I 0.1I 0.2I 0.3… II1.1 I1.2 I1,3...I0,WI1,I0,W-1I 1,W-1I1,W-1IH-1.0 IH-1.1 IH-1.2 … I要素地图[编IH-1,W-1IH-1,W-1-10.2I 0.3I0,0I 0,1IH-1,I1,I0,0I 0,1使用长SIMD指令的PPoPP346()····(+)·(+)·····≥····10410310210156x56、64 28x28、128 14x14、2567x7、5125.2内存访问模式显示高缓存未命中率第4.2节中描述的激活存储器布局和寄存器块优化定义了一种标量存储器访问模式,该模式导致在支持长SIMD指令的CPU上频繁出现L1数据缓存冲突未命中。 图3 示出了在前向传递期间跨越张量的该存储器访问模式。黑色箭头表示的动态顺序。图2。在具有不同向量长度的体系结构上考虑3x3卷积的直接卷积算法微内核区域的存储器足迹图。[10]最内部的卷积循环(第13行)包含对共享���运算符的虚拟负载(第14行)以及一系列标量负载(第16行)和SIMD-FMA指令(第17行)。我们在第17行使用具有一个标量乘法,的SIMD FMA,它得到了所有主要新兴供应商ISAs的支持,如RISC-V [6]、ARM SVE [26]和NEC SX-���������奥罗拉[30]。 在此FMA操作中,CPU隐式广播标量元素以形成临时向量操作数,而不使用专用向量寄存器。5直接卷积的最短形式5.1大型微内核内存占用空间卷积微核的存储器足迹由、和子张量驱动 在 算法2的第14行中访问的子张量被重复使用多次,因为它被应用于所有空间输出点( . )。第9行和第10行中的循环)。因此,它应该保留在缓存层次结构中,直到第8行的循环的下一次迭代将卷积微内核区域的存储器足迹限制为最后一级高速缓存(LLC)大小足以满足此标准,并避免第14行中不必要的片外存储器访问的激增。微内核区域加载������������������������������权重元素、������������������������������������������、������源张量元素,������������������������并将元素移动到目标张量或从目标张量移动。自参数和���正如我们在第4.2节中所解释的,这两者都与结构向量长度的增加有关,这导致了权重次张量大小的二次增长。这是- sue主要影响具有大过滤器的卷积,其中和循环中的迭代次数进一步inten- sifies问题。图2详细描述了在VGG [25]和ResNet [11]模型中发现的3x3卷积的内存足迹,其中在具有16384位向量的架构上,内存足迹可以达到9兆字节。X轴以激活空间大小和特征映射通道的数量来描述卷积层,并将其映射到图1中。访问的步长为,与要素地图块化因子相匹配。 在 反向数据和权重方向期间,这种模式也表现在张量上。当使用长的SIMD指令时,一系列步长等于SIMD长度()的存储器访问仅访问高速缓存地址空间周围累积偏移循环之前的高速缓存集的一小部分。高速缓存行大小()与高速缓存行大小()之间的关系(通常遵循= 2和 0)导致访问高速缓存集的完全相同的序列,而与高速缓存关联无关。最后,如果这样的一系列访问大到足以绕总高速缓存大小循环,则当在随后的转换循环中访问时,第一高速缓存行可能在它们可以被重新使用之前被唤醒。公式3指定了一个不均匀性,该不均匀性指示何时缓存冲突未出现在直接卷积中。该公式取决于(i)L1高速缓存大小( 1������������);(ii)构成卷积步长参数( ���������)和激活张量特征映射块因子(���)的空间点之间的差异;以及(iii)在重用先前访问的高速缓存行之前访问的空间点的数量(由寄存器块优化作为������去fined���������)。激活张量特征映射块因子是还是取决于哪个张量算法使用标量指令访问它。������������������������������������<���������������������������������1根据公式2和表1数据,以32 KB L1高速缓存和16384位宽向量寄存器(如SX-Aurora [30]���)为特征的架构需要24的组合寄存器块因子()来避免数据依赖性停滞。假设一个卷积,其中是1,是16384( ),由于不可解的不等式(16>和 24),它不可能同时满足公式2和3的不等式。������������������������������������<���������冲突失败严重破坏了第4.1节和第4.2节中描述的优化的有效性,使其不可能使计算饱和,这要么是因为寄存器文件未被充分利用,导致管道依赖性停滞,要么是因为SIMD通道对来自L1的数据依赖性进行了延迟等待。我们对第8节的评估证实了SX-Aurora中的这一现象512位1024位2048位16384位内存占用空间(KB)PPoPP亚历山大·德·利马斯·桑塔纳、阿德里亚·阿梅哈赫和马克·卡萨斯347** /···++···()(+ −)···()(+ −)···���������····首次访问......寄存器块高度(RBh= 2)要素图块(ICb=Nvlen)寄存器块宽度(RBw= 7)在weights张量内存格式为well时,我们将张量维数块因子从and associate it to, altering thetensor tuplerepresentation from(/,/ ,,, ,)to( / ,/,, ,,).Algorithm 3自动调谐算法的应用输入:,建筑变量:,,输出:,,������������������������������������������������������������������������������������������������������������1:=������2:=图3。前向传递期间张量上的SIMD直接卷积存储器访问 模式的示例。当使用较长的SIMD指令时,此访问模式会对少量缓存集施加压力,从而导致冲突的未命中。6使用长SIMD指令的高效直接转换本节描述了我们的算法解决方案,以有效地运行直接卷积运算使用长的SIMD in-structions。第6.1节描述了一种动态地减少卷积微内核的内存足迹的方法,以及解决第5.1节中讨论的问题的方法。第6.2节和第6.3节介绍了两个建议,分别通过合理地限制暴露于SIMD单元的计算量和对激活张量存储器布局的调整来减少缓存冲突未命中的数量。6.1动态调整微内核内存占用空间的方法我们提出了一种方法,可以自动地将卷积微内核的存储器足迹适应于许多不同的SIMD架构,包括那些具有长向量的架构。我们的方法结合了两种策略:循环重新排序和循环重新调整,实现了一个动态的自动调谐算法。循环重新排序:减少卷积的内存足迹的最简单的方法是将循环移动到权重空间域(y)上,从微内核移动到子卷积调度区域(y)。但是,此技术不适用于1x1卷积,并且 会减少常规卷积上的L1张量缓存重用 ,从而需要额外的张量激活传递。循环缩减:另一种策略是减少微内核循环在输入图块(算法2第13行中的最后一个循环迭代器)上的迭代次数。此循环的迭代次数不一定与通过变量的向量长度相关联。通过将此循环的迭代次数从减少到,内存占用减少了相同的速率,同时仍然可以访问所有导入到L1缓存的数据。我们反映了这一变化3:=4:=,5:=,1������������������������������6:=,17:=���������������������ℎ������������8: ������������=���ℎ���������9:=������������ ������ℎ���������第10集:while11:如果>2然后12:=213:elseif>1then���14:=1������15:=16:=,17:elseif>1then18:=1������������������������������19:=20:=(,)21:=���������������������ℎ������������22:=���������������ℎ���������23:=������ ���������������返回(���,,)������������我们通过一种优先考虑循环重新排序而不是循环重新排序的算法来应用所提到的策略。算法���使用张量大小和以下体系结构参数作为输入,找到适合高速缓存的最大子张量大小:(i)向量长度(������������),(ii)高速缓存行大小( ���������������),以及(iii)LLC存储容量(������������)。该算法生成块因子,���算法2中第13行的三个循环的和,根据卷积问题和目标体系结构在运行时决定它们的大小算法3显示了此过程。该方法最初假设在卷积微核区域(第1-3行)中的子张量权重上的最高可能循环值。首先在第4-9计算、和张量的存储器足迹,然后在第10行与LLC大小进行路由器在第11-12行应用循环抵抗策略,减少循环大小,除非这种减少将导致它比高速缓存小,否则它将使高速缓存比高速缓存小。步数=ICb = N= 2N *NVlenCline0.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行大小。通过将和循环迭代计数设置为1,循环重新排序回退策略发生在第13-16行和第17-20行。在这些安排之后,例程恢复微内核的内存足迹(第21-23行),并在第10行开始另一次迭代算法3通过将激活张量的内存足迹乘以第8、9、22和23行的线程数来适应具有共享缓存的多核系统6.2有界直接卷积[编辑]Bounded Direct Convolution(BDC)算法以较低的攻击性下限缓解缓存冲突未命中。算法4MBDC( =1,=0)输入:源激活 ,重量张量输出:输出激活架构变量:,,优化变量:,,���������������������������������1:=2:=3:=(,)4:=()/������,1)��������������������� ������5:=_(,,)6:=(,���)向量长度������������the��������� and������ℎ optimization variables and employsthe7:对于=0, do8: 对于=0,/do我们在第6.1节中描述了一种方法,用于使微内核内存足迹适应缓存层次存储。我们基于以下观察结果来放松F2的不公平性:具有支持长SMD指令的CPUs的架构是加载/存储机器,其需要标量代码来加载FMA标量运算符并更新存储器偏移量以用于未来的标量加载。 这些标量指令被放置在SIMD FMA指令之间,并在相关的SIMD FMA之间创建一些距离。我们还使用公式3为寄存器阻止功能设置了一个上限,防止内存访问模式产生缓存冲突未命中。 我们将这两种方法结合起来,为公式4中描述的和优化变量制定了一个值范围���������������,避免了数据依赖性--密度停滞和缓存冲突缺失。9: 对于=0,/do10:���对于=0,/do11:对于=0,/do12:���对于=0,/do���������13:对于=0,/do14:for(,)=(0:,0:)doUnrolled���������15:,=������������([������][][+][+]��� ������][0],16:for(���,������,)=(0:,0:,0:)do���������������������17:=([][ /][%][ 0],)18:for(,)=(0:,0:)doUnrolled19:,=[][+][+]������������������������������������������������������������������������������20:,=(������,)���������������������21:for(,)=(0:,0:)doUnrolled���������22:(,,[]���[]������[+]������·/������≤������·< 1/(四)][0],公式4引入了一个新变量,该变量是直接卷积微内核区域内子序列SIMD-FMA之间指令的最小距离。经验性观察表明,针对RISC-V "V"[6]和SX-Aurora [30] ISA的编译器在向量FMA指令之间使用两个标量指令:(i)一个标量加载,将值带入寄存器,以及(ii)一个加法,更新张量存储器指针。因此,在这种情况下,距离是3,因为后续的SIMD FMA是前面的3条指令在SX-Aurora中,设置为3允许寄存器阻塞因子低至8,而不是之前的最小值24。6.3多块直接上变频器Multi-Block Direct Convolution(MBDC)算法优化了表征张量内存布局的阻塞因子,改善了同卷微内核的内存访问模式,并减少了缓存冲突未命中的情况。在第5.2节中描述的 张量存储器访问模式在=时不会导致冲突丢失,因为两者都等于,即,当两者都等于时,不会导致冲突丢失。,在此场景中,访问张量之间的步长只是一个缓存行,这意味着所有缓存集都是有应力的平等。基于这一观察结果,我们建议阻止和张量由这一变化改变了优化变量和的结构向量长度,以改善张量标量访问模式的局部性。我们的建议是减少和,从到,将特征映射维数划分为通过激活张量存储器布局分散的更小块。由于最小的内部维度比最小的维度小,因此使用单位步长矢量加载/存储(即,单位步长矢量加载/存储)来围绕一个空间点移动用于特征地图数据的整个矢量寄存器是不切实际的。算法2中的第12行和第19行)。 因此,我们支持我们提出的存储器布局,当使用算法2中第12行和第19行上的SIMD指令访问激活张量时,使用粗粒度聚集/分散指令。算 法 4 个 深 度 MBDC 。 The values of���ℎ���,���������,and���������aredetermined by the dynamic method we describe in Sec-tion6.1.第15行和第22行中的聚集/分散操作通过���涉及Al-gorithm2的张量来替换矢量电荷/存储。 索引在第5行计算,并在公式5中为32位元素定义。具有以下特征的地图块PPoPP亚历山大·德·利马斯·桑塔纳、阿德里亚·阿梅哈赫和马克·卡萨斯349/(/)········size形成 size我们注意到第9行和第16行中的循环的迭代次数,这些循环利用了由自动调谐器动态确定的微内核计算粒度���������������������������������������������������������������������[将内存记录到聚集操作和将内存记录到分散操作通常会产生显著的性能成本。新兴的SIMD ISA通过支持结合连续和非连续存储器访问的不同类型的收集/分散操作来降低这一成本。例如,RISC-V V1.0 [6]支持元素的聚集/分散高达128位,其可以被视为四个连续32位字的块。 ARM SVE [26]支持组合的收集/分散操作,通过为每个索引返回两个连续元素来减少单个存储器请求的数量。SX-Aurora[30]支持二维矢量加载/存储,它以整个128字节高速缓存行的粒度模拟矢量聚集/分散。我们利用粗粒度收集/分散操作来加载/存储连续元素的非连续块到SIMD寄存器/从SIMD寄存器加载/存储连续元素的非连续块,并减少CPU发出的存储器请求的数量。6.4总结性表2概述了本节和我们的设计贡献,显示了针对512位SIMD指令的原始直接卷积,它们对长SIMD架构的适应(第4节),以及我们的两个新的算术贡献:(i)BDC和(ii)MBDC。激活块列指定了每个算法用于以下项的值:��������� 和���������变量,它们定义了激活张量存储器布局。权重块列指定了权重张量的块因子,该块因子还负责定义权重张量存储器布局。[10] Schedule grain定义了在卷积微内核区域内的块上循环的最小迭代次数������。注册表块列定义了不同算法的组合注册表块因子的值范围,该值范围由以下各项组成:此表突出了我们提案的要点:(i)对BDC的新寄存器块大小限制,以及(ii)对MBDC上激活存储器布局的重新定义。6.5实施情况我们通过遵循oneDNN [15]库设计来表达我们的贡献,其中内核的实例化遵循两步过程,包括:(i)初始问题声明和 ( ii ) 内 核 执 行 。 算 法 3 在问题陈述期间接收ar-chitectural变量和卷积参数,包括张量形状,并计算所有优化变量。此信息已编码。在数据结构中并转发到代码生成器en-gine,或者是JIT汇编程序或静态调整函数的集合。 代码生成器返回一个函数指针,该函数指针与卷积微内核区域相对应。之后,卷积调度循环在内核执行期间调用微内核函数指针(如图)。7实验方法学卷积工作负载:我们考虑ResNet [11]模型中使用的卷积层。表3用第2节中详细描述的卷积参数来描
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功