为什么branch prediction和cache是硬件体系结构中两大研究主题?

摘要:

本文主要通过简单的量化计算的例子,来说明为什么硬件体系结构研究中branch prediction和cache是两大

研究的主题。

基本概念介绍:

描述案例之前,我们简单的介绍几个概念:

1. CPI:cycle-per-instruction,即每条指令需要的时钟周期数,对于理想的处理器,我们认为一条指令就需要一个

时钟周期,也即CPI=1.0;

2. IPC:instruction-per-cycle,即每个时钟可以执行多少条指令,即CPI的倒数;

3. 假设理想的CPI=1.0,但是实际处理器中,处理器会因为branch跳转,数据load,以及cache访问等造成停顿,

这些操作会导致额外的CPI;

4. 数据load造成停顿原因:处理器需要的数据不能马上访问到;

branch跳转的停顿原因:因为发生跳转,前期取进来的指令无用;

cache访问的停顿:访问cache有延迟;

量化计算案例:

根据基本概念的介绍,并且假设理想处理器的CPI=1.0,那么实际的CPI可以表示如下:

CPI = 1.0 + CPI[load] + CPI[branch] + CPI[cache];

我们现在缺的就是上述的如何计算上述公式的右边几个参数,下面是进一步的信息:

假设15%的指令是load,另外20%的指令跟在load后面暂停1cycle,因为需要load的结果,所有的指令和loads都命中cache。

假设20%的指令是跳转指令,其中60%实施跳转,另外40%没有实施跳转;

如果跳转没有实施,跳转代价为2cycle;如果跳转发生了,那么代价就是3cycles

(这里让人疑惑的一点是:跳转没有发生所导致的跳转代价的来源)

按照上述给定的参数,我们可以大致计算出每个部分导致的增加的CPI:

CPI[load] = 0.15*0.2*1.0 = 0.03

CPI[branch] = 0.2*0.6*3+0.2*0.4*2 = 0.52

最终得到的CPI=1.55,对应的IPC=0.65;

再考虑cache访问延迟的话,假设cache命中率为95%,缺失代价为20个cycles,

那么 CPI[cache] = (1-0.95)*20 = 1.0;

此时的CPI为2.55,对应的IPC = 0.39;

从上述各个部分的CPI而言,再综合amdal‘s law,我们知道对branch和cache进行优化,

获得性能提升也就很大,这就解释为什么体系结构中branch prediction和cache的研究占据那么

重要的地位。

结论:

虽然上述的具体数据不一定正确,但是从这个例子也可以看出,简单地量化对于大方向的把握

还是有指导作用的。

参考:

Jean-Loup Baer, Microprocessor Architecture From simple pipelines to chip multiprocessors, University of Washington, Seattle.

时间: 2024-10-10 08:57:28

为什么branch prediction和cache是硬件体系结构中两大研究主题?的相关文章

硬件体系结构中的缓存的定性与定量分析案例

摘要: 本文主要就硬件体系结构中,cache对处理器性能的影响给出定量统计的例子,并且由定量的结果如何推导出定性的结论. 问题描述: 假设某顺序执行的处理器,其平均缺失率为2%,平均每条指令要访问存储器1.5次,cache缺失代价为100个周期: 此处将cache命中时间包含在cpu执行时间内,cpu理想的cpi为1.0.比较cache的存在与否,对于性能的影响. 问题解答: 这里的性能评估从cpu时间入手: 那么我们将对应的数据代入后: 就可以得到在存在cache的情况下的cpu时间: 那么接

体系结构中共享池研究

1.keep 让SQL跑得更快. 有时候一些基础表需要非常的频繁访问,尤其是在一些循环中,对该表中的访问速度将变的非常重要.为了提高系统的处理性能,可以考虑将一些表及索引读取并保存到内存中. 二.关于keep内存的几个参数 下面了解一下具体和CACHE有关的几个概念,即DB_CACHE中的几个pool: DB_CACHE_SIZE:指定缺省的buffer pool的大小,以字节为单位. DB_KEEP_CACHE_SIZE:指定keep buffer pool的大小,以字节为单位. DB_REC

Learn Branch Prediction From SimpleScalar Source (1)

作为一名CSer,最好的学习方式之一无疑是tracing code,看源代码--不知你此时是否与我一样想起了Linus那句名言「talk is cheap, show me the fucking code!」? 可是对计算机体系结构来说,很多技术直接是由硬件实现的,因而也被蒙上一层神秘的面纱. 好在还有一些模拟器(simulator)软件,例如SimpleScalar(http://www.simplescalar.com/)就是这样一套模拟处理器性能的工具集. 之前我有幸通过做一些proje

ESXI和vsphere的安装配置-实现一台电脑硬件虚拟化为两台

本篇文章包含以下几个部分: 1EXSI软件和vSphere软件的安装 2在vSphere上安装虚拟系统 3对虚拟系统通过配置实现硬件虚拟化,实现硬件直通 1.EXSI安装 通过网上下载EXSI ISO镜像和Vsphere安装软件,选择一台没有安装系统的电脑通过u盘制作启动盘安装EXSI底层系统,安装过程很容易,安装成功后系统界面如下图所示,然后在该见面按下F2进行网络设置,通过IP Configuration选项来设置静态IP,以免IP变动了以后无法正常工作.记住目前的用户以及密码还有设置好的静

[LeetCode]LRU Cache有个问题,求大神解答

题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set. get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.

硬件体系优化及IO优化核心优化原理详解

从图上看,上面是CPU层面,下面是资源层面,越往下越慢.运行速度. 从容量上看越往下越大. 先在内存中处理,后再硬盘中处理. CPU和内存处理速度比也相差很大,1000倍的差距 所以光用内存也是慢,一般CPU里面也有缓存,1级缓存,2级缓存.CACHE 交互过程中可能放到1级缓存,二级缓存,进行平缓操作,CPU和内存. 电脑的快慢有什么决定的和你到时候优化什么地方. 比方说瓶颈是硬盘差,我CPU变成双核的,硬盘还不快,应为瓶颈不是CPU,是磁盘. 电脑的各个部件你最好有个平衡.某一个好,都不能提

分支预测(branch prediction)

记录一个在StackOverflow上看到一个十分有趣的问题:问题. 高票答案的优化方法: 首先找到罪魁祸首: if (data[c] >= 128) sum += data[c]; 优化方案使用位操作: int t = (data[c] - 128) >> 31; sum += ~t & data[c]; 正数右移31一定为0,负数右移31一定为-1.再取反进行求&(按位与),0与任何数的&为0,-1与任何数的&为数本身.这样就巧妙的避开分支预测了,可以

Java IO两大体系

区别 一套是input/output stream 体系,一套是reader/writer体系,两者的区别是 stream负责的是字节流的数据,reader/writer负责的是字符流. 设计模式 decorator模式 该模式主要用于在不改变已有的component设计和代码的情况下,不断的增加附属功能.打个比喻,就像你有一副画,为它配一个或者多个不同的画框. 具体可以参考这里:http://www.cnblogs.com/bastard/archive/2012/02/02/2336150.

详解网络体系结构中的各层次

一.物理层 1. 概述 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流. 2. 作用--如何服务上层 尽可能地屏蔽掉传输媒体和通信手段的差异,使物理层上面的数据链路层感觉不到这些差异,这样就可使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体和通信手段是什么(因为现在的计算机网络中的硬件设备和传输媒体的种类非常繁多,并且通信手段也有许多不同方式). 3. 任务--确定与传输媒体的接口有关的一些特性 机械特性:指明接口所用接线器的形状和尺寸.引脚数目和排