0_launch_kernel
【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime
描述
本样例展示了如何基于Launch Kernel方式加载与执行Add算子。
产品支持情况
本样例在以下产品上的支持情况如下:
| 产品 | 是否支持 |
|---|---|
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
编译运行
1.设置环境变量。
# ${install_root} 替换为 CANN 安装根目录,默认安装在`/usr/local/Ascend`目录 source ${install_root}/cann/set_env.sh export ASCEND_INSTALL_PATH=${install_root}/cann # ${ascend_name} 替换为昇腾AI处理器的型号,可通过 npu-smi info 查看 Name 字段并去掉空格获得,例如 ascend910b3 export SOC_VERSION=${ascend_name} # 部分样例中涉及调用AscendC算子,需配置AscendC编译器ascendc.cmake所在的路径,如 ${install_root}/cann/aarch64-linux/tikcpp/ascendc_kernel_cmake # 可在CANN包安装路径下查找ascendc_kernel_cmake,例如find ./ -name ascendc_kernel_cmake,并将${cmake_path}替换为ascendc_kernel_cmake所在路径 export ASCENDC_CMAKE_DIR=${cmake_path}2.下载样例代码并上传至安装CANN软件的环境,切换到样例目录。
cd ${git_clone_path}/example/2_advanced_features/kernel/0_launch_kernel3.执行以下命令运行样例。
# 当前用例依赖 numpy 模块,运行时会检查该模块是否存在,如存在则导入,不存在则安装该模块。 # bash run.sh -r <mode> ,mode 参数可以选 simple和placeholder。若不指定直接执行 bash run.sh 运行样例,则使用simple 模式。 bash run.sh -r simplemode可选simple和placeholder两种模式: 1. simple模式 指指针类型参数,其值为Device内存地址。一般来说,算子的输入、输出是该种类型的参数,用户需提前调用Device内存申请接口(例如aclrtMalloc接口)申请内存,并自行拷贝数据至Device侧。 2. placeholder模式 也是指针类型参数,但区别在于,用户无需手动将参数数据复制到Device,这项操作由Runtime完成。在追加参数时Runtime并不会填写真实的Device地址,而是在Launch Kernel时才会刷新为真实的Device地址,所以称之为placeholder。
CANN RUNTIME API
在该Sample中,涉及的关键功能点及其关键接口,如下所示:
- 初始化
- 调用aclInit接口初始化AscendCL配置。
- 调用aclFinalize接口实现AscendCL去初始化。
- Device管理
- 调用aclrtSetDevice接口指定用于运算的Device。
- 调用aclrtResetDeviceForce接口强制复位当前运算的Device,回收Device上的资源。
- Stream管理
- 调用aclrtCreateStream接口创建Stream。
- 调用aclrtDestroyStreamForce接口强制销毁Stream,丢弃所有任务。
- 调用aclrtSynchronizeStream可以阻塞等待Stream上任务的完成。
- 内存管理
- 调用aclrtMallocHost接口申请Host上的内存。
- 调用aclrtMalloc接口申请Device上的内存。
- 调用aclrtFreeHost接口释放Host上的内存。
- 调用aclrtFree接口释放Device上的内存。
- 数据传输
- 调用aclrtMemcpy接口通过内存复制的方式实现Host与Device间的数据传输。
- Kernel加载与执行
- 调用aclrtBinaryLoadFromFile从文件加载并解析算子二进制文件。
- 调用aclrtBinaryGetFunction获取核函数句柄。
- 调用aclrtKernelArgsInit根据核函数句柄初始化参数列表,并获取标识参数列表的句柄。
- 调用aclrtKernelArgsAppend将用户设置的参数值追加拷贝到argsHandle指向的参数数据区域。
- 调用aclrtKernelArgsAppendPlaceHolder对于placeholder参数,调用本接口占位。
- 调用aclrtKernelArgsGetPlaceHolderBuffer根据用户指定的内存大小,获取paramHandle占位符指向的内存地址。
- 调用aclrtKernelArgsFinalize标识参数组装完毕。
- 调用aclrtLaunchKernelWithConfig指定任务下发的配置信息,并启动对应算子的计算任务。
- 调用aclrtBinaryUnLoad卸载算子二进制文件。
已知issue
暂无
【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考