我从这个网站引用:cs.standford.edu
CISC方法试图最大限度地减少每个程序的指令数,同时牺牲每个指令的周期数。RISC做的恰恰相反,以每个程序的指令数量为代价来减少每个指令的周期。
它说RISC以使用许多指令为代价来减少每条指令的周期,这怎么可能?
AFAIK,CPU的一个周期定义为:
- fetch(指令(
- 解码(指令(
- 执行
那么我能得出更多指令意味着更多周期的结论吗?
不,一个周期是时钟的一个周期,而不是执行整个指令。(例如,对于100MHz的CPU,一个时钟周期是1/10MHz或10纳秒。(
RISC的设计目的是使流水线更容易(因此在20世纪80年代初是可能的(,这样这些执行阶段就可以在单独的指令中重叠。请参阅现代微处理器90分钟指南和https://en.wikipedia.org/wiki/Classic_RISC_pipeline
那么,我能得出更多指令意味着更多周期的结论吗?
否。基本上不相关。
重要的是任何一条指令的最大复杂度,而不是CPU支持多少不同的操作码以现代的AArch64和PowerPC为例:许多不同的指令(包括SIMD(,但每一个指令都有它能做多少的上限,所以它们通常不需要微码。每个指令的寄存器读写次数有限制,任何计算都可以构建到流水线ALU中,并且内存只能由不做数学运算的加载/存储指令访问。(最后一点是使机器成为"装载存储"机器的原因。(
RISC思想中仍然真正有用的部分是降低指令集复杂性。例如不是像x86的CCD_ 1(任意长度的memset
(之类的东西。同时也避免了像rol
这样的指令上x86的部分标志更新之类的东西,这些指令会保留一些标志未修改,但会写入其他标志。这可以通过现代高性能CPU来解决,但仍然是一种惩罚。
最明显的是,像add [rdi], eax
这样必须在内部加载/添加/存储的内存目标指令是非常非RISC的。