内存二次分配管理
- 独立内存管理,根据需要单独申请所需的内存,内存不做拆分或者二次分配。
- 内存池管理内存,用户一次性申请一块较大内存,并在使用时从这块较大内存中二次分配所需内存。
在内存二次分配时,请使用如下接口从内存池申请对应内存。由于各接口对申请的内存地址、大小有约束,在内存池管理时,需要对该情况关注处理,否则容易出现内存越界。
接口 |
用途 |
输入内存/输出内存 |
---|---|---|
实现内存复制,异步接口。 |
调用本接口进行内存复制时,源地址和目的地址都必须64字节对齐。 |
|
在Device上分配size大小的线性内存,并通过“dev_ptr”返回已分配内存的指针地址。本接口分配的内存会进行字节对齐,会对用户申请的size向上对齐成32字节整数倍后再多加32字节。 |
若用户使用本接口申请大块内存并自行划分、管理内存时,每段内存需同时满足以下需求:
说明:
len表示某段内存的大小,ALIGN_UP[len, k]表示向上按k字节对齐:((len - 1) / k + 1) * k。 |
|
该接口主要用于分配内存给Device侧媒体数据处理时使用,申请的大页内存满足数据处理的要求(例如,内存首地址128对齐)。 |
媒体数据处理的输出作为模型推理的输入时,若用户使用本接口申请大块内存并自行划分、管理内存时,每段内存需同时满足以下要求:
说明:
len表示某段内存的大小,ALIGN_UP[len,k]表示向上按k字节对齐:((len-1)/k+1)*k。 |
|
申请Device上的内存,申请的内存满足媒体数据处理的要求(例如,内存首地址128字节对齐)。 |
媒体数据处理的输出作为模型推理的输入时,若用户使用本接口申请大块内存并自行划分、管理内存时,每段内存需同时满足以下要求:
说明:
len表示某段内存的大小,ALIGN_UP[len,k]表示向上按k字节对齐:((len-1)/k+1)*k。 |
|
pyACL应用程序在Host上运行时,调用该接口申请的是Host内存(该内存是锁页内存),由系统保证内存首地址64字节对齐。 pyACL应用程序在Device上运行时,调用该接口申请的是Device内存,且Device上的内存按普通页申请,如需首地址64字节对齐,需要用户自行处理对齐。 |
若用户使用本接口申请大块内存并自行划分、管理内存时,每段内存需同时满足以下需求:
说明:
len表示某段内存的大小,ALIGN_UP[len, k]表示向上按k字节对齐:((len - 1) / k + 1) * k。 |
|
申请Device上的内存,该接口在任何场景下申请的内存都是支持cache缓存。在Device上申请size大小的线性内存,通过dev_ptr返回已分配内存的指针地址。 |
计算机视觉领域一般涉及使用媒体数据处理功能,因此会涉及以上多种内存申请接口。内存首地址涉及64字节或128字节对齐,为方便统一管理,内存首地址对齐值建议选取较大项,比如内存首地址128字节对齐。