Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Diplom_konets — копия_2_OpenCL.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
225.45 Кб
Скачать

3.2. Технологии разработки параллельных программ для графических процессоров

Рассмотрим технологии CUDA и OpenCL.

3.2.1. CUDA

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

Технология CUDA – это аппаратное и программное обеспечение вычислительной архитектуры, что позволяет обеспечить доступ к набору инструкций графического ускорителя и распоряжаться его памятью в формировании параллельных вычислений. Базой данной технологии является язык программирования С. CUDA дает возможность выполнять алгоритмы осуществимые видеокартах компании Nvidia.

Даже если сложность программирования видеокарт с использованием CUDA довольно велика, она меньше, по сравнению с предшествующими GPGPU. Подобные программы разделяют задачи на несколько мультипроцессоров, что схоже с программированием модели передачи сообщений MPI, но с отличием в том, что данные хранимые в общей памяти не разделяются. В виду того, что программирование CUDA для каждого мультипроцессора схоже с программированием OpenMP, CUDA обязывает знать организацию памяти. И все же, лишь от самой программы зависит сложность реализации разработки на CUDA.

Материал для разработчиков имеет отличную документацию, а также хорошие примеры реализации в коде. Программистам, которые были знакомы с технологиями MPI и OpenMP, процесс познания данной технологии будет несложным. Фундаментом для API является расширенный язык C, чтобы показывать код с языка C, комплект средств разработки CUDA содержит компилятор командной строки NVCC, который основан на компиляторе Open64.

Укажем основные свойства CUDA:

• единое аппаратное и программное решение для параллельных вычислений на графических процессорах NVIDIA;

• поддерживаемых решений начиная с мобильных заканчивая мультичипами.

• основой выбран язык С;

• хорошие стоковые библиотека численного анализа FFT и BLAS;

• оптимальный обмен данными между центральным и графическим процессорами;

• связь с OpenGL и DirectX;

• поддержка 32-разрядных и 64-разрядных операционных систем: Windows, Lynux, MacOS X;

• доступна для разработки на низком уровне.

Среда разработки CUDA:

• NVCC компилятор;

• FFT и BLAS библиотеки;

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

• GDB отладчик для видео процессоров;

• драйвер выполнения CUDA;

• пособие по программированию;

• комплект средств разработки разработчика CUDA.

В качестве примеров исходного кода: параллельная битовая сортировка, фильтр Собеля, шумоподавление, транспонирование матриц, свертка изображения, дискретные вейвлет-преобразования, пример взаимодействия с Direct3D и OpenGL, использование библиотек CUBLAS и CUFFT, , параллельный генератор случайных чисел Мерсенна Twister, вычисление большого массива гистограмм, снижения уровня шума, и тому подобное.

Преимущества и ограничения CUDA

Графический конвейер глазами программиста – это набор стадий обработки. Все делится на два блока: геометрии и растеризации. Первый генерирует треугольники, а второй в сою очередь генерирует пиксели, которые отображаются на мониторе. Ранняя модель GPGPU выглядит следующим образом:

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

Таким образом, GPGPU являясь весьма сложным для обучения ресурсом, себя ограничивает. Даже если данного ограничения недостаточно, есть целый список. Сейчас стало ясно, что ранее созданные методы GPGPU ни что иное как «танцы с бубнами», ведь хотя есть возможность пользоваться всей мощностью GPU, тут нет никакого удобства. Алгоритмы показаны растеризацией, а данные показаны в виде текстуры. Следует отметить, очень специфическую модель памяти и реализацию.

Аппаратная архитектура и программное обеспечение, предназначенные для вычислений на графических процессорах, различна от GPGPU предшествующих моделей тем, что программы для графических процессоров Nvidia пишутся на языке С, используя стандартный синтаксис данного языка, индексы, а также, чтобы получить доступ к вычислительным возможностям видеочипов необходимо минимум расширений.

Преимущества CUDA сравнимо к GPGPU вычислениям:

• внешний вид программирования CUDA реализован на всем известном языке С, которые способствует обучению CUDA;

• обмен данными системы и видеопамяти лучше продуман;

• Нет зависимости от графического API;

• можно записывать данные по любым адресам, память представлена линейно;

• есть аппаратная реализация битовых и целочисленных операций.

Недостатки CUDA:

• отсутствует рекурсия;

• в блоке существует ограничение в 32 потока;

• CUDA принадлежит Nvidia и не является Open Source.

Главные плюсы CUDA относительно методов GPGPU возникают из-за того, что эта архитектура предназначена для качественного применения неграфических вычислений на графическом процессоре и использование языка C, без необходимости приводить алгоритмы в удобный графический вид. CUDA предлагает новый способ вычислений на графических процессорах, которая не использует графический API, предлагая оперативное запоминающее устройство (рассеивают или собираются). Эта архитектура лишена недостатков и GPGPU использует все исполнительные блоки, а также расширение возможностей в связи с целочисленной арифметикой и битовые операции сдвига.

Кроме того, CUDA открывает некоторые аппаратные функции, которые недоступны из API графики, например, совместно используемой памяти. Это память небольшого объема (16 килобайт в многопроцессорной системе), которые могут быть доступны блоки потоков. Это позволяет кэшировать часто используемые данные и может обеспечить более высокую скорость по сравнению с использованием образцов текстуры для выполнения этой задачи. Это, в свою очередь, снижает чувствительность пропускной способности параллельных алгоритмов для многих приложений. Например, это полезно для линейной алгебры, быстрого преобразования Фурье, и фильтров для обработки изображений.

Легкий в CUDA и доступа к памяти. Программный код в API данных графических выходов в виде 32 значений с плавающей точкой одинарной точности в заранее предопределенной области, а также поддерживает scatter, неограниченное количество записей по любому адресу. Эти преимущества дают возможность выполнять на GPU некоторых алгоритмов, которые не могут быть эффективно реализован с использованием методов GPGPU на основе графических API.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]