0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是内存语义?CXL是如何划分语义的

Linux阅码场 来源:Linux阅码场 2024-04-08 10:27 次阅读

随着人工智能大模型,高性能计算(HPC),大数据和搜推等业务的兴起,原本以Web服务为主要应用的数据中心也开始关注这些新业务所带来的需求变化,例如通过紧耦合计算网,提供更高的带宽和更低的延迟。而在紧耦合计算网中,是否支持丰富的内存语义成为了关键。

但究竟什么是内存语义,业界一直没有一个清晰的定义,有的人说Infiniband(IB)的RDMA语义就是内存语义,也有人说消息语义也是内存语义,也有人说访问内存的语义是内存语义,也有人说Load/Store语义是内存语义,众说纷纭,我们下面来看看Wikipedia是怎么定义内存语义的:

Memory Semantics(From Wikipedia)

Incomputing and parallel processing, memory semantics refers to the process logicused to control access to shared memorylocations, or at a higher level to shared variables in the presence of multiplethreads or processors.

Memorysemantics may also be defined for transactional memory, where issues related tothe interaction of transactions and locks, and user-level actions need to bedefined and specified.

可以看出,维基百科认为内存语义是针对多线程针对共享内存区进行的操作,又或者是针对内存的访问操作等。

为了更好的解释什么是内存语义,我们先来看看什么是语义以及IB中是如何划分语义的:

什么是语义?

通常来说,语义就是互联中用于交互的一个或者多个操作的组合,通常在事务层(TransactionLayer)中定义。(IB没有事务层,所以IB在传输层中定义了语义)

IB语义划分

IB介绍了两种语义,分别是ChannelSemantics(通道语义)和Memory(RDMA)Semantics(内存语义/RDMA语义)

其中,Channel Semantic包括Send/Receive操作;RDMA语义包括RDMA WRITE,RDMA READ和ATOMIC操作;

IB语义划分依据猜测

从IB提供的具体操作来看,Send/Receive,RDMA_Read,RDMA_Write和ATOMIC操作实际上都是针对内存的操作,所不同的是,Send/Receive操作的请求端不知道响应端会将数据写到哪里,即请求端在发送Send请求时,不需要填写目标地址。但实际上,最终这笔数据还是写到响应端的内存中去了。所以严格意义上说,Send/Receive操作仍然属于内存相关操作,只不过IB希望与另外三种操作做出区分。于是Send/Receive操作被赋予了新的名称,被称为Channel Semantics,意思就是在通道的一端你只管send数据就好,具体数据去哪了,通道的另一端会负责处理。

RDMA_Read,RDMA_Write和ATOMIC操作有一个共同点就是三种操作都需要指定响应端的虚拟地址,通过响应端的地址翻译,获得最终响应端的内存地址。这三种操作在IB标准中被划分在了RDMA语义下,也被称为内存语义,但从上述分析来看,这里将RDMA语义称为内存语义,有一点概念放大的嫌疑。

下面我们对比的看看CXL是如何划分语义的:

CXL语义划分

CXL介绍了三大类语义,包括I/O语义,缓存协议语义和内存访问语义,即CXL.io, CXL,cache和CXL.mem。其中,CXL.io语义与PCIe语义类似。

CXL语义划分依据猜测

CXL提供了非常丰富的事务层操作,我们可以把CXL链路以及两端抽象成下面的模型:

2a19d2c0-f54d-11ee-a297-92fbcf53809c.png

下面我们看看CXL链路要支撑CXL Point A和B进行哪些交互,简单起见,我们只关注请求类型:

CXL.Cache

Point A CXL.T1/T2 CPU L3
Point B CPU L3 CXL.T1/T2
x86指令 N/A Load/Store
设备指令 Load/Store N/A
请求类型 Read
Read0
Write
Read0-Write
Snp*
空间类型 主存
HDM-D
HDM-H
HDM-DB
主存
HDM-D
HDM-H
内存属性 Cacheable
Uncacheable
Cacheable

CXL.mem

Point A CXL.T2/T3 CPU HA
Point B CPU L3 CXL.T2/T3
x86指令 N/A MOV
设备指令 N/A Load/Store
请求类型 BISnp* MemRd*
MemWr*
MemInv*
etc
空间类型 HDM-DB HDM-D
HDM-H
HDM-DB
内存属性 Cacheable Cacheable
Uncacheable

CXL.io

Point A CPU Core CPU Core CPU Core
Point B CXL.T1/T2/T3 CXL.T1/T2/T3 CXL.T1/T2/T3
x86指令 MOV IN/OUT MOV
请求类型 MRd/MWr IORd/IOWr CfgRd/CfgWr
空间类型 内存空间->PDM 64KB I/O空间 内存空间->配置空间
内存属性 Uncacheable N/A Uncacheable
Point A CXL.T1/T2/T3 CXL.T1/T2/T3 Host
Point B Host CXL.T1/T2/T3 Host
x86指令 N/A N/A MOV
设备指令 Load/Store Load/Store
DMARd/DMAWr
N/A
请求类型 MRd/MWr MRd/MWr UIOMRd
UIOMWr
空间类型 内存空间-主存 内存空间->PDM
内存空间->GFAM
内存空间->GFAM
内存属性 Cacheable
Uncacheable
Uncacheable Cacheable
Uncacheable

什么是Load/Store指令?

通常来说,Load/Store(L/S)指令是处理器核对内存空间的访问操作,包括Load操作,将数据从内存空间读到处理器核内的寄存器中;以及Store操作,将处理器核内寄存器的数据写到内存空间中。

x86架构中,对内存空间访问的指令典型的是MOV指令;ARM架构中,对内存空间访问的指令典型的是LDR/STR;因为有不少的空间被映射(mapping)到了内存空间,即采用内存空间的访问指令,所以Load/Store指令不但能够访问实际的内存,也可以访问其他的一些设备,以及设备空间,例如BIOS ROM,南桥的寄存器,PCIe设备上的内存等等。

什么是DMA操作?

如果我们在两个物理地址间搬移数据,而不需要CPU介入的话,我们就称这种操作是DMA操作。这其中最重要的是DMA引擎,它具备一些寄存器接口,高级别的DMA引擎可能配备了硬件队列,用于描述搬移数据和地址的相关信息。从最终效果上来看,一次DMA操作等同于两次Load/Store操作,即先通过Load操作将数据从物理地址A读到DMA引擎,然后再通过Store操作将数据从DMA引擎写到物理地址B。

容易混淆的概念:

Load/Store是处理器的一种指令,例如x86的MOV指令,该指令会产生对内存空间的访问。现代计算机系统中,内存空间并不都指向具体的内存(DRAM)。也包括BIOS ROM,PCH寄存器空间,PCIe配置空间等,所以Load/Store最好说成是内存空间访问指令或语义。

内存空间访问和内存访问有什么不同?

内存空间是指处理器通过遍历其地址线的排列组合,能够通过Load/Store指令访问的最大的物理地址空间。例如某款处理器的地址线能够支持1MByte的内存空间,但实际上内存只有640KByte,如下图所示:

2a29f7f4-f54d-11ee-a297-92fbcf53809c.png

我们以x86处理器为例,CPU可访问的主要空间包括:

处理器访问空间 处理器访问指令举例
内存空间(48-bit或者52-bit) MOV
I/O空间 (16-bit) In/Out
配置空间 (28-bit) MOV or In/Out
其他空间(MSR,CPUID等) RDMSR/WRMSR, CPUID ...

其中,配置空间因没有独立的指令,访问该空间可通过I/O空间实现(Legacy方式,16M空间),也可以通过内存空间进行访问(256M空间),不同的空间将使用不同的指令进行访问。

结语

通过上面的分析可以看出,内存语义的定义在不同的上下文中的确不是特别固定。比较主流的观点有:

内存语义是指某种事务层的操作,其操作对象是具体内存实体的。该定义的代表是IB的RDMA语义。

内存语义是指专门针对内存实体操作的语义,与IO语义不同,这种上下文中的内存语义是不提供类似IO语义那样的保序操作。例如对于非同地址的内存读写操作,是没有序的要求。该定义的代表是CXL.mem。

术语:

PDM: Private Device Memory:传统PCIe设备上的内存资源,以及通过CXL.io访问的内存资源(CXL设备),该设备资源不支持Host Writeback操作

HDM:Host-managedDevice Memory:设备上的内存资源,该资源被映射在Host缓存一致性地址空间,该资源支持Host Writeback操作,包括HDM-D,HDM-H以及HDM-DB三种类型

HDM-D:HDM-DeviceCoherent:该内存可被CXL.cache或类似语义进行管理

HDM-H:HDM-Host OnlyCoherent:该内存只被Host使用并管理

HDM-DB:HDM-DeviceCoherent with Back-Invalidate:该内存被共享给了多个Host,并通过CXL.mem的Back-Invalidate通道进行缓存一致性维护

L/S:Load/Store:处理器对内存空间的访问操作,可操作实际内存,设备配置空间(MMCFG),设备资源空间(MMIO)等。

References:

PCIExpress Base Specification Revision 6.2

CXL_3.1Specification Release_FINAL.pdf

InfiniBand_Architecture_Specification_Volume_1_R1.7

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72779
  • 人工智能
    +关注

    关注

    1776

    文章

    43899

    浏览量

    230646
  • 传输层
    +关注

    关注

    0

    文章

    29

    浏览量

    10839
  • RDMA
    +关注

    关注

    0

    文章

    69

    浏览量

    8845
  • 大模型
    +关注

    关注

    2

    文章

    1543

    浏览量

    1139

原文标题:[基础]什么是内存语义?你叫对了吗?

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于OWL属性特征的语义检索研究

    【来源】:《电子设计工程》2010年02期【摘要】:在文献检索中,概念的语义相似度计算直接影响查准率和查全率指标。将本体描述语言OWL(Web Ontology Language)的属性特征有机结合
    发表于 04-24 09:48

    Verilog 硬件语义

    Verilog 硬件语义
    发表于 10-18 20:15

    语义机器人

    人工智能将迎来语义理解新时代。打破了传统人工智能在语言交互方面反射式的应答方式,成功地通过独创的中文语义理解算法,让计算机可以准确理解语言环境,进行上下文处理、口语处理、省略处理。该平台可用于构建
    发表于 03-10 16:52

    求助:关于语义网本体构建,恳请大神帮忙

    我最近在做基于语义网的矿震系统分析,在对矿震信息进行XML语义描述后,不知道怎么在protege建立本体词汇,如何表示各种信息之间的关系呢?跪求帮助
    发表于 04-26 16:19

    NLPIR大数据语义智能分析平台先精准分词才语义分析

    特性,是对数据包含信息的更高层次的抽象。  灵玖软件NLPIR大数据语义智能分析平台针对中文数据挖掘的综合需求,融合了网络精准采集、自然语言理解、文本挖掘和语义搜索的研究成果,先后历时十八年,服务了
    发表于 08-27 10:53

    NLPIR语义分析是对自然语言处理的完美理解

    。  人类自然语言通常以词为基本构成单位,进而构成句子,再由句子形成篇章。篇章的语义由篇章中包含的所有句子的语义综合而成,而句子的语义又由句中的词语语义及一定的语法所确定;作为句子和篇
    发表于 10-19 11:34

    目标检测和图像语义分割领域性能评价指标

    目标检测和图像语义分割领域的性能评价指标
    发表于 05-13 09:57

    IOT语义互操作性

    IOT语义互操作性...
    发表于 07-27 06:24

    CXL内存协议介绍

    3.3.1 介绍CXL内存协议被称作CXL.mem。CXL.mem定义了CPU和内存之间的传输接口。该协议可用于多个不同的
    发表于 11-01 15:08

    语义网详解

    语义网详解 1. 引言 2. 为什么需要语义网? 3. 
    发表于 08-04 10:33 2452次阅读

    基于四层树状语义模型的场景语义识别方法

    场景分类的主要方法是基于底层特征的方法和基于视觉词包模型的方法,前者缺乏语义描述能力并且时间复杂度大,后者识别率低。借鉴两类方法的优势,提出了基于四层树状语义模型的场景语义识别新方法。四层语义
    发表于 12-07 11:17 0次下载
    基于四层树状<b class='flag-5'>语义</b>模型的场景<b class='flag-5'>语义</b>识别方法

    基于语义的文本语义分析

    文本情感倾向性研究是人工智能的分支学科,涉及了计算语言学,数据挖掘,自然语言处理等多个学科。基于语义的情感倾向研究和基于机器学习的情感倾向研究是情感倾向性分析的两个方向。本文采用了基于语义的方法
    发表于 12-15 16:35 6次下载

    语义分割算法系统介绍

    图像语义分割是图像处理和是机器视觉技术中关于图像理解的重要任务。语义分割即是对图像中每一个像素点进行分类,确定每个点的类别,从而进行区域划分,为了能够帮助大家更好的了解语义分割领域,我
    的头像 发表于 11-05 10:34 4771次阅读

    C++中的移动语义介绍

    移动语义是从C++11开始引入的一项全新功能。本文将为您拨开云雾,让您对移动语义有个全面而深入的理解,希望本文对你理解移动语义提供一点经验和指导。
    发表于 09-02 09:03 1665次阅读

    PyTorch教程-14.9. 语义分割和数据集

    划分为属于不同语义类的区域。与目标检测不同,语义分割在像素级别识别和理解图像中的内容:它对语义区域的标记和预测是在像素级别。 图 14.9.1显示了
    的头像 发表于 06-05 15:44 418次阅读
    PyTorch教程-14.9. <b class='flag-5'>语义</b>分割和数据集