`

关于分支预测

 
阅读更多

 

昨日与某老汉聊天, 给我分享了一些机器学习相关内容,受益匪浅。老汉问我有关分支预测的问题,我解释得天马星空,貌似老汉已被误导,故今日撰写此文以理清逻辑。实际上分支预测这个词在N年前(N<3)在读深入理解计算机系统时就大概看过那么一段,但其中的原理一直没有深究,直至昨日老汉发问。下面让我们来了解一下。

 

假设你是一个19世纪的铁路搬岔工,负责当地的一个铁路岔路口,当时没有电话,也没有其他的无线电通信方式。火车到来之前,你根本不知道它想要去的方向。火车到来时需要停下来,你要问一下驾驶员要去那一边,然后调整岔路口的开关。

 

火车非常的沉重,同时惯性也非常大,所以火车启动和减速时能量损耗会很大,对火车的整体速度也会有影响。

 

那么是否有更好的解决方案呢?当然你可以猜测火车的前进方向并预先调整开关。如果猜对了,火车直接开过去,不需要减速。如果你猜错了,火车一定会错方向,这时火车需要停下来,倒车,回到岔路口,然后驾驶员给你一顿臭骂让你调整开关,最后驾驶员重新发动火车。如果每一次都猜对了,列车永远不用停下来。如果经常猜错,列车将花费大量的时间停车倒车重新发动。

 

 

计算流水线

 

现代的处理器会将每条指令分为以下几个阶段:取指,译码,执行,访存,写回。这些阶段被设计成流水线以提高整体吞吐量,也就是同一时间可以处理多个指令的不同阶段,也就是说处理器的处理超前于当前执行的指令,处理器会预先读出指令(取指),并解码指令(译码),来确定具体执行什么操作(执行)。见下图。

 

 

 

如果指令只是简单的顺序结构,指令流水线化会就会工作得很好(铁路线上没有分支,火车可以全速前进)。现在让我们考虑一下处理器的分支语句处理。现在假设你就是一个处理器正在处理一个分支语句(if 等语句),在if的最后一个阶段完成之前(写回),你不知道分支的下一条指令是什么。你该怎么做?停止执行,等待直到判断出条件语句,然后再加载下一条指令,然后继续执行?如果这样做的话,处理分支语句时,前面几个阶段的处理器都需要停止,这至少要浪费几个指令周期。 

 

CPU有很长的流水线(取指,译码,执行,访存,写回),CPU在”启动时也需要加速,停止时也需要减速”。

 

那么更好的办法是什么呢?猜(投机执行)!猜对了指令继续执行,没有任何性能损失。如果猜错了,需要重新刷新流水线(倒车)。

 

那么怎么去猜呢?这就是现代处理器里面的逻辑了,处理器会根据程序的历史来猜。具体怎么猜可以看这里http://zh.wikipedia.org/wiki/%E5%88%86%E6%94%AF%E9%A0%90%E6%B8%AC%E5%99%A8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 32.2 KB
分享到:
评论

相关推荐

    代码优化之条件分支预测、除法、浮点数取整

    本篇文章将深入探讨三个关键的优化领域:条件分支预测、除法运算优化以及浮点数取整策略。 首先,我们来谈谈条件分支预测。在现代处理器中,为了提高性能,会采用一种称为“动态分支预测”的技术。它预测程序中的...

    同时多线程处理器上的动态分支预测器设计方案研究.pdf

    同时多线程处理器上的动态分支预测器设计方案研究。 一篇关于分支预测的论文

    Linux的系统级性能剖析工具-perf-31

    `branches`和`branch-misses`是关于分支预测的指标。分支预测和乱序执行(Out-of-Order Execution)是现代处理器提高性能的技术。分支指令可能导致流水线停顿,分支预测可以减轻这种影响,但预测错误(`branch-...

    branchpredictor代码解析1

    - `globalBPT`, `localBPT`, `L1_localBPT`, `L2_localBPT`: 分别表示全局分支预测表和不同级别的局部分支预测表。 - `chooser`: 分支选择器,决定使用哪个预测表。 - `RAS`: 返回地址栈,用于记录函数调用的返回...

    Lab4-PB16110173-徐煜森1

    本文是关于计算机体系结构中分支预测技术的实验报告,作者为徐煜森,实验编号PB16110173。实验的主要目标是掌握基于Branch Target Buffer (BTB)和Branch History Table (BHT)的分支预测方法,并通过Vivado 2017在...

    gem5分支捕食

    文件名称“gem5-branch-prediction-master”可能表示这是一个关于gem5分支预测的源代码仓库的主分支。在研究这个项目时,你需要理解C++的面向对象编程、模板、多线程以及可能的并行算法。同时,熟悉计算机体系结构,...

    指令调度和延迟分支学习资料.rar

    1. 分支预测:现代处理器普遍采用分支预测技术,通过猜测分支的走向来避免分支延迟,提高执行效率。 2. 延迟槽填充:设计者需要谨慎选择延迟槽中的指令,确保在分支错误时不会影响程序的正确性。 3. 适用性:延迟...

    关于数学建模问题的预测

    深度学习是机器学习的一个分支,尤其在图像识别、语音识别等领域表现出色。对于复杂的非线性关系,如自然语言处理和图像分析,卷积神经网络(CNN)和循环神经网络(RNN)等深度模型能提供更准确的预测。 七、集成学习 ...

    基于数值预测的机器学习相关算法综述.pdf

    决策树学习算法以树形结构建立模型,在这个模型中,决策节点、叶节点和分支定义了一系列可用于案例分类的决策。决策树算法可以用于解决分类问题,例如预测客户的购买行为、预测股票价格等。决策树算法的优点是可以...

    if.rar_If..._流水线

    然而,流水线也面临一些挑战,如数据相关(数据冲突)、控制相关(分支预测错误)和资源冲突等问题,这些都需要通过特定的策略来解决,如分支预测、推测执行、乱序执行等。 “if”可能是这个压缩包中的一个关键文件...

    _神经网络预测辛烷值预测bp_数据预测MATLAB

    2. 神经网络预测:可能包含了关于神经网络模型的描述或实现。 3. matlab神经网络:可能包含MATLAB中实现神经网络的相关脚本或函数。 4. 辛烷值预测bp:这部分代码可能专门针对辛烷值预测的BP神经网络模型。 5. 数据...

    2018年世界杯预测结果

    标题 "2018年世界杯预测结果" 暗示了这是一个关于利用数据分析和机器学习技术预测2018年世界杯比赛结果的项目。在这个项目中,数据科学家或机器学习爱好者可能已经对赛事数据进行了深入分析,以创建预测模型。 描述...

    SANGFOR_BBC_v2.5_分支受控端批量升级测试指导书.pdf

    - **预测试**:验证升级前的系统状态和备份的正确性。 - **升级测试**:按预定策略执行批量升级,并记录每一步的结果。 - **功能验证**:升级完成后,检查新版本的功能是否正常,包括但不限于设备管理、策略下发...

    机器学习大作业-预测天气.zip

    在这个“机器学习大作业-预测天气.zip”压缩包中,我们可以推测这是一项关于利用机器学习技术预测天气的项目。这个项目可能包含了一系列的文件,如数据集、代码、报告等,用于展示如何运用机器学习算法对天气进行...

    关于ARM指令流水线知识1

    - **其它级指令流水线**:根据具体实现,可能有更多的阶段,比如分支预测、重定向等,以应对更复杂的指令序列和控制流。 然而,流水线设计也引入了一些挑战,如数据依赖(Data Hazard)、控制依赖(Control Hazard...

    MIPS多周期流水线CPU设计

    5. **无分支预测**:分支预测是优化处理器性能的技术,它尝试预测程序可能的分支走向,提前执行预测正确的路径。这个设计没有分支预测,意味着分支指令可能导致流水线出现空闲或冲突,影响效率。 6. **延迟槽**:...

    行业分类-电子-关于带故障检测功能的电缆分支箱的介绍分析.rar

    此外,随着物联网和大数据技术的发展,未来的故障检测功能可能会更加先进,例如通过云计算平台进行大数据分析,预测可能出现的故障模式,实现更精确的故障预防。同时,通过无线通信,可以实现设备的远程控制和升级,...

    关于车道对中的道路分支检测和路径选择的介绍说明.rar

    例如,通过分析连续的车道线变化,可以预测即将到达的道路分支;同时,摄像头捕获的图像可以用于识别路标、交通标志,进一步确认分支的存在。此外,深度学习技术,如卷积神经网络(CNN),也被广泛应用于道路特征的...

    VMD(多分支函数设计)_VMD、分支函数_

    对于非专业人士,理解并掌握VMD技术可能需要一定的数学基础,特别是关于泛函分析和优化理论的知识。 总的来说,VMD是一种强大的工具,通过其多分支函数的设计,能够对复杂信号进行精确的分解和分析。结合"VMD111.m...

    关于对象路径预测方法,装置和程序,以及自动操作系统的介绍说明.rar

    自动操作系统是计算机科学的一个重要分支,它涵盖了从简单的自动化任务到复杂的决策支持系统等广泛的应用。这种系统能够自主执行预定的任务,而无需人类的持续干预。自动操作系统的实现依赖于各种技术,包括机器学习...

Global site tag (gtag.js) - Google Analytics