|
|
|
@ -45,16 +45,9 @@ NpuMemoryAllocator *NpuMemoryAllocator::GetAllocator() {
|
|
|
|
|
NpuMemoryAllocator::NpuMemoryAllocator(uint32_t device_id) : device_id_(device_id) {}
|
|
|
|
|
|
|
|
|
|
void *NpuMemoryAllocator::Allocate(std::size_t size, AllocationAttr *attr) {
|
|
|
|
|
void *try_reuse_addr = nullptr;
|
|
|
|
|
size_t allocate_size = size;
|
|
|
|
|
MemStorageType mem_type = HBM;
|
|
|
|
|
if (attr != nullptr) {
|
|
|
|
|
try_reuse_addr = attr->try_reuse_addr_;
|
|
|
|
|
if (attr->padding_ != 0) {
|
|
|
|
|
// padding up to multiple of attr->padding, and add extra attr->padding_
|
|
|
|
|
allocate_size = (size + 2 * attr->padding_ - 1) / attr->padding_ * attr->padding_;
|
|
|
|
|
GELOGD("Padding size %ld by %d. final size = %zu.", size, attr->padding_, allocate_size);
|
|
|
|
|
}
|
|
|
|
|
mem_type = attr->mem_type_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -69,6 +62,18 @@ void *NpuMemoryAllocator::Allocate(std::size_t size, AllocationAttr *attr) {
|
|
|
|
|
} else if (mem_type == HOST_DDR) {
|
|
|
|
|
buffer = malloc(allocate_size);
|
|
|
|
|
} else {
|
|
|
|
|
void *try_reuse_addr = nullptr;
|
|
|
|
|
int padding = kDefaultPadding;
|
|
|
|
|
if (attr != nullptr) {
|
|
|
|
|
try_reuse_addr = attr->try_reuse_addr_;
|
|
|
|
|
if (attr->padding_ > 0) {
|
|
|
|
|
padding = attr->padding_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// padding up to multiple of padding, and add extra padding
|
|
|
|
|
allocate_size = (size + 2 * padding - 1) / padding * padding;
|
|
|
|
|
GELOGD("Padding size %ld by %d. final size = %zu.", size, padding, allocate_size);
|
|
|
|
|
}
|
|
|
|
|
buffer = MemManager::Instance()
|
|
|
|
|
.CachingInstance(RT_MEMORY_HBM)
|
|
|
|
|
.Malloc(allocate_size, reinterpret_cast<uint8_t *>(try_reuse_addr), device_id_);
|
|
|
|
|