潮声隔雨深 · 2020年04月21日

如何查找 Cortex M7 的指令执行周期?

对于Cortex M0 M3 M4 的我知道可以在其《Technical Reference Manual 》> Programmers Model > Instruction set summary 里面查看

http://infocenter.arm.com/hel...

但是到了M7, 他告诉我去ARM-V7-M的手册中找

“The processor implements the ARMv7-M instruction set and features provided by the ARMv7E-M architecture profile. For more information about the ARMv7-M instructions, see the ARM®v7-M Architecture Reference Manual.” -----《ARM Cortex-M7 Processor Technical Reference Manual》Programmers Model > Instruction set summary > Binary compatibility with other Cortex processors

但是在 V7-M 手册里,也没有找到具体的指令执行周期。请问应该去哪里找呢

1 个回答 得票排序 · 时间排序
一知半解 · 2020年04月21日

两条指令之所以安排他们同时执行,就是因为两条指令同时的执行时间小于二者之和啊。应该说,和最长的那条指令执行时间一样长——你会发现,双发射的流水线连回答“他的执行时间与一条指令单独执行相比如何?”都是不容易做到的。

如果你从MIPS过来,应该更多接触过超标量,甚至是Out of Order的流水线。超标量,甚至是Out of Order的流水线理论上都无法精确的标注一条指令的执行周期,这种情况下,为了评估系统吞吐量,往往用另外一个概念,也就是CPI(Cycle per Instruction)或者IPC(Instruction per Cycle)。对于Cortex-M0这种顺序执行的流水线来说,CPI一定是 >= 1的,但是对于超标量以及OOO的流水线来说,CPI是可以做到 < 1的。

至于你说的参考表,如果你非要一个大体的参考,那么可以不那么严格的参照Cortex-M3/M4的数据。

至于你说的出一个二维表格……你有考虑过这个表格有多大么?从排列组合的角度来说,这是一个可怕的全排列啊……当你要考虑两个指令的可能性的时候,实际上要考虑三条指令的全排列……也就是说从所有支持的指令中任意找出3条指令,然后对他们进行全排列……

这是没有意义的。真正有意义的是,计算一条流水线的CPI最大值和最小值。

你的回答