Computer science CPU组织

Computer science CPU组织,computer-science,cpu-architecture,cpu-registers,computer-science-theory,Computer Science,Cpu Architecture,Cpu Registers,Computer Science Theory,我研究了以下三种类型的CPU组织:- 单一累加器组织 普通登记组织 堆栈组织 我还知道,大多数计算机分为三种组织形式之一,有些结合了这一特点 我想知道,我们的现代电脑和普通电脑(如笔记本电脑、手机)是否使用组合功能 在那些普通的和现代的计算机中,算术运算是由哪个组织执行的 请帮助我了解它。几乎所有主流ISA都是一台注册机 堆栈和累加器机器可以有更小的指令(更隐式),更少的显式操作数,但这不值得额外的数据加载/存储指令。即使使用高速缓存,访问指针寄存器选择的内存地址的加载和存储转发延迟也比直接读取

我研究了以下三种类型的CPU组织:-

单一累加器组织 普通登记组织 堆栈组织 我还知道,大多数计算机分为三种组织形式之一,有些结合了这一特点

我想知道,我们的现代电脑和普通电脑(如笔记本电脑、手机)是否使用组合功能

在那些普通的和现代的计算机中,算术运算是由哪个组织执行的

请帮助我了解它。

几乎所有主流ISA都是一台注册机

堆栈和累加器机器可以有更小的指令(更隐式),更少的显式操作数,但这不值得额外的数据加载/存储指令。即使使用高速缓存,访问指针寄存器选择的内存地址的加载和存储转发延迟也比直接读取寄存器号编码到指令中的寄存器的延迟要高得多,比如4到5个周期

拥有多个正交寄存器还可以让软件轻松地向硬件公开指令级并行性,而不需要像x87 fxch这样的东西将堆栈寄存器交换到堆栈顶部。这可能会使独立操作的延迟在流水线(尤其是无序执行)CPU中重叠

另请参阅,了解从堆栈和累加器机器转向负载存储体系结构的历史,以及每种机器的超级基本图。有些CISC允许reg、mem用于ALU指令,而不仅仅用于加载和存储

一些旧的8位微型计算机,如6502或8080,可能被认为是累加器机器,但它们确实有一些其他寄存器,例如用来保存指针的寄存器。这些ISA的指令只有一个显式操作数,另一个根据操作码隐式。与ORA类似,src是一个ORA到A寄存器累加器中。但这些国际会计准则并不现代

如果说像笔记本电脑这样的普通计算机,你指的是主流x86,请参阅。有关完整的指令集,请参阅英特尔手册摘录,其中列出了它支持的所有指令。它有16个64位模式的通用整数寄存器和16个FP/SIMD向量寄存器。以及一个有趣的使用寄存器堆栈的传统x87 FPU

我想我在写这个答案时误解了这个问题;我以为是问CPU直接支持哪些算术运算。这就是这个答案其余部分的答案。我将把它留在这里,让任何对一些CPU在一次硬件操作中可以完成的精巧工作的杂乱概述感兴趣的人看一看

但实际上我认为它只是询问指令操作数,在这种情况下很简单:几乎所有的东西都是2或3操作数寄存器机器,除了x86的传统x87 FPU,它是一种寄存器堆栈结构

现代ISA一般都有关于所有基本整数按位移位、有时旋转、整数+-*/和除法余数的指令。也通常是某种硬件,通常是一个。有些具有位反转和/或字节反转,如x86 bswap或ARM rbit/rev。大多数ISA通过带进位的加法和带借位的sub指令有效地支持扩展精度算法,通常还支持像64x64位输入=>128位乘积这样的加宽乘法

随着晶体管预算的增加,拥有大部分时间处于空闲状态的专用执行单元是可以的;在任何给定时刻,电流晶体管密度都需要很大一部分管芯面积为暗硅才能不熔化

移位/旋转/掩蔽的更奇特的组合有时出现在单个指令中,如某些ISA中的位字段插入/提取指令。PowerPC在这里尤其出色,它的指令是旋转一个立即数留下的寄存器,并屏蔽它以清除由另外两个立即数指定的两个位置之间的位。或者,另一种变体可以在任意位置将该位字段插入另一个寄存器,而不是提取到零寄存器中的任意位置

Rust为原始整数类型(如)内置的大多数东西至少有一些ISA相当直接地支持,尽管AFAIK不是integer pow。锈是这样的好,不像一些语言,如C和C++,拒绝便携地暴露现代CPU的特点。整数绝对值很少见,尽管在大多数ISA上,它只能在几个指令中无分支地完成,这大概就是为什么他们不费心为它提供指令的原因。 在DSP之外,对饱和整数算法的支持也很少见。在x86上,它仅适用于某些SIMD整数大小。 在大多数ISA上,add/sub/mul通过将结果截断为寄存器的固定宽度来简单地进行换行。如果有标志位,则执行可选择进入标志位。大多数ISA都有在事后检查签名溢出的方法

带有BMI2的x86甚至具有用于位打包/解包的pext/pdep 戴上面具。 ,请参阅以获取用例

x86还通过rdrand/rdseed提供了一个内置的真而非伪RNG

根据另一个向量寄存器中的掩码,带有AVX for vmaskmov的x86,尤其是AVX512 masking for anything,支持掩码加载甚至存储,而这些有条件地不实际存储。如果谓词标志条件为false,ARM可以对标量执行类似于NOP的谓词指令。通常,如果您不需要存储,则需要分支

具有从另一个向量获取其控制操作数的SIMD随机数的ISA可以使用这些ISA从16字节的向量并行执行16x 4位LUT查找。例如,这可用于对popcount进行向量化,或执行其他操作,如对Galois字段进行向量化乘法。或者将0..15整数转换为相应的十六进制ASCII数字:显示如何使用x86 SIMD高效地执行此操作

其他SIMD操作包括SAD绝对差和,视频编解码器中的运动搜索大量使用。或针对无符号字节水平和的全零向量

一些ISA(如x86)支持无角乘法。类似于常规乘法,但使用XOR而不是+来添加移位的部分积

当然,大多数现代ISA都有一个FPU,它可以在需要的时间内完成所有IEEE基本操作