目录
MemoryHelper类介绍
MemoryHelper是华为昇腾AI处理器提供的内存管理类。它封装了内存分配、内存释放、内存拷贝等操作,提供了一系列简单易用的接口,方便用户在昇腾AI处理器上管理内存。MemoryHelper支持昇腾处理器内存、主机内存、共享内存等多种类型的内存,并提供了相应的内存分配和释放接口。此外,MemoryHelper还提供了多种内存拷贝接口,支持主机内存与昇腾处理器内存之间的数据传输。在使用昇腾AI处理器进行深度学习加速时,MemoryHelper类可以帮助用户简化内存管理操作,提高开发效率。
MxbsMalloc及MxbsFree
//0表示设备ID
// 分配1000个字节的主机内存
MemoryData memoryData(1000, MemoryData::MEMORY_HOST, -1);
int ret = MemoryHelper::MxbsMalloc(memoryData);
if (ret != APP_ERR_OK) {
// 主机内存分配失败
return;
}
// 主机内存分配成功,可以使用memoryData.ptrData指向主机内存中的数据
// 使用完memoryData.ptrData后,需要释放内存
MemoryHelper::MxbsFree(memoryData);
MemoryHelper::MxbsMemset
MemoryData memoryData(1000, MemoryData::MEMORY_HOST, -1);
int ret = MemoryHelper::MxbsMalloc(memoryData);
if (ret != APP_ERR_OK) {
// 主机内存分配失败
return;
}
// 主机内存分配成功,可以使用memoryData.ptrData指向主机内存中的数据
// 将内存清零
ret = MemoryHelper::MxbsMemset(memoryData, 0, memoryData.size);
if (ret != APP_ERR_OK) {
// 内存清零失败
return;
}
// 内存清零成功
// 使用完memoryData.ptrData后,需要释放内存
MemoryHelper::MxbsFree(memoryData);
MemoryHelper::MxbsMemcpy
MemoryData srcMemoryData(1000, MemoryData::MEMORY_DEVICE, 0);
// TODO: 将数据写入srcMemoryData.ptrData中
//定义host时,device取-1
MemoryData dstMemoryData(1000, MemoryData::MEMORY_HOST, -1);
int ret = MemoryHelper::MxbsMalloc(dstMemoryData);
if (ret != APP_ERR_OK) {
// 主机内存分配失败
return;
}
// 将数据从昇腾处理器内存复制到主机内存,复制1000字节
ret = MemoryHelper::MxbsMemcpy(dstMemoryData, srcMemoryData,1000);
if (ret != APP_ERR_OK) {
// 数据复制失败
return;
}
MemoryHelper::MxbsMallocAndCopy
MemoryType::MEMORY_DVPP其实在device上。
MemoryData srcData(resizeImage.GetData().get(), resizeImage.GetDataSize(), MemoryData::MemoryType::MEMORY_DVPP,
deviceId);
MemoryData resHostData(nullptr, resizeImage.GetDataSize(), MemoryData::MemoryType::MEMORY_HOST, -1);
//将内存赋值到host上
if (MemoryHelper::MxbsMallocAndCopy(resHostData, srcData) != APP_ERR_OK) {
LogError << "Failed to mallloc and copy dvpp memory.";
return APP_ERR_ACL_BAD_COPY;
}