Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(12) - 预取指令与SFENCE指令

版权声明:转载必须保留原出处,没有书面许可不可用于商用目的, https://blog.csdn.net/qq_43401808/article/details/87360789

PREFETCHn Instructions

PREFETCHn指令使得程序可以提前让处理器预先即将访问的数据读入到指定的某级缓存中,这样当程序真正需要这些数据时,可以直接命中缓存。这些指令按照制定了时效局部性提示(temporal locality hint)读取对齐的32字节的数据行(或者更长的数据行,依赖于处理器实现),这个数据行包括了指令中指定的数据。详情可参看下表。

指令助记符

指令操作

PREFETCHT0

格式:PREFETCH0 m8

使用T0提示,将m8指定的数据行(至少32字节)预取到所有级别缓存中,这里T0提示表明:数据是时效性的

PREFETCHT1

格式:PREFETCH1 m8

使用T1提示,将m8指定的数据行(至少32字节)预取到第二级和更高级别缓存中,这里T1提示表明:数据是时效性的,但是L1 Cache未中

PREFETCHT2

格式:PREFETCHT2 m8

使用T2提示,将m8指定的数据行(至少32字节)预取到第三级和更高级别缓存中,这里T2提示表明:数据是时效性的,但是L2 Cache未中

PREFETCHNTA

格式:PREFETCHNTA m8

使用NTA提示,将m8指定的数据行预取到非时效缓存结构中,使之接近处理器,同时将缓存污染最小化

Intel C/C++ Compiler Intrinsic Equivalent
void _mm_prefetch(char *p, int i)

 

指针p指定了要预取的字节(以及相应的数据行),整数i指定了时效局部性提示。

_MM_HINT_T0,

_MM_HINT_T1,

_MM_HINT_T2,

_MM_HINT_NTA

 

 

SFENCE Instruction

SFENCE (store fence),存储屏障指令通过创建内存存储操作之间的屏障来控制写存顺序。这条指令保障了该指令之前的所有写操作结果可以被该指令之后的所有指令所见。SFENCE指令提供了一种有效的方法,用于确保生成弱排序数据的生产者与使用这些数据的消费者之间的顺序。如下例,只有两条写存指令完成后,处理器才会继续执行后续指令AB。当然,处理器性能上也会有所损失。

Write_memory1

Write_memory2

SFENCE

InstructionA

instructionB

 

格式:SFENCE

ntel C/C++ Compiler Intrinsic Equivalent
void _mm_sfence(void)

猜你喜欢

转载自blog.csdn.net/qq_43401808/article/details/87360789