更新时间:2021-03-18 GMT+08:00
分享

HIAIMemory::HIAI_DMalloc

通过Matrix接口申请Host侧或Device侧的内存块,配合高效数据传输使用。该接口在ai_memory.h中定义。

若要给Device端分配DVPP使用的内存,您需要参考HIAIMemory::HIAI_DVPP_DMalloc

使用场景:

通过Matrix框架,将大数据从Host端搬运到Device端,该接口需要配合宏:HIAI_REGISTER_SERIALIZE_FUNC使用。

例如:需要将1080P或者4K图像发送到Device端,如果需要提升传输性能,则必须通过HIAI_REGISTER_SERIALIZE_FUNC注册结构体转换和反转函数,另外,大数据块内存则通过HIAI_DMalloc接口申请内存,使用该方式,传输性能将得到很大提升。

  • 该接口主要用于Host与Device的搬运大数据的性能问题,不推荐当做普通的malloc使用。
  • 出于性能考虑,该接口会预申请内存,实际占用内存大小与申请内存大小存在一定差异,该接口的运行时间也会存在波动。

函数格式

static HIAI_StatusT HIAIMemory::HIAI_DMalloc (const uint32_t dataSize, void*& dataBuffer, const uint32_t timeOut = MALLOC_DEFAULT_TIME_OUT, uint32_t flag = MEMORY_ATTR_AUTO_FREE)

参数说明

参数

说明

取值范围

dataSize

内存块大小。

  • 如果调用该接口申请Host侧内存,则取值范围是:0~256M Bytes,不包含0。推荐使用256K Bytes~256M Bytes。
  • 如果调用该接口申请Device侧内存,则取值范围是:0~(256M Bytes-96 Bytes),不包含0。推荐使用(256K Bytes-96 Byte)~(256M Bytes-96 Bytes)。Device侧模型管家会占用96 Bytes。

dataBuffer

内存指针。

-

timeOut

当内存申请失败时,提供时延进行阻塞等待有空余内存,默认值为MALLOC_DEFAULT_TIME_OUT(表示500毫秒)。

-

flag

  • MEMORY_ATTR_AUTO_FREE :默认值, 如果设置了此值,表示如果分配了内存,且通过SendData接口发送数据到对端,则无需调用HIAIMemory::HIAI_DFree,程序运行结束后,内存会自动释放;如果分配了内存,但没有通过SendData接口发送数据到对端,则需要调用HIAIMemory::HIAI_DFree释放内存。
  • MEMORY_ATTR_MANUAL_FREE:如设置此值,表示无论何种情况,必须调用HIAIMemory::HIAI_DFree释放内存。
  • MEMORY_ATTR_NONE和MEMORY_ATTR_MAX当前未使用。

typedef enum {

MEMORY_ATTR_NONE = 0,

//框架自行释放DMalloc内存

MEMORY_ATTR_AUTO_FREE = (0x1 << 1),

//需要手动调用DFree释放内存

MEMORY_ATTR_MANUAL_FREE = (0x1 << 2),

MEMORY_ATTR_MAX

} HIAI_MEMORY_ATTR;

返回值

返回的部分错误码请参见“错误码示例”中的“错误码”列。

错误码示例

序号

错误码

错误码描述

1

HIAI_OK

running ok

2

HIAI_GRAPH_NOT_EXIST

graph not exist

3

HIAI_GRAPH_MEMORY_POOL_NOT_EXISTED

memory pool is not existed

4

HIAI_GRAPH_MALLOC_LARGER

failed to malloc buffer due to the size larger than 256M

5

HIAI_MEMORY_POOL_UPDATE_FAILED

failed to update memory pool

6

HIAI_GRAPH_SENDMSG_FAILED

hdc send msg failed

7

HIAI_GRAPH_MEMORY_POOL_INITED

memory pool has inited

8

HIAI_GRAPH_NO_MEMORY

no memory

分享:

    相关文档

    相关产品