1_device_multi_thread
描述
本样例展示多线程场景下的 Device 管理流程。主线程指定 Device 并设置 Device 资源限制,工作线程查询 Device 数量、运行模式、资源限制等信息后下发核函数任务,最后释放 Device、Stream 和内存资源。
产品支持情况
本样例支持以下产品:
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
编译运行
1.下载样例代码至安装CANN软件的环境,切换到样例目录。
cd ${git_clone_path}/example/1_basic_features/device/1_device_multi_thread
2.设置环境变量。
# ${install_root} 替换为 CANN 安装根目录,默认安装在`/usr/local/Ascend`目录
source ${install_root}/cann/set_env.sh
export ASCEND_INSTALL_PATH=${install_root}/cann
# 设置 SOC_VERSION 和 ASCENDC_CMAKE_DIR
# -SOC_VERSION: 昇腾AI处理器的型号,如 Ascend910_9362,Ascend910B2等
# -ASCENDC_CMAKE_DIR: 样例中涉及调用AscendC算子,需配置AscendC编译器 ascendc.cmake 路径,如 /usr/local/Ascend/cann/x86_64-linux/tikcpp/ascendc_kernel_cmake
source ${git_clone_path}/example/set_sample_env.sh
3.执行以下命令运行样例。
bash run.sh
CANN RUNTIME API
在该Sample中,涉及的关键功能点及其关键接口,如下所示:
- 初始化
- 调用
aclInit接口进行初始化配置。 - 调用
aclFinalize接口实现去初始化。
- 调用
- Device 管理
- 调用
aclrtSetDevice接口指定用于运算的 Device。 - 调用
aclrtGetSocName接口查询当前运行环境的昇腾 AI 处理器版本。 - 调用
aclrtGetDeviceCount接口获取可用 Device 数量。 - 调用
aclrtQueryDeviceStatus接口查询 Device 状态。 - 调用
aclrtGetRunMode接口获取当前运行模式。 - 调用
aclrtGetDeviceUtilizationRate接口查询 Device 上 Cube、Vector、AI CPU 等模块的利用率。 - 调用
aclrtDeviceGetStreamPriorityRange接口查询硬件支持的 Stream 优先级范围。 - 调用
aclrtGetDeviceInfo接口获取指定 Device 的属性信息。 - 调用
aclrtSetDeviceResLimit接口设置当前进程的 Device 资源限制。 - 调用
aclrtGetDeviceResLimit接口获取当前进程的 Device 资源限制。 - 调用
aclrtResetDeviceResLimit接口重置当前进程的 Device 资源限制。 - 调用
aclrtResetDeviceForce接口强制复位当前运算的 Device,回收 Device 上的资源。
- 调用
- Stream 管理
- 调用
aclrtCreateStream接口创建 Stream。 - 调用
aclrtSynchronizeStream接口阻塞等待 Stream 上的任务完成。 - 调用
aclrtDestroyStream接口销毁 Stream。
- 调用
- 内存管理
- 调用
aclrtMalloc接口申请 Device 上的内存。 - 调用
aclrtMallocHost接口申请 Host 上的内存。 - 调用
aclrtFree接口释放 Device 上的内存。 - 调用
aclrtFreeHost接口释放 Host 上的内存。
- 调用
- 数据传输
- 调用
aclrtMemcpy接口通过内存复制的方式实现数据传输。
- 调用
示例输出
[INFO] Start to run device_multi_thread sample.
[INFO] Current Ascend chipset platform is: Ascend910_9362.
[INFO] Get device count success. deviceCount: 2.
[INFO] Query device status success. deviceStatus: 0.
[INFO] RunMode is ACL_HOST.
[INFO] Get device resLimit success. VECTOR_CORE 1.
[INFO] Thr results (first 10 elements) of the kernel function:
[INFO] Result: hostDst[0]: 0.000000 Expected value: 0.000000
[INFO] Result: hostDst[1]: 2.000000 Expected value: 2.000000
...
[INFO] Result: hostDst[9]: 18.000000 Expected value: 18.000000
[INFO] Run the device_multi_thread sample successfully.