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

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

3天内不再提示

什么是指令调度(上)

jf_78858299 来源:姜海波 毕昇编译 作者:姜海波 毕昇编译 2023-02-02 09:36 次阅读

指令调度简介

指令调度是指对程序块或过程中的操作进行排序以有效利用处理器资源的任务^[1]^。指令调度的目的就是通过重排指令,提高指令级并行性,使得程序在拥有指令流水线的CPU上更高效的运行。指令调度优化的一个必要前提就是CPU硬件支持指令并行,否则,指令调度是毫无意义的。

根据指令调度发生的阶段,可以把其分为静态调度和动态调度^[2]^。

  • 静态调度:发生在程序编译时期。静态调度由编译器完成,在生成可执行文件之前通过指令调度相关优化,完成指令重排。
  • 动态调度:发生在程序运行时期。需要提供相应的硬件支持,比如乱序执行(OoOE: out-of-order execution),此时指令的发射顺序和执行顺序可能是不一致,但CPU会保证程序执行的正确性。

无论是静态调度还是动态调度,都是通过指令重排以提高指令流水,进而提高程序执行性能。静态调度和动态调度二者相辅相成,可以弥补对方的一些天然不足,协同完成指令流水优化,提高程序性能。本文主要介绍静态调度,如无特殊说明,后续指令调度均指静态指令调度。

现代计算机的指令并行方案

现代计算机的三种并行模式:流水线、超标量、多核。其中流水线和超标量与指令调度相关性更强,下面简单介绍一下这两种模式。

  1. 流水线
    将指令执行过程分成多个阶段,每个阶段使用不同的硬件资源,从而使得多条指令的执行时间可以重叠。
    经典五段式流水线:IF(取指)、ID(译码)、EX(执行)、MEM(访存)、WB(回写)。在五段式流水线中将一条指令的执行过程分成了5个阶段。
    图片
    • 使能流水线之前
      图片

    • 使能流水线之后
      图片

      在最优情况下,一个cycle中,由于指令执行的每个阶段使用不同的硬件资源,不存在竞争关系,从而可以使每个指令执行在不同的阶段。而由于数据依赖等原因的存在,流水线的并行程度一般很难达到最优,具体的并行程度需要依赖于指令调度的效果。

对于如下原始指令序列

ldr    x1, [x2, x3]
add    x1, x1, #1
ldr    x5, [x2, x4]
sub    x5, x5, #1
mul    x6, x1, x5

在指令调度之前,耗时17个cycle:

图片

在指令调度之后,耗时13个cycle:

ldr    x1, [x2, x3]
ldr    x5, [x2, x4]
add    x1, x1, #1
sub    x5, x5, #1
mul    x6, x1, x5

图片

  1. 超标量
    具备超标量结构的CPU在一个内核上集成了多个译码器、ALU等单元。相比于具备普通流水线技术的CPU,具备超标量技术的CPU可以在同一个阶段执行多条处在相同阶段的指令。
    图片
    超标量流水线:
    图片

    指令调度与寄存器分配的关系

讲到指令调度,不可避免的会想到寄存器分配,而指令调度和寄存器分配之间可以说具有相互约束、相互作用的关系。

指令调度通过重排指令顺序,降低指令间依赖,提高程序的并行度,相应的,改变指令的执行时机也会改变指令所使用的寄存器的生命周期;而寄存器分配又是挖掘程序的局部性,尽量缩短寄存器的生命周期,以能够让更多的数据直接存储在寄存器中。

寄存器分配同样也会影响指令调度,例如当对寄存器的需求超过寄存器数量时,会选择增加一些访存指令,这些指令也需要纳入到指令调度的考虑范畴之内。

所以说两者相互约束。可以知道,将指令调度问题和寄存器分配问题作为两个约束条件进行联合求解得到的解决方案是相对更优的,但由于无论是指令调度还是寄存器分配,都是很复杂的NP完全问题,综合考虑下,编译器一般会分别处理二者^[1]^。

在LLVM编译器的设计中,寄存器分配之前和寄存器分配之后都会执行指令调度。

  • 寄存器分配之前执行指令调度:当前LLVM IR中分配的寄存器为虚拟寄存器,寄存器数量不受限制,此时指令调度受到的约束最小,可以更大程度上提高指令并行度。但是在寄存器分配阶段,使用物理寄存器替换虚拟寄存器,由于物理寄存器数量有限,寄存器压力增大,可能产生寄存器spill场景影响程序性能。
  • 寄存器分配之后执行指令调度:寄存器分配阶段由于寄存器复用等情况会增加指令间依赖,破坏在寄存器分配之前做好的指令调度优化,所以在寄存器分配之后还要再次执行指令调度。

图片

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

    关注

    68

    文章

    19281

    浏览量

    229789
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10860

    浏览量

    211722
  • 指令调度器
    +关注

    关注

    0

    文章

    4

    浏览量

    1497
收藏 人收藏

    评论

    相关推荐

    一种改进的SEDF调度算法

    法引入一种比较机制来执行多处理器间的负载平衡.当VCPU调度时,将就绪VCPU迁移到总运行时间最少的处理器.仿真实验结果表明:IEDF调度算法性能有较大的提升【关键词】:SMP;;SEDF;;负载平衡
    发表于 04-24 10:03

    μC/OS的任务调度实现方法及PowerPC的优化

    那些具有优先级算法硬件指令的CPU,仅做移植是很不够的。  1 基于优先级的任务调度  一个基于优先级的实时多任务内核的任务调度机制需要实现下面三个核心的处理功能:  ◆ 将任务置于就绪态;  ◆ 将
    发表于 04-16 09:18

    应急通信调度指挥系统的原理

      应急通信调度指挥系统的原理  从技术层面,我们提到的应急通信调度指挥系统原理,如图所示,主要包括四个方面:信息采集、信息传递、信息处理以及指令下达和执行 。其中,虚框内表示急需  1.信息采集
    发表于 12-29 17:21

    请问ucos多任务使用全局变量什么时候需要关中断或者关调度

    在STM32用ucos ,有的时候不方便用邮箱 和队列 只能用全局变量,那么问题来了,因为操作全局变量的时候有时是多条汇编指令,如果现在中断来了,进行任务调度的话就破坏了该全局变量,结果不可预料
    发表于 10-23 00:20

    在BLE broadcaster基础测试TMOS调度,无法正常调度是为什么?

    在BLE broadcaster基础测试TMOS调度,发现在ProcessEvent里第一行增加PRINT("LED_Process:%x ",events
    发表于 08-11 06:26

    编译器优化的静态调度介绍

      指令调度简介  指令调度是指对程序块或过程中的操作进行排序以有效利用处理器资源的任务。指令调度
    发表于 03-17 17:07

    基于ARM Cortex-M3的μCOS-II任务调度硬件指令实现

    本文首先多UC/OS-II的任务调度算法做了详细的分析, 然后介绍了基于基于ARM Cortex-M3的COS-II的任务调度硬件指令实现
    发表于 03-25 15:13 270次下载
    基于ARM Cortex-M3的μCOS-II任务<b class='flag-5'>调度</b>硬件<b class='flag-5'>指令</b>实现

    同时多线程处理器的指令调度器设计

    同时多线程处理器的指令调度器设计_李乐
    发表于 01-08 14:55 0次下载

    跳转指令B及带连接的跳转指令BLX 

    跳转(B)和跳转连接(BL)指令是改变指令执行顺序的标准方式。ARM一般按照字地址顺序执行指令,需要时使用条件执行跳过某段指令。只要程序必须偏离顺序执行,就要使用控制流
    发表于 10-19 10:26 2次下载
    跳转<b class='flag-5'>指令</b>B及带连接的跳转<b class='flag-5'>指令</b>BLX<b class='flag-5'>上</b> 

    柔性负荷调度,发电调度的补充

    的负荷,包含具备需求弹性的可调节负荷或可转移负荷,具备双向调节能力的电动汽车、储能、蓄能,以及分布式电源、微网等。传统发电调度中,机组需按照调控指令完全响应,而柔性负荷调度在满足电网调度
    发表于 05-24 14:44 7125次阅读
    柔性负荷<b class='flag-5'>调度</b>,发电<b class='flag-5'>调度</b>的补充

    计算机系统结构教程之指令级并行的详细资料说明

    本文档的主要内容详细介绍的是计算机系统结构教程之指令级并行的详细资料说明包括了:1 指令级并行的概念,2 指令的动态调度,3 动态分支预测技术,4 多
    发表于 12-10 08:00 0次下载
    计算机系统结构教程之<b class='flag-5'>指令</b>级并行的详细资料说明

    机场智能调度系统的功能及应用方案

    根据机场地勤运作特点和业务需求,易华录提供了一体化端到端的机场无线地勤调度解决方案,为机场运作提供高效、安全、可靠并且高性价比的特有的机场调度系统,统一承载语音通话、集群语音、工作流指令、信息发布
    发表于 11-16 10:49 3179次阅读

    HLS优化设计的最关键指令

    Unroll 指令在 for 循环的代码区域进行优化,这个指令不包含流水线执行的概念,单纯地将循环体展开使用更多地硬件资源实现,保证并行循环体在调度地过程中是彼此独立的。
    的头像 发表于 01-14 09:41 2595次阅读

    什么是调度?如何进行调度

    进程调度是操作系统最重要的内容之一,也是学习操作系统的重点和难点。关于进程调度,我们首先就会问出一些问题,什么是进程调度,为什么要进程调度,如何进行
    发表于 08-05 09:04 1.4w次阅读

    什么是指令调度(下)

    指令调度是指对程序块或过程中的操作进行排序以有效利用处理器资源的任务[1]。指令调度的目的就是通过重排指令,提高
    的头像 发表于 02-02 09:36 1383次阅读
    什么是<b class='flag-5'>指令</b><b class='flag-5'>调度</b>(下)