Недостатки использования Texture Cache / Image2D для 2D-массивов? - PullRequest
2 голосов
/ 31 августа 2011

При доступе к двумерным массивам в глобальной памяти использование кэша текстур имеет много преимуществ, таких как фильтрация и отсутствие необходимости заботиться о шаблонах доступа к памяти. Руководство по программированию CUDA называет только один недостаток:

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

Если мне это не нужно, потому что я никогда не пишу в память, из которой я читаю, есть ли какие-либо недостатки / ловушки / проблемы при использовании кэша текстур (или Image2D, так как я работаю в OpenCL)? простой глобальной памяти? Есть ли случаи, когда я буду терять производительность при использовании кэша текстур?

1 Ответ

8 голосов
/ 31 августа 2011

Текстуры могут быть быстрее, с той же скоростью или медленнее, чем «открытый» доступ к глобальной памяти. Не существует общих практических правил для прогнозирования производительности с использованием текстур, поскольку ускорение (или отсутствие ускорения) определяется шаблонами использования данных в вашем коде и используемым аппаратным обеспечением текстуры.

В худшем случае, когда частота попаданий в кэш очень низкая, использование текстур медленнее, чем при обычном доступе к памяти. Каждый поток должен сначала пропустить кеш, а затем вызвать глобальную выборку памяти. В результате общая задержка будет выше, чем при прямом чтении из памяти. Я почти всегда пишу две версии любого серьезного кода, который я разрабатываю, где текстуры могут быть полезны (одна с, а другая без), а затем проверяю их. Часто можно разработать эвристику, чтобы выбрать, какую версию использовать на основе входных данных. CUBLAS широко использует эту стратегию.

...