CUDA
CUDA (англ. Compute Unified Device Architecture) — технология GPGPU (англ. General-Purpose computing on Graphics Processing Units), позволяющая программистам реализовывать на упрощённом языке программирования Си алгоритмы, выполнимые на графических процессорах ускорителей GeForce восьмого поколения и старше (GeForce 8 Series, GeForce 9 Series, GeForce 200 Series), Nvidia Quadro и Tesla компании Nvidia. Технология CUDA разработана компанией nVidia.
Фактически, CUDA позволяет включать в текст программы на C специальные функции. Эти функции пишутся на особом диалекте С, и выполняются на графическом процессоре.
CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью, организовывать на нём сложные параллельные вычисления. Графический ускоритель с поддержкой CUDA становится мощной программируемой открытой архитектурой приближаясь к сегодняшним центральным процессорам.
Использует grid-модель памяти, кластерное моделирование потоков и SIMD инструкции. Применим в основном для высокопроизводительных графических вычислений и разработок NVIDIA-совместимого графического API. Включена возможность подключения к приложениям, использующим Microsoft Direct3D 9 и OpenGL. Создан в версиях для Linux, Mac OS X и Windows.
Первоначальная версия CUDA SDK была представлена 15 февраля 2007 года. В основе CUDA API лежит язык Си с некоторыми ограничениями. Для успешной трансляции кода на этом языке, в состав CUDA SDK входит собственный Си-компилятор командной строки nvcc компании Nvidia. Компилятор nvcc создан на основе открытого компилятора Open64 и предназначен для трансляции host-кода (главного, управляющего кода) и device-кода (аппаратного кода) (файлов с расширением .cu) в объектные файлы, пригодные в процессе сборки конечной программы или библиотеки в любой среде программирования, например в Microsoft Visual Studio.
Программная архитектура
Оборудование
Первая серия оборудования, поддерживающая CUDA SDK, G8x, имела 32-битный векторный процессор одинарной точности, использующий CUDA SDK как API (CUDA поддерживает тип double
языка Си, однако сейчас его точность понижена до 32-битного с плавающей запятой). Более поздние процессоры GT200 имеют поддержку 64-битной точности (только для SFU), но производительность значительно хуже, чем для 32-битной точности (из-за того что SFU всего 2 на каждый потоковый мультипроцессор, а скалярных процессоров 8). Графический процессор организует аппаратную многопоточность, что позволяет задействовать все ресурсы графического процессора. Таким образом, открывается перспектива переложить функции физического ускорителя на графический ускоритель (пример реализации — nVidia PhysX). Также открываются широкие возможности использования графического оборудования компьютера для выполнения сложных неграфических вычислений: например, в вычислительной биологии и в иных отраслях науки.
Преимущества
По сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических API, у архитектуры CUDA отмечают следующие преимущества в этой области:
- Интерфейс программирования приложений CUDA (CUDA API) основан на стандартном языке программирования Си с некоторыми ограничениями. По мнению разработчиков, это должно упростить и сгладить процеcс изучения архитектуры CUDA[1]
- Разделяемая между потоками память (shared memory) размером в 16 Кб может быть использована под организованный пользователем кэш с более широкой полосой пропускания, чем при выборке из обычных текстур
- Более эффективные транзакции между памятью центрального процессора и видеопамятью
- Полная аппаратная поддержка целочисленных и побитовых операций
Ограничения
- Все функции, выполнимые на устройстве, не поддерживают рекурсии и имеют некоторые другие ограничения
- Архитектуру CUDA поддерживает и развивает только производитель NVidia
Поддерживаемые графические ускорители[2]
Перечень устройств от производителя оборудования Nvidia с заявленной полной поддержкой технологии CUDA приведён на официальном сайте Nvidia: CUDA-Enabled GPU Products(англ.).
Фактически же, в настоящее время на рынке аппаратных средств для ПК поддержку технологии CUDA обеспечивают следующие периферийные устройства[2]:
|
|
|
И новые модели Tesla C1060 и Tesla S1070, позволяющие производить вычисления на GPU с двойной точностью.
Пример
Этот пример кода на C загрузки текстур из изображения в массив на GPU:
cudaArray* cu_array;
texture<float, 2> tex;
// Allocate array
cudaMalloc( &cu_array, cudaCreateChannelDesc<float>(), width, height );
// Copy image data to array
cudaMemcpy( cu_array, image, width*height, cudaMemcpyHostToDevice);
// Bind the array to the texture
cudaBindTexture( tex, cu_array);
// Run kernel
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;
}
Пример программы на Питоне, перемножающий матрицы средствами GPU. Взаимодействие идёт с использованием PyCUDA [3]
import pycuda.driver as drv
import numpy
drv.init()
dev = drv.Device(0)
ctx = dev.make_context()
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
CUDA как предмет в ВУЗах
По состоянию на декабрь 2009 года, программная модель CUDA преподается в 269 университетах по всему миру. В России обучающие курсы по CUDA читаются в Московском, Санкт-Петербургском, Казанском, Новосибирском и Пермском государственных университетах, Международном университете природы общества и человека «Дубна», Объединённом институте ядерных исследований, Московском институте электронной техники, Ивановском электронно-техническом институте, МГТУ им. Баумана, Российском научном центре «Курчатовский институт», Межрегиональном суперкомпьютерном центре РАН, Таганрогском технологическом институте (ТТИ ЮФУ).[4] Кроме того, в декабре 2009 года было объявлено о начале работы первого в России научно-образовательный центр «Параллельные вычисления», расположенного в городе Дубна, в задачи которого входит обучение и консультации по решению сложных вычислительных задач на GPU.[4]
На Украине курсы по CUDA читаются в Киевском институте системного анализа.[4]
Ссылки
Официальные ресурсы
- Домашняя страница CUDA(рус.)
- CUDA Zone(англ.)
- Официальный форум, посвящённый CUDA(англ.)
Неофициальные ресурсы
- Дмитрий Чеканов nVidia CUDA: вычисления на видеокарте или смерть CPU?. Tom's Hardware (22 июня 2008 года). Проверено 20 января 2009.
- Дмитрий Чеканов nVidia CUDA: тесты приложений на GPU для массового рынка. Tom's Hardware (19 мая 2009 года). Проверено 19 мая 2009.
- Алексей Берилло NVIDIA CUDA — неграфические вычисления на графических процессорах. iXBT.com (23 сентября 2008 года). — Первая часть статьи о CUDA. Проверено 20 января 2009.
- Алексей Берилло NVIDIA CUDA — неграфические вычисления на графических процессорах Часть 2 — Примеры внедрения NVIDIA CUDA. iXBT.com (22 октября 2008 года). — Вторая часть статьи о CUDA. Проверено 20 января 2009.
- Сергей Мерьков NVIDIA Quadro CX и Adobe CS4 — профессиональный симбиоз, ускоряющий обработку видео Часть 1. iXBT.com (22 января 2009 года). Проверено 12 мая 2009.
- Сергей Мерьков NVIDIA Quadro CX и Adobe CS4 — профессиональный симбиоз, ускоряющий обработку видео Часть 2. iXBT.com (16 февраля 2009 года). Проверено 12 мая 2009.
- Сергей Мерьков vReveal — скоростное улучшение качества видео одной кнопкой. iXBT.com (21 апреля 2009 года). Проверено 12 мая 2009.
- Сергей Мерьков SuperLoiLoScope MARS — игровой видеоредактор с поддержкой технологии NVIDIA CUDA. iXBT.com (11 мая 2009 года). Проверено 12 мая 2009.
- Другие ресурсы
- Сайт Научно-образовательного центра Параллельные Вычисления — Официальный партнёр NVIDIA по Обучению программированию на CUDA, Консультированию по гетерогенным вычислениям и GPU computing, программирование на CUDA
- Сайт GPGPU.ru — использование видеокарт для вычислений
- Боресков Алексей Викторович Основы CUDA. steps3D (20 января 2009 года). Проверено 20 января 2009.
- Владимир Фролов Введение в технологию CUDA. Компьютерная графика и Мультимедиа (сетевой журнал) (19 декабря 2008 года). Проверено 28 октября 2009.
- Игорь Осколков NVIDIA CUDA – доступный билет в мир больших вычислений. Компьютерра (30 апреля 2009 года). Проверено 3 мая 2009.
- CUDA.CS.MSU.SU Московское сообщество разработчиков CUDA. [1] (28 февраля 2009 года). Проверено 28 февраля 2009.
- jCUDA — библиотека для работы с CUDA для Java-программистов
Примечания
- ↑ См. Официальное руководство по программированию на CUDA, вер. 1.1 // CUDA Programming Guide. Chapter 1. Introduction to CUDA → 1.2 CUDA: A New Architecture for Computing on the GPU
- ↑ 2,0 2,1 http://www.nvidia.ru/object/cuda_learn_products_ru.html
- ↑ PyCUDA.
- ↑ 4,0 4,1 4,2 Арсений Герасименко В Дубне будут учить решать задачи на GPU и в среде CUDA. 3DNews (28 декабря 2009 года). Проверено 10 февраля 2010.
См. также
Nvidia |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Чипсеты материнских плат |
| ||||||||||
Графические процессоры |
| ||||||||||
Прочее |
|
Компьютер | Это незавершённая статья о компьютерах. Вы можете помочь проекту, исправив и дополнив её. |
af:CUDA ar:كودا de:Compute Unified Device Architecture en:CUDA es:CUDA fi:CUDA fr:Compute Unified Device Architecture ja:CUDA ko:쿠다 ml:ക്യൂഡ nl:CUDA pl:CUDA (informatyka) pt:Compute Unified Device Architecture sv:CUDA tr:Cuda uk:CUDA vi:CUDA zh:CUDA
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....