assembly RISC如何在拥有许多指令的同时减少周期?

ac1kyiln  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(151)

我引用这个网站:cs.standford.edu
CISC方法试图最小化每个程序的指令数,牺牲每个指令的周期数。RISC方法则相反,以每个程序的指令数为代价减少每个指令的周期数。
它说RISC以减少每条指令的周期为代价将使用许多指令,这怎么可能呢?
AFAIK,CPU的一个周期定义为:

  • 取指令
  • 译码(指令)
  • 执行了

那么,我是否可以得出结论:更多的指令意味着更多的周期?

2fjabf4q

2fjabf4q1#

不,一个周期是时钟的一个周期,而不是执行整个指令的周期。(例如,对于100 MHz CPU,一个时钟周期是1/100 MHz,或10纳秒。)
RISC的设计是为了使流水线操作更容易(因此在20世纪80年代早期就成为可能),这样执行的各个阶段就可以在单独的指令中重叠。
那么,我是否可以得出结论:更多的指令意味着更多的周期?
不。基本上没有关系。

**任何单一指令的最大复杂性才是最重要的,而不是CPU支持多少不同的操作码。**以现代的AArch 64和PowerPC为例:许多不同指令(包括SIMD),但是每个指令都有一个上限,所以它们通常不需要微码。每个指令的寄存器读写次数有限制,任何计算都可以内置到流水线ALU中,并且内存只被不执行数学运算的加载/存储指令访问。(最后一点是什么使机器成为“加载存储”机器。)

RISC思想中真正有用的部分是降低指令集 * 复杂性 *。例如,不是像x86的rep stosb(任意长度的memset)这样的东西。也避免了像x86的rol这样的指令上的部分标志更新,这种更新会留下一些未修改的标志,但会写入其他标志。这可以通过现代高性能CPU来解决,但仍然是一个代价。
最明显的是,像add [rdi], eax这样的内存目标指令在内部必须加载/添加/存储,这是非常非RISC的。

相关问题