即使在非VLIW ISA上,第一条指令也不一定要“顺序执行”,执行只需要顺序出现即可。有序超标量实现可以与另一个指令并行执行多个指令。为了有效地做到这一点,必须增加(加宽)用于解码指令的硬件,必须增加硬件以确保要并行执行的指令的数据独立性,必须增加执行资源,并且通常会增加寄存器文件端口的数量。所有这些都增加了晶体管。
乱序实现允许在没有数据依赖性的情况下在较早的指令之前执行更高的指令,并在数据可用时立即使用其他硬件来处理指令调度,并添加重命名寄存器和用于映射的硬件,分配并释放它们(更多晶体管),以避免读取后写入和写入后写入的危险。无序执行使处理器可以避免停顿。
在乱序处理器中对装入和存储进行重新排序需要确保程序顺序中的较早存储将结果转发到相同地址的后续装入。这意味着地址比较逻辑以及存储的地址(和大小)的存储(以及数据的存储),直到存储已提交到内存(高速缓存)为止。(对于内存一致性模型较弱的ISA,还需要检查负载是否相对于其他处理器(更多晶体管)的存储进行了正确排序。)
流水线化增加了一些额外的控制和缓冲开销,并防止了指令处理不同部分的逻辑重用,但允许处理指令的不同部分在时间上对不同指令重叠。
流水线和超标量执行会增加控制危害(即条件分支和跳转)的影响。流水线化(以及无序执行)甚至可能延迟无条件跳转的目标可用性,因此添加硬件以预测目标(以及条件分支的方向)可以继续获取指令,而无需等待指令执行部分的执行。处理器以提供必要的数据。更准确的预测变量往往需要更多的晶体管。
对于乱序处理器,可能希望允许在计算所有先前存储区的地址之前执行来自存储器的加载,因此需要一些硬件来处理这种推测,可能包括预测器。
缓存可以减少等待时间并增加内存访问的带宽,但是可以添加晶体管来存储数据和存储标签(并将标签与请求的地址进行比较)。还需要其他硬件来实施替换策略。硬件预取将增加更多的晶体管。
用硬件而不是软件来实现功能可以提高性能(同时需要更多的晶体管)。例如,TLB管理,复杂的运算(例如乘法或浮点运算),特殊的运算(例如计数前导零)。(添加指令还会增加指令解码的复杂度,通常也会增加执行的复杂度,例如,控制将使用执行硬件的哪些部分。)
SIMD /矢量操作增加了每条指令执行的工作量,但需要更多的数据存储(更宽的寄存器),并且通常使用更多的执行资源。
(推测性多线程还可以使多个处理器更快地执行单个线程的程序。显然,将处理器添加到芯片上会增加晶体管的数量。)
拥有更多可用的晶体管还可以使计算机架构师为ISA提供更多对软件可见的寄存器,从而有可能降低内存访问的频率,这种访问速度往往比寄存器访问慢,并且涉及某种程度的间接寻址(例如,向堆栈增加偏移量)指针),这会增加延迟。
集成-增加了芯片上而不是系统中晶体管的数量-减少了通信延迟并增加了带宽,显然可以提高性能。(功耗的减少也可以转化为更高的性能。)
即使在指令执行级别,添加晶体管也可以提高性能。例如,进位选择加法器与低位进位的不同假设并行两次将高位相加,在从低位进位可用时选择正确的高位和,显然比简单的方法需要更多的晶体管纹波进位加法器,但减少了产生总和的延迟。类似地,具有单行进位保存加法器的乘法器比Dadda(或Wallace)树乘法器使用更少的晶体管(但速度较慢),并且无法进行流水线处理(因此必须复制以允许另一个乘法在更早的时候开始执行)进行中)。
上面的内容可能很详尽,但并不详尽!