当前位置: 首页 > article >正文

CANN/shmem原理与架构详解

SHMEM原理概述【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmemSHMEM初始化流程介绍shmem的初始化接口int aclshmemx_init_attr(aclshmemx_init_attr_t *attributes)会根据传入的参数完成shmem功能所需资源的初始化。其中包含多进程间信息的同步以及建链、虚拟内存及device上物理内存的分配和映射、host和device间state信息同步以及初始化共享内存管理、team管理、同步管理功能所需要的资源。这些资源信息都会记录在一个aclshmem_device_host_state_t的state里。初始化流程如下图所示参数设置及参数校验相关内容不做具体介绍。多进程间的建链以uid初始化流程为例。一般会在初始化接口调用前通过torch的能力将rank0的uid信息广播到所有进程内部包含rank0节点的ip、port、magic通信域标识符等信息。多进程间的建链是基于TCP socket实现的。所有进程会先基于uid内部的ip::port信息和rank0建立连接连接时会根据uid内magic信息是否一致判断是否为同一通信域不同则断开连接。连接成功后所有rank与rank0通信基于此实现host侧的allgather和barrier等能力。该部分能力并非aclshmem_barrier相关能力而是类似于MPI_Barrier内存堆的初始化当前基于驱动能力实现分配虚拟内存、再分配物理内存然后实现虚拟内存和物理内存间的映射可以在连续的虚拟地址空间管理访问共享内存地址。实际效果和流程可以参考acl接口 ACL虚拟内存管理接口该部分会分配出两块内存用户申请的共享内存空间每个rank申请的内存大小和初始化传入attributes的local_mem_size大小一致后续可以通过aclshmem_malloc、aclshmem_free等共享内存接口管理。用于在device保存shmem的state、team等元数据空间当state和team等信息发生变化进程将自动同步到元数据空间元数据空间32M不对外提供访问接口host和device间state信息同步将host的state信息同步。即当host的state发生变化时将其复制一份覆盖到上个阶段分配的在device侧存储state信息的内存中后续在device侧操作时可以直接拿到更新后的state信息。共享内存管理初始化基于heap_base和heap_size初始化一个memory_manager用于后续共享内存管理。heap_base为当前rank的共内存首地址heap_size为用户申请的当前rank的共享内存大小。aclshmem_malloc内部采用first fit找到第一个满足要求的chunk从该chunk中分离出对应大小的chunk剩余空间如果有则作为新的空闲chunk。aclshmem_free释放后补充空闲chunk 。若新添加chunk与其他空闲chunk连续则合并。aclshmem_malloc和aclshmem_free接口使用时需要在所有进程同步调用且需要分配或释放相同大小的内存。SHMEM内部默认aclshmem_malloc分配的内存在虚拟地址空间对称即当前rank malloc的地址heap_size下一个rank malloc的地址。如果进程间分配内存不同会导致后续分配的内存首地址不对称无法通过地址偏移访问到正确的数据。team管理初始化创建一个ACLSHMEM_MAX_TEAMS大小的全局team_pool内部信息全部初始化为-1。 初始化全局team即ACLSHMEM_TEAM_WORLDstart 0 ; stride 1 ; size npes ; mype mype 即从第0个rank开始步长为1全局的pe数量为npes当前pe为mype(team相关具体介绍会在team部分做详细梳理此处仅简单展示全局team的属性信息)。在device上分配并初始化后续team级别同步需要的资源sync_pool、sync_counter、core_sync_pool、core_sync_counter。前俩个成员用于team内所有的卡间同步、后两个成员用于卡内核间同步。team_pool、sync_pool、sync_counter、core_sync_pool、core_sync_counter这些信息都会在state里储存。同步管理初始化该部分仅获取一个ffts地址后续可通过shmemx_get_ffts_config获得在算子内通过shmemx_set_ffts_config设置用于runtime同步AscendC层面会影响的SyncAll、CrossCoreSetFlag和CrossCoreWaitFlag接口shmem层面会影响到barrier相关接口。shmemx_set_ffts_config开销较小建议算子内都调用一次该接口。SHMEM通信域Team介绍Team是shmem的通信域概念在相关接口中可以通过team_id访问初始化后会有一个默认的全局通信域其team_id是ACLSHMEM_TEAM_WORLD 0。team的信息存储在在state的team_pools里team_pools是一个aclshmemx_team_t的数组。aclshmemx_team_t内会存储当前team的idteam相关接口使用的索引、当前进程在该team内的rank id、该team内的起始rank、rank间步长、rank数量等相关信息。aclshmemx_team_t内存储的mype和size是team内部的信息aclshmem_device_host_state_t里存储的mype和npes是全局的信息。例如对4个rank初始化shmem前两卡和后两卡各为一个team。此时这四个rank的state里的mype分别是0,1,2,3。npes则都是4。但team_pools里的mype则分别是0101。size为2。子Team切分shmem提供了专门的接口进行子Team的切分。int aclshmem_team_split_strided(aclshmem_team_t parent_team, int pe_start, int pe_stride, int pe_size, aclshmem_team_t *new_team);parent_team为父teampe_start为起始pepe_stride为每次划分的步长pe_size为划分的新team里pe的个数new_team是出参是切分得到的新team的team_id。以初始化好8个rank的场景为例以如下方式调用切分接口。aclshmem_team_t new_team; // 从全局通信域中idx为1的pe开始以步长为2切分出3个pe后停止。 auto ret aclshmem_team_split_strided(ACLSHMEM_TEAM_WORLD, 1, 2, 3, new_team);此时new_team中有3个pe在state中的mype信息分别为1,3,5他们的team_pools里的mype信息则分别为0,1,2。Team的使用当算子只需要在部分rank运行时就会需要用到team相关接口,如aclshmem_team_my_pe(my_team)可以返回当前rank在my_team的mype信息aclshmem_my_pe()可以返回当前rank在全局的mype信息。通常我们可以用team级别的mype信息作为算子内部资源数组的索引使用全局的mype作为全局共享内存地址信息的索引。同步接口也会使用到team_id如shmem内部提供的team内的同步接口aclshmem_barrier(aclshmem_team_t tid)。【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/shmem原理与架构详解

SHMEM原理概述 【免费下载链接】shmem CANN SHMEM 是面向昇腾平台的多机多卡内存通信库,基于OpenSHMEM 标准协议,实现跨设备的高效内存访问与数据同步。 项目地址: https://gitcode.com/cann/shmem SHMEM初始化流程介绍 shmem的初始化接口int ac…...

GE 静态执行器特性分析

GE 静态执行器(Known Shape Executor)特性分析 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率&#xff…...

2026就业寒冬?这10个AI高薪岗位抢人大战一触即发,最高年薪300万!普通人也能抓住风口?

从京东到小米再到腾讯、字节跳动,各大企业为了争夺稀缺的AI专业人才纷纷都祭出了高薪与高福利,2026年1月至2月期间AI岗位数量同比增长约12倍,占新经济岗位的比重从2025年同期的2.29%飙升至26.23%,也就是说现在每四个新经济岗位中就…...

哔哩下载姬DownKyi终极指南:3分钟掌握B站视频无损下载的完整教程

哔哩下载姬DownKyi终极指南:3分钟掌握B站视频无损下载的完整教程 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水…...

开源AI智能体框架安全定制指南:非侵入式补丁与工程化实践

1. 项目概述:为开源AI智能体框架打上你的专属补丁如果你和我一样,是OpenClaw框架的深度用户,那你一定经历过这种时刻:你急需某个功能,比如想给那个终端用户界面换个更酷的配色,或者想为某个特定的智能体单独…...

小红书自动化发布技术解析:从浏览器模拟到风控对抗

1. 项目概述与核心价值最近在逛GitHub的时候,发现了一个挺有意思的项目,叫echo-ikun/xhs-autopost-skill。光看名字,你大概就能猜到,这是一个跟小红书(xhs)自动化发布相关的技能或工具。作为一个在内容创作…...

基因数据交易模拟平台:用金融市场模型探索基因组学动态分析

1. 项目概述:一个基因数据交易与分析的实验平台最近在GitHub上看到一个挺有意思的项目,叫“genome-trader-lab”。光看名字,你可能会觉得有点跨界——“genome”(基因组)和“trader”(交易者)这…...

AI智能体3D可视化监控:用Phaser构建等距办公室视图

1. 项目概述:为AI智能体打造一个“看得见”的办公室如果你正在开发或管理一个由多个AI智能体组成的复杂系统,你可能会遇到一个共同的痛点:这些智能体到底在干什么?它们的状态如何?任务进展到哪一步了?传统的…...

使用技巧(五):插件装了 50 个还是裸奔?Claude Code 三大市场只装一个就够了,这款 165K Star

Claude Code 插件装了 50 个还是裸奔?三个市场只装一个就够了 Windows/macOS/Linux Claude Code 2.x 2026-05-09 一、你装了一堆插件,Claude 还是不按规矩干活? 有没有经历过这些: 装了 10 个 Skill,Claude 还是跳…...

ASIC功能验证:基于规范的方法学与实践

1. ASIC功能验证的现状与挑战在当今的芯片设计领域,功能验证已成为整个开发流程中最耗时且资源密集的环节。根据行业统计数据,现代ASIC项目中验证工作占据了整个开发周期的50%-70%,而设计实现本身仅占较小比例。这种不平衡的资源分配直接反映…...

Slidemason:基于AI编程助手本地生成专业演示文稿的React开源方案

1. 项目概述:用你已有的AI编程工具,在本地快速生成专业演示文稿 如果你和我一样,经常需要制作演示文稿,无论是给团队做汇报、向投资人展示项目,还是准备一个技术分享,你肯定知道这活儿有多耗时。从构思结构…...

AI技术合伙人:从代码生成到项目协作的智能开发框架实践

1. 项目概述:当AI成为你的技术合伙人最近在GitHub上看到一个挺有意思的项目,叫“ai-cofounder”。光看名字就挺有吸引力,对吧?这项目本质上是一个开源框架,旨在让你能像与一位技术合伙人(Cofounder&#xf…...

构建结构化技能知识库:从Git管理到团队协作的实践指南

1. 项目概述:一个技能库的诞生与价值在职业生涯的某个节点,尤其是在技术或创意领域深耕多年后,你可能会发现自己积累了大量零散的知识、工具、工作流和“小聪明”。它们散落在你的笔记、代码片段、浏览器书签和记忆深处。当需要快速解决一个新…...

嵌入式处理器双发射架构设计与DSP加速实战

1. 嵌入式处理器架构演进与性能突破在物联网和边缘计算设备爆炸式增长的今天,嵌入式处理器正面临前所未有的性能挑战。传统单发射架构在应对实时信号处理、复杂控制算法等任务时逐渐显现瓶颈。作为行业领先的IP供应商,Synopsys最新推出的ARC HS4x系列通过…...

ARM GIC PMU寄存器架构与中断性能监控解析

1. ARM GIC PMU寄存器架构解析性能监控单元(PMU)是现代处理器架构中用于硬件事件统计的核心模块,在ARM通用中断控制器(GIC)架构中扮演着关键角色。GICv5架构引入的PMU寄存器帧通过内存映射方式提供对中断服务路由器(IRS)和中断转换服务(ITS)事件的监控能力&#xff…...

Openclaw多智能体管理器:五步构建飞书AI协作团队

1. 项目概述:从零构建你的飞书多智能体协作团队 如果你正在寻找一种高效、可视化的方式来管理和部署基于飞书的AI智能体团队,那么Openclaw Multi-Agent Manager(以下简称“管理器”)绝对值得你花时间研究。这个项目本质上是一个本…...

080、Python性能优化:代码 profiling 与调试

080、Python性能优化:代码 profiling 与调试 从一次深夜告警说起 上周三凌晨两点,监控系统突然报警——某个核心接口的响应时间从平均 200ms 飙升至 8 秒。服务器 CPU 直接冲上 90%,业务群瞬间炸锅。我一边重启服务临时止血,一边拉出最近上线的代码版本。问题出在一个刚上…...

基于MCP协议与Node.js构建AI工具服务器:从原理到实践

1. 项目概述:一个为AI应用量身定制的MCP模板最近在折腾AI应用开发,特别是想给大语言模型(LLM)接上各种外部工具和API时,发现了一个绕不开的“中间件”——Model Context Protocol,也就是MCP。简单来说&…...

杰理之使用PB7应注意与DACR的绑定【篇】

○ 如果配置错了,使用 PB7 做高低输出 DAC L 会有一个底噪出来...

基于ESP32与FreeRTOS的自平衡机器人:从PID控制到实时系统实战

1. 项目概述:从零到一,打造一个会“思考”的自平衡机器人如果你对嵌入式开发、机器人控制或者ESP32感兴趣,并且曾经看着那些在赛道上飞驰或者稳稳站立的机器人感到好奇,那么你找对地方了。今天我要分享的,不是一个简单…...

AI SDK 集成 Codex CLI:解锁 GPT-5 模型的自主工具执行能力

1. 项目概述:AI SDK 与 Codex CLI 的桥梁如果你和我一样,既是 Vercel AI SDK 的深度用户,又对 OpenAI 的 Codex CLI 那强大的自主执行能力垂涎三尺,那么你肯定也遇到过那个经典的“两难困境”:AI SDK 提供了优雅、统一…...

CursorMD:AI驱动的文档架构师,实现文档驱动开发新范式

1. 项目概述:当AI助手成为你的专属文档架构师如果你和我一样,每天都在和代码打交道,那你肯定也经历过这样的场景:项目启动时雄心勃勃,准备大干一场,结果第一步就被“写文档”这件事给绊住了。VISION文档怎么…...

基于MCP协议构建AI Agent与Meta广告API的自动化桥梁

1. 项目概述:一个连接Meta广告API与AI代理的桥梁 最近在折腾AI Agent(智能体)和自动化工作流,发现一个痛点:很多营销、运营相关的Agent,在处理广告投放、数据分析这类具体业务时,总是“隔靴搔痒…...

AI驱动终端界面设计:awesome-tui-design项目解析与实践

1. 项目概述:当AI遇上终端界面设计如果你和我一样,是个常年泡在终端里的开发者,肯定有过这样的体验:想用AI(比如Claude、Cursor或者GitHub Copilot)帮你快速搭建一个命令行工具(CLI)…...

CANN/runtime系统信息查询示例

2_system_info 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 概述 本示例演示 Runtime 基础系统信息查询与常用数据类型工具接口,适合作为设备查询类示例前的预热样例。 功能说明 该样…...

机器学习静修指南:从数学基础到工程实践的系统学习路径

1. 项目概述:当机器学习遇上“静修”最近在GitHub上看到一个挺有意思的项目,叫ml-retreat,作者是hesamsheikh。光看名字,你可能会有点摸不着头脑——“机器学习静修”?这听起来不像是一个传统的代码库,更像…...

CANN OpenVLA昇腾推理指南

OpenVLA on 310P具身智能VLA大模型昇腾使用指南 【免费下载链接】cann-recipes-embodied-intelligence 本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence …...

纯Go实现Llama大模型推理引擎:llama.go架构解析与部署实践

1. 项目概述与核心价值最近在折腾大语言模型本地部署和推理时,发现了一个挺有意思的项目——gitctrlx/llama.go。简单来说,这是一个用纯Go语言实现的Llama系列大模型推理引擎。如果你和我一样,对在本地跑大模型感兴趣,但又不想被P…...

从失效的Cursor试用重置工具看自动化脚本与API逆向工程

1. 项目背景与核心思路解析最近在开发者圈子里,Cursor 这款 AI 驱动的代码编辑器热度一直很高。它集成了强大的 AI 助手,能直接理解代码上下文、生成代码片段甚至重构整个函数,对提升开发效率的帮助是实实在在的。不过,它的高级功…...

电容式旋转编码器:高精度运动控制新标准

1. 电容式旋转编码器:重新定义运动控制精度与可靠性 在工业自动化领域,电机控制系统的精度直接决定了整个生产线的品质与效率。作为闭环控制的核心传感器,旋转编码器的性能往往成为系统瓶颈。传统解决方案中,工程师们不得不在光学…...