Skrivet av Ratatosk:
Nej jag säger inte att pollning är dåligt, klantig pollning är det, man skall ha tid mellan anropen, tid som man släpper in andra program under.
Det är inte OK att nonstop under bilfärden fråga "är vi framme snart", men det är Ok att fråga varje kvart.
edit I Ada är det lätt, delay 0.01 och du pausar i 10ms, samtidigt som en task switch görs.
C++ har lång väg kvar att gå innan det når den nivå Ada hade 1983 vad gäller multitasking.
Tror jag förenklade för långt då.
Naturligtvis ska man inte polla i all oändlighet, det är inte heller vad som sker i praktiken.
Tar man ett skolboksexempel på hur man implementerat ett enkelt lås ser logiken ut ungefär så här: gör en atomär kolla-om-låstet-är-öppet-och-i-så-fall-markera-det-låst (Compare And Swap), gör om detta till det lyckas.
Skulle någon implementera detta skolboksexempel (som är helt logiskt korrekt) i produktionskod så bör denne få betyget "needs improvment" i nästa performance review... En sådan implementation är en ren katastrof för en modern multicore CPU.
I stället har man fast-paths som pollar ett tag då det normala är att låset släps rätt snabbt, sedan kanske man gör lite annat innan man till slut lägger sig och sover.
Och här ligger förklaringen i varför det tar massor med fler CPU-cykler i fall när man hela eller nästan hela tiden hamnar i slow-path + när man väl lägger sig att sova tillkommer massor med overhead i form av kontext-switch, tiden för någon annan att väcka upp samt kanske viktigaste för multi-core system: när man vaknar upp kanske man kör på en annan CPU-kärna så data är cache-cold (vilket kan lägga på upp mot en faktor 100 på vissa minnesaccesser).
Plottar man t.ex. CPU-last mot antal paket som skickas per tidsenhet på en enhet som kan driva länken ganska precis i maxkapacitet så blir det allt annat än en rak linje.
Den är relativt rak upp till punkten när länken börjar bli flaskhals. Om en CPU-kärna orkar helt maxa länken så kommer normala drivarna börja kontext-switcha.
Tar vi nu och gör samma sak med två CPU-kärnor där båda skapar trafik kommer man se ett par saker:
Man kommer gå klart förbi 50 % CPU-last per CPU-kärna innan man maxar länken, det faktum att två kärnor skriver till samma I/O-enhet ger rejält mycket högre kostnad för synkroniserings
Om bara en OS-tråd driver lasten kommer det se lika ut som i första exemplet upp till att länken blir flaskhals, om vi antar att det finns lite annat som kör (behöver inte alls vara CPU-tungt) kommer tråden att hoppa mellan kärnorna och lasten kommer vara långt över 50 % för att hålla länken mättad p.g.a. kontext-switch-overhead etc
Och angående sova i C++, motsvarande det du visar ovan ser ut så här
std::this_thread::sleep_for(10ms);
Men det är "old-school" idag då det tvingar fram en kontext-switch. Idag skulle man schemalägga en asynkront händelse som triggar om 10ms och sedan göra något annat på samma tråd, detta är långt effektivare då man inte tvingar en OS-kontex-switch.
Skrivet av _Merc_:
Till skillnad ifrån AMD så allt efter haswell tillfört absolut inget. Intel har blivit lata och stagnerat.
AMD med nya funktioner i Ryzen: Precision Boost, Extended Frequency Range, Neural Net Prediction och Smart Prefetch.
intel har inte pratat något om att de har något liknande på gång, om allt funkar som utlovat så har AMD hämtat in intels försprång på sämre fabrikat. AMD = innovation. Intel = stagnation.
Nämn senast du såg fram emot något som intel skulle presentera ? när de började med I core var det för mig. annars kan jag inte minnas något tillfälle.
Efter Broadwell har Intel bl.a. introducerat Software Guard Extensions (AMD har något liknande med Secure Encrypted Virtualization, men där är man rökt om man inte litar på OS-kärnan, SGX kan skydda data även om OS-kärnan är i händerna på "fiende"). Kolla tråden där motsvarande AMD teknik nämns, det lyftes ju fram som något helt otroligt där. Specifikationen för AMDs teknik finns att läsa, jämför man den med SGX är de lika men SGX är lika bra eller bättre på varje punkt.
Har precis köpt en ny dator till jobbet, det enbart för att komma åt Memory Protection Extensions som introducerades med Skylake (fast köpte Kaby Lake då det är en U-serie CPU och vill ha den bättre prestandan). Skulle överhuvudtaget inte ens överväga att köpa en arbetsmaskin utan MPX idag, det borde ingen som jobbar med programmering i "native" språk göra då denna teknik gör det helt trivialt att hitta en av de elakaste klassen av buggar i språk som C och C++, minnesöverskrivningar och användning av friat minne. När MPX automatiskt hittar en sådan bug för första gången har redan CPUn betalat sig!
Bara från Skylake till Kaby Lake är prestandalyften ~20 % på laptops, över 30 % på Core M. För 15 W TDP och lägre är Haswell rätt trött mot Kaby Lake.
Rent generellt är Skylake den största prestandalyftet sedan introduktionen av Sandy Bridge. Många här bryr sig främst om spel och då blir så klart lyftet rätt litet då CPU-delen extremt sällan är flaskhals i spel, i alla fall när vi pratar 4C/8T modeller.
Vad är speciellt med Precision Boost, Extended Frequency Range, Neural Net Prediction och Smart Prefetch förutom själva namnet?
Precision Boost: hur är detta annorlunda än turbo boost? Skylake fick även speed shift som rejält sänkte tiden att nå max boost. Visst, AMD har 25 MHz steg och Intel har 100 MHz.
Extended Frequency Range: hur är detta annorlunda än vad Core M och U-serien gör när dessa kan köra frekvenser där kretsen drar en bra bit över TDP, de kan även hålla dessa frekvenser om kylningen tillåter (vilket syns i att samma CPU-modell kan presterar rätt olika i olika laptops). AMD har detta även för desktop, det är nyheten.
Neural Net Prediction: i grunden är detta ett fancy-name för branch-predictor, hur är det nytt?
Smart Prefetch: hela Core-serien har ju spekulativ prefetch, i Skylake är faktiskt L2$ på flera sätt simplare än tidigare (gjort främst för att minska strömförbrukning) men då L3$<->L2$ bandbredd ökat rätt mycket så kunde man mer än väl kompensera detta med aggressivare prefetch.
Skrivet av sAAb:
Sant, glömde momsen som nog är största förklaringen till svenska priser på Prisjakt jämfört med Newegg. Marginalen för de billigaste detaljhandeln är nog väldigt liten.
Gjorde oen ny tabell och graf som lyfter fram skillnaden mellan priser idag på AMD och Intel beroende på CPU Mark och därmed pris per prestanda.
Medelvärdet blir 0,2166 för AMD och 0,3309 för Intel.
Man betalar alltså (0,3309/0,2166=1,527) närmare 53 % mer för samma värde på CPU mark för en Intel. Det är väldigt mycket.
Produkt | CPUmark | Lägsta pris | Pris/Prestanda |
---|
FX-6200~3.8 | 6102 | 1553 | 0.255 |
FX-6350~3.9 | 6952 | 1451 | 0.209 |
FX-8320E~3.2 | 8009 | 1411 | 0.176 |
FX-8350~4.0 | 8939 | 1590 | 0.178 |
FX-8370~4.0 | 8918 | 1790 | 0.201 |
FX-8370E~3.3 | 7793 | 1470 | 0.189 |
FX-9370~4.4 | 9499 | 1881 | 0.198 |
FX-9590~4.7 | 10240 | 2949 | 0.288 |
FX-9590~4.7 | 10240 | 1990 | 0.194 |
FX-9590~4.7 | 10240 | 2862 | 0.279 |
i5-6400~2.7 | 6574 | 1992 | 0.303 |
i5-6400~2.7 | 6574 | 2108 | 0.321 |
i5-6400T~2.2 | 5440 | 2455 | 0.451 |
i5-6400T~2.2 | 5440 | 1999 | 0.367 |
i5-6500~3.2 | 7068 | 2146 | 0.304 |
i5-6500~3.2 | 7068 | 2249 | 0.318 |
i5-6500T~2.5 | 6008 | 2226 | 0.371 |
i5-6500TE~2.3 | 5655 | 2190 | 0.387 |
i5-6600~3.3 | 7695 | 2356 | 0.306 |
i5-6600~3.3 | 7695 | 2254 | 0.293 |
i5-6600K~3.5 | 7858 | 2546 | 0.324 |
i5-6600K~3.5 | 7858 | 2444 | 0.311 |
i5-6600T~2.7 | 7179 | 2447 | 0.341 |
i5-7400~3.0 | 7315 | 2078 | 0.284 |
i5-7500~3.4 | 8123 | 2244 | 0.276 |
i5-7600~3.5 | 8968 | 2481 | 0.277 |
i5-7600K~3.8 | 9258 | 2689 | 0.290 |
i5-7600T~2.8 | 8455 | 2489 | 0.294 |
i7-6700T~2.8 | 9038 | 4085 | 0.452 |
i7-7700K~4.2 | 12246 | 3869 | 0.316 |
i7-6700K~4.0 | 11108 | 3598 | 0.324 |
i7-6700~3.4 | 10032 | 3546 | 0.353 |
i7-6700T~2.8 | 9038 | 3521 | 0.390 |
i7-6700K~4.0 | 11108 | 3496 | 0.315 |
i7-7700~3.6 | 10963 | 3466 | 0.316 |
i7-6700~3.4 | 10032 | 3190 | 0.318 |
Diagrammet ser ut så här:
http://i67.tinypic.com/1ruh7a.png
Core Mark? Enligt Core Mark ligger prestanda för FX-8370 någonstans mellan i7-2600K och i7-3770K, känns det representativt för vad fallet är i praktiken?
Just detta som är enda orosmolnet för Ryzen just nu. De resultat vi sett är helt valda av AMD, väljer man rätt fall så går det utan problem visa att FX-8370 presterar riktigt bra.
Är övertygad om att Ryzen kommer prestera riktigt bra i vissa klasser av program. Det som är make-or-break är dock är prestanda i heltalstunga program som inte är vektoriserade och där bara en tråd per CPU-kärna används, dessa kommer vara i klar majoritet. Framförallt om man har 8-kärnor då två trådar per kärna inte kommer användas av vare sig Windows eller Linux innan alla kärnor är aktiva på sin första tråd (går att skriva program som uppför sig annorlunda, men detta är normalbeteende).