Запомните это:
Потребители едят ужин (супер); Производитель продлевает фабрику своего родителя
blockquote>
Невременные инструкции SSE (MOVNTI, MOVNTQ, и т.д.), не следуют нормальным правилам когерентности кэш-памяти. Поэтому невременные хранилища должны сопровождаться инструкцией SFENCE для их результатов, которые будут замечены другими процессорами своевременно.
, Когда данные производятся и не (сразу) используются снова, то, что операции хранилища памяти читают полную строку кэша сначала и затем изменяют кэшированные данные, вредно для производительности. Эта операция продвигает данные из кэшей, которые могли бы быть необходимы снова в пользу данных, которые не будут скоро использоваться. Это особенно верно для больших структур данных, как матрицы, которые заполнены и затем используемые позже. Прежде чем последний элемент матрицы заполняется, чистый размер выселяет первые элементы, делая кэширование записей неэффективным.
Для этого и аналогичных ситуаций, процессоры оказывают поддержку для невременных операций записи. Невременный в этом контексте означает, что данные не будут скоро снова использованы, таким образом, не будет никакой причины кэшировать его. Эти невременные операции записи не читают строку кэша и затем изменяют ее; вместо этого, новое содержание непосредственно записано в память.
Источник: http://lwn.net/Articles/255364/
Espo, в значительной степени барабанят в цель. Просто требуемый для добавления моих двух центов:
"не временная" фраза означает испытывать недостаток во временной местности. Кэши используют два вида местности - пространственный и временный, и при помощи невременной инструкции Вы сигнализируете к процессору, что не ожидаете элемента данных, который будет использоваться в ближайшем будущем.
я немного скептически отношусь к кодированному рукой блоку, который использует команды управления кэша. По моему опыту, эти вещи приводят к более злым ошибкам, чем какие-либо эффективные увеличения производительности.