From 61fed7b37386dcb79f1da6271b3f401580f84794 Mon Sep 17 00:00:00 2001 From: Bryan Bernhart Date: Sat, 18 Jun 2022 11:11:10 -0700 Subject: [PATCH] Fix uint64_t to double cast with SafeDivison. --- src/gpgmm/common/BuddyMemoryAllocator.cpp | 2 +- src/gpgmm/common/SlabMemoryAllocator.cpp | 7 +++---- src/gpgmm/d3d12/ResidencyManagerD3D12.cpp | 2 +- src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp | 12 ++++-------- src/gpgmm/utils/Math.cpp | 8 -------- src/gpgmm/utils/Math.h | 9 ++++++++- src/gpgmm/utils/WindowsTime.cpp | 5 ++--- 7 files changed, 19 insertions(+), 26 deletions(-) diff --git a/src/gpgmm/common/BuddyMemoryAllocator.cpp b/src/gpgmm/common/BuddyMemoryAllocator.cpp index 1f849038d..38a6852ad 100644 --- a/src/gpgmm/common/BuddyMemoryAllocator.cpp +++ b/src/gpgmm/common/BuddyMemoryAllocator.cpp @@ -37,7 +37,7 @@ namespace gpgmm { uint64_t BuddyMemoryAllocator::GetMemoryIndex(uint64_t offset) const { ASSERT(offset != kInvalidOffset); - return SafeDivison(offset, mMemorySize); + return SafeDivide(offset, mMemorySize); } std::unique_ptr BuddyMemoryAllocator::TryAllocateMemory( diff --git a/src/gpgmm/common/SlabMemoryAllocator.cpp b/src/gpgmm/common/SlabMemoryAllocator.cpp index fba557d7c..ccb778c0b 100644 --- a/src/gpgmm/common/SlabMemoryAllocator.cpp +++ b/src/gpgmm/common/SlabMemoryAllocator.cpp @@ -201,7 +201,7 @@ namespace gpgmm { } } - Slab* pNewFreeSlab = new Slab(SafeDivison(slabSize, mBlockSize), mBlockSize); + Slab* pNewFreeSlab = new Slab(SafeDivide(slabSize, mBlockSize), mBlockSize); pCache->FreeList.push_front(pNewFreeSlab); pFreeSlab = pNewFreeSlab; } @@ -271,9 +271,8 @@ namespace gpgmm { if (allowSlabPrefetch && mInfo.PrefetchedMemoryMissesEliminated < mInfo.PrefetchedMemoryMisses) { const double currentCoverage = - SafeDivison(mInfo.PrefetchedMemoryMissesEliminated, - static_cast(mInfo.PrefetchedMemoryMissesEliminated + - mInfo.PrefetchedMemoryMisses)); + SafeDivide(mInfo.PrefetchedMemoryMissesEliminated, + mInfo.PrefetchedMemoryMissesEliminated + mInfo.PrefetchedMemoryMisses); if (currentCoverage < kPrefetchCoverageWarnMinThreshold) { WarnEvent(GetTypename(), EventMessageId::PrefetchFailed) << "Allow prefetch disabled, coverage went below threshold: (" diff --git a/src/gpgmm/d3d12/ResidencyManagerD3D12.cpp b/src/gpgmm/d3d12/ResidencyManagerD3D12.cpp index aaf16cfed..1d60368fe 100644 --- a/src/gpgmm/d3d12/ResidencyManagerD3D12.cpp +++ b/src/gpgmm/d3d12/ResidencyManagerD3D12.cpp @@ -278,7 +278,7 @@ namespace gpgmm::d3d12 { .c_str(), (pVideoMemoryInfo->CurrentUsage > pVideoMemoryInfo->Budget) ? 100 - : SafeDivison(pVideoMemoryInfo->CurrentUsage, pVideoMemoryInfo->Budget) * 100); + : SafeDivide(pVideoMemoryInfo->CurrentUsage, pVideoMemoryInfo->Budget) * 100); // Reservations are optional. GPGMM_TRACE_EVENT_METRIC( diff --git a/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp b/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp index 761942d34..95d6fa5ed 100644 --- a/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp +++ b/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp @@ -1122,24 +1122,20 @@ namespace gpgmm::d3d12 { GPGMM_TRACE_EVENT_METRIC( "GPU allocation utilization (%)", - SafeDivison(result.UsedBlockUsage, - static_cast(result.UsedMemoryUsage + result.FreeMemoryUsage)) * + SafeDivide(result.UsedBlockUsage, result.UsedMemoryUsage + result.FreeMemoryUsage) * 100); GPGMM_TRACE_EVENT_METRIC("GPU allocation free (MB)", result.FreeMemoryUsage / 1e6); GPGMM_TRACE_EVENT_METRIC( "GPU prefetch memory cache (%)", - SafeDivison(result.PrefetchedMemoryMissesEliminated, - static_cast(result.PrefetchedMemoryMisses + - result.PrefetchedMemoryMissesEliminated)) * + SafeDivide(result.PrefetchedMemoryMissesEliminated, + result.PrefetchedMemoryMisses + result.PrefetchedMemoryMissesEliminated) * 100); GPGMM_TRACE_EVENT_METRIC( "GPU request cache (%)", - SafeDivison(result.CacheSizeHits, - static_cast(result.CacheSizeMisses + result.CacheSizeHits)) * - 100); + SafeDivide(result.CacheSizeHits, result.CacheSizeMisses + result.CacheSizeHits) * 100); return result; } diff --git a/src/gpgmm/utils/Math.cpp b/src/gpgmm/utils/Math.cpp index f4ecc8405..fb48d45e5 100644 --- a/src/gpgmm/utils/Math.cpp +++ b/src/gpgmm/utils/Math.cpp @@ -106,12 +106,4 @@ namespace gpgmm { return ((n + m - 1) / m) * m; } - double SafeDivison(double a, double b) { - if (b == 0) { - return 0.; - } else { - return a / b; - } - } - } // namespace gpgmm diff --git a/src/gpgmm/utils/Math.h b/src/gpgmm/utils/Math.h index 201b986ef..e0d14e722 100644 --- a/src/gpgmm/utils/Math.h +++ b/src/gpgmm/utils/Math.h @@ -58,7 +58,14 @@ namespace gpgmm { uint64_t RoundUp(uint64_t n, uint64_t m); // Evaluates a/b, avoiding division by zero. - double SafeDivison(double a, double b); + template + double SafeDivide(T dividend, T divisor) { + if (divisor == 0) { + return 0.0; + } else { + return dividend / divisor; + } + } } // namespace gpgmm diff --git a/src/gpgmm/utils/WindowsTime.cpp b/src/gpgmm/utils/WindowsTime.cpp index 7ec80ef60..807e8837b 100644 --- a/src/gpgmm/utils/WindowsTime.cpp +++ b/src/gpgmm/utils/WindowsTime.cpp @@ -29,7 +29,7 @@ namespace gpgmm { LARGE_INTEGER curTime; const bool success = QueryPerformanceCounter(&curTime); ASSERT(success); - return SafeDivison(static_cast(curTime.QuadPart), GetFrequency()); + return SafeDivide(curTime.QuadPart, GetFrequency()); } void StartElapsedTime() override { @@ -43,8 +43,7 @@ namespace gpgmm { LARGE_INTEGER endCount; const bool success = QueryPerformanceCounter(&endCount); ASSERT(success); - return SafeDivison(static_cast(endCount.QuadPart - mCounterStart), - GetFrequency()); + return SafeDivide(endCount.QuadPart - mCounterStart, GetFrequency()); } private: