使用PAUSE提高程序的循环性能

一、简介

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

例如:

#include

 

while(-1  == ready_flag)

{

       //dosomething

       _mm_pause();

}

你可能感兴趣的:(编码库)