[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-dev mailing list