Microsoft demonstrerar Windows 8 för ARM

Permalänk
Datavetare
Skrivet av Morkul:

Hoppas du förstår att det inte alls går att gämföra Mhz mellan CISC och RISC CPUs.

Dels så tog jag med en länk som visar resultat från t.ex. Sun Spider och CaffineMark när alla plattformar kör Android. Sedan jobbar jag dagligen med MIPS, ARM, PPC och x86 (jobbar med OS för inbyggda system) så är fullt medveten om att det inte går jämföra frekvenser rakt av.

Faktum är att det är betydligt mer komplicerat att jämföra prestanda mellan arkitekturer än att bara lura ut en ARM MHz/x86 MHz prestanda kvot. Enklare benchmarks ger nästan alltid omotiverat hög prestanda på simpla CPUer jämfört med vad man kommer se i verkligheten. Och i detta fall skulle det tala än mer för Medfield då dess cache-hierarki är betydligt mycket mer avancerad jämfört med Cortex A9, Atoms L2 cache kan ha betydligt många fler anrop "in-flight", något som inte alls påverkar resultatet i enklare benchmarks, men blir väldigt viktigt när man t.ex. ska driva en hel grafik-stack som är byggt i flera lager.

Hittade en jämförelse mellan Medfield och Tegra 3, det är som sagt en enda benchmark men den visar att Tegra3 och Medfield nog kommer ligga väldigt nära varandra i prestanda. Visst, Tegra3 borde vara snabbare på saker som kan utnyttja alla 4 kärnorna, men det kommer vara extremt få applikationer som gör detta under lång tid.

Vad det gäller prestanda i Dalvik (den virtuella maskin som de flesta Android applikation kör under, vissa spel använder den inte utan kör med NDK, Native Developmet Kit) så har Medfield en STOR fördel jämfört med multicore ARM, nämligen hyper-threading. Varför är det en fördel, HT är ju inte "riktigt" multicore.
Nä just det och kör man två st helt orelaterade saker, som t.ex. kör två program samtidigt, så är två CPU-kärnor alltid bättre (mer effektivt) än HT. Men i fallet Dalvik så handlar det om två trådar där den ena kör programmet och den andra kör GC (garbage collector). GC tråden komma aldrig behöva 100% av en full CPU (om den gör det så har applikationen grava designproblem), så HT är inte en flaskhals här. GC tråden kommer till stor del referera samma data som den tråd som kör programmet och här ligger den stora fördelen med HT jämfört med separata CPU-kärnor. De data som båda trådarna använder måste delas via L2-cache alt. RAM medan HT delar detta data direkt via L1 cachen. L1-cache har mycket högre bandbredd och långt lägre latens jämfört med L2 -> effektiviteten på HT blir bättre jämfört med två fysiska kärnor.

Notera också att effekten av HT är långt mycket högre på Atom än på Sandy Bridge. Applikationer där två kärnor ger väldigt nära x2 i prestandaförbättring på två fysiska kärnor ger ofta runt 10-30% med HT på Sandy Bridge. Samma sak med HT på Atom ger ofta 50-60%! Anledningen är inte att Atom är avancerad, utan tvärt om så blir HT så pass effektiv då Atom är en extremt simpel CPU som "stallar" rätt ofta. Alla dessa "stalls" gör att CPU är fri att använda för den andra tråden och har man två trådar så sjunker tiden när tråd kan köra dramatiskt. Sandy Bridge "stallar" betydligt mycket mer sällan och två trådar som kör via HT går mycket oftare turas om at använda CPUn.

Och sist men kanske inte minst: rent generellt kan man inte direkt använda klockfrekvens föra att jämföra prestanda mellan två olika CPUer/arkitekturer. Men i praktiken så går det väldigt bra mellan just ARM Cortex A9 och Atom då de RÅKAR ha väldigt snarlik IPC.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Datavetare
Skrivet av beh:

Mina erfarenheter på en 16GB, i5-2500K@3.3 är att Chrome och Firefox under Windows 7 SP1 är snabbare i både Google V8 och Sun Spider 0.9.1 jämfört med BC-BSD 9, Ubuntu 11.10 och Arch Linux (Alla os x64).

Interessant att vi kan får så olika resultat.

Jag testade precis SunSpider och på en 1.5GHz Atom körandes 32-bitars Ubuntu 11.10 samt 32-bitars Win7 så är Firefox 9 54% snabbare under Ubuntu och Chrome16 är 35% snabbare under Ubuntu.

Samma test på en maskin med 2.4GHz Core2 (kör x86_64 versionerna) (kan inte använda min Core i5 MBP då jag tagit bort Win7 på den) visar att Firefox är 12% snabbare på Ubuntu 11.10 medan Chrome är 51%(!) snabbare på Ubuntu 11.10 jämfört med Win7. Notera att JS prestanda var i alla fall tidigare långsammare på 64-bitars jämfört med 32-bitars då 32-bitars varianten hade klart bättre/mer avancerat JIT-stöd. Därför viktigt att jämföra 32 mot 32 och 64 mot 64.

Personligen tycker jag PeaceKeeper är en betydligt mycket bättre webbenchmark jämfört med V8 och SunSpider, då PeaceKeeper försöker testa både JS, DOM och grafik-delen av webbläsaren, d.v.s man försöker mäta "surf-prestanda". SunSpider och V8 mäter endast JS prestanda, som bara är en liten del.

På en stark maskin så är PeaceKeeper resultatet mycket mer lika mellan en Ubuntu och en Win7 dator jämfört vad det är på en svagare dator (t.ex. Atom) där Ubuntu är klart snabbare.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Betyder detta att Rapsberry Pi kommer kunna köra windows?

Visa signatur

Asrock X58 Extreme III | Intel Core i7 950 + Thermalright Ultima-90I | GTX 580 | 6GB DDR3 Corsair XMS3 | OCZ Vertex II SSD 120GB x 2 @RAID0 |

Permalänk
Medlem
Skrivet av gurrgurr:

Bara jag som får vibbar av dharma initiative-asiaten av den där microsoftkillen?

Ha, ha!!! Visst är det han! LOL

Visa signatur

W2000 på 108" ramspänd, VF1000SWA, Corsair RM750x, Ryzen 5 1600 @ 3,85 GHz, ASUS Prime B350M-A, CORSAIR RGB 16GB @ 2933 MHz, SSD 850 EVO 250GB, Crucial MX500 M.2 500GB, 290x Matrix

Permalänk
Medlem

Windows 8 är ju mer en ersättare till Windows Phone 7 och mer optimerat för smartphones och paddor. Windows 9/10 kommer jag nog haka på istället om jag inte håller mig till sjuan 5-6 år till

Permalänk
Avstängd
Skrivet av PerZerk:

Windows 8 är ju mer en ersättare till Windows Phone 7 och mer optimerat för smartphones och paddor. Windows 9/10 kommer jag nog haka på istället om jag inte håller mig till sjuan 5-6 år till

Windows Phone 8 är en ersättare till Windows Phone 7 och kommer baseras på Windows 8.

Windows 8 är en ersättare till Windows 7.

Visa signatur

Nya funktioner i “Anniversary Update” för Windows 10 som släpps till sommaren:
http://www.howtogeek.com/248177/whats-new-in-windows-10s-anni...

Permalänk
Avstängd

Själv jobbar jag som assemblerprogrammerare främst på ARM men ibland kommer det kunder som vill ha hjälp med x86 också, men då är det oftast någon enstaka loop som ska optimeras jämfört med ARM där hela programmen är i assembler.

Skrivet av Yoshman:

Faktum är att det är betydligt mer komplicerat att jämföra prestanda mellan arkitekturer än att bara lura ut en ARM MHz/x86 MHz prestanda kvot. Enklare benchmarks ger nästan alltid omotiverat hög prestanda på simpla CPUer jämfört med vad man kommer se i verkligheten. Och i detta fall skulle det tala än mer för Medfield då dess cache-hierarki är betydligt mycket mer avancerad jämfört med Cortex A9, Atoms L2 cache kan ha betydligt många fler anrop "in-flight", något som inte alls påverkar resultatet i enklare benchmarks, men blir väldigt viktigt när man t.ex. ska driva en hel grafik-stack som är byggt i flera lager.

Problemet med att ens försöka jämföra är att prestandan på de olika arkitekturerna är olika beroende på vilken typ av arbete de ska utföra. Precis som du säker så kan vissa syntetiska tester få ARM att se snabbare ut jämför för med andra program. Men jag har även sätt program som har presterat betydligt bättre på ARM än x86, sätt till MHz.

Citat:

Och sist men kanske inte minst: rent generellt kan man inte direkt använda klockfrekvens föra att jämföra prestanda mellan två olika CPUer/arkitekturer. Men i praktiken så går det väldigt bra mellan just ARM Cortex A9 och Atom då de RÅKAR ha väldigt snarlik IPC.

Nääää det går inte....

IPC säger ju absolut ingenting när man ska jämföra två olika arkitekturer. Eftersom flera utav instruktionerna inte finns representerade på båda arkitekturerna så måste man ibland ta omvägar eller genvägar via andra instruktioner för att skapa samma resultat. Där med är inte heller IPC ett bra mått.

Men för att komma till där det egentligen problemet ligger: code aligment. Att ligna koden gör en ENORM skillnad, du kan tjäna tusentals klockcyklar om koden är bra lignad. Problemet med x86 är att CPUerna har så olika stor cache så man vet aldrig hur mycket av ens program som kommer att ligga i cachen så det är extremt svårt att aligna koden. På ARM har du full koll och vet alltid var du är och hyr mycket cache du har att leka med och kan därför aligna koden bra.

Ett av problemen med x86 är att programmen är extremt stora, detta beror dels på att många programmerare skiter i att optimera sina program men även plattformen i sig. Var en programmerare här på jobbet som skrev ett program som höll på att leka med trådar och konstbelastning på dessa, allt för att demonstrera HT, programmet var gjort i C++ och var tämligen väl optimerat men var på nästan 2 meg. Ja programmet innehöll ett grafiskt interface med några knappar och par olika fönster samt logiken för konstbelastning. Blev smått förbannat och gjorde om programmet i ASM istället och fick ner storleken till 5120 byte och dessutom utfördes konstlasten snabbare och blev där med mer exakt när man skulle jämföra CPUs.

Jag vill inte på något sätt säga att ARM har uber bra eller nått sådant utan allt jag vill försöka få fram att det är helt omöjligt att ens försöka jämföra arkitekturer. Allting beror för mycket på vad du vill göra, hur pass bra programmeraren är, vilket OS du jobbar på, etc etc... För många okända variabler alltså. Lite som att jämföra en CPU och GPU.

Permalänk
Datavetare
Skrivet av Morkul:

IPC säger ju absolut ingenting när man ska jämföra två olika arkitekturer. Eftersom flera utav instruktionerna inte finns representerade på båda arkitekturerna så måste man ibland ta omvägar eller genvägar via andra instruktioner för att skapa samma resultat. Där med är inte heller IPC ett bra mått.

Det fungerar om man inte ser tar "IPC" helt bokstavligen. En x86 genomför i genomsnitt mer arbete per instruktion än ARM som utför mer än PPC som utför mer än MIPS. Men när jag säger att Cortex A9 och Atom har ungefär samma "IPC" så menade jag att de i genomsnitt kör samma program ungefär lika snabbat vid samma klockfrekvens. Till att börja med är inte detta helt sant, Atom ligger någonstans mellan Cortex A8 och A9 (en A9 är alltså något snabbare än Atom vid samma frekvens). Sedan så skulle en ARM CPU rent tekniskt ha högre IPC om den var exakt lika snabba som en x86 vid samma klockfrekvens då x86 kod är mer kompakt (en länk som visar att så är fallet).

Skrivet av Morkul:

Men för att komma till där det egentligen problemet ligger: code aligment. Att ligna koden gör en ENORM skillnad, du kan tjäna tusentals klockcyklar om koden är bra lignad.

Till att börja med har man ALDRIG tjänat tusentals cykler, möjligen hundratals i värsta fall då "unaligned access" kan dubbla (i värsta fall) antal accesser mot RAM och det kostar (i värsta fall, d.v.s inte en en LLC träff) 100-tals cykler. Sedan så låter x86 dig referera minne på vilken adress som helst helt utan extra kostnad sedan Nehalem, så på moderna x86 kan man helt skita i alignment. På PPC och MIPS så är "unaligned access" inte ens tillåten i många fall (ger en krasch) och på ARM får man ett resultat som väldigt sällan är det man menade (man får minnescellen på närmaste address avrundat nedåt till närmsta tal delbart med 4 och sedan är resultatet roterat så många steg man var från en adressen delbar med 4...). Så visst är "code alignment" ett problem i vissa fall, men det är ett icke-problem på en modern x86.

Skrivet av Morkul:

Problemet med x86 är att CPUerna har så olika stor cache så man vet aldrig hur mycket av ens program som kommer att ligga i cachen så det är extremt svårt att aligna koden. På ARM har du full koll och vet alltid var du är och hyr mycket cache du har att leka med och kan därför aligna koden bra.

Majoriteten av alla implementationer av Cortex A8 och senare har minst lika mycket cache som Atom (L1 är 32/32kB på ARM och 32/24kB på Atom, L2 är 0-4M, typiskt 512k-1M på ARM och 512k på Atom), däremot har alla moderna x86or, till och med Atom, en betydligt mer avancerad cache än ARM. Cortex A9 har däremot högre bandbredd mot både L1 och L2 cache jämfört med Atom, så i en micro-benchmark kommer A9 se riktigt stark ut mot Atom, men på ett större program som använder gör access mot relativt många cache-lines (många är ändå så pass lite som 10-20 st) kommer rejält gynna Atom jämfört med A9.

Skrivet av Morkul:

Ett av problemen med x86 är att programmen är extremt stora, detta beror dels på att många programmerare skiter i att optimera sina program men även plattformen i sig. Var en programmerare här på jobbet som skrev ett program som höll på att leka med trådar och konstbelastning på dessa, allt för att demonstrera HT, programmet var gjort i C++ och var tämligen väl optimerat men var på nästan 2 meg. Ja programmet innehöll ett grafiskt interface med några knappar och par olika fönster samt logiken för konstbelastning. Blev smått förbannat och gjorde om programmet i ASM istället och fick ner storleken till 5120 byte och dessutom utfördes konstlasten snabbare och blev där med mer exakt när man skulle jämföra CPUs.

Fast frågan är: det GUI-bibliotek som användes, vilken typ av system vad det designat för? 2M kan vara extremt mycket, det är fullt möjligt att köra RTOS som VxWorks, OSE m.fl. med flera program och fullt TCP/IP nätverksstöd på halva den mängden minne. Men på en PC så är det alldeles för dyrt att optimera ner på några få MB, det är inte alls säker att det går fortare heller då vissa algoritmer som har bättre algoritmisk prestanda ("skalar bättre") inte allt för sällan kräver mer RAM för att fungera optimal. Om ett program drar 2M eller 3M på en PC med 8GB är helt irrelevent och om det går fortare att skriva programmet så det drar 3M så gör man det. Så att du optimerade en specifik GUI från 2M till 5k säger väldigt lite och det behöver definitivt inte betyda att det ursprungliga programmet var dåligt skrivet.

Skrivet av Morkul:

Jag vill inte på något sätt säga att ARM har uber bra eller nått sådant utan allt jag vill försöka få fram att det är helt omöjligt att ens försöka jämföra arkitekturer. Allting beror för mycket på vad du vill göra, hur pass bra programmeraren är, vilket OS du jobbar på, etc etc... För många okända variabler alltså. Lite som att jämföra en CPU och GPU.

Det är fullt möjligt att jämföra arkitekturer bara man säger VAD man jämför och att man köra mer eller mindre samma programvara på de system man jämför. Det jag refererade till var hur Cortex A9 står sig mot Atom när båda kör Android 4 och mer specifikt den inbyggda webbläsaren. I flera "webb-benchmarks" så är en Medfield (Atom baserad SoC som går på 1.3GHz och kan "turbo boosta" till 1.6GHz) konsekvent snabbare än Cortex A9 på 1.2GHz ("Mali SoC") och Medfield var yttest marginellt snabbare än Tegra3 som har en Cortex A9 på 1.3GHz (denna benchmark använder bara en tråd, så det är single-thread prestanda vi jämför).

Att det rent tekniskt vore möjligt att tok-optimera ett program som kör exakt den benchmarken är helt irrelevant då ingen kommer använda systemet på det sättet. Att köra Android + dess grafikstack + en webbläsare är relativt komplext (för denna typ av CPUer) och Atom står sig därför väldigt väl mot ARM i sådana tester och min poäng var att på denna typ av test så presterar en Atom och en Cortex A9 som kör på samma klockfrekvens ungefär lika bra. Är dock rent tekniskt inkorrekt att säga att de har samma IPC.

De programvaror och OS vi utvecklar på jobbet består av miljoner rader kod och kan köras på en lång rad olika CPU-arkitekturer. Och erfarenheten visar att den relativa hastigheten mellan olika kort som kan använda olika CPU-arkitekturer är relativt konstant på en lång rad arbetslaster. Men visst finns det saker där det kan skilja kraftigt. MIPS och ARM-kort tenderar ha väldigt dålig bandbredd mot RAM jämfört med PPC och x86, så PPC och x86 står sig relativt sätt väl på dessa. Vissa kort, vanligen MIPS och PPC baserade kort, har speciell HW-för saker som nätverk, kryptering och de är då relativt sätt väldigt starka på dessa saker.

Men jämför man program där alla beräkningar utförs av CPUn så är den relativa prestandan väldigt konstant mellan olika program över CPU-arkitekturer.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Är du förvånad över att det inte är super-snabbt när man kör på en plattform som t.o.m dagens Atom-plattform kör cirklar runt rent CPU mässigt?
Single core Atom på 1.6GHz (notera att netbooks har dual core Atoms) är CPU-mässigt något snabbare än de absolut snabbast dual core ARM plattformarna (Cortex A9 @ 1.2GHz). Tegra3 borde ju vara snabbare, men har inte sätt någon direkt jämförelse likt denna där Tegra3 är med.

Windows är heller inte speciellt effektivt jämfört med t.ex. Linux. På en dual core Atom 1.5GHz netbook så är Linux (Ubuntu) nästan 50% snabbare än Win7 på en rad webbbenchmarks både med Chrome och Firefox. Gör man samma jämförelse med en snabbare CPU, t.ex. Core i5 @ 2.4GHz, så är skillnaden betydligt mindre, runt 20-25%. Så Windows verkar ha problem med effektivitet (jämfört med Linux) när CPUn blir riktigt svag.

har du nån länk till detta?

Visa signatur

Kaffe Sjön: 9700K @ 5.1GHz | H150i Pro RGB 360 | Aorus Gaming 7 | Vengeance RGB Pro 32GB | XFX Merc 319 6960 XT | Xiaomi 3440x1400 | Samsung 4k VA | HX850i | K95 Platinum RGB | H500P "HAF II" | Oculus Quest 2 | S22 Ultra | Galaxy Watch 5
HAF: 2700K @ 5.1Ghz | Noctua NH-D14 | EVGA 1080 Superclocked | Asus Maximus IV Extreme Z | Dell 27" Ultrasharp | HX850i | Vengeance 32GB | Samsung EVO 850 256GB 3x | HAF 932 "Pitch black" | (+ 8st Amiga, A500 till 4000T Cyberstorm PPC)

Permalänk
Avstängd

Du virtual void, känns som du inte förstår vad som menas med code aligment när man programmerar assembler.

Detta är ett gammalt exempel på vad som menas. http://www.masm32.com/board/index.php?PHPSESSID=503b738dc57d9aa2ff74c3fd66f52269&action=printpage;topic=3918.0

Exempel:
jump forward to aligned label : 6064 cycles
jump forward to misaligned label : 19946 cycles

Det är en del tusen cyklar som missats pga felaktig align på koden.

Om det är detta fenomen du syftar på i din förra post så blir jag helt förvirrad eftersom precis provade att köra lite olika aligment på ett hobby projekt som jag har liggandes och det ger extremt stora skillnader även med dagens x86 CPUs.

Även om jag nu sitter och optimerar olika X86 program ibland så är jag inte helt upp to date när det gäller x86 plattformen så om det är något jag har missat så ber jag om ursäkt för det.

Permalänk
Datavetare
Skrivet av Morkul:

Du virtual void, känns som du inte förstår vad som menas med code aligment när man programmerar assembler.

Detta är ett gammalt exempel på vad som menas. http://www.masm32.com/board/index.php?PHPSESSID=503b738dc57d9aa2ff74c3fd66f52269&action=printpage;topic=3918.0

Exempel:
jump forward to aligned label : 6064 cycles
jump forward to misaligned label : 19946 cycles

Det är en del tusen cyklar som missats pga felaktig align på koden.

Om det är detta fenomen du syftar på i din förra post så blir jag helt förvirrad eftersom precis provade att köra lite olika aligment på ett hobby projekt som jag har liggandes och det ger extremt stora skillnader även med dagens x86 CPUs.

Även om jag nu sitter och optimerar olika X86 program ibland så är jag inte helt upp to date när det gäller x86 plattformen så om det är något jag har missat så ber jag om ursäkt för det.

Om det skulle vara sant så har Intel fel om sin egen CPU. När jag läste "optimization guide" för Nehalem stod det just att det inte kostar något extra att läsa data från fel "alignment", t.ex. läsa 32-bitar från en adress som inte är jämt delbar med 4.

Men efter att tittat i den länk du postade så kan det förklara en del. På 90-talet har de flesta CPUer en cache-line storlek på endast 16-bytes (något som också används som exempel i länken). Även på Nehalem kostar det naturligtvis mer att läsa/skriva data om det korsar en cache-line gräns. Men dagens CPUer har betydligt längre cache-lines, x86 har 64-bytes och vissa andra har redan gått till 128-bytes.

I länken nämns också att alignment bara spelar roll för data och man nämner PPro, PIII. På dessa CPUer kostar det extra att läsa data unaligned (blir två anrop över bussen i stället för ett), det är sedan Nehalem man inte har denna extrakostnad.

Så länge som du läser minne eller hoppar till en instruktion som inte korsar en 64-bytes gräns så kostar det inget extra sedan Nehalem. Om du helt ignorerar alignment så är det ändå bara 3/64 (genomsnittsstorleken på en x86 instruktion i "vanliga" är strax över 3 bytes) 5% risk att korsa en cache-line gräns och det kommer ändå bara spela någon roll om någon av cache-linjerna inte redan ligger i L1.

På ARM Cortex A8/A9 så är en cache-line 32-bytes, men där kan en enda instruktion aldrig korsa en cache-line då de alltid ligger på en adress som är jämt delbar med 4 (ignorerar Thumb).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer