Function: malloc_host

Applicable Products

Product

Supported (√/x)

Ascend 950PR/Ascend 950DT

Atlas A3 training products/Atlas A3 inference products

Atlas A2 training products/Atlas A2 inference products

Atlas training products

Atlas inference products

Atlas 200I/500 A2 inference products

Description

Allocates the host memory (lock page memory) if the app is running on the host. The system ensures that the start address of the memory is 64-byte aligned.

For the following product forms, the host and device are integrated. Therefore, allocating host memory is equivalent to allocating device memory. In addition, memory is allocated based on normal pages. If the start address needs to be 64-byte aligned, you need to handle the alignment problem by yourself.

  • Ascend RC form

Prototype

  • C Prototype
    1
    aclError aclrtMallocHost(void **hostPtr, size_t size)
    
  • Python Function
    1
    host_ptr, ret= acl.rt.malloc_host(size)
    

Parameters

Parameter

Description

size

Int, allocated memory size, in bytes. Must not be 0.

Return Values

Return Value

Description

host_ptr

Int, address of the pointer to the allocated host memory.

ret

Int, error code. 0 on success; else, failure.

Restrictions

  • The memory allocated by this API is not initialized. Call acl.rt.memset to initialize the memory and clear random numbers in the memory before using the memory.
  • This API does not perform implicit device synchronization or stream synchronization. The memory allocation result, either success or failure, is returned immediately.
  • Memory allocated by the acl.rt.malloc_host call needs to be freed by the acl.rt.free_host call.
  • If acl.rt.malloc_host is called to allocate too much lock page memory, the physical memory used by the operating system for paging decreases, and the overall system performance deteriorates.
  • Performance deterioration will be caused by the frequent calling of acl.rt.malloc_host to allocate memory and acl.rt.free_host to free memory. You are advised to allocate or manage memory in advance to avoid frequent memory allocation and release.
  • For the Ascend RC form and Open Ctrl CPU form, the host and device are integrated. Therefore, allocating host memory is equivalent to allocating device memory. In addition, memory is allocated based on normal pages. If the start address needs to be 64-byte aligned, you need to handle the alignment problem by yourself.
  • For the Ascend RC form and Ctrl CPU open form, if you use this API to allocate a large memory block and divide and manage the memory by yourself, each memory segment must meet the following condition, where len indicates the size of a memory segment and ALIGN_UP[len,k] indicates rounding up to the nearest multiple of k bytes: ((len – 1)/k + 1) x k.
    • The memory size is rounded up to the nearest multiple of 32 plus 32 bytes (m = ALIGN_UP[len,32] + 32 bytes).
    • The memory start address must be 64-byte aligned (ALIGN_UP[m,64]).