맨위로가기

CUDA

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

CUDA는 엔비디아에서 개발한 병렬 컴퓨팅 플랫폼 및 프로그래밍 모델로, GPU를 사용하여 연산 집약적인 작업을 가속화한다. 2007년에 출시되었으며, C/C++를 확장한 CUDA C/C++를 비롯한 다양한 프로그래밍 언어를 지원한다. CUDA는 그래픽 API를 사용하는 전통적인 범용 GPU에 비해 분산 읽기, 공유 메모리, 빠른 입출력, 정수 및 비트 연산 지원 등의 장점을 제공하지만, 엔비디아 GPU에서만 사용 가능하다는 제약과 이식성, SIMD 실행 모델의 한계 등의 단점도 존재한다. 3D 그래픽 가속 렌더링, 동영상 파일 형식 변환, 암호화, 생물정보학, 기계 학습 등 다양한 분야에서 활용되며, 인텔의 OneAPI, AMD의 ROCm과 경쟁한다.

더 읽어볼만한 페이지

  • GPGPU 라이브러리 - OpenCL
    OpenCL은 다양한 계산 자원을 활용하여 병렬 컴퓨팅을 가능하게 하는 프레임워크로, OpenCL C/C++ 언어를 사용하여 스트림 프로세싱 커널을 작성하며, 크로노스 그룹에서 관리하는 로열티 프리 오픈 표준이다.
  • GPGPU 라이브러리 - ROCm
    ROCm은 AMD가 개발한 개방형 소프트웨어 스택으로, GPU를 활용한 컴퓨팅을 지원하며, HIP를 통해 CUDA 코드를 사용할 수 있도록 지원하고 머신 러닝, 슈퍼컴퓨팅 등 다양한 분야에서 활용된다.
  • 엔비디아 소프트웨어 - 엔비디아 RTX
    엔비디아 RTX는 레이 트레이싱, AI 통합, CUDA를 포함한 엔비디아의 기술로, 지포스 RTX 및 RTX 시리즈 GPU에서 텐서 코어를 활용하여 DLSS와 같은 AI 기반 기술로 이미지 품질을 향상시키고 현실감 있는 그래픽을 구현하는 데 기여한다.
  • 엔비디아 소프트웨어 - Cg (프로그래밍 언어)
    Cg는 엔비디아와 마이크로소프트가 GPU 프로그래밍을 위해 개발한 고수준 셰이딩 언어로, GLSL, HLSL과 유사하며 CUDA 환경에도 영향을 미쳤고 현재도 활용되고 있다.
  • GPGPU - 인텔 Xe
    인텔 Xe는 저전력부터 고성능 컴퓨팅까지 다양한 시장을 목표로 하는 인텔의 GPU 아키텍처 제품군으로, Xe-LP, Xe-HPG, Xe-HP, Xe-HPC 등의 하위 아키텍처를 가지며 외장 그래픽 카드인 인텔 아크 시리즈와 내장 그래픽, 데이터 센터용 GPU 등에 활용된다.
  • GPGPU - 테라스케일 (마이크로아키텍처)
    테라스케일은 AMD가 개발한 GPU 마이크로아키텍처로, 셰이더 처리량 증가를 위해 통합 셰이더 모델을 사용하며, VLIW 아키텍처를 기반으로 라데온 HD 2000, 3000, 4000, 5000, 6900 시리즈에 적용되었다가 그래픽스 코어 넥스트 아키텍처로 대체되었다.
CUDA - [IT 관련 정보]에 관한 문서
일반 정보
이름CUDA (Compute Unified Device Architecture)
종류GPGPU
개발사Nvidia
출시일2007년 2월 15일
최신 버전12.6
최신 버전 출시일2024년 8월
운영 체제윈도우, 리눅스
지원 GPU지원되는 GPU (아래 참조)
라이선스사유 소프트웨어
웹사이트CUDA Zone
기술
사용 목적병렬 컴퓨팅 플랫폼 및 프로그래밍 모델

2. 역사

그래픽 처리 장치(GPU)는 실시간 고해상도 3D 그래픽스 연산에 특화된 프로세서로, 2012년에는 대규모 데이터 블록을 효율적으로 처리하는 고도로 병렬화된 멀티 코어 시스템으로 발전했다. 이러한 설계는 암호화 해시 함수, 머신 러닝, 분자 역학 시뮬레이션, 물리 엔진 등 대규모 데이터 블록을 병렬 처리하는 알고리즘에서 중앙 처리 장치(CPU)보다 더 효과적이다.[8]

2000년 스탠퍼드 대학교의 이안 버크(Ian Buck)는 32개의 GeForce 카드를 사용해 8K 게이밍 장비를 만들었고, 이후 GPU에서의 범용 병렬 프로그래밍 연구로 DARPA의 지원을 받았다. 그는 2004년부터 CUDA 개발을 이끈 엔비디아에 합류했다. 젠슨 황은 CUDA를 통해 엔비디아 GPU가 과학 컴퓨팅 분야에서 널리 사용되도록 하는 목표를 세웠다.[8]

GPU는 단순 연산을 하는 많은 유닛을 가지고 있어, 이론상 최고 성능(FLOPS)은 같은 가격대의 CPU를 넘어서는 경우도 있다. 병렬성과 연산 밀도가 높은 처리에 있어서는 복잡한 구성을 가진 CPU보다 높은 성능을 낼 수 있다. 하지만 복잡한 분기 처리나 GPU와 CPU 간 데이터 전송은 병목 현상이 될 수 있어, 적용 분야를 신중하게 선택해야 한다.[150] CUDA로 작성된 프로그램을 최적화하려면, Warp나 공유 메모리 등 엔비디아 GPU 아키텍처에 대한 깊은 이해가 필요하다.[151]

2. 1. CUDA 이전의 GPGPU

CUDA 이전에는 GPGPU(General-Purpose computing on Graphics Processing Units)를 위해 여러 기술들이 사용되었다. 대표적으로는 마이크로소프트의 HLSL(High-Level Shading Language), OpenGL의 GLSL(OpenGL Shading Language), 엔비디아의 Cg(C for Graphics) 등이 있었다.

이러한 기술들은 기본적으로 그래픽스 처리를 위해 설계되었기 때문에 범용 계산에 사용하기에는 여러 한계가 있었다. 예를 들어, 셰이더 프로그램을 작성해야 했고, 메모리 접근이 제한적이었으며, 병렬 처리 모델이 그래픽스 파이프라인에 종속적이었다.

2. 2. CUDA의 등장과 발전

GPU에서의 범용 병렬 프로그래밍을 위해 2004년부터 CUDA 개발을 감독해 온 엔비디아는 CUDA를 추진하면서 엔비디아 GPU가 과학 컴퓨팅을 위한 일반적인 하드웨어가 되도록 목표를 세웠고, CUDA는 2007년에 출시되었다.[8]

원래 실시간 그래픽스 표시 용도, 특히 게임 그래픽스 용도로 특화된 GPU를 개발했던 것은 엔비디아(NVIDIA)와 ATI (현 AMD)이지만, 프로그래머블 셰이더의 발전에 따른 프로그래밍 가능성의 향상에 따라, 그 높은 처리 성능을 그래픽스 외에도 활용할 수 있도록 하기 위해 엔비디아가 개발한 기술이 CUDA이다. 이러한 범용 컴퓨팅을 위한 GPU 활용 기술을 GPGPU(General-Purpose computing on Graphics Processing Units)라고 부른다.

CUDA의 발표는 2006년 11월[152], CUDA 1.0의 제공 시작은 2007년 7월[153]이며, 후발 GPGPU 관련 기술에는 OpenCL(1.0 사양 공개는 2008년[154])이나 DirectCompute(DirectX 컴퓨트 셰이더. Windows 7/DirectX 11.0과 동시에 2009년에 일반 제공 시작[155]) 등이 있지만, 각각 기술 용어는 다르지만 전체적으로는 CUDA와 매우 흡사한 특징을 가지고 있다. 선발 기술인 CUDA는 2014년 시점에서 교육·연구 기관에서의 채용 사례가 많고,[156] 기계 학습 등의 분야에서 산업계에서도 채용 노력이 진행되고 있다.[157]

NVIDIA는 CUDA를 기반으로 구축된 라이브러리의 총칭을 CUDA-X라고 부른다.[169] 여기에는 다음이 포함된다.

분야라이브러리
수학cuBLAS - BLAS 라이브러리
cuFFT - 고속 푸리에 변환
CUDA Math Library
cuRAND - 의사 난수 생성
cuSOLVER - LAPACK 지원
cuSPARSE - 희소 행렬
cuTENSOR - 텐서 (다차원 배열)
cuDSS, AmgX - 희소 행렬의 AX = B를 푸는 라이브러리
병렬 알고리즘Thrust
전산 리소그래피cuLitho
이미지와 비디오CV-CUDA
nvJPEG
NVIDIA Performance Primitives
NVIDIA Video Codec SDK
NVIDIA Optical Flow SDK
통신 라이브러리NVSHMEM
NCCL
딥 러닝NVIDIA cuDNN
NVIDIA TensorRT
NVIDIA Riva
NVIDIA DeepStream SDK, NVIDIA DALI


3. CUDA 프로그래밍

CUDA 플랫폼은 소프트웨어 개발자가 CUDA 가속 라이브러리, 컴파일러 지시어(예: OpenACC), 그리고 C, C++, 포트란, Python을 포함한 업계 표준 프로그래밍 언어 확장을 통해 접근할 수 있도록 지원한다.[9] C/C++ 프로그래머는 Nvidia의 LLVM 기반 C/C++ 컴파일러인 nvcc나 clang 자체를 사용할 수 있다.[9] 포트란 프로그래머는 The Portland Group의 PGI CUDA 포트란 컴파일러를 사용할 수 있으며, 파이썬 프로그래머는 cuNumeric 라이브러리를 사용하여 Nvidia GPU에서 애플리케이션을 가속화할 수 있다.

CUDA는 라이브러리, 컴파일러 지시어, CUDA C/C++ 및 CUDA 포트란 외에도 Khronos Group의 OpenCL,[10] 마이크로소프트의 DirectCompute, OpenGL Compute Shader 및 C++ AMP를 포함한 다른 컴퓨팅 인터페이스를 지원한다.[11] Python, Perl, Fortran, Java, Ruby, Lua, Common Lisp, Haskell, R, MATLAB, IDL, Julia 및 Mathematica를 위한 타사 래퍼도 사용할 수 있다.

CUDA는 낮은 수준의 API (CUDA '''드라이버''' API)와 더 높은 수준의 API (CUDA '''런타임''' API)를 모두 제공한다.

기술 사양컴퓨팅 능력 (버전)
1.01.11.21.32.x3.03.23.53.75.05.25.36.06.16.27.07.27.58.08.68.78.99.0
장치당 최대 레지던트 그리드 수
(동시 커널 실행, 특정 장치에서는 더 낮을 수 있음)
colspan="4"colspan="2"colspan="1"colspan="4"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1"colspan="6" |
스레드 블록 그리드의 최대 차원 수colspan="4"colspan="19" |
스레드 블록 그리드의 최대 x 차원colspan="5"colspan="18" |
스레드 블록 그리드의 최대 y 또는 z 차원colspan="23" |
스레드 블록의 최대 차원 수colspan="23" |
블록의 최대 x 또는 y 차원colspan="4"colspan="19" |
블록의 최대 z 차원colspan="23" |
블록당 최대 스레드 수colspan="4"colspan="19" |
워프 크기colspan="23" |
멀티프로세서당 최대 레지던트 블록 수colspan="5"colspan="4"colspan="8"colspan="1"colspan="1"colspan="2"colspan="1"colspan="1" |
멀티프로세서당 최대 레지던트 워프 수colspan="2"colspan="2"colspan="1"colspan="12"colspan="1"colspan="1"colspan="3"colspan="1" |
멀티프로세서당 최대 레지던트 스레드 수colspan="2"colspan="2"colspan="1"colspan="12"colspan="1"colspan="1"colspan="3"colspan="1" |
멀티프로세서당 32비트 일반 레지스터 수colspan="2"colspan="2"colspan="1"colspan="3"colspan="1"colspan="14" |
멀티프로세서당 32비트 균일 레지스터 수colspan="17"[83][84]| colspan="5" |
스레드 블록당 최대 32비트 레지스터 수colspan="2"colspan="2"colspan="1"colspan="1"colspan="1"colspan="4"colspan="1"colspan="2"colspan="1"colspan="8" |
스레드당 최대 32비트 일반 레지스터 수colspan="4"colspan="2"colspan="17" |
워프당 최대 32비트 균일 레지스터 수colspan="17"[85][86]| colspan="5" |
멀티프로세서당 공유 메모리 크기
(전체 공유 메모리 + L1 캐시에서, 해당하는 경우)
colspan="4"colspan="1"colspan="3"colspan="1"colspan="1"colspan="1"colspan="2"colspan="1"colspan="1"colspan="2"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1" |
스레드 블록당 최대 공유 메모리 크기colspan="4"colspan="11"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1" |
공유 메모리 뱅크 수colspan="4"colspan="19" |
스레드당 로컬 메모리 크기colspan="4"colspan="19" |
CUDA C/C++에서 접근 가능한 상수 메모리 크기
(1 뱅크, PTX는 11 뱅크에 접근 가능, SASS는 18 뱅크에 접근 가능)
colspan="23" |
상수 메모리에 대한 멀티프로세서당 캐시 작업 세트colspan="12"colspan="1"colspan="10" |
텍스처 메모리에 대한 멀티프로세서당 캐시 작업 세트colspan="3"colspan="1"colspan="1"[87]| colspan="1"colspan="1"[88]| colspan="1"colspan="1"colspan="1"colspan="2"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1"colspan="1" |
CUDA 어레이에 바인딩된 1D 텍스처 참조의 최대 너비colspan="4"colspan="8"colspan="11" |
선형 메모리에 바인딩된 1D 텍스처 참조의 최대 너비colspan="12"colspan="1"colspan="2"colspan="1"colspan="1"colspan="6" |
1D 레이어드 텍스처 참조의 최대 너비 및 레이어 수colspan="4"colspan="8"colspan="11" |
CUDA 어레이에 바인딩된 2D 텍스처 참조의 최대 너비 및 높이colspan="4"colspan="8"colspan="11" |
선형 메모리에 바인딩된 2D 텍스처 참조의 최대 너비 및 높이colspan="9"colspan="3"colspan="11" |
텍스처 수집을 지원하는 CUDA 어레이에 바인딩된 2D 텍스처 참조의 최대 너비 및 높이colspan="4"colspan="8"colspan="11" |
2D 레이어드 텍스처 참조의 최대 너비, 높이 및 레이어 수colspan="4"colspan="8"colspan="11" |
선형 메모리 또는 CUDA 어레이에 바인딩된 3D 텍스처 참조의 최대 너비, 높이 및 깊이colspan="5"colspan="7"colspan="11" |
큐브맵 텍스처 참조의 최대 너비(및 높이)colspan="4"colspan="8"colspan="11" |
큐브맵 레이어드 텍스처 참조의 최대 너비(및 높이) 및 레이어 수colspan="4"colspan="8"colspan="11" |
커널에 바인딩될 수 있는 최대 텍스처 수colspan="5"colspan="18" |
CUDA 어레이에 바인딩된 1D 표면 참조의 최대 너비colspan="4" rowspan="8"colspan="5"colspan="3"colspan="11" |
1D 레이어드 표면 참조의 최대 너비 및 레이어 수colspan="5"colspan="3"colspan="11" |
CUDA 어레이에 바인딩된 2D 표면 참조의 최대 너비 및 높이colspan="5"colspan="3"colspan="11" |
2D 레이어드 표면 참조의 최대 너비, 높이 및 레이어 수colspan="5"colspan="3"colspan="11" |
CUDA 어레이에 바인딩된 3D 표면 참조의 최대 너비, 높이 및 깊이colspan="5"colspan="3"colspan="11" |
CUDA 어레이에 바인딩된 큐브맵 표면 참조의 최대 너비(및 높이)colspan="5"colspan="3"colspan="11" |
큐브맵 레이어드 표면 참조의 최대 너비 및 레이어 수colspan="5"colspan="3"colspan="11" |
커널에 바인딩될 수 있는 최대 표면 수colspan="1"colspan="10"colspan="8" |
커널당 최대 명령 수colspan="4"colspan="19" |
스레드 블록 클러스터당 최대 스레드 블록 수[89]colspan="22"
기술 사양1.01.11.21.32.x3.03.23.53.75.05.25.36.06.16.27.07.27.58.08.68.78.99.0
컴퓨팅 능력 (버전)

[90][91]


3. 1. CUDA C/C++

CUDA C/C++는 C 언어와 C++(C++)의 일부 구문을 지원하는 C/C++의 확장이다. CUDA C/C++ 소스 코드는 일반적으로 `.cu` 확장자를 사용하며, 헤더 파일은 `.cuh` 확장자를 사용한다.[158]

CUDA C/C++는 다음과 같은 특징과 제약 사항을 가진다.

CUDA는 BLAS(BLAS) 인터페이스(인터페이스)를 통한 벡터행렬 연산(cuBLAS[159])과 FFT 라이브러리(cuFFT[160])를 포함한다. CUDA Toolkit에는 C++용 템플릿 기반 병렬 알고리즘 라이브러리 "Thrust"도 포함되어 있다.[161]

CUDA 버전 7부터 C++11(C++11) 표준 지원이 강화되어, 장치 코드에서 람다 표현식을 사용할 수 있게 되었다.[162][163] CUDA 버전 8에서는 기계 학습 (머신 러닝) 라이브러리가 강화되고, Pascal 아키텍처의 기능을 활용한 확장이 추가되었다.[164][165]

NVIDIA의 CUDA 컴파일러 `nvcc`는 LLVM(LLVM) 기반이며, 새로운 프로그래밍 언어 및 프로세서 지원을 추가하는 컴파일러 SDK도 제공된다.[168]

CUDA 포트란(Fortran)은 The Portland Group(PGI)에서 제공되며, Fortran 2003을 확장한다.[167]

다른 GPU에서 CUDA를 구현하려는 시도는 다음과 같다.

프로젝트명설명
프로젝트 코리앤더(Project Coriander)CUDA C++11 소스를 OpenCL 1.2 C로 변환한다. TensorFlow를 실행하기 위한 CUDA-on-CL의 포크이다.[28][29][30]
CU2CLCUDA 3.2 C++를 OpenCL C로 변환한다.[31]
GPUOpen HIPAMD 및 Nvidia GPU용으로 설계된 CUDA 및 ROCm 상위의 얇은 추상화 계층이다. CUDA C++ 소스 가져오기를 위한 변환 도구를 제공하며, CUDA 4.0 이상과 C++11 및 float16을 지원한다.
ZLUDAAMD GPU에서 CUDA를 대체한다. 이전에는 Intel GPU에서 거의 네이티브 성능을 제공했다.[32] 개발자 안제이 야닉(Andrzej Janik)은 2021년과 2022년에 각각 인텔과 AMD로부터 별도로 계약을 맺어 소프트웨어를 개발했으나, 비즈니스 사용 사례 부족으로 양사 모두 공식 출시하지 않았다. AMD의 계약에는 Janik이 AMD용 코드를 독립적으로 출시할 수 있도록 하는 조항이 포함되어 AMD GPU만 지원하는 새로운 버전을 출시했다.[33]
chipStar고급 OpenCL 3.0 또는 Level Zero 플랫폼에서 CUDA/HIP 프로그램을 컴파일하고 실행한다.[34]


3. 2. 기타 언어 바인딩

CUDA는 C/C++, 포트란, 파이썬 등 다양한 프로그래밍 언어를 지원하며, 이를 통해 개발자들이 GPU를 활용한 병렬 컴퓨팅을 쉽게 구현할 수 있도록 돕는다. 다음은 CUDA를 지원하는 주요 언어 바인딩 목록이다.

이 외에도 커먼 리스프, F#, 하스켈, IDL, 루아, 매스매티카, MATLAB, .NET, , 루비, R 등 다양한 언어에서 CUDA를 활용할 수 있는 바인딩이 제공된다.

3. 3. 예제 코드

cpp

texture tex;

void foo()

{

cudaArray* cu_array;

// 배열 할당

cudaChannelFormatDesc description = cudaCreateChannelDesc();

cudaMallocArray(&cu_array, &description, width, height);

// 이미지 데이터를 배열로 복사

cudaMemcpyToArray(cu_array, image, width * height * sizeof(float), cudaMemcpyHostToDevice);

// 텍스처 매개변수 설정 (기본값)

tex.addressMode[0] = cudaAddressModeClamp;

tex.addressMode[1] = cudaAddressModeClamp;

tex.filterMode = cudaFilterModePoint;

tex.normalized = false; // 좌표 정규화 안 함

// 배열을 텍스처에 바인딩

cudaBindTextureToArray(tex, cu_array);

// 커널 실행

dim3 blockDim(16, 16, 1);

dim3 gridDim((width + blockDim.x - 1) / blockDim.x, (height + blockDim.y - 1) / blockDim.y, 1);

kernel<<< gridDim, blockDim, 0 >>>(d_data, height, width);

// 배열을 텍스처에서 언바인딩

cudaUnbindTexture(tex);

}

__global__ void kernel(float* odata, int height, int width)

{

unsigned int x = blockIdx.x * blockDim.x + threadIdx.x;

unsigned int y = blockIdx.y * blockDim.y + threadIdx.y;

if (x < width && y < height) {

float c = tex2D(tex, x, y);

odata[y * width + x] = c;

}

}

```

다음은 GPU에서 두 배열의 곱을 계산하는 파이썬 예제이다. 비공식 파이썬 언어 바인딩은 ''PyCUDA''에서 얻을 수 있다.[35]

```python

import pycuda.compiler as comp

import pycuda.driver as drv

import numpy

import pycuda.autoinit

mod = comp.SourceModule(

"""

__global__ void multiply_them(float *dest, float *a, float *b)

{

const int i = threadIdx.x;

dest[i] = a[i] * b[i];

}

"""

)

multiply_them = mod.get_function("multiply_them")

a = numpy.random.randn(400).astype(numpy.float32)

b = numpy.random.randn(400).astype(numpy.float32)

dest = numpy.zeros_like(a)

multiply_them(drv.Out(dest), drv.In(a), drv.In(b), block=(400, 1, 1))

print(dest - a * b)

```

행렬 곱셈 연산을 단순화하는 추가 파이썬 바인딩은 ''pycublas''에서 찾을 수 있다.[36]

```python

import numpy

from pycublas import CUBLASMatrix

A = CUBLASMatrix(numpy.mat(1, 2, 3], [4, 5, 6, numpy.float32))

B = CUBLASMatrix(numpy.mat(2, 3], [4, 5], [6, 7, numpy.float32))

C = A * B

print(C.np_mat())

```

CuPy는 NumPy를 직접 대체한다.[37]

```python

import cupy

a = cupy.random.randn(400)

b = cupy.random.randn(400)

dest = cupy.zeros_like(a)

print(dest - a * b)

4. CUDA 아키텍처

CUDA는 엔비디아가 개발한 GPU(Graphics Processing Unit)를 이용한 범용 컴퓨팅 기술(GPGPU)이다. 원래 게임 그래픽스 처리에 특화된 GPU의 높은 연산 성능을 활용하기 위해 만들어졌다.

CUDA 아키텍처는 다음과 같은 주요 구성 요소로 이루어져 있다.


  • 스트리밍 멀티프로세서(SM, Streaming Multiprocessor): GPU의 핵심 연산 유닛으로, 다수의 CUDA 코어를 포함한다.
  • CUDA 코어: 실제로 연산을 수행하는 가장 작은 단위이다.
  • 공유 메모리: SM 내의 CUDA 코어들이 빠르게 접근하고 공유할 수 있는 작은 용량의 메모리이다.
  • L1/L2 캐시: 공유 메모리보다 크고 전역 메모리보다 빠른 메모리 계층이다.


CUDA는 복잡한 분기 처리에는 약하지만, 병렬성이 높은 연산에는 CPU보다 훨씬 높은 성능을 낼 수 있다. 이러한 특징 때문에, CUDA는 병렬 처리가 가능한 분야에 적용될 때 그 성능을 최대한으로 발휘할 수 있다.

CUDA는 C 언어와 유사한 문법을 사용하며, Direct3DOpenGL 같은 그래픽스 API 없이도 프로그래밍이 가능하다.
텐서 코어텐서 코어는 행렬 연산에 특화된 특수 연산 유닛이다. 딥 러닝과 같은 인공지능 분야에서 주로 사용되는 행렬 곱셈 연산을 빠르게 처리할 수 있다. 텐서 코어는 다양한 데이터 타입을 지원하며, 각 데이터 타입에 따라 다른 성능을 보인다.

다음은 CUDA에서 지원하는 자료형, 연산, 원자적 연산 지원 여부 및 지원 시작 버전을 나타내는 표이다.[58]

자료형연산지원 시작
원자적 연산지원 시작
(전역 메모리)
지원 시작
(공유 메모리)
8비트 정수 (부호/무부호)로딩, 저장, 변환1.0colspan="2" |
16비트 정수 (부호/무부호)일반 연산1.0atomicCAS()3.5
32비트 정수 (부호/무부호)일반 연산1.0atomic 함수1.11.2
64비트 정수 (부호/무부호)일반 연산1.0atomic 함수1.22.0
임의의 128비트 복사 가능 자료형일반 연산atomicExch, atomicCAS9.0
16비트 부동 소수점 (FP16)덧셈, 뺄셈, 곱셈, 비교, 워프 셔플 함수, 변환5.3half2 atomic 덧셈6.0
atomic 덧셈7.0
16비트 부동 소수점 (BF16)덧셈, 뺄셈, 곱셈, 비교, 워프 셔플 함수, 변환8.0atomic 덧셈8.0
32비트 부동 소수점일반 연산1.0atomicExch()1.11.2
atomic 덧셈2.0
32비트 부동 소수점 (float2 및 float4)일반 연산atomic 덧셈9.0
64비트 부동 소수점일반 연산1.3atomic 덧셈6.0


4. 1. 온톨로지

다음 표는 CUDA 프레임워크의 온톨로지를 나타낸 것이다.

CUDA 프레임워크의 온톨로지
메모리
(하드웨어)
메모리
(변수 범위)
계산
(하드웨어)
계산
(코드 구문)
계산
(코드 의미)
RAM비CUDA 변수호스트프로그램하나의 루틴 호출
VRAM,
GPU L2 캐시
전역, const, 텍스처장치그리드많은 프로세서에서 동일한 서브루틴의 동시 호출
GPU L1 캐시로컬, 공유SM ("스트리밍 멀티프로세서")블록개별 서브루틴 호출
워프 = 32 스레드SIMD 명령어
GPU L0 캐시,
레지스터
스레드 (일명 "SP", "스트리밍 프로세서", "CUDA 코어", 그러나 이러한 이름은 현재 사용 중단됨)벡터 연산 내의 개별 스칼라 연산과 유사



다음 표는 사이클당 FMA(Fused Multiply-Accumulate) 수(텐서 코어당)를 나타낸 표이다.[59]

데이터 유형밀집 행렬희소 행렬7.07.27.5 워크스테이션7.5 데스크톱8.08.6 워크스테이션8.78.6 데스크톱8.9 데스크톱8.9 워크스테이션9.010.0
1비트 값 (AND)
1비트 값 (XOR)
4비트 정수
4비트 부동 소수점 FP4 (E2M1?)
6비트 부동 소수점 FP6 (E3M2 및 E2M3?)
8비트 정수
8비트 부동 소수점 FP8 (E4M3 및 E5M2) with FP16 누산
8비트 부동 소수점 FP8 (E4M3 및 E5M2) with FP32 누산
16비트 부동 소수점 FP16 with FP16 누산
16비트 부동 소수점 FP16 with FP32 누산
16비트 부동 소수점 BF16 with FP32 누산
32비트 (19비트 사용) 부동 소수점 TF32
64비트 부동 소수점



다음 표는 텐서 코어 구성을 나타낸 표이다.

텐서 코어 구성7.07.2, 7.58.0, 8.68.78.99.0
FP16 단위의 점 곱셈 유닛 너비 (바이트 단위)[69][70][71][72]colspan="1" | colspan="2" |
텐서 코어당 점 곱셈 유닛colspan="4"
SM 파티션당 텐서 코어colspan="4"
전체 처리량 (바이트/사이클)[73] SM 파티션당[74]colspan="1" | colspan="1"colspan="1"
FP 텐서 코어: 워프 전체 행렬 계산에 필요한 최소 사이클colspan="1" | colspan="1"
FP 텐서 코어: 전체 처리량을 위한 최소 행렬 형태 (바이트)[75]colspan="4" |
INT 텐서 코어: 워프 전체 행렬 계산에 필요한 최소 사이클colspan="3" |
INT 텐서 코어: 전체 처리량을 위한 최소 행렬 형태 (바이트)colspan="1" | colspan="1" | colspan="1"

[76][77][78][79]

다음 표는 FP64 텐서 코어 구성을 나타낸 표이다.

FP64 텐서 코어 구성8.08.68.78.99.0
FP64 단위의 점 곱셈 유닛 너비 (바이트)colspan="2" | | colspan="1"
텐서 코어당 점 곱셈 유닛colspan="2" | | colspan="1"
SM 파티션당 텐서 코어colspan="5"
전체 처리량 (바이트/사이클)[80] SM 파티션당[81]colspan="2" | | colspan="1"
워프 전체 행렬 계산에 필요한 최소 사이클colspan="2" |
전체 처리량을 위한 최소 행렬 형태 (바이트)[82]colspan="3" |



참고: 누락된 줄 또는 빈 항목은 해당 항목에 대한 정보 부족을 반영한다.[63][64][65][66][67][68]

4. 2. 기술 사양

기능 지원 (목록에 없는 기능은 모든 컴퓨트 기능에 대해 지원됨)컴퓨트 기능 (버전)
1.0, 1.11.2, 1.32.x3.03.23.5, 3.7, 5.x, 6.x, 7.0, 7.27.58.x9.0
워프 투표 함수 (__all(), __any())아니오
워프 투표 함수 (__ballot())아니오
메모리 펜스 함수 (__threadfence_system())
동기화 함수 (__syncthreads_count(), __syncthreads_and(), __syncthreads_or())
표면 함수
스레드 블록의 3D 그리드
워프 셔플 함수아니오
통합 메모리 프로그래밍
퍼널 시프트아니오
동적 병렬 처리아니오
균일 데이터 경로[56]아니오
하드웨어 가속 비동기 복사아니오
하드웨어 가속 분할 도착/대기 장벽
감소 연산을 위한 워프 레벨 지원
L2 캐시 상주 관리
가속화된 동적 프로그래밍을 위한 DPX 명령아니오
분산 공유 메모리
스레드 블록 클러스터
텐서 메모리 가속기 (TMA) 유닛
기능 지원 (목록에 없는 기능은 모든 컴퓨트 기능에 대해 지원됨)1.0,1.11.2,1.32.x3.03.23.5, 3.7, 5.x, 6.x, 7.0, 7.27.58.x9.0
컴퓨트 기능 (버전)

[57]

4. 3. 멀티프로세서 아키텍처

CUDA 컴퓨트 기능별 멀티프로세서(SM) 아키텍처 사양
기능컴퓨트 기능 (버전)
1.0, 1.11.2, 1.32.x3.03.23.5, 3.7, 5.x, 6.x, 7.0, 7.27.58.x9.0
워프 투표 함수 (__all(), __any())아니오
워프 투표 함수 (__ballot())아니오
메모리 펜스 함수 (__threadfence_system())아니오
동기화 함수 (__syncthreads_count(), __syncthreads_and(), __syncthreads_or())아니오
표면 함수아니오
스레드 블록의 3D 그리드아니오
워프 셔플 함수아니오
통합 메모리 프로그래밍아니오
퍼널 시프트아니오
동적 병렬 처리아니오
균일 데이터 경로[56]아니오
하드웨어 가속 비동기 복사아니오
하드웨어 가속 분할 도착/대기 장벽아니오
감소 연산을 위한 워프 레벨 지원아니오
L2 캐시 상주 관리아니오
가속화된 동적 프로그래밍을 위한 DPX 명령아니오
분산 공유 메모리아니오
스레드 블록 클러스터아니오
텐서 메모리 가속기 (TMA) 유닛아니오

[57]

5. CUDA의 장단점

CUDA는 본래 실시간 그래픽스 표시, 특히 게임 그래픽스 용도로 특화된 GPU를 개발했던 엔비디아(NVIDIA)와 ATI (현 AMD)가 프로그래머블 셰이더의 발전에 따른 프로그래밍 가능성의 향상에 따라, 그 높은 처리 성능을 그래픽스 외에도 활용할 수 있도록 하기 위해 엔비디아가 개발한 기술이다. 이러한 범용 컴퓨팅을 위한 GPU 활용 기술을 GPGPU(General-Purpose computing on Graphics Processing Units)라고 부른다.[1]

GPU는 단순한 연산 유닛을 다수 탑재하고 있으며, 피크 이론 연산 성능(FLOPS)은 동가격대의 CPU를 능가하는 경우도 있다. 따라서 병렬성과 연산 밀도가 높은 처리를 수행하는 경우, 소수에서 복잡한 구성을 갖춘 동규모의 CPU에 비해 높은 처리 성능을 낼 수 있다. 반대로 복잡한 분기 처리(연산 밀도가 낮은 처리)는 CPU에 비해 약하며, GPU에 입력 데이터를 공급하거나 GPU에 의한 연산 결과를 CPU 측으로 읽어오려면(리드백) 연결 버스(PCI-Express)를 통해 데이터를 전송해야 하며, 이것이 병목 현상이 될 수 있는 가능성도 있으므로 적용 분야나 문제를 해결하는 알고리즘을 신중하게 선택할 필요가 있다.[150]

CUDA로 작성한 프로그램을 최대한 최적화하기 위해서는, Warp나 공유 메모리 등 NVIDIA GPU 장치 아키텍처에 대한 깊은 지식도 필요하다.[151]

CUDA의 발표는 2006년 11월[152], CUDA 1.0의 제공 시작은 2007년 7월[153]이며, 후발 GPGPU 관련 기술에는 OpenCL(1.0 사양 공개는 2008년[154])나 DirectCompute(DirectX 컴퓨트 셰이더. Windows 7/DirectX 11.0과 동시에 2009년에 일반 제공 시작[155]) 등이 있지만, 각각 기술 용어는 다르지만 전체적으로는 CUDA와 매우 흡사한 특징을 가지고 있다.



CUDA는 다음과 같은 장점을 가진다.

  • 분산 읽기: 코드는 메모리의 임의 주소에서 읽을 수 있다.
  • 통합 가상 메모리: CUDA 4.0 이상에서 지원된다.
  • 통합 메모리: CUDA 6.0 이상에서 지원된다.
  • 공유 메모리: 스레드 간에 공유할 수 있는 빠른 공유 메모리 영역을 노출한다. 이는 사용자 관리 캐시로 사용될 수 있으며, 텍스처 조회를 사용하는 것보다 더 높은 대역폭을 가능하게 한다.[23]
  • 빠른 다운로드 및 리드백: GPU에서/로 더 빠른 데이터 전송이 가능하다.
  • 정수 및 비트 연산 지원: 정수 텍스처 조회를 포함한 정수 및 비트 연산에 대한 완벽한 지원을 제공한다.


CUDA는 다음과 같은 단점을 가진다.

  • 시스템 버스 대역폭 및 지연 시간: 호스트와 장치 메모리 간의 복사는 시스템 버스 대역폭 및 지연 시간으로 인해 성능 저하를 초래할 수 있다. (이는 GPU의 DMA 엔진에서 처리하는 비동기 메모리 전송으로 부분적으로 완화될 수 있다.)
  • 스레드 실행 조건: 최상의 성능을 위해 스레드는 최소 32개 그룹으로 실행되어야 하며, 총 스레드 수는 수천 개에 달해야 한다. 프로그램 코드의 분기는 32개의 각 스레드가 동일한 실행 경로를 따르는 한 성능에 크게 영향을 미치지 않는다.
  • SIMD 실행 모델의 제약: 본질적으로 발산하는 작업(예: 광선 추적 중 공간 분할 데이터 구조 탐색)에 대해 상당한 제한이 된다.
  • OpenCL과의 비교: CUDA 지원 GPU는 엔비디아 제품으로만 제한된다.[27][1]


CUDA를 다른 GPU에서 구현하려는 시도는 다음과 같다.

  • 프로젝트 코리앤더(Project Coriander): CUDA C++11 소스를 OpenCL 1.2 C로 변환한다. TensorFlow를 실행하기 위한 CUDA-on-CL의 포크이다.[28][29][30]
  • CU2CL: CUDA 3.2 C++를 OpenCL C로 변환한다.[31]
  • GPUOpen HIP: AMD 및 Nvidia GPU용으로 설계된 CUDA 및 ROCm 상위의 얇은 추상화 계층이다. CUDA C++ 소스 가져오기를 위한 변환 도구가 있다. CUDA 4.0 이상과 C++11 및 float16을 지원한다.
  • ZLUDA: AMD GPU에서 CUDA를 대체할 수 있으며, 이전에는 Intel GPU에서 거의 네이티브 성능을 제공했다.[32] 개발자 안제이 야닉(Andrzej Janik)은 2021년과 2022년에 각각 인텔과 AMD로부터 별도로 계약을 맺어 소프트웨어를 개발했다. 그러나 비즈니스 사용 사례가 부족하여 양사 모두 공식적으로 출시하기로 결정하지 않았다. AMD의 계약에는 Janik이 AMD용 코드를 독립적으로 출시할 수 있도록 하는 조항이 포함되어 있어 AMD GPU만 지원하는 새로운 버전을 출시할 수 있었다.[33]
  • chipStar: 고급 OpenCL 3.0 또는 Level Zero 플랫폼에서 CUDA/HIP 프로그램을 컴파일하고 실행할 수 있다.[34]


CUDA Toolkit 버전별 지원 운영체제는 다음과 같다.

CUDA Toolkit 버전지원되는 운영체제
6.5Windows XP (32비트 버전만), Windows 7, Windows 8.1, Windows Server 2008 R2, Windows Server 2012 R2, Fedora 20, OpenSUSE 13.1, RHEL (Red Hat Enterprise Linux) 5/6, CentOS 5/6, SLES (SUSE Linux Enterprise Server) 11-SP3, Ubuntu 12.04/14.04, Mac OS X 10.8/10.9/10.10[181]
7.0Windows 7, Windows 8.1, Windows Server 2008 R2, Windows Server 2012 R2, Fedora 21, OpenSUSE 13.1/13.2, RHEL 6/7, CentOS 6/7, SLES 11/12, Ubuntu 12.04/14.04/14.10, OS X 10.9/10.10[182]
7.5Windows 7, Windows 8.1, Windows 10, Windows Server 2008 R2, Windows Server 2012 R2, Fedora 21, OpenSUSE 13.2, RHEL 6/7, CentOS 6/7, SLES 11/12, SteamOS 1.0-beta, Ubuntu 14.04/15.04, OS X 10.9/10.10/10.11[183]
8.0 GA2Windows 7, Windows 8.1, Windows 10, Windows Server 2008 R2, Windows Server 2012 R2, Windows Server 2016, Fedora 23, OpenSUSE 13.2, RHEL 6/7, CentOS 6/7, SLES 11/12, Ubuntu 14.04/16.04, OS X 10.11/10.12[184]
9.2Windows 7, Windows 8.1, Windows 10, Windows Server 2012 R2, Windows Server 2016, Fedora 27, OpenSUSE Leap 42.3, RHEL 6/7, CentOS 6/7, SLES 12, Ubuntu 16.04/17.10, OS X 10.13[185]
10.2Windows 7, Windows 8.1, Windows 10, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Fedora 29, OpenSUSE 15, RHEL 6/7/8, CentOS 6/7/8, SLES 1512 SP4, Ubuntu 16.04/18.04, OS X 10.13[186]
11.8Windows 10, Windows 11, Windows Server 2016, Windows Server 2019, Windows Server 2022, Fedora 35, OpenSUSE 15, RHEL 7/8/9, CentOS 7, SLES 15, Ubuntu 18.04/20.04/22.04, Debian 11, Kylin (operating system)|KylinOS영어 10, Rocky 8/9, WSL-Ubuntu 2.0[187]
12.1Windows 10, Windows 11, Windows Server 2019, Windows Server 2022, Fedora 37, OpenSUSE 15, RHEL 7/8/9, CentOS 7, SLES 15, Ubuntu 18.04/20.04/22.04, Debian 10/11, KylinOS 10, Rocky 8/9, WSL-Ubuntu 2.0[192]



CUDA Toolkit 11.0 이후, macOS는 지원 대상에서 제외되었다.[188][189]

5. 1. 장점

CUDA는 그래픽 API를 사용하는 기존의 범용 GPU(GPGPU) 방식에 비해 다음과 같은 장점을 가진다.[23]

  • 흩뿌린 읽기: 메모리의 임의 위치에서 데이터를 읽을 수 있다.
  • 공유 메모리: 스레드 간에 공유 가능한 빠른 공유 메모리 영역을 제공한다. 이는 사용자 관리 캐시로 사용될 수 있으며, 텍스처 조회를 사용하는 것보다 더 높은 대역폭을 제공한다.[23]
  • 빠른 입출력: GPU에서 데이터를 읽고 쓰는 속도가 호스트(CPU)보다 빠르다.
  • 정수 및 비트 연산 지원: 정수 텍스처 조회를 포함한 정수 및 비트 연산을 완벽하게 지원한다.


CUDA는 엔비디아가 독자적으로 개발한 GPGPU 기술로, 엔비디아 GPU의 성능을 최대한 활용하도록 설계되었다.[172] CUDA를 사용하면 엔비디아 GPU의 새로운 하드웨어 기능을 빠르게 활용할 수 있다. 예를 들어, Kepler 세대 이후 GPU에서 사용 가능한 Warp 셔플 명령을 통해 공유 메모리를 거치지 않고 더 빠른 병렬 리덕션을 실행할 수 있다.[173][174]

OpenCL, DirectCompute와 같은 다른 GPGPU 기술들은 하드웨어 아키텍처를 표준화하여 여러 벤더의 차이를 추상화하는 애플리케이션 프로그래밍 인터페이스 계층을 제공한다. CUDA는 이들에 비해 추상화 수준이 낮지만, 하드웨어 특유의 기능을 활용하여 성능을 극대화하기는 어렵다.[175]

또한, OpenCL과 DirectCompute는 커널(병렬 실행의 최소 단위) 코드를 OpenCL-C나 HLSL 같은 전용 언어로 작성하고, OpenCL API나 Direct3D API를 통해 커널을 실행해야 하는 번거로움이 있다. 반면 CUDA는 커널 코드 실행을 C/C++의 일반적인 함수 호출과 유사하게 작성할 수 있어 개발 편의성이 높다.

5. 2. 단점

CUDA는 C 언어의 하부 집합을 확장하여 사용하지만, 몇 가지 제한 사항이 있다. 재귀 호출 및 함수 포인터를 지원하지 않으며, 텍스처 렌더링도 지원하지 않는다.[148][149] 배정도 부동 소수점 연산은 IEEE 754 표준과 다르지 않지만, 단정도에서는 일부 기능이 지원되지 않는다. 또한, 나눗셈과 제곱근의 정밀도가 단정도에 비해 조금 낮다.[150]

CPU와 GPU 사이의 버스 대역폭 및 시간 지연으로 인해 병목 현상이 발생할 수 있다. 최적의 성능을 위해서는 스레드가 최소 32개씩 모여 실행되어야 하며, 스레드 수의 합이 수천 개가 되어야 한다. 프로그램 코드 분기는 32개의 스레드가 같은 실행 경로를 따를 경우 성능에 큰 영향을 주지 않지만, SIMD 실행 모델은 분기가 많은 작업에는 심각한 제한이 될 수 있다.[150]

CUDA는 엔비디아 GPU에서만 사용할 수 있다는 점도 단점이다. OpenCL, DirectCompute 등 경쟁 기술은 여러 하드웨어에서 사용할 수 있지만, CUDA는 엔비디아 GPU에 종속적이다. 이로 인해 CUDA에 과도하게 의존하는 프로그램을 작성하면 다른 플랫폼으로 포팅하기 어려울 수 있다(벤더 종속).[157] AMD는 CUDA 애플리케이션을 AMD 및 다른 GPU 플랫폼으로 이식하기 위한 HIP(Heterogeneous-Compute Interface for Portability)를 제공하지만, CUDA와 완전히 호환되지는 않는다.

또한, 그래픽스 연동 용도로 설계된 DirectCompute와 비교했을 때, CUDA는 GPU 연산 결과를 그래픽스 용도로 직접 사용하는 경우 오버헤드가 커질 수 있다.

6. CUDA 활용 분야



CUDA는 다음과 같은 다양한 분야에서 활용되고 있다.



CUDA 연산 처리 기술을 이용하려면 하드웨어 및 운영 체제 지원 외에도 응용 프로그램이 이를 지원해야 한다. 다음은 CUDA를 지원하는 소프트웨어의 일부 예시이다.

  • Freemake Video Converter (Free Make) (자유 소프트웨어)
  • MediaCoder (자유 소프트웨어)
  • LoiLoTouch (LoiLo)
  • Super LoiLoScope (LoiLo)
  • EDIUS
  • VideoStudio (COREL)
  • WinDVD (COREL)
  • PowerDirector (CyberLink)
  • PowerDVD (CyberLink)
  • TMPGEnc (페가시스)
  • 어도비 포토샵 CS4 (어도비)
  • 어도비 애프터 이펙트 CS4 (어도비)
  • 어도비 프리미어 프로 CS4 (어도비)
  • Blender (GPL 자유 소프트웨어)
  • Vegas Pro 10 (소니 크리에이티브 소프트웨어)
  • 패스게터 (인터널)
  • Any Video Converter (자유 소프트웨어, 셰어웨어)


다음은 BOINC 클라이언트에서 CUDA를 사용하는 프로젝트들이다.

  • SETI@Home
  • MilkyWay@home
  • GPUGRID (PS3GRID)
  • AQUA@home
  • Folding@Home (이 프로젝트만 원래 클라이언트에서 작동)


MATLAB과의 연동도 지원된다. MATLAB에서는 Parallel Computing Toolbox를 통해 GPU를 사용할 수 있다[201]. 인텔 제온 X5650을 사용한 경우와 비교하여 NVIDIA 테슬라 C2050을 사용함으로써 FFT이 최대 3.5배 빨라졌다는 설명이 있다[202].

OpenCV 2.2[203]에서 CUDA를 사용한 가속기인 gpu 모듈이 추가되었으며, OpenCV 3.0에서는 cuda 모듈로 개칭되었다.

6. 1. 경쟁 기술

CUDA는 다른 GPU 컴퓨팅 스택인 인텔 OneAPI 및 AMD ROCm과 경쟁한다.[90][91]

Nvidia의 CUDA가 폐쇄 소스인 반면, 인텔의 OneAPI와 AMD의 ROCm은 오픈 소스이다.

'''oneAPI'''는 여러 하드웨어 아키텍처에 대한 소프트웨어 개발을 지원하기 위해 만들어진 개방형 표준 기반의 이니셔티브이다.[136] oneAPI 라이브러리는 Special Interest Groups에서 공개적으로 논의되는 개방형 사양을 구현해야 하며, 모든 개발자 또는 조직이 자체 버전의 oneAPI 라이브러리를 구현할 수 있는 가능성을 제공한다.[137][138]

원래 인텔(Intel)에서 만들었으며, 다른 하드웨어 채택자로는 후지쯔(Fujitsu)와 화웨이(Huawei)가 있다. Unified Acceleration Foundation(UXL)은 OneAPI 이니셔티브의 연속성을 위해 노력하는 새로운 기술 컨소시엄으로, 워킹 그룹과 특별 관심 그룹(SIG)을 통해 새로운 개방형 표준 가속기 소프트웨어 생태계, 관련 개방형 표준 및 사양 프로젝트를 만드는 것을 목표로 한다. 목표는 엔비디아의 CUDA에 대한 개방형 대안을 제공하는 것이다. 이를 주도하는 주요 기업으로는 인텔, 구글, ARM, 퀄컴, 삼성, 이매지네이션, VMware가 있다.[139]

'''ROCm'''[140]AMD(AMD, Advanced Micro Devices)에서 제공하는 그래픽 처리 장치(GPU) 프로그래밍을 위한 오픈 소스 소프트웨어 스택이다.

7. 지원 GPU

기능
(버전)마이크로-
아키텍처
GPU지포스쿼드로, NVS테슬라/데이터 센터테그라,
젯슨,
DRIVE1.0테슬라G80지포스 8800 울트라, 지포스 8800 GTX, 지포스 8800 GTS(G80)쿼드로 FX 5600, 쿼드로 FX 4600, 쿼드로 플렉스 2100 S4테슬라 C870, 테슬라 D870, 테슬라 S8701.1G92, G94, G96, G98, G84, G86지포스 GTS 250, 지포스 9800 GX2, 지포스 9800 GTX, 지포스 9800 GT, 지포스 8800 GTS(G92), 지포스 8800 GT, 지포스 9600 GT, 지포스 9500 GT, 지포스 9400 GT, 지포스 8600 GTS, 지포스 8600 GT, 지포스 8500 GT,
지포스 G110M, 지포스 9300M GS, 지포스 9200M GS, 지포스 9100M G, 지포스 8400M GT, 지포스 G105M쿼드로 FX 4700 X2, 쿼드로 FX 3700, 쿼드로 FX 1800, 쿼드로 FX 1700, 쿼드로 FX 580, 쿼드로 FX 570, 쿼드로 FX 470, 쿼드로 FX 380, 쿼드로 FX 370, 쿼드로 FX 370 로우 프로파일, 쿼드로 NVS 450, 쿼드로 NVS 420, 쿼드로 NVS 290, 쿼드로 NVS 295, 쿼드로 플렉스 2100 D4,
쿼드로 FX 3800M, 쿼드로 FX 3700M, 쿼드로 FX 3600M, 쿼드로 FX 2800M, 쿼드로 FX 2700M, 쿼드로 FX 1700M, 쿼드로 FX 1600M, 쿼드로 FX 770M, 쿼드로 FX 570M, 쿼드로 FX 370M, 쿼드로 FX 360M, 쿼드로 NVS 320M, 쿼드로 NVS 160M, 쿼드로 NVS 150M, 쿼드로 NVS 140M, 쿼드로 NVS 135M, 쿼드로 NVS 130M, 쿼드로 NVS 450, 쿼드로 NVS 420,[50] 쿼드로 NVS 2951.2GT218, GT216, GT215지포스 GT 340*, 지포스 GT 330*, 지포스 GT 320*, 지포스 315*, 지포스 310*, 지포스 GT 240, 지포스 GT 220, 지포스 210,
지포스 GTS 360M, 지포스 GTS 350M, 지포스 GT 335M, 지포스 GT 330M, 지포스 GT 325M, 지포스 GT 240M, 지포스 G210M, 지포스 310M, 지포스 305M쿼드로 FX 380 로우 프로파일, 쿼드로 FX 1800M, 쿼드로 FX 880M, 쿼드로 FX 380M,
엔비디아 NVS 300, NVS 5100M, NVS 3100M, NVS 2100M, ION1.3GT200, GT200b지포스 GTX 295, GTX 285, GTX 280, 지포스 GTX 275, 지포스 GTX 260쿼드로 FX 5800, 쿼드로 FX 4800, 쿼드로 FX 4800 for Mac, 쿼드로 FX 3800, 쿼드로 CX, 쿼드로 플렉스 2200 D2테슬라 C1060, 테슬라 S1070, 테슬라 M10602.0페르미GF100, GF110지포스 GTX 590, 지포스 GTX 580, 지포스 GTX 570, 지포스 GTX 480, 지포스 GTX 470, 지포스 GTX 465,
지포스 GTX 480M쿼드로 6000, 쿼드로 5000, 쿼드로 4000, 쿼드로 4000 for Mac, 쿼드로 플렉스 7000,
쿼드로 5010M, 쿼드로 5000M테슬라 C2075, 테슬라 C2050/C2070, 테슬라 M2050/M2070/M2075/M20902.1GF104, GF106 GF108, GF114, GF116, GF117, GF119지포스 GTX 560 Ti, 지포스 GTX 550 Ti, 지포스 GTX 460, 지포스 GTS 450, 지포스 GTS 450*, 지포스 GT 640 (GDDR3), 지포스 GT 630, 지포스 GT 620, 지포스 GT 610, 지포스 GT 520, 지포스 GT 440, 지포스 GT 440*, 지포스 GT 430, 지포스 GT 430*, 지포스 GT 420*,
지포스 GTX 675M, 지포스 GTX 670M, 지포스 GT 635M, 지포스 GT 630M, 지포스 GT 625M, 지포스 GT 720M, 지포스 GT 620M, 지포스 710M, 지포스 610M, 지포스 820M, 지포스 GTX 580M, 지포스 GTX 570M, 지포스 GTX 560M, 지포스 GT 555M, 지포스 GT 550M, 지포스 GT 540M, 지포스 GT 525M, 지포스 GT 520MX, 지포스 GT 520M, 지포스 GTX 485M, 지포스 GTX 470M, 지포스 GTX 460M, 지포스 GT 445M, 지포스 GT 435M, 지포스 GT 420M, 지포스 GT 415M, 지포스 710M, 지포스 410M쿼드로 2000, 쿼드로 2000D, 쿼드로 600,
쿼드로 4000M, 쿼드로 3000M, 쿼드로 2000M, 쿼드로 1000M,
NVS 310, NVS 315, NVS 5400M, NVS 5200M, NVS 4200M3.0케플러GK104, GK106, GK107지포스 GTX 770, 지포스 GTX 760, 지포스 GT 740, 지포스 GTX 690, 지포스 GTX 680, 지포스 GTX 670, 지포스 GTX 660 Ti, 지포스 GTX 660, 지포스 GTX 650 Ti BOOST, 지포스 GTX 650 Ti, 지포스 GTX 650,
지포스 GTX 880M, 지포스 GTX 870M, 지포스 GTX 780M, 지포스 GTX 770M, 지포스 GTX 765M, 지포스 GTX 760M, 지포스 GTX 680MX, 지포스 GTX 680M, 지포스 GTX 675MX, 지포스 GTX 670MX, 지포스 GTX 660M, 지포스 GT 750M, 지포스 GT 650M, 지포스 GT 745M, 지포스 GT 645M, 지포스 GT 740M, 지포스 GT 730M, 지포스 GT 640M, 지포스 GT 640M LE, 지포스 GT 735M, 지포스 GT 730M쿼드로 K5000, 쿼드로 K4200, 쿼드로 K4000, 쿼드로 K2000, 쿼드로 K2000D, 쿼드로 K600, 쿼드로 K420,
쿼드로 K500M, 쿼드로 K510M, 쿼드로 K610M, 쿼드로 K1000M, 쿼드로 K2000M, 쿼드로 K1100M, 쿼드로 K2100M, 쿼드로 K3000M, 쿼드로 K3100M, 쿼드로 K4000M, 쿼드로 K5000M, 쿼드로 K4100M, 쿼드로 K5100M,
NVS 510, 쿼드로 410테슬라 K10, GRID K340, GRID K520, GRID K23.2GK20A테그라 K1,
젯슨 TK13.5GK110, GK208지포스 GTX 타이탄 Z, 지포스 GTX 타이탄 블랙, 지포스 GTX 타이탄, 지포스 GTX 780 Ti, 지포스 GTX 780, 지포스 GT 640 (GDDR5), 지포스 GT 630 v2, 지포스 GT 730, 지포스 GT 720, 지포스 GT 710, 지포스 GT 740M (64-bit, DDR3), 지포스 GT 920M쿼드로 K6000, 쿼드로 K5200테슬라 K40, 테슬라 K20x, 테슬라 K203.7GK210테슬라 K805.0맥스웰GM107, GM108지포스 GTX 750 Ti, 지포스 GTX 750, 지포스 GTX 960M, 지포스 GTX 950M, 지포스 940M, 지포스 930M, 지포스 GTX 860M, 지포스 GTX 850M, 지포스 845M, 지포스 840M, 지포스 830M쿼드로 K1200, 쿼드로 K2200, 쿼드로 K620, 쿼드로 M2000M, 쿼드로 M1000M, 쿼드로 M600M, 쿼드로 K620M, NVS 810테슬라 M105.2GM200, GM204, GM206지포스 GTX 타이탄 X, 지포스 GTX 980 Ti, 지포스 GTX 980, 지포스 GTX 970, 지포스 GTX 960, 지포스 GTX 950, 지포스 GTX 750 SE,
지포스 GTX 980M, 지포스 GTX 970M, 지포스 GTX 965M쿼드로 M6000 24GB, 쿼드로 M6000, 쿼드로 M5000, 쿼드로 M4000, 쿼드로 M2000, 쿼드로 M5500,
쿼드로 M5000M, 쿼드로 M4000M, 쿼드로 M3000M테슬라 M4, 테슬라 M40, 테슬라 M6, 테슬라 M605.3GM20B테그라 X1,
젯슨 TX1,
젯슨 나노,
DRIVE CX,
DRIVE PX6.0파스칼GP100쿼드로 GP100테슬라 P1006.1GP102, GP104, GP106, GP107, GP108엔비디아 타이탄 Xp, 타이탄 X,
지포스 GTX 1080 Ti, GTX 1080, GTX 1070 Ti, GTX 1070, GTX 1060,
GTX 1050 Ti, GTX 1050, GT 1030, GT 1010,
MX350, MX330, MX250, MX230, MX150, MX130, MX110쿼드로 P6000, 쿼드로 P5000, 쿼드로 P4000, 쿼드로 P2200, 쿼드로 P2000, 쿼드로 P1000, 쿼드로 P400, 쿼드로 P500, 쿼드로 P520, 쿼드로 P600,
쿼드로 P5000 (모바일), 쿼드로 P4000 (모바일), 쿼드로 P3000 (모바일)테슬라 P40, 테슬라 P6, 테슬라 P46.2GP10B[51]테그라 X2, 젯슨 TX2, DRIVE PX 27.0볼타GV100NVIDIA 타이탄 V쿼드로 GV100테슬라 V100, 테슬라 V100S7.2GV10B[52]
테그라 자비에,
젯슨 자비에 NX,
젯슨 AGX 자비에,
DRIVE AGX 자비에,
DRIVE AGX 페가수스,
클라라 AGX7.5튜링TU102, TU104, TU106, TU116, TU117NVIDIA 타이탄 RTX,
지포스 RTX 2080 Ti, RTX 2080 Super, RTX 2080, RTX 2070 Super, RTX 2070, RTX 2060 Super, RTX 2060 12GB, RTX 2060,
지포스 GTX 1660 Ti, GTX 1660 Super, GTX 1660, GTX 1650 Super, GTX 1650, MX550, MX450쿼드로 RTX 8000, 쿼드로 RTX 6000, 쿼드로 RTX 5000, 쿼드로 RTX 4000, T1000, T600, T400
T1200 (모바일), T600 (모바일), T500 (모바일), 쿼드로 T2000 (모바일), 쿼드로 T1000 (모바일)테슬라 T48.0암페어GA100A100 80GB, A100 40GB, A308.6GA102, GA103, GA104, GA106, GA107지포스 RTX 3090 Ti, RTX 3090, RTX 3080 Ti, RTX 3080 12GB, RTX 3080, RTX 3070 Ti, RTX 3070, RTX 3060 Ti, RTX 3060, RTX 3050, RTX 3050 Ti (모바일), RTX 3050 (모바일), RTX 2050 (모바일), MX570RTX A6000, RTX A5500, RTX A5000, RTX A4500, RTX A4000, RTX A2000
RTX A5000 (모바일), RTX A4000 (모바일), RTX A3000 (모바일), RTX A2000 (모바일)A40, A16, A10, A28.7GA10B젯슨 오린 나노,
젯슨 오린 NX,
젯슨 AGX 오린,
DRIVE AGX 오린,
DRIVE AGX 페가수스 OA,
클라라 홀로스캔8.9에이다 러브레이스[55]AD102, AD103, AD104, AD106, AD107지포스 RTX 4090, RTX 4080 Super, RTX 4080, RTX 4070 Ti Super, RTX 4070 Ti, RTX 4070 Super, RTX 4070, RTX 4060 Ti, RTX 4060, RTX 4050 (모바일)RTX 6000 에이다, RTX 5880 에이다, RTX 5000 에이다, RTX 4500 에이다, RTX 4000 에이다, RTX 4000 SFFL40S, L40, L20, L4, L29.0호퍼GH100H200, H10010.0블랙웰GB100B200, B10010.xGB202, GB203, GB205, GB206, GB207지포스 RTX 5090, RTX 5080B40컴퓨팅
기능
(버전)마이크로-
아키텍처
GPU지포스쿼드로, NVS테슬라/데이터 센터테그라,
젯슨,
DRIVE



'*' – OEM 전용 제품

다음은 CUDA SDK 버전별 지원되는 컴퓨팅 기능 버전을 정리한 표이다.

컴퓨팅 기능(CUDA SDK 지원 vs. 마이크로아키텍처)
CUDA SDK
버전
테슬라페르미케플러
(초기)
케플러
(후기)
맥스웰파스칼볼타튜링암페어에이다
러브레이스
호퍼블랙웰
1.0[38]1.0 – 1.1
1.11.0 – 1.1+x
2.01.0 – 1.1+x
2.1 – 2.3.1[39][40][41][42]1.0 – 1.3
3.0 – 3.1[43][44]1.02.0
3.2[45]1.02.1
4.0 – 4.21.02.1
5.0 – 5.51.03.5
6.01.03.23.5
6.51.13.75.x
7.0 – 7.52.05.x
8.02.06.x
9.0 – 9.23.07.0 – 7.2
10.0 – 10.23.07.5
11.0[46]3.58.0
11.1 – 11.4[47]3.58.6
11.5 – 11.7.1[48]3.58.7
11.8[49]3.58.99.0
12.0 – 12.55.09.0



CUDA SDK 10.2는 macOS를 지원하는 마지막 공식 릴리스이며, 이후 버전에서는 macOS를 지원하지 않는다.


  • -

1. 메인 메모리(호스트 메모리)에서 GPU용 메모리(디바이스 메모리)로 데이터를 복사한다.

2. CPU가 GPU에 처리를 지시한다.

3. GPU가 필요한 데이터를 가져와 각 코어에서 병렬 실행한다.

4. 결과를 GPU용 메모리에서 메인 메모리로 복사한다.

[148][149]]]

CUDA는 엔비디아가 개발한 기술로, 원래 실시간 그래픽스 표시, 특히 게임 그래픽스 용도로 특화된 GPU의 높은 처리 성능을 그래픽스 외 다른 분야에도 활용할 수 있도록 한다. 이러한 범용 컴퓨팅을 위한 GPU 활용 기술을 GPGPU(General-Purpose computing on Graphics Processing Units)라고 부른다.

CUDA는 C 언어와 유사한 구문 및 기능을 사용하며, Direct3D/OpenGL과 같은 백엔드를 사용하지 않고 프로그램 로직을 작성할 수 있어 범용 컴퓨팅에 적합하다.

GPU는 단순 연산 유닛을 다수 탑재하여 동가격대 CPU를 능가하는 이론 연산 성능(FLOPS)을 가질 수 있다. 따라서 병렬성과 연산 밀도가 높은 처리에 유리하다. 그러나 복잡한 분기 처리에는 CPU보다 약하며, GPU와 CPU 간 데이터 전송이 병목 현상이 될 수 있으므로 적용 분야를 신중하게 선택해야 한다[150].

CUDA 프로그램 최적화를 위해서는 Warp, 공유 메모리 등 엔비디아 GPU 아키텍처에 대한 깊은 지식이 필요하다[151].

CUDA는 2006년 11월에 발표[152]되었고, CUDA 1.0은 2007년 7월에 제공[153]되기 시작했다. OpenCL(1.0 사양 공개는 2008년[154]), DirectCompute(DirectX 컴퓨트 셰이더, Windows 7/DirectX 11.0과 함께 2009년에 제공 시작[155]) 등과 같은 후발 GPGPU 기술과 비교했을 때, CUDA는 교육·연구 기관 및 기계 학습 분야에서 활발하게 채택[156][157]되고 있다.

CUDA는 다음 엔비디아 GPU 제품군에서 지원된다.

  • NVIDIA GeForce 8 시리즈 이후 (일반/게이밍용)
  • NVIDIA Quadro G80 기반 이후 (워크스테이션용)
  • NVIDIA Tesla (고성능 컴퓨팅/데이터 센터용)
  • NVIDIA Jetson (임베디드용)
  • NVIDIA Tegra K1 이후 (모바일용 통합 프로세서)
  • NVIDIA ION (넷북/넷탑 장치용, 지원 종료)


CUDA 실행에는 전용 장치 드라이버가 필요하며, 하드웨어 세대/아키텍처(Compute Capability, CC)에 따라 사용 가능한 GPU 명령어, 리소스 크기 상한, 배정밀도 부동소수점 지원 여부 등이 달라진다. 상위 CC 하드웨어는 하위 CC용 CUDA 코드를 실행할 수 있지만, 그 반대는 불가능하다. 자세한 내용은 [https://developer.nvidia.com/cuda-gpus CUDA GPUs | NVIDIA Developer Zone]에서 확인할 수 있다.

8. 개발 도구

NVIDIA는 CUDA를 기반으로 구축된 라이브러리의 총칭을 CUDA-X라고 부른다.[169]

분야라이브러리설명
수학cuBLASBLAS 라이브러리
cuFFT고속 푸리에 변환
CUDA Math Library
cuRAND의사 난수 생성
cuSOLVERLAPACK 지원
cuSPARSE희소 행렬
cuTENSOR텐서 (다차원 배열)
cuDSS희소 행렬의 AX = B를 푸는 라이브러리
AmgX
병렬 알고리즘Thrust
전산 리소그래피cuLitho
이미지와 비디오CV-CUDA
nvJPEG
NVIDIA Performance Primitives
NVIDIA Video Codec SDK
NVIDIA Optical Flow SDK
통신 라이브러리NVSHMEM
NCCL
딥 러닝NVIDIA cuDNN
NVIDIA TensorRT
NVIDIA Riva
NVIDIA DeepStream SDK
NVIDIA DALI



CUDA는 OpenGL 및 Direct3D 9/10/11과의 연동을 가능하게 하는 상호 운용 API를 제공한다. 자세한 내용은 다음을 참조하라.



CUDA 툴킷에는 ''Visual Profiler''(비주얼 프로파일러)라고 불리는 성능 측정 툴이 포함되어 있어 애플리케이션의 GPU 처리 시간 등의 정보를 수집하여 성능 개선에 활용할 수 있다.[170] CUDA 툴킷 7.5에서는 명령 레벨의 프로파일링이 지원된다.[171] ''Nsight''(구 Parallel Nsight)라고 불리는 통합 개발 환경용 애드인도 제공되고 있다.

9. 관련 서적


  • 아오키 타카유키일본어, 누카다 아키라일본어 공저, 《처음 배우는 CUDA 프로그래밍》, 공학사, 2009년 11월.
  • 오카다 겐지일본어, 오야마다 코지일본어 감수, 《CUDA 고속 GPU 프로그래밍 입문》, 슈와 시스템, 2010년 3월.[1]
  • Jason Sanders, Edward Kandrot, 《CUDA by example: an introduction to general-purpose GPU programming》, Addison-Wesley, 2011년.[2]
  • Jason Sanders, Edward Kandrot, 《CUDA by Example: An Introduction to General-Purpose GPU Programming: 범용 GPU 프로그래밍 입문》, 인프레스 재팬, 2011년 2월 11일.[3]
  • 이토 토모요시일본어 편, 《GPU 프로그래밍 입문 = Introduction to GPU Programming: CUDA5에 의한 구현》, 강담사, 2013년 5월.[4]
  • David B. Kirk, Wen-mei W. Hwu, ''Programming Massively Parallel Processors: A Hands-on Approach'', Morgan Kaufmann, 2010년.
  • Rob Farber, ''CUDA Application Design and Development'', Morgan Kaufmann, 2011년.
  • Shane Cook, ''CUDA Programming: A Developer's Guide to Parallel Computing with GPUs'', Morgan Kaufmann, 2013년.
  • John Cheng, Max Grossman, Ty Mckercher, 《CUDA C 프로페셔널 프로그래밍》, 인프레스, 2014년 9월 21일.
  • Gregory Ruetsch, Massimiliano Fatica, ''CUDA Fortran for Scientists and Engineers'', Morgan Kaufmann, 2014년.

참조

[1] 웹사이트 Nvidia not totally against third parties making CUDA chips https://www.theregis[...] 2024-04-25
[2] 웹사이트 Nvidia CUDA Home Page https://developer.nv[...] 2017-07-18
[3] 웹사이트 Nvidia's GeForce 8800 (G80): GPUs Re-architected for DirectX 10 https://www.anandtec[...] AnandTech 2006-11-08
[4] 웹사이트 Introduction — nsight-visual-studio-edition 12.6 documentation https://docs.nvidia.[...] 2024-10-10
[5] 웹사이트 Nvidia's CUDA: The End of the CPU? https://www.tomshard[...] Tom's Hardware 2008-06-18
[6] 뉴스 CUDA vs. OpenCL vs. OpenGL https://www.videomak[...] 2018-01-24
[7] 웹사이트 OpenCL https://developer.nv[...] 2013-04-24
[8] 간행물 How Jensen Huang's Nvidia Is Powering the A.I. Revolution https://www.newyorke[...] 2023-11-27
[9] 웹사이트 CUDA LLVM Compiler https://developer.nv[...] 2012-05-07
[10] Youtube First OpenCL demo on a GPU r1sN1ELJfNo
[11] Youtube DirectCompute Ocean Demo Running on Nvidia CUDA-enabled GPU K1I4kts5mqc
[12] 서적 Recent Advances in Intrusion Detection 2008-09
[13] 논문 High-throughput sequence alignment using Graphics Processing Units
[14] 논문 CUDA compatible GPU cards as efficient hardware accelerators for Smith-Waterman sequence alignment
[15] 웹사이트 Pyrit – Google Code https://code.google.[...]
[16] 웹사이트 Use your Nvidia GPU for scientific computing http://boinc.berkele[...] BOINC 2008-12-18
[17] 웹사이트 Nvidia CUDA Software Development Kit (CUDA SDK) – Release Notes Version 2.0 for MAC OS X http://developer.dow[...]
[18] 웹사이트 CUDA 1.1 – Now on Mac OS X http://news.develope[...] 2008-02-14
[19] 웹사이트 CUDA 11 Features Revealed https://developer.nv[...] 2020-05-14
[20] 웹사이트 CUDA Toolkit 11.1 Introduces Support for GeForce RTX 30 Series and Quadro RTX Series GPUs https://developer.nv[...] 2020-09-23
[21] 웹사이트 Enhancing Memory Allocation with New NVIDIA CUDA 11.2 Features https://developer.nv[...] 2020-12-16
[22] 웹사이트 Exploring the New Features of CUDA 11.3 https://developer.nv[...] 2021-04-16
[23] 간행물 Proceedings of the 22nd annual international conference on Supercomputing – ICS '08 https://escholarship[...]
[24] 웹사이트 CUDA C Programming Guide v8.0 http://docs.nvidia.c[...] 2017-01
[25] 웹사이트 NVCC forces c++ compilation of .cu files https://devtalk.nvid[...] 2011-11-29
[26] 웹사이트 Precision & Performance: Floating Point and IEEE 754 Compliance for Nvidia GPUs https://developer.nv[...] Nvidia 2014-11-18
[27] 웹사이트 CUDA-Enabled Products https://www.nvidia.c[...] Nvidia Corporation
[28] 웹사이트 Coriander Project: Compile CUDA Codes To OpenCL, Run Everywhere http://www.phoronix.[...] Phoronix
[29] 웹사이트 cuda-on-cl http://www.iwocl.org[...] IWOCL 2017
[30] 웹사이트 hughperkins/coriander: Build NVIDIA® CUDA™ code for OpenCL™ 1.2 devices https://github.com/h[...] GitHub 2019-05-06
[31] 웹사이트 CU2CL Documentation http://chrec.cs.vt.e[...]
[32] 웹사이트 GitHub – vosen/ZLUDA https://github.com/v[...]
[33] 간행물 AMD Quietly Funded A Drop-In CUDA Implementation Built On ROCm: It's Now Open-Source https://www.phoronix[...] 2024-02-12
[34] 웹사이트 GitHub – chip-spv/chipStar https://github.com/c[...]
[35] 웹사이트 PyCUDA http://mathema.ticia[...]
[36] 웹사이트 pycublas https://web.archive.[...] 2017-08-08
[37] 웹사이트 CuPy https://cupy.dev/ 2020-01-08
[38] 웹사이트 NVIDIA CUDA Programming Guide. Version 1.0 http://developer.dow[...] 2007-06-23
[39] 웹사이트 NVIDIA CUDA Programming Guide. Version 2.1 http://developer.dow[...] 2008-12-08
[40] 웹사이트 NVIDIA CUDA Programming Guide. Version 2.2 http://developer.dow[...] 2009-04-02
[41] 웹사이트 NVIDIA CUDA Programming Guide. Version 2.2.1 http://developer.dow[...] 2009-05-26
[42] 웹사이트 NVIDIA CUDA Programming Guide. Version 2.3.1 http://developer.dow[...] 2009-08-26
[43] 웹사이트 NVIDIA CUDA Programming Guide. Version 3.0 http://developer.dow[...] 2010-02-20
[44] 웹사이트 NVIDIA CUDA C Programming Guide. Version 3.1.1 http://developer.dow[...] 2010-07-21
[45] 웹사이트 NVIDIA CUDA C Programming Guide. Version 3.2 http://developer.dow[...] 2010-11-09
[46] 웹사이트 CUDA 11.0 Release Notes https://docs.nvidia.[...]
[47] 웹사이트 CUDA 11.1 Release Notes https://docs.nvidia.[...]
[48] 웹사이트 CUDA 11.5 Release Notes https://docs.nvidia.[...]
[49] 웹사이트 CUDA 11.8 Release Notes https://docs.nvidia.[...]
[50] 웹사이트 NVIDIA Quadro NVS 420 Specs https://www.techpowe[...] 2023-08-25
[51] 웹사이트 NVIDIA Rolls Out Tegra X2 GPU Support In Nouveau http://www.phoronix.[...] Phoronix 2017-08-08
[52] Youtube Nvidia Xavier Specs https://www.techpowe[...]
[53] 웹사이트 Welcome — Jetson LinuxDeveloper Guide 34.1 documentation https://docs.nvidia.[...]
[54] 웹사이트 NVIDIA Bringing up Open-Source Volta GPU Support for Their Xavier SoC https://www.phoronix[...]
[55] 웹사이트 NVIDIA Ada Lovelace Architecture https://www.nvidia.c[...]
[56] Youtube Dissecting the Turing GPU Architecture through Microbenchmarking https://developer.do[...]
[57] 웹사이트 H.1. Features and Technical Specifications Table 13. Feature Support per Compute Capability https://docs.nvidia.[...] 2020-09-23
[58] 웹사이트 CUDA C++ Programming Guide https://docs.nvidia.[...]
[59] 문서 Fused-Multiply-Add, actually executed, Dense Matrix
[60] 문서 as SASS since 7.5, as PTX since 8.0
[61] 문서 unofficial support in SASS
[62] 문서 unofficial support in SASS
[63] 웹사이트 Technical brief. NVIDIA Jetson AGX Orin Series https://www.nvidia.c[...] 2023-09-05
[64] 웹사이트 NVIDIA Ampere GA102 GPU Architecture https://images.nvidi[...] 2023-09-05
[65] arXiv Benchmarking and Dissecting the Nvidia Hopper GPU Architecture 2024
[66] 웹사이트 Datasheet NVIDIA A40 https://images.nvidi[...] 2024-04-27
[67] 웹사이트 NVIDIA AMPERE GA102 GPU ARCHITECTURE https://www.nvidia.c[...] 2024-04-27
[68] 웹사이트 Datasheet NVIDIA L40 https://www.nvidia.c[...] 2024-04-27
[69] 문서 In the Whitepapers the Tensor Core cube diagrams represent the Dot Product Unit Width into the height (4 FP16 for Volta and Turing, 8 FP16 for A100, 4 FP16 for GA102, 16 FP16 for GH100). The other two dimensions represent the number of Dot Product Units (4x4 = 16 for Volta and Turing, 8x4 = 32 for Ampere and Hopper). The resulting gray blocks are the FP16 FMA operations per cycle. Pascal without Tensor core is only shown for speed comparison as is Volta V100 with non-FP16 datatypes.
[70] 웹사이트 NVIDIA Turing Architecture Whitepaper https://images.nvidi[...] 2023-09-05
[71] 웹사이트 NVIDIA Tensor Core GPU https://www.nvidia.c[...] 2023-09-05
[72] 웹사이트 NVIDIA Hopper Architecture In-Depth https://developer.nv[...] 2022-03-22
[73] 문서 shape x converted operand size, e.g. 2 tensor cores x 4x4x4xFP16/cycle = 256 Bytes/cycle
[74] 문서 = product first 3 table rows
[75] 문서 = product of previous 2 table rows; shape: e.g. 8x8x4xFP16 = 512 Bytes
[76] 논문 Dissecting Tensor Cores via Microbenchmarks: Latency, Throughput and Numeric Behaviors
[77] 웹사이트 Parallel Thread Execution ISA Version 7.7 https://docs.nvidia.[...]
[78] arXiv Modeling Deep Learning Accelerator Enabled GPUs 2018
[79] 웹사이트 NVIDIA Ada Lovelace Architecture https://www.nvidia.c[...]
[80] 문서 shape x converted operand size, e.g. 2 tensor cores x 4x4x4xFP16/cycle = 256 Bytes/cycle
[81] 문서 = product first 3 table rows
[82] 문서 = product of previous 2 table rows; shape: e.g. 8x8x4xFP16 = 512 Bytes
[83] arXiv Dissecting the NVidia Turing T4 GPU via Microbenchmarking
[84] 서적 2019 IEEE Hot Chips 31 Symposium (HCS)
[85] arXiv Dissecting the NVidia Turing T4 GPU via Microbenchmarking
[86] 서적 2019 IEEE Hot Chips 31 Symposium (HCS)
[87] 문서 dependent on device
[88] 웹사이트 Tegra X1 https://developer.nv[...] 2015-01-09
[89] 문서 NVIDIA H100 Tensor Core GPU Architecture https://nvdam.widen.[...]
[90] 문서 H.1. Features and Technical Specifications – Table 14. Technical Specifications per Compute Capability https://docs.nvidia.[...]
[91] 문서 NVIDIA Hopper Architecture In-Depth https://developer.nv[...]
[92] 문서 can only execute 160 integer instructions according to programming guide
[93] 문서 128 according to [https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#arithmetic-instructions]. 64 from FP32 + 64 separate units?
[94] 문서 64 by FP32 cores and 64 by flexible FP32/INT cores.
[95] 웹사이트 CUDA C++ Programming Guide https://docs.nvidia.[...]
[96] 문서 32 FP32 lanes combine to 16 FP64 lanes. Maybe lower depending on model.
[97] 문서 only supported by 16 FP32 lanes, they combine to 4 FP64 lanes
[98] 문서 depending on model
[99] 문서 Effective speed, probably over FP32 ports. No description of actual FP64 cores.
[100] 문서 depending on model
[101] 문서 Can also be used for integer additions and comparisons
[102] 문서 depending on model
[103] 문서 depending on model
[104] 서적 2019 IEEE Hot Chips 31 Symposium (HCS)
[105] 웹사이트 Inside Volta: The World's Most Advanced Data Center GPU https://devblogs.nvi[...] 2017-05-10
[106] 문서 depending on model
[107] 문서 depending on model
[108] 문서 The schedulers and dispatchers have dedicated execution units unlike with Fermi and Kepler.
[109] 문서 Dispatching can overlap concurrently, if it takes more than one cycle (when there are less execution units than 32/SM Partition)
[110] 문서 Can dual issue MAD pipe and SFU pipe
[111] 문서 No more than one scheduler can issue 2 instructions at once. The first scheduler is in charge of warps with odd IDs. The second scheduler is in charge of warps with even IDs.
[112] 문서 shared memory only, no data cache
[113] 문서 shared memory only, no data cache
[114] 문서 shared memory separate, but L1 includes texture cache
[115] 문서 shared memory separate, but L1 includes texture cache
[116] 문서 shared memory separate, but L1 includes texture cache
[117] 문서 shared memory separate, but L1 includes texture cache
[118] 문서 shared memory separate, but L1 includes texture cache
[119] 문서 shared memory separate, but L1 includes texture cache
[120] 웹사이트 H.6.1. Architecture https://docs.nvidia.[...] 2019-05-13
[121] 웹사이트 Demystifying GPU Microarchitecture through Microbenchmarking https://www.stuffedc[...]
[122] 논문 Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking
[123] 웹사이트 Tegra X1 https://developer.nv[...] 2015-01-09
[124] 논문 Dissecting the NVidia Turing T4 GPU via Microbenchmarking
[125] 웹사이트 Dissecting the Ampere GPU Architecture through Microbenchmarking https://www.nvidia.c[...]
[126] 논문 Dissecting the NVidia Turing T4 GPU via Microbenchmarking
[127] 논문 Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking
[128] 웹사이트 asfermi Opcode https://github.com/h[...]
[129] 문서 for access with texture engine only
[130] 문서 for access with texture engine only
[131] 문서 25% disabled on RTX 4090
[132] 웹사이트 I.7. Compute Capability 8.x https://docs.nvidia.[...] 2022-10-12
[133] 웹사이트 Appendix F. Features and Technical Specifications http://developer.dow[...]
[134] 웹사이트 nVidia CUDA Bioinformatics: BarraCUDA https://www.biocentr[...] 2019-10-15
[135] 웹사이트 Part V: Physics Simulation https://developer.nv[...] 2020-09-11
[136] 웹사이트 oneAPI Programming Model https://www.oneapi.i[...] 2024-07-27
[137] 웹사이트 Specifications {{!}} oneAPI https://www.oneapi.i[...] 2024-07-27
[138] 웹사이트 oneAPI Specification — oneAPI Specification 1.3-rev-1 documentation https://oneapi-spec.[...] 2024-07-27
[139] 뉴스 Exclusive: Behind the plot to break Nvidia's grip on AI by targeting software https://www.reuters.[...] 2024-04-05
[140] 웹사이트 Question: What does ROCm stand for? · Issue #1628 · RadeonOpenCompute/ROCm https://github.com/R[...] 2022-01-18
[141] 웹사이트 NVIDIA CUDA Toolkit Release Notes https://docs.nvidia.[...] NVIDIA 2024-08-01
[142] 웹사이트 NVIDIA CodeWorks for Android https://developer.nv[...]
[143] 웹사이트 NVIDIA GameWorks Documentation - NVIDIA CUDA for Android https://docs.nvidia.[...]
[144] 블로그 What Is CUDA https://blogs.nvidia[...] 2012-09-10
[145] 웹사이트 Accelerated Computing https://developer.nv[...]
[146] 웹사이트 開発者向けのCUDA並列コンピューティングプラットフォーム http://www.nvidia.co[...]
[147] 웹사이트 第3回 CUDAとGPUコンピューティングの広がり https://thinkit.co.j[...]
[148] 간행물 プロセサはマルチ×マルチへ 日経エレクトロニクス 2007-10-08
[149] 웹사이트 第7回 CUDAプログラミングモデル② http://www.gdep.jp/p[...]
[150] 웹사이트 HPCシンポジウムで見えたTSUBAME2.0の設計思想 (1) ポストペタスケールへ向けGPUをどう活用していくのか https://news.mynavi.[...]
[151] 웹사이트 第6回 CUDAプログラミングモデル① http://www.gdep.jp/p[...]
[152] 보도자료 Press Release http://www.nvidia.co[...] NVIDIA
[153] 보도자료 NVIDIA CUDA 1.0、GPUコンピューティング向けに機能を強化 http://www.nvidia.co[...] NVIDIA
[154] 웹사이트 並列プログラミング規格「OpenCL 1.0」が標準として批准 - @IT https://atmarkit.itm[...]
[155] 웹사이트 西川善司の3Dゲームファンのためのグラフィックス講座。台頭するDirectCompute技術 - GAME Watch https://game.watch.i[...]
[156] 웹사이트 NVIDIA GPUコンピューティング応用事例のご紹介 http://www.nec.co.jp[...]
[157] 뉴스 【GTC2014】NVIDIA、基調講演でCUDAを自動車にもたらす開発キット「JETSON TK1」の提供開始など発表 / NVLink、3Dメモリで、帯域幅問題を解消する新GPU「Pascal(パスカル)」も計画 - Car Watch https://car.watch.im[...]
[158] 웹사이트 CUDA プロジェクト https://pleiades.io/[...]
[159] 웹사이트 cuBLAS - NVIDIA CUDA ZONE https://developer.nv[...]
[160] 웹사이트 cuFFT - NVIDIA CUDA ZONE https://developer.nv[...]
[161] 웹사이트 Thrust - NVIDIA CUDA ZONE https://developer.nv[...]
[162] 뉴스 NVIDIA Pushes CUDA 7 RC With C++11 Features, Runtime Compilation - Phoronix http://www.phoronix.[...]
[163] 블로그 The Power of C++11 Programming in CUDA 7 http://devblogs.nvid[...]
[164] 보고서 CUDA 8 PERFORMANCE OVERVIEW - November 2016, NVIDIA http://developer.dow[...] NVIDIA 2016-11
[165] 웹사이트 CUDA 8.0 新機能のご紹介 - GTC Japan 2016 https://www.gputechc[...]
[166] 웹사이트 NVIDIAのCUDAアーキテクチャGPUにおけるFortranサポート http://www.nvidia.co[...]
[167] 웹사이트 PGI CUDA Fortran のコンパイル・オプション http://www.softek.co[...]
[168] 웹사이트 CUDA LLVM Compiler https://developer.nv[...]
[169] 웹사이트 CUDA-X https://developer.nv[...] 2024-03-11
[170] 웹사이트 第3回 CUDAとGPUコンピューティングの広がり http://thinkit.co.jp[...]
[171] 블로그 CUDA 7.5: Pinpoint Performance Problems with Instruction-Level Profiling http://devblogs.nvid[...]
[172] 웹사이트 コンパイラ、そしてもっと:アクセラレーター・プログラミング http://www.hpcwire.j[...]
[173] 블로그 Faster Parallel Reductions on Kepler http://devblogs.nvid[...]
[174] 뉴스 Kepler GPUアーキテクチャとプログラム最適化 (10) Keplerから搭載されたレジスタ内のデータの入れ替え命令 https://news.mynavi.[...]
[175] 웹사이트 第3回 CUDAとGPUコンピューティングの広がり http://thinkit.co.jp[...]
[176] 웹사이트 ASCII.jp:OpenCLでCUDAを追撃!? AMD「ATI Stream」が狙うものは https://ascii.jp/ele[...]
[177] 웹사이트 AMDがSC15にて、「Boltzmann Initiative」を発表 – AMD GPU用C++とCUDAコンパイラー - 株式会社エーキューブ http://acube-corp.co[...]
[178] 웹사이트 HIP : C++ Heterogeneous-Compute Interface for Portability - GPUOpen http://gpuopen.com/c[...]
[179] 뉴스 SIGGRAPH ASIA 2009 - 非プラットフォーム依存パラレルの本命、「OpenCL」最新事情 (6) OpenCLはCUDAやDirectComputeと競合するのか | マイナビニュース https://news.mynavi.[...]
[180] 뉴스 "GeForceの父" David Kirk博士、東大で並列コンピューティングについて講演 (4) CUDAの動作の仕組み | マイナビニュース https://news.mynavi.[...]
[181] 웹사이트 CUDA Toolkit 6.5 https://developer.nv[...]
[182] 웹사이트 CUDA 7.0 Downloads | NVIDIA Developer https://developer.nv[...]
[183] 웹사이트 CUDA 7.5 Downloads Archive | NVIDIA Developer https://developer.nv[...]
[184] 웹사이트 CUDA Toolkit 8.0 - Feb 2017 | NVIDIA Developer https://developer.nv[...]
[185] 웹사이트 CUDA Toolkit 9.2 Download | NVIDIA Developer https://developer.nv[...]
[186] 웹사이트 CUDA Toolkit 10.2 Download | NVIDIA Developer https://developer.nv[...]
[187] 웹사이트 CUDA Toolkit 11.8 Downloads | NVIDIA Developer https://developer.nv[...]
[188] 웹사이트 Release Notes :: CUDA Toolkit Documentation (v11.0) https://docs.nvidia.[...]
[189] 웹사이트 NVIDIA CUDA Toolkit Release Notes https://docs.nvidia.[...] 2020-07-26
[190] 웹사이트 Installation Guide Mac OS X :: CUDA Toolkit Documentation https://docs.nvidia.[...]
[191] 웹사이트 NVIDIA CUDA Toolkit - Developer Tools for macOS | NVIDIA Developer https://developer.nv[...]
[192] 웹사이트 CUDA Toolkit 12.1 Downloads | NVIDIA Developer https://developer.nv[...]
[193] 웹사이트 NVIDIA® OptiX™ Ray Tracing Engine https://developer.nv[...]
[194] 웹사이트 NVIDIA OptiX™ Legacy Downloads | NVIDIA Developer https://developer.nv[...]
[195] 웹사이트 How to Get Started with OptiX 7 | NVIDIA Technical Blog https://developer.nv[...]
[196] 웹사이트 GPU changes (for CUDA and OpenGL) in After Effects CC (12.1) | After Effects region of interest http://blogs.adobe.c[...]
[197] 웹사이트 4Gamer.net ― NVIDIA製GPUが「Photoshop」「After Effects」「Premiere Pro」の最新版「CS4」アクセラレーションをサポート。ムービーでその効果をチェック https://www.4gamer.n[...]
[198] 웹사이트 Adobe Premiere Pro CC – さらにスピーディーなビデオ編集 | NVIDIA http://www.nvidia.co[...] NVIDIA
[199] 웹사이트 CUDA/OpenCL/Mercury Playback Engine について(Adobe Premiere Pro) https://helpx.adobe.[...]
[200] 웹사이트 Doc:JA/2.6/Manual/Render/Cycles/GPU Rendering - BlenderWiki http://wiki.blender.[...]
[201] 웹사이트 NVIDIA CUDA に対応した GPU に対する MATLAB GPU 演算のサポート - MATLAB & Simulink https://jp.mathworks[...]
[202] 웹사이트 Using GPUs in MATLAB » Loren on the Art of MATLAB https://blogs.mathwo[...]
[203] 웹사이트 OpenCV 2.2 Released - ROS robotics news http://www.ros.org/n[...]
[204] 웹인용 Nvidia's CUDA: The End of the CPU? http://www.tomshardw[...] Tom's Hardware 2008-06-18
[205] 웹인용 MATLAB Adds GPGPU Support http://www.hpcwire.c[...] hpcwire.com 2010-10-12



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com