如要确保优化加速代码库的尝试真正取得成功,唯一方法便是分析应用程序以获取有关其性能的定量信息。nsys
是指 NVIDIA 的Nsight System命令行分析器。该分析器附带于CUDA工具包中,提供分析被加速的应用程序性能的强大功能。
nsys
使用起来十分简单,最基本用法是向其传递使用 nvcc
编译的可执行文件的路径。随后 nsys
会继续执行应用程序,并在此之后打印应用程序 GPU 活动的摘要输出、CUDA API 调用以及统一内存活动的相关信息。我们稍后会在本实验中详细介绍这一主题。
在加速应用程序或优化已经加速的应用程序时,我们应该采用科学的迭代方法。作出更改后需分析应用程序、做好记录并记录任何重构可能会对性能造成何种影响。尽早且经常进行此类观察通常会让您轻松获得足够的性能提升,以助您发布加速应用程序。此外,经常分析应用程序将使您了解到对 CUDA 代码库作出的特定更改会对其实际性能造成何种影响:而当只在代码库中进行多种更改后再分析应用程序时,将很难得知这一点。
01-vector-add.cu(<——您可点击打开此文件链接和本实验中的任何源文件链接并进行编辑)是一个简单易用的加速向量加法程序。使用下方两个代码执行单元(按住 CTRL
并点击即可)。第一个代码执行单元将编译(及运行)向量加法程序。第二个代码执行单元将运用 nsys profile
分析刚编译好的可执行文件。
nsys profile
将生成一个 qdrep
报告文件,该文件可以以多种方式使用。 我们在这里使用 --stats = true
标志表示我们希望打印输出摘要统计信息。 输出的信息有很多,包括:
在本实验中,您将主要使用上面黑体字的3个部分。 在下一个实验中,您将使用生成的报告文件将其提供给Nsight Systems 进行可视化分析。
应用程序分析完毕后,请使用分析输出中显示的信息回答下列问题:
nvcc -o single-thread-vector-add 01-vector-add/01-vector-add.cu -run
nsys profile --stats=true ./single-thread-vector-add
值得一提的是,默认情况下,nsys profile
不会覆盖现有的报告文件。 这样做是为了防止在进行概要分析时意外丢失工作。 如果出于某种原因,您宁愿覆盖现有的报告文件,例如在快速迭代期间,可以向 nsys profile
提供 -f
标志以允许覆盖现有的报告文件。
请抽出一到两分钟时间,更新 01-vector-add.cu 的执行配置以对其进行简单的优化,以便其能在单个线程块中的多个线程上运行。请使用下方的代码执行单元重新编译并借助 nsys profile
进行分析。使用性能分析的输出检查核函数的运行时间。此次优化带来多大的速度提升?请务必在某处记录下您的结果。
nvcc -o multi-thread-vector-add 01-vector-add/01-vector-add.cu -run
nsys profile --stats=true ./multi-thread-vector-add
在本练习中,您将进行多轮周期式的迭代优化,具体包括:编辑 01-vector-add.cu 的执行配置、开展性能分析及记录结果以查看影响。开展操作时请依循以下指南:
在您尝试的执行配置中,哪个经证明是最快的?
nvcc -o iteratively-optimized-vector-add 01-vector-add/01-vector-add.cu -run
nsys profile --stats=true ./iteratively-optimized-vector-add