没有合适的资源?快使用搜索试试~ 我知道了~
12310GATSPI:用于功耗改进的GPU加速门级仿真 张燕青,任浩星,Akshay Sridharan,Brucek KhailanyNVIDIA公司,{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编程语言的单独代码库的开发成本。其他挑战包括最小化通信开销0? ?0已知0波形0设计并行性0周期并行性0图1:(左)重新模拟的描绘。只需模拟逻辑门。(右)重新模拟中的并行机会,可以映射到GPU上。表1:最近NVIDIA GPU架构的比较[8, 9]。0架构 T4 V100 A1000SMs 40 80 108 全局内存大小 16 GB 16或32 GB 40或80 GB内存带宽 320 GB/s 900 GB/s 1.6或1.9 TB/s L2缓存 4 MB 6 MB40 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条件延迟语句、多输入同时切换分辨率以及对门和互连的惯性延迟过滤的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.3530601Testbench.waveformsTestbench.waveformsPython/PyTorch/DGL12320DAC'22,2022年7月,美国加利福尼亚州旧金山,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]。混合方法的一般思想是每个门的仿真根据其输入上的事件而推进时间,但是对于每个门的调度和在GPU上启动线程是无视的。每个门将始终分配一个仿真线程,并且门的活动很少或没有的线程会更早地完成。最近的一项工作在具有数百万门的行业规模设计上实施了这种方法,并在端到端应用运行时间上实现了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编译的设计.cpp0网表+Testbench.SAIF0网表.sdf0网表.gv0Verilog到DGL0翻译器编译的设计.dglSDF到LUT0数组0翻译器0网表+Testbench.SAIF0GPU加速门级模拟器0商业工具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]。0GATSPI支持所有布尔逻辑门类型和条件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图对象通过使用DGL的图节点/边属性注释保留网表信息,如连接性、门和互连延迟(边特征)以及单元逻辑函数(节点特征)。最后,GATSPI加载DGL图对象和输入数组波形,执行逻辑级别化,并启动CUDA内核完成仿真。由于CUDA内核正在运行,用于下游功耗分析或其他应用的结果SAIF文件可以异步转储[7]。图5提供了GATSPI仿真方法的概述。它首先加载输入波形,并预先分配一个设备内存块来存储仿真的所有波形。例如,当使用具有32GB设备内存的NVIDIA V100GPU时,我们分配24GB的内存来存储波形,剩余的8GB用于存储DGL图和输入/输出波形地址指针。这种方法避免了CPU主机和GPU设备之间的所有数据移动(除了异步操作)YB →(CELL(CELLTYPE "AOI21")(DELAY(ABSOLUTE((IOPATH (posedge B) Y () (6)))((IOPATH (negedge B) Y (8) ()))(COND A2===1'b1&&A1===1'b0 (IOPATH (posedge B) Y () (5)))(COND A2===1'b1&&A1===1'b0 (IOPATH (negedge B) Y (7) ()))YB →YB →#B(20)YY=[1,1,1,0]B →Y[[∞,∞,∞,∞][8,7,8,8]01(7)………𝑖5 𝑦 = 𝑌 [𝑐𝑜𝑙𝐼𝑛𝑑]6 𝑦 == 0 ? 𝑎𝑙𝑙𝑊 [𝑝𝑜] = 0 : (𝑎𝑙𝑙𝑊 [𝑝𝑜] = −1 ; 𝑎𝑙𝑙𝑊 [𝑝𝑜 + +] = 0)7 while 𝑡𝑖! = 𝐸𝑂𝑊 do8𝑡𝑖 = 𝐸𝑂𝑊 /* EOW is INT_MAX(Fig. 3)*/10𝑛𝑒𝑡𝐷𝑒𝑙𝑎𝑦 = (𝑝𝑖%2) ? 𝛿 𝑓𝑖 : 𝛿𝑟𝑖 ;11if 𝑎𝑙𝑙𝑊 [𝑝𝑖 + 2] − 𝑛𝑒𝑡𝐷𝑒𝑙𝑎𝑦 − 𝑎𝑙𝑙𝑊 [𝑝𝑖 + 1] < 0 then12𝑝𝑖+ = 2;𝑐𝑜𝑛𝑡𝑖𝑛𝑢𝑒13𝑡𝑖 = min( 𝑡𝑖, 𝑎𝑙𝑙𝑊 [𝑝𝑖 + 1] + 𝑛𝑒𝑡𝐷𝑒𝑙𝑎𝑦)14if 𝑡 ! = 𝐸𝑂𝑊 then16ifn time of pin 𝑖 == 𝑡𝑖 then17𝑝𝑖 + +18update 𝑐𝑜𝑙𝐼𝑛𝑑; update 𝑦; set 𝑔𝑎𝑡𝑒𝐷𝑒𝑙𝑎𝑦indexing 𝑑𝑖 using 𝑝𝑖%2 and 𝑐𝑜𝑙𝐼𝑛𝑑19if 𝑦! = 𝑝𝑜%2 then20𝑡𝑜 = 𝑡𝑖 + 𝑔𝑎𝑡𝑒𝐷𝑒𝑙𝑎𝑦21if 𝑡𝑜 − 𝑎𝑙𝑙𝑊 [𝑝𝑜] < 𝑔𝑎𝑡𝑒𝐷𝑒𝑙𝑎𝑦 then22𝑝𝑜 − −23else24𝑝𝑜 + +25𝑎𝑙𝑙𝑊 [𝑝𝑜] = 𝑡𝑜12330GATSPI: GPU加速门级仿真用于功耗改进DAC'22,2022年7月,加利福尼亚州旧金山0行0A (2 1 )0A ( 2 1 ) Y B ( 2 0 )0索引=[0,1,2, 3 ]0•Verilog到DGL图形转换器步骤将为每个引脚分配一个与真值表中引脚的列权重对齐的“权重”。例如,引脚A为2 1。如果A=1,则将1×21添加到结果的索引中。•逻辑真值表存储为1-D数组。行号嵌入在索引中•将所有逻辑值为1的引脚的权重相加,以获得结果的索引(例如:1×2 1 + 1×2 0=3),并执行1-D数组查找以找到结果(0)。0A1 ( 2 1 )0A2 ( 20 ) B0Y0[ ∞,∞,∞,∞]] [ 6,5,6,6 ]0•SDF延迟语句实现类似。SDF查找表存储为2-D数组。数组中的每一行表示输入引脚的正/负边沿→输出正/负边沿切换条件。•非切换引脚出现在条件语句中,并为延迟弧分配了一个指定的“权重”•将所有逻辑值为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 输入:所有波形 ���� 的1-D数组。引脚数量�。逻辑真值表的1-D数组(图4) � ∈ [ 2 � ]。每个输入引脚 �的上升/下降线延迟 � � = [ � � � ,� � � ]。门延迟的2-D数组(图4) � � ∈[ 4 , 2 � − 1 ]。每个引脚 � 的波形地址指针 ��。门输出波形地址指针 � �。02 输出:输出波形存储在 ���� 中。03 对于每个 �: ���� [ � � ] == − 1 ? � � ++ : ���� /* 初始值 */09 for each � do015 for each � do0GATSPI方便地使用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和gateDelay之前解析它们。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](即算法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平台上的最大线程数,一个具有长测试台但低活动度和不平衡工作负载的工业设计。0实例/线程,以及具有长测试台和相对较高活动性以及不同门实例/线程之间相对平衡的工作负载的工业设计。类似地,我们将GATSPI与商业仿真器的多线程CPU实现(表4)在服务器群中运行的IntelXeon E5CPU进行比较。在这种情况下,选择基准是因为它们没有发生段错误。GATSPI在这两种情况下都大大优于。最后,为了展示GATSPI在VLSI优化流程中的实用性,我们将GATSPI纳入到一个工业设计的故障功耗减少工具流程中。我们首先重新模拟了一个130万门的设计以获得其活动性。然后,自定义脚本执行故障活动/设计分析,然后对网表进行设计师知情的故障修复转换。通常,一个测试台上的故障修复可能导致其他测试台的功耗变化。然后重新模拟更新的网表以评估功耗节约。GATSPI将重新模拟的周转时间从1459.6分钟减少到3.25分钟,加速了449倍,确认了1.4%的设计(1%的整个芯片)功耗节约。这样的快速周转时间可以提高芯片设计人员的生产力,并实现未来的自动化。此外,GATSPI的快速仿真吞吐量可以实现对其他需要准确延迟注释的门级仿真进行高效的大规模仿真数据收集。示例可能包括串扰分析、IR降压分析、功耗感知逻辑综合或DFT。05个GPU性能分析0GPU性能分析-我们使用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(93倍)5.75(92倍)NVDLA_m(小)卷积14k 0.058 743k 455 37312.05(38倍)4.35(86倍)NVDLA_m(大)卷积257k 0.0017 132k 159 133 8.56(19倍)1.4(95倍)NVDLA_m(大)扫描257k 1.2 5k 723 67018.27(40倍)3.82(175倍)NVDLA(大)稳定性测试1.8M 0.00079 100k 180 116 35.41(5倍)4.09(28倍)NVDLA(大)扫描1.8M 1.0 1.5k 3211 253570.81(45倍)9.99(254倍)0行业设计A功能1 77k 0.094 9.4k 670 635 4.05(165倍)0.79(808倍)0行业设计B功能2 2M 0.013 78k 16060 14924 41.76(385倍)14.55(1026倍)0行业设计B高活动短测试2M 0.186 11k 20969 18727 53.46(392倍)19.18(976倍)0行业设计B高活动长测试2M 0.183 33k 49230 46617 72.35(680倍)38.90(1198倍)0行业设计C功能2 1.9M 0.015 32k 6224 5065 38.91(160倍)6.98(726倍)0行业设计D功能3 2.3M 0.024 62k 10638 8896 68.12(156倍)15.72(566倍)0表3:GATSPI与其OpenMP实现的比较。速度提升与OpenMP(括号内)0设计(测试台)GATSPI内核运行时间(秒)OpenMP内核运行时间(秒)使用的CPU数量0设计A(功能1)0.79(12.8倍)10.10 32设计B(功能2)14.55(9.4倍)136.09 40设计B(高活动)38.90(14.4倍)558.94 640表4:GATSPI与多线程商业工具的比较。速度提升与多线程工具版本相比(括号内)0设计(测试台)GATSPI应用程序运行时间(秒)基准应用程序运行时间(秒)多线程运行时间(秒)0设计A(功能1)4.05(63.7倍)670 258NVDLA_m,大型(扫描)18.27(50.0倍)3211 9140有助于限制代码分歧。我们可以假设循环并行性越大,运行时间越快,但是表6揭示了相反的情况。在设计较小的情况下,最初较高的循环并行性降低了延迟。但是,最终L2达到容量上限,其命中率降低,导致更长的停顿和增加的延迟。在更典型的大型工业级设计中,较高的循环并行性导致内存指令的更密集发出,而内存无法完全跟上,从而大大降低了内存吞吐量,导致增加的延迟。GATSPI将循环并行性设置为32,牺牲了一些灵活性以获得稳健的行为。CUDA块是表示一组线程的编程抽象。通常,较低的线程/块设置会产生更多的自然屏障同步,从而导致更高的延迟,而过高的线程/块会在块内的线程之间引入更高的通信开销。表6显示了GATSPI的内核也不例外。最后,GATSPI的内核的理论最大占用率为50%,因为每个线程使用的寄存器超过32个32位寄存器。强制编译器每个线程使用不超过32个寄存器可以提高占用率指标,但对延迟产生不利影响。在这种情况下,代码将被编译为更多的机器指令(表6中未显示),每个线程可用的寄存器更少,导致L1命中率下降,并且数据经常在寄存器文件和L1之间循环(即寄存器溢出)。扩展分析——我们进一步进行实验,剪切GATSPI的关键功能特性,并重新测量内核运行时间(表7)。算法1中的第11-12行被简单删除,以消除惯性网络延迟滤波。所有条件SDF弧的每个输入引脚到输出引脚的平均上升/下降延迟被实现为2个元素数组,而不是2D数组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。使用单个GPU在NVIDIA DGXStation A100上(具有40GB内存),我们发现A100相对于V100提供了1.2-1.5倍的加速,某些基准测试的扩展超过了SM数量的增加,可能是由于内存带宽和L2缓存大小的增加(表6显示L2命中率较低)。这对于工业规模的基准测试非常有益,特别是随着设计变得更大,测试台变得更多,因为这些基准测试能够利用内存能力的改进。当缩小到更低成本的GPU(在AWS g4dn.xlarge实例上使用NVIDIAT4进行基准测试[1])时,我们发现GATSPI在T4上运行的速度比V100慢4.2-6.7倍。NVDLA(large),scan结果显示了4.2倍的减速,表现出与典型的深度学习性能基准测试[18]类似的扩展性。设计B的实验减速更多,因为它们需要多次顺序调用GATSPI-完整的测试台波形无法适应设备内存。最后,我们在多GPU系统中对GATSPI的性能进行基准测试。我们选择通过在GPU之间分配周期并行性来实现简单的工作负载分配策略。即,将周期并行性设置为32�,其中�是GPU的数量,每个GPU负责并行模拟32个独立的周期。尽管这种形式的工作负载分配可以通过将设计并行性分布到分布式的高效网表分区和/或复制方法[4,19]中进一步改进,但我们将其留给未来的工作。使用我们的周期并行性工作负载分配方法,内核运行时间遵循方程� = �1/ � +���,其中�1是单个GPU运行时间,���是流同步+内核启动开销。图6显示了这样一个实验的结果,其中我们将表2中的所有测试台连接起来进行重新模拟。我们使用了一个11000010000011010010001000010000012360DAC’22,2022年7月,加利福尼亚州旧金山,Yanqing Zhang,Haoxing Ren,Akshay Sridharan,Brucek Khailany0表6:V100上重新模拟内核的N视图分析。吞吐量%相对于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.8 68.1/52.26.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来完成长串联测试台,以确保不超过内存容量。在多GPU系统中,我们将工作负载分布到循环并行性中,如上所述。串联所有测试台有助于分摊成本。GATSPI在8个V100和4个A100上分别实现了7412倍和6672倍的内核加速。由于分布式循环并行性工作负载之间的活动因子不均匀,与完美的线性扩展有所偏差。06 结论和未来工作在本文中,我们提出了GATSPI,一种新颖的基于PyTorch编写的GPU加速逻辑门重新模拟器,可以在各种基准测试中实现超快的功耗估计(28-1198倍的内核加速,5-680倍的应用程序加速)。重新模拟结果与商业模拟器基准一致,这是工业功耗分析用例中的一个重要标准。GATSPI具有重要的重新模拟器功能特性,如对各种单元类型、SDF语句和惯性延迟滤波的支持。在没有校准的情况下,GATSPI在各种基准测试中表现出稳健的运行时间。这些优势促使GATSPI在实际应用中得到部署。0在诸如故障优化循环等实际应用中,我们展示了1.4%的功耗节省和449倍的加速。我们的分析为未来的工作提供了见解和机会。可以探索包含顺序元素模拟,以查看完整逻辑模拟是否能够提供类似的加速潜力。可以采用内存管理技术来缓解内存压力,以进一步扩展规模。可以优化以利用设计并行性,例如更复杂的网表分区技术,可以帮助具有不平衡活动负载的基准测试[19],并将GPU加速模拟更多地转向事件驱动的范式。最后,GATSPI的超快速度为探索其在其他应用中的有用性打开了大门,例如串扰分析、IR降压分析和故障模拟。GATSPI还可以成为GPU加速的AI辅助EDA算法开发中的有价值的工具。参考文献[1] Y. Zhang, H.Ren, B. Keller, and B. Khailany. Problem C: GPU Accelerated Logic Re-simulation :(Invited Talk). In ICCAD, 2020. [2] S. Holst, M. E. Imhof, and H.-J. Wunderlich.High-Throughput Logic Timing Simulation on GPGPUs. In TODEAS, June 2015. [3] Y.Zhu, B. Wang, and Y. Deng. Massively Parallel Logic Simulation with GPUs. InTODAES, June 2011. [4] A. Sen, B. Aksanli, M. Bozkurt, and M. Mert. Parallel CycleBased Logic Simulation Using Graphics Processing Units. In ISPDC, 2010. [5] D.Chatterjee, A. Deorio, and V. Bertacco. Gate-Level Simulation with GPU Computing.In TODAES, 2011. [6] L. Lai, Q. Zhang, H. Tsai, and W.-T. Cheng. GPU-based HybridParallel Logic Simulation for Scan Patte
下载后可阅读完整内容,剩余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直接复制
信息提交成功