CUDA (англ. Compute Unified Device Architecture) — технология GPGPU, позволяющая программистам реализовывать на языке программирования Си алгоритмы, выполнимые на графических процессорах ускорителей GeForce восьмого поколения (GeForce 8 Series), Nvidia Quadro и Tesla компании Nvidia. Технология CUDA разработана компанией Nvidia.
CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью, организовывать на нём сложные параллельные вычисления. Графический ускоритель с поддержкой CUDA становится мощной программируемой открытой архитектурой подобно сегодняшним центральным процессорам. Всё это предоставляет в распоряжение разработчика низкоуровневый, распределяемый и высокоскоростной доступ к оборудованию, делая CUDA необходимой основой при построении серьёзных высокоуровневых инструментов, таких как компиляторы, отладчики, математические библиотеки, программные платформы.
Использует grid-модель памяти, кластерное моделирование потоков и SIMD инструкции. Применим в основном для высокопроизводительных графических вычислений и разработок NVIDIA-совместимого графического API. Включена возможность подключения к приложениям, использующим Microsoft Direct3D 9 и OpenGL. Создан в версиях для Linux и Windows.
Первоначальная версия CUDA SDK была представлена 15 февраля 2007 года. В состав CUDA SDK входит Си-компилятор командной строки nvcc, созданный компанией Nvidia на основе открытого компилятора Open64. Компилятор nvcc необходим для корректной компиляции host-кода (главного, запускного кода) и device-кода (аппаратного кода) (то есть файлов с расширениями .cu и .cuda) в объектные файлы, которые затем используются сборщиком (линкером) в любой среде, где собирается конечная программа или библиотека, обращающаяся к CUDA.
Оборудование
Первая серия оборудования, поддерживающая CUDA SDK, G8x, имела 32-битный векторный процессор одинарной точности, использующий CUDA SDK как API (CUDA поддерживает тип double языка Си, однако сейчас его точность понижена до 32-битного с плавающей запятой). Графический процессор организует аппаратную многопоточность, что имеет огромное значение в специфических приложениях обработки данных. Таким образом, в недалёком будущем в открывается перспектива переложить функции физического ускорителя на графический ускоритель. Также открываются широкие возможности использования графического оборудования компьютера для выполнения сложных неграфических вычислений: например, в вычислительной биологии и в иных отраслях науки.