Лучшие вопросы
Таймлайн
Чат
Перспективы
CUDA
программно-аппаратная архитектура параллельных вычислений Из Википедии, свободной энциклопедии
Remove ads
CUDA (изначально аббр. от англ. Compute Unified Device Architecture) — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia.
CUDA SDK позволяет программистам реализовывать на специальных упрощённых диалектах языков программирования Си, C++ и Фортран алгоритмы, выполнимые на графических и тензорных процессорах Nvidia[2]. Архитектура CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического или тензорного ускорителя и управлять его памятью. Функции, ускоренные при помощи CUDA, можно вызывать из различных языков, в том числе Python[3], MATLAB[4] и т. п.
Remove ads
Программная архитектура
Суммиров вкратце
Перспектива
CUDA — кроссплатформенное программное обеспечение с поддержкой операционных систем Linux, Mac OS X и Windows. Первоначальная версия CUDA SDK была представлена 15 февраля 2007 года. В основе интерфейса программирования приложений CUDA лежит язык Си с некоторыми расширениями. Для успешной трансляции кода на этом языке в состав CUDA SDK входит собственный Си-компилятор командной строки nvcc компании Nvidia. Компилятор nvcc создан на основе открытого компилятора Open64 и предназначен для трансляции host-кода (главного, управляющего кода) и device-кода (аппаратного кода) (файлов с расширением .cu) в объектные файлы, пригодные в процессе сборки конечной программы или библиотеки в любой среде программирования.
В архитектуре CUDA используется модель памяти грид, кластерное моделирование потоков и SIMD-инструкции. CUDA применима не только для высокопроизводительных графических вычислений, но и для научных вычислений с использованием видеокарт Nvidia. Учёные и исследователи используют CUDA таких областях, как астрофизика, вычислительная биология и химия, моделирование динамики жидкостей, электромагнитные взаимодействия, компьютерная томография, сейсмический анализ и др.
В CUDA имеется возможность подключения к приложениям, использующим OpenGL и Direct3D. 22 марта 2010 года Nvidia выпустила CUDA Toolkit 3.0 с поддержкой OpenCL[5].
Remove ads
Оборудование
Суммиров вкратце
Перспектива
Платформа CUDA впервые появились на рынке с выходом чипа NVIDIA восьмого поколения G80 и стала присутствовать во всех последующих сериях графических чипов, которые используются в семействах ускорителей GeForce, Quadro и NVidia Tesla.
Первая серия оборудования, поддерживающая CUDA SDK, G8x, имела 32-битный векторный процессор одинарной точности, использующий CUDA SDK как API (CUDA поддерживает тип double
языка Си, однако сейчас его точность понижена до 32-битного с плавающей запятой). Более поздние процессоры GT200 имеют поддержку 64-битной точности (только для SFU), но производительность значительно хуже, чем для 32-битной точности (из-за того, что SFU всего два на каждый потоковый мультипроцессор, а скалярных процессоров — восемь). Графический процессор организует аппаратную многопоточность, что позволяет задействовать все ресурсы графического процессора. Таким образом, открывается перспектива переложить функции физического ускорителя на графический ускоритель (пример реализации — PhysX). Также открываются широкие возможности использования графического оборудования компьютера для выполнения сложных неграфических вычислений в различных отраслях науки, например, в вычислительной биологии.
Remove ads
Преимущества
По сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических API, у архитектуры CUDA отмечают следующие преимущества в этой области:
- Интерфейс программирования приложений CUDA (CUDA API) основан на стандартном языке программирования Си с некоторыми ограничениями. По мнению разработчиков, это должно упростить и сгладить процесс изучения архитектуры CUDA[6];
- Разделяемая между потоками память (shared memory) размером в 16 Кб может быть использована под организованный пользователем кэш с более широкой полосой пропускания, чем при выборке из обычных текстур;
- Более эффективные транзакции между памятью центрального процессора и видеопамятью;
- Полная аппаратная поддержка целочисленных и побитовых операций;
- Поддержка компиляции кода GPU средствами открытого проекта LLVM[7].
Ограничения
- Все функции, выполнимые на устройстве, не поддерживают рекурсии (в версии CUDA Toolkit 3.1 поддерживает указатели и рекурсию) и имеют некоторые другие ограничения.
Поддерживаемые GPU и графические ускорители
Суммиров вкратце
Перспектива
Перечень устройств от производителя оборудования Nvidia с заявленной полной поддержкой технологии CUDA приведён на официальном сайте Nvidia[8][9].
Совместимость систем разработчика CUDA с поколениями вычислителей:
- CUDA SDK 6.0 поддерживает версии 1.0 — 3.5 (Tesla, Fermi, Kepler).
- CUDA SDK 6.5 поддерживает версии 1.0 — 5.x (Tesla, Fermi, Kepler, Maxwell).
- CUDA SDK 7.5 поддерживает версии 2.0 — 5.x (Fermi, Kepler, Maxwell).
- CUDA SDK 8.0 поддерживает версии 2.0 — 6.x (Fermi, Kepler, Maxwell, Pascal).
- CUDA SDK 9.0/9.1/9.2 поддерживает версии 3.0 — 7.2 (Kepler, Maxwell, Pascal, Volta)
- CUDA SDK 10.0 поддерживает версии 3.0 — 7.5 (Kepler, Maxwell, Pascal, Volta, Turing)
В настоящее время на рынке аппаратных средств для ПК поддержку технологии CUDA обеспечивают следующие периферийные устройства:
- Модели Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 позволяют производить вычисления на GPU с двойной точностью.
Remove ads
Пример
Суммиров вкратце
Перспектива
Этот пример кода на C++ загрузки текстур из изображения в массив на GPU:
cudaArray* cu_array;
texture<float, 2> tex;
// Выделение памяти для массива
cudaMalloc( &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;
}
Пример программы на языке Python, перемножающий элементы массива средствами GPU. Взаимодействие идёт с использованием PyCUDA [13]
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
Remove ads
Ссылки
Суммиров вкратце
Перспектива
Официальные ресурсы
- CUDA Zone (англ.) — официальный сайт CUDA
- CUDA GPU Computing (англ.) — официальные веб-форумы, посвящённые вычислениям CUDA
- Курс лекций по CUDA (недоступная ссылка) (рус.) — официальный сайт NVidia
Неофициальные ресурсы
- Дмитрий Чеканов. nVidia CUDA: вычисления на видеокарте или смерть CPU? Tom's Hardware (22 июня 2008). Дата обращения: 20 января 2009.
- Дмитрий Чеканов. nVidia CUDA: тесты приложений на GPU для массового рынка . Tom's Hardware (19 мая 2009). Дата обращения: 19 мая 2009.
- Алексей Берилло. NVIDIA CUDA — неграфические вычисления на графических процессорах. Часть 1 . iXBT.com (23 сентября 2008). Дата обращения: 20 января 2009.
- Алексей Берилло. NVIDIA CUDA — неграфические вычисления на графических процессорах. Часть 2 . iXBT.com (22 октября 2008). — Примеры внедрения NVIDIA CUDA. Дата обращения: 20 января 2009.
Другие ресурсы
- Боресков Алексей Викторович. Основы CUDA (20 января 2009). Дата обращения: 20 января 2009.
- Владимир Фролов. Введение в технологию CUDA . Сетевой журнал «Компьютерная графика и мультимедиа» (19 декабря 2008). Дата обращения: 28 октября 2009. Архивировано 3 марта 2012 года.
- Игорь Осколков. NVIDIA CUDA – доступный билет в мир больших вычислений . Компьютерра (30 апреля 2009). Дата обращения: 3 мая 2009. Архивировано из оригинала 5 мая 2009 года.
- Владимир Фролов. Введение в технологию CUDA (1 августа 2009). Дата обращения: 3 апреля 2010. Архивировано 3 марта 2012 года.
- GPGPU.ru Архивная копия от 31 августа 2020 на Wayback Machine. Использование видеокарт для вычислений (не обновляется с 2013 года).
- ParallelCompute.sourceforge.net. Центр Параллельных Вычислений.
Remove ads
Примечания
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads