NVIDIA CUDA軟件簡介
CUDA的開發(fā)考慮了幾個設(shè)計目標(biāo):
提供對標(biāo)準(zhǔn)編程語言(例如C)的一小部分擴展,這些擴展可實現(xiàn)并行算法的直接實現(xiàn)。使用CUDA C / C ++,程序員可以專注于算法的并行化任務(wù),而不必花時間在其實現(xiàn)上。
在應(yīng)用程序同時使用CPU和GPU的情況下支持異構(gòu)計算。應(yīng)用程序的串行部分在CPU上運行,并行部分被卸載到GPU。這樣,CUDA可以增量地應(yīng)用于現(xiàn)有應(yīng)用程序。CPU和GPU被視為具有各自內(nèi)存空間的單獨設(shè)備。此配置還允許在CPU和GPU上同時進行計算,而不會爭用內(nèi)存資源。
具有CUDA功能的GPU具有數(shù)百個內(nèi)核,這些內(nèi)核可以共同運行數(shù)千個計算線程。這些內(nèi)核具有共享資源,包括寄存器文件和共享內(nèi)存。片上共享內(nèi)存允許在這些內(nèi)核上運行的并行任務(wù)共享數(shù)據(jù),而無需通過系統(tǒng)內(nèi)存總線發(fā)送數(shù)據(jù)。
NVIDIA CUDA功能介紹
1、高性能
CUDA軟件平臺經(jīng)過高度優(yōu)化,可在NVIDIA GPU上執(zhí)行,并且比僅限CPU的選擇速度快2至5倍。
2、特定領(lǐng)域的圖書館
高級庫支持跨域的GPU加速,包括線性代數(shù),圖像處理,深度學(xué)習(xí)和圖形分析。
3、開發(fā)一次,隨處部署
CUDA軟件平臺可跨GPU系列工作,因此您可以在任何平臺上開發(fā),而無需擔(dān)心最終的部署環(huán)境。
4、集成開發(fā)環(huán)境
IDE帶有用于調(diào)試的圖形和命令行工具,識別GPU和CPU上的性能瓶頸,并提供上下文相關(guān)的優(yōu)化指導(dǎo)。
5、語言整合
使用您已知的編程語言開發(fā)應(yīng)用程序,包括C,C ++,F(xiàn)ortran和Python。
NVIDIA CUDA軟件特色
一、圖書館
1、使用cuBLAS中的新GEMM內(nèi)核加速高性能計算(HPC)和深度學(xué)習(xí)應(yīng)用程序。
2、通過cuFFT和NVIDIA Performance Primitives中多個GPU配置的性能優(yōu)化,可更快地執(zhí)行映像和信號處理應(yīng)用程序。
3、使用cuSOLVER和nvGRAPH中的新算法解決HPC中常見的線性和圖形分析問題。
二、合作團體
1、使用從子貼圖到線程,塊和網(wǎng)格的線程表達豐富的并行算法。
2、使用新的API和函數(shù)原語在應(yīng)用程序內(nèi)高效地管理和重用線程。
3、在開普勒體系結(jié)構(gòu)及更高版本上用強大的編程模型替換warp-synchronous編程。
三、沃爾塔建筑
1、Tensor Cores比Pascal GPU執(zhí)行速度快5倍,可以更快地執(zhí)行AI應(yīng)用程序。
2、利用下一代NVLink提供前代產(chǎn)品的2倍吞吐量來擴展多GPU應(yīng)用。
3、使用沃爾多多進程服務(wù)(MPS)提高GPU利用率。
四、開發(fā)工具
1、通過識別在統(tǒng)一內(nèi)存中導(dǎo)致頁面錯誤的源代碼來優(yōu)化和預(yù)取內(nèi)存訪問。
2、通過將事件添加到時間線和顏色編碼連接來高效地配置NVLink。
3、使用基于虛擬地址,遷移原因和頁面錯誤訪問類型的新事件過濾器來檢查統(tǒng)一內(nèi)存性能瓶頸。
NVIDIA CUDA使用方法
評估
對于現(xiàn)有項目,第一步是評估應(yīng)用程序,以找到負責(zé)大部分執(zhí)行時間的代碼部分。有了這些知識,開發(fā)人員就可以評估這些瓶頸以進行并行化,并開始研究GPU加速。
通過了解最終用戶的要求和約束并應(yīng)用阿姆達爾定律和古斯塔夫森定律,開發(fā)人員可以通過加速應(yīng)用程序已識別部分來確定性能改進的上限。
平行化
在確定了熱點并完成了設(shè)置目標(biāo)和期望的基本練習(xí)之后,開發(fā)人員需要并行處理代碼。根據(jù)原始代碼,這可以像調(diào)用現(xiàn)有的GPU優(yōu)化庫一樣簡單,例如立方玻璃, 傅立葉變換, 要么 推力,也可以像向并行化編譯器添加一些預(yù)處理器指令一樣簡單。
另一方面,某些應(yīng)用程序的設(shè)計將需要進行一些重構(gòu)以暴露其固有的并行性。由于甚至CPU架構(gòu)也需要公開并行性以改善或簡單地維護順序應(yīng)用程序的性能,因此CUDA并行編程語言家族(CUDA C ++,CUDA Fortran等)旨在使這種并行性的表達盡可能地簡單。 ,同時在支持CUDA的GPU上啟用操作,這些GPU設(shè)計用于實現(xiàn)最大并行吞吐量。
優(yōu)化
在完成每一輪應(yīng)用程序并行化之后,開發(fā)人員可以著手優(yōu)化實現(xiàn)以提高性能。由于可以考慮許多可能的優(yōu)化,因此充分了解應(yīng)用程序的需求可以幫助使過程盡可能地流暢。但是,與整個APOD一樣,程序優(yōu)化是一個反復(fù)的過程(確定優(yōu)化機會,應(yīng)用和測試優(yōu)化,驗證所實現(xiàn)的加速并重復(fù)),這意味著程序員在看到良好的加速效果之前不必花費大量時間來記住所有可能的優(yōu)化策略。相反,可以在學(xué)習(xí)策略時逐步應(yīng)用它們。
從重疊的數(shù)據(jù)傳輸?shù)接嬎阋恢钡轿⒄{(diào)浮點運算序列,優(yōu)化可以應(yīng)用于各種級別。可用的概要分析工具對于指導(dǎo)此過程非常有用,因為它們可以幫助建議開發(fā)人員進行優(yōu)化工作的最佳方案,并為該指南的優(yōu)化部分的相關(guān)部分提供參考。
部署
完成應(yīng)用程序一個或多個組件的GPU加速后,可以將結(jié)果與原始期望進行比較。回想一下,初始評估步驟允許開發(fā)人員確定通過加速給定熱點可獲得的潛在加速的上限。
在解決其他熱點以提高總體速度之前,開發(fā)人員應(yīng)考慮采用部分并行的實現(xiàn),并將其付諸實踐。這很重要,原因有很多;例如,它允許用戶盡早從他們的投資中獲利(提速可能是部分的,但仍然是有價值的),并且通過向開發(fā)者提供一組漸進而不是革命性的更改,將開發(fā)人員和用戶的風(fēng)險降至最低。應(yīng)用。
NVIDIA CUDA軟件組成
GPU加速庫
CUDA-X庫
IndeX框架(IndeX)
語言解決方案
OpenACC編譯器指令
NVIDIA CUDA C / C ++編譯器(NVCC)
參考資料
CUDA C / C ++代碼示例
CUDA文檔
開發(fā)工具
NVTAGS
DIGITS深度學(xué)習(xí)培訓(xùn)系統(tǒng)
Nsight集成開發(fā)環(huán)境
可視分析器
CUDA-GDB命令行調(diào)試器
CUDA-MEMCHECK內(nèi)存分析儀
NVIDIA CUDA更新日志
1.對部分功能進行了優(yōu)化
2.解了好多不能忍的bug