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

CANN/runtime系统任务

系统任务

【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime

除了可以下发Kernel执行任务外,Runtime还提供下发Reduce和随机数生成的内置系统任务的功能。(系统任务区别于Kernel任务在于无需用户提供执行代码)。 系统任务可以下发到某条Stream异步执行,同样遵循同一流上任务保序执行的规则。

通过aclrtReduceAsync接口可以下发执行Reduce操作任务,调用代码示例如下:

aclInit(NULL); aclrtSetDevice(0); aclrtStream stream; aclrtCreateStream(&stream); // 准备 Host 数据 const int count = 4; float hostInput[4] = {1.0, 2.0, 3.0, 4.0}; float hostOutput[4] = {0, 0, 0, 0}; size_t size = count * sizeof(float); // 申请 Device 内存 void *devInput = NULL; void *devOutput = NULL; aclrtMalloc(&devInput, size, ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&devOutput, size, ACL_MEM_MALLOC_HUGE_FIRST); // 拷贝数据到 Device aclrtMemcpy(devInput, size, hostInput, size, ACL_MEMCPY_HOST_TO_DEVICE); aclrtMemcpy(devOutput, size, hostInput, size, ACL_MEMCPY_HOST_TO_DEVICE); // 调用 aclrtReduceAsync aclrtReduceAsync(devOutput, devInput, size, ACL_RT_MEMCPY_SDMA_AUTOMATIC_SUM, // 归约类型 ACL_FLOAT, // 数据类型 stream, NULL); // 同步 stream aclrtSynchronizeStream(stream); // 拷回结果 aclrtMemcpy(hostOutput, size, devOutput, size, ACL_MEMCPY_DEVICE_TO_HOST); for (int i = 0; i < count; i++) { printf("Reduce SUM result[%d] = %f\n", i, hostOutput[i]); } /* 预期如下结果 Reduce SUM result[0] = 2.000000 Reduce SUM result[1] = 4.000000 Reduce SUM result[2] = 6.000000 Reduce SUM result[3] = 8.000000 */ // 释放资源 aclrtFree(devInput); aclrtFree(devOutput); aclrtDestroyStream(stream); aclrtResetDeviceForce(0); aclFinalize();

通过aclrtRandomNumAsync执行随机数生成任务,调用代码示例如下:

aclError NormalFloatAsync( float mean, float stddev, uint64_t seed, uint64_t num, void *counterDevAddr, void *devOutput, aclrtStream stream) { aclrtRandomNumTaskInfo taskInfo = {}; taskInfo.dataType = ACL_FLOAT; taskInfo.randomNumFuncParaInfo.funcType = ACL_RT_RANDOM_NUM_FUNC_TYPE_NORMAL_DIS; taskInfo.randomParaAddr = NULL; taskInfo.randomCounterAddr = counterDevAddr; taskInfo.randomResultAddr = devOutput; memcpy(taskInfo.randomNumFuncParaInfo.paramInfo.normalDisInfo.mean.valueOrAddr, &mean, sizeof(float)); taskInfo.randomNumFuncParaInfo.paramInfo.normalDisInfo.mean.size = sizeof(float); taskInfo.randomNumFuncParaInfo.paramInfo.normalDisInfo.mean.isAddr = 0; memcpy(taskInfo.randomNumFuncParaInfo.paramInfo.normalDisInfo.stddev.valueOrAddr, &stddev, sizeof(float)); taskInfo.randomNumFuncParaInfo.paramInfo.normalDisInfo.stddev.size = sizeof(float); taskInfo.randomNumFuncParaInfo.paramInfo.normalDisInfo.stddev.isAddr = 0; memcpy(taskInfo.randomSeed.valueOrAddr, &seed, sizeof(uint64_t)); taskInfo.randomSeed.size = sizeof(uint64_t); taskInfo.randomSeed.isAddr = 0; memcpy(taskInfo.randomNum.valueOrAddr, &num, sizeof(uint64_t)); taskInfo.randomNum.size = sizeof(uint64_t); taskInfo.randomNum.isAddr = 0; return aclrtRandomNumAsync(&taskInfo, stream, NULL); } int main() { aclError ret; // 初始化 ACL ret = aclInit(NULL); ret = aclrtSetDevice(0); aclrtStream stream; ret = aclrtCreateStream(&stream); uint64_t num = 128; size_t size = num * sizeof(uint64_t); // 申请足够大内存 // 申请 Device 内存 void *devOutput = NULL; ret = aclrtMalloc(&devOutput, size, ACL_MEM_MALLOC_NORMAL_ONLY); // 准备 Host 数据 void *hostOutput = malloc(size); // 申请存放随机数状态 counter 的device内存 (要求 16Byte) void *counterAddr = NULL; ret = aclrtMalloc((void **)&counterAddr, 16, ACL_MEM_MALLOC_NORMAL_ONLY); float mean = 3.0; float stddev = 2.0; ret =NormalFloatAsync(mean, stddev, 0, num, counterAddr, devOutput, stream); // 同步 stream aclrtSynchronizeStream(stream); // 拷回结果 aclrtMemcpy(hostOutput, size, devOutput, size, ACL_MEMCPY_DEVICE_TO_HOST); // 释放资源 free(hostOutput); aclrtFree(devOutput); aclrtFree(counterAddr); aclrtDestroyStream(stream); aclrtResetDeviceForce(0); aclFinalize(); return 0; }

【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/784330/

相关文章:

  • Intell-dragonfly:基于AIGC的网络安全攻击面智能生成引擎
  • CoWVLA模型:多模态智能系统的融合与创新
  • cann-bench稀疏注意力算子API
  • 2026安徽冷风机厂家权威推荐指南 - 速递信息
  • 前后端分离项目集成:Vue前端调用Pixel Couplet Gen生成动态春联
  • 机器学习如何量化材料专家直觉:从数据中发现拓扑半金属新描述符
  • 一键部署DeepSeek-R1:Ollama教程,让AI推理服务触手可及
  • 如何在电脑上查看荣耀手机短信(4 种方法)
  • 管理团队API密钥与查看审计日志的最佳实践指南
  • CANN hcomm通道通知线程等待
  • 六西格玛网课和自学哪个好?学习方式对比 - 众智商学院官方
  • 开发者如何集成智能天气API:聚合增强、缓存优化与实战避坑
  • 我们团队引入AI测试后,测试人员从10人缩减到3人
  • 概念瓶颈模型与原型网络:构建可解释AI的两种核心技术路径
  • 人工智能日报.今日 AI 动态速递(2026-05-09)
  • AI如何重塑垂直农业:从感知到决策的智能种植实践
  • CANN/atvoss默认内核调度策略
  • 2026年常州热缩管源头厂家深度指南:新能源汽车线束防护与轨道交通阻燃解决方案对标 - 企业名录优选推荐
  • AI时代DDoS防御新范式:区块链协同、智能蜜罐与后量子密码实战
  • 开箱即用!Gemma-3-12B-IT WebUI一键部署与使用指南
  • 南昌及周边风格百搭实木家具品牌选型技术解析 - 资讯焦点
  • Gofile下载器终极指南:快速高效获取Gofile文件资源
  • AI模型公平性实战:从偏见根源到工业级缓解方案
  • CANN/cann-bench 分组矩阵乘量化融合算子评测
  • CANN/HCOMM线程通知记录API
  • 2026年湖州干洗店大测评:权威榜单揭晓哪家强 - 速递信息
  • CANN/amct压缩概念详解
  • 学习日记DAY41
  • 2026 北京老酒回收第三方实测:5 大权威商家榜单出炉,京诚酒行 99.7 分领跑 - 资讯焦点
  • Pandas数据分析避坑指南:用Hampel Filter优雅处理金融时间序列里的‘毛刺’