CUDA 툴킷의 기능을 시연하는 CUDA 개발자용 샘플입니다. 이 버전은 CUDA 툴킷 12.5를 지원합니다.
이 섹션에서는 GitHub의 CUDA 샘플에 대한 릴리스 정보만 설명합니다.
해당 플랫폼에 맞는 CUDA Toolkit 12.5를 다운로드하여 설치하십시오. cuda 툴킷의 시스템 요구사항 및 설치 지침은 Linux 설치 가이드 및 Windows 설치 가이드를 참조하세요.
아래 명령을 사용하여 git clone을 사용하여 CUDA 샘플 저장소를 생성합니다.
git clone https://github.com/NVIDIA/cuda-samples.git
Git을 사용하지 않고 이 샘플을 사용하는 가장 쉬운 방법은 저장소 페이지에서 "ZIP 다운로드" 버튼을 클릭하여 현재 버전이 포함된 zip 파일을 다운로드하는 것입니다. 그런 다음 전체 아카이브의 압축을 풀고 샘플을 사용할 수 있습니다.
Windows 샘플은 Visual Studio IDE를 사용하여 빌드되었습니다. 솔루션 파일(.sln)은 지원되는 각 Visual Studio 버전에 대해 다음 형식을 사용하여 제공됩니다.
*_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 런타임 API 사용에 대한 주요 개념을 설명하는 초보자를 위한 기본 CUDA 샘플입니다.
장치 기능을 쿼리하고 GPU/CPU 대역폭을 측정하는 방법을 보여주는 유틸리티 샘플입니다.
CUDA 관련 개념과 일반적인 문제 해결 기술을 보여주는 샘플입니다.
CUDA 기능(협동 그룹, CUDA 동적 병렬성, CUDA 그래프 등)을 보여주는 샘플입니다.
CUDA 플랫폼 라이브러리(NPP, NVJPEG, NVGRAPH cuBLAS, cuFFT, cuSPARSE, cuSOLVER 및 cuRAND) 사용 방법을 보여주는 샘플입니다.
도메인(그래픽, 재무, 이미지 처리)과 관련된 샘플입니다.
성능 최적화를 보여주는 샘플입니다.
libNVVVM 및 NVVM IR의 사용을 보여주는 샘플입니다.
일부 CUDA 샘플은 타사 응용 프로그램 및/또는 라이브러리 또는 CUDA 도구 키트 및 드라이버에서 제공하는 기능을 사용하여 빌드하거나 실행합니다. 이러한 종속성은 아래에 나열되어 있습니다.
샘플에 시스템에서 사용할 수 있는 타사 종속성이 있지만 설치되지 않은 경우 샘플은 빌드 시 자체적으로 포기됩니다.
각 샘플의 종속성은 README의 종속성 섹션에 나열되어 있습니다.
이러한 타사 종속성은 일부 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(Message Passing Interface)는 분산 프로세스 간 데이터 통신을 위한 API입니다. MPI 컴파일러는 Linux 배포판의 패키지 관리자 시스템을 사용하여 설치할 수 있습니다. Open MPI와 같은 일부 온라인 리소스에서도 사용할 수 있습니다. Windows에서 MPI-CUDA 애플리케이션을 빌드하고 실행하려면 MS-MPI SDK를 설치할 수 있습니다.
일부 샘플은 64비트 운영 체제에서만 실행할 수 있습니다.
DirectX는 Microsoft 플랫폼에서 멀티미디어 응용 프로그램을 개발할 수 있도록 설계된 API 모음입니다. Microsoft 플랫폼의 경우 NVIDIA의 CUDA 드라이버가 DirectX를 지원합니다. 여러 Windows용 CUDA 샘플은 CUDA-DirectX 상호 운용성을 보여줍니다. 이러한 샘플을 빌드하려면 Windows 8용 Microsoft Windows SDK를 제공하는 Microsoft Visual Studio 2012 이상을 설치해야 합니다.
DirectX 12는 드라이버 오버헤드를 줄일 수 있는 고급 하위 수준 프로그래밍 API 모음으로, Windows 10 OS부터 시작하는 Microsoft 플랫폼에서 멀티미디어 애플리케이션을 개발할 수 있도록 설계되었습니다. Microsoft 플랫폼의 경우 NVIDIA의 CUDA 드라이버가 DirectX를 지원합니다. Windows용 CUDA 샘플은 CUDA-DirectX12 상호 운용성을 보여줍니다. 이러한 샘플을 빌드하려면 VS 2015 또는 VS 2017과 함께 Windows 10 SDK 이상을 설치해야 합니다.
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입니다. OpenMP는 Linux 배포판의 패키지 관리자 시스템을 사용하여 설치할 수 있습니다. 일반적으로 GCC가 사전 설치되어 제공됩니다. OpenMP 웹사이트에서도 찾을 수 있습니다.
Screen은 QNX 운영 체제에 있는 윈도우 시스템입니다. 화면은 일반적으로 루트 파일 시스템의 일부로 발견됩니다.
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 Toolkit 또는 CUDA Driver에서 제공됩니다. 일부 기능은 시스템에서 사용하지 못할 수 있습니다.
CUFFT 콜백 루틴은 데이터를 로드하거나 저장할 때 CUFFT가 호출하는 사용자 제공 커널 루틴입니다. 이러한 콜백 루틴은 Linux x86_64 및 ppc64le 시스템에서만 사용할 수 있습니다.
CDP(CUDA 동적 병렬 처리)를 사용하면 GPU에서 실행되는 스레드에서 커널을 시작할 수 있습니다. CDP는 SM 아키텍처 3.5 이상의 GPU에서만 사용할 수 있습니다.
MBCG(Multi Block Cooperative Groups)는 협력 그룹과 CUDA 프로그래밍 모델을 확장하여 스레드 간 블록 동기화를 표현합니다. MBCG는 Pascal 이상의 아키텍처를 갖춘 GPU에서 사용할 수 있습니다.
다중 장치 협력 그룹은 협력 그룹과 CUDA 프로그래밍 모델을 확장하여 여러 GPU에서 실행되는 스레드 블록이 실행될 때 협력하고 동기화할 수 있도록 합니다. 이 기능은 Pascal 이상의 아키텍처를 갖춘 GPU에서 사용할 수 있습니다.
CUBLAS(CUDA 기본 선형 대수 서브루틴)는 BLAS 라이브러리의 GPU 가속 버전입니다.
IPC(프로세스 간 통신)를 사용하면 프로세스가 장치 포인터를 공유할 수 있습니다.
CUFFT(CUDA Fast Fourier Transform)는 GPU 가속 FFT 라이브러리입니다.
CURAND(CUDA Random Number Generation)는 GPU 가속 RNG 라이브러리입니다.
CUSPARSE(CUDA Sparse Matrix)는 희소 행렬 계산에 사용되는 선형 대수 서브루틴을 제공합니다.
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비트 부동 소수점 형식입니다. 부호에는 1비트, 지수에는 5비트, 가수에는 10비트가 사용됩니다.
C++11 기능의 NVCC 지원.
libNVVM 샘플은 CMake 3.10 이상을 사용하여 빌드됩니다.
샘플에 대한 문제 및 제안 사항에 대한 귀하의 의견을 환영합니다. 현재 우리는 대중의 기여를 받아들이지 않습니다. 우리의 기여 모델이 발전하는 동안 여기에서 다시 확인하세요.
우리는 모든 소스 https://google.github.io/styleguide/cppguide.html에 대해 Google C++ 스타일 가이드를 사용합니다.
CUDA에 관해 자주 묻는 질문에 대한 답변은 http://developer.nvidia.com/cuda-faq 및 CUDA 툴킷 릴리스 노트에서 찾을 수 있습니다.