C64x 的一个取指包有8个指令。这8个指令可以划分为多个执行包。每个执行包由1~8个并行指令构成。C64x的流水线每次取一个取指包,然后依次执行一个取指包中的多个执行包。例如:
inst 1 ; 执行包 1 ; 取指包 1
|| inst 2
|| inst 3
inst 4 ; 执行包 2
inst 5 ; 执行包 3
|| inst 6
inst 7 ; 执行包 4
|| inst 8
inst 9 ; 执行包 5 ; 取指包 2
|| inst 10
|| inst 11
|| inst 12
|| inst 13
|| inst 14
|| inst 15
|| inst 16
可是,TI的多个文档中又提到,C64x的执行包是可以跨取指包的。但是我没有找到哪个文档里面有对这种情况下流水线处理的具体描述。
请问,执行包跨取指包的用处是什么呢?流水线怎么处理这种情况?TI的哪个文档里面有相关的描述吗?
例如:
inst 1 ; 执行包 1 ; 取指包 1
|| inst 2
|| inst 3
|| inst 4
inst 5 ; 执行包 2 - 跨取指包
|| inst 6
|| inst 7
|| inst 8
|| inst 9 ; 取指包 2 - 执行包与前一个取指包属于同一个执行包 2
|| inst 10
|| inst 11
|| inst 12
inst 13 ; 执行包 3
|| inst 14
|| inst 15
|| inst 16
执行包 2 (并行指令 5~12)跨了两个取指包1-2。那么这个执行包被分成两个CPU周期执行(第一次指令 5-8,第二次指令 9-12)?还是流水线做特殊处理,使得完整的执行包 2(指令 5-12)可以在同一个CPU周期并行执行? |