多实例支持【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem概述SHMEM 多实例能力允许在单个进程内创建多个独立 SHMEM 实例。每个实例拥有独立的通信域、内存空间和同步资源适用于以下场景多通信域共存单个进程中多个任务域需要独立 SHMEM 上下文资源隔离不同任务/模块之间隔离 SHMEM 资源避免相互干扰弹性扩缩不同实例创建/释放互不影响动态实例管理运行时按instance_id创建/释放实例核心概念实例Instance一个 SHMEM 实例包含一组完整初始化状态典型包括独立的通信域Team World独立的共享内存堆Heap独立的同步资源Sync Pool/Counter独立的 State/Bootstrap/MemoryManager 运行时快照实例标识Instance ID当前仓库使用instance_iduint64_t标识实例。实例生命周期由初始化属性和finalize接口管理。Context 切换SHMEM 通过全局变量 swap 机制完成实例切换切换时先回写当前实例的全局状态再装载目标实例的全局状态。架构设计┌─────────────────────────────────────────────────────────┐ │ 单进程 (Process) │ │ ┌───────────────────────────────────────────────────┐ │ │ │ SHMEM Runtime (全局) │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ │ │ │ │ │ Instance 0 │ │ Instance 1 │ │ Instance N│ │ │ │ │ │ ┌───────┐ │ │ ┌───────┐ │ │ ┌──────┐ │ │ │ │ │ │ │ Team │ │ │ │ Team │ │ │ │ Team │ │ │ │ │ │ │ │ Heap │ │ │ │ Heap │ │ │ │ Heap │ │ │ │ │ │ │ │ Sync │ │ │ │ Sync │ │ │ │ Sync │ │ │ │ │ │ │ │ State │ │ │ │ State │ │ │ │ State│ │ │ │ │ │ │ └───────┘ │ │ └───────┘ │ │ └──────┘ │ │ │ │ │ └─────────────┘ └─────────────┘ └───────────┘ │ │ │ └───────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘关键设计决策设计点当前实现方案说明实例隔离独立aclshmem_context快照每个实例保存独立的state、host_state、boot_handle、memory_manager等Context 管理全局变量 swap通过aclshmemx_instance_ctx_set切换实例标识instance_id(uint64_t)位于aclshmemx_init_attr_t并用于aclshmem_finalize(instance_id)Device 侧路由instance_id 1kernel 侧通过 硬编码地址 访问对应实例的state快速上手当前仓库 API1. 创建实例#include shmem.h aclshmemx_init_attr_t attr; attr.my_pe pe_id; attr.n_pes pe_size; attr.local_mem_size 1024UL * 1024UL * 1024UL; attr.ip_port tcp://x.x.x.x:0 // 预先置为0,后续会分配 attr.comm_args nullptr; // default mode attr.instance_id 2; int ret aclshmemx_init_attr(ACLSHMEMX_INIT_WITH_DEFAULT, attr);2. 切换到目标实例 Contextaclshmemx_instance_ctx_set(2); // 后续 SHMEM API 均作用于实例 2 void *ptr aclshmem_malloc(1024); aclshmem_free(ptr);3. 获取当前实例aclshmem_instance_ctx *ctx aclshmemx_instance_ctx_get(); // 当前主要用于读取 id其他能力见上一节 uint64_t cur_id (ctx nullptr) ? 0 : ctx-id;4. 释放实例aclshmem_finalize(2);也可直接参照examples/multi_instance目录规格与限制按代码实现项目规格instance_id类型uint64_t默认实例instance_id 0PE 上限ACLSHMEM_MAX_PES 16384本地内存上限ACLSHMEM_MAX_LOCAL_SIZE 40GB非 0 实例 Team 行为初始化时仅保留 world team 槽位team split/translate/get_config 等返回ACLSHMEM_NOT_SUPPORTEDip_port最大长度ACLSHMEM_MAX_IP_PORT_LEN 64含结尾\0default 多实例端口范围依赖SHMEM_INSTANCE_PORT_RANGEstart:enddefault 端口分配规则输入端口必须是0实际端口 start_port instance_iddefault 可用实例 ID 范围instance_id end_port - start_port含边界环境变量与运行要求Kernel侧使用要求编译时必须类似add_compile_definitions(MULTI_INSTANCE)添加MULTI_INSTANCE编译宏多实例使用时必须在算子开头使用aclshmemx_instance_ctx_set(id)来指定当前实例算子执行时可以做实例间切换default 多实例模式必须设置SHMEM_INSTANCE_PORT_RANGE格式start:end初始化属性中的ip_port端口必须为0例如(attr.ip_port tcp://x.x.x.x:0)unique id 模式仍遵循现有SHMEM_UID_SESSION_ID/SHMEM_UID_SOCK_IFNAME规则注意事项重复创建同一instance_id时会有WARN日志提示并立即返回不会重复创建。aclshmem_finalize(instance_id)会先切换到目标实例再执行释放避免误释放。实例上下文相关接口路径由互斥锁保护。与单实例模式对比特性单实例模式多实例模式初始化标识默认instance_id0instance_id0资源隔离全局共享按实例隔离上下文切换不需要需要aclshmemx_instance_ctx_set生命周期管理aclshmem_finalize()aclshmem_finalize(instance_id)Team 高级操作支持仅instance_id0支持相关代码与文档Host 初始化与多实例实现src/host/init/shmem_init.cppDevice 多实例状态路由src/device/shmemi_device_common.hppTeam 多实例限制逻辑src/host/team/shmem_team.cpp对应示例examples/multi_instance最后更新2026-03-25【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
CANN/shmem 多实例支持
发布时间:2026/7/5 7:47:39
多实例支持【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem概述SHMEM 多实例能力允许在单个进程内创建多个独立 SHMEM 实例。每个实例拥有独立的通信域、内存空间和同步资源适用于以下场景多通信域共存单个进程中多个任务域需要独立 SHMEM 上下文资源隔离不同任务/模块之间隔离 SHMEM 资源避免相互干扰弹性扩缩不同实例创建/释放互不影响动态实例管理运行时按instance_id创建/释放实例核心概念实例Instance一个 SHMEM 实例包含一组完整初始化状态典型包括独立的通信域Team World独立的共享内存堆Heap独立的同步资源Sync Pool/Counter独立的 State/Bootstrap/MemoryManager 运行时快照实例标识Instance ID当前仓库使用instance_iduint64_t标识实例。实例生命周期由初始化属性和finalize接口管理。Context 切换SHMEM 通过全局变量 swap 机制完成实例切换切换时先回写当前实例的全局状态再装载目标实例的全局状态。架构设计┌─────────────────────────────────────────────────────────┐ │ 单进程 (Process) │ │ ┌───────────────────────────────────────────────────┐ │ │ │ SHMEM Runtime (全局) │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ │ │ │ │ │ Instance 0 │ │ Instance 1 │ │ Instance N│ │ │ │ │ │ ┌───────┐ │ │ ┌───────┐ │ │ ┌──────┐ │ │ │ │ │ │ │ Team │ │ │ │ Team │ │ │ │ Team │ │ │ │ │ │ │ │ Heap │ │ │ │ Heap │ │ │ │ Heap │ │ │ │ │ │ │ │ Sync │ │ │ │ Sync │ │ │ │ Sync │ │ │ │ │ │ │ │ State │ │ │ │ State │ │ │ │ State│ │ │ │ │ │ │ └───────┘ │ │ └───────┘ │ │ └──────┘ │ │ │ │ │ └─────────────┘ └─────────────┘ └───────────┘ │ │ │ └───────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘关键设计决策设计点当前实现方案说明实例隔离独立aclshmem_context快照每个实例保存独立的state、host_state、boot_handle、memory_manager等Context 管理全局变量 swap通过aclshmemx_instance_ctx_set切换实例标识instance_id(uint64_t)位于aclshmemx_init_attr_t并用于aclshmem_finalize(instance_id)Device 侧路由instance_id 1kernel 侧通过 硬编码地址 访问对应实例的state快速上手当前仓库 API1. 创建实例#include shmem.h aclshmemx_init_attr_t attr; attr.my_pe pe_id; attr.n_pes pe_size; attr.local_mem_size 1024UL * 1024UL * 1024UL; attr.ip_port tcp://x.x.x.x:0 // 预先置为0,后续会分配 attr.comm_args nullptr; // default mode attr.instance_id 2; int ret aclshmemx_init_attr(ACLSHMEMX_INIT_WITH_DEFAULT, attr);2. 切换到目标实例 Contextaclshmemx_instance_ctx_set(2); // 后续 SHMEM API 均作用于实例 2 void *ptr aclshmem_malloc(1024); aclshmem_free(ptr);3. 获取当前实例aclshmem_instance_ctx *ctx aclshmemx_instance_ctx_get(); // 当前主要用于读取 id其他能力见上一节 uint64_t cur_id (ctx nullptr) ? 0 : ctx-id;4. 释放实例aclshmem_finalize(2);也可直接参照examples/multi_instance目录规格与限制按代码实现项目规格instance_id类型uint64_t默认实例instance_id 0PE 上限ACLSHMEM_MAX_PES 16384本地内存上限ACLSHMEM_MAX_LOCAL_SIZE 40GB非 0 实例 Team 行为初始化时仅保留 world team 槽位team split/translate/get_config 等返回ACLSHMEM_NOT_SUPPORTEDip_port最大长度ACLSHMEM_MAX_IP_PORT_LEN 64含结尾\0default 多实例端口范围依赖SHMEM_INSTANCE_PORT_RANGEstart:enddefault 端口分配规则输入端口必须是0实际端口 start_port instance_iddefault 可用实例 ID 范围instance_id end_port - start_port含边界环境变量与运行要求Kernel侧使用要求编译时必须类似add_compile_definitions(MULTI_INSTANCE)添加MULTI_INSTANCE编译宏多实例使用时必须在算子开头使用aclshmemx_instance_ctx_set(id)来指定当前实例算子执行时可以做实例间切换default 多实例模式必须设置SHMEM_INSTANCE_PORT_RANGE格式start:end初始化属性中的ip_port端口必须为0例如(attr.ip_port tcp://x.x.x.x:0)unique id 模式仍遵循现有SHMEM_UID_SESSION_ID/SHMEM_UID_SOCK_IFNAME规则注意事项重复创建同一instance_id时会有WARN日志提示并立即返回不会重复创建。aclshmem_finalize(instance_id)会先切换到目标实例再执行释放避免误释放。实例上下文相关接口路径由互斥锁保护。与单实例模式对比特性单实例模式多实例模式初始化标识默认instance_id0instance_id0资源隔离全局共享按实例隔离上下文切换不需要需要aclshmemx_instance_ctx_set生命周期管理aclshmem_finalize()aclshmem_finalize(instance_id)Team 高级操作支持仅instance_id0支持相关代码与文档Host 初始化与多实例实现src/host/init/shmem_init.cppDevice 多实例状态路由src/device/shmemi_device_common.hppTeam 多实例限制逻辑src/host/team/shmem_team.cpp对应示例examples/multi_instance最后更新2026-03-25【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考