Задать вопрос
@WitFed
Программист

Есть в Windows API для задания тега Write Combining для моей области памяти?

Хорошая фича Write Combining, хочется использовать не только для ускорения записей в видеопамять по PCIe.
Есть своё устройство, куда тоже нужно заливать большие потоки.
Есть старый документ https://download.intel.com/design/PentiumII/applno..., другие пока не находятся или запрещены.
Там описание регистров MTRR в современных процессорах Intel, их 8 пар, доступны из режима ядра.
Рекомендуется самому перечитать их и сделать свою запись для нужного региона на свободной позиции.
Как-то это неинтересно с точки зрения ОС, проявлять волюнтаризм.
Кто-то знает API для такой операции ? Считать уже записанное в MTRRs, подумать, официально передать свои пожелания ?..
  • Вопрос задан
  • 89 просмотров
Подписаться Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
Azamat_Lee
@Azamat_Lee
Работаю с Wordpress
Да, в Windows API существует возможность задать атрибут Write Combining для области памяти. Это можно сделать с помощью функции VirtualAlloc или VirtualAllocEx, передав флаг PAGE_WRITECOMBINE в параметре flProtect. Однако стоит отметить, что использование Write Combining может привести к снижению производительности при чтении или не последовательной записи, поэтому его следует применять осторожно и только в тех случаях, когда это действительно необходимо.

Пример использования VirtualAlloc с флагом PAGE_WRITECOMBINE:

void* pMemory = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE | PAGE_WRITECOMBINE);


Если вы столкнулись с ошибкой или функция возвращает NULL, убедитесь, что вы правильно указали все параметры и что ваша система поддерживает Write Combining. Также проверьте значение, возвращаемое функцией GetLastError(), чтобы получить информацию о возникшей ошибке.

Обратите внимание, что для использования Write Combining ваш процессор должен поддерживать эту функцию, и она должна быть включена в BIOS или UEFI. Кроме того, доступ к некоторым специфическим функциям, таким как настройка регистров MTRR (Memory Type Range Registers), обычно требует привилегий уровня ядра

Так видит этот ответ нейросеть. (с)
Ответ написан
@WitFed Автор вопроса
Программист
Вопрос решит функция:
PVOID MmMapIoSpace(
[in] PHYSICAL_ADDRESS PhysicalAddress,
[in] SIZE_T NumberOfBytes,
[in] MEMORY_CACHING_TYPE CacheType
);

Там последний параметр может быть равен MmWriteCombined и ещё много чему..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы