- •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 Toolkit, можно проверить, набрав в командной строке “nvcc –V” или “nvcc --version”. Примеры CUDA SDK поставляются в двух вариантах: исходном и откомпилированном. Для проверки правильной конфигурации GPU и программного обеспечения рекомендуется запустить пример bandwidthTest, расположенный в каталоге “NVIDIA GPU Computing SDK\C\bin\win32\Release” (для 64-битных версий ОС Windows – в каталоге “NVIDIA GPU Computing SDK\C\bin\win64\Release”).
Если все установлено правильно, то получится результат, представленный на рис. 1.3.
Рис.. 1.3. Измерение пропускной способности памяти примером bandwidthTest для проверки правильности установки инструментария CUDA.
Вторая строка, содержащая “device 0”, подтверждает обнаружение CUDA-совместимого устройства, а строка “Test PASSED” подтверждает успешное прохождение всех тестов данного примера. В случае несовместимости GPU будет выведено сообщение “no CUDA-capable device is available”.
Компиляция примеров
Файлы проектов CUDA SDK разработаны так, чтобы компиляция осуществлялась одним нажатием. При использовании среды разработки Microsoft Visual Studio 2005 (или аналогично Visual C++ 2005 Express) используются файлы *.sln, а в случае Microsoft Visual Studio 2008 (или аналогичной Express-версии) – файлы *_vc90.sln. В состав SDK входят как отдельные файлы проектов для каждого примера, так и общий под названием Release.sln (Release_vc90.sln).
В качестве примера предлагается скомпилировать CUDA-проект с названием «bandwidthTest», исходный код которого находится в каталоге “NVIDIA GPU Computing SDK\C\src\bandwidthTest”. При этом результирующий исполняемый файл будет расположен в “NVIDIA GPU Computing SDK\C\bin\win32\Debug” (или в …\win64\Debug для 64-битных версий ОС Windows).
Среда из серии Microsoft Visual C++ Express не способна скомпилировать 64-битную версию программы. Поэтому в случае использования ее на 64-битной версии ОС Windows необходимо сконфигурировать проект в 32-битном режиме.
Все проекты примеров CUDA SDK имеют четыре заранее подготовленных конфигурации: Debug, Release и две аналогичных конфигурации с эмуляцией GPU: EmuDebug и EmuRelease. Последние два варианта позволяют вести разработку в отсутствие совместимого GPU. Некоторые примеры, в частности simpleD3D9, требуют наличия установленного пакета DirectX SDK и настройки в Visual Studio соответствующих путей. Детали такой настройки имеются в документации DirectX SDK.
Большинство примеров используют вспомогательную библиотеку Сutil, исходный код которой расположен в каталоге “NVIDIA GPU Computing SDK\C\common\src”. Конфигурациям Release и Debug в 32-битном и 64-битном вариантах соответствуют следующие имена статической и динамической библиотек: cutil32, cutil32D, cutil64, cutil64D. Файлы проекта библиотеки Сutil расположены в каталоге “NVIDIA GPU Computing SDK\C\common\”, а результаты ее компиляции сохраняются в подкаталоге “lib”. Эта библиотека реализует следующие функции:
разбор аргументов командной строки;
чтение/запись бинарных файлов и изображений в формате PPM;
сравнение массивов данных (обычно используется для сравнения результатов, полученных на CPU и GPU);
таймеры;
макросы для проверки кодов ошибок;
проверка конфликтов банков разделяемой памяти.
Библиотека Сutil не входит в инструментарий CUDA Toolkit и поддержка по ней не осуществляется. Единственная ее задача – быть удобным инструментом для написания краткого платформо-независимого кода примеров.
