CANN Runtime统一寻址API

发布时间:2026/10/23 15:32:23

CANN Runtime统一寻址API 11-05 统一寻址【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本章节描述统一/托管内存Unified/Managed Memory接口用于自动迁移的内存分配、预取及属性查询。aclError aclrtMemAllocManaged(void **ptr, uint64_t size, uint32_t flag)申请统一虚拟内存Unified Virtual Memory, UVM通过*ptr返回已申请内存的指针且申请的内存大小会根据用户指定的size向上按2M对齐。aclError aclrtMemManagedAdvise(const void *const ptr, uint64_t size, aclrtMemManagedAdviseType advise, aclrtMemManagedLocation location)管理统一虚拟内存Unified Virtual Memory, UVM的策略属性既支持设置策略属性也支持取消设置。aclError aclrtMemManagedGetAttr(aclrtMemManagedRangeAttribute attribute, const void *ptr, size_t size, void *data, size_t dataSize)查询指定大小的UVM内存的策略属性值。aclError aclrtMemManagedGetAttrs(aclrtMemManagedRangeAttribute *attributes, size_t numAttributes, const void *ptr, size_t size, void **data, size_t *dataSizes)查询指定大小的UVM内存的策略属性值。aclError aclrtMemManagedPrefetchAsync(const void* ptr, size_t size, aclrtMemManagedLocation location, uint32_t flags, aclrtStream stream)管理统一虚拟内存Unified Virtual Memory, UVM的预取。aclError aclrtMemManagedPrefetchBatchAsync(const void** ptrs, size_t* sizes, size_t count, aclrtMemManagedLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, uint64_t flags, aclrtStream stream)管理统一虚拟内存Unified Virtual Memory, UVM的批量预取。aclError aclrtMemP2PMap(void *devPtr, size_t size, int32_t dstDevId, uint64_t flags)本接口用于建立同一进程内两个Device之间的内存页表映射以实现跨Device的内存访问但在进行此操作前需先调用aclrtDeviceEnablePeerAccess接口以开启两个Device间的数据交互。aclError aclrtPointerGetAttributes(const void *ptr, aclrtPtrAttributes *attributes)获取内存属性信息包括内存是位于Host还是Device、页表大小等信息。aclrtMemAllocManagedaclError aclrtMemAllocManaged(void **ptr, uint64_t size, uint32_t flag)产品支持情况Ascend 950PR/Ascend 950DT不支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品不支持Atlas 训练系列产品不支持IPV350不支持功能说明申请统一虚拟内存Unified Virtual Memory, UVM通过*ptr返回已申请内存的指针且申请的内存大小会根据用户指定的size向上按2M对齐。使用本接口申请的内存若需释放内存需调用aclrtFree接口。通过本接口申请的内存仅在实际访问时才会建立虚拟内存到物理内存的页表映射关系。如果内存访问发生在Host上则映射Host的物理内存如果内存访问发生在Device上则映射Device的物理内存。后续使用该内存时每当访问内存的对象发生变更例如从Host变更为Device从一个Device变更为另一个Device等在新的访问对象上会触发缺页中断需要将内存数据迁移到新的访问对象上并重新建立虚拟内存到物理内存的页表映射关系此时前一个访问对象上的页表映射关系将失效、物理内存也会释放。若频繁的更换访问对象则会频繁触发缺页中断、频繁迁移内存数据和重新建立页表映射关系影响性能。为了减少这种情况带来的性能开销Runtime还提供了aclrtMemManagedAdvise接口来设置内存管理策略。参数说明参数名输入/输出说明ptr输出“已分配内存的指针”的指针由于Host和Device虚拟地址统一编址该参数不区分申请位置。size输入内存大小单位Byte。size不能为0单个应用进程最大可申请3T UVM类型的虚拟内存。flag输入内存标识。当前flag仅支持设置为ACL_RT_MEM_ATTACH_GLOBAL所对应数值为1。设置为ACL_RT_MEM_ATTACH_GLOBAL后通过本接口申请的内存在Device和Host侧都可以被访问。宏定义如下#define ACL_RT_MEM_ATTACH_GLOBAL (0x01U)返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明本接口分配的内存不会进行对内容进行初始化建议在使用内存前先调用aclrtMemset接口先初始化内存清除内存中的随机数。aclrtMemManagedAdviseaclError aclrtMemManagedAdvise(const void *const ptr, uint64_t size, aclrtMemManagedAdviseType advise, aclrtMemManagedLocation location)产品支持情况Ascend 950PR/Ascend 950DT不支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品不支持Atlas 训练系列产品不支持IPV350不支持功能说明管理统一虚拟内存Unified Virtual Memory, UVM的策略属性既支持设置策略属性也支持取消设置。本接口操作的内存必须是通过aclrtMemAllocManaged接口申请的内存设置的策略属性值可使用aclrtMemManagedGetAttr和aclrtMemManagedGetAttrs接口查询。参数说明参数名输入/输出说明ptr输入待设置属性的内存地址地址范围必须在UVM内存范围之内即[0x90000000000ULL, 0x90000000000ULL3T)。size输入内存大小单位Byte要求2MB对齐。取值范围为(0, 3T]。advise输入内存策略属性。类型定义请参见aclrtMemManagedAdviseType。location输入物理内存的位置信息location参数包含id和type两个成员。类型定义请参见aclrtMemManagedLocation。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemManagedGetAttraclError aclrtMemManagedGetAttr(aclrtMemManagedRangeAttribute attribute, const void *ptr, size_t size, void *data, size_t dataSize)产品支持情况Ascend 950PR/Ascend 950DT不支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品不支持Atlas 训练系列产品不支持IPV350不支持功能说明查询指定大小的UVM内存的策略属性值。本接口操作的内存必须是通过aclrtMemAllocManaged接口分配的。若查询的这段内存范围内的策略属性值不一致则查询结果为无效值。与aclrtMemManagedGetAttrs接口不同本接口仅支持一次查询一个内存策略属性的值。参数说明参数名输入/输出说明attribute输入待查询的属性。类型定义请参见aclrtMemManagedRangeAttribute。ptr输入待查询属性的内存首地址范围必须在UVM内存范围之内即[0x90000000000ULL, 0x90000000000ULL3T)。size输入待查询属性的内存大小单位Byte。取值范围为(0, 3T]。data输出查询结果。dataSize输入存放查询结果的内存大小单位Byte。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemManagedGetAttrsaclError aclrtMemManagedGetAttrs(aclrtMemManagedRangeAttribute *attributes, size_t numAttributes, const void *ptr, size_t size, void **data, size_t *dataSizes)产品支持情况Ascend 950PR/Ascend 950DT不支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品不支持Atlas 训练系列产品不支持IPV350不支持功能说明查询指定大小的UVM内存的策略属性值。本接口操作的内存必须是通过aclrtMemAllocManaged接口分配的。若查询的这段内存范围内的策略属性值不一致则查询结果为无效值。与aclrtMemManagedGetAttr接口不同本接口支持一次查询多个内存策略属性的值。参数说明参数名输入/输出说明attributes输入待查询的属性数组。类型定义请参见aclrtMemManagedRangeAttribute。numAttributes输入待查询的属性数组大小。ptr输入待查询属性的内存首地址范围必须在UVM内存范围之内即[0x90000000000ULL, 0x90000000000ULL3T)。size输入待查询属性的内存大小单位Byte。取值范围为(0, 3T]。data输出查询结果数组。dataSizes输入存放查询结果数组的内存大小单位Byte。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemManagedPrefetchAsyncaclError aclrtMemManagedPrefetchAsync(const void* ptr, size_t size, aclrtMemManagedLocation location, uint32_t flags, aclrtStream stream)产品支持情况Ascend 950PR/Ascend 950DT不支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品不支持Atlas 训练系列产品不支持IPV350不支持功能说明管理统一虚拟内存Unified Virtual Memory, UVM的预取。本接口操作的内存必须是通过aclrtMemAllocManaged接口分配的。本接口是异步接口调用接口仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存预取的任务已执行完成。参数说明参数名输入/输出说明ptr输入待预取的内存地址地址范围必须在UVM内存范围内存即[0x90000000000ULL, 0x90000000000ULL3T)。size输入待预取的内存长度单位Byte要求2MB对齐。取值范围为(0, 3T]。location输入物理内存的位置信息location参数包含id和type两个成员。类型定义请参见aclrtMemManagedLocation。flags输入预留参数。当前固定配置为0。stream输入指定执行内存预取任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemManagedPrefetchBatchAsyncaclError aclrtMemManagedPrefetchBatchAsync(const void** ptrs, size_t* sizes, size_t count, aclrtMemManagedLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, uint64_t flags, aclrtStream stream)产品支持情况Ascend 950PR/Ascend 950DT不支持Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品不支持Atlas 训练系列产品不支持IPV350不支持功能说明管理统一虚拟内存Unified Virtual Memory, UVM的批量预取。本接口操作的内存必须是通过aclrtMemAllocManaged接口分配的。本接口是异步接口调用接口仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存预取的任务已执行完成。参数说明参数名输入/输出说明ptrs输入待预取的内存地址数组每个地址范围必须在UVM内存范围内存即[0x90000000000ULL, 0x90000000000ULL3T)。sizes输入内存预取长度数组用于存放每一段要预取的UVM内存长度单位Byte。每段长度要求2MB对齐取值范围为(0, 3T]。count输入ptrs和sizes数组长度。prefetchLocs输入物理内存的位置信息数组每个位置信息都包含id和type两个成员。类型定义请参见aclrtMemManagedLocation。prefetchLocIdxs输入物理内存预取信息索引数组用于指定prefetchLocs数组中的每个物理地址适用的预取范围。对于prefetchLocs[k]指定的物理地址将预取ptrs数组中从第prefetchLocIdxs[k]个下标到第prefetchLocIdxs[k1]-1个下标指向元素的UVM内存地址同时对于prefetchLocs[numPrefetchLocs-1]指定的物理地址将预取ptrs数组中从第prefetchLocs[numPrefetchLocs-1]个下标到第count-1个下标指向元素的UVM内存地址。numPrefetchLocs输入prefetchLocs和prefetchLocIdxs数组的长度。flags输入预留参数。当前固定配置为0。stream输入指定执行内存预取任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明将ptrs中指定的数据预取到prefetchLocs中指定的物理内存区域每个预取操作的大小由sizes指定ptrs、sizes这两个数组必须具有count指定的相同长度。在预取批处理操作中prefetchLocs数组中的每个条目可应用与多个预取操作具体通过prefetchLocIdxs数组指定对应物理地址区域需要预取的起始UVM地址索引。prefetchLocs和prefetchLocIdxs这两个数组必须具有numPrefetchLocs指定的相同长度。例如若批处理包含ptrs/sizes列出的10个预取操作其中前6个需要被预取到同一块物理内存区域后4个需要被预取到另一块物理内存区域则numPrefetchLocs为2prefetchLocIdxs为{0,6}prefetchLocs包含两组物理内存的位置信息。注意prefetchLocIdxs的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于count。此外numPrefetchLocs必须小于等于count。aclrtMemP2PMapaclError aclrtMemP2PMap(void *devPtr, size_t size, int32_t dstDevId, uint64_t flags)产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品支持Atlas 训练系列产品支持IPV350不支持功能说明本接口用于建立同一进程内两个Device之间的内存页表映射以实现跨Device的内存访问但在进行此操作前需先调用aclrtDeviceEnablePeerAccess接口以开启两个Device间的数据交互。调用本接口建立页表映射后跨Device访问时不会出现内存缺页的问题首次访问内存时性能更优。参数说明参数名输入/输出说明devPtr输入Device内存地址例如调用aclrtMalloc接口申请的Device内存此处指共享内存提供方的内存地址。size输入内存大小单位Byte。dstDevId输入Device ID此处指共享内存使用方的ID。flags输入预留参数当前固定设置为0。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtPointerGetAttributesaclError aclrtPointerGetAttributes(const void *ptr, aclrtPtrAttributes *attributes)产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品支持Atlas 推理系列产品支持Atlas 训练系列产品支持IPV350不支持功能说明获取内存属性信息包括内存是位于Host还是Device、页表大小等信息。参数说明参数名输入/输出说明ptr输入内存地址。此处不允许传入通过aclrtHostRegister接口映射的Device地址也不允许传入通过aclrtHostGetDevicePointer接口获取的Device地址否则会导致未定义行为。attributes输出内存属性信息。类型定义请参见aclrtPtrAttributes。返回值说明返回0表示成功返回其他值表示失败请参见aclError。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/22 6:36:48

5分钟实现跨平台数据采集:MediaCrawler开源工具的完整指南

5分钟实现跨平台数据采集:MediaCrawler开源工具的完整指南 【免费下载链接】MediaCrawler 项目地址: https://gitcode.com/GitHub_Trending/mediacr/MediaCrawler 你是否曾为获取小红书、抖音、微博等平台的数据而烦恼?传统的爬虫开发需要逆向工…

2026/10/23 16:57:42

突破分区维护瓶颈:pg_partman 5.x版本升级实战指南

突破分区维护瓶颈:pg_partman 5.x版本升级实战指南 【免费下载链接】pg_partman Partition management extension for PostgreSQL 项目地址: https://gitcode.com/gh_mirrors/pg/pg_partman PostgreSQL数据库管理员在面对海量数据分区管理时,常常…

2026/10/23 21:06:49

Python Excel读写避坑指南:openpyxl与pandas协同实战

简介:本资源是一套面向Python初学者与数据处理入门者的Excel操作实战脚本集,聚焦解决日常办公中批量读取、筛选、写入Excel文件的核心需求。压缩包共4个Python源文件,总大小仅6KB,轻量易学,全部为可直接运行的.py脚本&…

2026/10/23 21:06:49

智能选课系统源码拆解:Spring Boot架构与冲突检测算法

简介:这是一份基于ASP.NET WebForms平台开发的智能选课系统完整项目源码,面向计算机专业学生、课程设计选题者以及需要搭建教务选课平台的技术人员。项目围绕学生、教师、管理员三类角色展开,实现用户登录与权限管理、课程信息展示、选课与退…

2026/10/23 21:06:49

硬盘安装凤凰OS:在Windows电脑上获得真机级安卓体验

1. 项目概述:为什么“硬盘安装凤凰OS”突然火了?最近在多个技术社区和数码论坛里,频繁刷到“凤凰OS硬盘安装”“Windows双系统装Phoenix OS”这类关键词,尤其搭配“吃鸡”“电脑玩手游”“安卓模拟器替代方案”等后缀,…

2026/10/23 21:06:49

VB.NET邮件群发源码:生产级SMTP实现与模板引擎

简介:这是一份基于VB.NET开发的邮件群发系统源码,面向初学者与中小型应用开发者,解决批量发送营销通知、系统提醒等场景下的SMTP邮件自动化需求。资源共128个文件,包含15个核心VB源文件(.vb)、9个可复用DLL…

2026/10/23 21:06:49

微信小程序+SSM求职招聘系统:从选型到答辩的完整实现

简介:这份资源是一套基于微信小程序的求职招聘系统完整源码,采用微信小程序客户端加Java后台服务器端与MySQL数据库的架构,适合计算机专业学生做课程设计、毕业设计或SSM升级SpringBoot的练手项目。系统区分求职者、商家和管理员三种身份&…

2026/10/23 21:01:48

C++八股文高频考点:基础、内存管理与面向对象核心解析

简介:这份C面试八股文深度总结源自作者备战22届秋招并斩获华为、荣耀、联发科、海康威视等offer的实战积累,面向准备C方向校招与社招的开发者,系统梳理C基础、操作系统、计算机网络、数据库等高频考点。内容覆盖C三大特性、C与C区别、struct与…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑