From 0e4817fc7d09053ca7dc73a360c14220b6f2ab3d Mon Sep 17 00:00:00 2001 From: foreman Date: Fri, 6 Apr 2018 18:08:18 -0400 Subject: [PATCH] P4 to Git Change 1537729 by cpaquot@cpaquot-ocl-lc-lnx on 2018/04/06 17:59:29 SWDEV-145570 - [HIP] Use Svm path for both hipMalloc and hipHostMalloc Make sure hipMemCpy uses SvmBuffer to fetch the cl_mem Affected files ... ... //depot/stg/opencl/drivers/opencl/api/hip/hip_memory.cpp#8 edit [ROCm/hip commit: e7f206d249c6b040027397f97bd3d09af21b432f] --- projects/hip/api/hip/hip_memory.cpp | 61 ++++++++++------------------- 1 file changed, 21 insertions(+), 40 deletions(-) diff --git a/projects/hip/api/hip/hip_memory.cpp b/projects/hip/api/hip/hip_memory.cpp index f2dfcf4b4a..ef40bdbdf6 100644 --- a/projects/hip/api/hip/hip_memory.cpp +++ b/projects/hip/api/hip/hip_memory.cpp @@ -24,9 +24,8 @@ THE SOFTWARE. #include "hip_internal.hpp" -hipError_t hipMalloc(void** ptr, size_t sizeBytes) { - HIP_INIT_API(ptr, sizeBytes); - +hipError_t ihipMalloc(void** ptr, size_t sizeBytes, unsigned int flags) +{ if (sizeBytes == 0) { *ptr = nullptr; return hipSuccess; @@ -39,36 +38,7 @@ hipError_t hipMalloc(void** ptr, size_t sizeBytes) { return hipErrorOutOfMemory; } - amd::Memory* mem = new (*g_context) amd::Buffer(*g_context, 0, sizeBytes); - if (!mem) { - return hipErrorOutOfMemory; - } - - if (!mem->create(nullptr)) { - return hipErrorMemoryAllocation; - } - - *ptr = reinterpret_cast(as_cl(mem)); - - return hipSuccess; -} - -hipError_t hipHostMalloc(void** ptr, size_t sizeBytes, unsigned int flags) { - HIP_INIT_API(ptr, sizeBytes, flags); - - if (sizeBytes == 0) { - *ptr = nullptr; - return hipSuccess; - } - else if (!ptr) { - return hipErrorInvalidValue; - } - - if (g_context->devices()[0]->info().maxMemAllocSize_ < sizeBytes) { - return hipErrorOutOfMemory; - } - - *ptr = amd::SvmBuffer::malloc(*g_context, 0, sizeBytes, g_context->devices()[0]->info().memBaseAddrAlign_); + *ptr = amd::SvmBuffer::malloc(*g_context, flags, sizeBytes, g_context->devices()[0]->info().memBaseAddrAlign_); if (!*ptr) { return hipErrorOutOfMemory; } @@ -76,16 +46,24 @@ hipError_t hipHostMalloc(void** ptr, size_t sizeBytes, unsigned int flags) { return hipSuccess; } +hipError_t hipMalloc(void** ptr, size_t sizeBytes) { + HIP_INIT_API(ptr, sizeBytes); + + return ihipMalloc(ptr, sizeBytes, 0); +} + +hipError_t hipHostMalloc(void** ptr, size_t sizeBytes, unsigned int flags) { + HIP_INIT_API(ptr, sizeBytes, flags); + + return ihipMalloc(ptr, sizeBytes, CL_MEM_SVM_FINE_GRAIN_BUFFER); +} + hipError_t hipFree(void* ptr) { if (amd::SvmBuffer::malloced(ptr)) { amd::SvmBuffer::free(*g_context, ptr); return hipSuccess; } - if (!is_valid(reinterpret_cast(ptr))) { - return hipErrorInvalidValue; - } - as_amd(reinterpret_cast(ptr))->release(); - return hipSuccess; + return hipErrorInvalidValue; } hipError_t hipMemcpy(void* dst, const void* src, size_t sizeBytes, hipMemcpyKind kind) { @@ -102,15 +80,18 @@ hipError_t hipMemcpy(void* dst, const void* src, size_t sizeBytes, hipMemcpyKind amd::Command* command; amd::Command::EventWaitList waitList; + amd::Memory* memory; switch (kind) { case hipMemcpyDeviceToHost: + memory = amd::SvmManager::FindSvmBuffer(src); command = new amd::ReadMemoryCommand(*queue, CL_COMMAND_READ_BUFFER, waitList, - *as_amd(reinterpret_cast(const_cast(src)))->asBuffer(), 0, sizeBytes, dst); + *memory->asBuffer(), 0, sizeBytes, dst); break; case hipMemcpyHostToDevice: + memory = amd::SvmManager::FindSvmBuffer(dst); command = new amd::WriteMemoryCommand(*queue, CL_COMMAND_WRITE_BUFFER, waitList, - *as_amd(reinterpret_cast(dst))->asBuffer(), 0, sizeBytes, src); + *memory->asBuffer(), 0, sizeBytes, src); break; default: assert(!"Shouldn't reach here");