# 运行时核资源控制【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime为了提高Device核资源的使用率以及隔离性Runtime支持控制Device的核资源。当前支持配置Device粒度、Stream粒度的核资源限制核资源包括AI Core或Cube Core数量、Vector Core数量。是否由用户显式指定numBlocks用于指定算子的核函数将会在几个核上执行调用运行时核资源控制的接口会有所不同如下所示无numBlocks场景例如调用aclnn算子接口Stream粒度的核资源限制需要调用aclrtUseStreamResInCurrentThread接口绑定到当前线程使用并调用aclrtGetResInCurrentThread接口获取当前线程可使用的核资源。通过aclrtGetResInCurrentThread接口获取核资源限制的优先级为Stream粒度的核资源限制 Device粒度的核资源限制 AI处理器硬件的默认核资源限制。例如Device总共包含32个Vector CoreDevice粒度限制使用16个Vector Core而Stream粒度的核资源限制可以为20个Vector Core则aclnn算子执行时以20个Vector Core运行。需numBlocks场景例如LaunchKernel方式执行算子用户可调用aclrtGetDeviceResLimit接口、aclrtGetStreamResLimit接口获取不同粒度的核资源限制后再配置numBlocks。Device粒度的核资源限制以下是关键步骤的代码示例不可以直接拷贝编译运行仅供参考。完整样例代码请参见Link。...... int32_t deviceId 0; uint32_t numBlocks 8; uint32_t coreDim 0; // 指定计算设备 aclrtSetDevice(deviceId); // 设置核资源限制 aclrtSetDeviceResLimit(deviceId, ACL_RT_DEV_RES_CUBE_CORE, numBlocks); // 下发算子执行任务 // 以aclnnAdd算子为例 // aclnnAddGetWorkspaceSize中会隐式调用aclrtGetResInCurrentThread查询核资源进行tiling // aclnnAdd() ...... // 获取核资源限制 aclrtGetDeviceResLimit(deviceId, ACL_RT_DEV_RES_CUBE_CORE, coreDim);Stream粒度的核资源限制以下是关键步骤的代码示例不可以直接拷贝编译运行仅供参考。#include acl/acl.h ...... int32_t deviceId 0; uint32_t numBlocks 8; // 指定运算的Device aclrtSetDevice(deviceId); // 显式创建一个Stream aclrtStream stream; aclrtCreateStream(stream); // 设置Stream粒度的Cube Core、Vector Core的数量 aclrtSetStreamResLimit(stream, ACL_RT_DEV_RES_CUBE_CORE, numBlocks); aclrtSetStreamResLimit(stream, ACL_RT_DEV_RES_VECTOR_CORE, numBlocks * 2); // 绑定到当前线程 aclrtUseStreamResInCurrentThread(stream); // 算子的任务中需要调用aclrtGetResInCurrentThread查询当前线程的资源限制然后指定运行算子的资源数量 // 以aclnnAdd算子为例 // aclnnAddGetWorkspaceSize中会隐式调用aclrtGetResInCurrentThread查询核资源进行tiling // aclnnAdd() ...... aclrtUnuseStreamResInCurrentThread(stream); aclrtResetStreamResLimit(stream); // 资源销毁 aclrtDestroyStream(stream); aclrtResetDevice(deviceId);【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
CANN/runtime运行时核资源控制
# 运行时核资源控制【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime为了提高Device核资源的使用率以及隔离性Runtime支持控制Device的核资源。当前支持配置Device粒度、Stream粒度的核资源限制核资源包括AI Core或Cube Core数量、Vector Core数量。是否由用户显式指定numBlocks用于指定算子的核函数将会在几个核上执行调用运行时核资源控制的接口会有所不同如下所示无numBlocks场景例如调用aclnn算子接口Stream粒度的核资源限制需要调用aclrtUseStreamResInCurrentThread接口绑定到当前线程使用并调用aclrtGetResInCurrentThread接口获取当前线程可使用的核资源。通过aclrtGetResInCurrentThread接口获取核资源限制的优先级为Stream粒度的核资源限制 Device粒度的核资源限制 AI处理器硬件的默认核资源限制。例如Device总共包含32个Vector CoreDevice粒度限制使用16个Vector Core而Stream粒度的核资源限制可以为20个Vector Core则aclnn算子执行时以20个Vector Core运行。需numBlocks场景例如LaunchKernel方式执行算子用户可调用aclrtGetDeviceResLimit接口、aclrtGetStreamResLimit接口获取不同粒度的核资源限制后再配置numBlocks。Device粒度的核资源限制以下是关键步骤的代码示例不可以直接拷贝编译运行仅供参考。完整样例代码请参见Link。...... int32_t deviceId 0; uint32_t numBlocks 8; uint32_t coreDim 0; // 指定计算设备 aclrtSetDevice(deviceId); // 设置核资源限制 aclrtSetDeviceResLimit(deviceId, ACL_RT_DEV_RES_CUBE_CORE, numBlocks); // 下发算子执行任务 // 以aclnnAdd算子为例 // aclnnAddGetWorkspaceSize中会隐式调用aclrtGetResInCurrentThread查询核资源进行tiling // aclnnAdd() ...... // 获取核资源限制 aclrtGetDeviceResLimit(deviceId, ACL_RT_DEV_RES_CUBE_CORE, coreDim);Stream粒度的核资源限制以下是关键步骤的代码示例不可以直接拷贝编译运行仅供参考。#include acl/acl.h ...... int32_t deviceId 0; uint32_t numBlocks 8; // 指定运算的Device aclrtSetDevice(deviceId); // 显式创建一个Stream aclrtStream stream; aclrtCreateStream(stream); // 设置Stream粒度的Cube Core、Vector Core的数量 aclrtSetStreamResLimit(stream, ACL_RT_DEV_RES_CUBE_CORE, numBlocks); aclrtSetStreamResLimit(stream, ACL_RT_DEV_RES_VECTOR_CORE, numBlocks * 2); // 绑定到当前线程 aclrtUseStreamResInCurrentThread(stream); // 算子的任务中需要调用aclrtGetResInCurrentThread查询当前线程的资源限制然后指定运行算子的资源数量 // 以aclnnAdd算子为例 // aclnnAddGetWorkspaceSize中会隐式调用aclrtGetResInCurrentThread查询核资源进行tiling // aclnnAdd() ...... aclrtUnuseStreamResInCurrentThread(stream); aclrtResetStreamResLimit(stream); // 资源销毁 aclrtDestroyStream(stream); aclrtResetDevice(deviceId);【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考