cpu out of order, 性能优化

这是以前研究生的时候写的一篇文章

今天看了一篇文章关于cpu乱序执行的讲解,主题思想是cpu能并行的处理指令,这里的并行不是多核并行的处理,而是在某种情况下,上下2条指令可以被一个核一起送行,还有可能在下面的指令先运行,称为乱序执行,out of order,这也带来了超标量,1个时钟周期可以运行大于1条指令。这在以前是不可想象的,在理想情况下,一个时钟最多执行1条,但是创新是无界限的。
一个简单的实验

过程为对eax执行3次加法,循环差不多4G次,差一点点,无关紧要,产生执行文件反汇编如下

循环内部一共五条指令,4g次循环,就是20g个指令需要执行,使用time 计算运行时间10次测试值为
7.12 7.23 7.24 7.07 7.14 7.17 7.21 7.30 7.16 6.99这里是user时间,用户态时间,忽略其他函数包括main之前的函数执行时间
就是在这20g次得指令执行上花了大约7s时间,本机的配置为酷睿的2.1Ghz,7s的时间最多也只能有14G的周期,按照一般理论,执行不了20g次指令,这还是在每个指令都是单周期的理想情况下
这就是乱序执行带来的超标量性能。
对于此现象的稍微详细一点的解释可以是这样,
5条指令,每一条都是对cpu状态机的一个改变,对于上下没有依赖的指令可以一起执行
比如

这2条可以并行运行,但是

这2条就不可以并行运行,对于这5条指令可以理解为这样的一个过程

每一行代表一个机器周期,对eax的三次相加,必须等到前一次运算完成以后才能进行下一次的相加,但是对于edx的减法就可以和第一次eax的加法一起运行,其实edx就是c代码的那个i,这里就是乱序的体现,因为edx的减法在后面,但是先于2个eax的加法运行,没有按照固定顺序。但是不管怎么乱序,指令执行完以后的结果需要和顺序的一样。jne 80483a8这个指令要等到对edx减法完成是才能运行,因为要根据减法运算的结果的判断。
所以这5条指令 4G次循环其实是3个周期 4G次循环为12g个周期,7s的时间2GHZ 处理器可以有14G个周期。所以加上main之前的库代码为2G个周期,就差不多7s 的运行时间。
以下是对代码的另一种实验。对eax的3次加法改成分别对eax ebx ecx的3次加法,这个看上去是差不多,都是对寄存器加法运算,但是对于现代的处理器有很大的差别。
c代码改为

对于的a.out执行文件反汇编为

循环还是5条指令和原来的一样,只是原来是eax3次加法变成现在的eax ebx ecx的三次加法,测试的运行时间为
4.31 4.48 4.28 4.33 4.28 4.25 4.19 4.34 4.34 4.33
这是绝对的减少,这就很奇怪,只是对寄存器不一样,按照上面的方法可以画一下cpu运算数据流向图

因为对eax ebx ecx 3条指令没有上下依赖关系,目前intel处理器每个核有三个独立的加法器(可以测试具体有几个加法器),所以其实这3条指令是一起运行的,估计cpu数据流,一次循环其实只需要2个周期就可以了,4G次循环只需要8G个周期,对于一个2GHZ的处理器来说时间也刚好是4s差不多,和测试结果完全匹配。这就是cpu的乱序执行的能力。对于性能优化,在c的体现中,在循环中,在连续的几次运算中数据没有依赖性是重点。把运算过程的中间结果都放在同一个变量中会比较慢。
就算再增加一个加法运算把原来的3次改为4次,

运算时间还是和上一次是一样的。
因为cpu数据流图

在一个循环的运行周期上还是一样的,4.22 4.44 4.31 4.30 4.23 4.21 4.22 4.24 4.22 4.23

如果增加到5个的话,数据流回变成

在2个时钟周期中三个加法器会满负载运行,这样就会影响到jne 80483a8的运算,

其实这条指令也是需要加法器支持的,从上面可以看到这条指令的机器码是 75 f2效果是向前跳12个偏移,这是一个相对偏移跳转指令,运算过程为下一条指令地址0xbc+2=0xbe 加上0xf2
加上f2就是减14 等于0xb0,所以需要加法器计算最终的地址。但是加法器在前面已经满负荷运行,所以势必会增加每个循环的周期数。测试结果为
5.17 5.52 5.05 5.31 5.09 5.15 5.30 5.31 5.39 5.04
明显的比前面的运算时间要增加。

时间: 2024-10-24 20:51:59

cpu out of order, 性能优化的相关文章

CPU 100%负载的性能优化分析

今天收到报警邮件,提示在短时间内DB time有了很大的抖动.报警邮件如下:ZABBIX-监控系统: ------------------------------------报警内容: DB time is too high ------------------------------------报警级别: PROBLEM ------------------------------------监控项目: DBtime:543 % --------------------------------

iSCSI性能瓶颈及性能优化方案

iSCSI性能瓶颈 &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   iSCSI协议建立在传统的TCP/IP协议之上,在进行实际数据传输时,其传输系统性能受限于TCP/IP协议栈负载及以太网最大带宽,另外iSCSI协议层也会额外增加一些负载开销,在实际应用中,iSCSI数据传输性能仍然存在瓶颈.以发送端的写操作为例,一次完整的iSCSI协议数据传输包括数据封装.数据拷贝.数据传输三个步骤. 1.数据封装 iSC

数据库性能优化分析案例---解决SQL语句过度消耗CPU问题

解决|数据|数据库|问题|性能|优化|语句 问题描述:10月25日上午滨州网通的工程师报告OSS应用系统运行缓慢,具体操作是通过OSS系统查询话单,很长时间才能返回结果,严重影响了客户的正常使用. 问题处理:1.登陆数据库主机,用sar命令看到idle的值持续为0,CPU的资源已经耗尽: bz_db1# sar 2 4 SunOS kest 5.8 Generic_108528-19 sun4u    10/26/04 10:56:46    %usr    %sys    %wio   %id

MySQL order by性能优化方法实例

  这篇文章主要介绍了MySQL order by性能优化方法实例,本文讲解了MySQL中order by的原理和优化order by的三种方法,需要的朋友可以参考下 前言 工作过程中,各种业务需求在访问数据库的时候要求有order by排序.有时候不必要的或者不合理的排序操作很可能导致数据库系统崩溃.如何处理好order by排序呢?本文从原理以及优化层面介绍 order by . 一 MySQL中order by的原理 1 利用索引的有序性获取有序数据 当查询语句的 order BY 条件和

Linux性能优化2.2 Linux性能工具:CPU

2.2 Linux性能工具:CPU 现在开始讨论性能工具,使用这些工具能够提取之前描述的那些信息. 2.2.1 vmstat(虚拟内存统计) vmstat是指虚拟内存统计,这个名称表明它能告诉你系统的虚拟内存性能信息.幸运的是,它实际上能完成的工作远不止于此.vmstat是一个很有用的命令,它能获取整个系统性能的粗略信息,包括: 正在运行的进程个数. CPU的使用情况. CPU接收的中断个数. 调度器执行的上下文切换次数. 它是用于获取系统性能大致信息的极好工具. 2.2.1.1 CPU性能相关

ORACLE SQL性能优化系列 (六)

oracle|性能|优化 20.       用表连接替换EXISTS        通常来说 , 采用表连接的方式比EXISTS更有效率       SELECT ENAME       FROM EMP E       WHERE EXISTS (SELECT 'X'                       FROM DEPT                       WHERE DEPT_NO = E.DEPT_NO                       AND DEPT_CA

MySQL延迟关联性能优化方法

  这篇文章主要介绍了MySQL延迟关联性能优化方法,本文讲解了延迟关联的背景.延迟关联的分析.延迟关联的解决等内容,需要的朋友可以参考下 [背景] 某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下.使用工具查看数据库正在执行的sql ,排在前面的大部分是: 代码如下: SELECT id, cu_id, name, info, biz_type, gmt_create, gmt_modified,start_time, end_time, market_type, b

mysql性能优化-慢查询分析、优化索引和配置

目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询   2索引及查询优化 三.配置优化 1)      max_connections 2)      back_log 3)      interactive_timeout 4)      key_buffer_size 5)      query_cache_size 6)      record_buffer_size 7)      read_rnd_b

千百倍的性能提升-Andrew大师谈数据库性能优化

在今年3月份RWP中国之旅技术分享活动期间Andrew大师和AWR之父Graham接受了记者采访,首次对外讲述自己的职业生涯和心路历程,分享了他们在中国的感受和期待,并就当前IT系统现状做了深入分析,表达了RWP团队的使命和宗旨,同时也对广大技术爱好和追求者给出了中肯的建议和指导. 本文为采访原文,若需要阅读中文版,请查看: 甲骨文副总裁谈性能优化:百倍和千倍的性能提升才值得兴奋 Xue:First of all, it is an honor to have to you here one m