【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64

news2024/11/15 23:38:27

为什么叫x86和x86_64和AMD64?

为什么大家叫x86为32位系统?

为什么软件版本会注明 for amd64版本,不是intel64呢?

x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,intel官方文档里面称为“IA-32”

x84_64是x86 CPU开始迈向64位的时候,有2选择:

1、向下兼容x86。

2、完全重新设计指令集,不兼容x86。

AMD抢跑了,比Intel率先制造出了商用的兼容x86的CPU,AMD称之为AMD64,抢了64位PC的第一桶金,得到了用户的认同。

Intel选择了设计一种不兼容x86的全新64为指令集,称之为IA-64(这玩意似乎就是安腾),但是比amd晚了一步,而且IA-64也挺惨淡的,因为是全新设计的CPU,没有编译器,也不支持windows(微软把intel给忽悠了,承诺了会出安腾版windows server版,但是迟迟拿不出东西)。后来不得不在时机落后的情况下也开始支持AMD64的指令集,但是换了个名字,叫x86_64,表示是x86指令集的64扩展,大概是不愿意承认这玩意是AMD设计出来的。

实际上,x86_64,x64,AMD64基本上是同一个东西,我们现在用的intel/amd的桌面级CPU基本上都是x86_64,与之相对的arm,ppc等都不是x86_64。

x86、x86_64主要的区别就是32位和64位的问题,x86中只有8个32位通用寄存器,eax,ebx,ecx,edx, ebp, esp, esi, edi。

x86_64把这8个通用寄存器扩展成了64位的,并且比x86增加了若干个寄存器(好像增加了8个,变成了总共16个通用寄存器)。同样的MMX的寄存器的位数和数量也进行了扩展。此外cpu扩展到64位后也能支持更多的内存了,等等许多好处。

对于普通程序来说,CPU位数的扩展、寄存器数量的增加不会带来明显的性能提升,比如IE浏览器、Office办公这类的软件。特定的程序很能够充分利用64位CPU、更多的寄存器带来的优势,比如MMX除了能提升多媒体程序的性能,对矩阵、多项式、向量计算都能带来提升,更多的MMX寄存器、更大的寄存器字长都有利于SIMD指令的执行,能够提升CPU对数据的吞吐量(RISC指令集的CPU动不动就有数百个寄存器,可以有效的缓存中间计算结果,不需要把中间结果写入内存,从而减少内存访问次数,显著提升性能)

x86

x86架构(The x86 architecture)是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。

1978年6月8日,Intel发布了新款16位微处理器“8086”,也同时开创了一个新时代:x86架构诞生了。

在40年的发展史中,x86家族不断壮大,从桌面转战笔记本、服务器、超级计算机、编写设备,期间还挫败或者限制了很多竞争对手的发展,让不少处理器厂商及其架构技术成为历史名字,即使有些封闭发展的也难以为继,比如苹果就已经放弃PowerPC了。

AMD64/x86-64

x86-64有时会简称为“x64”,是64位微处理器架构及其相应指令集的一种,也是Intel x86架构的延伸产品。

“x86-64”1999由AMD设计,AMD 首次公开 64 位集以扩充给 IA-32,称为 x86-64(后来改名为 AMD64)。 AMD64架构在IA-32上新增了64位寄存器,并兼容早期的16位和32位软件,可使现有以x86为对象的编译器容易转为AMD64版本。

由于AMD64和Intel64基本上一致,很多软硬件产品都使用一种不倾向任何一方的词汇来表明它们对两种架构的同时兼容。出于这个目的,AMD对这种CPU架构的原始称呼 - “x86-64”被不时地使用,还有变体“x86_64”。其他公司如微软和Sun在营销资料中使用“x64”作为对“x86-64”的缩写。

许多操作系统及产品,尤其那些是在Intel进入这块市场之前就引入“x86-64”支持的,使用“AMD64”或“amd64”同时指代AMD64和Intel64。

现在的x86 CPU在位数上有32/64bit之分,在ARCH上有又x86/x86_64/x64/i386/IA32/IA64/amd64

最近又新出来一个x32,还好不是ARCH,只是ABI,没有那么混乱。

先说一下x86的这些arch,不要求很严格的话,基本上可以用下面的公式来表达:

x86=i386=IA32

amd64=x86_64=x64!=IA64

其实这两个等式里很多都是别名,严格说的话,x86的世界里只存在x86/x86_64/IA64三种架构。

当年AMD先于Intel推出向下兼容的amd64 CPU,而Intel推出的不兼容32位系统的IA64惨淡收场(被MS放了鸽子),后来Intel在指令上支持了amd64,不过不愿意叫amd64,改了个名字x86_64。

再说64bit/32bit的兼容性问题:

现在的64bit CPU实际上都做了兼容32bit的特殊设计,所以64bit的CPU上运行32bit的软件(包括kernel/app, driver除外)是没有问题。反过来,32bit的CPU上运行64bit的软件是不可以的。

最后说重点,64bit相比32bit的性能优势:

这里不考虑64bit硬件上运行32bit软件的这种过度方式。

从架构上来说,64bit拥有64bit 的register和64bit的bus,在数据传输效率上比32bit要高不少;另外,64bit地址总线的寻址空间突破了4G的限制。

所以,对于大内存,密集数据运算的应用场景,64bit的优势是非常明显的。网上有一些benchmark,这里不贴了。

但是,对于小内存系统,64bit的CPU在某些状况下可能比32bit CPU的效率更低。

因为64 bit的CPU的地址是64位的,指针是64位的,编译生成的二进制文件更大,运行时占用的内存更多;另一方面,因为64位地址的问题,cache中能存放的指令就更少,所以更容易导致cache的miss。

所以在某些应用场景,64 bitCPU的更大的寻址空间,更快的数据传递,更快的浮点运算的特性, 与其64 bit的地址/指针所导致的cache miss的特性,始终并存。

为了充分利用64的优势,又避免64bit地址导致的cache miss的问题,Intel提出了x32 ABI的概念。

x32不是一个ARCH,是一个ABI。

x32可以充分的使用64 bit硬件的64 bit寄存器,64bit总线,以及64bit新增的指令,从而获得更快的数据处理速度。

同时x32又使用32bit的地址/pointer,32bit的C数据类型,因此cache miss并不会增加。

x32是一个ABI,其设计到的部分包括:kernel的support,toolchain的support,system lib的support。现在kernel(from 3.4)和toolchain的support都已经OK。

ARM,AMD,X86,AArch64的概念

AMD,中文名(超威)超微半导体,是除了英特尔以外最大的x86架构微处理供应商,也是除了英伟达以外仅有的独立图形处理供应商。

x86泛指一系列由英特尔公司开发的处理器的架构,最早为1978年面世的“Intel 8086”CPU。早期的处理器均是以此格式来命名,如Intel 8086,80186,80286,80386,80486,这些架构被统称为x86。由于数字不能被注册成为商标,因此公司每当有新的处理器使用,均会采用可注册的名称,如Pentium。

基于x86的32位架构(常被称为i386,x86),IA-32,而基于x86的64位架构,x86-64常称为AMD64或Intel64。最早是由AMD公司首先根据x86的架构生产出了64位的处理器,但是由于是竞争关系,Intel公司不愿意承认AMD64,近些年才推出了Intel64

ARM(英文为Advanced RISC Machine,或Acorn RISC Machine)也是一个架构,非常适用于移动通信这种低成本,高性能,低耗电的领域。ARM的公司为安谋控股(ARM Holding plc),又称为ARM公司,总部位于剑桥的设计与软件公司,现在已被日本的软银公司收购,后者同时也是国内互联网巨头阿里巴巴的最大股东。

AArch64是ARMv8的一种执行状态。

为了更广泛地向企业领域推进,需要引入 64 位构架,同时也需要在 ARMv8 架构中引入新的 AArch64 执行状态。

AArch64 不是一个单纯的 32 位 ARM 构架扩展,而是 ARMv8 内全新的构架,完全使用全新的 A64 指令集。这些都源自于多年对现代构架设计的深入研究。更重要的是, AArch64 作为一个分离出的执行状态,意味着一些未来的处理器可能不支持旧的 AArch32 执行状态。

虽然最初的 64 位 ARM 处理器将会完全向后兼容,但我们大胆且前瞻性地将 AArch64 作为在 ARMv8 处理器中唯一的执行状态。我们在这些系统中将不支持 32 位执行状态, 这将使许多有益的实现得到权衡,如默认情况下,使用一个较大的 64K 大小的页面,并会使得纯净的 64 位 ARM 服务器系统不受遗留代码的影响。立即进行这种划分是很重要的,因为有可能在未来几年内将出现仅支持 64 位的服务器系统。没有必要在新的 64 位架构中去实现一个完整的 32 位流水线,这将会提高未来 ARM 服务器系统的能效。

这样回想起来, AArch64 作为在 Fedora ARM 项目中被支持的 ARM 构架是一个很自然的过程: armv5tel、armv7hl、aarch64。新的架构被命名为:aarch64,这同 ARM 自己选择的主线命名方式保持一致,同时也考虑到了 ARM 架构名与 ARM 商标分开的期望。

ARMv8-A 将 64 位架构支持引入 ARM 架构中,其中包括:

64 位通用寄存器、SP(堆栈指针)和 PC(程序计数器)

64 位数据处理和扩展的虚拟寻址

两种主要执行状态:

AArch64 - 64 位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持

AArch32 — 32 位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持

这些执行状态支持三个主要指令集:

A32(或 ARM):32 位固定长度指令集,通过不同架构变体增强部分 32 位架构执行环境现在称为 AArch32。

T32 (Thumb) 是以 16 位固定长度指令集的形式引入的,随后在引入 Thumb-2 技术时增强为 16 位和 32 位混合长度指令集。部分 32 位架构执行环境现在称为 AArch32。

A64:提供与 ARM 和 Thumb 指令集类似功能的 32 位固定长度指令集。随 ARMv8-A 一起引入,它是一种 AArch64 指令集。

ARM ISA 不断改进,以满足前沿应用程序开发人员日益增长的要求,同时保留了必要的向后兼容性,以保护软件开发投资。在 ARMv8-A 中,对 A32 和 T32 进行了一些增补,以保持与 A64 指令集一致。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github 标星68.5K,不愧是阿里P8架构师整理的 Java 面试复盘笔记

Java 面试 2021 已经过半,不知道大家在今年的金三银四是否拿到了自己理想的 Offer?大家的技术面一共面了多少轮?作为一名程序员,技术面试是不可避免的一个环节,一般技术面试官都会通过自己的方式去考察程序员的技术功…

Java性能诊断利器:arthas详细教程

目录 1.概述 2.使用 2.1.安装使用 2.2.启动 2.3.全局监控 2.4.方法级别的监控 2.4.1.插件 2.4.2.watch 2.3.3.trace 2.3.4.stack 2.4.线上问题定位 2.4.1.反编译 2.4.2.CPU占用率 2.4.3.死锁 1.概述 arthas是Alibaba推出的一款JVM性能诊断调优工具,主…

C++之代理模式

目录 模式思想 简介 组成 优点 代码实现 情景 如果不使用代理的话: 加代理的话: 结果 模式思想 简介 代理模式: 通过代理类,来控制实际对象的访问权限。 在某些情况下,一个对象不适合或者不能直接引用另…

深入理解java虚拟机精华总结:硬件的效率与一致性、Java内存模型、Java与线程、Java与协程

深入理解java虚拟机精华总结:硬件的效率与一致性、Java内存模型、Java与线程、Java与协程 硬件的效率与一致性Java内存模型主内存与工作内存内存间交互操作对于volatile型变量的特殊规则针对long和double型变量的特殊规则原子性、可见性与有序性原子性可见性有序性 …

数学建模之灰色预测方法

数学建模之灰色预测方法 目录灰色关联度矩阵关联系数关联矩阵 GM(1,1)模型相关原理matlab程序 目录 灰色关联度矩阵 关联系数 计算关联系数公式 步骤 第一步 第二步 求参考数列和待比较数列矩阵数值做差之后的最小值和最大值 第三步利用公式计算关联度系数,其中将…

【C++修炼之路】32.智能指针

每一个不曾起舞的日子都是对生命的辜负 智能指针 一.为什么需要智能指针?二.智能指针解决new抛异常的示例三.智能指针的使用及其原理3.1 RAII3.2 SmartPtr存在的问题3.3 std::auto_ptr3.4 std::unique_ptr3.5 std::shared_ptrstd::shared_ptr的基本设计std::shared_…

海明码(汉明码)原理及其计算方法

海明码(汉明码)是一种利用奇偶性检测和纠正错误的编码方法。在传输和储存数据时,可能会发生传输错误或数据损坏。海明码通过在数据中添加冗余位来检测错误并进行纠正,提高了传输和存储数据的可靠性。 基本原理:将原始…

【数据结构复习】汉诺塔:快速回忆汉诺塔问题

题目 题解 众所周知这是一个递归问题( 我们只需要注意两点:①什么时候退出递归 ②怎么从n-1推出n ①什么时候退出递归:很明显啦,n1的时候,我们直接把A位置的唯一盘子移到C上,大功告成。 ②怎么从n-1推出n…

Vision Pro销售策略曝光,面罩/头带/屈光镜片加大零售难度

彭博社Mark Gurman再次发布了关于苹果Vision Pro的销售策略,以及零售方面的难题。 一、销售计划和策略 1,2024年初先在美国部分门店销售,仅线下购买,线上暂不开放。购买方式是先线上预约(可能要提供面部扫描图、眼镜…

Python 利用opencv识别某象旋转验证码,识别率达95%以上

本期介绍某象旋转验证码识别,识别的思想其实与上篇文章识别滑动还原验证码相似,也是借鉴过来的,但是旋转验证码更加复杂,实现起来稍加困难,下面来看一下,原始数据集和识别之后数据集。 原始数据集: 将圆图旋转成功之后的数据集: 注意:我这里仅仅抓取了几十张作为数据…

c++使用回调函数

前言 回调函数的使用场景&#xff0c;当内部逻辑不知道用户的类型时&#xff0c;让用户自己提供对应数据类型的函数。 代码 #include<iostream> using namespace std;/// <summary> /// 万能打印函数。用户调用 /// </summary> /// <param name"d…

操作系统第六章之进程同步

操作系统第六章之进程同步 参考资料来源竞争同步临界区问题标准解决方案Peterson solution 硬件同步TestAndSet指令Swap介绍 信号量SemaphoresCritical Section of n n n Processes 信号量的实现Semaphore Implementation死锁和饥饿 经典同步问题有限缓冲问题生产者进程的结构…

笔记2(DCL指令)

用处&#xff1a;用来管理数据库 用户&#xff0c;控制数据库的访问 权限 DCL – 用户管理 1.查询用户 use mysql; select * from user; 2.创建用户 create user 用户名主机名 identified by 密码; 例如&#xff1a; create user xiaojielocalhost identified by 4620; 创建…

可重入函数、volatile关键字、SIGCHLD信号

目录 一、可重入函数 二、volatile关键字 三、SIGCHLD信号 一、可重入函数 以一个链表头插为例子 main函数调用insert函数像一个链表head中插入节点node1&#xff0c;插入操作分为两步&#xff0c;刚做完第一步的时候因为硬件中断使进程切换到内核&#xff0c;再次回到用户…

Visual studio 2015下载安装以及缺包提示的处理方法

最近要加入的比赛团队需要用到Visual studio 2015&#xff0c;百度后找到很多资源&#xff0c;自己也转到了百度网盘。中英文都有&#xff0c;需要的可以下载。 链接&#xff1a;https://pan.baidu.com/s/12gpVwXfQxfdkXub-IwhWFw?pwds325 提取码&#xff1a;s325 --来自百…

linux安装交叉编译环境

1、安装系统自带的交叉编译环境 sudo apt install gcc-arm-linux-gnueabihf sudo apt install g-arm-linux-gnueabihf 2、选择特定交叉编译器版本 版本路径&#xff1a;Linaro Releases 当前选择版本&#xff1a;4.9 、64位的版本

ArcGIS栅格影像数据处理

ArcGIS栅格影像数据处理 文章目录 ArcGIS栅格影像数据处理1. 栅格影像数据坐标系转换2. 栅格数据16bit转8bit3. 栅格数据波段变换参考链接 1. 栅格影像数据坐标系转换 点击【ArcToolbox】>【数据管理工具】>【投影和变换】>【栅格】>【投影栅格】。 2. 栅格数据16…

Jetpack compose——深入了解recomposition的工作原理

一、compose怎么 实现响应式编程的 Jetpack Compose 是 Android 的现代 UI 工具包&#xff0c;它使用 Kotlin 语言的声明式 UI 模式来简化 UI 开发。在这种模式中&#xff0c;你只需描述 UI 应该如何根据应用的状态进行显示&#xff0c;而 Compose 会在状态发生变化时自动更新…

【Linux】oh-my-zsh终端配置

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍oh-my-zsh终端配置。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&am…

Spring Boot发送QQ邮件

Spring Boot发送QQ邮件 1. 创建Spring Boot项目2. 引入发邮件的starter3. 必要配置4. 编写邮件内容5. 测试其他&#xff1a; Spring Boot简单引入一个包就能轻松发邮件&#xff0c;仅需5分钟就能实现 1. 创建Spring Boot项目 略 2. 引入发邮件的starter <dependency>&l…