Brining up a topic previously discussed.
We’ve had DUAL EPYC 7773x Rendernodes for a few years now and we’ve always questioned whether they were running at full speed or not when rendering Corona. Some of the older threadrippers were always beating our benchmark scores.. we were getting 20-25 Million Rays/s max in the benchmarks
Typically Dual Epycs 3rd gen work best when all 16 channels (8 per socket) of ram filled so 16 sticks of whatever 16GB or 32GB etc loaded to the gills. Our system has 8 Channels of Ram (4 per socket) due to the original vendor specification which we couldn’t change after purchase.
But recently I’ve been reading up about NUMA NODES and NPS settings in the BIOS. Has anyone seen any differences in rendering performance when switching from NPS1, NPS2 and NPS4 in the BIOS?
============================================
Nodes Per Socket (NPS) is a BIOS setting for AMD EPYC processors that partitions the processor into multiple NUMA (Non-Uniform Memory Access) domains. For rendering workloads, choosing the correct NPS mode is critical for balancing memory bandwidth and latency.
NPS Modes and Their Impact on Rendering
NPS0: This is a 1-node configuration where all memory channels are interleaved across the entire socket. It provides a maximum bandwidth advantage by utilizing all memory controllers but can introduce higher latency for small, non-linear data requests.
NPS1 (Default): The entire CPU is a single NUMA domain. Memory is interleaved across all channels. This is generally excellent for applications that need a large, unified pool of memory without worrying about data locality.
NPS2: The CPU is split into two NUMA domains, each with half the cores and memory channels. This reduces memory latency for threads operating within their own domain.
NPS4: The processor is partitioned into four domains. This provides the lowest local memory latency but requires the rendering software to be NUMA-aware to avoid “remote” memory access penalties, which can significantly degrade performance if threads frequently access data from another domain.
Recommendations for Rendering Workloads
General Rendering (e.g., V-Ray, Arnold): For most multi-threaded rendering tasks, NPS1 is often the safest and most consistent choice. It allows the renderer to use all available system memory as a single pool, preventing the overhead of managing multiple NUMA nodes.
Memory-Intensive Rendering: If your rendering job requires massive memory bandwidth and you can pin processes to specific cores, NPS2 or NPS4 may offer better performance.
Optimization Tips:
Ensure all memory channels are populated with identical DIMMs to maintain a “balanced” configuration, especially when using NPS2 or NPS4.
Use tools like numactl on Linux to bind rendering processes to specific NUMA nodes if you use NPS4.
Refer to your specific motherboard or server documentation (e.g., Dell or Lenovo) for OEM-specific BIOS names.
