Что такое NVIDIA CUDA?

Автор: Валерий Сидоров

Источник: http://netler.ru/pc/cuda.htm

CUDA, CUDA, CUDA вы удалились,
«Мощей» центрального процессора златые дни?

(Компьютерные байки)

Немного терминологии

1. API (сокр. от англ. Application Programming Interface) – программный интерфейс приложения.

2. DirectX – набор низкоуровневых программных интерфейсов (API) для создания игр и других высокопроизводительных мультимедиа-приложений. Включает поддержку высокопроизводительной 2D- и 3D-графики, звука и устройств ввода.

3. Direct3D (D3D) – интерфейс вывода трехмерных примитивов (геометрических тел). Входит в DirectX.

4. OpenGL (от англ. Open Graphics Library, дословно – открытая графическая библиотека) – спецификация, определяющая независимый от языка программирования кросс-платформенный программный интерфейс для написания приложений, использующих двухмерную и трехмерную компьютерную графику. Включает более 250 функций для рисования сложных трехмерных сцен из простых примитивов. Используется при создании видеоигр, САПР, виртуальной реальности, визуализации в научных исследованиях. На платформе Windows конкурирует с DirectX.

5. OpenCL (от англ. Open Computing Language, дословно – открытый язык вычислений) – фреймворк (каркас программной системы) для написания компьютерных программ, связанных с параллельными вычислениями на различных графических (GPU) и центральных процессорах (CPU). В фреймворк OpenCL входят язык программирования и интерфейс программирования приложений (API). OpenCL обеспечивает параллелизм на уровне инструкций и на уровне данных и является реализацией техники GPGPU.

6. GPGPU (сокр. от англ. General-Purpose Graphics Processing Units, дословно – GPU общего назначения) – техника использования графического процессора видеокарты для общих вычислений, которые обычно проводит центральный процессор.

7. Шейдер (англ. shader) – программа построения теней на синтезируемых изображениях, используется в трехмерной графике для определения окончательных параметров объекта или изображения. Как правило, включает произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражения и преломления, затенения, смещения поверхности и эффекты пост-обработки. Сложные поверхности могут быть визуализированы при помощи простых геометрических форм.

8. Рендеринг (англ. rendering) – визуализация, в компьютерной графике процесс получения изображения по модели с помощью программного обеспечения.

9. SDK (сокр. от англ. Software Development Kit) – набор инструментальных средств разработки программного обеспечения.

10. CPU (сокр. от англ. Central Processing Unit, дословно – центральное/основное/главное вычислительное устройство) – центральный (микро)процессор; устройство, исполняющее машинные инструкции; часть аппаратного обеспечения ПК, отвечающая за выполнение вычислительных операций (заданных операционной системой и прикладным программным обеспечением) и координирующая работу всех устройств ПК.

11. GPU (сокр. от англ. Graphic Processing Unit, дословно – графическое вычислительное устройство) – графический процессор; отдельное устройство ПК или игровой приставки, выполняющее графический рендеринг (визуализацию). Современные графические процессоры очень эффективно обрабатывают и реалистично отображают компьютерную графику. Графический процессор в современных видеоадаптерах применяется в качестве ускорителя трехмерной графики, однако его можно использовать в некоторых случаях и для вычислений (GPGPU).


Проблемы CPU

Долгое время повышение производительности традиционных одноядерных процессоров в основном происходило за счет последовательного увеличения тактовой частоты (около 80% производительности процессора определяла именно тактовая частота) с одновременным увеличением количества транзисторов на одном кристалле. Однако дальнейшее повышение тактовой частоты (при тактовой частоте более 3,8 ГГц чипы попросту перегреваются!) упирается в ряд фундаментальных физических барьеров (поскольку технологический процесс почти вплотную приблизился к размерам атома: сегодня процессоры выпускаются по 45-нм технологии, а размеры атома кремния – приблизительно 0,543 нм):

1. Во-первых, с уменьшением размеров кристалла и с повышением тактовой частоты возрастает ток утечки транзисторов. Это ведет к повышению потребляемой мощности и увеличению выброса тепла.

2. Во-вторых, преимущества более высокой тактовой частоты частично сводятся на нет из-за задержек при обращении к памяти, так как время доступа к памяти не соответствует возрастающим тактовым частотамю.

3. В-третьих, для некоторых приложений традиционные последовательные архитектуры становятся неэффективными с возрастанием тактовой частоты из-за так называемого «фон-неймановского узкого места» – ограничения производительности в результате последовательного потока вычислений. При этом возрастают резистивно-емкостные задержки передачи сигналов, что является дополнительным узким местом, связанным с повышением тактовой частоты.


Развитие GPU

Параллельно с совершенствованием CPU шло (и идет!) развитие GPU:

1. Ноябрь 2008 г. – Intel представила линейку 4-ядерных центральных процессоров Intel Core i7, в основу которых положена микроархитектура нового поколения Nehalem. Процессоры работают на тактовой частоте 2,6 – 3,2 ГГц. Выполнены по 45-нм техпроцессу.

2. Декабрь 2008 г. – начались поставки 4-ядерного центрального процессора AMD Phenom II 940 (кодовое название – Deneb). Работает на частоте 3 ГГц, выпускается по техпроцессу 45-нм.

3. Май 2009 г. – компания AMD представила версию графического процессора ATI Radeon HD 4890 с тактовой частотой ядра, увеличенной с 850 МГц до 1 ГГц. Это первый графический процессор, работающий на частоте 1 ГГц. Вычислительная мощность чипа, благодаря увеличению частоты, выросла с 1,36 до 1,6 терафлоп. Процессор содержит 800 (!) вычислительных ядер, поддерживает видеопамять GDDR5, DirectX 10.1, ATI CrossFireX и все другие технологии, присущие современным моделям видеокарт. Чип изготовлен на базе 55-нм технологии.


Основные отличия GPU

Отличительными особенностями GPU (по сравнению с CPU) являются:

– Архитектура, максимально нацеленная на увеличение скорости расчета текстур и сложных графических объектов;

- Пиковая мощность типичного GPU намного выше, чем у CPU;

- Благодаря специализированной конвейерной архитектуре, GPU намного эффективнее в обработке графической информации, чем центральный процессор.


«Кризис жанра»

«Кризис жанра» для CPU назрел к 2005 г., – именно тогда появились первые 2-ядерные процессоры. Но, несмотря на развитие технологии многоядерности, рост производительности обычных CPU заметно снизился. В то же время производительность GPU продолжает расти. Так, к 2003 г. и кристаллизовалась эта революционная идея – использовать для нужд центрального процессора вычислительную мощь графического. Графические процессоры стали активно использоваться для «неграфических» вычислений (симуляция физики, обработка сигналов, вычислительная математика/геометрия, операции с базами данных, вычислительная биология, вычислительная экономика, компьютерное зрение и т.д.).

Главная проблема заключалась в том, что не было никакого стандартного интерфейса для программирования GPU. Разработчики использовали OpenGL или Direct3D, но это было очень удобно. Корпорация NVIDIA (один из крупнейших производителей графических, медиа- и коммуникационных процессоров, а также беспроводных медиа-процессоров; основана в 1993 г.) занялась разработкой некоего единого и удобного стандарта, – и представила технологию CUDA.


Как это начиналось

1. 2006 г. – NVIDIA демонстрирует CUDA™; начало революции в вычислениях на GPU.

2. 2007 г. – NVIDIA выпускает архитектуру CUDA (первоначальная версия CUDA SDK была представлена 15 февраля 2007 г.); номинация «Лучшая новинка» от журнала Popular Science и «Выбор читателей» от издания HPCWire.

3. 2008 г. – технология NVIDIA CUDA победила в номинации «Техническое превосходство» от PC Magazine.


Что такое CUDA

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

Технология NVIDIA CUDA™ – это единственная среда разработки на языке программирования C, которая позволяет разработчикам создавать программное обеспечение для решения сложных вычислительных задач за меньшее время, благодаря многоядерной вычислительной мощности графических процессоров. В мире уже работают миллионы GPU с поддержкой CUDA, и тысячи программистов уже пользуются (бесплатно!) инструментами CUDA для ускорения приложений и для решения самых сложных ресурсоемких задач – от кодирования видео- и аудио- до поисков нефти и газа, моделирования продуктов, вывода медицинских изображений и научных исследований.

CUDA дает разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью, организовывать на нем сложные параллельные вычисления. Графический ускоритель с поддержкой CUDA становится мощной программируемой открытой архитектурой, подобно сегодняшним центральным процессорам. Всё это предоставляет в распоряжение разработчика низкоуровневый, распределяемый и высокоскоростной доступ к оборудованию, делая CUDA необходимой основой при построении серьезных высокоуровневых инструментов, таких как компиляторы, отладчики, математические библиотеки, программные платформы.

Юрий Уральский, ведущий специалист по технологиям NVIDIA, сравнивая GPU и CPU, говорит так: «CPU – это внедорожник. Он ездит всегда и везде, но не очень быстро. А GPU – это спорткар. На плохой дороге он просто никуда не поедет, но дайте хорошее покрытие, – и он покажет всю свою скорость, которая внедорожнику и не снилась!..».


Возможности технологии CUDA

– стандартный язык C для параллельной разработки приложений на GPU;

– стандартные библиотеки численного анализа для быстрого преобразования Фурье и базового пакета программ линейной алгебры;

– специальный драйвер CUDA для вычислений с быстрой передачей данных между GPU и CPU;

– драйвер CUDA взаимодействует с графическими драйверами OpenGL и DirectX;

– поддержка операционных систем Linux 32/64-bit, Windows XP 32/64-bit и Mac.


Набор инструментов CUDA

CUDA™ Toolkit – это среда разработки для GPU с поддержкой CUDA, основанная на языке C. Среда разработки CUDA включает:

– C-компилятор nvcc;

– библиотеки FFT и BLAS для GPU;

- профилировщик;

– отладчик gdb для GPU;

– драйвер CUDA runtime;

- руководство по программированию.


Примечания

1. Технология NVIDIA CUDA не предлагает замену традиционному CPU и не оспаривает его первенства и главенства: GPU выступает в роли мощного со-процессора, то есть помощника центрального процессора.

2. Технология NVIDIA CUDA поддерживается графическими процессорами ускорителей GeForce (начиная с восьмого поколения – GeForce 8 Series, GeForce 9 Series, GeForce 200 Series), Nvidia Quadro и Tesla.

3. Программисты, желающие опробовать технологию CUDA, могут загрузить CUDA-ресурсы (CUDA driver, CUDA toolkit, CUDA SDK) со страницы CUDA Zone – Загрузить CUDA.