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


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы