Память текстур в CUDA: концепция и простой пример для демонстрации производительности - PullRequest
17 голосов
/ 07 января 2012

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

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

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

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

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

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

  2. Руководство по программированию CUDA 4.0 на стр. 40 на стр. Говорит: «Текстура может быть любой областью линейной памяти или массивом CUDA».Теперь, если (как сказано) текстурная память дает лучшую производительность, чем глобальная память, почему бы не «привязать» всю глобальную память к текстурной памяти?

1 Ответ

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...