用NVIDIA NsightcComputeRoofline分析加速高性能HPC的应用

编写高性能的软件不是一件简单的任务。当有了可以编译和运行的代码之后,当您尝试并理解它在可用硬件上的执行情况时,将引入一个新的挑战。不同的平台,无论是cpu、gpu还是其他平台,都会有不同的硬件限制,比如可用内存带宽和理论计算限制。Roofline性能模型帮助您了解应用程序使用可用硬件资源的情况,以及哪些资源可能会限制应用程序的性能。在劳伦斯伯克利国家实验室,国家能源研究科学计算中心(NERSC)和计算研究部(CRD)一直在使用该模型来分析和优化NVIDIA gpu上运行的HPC代码。

传统的Roofline模型依赖于两个特征来描述工作量:

算力:计算工作(FLOPs)和数据移动(字节)之间的比率

FLOP/s:每秒浮点运算

有了这些信息,可以在一个包含性能限制的Roofline和顶层的图形上绘制一个内核,并将它们对内核的影响可视化。

Roofline模型是在伯克利实验室发明的。一种用于收集NVIDIA GPU Roofline分析的相关性能数据的方法,该方法已经被原型化和验证:

· Performance Analysis of GPU-Accelerated Applications using the Roofline Model

· Roofline Performance Modeling for
HPC and Deep Learning Applications

· Hierarchical Roofline Analysis for GPUs: Accelerating Performance Optimization for the NERSC‐9 Perlmutter System

基于Roofline模型的GPU加速应用性能分析

高性能HPC和深度学习应用的Roofline性能建模 gpu的分层Roofline分析:加速NERSC-9 Perlmutter系统的性能优化

鉴于Roofline分析在高性HPC中的普及,NVIDIA已经与伯克利实验室合作,并将其集成到NVIDIA Nsight Compute中。随着其2020.1版本的发布,Nsight Compute为HPC应用程序的Roofline分析提供了一种更为简化的方式,并且更容易与Nsight Compute中的其他功能集成,以便进行性能分析。

Using Nsight Compute to collect roofline data

Nsight Compute是一个CUDA内核分析器,它提供详细的性能度量和优化建议。现在,它还可以收集和显示Roofline分析数据。要在报告中启用Roofline图,请确保在从GUI进行分析时选择了GPU Speed of Light roofline Chart部分。提供的详细或完整的集合包括此部分(图1)。

Figure 1. Detailed section set in Nsight
Compute.

If you are profiling from the command-line, use the flag --set detailed or --set full.
You can also manually select individual sections with the --section flag. The name of this new section is SpeedOfLight_RooflineChart.

Understanding the application

在本文中,将使用一个基于BerkeleyGW代码的小型应用程序。以独立的方式实现该应用程序的关键科学工作负载之一。为了简单起见,这个小应用程序抽象了部分BerkeleyGW代码,只运行一个内核。可以在GitLab上找到这个小应用程序,以及更详细的说明,提供试用。

Using roofline analysis step-by-step

GitLab存储库中使用了一些优化技术。为了演示NsightCompute中的所有功能(包括新添加的Roofline分析)如何相互补充以进行全面的性能分析,只讨论其中的两个步骤,步骤1和步骤3。

Baseline

在最初的串行CPU实现中,核心工作负载在三层嵌套的Fortran循环中表示:

do n1_loc = 1, ntband_dist ! O(1000)

do igp = 1, ngpown ! O(1000)

do ig = 1, ncouls ! O(10000)

注释表示每个回路的行程计数的近似长度。选择这种循环顺序是为了以优化的模式访问Fortran使用的列主内存布局的内存,因为代码中的许多数组都是以ig作为第一个索引,igp或n1_loc作为第二个索引来访问的。带有OpenACC的初始并行端口是GitLab存储库中提供的基线代码,如下所示,它折叠了三个循环,试图利用GPU上的大规模并行硬件。结果如下所示:

!$ACC PARALLEL LOOP GANG VECTOR reduction(+:…)
collapse(3)

do n1_loc = 1, ntband_dist ! O(1000)

do igp = 1, ngpown ! O(1000)

do ig = 1, ncouls ! O(10000)

图2中的初始roofline分析表明,内核的算术强度很低,足以低于图表中的倾斜内存限制roofline。实现的运算强度为7.39 FLOP/byte,但V100双精度机器平衡点的算术强度为7.5。在这一点上,做了足够多的准备工作,使之成为计算界compute-bound。可能希望将算术强度增加到足以低于某个水平计算限制的上限。提供了一个更好的机会来最大化这个内核的计算性能。

Figure 2. Baseline roofline analysis chart.

roofline图表还显示了单精度浮点运算的数据点。编译器会为这个内核生成一些这样的代码。它显示单个精确Roofline的水平线,即两条水平线中较高的一条。

Step 1: Unroll certain loops to gain arithmetic intensity

第三个循环的核心循环是连续运行的,这是第三个循环的循环。因为任何一对循环都会暴露至少一百万个自由度,所以仍然应该有足够的并行性来饱和高端GPU。要选择哪一个,可注意代码的内存访问模式。对于所有多维数组,n1_loc在访问之间的跨距最大,这也是由于column-major Fortran layout布局造成的。有效地使用GPU内存带宽需要合并访问,其中连续线程访问内存中的连续位置。所以,这都意味着n1_loc循环是这个实验最符合逻辑的目标。

!$ACC PARALLEL LOOP GANG VECTOR reduction(+:…)
collapse(2) do igp = 1, ngpown ! O(1000)

do ig = 1, ncouls ! O(10000)

!$ACC LOOP SEQ

do n1_loc = 1, ntband_dist ! O(1000)

当进行此更改时,内核实际上并没有加速。事实上,运行时的速度下降了10%,从1.74秒降到了1.92秒,但是,现在已经确定了内核的计算极限,双倍精度的算术强度大约为20当您进行此更改时,内核实际上并没有加速。事实上,运行时的速度下降了10%,从1.74秒降到了1.92秒,但是,你现在已经确定了内核的计算极限,双倍精度的算术强度大约为20浮点/字节(图3)。图4显示了Nsight计算光速部分的内存利用率也低得多,基线(红色)为34%,第1步优化后为11%(蓝色)。这意味着,如果你能使计算更有效,你也许能更接近峰值(图3)。图4显示了Nsight计算Speed of Light光速部分的内存利用率也低得多,基线(红色)为34%,第1步优化后为11%(蓝色)。这意味着,如果能使计算更有效,也许能更接近峰值。

Figure 3. Roofline chart after Step 1.

Figure 4. Comparison of SM and memory
utilization between baseline and step 1.

Step 3: Avoid high-latency instructions

高延迟指令可以显著降低warp问题的发生率并降低计算并发性,特别是当没有足够的线程来隐藏延迟时。但是,可以应用某些技巧来用较低延迟的指令替换这些指令。这里,演示两个,其中两个复数的除法wtilde和wdiff替换为倒数,ssx和I_eps_数组的绝对值计算被指数计算代替,因为只用于if/else条件评估。

! before delw = wtilde / wdiff

! after wdiffr = wdiff * CONJG(wdiff)

rden = 1.0d0 / wdiffr delw = wtilde * CONJG(wdiff) *
rden

!before

ssxcutoff = sexcut *abs(I_eps_array(ig,igp))

if (abs(ssx) .gt. ssxcutoff .and. wx_array_t(iw,n1_loc).lt. 0.0d0) ssx=0.0d0 !

after

ssxcutoff = sexcut**2* I_eps_array(ig,igp) * CONJG(I_eps_array(ig,igp))

rden = ssx * CONJG(ssx)

if (rden .gt. ssxcutoff .and. wx_array_t(iw,n1_loc) .lt.
0.0d0) ssx=0.0d0

通过应用这些技巧,计算性能从2.5tflop/s提高到2.9tflop/s,代码的运行速度提高了一倍。运算强度已经下降到6.3 FLOP/byte,使得GPP重新回到带宽限制区域。这不是一个严重的问题,因为它在性能优化过程中经常发生。随着计算并发性的增加,需要读写更多的数据来满足计算需求。这可能会增加内存带宽的使用,从而导致带宽限制更大的Roofline图。

Figure 5. Roofline chart of GPP before applying tricks in Step 3.

Figure 6. Roofline chart of GPP after Step 3.

NsightCompute中丰富的特征集是相辅相成的,这种优化的效果也可以通过其他度量来验证。图7和图8显示,由于将delw=wtilde/wdiffr替换为rden=1.0d0/wdiffr,sampled active warps(全部或未发出)的数量和状态为wait(绿色条)的warp数量都显著下降。第三步的abs trick技巧也有同样的效果。

Figure 7. Change in sampling data after optimization transformations.

Figure 8. Another change in sampling data after optimization transformations.

Introducing hierarchical roofline analysis

到目前为止,文章展示了传统的Roofline模型,它只为GPU DRAM内存使用一个内存Roofline。然而,内存子系统比这更复杂,可以扩展Roofline模型来合并GPU的L1和L2缓存。这种分层Roofline模型在前面链接的论文中有详细描述。目前,Nsight Compute不支持分层Roofline模型,但它提供了一个可扩展的接口,允许创建自己的实现(图9)。使用GitLab存储库中的SpeedOfLight_HierarchicalDoubleRooflineChart部分文件,可以为步骤3创建一个分层的Roofline图表。

Figure 9. Hierarchical Roofline created with customized section files for Nsight Compute.

附加的对角线ceilings顶层表示给定算术强度的L1和L2性能限制。在这个图中,每个圆表示内存子系统(L1、L2或DRAM)的不同级别,并使用来自该级别的流量来计算其算术强度。例如,红点代表一级缓存,用内核的总浮点数除以一级缓存中移入和移出的字节数绘制。分层Roofline更详细地说明内存层次结构的哪个级别可能是瓶颈。此信息允许调整内存布局或访问模式以减少这些性能问题。

Summary

提高应用程序性能是一个迭代过程。了解内核所在的roofline图表部分是指导后续开发工作的关键技能。例如,如果看到明显地处于roofline图表中内存带宽受限的部分,那么最重要的事情就是内存访问模式,这样就可以避免浪费时间查看那些不会实质性地改变运行时的内核部分。此外,了解在每个迭代中的位置对于知道何时停止并继续下一个工作项非常重要。Roofline分析,结合Nsight Compute提供的其他分析部分,可以帮助了解内核相对于可达到的峰值系统限制的性能,因此值得将此工具添加到工具箱中。

对于那些对更深入感兴趣的人,文章只触及了roofline分析所能达到的表面。NERSC网站上有更多关于Roofline模型的详细信息,以及他们如何使用它来分析和提高性能。GitLab repo描述了另外两个优化步骤,可以使用最新版本的Nsight
Compute进行实验。

用NVIDIA NsightcComputeRoofline分析加速高性能HPC的应用相关推荐

  1. 10倍性能提升!DLA SQL推出基于Alluxio的数据湖分析加速功能

    简介:在存储计算分离的场景下,通过网络从远端存储读取数据是一个代价较大的操作,往往会带来性能的损耗.以OSS为例,OSS数据读取延时通常较本地磁盘大很多,同时OSS对单个用户使用的带宽上限做了限制,这 ...

  2. 【Sentieon】基因测序数据NGS二级分析加速软件模块介绍

    [Sentieon]基因NGS二级分析加速软件模块介绍 Sentieon软件的使用非常灵活.用户可以直接使用完整Pipeline流程,也可以根据需要单独调用相关模块去替换原流程中的模块.Sentieo ...

  3. NVIDIA Tesla® P100 加速训练 OCR 模型

    案例简介  本案例中,今始科技(Linkface)是一家专注从事计算机视觉研究的科技创新型公司.该公司利用NVIDIA Tesla P100极大的加速了OCR模型的训练过程,显著降低了训练时间,对整 ...

  4. NVIDIA Tesla® K80 加速 数字全息实时重建

    案例简介  本案例中,重庆淏晗科技有限公司是由重庆理工大学创办的高科技企业.该公司利用利用丽台科技提供的包含Tesla K80 GPU服务器以及算法优化方案实现了微流体内粒子的三维位置与速度场的实时 ...

  5. linux图形加速驱动下载,Linux 安装emby 并开启nvidia nvenc 硬件加速转码

    安装环境: Linux系统自行准备安装本文章使用的是Ubuntu16.04 nvidia显卡自行去官方查询显卡是否支持nvenc (已知GT1030是不支持的)本文章使用GTX1050Ti 小惊喜 此 ...

  6. NVIDIA jetson tensorrt加速yolov5摄像头检测

    link 在使用摄像头直接检测目标时,检测的实时画面还是有点慢,下面是tensorrt加速过程记录. 一.设备 1.设备jetson agx xavier 2.jetpack4.6.1 3.tenso ...

  7. nvidia深度学习加速库apex简单介绍

    介绍地址:https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html 本人英文水平有限,有误请指正. 使用 ...

  8. NVIDIA英伟达高性能计算机视觉库VPI统一视觉编程接口,取代opencv?

    1.Vision Programming Interface(VPI)简介 Vision Programming Interface(VPI)是英伟达高性能计算机视觉/图像处理算法库. VPI为各种不 ...

  9. LiveVideoStack线上交流分享 ( 一 ) —— 解密GPU:视频转码与分析加速

    为了给大家提供一个学习,交流的平台,畅聊音视频技术开发新趋势,新实践.我们推出了LiveVideoStack线上交流分享活动,在每周四晚19:30,邀请1名业内资深技术专家进行线上分享技术干货,解答热 ...

最新文章

  1. JS 实现可停顿的垂直滚动
  2. QT学习之经典控件源码(如此强大)
  3. 华为SAN存储在linux下的,多路径 - 华为SAN存储在SUSE系统下的主机连通性指南 - 华为...
  4. 已解决:Ubuntu16.4和Windows10创建共享文件夹
  5. MySQL和PGSQL事务锁等待超时时间
  6. i节点详解以及软连接和硬链接的区别
  7. springboot做网站_Github 上 Star 最多的个人 Spring Boot 开源学习项目
  8. Excel 中使用数据透视表 Pivot Table
  9. 关于 php 用webservice传输数据的问题(nosoap与.NET对接)此处一直困扰三天时间,终于解决...
  10. 为什么前端工程师薪资越来越高?
  11. 牛客 2021年度训练联盟热身训练赛第二场 A题
  12. 编写内核驱动加载工具
  13. JAVA导入gpx文件_用于Java的GPX解析器?[关闭]
  14. C语言rs485编程,- 第六讲 单片机之c语言RS485通信
  15. php公众号客服系统,公众号客服系统完全攻略
  16. 如何设置父层DIV不动子层DIIV透明且随滚动条晃动或是不晃动
  17. vivado联合modelsim报错:vsim-19 Failed to access library ‘unisims_ver‘ at ‘unisims_ver‘
  18. C语言课设-单位车辆调度管理
  19. Adobe ——pdf文档加密且不可编辑
  20. 应届学弟咨询:是去华为拿1万多低薪,还是去二线自研公司拿2万多高薪?.....

热门文章

  1. 端口映射问题:Bad Request This combination of host and port requires TLS.
  2. 伦理困境:人工智能浪潮与“AI威胁论”之争
  3. Git 常用操作(6)- 推送到远程仓库(git push)删除远程分支(git push origin --delete)
  4. 【微服务架构】SpringCloud之路由网关(zuul)
  5. 数组的拼接合并 numpy
  6. is not a supported wheel on this platform pip安装报错
  7. Pytorch中多GPU训练指北
  8. MLPerf结果证实至强® 可有效助力深度学习训练
  9. 汽车车灯灯具系统(上)
  10. 2021年大数据HBase(五):HBase的相关操作JavaAPI方式