- •230100 – Информатика и вычислительная техника
- •Часть 2. Алгоритмы цифровой обработки изображений 58
- •Часть 3. Методические указания для практических и лабораторных работ 109
- •Введение
- •Часть 1. Программирование графического адаптера nvidia с использованием технологии cuda
- •Краткая история развития графических адаптеров
- •Архитектура nvidia cuda
- •Архитектура gpu-приложения
- •Основные различия между cpu и cuda-устройством
- •Различие возможностей между поколениями cuda-устройств
- •Инструментарий cuda Toolkit
- •Установка
- •Проверка правильности установки
- •Компиляция примеров
- •Прикладные программные интерфейсы cuda
- •Особенности компиляции
- •Опции компилятора nvcc
- •Профайлер
- •Отладка программ в режиме эмуляции устройства
- •Среда разработки nvidia Parallel Nsight
- •Подключаемые библиотеки
- •Библиотека cublas
- •Библиотека cufft
- •Часть 2. Алгоритмы цифровой обработки изображений
- •Видоизменение гистограммы изображения
- •Основы пространственной фильтрации
- •Сглаживающие пространственные фильтры
- •Сглаживание изображений локальным усреднением
- •Сглаживание по обратному градиенту
- •Сглаживающий сигма-фильтр
- •Сглаживание по наиболее однородным областям
- •Медианный фильтр
- •Описание метода медианной фильтрации
- •Одномерный медианный фильтр
- •Зависимость качества работы медианного фильтра от размера апертуры
- •Двумерный медианный фильтр
- •Пространственные фильтры выделения границ областей
- •Линейные методы выделения границ областей. Лапласиан
- •Нелинейные методы выделения границ областей
- •Оператор Превита
- •Частотные фильтры
- •Сглаживающий частотный фильтр
- •Частотный фильтр повышения резкости
- •Гомоморфная фильтрация
- •Морфологическая фильтрация
- •Операции математической морфологии
- •Дилатация
- •Алгебраические свойства дилатации и эрозии
- •Применение морфологической дилатации
- •Применение морфологической эрозии
- •Размыкание и замыкание
- •Применение морфологических операций размыкания и замыкания
- •Основные морфологические алгоритмы
- •Выделение границ.
- •Заполнение областей.
- •Выпуклая оболочка.
- •Утончение.
- •Утолщение.
- •Построение остова.
- •Часть 3. Методические указания для практических и лабораторных работ
- •Практическая работа №1. Введение в технологию cuda
- •Цель работы
- •Порядок выполнения работы
- •Теоретическая часть
- •Архитектура графических адаптеров nvidia.
- •Архитектура чипа g80.
- •Архитектура чипа Fermi.
- •Вычислительные способности графического процессора.
- •Среда разработки cuda.
- •Язык cuda с.
- •Модель программирования cuda.
- •Теоретическая часть Модель памяти cuda
- •Особенности глобальной памяти.
- •Особенности разделяемой памяти.
- •Теоретическая часть Программный пакет «Sarcis».
- •Команды меню.
- •Панель инструментов.
- •Механизм подключения динамических библиотек.
- •Создание внешней библиотеки
- •Пример листинга программы динамической библиотеки.
- •Медианная фильтрация
- •Варианты индивидуальных заданий
- •Выбор по дискретному критерию.
- •Выбор по среднему контрасту.
- •Выбор по среднему градиенту.
- •Выбор на основе простых статистик.
- •Параметрическая аппроксимация.
- •Моментный подход.
- •Варианты индивидуальных заданий
- •Теоретическая часть
- •Инициализация устройства.
- •Выделение памяти на gpu
- •Пересылка данных между cpu и gpu.
- •Вызов функции ядра.
- •Методические рекомендации
- •Цель работы
- •Варианты индивидуальных заданий
- •Методические рекомендации
- •Защита лабораторной работы
- •Лабораторная работа № 3. Работа с разделяемой памятью в технологии cuda
- •Порядок выполнения работы
- •Методические рекомендации
- •Методические рекомендации
- •Особенности текстурной памяти.
- •Особенности линейной текстурной памяти.
- •Защита лабораторной работы
- •Правила оформления отчета
- •Оформление титульного листа
- •Библиографический список
Теоретическая часть
CUDA (англ. Compute Unified Device Architecture) — технология GPGPU (англ. General-Purpose computing on Graphics Processing Units – вычисления общего назначения на графических процессорах), позволяющая программистам реализовывать на упрощённом языке программирования Си алгоритмы, выполнимые на графических процессорах видеокарт GeForce восьмого поколения и старше. Технология CUDA разработана компанией NVIDIA. Фактически CUDA позволяет включать в текст Си программы специальные функции. Эти функции пишутся на упрощённом языке программирования Си и выполняются на графических процессорах NVIDIA.
Архитектура графических адаптеров nvidia.
Видеоадаптеры традиционно ассоциируют с визуализацией трехмерной графики, однако они являются также высокопроизводительными арифметическими устройствами, способными выполнять параллельно тысячи потоков обработки, поэтому применяются и для разнородных вычислений, поддающихся распараллеливанию. Для эффективного использования технологии CUDA важно разбираться в базовых архитектурных особенностях видеочипов NVIDIA.
Архитектура чипа g80.
Разработка CUDA была анонсирована вместе с чипом G80. Это первый графический процессор NVIDIA, основанный на унифицированной шейдерной архитектуре, которая все расчёты проводит на так называемых скалярных унифицированных шейдерных конвейерах, которые также известны как потоковые процессоры (streaming processors, SP) или CUDA-ядра.
Графический процессор G80 состоит из 128 потоковых процессоров, которые сгруппированы в 8 блоков выборки текстур (thread processing clusters, TPC). Каждый блок подразделяется на 2 потоковых мультипроцессора (streaming multiprocessors, SM). Итого по 16 потоковых процессоров на 1 блок выборки текстур и по 8 процессоров на 1 мультипроцессор. Структура графического процессора представлена на рис. 3.1.
Рис. 3.1. Архитектура чипа G80
Основные составляющие блока выборки текстур:
TEX – логика работы с текстурами. Содержит в себе участки конвейера, предназначенные для обработки текстурной памяти.
SM – потоковый мультипроцессор, самостоятельный вычислительный модуль. Именно на нем осуществляется выполнение расчетов.
Основные составляющие мультипроцессора:
SP – потоковый процессор, непосредственно вычислительный модуль. Способен совершать арифметические операции с целочисленными операндами и с операндами с плавающей точкой (одинарная точность). Не является самостоятельной единицей, управляется SM.
SFU – модуль сложных математических функций. Проводит вычисления сложных математических функций (exp, sqr, log). Использует вычислительные мощности SP.
Регистровый файл – единый банк регистров. На каждом SM имеется 32Кб. Самый быстрый тип памяти на графическом адаптере.
Разделяемая память – специальный тип памяти, предназначенный для совместного использования данных потоков. На каждом SM – 16Кб разделяемой памяти.
Кэш констант – место кэширования особого типа памяти (константной).
Кэш инструкций, блок выборки инструкций – управляющая система SM. Не играет роли при программировании.
Архитектура чипа Fermi.
В 2009 г. NVIDIA официально представила новую архитектуру CUDA устройств под названием Fermi (рис. 3.2).
Рис. 3.2. Архитектура чипа Fermi
Основой данной архитектуры стал графический процессор GF100. Как и предшественники, GF100 организован в виде масштабируемого массива блоков: кластеров обработки графики (GPC), потоковых мультипроцессоров (SM) и контроллеров памяти.
Особенности новой архитектуры:
Третье поколение потокового мультипроцессора (SM):
32 ядра CUDA на SM;
восьмикратный прирост производительности в операциях двойной точности в сравнении с предшественником;
два блока планировщика задач (warp scheduler) на SM вместо одного;
64 КБ ОЗУ с конфигурируемым разделением на общую память и L1-кэш.
Второе поколение набора инструкций параллельного выполнения потоков:
унифицированное адресное пространство с полной поддержкой С++;
оптимизация для OpenCL и DirectCompute;
полная 32- и 64-битная точность в соответствии с IEEE 754-2008;
инструкции доступа к памяти для поддержки перехода на 64-битную адресацию;
улучшенная производительность предсказаний.
Улучшенная подсистема памяти:
иерархия NVIDIA Parallel DataCache с конфигурируемым L1-кэшем и общим L2;
поддержка кодов коррекции ошибок (ECC), впервые на GPU;
существенно увеличенная производительность операций чтения и записи в память.
Движок NVIDIA GigaThread:
десятикратное ускорение процедуры контекстного переключения;
параллельное выполнение ядер;
непоследовательное исполнение потоков.
