接网站开发的公司,工程项目管理软件排名,android应用程序开发教程,云虚拟主机发布wordpress鲲鹏处理器 一、处理器概述1.Soc2.Chip3.DIE4.Cluster5.Core 二、体系架构1.计算子系统2.存储子系统3.其他子系统 三、CPU编程模型1.中断与异常2.异常级别a.基本概念b.异常级别切换 下面为整理的内容#xff1a;鲲鹏处理器 架构与编程#xff08;一#xff09;处理器与服务器… 鲲鹏处理器 一、处理器概述1.Soc2.Chip3.DIE4.Cluster5.Core 二、体系架构1.计算子系统2.存储子系统3.其他子系统 三、CPU编程模型1.中断与异常2.异常级别a.基本概念b.异常级别切换 下面为整理的内容鲲鹏处理器 架构与编程一处理器与服务器总目录 一、服务器与处理器1 服务器分类2服务器处理器高性能处理器并行组织结构为了提供更强的计算能力。1.指令流水线2.多处理器系统、多计算机系统3.多线程处理器 并行概念从指令级并行拓展至线程级并行Thread-Level-Parallelism,快速进行线程级切换减少垂直浪费。1.2.1高性能处理器的并行组织结构指令流水线:多处理器系统和多计算机系统:多线程处理器多核处理器片上多处理器同异构多核处理器 1.2.2英特尔处理器体系结构英特尔处理器发展 1.2.3 ARM处理器体系结构ARM处理器分类1ARM经典处理器2ARM Cortex应用处理器 3ARM Cortex嵌入式处理器4ARM 专业处理器 1.3 服务器技术基础1.3.1 高性能处理器的存储器组织与片上互联1. 多核系统的存储结构多核处理器的Cache一致性UMA 架构 和 NUMA 架构多核处理器的核间通信机制1. 总线共享Cache结构2.交叉开关互联结构3. 片上网络结构 内存顺序模型与内存屏障一、 访存重排序1. 指令重排序三种类型2. 三种不同的存储器访问顺序二、 内存一致性模型1. 软件内存模型2. 硬件内存模型a.强一致性内存模型b.弱一致性内存模型A. 顺序一致性内存模型B. 全存储排序内存模型C. 部分存储排序内存模型D. 宽松内存顺序内存模型 三、 内存屏障指令1. 输入输出控制指令eieio2. 同步指令sync3. 同步指令isync 读过我之前的笔记的朋友一定知道我是写过一个关于鲲鹏处理器的专栏的
鲲鹏处理器 架构与编程质量分平均96也是我自己开始写博客的地方在写
DP读书 笔记时我也搞懂了很多从前一知半解的原理。 那我开始了
一、处理器概述
1.Soc 从狭义角度讲Soc是信息系统核心的芯片集成是将系统关键部件集成在一块芯片上从广义角度讲Soc是一个微小型系统如果说中央处理器(CPU)是大脑那么Soc就是包括大脑、心脏、眼睛和手的系统。 国内外学术界一般倾向将Soc定义为将微处理器、模拟IP核、数字IP核和存储器(或片外存储控制接口)集成在单一芯片上它通常是客户定制的或是面向特定用途的标准产品。 2.Chip 芯片chip就是半导体元件产品的统称。是集成电路IC, integrated circuit的载体由晶圆分割而成。硅片是一块很小的硅内含集成电路它是电脑或者其他电子设备的一部分。IC就是集成电路泛指所有的电子元器件是在硅板上集合多种电子元器件实现某种特定功能的电路模块。它是电子设备中最重要的部分承担着运算和存储的功能。集成电路的应用范围覆盖了军工、民用几乎所有的电子设备。 3.DIE DIE是芯片的最小物理单元是指以半导体材料制作而成未经封装的一小块集成电路本体该集成电路的既定功能就是在这一小片半导体上实现。通常情况下集成电路是以大批方式经光刻等多项步骤制作在大片的半导体晶圆上然后再分割成方型小片这一小片就称为晶粒每个晶粒就是一个集成电路的复制品。 4.Cluster 集群Cluster是一种较新的技术通过集群技术可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益其任务调度则是集群系统中的核心技术。具体来说集群是一组相互独立的、通过高速网络互联的计算机它们构成了一个组并以单一系统的模式加以管理。一个客户与集群相互作用时集群像是一个独立的服务器。这项技术主要用于提高系统的可用性和可缩放性。 5.Core 在计算机领域里Core一般用来指代“中央处理器”Central Processing Unit也就是常说的CPU。因为CPU可以看做是整个计算机系统的核心它承担着处理数据、控制运行、存储加载等基本任务相当于电脑的大脑。 二、体系架构
1.计算子系统
计算机中进行数据运算的子系统是CPU也就是中央处理器。中央处理器central processing unit简称CPU作为计算机系统的运算和控制核心是信息处理、程序运行的最终执行单元。CPU自产生以来在逻辑结构、运行效率以及功能外延上取得了巨大发展。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令对指令译码并执行指令的核心部件。
2.存储子系统
计算机的存储子系统由主存内存、辅存外存和高速缓冲存储器Cache组成。
1. 主存内存CPU可直接编程访问存放CPU当前执行所需要的指令和数据。特点是能随机访问、存取速率快、具有一定的存储容量受地址位数制约。
2. 辅存外存存放大量的后备程序和数据。特点是速度较慢、容量大。
3. 高速缓冲存储器(Cache)存放CPU在当前一小段时间内多次使用的程序和数据以缓解CPU和主存的速度差异。特点是速度很快、容量小。此外物理存储器与虚拟存储器也是存储子系统的重要组成部分
1. 物理存储器物理形态上真实存在的存储器简称为实存其地址称为物理地址或实地址。
2. 虚拟存储器虚拟存储器是一个逻辑模型并非物理存在基于物理存储器并靠硬件操作系统的映射来实现。存储子系统是计算机的重要组成部分负责存储和管理计算机中的数据和程序对计算机的性能和可靠性有着至关重要的影响。
3.其他子系统
除了计算子系统和存储子系统计算机还有其他一些重要的子系统例如
1. 输入/输出I/O子系统负责计算机与外部设备之间的通信和数据传输包括键盘、鼠标、显示器、打印机等。
2. 网络子系统负责计算机与其他计算机或网络之间的通信和数据传输包括网卡、路由器、交换机等。
3. 操作系统子系统负责管理计算机的硬件和软件资源提供各种服务包括进程管理、内存管理、文件系统、设备驱动等。
4. 安全子系统负责保护计算机系统和数据的安全包括防火墙、杀毒软件、加密技术等。
5. 应用软件子系统负责提供各种应用程序和服务满足用户的不同需求包括办公软件、图像处理软件、游戏等。这些子系统协同工作使计算机成为一个完整的系统满足用户的不同需求。
三、CPU编程模型
1.中断与异常
中断和异常是计算机系统中的两个重要概念它们都是指系统、处理器在执行指令过程中突然被别的请求打断而终止当前的程序转而去处理其他程序。待该中断处理程序处理完后回到该程序中断点继续执行之前程序。
异常表示CPU执行指令时本身出现了问题如算数溢出除零或执行了陷入指令等。而中断则是CPU对系统发生的某个事件作出的一种反应事件的发生改变了CPU的控制流。两者的区别在于异常是由CPU执行指令时出现的问题引起的而中断是由外部事件引起的。为了支持CPU和设备之间的并行操作现代操作系统引入了中断异常机制。当设备完成输入输出向CPU发送中断报告结果时CPU会暂停正在执行的程序保留现场后自动转去执行相应事件的处理程序处理完成后返回断点继续执行被打断的程序。中断异常机制是现代操作系统的核心机制硬件和软件相互配合而使计算机系统充分发挥能力。硬件负责中断异常响应捕获中断请求将处理器控制权交给特定的处理程序软件则负责中断异常处理程序识别类型并完成相应处理。
总的来说中断和异常是计算机系统中非常重要的机制它们使得计算机能够应对各种事件和错误保证了系统的正常运行。
2.异常级别
异常级别是指计算机系统在处理异常时所采取的不同级别的响应和处理方式。
不同异常级别下处理器能够访问的资源也不同。在PE处理器在某个异常级别执行的时候PE能够访问下面的资源可用于当前异常级别和当前安全状态的资源集在当前的安全状态下所有较低的异常级别上可用的资源。
a.基本概念
异常级别决定了系统在处理异常时的响应和处理方式保证系统的正常运行。
异常级别的切换只能发生在触发了异常或者异常处理返回过程中。当发生异常时异常级别要不增加要不保持不变当从异常处理返回时异常级别只能减小或者保持不变。每个异常级别都有一个明确的目标异常级别这个目标异常级别要么是默认定义的要么是通过系统寄存器的相应bit定义的。 在ARMv8-A系列架构中异常级别分为EL0到EL3四个级别其中EL0是无特权执行级别EL1是操作系统内核执行级别EL2提供了对虚拟化的支持EL3提供了安全状态切换功能。随着异常级别的增加软件的执行权限也相应的增加。 异常级别的切换是计算机系统中非常重要的机制它使得系统能够在不同的异常级别之间切换以应对不同的事件和错误。在ARMv8-A系列架构中异常级别的切换只能发生在触发了异常或者异常处理返回过程中。
b.异常级别切换
当发生异常时异常级别要不增加要不保持不变。例如当处理器在执行EL0级别的程序时发生异常那么处理器的异常级别可能会升级到EL1或者更高的级别这取决于异常的类型和处理程序的需求。当异常处理程序处理完异常后返回时处理器的异常级别会降低到原来的级别或者更低的级别。 异常级别的切换是由系统中的硬件和软件共同完成的。硬件负责捕获异常请求将处理器控制权交给相应的处理程序。软件则负责编写异常处理程序识别异常类型并完成相应的处理。在异常处理程序执行完成后处理器会返回到原来的程序执行点继续执行被打断的程序。 在异常级别切换过程中处理器会保存当前的程序状态和执行上下文以便在返回到原来的程序执行点时能够恢复执行。同时处理器也会根据异常类型和目标异常级别来设置相应的寄存器和状态以确保在新的异常级别下能够正确地执行程序。 异常级别的切换是计算机系统中非常重要的机制它使得系统能够在不同的异常级别之间切换以应对不同的事件和错误保证了系统的正常运行。 ########################################
下面为整理的内容
鲲鹏处理器 架构与编程一处理器与服务器
未来的世界将是一个 端-云-端 的世界 人机物融合通过对云侧的极限计算边缘侧的专业计算端侧的个性计算——未来计算机体系的构成。 x86个人向 ARM移动计算服务器AND物联网 RISC-V万物互联
鲲鹏系列处理器ARM生态
本文基于学习ARM架构帮助理解高性能服务器处理器。鲲鹏芯片海思自研芯片的总称含有鲲鹏处理器、昇腾Ascend、人工智能AI、SSD控制芯片、智能融合网络、智能管理芯片。
鲲鹏920完全兼容64位的ARMv8-A环境完全兼容所有的ARM环境提供一种华为创新解决方案。
对于鲲鹏处理器其不仅满足个人服务器的处理条件还更多的应用在服务器系统的搭建运行上。总目录
这本书主要有四部分
1.高性能处理器的并行架构以及服务器体系结构技术路径
2.ARMv8-A处理器架构逻辑
3.基于鲲鹏920片上系统的Taishan服务器优势
4.鲲鹏软件生态架构 应用、调优工程师应该关注
附录鲲鹏处理器、鲲鹏开发者套件、鲲鹏社区、鲲鹏开发者认证计划
一、服务器与处理器
1 服务器分类
体系结构技术基础Sever服务器是一种同时网络数据节点与枢纽为主对于服务器功能与性能PC个人电脑与PC同属于计算机。
SMP对称多处理器Symmetric multi-ProceserRAID独立磁盘冗余阵列Rradudent Arrays of Independent Disks冗余备份技术热插拔远程监测技术。
应用层级服务器大致分级以数量规模作区分
入门、工作组50-、部门级、企业级
机械结构TS塔式台式[入门工作组级]、RS机架机柜[宽19英寸1、2、4、8U单位1U1.75英寸]、BS刀片[共享高速总线发热能耗低] 使用用途业务服务器、存储服务器、其他专用服务器
人工智能架构支持异构架构大量GPUGraphics Processing Unit图形处理器或FPGAField Programmable Gate Array,现场可编程门阵列实现CPU加速。
处理器架构处理器分类——CISCComplex Instruction Set Computer,复杂指令集计算机和RISCReduced Instruction Set Computer精简指令计算机 架构分类——CISC、RISC、EPIC一种特殊的RISC CISC架构服务器Intel的Intel 64架构AMD的AMD64和早期的IA-32 Intel的Keon、AMD的Opteron和EPYC RISC架构服务器非INTEL架构服务器 IBM的Power,HP的Alpha和PA-RISC、SUN/Oracle的SPARC 、MIPS的NIPS :RISC架构服务器 不同于 体系结构的RISC处理器价格昂贵、体系封闭Unix和专用系统为主稳定性能强 Power架构Apple、IBM、摩托罗拉共同开发的微处理器架构PowerPerformance Optimized With Enhanced RISC性能强大价格高昂硬件采用SMP对称多处理器国内IPS负责运营。 SPARC早期由SUN开发、目前由Oracle甲骨文运营的处理器架构SPARCScalable Processor ARChitecture可拓展处理器架构 … EPIC架构服务器显示并行指令计算Explicitly Prallel Instruction ComputingIA-64的Itanium处理器由HP和Intel开发 免去了在RISC中设计复杂的并行调度电路直接应用现代编译程序进行过程性调度。 VLIWVery Long Insstruction Word 超长指令字技术提高并行性128位指令束3*415但将于2025停产
服务器测试基准TPC、SPEC RASUM–主板 控制管理IPMI规范IPMIIntelligent Platform Management Interface智能平台管理接口应用BMC芯片与BIOS交互规范描述了主板管理控制 BMC监视系统状态多接口上层网管查询 查找Ctrl/Command F 替换Ctrl/Command G
2服务器处理器
高性能处理器并行组织结构为了提供更强的计算能力。
但是由于物理规律对半导体器件的限制传统的单处理器系统通过提高主频提升性能的方法收到制约不可能任沿摩尔定律预测的轨迹持续上升且随着晶体管越来越小芯片内部的互连线延时影响越来越大高频率不仅使能源消耗剧增而且没有良好的散热对系统的稳定性造成剧烈影响。
并行式成为了在这种情况下更好的解决方案成为目前能够提高系统效率的最佳方案。
1.指令流水线
执行程序的角度并行等级可分为多级一条指令执行的微操作之间的并行是指令内部的并行并行执行两条或多条指令也即指令级并行Instruction-Level Parallelism,ILP 执行两个或两个以上任务程序段属于任务级并行最高层次或作业级并行则是指2作业或程序
对于单个处理器时间并行技术主要体现在指令流水线。 常见的高性能处理器无一不采用指令处理器多发射处理器将空间并行性引入了处理器。
超标量Superscalar采用多发射技术处理器内部采用多条并行执行的指令流水线通过时钟周期内向执行单元发射多条指令实现指令级并行。2.多处理器系统、多计算机系统
Multi-processor多处理器系统 常见的有集群Cluster也称机群集群中每台计算机一般成为节点反应物理连接的紧密程度和交互能力的大小分为紧耦合系统直接耦合 系统[总线、高速开关相连]与 松耦合系统间接耦合系统[通道通信线路相连] 3.多线程处理器
除了传统的指令级并行技术多线程技术与多核技术也能提高芯片处理能力的片内并行技术。.
//当处理器访问Cache高速缓冲存储器缺失Miss不命中则必须访问主存这会导致执行部件长时间等待直到Cache成功加载。
var 解决该问题的方法是片上多线程技术On-chip Multi-threading技术。 处理器中引入硬件多线程Hardware Multi-threading的概念原理相似。;并行概念从指令级并行拓展至线程级并行Thread-Level-Parallelism,快速进行线程级切换减少垂直浪费。
同时多线程Simultaneous Multi-Threading,SMT,减少水平以及垂直浪费。一个时钟周期内不同线程的多条指令。E.g.:Intel的超线程。一个简单的表格是这么创建的
项目E.g.指令级并行超标量Superscalar多处理器系统、多计算机系统集群Cluster也称机群集群中每台计算机一般成为节点多线程处理器$ 并行概念从指令级并行拓展至线程级并行Thread-Level-Parallelism
1.2.1高性能处理器的并行组织结构
并行机制Value指令流水线指令级并行多处理器系统和多计算机系统直间接耦合系统多线程处理器线程级并行多核处理器片上多处理器众核MC处理器同异构多核处理器GPU和CPU集成多核处理器的对称性非对称多处理
指令流水线: 指令流水线是为提高处理器执行指令的效率把一条指令的操作分成多个细小的步骤每个步骤由专门的电路完成的方式。这种方式允许处理器在执行完一条指令的一个步骤后就可以立即开始执行下一条指令的一个步骤而不是等待整个指令完全执行完毕。这种方式可以显著提高处理器的效率因为处理器可以在多个步骤同时进行操作。指令流水线可以分为三类简单指令流水线、复杂指令流水线和超长指令字VLIW指令流水线。简单指令流水线只包含一个操作步骤例如加法操作。复杂指令流水线包含多个操作步骤例如乘法操作需要多个时钟周期才能完成。超长指令字指令流水线将多个简单操作组合成一条长指令可以同时执行多个操作从而提高处理器的效率。多处理器系统和多计算机系统:
多处理器系统和多计算机系统是两种不同的计算机系统。
多处理器系统是指一个计算机系统中包含两台或多台功能相近的处理器这些处理器可以相互协作完成任务并且共享内存、I/O设备、控制器和外部设备。多处理器系统的优点是可以提高系统的处理能力和性能缺点是系统的设计和实现比较复杂。
多计算机系统是指一个计算机系统由多台计算机组成这些计算机之间通过网络相互连接可以相互协作完成任务。多计算机系统的优点是可以提高系统的可靠性和可扩展性缺点是系统的设计和实现比较复杂。多线程处理器
多线程处理器是一种处理器它能够同时执行多个线程以提高处理器的利用率和效率。多线程处理器通过复制处理器上的结构状态让多个线程同步执行并共享处理器的执行资源从而实现宽发射、乱序的超标量处理提高处理器运算部件的利用率缓存和由于数据相关或Cache未命中带来的访问内存延时。
多线程处理器主要分为两种类型SMT和MIMD。SMTSimultaneous Multi-Threading是一种共享处理器时间的技术它允许多个线程同时在一个处理器上执行。MIMDMultiple Instruction Multiple Data是一种并行计算模型它允许多个处理器同时执行多个指令和数据。
多线程处理器广泛应用于各种领域例如计算机科学、人工智能、大数据处理等。它能够提高处理器的性能和效率降低能耗和成本为计算机系统的设计和实现提供了更好的解决方案。多核处理器片上多处理器
多核处理器是一种具有多个处理核心的处理器这些核心集成在同一块芯片上相互之间通过内部总线进行通信。多核处理器的主要目的是通过并行执行多个线程来提高处理器的整体性能解决单核处理器中存在的能效问题。多核处理器采用了多种技术来实现并行处理例如多线程技术、超线程技术、Cache技术等。这些技术能够有效地提高处理器的利用率和效率降低能耗和成本。
多核处理器广泛应用于各种领域例如计算机科学、人工智能、大数据处理等。它能够提高处理器的性能和效率降低能耗和成本为计算机系统的设计和实现提供了更好的解决方案。同异构多核处理器
同异构多核处理器一种具有多个处理核心的处理器这些核心可以相同也可以不同。同构多核处理器中的核心具有相同的架构和功能而异构多核处理器中的核心则具有不同的架构和功能。同构多核处理器通常由多个相同的处理核心组成每个核心都可以独立运行类似于单核处理器。这种多核处理器适用于通用计算任务可以并行执行多个线程从而提高处理器的整体性能。异构多核处理器则是由不同的处理核心组成每个核心针对不同的需求进行设计例如通用处理器、DSP、FPGA、媒体处理器、网络处理器等。
这种多构处理器适用于特定领域的计算任务可以进一步提高应用的计算性能或实时性能。从软件角度来看多核处理器的运行模式包括SMP对称多处理、AMP非对称多进程和BMP同构多线程等。其中SMP是最常用的运行模式每个核心平等地运行不同的任务AMP则是指不同核心运行不同版本的操作系统或裸机程序BMP则适用于同构多核处理器每个核心运行相同的程序但执行不同的任务。总之同异构多核处理器通过将多个处理核心集成在同一块芯片上实现了并行处理和高效计算适用于各种领域的高性能计算需求。多核处理器的对称性
多核处理器的对称性指的是多个核心之间的平等关系即它们在处理任务时具有相同的优先级和资源访问权限。对称多核处理器SMP是一种常见的多核处理器其核心数量从两个到多个不等。在SMP中所有的核心都平等地共享处理器的资源包括内存、I/O设备和其他核心。因此在操作系统中每个核心都被视为一个独立的处理器可以同时执行多个线程。
在非对称多进程AMP中不同核心运行不同版本的操作系统或裸机程序它们之间没有对称性。而在同构多线程BMP中虽然多个核心共享相同的程序但它们执行不同的任务因此也没有对称性。对称性的优点是可以提高处理器的利用率和效率充分发挥多个核心的优势。但是对称性的实现也需要付出额外的代价例如核心之间的通信和同步问题以及调度和负载均衡等问题。因此在实际应用中需要根据具体的需求和场景来选择是否采用对称性的多核处理器。1.2.2英特尔处理器体系结构
处理器架构IA-32指令级并行安腾架构与Intel 64架构直间接耦合系统多线程处理器线程级并行多核处理器片上多处理器众核MC处理器同异构多核处理器GPU和CPU集成多核处理器的对称性非对称多处理
英特尔处理器发展
IA-32——最常见应用最广 IA-32是Intel Architecture 32-bit的缩写即英特尔32位体系架构。它是在英特尔公司1985年推出的80386微处理器中首先采用的。IA-32是一种32位微处理器指令集架构它支持32位内存地址和32位指令集适用于支持英特尔架构的处理器。 安腾架构与Intel64架构——安腾已然EOL 安腾架构和Intel64架构是两个不同的计算机体系结构其主要区别在于指令集和使用场景。 安腾架构是64位指令集由英特尔公司和惠普公司共同开发适用于惠普公司的Itanium系列处理器。它主要用于高端服务器和工作站强调处理大量的数据和提供高效的数据处理能力。 Intel64架构是32位和64位指令集的统称包括EM64TExtended Memory 64 Technology扩展64位内存技术。它适用于英特尔公司的x86-64和AMD公司的AMD64系列处理器广泛用于个人计算机、游戏机和一些专业应用领域。 Intel至强系列服务器处理器-UPI Intel至强系列服务器处理器是英特尔公司为服务器市场开发的一系列处理器。至强系列处理器采用了多种不同的架构和技术以满足不同类型服务器和工作负载的需求。以下是一些常见的Intel至强系列服务器处理器及其特点 Intel Xeon Gold这是至强系列的高端产品主攻高性能计算、虚拟化和数据库等领域。Gold系列处理器采用了先进的制程技术拥有高主频和大缓存以及更多的核心和线程。Intel Xeon Platinum这是至强系列的旗舰产品主要应用于高性能计算、云计算和数据中心等领域。Platinum系列处理器同样具备高主频、大缓存和多核心多线程等特点且拥有更高的安全性和可靠性。Intel Xeon Silver这是至强系列的中端产品主攻网络、存储和边缘计算等领域。Silver系列处理器在价格和性能之间达到了平衡适合用于各种不同的工作负载。Intel Xeon Bronze这是至强系列的入门级产品主要应用于低功耗和冷却受限的领域。Bronze系列处理器注重节能性能适合用于基础服务器应用。 1.2.3 ARM处理器体系结构
1. ARM Advanced RISC Machines Limited 1990年由Acorn、Apple、VLSI合资成立的处理器公司早期以IPIntellectual Property知识产权授权这种商业模式与众多半导体厂商构成合作关系。 2. ARM体系结构、指令集与ARM处理器 ARM体系结构Architecture ARM公司定义了8种主要的ARM体系结构版本以版本号v1~v8表示。 处理器体系结构又称架构其定义了处理单元Processing Element 简称PE的处理规范。 ARM体系结构的指令集Instruction Set ARMAdvanced RISC Machine是一种流行的32位微处理器指令集架构。它被广泛应用于嵌入式系统、移动设备、消费电子设备等领域。ARM指令集包括以下几种类型
1. 数据处理指令Data Processing Instructions这些指令用于对寄存器中的数据进行操作例如加法、减法、乘法、移位等。2. 程序控制指令Control Instructions这些指令用于控制程序流程例如跳转、分支、子程序调用等。3. 加载和存储指令Load and Store Instructions这些指令用于从内存中加载数据到寄存器或将寄存器中的数据存储到内存中。4. 栈操作指令Stack Operations Instructions这些指令用于操作堆栈例如压栈、弹栈等。5. 位操作指令Bit Manipulation Instructions这些指令用于对数据进行位操作例如位反转、位测试、位设置等。6. 协处理器指令Coprocessor Instructions这些指令用于与协处理器进行通信。7. 异常产生指令Exception Generation Instructions这些指令用于产生异常例如中断、未定义指令等。 8. ARM指令集还包括一些伪指令Pseudo-instructions这些指令在汇编语言中用于实现某些高级功能例如条件语句、循环等。ARM指令集的一个重要特点是它支持Thumb指令集该指令集是一种16位的指令集提供了更高的代码密度适用于对代码大小有严格要求的系统。ARMv8版本引入了64位支持的ARM指令集AArch64 和 32位支持的ARM指令集AArch32) 两种模式。 ARM指令集还有几个重要的特征1. 具有条件执行Conditional Execution功能即某些指令可以根据特定条件来执行。2. 具有延迟绑定Delay Binding功能即某些指令的执行结果可以在其他指令的执行期间被预测从而提高了处理器的效率。3. 支持寄存器重命名Register Renaming以减少因数据相关引起的性能瓶颈。4. ARM的微处理器内核Processor CoreCPU ARM微处理器的内核是ARM指令集体系结构的基础它定义了处理器的基本功能和特性。以下是ARM微处理器内核的一些主要特点和分类 ARM7系列这是ARM微处理器系列的早期产品采用32位精简指令集具有低功耗、高性能的特点主要应用于嵌入式系统和移动设备等领域。ARM9系列相对于ARM7系列ARM9系列在性能和功能方面更加先进采用了32位高性能ARM指令集具有更高的处理能力和更好的多媒体性能主要应用于智能手机、平板电脑、游戏机等领域。ARM11系列这是ARM微处理器系列的中期产品采用32位高性能ARM指令集具有更高的处理能力和更好的功耗效率主要应用于音频处理、图像处理、数字信号处理等领域。Cortex系列这是ARM微处理器系列的最新产品包括Cortex-A、Cortex-R和Cortex-M三个系列分别应用于高性能、实时性和微控制器领域。Cortex系列采用了先进的体系结构和指令集具有更高的性能和更好的功耗效率可以满足不同领域的需求。 除了以上几个系列ARM微处理器内核还包括其他一些特殊的产品和应用如ARM Cortex-A78、ARM Cortex-X1、ARM Cortex-M0等。这些产品和应用具有各自独特的特点和优势可以满足不同领域的需求。 5. ARM处理器Prosseor ARM处理器是一种基于ARM指令集的32位微处理器。ARM指令集是一种精简指令集具有较低的功耗和成本同时提供了较高的性能因此被广泛应用于移动设备、嵌入式系统、物联网、云计算等领域。 ARM处理器的体系结构是32位RISC精简指令集计算机架构其指令集和寄存器都是32位的。ARM处理器具有低功耗、高性能、小体积、低成本等优点适用于对功耗和性能要求较高的应用领域。 ARM处理器的家族主要包括ARM7、ARM9、ARM11、Cortex-A、Cortex-B、Cortex-M等系列。其中Cortex系列是ARM公司近年来主推的系列其A系列应用于高性能领域B系列应用于可靠性领域M系列应用于微控制器领域。 ARM处理器在智能手机市场上占据主导地位全球超过90%的智能手机和平板电脑都使用ARM处理器。此外ARM处理器还在嵌入式系统、物联网、云计算、服务器等领域得到广泛应用。 6. 基于ARM架构处理器的片上系统Soc 基于ARM架构处理器的片上系统Soc是一种高度集成的芯片将多个处理器和其他功能集成在一个芯片上形成了一个完整的系统。这种系统基于ARM指令集架构通常包括一个或多个ARM处理器核心以及其他相关的硬件和软件组件。一个典型的基于ARM的Soc系统通常包括以下主要部件 ARM处理器核心这是Soc系统的核心负责执行指令和数据处理。不同的ARM处理器核心具有不同的性能和功能可以根据应用需求进行选择。内存包括RAM和ROM用于存储指令和数据。在Soc系统中内存通常被集成在芯片内部。外围设备例如I/O接口、串口、USB接口、网络接口、传感器等这些设备与处理器核心通过总线相连扩展了系统的功能。时钟和复位电路用于提供系统时钟信号和复位信号确保系统正常运行。电源管理用于管理芯片各个部分的电源降低功耗延长电池寿命。软件包括操作系统、驱动程序和应用软件等用于控制和管理Soc系统的硬件资源和应用程序的运行。 基于ARM的Soc系统具有高度集成、低功耗、高性能等优点广泛应用于智能手机、平板电脑、物联网、嵌入式系统等领域。一些知名的基于ARM的Soc处理器包括Apple的A系列芯片、高通骁龙系列、华为麒麟系列等。ARM处理器分类
1ARM经典处理器
ARM经典处理器主要分为ARM7、ARM9、ARM11三个系列。每个系列都有不同的处理器内核用于满足不同的性能和功耗需求。1. ARM7系列ARM7系列是ARM最早的处理器系列采用32位指令集包括ARM7TDMI、ARM7TDMIS、ARM7EJ-S等子系列。主要应用于嵌入式系统、移动设备、音频处理、网络设备等领域。
2. ARM9系列ARM9系列采用高性能的ARMv5指令集包括ARM920T、ARM940T、ARM966J等子系列。主要应用于微控制器、数字信号处理、网络设备、智能手机等领域。
3. ARM11系列ARM11系列采用高性能的ARMv6指令集包括ARM1136JS、ARM1156T2S等子系列。主要应用于高性能处理器、网络设备、移动设备等领域。此外ARM还推出了Cortex-A系列和Cortex-R系列处理器以满足不同领域的需求。2ARM Cortex应用处理器
ARM Cortex应用处理器是ARM公司推出的高性能处理器系列主要面向基于虚拟内存的操作系统和用户应用。这个系列处理器采用了ARMv7指令集并分为A、R和M三类以满足不同应用的需求。Cortex-A系列处理器主要包括Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15等多个子系列。这些处理器适用于Android、iOS等操作系统以及Web应用、游戏等用户应用。Cortex-R系列处理器主要应用于实时系统包括Cortex-R4、Cortex-R5、Cortex-R7等多个子系列。这些处理器适用于汽车制动系统、动力传动解决方案等实时应用。Cortex-M系列处理器主要应用于微控制器包括Cortex-M0、Cortex-M0、Cortex-M3、Cortex-M4等多个子系列。这些处理器适用于智能测量、人机接口设备、汽车和工业控制系统等嵌入式应用。ARM Cortex应用处理器具有高性能、低功耗、可扩展等优点适用于各种不同的应用领域。同时ARM公司提供了完整的开发工具和支持帮助开发者快速开发出高效的嵌入式系统。3ARM Cortex嵌入式处理器
ARM Cortex嵌入式处理器是ARM公司推出的适用于嵌入式系统的处理器系列。这个系列处理器采用了ARMv7指令集或者ARMv8指令集64位并分为Cortex-M、Cortex-R和Cortex-A三个系列以满足不同应用的需求。Cortex-A系列处理器主要包括Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15等多个子系列。这些处理器适用于Android、iOS等操作系统以及Web应用、游戏等用户应用。
Cortex-R系列处理器主要应用于实时系统包括Cortex-R4、Cortex-R5、Cortex-R7等多个子系列。这些处理器适用于汽车制动系统、动力传动解决方案等实时应用。
Cortex-M系列处理器主要应用于微控制器包括Cortex-M0、Cortex-M0、Cortex-M3、Cortex-M4等多个子系列。这些处理器适用于智能测量、人机接口设备、汽车和工业控制系统等嵌入式应用。ARM Cortex嵌入式处理器具有高性能、低功耗、可扩展等优点适用于各种不同的嵌入式应用领域。同时ARM公司提供了完整的开发工具和支持帮助开发者快速开发出高效的嵌入式系统。4ARM 专业处理器
ARM 专业处理器是 ARM 处理器的一种特殊类型专门针对特定领域的计算需求进行优化。以下是一些 ARM 专业处理器的介绍1. ARM Cortex-A78这是 ARM 最新的旗舰处理器针对高端智能手机和平板电脑设计。它基于 ARMv8.2 架构配备 64 位指令集和 16 位可选指令集扩展具有高性能和低功耗的特点。
2. ARM Cortex-X1这是 ARM 推出的全新高性能处理器针对高端智能手机、平板电脑和游戏设备。它基于 ARMv8.5 架构配备 64 位指令集和 16 位可选指令集扩展旨在提供更高的性能和效率。
3. ARM Cortex-A55这是 ARM 的中端处理器针对智能手机、平板电脑和物联网设备。它基于 ARMv8.2 架构配备 64 位指令集和 16 位可选指令集扩展具有高性能和低功耗的特点。
4. ARM Cortex-A35这是 ARM 的低功耗处理器针对物联网设备和可穿戴设备。它基于 ARMv8.2 架构配备 64 位指令集和 16 位可选指令集扩展旨在提供最佳能效比。
5. ARM Cortex-A73这是 ARM 的高端处理器针对高端智能手机和平板电脑。它基于 ARMv8.2 架构配备 64 位指令集和 16 位可选指令集扩展具有高性能和低功耗的特点。ARM 专业处理器针对不同领域的需求进行优化以满足高性能、低功耗和高效能的要求。这些处理器广泛应用于智能手机、平板电脑、物联网、汽车电子、服务器等领域。ARM架构服务器优势
1. 更低的综合运营成本 2. 端-边-云 全场景同构互联与重构 3. 更高并发处理效率 4. 开放的生态系统、多元化的市场供应
ARM服务器的兴起
亚马逊的Graviton与EC2弹性计算云Marvell/Cavium公司的ThunderX系列 服务器处理器Ampere公司的eMAG/Altra系列服务器处理器飞腾公司FT2000系列服务器处理器
1.3 服务器技术基础
1.3.1 高性能处理器的存储器组织与片上互联
1. 多核系统的存储结构
处理器的性能得到充分发挥就必须考虑存储器带宽还有速度差速需要考虑所以要进行存储结构设计。 高性能处理器采用多级存储器来解决多存储问题。 采用二级Cache, 甚至三级Cache等效处理速度 根据处理器Cache的配置情况把多核处理器存储结构分为以下四种
分类Value片内私有L1 Cache 结构L1、L2两级组成各核私有L1 CacheL1 I Cache指令、L1 D Cache数据。多核共享的L2 Cache 在处理器芯片外。片内私有L2 Cache 结构L1 I 、D多核自行保留L2 Cache 移至处理器片内L2 Cache为各核私有片内共享L2 Cache 结构片内共享L2 Cache (取代私有结构)且片内访问速度更高片内共享L3 Cache 结构片内私有L2 Cache 结构的基础上增加片内多核共享L3 Cache提升了存储系统性能
多核处理器的Cache一致性
Cache 一致性Cache Coherency 存放数据的多副本输入输出共享Cache
维护关键点在于 跟踪每一块Cache 状态读写操作以及总线事件。
//不一致的可能原因
1.可写数据的共享采用全写法以及回写法引起其他Cache中副本内容不一样
2.输入、输出活动输入/输出设备直接接在了系统总线上输入/输出将会导致不同
3.核间线程迁移核间线程迁移把一个尚未执行完的线程调度到另一个空闲的处理器内核中执行。多核系统中Cache的一致性使用软件和硬件维护。 软件维护 #mermaid-svg-PQai5L9gJiN0ey09 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PQai5L9gJiN0ey09 .error-icon{fill:#552222;}#mermaid-svg-PQai5L9gJiN0ey09 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PQai5L9gJiN0ey09 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-PQai5L9gJiN0ey09 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PQai5L9gJiN0ey09 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PQai5L9gJiN0ey09 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PQai5L9gJiN0ey09 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PQai5L9gJiN0ey09 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PQai5L9gJiN0ey09 .marker.cross{stroke:#333333;}#mermaid-svg-PQai5L9gJiN0ey09 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PQai5L9gJiN0ey09 g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-PQai5L9gJiN0ey09 g.classGroup text .title{font-weight:bolder;}#mermaid-svg-PQai5L9gJiN0ey09 .nodeLabel,#mermaid-svg-PQai5L9gJiN0ey09 .edgeLabel{color:#131300;}#mermaid-svg-PQai5L9gJiN0ey09 .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-PQai5L9gJiN0ey09 .label text{fill:#131300;}#mermaid-svg-PQai5L9gJiN0ey09 .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-PQai5L9gJiN0ey09 .classTitle{font-weight:bolder;}#mermaid-svg-PQai5L9gJiN0ey09 .node rect,#mermaid-svg-PQai5L9gJiN0ey09 .node circle,#mermaid-svg-PQai5L9gJiN0ey09 .node ellipse,#mermaid-svg-PQai5L9gJiN0ey09 .node polygon,#mermaid-svg-PQai5L9gJiN0ey09 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PQai5L9gJiN0ey09 .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-PQai5L9gJiN0ey09 g.clickable{cursor:pointer;}#mermaid-svg-PQai5L9gJiN0ey09 g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-PQai5L9gJiN0ey09 g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-PQai5L9gJiN0ey09 .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-PQai5L9gJiN0ey09 .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-PQai5L9gJiN0ey09 .dashed-line{stroke-dasharray:3;}#mermaid-svg-PQai5L9gJiN0ey09 #compositionStart,#mermaid-svg-PQai5L9gJiN0ey09 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 #compositionEnd,#mermaid-svg-PQai5L9gJiN0ey09 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 #dependencyStart,#mermaid-svg-PQai5L9gJiN0ey09 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 #dependencyStart,#mermaid-svg-PQai5L9gJiN0ey09 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 #extensionStart,#mermaid-svg-PQai5L9gJiN0ey09 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 #extensionEnd,#mermaid-svg-PQai5L9gJiN0ey09 .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 #aggregationStart,#mermaid-svg-PQai5L9gJiN0ey09 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 #aggregationEnd,#mermaid-svg-PQai5L9gJiN0ey09 .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-PQai5L9gJiN0ey09 .edgeTerminals{font-size:11px;}#mermaid-svg-PQai5L9gJiN0ey09 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 硬件维护 程序员维护 编译器分析 «main» 硬件方式 1.总线侦听Bus Snooping 2.目录协议(Directroy) «Speed» Cache一致性协议 1.每个Cache分管自身Cache广播同步 2.全局角度监管不同Cache的状态() «few» 软件方式 预防 显示指令() «low» 性能较大影响 硬件开销小 Cache(一致性维护) UMA 架构 和 NUMA 架构
根据 处理器对内存储器的访问方式 将 共享存储器的计算机系统 分为两大类 UMAUniform Memory Access, 统一内存访问 和NUMANon Uniform Memory Access非同一内存访问
UMA是对称多处理器计算机采用的组织方式架构所有的处理器访问一个统一的存储空间常以多通道方式组织。10 在UMA中所有的处理器共享同一块内存每个处理器访问内存的速度相同。这种架构设计相对比较简单且可以实现较高的吞吐量。 NUMA架构属于分布式共享存储( Disributed Shared Memory ,DSM),存储器分布在不同节点上。 需要设置线程亲和性Affinity来实现注意类型应用的普遍性CC-NUMACache Coherent Non-Uniform Memory Access缓存一致性非统一内存访问使用专门的一硬件来保证使多处理器在单一系统下使用对称处理器架构一样的硬件层管理。 UMANon-Uniform Memory Access非统一内存访问是一种计算机内存架构设计。在NUMA中处理器的内存访问速度与其距离内存位置的远近有关因此处理器访问内存的速度不是均匀的。NUMA架构通常被用于多处理器系统例如对称多处理机SMP和多线程处理器。 1.NUMA架构的主要特点是内存控制器被集成到每个处理器核心中因此每个处理器都能够直接访问其本地内存区域。本地内存是指与处理器位于同一NUMA节点上的内存。在NUMA中处理器可以通过互联总线Interconnect bus访问其他处理器节点的内存但是访问本地内存的速度更快。
2.由于NUMA架构的内存访问速度不均匀因此在系统设计时需要考虑平衡内存访问的延迟和带宽。一种常见的策略是在处理器附近放置更多的内存以便每个处理器能够更快地访问其所需的内存。
3.NUMA架构的优点是可以提供更高的内存带宽和更低的内存访问延迟。缺点是需要更多的内存和芯片因此成本更高。另外由于内存访问速度不均匀因此需要进行优化以避免性能瓶颈。
4.NUMA架构在某些领域例如高性能计算和大规模数据处理表现出色。它也被用于一些现代的计算机系统例如服务器和工作站。多核处理器的核间通信机制
主流片上通信方式三种总线共享Cache结构、交叉开关互联结构、片上网络结构。
1. 总线共享Cache结构 总线共享Cache结构是指多核处理器内核共享L2 Cache或L3 Cache片上处理器内核、输入/输出接口以及主存储器接口通过连接各处理器内核的总线进行通信。这种方式的优点是结构简单、易于设计实现、通信速度高但缺点是总线结构的可扩展性较差只适用于处理器核心数较少的情况。 Inter的酷睿CORE、IBM的Power4\Power5, 等早期多核处理器采用总线共享结构。
2.交叉开关互联结构
交叉开关Crossbar Switch互联结构提高数据带宽 交叉开关互联结构是一种用于多处理器系统的互连方式它由一组二维阵列的开关组成将多个处理器的总线连接起来。该结构采用空间分配机制可以将多个处理器和存储器模块互连在一起从而实现高速通信。 与总线互连方式相比交叉开关互连结构具有更高的带宽和更低的延迟。它能够避免总线冲突支持更多的处理器和存储器模块连接并且具有更高的扩展性。然而交叉开关互连结构也具有较高的复杂性和较高的硬件成本。
在交叉开关互连结构中每个交叉开关可以连接多个处理器和存储器模块通过交叉开关的路由功能可以实现任意两个处理器或存储器模块之间的通信。该结构还可以通过多路复用技术来提高带宽利用率。交叉开关互连结构是一种高性能、高扩展性的互连方式适用于大规模多处理器系统。
比如AMD的速龙AthlonX2处理器采用交叉开关开关核心与外部同信。
3. 片上网络结构
类似于并行计算机的互联网络结构单芯集成大量资源 片上网络Network on a ChipNoC; On-chip Network是一种用于多核处理器和片上系统的先进通信架构通过在单芯片上集成大量的计算资源和通信网络实现多个功能模块之间的高效通信。 片上网络借鉴了并行计算机的互连网络结构将多个功能模块连接在一起。这些功能模块可以是处理核心、缓存、内存控制器等。每个功能模块通过路由器进行数据传输通过多个路由器和通信链路实现并行、高带宽的通信。 片上网络的优势在于可扩展性、低延迟和高带宽。它能够满足不断增长的处理核心数量和复杂的应用需求同时优化通信性能和功耗。
片上网络的设计旨在提供灵活性和可扩展性以适应不同的芯片设计和应用需求。片上网络可以采用多种拓扑结构以下为几种常见的 环形拓扑、网状拓扑、树状拓扑…
class MeshToplogy:
class TreeTopology:
class StarTopology:
class MeshNoCTopology: 片上网络包括计算子系统、通信子系统两部分。 计算子系统Processing ElementsPE和通信子系统Communication Subsystem组成。 计算子系统 PEProcessing Element,处理单元PE可由处理器内核、专业硬件、存储器阵列等构成。 通信子系统由 交换Swich节点及节点间互联线组成负责连接PE实现高速通讯。
计算子系统由多个处理器核Processor Core和其他功能单元组成它们被集成在一个芯片上。每个处理器核可以执行自己的指令和操作并且可以通过通信子系统与其他处理器核进行通信。 通信子系统由多个通信节点Communication Node和通信链路Communication Link组成。每个通信节点连接多个处理器核或功能单元并与其他通信节点进行通信。通信链路是连接通信节点的物理通道它可以采用不同的传输介质和技术如金属线、光缆、无线传输等。 在二维网状网络片上网络结构图中计算子系统和通信子系统之间通过连接线相互连接形成一个相互交织的网状结构。这种结构可以提供高带宽、低延迟的通信能力并且具有高度并行性和可扩展性。
内存顺序模型与内存屏障
一、 访存重排序
在并行多核系统中访问顺序不一定一致。为提升性能编译器或硬件往往会对指令序列进行 重排序Recording 从而引入乱序排序Out-of-Order Execution 机制
1. 指令重排序三种类型
编译器优化导致的指令序列重排序。不改变程序语义的情况下对指令重新安排语义。指令级并行导致的指令序列重排序。现代高性能处理器采用指令级并行处理技术增加每个时钟周期执行的指令条数从而提高处理器性能。如超标量指令技术通过处理器动态执行机制实现指令级并行超长指令级技术采用编译器软件静态调度实现指令级并行EPIC技术通过软硬件协作来提高系统性能。内存系统引起的指令序列重排序。除了指令执行执行程序之外通常还存在着内存系统感知到的内存访问顺序。处理器通常会采用Cache、读写缓冲区使得程序运行时出现多核交互让Load和Restore看起来在乱序执行。
2. 三种不同的存储器访问顺序
1.程序顺序Program Order程序顺序是代码在特定处理器上运行时由代码本身给出的访存顺序代表程序员预期的时间顺序。2.执行顺序Execution Order执行顺序是指在给定处理器上运行时特定的访存指令执行顺序。3.感知顺序Perceived Order:也称观察顺序。特定处理器感知到访存操作的程序。由于Cache访问、存储系统优化和系统互联操作本身以及其他存储器的访存操作顺序不一定相同且架构也不一定相同。某些情况下程序正确性需要依赖内存访问顺序而必须通过内存一致性模型加以规范。
二、 内存一致性模型
共享存储器上的多核系统上运行的必须要面对并行编程的问题。其中内存访问一致性需要软硬件协同配合也就是软件与存储器之间的协议问题。
计算机系统层次结构上来看计算机系统逻辑上是由裸机和不同层次的虚拟机构成的。内存模型分为软件内存模型Software Memory Model与硬件内存模型Hardware Memory Model两大类。
1. 软件内存模型
软件运行模型是一套关于程序员、编程语言、运行环境三者之间的一套协议。软件内存模型是一种用于描述和模拟计算机内存系统的抽象模型。它可以帮助程序员更好地理解程序的内存访问行为优化程序的性能以及解决内存相关的并发问题。 软件内存模型通常包括以下几个方面的描述 内存层次结构描述内存系统的多层次结构包括缓存、主存、磁盘等不同的存储层次。内存访问语义描述程序在内存中读取和写入数据的行为包括读后写、写后读、置零等不同的内存访问语义。内存一致性描述不同线程对共享内存的访问应该具有一致性即所有线程看到的内存状态应该是一致的。内存排序规则描述如何对内存操作进行排序以确保多线程程序的一致性和正确性。 软件内存模型对于计算机系统的设计和优化具有重要的指导作用。在实际的软件开发过程中程序员可以根据内存模型来优化程序的内存访问性能以及避免内存相关的并发问题。同时软件内存模型也是并发编程语言和并行计算领域的重要研究内容。 2. 硬件内存模型
处理器层次架构的内存一致性模型可以理解为软硬件之间的一套协议 硬件内存模型是计算机硬件设计者为了实现多处理器系统和编译器优化而建立的内存一致性和访问行为的规范。它定义了程序在内存中的行为以及内存访问的可见性。 硬件内存模型通常包括以下几个方面的描述 存储器一致性描述不同处理器对共享内存的访问应该具有一致性即所有处理器看到的内存状态应该是一致的。内存访问语义描述程序在内存中读取和写入数据的行为包括读后写、写后读、置零等不同的内存访问语义。内存一致序描述对共享内存的访问应该遵循一定的顺序以确保多处理器系统的一致性和正确性。内存访问延迟描述内存访问的时间延迟包括读延迟和写延迟等。 硬件内存模型对于计算机系统的设计和优化具有重要的指导作用。在实际的计算机系统设计中硬件设计者需要根据内存模型来优化内存访问性能以及避免内存相关的并发问题。同时硬件内存模型也是并发编程语言和并行计算领域的重要研究内容。 a.强一致性内存模型
强一致性内存模型Strong Consistency Model 是一种严格的内存一致性模型它要求多处理器系统中所有对共享内存的访问都必须在一个一致的状态下完成。也就是说在任何时刻所有线程看到的内存状态都是一致的。
强一致性内存模型具有以下特点
1. 所有内存访问操作必须在全局的顺序下完成这个顺序对于所有线程都是一致的。
2. 如果一个线程对共享内存进行写操作其他线程立即就能看到这个写操作的结果。
3. 如果一个线程对共享内存进行读操作它只能看到在全局顺序中发生在读操作之前的写操作。强一致性内存模型可以确保多线程程序的一致性和正确性但是它也可能会限制程序的性能。因此在实际的系统设计中需要根据实际情况选择合适的内存模型来平衡性能和正确性。
b.弱一致性内存模型
弱一致性内存模型Weak Consistency Memory Model 是一种较为宽松的内存一致性模型它允许在对共享内存的访问上存在一定的时间延迟并且允许不同线程看到的内存状态存在一定的不一致性。
弱一致性内存模型具有以下特点
1. 对共享内存的访问操作可能存在一定的顺序错乱即在一个线程看来其他线程对共享内存的访问可能不是按照预期的顺序进行的。
2. 如果一个线程对共享内存进行写操作其他线程可能不能立即看到这个写操作的结果而是需要等待一段时间后才能看到。
3. 如果一个线程对共享内存进行读操作它可能只能看到在之前某个时间点之前的写操作而不能看到最新的写操作。弱一致性内存模型相对于强一致性内存模型来说更加宽松因此它可以提高系统的性能但是它也可能会降低程序的一致性和正确性。因此在实际的系统设计中需要根据实际情况选择合适的内存模型来平衡性能和正确性。 也就是说强一致性内存模型能保证所有处理器、进程对数据的读取顺序保持一致不能保证即为弱一致性内存模型 A. 顺序一致性内存模型
**顺序一致性内存模型Sequential Consistency Memory Model**是一种特殊的内存一致性模型它要求程序在执行过程中无论多少个处理器并行执行无论程序是否同步所有程序看到的操作执行顺序都是一致的。
顺序一致性内存模型具有以下特点
1. 所有线程看到的操作执行顺序都是一致的。
2. 程序的执行结果与各处理器各自轮流执行后的结果相同且各处理器内部的执行顺序由程序决定。
3. 所有操作都是原子的即在执行过程中不会被其他线程打断。
4. 所有操作都具有立即可见性即在一个线程中进行的操作会立即对其他所有线程可见。顺序一致性内存模型为程序员提供了极强的内存可见性保证但是它也可能会限制系统的性能。因此在实际的系统设计中需要根据实际情况选择合适的内存模型来平衡性能和可见性保证。 Load(加载) 和store(存储)操作一致 直观简单的强一致性内存模型有时也称强排序模型但这种模型效率低下不允许处理器为提升并行性乱序执行程序所以现代高性能处理器大多硬件实现不适用这种模型。
因此在设计处理器内存模型时多把顺序一致性内存模型作为理论参考性模型来做一定程度上的放宽来优化模型提升性能。
最典型的放宽是对不同的加载、存储类型的放宽
加载之后的加载重排序Loads Reordered After Loads存储之后的加载重排序Loads Reordered After Stores加载之后的存储重排序Stores Reordered After Loads存储之后的存储重排序Stores Reordered After Stores
在多处理器系统中不同的内存访问类型可能具有不同的放宽级别。其中最典型的放宽是对不同的加载和存储类型的放宽。加载操作Load是从内存中读取数据到寄存器中的操作而存储操作Store是将数据从寄存器中写入内存中的操作。在多处理器系统中加载和存储操作可能会受到不同的放宽限制。具体而言在某些内存一致性模型中加载和存储操作可能会被放宽这意味着它们可以在不同的处理器之间以不同的顺序执行而不必保持严格的顺序。这种放宽可以提高系统的性能但也可能导致一些并发问题。例如在某些内存一致性模型中加载操作可能会被放宽到可以在存储操作之前执行这被称为“加载优先”或“先加载后存储”模型。相反在另一些内存一致性模型中存储操作可能会被放宽到可以在加载操作之后执行这被称为“存储优先”或“先存储后加载”模型。B. 全存储排序内存模型
如果对顺序一致性模型的基础上放宽程序中的写、读操作顺序允许写晚于相应读操作则称为全存储Total Store Ordering,TSO内存模型一般出现在处理器中增加了写缓冲区Write Buffer或简称Store Buffer的情况下。 全存储排序内存模型是一种内存一致性模型它要求在对共享内存的访问上必须遵循一定的顺序即所有对共享内存的访问操作都必须按照一种特定的顺序进行。
全存储排序内存模型具有以下特点
1. 所有对共享内存的访问操作都必须按照一种特定的顺序进行这个顺序对于所有线程都是一致的。
2. 如果两个线程对共享内存进行操作它们之间的操作顺序不能有交叉。
3. 如果一个线程对共享内存进行写操作其他线程必须按照这个写操作所在的位置对共享内存进行读取否则将无法获得正确的结果。全存储排序内存模型可以确保多线程程序的一致性和正确性但是它也可能会限制程序的性能。因此在实际的系统设计中需要根据实际情况选择合适的内存模型来平衡性能和正确性。
E.g.:通过Cache写回Copy-Back方式以批处理模式刷新写缓存区合并多次操作减少总线占用但可能与Load造成 乱序执行 且 每个处理器上写缓冲区是私有的可能造成 多核一致性问题 #mermaid-svg-ZEh0ESRXFjwKCv1B {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZEh0ESRXFjwKCv1B .error-icon{fill:#552222;}#mermaid-svg-ZEh0ESRXFjwKCv1B .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZEh0ESRXFjwKCv1B .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ZEh0ESRXFjwKCv1B .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZEh0ESRXFjwKCv1B .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZEh0ESRXFjwKCv1B .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZEh0ESRXFjwKCv1B .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZEh0ESRXFjwKCv1B .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZEh0ESRXFjwKCv1B .marker.cross{stroke:#333333;}#mermaid-svg-ZEh0ESRXFjwKCv1B svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZEh0ESRXFjwKCv1B g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-ZEh0ESRXFjwKCv1B g.classGroup text .title{font-weight:bolder;}#mermaid-svg-ZEh0ESRXFjwKCv1B .nodeLabel,#mermaid-svg-ZEh0ESRXFjwKCv1B .edgeLabel{color:#131300;}#mermaid-svg-ZEh0ESRXFjwKCv1B .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-ZEh0ESRXFjwKCv1B .label text{fill:#131300;}#mermaid-svg-ZEh0ESRXFjwKCv1B .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-ZEh0ESRXFjwKCv1B .classTitle{font-weight:bolder;}#mermaid-svg-ZEh0ESRXFjwKCv1B .node rect,#mermaid-svg-ZEh0ESRXFjwKCv1B .node circle,#mermaid-svg-ZEh0ESRXFjwKCv1B .node ellipse,#mermaid-svg-ZEh0ESRXFjwKCv1B .node polygon,#mermaid-svg-ZEh0ESRXFjwKCv1B .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZEh0ESRXFjwKCv1B .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B g.clickable{cursor:pointer;}#mermaid-svg-ZEh0ESRXFjwKCv1B g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-ZEh0ESRXFjwKCv1B g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-ZEh0ESRXFjwKCv1B .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-ZEh0ESRXFjwKCv1B .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-ZEh0ESRXFjwKCv1B .dashed-line{stroke-dasharray:3;}#mermaid-svg-ZEh0ESRXFjwKCv1B #compositionStart,#mermaid-svg-ZEh0ESRXFjwKCv1B .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B #compositionEnd,#mermaid-svg-ZEh0ESRXFjwKCv1B .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B #dependencyStart,#mermaid-svg-ZEh0ESRXFjwKCv1B .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B #dependencyStart,#mermaid-svg-ZEh0ESRXFjwKCv1B .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B #extensionStart,#mermaid-svg-ZEh0ESRXFjwKCv1B .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B #extensionEnd,#mermaid-svg-ZEh0ESRXFjwKCv1B .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B #aggregationStart,#mermaid-svg-ZEh0ESRXFjwKCv1B .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B #aggregationEnd,#mermaid-svg-ZEh0ESRXFjwKCv1B .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ZEh0ESRXFjwKCv1B .edgeTerminals{font-size:11px;}#mermaid-svg-ZEh0ESRXFjwKCv1B :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 写缓冲区 写缓冲区 CPU0 Cache 总线互联的Cache 接总线互联的主存() CPU1 上图多核系统多级存储器架构在该模型中CPU0先收到写指令然后再收到读指令。CPU0写入缓冲区之后Cache缺失但为执行完操作写入操作结果可能未写入主存
全存储TSO排序模型只放写-读操作顺序能保证所有Store指令之间的执行顺序与代码顺序一致。
C. 部分存储排序内存模型
在全存储TSO模型 的基础上进一步放宽写-写操作就变为**部分存储排序Partial Store OrderPSO**内存模型。在这种模型中向存储区写入的指令如果存在地址相关性仍能保持顺序执行但不存在相关性的写写操作则允许乱序执行。
继续用这个图 #mermaid-svg-3p15BBi2XI3mUcMM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3p15BBi2XI3mUcMM .error-icon{fill:#552222;}#mermaid-svg-3p15BBi2XI3mUcMM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3p15BBi2XI3mUcMM .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-3p15BBi2XI3mUcMM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3p15BBi2XI3mUcMM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3p15BBi2XI3mUcMM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3p15BBi2XI3mUcMM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3p15BBi2XI3mUcMM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3p15BBi2XI3mUcMM .marker.cross{stroke:#333333;}#mermaid-svg-3p15BBi2XI3mUcMM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3p15BBi2XI3mUcMM g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-3p15BBi2XI3mUcMM g.classGroup text .title{font-weight:bolder;}#mermaid-svg-3p15BBi2XI3mUcMM .nodeLabel,#mermaid-svg-3p15BBi2XI3mUcMM .edgeLabel{color:#131300;}#mermaid-svg-3p15BBi2XI3mUcMM .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-3p15BBi2XI3mUcMM .label text{fill:#131300;}#mermaid-svg-3p15BBi2XI3mUcMM .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-3p15BBi2XI3mUcMM .classTitle{font-weight:bolder;}#mermaid-svg-3p15BBi2XI3mUcMM .node rect,#mermaid-svg-3p15BBi2XI3mUcMM .node circle,#mermaid-svg-3p15BBi2XI3mUcMM .node ellipse,#mermaid-svg-3p15BBi2XI3mUcMM .node polygon,#mermaid-svg-3p15BBi2XI3mUcMM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3p15BBi2XI3mUcMM .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-3p15BBi2XI3mUcMM g.clickable{cursor:pointer;}#mermaid-svg-3p15BBi2XI3mUcMM g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-3p15BBi2XI3mUcMM g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-3p15BBi2XI3mUcMM .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-3p15BBi2XI3mUcMM .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-3p15BBi2XI3mUcMM .dashed-line{stroke-dasharray:3;}#mermaid-svg-3p15BBi2XI3mUcMM #compositionStart,#mermaid-svg-3p15BBi2XI3mUcMM .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM #compositionEnd,#mermaid-svg-3p15BBi2XI3mUcMM .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM #dependencyStart,#mermaid-svg-3p15BBi2XI3mUcMM .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM #dependencyStart,#mermaid-svg-3p15BBi2XI3mUcMM .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM #extensionStart,#mermaid-svg-3p15BBi2XI3mUcMM .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM #extensionEnd,#mermaid-svg-3p15BBi2XI3mUcMM .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM #aggregationStart,#mermaid-svg-3p15BBi2XI3mUcMM .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM #aggregationEnd,#mermaid-svg-3p15BBi2XI3mUcMM .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-3p15BBi2XI3mUcMM .edgeTerminals{font-size:11px;}#mermaid-svg-3p15BBi2XI3mUcMM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 写缓冲区 写缓冲区 CPU0 Cache 总线互联的Cache 接总线互联的主存() CPU1 上图多核系统多级存储器架构连续执行两次地址不相关写操作 部分存储排序内存模型是一种内存一致性模型它允许在对共享内存的访问上存在一定的顺序错乱但是要求在对共享内存的访问上必须遵循一定的顺序即所有对共享内存的访问操作都必须按照一种特定的顺序进行。 PSO中部分存储排序内存模型具有以下特点第一次Cache缺失。第二次写命中都先写入缓存区但第二次会先执行完成第一次要等待Cache缓存空间被填充数据才执行完毕因此存在数据不一致的风险。
1. 对共享内存的访问操作可能存在一定的顺序错乱即在一个线程看来其他线程对共享内存的访问可能不是按照预期的顺序进行的。
2. 如果两个线程对共享内存进行操作它们之间的操作顺序不能有交叉。
3. 如果一个线程对共享内存进行写操作其他线程必须按照这个写操作所在的位置对共享内存进行读取否则将无法获得正确的结果。部分存储排序内存模型相对于全存储排序内存模型来说更加宽松因此它可以提高系统的性能但是它也可能会降低程序的一致性和正确性。因此在实际的系统设计中需要根据实际情况选择合适的内存模型来平衡性能和正确性。
D. 宽松内存顺序内存模型
如果把读-写、读-读 操作也进一步放开只要与地址无关的指令都可以乱序执行。 宽松内存顺序内存模型Relaxed Memory OrderRMO 是一种内存一致性模型它允许程序员在内存访问上拥有更大的自由度但同时也要求程序员必须显式地标记出对内存的访问操作。
宽松内存顺序内存模型具有以下特点
程序员必须显式地标记出对内存的访问操作例如使用volatile关键字或memory barrier指令。内存访问操作可能会在不同的线程之间出现顺序错乱但是它们必须遵循一种特定的顺序即所有对共享内存的访问操作都必须按照一种特定的顺序进行。如果一个线程对共享内存进行写操作其他线程必须按照这个写操作所在的位置对共享内存进行读取否则将无法获得正确的结果。
宽松内存顺序内存模型相对于其他内存一致性模型来说更加宽松因此它可以提高系统的性能但是它也可能会降低程序的一致性和正确性。因此在实际的系统设计中需要根据实际情况选择合适的内存模型来平衡性能和正确性。 由此可见从 顺序一致性内存模型 到 全存储排序内存模型再到 部分存储排序内存模型 和 宽松内存顺序内存模型。保持顺序一致性的能力是由强减弱的 很多硬件相关的强一致性顺序模型的强制禁止乱序是没有必要的 而弱一致性模型保证其一致性的责任就落到了程序员手上。 几种主流处理器架构
早期DEC公司的Alpha服务器比较严格的硬件弱内存模型。类似PowerPC、ARM和安腾Itanium弱内存排序Weak Memory OrderingWMO 的内存模型比Alpha增加了数据依赖性顺序。应用广泛的Intel 64 (x86-x64)架构使用过程一致性Process Consistency 内存模型基本属于强一致性顺序模型。有些处理器架构支持多种内存一致性模型。如RISC-V处理器默认内存弱内存排序模型也可使用全存储排序内存模型。
三、 内存屏障指令
内存屏障指令Memory Barrier Instruction 是一类同步屏障指令用于确保在对内存的访问操作中先发生的操作包括读写操作在后发生的操作之前执行完毕。
内存屏障指令可以保证不同线程之间的内存访问操作的顺序性从而确保多线程程序的正确性。
现代计算机系统中有多种类型的内存屏障指令例如
内存栅栏Memory Barrier是一类同步屏障指令用于确保在对内存的随机访问操作中的一致性。指令栅栏Instruction Barrier是一类同步屏障指令用于确保在对内存的随机访问操作中的一致性。内存栅障Memory Barrier Primitive是一类同步屏障指令用于确保在对内存的随机访问操作中的一致性。
这些内存屏障指令的具体实现和使用方法因不同的计算机系统而异需要参考相关的硬件和操作系统文档进行了解和应用。 以下用PowerPC、Power处理器的三条同步指令为例 1. 输入输出控制指令eieio
Enforce In-order Execution of Input/Output强制按顺序执行输入/输出操作也即在前面所有load和store指令执行完毕之后再执行后续的指令。
//下面为一段向外设发送两段数据的代码1. whileTDRE 0; //TDRE表示映射到另一个内存地址的状态寄存器2. TDR char1; //TDR表示内存空间的发送数据缓冲器3. asm( eieio); //加入eieio指令会强制执行上一行再执行下一行4. while(TDRE 0); //取0发射器缓冲器不空5. TDR char2; //确保程序执行不出错
2. 同步指令sync
sync指令功能为等待所有前序操作执行完毕。
PowerPC架构中定义了执行同步Execution Synchronizing概念:如果某条指令i导致指令分发暂停并且只有当所有正在执行的所有指令都已执行完成i并报告了触发的异常时指令才算执行完毕。 而sync指令除了执行同步还要等待所有被挂起的内存访问结束并且发出一个地址广播周期。可见执行这条指令的性能代价很大。 使用比如让处理器进入低功耗模式使用sync指令。寄存器编程
//进入低功耗模式的伪代码1. asm( sync);//等待所有被挂起的内存访问结束2. //进入低功耗模式3. asm( sync);
3. 同步指令isync
isync指令覆盖了sync指令的功能并且在等待所有前序指令执行完毕的同时还清空指令队列也即按照新的处理器上下文重新加载指令队列。处理器把这种指令的操作称为指令上下文同步(Instruction Context Synchronizing)。系统调用指令、中断返回指令都需要指令上下文同步。 举例而言,当使用写操作指令激活指令 Cache 时,指令队列中可能己经存在若干指令了,此时先执行 isxne 指令就会让后续指令进人指令 Cache。 此外,Power 处理器还有两条专用于多处理器间共享资源同步指令 lwarx 和 stwcx. lwarxLoad Word and Reserve Index 这个指令用于读取内存中的某个字32位数据并将其存储到某个寄存器中。更重要的是它在读取数据的同时会在内存中的某个特定位置通常是一个地址设置一个reservation标记表示该资源已被一个特定的处理器预定其他处理器在尝试读取或修改这个资源时将会失败。这个指令通常用于实现资源访问的互斥即一次只有一个处理器可以访问或修改某个资源。stwcxStore Word Conditional Index这个指令用于将某个寄存器中的字数据写入到内存中。如果写入操作成功且内存中的reservation标记仍然存在那么这个写入操作就会失败并且stwcx指令会设置一个条件代码表示该资源仍然被其他处理器预定。这个指令通常用于检查资源是否已经被其他处理器锁定如果已经被锁定那么当前处理器就会停止进一步的访问操作避免产生冲突。
每种处理器架构都有其自身定义的内在屏障指令以支持其内存一致性模型。这对需要在不同平台之间迁移程序是个挑战。而类似Java 语言这样的软件开发环境在往限制程序员直接使用内存屏障而是要求程序员使用互斥 原语实现同步访问。 在Java中程序员可以使用一些内置的同步原语如synchronized关键字和java.util.concurrent包中的各种锁和并发工具来实现对共享资源的互斥访问。这些原语在内部使用了底层的内存屏障和其他的硬件特性来确保线程安全。 谢谢大家