diff --git a/projects/hip/include/hcc_detail/AM.h b/projects/hip/include/hcc_detail/AM.h index 04804ffaa5..40d9ea8382 100644 --- a/projects/hip/include/hcc_detail/AM.h +++ b/projects/hip/include/hcc_detail/AM.h @@ -79,6 +79,7 @@ am_status_t AM_free(void* ptr); am_status_t AM_copy(void* dst, const void* src, size_t size); + /** * Return information about tracked pointer. * @@ -94,11 +95,23 @@ am_status_t AM_copy(void* dst, const void* src, size_t size); am_status_t am_memtracker_getinfo(hc::AmPointerInfo *info, const void *ptr); -//TODO-doc +/** + * Adds a pointer to the memory tracker. + * + * @return AM_SUCCESS + * @see am_memtracker_getinfo + */ am_status_t am_memtracker_add(void* ptr, size_t sizeBytes, hc::accelerator acc, bool isDeviceMem=false); -//TODO-doc +/* + * Updates infor for an existing pointer in the memory tracker. + * + * @returns AM_ERROR_MISC if pointer is not found in tracker. + * @returns AM_SUCCESS if pointer is not found in tracker. + * + * @see am_memtracker_getinfo, am_memtracker_add + */ am_status_t am_memtracker_update(const void* ptr, int appId, unsigned allocationFlags); @@ -109,23 +122,33 @@ am_status_t am_memtracker_update(const void* ptr, int appId, unsigned allocation * * @returns AM_ERROR_MISC if pointer is not found in tracker. * @returns AM_SUCCESS if pointer is not found in tracker. + * + * @see am_memtracker_getinfo, am_memtracker_add */ am_status_t am_memtracker_remove(void* ptr); /** - * Remove all memory allocations associated with specified accelerator. + * Remove all memory allocations associated with specified accelerator from the memory tracker. * * @returns Number of entries reset. + * @see am_memtracker_getinfo */ size_t am_memtracker_reset(hc::accelerator acc); /** - * Prints info about the memory tracker table. + * Prints the entries in the memory tracker table. * * Intended primarily for debug purposes. + * @see am_memtracker_getinfo **/ void am_memtracker_print(); + +/** + * Returns total sizes of device, host, and user memory allocated by the application + * + * User memory is registered with am_tracker_add. + **/ void am_memtracker_sizeinfo(hc::accelerator acc, size_t *deviceMemSize, size_t *hostMemSize, size_t *userMemSize); diff --git a/projects/hip/src/hc_AM.cpp b/projects/hip/src/hc_AM.cpp index 2d22b49fd4..221322f4b0 100644 --- a/projects/hip/src/hc_AM.cpp +++ b/projects/hip/src/hc_AM.cpp @@ -73,12 +73,6 @@ public: size_t reset (hc::accelerator acc); private: - // TODO - use or remove. - inline void writeLock(); - inline void writeUnlock(); - inline void readLock(); - inline void readUnlock(); - MapTrackerType _tracker; std::mutex _mutex; //std::shared_timed_mutex _mut; @@ -117,20 +111,6 @@ AmPointerTracker::MapTrackerType::iterator AmPointerTracker::find (const void * } -#if 0 -//--- -std::ostream & AmPointerTracker::print (std::ostream &os) -{ - std::lock_guard l (_mutex); - for (auto iter = _tracker.begin() ; iter != _tracker.end(); iter++) { - os << " " << iter->first._basePointer << "..." << iter->first._endPointer << ":: "; - os << iter->second << std::endl; - } - - return os; -} -#endif - //--- // Remove all tracked locations, and free the associated memory (if the range was originally allocated by AM). // Returns count of ranges removed. @@ -158,39 +138,6 @@ size_t AmPointerTracker::reset (hc::accelerator acc) } - -//--- -void AmPointerTracker::writeLock () -{ - _mutex.lock(); -} - - -//--- -void AmPointerTracker::writeUnlock () -{ - _mutex.unlock(); -} - - -//--- -// TODO - support multiple concurrent reader -void AmPointerTracker::readLock () -{ - _mutex.lock(); -} - - -//--- -// TODO - support multiple concurrent reader -void AmPointerTracker::readUnlock () -{ - _mutex.unlock(); -} - - - - //========================================================================================================= // Global var defs: //========================================================================================================= @@ -289,6 +236,17 @@ am_status_t am_memtracker_getinfo(hc::AmPointerInfo *info, const void *ptr) } } +am_status_t am_memtracker_add(void* ptr, size_t sizeBytes, hc::accelerator acc, bool isDeviceMem) +{ + if (isDeviceMem) { + g_amPointerTracker.insert(ptr, hc::AmPointerInfo(ptr/*hostPointer*/, ptr /*devicePointer*/, sizeBytes, acc, true/*isDevice*/, false /*isAMManaged*/)); + } else { + g_amPointerTracker.insert(ptr, hc::AmPointerInfo(NULL/*hostPointer*/, ptr /*devicePointer*/, sizeBytes, acc, false/*isDevice*/, false /*isAMManaged*/)); + } + + return AM_SUCCESS; +} + am_status_t am_memtracker_update(const void* ptr, int appId, unsigned allocationFlags) { @@ -303,18 +261,6 @@ am_status_t am_memtracker_update(const void* ptr, int appId, unsigned allocation } -am_status_t am_memtracker_add(void* ptr, size_t sizeBytes, hc::accelerator acc, bool isDeviceMem) -{ - if (isDeviceMem) { - g_amPointerTracker.insert(ptr, hc::AmPointerInfo(ptr/*hostPointer*/, ptr /*devicePointer*/, sizeBytes, acc, true/*isDevice*/, false /*isAMManaged*/)); - } else { - g_amPointerTracker.insert(ptr, hc::AmPointerInfo(NULL/*hostPointer*/, ptr /*devicePointer*/, sizeBytes, acc, false/*isDevice*/, false /*isAMManaged*/)); - } - - return AM_SUCCESS; -} - - am_status_t am_memtracker_remove(void* ptr) { am_status_t status = AM_SUCCESS;