본문으로 이동

CUDA

위키백과, 우리 모두의 백과사전.
쿠다
CUDA
개발자엔비디아
발표일2007년 6월 23일(18년 전)(2007-06-23)
안정화 버전
12.9 / 2025년 5월(2개월 전)(2025-05)
운영 체제윈도우 XP 이상
macOS
리눅스
플랫폼아래의 지원 GPU 참고
종류GPGPU
라이선스프리웨어
웹사이트developer.nvidia.com/cuda-zone

컴퓨팅에서 CUDA (Compute Unified Device Architecture)는 그래픽 처리 장치 (GPU)의 특정 유형을 사용하여 가속화된 범용 처리를 가능하게 하는 독점적인[1] 병렬 컴퓨팅 플랫폼 및 API이다. 이러한 접근 방식을 GPU 기반 범용 컴퓨팅이라고 한다. CUDA는 엔비디아가 2006년에 만들었다.[2] 처음 소개될 때 그 이름은 Compute Unified Device Architecture의 약어였지만,[3] 엔비디아는 나중에 약어의 일반적인 사용을 중단하고 현재는 거의 확장하지 않는다.[4]

CUDA는 GPU의 가상 명령어 집합 및 병렬 컴퓨팅 요소에 직접 접근하여 컴퓨트 커널을 실행할 수 있도록 하는 소프트웨어 계층이다.[5] 드라이버 및 런타임 커널 외에도 CUDA 플랫폼에는 프로그래머가 애플리케이션을 가속화하는 데 도움이 되는 컴파일러, 라이브러리 및 개발자 도구가 포함되어 있다.

CUDA는 C, C++, 포트란, 파이썬, 줄리아와 같은 프로그래밍 언어와 함께 작동하도록 설계되었다. 이러한 접근성은 Direct3DOpenGL과 같은 이전 API가 고급 그래픽 프로그래밍 기술을 요구했던 것과 대조적으로 병렬 프로그래밍 전문가가 GPU 리소스를 더 쉽게 사용할 수 있도록 한다.[6] CUDA 기반 GPU는 OpenMP, OpenACCOpenCL과 같은 프로그래밍 프레임워크도 지원한다.[7][5]

배경

[편집]

그래픽 처리 장치 (GPU)는 전문화된 컴퓨터 프로세서로서 실시간 고해상도 3차원 그래픽스의 컴퓨팅 집약적인 작업 요구 사항을 해결한다. 2012년까지 GPU는 대규모 데이터 블록을 효율적으로 조작할 수 있는 고도로 병렬적인 멀티 코어 시스템으로 발전했다. 이러한 설계는 대규모 데이터 블록 처리가 병렬로 수행되는 상황에서 일반적인 중앙 처리 장치 (CPU)보다 알고리즘에 더 효과적이다. 예를 들어 다음과 같은 상황에서 그렇다.

이안 벅은 2000년 스탠포드에서 32개의 지포스 카드를 사용하여 8K 게임 장비를 만들었고, 그 후 DARPA 보조금을 받아 GPU에서 범용 병렬 프로그래밍을 수행했다. 그 후 그는 엔비디아에 합류하여 2004년부터 CUDA 개발을 감독하고 있다. CUDA를 추진하면서 젠슨 황은 엔비디아 GPU가 과학 컴퓨팅을 위한 일반 하드웨어가 되는 것을 목표로 했다. CUDA는 2007년에 출시되었다. 2015년경 CUDA의 초점은 신경망으로 바뀌었다.[8]

온톨로지

[편집]

다음 표는 CUDA 프레임워크의 온톨로지에 대한 비정확한 설명을 제공한다.

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

프로그래밍 기능

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

CUDA 플랫폼은 CUDA 가속 라이브러리, OpenACC와 같은 컴파일러 지시문, 그리고 C, C++, 포트란, 파이썬을 포함한 산업 표준 프로그래밍 언어의 확장을 통해 소프트웨어 개발자에게 접근 가능하다. C/C++ 프로그래머는 엔비디아의 LLVM 기반 C/C++ 컴파일러인 nvcc 또는 clang 자체를 사용하여 PTX로 컴파일된 'CUDA C/C++'를 사용할 수 있다.[9] 포트란 프로그래머는 The Portland Group의 PGI CUDA 포트란 컴파일러를 사용하여 'CUDA 포트란'을 사용할 수 있다. 파이썬 프로그래머는 cuNumeric 라이브러리를 사용하여 엔비디아 GPU에서 애플리케이션을 가속화할 수 있다.

라이브러리, 컴파일러 지시문, CUDA C/C++ 및 CUDA 포트란 외에도 CUDA 플랫폼은 크로노스 그룹OpenCL,[10] 마이크로소프트의 다이렉트컴퓨트, OpenGL 컴퓨트 셰이더 및 C++ AMP를 포함한 다른 컴퓨팅 인터페이스를 지원한다.[11] 파이썬, , 포트란, 자바, 루비, 루아, 커먼 리스프, 하스켈, R, 매트랩, IDL, 줄리아에 대한 타사 래퍼도 사용할 수 있으며, 매스매티카에는 네이티브 지원이 제공된다.

비디오 게임 산업에서 GPU는 그래픽 렌더링 및 게임 물리 계산 (파편, 연기, 불, 유체와 같은 물리적 효과)에 사용되며, PhysX불릿이 그 예시이다. CUDA는 계산생물학, 암호학 및 기타 분야에서 비그래픽 애플리케이션을 크게 가속화하는 데 사용되기도 했다.[12][13][14][15][16]

CUDA는 낮은 수준의 API (CUDA 드라이버 API, 비단일 소스)와 높은 수준의 API (CUDA 런타임 API, 단일 소스)를 모두 제공한다. 초기 CUDA SDK는 2007년 2월 15일에 마이크로소프트 윈도우리눅스용으로 공개되었다. 맥 OS X 지원은 나중에 버전 2.0에 추가되었으며,[17] 이는 2008년 2월 14일에 출시된 베타 버전을 대체한다.[18] CUDA는 G8x 시리즈 이후의 모든 엔비디아 GPU, 즉 지포스, 쿼드로엔비디아 테슬라 라인과 함께 작동한다. CUDA는 대부분의 표준 운영 체제와 호환된다.

CUDA 8.0에는 다음 라이브러리가 포함된다 (컴파일 및 런타임용, 알파벳 순):

  • cuBLAS – CUDA 기본 선형 대수 서브루틴 라이브러리
  • CUDART – CUDA 런타임 라이브러리
  • cuFFT – CUDA 고속 푸리에 변환 라이브러리
  • cuRAND – CUDA 무작위 숫자 생성 라이브러리
  • cuSOLVER – CUDA 기반 조밀 및 희소 직접 솔버 컬렉션
  • cuSPARSE – CUDA 희소 행렬 라이브러리
  • NPP – 엔비디아 성능 프리미티브 라이브러리
  • nvGRAPH – 엔비디아 그래프 분석 라이브러리
  • NVML – 엔비디아 관리 라이브러리
  • NVRTC – CUDA C++용 엔비디아 런타임 컴파일 라이브러리

CUDA 8.0에는 다음 다른 소프트웨어 구성 요소가 포함된다:

  • nView – 엔비디아 nView 데스크톱 관리 소프트웨어
  • NVWMI – 엔비디아 엔터프라이즈 관리 툴킷
  • GameWorks PhysX – 멀티 플랫폼 게임 물리 엔진

CUDA 9.0–9.2에는 다음 다른 구성 요소가 포함된다:

  • CUTLASS 1.0 – 사용자 정의 선형 대수 알고리즘
  • NVIDIA Video Decoder는 CUDA 9.2에서 더 이상 사용되지 않으며, 이제 NVIDIA Video Codec SDK에서 사용할 수 있다.

CUDA 10에는 다음 다른 구성 요소가 포함된다:

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

CUDA 11.0–11.8에는 다음 다른 구성 요소가 포함된다:[19][20][21][22]

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

장점

[편집]

CUDA는 그래픽 API를 사용하는 기존 GPU 기반 범용 컴퓨팅에 비해 몇 가지 장점이 있다.

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

한계

[편집]
  • 호스트 컴퓨터든 GPU 장치든, 모든 CUDA 소스 코드는 이제 C++ 구문 규칙에 따라 처리된다.[24] 이는 항상 그런 것은 아니었다. 이전 버전의 CUDA는 C 구문 규칙을 기반으로 했다.[25] C 코드를 C++ 컴파일러로 컴파일하는 일반적인 경우와 마찬가지로, 오래된 C 스타일 CUDA 소스 코드가 컴파일에 실패하거나 원래 의도와 다르게 동작할 수 있다.
  • OpenGL과 같은 렌더링 언어와의 상호 운용성은 단방향이며, OpenGL은 등록된 CUDA 메모리에 접근할 수 있지만 CUDA는 OpenGL 메모리에 접근할 수 없다.
  • 호스트와 장치 메모리 간의 복사는 시스템 버스 대역폭 및 지연 시간으로 인해 성능 저하를 초래할 수 있다 (이는 GPU의 DMA 엔진이 처리하는 비동기 메모리 전송으로 부분적으로 완화될 수 있다).
  • 스레드는 최상의 성능을 위해 최소 32개 그룹으로 실행되어야 하며, 총 스레드 수는 수천 개에 달해야 한다. 프로그램 코드의 분기는 32개 스레드 각각이 동일한 실행 경로를 따르는 한 성능에 큰 영향을 미치지 않는다. SIMD 실행 모델은 본질적으로 발산하는 작업 (예: 광선 추적공간 분할 데이터 구조를 순회하는 경우)에 상당한 제약이 된다.
  • 최신 개정판에는 에뮬레이션 또는 대체 기능이 제공되지 않는다.
  • 유효한 C++ 코드도 컴파일러가 대상 GPU 장치 제한에 대한 최적화를 접근하는 방식 때문에 때때로 플래그가 지정되어 컴파일을 방해할 수 있다.
  • C++ 런타임 타입 정보 (RTTI) 및 C++ 스타일 예외 처리는 장치 코드에서는 지원되지 않고 호스트 코드에서만 지원된다.
  • 1세대 CUDA 컴퓨팅 기능 1.x 장치에서 단정밀도비정규수는 지원되지 않고 대신 0으로 플러시되며, 나눗셈 및 제곱근 연산의 정밀도는 IEEE 754 호환 단정밀도 수학보다 약간 낮다. 컴퓨팅 기능 2.0 이상을 지원하는 장치는 비정규수를 지원하며, 나눗셈 및 제곱근 연산은 기본적으로 IEEE 754 호환이다. 그러나 사용자는 컴파일러 플래그를 설정하여 정확한 나눗셈 및 정확한 제곱근을 비활성화하고 비정규수를 0으로 플러시함으로써 원하는 경우 이전의 더 빠른 게임 등급의 컴퓨팅 기능 1.x 장치 수학을 얻을 수 있다.[26]
  • OpenCL과 달리, CUDA 지원 GPU는 엔비디아가 독점적이기 때문에 엔비디아에서만 사용할 수 있다.[27][1] 다른 GPU에서 CUDA를 구현하려는 시도에는 다음이 포함된다:
    • 프로젝트 코리앤더: CUDA C++11 소스를 OpenCL 1.2 C로 변환한다. 텐서플로를 실행하기 위한 CUDA-on-CL의 포크이다.[28][29][30]
    • CU2CL: CUDA 3.2 C++를 OpenCL C로 변환한다.[31]
    • GPUOpen HIP: AMD 및 엔비디아 GPU용으로 CUDA 및 ROCm 위에 있는 얇은 추상화 계층이다. CUDA C++ 소스를 가져오기 위한 변환 도구를 가지고 있다. CUDA 4.0과 C++11 및 float16을 지원한다.
    • ZLUDA는 AMD GPU 및 이전 인텔 GPU에서 거의 네이티브 성능으로 CUDA를 드롭인 대체하는 프로그램이다.[32] 개발자 안제이 야니크는 2021년과 2022년에 각각 인텔과 AMD로부터 소프트웨어 개발 계약을 체결했다. 그러나 양사 모두 비즈니스 사용 사례 부족으로 공식 출시를 결정하지 않았다. AMD의 계약에는 야니크가 AMD용 코드를 독립적으로 출시할 수 있도록 허용하는 조항이 포함되어 있어, 그가 AMD GPU만 지원하는 새 버전을 출시할 수 있게 되었다.[33]
    • chipStar는 고급 OpenCL 3.0 또는 Level Zero 플랫폼에서 CUDA/HIP 프로그램을 컴파일하고 실행할 수 있다.[34]

예시

[편집]

다음 C++ 예제 코드는 이미지에서 GPU의 배열로 텍스처를 로드한다.

texture<float, 2, cudaReadModeElementType> tex;

void foo()
{
  cudaArray* cu_array;

  // Allocate array
  cudaChannelFormatDesc description = cudaCreateChannelDesc<float>();
  cudaMallocArray(&cu_array, &description, width, height);

  // Copy image data to array
  cudaMemcpyToArray(cu_array, image, width*height*sizeof(float), cudaMemcpyHostToDevice);

  // Set texture parameters (default)
  tex.addressMode[0] = cudaAddressModeClamp;
  tex.addressMode[1] = cudaAddressModeClamp;
  tex.filterMode = cudaFilterModePoint;
  tex.normalized = false; // do not normalize coordinates

  // Bind the array to the texture
  cudaBindTextureToArray(tex, cu_array);

  // Run kernel
  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);

  // Unbind the array from the texture
  cudaUnbindTexture(tex);
} //end foo()

__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]

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]

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]

import cupy

a = cupy.random.randn(400)
b = cupy.random.randn(400)

dest = cupy.zeros_like(a)

print(dest - a * b)

지원 GPU

[편집]

CUDA SDK 버전 및 마이크로아키텍처 (코드명 기준)별 지원 CUDA 컴퓨팅 기능 버전:

참고: CUDA SDK 10.2는 macOS의 최신 공식 릴리스이며, 이후 릴리스에서는 macOS 지원이 제공되지 않는다.

버전별 CUDA 컴퓨팅 기능, 관련 GPU 반도체 및 GPU 카드 모델 (다양한 애플리케이션 영역별로 구분):

* – OEM 전용 제품

버전 기능 및 사양

[편집]
기능 지원 (나열되지 않은 기능은 모든 컴퓨팅 기능에서 지원) 컴퓨팅 기능 (버전)
1.0, 1.1 1.2, 1.3 2.x 3.0 3.2 3.5, 3.7, 5.x, 6.x, 7.0, 7.2 7.5 8.x 9.0, 10.x, 12.x
워프 투표 함수 (__all(), __any()) 아니요
워프 투표 함수 (__ballot()) 아니요
메모리 펜스 함수 (__threadfence_system())
동기화 함수 (__syncthreads_count(), __syncthreads_and(), __syncthreads_or())
서피스 함수
스레드 블록의 3D 그리드
워프 셔플 함수 아니요
통합 메모리 프로그래밍
퍼널 시프트 아니요
동적 병렬 처리 아니요
균일 데이터패스[56] 아니요
하드웨어 가속 비동기 복사 아니요
하드웨어 가속 분할 도착/대기 배리어
리덕션 연산을 위한 워프 수준 지원
L2 캐시 상주 관리
가속화된 동적 프로그래밍을 위한 DPX 명령어 아니요
분산 공유 메모리
스레드 블록 클러스터
텐서 메모리 가속기 (TMA) 장치
기능 지원 (나열되지 않은 기능은 모든 컴퓨팅 기능에서 지원) 1.0, 1.1 1.2, 1.3 2.x 3.0 3.2 3.5, 3.7, 5.x, 6.x, 7.0, 7.2 7.5 8.x 9.0, 10.x, 12.x
컴퓨팅 기능 (버전)

[57]

데이터 유형

[편집]

부동소수점 유형

[편집]
데이터 유형 지원 벡터 유형 저장 길이 비트
(전체 벡터)
사용 길이 비트
(단일 값)
부호 비트 지수 비트 가수 비트 비고
E2M1 = FP4 e2m1x2 / e2m1x4 8 / 16 4 1 2 1
E2M3 = FP6 변형 e2m3x2 / e2m3x4 16 / 32 6 1 2 3
E3M2 = FP6 변형 e3m2x2 / e3m2x4 16 / 32 6 1 3 2
UE4M3 ue4m3 8 7 0 4 3 스케일링에 사용 (E2M1만 해당)
E4M3 = FP8 변형 e4m3 / e4m3x2 / e4m3x4 8 / 16 / 32 8 1 4 3
E5M2 = FP8 변형 e5m2 / e5m2x2 / e5m2x4 8 / 16 / 32 8 1 5 2 FP16의 지수/범위, 8비트에 들어감
UE8M0 ue8m0x2 16 8 0 8 0 스케일링에 사용 (모든 FP4 또는 FP6 또는 FP8 형식)
FP16 f16 / f16x2 16 / 32 16 1 5 10
BF16 bf16 / bf16x2 16 / 32 16 1 8 7 FP32의 지수/범위, 16비트에 들어감
TF32 tf32 32 19 1 8 10 FP32의 지수/범위, FP16의 가수/정밀도
FP32 f32 / f32x2 32 / 64 32 1 8 23
FP64 f64 64 64 1 11 52

버전 지원

[편집]
데이터 유형 기본 연산 지원 시작
원자적 연산 전역 메모리 지원 시작
공유 메모리 지원 시작
8비트 정수
부호 있는/없는
로딩, 저장, 변환 1.0 빈칸 빈칸
16비트 정수
부호 있는/없는
일반 연산 1.0 atomicCAS() 3.5
32비트 정수
부호 있는/없는
일반 연산 1.0 원자적 함수 1.1 1.2
64비트 정수
부호 있는/없는
일반 연산 1.0 원자적 함수 1.2 2.0
모든 128비트 간단히 복사 가능한 유형 일반 연산 아니요 atomicExch, atomicCAS 9.0
16비트 부동소수점
FP16
덧셈, 뺄셈,
곱셈, 비교,
워프 셔플 함수, 변환
5.3 half2 원자적 덧셈 6.0
원자적 덧셈 7.0
16비트 부동소수점
BF16
덧셈, 뺄셈,
곱셈, 비교,
워프 셔플 함수, 변환
8.0 원자적 덧셈 8.0
32비트 부동소수점 일반 연산 1.0 atomicExch() 1.1 1.2
원자적 덧셈 2.0
32비트 부동소수점 float2 및 float4 일반 연산 아니요 원자적 덧셈 9.0
64비트 부동소수점 일반 연산 1.3 원자적 덧셈 6.0

참고: 누락된 줄이나 빈 항목은 해당 항목에 대한 정보 부족을 나타낸다.[58]

텐서 코어

[편집]
텐서 코어당 사이클당 FMA[59] 지원 시작 7.0 7.2 7.5 워크스테이션 7.5 데스크톱 8.0 8.6 워크스테이션 8.7 8.6 데스크톱 8.9 데스크톱 8.9 워크스테이션 9.0 10.0 10.1 12.0
데이터 유형 조밀 행렬용 희소 행렬용 1세대 (8x/SM) 1세대? (8x/SM) 2세대 (8x/SM) 3세대 (4x/SM) 4세대 (4x/SM) 5세대 (4x/SM)
1비트 값 (AND) 8.0 (실험적) 아니요 아니요 4096 2048 속도 미정
1비트 값 (XOR) 7.5–8.9 (실험적) 아니요 1024 Deprecated 또는 제거?
4비트 정수 8.0–8.9 (실험적) 256 1024 512
4비트 부동소수점 FP4 (E2M1) 10.0 아니요 4096 미정 512
6비트 부동소수점 FP6 (E3M2 및 E2M3) 10.0 아니요 2048 미정
8비트 정수 7.2 8.0 아니요 128 128 512 256 1024 2048 256
FP16 누적을 사용하는 8비트 부동소수점 FP8 (E4M3 및 E5M2) 8.9 아니요 256
FP32 누적을 사용하는 8비트 부동소수점 FP8 (E4M3 및 E5M2) 128 128
FP16 누적을 사용하는 16비트 부동소수점 FP16 7.0 8.0 64 64 64 256 128 512 1024 128
FP32 누적을 사용하는 16비트 부동소수점 FP16 32 64 128 64
FP32 누적을 사용하는 16비트 부동소수점 BF16 7.5[60] 8.0 아니요 64[61]
32비트 (19비트 사용) 부동소수점 TF32 속도 미정 (32?)[61] 128 32 64 256 512 32
64비트 부동소수점 8.0 아니요 아니요 16 속도 미정 32 16 미정

참고: 누락된 줄이나 빈 항목은 해당 항목에 대한 정보 부족을 나타낸다.[62][63] [64] [65] [66] [67]

텐서 코어 구성 7.0 7.2, 7.5 8.0, 8.6 8.7 8.9 9.0
FP16 단위의 점곱 유닛 폭 (바이트)[68][69][70][71] 4 (8) 8 (16) 4 (8) 16 (32)
텐서 코어당 점곱 유닛 수 16 32
SM 파티션당 텐서 코어 수 2 1
SM 파티션당 전체 처리량 (바이트/사이클)[72][73] 256 512 256 1024
FP 텐서 코어: 워프 단위 행렬 계산을 위한 최소 사이클 8 4 8
FP 텐서 코어: 전체 처리량을 위한 최소 행렬 형태 (바이트)[74] 2048
INT 텐서 코어: 워프 단위 행렬 계산을 위한 최소 사이클 아니요 4
INT 텐서 코어: 전체 처리량을 위한 최소 행렬 형태 (바이트) 아니요 1024 2048 1024

[75][76][77][78]

FP64 텐서 코어 구성 8.0 8.6 8.7 8.9 9.0
FP64 단위의 점곱 유닛 폭 (바이트) 4 (32) 미정 4 (32)
텐서 코어당 점곱 유닛 수 4 미정 8
SM 파티션당 텐서 코어 수 1
SM 파티션당 전체 처리량 (바이트/사이클)[72][73] 128 미정 256
워프 단위 행렬 계산을 위한 최소 사이클 16 미정
전체 처리량을 위한 최소 행렬 형태 (바이트)[74] 2048

기술 사양

[편집]
기술 사양 컴퓨팅 기능 (버전)
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 8.9 9.0 10.x 12.x
장치당 최대 상주 그리드 수
(동시 커널 실행, 특정 장치에서는 더 낮을 수 있음)
1 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
워프 크기 32
멀티프로세서당 최대 상주 블록 수 8 16 32 16 32 16 24 32
멀티프로세서당 최대 상주 워프 수 24 32 48 64 32 64 48 64 48
멀티프로세서당 최대 상주 스레드 수 768 1024 1536 2048 1024 2048 1536 2048 1536
멀티프로세서당 32비트 일반 레지스터 수 8 K 16 K 32 K 64 K 128 K 64 K
멀티프로세서당 32비트 균일 레지스터 수 아니요 2 K[79]

[80]

스레드 블록당 최대 32비트 레지스터 수 8 K 16 K 32 K 64 K 32 K 64 K 32 K 64 K 32 K 64 K
스레드당 최대 32비트 일반 레지스터 수 124 63 255
워프당 최대 32비트 균일 레지스터 수 아니요 63[79]

[81]

멀티프로세서당 공유 메모리 양
(전체 공유 메모리 + L1 캐시 중에서, 해당되는 경우)
16 KiB 16 / 48 KiB (64 KiB 중) 16 / 32 / 48 KiB (64 KiB 중) 80 / 96 / 112 KiB (128 KiB 중) 64 KiB 96 KiB 64 KiB 96 KiB 64 KiB 0 / 8 / 16 / 32 / 64 / 96 KiB (128 KiB 중) 32 / 64 KiB (96 KiB 중) 0 / 8 / 16 / 32 / 64 / 100 / 132 / 164 KiB (192 KiB 중) 0 / 8 / 16 / 32 / 64 / 100 KiB (128 KiB 중) 0 / 8 / 16 / 32 / 64 / 100 / 132 / 164 KiB (192 KiB 중) 0 / 8 / 16 / 32 / 64 / 100 KiB (128 KiB 중) 0 / 8 / 16 / 32 / 64 / 100 / 132 / 164 / 196 / 228 KiB (256 KiB 중) 0 / 8 / 16 / 32 / 64 / 100 KiB (128 KiB 중)
스레드 블록당 최대 공유 메모리 양 16 KiB 48 KiB 96 KiB 48 KiB 64 KiB 163 KiB 99 KiB 163 KiB 99 KiB 227 KiB 99 KiB
공유 메모리 뱅크 수 16 32
스레드당 로컬 메모리 양 16 KiB 512 KiB
CUDA C/C++로 접근 가능한 상수 메모리 크기
(1개 뱅크, PTX는 11개 뱅크 접근 가능, SASS는 18개 뱅크 접근 가능)
64 KiB
상수 메모리용 멀티프로세서당 캐시 작업 세트 8 KiB 4 KiB 8 KiB
텍스처 메모리용 멀티프로세서당 캐시 작업 세트 TPC당 16 KiB TPC당 24 KiB 12 KiB 12 – 48 KiB[82] 24 KiB 48 KiB 32 KiB[83] 24 KiB 48 KiB 24 KiB 32 – 128 KiB 32 – 64 KiB 28 – 192 KiB 28 – 128 KiB 28 – 192 KiB 28 – 128 KiB 28 – 256 KiB
CUDA 배열에 바인딩된 1D 텍스처 참조의 최대 너비
8192 65536 131072
선형 메모리에 바인딩된 1D 텍스처 참조의 최대 너비
227 228 227 228 227 228
1D 계층형 텍스처 참조의 최대 너비 및 계층 수
8192 × 512 16384 × 2048 32768 x 2048
CUDA 배열에 바인딩된 2D 텍스처 참조의 최대 너비 및 높이
65536 × 32768 65536 × 65535 131072 x 65536
선형 메모리에 바인딩된 2D 텍스처 참조의 최대 너비 및 높이
65000 x 65000 65536 x 65536 131072 x 65000
텍스처 수집을 지원하는 CUDA 배열에 바인딩된 2D 텍스처 참조의 최대 너비 및 높이
빈칸 16384 x 16384 32768 x 32768
2D 계층형 텍스처 참조의 최대 너비, 높이 및 계층 수
8192 × 8192 × 512 16384 × 16384 × 2048 32768 x 32768 x 2048
선형 메모리 또는 CUDA 배열에 바인딩된 3D 텍스처 참조의 최대 너비, 높이 및 깊이
20483 40963 163843
큐브맵 텍스처 참조의 최대 너비 (및 높이) 빈칸 16384 32768
큐브맵 계층형 텍스처 참조의 최대 너비 (및 높이) 및 계층 수
빈칸 16384 × 2046 32768 × 2046
커널에 바인딩될 수 있는 최대 텍스처 수
128 256
CUDA 배열에 바인딩된 1D 서피스 참조의 최대 너비
지원 안됨 65536 16384 32768
1D 계층형 서피스 참조의 최대 너비 및 계층 수
65536 × 2048 16384 × 2048 32768 × 2048
CUDA 배열에 바인딩된 2D 서피스 참조의 최대 너비 및 높이
65536 × 32768 16384 × 65536 131072 × 65536
2D 계층형 서피스 참조의 최대 너비, 높이 및 계층 수
65536 × 32768 × 2048 16384 × 16384 × 2048 32768 × 32768 × 2048
CUDA 배열에 바인딩된 3D 서피스 참조의 최대 너비, 높이 및 깊이
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만
스레드 블록 클러스터당 최대 스레드 블록 수[84] 아니요 16 8
기술 사양 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 8.9 9.0 10.x 12.x
컴퓨팅 기능 (버전)

엔비디아 CUDA C++ 프로그래밍 가이드에서 더 많은 정보를 읽을 수 있다.[85]

멀티프로세서 아키텍처

[편집]
아키텍처 사양 컴퓨팅 기능 (버전)
1.0 1.1 1.2 1.3 2.0 2.1 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 8.9 9.0 10.x 12.x
INT32 산술 연산용 ALU 레인 수 8 32 48 192[86] 128 128 64 128 128 64 64 64 128
모든 INT32 또는 FP32 산술 연산용 ALU 레인 수 빈칸 빈칸
FP32 산술 연산용 ALU 레인 수 64 64 128 128
FP16x2 산술 연산용 ALU 레인 수 아니요 1 128[87] 128[88] 64[89]
FP64 산술 연산용 ALU 레인 수 아니요 1 FP32 16개[90] FP32 4개[91] 8 8 / 64[92] 64 4[93] 32 4 32 2 32 2 64 2
부하/저장 장치 수 SM 2개당 4개 SM 2개당 8개 SM 2개당 8개 / SM 3개당 8개[92] SM 3개당 8개 16 32 16 32 16 32
단정밀도 부동소수점 초월 함수용 특수 함수 장치 수 2[94] 4 8 32 16 32 16
텍스처 매핑 장치 (TMU) 수 SM 2개당 4개 SM 2개당 8개 SM 2개/3개당 8개[92] SM 3개당 8개 4 4 / 8[92] 16 8 16 8 4
균일 INT32 산술 연산용 ALU 레인 수 아니요 2[95]
텐서 코어 수 아니요 8 (1세대)[96] 0 / 8[92] (2세대) 4 (3세대) 4 (4세대)
레이 트레이싱 코어 수 아니요 0 / 1[92] (1세대) 아니요 1 (2세대) 아니요 1 (3세대) 아니요
SM 파티션 수 = 처리 블록[97] 1 4 2 4
SM 파티션당 워프 스케줄러 수 1 2 4 1
단일 스케줄러가 매 사이클마다 발행하는 최대 새 명령어 수[98] 2[99] 1 2[100] 2 1
데이터 캐시 및 공유 메모리용 통합 메모리 크기 16 KiB[101] 16 KiB[101] 64 KiB 128 KiB 64 KiB SM + 24 KiB L1 (별도)[102] 96 KiB SM + 24 KiB L1 (별도)[102] 64 KiB SM + 24 KiB L1 (별도)[102] 64 KiB SM + 24 KiB L1 (별도)[102] 96 KiB SM + 24 KiB L1 (별도)[102] 64 KiB SM + 24 KiB L1 (별도)[102] 128 KiB 96 KiB[103] 192 KiB 128 KiB 192 KiB 128 KiB 256 KiB
GPU당 L3 명령어 캐시 크기 32 KiB[104] L2 데이터 캐시 사용
텍스처 프로세서 클러스터 (TPC)당 L2 명령어 캐시 크기 8 KiB
SM당 L1.5 명령어 캐시 크기[105] 4 KiB 32 KiB 32 KiB 48 KiB[83] 128 KiB 32 KiB 128 KiB ~46 KiB[106] 128 KiB[107]
SM당 L1 명령어 캐시 크기 8 KiB 8 KiB
SM 파티션당 L0 명령어 캐시 크기 SM당 파티션 1개만 해당 아니요 12 KiB 16 KiB?[108] 32 KiB
명령어 너비[105] 32비트 명령어 및 64비트 명령어[109] 64비트 명령어 + 7개 명령어당 64비트 제어 로직 64비트 명령어 + 3개 명령어당 64비트 제어 로직 128비트 결합 명령어 및 제어 로직
메모리 파티션당 메모리 버스 너비 (비트) 64 ((G)DDR) 32 ((G)DDR) 512 (HBM) 32 ((G)DDR) 512 (HBM) 32 ((G)DDR) 512 (HBM) 32 ((G)DDR) 512 (HBM) 32 ((G)DDR)
메모리 파티션당 L2 캐시 16 KiB[110] 32 KiB[110] 128 KiB 256 KiB 1 MiB 512 KiB 128 KiB 512 KiB 256 KiB 128 KiB 768 KiB 64 KiB 512 KiB 4 MiB 512 KiB 8 MiB[111] 5 MiB 6.25 MiB 8 MiB[112]
메모리 파티션당 (또는 이후 모델의 GPC당) 렌더 출력 장치 (ROP) 수 4 8 4 8 16 8 12 8 4 16 2 8 16 GPC당 16개 GPC당 3개 GPC당 16개
아키텍처 사양 1.0 1.1 1.2 1.3 2.0 2.1 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 8.9 9.0 10.x 12.x
컴퓨팅 기능 (버전)

CUDA 아키텍처 사용례

[편집]

경쟁사와의 비교

[편집]

CUDA는 다른 GPU 컴퓨팅 스택인 인텔 OneAPIAMD ROCm과 경쟁한다.

엔비디아의 CUDA는 클로즈드 소스인 반면, 인텔의 OneAPI와 AMD의 ROCm은 오픈 소스이다.

인텔 OneAPI

[편집]

oneAPI는 여러 하드웨어 아키텍처를 위한 소프트웨어 개발을 지원하기 위해 만들어진 오픈 표준 기반의 이니셔티브이다.[115] oneAPI 라이브러리는 특별 관심 그룹에서 공개적으로 논의되는 오픈 사양을 구현해야 하며, 모든 개발자 또는 조직이 자신만의 oneAPI 라이브러리 버전을 구현할 가능성을 제공한다.[116][117]

원래 인텔에서 만들었으며, 다른 하드웨어 채택자로는 후지쓰와 화웨이가 있다.

UXL (Unified Acceleration Foundation)

[편집]

UXL (Unified Acceleration Foundation)은 엔비디아의 CUDA에 대한 오픈 대안을 제공하는 것을 목표로 워킹 그룹 및 특별 관심 그룹 (SIG)을 통해 새로운 오픈 표준 가속기 소프트웨어 생태계, 관련 오픈 표준 및 사양 프로젝트를 지속적으로 개발하기 위해 노력하는 새로운 기술 컨소시엄이다. 주요 참여 기업은 인텔, 구글, ARM, 퀄컴, 삼성, 이매지네이션, 그리고 VMware이다.[118]

AMD ROCm

[편집]

ROCm[119]AMD (Advanced Micro Devices)의 그래픽 처리 장치 (GPU) 프로그래밍을 위한 오픈 소스 소프트웨어 스택이다.

같이 보기

[편집]

각주

[편집]
  1. Shah, Agam. “Nvidia not totally against third parties making CUDA chips”. 《www.theregister.com》 (영어). 2024년 4월 25일에 확인함. 
  2. “Nvidia CUDA Home Page”. 2017년 7월 18일. 
  3. Shimpi, Anand Lal; Wilson, Derek (2006년 11월 8일). “Nvidia's GeForce 8800 (G80): GPUs Re-architected for DirectX 10”. AnandTech. 2015년 5월 16일에 확인함. 
  4. “Introduction — nsight-visual-studio-edition 12.6 documentation”. 《docs.nvidia.com》. 2024년 10월 10일에 확인함. 
  5. Abi-Chahla, Fedy (2008년 6월 18일). “Nvidia's CUDA: The End of the CPU?”. Tom's Hardware. 2015년 5월 17일에 확인함. 
  6. Zunitch, Peter (2018년 1월 24일). “CUDA vs. OpenCL vs. OpenGL”. 《Videomaker》 (미국 영어). 2018년 9월 16일에 확인함. 
  7. “OpenCL”. 《NVIDIA Developer》 (영어). 2013년 4월 24일. 2019년 11월 4일에 확인함. 
  8. Witt, Stephen (2023년 11월 27일). “How Jensen Huang's Nvidia Is Powering the A.I. Revolution”. 《The New Yorker》 (미국 영어). ISSN 0028-792X. 2023년 12월 10일에 확인함. 
  9. “CUDA LLVM Compiler”. 2012년 5월 7일. 
  10. First OpenCL demo on a GPU - 유튜브
  11. DirectCompute Ocean Demo Running on Nvidia CUDA-enabled GPU - 유튜브
  12. Vasiliadis, Giorgos; Antonatos, Spiros; Polychronakis, Michalis; Markatos, Evangelos P.; Ioannidis, Sotiris (September 2008). 〈Gnort: High Performance Network Intrusion Detection Using Graphics Processors〉 (PDF). 《Recent Advances in Intrusion Detection》. Lecture Notes in Computer Science 5230. 116–134쪽. doi:10.1007/978-3-540-87403-4_7. ISBN 978-3-540-87402-7. 
  13. 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. 
  14. 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. 
  15. “Pyrit – Google Code”. 
  16. “Use your Nvidia GPU for scientific computing”. BOINC. 2008년 12월 18일. 2008년 12월 28일에 원본 문서에서 보존된 문서. 2017년 8월 8일에 확인함. 
  17. “Nvidia CUDA Software Development Kit (CUDA SDK) – Release Notes Version 2.0 for MAC OS X”. 2009년 1월 6일에 원본 문서에서 보존된 문서. 
  18. “CUDA 1.1 – Now on Mac OS X”. 2008년 2월 14일. 2008년 11월 22일에 원본 문서에서 보존된 문서. 
  19. “CUDA 11 Features Revealed”. 2020년 5월 14일. 
  20. “CUDA Toolkit 11.1 Introduces Support for GeForce RTX 30 Series and Quadro RTX Series GPUs”. 2020년 9월 23일. 
  21. “Enhancing Memory Allocation with New NVIDIA CUDA 11.2 Features”. 2020년 12월 16일. 
  22. “Exploring the New Features of CUDA 11.3”. 2021년 4월 16일. 
  23. 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》 (PDF). Proceedings of the 22nd annual international conference on Supercomputing – ICS '08. 309–318쪽. doi:10.1145/1375527.1375572. ISBN 978-1-60558-158-3. 
  24. “CUDA C Programming Guide v8.0” (PDF). 《nVidia Developer Zone》. January 2017. 19쪽. 2017년 3월 22일에 확인함. 
  25. “NVCC forces c++ compilation of .cu files”. 2011년 11월 29일. 
  26. Whitehead, Nathan; Fit-Florea, Alex. “Precision & Performance: Floating Point and IEEE 754 Compliance for Nvidia GPUs” (PDF). Nvidia. 2014년 11월 18일에 확인함. 
  27. “CUDA-Enabled Products”. 《CUDA Zone》. Nvidia Corporation. 2008년 11월 3일에 확인함. 
  28. “Coriander Project: Compile CUDA Codes To OpenCL, Run Everywhere”. Phoronix. 
  29. Perkins, Hugh (2017). “cuda-on-cl” (PDF). IWOCL. 2017년 8월 8일에 확인함. 
  30. “hughperkins/coriander: Build NVIDIA® CUDA™ code for OpenCL™ 1.2 devices”. GitHub. 2019년 5월 6일. 
  31. “CU2CL Documentation”. 《chrec.cs.vt.edu》. 
  32. “GitHub – vosen/ZLUDA”. 《GitHub》. 
  33. Larabel, Michael (2024년 2월 12일), “AMD Quietly Funded A Drop-In CUDA Implementation Built On ROCm: It's Now Open-Source”, 《Phoronix》 (영어), 2024년 2월 12일에 확인함 
  34. “GitHub – chip-spv/chipStar”. 《GitHub》. 
  35. “PyCUDA”. 
  36. “pycublas”. 2009년 4월 20일에 원본 문서에서 보존된 문서. 2017년 8월 8일에 확인함. 
  37. “CuPy” (영어). 2020년 1월 8일에 확인함. 
  38. “NVIDIA CUDA Programming Guide. Version 1.0” (PDF). 2007년 6월 23일. 
  39. “NVIDIA CUDA Programming Guide. Version 2.1” (PDF). 2008년 12월 8일. 
  40. “NVIDIA CUDA Programming Guide. Version 2.2” (PDF). 2009년 4월 2일. 
  41. “NVIDIA CUDA Programming Guide. Version 2.2.1” (PDF). 2009년 5월 26일. 
  42. “NVIDIA CUDA Programming Guide. Version 2.3.1” (PDF). 2009년 8월 26일. 
  43. “NVIDIA CUDA Programming Guide. Version 3.0” (PDF). 2010년 2월 20일. 
  44. “NVIDIA CUDA C Programming Guide. Version 3.1.1” (PDF). 2010년 7월 21일. 
  45. “NVIDIA CUDA C Programming Guide. Version 3.2” (PDF). 2010년 11월 9일. 
  46. “CUDA 11.0 Release Notes”. 《NVIDIA Developer》. 
  47. “CUDA 11.1 Release Notes”. 《NVIDIA Developer》. 
  48. “CUDA 11.5 Release Notes”. 《NVIDIA Developer》. 
  49. “CUDA 11.8 Release Notes”. 《NVIDIA Developer》. 
  50. “NVIDIA Quadro NVS 420 Specs”. 《TechPowerUp GPU Database》. 2023년 8월 25일. 
  51. Larabel, Michael (2017년 3월 29일). “NVIDIA Rolls Out Tegra X2 GPU Support In Nouveau”. Phoronix. 2017년 8월 8일에 확인함. 
  52. Nvidia Xavier Specs on TechPowerUp (preliminary)
  53. “Welcome — Jetson LinuxDeveloper Guide 34.1 documentation”. 
  54. “NVIDIA Bringing up Open-Source Volta GPU Support for Their Xavier SoC”. 
  55. “NVIDIA Ada Lovelace Architecture”. 
  56. Dissecting the Turing GPU Architecture through Microbenchmarking
  57. “H.1. Features and Technical Specifications – Table 13. Feature Support per Compute Capability”. 《docs.nvidia.com》 (미국 영어). 2020년 9월 23일에 확인함. 
  58. “CUDA C++ Programming Guide”. 
  59. 실제로 실행되는 퓨즈드 곱셈-덧셈, 조밀 행렬
  60. 7.5부터 SASS로, 8.0부터 PTX로
  61. SASS에서 비공식 지원
  62. “Technical brief. NVIDIA Jetson AGX Orin Series” (PDF). 《nvidia.com》. 2023년 9월 5일에 확인함. 
  63. “NVIDIA Ampere GA102 GPU Architecture” (PDF). 《nvidia.com》. 2023년 9월 5일에 확인함. 
  64. Luo, Weile; Fan, Ruibo; Li, Zeyu; Du, Dayou; Wang, Qiang; Chu, Xiaowen (2024). “Benchmarking and Dissecting the Nvidia Hopper GPU Architecture”. arXiv:2402.13499v1 [cs.AR]. 
  65. “Datasheet NVIDIA A40” (PDF). 《nvidia.com》. 2024년 4월 27일에 확인함. 
  66. “NVIDIA AMPERE GA102 GPU ARCHITECTURE” (PDF). 2024년 4월 27일. 
  67. “Datasheet NVIDIA L40” (PDF). 2024년 4월 27일. 
  68. 화이트페이퍼에서 텐서 코어 큐브 다이어그램은 점곱 유닛 폭을 높이 (볼타 및 튜링은 4 FP16, A100은 8 FP16, GA102는 4 FP16, GH100은 16 FP16)로 나타낸다. 다른 두 차원은 점곱 유닛의 수 (볼타 및 튜링은 4x4 = 16, 암페어 및 호퍼는 8x4 = 32)를 나타낸다. 결과 회색 블록은 사이클당 FP16 FMA 연산이다. 텐서 코어가 없는 파스칼은 속도 비교를 위해 표시되며, 비 FP16 데이터 유형을 사용하는 볼타 V100도 마찬가지이다.
  69. “NVIDIA Turing Architecture Whitepaper” (PDF). 《nvidia.com》. 2023년 9월 5일에 확인함. 
  70. “NVIDIA Tensor Core GPU” (PDF). 《nvidia.com》. 2023년 9월 5일에 확인함. 
  71. “NVIDIA Hopper Architecture In-Depth”. 2022년 3월 22일. 
  72. 형태 x 변환된 피연산자 크기, 예: 2 텐서 코어 x 4x4x4xFP16/사이클 = 256 바이트/사이클
  73. = 처음 3개 표 행의 곱
  74. = 이전 2개 표 행의 곱; 형태: 예: 8x8x4xFP16 = 512 바이트
  75. Sun, Wei; Li, Ang; Geng, Tong; Stuijk, Sander; Corporaal, Henk (2023). 《Dissecting Tensor Cores via Microbenchmarks: Latency, Throughput and Numeric Behaviors》. 《IEEE Transactions on Parallel and Distributed Systems》 34. 246–261쪽. arXiv:2206.02874. doi:10.1109/tpds.2022.3217824. S2CID 249431357. 
  76. “Parallel Thread Execution ISA Version 7.7”. 
  77. Raihan, Md Aamir; Goli, Negar; Aamodt, Tor (2018). “Modeling Deep Learning Accelerator Enabled GPUs”. arXiv:1811.08309 [cs.MS]. 
  78. “NVIDIA Ada Lovelace Architecture”. 
  79. Jia, Zhe; Maggioni, Marco; Smith, Jeffrey; Daniele Paolo Scarpazza (2019). “Dissecting the NVidia Turing T4 GPU via Microbenchmarking”. arXiv:1903.07486 [cs.DC]. 
  80. Burgess, John (2019). 〈RTX ON – The NVIDIA TURING GPU〉. 《2019 IEEE Hot Chips 31 Symposium (HCS)》. 1–27쪽. doi:10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8. S2CID 204822166. 
  81. Burgess, John (2019). 〈RTX ON – The NVIDIA TURING GPU〉. 《2019 IEEE Hot Chips 31 Symposium (HCS)》. 1–27쪽. doi:10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8. S2CID 204822166. 
  82. 장치에 따라 다름
  83. “Tegra X1”. 2015년 1월 9일. 
  84. NVIDIA H100 Tensor Core GPU Architecture
  85. “CUDA C++ Programming Guide, Compute Capabilities”. 《docs.nvidia.com》 (미국 영어). 2025년 2월 6일에 확인함. 
  86. 프로그래밍 가이드에 따르면 160개의 정수 명령어만 실행할 수 있음
  87. [1]에 따르면 128. 64는 FP32 + 64는 별도 단위?
  88. 64는 FP32 코어, 64는 유연한 FP32/INT 코어
  89. “CUDA C++ Programming Guide”. 
  90. 32개의 FP32 레인이 16개의 FP64 레인으로 결합. 모델에 따라 낮을 수 있음
  91. 16개의 FP32 레인만 지원하며, 4개의 FP64 레인으로 결합
  92. 모델에 따라 다름
  93. 실제 속도이며, 아마도 FP32 포트를 통해 이루어짐. 실제 FP64 코어에 대한 설명 없음
  94. 정수 덧셈 및 비교에도 사용할 수 있음
  95. SM 파티션당 2클럭 사이클/명령어 Burgess, John (2019). 〈RTX ON – The NVIDIA TURING GPU〉. 《2019 IEEE Hot Chips 31 Symposium (HCS)》. 1–27쪽. doi:10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8. S2CID 204822166. 
  96. Durant, Luke; Giroux, Olivier; Harris, Mark; Stam, Nick (2017년 5월 10일). “Inside Volta: The World's Most Advanced Data Center GPU”. 《Nvidia developer blog》. 
  97. 스케줄러와 디스패처는 페르미와 케플러와 달리 전용 실행 장치를 가지고 있다.
  98. 디스패칭은 동시에 중첩될 수 있다 (SM 파티션당 실행 장치가 32개 미만일 때).
  99. MAD 파이프 및 SFU 파이프를 이중 발행할 수 있음
  100. 하나의 스케줄러만 한 번에 2개의 명령어를 발행할 수 있음. 첫 번째 스케줄러는 홀수 ID를 가진 워프를 담당. 두 번째 스케줄러는 짝수 ID를 가진 워프를 담당.
  101. 공유 메모리만 해당, 데이터 캐시 없음
  102. 공유 메모리는 별도이지만 L1에는 텍스처 캐시 포함
  103. “H.6.1. Architecture”. 《docs.nvidia.com》 (미국 영어). 2019년 5월 13일에 확인함. 
  104. “Demystifying GPU Microarchitecture through Microbenchmarking” (PDF). 
  105. Jia, Zhe; Maggioni, Marco; Staiger, Benjamin; Scarpazza, Daniele P. (2018). “Dissecting the NVIDIA Volta GPU Architecture via Microbenchmarking”. arXiv:1804.06826 [cs.DC]. 
  106. Jia, Zhe; Maggioni, Marco; Smith, Jeffrey; Daniele Paolo Scarpazza (2019). “Dissecting the NVidia Turing T4 GPU via Microbenchmarking”. arXiv:1903.07486 [cs.DC]. 
  107. “Dissecting the Ampere GPU Architecture through Microbenchmarking”. 
  108. 참고: Jia, Zhe; Maggioni, Marco; Smith, Jeffrey; Daniele Paolo Scarpazza (2019). “Dissecting the NVidia Turing T4 GPU via Microbenchmarking”. arXiv:1903.07486 [cs.DC].  에서는 SM 파티션당 2 KiB L0 명령어 캐시와 SM당 16 KiB L1 명령어 캐시라고 주장하며 이와 불일치함
  109. “asfermi Opcode”. 《GitHub》. 
  110. 텍스처 엔진으로만 접근 가능
  111. RTX 4060, RTX 4070, RTX 4070 Ti, RTX 4090에서 25% 비활성화
  112. RTX 5070 Ti, RTX 5090에서 25% 비활성화
  113. “nVidia CUDA Bioinformatics: BarraCUDA”. 《BioCentric》 (영어). 2019년 7월 19일. 2019년 10월 15일에 확인함. 
  114. “Part V: Physics Simulation”. 《NVIDIA Developer》 (영어). 2020년 9월 11일에 확인함. 
  115. “oneAPI Programming Model”. 《oneAPI.io》 (미국 영어). 2024년 7월 27일에 확인함. 
  116. “Specifications | oneAPI”. 《oneAPI.io》 (미국 영어). 2024년 7월 27일에 확인함. 
  117. “oneAPI Specification — oneAPI Specification 1.3-rev-1 documentation”. 《oneapi-spec.uxlfoundation.org》. 2024년 7월 27일에 확인함. 
  118. “Exclusive: Behind the plot to break Nvidia's grip on AI by targeting software”. 《로이터. 2024년 4월 5일에 확인함. 
  119. “Question: What does ROCm stand for? · Issue #1628 · RadeonOpenCompute/ROCm”. 《Github.com》. 2022년 1월 18일에 확인함. 
  1. 제이슨 샌더스, 에드워드 캔드롯 저, 박춘언 역, 예제로 배우는 CUDA 프로그래밍(입문자를 위한 GPGPU 프로그래밍의 기초), ISBN 9788994774060.
  2. Farber, Rob 저, CUDA Application Design and Development, ISBN 9780123884268.
  3. Hwu, Wen-Mei 저, GPU Computing GEMs - Jade Edition, ISBN 9780123859631.

외부 링크

[편집]