0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CPU是怎么实现加速的?

sanyue7758 来源:处芯积律 2023-04-06 10:58 次阅读

软件在CPU上执行,采用一定的流水线执行指令,通常有取指(Instruction Fetch)、译码(Instruction Decode)、执行(Execute)、访存(Memory)、写回(Write Back)这几步操作。如下图所示,为5个阶段的顺序执行的处理器指令流,即CPU执行指令按照流水线,有一定的先后顺序,单线程同一时刻只能计算出一个结果。

081fac22-d306-11ed-bfe3-dac502259ad0.png

那么,我们再深入探讨一下CPU的体系结构,不外乎下图的几种:冯.诺依曼体系结构、哈佛体系结构、改进的哈佛体系结构,这几种结构有其各自的优势,应用于不同的产品中,也有各自的优缺点,其中X86最典型的冯.诺依曼结构,广泛应用于个人电脑、工作站、服务器等;而ARM是最典型的哈佛结构,广泛应用于单片机、ARM芯片等终端芯片,如手机、平板等,终端设备等。关于具体的细分,详见下方思维导图。

082ec630-d306-11ed-bfe3-dac502259ad0.png

冯.诺依曼结构(von Eeumann Architecture),也称普林斯顿结构,如下图所示,是一种将程序指令和数据合并在一起的存储器结构。该结构中指令和数据共用一条总线,通过分时复用的方式进行读写操作,结构相对简单,总线面积较小,但缺点是效率低,无法同时取指令和数据,成为了执行的瓶颈。

08420f24-d306-11ed-bfe3-dac502259ad0.png

08507fd2-d306-11ed-bfe3-dac502259ad0.png

为了解决冯.诺依曼结构无法并行取指令和数据,提高计算的效率,在此基础上提出了哈佛结构(Harvard Architecture),这是一种将程序指令和数据分开的存储器结构,如今下图所示。该结构由于程序的指令和数据存储在两个独立的存储器,各自有独立的访问总线,因此提供了更大的存储器带宽,减轻了程序运行时访问内存的瓶颈。但相应的也需要独立的存储器,以及更大的总线面积,其中ARM就是典型的哈佛结构。

086aef98-d306-11ed-bfe3-dac502259ad0.png

087a1b12-d306-11ed-bfe3-dac502259ad0.png

同样采用流水线,相对于冯.诺依曼结构,哈佛结构的指令效率更高。哈佛结构在当前指令译码的时候,可以进行下一条指令的取指,然后在执行下一条指令的同时,又开始了第三条指令的取指。这一过程,通过指令预取,加快了原先5个步骤的流水线结构,提高了流水线的并行度。

实际上计算机体系结构发展到现在,冯.诺伊曼结构,和哈佛结构的界限已经没有那么清晰。比如改进型的哈佛结构,指令和数据还是一起存储在主存中,但CPU有额外的指令Cache和数据Cache(如下图所示),在主存带宽足够允许的前提下,使得CPU可以同时去取指令和数据Cache,所以可以认为结构上对外是冯.诺伊曼结构,对内是哈佛结构,这就是改进型的哈佛结构。

由于本章仅在高层次上,对CPU架构设计带来的加速进行基础的描述,这块就不再深入。那么,我们继续探讨,如何可以让CPU流水线计算地更快。

1)采用更先进的工艺

从28nm到5nm/3nm,更先进的工艺使得允许我们可以在更高的频率下进行工作,当然也意味着更高的流片成本。典型的以28nm为例,A53可以跑到1.5GHz,而在16nm工艺下,A53可以跑到2.3GHz的主频(以上数据仅供参考,跟具体优化有关)。

088efbfe-d306-11ed-bfe3-dac502259ad0.png

但摩尔定律的终结,意味着一味地通过工艺的升级来提高主频,变得越来越困难,除了单纯的提升工艺,增加核数量,我们还得从微架构上探索,如何跑的更快。

2)超级流水线处理器

由于时钟频率受流水线中计算耗时最大的的,即我们的主频需要满足各阶段的setup/hold time,如果将每一步计算拆分为更细的颗粒度,那么我们更容易满足setup/hold time,因而可以跑在更高的主频下——这就是超级流水线处理器/深流水线。

如下图所谓,为细分后的超级流水线示意图。

08a67e5a-d306-11ed-bfe3-dac502259ad0.png

3)标量流水线处理器

用更细的计算颗粒,我们可以运行在更高的主频,这是提高了流水的速率。

换个思路,大力出奇迹:如果我们拥有多条河流,那我们可以成倍的提高流水的效率,这就是标量流水线处理器,如下图所示:

08b4494a-d306-11ed-bfe3-dac502259ad0.png

在上图中,每条流水线执行仍然需要5个周期,但上下两个流水线可以重叠执行。图中用9个周期,完成了5条指令,但即当流水线满载时,每个周期都可以完成一条指令,相比于单流水线,提高了5倍的效率。当然我们拥有了5条河流来提高速率,也是付出了面积的代价,即FPGA中常用的面积换速度的思维。

4)超标量流水线处理器

结合超级流水线,以及标量流水线的特性,也自然有了超级标量流水线结构的处理器,其流水结构如下图所示:

08c26b10-d306-11ed-bfe3-dac502259ad0.png

超标量流水线处理器指令流

即采用了多条流水线的结构,增加了并行计算性能;同时通过流水线每一阶段的颗粒度,提高了运行的主频。当然,相对于两个种优化的结构,超标量流水线结构也是以更大的面积为代价。目前市场上几乎所有处理器,都是超标量流水处理器结构。

5)采用多核CPU结构

当在确定的工艺,以及一定的超标量流水线结构的处理器下,单核CPU的性能很难再实现质的飞跃,那么多核处理器的结构,再次通过面积换速度,成倍的提升了CPU的硬件性能。典型的以下图为例,为***处理器中,4核A72 + 4核A53的大小核结构。多核处理器,在进行SOC设计时,给架构师提出了更高的挑战;同时在软件应用时,也对多核并行处理提出了更高的要求,如下图所示,为AR72/A53的多核结构。

08cfb72a-d306-11ed-bfe3-dac502259ad0.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8653

    浏览量

    361837
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162002
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10449

    浏览量

    206576
  • 流水线
    +关注

    关注

    0

    文章

    110

    浏览量

    24991
  • 指令
    +关注

    关注

    1

    文章

    580

    浏览量

    35379

原文标题:CPU是怎么实现加速的?

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【FPGA干货分享六】基于FPGA协处理器的算法加速实现

    处理器功能在硬件中实现以替代几种软件指令。通过减少多种代码指令为单一指令,以及在硬件中直接实现指令的方式,从而实现代码加速。最常用的协处理器是浮点单元(FPU),这是与
    发表于 02-02 14:18

    为什么FPGA协处理器可以实现算法加速

    代码加速和代码转换到硬件协处理器的方法如何采用FPGA协处理器实现算法加速
    发表于 04-13 06:39

    使用NPU使用tflite VX delegate实现加速,bounding box的值一直为0是怎么回事?

    我们的程序可以使用NPU使用tflite VX delegate实现加速,但是不能得到和CPU一样的结果。 可以正确获取label值,但是bounding box的值一直为0。 我们的环境: 电路板
    发表于 05-06 07:52

    对步进电机的控制,加速和减速是如何实现的?

    控制步进电机加速和减速是如何实现
    发表于 10-15 07:00

    基于主/从结构的多CPU系统的研究与实现

    本文较为详细地介绍基于多CPU 的单片机嵌入式系统的系统设计思想,提出了在多CPU 情况下的基于任务机制的单片机系统程序结构,讨论了具体实现方法,并给出ePOS800 收
    发表于 06-20 09:52 14次下载

    CPU流水线的定义

    cpu流水线技术是一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程的技术。
    发表于 12-14 15:29 4527次阅读

    涡轮加速升压(Turbo-boost)充电器可为CPU涡轮加速模式提供支持

    本文介绍的涡轮加速升压 (turbo boost) 充电器,允许适配器和电池同时为系统供电,以满足笔记本电脑在 CPU 内核加速模式下工作时出现的猝发、超高功率需求。
    发表于 07-20 14:43 4969次阅读
    涡轮<b class='flag-5'>加速</b>升压(Turbo-boost)充电器可为<b class='flag-5'>CPU</b>涡轮<b class='flag-5'>加速</b>模式提供支持

    基于AS3911的非接触式CPU卡读卡器的设计与实现

    基于AS3911的非接触式CPU卡读卡器的设计与实现
    发表于 01-04 15:31 0次下载

    涡轮加速升压 (Turbo-boost) 充电器可为 CPU 涡轮加速模式提供支持

    涡轮加速升压 (Turbo-boost) 充电器可为 CPU 涡轮加速模式提供支持
    发表于 09-15 14:21 4次下载
    涡轮<b class='flag-5'>加速</b>升压 (Turbo-boost) 充电器可为 <b class='flag-5'>CPU</b> 涡轮<b class='flag-5'>加速</b>模式提供支持

    Java底层实现CPU还有10个术语!

    Java底层实现——CPU的10个术语
    的头像 发表于 03-28 14:14 5922次阅读

    Javascript如何实现GPU加速

    由 Demi 于 星期四, 2018-09-06 16:10 发表 一、什么是Javascript实现GPU加速CPU与GPU设计目标不同,导致它们之间内部结构差异很大。 CPU
    发表于 09-06 20:21 584次阅读

    使用FPGA实现CPU设计的毕业论文总结

    CPU的总体结构到局部功能的实现采用了自顶向下的设计方法和模块化的设计思想,利用Xilinx 公司的Spartan II 系列FPGA,设计实现了八位CPU软核。在FPGA内部不仅
    发表于 08-03 17:58 13次下载
    使用FPGA<b class='flag-5'>实现</b><b class='flag-5'>CPU</b>设计的毕业论文总结

    如何使用FPGA实现八位RISC CPU的设计

    CPU的总体结构到局部功能的实现采用了自顶向下的设计方法和模块化的设计思想, 利用Xilinx 公司的Spartan II 系列FPGA, 设计实现了八位CPU软核。在FPGA 内部
    发表于 08-19 17:43 5次下载
    如何使用FPGA<b class='flag-5'>实现</b>八位RISC <b class='flag-5'>CPU</b>的设计

    为什么FPGA主频比CPU慢,但却可以用来帮CPU加速

    我们知道,FPGA的频率一般只有几百MHz,而CPU的频率却高达数GHz。那么,有不少网友心中就有一个疑问:为什么FPGA主频比CPU慢,但却可以用来帮CPU加速?。 今天,EDN就
    的头像 发表于 11-20 09:56 3628次阅读

    请问一下docker是怎么实现cpu隔离的?

    Docker 使用 cgroups(控制组)来实现 CPU 隔离。
    的头像 发表于 01-15 10:06 229次阅读