Eu assumo que você não possui um único sistema de soquete com 24C de CPU. Então é provavelmente o sistema NUMA com 2x12C. Nesse caso, sugiro que o programa use apenas um nó numa (geralmente socket) e a metade local da RAM.
Quando você usa 50G, isso significa que uma localidade não pode ser assegurada, pois é mais da metade da memória.
Para a verificação do estado real, use numastat. Se você está no RHEL, você pode usar numad para manipular localidade de memória automaticamente. Ou você pode usar um hardware numactl que lhe dará uma visão geral sobre seus nós HW NUMA. Existe um bom tutorial com exemplos:
Dessa forma, você pode bloquear seu programa nas CPUs desejadas.
E eu sugiro verificar se você tem o daemon irqbalance em execução, caso contrário você pode ter um núcleo sobrecarregado com interrupções.