Avatar

Roznica IPC miedzy p-core i e-core w cpu intela (linux) (Ogólne)

by smola ⌂, 2025-04-09, 16:27 (24 days ago) @ smola
edited by smola, 2025-04-09, 20:16

Udalo mi sie w koncu zrobic testy wolnych i szybkich rdzeni w tym samym cpu :) Sa to 2 testy p-core i e-core z i5-12600K. Ten cpu ma 6 szybkich p-cores z HT i 4 wolne e-cores, lacznie 16 logicznych cpu (6*2 + 4). Do testu wymagany jest dodatkowy tool taskset, ktory ustawia affinity mask dla danego procesu. Dzieki temu mozna przypisac konkretny rdzen do konkretnego zadania. Sama skladnia jest specyficzna dla taskset i nie mozna go uzyc byle gdzie, tutaj musi byc przed bc.

Liste corow sie robi tak:
$ lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE   MAXMHZ   MINMHZ       MHZ
0     0      0    0 0:0:0:0          yes 4900.0000 800.0000  800.0000
1     0      0    0 0:0:0:0          yes 4900.0000 800.0000  800.0000
2     0      0    1 4:4:1:0          yes 4900.0000 800.0000  800.1410
3     0      0    1 4:4:1:0          yes 4900.0000 800.0000  800.0000
4     0      0    2 8:8:2:0          yes 4900.0000 800.0000  800.0000
5     0      0    2 8:8:2:0          yes 4900.0000 800.0000  800.0000
6     0      0    3 12:12:3:0        yes 4900.0000 800.0000  800.0000
7     0      0    3 12:12:3:0        yes 4900.0000 800.0000  800.0000
8     0      0    4 16:16:4:0        yes 4900.0000 800.0000  800.0640
9     0      0    4 16:16:4:0        yes 4900.0000 800.0000  800.0000
10    0      0    5 20:20:5:0        yes 4900.0000 800.0000  800.0000
11    0      0    5 20:20:5:0        yes 4900.0000 800.0000  800.0000
12    0      0    6 28:28:7:0        yes 3600.0000 800.0000  800.0000
13    0      0    7 29:29:7:0        yes 3600.0000 800.0000 3600.1150
14    0      0    8 30:30:7:0        yes 3600.0000 800.0000  800.0000
15    0      0    9 31:31:7:0        yes 3600.0000 800.0000  800.0000

Po maxmhz widac ktory jest szybki a ktory nie ale p-cory maja tez swoja tabelke w bios i nie kazdy skacze w turbo na maxa. U mnie to sa 0 i 1, pozostale w stresie boostuja ciut mniej, no ale to ma znaczenie w multi, przy single to bez roznicy praktycznie.

Test zostal przeprowadzony na maszynie z najnowszym ubuntu lts:
12th Gen Intel(R) Core(TM) i5-12600K, 6.8.0-57-generic, Ubuntu 24.04.2 LTS

Test najszybszego p-core czyli #0 (0-11):
$ time echo "scale=5000; a(1)*4" | taskset -c 0 bc -l
real 0m9.545s
user 0m9.542s
sys 0m0.004s

Wynik jest praktycznie taki sam jak przy tescie bez taskset, scheduler sam ustawia najszybszy dostepny, ale przy e-core jest juz ciekawiej ;)

Test wolnego e-core #12 (12-15):
$ time echo "scale=5000; a(1)*4" | taskset -c 12 bc -l
real 0m15.401s
user 0m15.395s
sys 0m0.007s

Poniewaz wyniki testu sa porownywalne dla wersji gnu bc, to osiagi e-cores sie mieszcza gdzies pomiedzy i7-3770 (real 0m15.986s) a Intel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz (real 0m15.289s). Nie jest zle ;) Zas p-cores, to juz konkretne bestie - wynik ponizej 10s to miejsce #2 za mistrzem AMD Ryzen 7 PRO 6850U with Radeon Graphics (real 8.00s).

Aczkolwiek mam pewne watpliwosci czy aby na pewno byl uzyty wlasciwy bc w tym tescie. Test zweryfikowany, koszerna wersja gnu bc v1.08.1.

Prawilne wersje to gnu, zoptymalizowne nie sa porownywalne i ich wyniki nalezy traktowac jako ciekawostke. Nizej info jak sprawdzic wersje:
$ bc -v
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.

Jesli jest inna niz 1.xx lub nie zawiera tagu 'Free Software Foundation', to znaczy ze niekoszerna :(


Complete thread: