Подтвердить что ты не робот

Почему постоянный объем памяти ограничен в CUDA?

Согласно "Руководство по программированию CUDA C" , постоянный доступ к памяти выигрывает, только если используется кэш многопроцессорной константы (раздел 5.3.2.4) 1. В противном случае может быть даже больше запросов на память для полувращения, чем в случае чтения объединенной глобальной памяти. Итак, почему размер постоянной памяти ограничен 64 КБ?

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


1 Постоянная память (раздел 5.3.2.4)

Постоянное пространство памяти находится в памяти устройства и кэшируется в кеше констант, указанном в разделах F.3.1 и F.4.1.

Для устройств с вычислительной способностью 1.x запрос постоянной памяти для основы сначала разбивается на два запроса, по одному для каждого полувращения, которые выдаются независимо.

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

Полученные запросы затем обслуживаются при пропускной способности постоянного кеша в случае попадания в кэш или при пропускной способности памяти устройства в противном случае.

4b9b3361

Ответ 1

Размер постоянной памяти составляет 64 КБ для возможностей вычисления 1.0-3.0. Рабочий набор кэш-памяти составляет всего 8 КБ (см. Руководство по программированию CUDA v4.2 Таблица F-2).

Постоянная память используется драйвером, компилятором и переменными, объявленными __device__ __constant__. Драйвер использует постоянную память для связи параметров, привязок текстур и т.д. Компилятор использует константы во многих инструкциях (см. Разборку).

Переменные, помещенные в постоянную память, можно читать и записывать с использованием функций времени выполнения cudaMemcpyToSymbol() и cudaMemcpyFromSymbol() (см. раздел B.2.2 Руководства по программированию CUDA v4.2). Постоянная память находится в памяти устройства, но доступ к ней осуществляется через постоянный кеш.

В текстуре Ферми константа, L1 и I-Cache - это все кэши уровня 1 внутри или вокруг каждого SM. Все уровни 1 кэшируют память устройства доступа через кэш L2.

Постоянное ограничение 64 Кбайт - за CUmodule, который является модулем компиляции CUDA. Концепция CUmodule скрыта в среде выполнения CUDA, но доступна API-интерфейсом CUDA Driver.