TI C6000 优化进阶:循环最重要!

您所在的位置:网站首页 Sploop指令 TI C6000 优化进阶:循环最重要!

TI C6000 优化进阶:循环最重要!

2023-08-22 12:55| 来源: 网络整理| 查看: 265

软件流水循环

1. C6000流水线(Pipeline)

一个指令的处理过程并不是一步完成,它被分为三个阶段:取指(Fetch)、译码(Decode)、执行(Excute)。将每一个阶段放入独立的流程车间处理,形成流水线式的处理过程,可以大大加快指令的处理速度。

如图1所示,流水编排后的3个指令只需5个cycle,相比顺序执行的9个cycle大大减少,当指令数增多,流水线的优势将更加明显。

图1 简单的流水线编排示意

实际上,C6000架构把每一个阶段进一步划分为多个子阶段,每个子阶段消耗1个CPU cycle。

取指(4个子阶段):

PG: Program address generate (update program counter register)

PS: Program address send (to memory)

PW: Program (memory) access ready wait

PR: Program fetch packet receive (fetch packet = eight 32-bit instructions)

译码(2个子阶段):

DP: Instruction dispatch (or assign, to the functional units)

DC: Instruction decode

执行(1-10个子阶段,指令间有区别):

E1 – E10, where E1 is the first sub stage in the execute stage

图2 高性能的C6000流水线

2. 流水线阻塞

下列两种情况出现时,流水线将被阻塞:

当前为load、complex multiply等具有多个延时时隙(delay slot)的指令时,下一指令需多个cycle,等其返回结果后才能往下继续执行

跳转指令出现时,CPU无法预知下一步执行哪个分支指令,因此跳转目标指令需等到跳转指令执行到E1阶段才能进入流水线

为了充分利用流水线的资源,避免delay slots造成的阻塞,C6000架构在软件和硬件上分别新增了一个处理机制:

软件上:提供软件流水(software pipelining)指令编排

硬件上:提供SPLOOP buffer(software pipelining loop buffer)

3. 软件流水

软件流水≠流水线!

软件流水技术指编译器通过重新调整指令的位置,使得原本将发生阻塞的流水线得以充分利用,其重点在“软件”两字。

例如处理下面循环:

for(i=0; i



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3