- •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
Пожалуй, одной из наиболее важных для разработчиков особенностей CUDA является свободный доступ к памяти (поддержка scatter и gather операций) с возможностью побайтовой адресации.
В CUDA выделяют шесть типов памяти (см. табл.3.4):
Регистровая память – является самой быстрой из всех видов. Все регистры GPU 32- разрядные. В CUDA нет явных способов использования регистровой памяти, всю работу по размещению данных в регистрах берет на себя компилятор.
Глобальная память – основной тип памяти, имеющий самый большой объем и доступный для всех мультипроцессоров на видеочипе. Размер глобальной памяти напрямую зависит от модели видеокарты и варьируется от 256 Мбайт до 4 Гбайт. Обладает высокой пропускной способностью (более 100 Гбайт/с на последних решениях от NVIDIA), но работа с этим типом памяти сопряжена со значительными временными задержками (несколько сотен тактов). Глобальная память не кэшируется, поддерживает линейную адресацию и обычные указатели.
Локальная память – тип памяти, в которой по умолчанию размещаются все переменные, объявленные внутри CUDA-программы. Так же, как и глобальная память, она весьма медленная и не поддерживает кэширование.
Разделяемая память – это блок памяти, доступный на запись и чтение из всех потоковых процессоров в мультипроцессоре. По скорости этот тип памяти сравним с регистрами. Основное назначение разделяемой памяти – обеспечение взаимодействия между потоками. Также разделяемая память может быть использована в роли программируемого кэша, с помощью которого достигается снижение задержек при работе с глобальной памятью.
Константная память – область памяти, используемая для хранения константных значений программы. Этот тип памяти кэшируется. При отсутствии необходимых данных в кэше чтение из константной памяти осуществляется с задержками в несколько сотен тактов.
Текстурная память – блок памяти, доступный только на чтение всеми мультипроцессорами. Выборка из этого типа памяти происходит при помощи текстурных блоков видеочипа. За счет этого возможно выполнение линейной интерполяции без каких-либо дополнительных затрат. Данный тип памяти кэшируется.
Таблица 3.4.
Сравнительные характеристики разных типов памяти CUDA
Тип памяти |
Доступ |
Уровень выделения |
Скорость работы |
Регистры |
чтение/запись |
на поток |
Высокая (on-chip) |
Локальная |
чтение/запись |
на поток |
Низкая (DRAM) |
Разделяемая |
чтение/запись |
на блок |
Высокая (on-chip) |
Глобальная |
чтение/запись |
на сетку |
Низкая (DRAM) |
Константная |
только чтение |
на сетку |
Высокая (L1 cache) |
Текстурная |
только чтение |
на сетку |
Высокая (L1 cache) |
На рис. 3.5 изображена программная модель памяти видеокарты. На самом деле глобальная, локальная, текстурная и константная память представлены на чипе в виде локальной памяти видеокарты. Центральному процессору доступна лишь глобальная, константная и текстурная память.
При проектировании алгоритма для CUDA крайне важно помнить обо всех видах памяти и их особенностях.
Рис. 3.5. Программная модель памяти мультипроцессора
