Согласно "Руководство по программированию CUDA C" , постоянный доступ к памяти выигрывает, только если используется кэш многопроцессорной константы (раздел 5.3.2.4) 1. В противном случае может быть даже больше запросов на память для полувращения, чем в случае чтения объединенной глобальной памяти. Итак, почему размер постоянной памяти ограничен 64 КБ?
Еще один вопрос, чтобы не спрашивать дважды. Насколько я понимаю, в архитектуре Fermi кеш текстуры объединен с кэшем L2. Использует ли использование текстуры смысл или чтение глобальной памяти кэшируется таким же образом?
1 Постоянная память (раздел 5.3.2.4)
Постоянное пространство памяти находится в памяти устройства и кэшируется в кеше констант, указанном в разделах F.3.1 и F.4.1.
Для устройств с вычислительной способностью 1.x запрос постоянной памяти для основы сначала разбивается на два запроса, по одному для каждого полувращения, которые выдаются независимо.
Затем запрос разбивается на столько отдельных запросов, что в исходном запросе есть разные адреса памяти, уменьшая пропускную способность на коэффициент, равный количеству отдельных запросов.
Полученные запросы затем обслуживаются при пропускной способности постоянного кеша в случае попадания в кэш или при пропускной способности памяти устройства в противном случае.