- •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
- •Цель работы
- •Порядок выполнения работы
- •Методические рекомендации
- •Методические рекомендации
- •Особенности текстурной памяти.
- •Особенности линейной текстурной памяти.
- •Защита лабораторной работы
- •Правила оформления отчета
- •Оформление титульного листа
- •Библиографический список
Среда разработки nvidia Parallel Nsight
Продукт Parallel Nsight (кодовое имя Nexus) является первой попыткой разработки единого инструмента, специализированного под массивно-параллельные вычисления, который был бы интегрирован с Microsoft Visual Studio, самой популярной средой разработки. Этот мощный плагин предназначен для гетерогенных систем и добавляет возможность отладки, профилирования и анализа GPU-кода с использованием стандартных средств. Он поддерживает практически все распространенные программные GPGPU-платформы: CUDA C, OpenCL, DirectCompute, Direct3D и OpenGL.
Продукт включает в себя следующие три основных инструмента.
Parallel Nsight Debugger – позволяет отлаживать код на CUDA C/C++ и DirectCompute прямо на аппаратном GPU, что значительно ускоряет отладку и показывает реальную точность вычислений. Работоспособность служебных окон Visual Studio (Locals, Watches, Memory, Breakpoints) сохранена. Для разработки, связанной с трехмерной графикой, имеется аналогичная поддержка всех видов HLSL-шейдеров (вершинных, пиксельных, геометрических и тесселяционных).
Parallel Nsight Analyzer (только в платной профессиональной версии) позволяет локализовать узкие места в производительности через наблюдение событий, охватывающих систему CPU+GPU целиком. Поддерживаются платформы CUDA C/C++, OpenCL, DirectCompute.
Parallel Nsight Graphics Inspector – позволяет в реальном времени обрабатывать уже отрендеренные при помощи Direct3D кадры. Функция Frame Profiler помогает автоматически обнаруживать узкие места и выдает информацию о производительности на уровне отдельных вызовов DirectX. Функция Pixel History показывает все операции, касающиеся заданного пикселя.
Подключаемые библиотеки
Библиотека cublas
CUBLAS – это реализация BLAS (Basic Linear Algebra Subprograms), подпрограмм для базовых операций линейной алгебры, на основе интерфейса времени выполнения CUDA. Она позволяет быстро получить ускорение за счет использования GPU в имеющихся программах и не требует явного программирования драйвера CUDA. Данная версия библиотеки прикрепляется к одному GPU и не обеспечивает автоматическое распараллеливание на несколько GPU.
Простая модель работы с этой библиотекой включает создание объектов в памяти GPU для хранения матриц и векторов, их заполнение, вызов последовательности из функций CUBLAS и отправку данных обратно на хост. Библиотека CUBLAS предоставляет вспомогательные функции для всех этих операций.
Для максимальной совместимости с существующей базой кода на языке Фортран используется хранение матриц, при котором первый индекс означает номер столбца (column-major order), а нумерация индексов начинается с единицы. Так как в языках программирования C/C++ первый индекс означает номер строки (row-major order), то требуется дополнительное преобразование индексов посредством макросов или встраиваемых (inline) функций для реализации матриц на основе одномерных массивов. Самый простой перевод кода с языка Фортран на язык Си при сохранении нумерации индексов с единицы возможен при помощи следующего макроса:
#define IDX2F(i,j,ld) ((((j)-1)*(ld))+((i)-1))
где i – номер строки, j – номер столбца, ld (leading dimension) – размер матрицы по ведущему измерению, т.е. в случае, когда первый индекс означает номер столбца, здесь необходимо указать число строк матрицы. Если же код изначально написан на C/C++ и хочется сохранить нумерацию индексов с нуля, то можно использовать другой макрос:
#define IDX2C(i,j,ld) (((j)*(ld))+(i))
Небольшие примеры на Фортране и C, демонстрирующие эти особенности, приводятся в руководстве по библиотеке CUBLAS.
Поскольку основные функции CUBLAS не возвращают прямо код ошибки из-за совместимости с существующими библиотеками BLAS, для получения последней ошибки имеется отдельная функция.
Интерфейс библиотеки CUBLAS доступен через заголовочный файл cublas.h. Соответствующая динамическая библиотека на ОС Windows называется cublas.dll (cublasemu.dll для режима эмуляции устройства).
Функции библиотеки CUBLAS разделены на следующие группы:
Вспомогательные функции (инициализация и завершение работы, получение ошибки, выделение и освобождение памяти на GPU, чтение и запись векторов и матриц).
Функции BLAS1 – скалярные, векторные и вектор-векторные операции. Имеются варианты для вещественных и комплексных чисел одинарной и двойной точности.
Функции BLAS2 для плавающей арифметики одинарной точности – операции матрица-вектор.
Функции BLAS2 для плавающей арифметики двойной точности.
Функции BLAS3 – операции матрица-матрица.
Интерфейс для языка Фортран в двух формах:
fortran_thunking.c – переключающая (thunking) обертка;
fortran.c – прямая обертка.
