Preciso testar o desempenho de um programa multithread em 1 CPU, mas tenho uma máquina com CPU dupla. Preciso definir afinidade para aquelas CPUs lógicas, que compartilham seu soquete, caso contrário elas se beneficiam fortemente de um maior número de FSBs. Tentei afinidade 0-7 e 8-15, mas os resultados diferem consideravelmente, sendo o primeiro mais rápido. Portanto, não sei quais CPUs lógicas compartilham seu soquete.
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 1
Core(s) per socket: 8
CPU socket(s): 2
NUMA node(s): 4
Vendor ID: AuthenticAMD
CPU family: 16
Model: 9
Stepping: 1
CPU MHz: 800.000
BogoMIPS: 4000.40
Virtualization: AMD-V
L1d cache: 64K
L1i cache: 64K
L2 cache: 512K
L3 cache: 5118K
NUMA node0 CPU(s): 0-3
NUMA node1 CPU(s): 4-7
NUMA node2 CPU(s): 12-15
NUMA node3 CPU(s): 8-11
~]$ cat /proc/cpuinfo | grep 'core id'
core id : 0
core id : 1
core id : 2
core id : 3
core id : 0
core id : 1
core id : 2
core id : 3
core id : 0
core id : 1
core id : 2
core id : 3
core id : 0
core id : 1
core id : 2
core id : 3
Responder1
Os primeiros 8 processadores são de um chip e os segundos 8 processadores de outro chip. Você pode distingui-lo por physical id
. Quanto à diferença de desempenho - não tenho ideia no momento.
Responder2
A latência de 2 CPUs é importante. Leia as fichas técnicas da sua placa-mãe e você saberá que uma delas é primordial e essencial para rodar a plataforma.
Por exemplo, você pode executar a plataforma preenchendo soquete0 e soquete0, soquete1, mas não pode executar a plataforma preenchendo apenas soquete1.
É por isso que você tem desempenho diferente em cada um. Eles deveriam ser semelhantes de qualquer maneira, mas não serão idênticos.