- •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-устройств
С каждым новым поколением процессоров NVIDIA в них реализуются дополнительные возможности, доступные программисту через CUDA. Программист должен помнить о двух номерах версий. Первое – вычислительная способность (compute capability), а второе – версия среды выполнения и программного интерфейса драйверов.
Вычислительная способность описывает возможности аппаратной части и отражает набор инструкций, поддерживаемый устройством, вместе со спецификациями, такими как максимальное число потоков в связке или число регистров у мультипроцессора. В данный момент обеспечивается полная обратная совместимость, так что вычислительная способность большей версии (более новой) включает в себя все возможности вычислительной способности меньшей версии.
Рис. 1.2. Вывод характеристик GPU с вычислительной способностью 1.1 при помощи примера deviceQuery.
Вычислительную способность конкретного GPU можно запросить программно, что иллюстрируется в примере SDK – deviceQuery. Результат выполнения такой программы показан на рис. 1.2. Для доступа к информации используется функция под названием cudaGetDeviceProperties, возвращающая данные в виде структуры cudaDeviceProp.
На рис. 1.2 вывод соответствует GPU с вычислительной способностью 1.1. Наиболее важные составляющие вычислительной способности – это число мультипроцессоров в устройстве, число регистров у мультипроцессора, объем памяти и дополнительная функциональность.
Некоторые аппаратные особенности не описываются вычислительной способностью. К примеру, способность к выполнению CUDA-функции одновременно с асинхронной передачей данных между хостом и CUDA-устройством доступна на большинстве GPU с вычислительной способностью 1.1, но не на всех. В таких случаях также необходимо использовать функцию cudaGetDeviceProperties, но проверять отдельные поля возвращаемой этой функцией структуры данных. Так, способности к выполнению CUDA-функции одновременно с копированием соответствует поле deviceOverlap.
Инструментарий cuda Toolkit
Установка
Работа с платформой CUDA начинается с установки драйверов инструментария CUDA Toolkit и сборника примеров CUDA GPU Computing SDK, которые доступны на сайте компании NVIDIA по следующему адресу:
http://developer.nvidia.com/object/cuda_3_0_downloads.html#Windows
В состав инструментария входят:
CUDA C/C++ компилятор nvcc и его вспомогательные инструменты;
библиотеки CUDA времени выполнения;
вычислительные библиотеки CUBLAS и CUFFT;
визуальный профайлер CUDA;
визуальный профайлер OpenCL;
другие инструменты и документация.
Проверить совместимость своего видеоадаптера с архитектурой CUDA можно на странице: http://www.nvidia.com/object/cuda_gpus.html .
Инструментарий CUDA Toolkit по умолчанию устанавливается в каталог “C:\CUDA”, но при необходимости его можно перенести в другой каталог.
При установке пакета настраиваются следующие переменные:
CUDA_BIN_PATH (обычно имеет значение C:\CUDA\bin или C:\CUDA\bin64) – путь к исполняемым файлам компилятора и динамическим библиотекам.
CUDA_INC_PATH (обычно имеет значение C:\CUDA\include) – путь к заголовочным файлам, необходимым для компиляции CUDA-программ.
CUDA_LIB_PATH (обычно имеет значение C:\CUDA\lib или C:\CUDA\lib64) – путь к статическим библиотекам, используемых на этапе компоновки CUDA-программ.
Для операционной системы Windows XP примеры CUDA SDK по умолчанию устанавливаются в каталог “C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK” (далее будем опускать начало этого пути). Кроме 78 примеров для CUDA в этот SDK входят 4 примера для платформы DirectCompute, требующие установленного DirectX 11 SDK, и 30 примеров для платформы OpenCL.
