Zgodnie z podręcznikiem dewelopera oprogramowania architektury Intel® 64 i IA-32, tom 1: Architektura podstawowa, rozdział „Programming with Intel Streaming SIMD Extensions (Intel SSE)”:
Buforowanie danych czasowych i nieczasowych
Dane, do których odwołuje się program, mogą być tymczasowe (dane zostaną ponownie użyte) lub nieczasowe (dane będą przywoływane raz i nie będą ponownie wykorzystywane w najbliższej przyszłości). Na przykład kod programu jest generalnie czasowy, podczas gdy dane multimedialne, takie jak lista wyświetlania w aplikacji graficznej 3-D, są często nieczasowe. Aby efektywnie wykorzystać pamięci podręczne procesora, ogólnie pożądane jest buforowanie danych czasowych, a nie buforowanie danych nieczasowych. Przeciążanie pamięci podręcznych procesora danymi nieczasowymi jest czasami nazywane „zanieczyszczaniem pamięci podręcznych”. Instrukcje sterowania buforowaniem SSE i SSE2 umożliwiają programowi zapisywanie danych nieczasowych w pamięci w sposób minimalizujący zanieczyszczenie pamięci podręcznych.
Opis nieczasowego obciążenia i instrukcji przechowywania. Źródło: Podręcznik dewelopera oprogramowania architektury Intel 64 i IA-32, tom 2: Odniesienie do zestawu instrukcji
LOAD (MOVNTDQA - Załaduj podwójną wskazówkę bez wyrównania czasowego czwórki)
Ładuje podwójne słowo-poczwórne z operandu źródłowego (drugi operand) do operandu docelowego (pierwszy operand) przy użyciu nieczasowej wskazówki, jeśli źródłem pamięci jest typ pamięci WC (łączenie zapisu) [...]
[…] procesor nie odczytuje danych do hierarchii pamięci podręcznej ani nie pobiera odpowiedniej linii pamięci podręcznej z pamięci do hierarchii pamięci podręcznej.
Zauważ, że, jak komentuje Peter Cordes, nie jest to użyteczne w normalnej pamięci WB (z zapisem zwrotnym) na obecnych procesorach, ponieważ podpowiedź NT jest ignorowana (prawdopodobnie dlatego, że nie ma modułów wstępnych HW rozpoznających NT) i obowiązuje pełna silnie uporządkowana semantyka obciążenia . prefetchnta
może być używany jako obciążenie zmniejszające zanieczyszczenie z pamięci WB
SKLEP (MOVNTDQ - przechowuj spakowane liczby całkowite za pomocą podpowiedzi niezwiązanej z czasem)
Przenosi spakowane liczby całkowite w operandzie źródłowym (drugim operandzie) do operandu docelowego (pierwszy operand) przy użyciu nieczasowej wskazówki, aby zapobiec buforowaniu danych podczas zapisu do pamięci.
[...] procesor nie zapisuje danych w hierarchii pamięci podręcznej ani nie pobiera odpowiedniej linii pamięci podręcznej z pamięci do hierarchii pamięci podręcznej.
Korzystając z terminologii zdefiniowanej w zasadach i wydajności zapisu w pamięci podręcznej , można je uznać za zapisujące (bez przydzielania zapisu, bez pobierania przy braku zapisu).
Wreszcie, może być interesujące przejrzenie notatek Johna McAlpina dotyczących magazynów nieczasowych .
MOVNTDQA xmmi, m128
jest ładowaniem NT, podczas gdy wszystkie inne instrukcje NT są przechowywane, z wyjątkiemprefetchnta
. Przyjęta tutaj odpowiedź wydaje się mówić tylko o sklepach. Oto, co udało mi się znaleźć w przypadku obciążeń NT . TL: DR: miejmy nadzieję, że procesor zrobi coś pożytecznego ze wskazówką NT, aby zminimalizować zanieczyszczenie pamięci podręcznej, ale nie zastępują one silnie uporządkowanej semantyki "normalnej" pamięci WB, więc muszą używać pamięci podręcznej.