一、简介
PAUSE指令能提高自旋等待循环的性能。
从奔腾4引入,向后兼容所有的IA-32处理器。早期的IA-32处理器,使用NOP指令实现PAUSE指令。奔腾4和Xeon处理器用一定的延迟实现PAUSE指令。这个延迟在某些处理器上是0。PAUSE不会改变处理器状态。其实本质实现上是一个延迟的no-op指令。
PAUSE指令在非64位模式和64位模式上是相同的。二、特性
当程序退出循环时,处理器会因为内存顺序冲突和重排流水线造成很大性能损失(25倍)。
当使用PAUSE指令时,处理器会避免内存顺序冲突和重排流水线,并且通过延迟流水线执行减少能源消耗。
PAUSE指令可以提高支持超线程的处理器的自旋循环等待的性能,提高程序使用共享锁(可能由伪共享造成)或一个紧凑的自旋循环等待的性能。三、适用情景
支持超线程或多核的处理器在自旋等待循环中使用PAUSE指令。
使用多线程同步(自旋锁、信号、互斥锁)或者空循环或者加载比较循环(检查某个变量)的程序通过使用PAUSE指令可以提升很大的性能。四、使用
PAUSE指令对应的C/C++函数 void _mm_pause(void)
包含头文件#include <emmintrin.h>
例如:
#include <emmintrin.h>
while(-1 == ready_flag)
{
//dosomething
_mm_pause();
}