Память текстур в CUDA: концепция и простой пример для демонстрации производительности

Я читаю технический документ NVIDIA под названием Моделирование частиц с помощью CUDA Саймона Грина.

Он описывает пример частиц SDK и используемые алгоритмы.

Обсуждая эффективность кода, автор говорит, что глобальные массивы памяти о положении и скорости частиц "связаны" с текстурами.

Теперь я очень смущен концепцией памяти текстур. Руководство по программированию NVIDIA CUDA проходит через некоторые действительно серьезные и трудные объяснения без каких-либо примеров.

Следовательно, у меня есть 2 вопроса:

  • Может ли кто-нибудь дать/передать мне действительно простой (текстурная память для манекенов) пример использования текстуры и, что повышает производительность.

  • Руководство по программированию CUDA 4.0 на стр. 40 на странице говорит: "Текстурой может быть любая область линейной памяти или массив CUDA". Теперь, если, как сказано, память текстур дает лучшую производительность, чем глобальная память, почему бы не "привязать" всю глобальную память к текстурной памяти?

Ответы

Ответ 1

  • SDK cuda содержит простой пример simpleTexture, который демонстрирует выполнение тривиального преобразования 2D-координат с использованием текстуры.
  • Прежде всего следует иметь в виду, что память текстур - это глобальная память. Единственное различие заключается в том, что текстуры доступны через выделенный кеш-доступ только для чтения и что кэш включает аппаратную фильтрацию, которая может выполнять линейную интерполяцию с плавающей запятой как часть процесса чтения. Кэш, однако, отличается от обычного кэша тем, что он оптимизирован для пространственной локальности (в системе координат текстуры), а не локальности в памяти. Для некоторых приложений это идеальное решение и даст преимущество в производительности как из-за кеша, так и из бесплатных FLOP, которые вы можете получить с фильтрующего оборудования, но для других это не будет, а текстуры могут быть медленнее, поскольку доступ включает в себя пропущенную пропускную способность кеша в дополнение к глобальной памяти, и интерполяция не требуется.

Итак, что-то вроде моделирования частиц может извлечь выгоду из текстур, потому что вычисления обычно выполняются в ячейках или управляют томами, где рассматриваются локальные взаимодействия, а соседние частицы должны получать доступ к скорости и ускорениям друг друга. Для этого пространственный локальный кеш работает лучше, чем простой линейный кеш памяти. Но для других приложений в шаблонах доступа к памяти нет внутренней пространственной локации, а текстуры практически не имеют преимуществ по сравнению с обычной кэшированной памятью.