Согласно Руководству разработчика программного обеспечения для архитектур Intel® 64 и IA-32, Том 1: Базовая архитектура, программирование с помощью Intel Streaming SIMD Extensions (Intel SSE), глава:
Кеширование временных и вневременных данных
Данные, на которые ссылается программа, могут быть временными (данные будут использоваться снова) или невременными (данные будут ссылаться один раз и не будут повторно использоваться в ближайшем будущем). Например, программный код обычно является временным, тогда как мультимедийные данные, такие как список отображения в приложении трехмерной графики, часто не являются временными. Чтобы эффективно использовать кеши процессора, обычно желательно кэшировать временные данные, а не кэшировать невременные данные. Перегрузка кешей процессора невременными данными иногда называется загрязнением кешей. Команды управления кэшируемостью SSE и SSE2 позволяют программе записывать невременные данные в память таким образом, чтобы минимизировать загрязнение кешей.
Описание невременных инструкций по загрузке и хранению. Источник: Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, Том 2: Справочник по набору инструкций.
LOAD (MOVNTDQA - Load Double Quadword Non-Temporal Aligned Hint)
Загружает двойное четверное слово из исходного операнда (второго операнда) в целевой операнд (первый операнд) с использованием невременной подсказки, если источником памяти является тип памяти WC (объединение записи) [...]
[...] процессор не считывает данные в иерархию кеша и не извлекает соответствующую строку кеша из памяти в иерархию кеша.
Обратите внимание, что, как комментирует Питер Кордес, это бесполезно для обычной памяти WB (с обратной записью) на текущих процессорах, потому что подсказка NT игнорируется (вероятно, из-за отсутствия предварительных выборок HW с поддержкой NT) и применяется полная строго упорядоченная семантика загрузки. . prefetchnta
может использоваться как уменьшающая загрязнение нагрузка из памяти WB
СОХРАНИТЬ (MOVNTDQ - сохранять упакованные целые числа с помощью вневременной подсказки)
Перемещает упакованные целые числа в исходном операнде (втором операнде) в целевой операнд (первый операнд), используя невременную подсказку, чтобы предотвратить кэширование данных во время записи в память.
[...] процессор не записывает данные в иерархию кеша и не извлекает соответствующую строку кэша из памяти в иерархию кеша.
Использование терминологии, определенной в Политики записи в кэш и производительность, их можно рассматривать как обратную запись (без выделения-записи, без-выборки-при-записи-промахе).
Наконец, может быть интересно просмотреть Джон Макалпин отмечает о вневременных хранилищах.
person
chus
schedule
07.11.2018
MOVNTDQA xmmi, m128
является загрузкой NT, в то время как все другие инструкции NT являются сохранением, за исключениемprefetchnta
. В принятом здесь ответе, похоже, говорится только о магазинах. Это то, что мне удалось превратить около NT нагрузок. TL: DR: надеюсь, ЦП делает что-то полезное с подсказкой NT, чтобы минимизировать загрязнение кеша, но они не отменяют строго упорядоченную семантику нормальной памяти WB, поэтому они должны использовать кеш. - person Peter Cordes   schedule 23.11.2016