CUDA, весна 2009, 05 лекция (от 24 марта)
Материал из eSyr's wiki.
Текстуры в CUDA. Применение в обр. сигналов.
Скорость текстурной памяти довольно низкая.
Что такое текстуреый юнит: это некий .нит с фикс. функцианальностью.
Зачем он нужен: вот, есть задача нарисовать треугольник. Но обычно нужен не просто треугольник, а текстурированный прямоугольник. Проблема с софтварными растеризаторами в том, что при переходе со строки на строку происх. cache miss.
Латентность у текстурного юнита больше, чем при обр. в память. Это потому, что текст. юнит это достаточно длинный конвейер (фильтрация, пересчёт адресов, разл. address mode, плюс осоенности кэширования и т. д.), но есть кэш. Если объём данных никаким обр. не удаётся вместить в shmem, можно попытаться исп. текстурную память.
Каким обр. дост. возможность в CUDA обр. к текстурному юниту. Из две:
- CUDA Array. Это такой непрозрачный контейнер, он позв. орг. данные в 1,2,3-мерные массивы, которые будут содержать вектора, они могут быть разной битности (int/float). Напрямую из ядра к ней обр. нельзя.
Обр. в CUDA array можно по-разному:
- Поддержка преобр. адресов на границах (clamp/wrap). Вопрос, как интерп. обр. по индексу за границей массива? Есть два варианта — clamp и wrap.
- При обр. не в пиксел можно исп. либо ближ. тексель, либо интерп.
- Преобр. формата данных: храниться текстура может в разлю форматах, получать float. Есть два типа обр.: normalized или element type. Первая может исп., если хранится в int, то можно получать нормализ. значения.
Можно прибиндить обычную линейную память к текстуре. Зачем это надо: в некоторых задачах нельзя организовать coalescing, можно исп. этот вариант.
Рассмотрим, как происх. исп. текстурной памяти.
...
Свёртка.
В DSP это один из основных инструментов. Выч. сложность свёртки очень велика: W*H*N*K. Есть сепарабелный фильтры, они сущ. уменьш. алг. сложность.
Ещё необх. использовать shmem. Например, есть блок 8 на 8. Но к нему мы хотим применить ядро гораздо больше. Логично, что мы отим запускать по потоку на пиксел, но приходится загружать больше данных. Чтобы не запускать больше потоков, каждый грузит больше днааых.
ДКП. Как можно его считать: наивно и используя сепарабельность. В CUDA SDK есть оба варианта.
Сепарабельный DCT. В примере не используется текстурная память, потому что работа идёт с фиксированными блоками и кэширование не даёт плюшек.
Архитектура и программирование массивно-параллельных вычислительных систем на основе технологии CUDA
01 02 03 04 05 06 07 08 09 10 11
Календарь
вт | вт | вт | вт | вт | |
Февраль
| 24 | ||||
Март
| 03 | 10 | 17 | 24 | 31 |
Апрель
| 07 | 14 | 21 | 28 | |
Май
| 12 |