鲲鹏开发重点-–扭转x86乾坤的挑战,ARM64内存模型

简介: 因为X86及其CISC架构生态的封闭性,中国市场对未来处理器的选择,将是更开放、更模块化的RISC架构。 鲲鹏处理器就是符合这个潮流的创新产品和生态,将直面一系列挑战,和Apple一样赢得这场挑战,来扭转X86的封闭性的乾坤,创造出中国的处理器新生态。

一、前言:扭转x86乾坤的挑战

1、ARM:超越x86二选一思维

2、Apple:推出惊人速度的ARM笔记本电脑

3、鲲鹏:扭转x86乾坤的挑战

二、指令乱序执行:独特架构的先进特性

1、体系结构决定内存模型:X86强内存序,ARM64是弱内存序

2、X86强内存序: 写后读乱,读后读/写后写/读后写不乱

3、ARM64弱内存序: 精简指令集把访存指令和运算指令分开了

三、并行流水:10000米高空的观察

1、ARM64:多个并行流水部件,支持超标量

2、流水第一二阶段:串并转化、保乱皆有序

3、避免事故最关键设计:不是完美匝道口,关键在于驾驶员

4、安全距离是多少?如何预判?如何正确操作?

5、观察者PE/DMA:作为存放数据的内存位置,内部关系复杂

6、低级语言、高级语言:合作、边界

四、ARMv8内存模型:全面的定义

1、基本定义:Locations, Memory effects, and Observers

2、位置(Location)

3、内存影响(Memory effect):读/写/屏蔽

5、观察者(Observer):PE(Processing element)、代理

6、普通共享域(Comman Shareability Domain)

五、ARM64创新:排序及其可观察性

1、依赖约束、排序约束、APP序:OS和芯片协调边界

2、依赖:划分界限,寄存器R,数值V和指令I

3、基于位置的顺序和可观察性

4、排序关系

六、ARM64可控规则:系统中观察者之间的交互

1、使用共享变量来通信

2、所有内存完成规则的定义

3、外设

七、附-参考资源:ARM® Architecture Reference Manual

ARM® Architecture Reference Manual

八、侧记:像鲲鹏,去展翅高飞,共赢计算新时代

鲲鹏开发重点-–扭转x86乾坤的挑战,ARM64内存模型
宏观鲲鹏 发表于 2021/05/20 11:48:15 4.9k+ 1 2
【摘要】 因为X86及其CISC架构生态的封闭性,中国市场对未来处理器的选择,将是更开放、更模块化的RISC架构。 鲲鹏处理器就是符合这个潮流的创新产品和生态,将直面一系列挑战,和Apple一样赢得这场挑战,来扭转X86的封闭性的乾坤,创造出中国的处理器新生态。 全新构建一个生态本身,不是一帆风顺的,再困难也要往前冲,即使高举着“补课”、”补洞”的大旗!
鲲鹏开发重点1–扭转x86乾坤的挑战,ARM64内存模型
(老古、大何)

一、前言:扭转x86乾坤的挑战

1、ARM:超越x86二选一思维

2、Apple:推出惊人速度的ARM笔记本电脑

3、鲲鹏:扭转x86乾坤的挑战

二、指令乱序执行:独特架构的先进特性

1、体系结构决定内存模型:X86强内存序,ARM64是弱内存序

2、X86强内存序: 写后读乱,读后读/写后写/读后写不乱

3、ARM64弱内存序: 精简指令集把访存指令和运算指令分开了

三、并行流水:10000米高空的观察

1、ARM64:多个并行流水部件,支持超标量

2、流水第一二阶段:串并转化、保乱皆有序

3、避免事故最关键设计:不是完美匝道口,关键在于驾驶员

4、安全距离是多少?如何预判?如何正确操作?

5、观察者PE/DMA:作为存放数据的内存位置,内部关系复杂

6、低级语言、高级语言:合作、边界

四、ARMv8内存模型:全面的定义

1、基本定义:Locations, Memory effects, and Observers

2、位置(Location)

3、内存影响(Memory effect):读/写/屏蔽

5、观察者(Observer):PE(Processing element)、代理

6、普通共享域(Comman Shareability Domain)

五、ARM64创新:排序及其可观察性

1、依赖约束、排序约束、APP序:OS和芯片协调边界

2、依赖:划分界限,寄存器R,数值V和指令I

3、基于位置的顺序和可观察性

4、排序关系

六、ARM64可控规则:系统中观察者之间的交互

1、使用共享变量来通信

2、所有内存完成规则的定义

3、外设

七、附-参考资源:ARM® Architecture Reference Manual

ARM® Architecture Reference Manual

八、侧记:像鲲鹏,去展翅高飞,共赢计算新时代

一、前言:扭转x86乾坤的挑战

1、ARM:超越x86二选一思维
ARM基础设施事业部高级副总裁兼总经理Chris Bergey称,ARM想改变行业对部署基础设施的思维,每一个创新者都不应该被要求在性能与能耗之间进行抉择,ARM平台提供了两者兼得的最佳解决方案。

法国芯片公司SiPearl和韩国电子通信研究所( ETRI)的高性能计算(SoC)均可展现这些设计元素的优势,这被ARM看作是高性能计算的发展方向

ARM系列芯片之一Neoverse N2在安全性、能耗以及性能方面都有全面提升,并能为用户减少TCO的每瓦性能表现。相比于Neoverse N1,N2在保持相同水平的功率和面积效率的基础上,单线程性能提升了40%。

ARM芯片具备良好的可扩展性,可以横跨从高吞吐量计算到功率与尺寸受限的边缘和5G应用场景,并在这些应用中带来优于Neoverse N1的表现。例如,在云端上提升1.3倍的NGINX,在5G边缘应用上提升1.2倍的DPDK数据包处理。

2、Apple:推出惊人速度的ARM笔记本电脑
今年还有一个里程碑式的事件,就是Apple以惊人的速度推出了基于ARM的笔记本电脑。Apple从来不是一个拘泥于现状的公司,在其历史上,就曾经在短时间内抛弃了摩托罗拉转向Intel。但当时的情况是Powerpc日渐式微,而Intel明显的处于快速上升期。如果告诉一个人说现在的iMac装不了Win10了,有很大一批人可能都会犹豫。因此Apple当下的选择好像是冒了很大的风险的。

Apple与之不同之处在哪里呢,是有自己独有的优势,就是软硬件一体的高度控制能力,这也是它敢于叫板Intel的底气。由于IOS在庞大的电脑市场占比较小,目前还不能对X86构成什么威胁。但这次改变却透露了X86未来可能的隐患,这就是基于Apple强有力的执行力和软硬件整合力的推动下,在Apple体系中成功建立起移动、桌面和云的一体化,从而证明了ARM架构在泛云支持上的可能性。

这个杀伤力就很大。

这表明现在桌面和移动的几乎所有应用都可以迁移到ARM上,同时对应的云端应用也可以用ARM支持,这样相当于直接切入了X86全部的生态圈。

3、鲲鹏:扭转x86乾坤的挑战
因为X86及其CISC架构生态的封闭性,中国市场对未来处理器的选择,将是更开放、更模块化的RISC架构。

鲲鹏处理器就是符合这个潮流的创新产品和生态,将直面一系列挑战,和Apple一样赢得这场挑战,来扭转X86的封闭性的乾坤,创造出中国的处理器新生态。

因为鲲鹏采用ARM64架构,其RISC架构和x86的CISC架构有很大的不同,原来在x86处理器上运行健壮的程序,在ARM64上不稳定,开发人员随口说,ARM64处理器有什么问题吗?这个帽子扣的有些大,后来发现是自己代码搞错了,有个代码分支没有加锁,这部分代码还是新写的,并没有在x86上运行多久,只是问题没有暴露而已。这是一个乌龙,让ARM64处理器背了锅。

其实,应用程序很少看到ARM64处理器的架构细节,也很少能碰到处理器的问题。中间隔着操作系统和编译器,处理器架构相关的工作都已经适配了,跨体系结构移植代码的难度也没有预想的那么大。不能因为对ARM64不了解,就谈虎色变,问题还是问题,还是需要从问题本身出发,从现象到本质。

鲲鹏处理器基于ARM64架构,追求极致能效比,与x86处理器相比的优势更在于多核和乱序执行,在处理程序并行上也会遇到一些挑战。

全新构建一个生态本身,不是一帆风顺的,鲲鹏产业必须举着”补洞”的大旗,再困难也要往前冲,有些困难的挑战却不仅仅是锦上添花的事情,在ARM64上干成了,就不怕和x86比了。

本文主要讲一讲扭转X86封闭性的乾坤重大挑战之一:ARM64的指令乱序。

二、指令乱序执行:独特架构的先进特性

ARM以及芯片架构师都有共识,ARM64就是这样的,是允许指令乱序执行的,这是出于性能的考虑,这是架构特性,不是漏洞。网传苹果最新的M1处理器的乱序窗口达到600条。

但是,指令乱序的影响却给系统可靠性带来了风险,驱动模块,基础软件和应用软件都要做排查、设计优化。所以,这是鲲鹏生态各产品线切换到ARM64平台上的软件也要谨慎面对。

1、体系结构决定内存模型:X86强内存序,ARM64是弱内存序

为什么会有指令乱序,这确实是体系结构的内存模型决定的,并不是有人在忽悠我们。

2、X86强内存序: 写后读乱,读后读/写后写/读后写不乱
X86是强内存序模型,复杂指令集允许其运算指令本身支持内存访问,并允许非依赖的写后读指令乱序,其它非依赖的读后读,写后写,和读后写的指令都不会发生乱序。

3、ARM64弱内存序: 精简指令集把访存指令和运算指令分开了
ARM64是弱内存序模型,因为精简指令集把访存指令和运算指令分开了,为了性能,必须允许几乎所有的指令乱序,但前提是必须遵守依赖约束和排序约束,不影响程序的逻辑和正确性。

所以,ARM64上没有依赖关系的读后读,写后写,读后写,和写后读都是可以乱序执行的。

这听起来很匪夷所思,那程序代码还能保证正确吗? 搞不定的问题都可以扣上CPU乱序的帽子吗?

这其实呢,在指令乱序前还得知道编译乱序,ARM64处理器并不是直接面对程序代码的,而是面对机器代码,或者说汇编指令。

由高级语言编写的程序,如C语言,首先通过编译器的编译转换为汇编指令,编译器会根据ARM64处理器的流水线特点,合理安排汇编指令的顺序,目的是最大限度的发挥CPU流水的并行能力。这也没有什么可怕的,编译器一定会在保证程序正确性的情况下,合理调整汇编指令的顺序。

image.png

特别的,在源代码中内联汇编指令时,这个外部额外插入的汇编指令,要告诉编译器不要优化指令顺序,需要使用“__asm__ __volatile__("": : :"memory") ”的编译提示。编译阶段的乱序不是我们关注的重点,而且这部分极少出错。我们仍然回到CPU的指令乱序特性上来。

三、并行流水:10000米高空的观察

生活中,特别是高速路的道路设计和CPU的流水设计有一点相似之处。高速路设计了并行的行车道和超车道,是允许超车的,这样可以保证高速路的高效通行和最大车流量。

经常开车的同学,肯定会为高速路上在行车道或者超车道上龟速行车的小汽车大为光火,也许你超车时还不忘瞟一眼,确认一下是不是女司机,其实多数是新手男司机才这么霸道。

1、ARM64:多个并行流水部件,支持超标量
ARM64设计了多个并行的流水部件,支持超标量,可以一个指令周期分发多条指令,实现最大程度的指令并行。

2、流水第一二阶段:串并转化、保乱皆有序
流水的第一阶段包括指令提取,译码和分发,这部分是保序的;

一旦到流水的第二阶段,执行指令流“串并转化”后,指令一旦分发到不同的并行流水部件中,它们的执行顺序就是乱序的了。有依赖的指令会放到同一个流水部件,先进先出方式排队,防止乱序执行。

关于流水线的设计是如何保证指令并行的正确性,详细的微架构分析,cache一致性原理等以后解释,此处直接跳过。

image.png

高速匝道口事故:A变道是否影响B正常行驶

高速路上经常发生事故的地方是匝道口。当左侧超车道上的车辆A往右侧匝道横向慢速变道,往往导致后方行车道上正常行驶的车辆B刹车不及,导致追尾碰撞。当然,如果此段高速路上只有车辆A,或者后面的车B根本看不到踪影,或者车辆A占用的车道和车辆B行驶的道路不相关,那么车辆A怎么慢吞吞的变道都没有关系。所以,发生事故的条件之一就是车辆A的变道是否影响到车辆B正常行驶。

image.png

相关文章
|
2月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
224 3
|
2月前
|
机器学习/深度学习 算法 数据库
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
在我们选择阿里云服务器的架构时,选择合适的云服务器架构对于提升业务效率、保障业务稳定至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供参考和选择。
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
|
1月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
1月前
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
|
2月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
|
2月前
|
Swift iOS开发
iOS开发-属性的内存管理
【8月更文挑战第12天】在iOS开发中,属性的内存管理至关重要,直接影响应用性能与稳定性。主要策略包括:`strong`(强引用),不维持对象生命期,可用于解除循环引用;`assign`(赋值),适用于基本数据类型及非指针对象属性;`copy`,复制对象而非引用,确保对象不变性。iOS采用引用计数管理内存,ARC(自动引用计数)自动处理引用增减,简化开发。为避免循环引用,可利用弱引用或Swift中的`[weak self]`。最佳实践包括:选择恰当的内存管理策略、减少不必要的强引用、及时释放不再使用的对象、注意block内存管理,并使用Xcode工具进行内存分析。
|
3月前
|
Java 运维
开发与运维内存问题之文件句柄泄漏如何解决
开发与运维内存问题之文件句柄泄漏如何解决
50 3
|
3月前
|
缓存 Java Linux
开发与运维内存问题之线上遇到故障,使用jstat命令发现Old区持续增长如何解决
开发与运维内存问题之线上遇到故障,使用jstat命令发现Old区持续增长如何解决
38 2
|
3月前
|
NoSQL Redis C++
c++开发redis module问题之在复杂的Redis模块中,特别是使用第三方库或C++开发时,接管内存统计有哪些困难
c++开发redis module问题之在复杂的Redis模块中,特别是使用第三方库或C++开发时,接管内存统计有哪些困难
|
3月前
|
Java 运维
开发与运维内存问题之在堆内存中新创建的对象通常首先分配如何解决
开发与运维内存问题之在堆内存中新创建的对象通常首先分配如何解决
19 1
下一篇
无影云桌面