- 1. 核心定义
- 2. 两种主要的共享内存架构
- 3. 共享内存多处理器的核心挑战与解决方案
- 4. 编程模型与同步
- 5. 优势与劣势
- 总结
共享内存多处理器是多处理器系统中最常见和直观的一种架构,也是现代多核CPU设计的核心范式。
1. 核心定义
共享内存多处理器是指所有处理器(或处理器核心)都共享一个统一的全局物理内存空间的计算机系统。系统中的任何一个处理器都能够直接访问任何内存地址,而无需其他处理器的协助。
关键特征:
- 单一全局地址空间:所有处理器看到的是同一块内存,每个内存地址都是唯一的。
- 通过读写内存进行通信:处理器之间通过在共享内存中读取和写入数据来进行通信和协作。例如,处理器A将结果写入内存的某个位置,处理器B再从该位置读取。
- 对称多处理(SMP):这是共享内存多处理器最常见的形态。在SMP系统中,所有处理器在硬件上是对称的( identical ),它们对内存、I/O设备等所有资源的访问权限和访问时间都是平等的。没有任何一个处理器是主控器。
2. 两种主要的共享内存架构
根据处理器访问内存的延迟是否一致,共享内存系统可分为两类:
a) 均匀内存访问
b) 非均匀内存访问
3. 共享内存多处理器的核心挑战与解决方案
a) 缓存一致性
这是共享内存系统最核心的硬件问题。
- 问题:每个处理器都有自己的私有缓存(L1/L2 Cache)来加速内存访问。如果处理器A修改了其缓存中的某个数据(例如,变量
X=5
),而处理器B的缓存中仍然保留着该数据的旧副本(X=4
),那么当B去读取X
时,就会得到错误的值。这就是缓存不一致。
- 解决方案:缓存一致性协议。由硬件自动维护,对软件完全透明。
- 最著名的协议:MESI
- M (Modified):缓存行是脏的,与主内存不一致,只有本缓存有副本。
- E (Exclusive):缓存行是干净的,与主内存一致,只有本缓存有副本。
- S (Shared):缓存行是干净的,与主内存一致,可能有多个缓存有副本。
- I (Invalid):缓存行数据是无效的,不能使用。
- 工作原理:当某个处理器要写入一个数据时,一致性协议会通过总线嗅探或目录协议等方式,通知所有其他缓存中持有该数据副本的处理器,将它们对应的缓存行状态置为无效。这样,其他处理器在下次读取时就必须从主内存或修改者的缓存中重新获取最新数据。
b) 内存一致性
这是给程序员和编译器的模型问题。
- 问题:多个处理器并发地读写内存,何种顺序的内存操作结果是合法的?例如,处理器A先写变量
X
再写Y
,处理器B看到的结果是否一定是Y
的新值和X
的新值?(不一定!)
- 解决方案:内存一致性模型。它定义了共享内存系统的行为规范,规定了写入操作何时并对其他处理器可见。
- 顺序一致性:最直观的模型。要求任何执行结果都等同于所有处理器的操作按某个顺序顺序执行,且每个处理器的操作顺序都符合其程序顺序。性能差,但易于理解。
- 松弛一致性模型(如x86的TSO,ARM的弱内存模型):为了性能而放松了对操作顺序的严格要求,允许硬件和编译器进行重排序。这就要求程序员在需要严格顺序的地方(如锁、信号量),使用内存屏障指令来显式地强制排序。
4. 编程模型与同步
在共享内存系统中编程,主要使用线程。
- 通信:通过共享变量进行通信。线程间通过读写共享的内存地址来传递信息。
- 同步:为了防止多个线程同时修改同一数据导致竞态条件,必须使用同步原语来协调线程的执行顺序。
- 锁:最常用的机制。保证只有获得锁的线程才能进入临界区访问共享资源。
- 信号量:用于控制访问资源的线程数量。
- 条件变量:用于线程间等待和通知特定条件的发生。
5. 优势与劣势
优势:
- 编程模型直观:与单机编程模型相似,易于理解和学习。通信简单(直接读写内存)。
- 数据共享高效:不需要在内存之间显式地移动数据,共享大量数据时优势明显。
- 负载均衡:由于所有处理器地位平等,任务可以动态地分配给任何空闲的处理器。
劣势:
- 可扩展性限制:虽然NUMA改善了这一点,但内存带宽和互联网络最终仍会成为瓶颈,难以扩展到成千上万个处理器。
- 同步开销大:大量的同步操作(如锁竞争)会成为性能瓶颈。
- 对程序员要求高:容易引入难以调试的并发Bug,如死锁、竞态条件。
总结
共享内存多处理器通过提供一个统一的全局内存视图,提供了直观且高效的并行编程环境。它是现代多核CPU和主流服务器的基石。其核心挑战——缓存一致性和内存一致性——已通过复杂的硬件协议(MESI)和明确的内存模型(如x86-TSO)得到解决。尽管在极端可扩展性上不如分布式内存系统,但它无疑是在性能、成本和编程便利性之间取得的最佳平衡点。
Do not communicate by sharing memory; instead, share memory by communicating.
相关文章:
目录1. 核心定义2. 两种主要的共享内存架构a) 均匀内存访问b) 非均匀内存访问3. 共享内存多处理器的核心挑战与解决方案a) 缓存一致性b) 内存一致性4. 编程模型与同步5. 优势与劣势优势:劣势:总结共享内存多处理器是多处理器系统中最常见和直观的一种架构,也是现代多核CPU设…...
详细介绍:【ARMv7】系统复位上电后的程序执行过程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospac…...
https://www.cnblogs.com/NotEnough/p/7426853.html
https://juejin.cn/post/7100033147101773831...
IDEA配置Maven原文链接:https://blog.csdn.net/leah126/article/details/132020904
一、Maven下载
首先我们进入maven官方网站,进入网页后,点击Download去下载。下载免安装版,解压即可,解压至磁盘任意目录,尽量不要取中文名如下图:
二、配置Maven环境变量 打开cmd命令行,…...
小引
我的OI之路是短暂且波折的,像是一则故事,曲曲折折,却又很是有趣,或许那两年是我最愉快的时光吧。
我总是问自己当初为什么要学OI,许是一腔热血,许是奔赴热爱。仔细想想,从最开始接触scratch,到后来的Python,最后的C++,前面两个都是觉得好玩,觉得有趣,可C++呢,…...
DDR4简介
DRAM的存储原理
DRAM的基本存储单元:cell
一个cell由一个晶体管和一个电容(约为30pF)组成,电容存储了电量代表1,电容放空电量代表0,晶体管作为电容的充放电开关,以便实现1bit数据的读写,cell的结构如下图所示 :读的过程:首先打开MOS管,根据电容的充放电信息…...
预测(Prediction) 是解决网络延迟问题、提升玩家操作流畅度的核心机制客户端接收玩家输入玩家操作(如 WASD 移动、跳跃)被捕获为输入事件(FInputActionValue)。客户端本地预测执行客户端不等服务器响应,直接基于输入在本地模拟角色行为(如移动、动画播放),并立即更新…...
目录1. SISD - 单指令流单数据流2. SIMD - 单指令流多数据流3. MIMD - 多指令流多数据流总结与对比简单类比多处理器体系结构中的三个基本概念:SISD、SIMD 和 MIMD,这些概念由迈克尔弗林(Michael Flynn)于1966年提出,被称为弗林分类法(Flynns Taxonomy)。它根据指令流(…...
1.1changeStr(String x):方法内部尝试将传入的字符串参数重新赋值为 "xyz",但该操作仅在方法内部有效,不会影响外部实参
changeArr(String[] strs):遍历传入的字符串数组,对数组中的每个元素进行修改,在原字符串后拼接其索引值(例如将第 0 个元素改为 "原…...
9.15
听 CEO 讲了 sb 树,不知道该写什么,挂个祂博客的链接吧。
https://www.cnblogs.com/Augenstern-/p/18964066...
1讲了关于GAS中的网络之间,Client-Server的网络同步时,需要使用预测...
周六非常荣幸参加了火山引擎官方举办的PromptPilot产品发布会。其实早在8月份,我就有幸参与了该产品的内测阶段,并撰写了一些体验心得和感受。此次发布会当天,不仅深入聆听到了产品负责人以及工程师们对PromptPilot的全新解读和详细介绍,还现场感受到了他们对产品未来发展方…...
下载
下载链接:https://hub.docker.com/?overlay=onboarding 在 Windows 上部署 Docker 的方法都是先安装一个虚拟机,VMware版本17.0以上可以兼容安装docker
另一个可以下载 Hyper-V,Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox 选中Hyper-V 也可以通过命令…...
何为特征值与特征向量
古人云:特征向量,乃方阵与线性变换之特征也。
盖线性变换,千变万化,寻不变其所向之向量,乃特征向量也。注意 0 向量不是特征向量。
何为特征值?线性变换中特征向量的伸长倍数,称该特征向量属于该特征值。
容易知道与一个特征向量共线的向量均为特征…...
docker部署Gitlab社区版,步骤以及外网访问出现502的解决方式 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier Ne…...
今日内容大纲介绍约束详解单表约束
多表约束DQL语句详解简单查询
条件查询
聚合查询
分组查询
排序查询
模糊查询
分页查询多表查询交叉连接
连接查询
子查询
自关联(自连接)查询扩展: 多表建表一对多
多对多
一对一1.主键约束详解
/*
约束详解:概述:SQL中的约束分为: 单表约束…...
.zip() 函数在 Python 中是一个非常实用的内置函数,它用于将多个可迭代对象(比如列表、元组等)中的元素打包成一个元组的迭代器。
简单来说,它的作用就是把不同序列中对应位置的元素配对,就像拉链一样把两排牙齿咬合在一起。
zip() 的基本用法
zip(iterable1, iterable2, …...
1. 错误信息
error in ./src/views/forest/forestGateway.vue?vue&type=script&lang=js Module parse failed: Unexpected token (203:39)
File was processed with these loaders: * ./node_modules/.pnpm/**cache-loader**@4.1.0_webpack@4.47.0/node_modules/cach…...
一周三天早八,体验衡中生活:(
早上起来就发现食堂的人巨多,一看原来是崩铁和瑞幸联名了,看来学校崩p还是挺多的,我看到有卖油条和豆浆的,于是浅尝了一下——还是避雷吧,油条油的要死,吃了一根第二根实在是咽不下去了,于是扔了去教室,如图,不愧是知名的电动车帝国,这…...
目录指挥官与士兵:深入理解CPU控制信号的最终使命一、舞台与演员:认识数据通路中的角色二、核心命题:为什么说控制信号“仅”作用在功能部件上?三、澄清误区:那流水线寄存器呢?四、更深层的意义:理解计算机架构的哲学结论指挥官与士兵:深入理解CPU控制信号的最终使命
在…...
比赛链接:https://vjudge.net/contest/748191。
A - 互不侵犯
最最最最最最最板子的状压 DP。
大概就是一行一行去弄。然后的话,DP 维护三个量,当前遍历到第 \(i\) 行,目前总共放了 \(j\) 个国王,以及这一行的放置国王情况为 \(st\)(用二进制状压表示)。判断的时候,有一…...
身边很多朋友问我怎么装 PS 2025,其实步骤不难,先跟大家说下这软件到底好用在哪,再一步步教安装,最后给几个常用的实操案例,新手跟着做就能上手,不管是想做摄影后期、商业设计,还是社交账号配图,看完这篇 Photoshop 2025 v26.0 下载安装教程都能搞定。目录一、先搞懂 P…...
我的学校是全世界最好的学校,不接受反驳!学校太好了
作为学生评判学校自然要说点实际的。
就比如说住宿环境,那是我见过的最优秀的宿舍了。
你们学校会把宿舍改装成水帘洞吗
今天中午回到宿舍就发现学校为了让我们更加凉爽,同时赏心悦目,将宿舍改装成水帘洞,一进宿舍楼就…...
SetWaitingOnRemotePlayerData主要用于控制游戏模式是否等待远程玩家(通常是网络多人游戏中的客户端)的数据加载完成。调用时,可以直接杀死该使用数据的任务...
完成hbase的部署,需要准备虚拟机并部署hadoop与java环境。途中虚拟机磁盘满了还要重新分配一下,但奈何磁盘满了进不去桌面,把之前的docker删了总算顺利进去了。...
目录一、核心挑战:多指令的并行交响曲二、解决方案:提前生成与“随指令流动”1. 产生:在译码阶段(ID)一次性生成所有“说明书”2. 保存与传递:流水段寄存器——控制信号的“护航舰队”三、这种机制的优势与意义总结你是否曾好奇,现代CPU的流水线如同一条高效运转的装配线…...
今日内容大纲介绍数据库的相关概述
环境搭建
SQL语句分类DDL
DML
DCL
DQLDDL语句之操作数据库
DDL语句之操作数据表
DML语句之操作表数据(增删改)
DQL语句之操作表数据(查)1.数据库的相关概述问1: 你知道的存储数据的方式有哪些?
-- 方式1: 变量, 列表, 字典...
只能对数据临时…...
example:const bool bCalledDelegate = AbilitySystemComponent.Get()->CallReplicatedTargetDataDelegatesIfSet(SpecHandle, ActivationPredictionKey);if (!bCalledDelegate){ SetWaitingOnRemotePlayerData();}...
目录一、时钟:流水线的同步心跳二、公共流水段:为何IF和ID无需“特殊关照”1. 取指阶段(IF):无差别的读取2. 译码阶段(ID):标准化的解析三、控制信号的诞生:时机决定一切四、控制信号为谁而生?总结:标准化与个性化的分工在我们深入探索CPU流水线的精妙世界时,一个看…...
test4
不要在意这个诡异的标题。排序sort
快排的过程相当于以 \(a_r\) 为界限,更小的放到左边,更大的放在右边,我们还关心新的 \(a_r\) 是谁,左边是按顺序的填入,右边新的顺序只跟原本的顺序有关系素排列双射下去啦,所以就是唯一特定位置的值成为新的。
那么考虑 dp 一下…...
减少KVCache:从MHA,MQA,GQA到MLA
参考链接
科学空间,苏神的blog
大模型推理加速:看图学KVCache
前言
也是终于到了稍微有一点时间的时候,也需要对看过的东西进行简单的总结了。这里就总结一下论文中最喜欢的attention,以及与KVCache之间的关系。
基础:什么是attention?…...
考研复习-操作系统-第三章-内存管理 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...
今日内容大纲介绍计算机简介
Linux系统介绍
Linux环境搭建
Linux基础命令1.计算机简介概述
全称叫电子计算机, 英文名叫Computer, 俗称叫: 电脑, 简称叫: PC, 就是有硬件和软件组成的电子设备.组成计算机硬件CPU, 中央处理器, 由 运算器 + 控制器 组成
存储器内存: 内存条, DDR…...
1.1 绪论
1.2 数学基础已知系统的初始状态+速度->未来的变化状态均可知质量弹簧阻尼二阶系统也可以写成微分方程的形式,状态变量为位置,速度2 动力学系统建模2.1 理论力学回顾...
2.1 常见命令
2.1.1 查看当前登录用户信息的基础命令
last # 显示上次登录的用户列表信息
who # 显示当前所有登录到系统的用户信息
whoami # 查看当前登录的用户
who am i # 仅显示当前终端登录系统的用户名+终端+登录时间+来源主机,‘i’可以是任意字符,等同于who -m
[…...
nacos无法启动主要问题是依赖于RocksDBjni没有对应架构的动态链接库
RocksDB JNI 的多平台 native 动态库集合系统 (OS)
架构 (Arch)
libc 类型
对应文件名Linux
x86 (32位)
glibc
librocksdbjni-linux32.somusl
librocksdbjni-linux32-musl.sox86_64 (64位)
glibc
librocksdbj…...
https://www.cnblogs.com/zhipeng-wang/p/14070431.html
测试端口
nc -nvz 127.0.0.1 8000
监听
nc -l 80
连接client
nc 127.0.0.1 8000想要连接到某处: nc [-options] hostname port[s] [ports] …绑定端口等待连接: nc -l port [-options] [hostname] [port]-g<网关>…...
完整教程:【C++】22. 封装哈希表实现unordered_set和unordered_mappre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New…...
前言最近,在研究云迁移,做了个测试如何使用App Service连接SQL MI。正文1.测试项目是Net Framework v4.8,核心代码如下图:1 StringBuilder message = new StringBuilder();2 try3 {4 string sqlstr = "Server=smi-test.c5c92fb776c2.database.windows.net;Databas…...
ServerSetReplicatedTargetData 通常是一个自定义的服务器端 RPC(远程过程调用)函数,用于将目标数据(如瞄准目标、交互目标等)从客户端发送到服务器,并让服务器更新相应的复制变量,以便在多台客户端之间同步该数据。...
PHP不行了,或许只是大家的一个简单的调侃,但这个调侃也代表了PHP语言从巅峰到下滑一个变迁。然而,现如今还是有很多的程序员依靠它在吃饭,语言只是一门工具,赚钱才是王道大家好,我是码农先森。
在微信的水群里,经常有兄弟说:"PHP不行了,PHP是上古时代的语言,PHP…...
SOLUTION FROM WUMIN4
题意
若长度为 \(n\) 的数组 \(a\) 排序后为 \(b\),定义 \(a\) 的权值为 \(\sum_{i=1}^n \lfloor\frac{b_i\cdot i^k}{w}\rfloor \bmod 998244353\)。
有 \(q\) 次操作,每次操作修改一个 \(a_i\),随后输出 \(a\) 的权值。
\(n,a_i\le 10^5,1\le k,w\le…...
Q. 有序表和无序表(Hash表)区别?Key有无序的区别。
Q. map 和 set 区别:有无伴随数据的区别。
有序表:红黑树、AVL树、size-banlance-tree、跳表都是有序表哈希表:基础类型,值传递;非基础类,必须提供比较器,引用传递。【经典题目】反转链表。要求实现单链表、双链表结…...
CAI是一个开源的网络安全AI框架,能够自主执行从侦察到权限提升的完整网络安全攻击链。它集成了多种专业AI智能体,支持红蓝对抗、漏洞评估、数字取证等安全任务,并提供了丰富的基准测试工具和评估体系。项目概述
CAI(Cybersecurity AI)是一个开源的网络安全AI框架,旨在构建…...
example://FGameplayAbilityTargetData_SingleTargetHit 继承自FGameplayAbilityTargetData
FGameplayAbilityTargetData_SingleTargetHit 是用于表示单一目标命中信息的目标数据结构,常用于游戏技能系统(Gameplay Ability System, GAS)中传递目标信息。
它主要包含以下核心…...
详细介绍:Maven入门_简介、安装与配置pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importan…...
实用指南:立体校正原理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: …...
train-labels.idx1-ubyte 是 MNIST 数据集中的一个文件。它不是一个普通的文本文件,而是一个经过特定格式编码的二进制文件。
简单来说,这个文件里只包含一个东西:MNIST 训练集图像的标签。
文件内容
这个文件的内容是一个字节序列,其中每个字节都代表一个手写数字的标签。…...
题目描述
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回 滑动窗口中的最大值 。
示例 1:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释…...