Конституция Армении: Статья 18.1
Конституция Армении (Статья 18.1) закрепляет «исключительную миссию Армянской Апостольской Святой Церкви как национальной церкви в духовной жизни армянского народа, в деле развития его национальной культуры и сохранения его национальной самобытности»:
CUDA

CUDA

Материал из Википедии — свободной энциклопедии

CUDA (изначально аббр. от англ. Compute Unified Device Architecture) — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia.

CUDA SDK позволяет программистам реализовывать на специальных упрощённых диалектах языков программирования Си, C++ и Фортран алгоритмы, выполнимые на графических и тензорных процессорах Nvidia[2]. Архитектура CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического или тензорного ускорителя и управлять его памятью. Функции, ускоренные при помощи CUDA, можно вызывать из различных языков, в том числе Python[3], MATLAB[4] и т. п.

Программная архитектура

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

Оборудование

Платформа CUDA впервые появились на рынке с выходом чипа NVIDIA восьмого поколения G80 и стала присутствовать во всех последующих сериях графических чипов, которые используются в семействах ускорителей GeForce, Quadro и NVidia Tesla.

Первая серия оборудования, поддерживающая CUDA SDK, G8x, имела 32-битный векторный процессородинарной точности, использующий CUDA SDK как API (CUDA поддерживает тип double языка Си, однако сейчас его точность понижена до 32-битного с плавающей запятой). Более поздние процессоры GT200 имеют поддержку 64-битной точности (только для SFU), но производительность значительно хуже, чем для 32-битной точности (из-за того, что SFU всего два на каждый потоковый мультипроцессор, а скалярных процессоров — восемь). Графический процессор организует аппаратную многопоточность, что позволяет задействовать все ресурсы графического процессора. Таким образом, открывается перспектива переложить функции физического ускорителя на графический ускоритель (пример реализации — PhysX). Также открываются широкие возможности использования графического оборудования компьютера для выполнения сложных неграфических вычислений в различных отраслях науки, например, в вычислительной биологии.

Преимущества

По сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических 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 с двойной точностью.

Пример

Этот пример кода на 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 drvimport numpydrv.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))printdest-a*b

Ссылки

Официальные ресурсы

  • CUDA Zone (англ.) — официальный сайт CUDA
  • CUDA GPU Computing (англ.) — официальные веб-форумы, посвящённые вычислениям CUDA
  • Курс лекций по CUDA (недоступная ссылка) (рус.) — официальный сайт NVidia

Неофициальные ресурсы

Tom's Hardware

iXBT.com

Другие ресурсы

Примечания

  1. CUDA Toolkit 12.4 Downloads (англ.). NVIDIA. Дата обращения: 25 марта 2024. Архивировано 24 марта 2024 года.
  2. Language SolutionsАрхивная копия от 16 октября 2018 на Wayback Machine / NVIDIA, (англ.)
  3. PyCUDA | NVIDIA Developer. Дата обращения: 16 октября 2018. Архивировано 17 октября 2018 года.
  4. MATLAB GPU Computing Support for NVIDIA CUDA-Enabled GPUs. Дата обращения: 1 сентября 2020. Архивировано 9 августа 2020 года.
  5. Theo Valich. nVidia Launches CUDA Toolkit 3.0, expands OpenCL (англ.). Bright Side Of News (22 марта 2010). Дата обращения: 5 апреля 2010. Архивировано 3 марта 2012 года.
  6. См. Официальное руководство по программированию на CUDA, вер. 1.1 // CUDA Programming GuideАрхивная копия от 6 октября 2008 на Wayback Machine. Chapter 1. Introduction to CUDA → 1.2 CUDA: A New Architecture for Computing on the GPU
  7. NVIDIA передала CUDA Compiler в руки сообщества LLVM — opennet.ru. Дата обращения: 13 мая 2012. Архивировано 13 мая 2012 года.
  8. CUDA-Enabled GPU ProductsАрхивная копия от 5 апреля 2008 на Wayback Machine (англ.)
  9. Продукты с поддержкой CUDA — NVIDIA. Дата обращения: 26 февраля 2010. Архивировано 26 февраля 2010 года.
  10. Larabel, Michael. NVIDIA Rolls Out Tegra X2 GPU Support In Nouveau. Phoronix (29 марта 2017). Дата обращения: 8 августа 2017. Архивировано 9 августа 2017 года.
  11. Discussion of LUA compilation on Drive PX2. Bernhard Schuster. GitHub. Дата обращения: 9 ноября 2017. Архивировано 6 сентября 2020 года.
  12. Nvidia Xavier SpecsАрхивная копия от 21 августа 2018 на Wayback Machine on TechPowerUp (preliminary)
  13. PyCUDA. Архивировано 3 марта 2012 года.
CUDA
Скриншот программы CUDA
ТипGPGPU
РазработчикNVIDIA Corporation
Операционные системы Windows, Linux
Дата выпуска23 июня2007
Аппаратная платформа Поддерживаемые GPU
Последняя версия12.7[1]
Лицензиябесплатное программное обеспечение
Сайтdeveloper.nvidia.com/cud…
Логотип Викисклада Медиафайлы на Викискладе