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