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

CANN/runtime Kernel加载与执行

Kernel加载与执行

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

Kernel函数可以采用<<<>>>方式进行任务下发,具有代码简洁,可读性好的优点。

以下是关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。

// Device code Template<> extern "C" __global__ __aicore__ void add_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z) { KernelAdd op; op.Init(x, y, z); op.Process(); } int main() { int N = ...; size_t size = N * sizeof(uint64); // Initialize aclrtSetDevice(0); // Create stream aclrtStream stream; aclrtCreateStream(&stream); // Allocate vectors in host memory void *h_x, *h_y, *h_z; aclrtMallocHost(&h_x, size); aclrtMallocHost(&h_y, size); aclrtMallocHost(&h_z, size); // Initialize input vectors ... // Allocate vectors in device memory void *d_x, *d_y, *d_z; aclrtMalloc(&d_x, size, ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&d_y, size, ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&d_z, size, ACL_MEM_MALLOC_HUGE_FIRST); // Copy vectors from host memory to device memory aclrtMemcpy(d_x, size, h_x, size, ACL_MEMCPY_HOST_TO_DEVICE); aclrtMemcpy(d_y, size, h_y, size, ACL_MEMCPY_HOST_TO_DEVICE); // Invoke kernel uint32_t numBlocks = 48; add_custom<<<numBlocks, nullptr, stream>>>(d_x, d_y, d_z); ... }

用户也可以使用Runtime提供的LaunchKernel接口(例如aclrtLaunchKernelWithHostArgs接口)进行kernel函数的下发。使用这种方式需先了解Binary和Function的概念:

  • Binary:是一个动态加载的代码容器单元,里面包含编译后的kernel代码、全局变量等。用户可以通过aclrtBinaryLoadFromFile或aclrtBinaryLoadFromData将编译好的算子二进制加载到NPU上,并获得对应的Binary句柄。
  • Function:是一个具体可执行的kernel函数,它定义在Binary内部,是主机代码可以调用并在NPU上执行的入口点。用户可以通过aclrtBinaryGetFunction获取kernel函数对应的Function句柄。

以下是使用LaunchKernel接口的关键代码示例,不可以直接拷贝编译运行,仅供参考。

// Device code extern "C" __global__ __aicore__ void add_custom(GM_ADDR x, GM_ADDR y, GM_ADDR z) { KernelAdd op; op.Init(x, y, z); op.Process(); } int main() { int N = ...; size_t size = N * sizeof(uint64); // Initialize aclrtSetDevice(0); // Create stream aclrtStream stream; aclrtCreateStream(&stream); // Create binary from binary file aclrtBinHandle bin; aclrtBinaryLoadFromFile("add_custom.o", nullptr, &bin); // Get function handle from binary aclrtFuncHandle add_custom; aclrtBinaryGetFunction(bin, "add_custom", &add_custom); // Allocate vectors in host memory void *h_x, *h_y, *h_z; aclrtMallocHost(&h_x, size); aclrtMallocHost(&h_y, size); aclrtMallocHost(&h_z, size); // Initialize input vectors ... // Allocate vectors in device memory void *d_x, *d_y, *d_z; aclrtMalloc(&d_x, size, ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&d_y, size, ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&d_z, size, ACL_MEM_MALLOC_HUGE_FIRST); // Copy vectors from host memory to device memory aclrtMemcpy(d_x, size, h_x, size, ACL_MEMCPY_HOST_TO_DEVICE); aclrtMemcpy(d_y, size, h_y, size, ACL_MEMCPY_HOST_TO_DEVICE); // Invoke kernel uint32_t numBlocks = 48; void* args[] = {d_x, d_y, d_z}; size_t argsSize = 3 * sizeof(void*); aclrtLaunchKernelWithHostArgs(add_custom, numBlocks, stream, nullptr, args, argsSize, nullptr, 0); ... }

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

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

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

相关文章:

  • 为 Claude Code 配置 Taotoken 作为替代 API 服务商解决封号困扰
  • CubiFS分布式存储错误处理终极指南:10个最佳实践让数据安全无忧
  • 打造高可靠性WiFi中继器:esp_wifi_repeater看门狗定时器与故障恢复机制终极指南
  • AI系统安全实战:防御黑盒攻击与模型窃取的纵深策略
  • CANN/sip Cgemm复数矩阵乘法
  • 宁波地区专业的银行活动策划生产厂家找哪家 - GrowthUME
  • Linux Mem -- 通过reserved-memory缩减内存
  • 前端高级开发工程师面试准备一
  • 【GitHub】SuperClaude Framework深度解析:将Claude Code打造为专业开发平台的元编程配置框架
  • AI 术语通俗词典:偏导数
  • 量子机器学习新范式:Classiq如何简化QML模型开发
  • 大众认为花钱进修一定能升职加薪,编程统计进修投入,职业晋升数据,无用进修只会增加个人经济负担。
  • 构建AI教育互操作生态:从数据孤岛到标准化学习系统
  • 沈阳本地CPPM官方授权报名中心及联系方式 - 众智商学院课程中心
  • SLING实战:如何构建自己的知识抽取系统
  • 管程与线程:从操作系统到编程语言
  • Sanic中间件链优化终极指南:构建高性能请求处理流水线
  • CANN驱动HBM厂商查询
  • 物理模拟算法Algorithms39:刚体动力学与碰撞检测终极指南
  • 终极BullshitGenerator语料库解析:解锁100+名人名言的高效使用指南
  • 如何理解KityMinder脑图编辑器的模块化命令系统设计原理 [特殊字符]
  • 深耕北京暖居,铸就品质标杆——宝鹿散热器品牌全解析 - GrowthUME
  • 地学基础模型:构建地球科学通用AI大脑的技术架构与实践
  • 第十章 用Java实现JVM之本地方法调用
  • Nuxt.js Auth模块与Laravel后端集成:JWT、Passport、Sanctum完整指南
  • CANN双三次上采样反向传播算子
  • 2026年AI Agent开发部署公司推荐指南:五大服务商多维度对比分析
  • 终极指南:Crypto-JS如何应对量子计算威胁?5个关键安全策略解析
  • 对比使用前后Taotoken在API调用延迟与稳定性上的体感差异
  • CANN/asc-devkit AddOutputTd函数