【CPU】关于x86、x86_64x64、amd64和arm64aarch64为什么叫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有时会简称为“x64”,是64位微处理器架构及其相应指令集的⼀种,
“x86-64”1999由AMD设计,AMD ⾸次公开 64 位集以扩充给 IA-32,称为 x86-64(后来改名为 AMD64)。 AMD64架构在IA-32上新增了64位寄存器,并兼容早期的16位和32位软件,可使现有以x86为对象的编译器容易转为AMD64版本。
AMD 由于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。
mysql下载选x86还是arm再说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。
AR M,AMD,X86,AArc h64的概念
86,AAr c
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 指令集⼀致。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论