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
指针p指定了要预取的字节(以及相应的数据行),整数i指定了时效局部性提示。 _MM_HINT_T0, _MM_HINT_T1, _MM_HINT_T2, _MM_HINT_NTA
|
SFENCE Instruction
SFENCE (store fence),存储屏障指令通过创建内存存储操作之间的屏障来控制写存顺序。这条指令保障了该指令之前的所有写操作结果可以被该指令之后的所有指令所见。SFENCE指令提供了一种有效的方法,用于确保生成弱排序数据的生产者与使用这些数据的消费者之间的顺序。如下例,只有两条写存指令完成后,处理器才会继续执行后续指令A与B。当然,处理器性能上也会有所损失。
Write_memory1 Write_memory2 SFENCE InstructionA instructionB |
格式:SFENCE
ntel C/C++ Compiler Intrinsic Equivalent
void _mm_sfence(void)