18、指令跟踪调度:提升程序性能的有效策略

指令跟踪调度:提升程序性能的有效策略

1. 指令调度概述

指令的执行顺序对程序执行时间有着显著影响。指令可能需要多个执行周期才能产生结果,这会阻塞依赖于它们的其他指令;内存访问也可能延迟指令的执行;特定的指令组合会使处理器流水线停顿,而其他组合则允许在超标量流水线上同时执行。指令调度,也称为代码压缩,是一种流行的汇编级优化方法,旨在找到能够提高并行执行指令数量的良好指令顺序。

指令调度可分为局部调度和全局调度。局部指令调度局限于单个基本块,由于可调度的指令数量有限,这种方法往往无法充分挖掘指令级并行性。为解决这一问题,指令调度可扩展到多个基本块,即全局调度。跟踪调度就是一种著名的全局调度方法,它是一种基于分析的方法,旨在减少平均执行时间(ACET),本文将探讨如何利用跟踪调度来改善最坏情况执行时间(WCET)。

2. 动机示例

以WCC的目标架构英飞凌TriCore TC1796处理器为例,它属于超标量按序发射处理器,具有整数流水线、加载/存储流水线和循环流水线这3个不同的流水线,可同时执行指令。为了利用这种并行性,程序代码中的指令需要以特定顺序排列。

考虑一个来自基准测试crc的非优化汇编代码的控制流图(CFG)片段。在原始指令顺序下,TriCore的流水线无法并行使用,因为任何块中都没有可以同时在整数和加载/存储流水线上发射的指令组合,即使局部指令调度器也无法生成具有更高并行性的代码,此时最坏情况执行路径(WCEP)的长度为16个周期。

而跟踪调度允许指令跨块边界移动。通过将指令在块L0、L1和L2之间移动,可以生成在不同流水线上同一周期发射的指令束。例如,“mov D8, 8”和“movh.a A12, HI:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值