没有合适的资源?快使用搜索试试~ 我知道了~
GATSPI:用于功率改进的 GPU 加速门级仿真
12310GATSPI:用于功耗改进的GPU加速门级仿真Yanqing Zhang,Haoxing Ren,Akshay Sridharan,BrucekKhailany NVIDIA Corporation,{yanqingz,haoxingr,asridharan,bkhailany}@nvidia.com0摘要在本文中,我们介绍了GATSPI,一种新颖的GPU加速逻辑门级模拟器,可用于具有数百万个门的工业规模ASIC设计的超快功耗估计。GATSPI使用PyTorch编写,配备自定义的CUDA内核,以便于编码和可维护性。与在单个CPU核心上运行的商业门级模拟器相比,它在单个GPU系统上实现了高达1668倍的模拟内核加速,在多个GPU系统上实现了高达7412倍的加速。GATSPI支持一系列来自行业标准单元库和SDF条件延迟语句的简单到复杂的单元类型,而无需进行先前的校准运行,并从延迟感知的门级模拟生成行业标准的SAIF文件。最后,我们将GATSPI部署在闪烁优化流程中,与使用商业模拟器的类似流程相比,实现了1.4%的功耗节约和449倍的转换时间加速。01 引言门级逻辑仿真在集成电路的设计和签名中起着重要作用。仿真在许多步骤中使用,例如功耗分析,设计测试(DFT)模式生成,DFT功耗分析和故障仿真。然而,门级仿真,特别是用于功耗估计的延迟准确的故障启用仿真,在传统仿真器上可能需要很长时间,阻碍了它在芯片设计流程中的广泛应用。现在的高度复杂的SoC具有数百个分区,每个分区都有数百万个门和运行数千个周期的多个测试台进行仿真。准确的结果可能需要数小时甚至数天才能在数百个服务器上生成。因此,有一种加速这种仿真任务的需求。更快的替代方法,例如基于概率的开关活动估计器,也可以为功耗目的生成切换次数/速率,但它们是不准确的。通常,在运行具有延迟感知和故障启用的门级仿真时,时序元件的正确波形已经在先前的RTL仿真结果,自动生成的测试模式(ATPG)向量或扫描测试中已知。这些情况下,从主输入和伪主输入(寄存器和RAM输出)到数字设计中逻辑锥的输入刺激已被称为逻辑'重新'仿真[1](图1(左))。逻辑重新仿真有助于缩短转换时间,因为重新仿真器可以省略顺序元件的功能仿真。此外,在重新仿真中,已知的时序元件波形打破了周期之间的依赖关系,以便可以并行模拟测试台的多个周期。现代并行计算架构,如GPU,提供了跨周期(刺激)和设计(同一逻辑级别内的门可以并行仿真)的加速机会[2-7],如图1(右)所示。然而,GPU加速重新仿真也面临挑战,例如编写和维护使用CUDA等GPU编程语言的单独代码库的开发成本。其他挑战包括最小化主机和设备(CPU和GPU)之间的通信开销,有效的调度,并避免内存带宽瓶颈以保持流多处理器(SM)具有足够的数据。幸运的是,较新的GPU具有帮助克服这些挑战的功能,尤其是丰富的内存带宽和与某些系统内存容量相媲美的扩展GPU内存容量(表1)。此外,深度学习(DL)的出现有助于构建用于在GPU上进行编程的丰富软件生态系统。流行的DL框架,如PyTorch[10],降低了在矩阵和张量上高效开发GPU代码的门槛。构建在PyTorch之上的图学习软件包,如DGL[11],提供了各种图算法和划分方法的API。由于数字逻辑电路可以自然地表示为图形,因此这些框架可以用于逻辑重新仿真和其他相关任务的有效GPU编程。在这项工作中,我们借鉴了GPU软件和硬件平台的最新发展,推出了一种名为GATSPI(代表GPU加速门级仿真以提高功耗)的新型GPU加速门级重新仿真器。这项工作的创新贡献如下:•GATSPI在单个A100GPU上实现了高达1668倍的重新仿真内核加速,在8个V100GPU上实现了高达7412倍的加速,与商业仿真器相比,在多个行业基准测试中没有准确度损失。在考虑波形加载和将结果写入文件等端到端应用任务时,它还实现了高达680倍的加速。•据我们所知,GATSPI是第一个支持完整逻辑单元类型、所有SDF条件延迟语句、多同时输入(MSI)切换分辨率以及对门和互连进行惯性延迟过滤的GPU加速重新模拟器,无需校准运行。•为了方便编码,GATSPI采用了PyTorch、DGL和仅有2个PyTorch自定义CUDA内核进行新颖实现。0??0已知0波形0设计并行性0周期并行性0图1:(左)重新模拟的描绘。只需要模拟逻辑门。(右)重新模拟中的并行性机会,可以映射到GPU上。表1:最近NVIDIA GPU架构[8,9]的比较。0架构 T4 V100 A1000SMs 40 80 108 全局内存大小 16 GB 16 GB或32 GB 40 GB或80GB 内存带宽 320 GB/s 900 GB/s 1.6 TB/s或1.9 TB/s L2缓存 4 MB6 MB 40 MB0主机和设备(CPU和GPU)之间的通信,有效的调度以及避免内存带宽瓶颈,以使流多处理器(SM)具有足够的数据。幸运的是,较新的GPU具有帮助克服这些挑战的功能,尤其是丰富的内存带宽和与某些系统内存容量相媲美的扩展GPU内存容量(表1)。此外,深度学习(DL)的出现有助于构建用于在GPU上进行编程的丰富软件生态系统。流行的DL框架,如PyTorch[10],降低了在矩阵和张量上高效开发GPU代码的门槛。构建在PyTorch之上的图学习软件包,如DGL[11],提供了各种图算法和划分方法的API。由于数字逻辑电路可以自然地表示为图形,因此这些框架可以用于逻辑重新仿真和其他相关任务的有效GPU编程。在这项工作中,我们借鉴了GPU软件和硬件平台的最新发展,推出了一种名为GATSPI(代表GPU加速门级仿真以提高功耗)的新型GPU加速门级重新仿真器。这项工作的创新贡献如下:• GATSPI在单个A100GPU上实现了高达1668倍的重新仿真内核加速,并在8个V100GPU上实现了高达7412倍的加速,与商业仿真器相比,在多个行业基准测试中没有准确度损失。在考虑波形加载和将结果写入文件等端到端应用任务时,它还实现了高达680倍的加速。•据我们所知,GATSPI是第一个支持完整逻辑单元类型、所有SDF条件延迟语句、多同时输入(MSI)切换分辨率以及对门和互连进行惯性延迟过滤的GPU加速重新模拟器,无需校准运行。•为了方便编码,GATSPI采用了PyTorch、DGL和仅有2个PyTorch自定义CUDA内核进行新颖实现。0DAC '22,2022年7月10日至14日,美国加利福尼亚州旧金山,©2022年计算机协会。ACM ISBN978-1-4503-9142-9/22/07…$15.00https://doi.org/10.1145/3489517.353060112320DAC'22,2022年7月,美国旧金山,CA,Yanqing Zhang,Haoxing Ren,Akshay Sridharan,Brucek Khailany0•通过GPU分析,我们展示了GATSPI内核的'超参数'调优(周期级并行度,寄存器/线程,线程/块)的分析结果。 •我们将GATSPI部署在闪烁优化流程中,与使用类似的商业基于CPU的模拟器相比,实现了1.4%的功耗节约和449倍的转换时间加速。02 相关工作0之前的工作已经探索了GPU加速门级模拟。早期的工作探索了一种主要是隐式模拟器的方法,即无论输入活动如何,在每个周期或时间戳评估每个门[4,5]。这些隐式模拟器在低活动因子下计算效率低下,并且需要大量的内存来记录每个时间戳的每个门,实现了2-45倍的模拟内核加速(仅测量实际模拟运行时间)[4,5]。另一种方法使用了一种基于事件的模拟器方法和先进的内存分页技术,以实现1-270倍的加速[3]。基于事件的模拟只在其输入发生变化时对特定门进行评估。正如[3]中所述,速度提升取决于测试台的活动因子。最好的GPU加速的重新模拟器类别是混合事件/隐式模拟器[2,6,7]。混合方法的基本思想是,每个门的模拟根据其输入上的事件进行时间推进,但是对于每个门上的线程的调度和启动是隐式的。每个门将始终分配一个模拟线程,并且门的活动很少或没有的线程会更早地完成。最近的一项工作在工业规模的设计中实施了这种方法,该设计具有数百万个门,并在端到端应用程序运行时间上实现了23-44倍的加速(从加载测试台波形到结果文件转储的时间)[6]。Holst等人实现了一种具有新颖的内存管理方案的混合2值重新模拟器,该方案需要校准循环,并在实验电路(<550k个仅有2个输入的门)上的长持续时间扫描测试台上实现了大规模的模拟内核加速,速度提升为21-1090倍[2]。最近的一项工作实现了一个4值重新模拟器,在ICCAD2020设计竞赛[1]的基准测试中实现了2-44倍的应用程序加速[7]。竞赛[1]要求实现传输延迟而不是惯性延迟,而[7]巧妙地利用了门延迟处理中的这种偏差,以实现另一种并行性-事件并行性。他们并行地模拟每个周期内的每个事件。这对于传输延迟处理是独特的,因为没有脉冲过滤,所以在完成单个事件的并行模拟后,可以使相同值输出事件和延迟冲突事件无效。这些混合模拟器通常通过逻辑级别对设计网表进行分区,这是一种方便和直接的访问设计并行性的方法[2,7],并且GATSPI也采用了这种方法。只有在当前级别完成时,模拟才会进入下一个逻辑级别分区,以确保始终满足输入/输出波形的依赖关系。与[2,3]相比,GATSPI旨在利用新一代GPU的扩展内存能力,而无需内存管理方案。与[2]类似,GATSPI实现了2值重新模拟,因为对于功耗分析,门重新模拟很少产生x/z值。然而,[2]仅支持2输入0门0模拟器0用于功耗分析0网表.sdf 网表.gv编译设计0编译的设计.cpp0Testbench.waveforms0网表+Testbench.SAIF0网表.sdf0网表.gv0Verilog到DGL0翻译器编译的设计.dglSDF到LUT0数组0翻译器0网表+Testbench.SAIF0GPU加速门级模拟器0Testbench.waveforms0Python/PyTorch/DGL0商业工具0文件格式0数据编译0仿真内核0图2:商业工具和GATSPI的工具流程概述0波形数组示例A=[ -1 , 0 , 34 , 59 , 123 , …. 74832, EOW ] 波形数组示例B=[ 0, 4 , 78 ,…,367, EOW ] EOW= INT32_MAX (2147483647) •数字是信号切换的时间戳 •2值仿真,逻辑值编码在索引中。偶数索引=0,奇数索引=1 •EOW表示“波形结束”符号 •开头的“-1”表示初始值为1(0时间戳被移动到奇数索引)0图3:GATSPI中信号的数组格式,来自[2]0而GATSPI支持所有布尔逻辑门类型和条件SDF延迟语句。这些功能对于针对行业标准库非常重要。与[7]不同,GATSPI处理惯性延迟。虽然实现更简单,但传输延迟处理将导致毛刺的过度估计,这在功耗分析环境中不利。最后,类似于DREAMPlace[12],GATSPI利用PyTorch和DGL等DL框架软件包以及几个自定义CUDA内核来简化软件开发和维护工作。03 GATSPI实现0图2显示了GATSPI相对于商业模拟器流程的整体应用工作流程。我们的起点是门级网表,相应的SDF文件和主/伪主输入波形。我们使用与[2]相同的波形格式进行高效存储,如图3所示。我们使用Python脚本将SDF延迟语句和逻辑函数真值表转换为图4中描述的数组格式。我们将网表转换为类似于[13]的PyTorch/DGL图对象,该图对象通过使用DGL的图节点/边属性注释来保留网表信息,如连通性、门和互连延迟(边特征)以及单元逻辑函数(节点特征)。最后,GATSPI加载DGL图对象和输入数组波形,执行逻辑级别化,并启动CUDA内核以完成仿真。在CUDA内核运行时,生成下游功耗分析或其他应用程序的SAIF文件可以异步转储[7]。图5提供了GATSPI仿真方法的概述。它首先加载输入波形并预分配一个设备内存块来存储仿真的所有波形。例如,使用具有32GB设备内存的NVIDIA V100GPU时,我们分配24GB的内存来存储波形-剩余的8GB用于存储DGL图和输入/输出波形地址指针。这种方法避免了CPU主机和GPU设备之间的所有数据移动(除了异步转储结果的通信)。对于每个逻辑级别:确定输入波形指针值,安排仿真内核。#(7)………12330GATSPI:用于功耗改进的GPU加速门级仿真DAC’22, 2022年7月,旧金山,加利福尼亚0(CELL (CELLTYPE "AOI21") (DELAY (ABSOIOPATH(posedge B) Y () (6))) ((IOPATH (negedg8) ())) ( CONDA2===1'b1&&A1===1'b0 (IOPATH (pB) Y () (5))) (COND A2===1'b1&&A1===1'b0 (IOPegedge B) Y(7) ()))0Y B →0Y B →0行0A (2 1 )0B ( 2 0 )Y0A ( 2 1 ) Y B ( 2 00 Y=[ 1,1,1, 0 ]0索引=[0,1,2, 3 ]0•Verilog到DGL图翻译步骤将为每个引脚分配与真值表中的列权重对齐的“权重”。例如,引脚A为2 1。如果A=1,则将1×2 1添加到结果的索引中。•逻辑真值表存储为1-D数组。行号嵌入在索引中•将所有逻辑值为1的引脚权重相加以获取结果的索引(例如:1×2 1 + 1×2 0 =3),并执行1-D数组查找以找到结果(0)。0A1 ( 2 1 )0A2 ( 20 ) B0Y0B → Y [[ ∞,∞,∞,∞ ] [8, 7 ,8,8 ]0[ ∞,∞,∞,∞]] [ 6,5,6,6 ]0•SDF延迟语句的实现类似。SDF查找表存储为2-D数组。数组中的每一行表示输入引脚pos/negedge →输出pos/negedge切换条件。•非切换引脚出现在条件语句中,并且有一个分配的延迟弧的“权重”。将所有逻辑值为1的引脚权重相加以获得列索引,并执行数组列查找以找到延迟值。0列索引=[0, 1 ,2,3]0图4:GATSPI将逻辑函数评估和弧延迟确定形式化为统一的数组查找操作,以支持各种逻辑单元类型和条件延迟语句。0输入波形地址指针数组0门及其功能+延迟属性的数组0内存0对于每个逻辑级别:确定输入波形指针值,安排仿真内核00...0周期0 周期1 周010n0初始化:图形,真值表,延迟0CPU0GPU0启动和执行GPU仿真记录TC并确定输出波形地址指针值,两次存储输出波形0线程层次结构0分配设备内存:(24GB)加载输入波形0输出波形地址指针数组0图5:仿真概述。在仿真过程中,将结果转储到文件),消除了通信瓶颈。对于每个逻辑级别,要仿真的每个门/周期都分配给一个线程,并且每个线程通过引用相应波形的起始地址指针从设备内存中“获取”其相应的输入波形。每个仿真内核的线程层次结构设计与图1中的周期+设计并行模式相匹配。然而,这引入了一个门输出波形寻址问题:我们事先不知道输出波形的起始地址指针值应该是什么,使用动态数组会很慢。一种解决方案是使用校准循环[2],但这可能会增加重复仿真的延迟。相反,GATSPI只需进行两次仿真[14]:一次用于确定输出切换计数(TC),从而确定输出波形指针的地址值,再次进行相同的重仿真并存储波形。0算法1:逐门,逐周期并行重仿真01输入:所有波形����的一维数组。引脚数量�。逻辑真值表的一维数组(图4)�∈[2�]。每个输入引脚�的上升/下降线延迟��=[���,���]。门延迟的二维数组(图4)��∈[4,2�−1]。每个引脚�的波形地址指针��。门输出波形地址指针��。02 输出:输出波形存储在����中。04 ������ = � � � = 1 ( � � %2 ) � 2 � − 1 /* % is the modulo operator */05 � = � [ ������ ]06 � == 0 ? ���� [ � � ] = 0 : ( ���� [ � � ] = − 1 ; ���� [ � � + +] = 0)07 while � � ! = ��� do08 � � = ��� /* EOW is INT_MAX(Fig. 3) */09 for each � do010 �������� = ( � � %2 ) ? � � � : � � � ;011 if ���� [ � � + 2 ] − �������� − ���� [ � � + 1 ] < 0 then012 � � + = 2; ��������013 � � = min( � � , ���� [ � � + 1 ] + �������� )014 if � � ! = ��� then015 for each � do016 if transition time of pin � == � � then018 update ������ ; update � ; set ��������� indexing � � using � � %2and ������019 if � ! = � � %2 then020 � � = � � + ���������021 if � � − ���� [ � � ] < ��������� then022 � � − −023 else024 � � + +025 ���� [ � � ] = � �0GATSPI方便地使用PyTorch和DGL编写,这有许多优势。通过PyTorch,可以轻松解决多维数组的索引等问题,通过DGL可以轻松处理图形网表操作。只有Algo.1的重新仿真内核是用CUDA编写的,并作为自定义的PyTorchCUDA调用集成。内核中的每个线程在当前逻辑层中模拟一个独立的周期/激励的一个门。Algo.1实现了一种对逻辑门进行惯性延迟滤波的基于延迟的算法,同时处理条件SDF延迟语句和MSI切换分辨率。Algo.1描述了GATSPI中第二次重新仿真的算法,其中已知TC值,并且输出波形将存储在内存中。第一次迭代的算法非常相似。在解决门的初始值之后,第8-13行确定下一个最早的输入转换的时间戳进行处理。值得注意的是,第10-12行执行互连惯性延迟滤波。还值得注意的是,第8-13行仅确定下一个时间戳,而不确定哪个引脚正在切换。这是因为第14-18行循环遍历所有输入引脚,找到所有的MSI切换条件,并在更新门的输出值y和门延迟之前将其解决。Algo. 1将会12340DAC’22,2022年7月,加利福尼亚州旧金山,Yanqing Zhang,Haoxing Ren,Akshay Sridharan,Brucek Khailany0只有在检测到输出值y的变化时(第19行),Algo.1才会触发惯性延迟滤波逻辑(第21-25行)。Algo.1假设PATHPULSEPERCENT=100的仿真约束条件。可以通过编辑第21行轻松实现其他约束值。在GATSPI的CUDA内核实现过程中,我们遵循了[15]中概述的CUDA调优原则。因此,我们使用异步内存复制,并将指针变量��和��固定在寄存器中,以使内核性能在调优之前比之前提高了2%。04 实验与结果0我们使用GATSPI在表2中列出的基准测试中进行了GPU加速门级仿真。选择这些基准测试是为了提供设计网表大小/结构、测试台活动因子和仿真时长的多样性。值得注意的是,许多基准测试都是从具有数百万个门和为tapeout提供动力签字的电源窗口的工业规模设计中选择的。我们将GATSPI的执行时间与商业仿真器的基准进行比较,这是一种常用的基准[1,2,6,7]。同时比较了应用程序运行时间[6,7](即图5的内容)和仿真内核运行时间[2](即Algo.1的内容)。通过两种方式验证仿真的正确性:对比生成的SAIF文件,并对比基准和GATSPI之间每个基准的一些随机信号的完整波形的“抽查”检查。表2中的所有GATSPI实验都是在具有32 GB NVIDIA QuadroGV100和30GB系统内存的系统上执行的。循环并行性设置为32(32个独立循环并行重新仿真)。在商业仿真器上进行的基准实验是在具有64GB系统内存的Intel Xeon单个E5@2.70GHzCPU核心上执行的。通过使用SystemVerilog的force关键字,可以在商业工具中实现重新仿真。表2还报告了每个基准测试的活动因子。在GPU上的混合仿真器往往具有以每秒模拟的总事件数为单位的最大吞吐量,因此包括活动因子度量可以更清楚地评估实现的吞吐量。GATSPI在各种设计大小、测试台活动因子和测试台长度的设计中实现了28-1198倍的仿真内核加速比,或者是5-680倍的应用程序加速比。应用程序的开销,例如重构输入波形以匹配循环并行模式和转储结果文件,占用了大部分应用程序运行时间。毫不奇怪,长时间高活动度的情况下获得最大的加速比,因为在重新仿真内核中花费更多的时间,并且仿真加速比不会受到阿姆达尔定律的太大影响。尽管在我们的基准测试中没有遇到这种情况,但在将要存储在设备内存中的重新仿真事件数量超过其容量的情况下,可以将测试台编译成较短的片段,多次调用GATSPI,并将转储文件组合以实现完整的仿真结果。我们还通过修改GATSPI的代码以支持等效的OpenMP实现,来在多线程CPU环境中评估GATSPI。为简洁起见,我们选择了一些典型的基准测试来进行这些实验(表3)。我们将这三个基准测试视为代表性:一个规模较小的设计,其工作负载几乎饱和了我们的GPU平台上的最大线程数,一个工业设计,测试台很长,但活动度较低,并且不同的门实例/线程之间的工作负载非常不平衡。类似地,我们将GATSPI与商业仿真器的多线程CPU实现(表4)进行了比较,商业仿真器在服务器农场中运行的是Intel Xeon E5CPU。在这种情况下,选择了那些没有出现段错误的基准测试。GATSPI在这两种情况下都大大优于商业仿真器。最后,为了展示GATSPI在VLSI优化流程中的实用性,我们将GATSPI纳入到一个工业设计的毛刺功耗降低工具流程中。我们首先重新仿真了一个130万门级设计,以获得其活动度。然后,自定义脚本在设计分析之前执行毛刺活动/设计分析,然后对网表进行经过设计师提示的毛刺修复转换。一个测试台上的毛刺修复通常会导致其他测试台的功耗变化。然后重新仿真更新后的网表以评估功耗节约。GATSPI将重新仿真的周转时间从1459.6分钟缩短到3.25分钟,加速比为449倍,证实了设计(整个芯片的1%)节约了1.4%的功耗。这样快速的周转时间可以提高芯片设计人员的生产力,并实现未来的自动化。此外,GATSPI的快速仿真吞吐量可以实现对其他需要准确的延迟注释门级仿真的大规模仿真数据收集的高效率。示例可能包括串扰分析、IR降压分析、功耗感知逻辑综合或DFT。0实例/线程,以及一个测试台很长且活动度相对较高且不同门实例/线程之间的工作负载相对平衡的工业设计。类似地,我们将GATSPI与在服务器农场中运行的Intel Xeon E5CPU上的商业仿真器的多线程CPU实现进行了比较(表4)。在这种情况下,选择了那些没有发生段错误的基准测试。GATSPI在这两种情况下都大大优于商业仿真器。最后,为了展示GATSPI在VLSI优化流程中的实用性,我们将GATSPI纳入到一个工业设计的毛刺功耗降低工具流程中。我们首先重新仿真了一个130万门级设计,以获得其活动度。然后,自定义脚本在设计网表进行毛刺活动/设计分析之前执行,然后进行设计师提示的毛刺修复转换。一个测试台上的毛刺修复往往会导致其他测试台上的功耗变化。然后重新仿真更新后的网表以评估功耗节约。GATSPI将重新仿真的周转时间从1459.6分钟缩短到3.25分钟,加速比为449倍,确认了1.4%的设计(整个芯片的1%)节约功耗。这样快速的周转时间可以提高芯片设计人员的生产力,并为未来的自动化提供可能。此外,GATSPI的快速仿真吞吐量可以为需要准确的延迟注释的门级仿真进行高效的大规模仿真数据收集,例如串扰分析、IR降压分析、功耗感知逻辑综合或DFT。05 GPU Profiling and Analysis0GPU分析 - 我们使用NVIDIA的Nsight[17]对GATSPI完整应用程序和模拟内核进行分析,以提供性能信息并识别可能改进的领域。为了简洁起见,在分析实验中我们使用了3个代表性的基准。表5显示了应用程序分析的结果,揭示了从主机到设备的数据加载对整体应用程序运行时间的贡献不大。GATSPI的大部分初始化阶段都花费在重新构造输入波形格式上,这是为了利用周期并行性而需要的。根据电路逻辑级别的结构,流同步和内核启动时间也存在静态开销,由电路逻辑级别分区确定。表6显示了第二个GATSPICUDA内核的内核分析结果,其中输出波形存储在内存中,并且是设计中最宽的逻辑级别。可以识别出几个瓶颈。首先,算法1包含许多循环,内存访问非常不规则。尽管高内存带宽是有益的,但计算吞吐量受限于等待内存响应(低L2命中率,高每个周期的指令数)。内存吞吐量受算法获取单个数据(非连续存储的输入引脚波形上的下一个转换时间戳)的限制,这由不一致的内存访问证明。内核分析还为GPU应用程序的超参数调整提供了信息-在GATSPI的情况下,这些参数包括:周期并行性量、块内线程数和线程的寄存器数。正如我们下面解释的原因,我们选择了{32,512,64}的配置来优化GATSPI的运行时间。对于周期并行性,我们无疑希望将此参数设置为至少32。GPU上有32个线程组成一个warp,并且指令是按照warp发出的。因此,将周期并行性设置为32的倍数会导致每个warp模拟一个门实例,这有助于限制代码分歧。12350GATSPI:用于功耗改进的GPU加速门级仿真 DAC'22,2022年7月,旧金山,加利福尼亚州0表2:V100上的基准和结果。灰色为行业设计。来自[16]的开源基准。括号内为加速比。0设计(配置)测试台门数 活动因子 周期 基准应用运行时间(秒)基准重新模拟内核运行时间(秒)0GATSPI应用程序运行时间(秒)GATSPI重新模拟内核运行时间(秒)032位整数加法器随机刺激1k 1.0 60k 554 529 5.98(93X)5.75(92X)NVDLA_m(小型)卷积14k 0.058 743k 455 37312.05(38X)4.35(86X)NVDLA_m(大型)卷积257k 0.0017 132k 159 133 8.56(19X)1.4(95X)NVDLA_m(大型)扫描257k 1.2 5k 723 67018.27(40X)3.82(175X)NVDLA(大型)稳定性测试1.8M 0.00079 100k 180 116 35.41(5X)4.09(28X)NVDLA(大型)扫描1.8M 1.0 1.5k 3211 253570.81(45X)9.99(254X)0行业设计A功能1 77k 0.094 9.4k 670 635 4.05(165X)0.79(808X)0行业设计B功能2 2M 0.013 78k 16060 14924 41.76(385X)14.55(1026X)0行业设计B高活动性短测试2M 0.186 11k 20969 18727 53.46(392X)19.18(976X)0行业设计B高活动性长测试2M 0.183 33k 49230 46617 72.35(680X)38.90(1198X)0行业设计C功能2 1.9M 0.015 32k 6224 5065 38.91(160X)6.98(726X)0行业设计D功能3 2.3M 0.024 62k 10638 8896 68.12(156X)15.72(566X)0表3:GATSPI与其OpenMP实现的比较。速度提升率括号内。0设计(测试台)GATSPI内核运行时间(秒)OpenMP内核运行时间(秒)使用的CPU数0设计A(功能1)0.79(12.8X)10.10 32 设计B(功能2)14.55(9.4X)136.0940 设计B(高活动性)38.90(14.4X)558.94 640表4:GATSPI与多线程商业工具的比较。速度提升率括号内。0设计(测试台)GATSPI应用程序运行时间(秒)基准应用程序运行时间(秒)多线程运行时间(秒)0设计A(功能1)4.05(63.7X)670 258NVDLA_m,大型(扫描)18.27(50.0X)3211 9140有助于限制代码分歧。我们可能认为,周期并行性越大,运行时间越快,但是表6显示情况并非如此。对于设计较小的情况,初始较高的周期并行性可以降低延迟。但是,随着L2达到容量上限,其命中率下降,导致延迟增加。在更典型的大型工业级设计中,较高的周期并行性导致内存指令的密集发出,内存无法完全跟上,从而大大降低内存吞吐量,导致延迟增加。GATSPI将周期并行性设置为32,牺牲了一些灵活性以获得稳健性能。CUDA块是表示一组线程的编程抽象。通常,较低的线程/块设置会导致更多的自然屏障同步,从而增加延迟,而过高的线程/块会引入块内线程之间的更高通信开销。表6显示了GATSPI的内核也不例外。最后,GATSPI的内核的理论最大占用率为50%,因为每个线程使用的寄存器数超过32个32位寄存器。强制编译器不超过每个线程32个寄存器可以提高占用率指标,但对延迟有不利影响。在这种情况下,代码将被编译为更多的机器指令(表6中未显示),每个线程可用的寄存器更少,导致L1命中率下降,并且数据经常在寄存器文件和L1之间循环(即寄存器溢出)。0表5:应用运行时间的Nsight分析结果,以秒为单位。0设计(测试台)主机到设备数据传输0流同步 +内核启动0内核执行0设计A(功能1)0.68 0.24 0.52 设计B(功能2)3.40 3.50 10.80设计B(高活动性)7.82 3.50 31.340图4使用部分SDF功能实现GATSPI的性能。表7评估了这些关键功能特性造成的开销,占总内核运行时间的5-13%。因此,考虑到工业级功耗分析的准确性要求,包含这些特性是一个很好的权衡。表8展示了GATSPI在不同NVIDIAGPU上的性能,包括A100和T4。在NVIDIA DGX StationA100(内存为40GB)上使用单个GPU,发现A100相对于V100提供了1.2-1.5倍的加速,某些基准的提升超过了SM数量的增加,可能是由于内存带宽和L2缓存大小的增加(表6显示L2命中率较低)。这对于工业规模的基准测试尤为有益,特别是随着设计变得越来越大和测试台越来越多,因为这些基准测试能够利用内存能力的提升。当缩小到更低成本的GPU(在AWSg4dn.xlarge实例[1]上进行基准测试时),我们发现GATSPI在T4上运行比V100慢4.2-6.7倍。NVDLA(大型),扫描结果显示了4.2倍的减速,表现出类似于典型的深度学习性能基准[18]的扩展性。设计B实验的减速更多,因为它们需要多次顺序调用GATSPI-完整的测试台波形无法适应设备内存。最后,我们在多GPU系统中对GATSPI的性能进行了基准测试。我们选择使用简单的工作负载分配策略,将周期并行性分配到各个GPU上。即,周期并行性设置为32�,其中�是GPU的数量,每个GPU负责并行模拟32个独立的周期。尽管这种工作负载分配形式可以通过有效的电路逻辑分区和/或复制方法[4,19]进一步改进,但我们将其留给将来的工作。根据我们的周期并行性工作负载分配方法,内核运行时间遵循方程� = �1 / � +���,其中�1是单个GPU运行时间,���是流同步 +内核启动开销。图6显示了这样一个实验的结果,我们将表2中的所有设计B的测试台连接起来进行重新模拟。我们使用了一个11000010000011010010001000010000012360DAC'22, 2022年7月, 加利福尼亚州旧金山 Yanqing Zhang, Haoxing Ren, Akshay Sridharan, Brucek Khailany0表6:在V100上重新模拟内核的Nsi-ght性能分析。吞吐量百分比相对于GPU的最大能力。内存吞吐量百分比是一个综合指标,包括L1、L2和全局内存性能。0设计(测试台)0配置。{周期并行性,块内线程数,线程内寄存器数}0线程数0计算/内存吞吐量(%)0占用率(%)0全局内存吞吐量(GB/s)0L1/L2命中率(%)0每个调度器问题的周期数0非连续内存访问(%)0经过的GPU周期0延迟(毫秒)0设计A(功能1) 32,512,64 170k 10.4/12.1 28.8 7.0 92.4/94.4 2.4 48 6.6M 6.000设计A(功能1) 128,512,64 680k 32.7/32.9 38.7 28.5 94.8/87.6 2.0 18 3.3M 3.28 设计A(功能1) 256,512,64 1.36M 44.5/46.1 41.8 39.5 96.2/82.0 2.0 12 3.8M 3.290设计B(功能2) 32,512,64 4.1M 33.8/44.6 42.9 144.2 91.5/60.0 2.8 23 380.7M 335.76 设计B(高活动度) 32,512,64 4.1M 28.4/38.4 48.0 281.1 84.5/47.0 3.5 41 788.3M696.360设计B(高活动度) 64,512,64 8.2M 33.1/40.8 48.3 241.4 86.8/52.4 3.0 23 871.6M 772.96 设计B(高活动度) 128,512,64 16.3M 39.5/47.1 48.8 158.1 90.9/55.7 2.6 121.1B 993.69 设计B(高活动度) 32,1024,64 4.1M 27.6/37.1 49.8 270.8 87.1/49.9 3.5 52 878.8M 776.85 设计B(高活动度) 32,512,32 4.1M 15.4/46.1 94.4 402.868.1/52.2 6.4 42 1.5B 1350.000表7:没有关键特性的内核运行时间(秒)和加速比。0设计(测试台) 全功能 无网络延迟0无网络延迟+无完整SDF0设计A(功能1) 0.79(808倍加速) 0.79(808倍加速) 0.70(907倍加速)设计B(功能2) 14.55(1026倍加速) 14.19(1052倍加速)13.80(1081倍加速) 设计B(高活动度) 38.90(1198倍加速)36.03(1294倍加速) 33.65(1385倍加速)0表8:不同GPU的内核运行时间(秒)和加速比。0设计(测试台) T4 V100 A1000NVDLA,大型(扫描) 42.53(60倍加速) 9.99(254倍加速)6.59(385倍加速) 设计B(功能2) 76.56(195倍加速) 14.55(1026倍加速)12.11(1232倍加速) 设计B(高活动度) 260.15(179倍加速)38.90(1198倍加速) 25.50(1828倍加速)04个A1008个V1001个A1001个V100064个CPU OpenMP01个CPU约1天016分钟,82倍加速073秒,1105倍加速048秒,1668倍加速010.8秒,7412倍加速12.0秒,6672倍加速0图6:设计B在不同硬件平台上的重新模拟内核运行时间比较。0DGX StationV/A100,使用8/4个GPU进行多GPU系统运行。在单个GPU系统中,我们必须多次调用GATSPI才能完成长时间的连接
下载后可阅读完整内容,剩余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直接复制
信息提交成功