CUDA is a application programming interface (API) created by Nvidia that allows software developers to use a CUDA-enabled graphics processing unit (GPU) for general purpose processing in parallel. ie CUDA gives direct access to the GPU's instruction set
CUDA provides both:
- a low level API (CUDA Driver API, non single-source)
- and a higher level API (CUDA Runtime API, single-source).
- a supported NVIDIA graphic card
- Open device manager and check the Display Adapters
- Check that this display is listed in the CUDA enabled GPU
Microsoft Visual Studio
A supported version of Microsoft Visual Studio. See the installation page requirement for the list of supportED product. I have installed Community 2019. https://visualstudio.microsoft.com/
- Download the toolkit at https://developer.nvidia.com/cuda-downloads
fciv.exe -add cuda_10.1.105_418.96_win10.exe -md5
// // File Checksum Integrity Verifier version 2.05. // 25a060d492acbed7c549f65204e14e76 cuda_10.1.105_418.96_win10.exe
- The PATH environment variable was changed with the below path
%NVIDIA_HOME%\libnvvp;%NVIDIA_HOME%\bin :: for my installation with home = C:\NvidiaGpuToolkit\CUDA\10.1 C:\NvidiaGpuToolkit\CUDA\10.1\libnvvp;C:\NvidiaGpuToolkit\CUDA\10.1\bin;
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2019 NVIDIA Corporation Built on Fri_Feb__8_19:08:26_Pacific_Standard_Time_2019 Cuda compilation tools, release 10.1, V10.1.105
- Create the env CUDA_PATH that points to the directory given in the Table 4. CUDA to the Visual Studio .props locations. For instance, C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\visual_studio_integration\MSBuildExtensions. You should find in it the file CUDA 10.1.props, If you don't do it, you got a problem with the loading of the proejct due to a bad $(CUDAPropsPath)
- When opening the solution file Samples_vs2017.sln at the root of the samples, it should take time to load.
- Go to the deviceQuery Project
- Change the runtime tool set and the sdk if needed in the project properties (Right Click)
- Test the binary created. The important outcomes are that a device was found, that the device(s) match what is installed in your system, and that the test passed.
cd C:\NvidiaGpuToolkit\CUDA\Samples\10.1\bin\win64\Debug deviceQuery.exe
C:\NvidiaGpuToolkit\CUDA\Samples\10.1\bin\win64\Debug\deviceQuery.exe Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "Quadro M1200" CUDA Driver Version / Runtime Version 10.1 / 10.1 CUDA Capability Major/Minor version number: 5.0 Total amount of global memory: 4096 MBytes (4294967296 bytes) ( 5) Multiprocessors, (128) CUDA Cores/MP: 640 CUDA Cores GPU Max Clock rate: 1148 MHz (1.15 GHz) Memory Clock rate: 2505 Mhz Memory Bus Width: 128-bit L2 Cache Size: 2097152 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 4 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled CUDA Device Driver Mode (TCC or WDDM): WDDM (Windows Display Driver Model) Device supports Unified Addressing (UVA): Yes Device supports Compute Preemption: No Supports Cooperative Kernel Launch: No Supports MultiDevice Co-op Kernel Launch: No Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.1, CUDA Runtime Version = 10.1, NumDevs = 1 Result = PASS