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