{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name = 쿠다<br />CUDA
| 로고 = 
| screenshot = 
| caption = 다중 코어 프로그래밍 언어
| developer = [[엔비디아]]
| released = {{시작 날짜와 나이|2007|06|23}}
| latest_release_version = 12.6
| latest_release_date = {{시작 날짜와 나이|2024|08|01}}
| operating_system = [[윈도우 XP]] 이상<br />[[macOS]]<br />[[리눅스]]
| platform = 아래의 지원 GPU 참고
| genre = [[GPGPU]]
| license = [[프리웨어]]
| website = {{URL|https://developer.nvidia.com/cuda-zone}}
}}
[[파일:CUDA processing flow (En).PNG|섬네일|300px|오른쪽|'''CUDA 처리 흐름의 예'''<br />1. 메인 메모리를 GPU 메모리로 복사<br />2. CPU가 GPU에 프로세스를 지시함<br />3. GPU가 각 코어에 병렬 수행<br />4. GPU 메모리로부터의 결과물을 메인 메모리에 복사]]
'''CUDA'''("Compute Unified Device Architecture", 쿠다)는 [[그래픽 처리 장치]](GPU)에서 수행하는 (병렬 처리) 알고리즘을 C 프로그래밍 언어를 비롯한 산업 표준 언어를 사용하여 작성할 수 있도록 하는 [[GPGPU]] 기술이다. CUDA는 [[엔비디아]]가 개발해오고 있으며 이 아키텍처를 사용하려면 엔비디아 GPU와 특별한 스트림 처리 드라이버가 필요하다. CUDA는 G8X GPU로 구성된 지포스 8 시리즈급 이상에서 동작한다. CUDA 플랫폼은 [[컴퓨터 커널]]의 실행을 위해 GPU의 가상 [[명령 집합]]과 병렬 연산 요소들을 직접 접근할 수 있는 소프트웨어 계층이다.<ref name="CUDA intro - TomsHardware">{{웹 인용|url=http://www.tomshardware.com/reviews/nvidia-cuda-gpu,1954.html|title=Nvidia's CUDA: The End of the CPU?|last=Abi-Chahla|first=Fedy|date=June 18, 2008|publisher=Tom's Hardware|accessdate=May 17, 2015}}</ref>

개발자는 패스스케일 오픈64 C 컴파일러로 컴파일 된 '쿠다를 위한 C' (C언어를 엔비디아가 확장한 것)를 사용하여 GPU 상에서 실행시킬 알고리듬을 작성할 수 있다. 쿠다 구조는 일련의 계산 인터페이스를 지원하며 이에는 [[OpenCL]], DirectX Compute가 포함된다. C 언어가 아닌 다른 프로그래밍언어에서의 개발을 위한 래퍼(Wrapper)도 있는데, 현재 [[파이썬]], [[펄]], [[포트란]], [[자바 (프로그래밍 언어)|자바]]와 [[매트랩]] 등을 위한 것들이 있다. 이러한 접근성은 병렬 프로그래밍 전문가들이 GPU 리소스를 쉽게 이용할 수 있게 해주며, 이는 그래픽스 프로그래밍의 고급 기술을 요구하였던 [[Direct3D]]와 [[OpenGL]]과 같은 이전 API 솔루션들과 대비된다. 또, CUDA는 [[OpenACC]]와 [[OpenCL]]과 같은 프로그래밍 프레임워크를 지원한다.<ref name="CUDA intro - TomsHardware" />

최신 드라이버는 모두 필요한 쿠다 콤포넌트를 담고 있다. 쿠다는 모든 엔비디아 GPU (G8X 시리즈 이후)를 지원하며 이 대상에는 [[지포스]], [[엔비디아 쿼드로|쿼드로]], [[테슬라]] 제품군이 포함된다. 엔비디아는 지포스 8 시리즈를 위해 개발된 프로그램들이 수정 없이 모든 미래의 엔비디아 비디오 카드에서 실행될 것이라고 선언하였다.

쿠다를 통해 개발자들은 쿠다 GPU 안 병렬 계산 요소 고유의 명령어 집합과 메모리에 접근할 수 있다. 쿠다를 사용하여 최신 엔비디아 GPU를 효과적으로 개방적으로 사용할 수 있다. 그러나 CPU와는 달리 GPU는 병렬 다수 코어 구조를 가지고 있고, 각 코어는 수천 스레드를 동시에 실행시킬 수 있다. 응용 프로그램이 수행하는 작업(계산)이 이러한 병렬처리연산에 적합할 경우, GPU를 이용함으로써 커다란 성능 향상을 기대할 수 있다.

컴퓨터 게임 업계에서는 그래픽 랜더링에 덧붙여, 그래픽 카드의 게임 물리 계산 (파편, 연기, 불, 유체 등 물리 효과)에 사용되며, 예로는 [[PhysX]]와 [[불렛]]이 있다. 쿠다는 그래픽이 아닌 응용 프로그램, 즉, 계산 생물학, 암호학, 그리고 다른 분야에서 10배 또는 그 이상의 속도 혜택을 가져왔다. 이 한 예는 [[BOINC]] 분산 계산 클라이언트이다.

쿠다는 저수준 API와 고수준 API 모두를 제공한다. 최초의 CUDA SDK는 2007년 2월 15일에 공개되었으며 [[마이크로소프트 윈도우]]와 [[리눅스]]를 지원했다. [[OS X]] 지원은 2.0 버전에 추가되었다.

== 이점 ==
쿠다가 그래픽 API를 사용하는 전통적인 범용 GPU에 비해 가지는 몇 가지 장점은 다음과 같다.
* 흩뿌린 읽기 - 코드가 메모리의 임의 위치에서 데이터를 읽을 수 있다.
* [[공유 메모리]] - 쿠다는 고속 공유 메모리 지역 (16 또는 48KB 크기) 을 드러내어 스레드 간에 나눌 수 있게 해 준다. 이는 사용자 관리 캐시로 사용될 수 있는데, 텍스처 룩업을 이용하는 경우 보다 더 빠른 대역폭이 가능해진다.
* 디바이스 상의 읽기, 쓰기가 호스트보다 더 빠르다.
* 정수와 비트 단위 연산을 충분히 지원한다. 정수 텍스처 룩업이 포함된다.

== 제한 ==
* 재귀호출, [[함수 포인터]]가 없는 C 언어의 하부 집합을 확장하여 사용한다. 그러나 한 개의 처리 장치가 여러 개의 쪼개진 메모리 공간에 대하여 작업하여야 하는 점이 다른 C 언어 실행 환경과 다른 점이다.
* 텍스처 랜더링은 지원 되지 않는다.
* 배정도에 관해서는 IEEE 754 표준과 다르지 않다. 단정도에서는 [[비정규 값]]과 신호 NaN이 지원되지 않고, IEEE [[반올림]] 모드 가운데서는 두 가지만 지원하며, <!--문장의 아래 부분은 오역의 위험이 있음-->이도 명령어에 따라서 지원되는 것으로 제어 단어(Control word)에서 지원 되는 것은 아니다.(이것이 제한점인지는 논란의 대상이 될 수 있다) 그리고 나눗셈과 제곱근의 정밀도가 단정도에 비해 조금 낮다.<!--그렇다면 앞 문장에서 단정도와 배정도에 관한 설명은 각각 어느 부분인지?-->
* CPU와 GPU 사이의 버스 대역폭과 시간 지연에서 병목이 발생할 수 있다.
* 스레드가 최소한 32개씩 모여서 실행되어야 최선의 성능 향상을 얻을 수 있으며, 스레드 수의 합이 수천 개가 되어야 한다.<!--오역일수도 있음--> 프로그램 코드에서의 분기는, 각각의 32 스레드가 같은 실행 경로를 따른다면, 성능에 큰 지장을 주지 않는다. [[SIMD]] 실행 모델은 어떠한 내재적으로 분기하는 임무에게는 심각한 제한이 된다. (예를 들어, 광선 추적 가속 자료 구조)
* 쿠다 기반 GPU는 엔비디아에서만 나온다.

== 지원 GPU ==
CUDA 수준의 지원 GPU 및 카드이다. [http://developer.nvidia.com/cuda-gpus 엔비디아 웹사이트]도 참고할 것:

{| class="wikitable" style="font-size: 85%; text-align: center; width: auto;"
|-
! 연산<br />능력<br />(버전)
! [[마이크로아키텍처|마이크로-<br />아키텍처]]
! GPU
! 지포스
! 쿼드로
! 워크스테이션, 데이터센터
! Tegra, Jetson
|-
| 1.0
| rowspan="4" | [[테슬라 (마이크로아키텍처)|테슬라]]
| G80
|지포스 8800 울트라, 지포스 8800 GTX, 지포스 8800 GTS(G80)
|쿼드로 FX 5600, 쿼드로 FX 4600, 쿼드로 Plex 2100 S4
|테슬라 C870, 테슬라 D870, 테슬라 S870
|
|-
| 1.1
|G92, 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 Low Profile, 쿼드로 NVS 450, 쿼드로 NVS 420, 쿼드로 NVS 290, 쿼드로 NVS 295, 쿼드로 Plex 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, 쿼드로 NVS 295
|
|
|-
|1.2
|GT218, 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 Low Profile, 엔비디아 NVS 300, 쿼드로 FX 1800M, 쿼드로 FX 880M, 쿼드로 FX 380M, 엔비디아 NVS 300, NVS 5100M, NVS 3100M, NVS 2100M, ION
|
|
|-
|1.3
|GT200, GT200b
|지포스 GTX 295, GTX 285, GTX 280, 지포스 GTX 275, 지포스 GTX 260
|쿼드로 FX 5800, 쿼드로 FX 4800, 쿼드로 FX 4800 for Mac, 쿼드로 FX 3800, 쿼드로 CX, 쿼드로 Plex 2200 D2
|테슬라 C1060, 테슬라 S1070, 테슬라 M1060
|
|-
|2.0
|  rowspan="2" | [[페르미 (마이크로아키텍처)|페르미]]
|GF100, GF110
|지포스 GTX 590, 지포스 GTX 580, 지포스 GTX 570, 지포스 GTX 480, 지포스 GTX 470, 지포스 GTX 465, 지포스 GTX 480M
|쿼드로 6000, 쿼드로 5000, 쿼드로 4000, 쿼드로 4000 for Mac, 쿼드로 Plex 7000, 쿼드로 5010M, 쿼드로 5000M
|테슬라 C2075, 테슬라 C2050/C2070, 테슬라 M2050/M2070/M2075/M2090
|
|-
|2.1
|GF104, 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, 쿼드로 410, 쿼드로 4000M, 쿼드로 3000M, 쿼드로 2000M, 쿼드로 1000M, NVS 5400M, NVS 5200M, NVS 4200M, 엔비디아 NVS 315, 엔비디아 NVS 310
|
|
|-
|3.0
|  rowspan="4" | [[케플러 (마이크로아키텍처)|케플러]]
|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 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
|테슬라 K10, GRID K340, GRID K520
|
|-
|3.2
|GK20A
|
|
|
|Tegra K1, Jetson TK1
|-
|3.5
|GK110, GK208
|지포스 GTX 타이탄 Z, 지포스 GTX 타이탄 Black, 지포스 GTX 타이탄,  지포스 GTX 780 Ti, 지포스 GTX 780, 지포스 GT 640 (GDDR5), 지포스 GT 630 v2, 지포스 GT 730, 지포스 GT 720, 지포스 GT 710,지포스 GT 740M (64비트, DDR3)
|쿼드로 K6000, 쿼드로 K5200
|테슬라 K40, 테슬라 K20x, 테슬라 K20
|
|-
|3.7
|GK210
|
|
| 테슬라 K80
|
|-
|5.0
| rowspan="3" | [[맥스웰 (마이크로아키텍처)|맥스웰]]
|GM107, GM108
|지포스 GTX 750 Ti, 지포스 GTX 750, 지포스 GTX 960M, 지포스 GTX 950M, 지포스 940M, 지포스 930M, 지포스 GTX 860M, 지포스 GTX 850M, 지포스 845M, 지포스 840M, 지포스 830M
|쿼드로 K2200, 쿼드로 K1200, 쿼드로 K620, 쿼드로 M2000M, 쿼드로 M1000M, 쿼드로 M600M, 쿼드로 K620M, 엔비디아 NVS 810
|
|
|-
|5.2
|GM200, 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, 테슬라 M60
|
|-
|5.3
|GM20B
|
|
|
|Tegra X1, Jetson TX1, Jetson Nano
|-
|6.0
| rowspan="3" |[[파스칼 (마이크로아키텍처)|파스칼]]
|GP100
|
|쿼드로 GP100
| 테슬라 P100
|
|-
|6.1
|GP102, GP104, GP106,
GP107,

GP108
|엔비디아 타이탄 X, 지포스 GTX 1080, 지포스 GTX 1070, 지포스 GTX 1070 Ti, 지포스 GTX 1060, 지포스 GTX 1050 Ti, 지포스 GTX 1050
|쿼드로 P6000, 쿼드로 P5000, 쿼드로 P4000, 쿼드로 P2200, 쿼드로 P2000, 쿼드로 1000, 쿼드로 P620, 쿼드로 P600, 쿼드로 P400
|테슬라 P40, 테슬라 P4
|
|-
|6.2
|GP10B
|
|
|
|Jetson TX2
|-
|7.0
| rowspan="2" |[[볼타 (마이크로아키텍처)|볼타]]
|GV100
|엔비디아 타이탄 V
|쿼드로 GV100
|테슬라 V100
|
|-
|7.2
|GV10B
|
|
|
|Jetson AGX Xavier, Jetson Xavier NX
|-
|7.5
|[[튜링 (마이크로아키텍처)|튜링]]
|TU102, TU104, TU106, TU116, TU117
|엔비디아 타이탄 RTX, 지포스 RTX 2080Ti, 지포스 RTX 2080, 지포스 RTX 2070, 지포스 RTX 2060, 지포스 GTX 1660 Ti, 지포스 GTX 1660, 지포스 GTX 1650, 지포스 GTX 1630
|쿼드로 RTX 8000, 쿼드로 RTX 6000, 쿼드로 RTX 5000, 쿼드로 RTX 4000
|테슬라 T4
|
|-
|8.0
| rowspan="3" |[[암페어 (마이크로아키텍처)|암페어]]
|GA100
|
|
|엔비디아 A100, 엔비디아 A30
|
|-
|8.6
|GA102,
GA104,

GA106,

GA107
|지포스 RTX 3080, 지포스 RTX 3070, 지포스 RTX 3060Ti, 지포스 RTX 3060, 지포스 RTX 3050Ti, 지포스 RTX 3050
|RTX A6000, RTX A5000, RTX A4000, RTX A3000, RTX A2000
|엔비디아 A40, 엔비디아 A10, 엔비디아 A16
|
|-
|8.7
|GA10B
|
|
|
|Jetson AGX Orin, Jetson Orin NX, Jetson Orin Nano
|-
|8.9
|에이다
러브레이스
|AD102,
AD103,
AD104,
AD106,
AD107
|지포스 RTX 4090, 지포스 RTX 4080, 지포스 RTX 4070 Ti, 지포스 RTX 4070, 지포스 RTX 4060, 지포스 RTX 4050,
|RTX 6000
|엔비디아 L4, 엔비디아 L40
|
|-
|9.0
|호퍼
|GH100
|
|
|엔비디아 H100
|
|-
|9.1
|
|
|
|
|
|
|-
|9.2
|
|
|
|
|
|
|-
|10.0
|
|
|
|
|
|
|-
|10.1
|
|
|
|
|
|
|-
|}
'*' - [[OEM]] 전용 제품

== 언어 결합 ==
* [[커먼 리스프]] - [https://github.com/takagi/cl-cuda cl-cuda]
* [[포트란]] - [http://www.hoopoe-cloud.com/Solutions/Fortran/Default.aspx FORTRAN CUDA] {{웨이백|url=http://www.hoopoe-cloud.com/Solutions/Fortran/Default.aspx |date=20120410022732 }}, [http://www.pgroup.com/resources/cudafortran.htm PGI CUDA Fortran Compiler]
* F# - [https://web.archive.org/web/20141010163529/https://www.quantalea.net/products/introduction/ Alea.CUDA]
* [[하스켈]] - [http://hackage.haskell.org/package/accelerate Data.Array.Accelerate]
* [[대화형 데이터 언어|IDL]] - [http://www.txcorp.com/products/GPULib/ GPULib] {{웨이백|url=http://www.txcorp.com/products/GPULib/ |date=20121107085652 }}
* [[자바 (프로그래밍 언어)|자바]] - [http://www.cass-hpc.com/solutions/legacy/jcuda jCUDA], [http://www.jcuda.org/jcuda/JCuda.html JCuda], [http://www.jcuda.org/jcuda/jcublas/JCublas.html JCublas], [http://www.jcuda.org/jcuda/jcufft/JCufft.html JCufft], [http://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.lnx.71.doc/user/gpu_developing_cuda4j.html CUDA4J]
* [[루아 (프로그래밍 언어)|루아]] - [https://web.archive.org/web/20160815110157/https://psilambda.com/download/kappa-extras/ KappaCUDA]
* [[매스매티카]] - [http://reference.wolfram.com/mathematica/CUDALink/tutorial/Overview.html CUDALink]
* [[MATLAB]] - 병렬 컴퓨팅 툴박스, MATLAB 분산 컴퓨팅 서버,<ref>{{웹 인용|title=MATLAB Adds GPGPU Support|url=http://www.hpcwire.com/features/MATLAB-Adds-GPGPU-Support-103307084.html|date=2010-09-20|확인날짜=2010-10-12|보존url=https://web.archive.org/web/20100927155948/http://www.hpcwire.com/features/MATLAB-Adds-GPGPU-Support-103307084.html|보존날짜=2010-09-27|url-status=dead}}</ref> [[재킷 (소프트웨어)|재킷]]과 같은 타사 패키지.
* [[닷넷 프레임워크|.NET]] - [http://www.cass-hpc.com/solutions/libraries/cuda-net CUDA.NET], [https://kunzmi.github.io/managedCuda/ Managed CUDA], [http://www.hybriddsp.com CUDAfy.NET] .NET 커널 및 호스트 코드, CURAND, CUBLAS, CUFFT
* [[펄]] - [https://web.archive.org/web/20100825231711/http://psilambda.com/download/kappa-for-perl/ KappaCUDA], [https://github.com/run4flat/perl-CUDA-Minimal CUDA::Minimal]
* [[파이썬]] - [http://numba.pydata.org/ Numba], NumbaPro, [http://mathema.tician.de/software/pycuda PyCUDA], [https://web.archive.org/web/20160815113344/https://psilambda.com/download/kappa-for-python/ KappaCUDA], [http://deeplearning.net/software/theano/ Theano] {{웨이백|url=http://deeplearning.net/software/theano/ |date=20201108233358 }}
* [[루비 (프로그래밍 언어)|루비]] - [https://web.archive.org/web/20160815110157/https://psilambda.com/download/kappa-extras/ KappaCUDA]
* [[R (프로그래밍 언어)|R]] - [https://web.archive.org/web/20140210082556/http://brainarray.mbni.med.umich.edu/brainarray/rgpgpu/ gputools]

== 예제 ==
=== C++ ===
이 예제는 텍스처 하나를 어떤 이미지로부터 GPU상의 행렬로 읽어들인다.
<syntaxhighlight lang="c">
cudaArray* cu_array;
texture<float, 2> tex;

// 행렬 할당
cudaMallocArray(&cu_array, cudaCreateChannelDesc<float>(), width, height);

// 이미지 데이터를 행렬로 복사
cudaMemcpy(cu_array, image, width*height, cudaMemcpyHostToDevice);

// 행렬을 텍스처에 연결한다.
cudaBindTexture(tex, cu_array);

// 커널을 실행한다
dim3 blockDim(16, 16, 1);
dim3 gridDim(width / blockDim.x, height / blockDim.y, 1);
kernel<<< gridDim, blockDim, 0 >>>(d_odata, width, height);
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;
   float c = texfetch(tex, x, y);
   odata[y*width+x] = c;
}
</syntaxhighlight>

=== 파이썬 ===
파이선 언어의 바인딩은 [http://mathema.tician.de/software/pycuda PyCUDA]에서 구할 수 있다.

아래 예제는 두 배열의 곱을 GPU 상에서 계산한다.
<syntaxhighlight lang="numpy">
import pycuda.driver as drv
import numpy
import pycuda.autoinit

mod = drv.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

</syntaxhighlight>

[https://web.archive.org/web/20090420124748/http://kered.org/blog/2009-04-13/easy-python-numpy-cuda-cublas/ 행렬 곱셈을 단순화하는 추가 파이선 바인딩]을 사용한 예제이다.

<syntaxhighlight lang="numpy">
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()
</syntaxhighlight>

== 같이 보기 ==
* [[OpenCL]]
* [[GPGPU|범용 GPU]]
* [[병렬 컴퓨팅]]
* [[스트림 프로세싱]]
* [[벌컨 (API)|벌컨]]
* [[rCUDA]]

== 각주 ==
{{각주}}
# 제이슨 샌더스, 에드워드 캔드롯 저, [https://www.linkedin.com/in/hermetpark/ 박춘언] 역, ''예제로 배우는 CUDA 프로그래밍(입문자를 위한 GPGPU 프로그래밍의 기초)'', {{ISBN|9788994774060}}.
# Farber, Rob 저, ''CUDA Application Design and Development'', {{ISBN|9780123884268}}.
# Hwu, Wen-Mei 저, ''GPU Computing GEMs - Jade Edition'', {{ISBN|9780123859631}}.

== 외부 링크 ==
* {{위키공용분류-줄}}
* {{언어링크|en}} {{공식 웹사이트}}
* {{언어링크|en}} [https://plus.google.com/communities/114632076318201174454 CUDA 커뮤니티] - [[구글+]]
* {{언어링크|en}} [https://devtalk.nvidia.com/default/topic/726765/need-a-little-tool-to-adjust-the-vram-size/ VRAM 크기 조절 도구]
* {{언어링크|en}} [http://www.nvidia.com/object/cuda_learn_products.html CUDA GPUs] - 공식적으로 CUDA를 지원하는 장치 목록

{{엔비디아}}
{{CPU 기술}}
{{병렬 컴퓨팅}}
{{전거 통제}}
{{기본정렬:Cuda}}

[[분류:컴퓨터 물리 엔진]]
[[분류:GPGPU]]
[[분류:엔비디아 소프트웨어]]
[[분류:병렬 컴퓨팅]]
[[분류:GPGPU 라이브러리]]