性能導向開發
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編譯器生成的可執行程式。