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.
Parent topic: Memory Management