Общая / доступная для текстур память DirectX / Cuda / OpenGL - PullRequest
3 голосов
/ 03 августа 2010

Может кто-нибудь объяснить, пожалуйста, разницу в текстурной памяти, используемой в контексте Cuda, и текстурной памяти, используемой в контексте DirectX. Предположим, что графическая карта имеет 512 МБ объявленной памяти, как она разделена на постоянную память / текстурную память и глобальную память.

например. У меня есть карта Тесла, которая имеет totalConstMem как 64 КБ и totalGlobalMem как 4 ГБ, как запрашивает cudaGetDeviceProperties, но нет переменной, которая говорит мне, какой объем памяти текстуры требуется.

Кроме того, сколько стоит «Память текстур» при доступе через DirectX и другие графические API. У меня нет опыта программирования в этих API, поэтому я не знаю, как и к какой памяти они могут получить доступ. Но AFAIK, вся память для доступа кешируется аппаратно. Пожалуйста, поправьте меня, если я ошибаюсь.

После ответа KoppeKTop: Так действует ли совместно используемая память в качестве автоматического кэша для текстурной памяти в случае CUDA и DirectX и того и другого? Я не думаю, что иметь другой ч / б кеш имеет смысл в любом случае. Означает ли это также, что если я использую всю разделяемую память в ядре, память текстур не будет кэшироваться?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 августа 2010

После ответа KoppeKTop: разделяемая память действует как автоматический кеш для текстурной памяти в случае CUDA и DirectX оба? Я не думаю, что иметь другой ч / б кеш имеет смысл тем не мение. Означает ли это также, что если я используя всю общую память в ядро, текстура памяти не получится кэшируются

Для поколений до GF100 (G80) графические процессоры имеют выделенные глобальные константы и глобальные кэши текстур (оба доступны только для чтения). Shared-memory имеют свои собственные выделенные банки памяти.

Для генерации GF100 у вас все еще есть выделенный кэш текстур, но та же самая встроенная память теперь распределяется между разделяемой памятью и кешем L1 (кеширование глобальной памяти). Вы можете настроить распределение этой памяти, если вы используете CUDA. Для DirectX / OpenGL графический драйвер использует 48 КБ общей памяти / 16 КБ кэш-памяти L1.

В любом случае совместно используемая память всегда управляется программным обеспечением (если только часть, посвященная кэш-памяти L1 на GF100), и не поглощает кэш-памяти текстур.

2 голосов
/ 03 августа 2010

На самом деле, я никогда не имел дело с DirectX, но я мог объяснить ситуацию с текстурами CUDA.Текстура - это простой массив (cudaArray или тональный массив) с кэшированным доступом только для чтения, который хранится в глобальной памяти.Таким образом, максимальный размер одной большой текстуры на карте 512 МБ составляет 512 мегабайт (на самом деле немного меньше, но этого недостаточно).Он оптимизирован для доступа к данным в 2D-пространстве (он кэшируется как 2D-фрагменты).Также координаты и значения могут быть преобразованы при доступе (подробности см. В Руководстве по программированию CUDA).

И нет, при доступе кешируется не вся память (для устройств CUDA с возможностью вычисления 1.x).Только постоянная и текстурная память.Устройства с вычислительными возможностями> = 2.0 (Fermi) кэшируют все обращения к памяти с использованием кэшей L1 и L2 (или только L2 - это настраивается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...