Лабораторная 4
Лабораторная работа №4 по курсу ПОД.
Работа с текстурной памятью
Использование текстурной памяти
Текстурная память является особым образом выделенной областью глобальной памяти. Обращение к текстурной памяти производится с использованием кэша. Текстурная память также позволяет использовать адресацию с плавающей точкой (при этом применяется линейная или билинейная интерполяция). Соответственно, существуют дополнительные стадии конвейера (преобразование адресов, фильтрация, преобразование данных), которые снижают скорость первого обращения. Для использования текстурной памяти необходимо задать объявление текстуры как глобальной переменной, а потом связать её с требуемой областью глобальной памяти.
texture< float, 1, cudaReadModeElementType > g_TexRef;
Кроме самого объявления текстуры, требуется задатьн есколько параметров.
• Нормализация адресов. При нормализации адресов происходит перевод отрезка [K,N]
в отрезок [0, 1].
• Преобразование адресов. Если координата не попадает в заданный диапазон (отре-
зок [K,N] или [0, 1]), то видеокарта на аппаратном уровне производит преобразование.
Существует два типа преобразования:
– Clamp — возвращается значение на ближайшей границе диапазона;
– Wrap — возвращается значение внутри диапазона, по сути, происходит взятие остатка
от деления адреса на длину диапазона.
• Фильтрация. Когда обращение происходит по адресу типа float, а данные были заданы
для целочисленных адресов, то необходимо определить, какое значение будет возвращено
из текстуры. Существует два способа:
– Point — берется ближайшее значение из массива;
– Linear — расчет значения проводится на основе линейной (билинейной) интерполя-
ции.
• Преобразование данных. Графический процессор имеет возможностьп реобразовывать
считываемые данные, например, массив char4 может бытьп реобразован в float4.
В CUDA существует два типа текстур — линейная и cudaArray.
После объявления текстуры и задания всех её параметров необходимо «привязать» дан-
ные, загруженные в глобальную память или cudaArray, к объявлению текстуры с помощью
функций cudaBindTexture и cudaBindTextureToArray соответственно. Общая схема
приведена на рис.
Общие правила по оформлению программ
Программа
- должна выполняться параллельно
- должна распределять память
- должна использовать векторные операции
Программа должна делать проверки на ошибки:
- Наличие аппаратной поддержки CUDA
- Открылся ли файл исходных данных
- Правилен ли формат данных?
Программа должна быть скомпилирована с опцией Release и запускаться на Windows 7, CUDA Toolkit 7.5
Программа должна быть скомпилирована CUDA, OpenCl, OpenACC.
Неоходимо приложить исходный код программы и скомпилированный исполняемый файл.
Программа должна компилироваться, для этого должен быть приложен vcproj для VS2012, VS2010, либо makefile + .bat
Варианты заданий (* отмечены задачи повышенной сложности)
- Трассировка лучей: Отражения
- Трассировка лучей: Преломления
- Пересечение луча и треугольника
- Пересечение луча и сферы
- Реализовать сепарабельный фильтр Lanczos
- Интерполяция до произвольного размера
- Фильтрация картинки
- Определение границы
- Шумоподавление
- Масштабирование
- Гауссово размытие изображения
- Идентифицировать движение в кадре
- Определить скорость движущегося объекта в кадре
- BVH (Bounding Volume Hierarchy) деревья
- Отобразить треугольник в квадрате используя текстурную память
- Отрисовка объекта с двойной буферизацией
- Kd-дерево
- Регулярная сетка
- Визуализация дискретного преобразования косинусов*
- Применение низкочастотного фильтра
- Применение высокочастотного фильтра
Литература
1. Боресков А.В., Харламов А.В. Основы работы с технологией CUDA. – Изд-во: ДМК Пресс, 2010, 232 стр
2. Казённов А.М. Основы технологии CUDA // Компьютерные исследования и моделирование 2010 Т. 2 № 3 С. 295–308 7.
Варианты заданий составлены проф. Зайцевым В.Е, проф. Ревизниковым Д.Л. и аспирантом Семеновым С.А.