CANN Runtime Context管理API
5. Context管理【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本章节描述 CANN Runtime 的 Context 管理接口用于 Context 的创建、销毁、切换及参数配置。aclError aclrtCreateContext(aclrtContext *context, int32_t deviceId)在当前线程中显式创建Context。aclError aclrtDestroyContext(aclrtContext context)销毁Context释放Context的资源。aclError aclrtSetCurrentContext(aclrtContext context)设置线程的Context。aclError aclrtGetCurrentContext(aclrtContext *context)获取线程的Context。aclError aclrtCtxSetSysParamOpt(aclSysParamOpt opt, int64_t value)设置当前Context中的系统参数值多次调用本接口以最后一次设置的值为准。aclError aclrtCtxGetSysParamOpt(aclSysParamOpt opt, int64_t *value)获取当前Context中的系统参数值。aclError aclrtCtxGetCurrentDefaultStream(aclrtStream *stream)获取Context上的默认Stream。aclError aclrtGetPrimaryCtxState(int32_t deviceId, uint32_t *flags, int32_t *active)获取默认Context的状态。aclError aclrtCtxGetFloatOverflowAddr(void **overflowAddr)饱和模式下获取保存溢出标记的Device内存地址该内存地址后续需作为Workspace参数传递给AI Core算子。aclrtCreateContextaclError aclrtCreateContext(aclrtContext *context, int32_t deviceId)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明在当前线程中显式创建Context并将当前线程与新创建的Context相关联。若不调用aclrtCreateContext接口显式创建Context那系统会使用默认Context该默认Context是在调用aclrtSetDevice接口时隐式创建的。默认Context适合简单、无复杂交互逻辑的应用但缺点在于在多线程编程中执行结果取决于线程调度的顺序。显式创建的Context适合大型、复杂交互逻辑的应用且便于提高程序的可读性、可维护性。参数说明参数名输入/输出说明context输出Context的指针。类型定义请参见aclrtContext。deviceId输入在指定的Device下创建Context。用户调用aclrtGetDeviceCount接口获取可用的Device数量后这个Device ID的取值范围[0, (可用的Device数量-1)]返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明在某一进程中指定Device该进程内的多个线程可共用在此Device上显式创建的Context。若在某一进程内创建多个ContextContext的数量与Stream相关Stream数量有限制请参见显式创建Stream的接口。当前线程在同一时刻内只能使用其中一个Context建议通过aclrtSetCurrentContext接口明确指定当前线程的Context增加程序的可维护性**。**调用本接口创建的Context中包含一个默认Stream。如果在应用程序中没有调用aclrtSetDevice接口那么在首次调用aclrtCreateContext接口时系统内部会根据该接口传入的Device ID为该Device绑定一个默认Stream一个Device仅绑定一个默认Stream因此在首次调用aclrtCreateContext接口时占用的Stream数量 Device上绑定的默认Stream Context中包含的Stream。aclrtDestroyContextaclError aclrtDestroyContext(aclrtContext context)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明销毁Context释放Context的资源。只能销毁通过aclrtCreateContext接口创建的Context。参数说明参数名输入/输出说明context输入需销毁的Context。类型定义请参见aclrtContext。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtSetCurrentContextaclError aclrtSetCurrentContext(aclrtContext context)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明设置线程的Context。参数说明参数名输入/输出说明context输入指定线程当前的Context。类型定义请参见aclrtContext。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明支持以下场景如果在某线程例如thread1中调用aclrtCreateContext接口显式创建一个Context例如ctx1则可以不调用aclrtSetCurrentContext接口指定该线程的Context系统默认将ctx1作为thread1的Context。如果没有调用aclrtCreateContext接口显式创建Context则系统将默认Context作为线程的Context此时不能通过aclrtDestroyContext接口来释放默认Context。如果多次调用aclrtSetCurrentContext接口设置线程的Context以最后一次为准。若给线程设置的Context所对应的Device已经被复位则不能将该Context设置为线程的Context否则会导致业务异常。推荐在某一线程中创建的Context在该线程中使用。若在线程A中调用aclrtCreateContext接口创建Context在线程B中使用该Context则需由用户自行保证两个线程中同一个Context下同一个Stream中任务执行的顺序。调用aclrtSetCurrentContext接口通过切换Context时如果新Context与当前Context所属的Device不同时Device也会随之切换。aclrtGetCurrentContextaclError aclrtGetCurrentContext(aclrtContext *context)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明获取线程的Context。如果用户多次调用aclrtSetCurrentContext接口设置当前线程的Context则获取的是最后一次设置的Context。参数说明参数名输入/输出说明context输出线程当前Context的指针。类型定义请参见aclrtContext。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtCtxSetSysParamOptaclError aclrtCtxSetSysParamOpt(aclSysParamOpt opt, int64_t value)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明设置当前Context中的系统参数值多次调用本接口以最后一次设置的值为准。调用本接口设置运行时参数值后若需获取参数值需调用aclrtCtxGetSysParamOpt接口。本接口与aclrtSetSysParamOpt接口的差别是本接口作用域是ContextaclrtSetSysParamOpt的作用域是进程。参数说明参数名输入/输出说明opt输入系统参数。类型定义请参见aclSysParamOpt。value输入系统参数值。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtCtxGetSysParamOptaclError aclrtCtxGetSysParamOpt(aclSysParamOpt opt, int64_t *value)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明获取当前Context中的系统参数值。系统参数无默认值如果不调用aclrtCtxSetSysParamOpt接口设置系统参数的值直接调用本接口获取系统参数的值接口会返回失败。参数说明参数名输入/输出说明opt输入系统参数。类型定义请参见aclSysParamOpt。value输出存放系统参数值的内存的指针。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtCtxGetCurrentDefaultStreamaclError aclrtCtxGetCurrentDefaultStream(aclrtStream *stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明获取Context上的默认Stream。参数说明参数名输入/输出说明stream输出获取到的默认Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtGetPrimaryCtxStateaclError aclrtGetPrimaryCtxState(int32_t deviceId, uint32_t *flags, int32_t *active)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明获取默认Context的状态。参数说明参数名输入/输出说明deviceId输入获取指定Device下的默认Context。用户调用aclrtGetDeviceCount接口获取可用的Device数量后这个Device ID的取值范围[0, (可用的Device数量-1)]flags输出预留参数。当前固定传NULL。active输出存放默认Context状态的指针。状态值如下- 0未激活- 1激活返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtCtxGetFloatOverflowAddraclError aclrtCtxGetFloatOverflowAddr(void **overflowAddr)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明饱和模式下获取保存溢出标记的Device内存地址该内存地址后续需作为Workspace参数传递给AI Core算子。参数说明参数名输入/输出说明overflowAddr输出保存溢出标记的Device内存地址。返回值说明返回0表示成功返回其他值表示失败请参见aclError。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考