non temporal memory access

下面代码中“NT”代表Non Temporal,指的是什么?

MOVDQA xmmi, m128
MOVNTDQA xmmi, m128

Non-Temporal SSE指令(MOVNTI,MOVNTQ,etc.) 不遵循普通的cache 一致性的守则,因此这些指令后面需要增加SFENCE以保证它们的结果可以被其他的处理器按照期望的时序看到。

正常的数据,我们如果修改了,存储到cache里,是按照read-modify-write的顺序修改的,如果我们所修改的数据并不会立刻再次被使用,那就没有必要装载到cache里,以免将cache中的有效数据反而victim 出去。这对大型的数据结构比较有效,比如矩阵计算。这时候我们就可以使用non-temporal 类型的指令。

本质上还是这种类型的数据不需要利用cache,反而会破坏cache的性能。

另外,在多线程的情况下,这种类型的store和普通的store,在其他的core看来,顺序并不是该core所见的顺序。当然,该core所见的顺序还是正常的。这时,如果需要让其他的core与当前core所见顺序一样,就需要使用SFECNE。

这恰恰也是需要SFENCE的情况,毕竟正常的write back的X86的指令的store都是in order的,不需要SFENCE保序。

参考链接

欢迎关注我的公众号《处理器与AI芯片》

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值