Почему PREFETCHNTA квалифицируется как тип памяти с обратной записью?

Согласно «Предварительная выборка данных в кэш данных L1» в руководстве по оптимизации архитектуры Intel 64-ia-32 (сентябрь 2019 г.), инструкция PREFETCHNTA работает, если «Загрузка выполняется из памяти с обратной записью».

Мой вопрос в том, применим ли «тип памяти с обратной записью» к обычной кучной памяти?

Согласно первому ответу на текущие архитектуры x86 поддерживать невременные нагрузки (из нормальной памяти)? (от BeeOnRope), «Да, последние массовые процессоры Intel поддерживают невременные нагрузки на обычную память, но только« косвенно »с помощью невременных инструкций предварительной выборки, а не напрямую с использованием невременных инструкций загрузки, таких как movntdqa. В отличие от невременных хранилищ, где вы можете просто напрямую использовать соответствующие невременные инструкции сохранения ".

Я задал аналогичный вопрос на странице Можно ли использовать невременные инструкции mov для памяти кучи? и ответ (Питера Кордеса) был: «Вы можете использовать NT-хранилища, такие как movntps, в обычной памяти WB (то есть в куче)». Этот вопрос касается невременных загрузок (не хранилищ) с PREFETCHNTA.

Из того, что я прочитал, похоже, что PREFETCHNTA работает с обычной памятью кучи, но мне интересно, почему он всегда квалифицируется как «должен быть тип памяти с обратной записью».


person RTC222    schedule 12.06.2020    source источник


Ответы (1)


В процессе пользовательского пространства в основной ОС вся ваша память будет кэшироваться с WB (обратной записью).

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

Все обсуждения других типов памяти в других ответах предназначены только для полноты /, чтобы не говорить вещей, которые не соответствуют действительности во всех случаях. Или объяснить, для чего на самом деле нужна загрузка SSE4.1 movntdqa NT. Это бесполезно с памятью WB (на текущем оборудовании).

(NT предварительная выборка сильно отличается от загрузки NT.)

person Peter Cordes    schedule 12.06.2020
comment
Адреса MMIO могут иметь побочные эффекты и поэтому не могут быть предварительно загружены, кроме того, что они не кэшируются. - person Paul A. Clayton; 13.06.2020
comment
@ PaulA.Clayton: Верно, но память устройства (например, видеопамять, а не регистры MMIO) может быть сопоставлена ​​с WC. Я думаю, вы можете отображать память устройства как WB и использовать clflush повсюду, но вы, вероятно, не захотите. Я думаю, было бы правильнее сказать, что создание страницы, содержащей регистры MMIO кэшируемыми (WT или WB), было бы действительно плохой идеей практически для любого устройства и, вероятно, не годным для использования, но оборудование не остановит вас от съемки я думаю, что вы в ногу таким образом. Если предварительная выборка HW не будет отменена, если это приведет к доступу PCIe независимо от PAT / MTRR? - person Peter Cordes; 13.06.2020
comment
@PeterCordes - многие / большинство систем x86 будут зависать, если вы сопоставите MMIO как WB, а затем попытаетесь что-то написать. Для этого есть много веских причин, некоторые из которых обсуждались на sites.utexas.edu/jdm4372/2013/05/29/ и sites.utexas.edu/jdm4372/2013/05/30/ - person John D McCalpin; 18.06.2020