Skrivet av Icte:
Hur kommer det sig att du valde en NUC med Pentium Silver över t.ex. en i3 som kostar ett par hundralappar mer? T.ex. följande med en i3-7300U verkar inte dra så mycket mer ström än den du köpte (15W TDP):
Som jag skrev ovan så är CPU-prestanda i praktiken totalt irrelevant för vad enheten ska användas till. Har ju redan testat en liten enhet med i3-7100U (tror du skrev fel, är en i3-7100U i enheten du länkar har inte en i5-7300U som är klart snabbare).
Så i detta fall var nog den primära anledning just att jag specifikt ville testa Goldmont+
Prestandamässigt hade nog en RPi3 räckt om den bara haft USB3 och SATA...
Det skrivet. Sett till hela systemkostnaden blir trots all i3-7100U systemet ~20 % dyrare (om man skulle valt samma RAM och SSD konfiguration). Vidare drog i alla fall Gigabyte Brix enheten med i3-7100U 15-20 W från väggen med toppar över 20 W medan J5005 drar strax under 10 W med toppar upp mot 15 W.
I praktiken drar båda extremt lite och skulle jag använda enheten interaktivt skulle både J5005 och i3-7100U gå bort då man vill ha så hög enkeltrådprestanda som möjligt i de lägena. Som enkel server tycker jag nästan J5005 är det bättre valet, drar mindre ström och är ju i princip identisk prestanda om man använder alla CPU-trådar (dock rätt stor fördel vid enkeltrådprestanda för i3-7100U så det är definitivt den bättre desktop CPUn).
Har gjort lite mer tester på J5005, specifikt mätt IPC på en rad moment som ofta förekommer under en arbetsdag för mig.
OBS: har mätt IPC med Linux "perf" vilket verkligen ger en perfekt mätning av hur många x86 instruktioner som i genomsnitt körts av CPUn för att utföra de kommandon jag testar.
OBS2: det är alltså IPC per CPU-tråd. IPC värdet är inte direkt relaterat till det som egentligen spelar roll: hur lång tid tar uppgiften i "wall-clock-time". Det senare beror ju på IPC, frekvens, antal CPU-kärnor/trådar samt hur uppgiften skalar med CPU-trådar. Jag tittar bara på IPC här!
Har tyvärr inte hunnit uppgradera min Skylake NUC som jag har på jobbet till Ubuntu 18.04LTS, så jämförde i stället mot en i5-4570 maskin. För att det skulle bli så mycket "äpplen mot äpplen" jämförelser är konfigurerade jag min Ryzen-maskin till att vara 4C/4T så alla kör med lika många CPU-trådar.
SMT minskar IPC sett till IPC per CPU-tråd men det ökar i princip alltid IPC sett till mängd instruktioner som hanteras per fysisk kärna. Så för interaktiva saker och realtidskrävande program kan SMT vara en nackdel, för det jag normalt gör på jobbet är SMT en jättefördel då t.ex. kompilering tenderar skala väldigt bra med SMT.
Det som imponerar hos Goldmont+ är hur den hanterar enklare uppgifter som körs i något scriptspråk. Tog det jag postade i denna tråd (väldigt enkel metod för att ta fram primtal i Python3). IPC här är alltså x86 instruktioner per cykel och CPU-tråd, för att få faktiskt prestanda måste man multiplicera det med frekvenser (detta exempel använder bara en CPU-tråd)
Goldmont+: 2,17
Haswell: 2,73
Zen: 2,18
Skylake: 3,09
Performance counter stats for 'python3 prime.py':
3161,117529 task-clock (msec) # 1,000 CPUs utilized
4 context-switches # 0,001 K/sec
1 cpu-migrations # 0,000 K/sec
1 108 page-faults # 0,351 K/sec
10 596 757 681 cycles # 3,352 GHz
32 732 901 412 instructions # 3,09 insn per cycle
6 989 273 890 branches # 2211,014 M/sec
4 379 572 branch-misses # 0,06% of all branches
3,162022407 seconds time elapsed
Edit: Skylake tillagt, notera att detta är en Skylake med 128 MB eDRAM vilket kan göra skillnad i viss fall
Processen att skapa en nytt projekt för det jag jobbar med är också något Goldmont+ klarar fint (ett realtids OS, tar ett par sekunder att köra och av historiska skäl körs rätt mycket TCL och BASH script då). IPC är väldigt mycket lägre här för vi testar unte längre microbenchmarks utan något med långt mer data att hantera
Goldmont+: 1,35
Haswell: 2,04
Zen: 1,47
Skylake: 2,06
Men ska nog inte byta ut Skylake (som jag använder på jobbet och i laptop) eller Zen (som jag använder när jag jobbar hemma) mot Goldmont+. Det ovan var rätt mycket "best-case", det är trots allt en en väldigt enkel CPU och den verkar inte riktigt gilla fall med väldigt hög andel systemanrop.
Git-status på ett gäng gigabyte repo (självklart samma repo i alla lägen)
Goldmont+: 1,11
Haswell: 1,92
Zen: 1,31
Skylake: 2,13
Köra alla unit-tester (C++ program som genererar en hel del utdata samt skapar rapporter med saker som code-coverage, branch-coverage och självklart test-resultat). Detta skala lysande med CPU-trådar då varje "modul" testas som ett separat Linux-program, finns väldigt många moduler
Goldmont+: 0,81
Haswell: 1,32
Zen: 1,27
Skylake: 1,39
Bygga alla unit-tester (C++), skalar inte perfekt med CPU-kärnor p.g.a. relativt frekvent länkning men skalar ändå väldigt bra
Goldmont+: 0,78
Haswell: 1,23
Zen: 1,17
Skylake: 1,36
Generera unit-test projektet, CMake baserat. Genererar ett antal 100-tals MB filer totalt sett, skalar rätt dåligt med CPU-kärnor p.g.a. mängden I/O och alla beroenden mellan det som ska skapas
Goldmont+: 1,33
Haswell: 1,99
Zen: 1,62
Skylake: 2,08
Bygga huvudprodukten (lite blandat med programspråk, men överlägset mest C)
Goldmont+: 0,87
Haswell: 1,30
Zen: 1,21
Skylake: 1,44
Testade också en Mandelbrot generator jag skrivit med OpenCL. Den går inte riktigt att mäta IPC på då Goldmont+ inte stödjer AVX. OpenCL maskineriet kommer använda AVX/AVX2 samt FMA (som också saknas på Goldmont+) på Zen och Haswell, så de gör ju upp till fyra gånger fler flytalsoperationer per cykel. Så IPC siffran blir inte jämförbar mellan CPU-modellerna här.
Bryr man sig om flyttal kan man dock konstatera är Atom fel produkt. Den blir totalt slaktad av "big-core" x86 på detta, är >x2 mer kapacitet hos "big core" per cykel och ovanpå det tillkommer ju då att "big-core" CPUerna är högre klockade.
Man ser även det om man kikar i Geekbench, ser rätt bra ut för heltal men Atom hänger inte med på de delar som är flyttals intensiva.
Edit: För den som undrar, så här ser en "perf stat" mätning ut
Performance counter stats for 'git status':
464,442836 task-clock (msec) # 1,320 CPUs utilized
118 context-switches # 0,254 K/sec
16 cpu-migrations # 0,034 K/sec
9 682 page-faults # 0,021 M/sec
1 205 901 986 cycles # 2,596 GHz
1 340 093 698 instructions # 1,11 insn per cycle
247 931 004 branches # 533,825 M/sec
4 683 343 branch-misses # 1,89% of all branches
0,351882828 seconds time elapsed
IPC värdet fetmarkerat
"2,596 GHz" är också intressant information, det är genomsnittlig frekvens som används för uppgiften.
"1,320 CPUs utilized" berättar att denna uppgift använde i genomsnitt 1,320 CPU-trådar. D.v.s. en fingervisning om hur bra/dåligt saker skalar med kärnor (i detta fall är max 4,0 då det är 4C/4T).