总体说明
aclrtGetErrorCodeFromExceptionInfo
函数功能
获取异常信息中的错误码,同步接口。该接口与aclrtSetExceptionInfoCallback接口配合使用。
函数原型
uint32_t aclrtGetErrorCodeFromExceptionInfo(const aclrtExceptionInfo *info)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| info | 输入 | 异常信息的指针。 在执行任务之前调用aclrtSetExceptionInfoCallback接口,系统会将产生异常的任务ID、Stream ID、线程ID、Device ID、错误码存放在aclExceptionInfo结构体中。 |
返回值说明
返回异常信息中的错误码,返回值为0xFFFFFFFF(以十六进制为例)时表示Device异常。
父主题: 同步等待
aclrtSetOpWaitTimeout
函数功能
本接口用于设置等待Event完成的超时时间。同步接口。
约束说明
-
不调用本接口,则默认不超时;一个进程内多次调用本接口,则以最后一次设置的时间为准。
-
一个进程内,调用aclInit接口初始化AscendCL后,调用本接口设置超时时间,本进程内后续调用aclrtStreamWaitEvent接口下发的任务支持在所设置的超时时间内等待。
由于aclrtStreamWaitEvent接口是异步接口,调用接口成功仅表示任务下发成功,不表示任务执行成功,因此若等待的时间超过所设置的超时时间,则在调用aclrtSynchronizeStream接口后,会返回报错。
函数原型
aclError aclrtSetOpWaitTimeout(uint32_t timeout)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| timeout | 输入 | 设置超时时间,单位为秒。 将该参数设置为0时,表示不超时。 |
返回值说明
返回0表示成功,返回其它值表示失败。
父主题: 同步等待
总体说明
- 若涉及媒体数据处理功能,关于内存使用,有以下注意事项:
- 由于媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,如下:
- 调用媒体数据处理V1版本的接口对图片进行抠图、缩放等操作时,调用acldvppMalloc接口申请内存。
- 调用媒体数据处理V2版本的接口对图片进行抠图、缩放等操作时,调用hi_mpi_dvpp_malloc接口申请内存。
- 调用1申请出来的内存可以满足媒体数据处理的要求,也可以在其它任务中使用,例如,从性能角度,为了减少拷贝,媒体数据处理的输出作为模型推理的输入,实现内存复用。
- 但由于媒体数据处理访问的地址空间有限,为确保媒体数据处理时内存足够,除媒体数据处理功能外的其它功能(例如,模型加载),建议调用内存管理章节下的aclrtMalloc接口、或aclrtMallocHost接口、或aclrtMallocCached接口申请内存。
- 由于媒体数据处理功能对存放输入、输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,如下:
父主题: 内存管理
aclrtMalloc
函数功能
在Device上申请size大小的线性内存,该接口对用户申请的size向上对齐成32字节整数倍后再多加32字节,并通过*devPtr返回已分配内存的指针。同步接口。
通过该接口申请的Device内存都支持cache缓存,不需要用户处理cpu与npu之间的cache一致性。
调用媒体数据处理的接口前,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存。
约束说明
-
使用aclrtMalloc接口申请的内存,需要通过aclrtFree接口释放内存。
-
频繁调用aclrtMalloc接口申请内存、调用aclrtFree接口释放内存,会损耗性能,建议用户提前做内存预先分配或二次管理,避免频繁申请/释放内存。
-
若用户使用本接口申请大块内存并自行划分、管理内存时,建议使用aclrtMallocAlign32接口,该接口相比aclrtMalloc接口,只会对用户申请的size向上对齐成32字节整数倍,不会再多加32字节。
不管是aclrtMalloc接口,还是aclrtMallocAlign32接口,每段内存需同时满足以下需求:
- 内存大小向上对齐成32整数倍+32字节(m=ALIGN_UP[len,32]+32字节);
- 内存起始地址需满足64字节对齐(ALIGN_UP[m,64])。
:::note 说明 len表示某段内存的大小,ALIGN_UP[len,k]表示向上按k字节对齐:((len-1)/k+1)*k。 :::
函数原型
aclError aclrtMalloc(void **devPtr, size_t size, aclrtMemMallocPolicy policy)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| devPtr | 输出 | “Device上已分配内存的指针”的指针。 |
| size | 输入 | 申请内存的大小,单位Byte。 size不能为0。 |
| policy | 输入 | 内存分配规则。 |
返回值说明
返回0表示成功,返回其它值表示失败。
参考资源
接口调用示例,参见数据传输。
父主题: 内存管理
aclrtMallocAlign32
函数功能
申请大块内存并自行划分、管理内存时,可调用本接口在Device上申请size大小的线性内存,该接口对用户申请的size向上对齐成32字节整数倍,并通过*devPtr返回已分配内存的指针。同步接口。
与aclrtMalloc接口相比,本接口只会对用户申请的size向上对齐成32字节整数倍,不会再多加32字节。
通过该接口申请的Device内存都支持cache缓存,不需要用户处理cpu与npu之间的cache一致性。
调用媒体数据处理的接口前,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存。
约束说明
-
使用aclrtMallocAlign32接口申请的内存,需要通过aclrtFree接口释放内存。
-
频繁调用aclrtMallocAlign32接口申请内存、调用aclrtFree接口释放内存,会损耗性能,建议用户提前做内存预先分配或二次管理,避免频繁申请/释放内存。
-
若用户使用本接口申请大块内存并自行划分、管理内存时,每段内存需同时满足以下需求:
- 内存大小向上对齐成32整数倍+32字节(m=ALIGN_UP[len,32]+32字节);
- 内存起始地址需满足64字节对齐(ALIGN_UP[m,64])。
:::note 说明 len表示某段内存的大小,ALIGN_UP[len,k]表示向上按k字节对齐:((len-1)/k+1)*k。 :::
函数原型
aclError aclrtMallocAlign32(void **devPtr, size_t size, aclrtMemMallocPolicy policy)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| devPtr | 输出 | “Device上已分配内存的指针”的指针。 |
| size | 输入 | 申请内存的大小,单位Byte。 size不能为0。 |
| policy | 输入 | 内存分配规则。 |
返回值说明
返回0表示成功,返回其它值表示失败。
父主题: 内存管理
aclrtMallocCached
函数功能
在Device上申请size大小的线性内存,通过*devPtr返回已分配内存的指针,该接口在任何场景下申请的内存都是支持cache缓存。同步接口。
使用aclrtMallocCached接口申请的内存与使用aclrtMalloc接口申请的内存是等价的,都支持cache缓存。
调用媒体数据处理的接口前,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存。
约束说明
其它约束与aclrtMalloc接口相同。
函数原型
aclError aclrtMallocCached(void **devPtr, size_t size, aclrtMemMallocPolicy policy)
参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| devPtr | 输出 | “Device上已分配内存的指针”的指针。 |
| size | 输入 | 申请内存的大小,单位Byte。 size不能为0。 |
| policy | 输入 | 内存分配规则。 |
返回值说明
返回0表示成功,返回其它值表示失败。
父主题: 内存管理
在线提单