Зарегистрируйся в два клика и получи неограниченный доступ к материалам,а также промокод на новый заказ в Автор24. Это бесплатно.
Введение
В современном мире скорость выполнения работы имеет огромное значение, в том числе и скорость обработки видеоизображения. Один из основных производителей видео чипов разработали платформу под названием CUDA (Compute Unified Device Architecture) – программно-аппаратная архитектура, которая позволяет перенаправить вычисления с центрального на графические сопроцессоры.
Данная платформа выполнена с учётом прямого доступа к аппаратным возможностям видеокарт. Она ликвидировала важные ограничения предыдущих моделей GPGPU (General-Purpose computation on GPUs). Платформа CUDA С-подобный язык со своим компилятором и библиотеками для вычисления на GPU. Написание оптимального кода вручную – трудная задача, но благодаря технологии CUDA это позволяет достичь большого контроля над аппаратными возможностями видеочипа и, следовательно, большого прироста в скорости.
Технология CUDA
Внутреннее устройство CUDA
Вычислительная модель CUDA:
259892292989100CUDA - программно-аппаратная архитектура, которая позволяет перенаправить вычисления с центрального на графические сопроцессоры. Рассмотрим принцип действия CUDA на схеме:
Рис. 1 Схема графигического процессора
Графический процессор делится на сетки, которые в свою очередь делятся на блоки в которых содержатся потоки, на которых и происходят все вычисления.
231042510337200Рис. 2 Внутренняя схема блока
Основная и самая сложная задача программиста – найти баланс между количеством запускаемых потоков и блоков и самих блоков, так как потоки на одном ядре имеют общую память, за счёт которого происходит основной прирост при использовании этой технологии. Это происходит из-за того, что если в разделяемой памяти не хватает места всей нужной информации, а её нужно перекачивать из глобальной памяти виде карты (которая загружается из оперативной памяти), что занимает много времени и сильно снижает производительность вычислений.
Для получения ускорения от использования этой технологии следует применять её на больших массивах данных, обработка которых не зависит друг от друга. Идеальным случаем является для этого является математическая операция.
Различия между CPU и GPU
Несмотря на повышение количество потоков, который может обрабатывать центральный процессор одновременно, само увеличение не даёт прироста в скорости выполнения приложений, так как приложения зачатую написаны для определённого кол-во потоков. Графические процессоры же изначально нацелены на параллельные вычисления и могут принимать на вход огромное количество потоков. Несмотря на некоторые ограничения и при другом подходе к программированию, на GPU можно получить довольно неплохие результаты.
Разница в производительности может достигать от 5 до 30 кратного увеличения производительности, а в некоторых случаях и больше 100.
Продаваемые сейчас процессоры предназначены для обычных приложений и используют MIMD — множественный поток команд и данных. Каждое ядро работает отдельно от остальных, исполняя разные инструкции для разных процессов. Дальнейшее появление векторных команд SSE хоть и повысило скорость в работе с большими массивами данных, но всё равно недостаточно чтобы сравниться графическими процессорами, которые изначально были для этого сделаны
1328420122838600Работа GPU распределена изначально. То есть видеочип получает на входе полигоны, обрабатывает их и выдаёт пиксели. Пиксели и полигоны никак не зависят от друг друга. А значит нам нужно много вычислительных блоков с небольшой памятью, чем и является видео чип.
Рис. 3 Разница между CPU и GPU
Устройство памяти на видеочипе:
Память на видеокарте разделяется на несколько частей:
Глобальная память – самый большой кусок памяти на видеокарте. К нему имеют доступ все процессоры на карте. Не кэшируется.
Локальная память – небольшой кусок памяти, который есть у каждого процессора на карте. Не кэшируется.
Текстурная память – память к которой имеют доступ все мультипроцессоры. Кэшируется.
Это так называемая “внешняя” память – память к который может обращаться центральный процессор.
Память констант – память, хранящая константы, заложенные в программе. Медленная, на уровне локальной памяти.
Разделяемая память – небольшой блок памяти доступный для всех процессоров в мультипроцессоре. Скорость на уровне регистров центрального процессора.
Удобство использования CUDA
Отличия от предыдущих версий:
До появления CUDA единственный способ использования видеочипов для не графических вычислений было использование графических библиотек с кодированием и декодированием данных в графические объекты. Естественно такой способ использования был не самым удобным, что и побудило на создание платформы более удобной для обычных вычислений.
Процесс выполнения потока команд на графическом процессоре можно проиллюстрировать следующей рисунком.
Рис. 4 Соотношение обычных и графических вычислений
Допустим, что итоговый массив является картинкой, которую мы должны получить на выходе. Эта картинка разделяется на несколько отдельных равных частей (то есть происходит растеризация). Дальше на вход принимаются входные данные. Программа обработки представляется шейдером, которые и производит нужные нам вычисления над данными, в результате, которых и получается картинка, которая и является нужным нам массивом итоговых данных.
Характеристики CUDA
Несмотря на то, что программирования на CUDA предоставляет некоторую сложность, решения всё равно являются более простыми чем на решения через графические библиотеки.
Набор для разработчика, который скачивается с официального сайта имеет хорошую документацию и множества примеров и с комментариями, так что обучение этой технологии не займёт много времени.
Основные характеристики CUDA:
Общее программно-аппаратное решение для параллельных вычислений на видеочипах Nvidia
Является расширением языков C и C++, что позволяет не учить новый язык, а выучить только сами нововведения в язык.
Присутствуют библиотеки численного анализа и линейной алгебры.
Оптимизирован обмен между CPU и GPU.
Поддержка известных операционных систем: Windows, Linux, Mac OS X.
Возможность разработки на нижнем уровне.
Среда разработки CUDA (CUDA Toolkit) включает:
компилятор nvcc;
библиотеку;
профилировщик;
отладчик gdb для GPU;
CUDAruntimeдрайвервкомплекте стандартных драйверова Nvidia
руководство по программированию;
CUDA Developer SDK (исходный код, утилиты и документация).
При этом меняется и подход к программированию, код делятся на две части:
host – часть программы, которая делается на центральном процессоре и содержит вызовы второй части
. Зачастую, линейна
device – часть которая выполняется на графическом процессоре. Эта та часть, которая разделена на несколько независимых частей, которые и выполняются в ядрах графического процессора CUDA принесла в мир вычисления на GPU, это возможность писать на все вычисления на языке С в обычной форме с минимум расширений для управления вычислительными процессами на видеокарте, в отличии от языка описание шейдеров, который был лишь C-подобным, и обучению ему было довольно сложным занятием. Не говоря уже об специфических моделях памяти и исполнения. Кроме того, CUDA не зависит от никаких графических API, привносит некоторые особенности, которые предназначены специально для вычислений общего назначения.
По сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических API, у архитектуры CUDA отмечают следующие преимущества в этой области:
Интерфейс программирования приложений CUDA (CUDA API) основан на стандартном языке программирования Си с некоторыми ограничениями. По мнению разработчиков, это должно упростить и сгладить процесс изучения архитектуры CUDA
Разделяемая между потоками память (shared memory) может быть использована под организованный пользователем кэш с более широкой полосой пропускания, чем при выборке из обычных текстур
Более эффективные транзакции между памятью центрального процессора и видеопамятью
Полная аппаратная поддержка целочисленных и побитовых операций. Поддержка компиляции GPU кода средствами открытого LLVM
Основные ограничения CUDA:
Маленькая ширина блока;
Закрытая архитектура CUDA, принадлежащая Nvidia.
Преимущества использования CUDA перед предыдущими методами GPGPU вытекают из-за того, что графические библиотеки не были предназначены для обычных вычислений и методы использования были скорее хитростями и поиском уловок, нежели просто нестандартным использованием. То есть не требуется переделывать алгоритмы под удобный для графического конвейера вид, не требуется графический API. Такая архитектура позволяет более свободно управляться с данными и избавляет от большинства недостатков, присущих тем методам.
К тому же CUDA открывает новые аппаратные возможности недоступные ранее. Например, разделяемая память. Она является небольшой памятью, к которой имеют доступ блоки потоков, и которая может кэшировать самые встречающиеся данные и за счёт близкого расположения на чипе обеспечивает довольно большую скорость нежели скорость доступа к общей видео памяти, что уменьшает чувствительность к количеству памяти в параллельных алгоритмах. Это играет роль в линейной алгебре, быстром преобразовании Фурье и фильтрах обработки изображений.
Помимо отказа от улучшенного обмена между CPU и GPU, снятие необходимости переводить данные в текстуры, а функции в шейдеры, CUDA предоставляет возможность писать на низком языке программирования (Ассамблере).
Области применения параллельных расчётов на GPU:
Области в которых используется: анализ и обработка изображений и сигналов, симуляция физики, вычислительная математика, вычислительная биология, финансовые расчёты, базы данных, динамика газов и жидкостей, криптография, адаптивная лучевая терапия, астрономия, обработка звука, биоинформатика, биологические симуляции, компьютерное зрение, анализ данных (data mining), цифровое кино и телевидение, электромагнитные симуляции, геоинформационные системы, военные применения, горное планирование, молекулярная динамика, магнитно-резонансная томография (MRI), нейросети, океанографические исследования, физика частиц, симуляция свёртывания молекул белка, квантовая химия, трассировка лучей, визуализация, радары, гидродинамическое моделирование (reservoir simulation), искусственный интеллект, анализ спутниковых данных, сейсмическая разведка, хирургия, ультразвук, видеоконференции.
Решения с поддержкой Nvidia CUDA:
Все видеокарты, обладающие поддержкой CUDA, могут ускорить процесс выполнения задач довольно требовательных задач, начиная от аудио- и видеообработки, и заканчивая медициной и научными исследованиями. Единственным ограничением является, что это количество памяти, так как если вы хотите поместить требовательную задачу нам наверняка понадобится большое количество памяти, так как несмотря на улучшенный обмен, время, перекачку в нужный момент занимает довольно времени.
Специально для решения требовательных задач, которые можно хорошо распараллелить на GPU, Nvidia выпустила семейство Tesla.
Состав CUDA
Способы управление GPU:
Для использования можно есть 2 API: CUDA Runtime API, которая является высоким уровнем API и CUDA Driver API, которая является низким уровнем API. Несмотря на то, что все функции из высокого уровня вызывают функции с низкого, при программировании мы можем выбрать только один из них.
Хотя даже использования высокого уровня API требует знания принципа работы и устройстве видеочипов.
В какой-то степени есть ещё более высокий уровень: библиотеки, которые предоставляются вместе с компилятором.
Рис. 4 Архитектура программы
Раздел программирование
Основы создания программ на CUDA
У каждого мультипроцессора есть определённое количество ресурсов. Разделяемая память действует только в районе одного блока. Поэтому потоки из разных блоков не могут передавать информацию друг другу напрямую. Из-за этого при программировании надо учитывать, что время передачи информации на общую память и с нею занимает большое количество времени и сильно снижает производительность.
Модель программирования CUDA
При программировании на CUDA мы пользуемся параллельной моделью вычислений, когда каждый из мульти процессоров на графическом процессоре выполнят одну и ту же инструкцию, что и остальные параллельно.
Как уже было сказано ранее видеочип отличается от центрального процессора тем, что может выполнять сразу несколько тысяч потоков одновременно, так как в первую очередь задумывался для обработки графики.
Мы говорили выше, что видеочип отличается от CPU тем, что может обрабатывать одновременно десятки тысяч потоков, что обычно для графики, которая хорошо распараллеливается. Каждый поток скалярен, не требует упаковки данных в 4-компонентные векторы, что удобнее для большинства задач. Большое количество логических потоков и блоков, которое гораздо больше количества физических устройствисполнениядаётхорошую масштабируемость, что хорошо для математических задач.
Модель программирования в CUDA предполагает группирование потоков
Закажи написание реферата по выбранной теме всего за пару кликов. Персональная работа в кратчайшее время!
Наш проект является банком работ по всем школьным и студенческим предметам. Если вы не хотите тратить время на написание работ по ненужным предметам или ищете шаблон для своей работы — он есть у нас.
Нужна помощь по теме или написание схожей работы? Свяжись напрямую с автором и обсуди заказ.
В файле вы найдете полный фрагмент работы доступный на сайте, а также промокод referat200 на новый заказ в Автор24.