CPU组织

问题描述 投票:-3回答:1

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

  1. 单个蓄电池组织
  2. 一般登记机构
  3. 堆栈组织

我也知道大多数计算机属于三种组织类型之一,有些具有组合功能。

我想知道,我们的现代和普通计算机(例如笔记本电脑,手机)使用组合功能吗?

以及在那些普通和现代计算机中执行哪种组织算术运算?

请帮助我非常想知道它。

computer-science cpu-architecture cpu-registers computer-science-theory
1个回答
0
投票

几乎每个主流ISA都是注册机。

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

具有多个正交寄存器也使软件易于向硬件公开指令级并行性。这可以使独立操作的等待时间在流水线式(尤其是乱序的执行CPU)中重叠。


[一些旧的8位微控制器,例如6502或8080,可以说是累加器,但是它们确实还有其他一些寄存器,例如:保持指针。这些ISA的指令只有1个显式操作数,其他隐式根据操作码。像ORA src一样,ORA进入A寄存器(累加器)。但是这些ISA是not

现代的。

如果使用笔记本电脑之类的“普通计算机”,则表示主流x86,请参见What kind of address instruction does the x86 cpu have?。有关其完整的指令集,请参阅https://www.felixcloutier.com/x86/,以获取Intel手册的摘录,其中列出了它支持的所有指令。它具有16个通用整数寄存器(在64位模式下)和16个FP / SIMD矢量寄存器。 (和有趣的是,使用寄存器堆栈的旧式x87 FPU)。


现代ISA通常对所有基本整数按位移位(有时是旋转)和整数+-* /(以及除法运算的余数)进行指令。通常也是某种硬件bit-scan,通常是popcount。有些具有位反转和/或字节反转,例如x86 bswap或ARM rbit / rev。大多数ISA通过带进位加和子借位指令有效地支持扩展精度算术,并且通常会加宽乘法,例如64x64位输入=> 128位乘积。

有时会在单个指令中找到移位/旋转/掩蔽的更有趣的组合,例如某些ISA中的位域插入/提取指令。 PowerPC在这里尤其出色,它具有rlwinm之类的指令,可将寄存器向左旋转立即数,并对其进行屏蔽以清除除其他2个立即数指定的两个位置之间的位以外的位。或者,另一个变体可以将该位字段插入到任意位置的另一个寄存器中,而不是提取到调零寄存器中的任意位置。

尽管AFAIK不是整数rlwinm,至少某些ISA相当直接地支持Rust内置的诸如i32之类的原始整数类型的大多数东西。 (像这样的Rust很好,不像C和C ++这样的语言拒绝可移植地公开现代CPU功能。)Integer绝对值是很少见的,尽管它可以在大多数ISA上仅用几个指令就可以无分支地完成(这可能是为什么它们如此)不要为它提供指示)。在DSP之外,对饱和整数算术的支持也很少。在x86上,它仅适用于某些SIMD整数大小。在大多数ISA上,add / sub / mul仅通过将结果截断为寄存器的固定宽度而自动换行。 (如果有,进位(可选)进入标志位)。实际上,大多数ISA都有检查签名溢出的方法。

带有BMI2的x86甚至具有pext / pdep用于根据掩码进行位打包/解包。pow,并参见用例https://www.felixcloutier.com/x86/PDEP.html

x86还具有通过AVX2 what is the most efficient way to pack left based on a mask? / rdrand内置的真实(非伪)RNG。

根据另一个矢量寄存器中的掩码,

带有AVX的x86(用于rdseed),尤其是AVX512(用于任何内容的掩码)支持掩码的负载甚至存储,有条件地

实际存储。如果谓词(标志条件)为假,ARM可以对谓词执行与NOP类似的标量操作。通常,如果不需要存储,则需要分支。

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

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

一些x86之类的ISA支持无数乘法。 (就像常规乘法一样,但用XOR代替How to convert a binary integer number to a hex string?来“相加”移位的部分积。)


当然,大多数现代ISA都具有FPU,它可以执行所有IEEE基本操作,并具有所需的<= 0.5ulp错误:+-* /和sqrt。通常是FMA。

我确定我遗漏了一些整数,如果我试图列出使用AVX512的x86可以进行的所有算术运算,我们将整天待在这里。认真地有很多非常具体的说明。

© www.soinside.com 2019 - 2024. All rights reserved.