第2章
性能导向开发
Jeff Larkin
美国加利福尼亚州圣克拉拉县NVIDIA公司
本章的目的是通过一个性能测试应用的加速来初步了解OpenACC编程方法。读者将学习如何添加OpenACC导语以及如何进行代码性能调优,进而逐步提升应用的性能。本章最后,示例程序将从串行代码改进为高性能并行代码。该并行代码可以运行在图形处理器(GPU)加速器和多核处理器(CPU)上。
阅读本章后,读者将会理解以下内容:
OpenACC内核指令
OpenACC数据指令和子句
PGProf性能调试器的使用
OpenACC标准三层并行模型
数据依赖
形如OpenACC之类的编译器导语是对标准编程语言的扩展,可以在较高的层次向编译器传达一系列显式信息。例如,OpenACC提供了显式表达循环并行特性和分离式物理存储器间数据移动的机制,传统的C、C++或Fortran编程语言均不具备这一能力。而OpenACC与这些传统编程语言良好耦合,恰好完美地补充了它们的不足之处。程序员通常逐步地向现存代码添加导语,优先向加速“热点”函数和循环应用导语,之后再改进其他次要代码部分。性能导向开发是一种利用性能分析工具指引程序员逐步改善程序性能的技术。性能导向开发能够告知程序员应用代码中哪部分加速后能够获得更大的性能提升。本章中,使用PGI(The Portland Group)编译器和PGPROF性能分析工具对一段测试代码进行逐步加速与改进。本章最后,将对一系列测试代码进行并行化。这里,完全使用OpenACC完成这些任务。
完成本章所需要的前提条件:一套可以运行和生成可执行程序的OpenACC编译器(本章中的示例将使用NVIDIA OpenACC开发包);读者需要能够阅读、理解并编译C或Fortran代码;读者需要能够运行OpenACC编译器生成的可执行程序。