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

    文章

    18304

    浏览量

    222351
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10456

    浏览量

    206608
  • 指令调度器
    +关注

    关注

    0

    文章

    4

    浏览量

    1481
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    基于整数线性规划的TTA代码优化

    针对传输触发结构代码生成中的指令调度、多寄存器堆分配、全局寄存器分配和软件旁路等优化问题,给出一个整数线性规划形式化模型,并实现了一个软件架构来验证该模型的正
    发表于 04-11 09:57 7次下载

    面向RISC-DSP处理器的代码生成和优化

    摘要:随着嵌入式系统应用的发展,高效和小型化是其主要特点,这对目标代码质量的要求也越来越高。针对自行设计的32位具有RISC-DSP结构的媒体处理器MD-32特有的体系结构特点,提出C编译器支持的,在汇编代码级通过指令调度和转换指令
    发表于 02-24 22:29 24次下载

    基于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次下载

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

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

    变电所的倒闸操作基本要求_变电所的倒闸操作的顺序

    调度操作指令要由有权发布指令调度值班员(所属调度单位发文公布)发布;操作人和监护人必须由上级部门批准并公布的合格人员担任。
    的头像 发表于 12-04 10:10 1.5w次阅读

    使用Tomasulo算法实现循环展开和指令调度的示例详细说明

    对体系结构寄存器重命名,提供更大的寄存器集合;缓冲来自寄存器的操作数。Tomasulo方案中组合使用两种不同的技术。源操作数缓冲消除了当操作数在寄存器中可用时出现的WAR冒险。对寄存器重命名,再结合对结果的缓存,直到对寄存器早期数据的引用全部结束,这样也有可能消除WAR冒险。
    发表于 12-10 08:00 4次下载
    使用Tomasulo算法实现循环展开和<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 2937次阅读

    负载均衡处理器的运算资源分配策略

    现代超标量处理器通常设置有多套计算部件攴持指令并行执行,以提高程序的运行效率。运算资源分配策略在很大程度上决定了处理器能否充分利用计算部件并行加速计算,具有重要作用。就指令调度以及运算资源分配
    发表于 05-13 10:44 15次下载

    什么是指令调度(下)

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

    北斗定位终端在应急救援场景的高精度定位与通信能力

    ,为救援行动提供了精确的导航和指引。 同时,它强大的通信能力确保了救援队伍与指挥中心之间的信息畅通无阻,无论是短报文通信还是实时语音通话,都能帮助救援人员及时报告现场情况,接收指挥中心的指令调度信息。这种高精度
    的头像 发表于 03-29 11:18 174次阅读