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