Что такое Mappable и Non-mappable Memeory
Я прослеживаю некоторый пример кода и наткнулся на функцию ( ID3D11DeviceContext:: UpdateSubresource), с помощью которой "ЦП копирует данные из памяти в подресурс, созданный в не отображаемой памяти ".
Физически и / или логически, каковы упрощенные определения отображаемой памяти?
Аналогично, каковы упрощенные определения не отображаемой памяти?
Я нашел много подробной (с точки зрения начинающего) информации по теме карт памяти и добавил ее в свой список чтения. Я прочитал некоторую основную информацию, которая объясняет, что и почему карты памяти. Как сказал один сайт: "Расположение файлов в памяти компьютера сохраняется в виртуальном файле, известном как карта памяти".
У меня проблемы с подключением этих определений и понятий к терминам отображаемой / не отображаемой памяти.
Я получаю немного помощи от моих друзей.
3 ответа
Mappable memory - это то, к чему вы можете получить доступ непосредственно из вашей программы через отображение виртуальной памяти.
Если память вашей графической карты не отображена в памяти, вам нужно как-то отдать распоряжение карте загрузить ее из вашего адресного пространства в ее адресное пространство. Который включает в себя копирование.
Если память карты была разделена или отображена, процессор мог напрямую записывать в общую память, избегая при этом ненужного копирования.
Для графики в основном четыре вида памяти:
Выделенная видеопамять: это память, которая может использоваться только графической картой, поскольку она физически расположена на самой графической части. GPU может получить к нему доступ, CPU не может. Значение
DXGI_ADAPTER_DESC.DedicatedVideoMemory
количество такого вида памяти.Выделенная системная память: в случае встроенной графической части часть основной системной памяти отводится во время загрузки для выделенного графического использования. Процессор заблокирован от доступа к нему, и он используется исключительно графическим процессором.
DXGI_ADAPTER_DESC.DedicatedSystemMemory
количество такого вида памяти.Совместно используемая системная память: это обычная основная память, которая находится в режиме, доступном как для графического, так и для центрального процессора. Обычно это достигается через что-то вроде апертуры памяти PCIe.
DXGI_ADAPTER_DESC.SharedSystemMemory
количество такого вида памяти.Остальная часть системной памяти недоступна для GPU, только для CPU. Графические процессоры обычно не могут адресовать более 4 ГБ общей памяти между всеми тремя типами.
Так что для дискретной графической части, DedicatedVideoMemory
это что-то вроде 1 ГБ, SharedSystemMemory
что-то вроде 256 МБ или больше, и DedicatedSystemMemory
это 0.
Для интегрированной части, DedicatedVideoMemory
небольшое число (16 МБ или 32 МБ) или даже 0, DedicatedSystemMemory
составляет 256 МБ или 512 МБ, и SharedSystemMemory
256 МБ или больше.
Существуют также системы "Унифицированная архитектура памяти", такие как Xbox One, где имеется небольшое количество DedicatedVideoMemory
и по существу вся основная память также SharedSystemMemory
,
"Mappable" память относится к общей системной памяти. Если связанный ресурс DEFAULT
тогда вы не можете отобразить его, потому что ему разрешено находиться в выделенной видеопамяти. DYNAMIC
ресурс помещается в общую системную память. STAGING
ресурс распределяется в части "остальная часть системной памяти".
Посмотрите пример видеопамяти DirectX.
Отображение памяти - это термин, обозначающий присвоение адресов памяти чему-либо. Это может быть что-то вроде аппаратных регистров для интерфейса USB или расположения в файле.
Файл отображения памяти - это файл, к которому можно получить доступ, как если бы он был в памяти, как огромный массив. Некоторые операционные системы предоставляют функциональность для этого, на других платформах программист должен смоделировать это поведение.
Имейте в виду, что ОСРВ обычно контролирует доступ к ячейкам памяти, включая те, которые отображены в памяти. То, что что-то отображено в памяти (например, порт I2C), не означает, что ваша программа пространства пользователя может получить к ней доступ напрямую.