aclrtMallocHost

Description

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

In Ascend RC mode, this API is called to allocate the device memory by normal page. If 64-byte alignment is required for the start address, you need to align the start address by yourself.

Restrictions

  • The memory allocated by this API is not initialized. Call aclrtMemset 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 aclrtMallocHost call needs to be freed by the aclrtFreeHost call.
  • If aclrtMallocHost 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 too frequent calls to aclrtMallocHost and aclrtFreeHost. You are advised to allocate or manage memory in advance to avoid unnecessary memory allocation and freeing.
  • If you use this API to allocate a large memory block, and divide and manage the memory, each memory segment must meet the following requirements:
    • 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]).

    len indicates the size of a memory segment. ALIGN_UP[len,k] indicates rounding up to a multiple of k bytes as in this formula: ((len – 1)/k + 1) x k.

Prototype

aclError aclrtMallocHost(void **hostPtr, size_t size)

Parameters

Parameter

Input/Output

Description

size

Input

Requested allocation size in bytes.

Must not be 0.

hostPtr

Output

Pointer to allocated memory.

Returns

The value 0 indicates success, and other values indicate failure. For details, see aclError.

See Also

For the API call example, see Data Transfer.