【发布时间】:2010-09-07 09:57:45
【问题描述】:
这是一个有点低级的问题。在 x86 汇编中有两条 SSE 指令:
MOVDQA <i><em>xmmi, m128</em></i>
和
MOVNTDQA <i><em>xmmi, m128</em></i>
IA-32 软件开发人员手册说 MOVNTDQA 中的 NT 代表 Non-Temporal,否则与 MOVDQA 相同。
我的问题是,Non-Temporal 是什么意思?
【问题讨论】:
-
请注意,SSE4.1
MOVNTDQA xmmi, m128是 NT 加载,而所有其他 NT 指令都是存储,prefetchnta除外。这里接受的答案似乎只是在谈论商店。 This is what I've been able to turn up about NT loads。 TL:DR:希望 CPU 可以通过 NT 提示做一些有用的事情来最小化缓存污染,但它们不会覆盖“普通”WB 内存的强排序语义,因此它们必须使用缓存。 -
更新:NT loads 除了在大多数 CPU(例如 Intel SnB 系列)上的 UCSW 内存区域外,可能不会做任何有用的事情。不过,NT/流媒体存储肯定可以在正常内存上工作。
-
@Peter:你是说 USWC 内存吧?我以前从未听说过 UCSW 或 USWC 内存。谷歌搜索错误的首字母缩写词没有帮助:-)
-
@AndrewBainbridge:是的,WC 内存类型属性。不可缓存的推测性写入组合。我想我在大写 UnCacheable 并记住它应该是 4 个字母长。 :P