diff --git a/include/hip/hcc_detail/hip_runtime_api.h b/include/hip/hcc_detail/hip_runtime_api.h index f156d3fdbd..fb8535cfec 100644 --- a/include/hip/hcc_detail/hip_runtime_api.h +++ b/include/hip/hcc_detail/hip_runtime_api.h @@ -1236,6 +1236,9 @@ hipError_t hipMemsetAsync(void* dst, int value, size_t sizeBytes, hipStream_t st hipError_t hipMemGetInfo (size_t * free, size_t * total) ; +hipError_t hipMemPtrGetInfo(void *ptr, size_t *size); + + /** * @brief Allocate an array on the device. * diff --git a/src/hip_memory.cpp b/src/hip_memory.cpp index 479040c099..29315fa09d 100644 --- a/src/hip_memory.cpp +++ b/src/hip_memory.cpp @@ -1024,6 +1024,27 @@ hipError_t hipMemGetInfo (size_t *free, size_t *total) return ihipLogStatus(e); } +hipError_t hipMemPtrGetInfo(void *ptr, size_t *size) +{ + HIP_INIT_API(ptr, size); + + hipError_t e = hipSuccess; + + if(ptr != nullptr && size != nullptr){ + hc::accelerator acc; + hc::AmPointerInfo amPointerInfo(NULL, NULL, 0, acc, 0, 0); + am_status_t status = hc::am_memtracker_getinfo(&amPointerInfo, ptr); + if(status == AM_SUCCESS){ + *size = amPointerInfo._sizeBytes; + }else{ + e = hipErrorInvalidValue; + } + }else{ + e = hipErrorInvalidValue; + } + return ihipLogStatus(e); +} + hipError_t hipFree(void* ptr) { HIP_INIT_API(ptr); diff --git a/tests/src/runtimeApi/memory/hipHostGetFlags.cpp b/tests/src/runtimeApi/memory/hipHostGetFlags.cpp index a989b879ac..9fad60aec8 100644 --- a/tests/src/runtimeApi/memory/hipHostGetFlags.cpp +++ b/tests/src/runtimeApi/memory/hipHostGetFlags.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2015-2016 Advanced Micro Devices, Inc. All rights reserved. +Copyright (c) 2015-2017 Advanced Micro Devices, Inc. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/tests/src/runtimeApi/memory/hipMemPtrGetInfo.cpp b/tests/src/runtimeApi/memory/hipMemPtrGetInfo.cpp new file mode 100644 index 0000000000..5aa0072199 --- /dev/null +++ b/tests/src/runtimeApi/memory/hipMemPtrGetInfo.cpp @@ -0,0 +1,52 @@ +/* +Copyright (c) 2015-2017 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +/* HIT_START + * BUILD: %t %s ../../test_common.cpp + * RUN: %t + * HIT_END + */ + +#include"test_common.h" + +struct { + float a; + int b; + void *c; +} Struct ; + +int main(){ + int *iPtr; + float *fPtr; + struct Struct *sPtr; + size_t sSetSize = 1024, sGetSize; + hipMalloc(&iPtr, sSetSize); + hipMalloc(&fPtr, sSetSize); + hipMalloc(&sPtr, sSetSize); + hipMemPtrGetInfo(iPtr, &sGetSize); + assert(sGetSize == sSetSize); + hipMemPtrGetInfo(fPtr, &sGetSize); + assert(sGetSize == sSetSize); + hipMemPtrGetInfo(sPtr, &sGetSize); + assert(sGetSize == sSetSize); + passed(); +}