mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
swr: [rasterizer core] Affinitize thread scratch space to numa node of worker
Acked-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
f89f6d562a
commit
c25244f2f7
3 changed files with 16 additions and 4 deletions
|
|
@ -93,8 +93,16 @@ HANDLE SwrCreateContext(
|
|||
///@note We could lazily allocate this but its rather small amount of memory.
|
||||
for (uint32_t i = 0; i < pContext->NumWorkerThreads; ++i)
|
||||
{
|
||||
///@todo Use numa API for allocations using numa information from thread data (if exists).
|
||||
pContext->pScratch[i] = (uint8_t*)_aligned_malloc((32 * 1024), KNOB_SIMD_WIDTH * 4);
|
||||
#if defined(_WIN32)
|
||||
uint32_t numaNode = pContext->threadPool.pThreadData ?
|
||||
pContext->threadPool.pThreadData[i].numaId : 0;
|
||||
pContext->pScratch[i] = (uint8_t*)VirtualAllocExNuma(
|
||||
GetCurrentProcess(), nullptr, 32 * sizeof(KILOBYTE),
|
||||
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE,
|
||||
numaNode);
|
||||
#else
|
||||
pContext->pScratch[i] = (uint8_t*)_aligned_malloc(32 * sizeof(KILOBYTE), KNOB_SIMD_WIDTH * 4);
|
||||
#endif
|
||||
}
|
||||
|
||||
// State setup AFTER context is fully initialized
|
||||
|
|
@ -138,7 +146,11 @@ void SwrDestroyContext(HANDLE hContext)
|
|||
// Free scratch space.
|
||||
for (uint32_t i = 0; i < pContext->NumWorkerThreads; ++i)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
VirtualFree(pContext->pScratch[i], 0, MEM_RELEASE);
|
||||
#else
|
||||
_aligned_free(pContext->pScratch[i]);
|
||||
#endif
|
||||
}
|
||||
|
||||
delete(pContext->pHotTileMgr);
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ struct CachingAllocatorT : DefaultAllocator
|
|||
};
|
||||
typedef CachingAllocatorT<> CachingAllocator;
|
||||
|
||||
template<typename T = DefaultAllocator, size_t BlockSizeT = (128 * 1024)>
|
||||
template<typename T = DefaultAllocator, size_t BlockSizeT = 128 * sizeof(KILOBYTE)>
|
||||
class TArena
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ void ProcessComputeBE(DRAW_CONTEXT* pDC, uint32_t workerId, uint32_t threadGroup
|
|||
if (pDC->pSpillFill[workerId] == nullptr)
|
||||
{
|
||||
///@todo Add state which indicates the spill fill size.
|
||||
pDC->pSpillFill[workerId] = (uint8_t*)pDC->pArena->AllocAlignedSync(4096 * 1024, sizeof(float) * 8);
|
||||
pDC->pSpillFill[workerId] = (uint8_t*)pDC->pArena->AllocAlignedSync(4 * sizeof(MEGABYTE), sizeof(float) * 8);
|
||||
}
|
||||
|
||||
const API_STATE& state = GetApiState(pDC);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue