ARM编程模型-指令流水线

流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。

1. 3级流水线

到ARM7为止的ARM处理器使用简单的3级流水线,它包括下列流水线级。
(1)取指令 从寄存器装载一条指令。
(2)译码(decode) 识别被执行的指令,并为下一个周期准备数据通路的控制信号。在这一级,指令占有译码逻辑,不占用数据通路。
(3)执行 处理指令并将结果写回寄存器。
在这里插入图片描述
当处理器执行简单的数据处理指令时,流水线使得平均每个时钟周期能完成1条指令。但一条指令需要3个时钟周期来完成,因此有3个时钟周期的延时,但吞吐率是每个周期一条指令。

对于3级流水线,PC寄存器里的值并不是正在执行的指令的地址,而是预取指令的地址,这个知识点很重要,后面我们会详细的举例来证明。

处理器要满足高性能的要求,为了满足这个要求,需要重新考虑处理器的组织结构。提高性能的方法主要有两种方法:

1.提高时钟频率。时钟频率的提高,必然引起指令执行周期的缩短,所以要求简化流水线每一级的逻辑,流水线的级数都要增加。
2.减少每条指令的平均指令周期数CPI。这就要求重新考虑3级流水线ARM中多余1个流水线周期的实现方法,以便使其占有较少的周期,或者减少因指令相关造成的流水线停顿,也可以将两者结合起来。

较高性能的ARM核使用了5级流水线,而且具有分开的指令和数据存储器。在Cortex-A8中有一条13级的流水线,但是ARM公司没有对其中的技术公开任何相关的细节。

从经典ARM系列到现在Cortex系列,ARM处理器的结构在向复杂的阶段发展,但没改变的是CPU的取址指令和地址关系,「不管是几级流水线,都可以按照最初的3级流水线的操作特性来判断其当前的PC位置」。

2. 流水线举例

为方便理解,下面我们以3级流水线为例,
1)最佳流水线
在这里插入图片描述
这是一个理想的实例,所有的指令都在寄存器中执行,且处理器完全不必离开芯片本身。每个周期,都有一条指令被执行,流水线的容量得到了充分的发挥。指令周期数 (CPI) = 1。

2)LDR流水线
在这里插入图片描述
该例中,用6周期执行了4条指令 指令周期数 (CPI) = 1.5

与最佳流水线不同,装载(LDR) 操作将数据移进片内导致了指令/数据总线被占用,因此随后紧跟了内部的写周期( writeback)以完成将数据写回寄存器。

1.数据总线在周期1, 2, 3 被使用,周期6是取指,周期4用于数据装载,而周期5是一个内部周期用来完成载入的数据写回到寄存器中。
2.周期3为执行周期:产生地址
3.周器4为数据周期:从存储器中取数据(数据只有在周期4的末尾出现在内核中)
4.周期5写回周期:通过数据通道中的B总线和ALU将数据写回到寄存器bank 中
5.周期6的执行被推迟了,直到周期5写回完成(使用ALU )。同样内部周期是不需要等待状体的,但读写存储器时可能需要。

3)分支流水线
BL指令用于实现指令流的跳转,并存储返回地址到寄存器R14(LR)中。
在这里插入图片描述
1.分支指令在其第一周期计算分支的目的地,同时在现行PC处完成一次指令预取,流水线被阻断。这种预取在任何情况下都要做的,因为当判决地址产生时已来不及停止预取。
2.第二个周期在分支的目标地址完成取指,而返回地址则存于R14如果link位已设置。
3.第三周期完成目标地址+4的取指,重新填满流水线,并且如果跳转是带链接的还要修改R14(减去4)以便简单地返回。
4.分支需要三个时钟周期来执行BL,随后会涉及调整阶段。

4)中断流水线
在这里插入图片描述
「IRQ 中断的反应时间最小=7周期」

1.周期1: 内核被告知有中断 IRQ在现行指令执行完之前不会被响应( MUL and LDM/STM 指令会有长的延迟) 解码阶段:中断被解码(中断已使能,设置了相应标志位… )。如果中断被使能和服务,正常的指令将不会被解码。

2.周期 2: 此时总是进入ARM状态. 执行中断 ( 获取IR向量的地址), 保存 CPSR 于 SPSR, 改变CPSR模式为 IRQ 模式并禁止进一步的 IRQ 中断输入。

3.周期 3: 保存 PC (0x800C) 于 r14_irq, 从IRQ异常处理向量处取指

4.周期 4: 解码向量表中的指令; 调整r14irq 为0x8008

5.周期 4和 5: 无有用的指令取指, 由于周期 6的跳转

6.周期 6: 取异常处理子程序的第一条指令; 从子程序返回: SUBS pc,lr,#4

这将恢复工作模式并从响应中断前的下一条指令处取指,如果有多个中断,需堆栈保存返回地址。注意最大的FIQ响应延迟为 29个周期(而非Thumb状态的28周期!)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第63步 深度学习图像识别:多分类建模误判病例分析(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 上两期我们基于TensorFlow和Pytorch环境做了图像识别的多分类任务建模。这一期我们做误判病例分析,分两节介绍,分别基于TensorFlow和Pytorch环境的建模和分析。 本期以健康组、肺结核组、COVID-19组、细菌性&am…

Python安装与Pycharm配置

Python与Pycharm安装 用了一年的Python最近被一个问题难倒了,pip安装一直不能用,报错说被另一个程序使用。被逼到只能重新安装python了,正好记录一下这个过程,写这篇笔记。(突然想到可能是配Arcgis的python接口&#…

金融风控数据分析-信用评分卡建模(附数据集下载地址)

本文引用自: 金融风控:信用评分卡建模流程 - 知乎 (zhihu.com) 在原文的基础上加上了一部分自己的理解,转载在CSDN上作为保留记录。 本文涉及到的数据集可直接从天池上面下载: Give Me Some Credit给我一些荣誉_数据集-阿里云…

2023年新风口,Kwai快手海外公会入驻详细指南!

Kwai快手海外公会发展前景作为中国短视频市场的领头羊,Kwai快手在海外市场也取得了一定的成绩。但是,海外市场的发展前景还存在一些不确定因素,需要快手进一步探索和努力。首先,海外市场对于内容的申请找cmxyci要求与国内市场有所…

MonoDETR: Depth-guided Transformer for Monocular 3D Object Detection 论文解读

文章目录 1.Abstract2. Introduction3. Related workDETR base methods 4. Method4.1Feature ExtractionVisual Featuresdepth featuresforeground depth map 4. 2 Depth guided transformerVisual and depth encodersDepth-guided-decoderDepth positional encoding 4. 3 Dete…

【vue2第十一章】v-model的原理详解 与 如何使用v-model对父子组件的value绑定 和修饰符.sync

v-model的原理详解 v-model的本质就是一个语法糖,实际上就是 :value"msg" 与 input"msg $event.target.value" 的简写。 :value"msg" 从数据单向绑定到input框,当data数据中的msg内容一旦改变,而input框数据…

OpenCV(十八):图像直方图

目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计 直方图统计是一种用于分析图像或数据的统计方法,它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中,可以使用函数cv::calcHist()来计算图像的直方图。 calcHist(…

uni-app之android离线打包

一 AndroidStudio创建项目 1.1,上一节演示了uni-app云打包,下面演示怎样androidStudio离线打包。在AndroidStudio里面新建空项目 1.2,下载uni-app离线SDK,离线SDK主要用于App本地离线打包及扩展原生能力,SDK下载链接h…

电商平台api对接货源

如今,电商平台已经成为了人们购物的主要途径之一。 然而,对于电商平台来说,货源对接一直是一个比较棘手的问题。为了解决这个问题,越来越多的电商平台开始使用API来对接货源。 API,即应用程序接口,是一种允…

分支创建查看切换

1、初始化git目录,创建文件并将其推送到本地库 git init echo "123" > hello.txt git add hello.txt git commit -m "first commit" hello.txt$ git init Initialized empty Git repository in D:/Git/git-demo/.git/ AdministratorDESKT…

django中配置使用websocket终极解决方案

django ASGI/Channels 启动和 ASGI/daphne的区别 Django ASGI/Channels 是 Django 框架的一个扩展,它提供了异步服务器网关接口(ASGI)协议的支持,以便处理实时应用程序的并发连接。ASGI 是一个用于构建异步 Web 服务器和应用程序…

ipad手写笔什么牌子好?适合开学买的电容笔推荐

随着社会和经济水平的不断提高,对电容笔的使用日益增加。国产平替的电容笔和原装苹果的电容笔没有太大的区别,不管是功能还是手感都很像,书写上的笔锋也很流畅,这让我很惊讶,因为其的价格很便宜,但其的体验…

【实训项目】精点考研

1.设计摘要 如果说高考是一次能够改变命运的考试,那么考研应该是另外一次。为什么那么多人都要考研呢?从中国教育在线官方公布是考研动机调查来看,大家扎堆考研的原因大概集中在这6个方面:本科就业压力大,提升竞争力、…

开源照片管理服务LibrePhotos

本文是为了解决网友 赵云遇到的问题,顺便折腾的。虽然软件跑起来了,但是他遇到的问题,超出了老苏的认知。当然最终问题还是得到了解决,不过与 LibrePhotos 无关; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…

学习高级数据结构:探索平衡树与图的高级算法

文章目录 1. 平衡树:维护数据的平衡与高效性1.1 AVL 树:严格的平衡1.2 红黑树:近似平衡 2. 图的高级算法:建模复杂关系与优化2.1 最小生成树:寻找最优连接方式2.2 拓扑排序:解决依赖关系 拓展思考 &#x1…

支付参考文档

支付宝官方提供的样例代码与支付宝通信: 小程序文档 - 支付宝文档中心支付宝文档中心https://docs.open.alipay.com/api_1/alipay.trade.query 参考sdk示例: 小程序文档 - 支付宝文档中心支付宝文档中心https://docs.open.alipay.com/api_1/alipay.tra…

unity界面上Global 与Local xyz- right up forward

gloabal 如果要沿这个方向移动就比较困难 local下就不一样了

docker高级(DockerFile解析)

1、构建三步骤 编写Dockerfile文件 docker build命令构建镜像 docker run依镜像运行容器实例 2、DockerFile构建过程解析 Dockerfile内容基础知识 1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数 2:指令按照从上到下,顺序执行…

【2023集创赛】加速科技杯二等奖作品:基于ATE的电源芯片测试设计与性能分析

本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)加速科技杯二等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼…

c++11 标准模板(STL)(std::basic_stringstream)(四)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_stringstream;(C11 前)template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::alloc…