在x86/x64上,非时态存储指令(如MOVNTI和MOVNTPS )比“常规”存储提供更弱的内存排序保证。我知道,当共享内存时,栅栏(例如SFENCE)是必要的,它将被写入线程间的非临时内存中。然而,对于线程本地内存来说,栅栏指令是否是必需的?如果我通过MOVNTPS写入到某个位置,是否保证在没有任何栅栏指令的情况下,在同一线程中的后续指令中可以看到该写?
发布于 2016-03-01 18:22:21
是的,它们没有栅栏就能看得见。请参阅8.2.2节P6中的内存排序,以及英特尔64和IA-32架构软件开发人员手册第3A卷:系统编程指南(第1部分)中最近的处理器系列,其中除其他外:
对于定义为可写回缓存的内存区域,.读取可以用旧的写入到不同的位置重新排序,但不能用旧的写入到相同的位置。
和
对内存的写入不会与其他写入重新排序,只有以下例外情况:-流存储(写)执行非时态移动指令(MOVNTI、MOVNTQ、MOVNTDQ、MOVNTPS和MOVNTPD);
https://stackoverflow.com/questions/35730136
复制相似问题