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

CANN运行时Stream管理

Stream管理【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtimeStream概念Stream描述了一个在Host下发并在Device上执行的任务队列。在同一个Stream中任务按照进入队列的顺序依次执行。当硬件资源充足时不同Stream上的任务会被调度到不同的硬件资源上并行执行。当硬件资源不足时不同Stream上的任务可能串行执行。Stream可以配置优先级、遇错即停、persistent等多种属性。优先级会影响不同Stream上的任务的执行顺序。通常情况下高优先级Stream上的任务会优先于低优先级Stream上的任务执行。如果Stream配置了persistent属性则下发在其上的任务不会被立即执行执行完成后也不会被立即销毁。Persistent Stream适用于模型运行实例构建场景。相对于主机线程Stream上的任务是异步执行的。主机线程可以使用Device同步接口来等待当前Context下所有Stream上的任务全部执行完成或者使用Stream同步接口来等待Stream上的任务全部执行完成。Runtime中的Stream均为非阻塞式Stream默认Stream不会跟显式创建的Stream进行隐式同步。Stream创建与销毁调用aclrtCreateStream创建Stream得到的aclrtStream对象作为后续的内存异步复制、Stream同步、Kernel执行等接口的Stream入参。显式创建的Stream需要调用aclrtDestroyStream接口显式销毁。销毁Stream时如果Stream上有未完成的任务则会等待任务完成后再销毁Stream。以下是创建Stream并在Stream上下发计算任务的代码示例不可以直接拷贝编译运行仅供参考。完整样例代码请参见Link。// 显式创建一个Stream aclrtStream stream; aclrtCreateStream(stream); // 在Stream上下发Host-Device复制任务、MyKernel任务、和Device-Host复制任务 aclrtMemcpyAsync(devPtr, devSize, hostPtr, hostSize, ACL_MEMCPY_HOST_TO_DEVICE, stream); myKernel8, nullptr, stream(); aclrtMemcpyAsync(hostPtr, hostSize, devPtr, devSize, ACL_MEMCPY_DEVICE_TO_HOST, stream); // 销毁Stream等待Device-Host复制任务执行完成后销毁 aclrtDestroyStream(stream);默认Stream在调用aclrtSetDevice接口或aclrtCreateContext接口时Runtime会自动创建一个默认Stream。每个Context拥有一个默认Stream。如果不同的Host线程使用相同的Context它们将共享同一个默认Stream。对于需要传入Stream参数的API如aclrtMemcpyAsync如果使用默认Stream作为入参则直接传入nullptr。对于没有Stream入参的API如aclrtMemcpy则不使用默认Stream。默认Stream不能显式调用aclrtDestroyStream接口销毁。在调用aclrtResetDevice或aclrtResetDeviceForce接口释放资源时默认Stream会被自动销毁。以下是在默认Stream上下发计算任务的代码示例不可以直接拷贝编译运行仅供参考。// 指定Device接口内部自动创建默认Stream aclrtSetDevice(0); // 在默认stream上下发Host-Device复制任务、MyKernel任务、和Device-Host复制任务 aclrtMemcpyAsync(devPtrIn, size, hostPtr, hostSize, ACL_MEMCPY_HOST_TO_DEVICE, nullptr); myKernel8, nullptr, nullptr(devPtrIn, devPtrOut, size); aclrtMemcpyAsync(hostPtr, hostSize, devPtrOut, size, ACL_MEMCPY_DEVICE_TO_HOST, nullptr); // 同步默认stream aclrtStreamSynchronize(nullptr); // 复位Device接口内部自动销毁默认Stream aclrtResetDevice(0);显式同步对于异步任务接口主机线程调用异步任务接口后仅代表下发任务不代表任务执行完成。用户需要显式调用设备同步、流同步等显式同步接口等待任务完成。调用此类显式同步接口后主机线程会阻塞直到相关的任务执行完成。设备同步aclrtSynchronizeDevice阻塞当前主机线程直到当前Device的当前Context中所有显式或隐式创建的Stream完成已下发的所有任务。以下是设备同步代码示例不可以直接拷贝编译运行仅供参考。// 指定Device aclrtSetDevice(0); // 创建Stream aclrtStream stream; aclrtCreateStream(stream); // 在Stream上下发任务 ...... // 阻塞应用程序运行直到正在运算中的Device完成运算 aclrtSynchronizeDevice(); // 资源销毁 aclrtDestroyStream(stream); aclrtResetDevice(0);流同步aclrtSynchronizeStream阻塞当前主机线程直到指定的Stream完成已下发的所有任务。以下是流同步的代码示例不可以直接拷贝编译运行仅供参考。// 创建Stream aclrtStream stream; aclrtCreateStream(stream); // 在Stream上下发任务 ...... // 调用aclrtSynchronizeStream接口阻塞应用程序运行直到指定Stream中的所有任务都完成。 aclrtSynchronizeStream(stream); // Stream使用结束后显式销毁Stream aclrtDestroyStream(stream);此外用户可以使用aclrtStreamQuery查询stream上的任务是否全部执行完成。Host回调任务CANN为CPU和NPU之间的异步协作提供了灵活的方式。用户可以使用aclrtLaunchHostFunc在Stream的任意位置插入一个Host回调任务。当本Stream上所有前序任务执行完成后该Host回调任务会被自动执行并且会阻塞本Stream上的后续任务执行。回调函数不能直接或者间接调用CANN Runtime API否则可能会导致错误或死锁。以下是在Stream上插入一个Host回调任务的代码示例不可以直接拷贝编译运行仅供参考。完整样例代码请参见Link。// Host回调任务 void myHostCallback(void *args) { printf(In MyHostCallback.\n); // myKernel1完成后的处理阻塞MyKernel2的执行 ...... } ...... // 创建Stream aclrtStream stream; aclrtCreateStream(stream); // 在Stream上下发任务 aclrtMemcpyAsync(devPtrIn, size, hostPtr, hostSize, ACL_MEMCPY_HOST_TO_DEVICE, stream); myKernel18, nullptr, stream(devPtrIn, devPtrOut, size); aclrtLaunchHostFunc(stream, myHostCallback, nullptr); myKernel28, nullptr, stream(devPtrOut, size); aclrtMemcpyAsync(hostPtr, hostSize, devPtrOut, size, ACL_MEMCPY_DEVICE_TO_HOST, stream); // 阻塞应用程序运行直到指定Stream中的所有任务都完成 aclrtSynchronizeStream(stream); // 销毁Stream aclrtDestroyStream(stream);配置Stream优先级在运行时Device上的调度器会依据各个Stream的优先级来决定任务的执行顺序。高优先级Stream中待执行的任务将优先于低优先级Stream中的任务得到调度但不会抢占已处于运行状态的低优先级任务。Device在执行过程中不会动态重新评估任务队列因此提升Stream的优先级不会中断正在执行的任务。Stream的优先级主要用于影响任务的调度顺序而非强制规定严格的执行序列。用户可以通过调整Stream的优先级来引导任务的执行顺序但无法以此强制保证任务间的绝对顺序。调用aclrtCreateStreamWithConfig接口创建Stream时可指定Stream的优先级。允许设置的优先级范围可以通过aclrtDeviceGetStreamPriorityRange接口获取最小优先级、最大优先级。以下为示例代码不可以直接拷贝编译运行仅供参考。// 查询当前设备支持的Stream最小、最大优先级 aclrtDeviceGetStreamPriorityRange(leastPriority, greatestPriority); // 创建具有最高和最低优先级的Stream aclrtStream stream_high; aclrtStream stream_low; aclrtCreateStreamWithConfig(stream_high, greatestPriority, ACL_STREAM_FAST_LAUNCH); aclrtCreateStreamWithConfig(stream_low, leastPriority, ACL_STREAM_FAST_LAUNCH);Stream的优先级在Device范围内生效而不是在Context范围内生效。配置任务遇错即停CANN支持遇错即停模式ACL_STOP_ON_FAILURE和遇错继续模式ACL_CONTINUE_ON_FAILURE以支持不同应用对任务执行失败的差异化控制。默认为遇错继续模式。当Stream上的任务执行失败时如果配置了遇错即停模式ACL_STOP_ON_FAILURE则会停止执行该Context中所有Stream上的任务如果配置了遇错继续模式ACL_CONTINUE_ON_FAILURE则会继续执行Stream上的后续任务。调用aclrtSetStreamFailureMode接口指定调度模式的示例代码如下不可以直接拷贝编译运行仅供参考aclrtStream stream; aclrtCreateStream(stream); // 设置遇错即停模式 aclrtSetStreamFailureMode(stream, ACL_STOP_ON_FAILURE); ......也可以调用aclrtSetStreamAttribute接口指定调度模式的示例代码如下不可以直接拷贝编译运行仅供参考aclrtStream stream; aclrtCreateStream(stream); // 设置遇错继续模式 aclrtSetStreamAttribute(stream, ACL_STREAM_ATTR_FAILURE_MODE, ACL_CONTINUE_ON_FAILURE); ......Persistent流非Persistent流上的任务在执行完成之后从Stream出队。如果要多次执行某个任务需要在非Persistent流上多次下发该任务。Runtime提供了Persistent流支持任务的持久化。在Persistent流上下发的任务不会被立即执行任务执行完成后也不会被立即销毁。只有在销毁Persistent流时相关的任务才会被销毁。调用aclrtCreateStreamWithConfig接口创建Persistent流Persistent流需要与模型运行实例创建绑定支持模型的反复执行。以下为示例代码不可以直接拷贝编译运行仅供参考// 创建Persistent stream aclrtStream stream; aclrtCreateStreamWithConfig(stream, 0, ACL_STREAM_PERSISTENT); // 构建一个模型运行实例 aclmdlRI modelRI; aclmdlRIBuildBegin(modelRI, 0); // 把Persistent stream绑定到模型运行实例 aclmdlRIBindStream(modelRI, stream, ACL_MODEL_STREAM_FLAG_HEAD); // 在Persistent流上下发任务 ...... // 标记下发任务结束 aclmdlRIEndTask(modelRI, stream); // 结束模型运行实例构建 aclmdlRIBuildEnd(modelRI, nullptr); // 在默认stream多次执行模型运行实例 aclmdlRIExecute(modelRI, -1); aclmdlRIExecute(modelRI, -1); // 解除绑定 aclmdlRIUnbindStream(modelRI, stream); // 销毁资源 aclrtDestroyStream(stream); aclmdlRIDestroy(modelRI); ......【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN运行时Stream管理

Stream管理 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime Stream概念 Stream描述了一个在Host下发并在Device上执行的任务队列。 在同一个Stream中,任务按照进入队列的顺序依次执行。当…...

RankSpot 全自动 AI 智能体技术架构与核心机制深度解析

摘要 RankSpot 作为面向 SEO 内容生产的全自动 AI 智能体,构建了 “关键词研究 - 内容生成 - SEO 优化 - 自动发布 - 数据监控” 的端到端技术闭环。本文从技术底层出发,系统拆解 RankSpot 的整体架构、核心技术模块、智能体工作流、算法模型选型、数据…...

2026年程序员必看:6条AI独立开发实战路径,从0到月入3万+(收藏版)

本文分享了6条程序员转型AI独立开发的实战路径,包括AI工具开发、开源项目变现、外包接单、内容创作、AI Agent产品和垂直行业解决方案。每条路径都包含核心逻辑、真实案例、工具推荐、收入预估和避坑要点,旨在帮助程序员在6个月内实现月入3万的目标。文章…...

CANN/ops-transformer贡献指南

贡献指南 【免费下载链接】ops-transformer 本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-transformer 本项目欢迎广大开发者体验并参与贡献,在参与社区贡献之前。请参见cann…...

CANN/asc-devkit Arange索引生成函数

Arange 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/can…...

从引文指标到AI评估:构建科研影响力量化评估的完整方法论

1. 项目概述:当“影响力”变得可计算在学术圈和科研管理领域,我们每天都在谈论“影响力”。一篇论文的影响力有多大?一个学者的贡献如何衡量?一个研究机构的实力怎么评估?过去,这更多是一种基于同行声誉的模…...

CANN/atvoss Sqrt开平方运算API文档

Sqrt 【免费下载链接】atvoss ATVOSS(Ascend C Templates for Vector Operator Subroutines)是一套基于Ascend C开发的Vector算子库,致力于为昇腾硬件上的Vector类融合算子提供极简、高效、高性能、高拓展的编程方式。 项目地址: https://g…...

CANN/pyasc矩阵乘法迭代方法

asc.language.adv.Matmul.iterate 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc Matmul.iterate(en_parti…...

CANN/pypto concat操作

pypto.concat 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/A…...

Phi-4-mini-flash-reasoning一文详解:轻量级开源模型在教育SaaS中的降本提效实践

Phi-4-mini-flash-reasoning一文详解:轻量级开源模型在教育SaaS中的降本提效实践 1. 模型概述与教育场景价值 Phi-4-mini-flash-reasoning是一款专为复杂推理任务优化的轻量级语言模型,在教育科技领域展现出独特的应用价值。相比传统大模型&#xff0c…...

人工智能的社会技术定义:从理性主义到人文主义的融合

1. 人工智能定义的迷思:为什么我们总在“盲人摸象”? 干了这么多年技术,也写了不少关于人工智能的科普和行业分析,我发现一个挺有意思的现象:无论是技术圈内的开发者,还是圈外的普通用户,甚至是…...

CANN/catlass aclnn接口算子接入示例

basic_matmul_aclnn example 【免费下载链接】catlass 本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。 项目地址: https://gitcode.com/cann/catlass aclnn接口是CANN软件栈一直沿用的接口,msOpGen工具是CANN提供可…...

CANN驱动获取算力组aicore利用率

dcmi_get_capability_group_aicore_usage 【免费下载链接】driver 本项目是CANN提供的驱动模块,实现基础驱动和资源管理及调度等功能,使能昇腾芯片。 项目地址: https://gitcode.com/cann/driver 函数原型 int dcmi_get_capability_group_aicore…...

CANN驱动风扇转速查询API

dcmi_get_device_fan_speed 【免费下载链接】driver 本项目是CANN提供的驱动模块,实现基础驱动和资源管理及调度等功能,使能昇腾芯片。 项目地址: https://gitcode.com/cann/driver 函数原型 int dcmi_get_device_fan_speed(int card_id, int de…...

竟然还在手动转写录音逐字稿?2026年这4款把录音转文字的app帮你月省25小时加班时间

很多人选录音转文字工具,第一个坑就是只看表面订阅价,觉得越便宜甚至免费越好,其实根本不算算你改稿子花的时间值多少钱。我自己做了3年效率工具测评,亲测过十几款转写工具,今天直接给结论:听脑AI是目前同类…...

老照片修复神器:AI超清画质增强实测,一键让模糊照片变高清

老照片修复神器:AI超清画质增强实测,一键让模糊照片变高清 1. 引言:老照片修复的AI解决方案 1.1 老照片修复的普遍需求 翻开相册,那些泛黄的老照片承载着珍贵的记忆,却常常因为年代久远而变得模糊不清。无论是家庭相…...

CANN/pypto按位异或操作API文档

# pypto.bitwise_xor 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atla…...

用了半年只留下这1个!2026会议纪要录音转文字工具我真心安利给所有打工人

上周开了3小时季度总结会,散会leader甩了一句“下班前把纪要发我”,换做半年前我得抱着录音逐句听,熬到九点还错漏一堆;上个月跑广州见客户,对方全程粤语,之前用的工具识别出来一半都是乱码;做博…...

CANN/pyasc数据拷贝API文档

asc.language.basic.data_copy 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.basic.data_co…...

CANN/sip BLAS Ssyr2算子文档

Ssyr2 【免费下载链接】sip 本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。 项目地址: https://gitcode.com/cann/sip 产品支持情况 产品是否支持Atlas 200I/500 A2 推理产品…...

别再只会 pip install 了!Win11上管理Python包的5个高效技巧(含更新/降级/换源)

Win11上Python包管理的5个高阶技巧:从基础安装到专业配置 每次看到同事在终端里反复输入pip install时,我都忍不住想分享几个改变我工作效率的习惯。作为在Windows 11上管理过数十个Python项目的开发者,我深刻体会到:包管理不是安…...

阴阳师百鬼夜行AI自动化脚本:5分钟轻松收集式神碎片终极指南

阴阳师百鬼夜行AI自动化脚本:5分钟轻松收集式神碎片终极指南 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师百鬼夜行中繁琐的撒豆操作而烦恼吗&#xf…...

CANN/AMCT量化感知训练配置创建

create_quant_retrain_config 【免费下载链接】amct AMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。 项目地址: https://gitcode.com/cann/amct 产品支持情况 产品 是否支持 Ascend 950PR/Ascend 950DT √ Atlas A3 训练系列产品 / Atlas A3 推理系列产品 √ At…...

第12章 后土化轮回:安装垃圾回收机制?六道是六个分类对象池,亡魂不再内存泄漏

第12章 后土化轮回:安装垃圾回收机制?六道是六个分类对象池,亡魂不再内存泄漏 系列导读:这是《洪荒操作系统》第12章。巫妖大战后,天地间飘满了亡魂,造成严重的内存泄漏。后土以身化轮回,建立了…...

AI驱动优化算法选择与设计:从元学习到自动化求解

1. 项目概述:当优化遇见智能在工业排产、物流调度、金融风控这些硬核领域里,我们每天都在和“优化”打交道。简单说,就是在一堆限制条件下,找到一个最好的方案。过去十几年,我的工具箱里塞满了各种算法:梯度…...

从预测到响应:构建基于状态识别的量化交易系统

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“Ctrl-Alt-DefeatTheMarket”。光看这个名字,一股浓浓的极客风和挑战精神就扑面而来了。这显然不是一个传统的量化交易策略库,它更像是一个技术宣言,或者说&#x…...

ClawZ:桌面AI助手革命,零门槛部署OpenClaw智能体

1. 项目概述:从命令行到桌面的AI助手革命如果你和我一样,对AI Agent(智能体)的潜力感到兴奋,但又对在终端里敲命令、配置环境、调试YAML文件感到头疼,那么ClawZ的出现,绝对是一个值得你停下手中…...

Hyperf 默认使用 Nikic/FastRoute 作为路由器。

它的本质是:FastRoute 是一个基于 正则表达式编译 和 前缀树/分派树 (Dispatch Tree) 的轻量级 HTTP 路由器。它不依赖传统的线性遍历或简单的字符串匹配,而是在启动阶段将所有路由规则编译成一个高效的 数据结构(通常是嵌套数组或状态机&…...

基于MCP协议构建AI助手与Google Drive的安全连接方案

1. 项目概述:一个连接Google生态与AI的桥梁 如果你正在尝试让AI助手(比如Claude、Cursor等)直接操作你的Google Drive、Gmail或者Google Calendar,而不是仅仅通过网页搜索获取信息,那么你很可能已经遇到了“MCP”&…...

CANN算子测试赛Add报告

【免费下载链接】cann-competitions 本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。 项目地址: https://gitcode.com/cann/cann-competitions 元信息(请如实填写,此区块将由组委会脚本自动解析&#xf…...