面向 CUDA 開發人員的範例,示範了 CUDA 工具包中的功能。此版本支援 CUDA 工具包 12.5。
本節僅介紹 GitHub 上 CUDA 範例的發行說明。
下載並安裝適用於您對應平台的 CUDA Toolkit 12.5。有關cuda工具包的系統需求和安裝說明,請參閱Linux安裝指南和Windows安裝指南。
使用 git 使用以下命令克隆 CUDA 範例的儲存庫。
git clone https://github.com/NVIDIA/cuda-samples.git
如果不使用 git,使用這些範例的最簡單方法是透過點擊儲存庫頁面上的「下載 ZIP」按鈕來下載包含目前版本的 zip 檔案。然後,您可以解壓縮整個存檔並使用範例。
Windows 範例是使用 Visual Studio IDE 建置的。為每個支援的 Visual Studio 版本提供解決方案檔案 (.sln),使用以下格式:
*_vs<version>.sln - for Visual Studio <version>
完整的範例解決方案檔案存在於儲存庫的父目錄中:
每個單獨的範例都有自己的一組解決方案文件,位於: <CUDA_SAMPLES_REPO>Samples<sample_dir>
若要立即建置/檢查所有範例,應使用完整的解決方案檔案。要建立/檢查單一樣本,應使用單獨的樣本解決方案檔案。
Linux 範例是使用 makefile 建構的。若要使用 makefile,請將目前目錄變更為您要建置的範例目錄,然後執行 make:
$ cd <sample_dir>
$ make
範例 makefile 可以利用某些選項:
TARGET_ARCH= - 針對特定架構的交叉編譯。允許的架構包括 x86_64、ppc64le、armv7l、aarch64。預設情況下,TARGET_ARCH 設定為 HOST_ARCH。在 x86_64 計算機上,不設定 TARGET_ARCH 相當於設定 TARGET_ARCH=x86_64。
$ make TARGET_ARCH=x86_64
$ make TARGET_ARCH=ppc64le
$ make TARGET_ARCH=armv7l
$ make TARGET_ARCH=aarch64
有關 cuda 範例跨平台編譯的更多詳細信息,請參閱此處。
dbg=1 - 使用調試符號構建
$ make dbg=1
SMS="AB ..." - 覆寫將為其建置範例的 SM 架構,其中"AB ..."
是由空格分隔的 SM 架構清單。例如,若要為 SM 50 和 SM 60 產生 SASS,請使用SMS="50 60"
。
$ make SMS="50 60"
HOST_COMPILER=<host_compiler> - 覆寫預設的 g++ 主機編譯器。有關支援的主機編譯器的列表,請參閱 Linux 安裝指南。
$ make HOST_COMPILER=g++
初學者的基本 CUDA 範例,說明使用 CUDA 和 CUDA 運行時 API 的關鍵概念。
示範如何查詢裝置功能和測量 GPU/CPU 頻寬的實用程式範例。
示範 CUDA 相關概念和常見問題解決技術的範例。
示範 CUDA 功能的範例(協作組、CUDA 動態並行性、CUDA 圖等)。
示範如何使用 CUDA 平台庫(NPP、NVJPEG、NVGRAPH cuBLAS、cuFFT、cuSPARSE、cuSOLVER 和 cuRAND)的範例。
特定於領域(圖形、金融、影像處理)的範例。
展示效能優化的範例。
示範 libNVVVM 和 NVVM IR 用法的範例。
一些 CUDA 範例依賴第三方應用程式和/或程式庫,或 CUDA 工具包和驅動程式提供的功能來建置或執行。下面列出了這些依賴項。
如果範例具有系統上可用但未安裝的第三方相依性,則該範例將在建置時放棄自身。
每個範例的依賴項都列在其自述文件的依賴項部分中。
某些 CUDA 範例需要這些第三方相依性。如果可用,這些依賴項會自動安裝在您的系統上,或可透過系統的套件管理器 (Linux) 或第三方網站安裝。
FreeImage 是一個開源映像庫。 FreeImage 通常可以使用發行版的套件管理器系統安裝在 Linux 上。 FreeImage 也可以從 FreeImage 網站下載。
若要在 Windows 系統上設定 FreeImage,請將 FreeImage DLL 發行版提取到資料夾../../../Common/FreeImage/Dist/x64
中,使其包含 .h 和 .lib 檔案。將 .dll 檔案複製到根級別bin/win64/Debug
和bin/win64/Release
資料夾。
MPI(訊息傳遞介面)是用於在分散式程序之間通訊資料的 API。可以使用 Linux 發行版的套件管理器系統來安裝 MPI 編譯器。某些線上資源(例如 Open MPI)上也提供了它。在 Windows 上,要建置和執行 MPI-CUDA 應用程序,可以安裝 MS-MPI SDK。
某些範例只能在 64 位元作業系統上運作。
DirectX 是一組 API,旨在允許在 Microsoft 平台上開發多媒體應用程式。對於 Microsoft 平台,NVIDIA 的 CUDA 驅動程式支援 DirectX。多個適用於 Windows 的 CUDA 範例示範了 CUDA-DirectX 互通性,要建置此類範例,需要安裝 Microsoft Visual Studio 2012 或更高版本,該版本提供適用於 Windows 8 的 Microsoft Windows SDK。
DirectX 12 是高級低階程式設計 API 的集合,可減少驅動程式開銷,旨在允許從 Windows 10 作業系統開始在 Microsoft 平台上開發多媒體應用程式。對於 Microsoft 平台,NVIDIA 的 CUDA 驅動程式支援 DirectX。很少有適用於 Windows 的 CUDA 範例展示了 CUDA-DirectX12 互通性,要建置此類範例,需要安裝 Windows 10 SDK 或更高版本以及 VS 2015 或 VS 2017。
OpenGL 是用於 2D 和 3D 渲染的圖形庫。在支援 OpenGL 的系統上,NVIDIA 的 OpenGL 實作隨 CUDA 驅動程式一起提供。
OpenGL ES 是一個用於 2D 和 3D 渲染的嵌入式系統圖形庫。在支援 OpenGL ES 的系統上,NVIDIA 的 OpenGL ES 實作隨 CUDA 驅動程式一起提供。
Vulkan 是一種低開銷、跨平台的 3D 圖形和運算 API。 Vulkan 面向高效能即時 3D 圖形應用程序,例如跨所有平台的視訊遊戲和互動式媒體。在支援 Vulkan 的系統上,NVIDIA 的 Vulkan 實作隨 CUDA 驅動程式一起提供。為了建置和運行 Vulkan 應用程序,需要安裝 Vulkan SDK。
OpenMP 是一個用於多處理程式設計的 API。可以使用 Linux 發行版的套件管理器系統來安裝 OpenMP。它通常預先安裝了 GCC。也可以在 OpenMP 網站上找到它。
Screen 是 QNX 作業系統上的一個視窗系統。 Screen 通常是根檔案系統的一部分。
X11 是一種常見於 *-nix 風格作業系統的視窗系統。 X11 可以使用 Linux 發行版的套件管理器進行安裝,並且預先安裝在 Mac OS X 系統上。
EGL 是 Khronos 渲染 API(例如 OpenGL、OpenGL ES 或 OpenVG)與底層本機平台視窗系統之間的介面。
EGLOutput 是一組 EGL 擴展,可讓 EGL 直接渲染到顯示器。
EGLSync 是一組 EGL 擴展,它提供作為同步原語的同步對象,表示可以測試或等待其完成的事件。
NvSci 是一組通訊介面庫,其中 CUDA 可以與 NvSciBuf 和 NvSciSync 進行互通。 NvSciBuf 允許應用程式分配和交換記憶體中的緩衝區。 NvSciSync 允許應用程式管理同步對象,這些對像在操作序列開始和結束時進行協調。
NvMedia 提供強大的多媒體資料處理能力,可在 NVIDIA Tegra 裝置上實現真正的硬體加速。應用程式利用 NvMedia 應用程式介面 (API) 來處理影像和視訊資料。
一些 CUDA 範例需要這些 CUDA 功能。它們由 CUDA 工具包或 CUDA 驅動程式提供。某些功能可能在您的系統上無法使用。
CUFFT 回呼例程是使用者提供的核心例程,CUFFT 在載入或儲存資料時會呼叫它們。這些回呼例程僅在 Linux x86_64 和 ppc64le 系統上可用。
CDP(CUDA 動態並行)允許從 GPU 上執行的執行緒啟動核心。 CDP 僅適用於 SM 架構 3.5 或更高版本的 GPU。
多塊協作組 (MBCG) 擴展了協作組和 CUDA 程式設計模型以表達線程間區塊同步。 MBCG 可在 Pascal 及更高架構的 GPU 上使用。
多裝置協作組擴展了協作組和 CUDA 程式設計模型,使在多個 GPU 上執行的執行緒區塊能夠在執行時進行協作和同步。此功能可在 Pascal 及更高架構的 GPU 上使用。
CUBLAS(CUDA 基本線性代數子程式)是 BLAS 函式庫的 GPU 加速版本。
IPC(進程間通訊)允許進程共享設備指標。
CUFFT(CUDA 快速傅立葉轉換)是一個 GPU 加速的 FFT 函式庫。
CURAND(CUDA 隨機數產生)是一個 GPU 加速的 RNG 函式庫。
CUSPARSE(CUDA稀疏矩陣)提供用於稀疏矩陣計算的線性代數子程式。
CUSOLVER 函式庫是基於 CUBLAS 和 CUSPARSE 函式庫的高階套件。它將三個獨立的庫組合在一個框架下,每個庫都可以獨立使用或與其他工具包庫一起使用。 CUSOLVER 的目的是提供有用的類似 LAPACK 的功能,例如密集矩陣的常見矩陣分解和三角求解例程、稀疏最小二乘求解器和特徵值求解器。此外,cuSolver 還提供了一個新的重構庫,可用於求解具有共享稀疏模式的矩陣序列。
NPP(NVIDIA Performance Primitives)提供GPU加速的影像、視訊和訊號處理功能。
NVGRAPH 是一個 GPU 加速的圖形分析函式庫。
NVJPEG 函式庫為深度學習和超大規模多媒體應用中常用的影像格式提供高效能、GPU 加速的 JPEG 解碼功能。
NVRTC(CUDA RunTime Compilation)是CUDA C++的執行階段編譯函式庫。
流優先權允許建立具有指定優先權的流。流優先權僅適用於 SM 架構為 3.5 或更高版本的 GPU。
UVM(統一虛擬內存)使 CPU 和 GPU 都可以存取內存,而無需在兩者之間進行明確複製。 UVM 僅適用於 Linux 和 Windows 系統。
FP16 是一種 16 位元浮點格式。一位用於符號,五位用於指數,十位用於尾數。
NVCC 支援 C++11 功能。
libNVVM 範例是使用 CMake 3.10 或更高版本建構的。
我們歡迎您提出有關樣品問題和建議的意見。目前,我們不接受公眾的貢獻,請在我們改進貢獻模型時回來查看。
我們對所有來源使用 Google C++ 風格指南 https://google.github.io/styleguide/cppguide.html
有關 CUDA 的常見問題解答可以在 http://developer.nvidia.com/cuda-faq 和 CUDA 工具包發行說明中找到。