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 |
内存块大小。 |
|
dataBuffer |
内存指针。 |
- |
timeOut |
当内存申请失败时,提供时延进行阻塞等待有空余内存,默认值为MALLOC_DEFAULT_TIME_OUT(表示500毫秒)。 |
- |
flag |
|
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 |