2012-04-21 3 views
12

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

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


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

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

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

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

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

ответ

15

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

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

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

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

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

+1

Грег, извините, возможно, недостаточно ясен. Я знаю, как использовать постоянную память. В вопросе я задаюсь вопросом, почему размер постоянной памяти ограничен 64 КБ, если только кэшированный 8 КБ фактически обеспечивает производительность лучше, чем размер глобальной памяти. Аналогичным образом глобальная память может быть доступна через кеш L1. Итак, с точки зрения программиста какая разница между использованием глобальной памяти или постоянной памятью, поскольку оба они кэшируются одинаково? – AdelNick

+6

Постоянный кеш оптимально рассчитан на графику и вычисляет шейдеры. API CUDA предоставляет постоянный кеш, чтобы разработчики могли использовать дополнительный кеш. Постоянный кеш имеет оптимальную производительность, когда все потоки обращаются к одному и тому же адресу.Хиты очень быстрые. Мисс может иметь одинаковые характеристики промаха L1. Постоянный кеш может использоваться для уменьшения измельчения L1. Вычислительная способность 1.x устройства не имеют кэш L1 или L2, поэтому постоянный кеш использовался для оптимизации некоторых доступов. –

Смежные вопросы