[Mesa-stable] [Mesa-dev] [PATCH] swr/rast: Correctly allocate SWR_STATS memory as cacheline aligned
Cherniak, Bruce
bruce.cherniak at intel.com
Thu Jul 6 19:45:08 UTC 2017
Reviewed-by: Bruce Cherniak <bruce.cherniak at intel.com>
> On Jul 6, 2017, at 1:55 PM, Tim Rowley <timothy.o.rowley at intel.com> wrote:
>
> Cacheline alignment of SWR_STATS to prevent sharing of cachelines
> between threads (performance).
>
> Gets rid of gcc-7.1 warning about using c++17's over-aligned new
> feature.
>
> Cc: mesa-stable at lists.freedesktop.org
> ---
> src/gallium/drivers/swr/rasterizer/core/api.cpp | 6 +++---
> src/gallium/drivers/swr/rasterizer/core/threads.cpp | 4 ++--
> 2 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp
> index d3d80e4..087a24a 100644
> --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp
> +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp
> @@ -108,7 +108,7 @@ HANDLE SwrCreateContext(
> CreateThreadPool(pContext, &pContext->threadPool);
>
> pContext->ppScratch = new uint8_t*[pContext->NumWorkerThreads];
> - pContext->pStats = new SWR_STATS[pContext->NumWorkerThreads];
> + pContext->pStats = (SWR_STATS*)AlignedMalloc(sizeof(SWR_STATS) * pContext->NumWorkerThreads, 64);
>
> #if defined(KNOB_ENABLE_AR)
> // Setup ArchRast thread contexts which includes +1 for API thread.
> @@ -363,7 +363,7 @@ void SwrDestroyContext(HANDLE hContext)
> // free the fifos
> for (uint32_t i = 0; i < KNOB_MAX_DRAWS_IN_FLIGHT; ++i)
> {
> - delete[] pContext->dcRing[i].dynState.pStats;
> + AlignedFree(pContext->dcRing[i].dynState.pStats);
> delete pContext->dcRing[i].pArena;
> delete pContext->dsRing[i].pArena;
> pContext->pMacroTileManagerArray[i].~MacroTileMgr();
> @@ -388,7 +388,7 @@ void SwrDestroyContext(HANDLE hContext)
> }
>
> delete[] pContext->ppScratch;
> - delete[] pContext->pStats;
> + AlignedFree(pContext->pStats);
>
> delete(pContext->pHotTileMgr);
>
> diff --git a/src/gallium/drivers/swr/rasterizer/core/threads.cpp b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
> index e03632b..36710bf 100644
> --- a/src/gallium/drivers/swr/rasterizer/core/threads.cpp
> +++ b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
> @@ -363,7 +363,7 @@ INLINE void UpdateClientStats(SWR_CONTEXT* pContext, uint32_t workerId, DRAW_CON
> }
>
> DRAW_DYNAMIC_STATE& dynState = pDC->dynState;
> - SWR_STATS stats{ 0 };
> + OSALIGNLINE(SWR_STATS) stats{ 0 };
>
> // Sum up stats across all workers before sending to client.
> for (uint32_t i = 0; i < pContext->NumWorkerThreads; ++i)
> @@ -986,7 +986,7 @@ void CreateThreadPool(SWR_CONTEXT* pContext, THREAD_POOL* pPool)
> // Initialize DRAW_CONTEXT's per-thread stats
> for (uint32_t dc = 0; dc < KNOB_MAX_DRAWS_IN_FLIGHT; ++dc)
> {
> - pContext->dcRing[dc].dynState.pStats = new SWR_STATS[numThreads];
> + pContext->dcRing[dc].dynState.pStats = (SWR_STATS*)AlignedMalloc(sizeof(SWR_STATS) * numThreads, 64);
> memset(pContext->dcRing[dc].dynState.pStats, 0, sizeof(SWR_STATS) * numThreads);
> }
>
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
rvb..
More information about the mesa-stable
mailing list