GPU高級調試與優化培訓大綱
第一部分:在CUDA-GDB中理解CUDA
要點:CUDA簡要歷史,CUDA的C擴展,kernel函數,WARP,CUDA的線程組織,準備調試環境,單GPU調試和多GPU調試,遠程調試,nvcc,-G和-g選項,附加到已經運行的進程,啟用kernel初始斷點(break on launch),觀察源代碼和匯編指令,設置斷點,單步跟蹤,條件斷點,觀察CUDA的內建變量,PTX指令集,理解WARP、grid、block和thread,Grid-Stride Loops,觀察GPU線程,觀察GPU的調用棧,觀察GPU的寄存器,觀察錯誤信息,從GPU上打印信息
試驗1:編譯和觀察簡單的CUDA程序
編譯一個簡單的CUDA程序,使用CUDA SDK中的二進制工具觀察其內容,理解CUDA的編譯過程和程序文件格式
試驗2:改進和調試向量乘法程序
使用CUDA技術編寫一個做向量乘法的小程序,理解如何向kernel函數傳遞參數和傳回計算結果
試驗3:學習CUDA-GDB的基本用法
調試一個簡單CUDA程序,練習常用的CUDA-GDB擴展命令,理解CUDA編程的關鍵概念
第二部分:使用NSight調試CUDA程序
要點:NSight簡介,安裝和設置環境信息,CUDA 9.0.props,窗口布局,在VS中編譯CUDA程序,產生調試信息(-G),本地調試模型,NSight Monitor,設置斷點,觀察變量,在Cuda Info窗口中觀察計算狀態,WarpWatch,調用棧,源代碼跟蹤,PTX/SASS匯編調試,數據斷點,API Trace,OpenCL kernel追蹤,產生GPU轉儲(core dump),調優功能
試驗4:使用Visual Studio和NSight調試CUDA程序
在VS中編譯和調試一個典型的并行計算程序,熟悉NSight提供的常用調試功能,包括產生調試信息,建立調試會話,設置各種斷點,觀察源代碼和變量,單步跟蹤等
第三部分:顯存錐鑒
要點:系統架構,內存映射,PCI Aperture,GART,GTT,訪問主內存, UVA/ UMA ,Batch Buffer ,CUDA中的內存類型,內存共享,內存復制,使用本地共享內存(shared memory),使用 CUDA memory checker 檢查內存問題(越界訪問),使用Nsight的內存調優功能
第四部分:使用NSight調試圖形程序
要點:感受3D圖形魅力,從DX9到DX12,WDDM,UMD、KMD 和DX運行時,DRM,GEM和KMS,啟用DRM的調試功能,HLSL,DirectCompute 的遺憾,PIX,Intel GPA,HUD,HUD圖表,熱鍵,HUD控制界面,VS的圖形分析器(VSGA),Nsight的圖形調試
試驗5:使用NSight調試3D圖形程序
在VS中編譯和調試一個典型的3D程序,使用HUD功能觀察GPU工作細節,使用VSGA深入分析某一幀畫面的產生細節,認識DirectX軟件棧中的關鍵組件和執行過程
第五部分:NVidia GPU微架構
要點:G80,從SIMD到SIMT,warp,SM(Streaming Multiprocessors),Fermi微架構,PTX指令集,GigaThreads調度器,ECC支持,第三代SM,Kepler微架構,Hyper-Q,Grid Management Unit(GMU),SMX,動態并行,Maxwell微架構,SMM,指令緩存,WARP調度器,指令分發單元,Pascal微架構,伏特微架構,Tensor Core,軟件仿真(GPUSim)
第六部分:在 Code-Builder 中理解 OpenCL
要點: OpenCL版本,標準導讀,執行模型,運行時,OpenCL的執行硬件,CPU 模擬,SIMD,kernel 函數, Code-Builder簡介,離線編譯和在線編譯,ND Range ,啟動算核函數,使用Code-Builder的調試功能,觀察device信息,context ,對象樹,命令隊列,內建函數
第七部分:計算機視覺加速接口(OpenVX)和英特爾實現
要點:OpenVX簡介,框架對象,數據對象,圖(graph),節點,節點參數,執行模型,回掉,用戶kernel,常用功能的接口函數,Intel CV SDK,Vision Algorithm Designer(VAD),自動產生C++代碼,人臉檢測實力分析和演示
試驗6:使用Code-Builder調試人臉檢測程序
調試Intel CV SDK中的人臉檢測示例程序,練習常用的調試功能,理解OpenVX的工作原理
第八部分:英特爾GPU綜述
要點:Intel顯卡簡史,GEN架構,固定功能單元和通用計算單元(EU),EU結構,Slice 和 SubSlice,公開的編程手冊,寄存器,GRF和ARF,VLIW,GEN指令集,LINUX驅動,i915,SRB驅動,開源項目(Beignet,NEO,CM,IGC)
第九部分:使用 CUDA profiler 優化CUDA程序
要點:測量GPU的時間,nvprof,命令行選項,指定收集范圍,定義輸出目標,Visual Profiler基礎,配置遠程目標,導入數據,觀察時序圖,識別重要事件:CPU缺頁,GPU缺頁,數據遷移,內存復制;采樣視圖,分析熱點,源代碼和匯編結合分析,Profile API,定義別名,定制標記,創建調優會話
試驗7:使用nvprof和Visual Profiler優化CUDA程序
使用nvprof觀察CUDA程序的執行細節,收集性能數據,在Visual Profiler中進行深入分析
第十部分:使用GPUView分析CPU與GPU交互
要點:ETW基礎,log.cmd,收集事件,識別典型問題:GPU/CPU Starvation ,CPU/GPU Idle,線程切換,分析線程切換原因,實例演示
試驗8:使用GPUView觀察GPU的工作狀態
安裝GPUView,使用GPUView分析一個典型3D圖形程序,理解GPUView的常用功能
第十一部分:AMD GPU和HSA
要點:從ATI到AMD,HSA聯盟,公開的技術手冊,APU和GCN,GCN3解析,硬件架構,支持HSA的LINUX驅動,調試支持,軟件工具鏈:GpuOpen.com,Radeon GPU Analyzer (RGA),使用GPU PerfStudio調試圖形程序,CodeXL簡介,使用CodeXL調試和優化OpenCL程序,CodeXL功能演示
第十二部分:ARM GPU
要點:Mali,典型應用,在深度學習中的應用(inference),Midgard 微架構解析,內部結構,通用計算執行單元,DS-5簡介, DS-5 編譯工具,DS-5調試器,Streamline性能分析工具,DS-5 IDE 介紹, 系統時域范圍的自下而上和自上而下分析方法,自定義標注,Log的圖形化顯示,OpenCL Kernel跟蹤, 找到代碼熱點,調用鏈分析,矩陣乘法的優化,ARM GPU軟件工具鏈,OpenVX實現,開源代碼解讀,實例演示:在Midgard GPU上調試OpenCL程序(使用OpenCL加速的人臉檢測應用)
|