Merge pull request #970 from mangupta/swdev-172995
hipExtMallocWithFlags implementation
[ROCm/hip commit: 30b5c02ec4]
This commit is contained in:
@@ -177,6 +177,8 @@ enum hipLimit_t {
|
|||||||
0x80000000 ///< Allocate non-coherent memory. Overrides HIP_COHERENT_HOST_ALLOC for specific
|
0x80000000 ///< Allocate non-coherent memory. Overrides HIP_COHERENT_HOST_ALLOC for specific
|
||||||
///< allocation.
|
///< allocation.
|
||||||
|
|
||||||
|
#define hipDeviceMallocDefault 0x0
|
||||||
|
#define hipDeviceMallocFinegrained 0x1 ///< Memory is allocated in fine grained region of device.
|
||||||
|
|
||||||
//! Flags that can be used with hipHostRegister
|
//! Flags that can be used with hipHostRegister
|
||||||
#define hipHostRegisterDefault 0x0 ///< Memory is Mapped and Portable
|
#define hipHostRegisterDefault 0x0 ///< Memory is Mapped and Portable
|
||||||
@@ -1055,6 +1057,22 @@ hipError_t hipPointerGetAttributes(hipPointerAttribute_t* attributes, const void
|
|||||||
*/
|
*/
|
||||||
hipError_t hipMalloc(void** ptr, size_t size);
|
hipError_t hipMalloc(void** ptr, size_t size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Allocate memory on the default accelerator
|
||||||
|
*
|
||||||
|
* @param[out] ptr Pointer to the allocated memory
|
||||||
|
* @param[in] size Requested memory size
|
||||||
|
* @param[in] flags Type of memory allocation
|
||||||
|
*
|
||||||
|
* If size is 0, no memory is allocated, *ptr returns nullptr, and hipSuccess is returned.
|
||||||
|
*
|
||||||
|
* @return #hipSuccess, #hipErrorMemoryAllocation, #hipErrorInvalidValue (bad context, null *ptr)
|
||||||
|
*
|
||||||
|
* @see hipMallocPitch, hipFree, hipMallocArray, hipFreeArray, hipMalloc3D, hipMalloc3DArray,
|
||||||
|
* hipHostFree, hipHostMalloc
|
||||||
|
*/
|
||||||
|
hipError_t hipExtMallocWithFlags(void** ptr, size_t sizeBytes, unsigned int flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Allocate pinned host memory [Deprecated]
|
* @brief Allocate pinned host memory [Deprecated]
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -264,6 +264,42 @@ hipError_t hipMalloc(void** ptr, size_t sizeBytes) {
|
|||||||
return ihipLogStatus(hip_status);
|
return ihipLogStatus(hip_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hipError_t hipExtMallocWithFlags(void** ptr, size_t sizeBytes, unsigned int flags) {
|
||||||
|
HIP_INIT_SPECIAL_API(hipExtMallocWithFlags, (TRACE_MEM), ptr, sizeBytes, flags);
|
||||||
|
HIP_SET_DEVICE();
|
||||||
|
|
||||||
|
#if (__hcc_workweek__ >= 19115)
|
||||||
|
hipError_t hip_status = hipSuccess;
|
||||||
|
|
||||||
|
auto ctx = ihipGetTlsDefaultCtx();
|
||||||
|
// return NULL pointer when malloc size is 0
|
||||||
|
if (sizeBytes == 0) {
|
||||||
|
*ptr = NULL;
|
||||||
|
hip_status = hipSuccess;
|
||||||
|
} else if ((ctx == nullptr) || (ptr == nullptr)) {
|
||||||
|
hip_status = hipErrorInvalidValue;
|
||||||
|
} else {
|
||||||
|
unsigned amFlags = 0;
|
||||||
|
if (flags & hipDeviceMallocFinegrained) {
|
||||||
|
amFlags = amDeviceFinegrained;
|
||||||
|
} else if (flags != hipDeviceMallocDefault) {
|
||||||
|
hip_status = hipErrorInvalidValue;
|
||||||
|
return ihipLogStatus(hip_status);
|
||||||
|
}
|
||||||
|
auto device = ctx->getWriteableDevice();
|
||||||
|
*ptr = hip_internal::allocAndSharePtr("device_mem", sizeBytes, ctx, false /*shareWithAll*/,
|
||||||
|
amFlags /*amFlags*/, 0 /*hipFlags*/, 0);
|
||||||
|
|
||||||
|
if (sizeBytes && (*ptr == NULL)) {
|
||||||
|
hip_status = hipErrorMemoryAllocation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
hipError_t hip_status = hipErrorMemoryAllocation;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ihipLogStatus(hip_status);
|
||||||
|
}
|
||||||
|
|
||||||
hipError_t hipHostMalloc(void** ptr, size_t sizeBytes, unsigned int flags) {
|
hipError_t hipHostMalloc(void** ptr, size_t sizeBytes, unsigned int flags) {
|
||||||
HIP_INIT_SPECIAL_API(hipHostMalloc, (TRACE_MEM), ptr, sizeBytes, flags);
|
HIP_INIT_SPECIAL_API(hipHostMalloc, (TRACE_MEM), ptr, sizeBytes, flags);
|
||||||
|
|||||||
Reference in New Issue
Block a user