Мне нужно протестировать производительность многопоточной программы на 1 CPU, но у меня машина с двумя CPU. Мне нужно установить соответствие тем логическим CPU, которые разделяют свой сокет, в противном случае они сильно выигрывают от большего количества FSB. Я пробовал соответствие 0-7 и 8-15, но результаты значительно различаются, первый быстрее. Поэтому я не знаю, какие логические CPU разделяют свой сокет.
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
решение1
Первые 8 процессоров из одного чипа, а вторые 8 процессоров из другого чипа. Вы можете отличить их по physical id
. Что касается разницы в производительности - я понятия не имею.
решение2
Задержка двух процессоров имеет значение. Прочтите технические характеристики вашей материнской платы, и вы узнаете, что один из них является основным и необходимым для работы платформы.
Например, вы можете запустить платформу, заполнив socket0 и socket0, socket1, но вы не можете запустить платформу, заполнив только socket1.
Вот почему у вас есть разница в производительности на каждом из них. Они должны быть похожи в любом случае, но они не будут идентичными.