样例使用指导
examples目录下提供了一系列Runtime接口样例,包括Device管理、Stream管理、Event管理、内存管理、Kernel执行等,供开发者参考,帮助开发者快速入门,进而掌握Runtime关键特性。
样例列表
| 样例目录 | 子目录 | 功能介绍 |
|---|---|---|
| device | 0_device_normal | 本样例展示了从资源初始化、指定Device计算设备、在Device上执行Add算子、到最后销毁资源的全部流程,是一个基础的使用Device的样例。 |
| device | 1_device_multi_thread | 本用例展示了多线程的场景如何管理Device,主线程中设置Device,设置资源限制,另一个线程获取Device相关信息(例如昇腾AI处理器版本、Device运行模式、Device资源限制)后,再根据Device资源限制下发和执行和函数任务,线程结束时采用aclrtResetDeviceForce接口释放Device上的资源。 |
| device | 2_device_P2P | 本样例展示了如何在多个Device之间进行切换,并进行内存复制。 |
| stream | 0_simple_stream | 本样例展示单Stream下发任务的场景,包括默认Stream下发任务、新建Stream下发任务、在一个Stream多次下发任务并查询状态三个部分。 |
| stream | 1_stream_with_failure_mode | 本样例展示Stream设置遇错即停并且模拟运行核函数时发生错误的场景。 |
| stream | 2_multi_stream | 本样例展示了多个Stream之间流间任务同步功能。 |
| event | 0_event_status | 本样例展示了Event的不同状态,包括创建后,记录后,同步后。 |
| event | 1_event_timestamp | 本样例展示了Event计时的功能,既可以记录时间帧,还可以计算时间差。 |
| memory | 0_h2h_memory_copy | 本样例展示了Host内的内存复制功能。 |
| memory | 1_h2d_sync_memory_copy | 本样例展示了Host到Device的内存复制,使用aclrtMemcpy内存复制接口。 |
| memory | 2_h2d_async_memory_copy | 本样例展示了Host到Device的内存复制,使用aclrtMemcpyAsync内存复制接口。 |
| memory | 3_d2h_sync_memory_copy | 本样例展示了Device到Host的内存复制,使用aclrtMemcpy内存复制接口。 |
| memory | 4_d2h_async_memory_copy | 本样例展示了Device到Host的内存复制,使用aclrtMemcpyAsync内存复制接口。 |
| memory | 5_d2d_sync_memory_copy | 本样例展示了Device内的内存复制,使用aclrtMemcpy内存复制接口。 |
| memory | 6_d2d_async_memory_copy | 本样例展示了Device内的内存复制,使用aclrtMemcpyAsync内存复制接口。 |
| memory | 7_physical_memory_sharing_withpid | 本样例展示了同一个Device、两个进程间的物理内存共享,但在共享内存时启用进程白名单校验。 |
| memory | 8_physical_memory_sharing_withoutpid | 本样例展示了同一个Device、两个进程间的物理内存共享,在共享内存时关闭进程白名单校验。 |
| memory | 9_multistream_sync_memory | 本样例会触发两个线程,一个线程A等待指定内存中的数据满足一定条件后解除阻塞,一个线程B向指定内存中写入数据,在线程B写入满足条件的数据之前线程A将持续阻塞。 |
| memory | 10_ipc_memory_withpid | 本样例展示了同一个Device、两个进程间的内存共享,在共享内存时启用进程白名单校验。 |
| memory | 11_ipc_memory_withoutpid | 本样例展示了同一个Device、两个进程间的内存共享,在内存共享时关闭进程白名单校验。 |
| callback | 0_simple_callback | 本样例展示了在Stream上下发一个Host侧函数,由用户显式注册线程,触发Host侧函数调用。 |
| callback | 1_callback_hostfunc | 本样例展示了在Stream上下发一个Host侧函数,该Host侧函数将在当前已下发的任务执行之后被调用,并会阻塞之后添加的任务。 |
| callback | 2_callback_exception | 本样例展示了如何通过错误回调函数获取任务的异常信息,包括Device ID、Stream ID、Task ID、Error Code等。 |
| model | 0_simple_model | 本样例展示了如何捕获Stream中的任务并创建一个模型实例,然后执行该模型实例得到结果。 |
| model | 1_model_update | 本样例展示了捕获一个模型实例后如何更新该实例中的任务。 |
| model | 2_model_switch | 本样例展示了如何使用aclmdlRIBuildBegin接口创建模型实例,并且在任务中实现了Stream跳转以及Stream激活。 |
| kernel | 0_launch_kernel | 本样例展示了如何基于Launch Kernel方式加载与执行Add算子。 |
| kernel | 1_launch_kernel_with_reslimit | 本样例展示了在设置了当前进程的Device资源限制下,Add算子的加载与执行。 |
| notify | 0_ipc_notify_withpid | 本样例展示了两个Device、两个进程间的Notify共享,但在共享Notify时启用进程白名单校验。 |
| notify | 1_ipc_notify_withoutpid | 本样例展示了两个Device、两个进程间的Notify共享,但在共享Notify时关闭进程白名单校验。 |
| adump | 0_adump_args | 本样例展示了单算子执行场景下,使用aclopStartDumpArgs和aclopStopDumpArgs接口Dump算子信息。 |
| adump | 1_adump_callback | 本样例展示了单算子执行场景下,使用acldumpRegCallback和acldumpUnregCallback接口Dump算子信息。 |
| profiling | 0_create_config | 本样例展示了Profiling采集、解析和展示性能数据。 |
| profiling | 1_msproftx | 本样例展示了使用msproftx扩展接口采集、解析和展示性能数据。 |
| profiling | 2_subscribe_model | 本样例展示了订阅算子信息, 实现将采集到的Profiling数据解析后写入管道,由用户读入内存,再由用户调用接口获取性能数据。 |
环境准备
编译运行样例前,需获取固件、驱动及CANN软件包安装,详情步骤请参见《CANN软件安装指南》。
若对runtime仓src目录下的源码有定制,那么在安装CANN软件之后,还需编译源码并部署到环境上,具体操作请参见runtime仓下的README。
有些样例依赖ops算子包,需要根据产品型号和环境架构下载安装对应的软件包。
编译运行
1.设置环境变量。
# ${ascend_name}替换为昇腾AI处理器的型号
export SOC_VERSION=${ascend_name}
# 部分样例中涉及调用AscendC算子,需配置AscendC编译器ascendc.cmake所在的路径
# 可在CANN包安装路径下查找ascendc_kernel_cmake,例如find ./ -name ascendc_kernel_cmake,并将${cmake_path}替换为ascendc_kernel_cmake所在路径
export ASCENDC_CMAKE_DIR=${cmake_path}
# ${install_path}替换为CANN toolkit包的安装路径,默认安装在`/usr/local/Ascend`目录
export ASCEND_INSTALL_PATH=${install_path}/cann
2.下载样例代码并上传至安装CANN软件的环境,切换到样例目录。
# 此处以0_h2h_memory_copy样例为例
cd ${git_clone_path}/example/memory/0_h2h_memory_copy
3.执行以下命令运行样例。
# 请注意部分用例的运行命令不同,具体以各用例目录下的README.md中的编译运行命令为准
bash run.sh