TI C6000 优化进阶:循环最重要! |
您所在的位置:网站首页 › Sploop指令 › TI C6000 优化进阶:循环最重要! |
软件流水循环 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 |