쿠다

CUDA
쿠다
Nvidia CUDA Logo.jpg
개발자엔비디아
초기 릴리즈2007년 6월 23일, 15년 전(2007-06-23)
안정된 릴리스
2022년 8월 3일 / 11.7.1, 3일 전(2022-08-03)
운영 체제Windows, Linux
플랫폼지원되는 GPU
유형GPGPU
면허증.독자 사양
웹 사이트developer.nvidia.com/cuda-zone

CUDA(Compute Unified Device Architecture)는 GPU(General Purpose Computing on GPU)라고 불리는 접근방식인 GPU(General Purpose Computing on GPU)에 특정 유형의 그래픽 처리 장치(GPU)를 사용할 수 있는 병렬 컴퓨팅 플랫폼 및 애플리케이션 프로그래밍 인터페이스(API)입니다.CUDA는 컴퓨팅 [1]커널 실행을 위해 GPU의 가상 명령 집합과 병렬 계산 요소에 직접 액세스할 수 있는 소프트웨어 계층입니다.

CUDA는 C, C++, Fortran 등의 프로그래밍 언어로 동작하도록 설계되어 있습니다.이 접근성을 통해 병렬 프로그래밍 전문가가 GPU 리소스를 쉽게 사용할 수 있습니다.Direct3D OpenGL과 같은 이전 API는 그래픽 [2]프로그래밍에 고도의 기술이 필요했습니다.CUDA 탑재 GPU는 OpenMP, OpenACC,[3][1] OpenCL 등의 프로그래밍 프레임워크와 HIP를 CUDA에 컴파일하여 지원합니다.

CUDA는 [4]Nvidia에 의해 작성되었습니다.처음 도입되었을 때 이 이름은 Compute Unified [5]Device Architecture의 약자였지만, Nvidia는 나중에 이 약자의 일반적인 사용을 중단했습니다.

배경

그래픽스 처리 장치(GPU)는 컴퓨터 전용 프로세서로서 실시간 고해상도 3D 그래픽스 처리 부하가 높은 작업에 대응합니다.2012년까지 GPU는 대규모 데이터 블록을 효율적으로 조작할 수 있는 고도로 병렬화된 멀티 코어 시스템으로 발전했습니다.이 설계는 다음과 같은 대규모 데이터 블록을 병렬로 처리하는 경우 알고리즘에 대한 범용 중앙 처리 장치(CPU)보다 효과적입니다.

프로그래밍 능력

CUDA 처리 흐름의 예
  1. 메인 메모리에서 GPU 메모리로 데이터 복사
  2. CPU가 GPU 컴퓨팅 커널을 시작합니다.
  3. GPU의 CUDA 코어는 커널을 병렬로 실행
  4. GPU 메모리에서 메인 메모리로 결과 데이터 복사

CUDA 플랫폼은 CUDA 가속 라이브러리, OpenACC 의 컴파일러 명령 및 C, C++, Fortran 의 업계 표준 프로그래밍 언어에 대한 확장을 통해 소프트웨어 개발자에 액세스할 수 있습니다.C/C++ 프로그래머는 nvcc를 사용하여 PTX로 컴파일된 'CUDA C/C++' 또는 Nvidia의 LLVM 기반의 C/C++ 컴파일러를 사용할 수 있습니다.[6]Fortran 프로그래머는 Portland Group의 PGI CUDA Fortran 컴파일러로 컴파일된 'CUDA Fortran'을 사용할 수 있습니다.

CUDA 플랫폼은 라이브러리, 컴파일러 디렉티브, CUDA C/C++ 및 CUDA Fortran 외에 Khronos 그룹의 OpenCL,[7] Microsoft의 Direct Compute, OpenGL Compute Shader 및 C++ [8]AMP 등의 다른 계산 인터페이스를 지원합니다.Python, Perl, Fortran, Java, Ruby, Lua, Common Lisp, Haskell, R, MATLAB, IDL, JuliaMathematica의 네이티브 지원에도 서드파티 래퍼를 사용할 수 있습니다.

컴퓨터 게임 업계에서는 GPU를 그래픽 렌더링이나 게임 물리 계산(파편, 연기, 화재, 유체 등 물리 효과)에 사용합니다.예를 들어 PhysX나 Bullet 등이 있습니다.또한 CUDA는 컴퓨터 생물학, 암호학 및 기타 분야에서 그래픽이 아닌 응용 프로그램을 규모 이상으로 [9][10][11][12][13]가속화하기 위해 사용되어 왔습니다.

CUDA는 낮은 수준의 API(CUDA 드라이버 API, 싱글 소스 아님)와 높은 수준의 API(CUDA 런타임 API, 싱글 소스)를 모두 제공합니다.최초의 CUDA SDK는 2007년 2월 15일에 Microsoft WindowsLinux용으로 공개되었습니다.Mac OS X 지원은 2008년 [15]2월 14일에 출시된 베타 버전을 대체하는 버전 [14]2.0에서 나중에 추가되었습니다.CUDA는 GeForce, Quadro 및 Tesla 라인포함한 G8x 시리즈 이후의 모든 Nvidia GPU와 연동됩니다.CUDA는 대부분의 표준 운영 체제와 호환됩니다.

CUDA 8.0 에는, 다음의 라이브러리가 부속되어 있습니다(컴파일 및 런타임의 경우, 알파벳 순서로 되어 있습니다.

  • cuBLAS – CUDA 기본 선형 대수 서브루틴 라이브러리
  • CUDART – CUDA 런타임 라이브러리
  • cuFFT – CUDA Fast Fourier Transform 라이브러리
  • cuRAND – CUDA 난수 생성 라이브러리
  • cuSOLVER – 밀도가 높고 희박한 직접 솔버의 CUDA 기반 컬렉션
  • cuSPARSse – CUDA 스파스 매트릭스 라이브러리
  • NPP – NVIDIA Performance Primitive 라이브러리
  • nvGRAPH – NVIDIA Graph Analytics 라이브러리
  • NVML – NVIDIA 관리 라이브러리
  • NVRTC – CUDA C++용 NVIDIA 런타임 컴파일 라이브러리

CUDA 8.0에는 다음 소프트웨어 컴포넌트가 포함되어 있습니다.

  • nView – NVIDIA nView 데스크톱 관리 소프트웨어
  • NVWMI – NVIDIA Enterprise Management Toolkit
  • GameWorks PhysX – 멀티플랫폼 게임 물리 엔진

CUDA 9.0~9.2에는 다음 컴포넌트가 부속되어 있습니다.

  • CUTLASS 1.0 – 커스텀 선형 대수 알고리즘
  • NVCUVID – NVIDIA 비디오 디코더는 CUDA 9.2에서 폐지되었습니다.NVIDIA Video Codec SDK에서 사용할 수 있습니다.

CUDA 10에는 다음 컴포넌트가 포함되어 있습니다.

  • nvJPEG – 하이브리드(CPU 및 GPU) JPEG 처리

CUDA 11.0-11.7에는 다음 [16][17][18][19]컴포넌트가 포함되어 있습니다.

  • CUB는 지원되는 새로운 C++ 라이브러리 중 하나입니다.
  • MIG 멀티 인스턴스 GPU 지원
  • nvJPEG2000 – JPEG 2000 인코더 및 디코더

이점

CUDA에는 그래픽스 API를 사용한 GPU(General Purpose Computation)의 기존 범용 계산(GPGPU)에 비해 몇 가지 이점이 있습니다.

  • 산재 읽기 – 메모리 내의 임의의 주소에서 코드를 읽을 수 있습니다.
  • 통합 가상 메모리(CUDA 4.0 이후)
  • 통합 메모리(CUDA 6.0 이후)
  • 공유 메모리 – CUDA는 스레드 간에 공유할 수 있는 고속 공유 메모리 영역을 제공합니다.이는 사용자 관리 캐시로 사용할 수 있으며 텍스처 [20]룩업을 통해 가능한 한 높은 대역폭을 사용할 수 있습니다.
  • GPU와의 다운로드 및 GPU로부터의 리드백
  • 정수 텍스처 룩업을 포함한 정수 및 비트 연산 완전 지원
  • RTX 20 및 30 시리즈 카드에서는, CUDA 코어는 「RTX IO」라고 불리는 기능에 사용됩니다.이 기능에서는 CUDA 코어가 게임 로딩 시간을 대폭 단축합니다.

제한 사항

  • 호스트 컴퓨터인지 GPU 디바이스인지에 관계없이 모든 CUDA 소스 코드가 C++ [21]구문 규칙에 따라 처리됩니다.항상 그랬던 것은 아니다.이전 버전의 CUDA는 C 구문 [22]규칙을 기반으로 했습니다.C++ 컴파일러를 사용하여 C 코드를 컴파일하는 일반적인 경우와 마찬가지로 오래된 C-스타일 CUDA 소스 코드가 컴파일에 실패하거나 원래 의도한 대로 동작하지 않을 수 있습니다.
  • OpenGL 등의 렌더링 언어와의 상호 운용성은 단방향이며 OpenGL은 등록된 CUDA 메모리에 액세스할 수 있지만 CUDA는 OpenGL 메모리에 액세스할 수 없습니다.
  • 호스트와 디바이스 메모리 간의 복사는 시스템 버스 대역폭과 지연으로 인해 퍼포먼스에 타격을 줄 수 있습니다(이는 GPU의 DMA 엔진에 의해 처리되는 비동기 메모리 전송을 통해 부분적으로 완화될 수 있습니다).
  • 최적의 성능을 위해 스레드는 최소 32개의 그룹으로 실행되어야 하며 총 스레드 수는 수천 개입니다.32개의 스레드 각각이 동일한 실행 경로를 사용한다면 프로그램 코드의 브랜치는 성능에 큰 영향을 주지 않습니다.SIMD 실행 모델은 본질적으로 다른 태스크(를 들어 레이 트레이스 중 공간 분할 데이터 구조를 통과하는 것)에 대해 중대한 제한이 됩니다.
  • 최신 버전에는 에뮬레이터 또는 폴백 기능을 사용할 수 없습니다.
  • 유효한 C++가 플래그가 붙어 [citation needed]컴파일러가 타깃 GPU 디바이스의 제한에 대한 최적화에 접근하는 방법 때문에 컴파일을 방해할 수 있습니다.
  • C++ Run-Time Type Information(RTTI; 런타임유형정보) 및 C++ 스타일의 예외 처리는 호스트 코드에서만 지원되며 디바이스 코드는 지원되지 않습니다.
  • 제1세대 CUDA 연산능력 1.x 디바이스의 단정도에서는 데노멀 수치가 지원되지 않고 대신 0으로 플래시되며 분할 및 제곱근 연산의 정밀도는 IEEE 754에 준거한 단정도 연산보다 약간 낮습니다.컴퓨팅 기능 2.0 이상을 지원하는 디바이스는 정규 번호를 지원하며 분할 및 제곱근 연산은 기본적으로 IEEE 754에 준거합니다.그러나 사용자는 컴파일러 플래그를 설정하여 정확한 나눗셈과 정확한 제곱근을 사용하지 않도록 설정하고 데노멀 수치를 [23]0으로 플러시함으로써 필요에 따라 1.x 디바이스의 게임용 고속화 수준의 연산 기능을 얻을 수 있습니다.
  • OpenCL과 달리 CUDA 지원 GPU는 [24]Nvidia에서만 사용할 수 있습니다.다른 GPU에서 CUDA를 구현하려는 시도는 다음과 같습니다.
    • 프로젝트 고수:CUDA C++11 소스를 OpenCL 1.2 C로 변환합니다.TensorFlow를 [25][26][27]실행하기 위한 CUDA-on-CL의 포크.
    • CU2CL: CUDA 3.2 C++를 OpenCL [28]C로 변환합니다.
    • GPUOpen HIP: AMD 및 Nvidia GPU용 CUDA 및 ROCm 위에 얇은 추상화 레이어.CUDA C++ 소스를 Import하기 위한 변환 도구가 있습니다.CUDA 4.0과 C++11 및 float16을 지원합니다.

지원되는 GPU

지원되는 CUDA 레벨의 GPU 및 카드.

  • CUDA SDK 1.0을 통한 컴퓨팅 기능 1.0~1.1 (Tesla)[29] 지원
  • 컴퓨팅 기능 1.0~1.1+x (Tesla)에 대한 CUDA SDK 1.1 지원
  • 컴퓨팅 기능 1.0~1.1+x(Tesla)에 대한 CUDA SDK 2.0 지원
  • CUDA SDK 2.1 – 2.3.1 지원 (컴퓨팅 기능 1.0 – 1.3) (Tesla)[30][31][32][33]
  • CUDA SDK 3.0 – 3.1 지원 - 컴퓨팅 기능 1.0 ~2.0 (Tesla, Fermi)[34][35]
  • 컴퓨팅 기능 1.0~2.1 (Tesla, Fermi)[36]에 대한 CUDA SDK 3.2 지원
  • 컴퓨팅 기능 1.0~2.1+x (Tesla, Fermi 등)에 대한 CUDA SDK 4.0~4.2 지원
  • CUDA SDK 5.0 ~ 5.5 지원 (Tesla, Fermi, Kepler).
  • CUDA SDK 6.0은 컴퓨팅 기능 1.0~3.5 (Tesla, Fermi, Kepler)를 지원합니다.
  • CUDA SDK 6.5는 컴퓨팅 기능 1.1 ~ 5.x (Tesla, Fermi, Kepler, Maxwell)를 지원합니다.컴퓨팅 기능을 지원하는 최신 버전 1.x (Tesla)
  • CUDA SDK 7.0~7.5의 컴퓨팅 기능 2.0~5.x(Fermi, Kepler, Maxwell) 지원.
  • CUDA SDK 8.0은 컴퓨팅 기능 2.0~6.x (Fermi, Kepler, Maxwell, Pascal)를 지원합니다.컴퓨팅 기능 2.x(Fermi)를 지원하는 최신 버전(Pascal GTX 1070Ti는 지원되지 않습니다).
  • CUDA SDK 9.0~9.2는 컴퓨팅 기능 3.0~7.2 (Kepler, Maxwell, Pascal, Volta) (Pascal GTX 1070Ti는 지원되지 않습니다.CUDA SDK 9.0 및 CUDA SDK 9.2)를 지원합니다.
  • CUDA SDK 10.0~10.2의 컴퓨팅 기능 3.0~7.5 지원(Kepler, Maxwell, Pascal, Volta, Turing).컴퓨팅 기능 3.x(Kepler)를 지원하는 최신 버전.10.2는 MacOS의 마지막 공식 릴리스입니다. 새로운 릴리스에서는 MacOS를 지원하지 않습니다.
  • CUDA SDK 11.0은 컴퓨팅 기능 3.5 ~8.0 (일부 케플러), Maxwell, Pascal, Volta, Turing, Amper (일부)[37]를 지원합니다.
  • CUDA SDK 11.1 – 11.7 컴퓨팅 기능 3.5 – 8.6 지원(Keler (일부), Maxwell, Pascal, Volta, Turing, Amper).[38]
컴퓨팅
능력
(버전)
마이크로
아키텍처
GPU 지포스 Quadro, NVS Tesla/데이터센터 테그라
젯슨
운전해.
1.0 테슬라 G80 GeForce 8800 Ultra, GeForce 8800 GTX, GeForce 8800 GTS(G80) Quadro FX 5600, Quadro FX 4600, Quadro Plex 2100 S4 Tesla C870, Tesla D870, Tesla S870
1.1 G92, G94, G96, G98, G84, G86 GeForce GTS 250, GeForce 9800 GX2, GeForce 9800 GTX, GeForce 9800 GT, GeForce 8800 GT(G92) GeForce 9600 GT, GeForce 9500 GT, GeForce 9400 GT, GeForce 8600 GEForce 8600
GeForce G110M, GeForce 9300M GS, GeForce 9200M GS, GeForce 9100M GT, GeForce 8400M GT, GeForce G105M
Quadro FX 4700 X2, Quadro FX 3700, Quadro FX 1800, Quadro FX 1700, Quadro FX 580, Quadro FX 570, Quadro FX 470, Quadro FX 380, Quadro FX 370, Quadro FX 370 로프로파일
Quadro FX 3800M, Quadro FX 3700M, Quadro FX 3600M, Quadro FX 2800M, Quadro FX 2700M, Quadro FX 1700M, Quadro FX 1600M, Quadro FX 770
1.2 GT218, GT216, GT215 GeForce GT 340*, GeForce GT 330*, GeForce 320*, GeForce 315*, GeForce 310*, GeForce GT 240, GeForce GT 220, GeForce 210,
GeForce GTS 360M, GeForce GTS 350M, GeForce GT 335M, GeForce GT 330M, GeForce GT 325M, GeForce GT 240M, GeForce G210M, GeForce 310M, GeForce 305M
Quadro FX 380 로프로파일, Quadro FX 1800M, Quadro FX 880M, Quadro FX 380M,
Nvidia NVS 300, NVS 5100M, NVS 3100M, NVS 2100M, ION
1.3 GT200, GT200b GeForce GTX 295, GTX 285, GTX 280, GeForce GTX 275, GeForce GTX 260 Quadro FX 5800, Quadro FX 4800, Quadro FX 4800(Mac용), Quadro FX 3800, Quadro CX, Quadro Plex 2200 D2 Tesla C1060, Tesla S1070, Tesla M1060
2.0 페르미 GF100, GF110 GeForce GTX 590, GeForce GTX 580, GeForce GTX 570, GeForce GTX 470, GeForce GTX 465,
지포스 GTX 480M
Quadro 6000, Quadro 5000, Quadro 4000, Quadro 4000(Mac용), Quadro Plex 7000,
Quadro 5010M, Quadro 5000M
Tesla C2075, Tesla C2050/C2070, Tesla M2050/M2070/M2075/M2090
2.1 GF104, GF106 GF108, GF114, GF116, GF117, GF119 GeForce GTX 560Ti, GeForce GTX 550Ti, GeForce GT460, GeForce GTS 450*, GeForce GT640(GDDR3), GeForce GT630, GeForce GT620, GeForce GT610, GeForce 520
GeForce GTX 675M, GeForce GT 670M, GeForce GT 635M, GeForce GT 630M, GeForce GT 720M, GeForce GT 620M, GeForce 610M, GeForce 820M470M, GeForce GTX 460M, GeForce GT 445M, GeForce GT 420M, GeForce GT 415M, GeForce 710M, GeForce 410M
Quadro 2000, Quadro 2000D, Quadro 600,
Quadro 4000M, Quadro 3000M, Quadro 2000M, Quadro 1000M,
NVS 310, NVS 315, NVS 5400M, NVS 5200M, NVS 4200M
3.0 케플러 GK104, GK106, GK107 GeForce GTX 770, GeForce GT 760, GeForce GT 740, GeForce GTX 690, GeForce GTX 660Ti, GeForce GTX 660Ti, GeForce GTX 650Ti Boost, GeForce GeForce GTX 650, GeForce GeForce GTX 650
GeForce GTX 880M, GeForce GTX 870M, GeForce GTX 780M, GeForce GTX 765M, GeForce GTX 760M, GeForce GTX 680M, GTX 675735M, GeForce GT 730M
Quadro K5000, Quadro K4200, Quadro K4000, Quadro K2000, Quadro K2000D, Quadro K600, Quadro K420,
Quadro K500M, Quadro K510M, Quadro K610M, Quadro K1000M, Quadro K2000M, Quadro K1100M, Quadro K2100M, Quadro K3000M, Quadro K3100M, Quadro K4,000KM
NVS 510, Quadro 410
Tesla K10, GRID K340, GRID K520, GRID K2
3.2 GK20A Tegra K1,
젯슨 TK1
3.5 GK110, GK208 GeForce GTT Titan Z, GeForce GTT Titan Black, GeForce GTX 780Ti, GeForce GT 780, GeForce GT 640(GDDR5), GeForce GT 630v2, GeForce GT 730, GeForce 720 Quadro K6000, Quadro K5200 Tesla K40, Tesla K20x, Tesla K20
3.7 GK210 테슬라 K80
5.0 맥스웰 GM107, GM108 GeForce GTX 750Ti, GeForce GTX 750, GeForce GTX 960M, GeForce 950M, GeForce 940M, GeForce GTX 850M, GeForce 845M, GeForce 840M, GeForce 840 Quadro K1200, Quadro K2200, Quadro K620, Quadro M2000M, Quadro M1000M, Quadro M600M, Quadro K620M, NVS 810 테슬라 M10
5.2 GM200, GM204, GM206 GeForce GTX Titan X, GeForce GTX 980 Ti, GeForce GTX 980, GeForce GTX 970, GeForce GTX 960, GeForce GTX 750 SE,
GeForce GTX 980M, GeForce GTX 970M, GeForce GTX 965M
Quadro M6000 24GB, Quadro M6000, Quadro M5000, Quadro M4000, Quadro M2000, Quadro M5500,
Quadro M5000M, Quadro M4000M, Quadro M3000M
Tesla M4, Tesla M40, Tesla M6, Tesla M60
5.3 GM20B Tegra X1,
Jetson TX1,
젯슨 나노,
드라이브 CX,
드라이브 PX
6.0 파스칼 GP100 Quadro GP100 테슬라 P100
6.1 GP102, GP104, GP106, GP107, GP108 Nvidia TITAN Xp, Titan X,
GeForce GTX 1080Ti, GTX 1080, GTX 1070Ti, GTX 1070, GTX 1060,
GTX 1050 Ti, GTX 1050, GT 1030, GT 1010,
MX350, MX330, MX250, MX230, MX150, MX130, MX110
Quadro P6000, Quadro P5000, Quadro P4000, Quadro P2200, Quadro P2000, Quadro P1000, Quadro P400, Quadro P500, Quadro P520, Quadro P600, Quadro P600, Quadro P600
Quadro P5000(모바일), Quadro P4000(모바일), Quadro P3000(모바일)
Tesla P40, Tesla P6, Tesla P4
6.2 GP10B[40] Tegra X2, Jetson TX2, DRIVE PX 2
7.0 볼타 GV100 NVIDIA TITAN V Quadro GV100 Tesla V100, Tesla V100S
7.2 GV10B[41]

GV11B[42][43]

테그라 자비에르
제트슨 자비에 NX,
제슨 AGX 재비어
드라이브 AGX Xavier,
AGX Pegasus를 운전합니다.
클라라 AGX
7.5 튜링 TU102, TU104, TU106, TU116, TU117 NVIDIA TITAN RTX,
GeForce RTX 2080 Ti, RTX 2080 Super, RTX 2080, RTX 2070, RTX 2060 Super, RTX 2060 12GB, RTX 2060,
GeForce GTX 1660Ti, GTX 1660 Super, GTX 1660, GTX 1650 Super, GTX 1650, MX550, MX450
Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Quadro RTX 4000, T1000, T600, T400
T1200(모바일), T600(모바일), T500(모바일), Quadro T2000(모바일), Quadro T1000(모바일)
테슬라 T4
8.0 암페어 GA100 A100 80GB, A100 40GB, A30
8.6 GA102, GA103, GA104, GA106, GA107 GeForce RTX 3090 Ti, RTX 3090, RTX 3080 Ti, RTX 3080 12GB, RTX 3080, RTX 3070, RTX 3060 Ti, RTX 3060, RTX 3050, RTX 3050 (모바일) RTX A6000, RTX A5500, RTX A5000, RTX A4500, RTX A4000, RTX A2000
RTX A5000(모바일), RTX A4000(모바일), RTX A3000(모바일), RTX A2000(모바일)
A40, A16, A10, A2
8.7 GA10B 젯슨 오린 NX,
젯슨 AGX 오린
AGX Orin 드라이브,
AGX Pegasus OA를 구동합니다.
클라라 홀로스칸
9.0 호퍼 GH100 H100
9.x 러브레이스 AD102, AD104, AD106, AD107
9.x AD10B
컴퓨팅
능력
(버전)
마이크로
아키텍처
GPU 지포스 Quadro, NVS Tesla/데이터센터 테그라
젯슨
운전해.

'*' – OEM 전용 제품

버전 기능 및 사양

기능 지원(목록에 없는 기능은 모든 컴퓨팅 기능에 대해 지원) 컴퓨팅 능력(버전)
1.0 1.1 1.2 1.3 2.x 3.0 3.2 3.5, 3.7, 5.0, 5.2 5.3 6.x 7.x 8.0 8.6 9.0 9.x
글로벌 메모리의 32비트 워드로 작동하는 정수 원자 함수 아니요. 네.
글로벌 메모리의 32비트 부동소수점 값으로 동작하는 atomicExch()
공유 메모리의 32비트 워드로 작동하는 정수 원자 함수 아니요. 네.
공유 메모리의 32비트 부동소수점 값으로 동작하는 atomicExch()
글로벌 메모리의 64비트 워드로 작동하는 정수 원자 함수
워프 투표 함수
2배 정밀도의 부동 소수점 연산 아니요. 네.
공유 메모리의 64비트 정수 값으로 작동하는 원자 함수 아니요. 네.
글로벌 메모리 및 공유 메모리의 32비트 워드로 동작하는 부동소수점 아토믹 추가
_param()
_syslogfence_system()
_syncthreads_counts_syncthreads_ands_syncthreads_or()
표면 함수
스레드 블록의 3D 그리드
워프 셔플 기능, 통합 메모리 아니요. 네.
깔때기 이동 아니요. 네.
동적 병렬 처리 아니요. 네.
반정밀 부동 소수점 연산:
덧셈, 뺄셈, 곱셈, 비교, 워프 셔플 함수, 변환
아니요. 네.
글로벌 메모리 및 공유 메모리의 64비트 부동소수점 값으로 작동하는 원자적 추가 아니요. 네.
텐서 코어 아니요. 네.
혼합 정밀도 워프 매트릭스 함수 아니요. 네.
하드웨어 가속 비동기 복사 아니요. 네.
하드웨어 가속 스플릿 도착/대기 장벽 아니요. 네.
워프 레벨의 지원으로 작업 절감 아니요. 네.
L2 캐시 상주 관리 아니요. 네.
기능 지원(목록에 없는 기능은 모든 컴퓨팅 기능에 대해 지원) 1.0 1.1 1.2 1.3 2.x 3.0 3.2 3.5, 3.7, 5.0, 5.2 5.3 6.x 7.x 8.0 8.6 9.0 9.x
컴퓨팅 능력(버전)

[44]

데이터형 작동 이후 지원 이후 지원
글로벌 메모리용
이후 지원
공유 메모리용
16비트 정수 일반 업무
32비트 정수 원자 함수 1.1 1.2
64비트 정수 원자 함수 1.2 2.0
16비트 부동소수점 덧셈, 뺄셈,
곱셈, 비교,
워프 셔플 함수, 변환
5.3
32비트 부동소수점 atomicExch() 1.1 1.2
32비트 부동소수점 원자 첨가 2.0 2.0
64비트 부동소수점 일반 업무 1.3
64비트 부동소수점 원자 첨가 6.0 6.0
텐서 코어 7.0

주의: 누락된 줄이나 빈 항목은 해당 항목에 대한 정보가 부족하다는 것을 나타냅니다.
[45]

데이터형 이후 지원
조밀 행렬의 경우
이후 지원
희박 행렬의 경우
볼타/프로페셔널 튜링
텐서 코어당 사이클당 FMA
(8 텐서 코어/SM)
컨슈머 튜링
텐서 코어당 사이클당 FMA
(8 텐서 코어/SM)
프로페셔널 암페어/오린
텐서 코어당 사이클당 FMA
(4 텐서 코어/SM)
컨슈머 암페어
텐서 코어당 사이클당 FMA
(4 텐서 코어/SM)
호퍼
텐서 코어당 사이클당 FMA
(4 텐서 코어/SM)
1비트 값 7.5 - 1024 1024 4096 2048 -
4비트 정수 7.5 8.0 256 256 1024 512 -
8비트 정수 7.2 8.0 128 128 512 256 1024
FP16을 사용한8비트 부동소수점 FP8(E4M3 및 E5M2) 누적 9.0 9.0 - - - - 1024
8비트 부동소수점 FP8(E4M3 및 E5M2)과 FP32 누적 9.0 9.0 - - - - 1024
16비트 부동소수점 FP16 및 FP16 누적 7.0 8.0 64 64 256 128 512
16비트 부동소수점 FP16 및 FP32 누적 7.0 8.0 64 32 256 64 512
FP32를 사용한 16비트 부동소수점 BF16 누적 8.0 8.0 - - 256 64 512
32비트(19비트 사용) 부동소수점 TF32 8.0 8.0 - - 128 32 256
64비트 부동소수점 8.0 - - - 16 32

주의: 누락된 줄이나 빈 항목은 해당 항목에 대한 정보가 부족하다는 것을 나타냅니다.

[46] [47] [48] [49] [50] [51]

기술사양 컴퓨팅 능력(버전)
1.0 1.1 1.2 1.3 2.x 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.1 6.2 7.0 7.2 7.5 8.0 8.6 8.7 9.0 9.x
장치당 최대 상주 그리드 수
(커널 동시 실행)
외상후 스트레스 장애 16 4 32 16 128 32 16 128 16 128
스레드 블록 그리드의 최대 치수 2 3
스레드 블록 그리드의 최대 x차원 65535 231 − 1
스레드 블록 그리드의 최대 y 또는 z 치수 65535
스레드 블록의 최대 치수 3
블록의 최대 x차원 또는 y차원 512 1024
블록의 최대 z차원 64
블록당 최대 스레드 수 512 1024 1024
워프 사이즈 32 32
멀티프로세서당 상주 블록의 최대 수 8 16 32 16 32 16 32
멀티프로세서당 상주 워프 최대 수 24 32 48 64 32 64 48 64
멀티프로세서당 상주 스레드의 최대 수 768 1024 1536 2048 1024 2048 1536 2048
멀티프로세서당 32비트 레지스터 수 8 K 16 K 32 K 64 K 128 K 64 K 64 K
스레드 블록당 최대 32비트 레지스터 수 32 K 64 K 32 K 64 K 32 K 64 K 32 K 64 K 64 K
스레드당 최대 32비트 레지스터 수 124 63 255 255
멀티프로세서당 최대 공유 메모리 용량 16 KB 48 KB 112 KB 64 KB 96 KB 64 KB 96 KB 64 KB 96 KB
(128개 중)
64 KB
(96개 중)
164 KB
(192의 경우)
100 KB
(128개 중)
228 KB
스레드 블록당 최대 공유 메모리 양 48 KB 96 KB 48 KB 64 KB 163 KB 99 KB
공유 메모리 뱅크 수 16 32
스레드당 로컬 메모리 양 16 KB 512 KB
고정 메모리 크기 64 KB
고정 메모리를 위한 멀티프로세서별 캐시 작업 세트 8 KB 4 KB 8 KB
텍스처 메모리의 멀티프로세서별 캐시 작업 세트 6 ~ 8 KB 12 KB 12 ~ 48 KB 24 KB 48 KB 24 KB 48 KB 24 KB 32 ~ 128 KB 32 ~ 64 KB 28 ~ 192 KB 28 ~ 128 KB
CUDA에 바인딩된 1D 텍스처 참조의 최대 폭
배열
8192 65536 131072
선형에 바인딩된 1D 텍스처 참조의 최대 폭
기억
2개27 2개28 2개27 2개28 2개27 2개28
1D 레이어의 최대 폭과 레이어 수
텍스처 참조
8192 × 512 16384 × 2048 32768 x 2048
2D 텍스처 참조 바운드의 최대 폭 및 높이
CUDA 어레이로
65536 × 32768 65536 × 65535 131072 x 65536
2D 텍스처 참조 바운드의 최대 폭 및 높이
선형의 기억으로
65000 x 65000 65536 x 65536 131072 x 65000
2D 텍스처 참조 바운드의 최대 폭 및 높이
텍스처 수집을 지원하는 CUDA 어레이로
16384 x 16384 32768 x 32768
2D의 최대 폭, 높이 및 레이어 수
레이어드 텍스처 레퍼런스
8192 × 8192 × 512 16384 × 16384 × 2048 32768 x 32768 x 2048
3D 텍스처를 위한 최대 폭, 높이 및 깊이
리니어 메모리 또는 CUDA 어레이에 바인드된 참조
2048년3 40963 163843
큐브맵 텍스처 참조의 최대 폭(및 높이) 16384 32768
최대 폭(및 높이) 및 레이어 수
큐브맵 레이어드 텍스처 참조용
16384 × 2046 32768 × 2046
바인딩할 수 있는 최대 텍스처 수
커널
128 256
1D 지표면 참조에 대한 최대 너비
CUDA 어레이
것은 아니다.
서포트되고 있다
65536 16384 32768
1D 레이어의 최대 폭과 레이어 수
표면 기준
65536 × 2048 16384 × 2048 32768 × 2048
2D 표면 참조의 최대 폭 및 높이
CUDA 어레이에 바인드되다
65536 × 32768 16384 × 65536 131072 × 65536
2D의 최대 폭, 높이 및 레이어 수
층상 표면 기준
65536 × 32768 × 2048 16384 × 16384 × 2048 32768 × 32768 × 2048
3D 표면의 최대 폭, 높이 및 깊이
CUDA 어레이에 바인드된 참조
65536 × 32768 × 2048 4096 × 4096 × 4096 16384 × 16384 × 16384
CUDA 배열에 바인드된 큐브맵 표면 참조의 최대 폭(및 높이) 32768 16384 32768
큐브맵의 최대 너비 및 레이어 수
층상 표면 기준
32768 × 2046 16384 × 2046 32768 × 2046
에 바인딩할 수 있는 최대 표면 수
커널
8 16 32
커널당 최대 명령 수 200만 5억1200만
기술사양 1.0 1.1 1.2 1.3 2.x 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.1 6.2 7.0 7.2 7.5 8.0 8.6 8.7 9.0 9.x
컴퓨팅 능력(버전)

[52]

[53]

아키텍처 사양 컴퓨팅 능력(버전)
1.0 1.1 1.2 1.3 2.0 2.1 3.0 3.5 3.7 5.0 5.2 6.0 6.1, 6.2 7.0, 7.2 7.5 8.0 8.6 9.0 9.x
정수 및 단정도 부동소수점 연산용 ALU 레인 수 8개[54] 32 48 192 128 64 128 64
단정도 부동소수점 초월함수의 특수함수 단위수 2 4 8 32 16 32 16
각 텍스처 주소 단위 또는 렌더 출력 단위(ROP)의 텍스처 필터링 단위 수 2 4 8 16 8개[55]
워프 스케줄러 수 1 2 4 2 4
단일 스케줄러에서 한 번에 실행된 최대 명령 수 1 2개[56] 1
텐서 코어 수 8개[55] 4
멀티프로세서당 데이터 캐시 및 공유 메모리용 통합 메모리 크기(KB) 외상후 스트레스 장애 128 96[57] 192 128

[58]

상세한 것에 대하여는, Nvidia CUDA 프로그래밍 [59]가이드를 참조해 주세요.

다음 C++ 코드 예시는 이미지에서 GPU 상의 어레이로 텍스처를 로드합니다.

식감< >흘러가다, 2, cudaReadModeElement유형> 문자 메시지;  무효 후우() {   cuda 어레이* cu_array;    // 어레이 할당   cuda Channel Format Desc 묘사 = cuda Create Channel Desc< >흘러가다>();   cuda Malloc 어레이(&cu_array, &묘사, , 높이);    // 이미지 데이터를 어레이에 복사   cuda Memcpy To Array(cu_array, 이미지, *높이*크기(흘러가다), cuda Memcpy Host To Device);    // 텍스처 파라미터 설정(기본값)   문자 메시지.어드레스 모드[0] = cudaAddressModeClamp;   문자 메시지.어드레스 모드[1] = cudaAddressModeClamp;   문자 메시지.필터 모드 = cudaFilterModePoint;   문자 메시지.정규화된 = 거짓의; // 좌표를 정규화하지 않음    // 어레이를 텍스처에 바인드합니다.   cudaBindTextureToArray(문자 메시지, cu_array);    // 커널 실행   dim3 블록 Dim(16, 16, 1);   dim3 그리드 Dim(( + 블록 Dim.x - 1)/ 블록 Dim.x, (높이 + 블록 Dim.y - 1) / 블록 Dim.y, 1);   커널<<<< > 그리드 Dim, 블록 Dim, 0 >>>(d_data, 높이, );    // 텍스처로부터 어레이의 바인드를 해제합니다.   cuda 언바인드 텍스처(문자 메시지); } //종료 foo()  __global__ 무효 커널(흘러가다* 오다타, 인트 높이, 인트 ) {    서명되어 있지 않다 인트 x = 블록 Idx.x*블록 Dim.x + 스레드 Idx.x;    서명되어 있지 않다 인트 y = 블록 Idx.y*블록 Dim.y + 스레드 Idx.y;    한다면 (x < >  & & y < > 높이) {       흘러가다 c = 텍스2D(문자 메시지, x, y);       오다타[y*+x] = c;    } } 

다음은 Python에서 GPU 상의 두 어레이의 곱을 계산하는 예입니다. 비공식 Python 언어 바인딩은 PyCUDA에서 [60]얻을 수 있습니다.

수입품 pycuda.displaces ~하듯이 컴포넌트 수입품 pycuda.driver ~하듯이 드라이브 수입품 수치 수입품 pycuda.autoinit  모드 = 컴포넌트.소스 모듈(     """ __global__void multiply_them(*dest, float *a, float *b) { const int i = threadIdx.x; dest[i] = a[i] * b[i]; } """ )  곱셈_그것들 = 모드.취득_함수("그것들")  a = 수치.랜덤.랜드(400).타이프(수치.플로트32) b = 수치.랜덤.랜드(400).타이프(수치.플로트32)  증류 = 수치.0과 같은(a) 곱셈_그것들(드라이브.나가.(증류), 드라이브.(a), 드라이브.(b), 블록=(400, 1, 1))  인쇄물(증류 - a * b) 

행렬 곱셈 연산을 단순화하는 추가 Python 바인딩은 프로그램 pycublas에서 [61]찾을 수 있습니다.

  수입품 수치 부터 파이큐블라스 수입품 큐블라스매트릭스  A = 큐블라스매트릭스(수치.매트.([[1, 2, 3], [4, 5, 6]], 수치.플로트32)) B = 큐블라스매트릭스(수치.매트.([[2, 3], [4, 5], [6, 7]], 수치.플로트32)) C = A * B 인쇄물(C.np_mat()) 

CuPy가 NumPy를 [62]직접 대체하는 동안:

수입품 큐피  a = 큐피.랜덤.랜드(400) b = 큐피.랜덤.랜드(400)  증류 = 큐피.0과 같은(a)  인쇄물(증류 - a * b) 

CUDA 아키텍처의 현재 및 미래 사용 현황

「 」를 참조해 주세요.

  • SYCLKhronos Group의 오픈 스탠다드.고레벨의 CUDA 런타임 API(싱글 소스)와 유사한 싱글 소스 최신 C++를 사용하여 GPU를 포함한 다양한 플랫폼을 프로그래밍합니다.
  • Brook GPU – 스탠포드 대학 그래픽스 그룹의 컴파일러
  • 배열 프로그래밍
  • 병렬 컴퓨팅
  • 스트림 처리
  • rCUDA – 리모트 컴퓨터 컴퓨팅용 API
  • GPU에서의 분자 모델링
  • Vulkan – 저레벨, 고성능 3D 그래픽스 및 컴퓨팅 API
  • OptiX – NVIDIA의 레이트레이스 API
  • CUDA 바이너리(큐빈)– Fat 바이너리의 일종

레퍼런스

  1. ^ a b Abi-Chahla, Fedy (June 18, 2008). "Nvidia's CUDA: The End of the CPU?". Tom's Hardware. Retrieved May 17, 2015.
  2. ^ Zunitch, Peter (2018-01-24). "CUDA vs. OpenCL vs. OpenGL". Videomaker. Retrieved 2018-09-16.
  3. ^ "OpenCL". NVIDIA Developer. 2013-04-24. Retrieved 2019-11-04.
  4. ^ "Nvidia CUDA Home Page". 18 July 2017.
  5. ^ Shimpi, Anand Lal; Wilson, Derek (November 8, 2006). "Nvidia's GeForce 8800 (G80): GPUs Re-architected for DirectX 10". AnandTech. Retrieved May 16, 2015.
  6. ^ "CUDA LLVM Compiler". 7 May 2012.
  7. ^ 유튜브 GPU에서의 첫 OpenCL 데모
  8. ^ YouTube의 Nvidia CUDA 지원 GPU에서 실행되는 Direct Compute Ocean 데모
  9. ^ Vasiliadis, Giorgos; Antonatos, Spiros; Polychronakis, Michalis; Markatos, Evangelos P.; Ioannidis, Sotiris (September 2008). "Gnort: High Performance Network Intrusion Detection Using Graphics Processors" (PDF). Proceedings of the 11th International Symposium on Recent Advances in Intrusion Detection (RAID). Lecture Notes in Computer Science. 5230: 116–134. doi:10.1007/978-3-540-87403-4_7. ISBN 978-3-540-87402-7.
  10. ^ Schatz, Michael C.; Trapnell, Cole; Delcher, Arthur L.; Varshney, Amitabh (2007). "High-throughput sequence alignment using Graphics Processing Units". BMC Bioinformatics. 8: 474. doi:10.1186/1471-2105-8-474. PMC 2222658. PMID 18070356.
  11. ^ Manavski, Svetlin A.; Giorgio, Valle (2008). "CUDA compatible GPU cards as efficient hardware accelerators for Smith-Waterman sequence alignment". BMC Bioinformatics. 10: S10. doi:10.1186/1471-2105-9-S2-S10. PMC 2323659. PMID 18387198.
  12. ^ "Pyrit – Google Code".
  13. ^ "Use your Nvidia GPU for scientific computing". BOINC. 2008-12-18. Archived from the original on 2008-12-28. Retrieved 2017-08-08.
  14. ^ "Nvidia CUDA Software Development Kit (CUDA SDK) – Release Notes Version 2.0 for MAC OS X". Archived from the original on 2009-01-06.
  15. ^ "CUDA 1.1 – Now on Mac OS X". February 14, 2008. Archived from the original on November 22, 2008.
  16. ^ "CUDA 11 Features Revealed". 14 May 2020.
  17. ^ "CUDA Toolkit 11.1 Introduces Support for GeForce RTX 30 Series and Quadro RTX Series GPUs". 23 September 2020.
  18. ^ "Enhancing Memory Allocation with New NVIDIA CUDA 11.2 Features". 16 December 2020.
  19. ^ "Exploring the New Features of CUDA 11.3". 16 April 2021.
  20. ^ Silberstein, Mark; Schuster, Assaf; Geiger, Dan; Patney, Anjul; Owens, John D. (2008). "Efficient computation of sum-products on GPUs through software-managed cache" (PDF). Proceedings of the 22nd annual international conference on Supercomputing - ICS '08. Proceedings of the 22nd annual international conference on Supercomputing – ICS '08. pp. 309–318. doi:10.1145/1375527.1375572. ISBN 978-1-60558-158-3.
  21. ^ "CUDA C Programming Guide v8.0" (PDF). nVidia Developer Zone. Section 3.1.5. January 2017. p. 19. Retrieved 22 March 2017.{{cite web}}: CS1 유지보수: 위치(링크)
  22. ^ "NVCC forces c++ compilation of .cu files". 29 November 2011.
  23. ^ Whitehead, Nathan; Fit-Florea, Alex. "Precision & Performance: Floating Point and IEEE 754 Compliance for Nvidia GPUs" (PDF). Nvidia. Retrieved November 18, 2014.
  24. ^ "CUDA-Enabled Products". CUDA Zone. Nvidia Corporation. Retrieved 2008-11-03.
  25. ^ "Coriander Project: Compile CUDA Codes To OpenCL, Run Everywhere". Phoronix.
  26. ^ Perkins, Hugh (2017). "cuda-on-cl" (PDF). IWOCL. Retrieved August 8, 2017.
  27. ^ "hughperkins/coriander: Build NVIDIA® CUDA™ code for OpenCL™ 1.2 devices". GitHub. May 6, 2019.
  28. ^ "CU2CL Documentation". chrec.cs.vt.edu.
  29. ^ "NVIDIA CUDA Programming Guide. Version 1.0" (PDF). June 23, 2007.
  30. ^ "NVIDIA CUDA Programming Guide. Version 2.1" (PDF). December 8, 2008.
  31. ^ "NVIDIA CUDA Programming Guide. Version 2.2" (PDF). April 2, 2009.
  32. ^ "NVIDIA CUDA Programming Guide. Version 2.2.1" (PDF). May 26, 2009.
  33. ^ "NVIDIA CUDA Programming Guide. Version 2.3.1" (PDF). August 26, 2009.
  34. ^ "NVIDIA CUDA Programming Guide. Version 3.0" (PDF). February 20, 2010.
  35. ^ "NVIDIA CUDA C Programming Guide. Version 3.1.1" (PDF). July 21, 2010.
  36. ^ "NVIDIA CUDA C Programming Guide. Version 3.2" (PDF). November 9, 2010.
  37. ^ "CUDA 11.0 Release Notes". NVIDIA Developer.
  38. ^ "CUDA 11.1 Release Notes". NVIDIA Developer.
  39. ^ "NVIDIA Quadro NVS 420 Specs". TechPowerUp GPU Database.
  40. ^ Larabel, Michael (March 29, 2017). "NVIDIA Rolls Out Tegra X2 GPU Support In Nouveau". Phoronix. Retrieved August 8, 2017.
  41. ^ Tech Power Up에 관한 Nvidia Xavier 사양 (잠정)
  42. ^ "Welcome — Jetson LinuxDeveloper Guide 34.1 documentation".
  43. ^ "NVIDIA Bringing up Open-Source Volta GPU Support for Their Xavier SoC".
  44. ^ "H.1. Features and Technical Specifications – Table 13. Feature Support per Compute Capability". docs.nvidia.com. Retrieved 2020-09-23.
  45. ^ https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications
  46. ^ https://developer.nvidia.com/cuda-11.3.0-download-archive (include/crt/ma.hpp에서)
  47. ^ https://images.nvidia.com/aem-dam/en-zz/Solutions/geforce/ampere/pdf/NVIDIA-ampere-GA102-GPU-Architecture-Whitepaper-V1.pdf[베어 URL PDF]
  48. ^ https://www.nvidia.com/content/dam/en-zz/Solutions/gtcf21/jetson-orin/nvidia-jetson-agx-orin-technical-brief.pdf[베어 URL PDF]
  49. ^ https://images.nvidia.com/aem-dam/en-zz/Solutions/design-visualization/technologies/turing-architecture/NVIDIA-Turing-Architecture-Whitepaper.pdf[베어 URL PDF]
  50. ^ https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Center/a100/pdf/nvidia-a100-datasheet-us-nvidia-1758950-r4-web.pdf[베어 URL PDF]
  51. ^ "NVIDIA Hopper Architecture In-Depth". 22 March 2022.
  52. ^ H.1. 특징 및 기술 사양 – 표 14.컴퓨팅 능력별 기술 사양
  53. ^ NVIDIA Hopper 아키텍처 상세
  54. ^ ALU는 단정도 부동소수점 연산만을 수행합니다.2배 정밀도의 부동 소수점 단위는 1개입니다.
  55. ^ a b Durant, Luke; Giroux, Olivier; Harris, Mark; Stam, Nick (May 10, 2017). "Inside Volta: The World's Most Advanced Data Center GPU". Nvidia developer blog.
  56. ^ 2개의 명령을 동시에 발행할 수 있는 스케줄러는 1개뿐입니다.첫 번째 스케줄러는 홀수 아이디를 가진 워프 처리를 담당합니다.두 번째 스케줄러는 짝수 ID를 가진 워프를 담당합니다.
  57. ^ "H.6.1. Architecture". docs.nvidia.com. Retrieved 2019-05-13.
  58. ^ "I.7. Compute Capability 8.x". docs.nvidia.com. Retrieved 2020-09-23.
  59. ^ "Appendix F. Features and Technical Specifications" (PDF). (3.2 MiB), 175/148 페이지(2012년 10월 버전 5.0).
  60. ^ "PyCUDA".
  61. ^ "pycublas". Archived from the original on 2009-04-20. Retrieved 2017-08-08.
  62. ^ "CuPy". Retrieved 2020-01-08.
  63. ^ "nVidia CUDA Bioinformatics: BarraCUDA". BioCentric. 2019-07-19. Retrieved 2019-10-15.
  64. ^ "Part V: Physics Simulation". NVIDIA Developer. Retrieved 2020-09-11.

외부 링크