CPU 时间:一个程序在 CPU 上运行的时间。(不包括I/O时间)
主频、时钟频率:CPU 内部主时钟的频率,表示1秒可以完成多少个周期。
例如,主频为 4.1GHz,表示每秒可以完成 4.1*109 个时钟周期。
时钟周期:时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。
时钟周期 = 1 / 频率,例如 1/ 4.1*109 。
CPU 的时钟周期越短,CPU 性能越好。
指令周期:取出并执行一条指令的时间。
程序的时钟周期数
CPU时间 = 执行程序所需的时钟周期数 * 时钟周期时间
指令周期:取出并执行一条指令的时间;
指令周期数CPI:平均每条指令耗费的时钟周期数
CPI = 执行程序所需的时钟周期数 / 所执行的指令条数
上面的公式换位置
执行程序所需要的时钟周期数 = CPI * 所执行的指令条数 CPU时间 / 时钟周期时间 = CPI * 所执行的指令条数 CPU时间 = CPI * 所执行的指令条数 * 时钟周期时间
我们约定 IC :所执行的指令条数,所以
CPU时间 = CPI * IC * 时钟周期时间
CPU时间 = (CPI * IC) / 时钟频率
CPIi :第 i 种指令所需要的时钟周期数;
ICi :在程序运行过程中,第 i 种指令被运行的次数;
i 表示序号。
因为时间上 CPU 指令集指令很多,我们需要求得每条指令的平均耗时和程序使用到的指令、指令执行的次数。
总CPU时间为各个指令的 CPU时间 之和。
CPUi = (CPIi * ICi ) / 时钟频率
所以,公式总结如下
(ICi / IC) 反映了第 i 种指令在程序中所占的比例。
各位同学,请看大屏幕:
先求得未改进前的 CPI,目前有 FP指令(25%)、非浮点指令(75%),还知道了各自的 CPI 。
方案一改进后,提示的程度等于 (改进前CPI - 改进后CPI)。
因为本身也可以求得 FPSQR 在整体的比例,所以方案一不需要加入 FR。
看不明白的话,笔者讲解一下。
整体的 CPI 为 2 其中改进前, FPSQR 的 CPI 20*2% = 0.4 , 其它指令CPI + FRSQR的CPI = 2;其它指令CPI=1.6; 改进后,FPSQR 的 CPI 2*2% = 0.04 提升了 0.36。 改进后的 CPI 需要时间 1.6 + 改进后的FRSQR的CPI = 1.64。
影响CPU性能的三个方面:时钟频率、CPI、指令的条数。
减少指令的条数可以使得CPU更加简洁、使用较少的寄存器,系统代码也会别的更加简洁。例如 RISC-V。底层的指令减少,上层例如操作系统、汇编程序需要编写的代码亦会变多。
但是因为各种指令使用到的频率和周期内不同信息的访问次数,设计CPU是要考虑到优化指令的执行速度,优化高频访问的指令,分配更多的资源。例如X86。