指令集
微处理器的指令集架构ISA(Instruction Set Architecture)常见种类如下:
RISC
Reduced Instruction Set Computing (RISC) 精简指令集,比如ARM,MIPS,RISC-V,Power PC等。是一种执行较少类型计算机指令的微处理器,起源于80年代的 MIPS 主机。RISC的设计初衷针对CISC CPU复杂的弊端,选择一些可以在单个CPU周期完成的指令,以降低CPU的复杂度,将复杂性交给编译器。RISC具有设计更简单、设计周期更短等优点,能够以更快的速度执行操作。精简指令集这种设计思路对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。
CISC
Complex Instruction Set Computing (CISC) 复杂指令集,比如Intel的X86等。是一种微处理器指令集架构,每个指令可执行若干低阶操作,诸如从内存读取、储存、和计算操作,全部集于单一指令之中。CISC 体系结构的设计策略是使用大量的指令,包括复杂指令。与其他设计相比,在CISC中进行程序设计要比在其他设计中容易,因为每一项简单或复杂的任务都有一条对应的指令。程序设计者不需要写一大堆指令去完成一项复杂的任务。 但指令集的复杂性使得CPU和控制单元的电路非常复杂。在CISC指令集的各种指令中,约有 20% 的指令会被反复使用,占整个程序代码的 80%,而余下的 80% 指令却不经常使用,在程序设计中只占 20%。
VLIW&EPIC
VLIW是英文”Very Long Instruction Word”的缩写,中文意思是”超长指令集架构”,它是一种非常长的指令组合,把许多条指令连在一起,实现指令级并行,提高了运算的速度。HP与Intel合作开发的安腾系列服务器处理器IA-64。
常用架构
CISC Intel-X86
为了高性能而设计。Intel 开发制造的一种微处理器体系结构的泛称,X86 架构是可变指令长度的 CISC。从8086到奔腾4,都是x86架构。AMD的K5到阿斯龙也是一样。不过x86_64其实是AMD提出来的,所以也叫amd64,目前应用广泛。Intel对应的64位是IA64(EPIC),没有民用。Intel-X86架构由于性能表现,在PC和服务器市场占据主导地位。
RISC ARM
为功耗而设计,过去称作进阶精简指令集机器 Advanced RISC Machine,更早称作 Acorn RISC Machine,是32位 RISC 处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM处理器非常适用于行动通讯领域,符合其主要设计目标为低耗电的特性。在智能机手机芯片领域占用垄断地位。ARM处理器可以在很多消费性电子产品上看到,从可携式装置(PDA、移动电话、多媒体播放器、掌上型电子游戏,和计算机)到电脑外设(硬盘、桌上型路由器)甚至在导弹的弹载计算机等军用设施中都有他的存在。华为在贸易战中被美国打压,禁止授权使用ARM架构,华为后续会把开源的RISC-V架构作为备选方案。
RISC MIPS
MIPS很学术很精美很帅,是一个学院派的cpu,授权门槛极低,因此很多厂家都做mips或者mips衍生架构。我们平时接触到的mips架构cpu主要用在嵌入式领域,比如路由器。
RISC RISC-V
RISC-V是加州大学伯克利分校的开源指令集,由计算机体系架构的宗师级人物David Patterson领衔打造,通过将核心指令集以及其他关键IP开源,意图大大改变半导体的设计生态。随着西部数据、Nvidia等业界巨头以及大量初创公司宣布开始使用RISC-V,ARM想必也感到了压力。将来在物联网领域,凭借免费授权的优势,很可能跟ARM一较高下。
RISC Power PC
Power早期的技术路线,大致上是三条:IBM自家的亲儿子,高端的服务器工作站市场的POWERn,这个一直延续到今天。在Power家族中算低端,在桌面市场算高端的PowerPC Gn,Motorola生产,只有苹果使用。其它杂七杂八的专用CPU,例如游戏主机,各种嵌入式系统的。
RISC Alpha
Alpha处理器最早由DEC公司设计制造。1998年,随着DEC被一起卖给康柏(Compaq)。2001年,被康柏卖给Intel。同年,惠普收购康柏,继续开发基于Alpha处理器的产品到2004年,Alpha后来卖给了中国。神威蓝光超级计算机CPU全部采用中国购买许可后自主设计生产的CPU,即申威3代”申威1600″处理器,该处理器是16核64位处理器,每个核心都是DEC Alpha处理器的现代化增强版,以最高频率1.1GHz运行时,16个核总共提供最大141GFlops的双精度浮点处理能力。这使中国成为继美国和日本之后世界上第三个独立研发千万亿次超级计算机的国家。
架构及其所属公司
公司 | 架构 |
---|---|
Intel | X86/IA64 |
AMD | AMD64(X86_64) |
ARM | ARM |
Imagination | MIPS |
加州大学伯克利分校 | RISC-V(开源) |
IBM | PowerPC/OpenPower(开源) |
江南计算所 | Alpha |
对软件编程的影响
字节序
又称主机字节序,主机序包括大端和小端模式,网络序是大端的,需要hston() ntohs()帮我们完成主机序和网络序之间的切换,否则顺序会乱。
* x86、MOS Technology 6502、Z80、VAX、PDP-11等处理器为小端序;
* Motorola 6800、Motorola 68000、PowerPC 970、System/370、SPARC(除V9外)等处理器为大端序;
* ARM、PowerPC(除PowerPC 970外)、DEC Alpha、SPARC V9、MIPS、PA-RISC及IA64的字节序是可配置的。
PS:现在主流的intel, amd, arm手机芯片,基本都是小端序
结构对齐
RISC指令集处理器(MIPS/ARM)
这种处理器的设计以效率为先,要求所访问的多字节数据(short/int/ long)的地址必须是为此数据大小的倍数,如short数据地址应为2的倍数,long数据地址应为4的倍数,也就是说是对齐的。
CISC指令集处理器(X86)
没有上述限制。
对齐处理策略
访问非对齐多字节数据时(pack数据),编译器会将指令拆成多条(因为非对齐多字节数据可能跨越地址对齐边界),保证每条指令都从正确的起始地址上获取数据,但也因此效率比较低。
访问对齐数据时则只用一条指令获取数据,因此对齐数据必须确保其起始地址是在对齐边界上。如果不是在对齐的边界,对X86 CPU是安全的,但对MIPS/ARM这种RISC CPU会出现“总线访问异常”。
* 为什么X86是安全的呢?
X86 CPU是如何进行数据对齐的。X86 CPU的EFLAGS寄存器中包含一个特殊的位标志,称为AC(对齐检查的英文缩写)标志。按照默认设置,当CPU首次加电时,该标志被设置为0。当该标志是0时,CPU能够自动执行它应该执行的操作,以便成功地访问未对齐的数据值。然而,如果该标志被设置为1,每当系统试图访问未对齐的数据时,CPU就会发出一个INT 17H中断。X86的Windows 2000和Windows 98版本从来不改变这个CPU标志位。因此,当应用程序在X86处理器上运行时,你根本看不到应用程序中出现数据未对齐的异常条件。
* 为什么MIPS/ARM不安全呢?
因为MIPS/ARM CPU不能自动处理对未对齐数据的访问。当未对齐的数据访问发生时,CPU就会将这一情况通知操作系统。这时,操作系统将会确定它是否应该引发一个数据未对齐异常条件,对vxworks是会触发这个异常的。
位数
64位和32位,对代码的其中一个影响就是数据类型的字节数,比如golang int类型的大小,32位下是4字节,64位下是8个字节; C语言指针,32位下是4个字节,64位下是8个字节。编程的时候需要注意。
核数
对于计算密集型的任务,一般建议将线程数设置为物理核数。
伪共享
伪共享的非标准定义为:缓存系统中是以缓存行(cache line)为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。
伪共享具体介绍详见博文
Reference
- https://zhuanlan.zhihu.com/p/46170108
- https://www.zhihu.com/question/26994793
- https://www.zhihu.com/question/63627218
- https://www.cnblogs.com/clover-toeic/p/3853132.html
- https://gameinstitute.qq.com/community/detail/114013
- https://software.intel.com/zh-cn/articles/Understanding-x86-vs-ARM-Memory-Alignment-on-Android
- https://www.cnblogs.com/cyfonly/p/5800758.html
Be First to Comment