Linus Torvalds sågar fler processorkärnor

Permalänk
Medlem
Skrivet av retro123:

Kanske är det så?, men har man flera skärmar och/eller multitaskar samtidigt som man spelar vilket ju inte bör vara så ovanligt, samma sak då menar du?

Även då har man inte speciellt mycket nytta av det, egentligen.

Titta på din cpu-användning och se hur ofta datorn går över 50% totalt. Just nu har jag Wolfenstein på ena skärmen, en youtubefilm och det här browserfönstret på en annan, och på den tredje är spotify (pausad, men lyckas ändå dra 4% CPU). Min totala CPU-användning ligger på under 30%.

Däremot så är ju prisskillnaden så minimal att det inte direkt finns någon mening med att inte köpa den dyrare, för de fall där man faktiskt använder flera cores (säg, packar video eller liknande).

Permalänk
Medlem
Skrivet av mrbrix:

Då är det alltså onödigt med en 4790k när man oftast bara spelar eller surfar o kollar mailen o sånt och istället köra med en 4690k.

4790k har bara 4st fysiska kärnor precis som 4690k.

Visa signatur

XFX Radeon RX 7700 XT Speedster QICK 319 Black Edition | AMD Ryzen R7 5700X | Noctua NH-D15 | Asus TUF Gaming B550-Plus | Kingston Fury Beast DDR4 3600MHz 4x8GB | Samsung 990 Pro 1TB | Corsair HX1000i | Fractal Design Define S | LG 27GL83A | Corsair K95 Platinum | Corsair Sabre RGB PRO Wireless | Corsair Void Elite Wireless

Permalänk
Medlem

Bara att slänga min nyinköpta 5820 processor i skräplådan å skaffa nåt annat då

Visa signatur

I ate a clown once, he tasted funny :)

MB: Asus X99-A, GPU: Asus GTX980Ti, CPU: Intel 5820K, Ram: 16GB 2666Mhz, Ljud: Sound Blaster Z, Skärm: ASUS VG278H 120Hz., Datakunskap:Amatör

Permalänk
Medlem
Skrivet av Rajat:

Det är inget du vet då det hittills bara är vad Samsung har påstått att den ska men de har heller inte sagt något om den ännu heller eftersom de inte presenterat den än, så den finns inte ute på marknaden än och då vet vi inte hur det är med den saken eftersom ingen har haft möjlighet att testa den än.

http://techruns.com/sv/samsung-exynos-5-octa-core-2nd-generat...

Så fall vet du inte hellre, men sannolikheten att de har snarlik prestanda är ganska stor, speciellt i praktikanten.
En fingervisning på skillnaderna mellan Note 4 versionerna.
http://www.phonearena.com/news/Samsung-Galaxy-Note-4-benchmar...

Notera att kommande Snapdragon 810 kommer ha 8 kärnor också...

Permalänk
Datavetare
Skrivet av cardeci:

...
Låt oss säga att du ska räkna ut:

result = b+c;
result += d;
result += e;
result += f;
result += g;

Hur ska du parallellisera det?

Man kan ju skriva det som:
tmp1 = b+c;
tmp2 = d+e;
tmp3 = f+g;
result = tmp1+tmp2;
result += tmp3;

Så man använder tre kärnor för att räkna ut tmp1,2 och 3, och summerar sedan resultatet på en av dem
(det går inte att göra slutsummeringen snabbare här, eftersom även om man skriver om så att tmp4=tmp2+tmp3, res=tmp1+tmp4 så kan man inte räkna ut res förrens tmp4 är klar).

Notera att ganska exakt det här _redan görs_ av CPU:er...

Värt att nämna att det du beskriver och många andra problem är precis som detta; rent teoretiskt skulle man kunna köra det på flera CPU-kärnor men det finns ett steg i slutet där man måste samla ihop resultatet på en enskild kärna. Då slås man av en annan lag: ljusets hastighet är konstant vilket betyder att alla form av kommunikation har en begränsad hastighet och vid 3-4GHz och 1-8 instruktioner per cykel blir ljusets hastighet en rejäl flaskhals. Att utföra varje beräkning här tar en till ett par CPU-cykler beroende på CPU-modell, att samla ihop allt tar i bästa fall 20-40 CPU-cykler (Intel high-end CPU som har den bästa cache designen man hittar just nu) i värsta fall ett par hundra cykler.

D.v.s. väldigt många problem går rent teoretiskt att dela upp över flera CPU-kärnor men rent praktiskt är kostnaden för intra-core kommunikation så hög att de är betydligt snabbare att köra alla beräkningar på en och samma CPU-kärna. En intressant undantag är SMT (Hyperthreading på Intel) där kostnaden för kommunikation mellan trådar i samma fysiska CPU-kärna är i princip noll då de delar lägsta nivå cache och därmed alltid har tillgång till varandras data med 3-4 cyklers latens.

Skrivet av anon159643:

10st virtuella maskiner kör inte många, men 2st är inte ovanligt och då på en vanlig laptopp. Jag vet många som t.o.m. kör 2st virtuella maskiner från en och samma Usb-hårddisk samtidigt då de ej har plats på laptoppen för dem och ej orkar flytta.

Man behöver inte köra extremt krävande saker för att det ska gå supersegt. Fler kärnor är dock inte precis alltid lösningen då det finns mycket annat som flaskar som SDD hårddisken m.m.
Angående Excel så behöver man inte göra något avancerat för att en i7a ska vara slö, det beror dock främst på att excel är dåligt optimerat för det man gör. (t.ex. om man kodar vba istället för en VSTO lösning) T.ex. splittrade jag en 10MB csv fil till olika excelfiler idag i Excel, det tog sin lilla tid fast jag hade hyfsad beräkningskraft att tillgå.

Mitt påstående är inte att en stor skara gör väldigt mycket på sina datorer samtidigt, mitt påstående är snarare att mängden som gör fler saker samtidigt på sin dator hela tiden ökar. Och man inte ska stirra sig blint på hur svårt det är att fördela kraften till en applikation i taget. Detta motiverar inte att man ska skaffa ett par hundra kärnor, men 8st kärnor är inget problem för en riktig datoranvändare att utnyttja med dagens program.

Angående antal som gör fler saker samtidigt, så är väl systemutvecklare stockholms vanligaste yrke idag? Och många av oss tar med jobbet hem och gör annat på maskinen samtidigt som den arbetar med våra uppgifter och då går det år några kärnor.

Just det du skriver har jag sett väldigt många förslå som varför man många CPU-kärnor är bra. Det alla dessa verkar missa är att ytterst få "vanliga" program är CPU-bundna, de är i stället I/O-bundna så det är absolut inget problem att köra 10 virtuella instanser på 4 kärnor (eventuellt med SMT) utan att CPU-delen ändå är flaskhals. Bit-tech har alltid med ett testmoment där de kör flera relativt CPU-tunga applikationer samtidigt. Kolla hur en i3 står sig mot t.ex. FX-8350 eller i5/i7, kompenserar du för skillnad i frekvens mellan i3 och i5/i7 så är det ingen större skillnad trots att man kör 4 applikationer parallellt.

Redan Amiga kunde köra flera applikationer "samtidigt" och så länge som inte CPU-delen är flaskhals kan det rent av vara mer effektivt att köra 2 kärnor på 70-100% än köra 4 kärnor på mindre belastning. Det första man kan notera att t.ex. 80-90% last på 2 kärnor kommer typiskt översättas till 50-60% last på 4 kärnor för flera kärnor där applikationer inte drar 100% CPU på alla lastar schemaläggare i OSet, den måste samordna mellan alla CPU-kärnor och kostnaden för den samordningen ökar (i absolut tal) med antalet fysiska CPU-kärnor (även här är SMT "gratis").

Just x86 har en fördel här jämfört med många andra CPU-arkitekturer i det att kontext-byte mellan olika OS-trådar är typiskt relativt sett billigt på sådana CPUer.

Skrivet av rektor:

Linus Torvalds vet (som vanligt) vad han pratar om, men vissa missuppfattar honom också, man får inte ta saker ur sammanhanget.

Lite intressant att desktopprocessorer är 4 kärniga, medan mobilaprocessorer är 8 kärniga. På mobiler så kör man ju bara en aktivitet åt gången, och appar som inte syns på skärmen stängs ner (Android ropar på funktionerna onPause() och onResume()).

Sen får man komma ihåg att det inte är gratis att skapa trådar och göra context switches, det är en penalty på det. Så måste man tänka på locks, mutex, och sånt. Men trådar är bra för långa bakgrundsjobb.

65535 kärnor nämns i artikeln. Det är samma antal sockets man kan ha öppna samtidigt. Så tänk om man hade en server med 65535 kärnor, då kunde den ha en dedikerad kärna för varje öppen TCP/IP anslutning.

En processor med 65535 kärnor skulle säkert YouTube och Netflix vilja ha.

8 kärnor i en mobil är korkat

För att vara seriös: tyvärr har det blivit en marknadsföringsgimmick att ha många kärnor. I praktiken är det kontraproduktivt då den typen av applikationer man kör på mobiler inte alls utnyttjar flera CPU-kärnor. Sett statistik från Qualcomm där de noterade att långt över 90% av alla applikationer och spel lastar endast en kärna till 100% och i vissa fall kan de använda en andra kärna (men inte till 100%). Fanns endast en applikation i hela deras lista som faktiskt genererade någon last på den 4 kärnan, kamera appen. Men även där var det bara en kärna som var lastad till 100%, en låg på 60-70% och två låg på 20-30% så det hade fungerat lika bra med två kärnor.

Som tur är verkar Apple aldrig fallit in i core-racet och även Nvidia (som kan beskyllas för att startat racet på Android) har insett hur man borde designa mobila CPUer; Denver har 2 starka (för att vara för pekplatta) CPU-kärnor i stället för 4-8 whimpy-cores.

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
Skrivet av Gender Bender:

Fan vad jag hatar internet nu för tiden där alla kan få tag på information på 10 sekunder och sedan låta märkvärdig. Klart att han förnekar det nu, men faktum kvarstår att steget förbi 640K-gränsen var ett stort problem på den tiden, och Gates har sagt att han trodde det skulle ta väldigt lång tid och kan då antingen på skoj eller på allvar ha sagt något i stil med "vem behöver mer än 640K?".

Extremt låg, eftersom på den tiden så fick varje ny generation 2x mer transistorer, ungefär.

Och 640k var aldrig ett mjukvaru problem.

Däremot så var det ett rätt stort problem för x86-program som körde i icke-protected mode på de fösta CPU:erna, eftersom de inte hade mer än 20-bittars addressbuss, det är därför rätt omöjligt för dem att komma åt mer än 1Mb.

640k kommer från att adressutrymmet var uppdelat i två områden, ram och "allt annat".

I det andra området fanns det plats för hårdvaran som man kunde accessa direkt (384K total max, då) t.ex. grafikminne och så.

Så det är begränsningarna i de första x86-cpu:erna som satte gränsen till 1Mb, och det är moderkortens val av adressering som bestämmer vilka adresspinnar som går vart, i princip. DOS var egentligen inte inblandat alls. 286 och uppåt hade 24 bittars bus, och en MMU som kunde mappa om vilket minne som gick att komma åt från ett specifikt program (i icke-protected mode var det fortarande bara max 1Mb dock)

På samma sätt har de senare 32-bittars CPU:erna begränsningar (istället för 20, sedan 24 bittars minnesbuss var de 32-bittars följt av 34-bittars), och man var tvungen att dela addressutrymmet mellan RAM och annat.

Och våra nuvarande "klient" 64-bittars CPU:er har oftast 36-bittars minnesbuss delad mellan RAM och annat.

Av ekonomiska skäl. Inte för att någon tror att ingen någonsin vill ha mer minne. Utan för att det _just nu_ inte är direkt relevant att supporta mer.

Permalänk
Avstängd

Ok, jag som inte är ingenjör eller raketforskare (som alltid man jämför med), för att tala enkelt barnspråk med mig - min 4790 var helt onödig eller? (inte för att jag skulle gjort något bättre med den stackars tusenlappen jag hade sparat) Även i Photoshop där benchmarks pekar på andra resultat. Vad vet jag..jag är nöjd i alla fall..;)

Permalänk
Medlem
Skrivet av skruvis:

4790k har bara 4st fysiska kärnor precis som 4690k.

På många sätt skalar dock HT bättre än faktiskt kärnor. Även i såna server-saker som transcodning av webbsidor ger HT ungefär 80% bättre prestanda än icke-HT, men elförbrukningen ökar bara med 10%. Så, ja, det ger lite mindre än faktiska kärnor, men väldigt väldigt billigt sett till kisel och elförbrukning. Det är ett bra sätt att gömma minneslatensen.

Permalänk
Datavetare
Skrivet av cardeci:

Om man ska vara skalbar kan man inte använda lås, iofs (share-nothing message passing är det som gäller när du kommer över några få hundra cores redan).

Så det är inte direkt relevant för skalbarhet för mer än 8 cores, egentligen, och context-switching kan man ju göra sig av med helt genom att helt enkelt ha lika många cores som man har trådar (typ 1000 nånstans för en normal windows-pc om jag läser min taskmanager rätt).

Det går visst att skala till hundratals kärnor utan att köra med "share-nothing", men det är bara väldigt specifika typer av algoritmer och arbetslaster som det fungerar för så det är ingen silverkula för att fixa skalning.

Har designat en låstyp för "read-mostly" data-strukturer som rent teoretiskt går att implementera på alla system som effektivt kan implementera >=C11/>=C++11 load-acquire (garanterad load/load och load/store ordning) och sequentially consistent load (fungerar tyvärr inte i Java/C# med mindre än att skriva en extension i C eller C++) samt där systemet i övrigt är cache-coherent. Går att använda ihop med algoritmer som garanterat terminerar även om data man läser inte är stabilt (t.ex. fungerar binärsökning och linjärsökning).

I språk som har en "tracing GC", som t.ex. Java och C#, kan man väldigt effektivt dela data mellan CPU-kärnor genom persistent data structures. Tyvärr så tenderar GC maskineriet i sig orsaka ganska mycket skalningsproblem när man använder detta då det skapas en del skräp i många algoritmer om de ska fungera med denna typ av konstruktioner. Men i alla fall Java7 och senare skalar definitivt förbi 8 kärnor i praktiken (.Net och tidigare Java-versioner fixar kanske 4 och i bästa fall 8 kärnor innan det blir allt för ineffektivt).

Visa signatur

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

Permalänk
Avstängd
Skrivet av retro123:

Kanske är det så?, men har man flera skärmar och/eller multitaskar samtidigt som man spelar vilket ju inte bör vara så ovanligt, samma sak då menar du?

På vilket sätt skulle HTT hjälpa dig då menar du? Hur många skärmar du använder är det väl ändå GPU som avgör vad du klarar av, har ingenting med fler trådar att göra. Det gick att multitaska på single core CPU'er med.

Visa signatur

The problem in society today: Smart phones, stupid people.

Permalänk
Inaktiv
Skrivet av Yoshman:

Just det du skriver har jag sett väldigt många förslå som varför man många CPU-kärnor är bra. Det alla dessa verkar missa är att ytterst få "vanliga" program är CPU-bundna, de är i stället I/O-bundna så det är absolut inget problem att köra 10 virtuella instanser på 4 kärnor (eventuellt med SMT) utan att CPU-delen ändå är flaskhals. Bit-tech har alltid med ett testmoment där de kör flera relativt CPU-tunga applikationer samtidigt. Kolla hur en i3 står sig mot t.ex. FX-8350 eller i5/i7, kompenserar du för skillnad i frekvens mellan i3 och i5/i7 så är det ingen större skillnad trots att man kör 4 applikationer parallellt.

Det är därför man brukar ha väldigt många hårddiskar i raid och har ramdrive m.m

Annars är detta flaskning intressant. Jag är knappast ensam om att ha program som går segt (med segt det tar många timmar att kompilera), fast processorn knappt utnyttjas enligt windows och det har inte så stor betydelse om man kör från SAN med över 10 hårddiskar, SSD eller vanlig mekanisk hårddisk. Och man undrar vart tusan ligger flaskhalsen?
-Det finns många förklaringar, min misstanke är dock att windows prestandamätare är kass på att avgöra om enskilda delar i en cpu är överbelastad. Så om det står att man använder 30% av en kärna så kanske det inte finns någon kraft alls kvar i kärnan för att göra jobbet snabbare och den ändå flaskar?
På samma sätt som när nätverkspel laggar så kan man inte enbart se på hur mycket nätverket enligt windows är belastat.

Permalänk
Medlem
Skrivet av Yoshman:

Det går visst att skala till hundratals kärnor utan att köra med "share-nothing", men det är bara väldigt specifika typer av algoritmer och arbetslaster som det fungerar för så det är ingen silverkula för att fixa skalning.

Mjo, fast så fort man pratar om kluster, speciellt när de är på flera olika kontinenter, blir lås lite väl segt.

Och share-nothing är kanske lite väl hårt beskrivet, även om det är rätt hype just nu, read-almost-only data är vad man oftast har i praktiken, även om man kanske rent konceptuellt kapslar in det hela i meddelanden eller liknande.

Men så fort man har flera olika separata CPU:er i datorn (inte cores) har man ju i praktiken klustrade datorer när det gäller x86 (NUMA).

Lås blir då rätt enkelt väldigt dyra, så om man vill ha avsevärt mer än de 8-16 cores som är standard nu för tiden använder man allt som oftast icke-lås metoder för saker som hashtabeller etc, och försöker separera jobbet i flera oberoende trådar/processer/whatever som inte behöver skicka speciellt mycket data.

Men det jag kommenterade vad just användet av mutex-lås i originalinlägget, just mutex-lås och context-switching är inte ett störe problem för att parallellisera saker. Mutexar för att man kan designa bort dem i princip helt, och context-switching dels för våra datorer är rätt bra på det (till en viss gräns) och dels för att det ändå inte är så där speciellt användbart att ha avsevärt fler beräkningar igång samtidigt än man har cores ändå. Så om man har 1000 saker som vill ha 100% CPU körandes samtidigt så är just context-switchnigen inte direkt det största problemet man kommer ha om man inte har 1000 cores.

Permalänk
Medlem
Skrivet av anon159643:

Annars är detta flaskning intressant. Jag är knappast ensam om att ha program som går segt (med segt det tar många timmar att kompilera), fast processorn knappt utnyttjas enligt windows och det har inte så stor betydelse om man kör från SAN med över 10 hårddiskar, SSD eller vanlig mekanisk hårddisk. Och man undrar vart tusan ligger flaskhalsen?

Tja. Microsoft Visual studio, om det är det du använder, är inte speciellt bra på parallell kompilering. Så det är nog din flaskhals.

Citat:

-Det finns många förklaringar, min misstanke är dock att windows prestandamätare är kass på att avgöra om enskilda delar i en cpu är överbelastad.

Tja, nja? Sant, att det är 100% betyder inte att hela kärnan används. Det kan vara bra mycket mindre om det hela är RAM-bandviddsbegränsat, t.ex.
Men om det står 30% idlar CPU:n 70% av tiden.

Det är nämligen det den mäter, 100% betyder att den kör _något_ som inte är idle loopen 100% av tiden.

Citat:

Så om det står att man använder 30% av en kärna så kanske det inte finns någon kraft alls kvar i kärnan för att göra jobbet snabbare och den ändå flaskar?

Så, ganska precis tvärt om. 30% betyder att den kärnan kan göra jobbet minst 3.3ggr snabbare om inget annant ställer till det.

Citat:

På samma sätt som när nätverkspel laggar så kan man inte enbart se på hur mycket nätverket enligt windows är belastat.

Det har mer att göra med att det mäter belastningen på ditt nätverkskort, inte på ditt nätverk, din router, mediakonverter, alla nätverk och routrar mellan din dator och servern, serverns belastning och saker som databasservrar servern använders belastning etc.

Permalänk
Avstängd
Skrivet av Rajat:

På vilket sätt skulle HTT hjälpa dig då menar du? Hur många skärmar du använder är det väl ändå GPU som avgör vad du klarar av, har ingenting med fler trådar att göra. Det gick att multitaska på single core CPU'er med.

Menar bara att man vanligtvis kanske kör fler samtidiga program än den "normala användaren" om man har flera skärmar, inget annat, kanske lite därför de flesta kör som kör flera skärmar gör det. Jag generaliserar säkert.

Permalänk
Inaktiv

En extreme hyperthreading dodeca core med super extreme retina 3D-turbo samt extra stor L2-cache... i en telefon! Praise the lord and keep the marknadsföringsord flöda så man kan lapa mer av den sötsmakande elitismen så man kan stilla behovet av att ha det bästa utan något egentligt behov mer än njutningen av att får köpa och äga det Strömförbrukning? Tänd på lite mer uran så löser den biten sig.

Permalänk
Avstängd
Skrivet av leafbranch:

Så fall vet du inte hellre, men sannolikheten att de har snarlik prestanda är ganska stor, speciellt i praktikanten.
En fingervisning på skillnaderna mellan Note 4 versionerna.
http://www.phonearena.com/news/Samsung-Galaxy-Note-4-benchmar...

Notera att kommande Snapdragon 810 kommer ha 8 kärnor också...

Så klart att jag inte vet hur skillnaden är på deras nya octa, har heller inte påstått annat mer än hur pass klenare den befintliga är i jämförelse, vad Samsung säger (för att sälja in sig) och vad folk spekulerar i innan de ens finns tester struntar jag helt i.

Skrivet av retro123:

Menar bara att man vanligtvis kanske kör fler samtidiga program än den "normala användaren" om man har flera skärmar, inget annat, kanske lite därför de flesta kör som kör flera skärmar gör det. Jag generaliserar säkert.

Läs cardeci's inlägg på #62

Visa signatur

The problem in society today: Smart phones, stupid people.

Permalänk
Inaktiv
Skrivet av cardeci:

Tja, nja? Sant, att det är 100% betyder inte att hela kärnan används. Det kan vara bra mycket mindre om det hela är RAM-bandviddsbegränsat, t.ex.
Men om det står 30% idlar CPU:n 70% av tiden.

Det är nämligen det den mäter, 100% betyder att den kör _något_ som inte är idle loopen 100% av tiden.

Detta var intressant då fick jag lära mig något nytt, jag trodde ej den mätte idle tiden.

Men om man har program som kompilerar filer och tar timmar där varken cpu eller hårddisken är flaskhalsen så vad är då kvar? (cpun ligger på runt 30% och gå från ssd till mekanisk påverkar ej så mycket) I alla trådar har folk sagt att snabbare ramminne knappt hjälper någon.
Även om kompilatorn är dåligt skriven så finns det en hårdvara som begränsar hur fort den kan exekvera.

Permalänk
Medlem
Skrivet av XFTality:

Helt rätt tycker jag, då mer än 4 kärnor oftast innebär: Antingen dålig prestanda (AMD) eller bara skryt för att förlänga e-penisar.

Nu pratar du ur röfven. Min 1100T är precis lika snabb som din 2500k och skulle klocka över 5GHz på vatten. Slå det om du kan.

6 kärnor är dessutom underbart. Speciellt om man gillar multitasking. Skulle aldrig gå ner till 4 igen.

Permalänk
Medlem

Torvalds äger

Men jag har svårt att hålla med om att man aldrig behöver fler än 4st kärnor.
Det är inte bara användare i detta forum som brukar slänga sig med ovanstående påstående, utan även Sweclockers recensenter.

Ett ganska vanligt scenario:
* Handbrake enkodar
* Youtube-klipp rullar
* Man CAD'ar, Photoshop'ar eller använder webbläsare

Detta får iaf min 4-kärninga processor att toppa 100% för jämnan. Jag ser inga problem i att ha 8st kärnor.

Permalänk
Medlem
Skrivet av anon159643:

Men om man har program som kompilerar filer och tar timmar där varken cpu eller hårddisken är flaskhalsen så vad är då kvar? (cpun ligger på runt 30% och gå från ssd till mekanisk påverkar ej så mycket) I alla trådar har folk sagt att snabbare ramminne knappt hjälper någon.
Även om kompilatorn är dåligt skriven så finns det en hårdvara som begränsar hur fort den kan exekvera.

Du behöver få ditt byggsystem att bygga filer parallellt.

Med unixa (egentligen gnu make) system så går oftast det ut på att skriva 'make -j<nuffra>' istället för 'make'. Nuffra är hur många samtidiga kompileringar den ska köra ( cores+2 är rätt lagom).

Med Visual Studio kan man fippla runt i options->project->build nånstans för att ställa in det.

Märk dock att om dependencies i kompileringen är uppsatta fel (eller, rätt om man har otur) kanske den inte kan kompilera mer än en fil itaget ändå.

Och i alla fall så kommer det inte gå snabbare om det bara är en fil som kompileras, kompilatorer är inte speciellt parallelliserade just nu (även om det till viss del går att göra saker som optimering av individuella funktioner samtidigt, även om det skulle dra .. rätt mycket .. RAM om man inte är väldigt försiktig)

Permalänk
Inaktiv

Nu i janurirean så finns en dator på en av våra största elkejdor.

Processor: Intel® Celeron™ J1900 Quad Core, 2,0-2,41 GHz
Grafik: Intel HD Graphics
Minne: 8 GB DDR3

Det är väl lite datorn ovanför som Linus Tornvald syftar på då den för okunniga kan se ut som värsta gamingdatorn. (den är dock skitbillig)

Permalänk
Medlem
Skrivet av moztech:

Nu pratar du ur röfven. Min 1100T är precis lika snabb som din 2500k och skulle klocka över 5GHz på vatten. Slå det om du kan.

6 kärnor är dessutom underbart. Speciellt om man gillar multitasking. Skulle aldrig gå ner till 4 igen.

Nja, den har 20% lägre genomsnittlig IPC. Men, ja, fler cores.

Permalänk
Medlem
Skrivet av moztech:

Nu pratar du ur röfven. Min 1100T är precis lika snabb som din 2500k och skulle klocka över 5GHz på vatten. Slå det om du kan.

6 kärnor är dessutom underbart. Speciellt om man gillar multitasking. Skulle aldrig gå ner till 4 igen.

2500k 5Ghz på luft om man har tur

Permalänk
Medlem

Alltid hetsiga känslor här på SweC. Utan att hata nån tycker jag Herr Torvalds har fel. Just NU må han ha en poäng, men det där kommer vara lika med 640k ram-citatet om några år. Klart det går att utnyttja fler kärnor om programmet är skrivet så...

Permalänk
Datavetare
Skrivet av cardeci:

Mjo, fast så fort man pratar om kluster, speciellt när de är på flera olika kontinenter, blir lås lite väl segt.

Och share-nothing är kanske lite väl hårt beskrivet, även om det är rätt hype just nu, read-almost-only data är vad man oftast har i praktiken, även om man kanske rent konceptuellt kapslar in det hela i meddelanden eller liknande.

Men så fort man har flera olika separata CPU:er i datorn (inte cores) har man ju i praktiken klustrade datorer när det gäller x86 (NUMA).

Lås blir då rätt enkelt väldigt dyra, så om man vill ha avsevärt mer än de 8-16 cores som är standard nu för tiden använder man allt som oftast icke-lås metoder för saker som hashtabeller etc, och försöker separera jobbet i flera oberoende trådar/processer/whatever som inte behöver skicka speciellt mycket data.

Men det jag kommenterade vad just användet av mutex-lås i originalinlägget, just mutex-lås och context-switching är inte ett störe problem för att parallellisera saker. Mutexar för att man kan designa bort dem i princip helt, och context-switching dels för våra datorer är rätt bra på det (till en viss gräns) och dels för att det ändå inte är så där speciellt användbart att ha avsevärt fler beräkningar igång samtidigt än man har cores ändå. Så om man har 1000 saker som vill ha 100% CPU körandes samtidigt så är just context-switchnigen inte direkt det största problemet man kommer ha om man inte har 1000 cores.

NUMA och cache-koherenta kluster (via t.ex. NUMALink som i sig också är NUMA-system) skalar nära nog perfekt för alla read-only strukturer och saker som cache-koherent-protokol-mässigt uppförs sig nära read-only (vilket är precis vad den låsmekanism jag tagit fram gör). Ett NUMA system kommer lagra en kopia av saker man ofta läser i den lokala cachen, så NUMA-system skalar i princip lika bra som enkel-socket lösningar för denna typ av algoritmer.

Saker som däremot skriver ofta till data, t.ex. alla former av mutexes och andra "vanliga" lås skalar usel mellan NUMA zoner då latensen mellan CPU-socklar är hundratals CPU-cykler. Problemet med mutexes och liknande är inte kontextbyte, det är att man "tar" låset via en read-op-write cykel som alltid resulterar i att den cache-line som låset ligger på kommer invalidiseras hos alla CPU-kärnor utom den som tar låset. Den kostnaden kan mycket väl vara mer än en tiopotens högre än kostnaden för en kontextbyte på x86.

Lås på ofta använda strukturer fungerar bara i väldigt speciella fall. Mellan HT-trådar på samma fysiska CPU-kärna fungerar det alltid (read-op-write ställer inte till med något då det är samma L1-cache) och det fungerar OK på vissa specifika CPU-modeller, t.ex. Atom Silvermont (mellan kärnor som delar L2-cache då den har väldigt låg latens jämfört med konkurrenterna) och vissa enklare CPU-modeller som ARM Cortex A7 och liknande (här fungerar det för att CPU-kärnan är så klen att den relativa kostnaden för lås inte blir så hög).

EDIT: fördelen med "share nothing" är att det fungerar även i kluster som INTE är cache-koherenta, compute-noder i "molnet" är ett bra exempel på sådana system och förklaringen till varför det är sådan hype kring algoritmer och metoder som kör med "share nothing".

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 Frisell:

Alltid hetsiga känslor här på SweC. Utan att hata nån tycker jag Herr Torvalds har fel. Just NU må han ha en poäng, men det där kommer vara lika med 640k ram-citatet om några år. Klart det går att utnyttja fler kärnor om programmet är skrivet så...

I så fall är det fler hyfsat smarta herrar som måste ha fel, bl.a. Stephen Hawking som poängterat att ljusets hastighet är den största flaskhalsen för skalning över många CPU-kärnor då det sätter en rätt kraftig gräns för latensen i kommunikationen mellan CPU-kärnorna.

Som jag nämnde ovan, rent teoretiskt finns det massor med problem som går att sprida ut över många CPU-kärnor. I praktiken är det en ytterst usel design då kostnaden för kommunikation mellan CPU-kärnor kan lätt bli rejält mycket dyrare än kostnaden för själva beräkningen. De flesta interaktiva program hamnar tyvärr i denna kategori, vilket är precis vad Torvalds syftar på när han säger att många CPU-kärnor är en dålig idé för mobiler, pekplattor och datorer vi kör på skrivbordet.

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
Skrivet av moztech:

Nu pratar du ur röfven. Min 1100T är precis lika snabb som din 2500k och skulle klocka över 5GHz på vatten. Slå det om du kan.

6 kärnor är dessutom underbart. Speciellt om man gillar multitasking. Skulle aldrig gå ner till 4 igen.

I program som kan använda 6 kärnor är din CPU 6% snabbare, vilket inga program gör förutom benchmarks. Dessutom är 2 extra kärnor för bara 6% mer prestanda och inte 30-50% nästan lite löjligt.

I singel-trådade program är i5-2500k 43% snabbare, och skalar ända upp till 4 kärnor. Dessutom går min i5-2500k ända upp till 5GHz, på luft. http://valid.x86.fr/481ctv

Visa signatur

Gamingrig | Intel Core i7-6700K @ 4.2 GHz | Nvidia GeForce GTX 980 Ti | ASUS ROG Maximus VIII Formula | 16GB 2133MHz HyperX DDR4 | SSD: Samsung 850 Pro 512GB + Intel 535 480GB + Samsung 840 Pro 256GB | HDD: 2x WD Black 2TB + 2x WD Green 4TB | Creative Sound Blaster ZxR+Sennheiser HD650 | Corsair RM1000 | Corsair H100i V2 | Phanteks P400S Tempered glass | Asus ROG Swift 1440p 165Hz + Asus 1440p PLS | Retina Macbook Pro | i7-3820QM | 8GB RAM | MS Surface Pro 3&4 | Intel i5 | 8GB RAM | 256GB SSD |

Permalänk
Medlem

Anledningen till att han har ganska rätt är att många program är rätt sekventiellt skrivna(mycket kod körs inte på flera trådar och därmed inte på flera CPUer). Men visst finns det prestanda att hämta vid exempelvis sex kärnor istället för fyra men i de flesta program är denna skillnad liten.

Vilket jag passande kan visa med just Amdahl's lag för parallelisering(körning på flera CPUer)

S = Teoretisk andel prestandsökning jämfört mot en kärna.
N = Antal Processorer
P = Delar av programmet som kan multitrådas och därmed dra nytta av parallelising

25% av koden skriven multitrådat
Sex kärnor: 1/(0,75+0,25/6) = 1/0,792 = 1,26
Fyrakärnor: 1/(0,75+0,25/4) = 1/0,8125 = 1,23

50% av koden skriven multitrådat
Sex kärnor: 1/(0,5+0,5/6) = 1/0,583 = 1,71
Fyrakärnor: 1/(0,5+0,5/4) = 1/0,625 = 1,6

75% av koden skriven multitrådat
Sex kärnor: 1/(0.25+0,75/6) = 1/0,375 = 2,67
Fyrakärnor: 1/(0,25+0,75/4) = 1/0,4375 = 2,29

Som ni ser så är sex CPUer bara 3% snabbare än fyra CPUer när programmet som körs är skrivet till 25% i multitrådad kod. Denna skillnad springer sen iväg till 38% prestandaökning när 75% av koden är skriven multitrådat. Dock så är det mer sannolikt att programmen som körs är skrivna till större delen i sekventiell kod och därmed problemet.

Visa signatur

Asus P8P67 Deluxe B3 | Intel i7-2600k@3,4GHz | 16 GB Corsair Vengeance LP 1600Mhz CL9 | Asus GTX 580 Matrix@900Mhz | Corsair Force GT 120GB | WD Caviar Black 1TB | Corsair 850 AX | Fractal Design R4 | Dell u2410 | Qpad MK-80 | QPad 5K

CITERA FÖR SVAR!

Permalänk
Medlem
Skrivet av Gender Bender:

Fan vad jag hatar internet nu för tiden där alla kan få tag på information på 10 sekunder och sedan låta märkvärdig. Klart att han förnekar det nu, men faktum kvarstår att steget förbi 640K-gränsen var ett stort problem på den tiden, och Gates har sagt att han trodde det skulle ta väldigt lång tid och kan då antingen på skoj eller på allvar ha sagt något i stil med "vem behöver mer än 640K?".

phahahahaha xD Asså är du seriös? Tycker det doftar lite ironi om märkvärdigheten... "hmmm ett dumt citat av Bill Gates vore på sin plats för att dumförklara Torvalds - hoppsan det visade sig att det inte var sant, varför måste folk lägga in kommentarer som dumförklarar mitt inlägg? "
Faktum kvarstår att på den tiden var det nära 0 privatpersoner som behövde mer kraft än 640K, lite som att idag säga "vem behöver mer än 16 GB?". Då blir det helt plötsligt inristat i sten och man får en idiotstämpel av dig för att det kommer se annorlunda ut om 10-20 år? åååååkeeej

Visa signatur

Fractal Design R5, i5 6600k, MSI Z170A XPOWER GAMING TITANIUM EDITION, MSI GTX 980, 8GB Minne @ 2400MHz, BeQuiet Kraft 700W

Permalänk
Inaktiv

Hur tycker ni det är vid fler kärnor vid realtidstillämpningar. Där just spel är en sådan vanlig applikation, dock inte den allvarligaste.

Det är en sak hur snabbt en cpu kan exekvera ett program, men det är en annan att kunna garantera att alla delar exekverar inom en bestämd tid. Där min uppfattning är att fria kärnor med bra marginal över för olika trådar är bra för att säkerhetställa ens realtidskrav. Förenklat så ju fler trådar på varje kärna, ju större är risken att ens viktiga tråd inte får exekvera omedelbart och så länge som den behöver för att uppfylla realtidskraven.
Nu är som sagt spel kanske inte det allvarligaste realtidssystemen, men det finns många andra där man kan missa viktig kommunikation..

Oja, jag vet att windows suger att köra realtidssystem på.