使用PAUSE提高程序的循环性能
2017-04-20 20:55
597 查看
一、简介
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();
}
相关文章推荐
- 使用内存映射文件来提高你程序的性能
- 使用技巧:Java程序用缓冲IO来提高性能
- 使用内存映射文件来提高你程序的性能
- 【设计优化】-使用缓冲(Buffer)提高程序性能
- 使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
- 使用内存映射文件来提高你程序的性能
- 使用内存映射文件来提高你程序的性能
- 改善C++ 程序的150个建议学习之建议35:使用内存池技术提高内存申请效率与性能
- 使用valgrind检查cache命中率,提高程序性能
- C# ASP.NET 优化程序性能、降低内存使用、提高程序运行速度
- JAVA基础:使用缓冲IO提高Java程序性能
- 在.NET下使用Task Parallel Library提高程序性能
- 使用Java NIO提高服务端程序的性能
- 使用BOOST BIND库提高C++程序性能
- 使用Java NIO提高服务端程序的性能
- 使用内存映射文件来提高你程序的性能
- * java程序性能优化 Posted on 2010-07-28 16:04 chinaifne 阅读(2246) 评论(0) 编辑 收藏 一、避免在循环条件中使用复杂表达式
- 在.NET下使用Task Parallel Library提高程序性能
- 使用oscache提高程序性能
- 【设计优化】-使用缓冲(Buffer)提高程序性能