- •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
- •Порядок выполнения работы
- •Методические рекомендации
- •Методические рекомендации
- •Особенности текстурной памяти.
- •Особенности линейной текстурной памяти.
- •Защита лабораторной работы
- •Правила оформления отчета
- •Оформление титульного листа
- •Библиографический список
Особенности разделяемой памяти.
Разделяемая память находится на каждом мультипроцессоре и используется совместно всеми потоками внутри блока. Разделяемая память, как правило, требует использования команды явной синхронизации __syncthreads() после операций копирования и изменения. Для повышения пропускной способности разделяемая память разбита на 16 банков, доступ к которым идет независимо. Банки состоят из 32-битовых слов, причем подряд идущие слова расположены в идущих подряд блоках. Если возникает ситуация, что несколько нитей обращаются к одному и тому же банку (не элементу, а именно банку), то их обращения обрабатываются последовательно (происходит конфликт банков), однако если все нити обращаются к одному и тому же элементу, то конфликта банков не происходит.
Переменные, объявленные спецификатором __shared__, размещаются в разделяемой памяти:
__shared__ float mem_shared[N_THREADS];
Во время исполнения блока на мультипроцессоре содержимое разделяемой памяти сохраняется. Однако, после того как на мультипроцессоре сменится блок, не гарантируется, что содержимое старого блока сохранится. Поэтому не рекомендуется синхронизировать задачи между блоками и оставлять в разделяемой памяти какие-либо данные, надеясь на их сохранность.
Приведем несколько простых примеров:
__global__ void kern(float* data)
{
//Создается массив float в разделяемой памяти:
__shared__ float a[256];
int idx = blockIdx.x * 256 + threadIdx.x;
//Копируем из глобальной памяти в разделяемую
a[idx] = data[idx];
//Синхронизируем.
__syncthreads();
//Используем
data[idx] = a[idx]+ a[(idx + 1) % 256];
}
Конфликтов не возникает, так как float занимают 32 бита и последовательные float располагаются в последовательных банках.
__global__ void kern(short* data)
{
//Создается массив short в разделяемой памяти:
__shared__ short a[256];
int idx = blockIdx.x * 256 + threadIdx.x;
//Копируем из глобальной памяти в разделяемую
a[idx] = data[idx];
// Синхронизируем.
__syncthreads();
//Используем
data[idx] = a[idx]+ a[(idx + 1) % 256];
}
Возникают конфликты 2-го порядка, так как short занимают 16 бит, и два последовательных short располагаются в одном банке. Аналогично если объявлять массив char, возникнет конфликт 4-го порядка, так как char использует 8 бит.
Отчет по практической работе
Отчет по практической работе должен соответствовать порядку выполнения работы и содержать конспект изученного материала, данные о вычислительных возможностях видеокарты учебного компьютера:
объем глобальной памяти;
объем разделяемой памяти;
максимальную размерность текстуры (x,y,z);
КЭШ текстурной памяти на мультипроцессор.
Практическая работа №3. Программный пакет «Sarcis»
Цель работы
Изучение интерфейса программного пакета «Sarcis».
Закрепление теоретического материала учебной дисциплины «Цифровая обработка изображений».
Порядок выполнения работы
Открыть любой графический файл (.bmp) в пакете «Sarcis»..
Построить гистограмму изображения.
Улучшить изображения с помощью выравнивания гистограммы.
Произвести пороговую сегментацию.
Показать функцию яркости изображения.
Обработать графический файл любым имеющимся в библиотеке методом.
Изучить механизм подключения внешних библиотек.
Изучить пример создания внешней библиотеки.
Создать внешнюю подключаемую библиотеку, проверить корректность ее работы.
