Varför tvåkärnig processor fortfarande är aktuella!

Permalänk
Medlem
Skrivet av AMD-Hippie:

@philipborg:

"Att den gör det sekventiellt är rätt viktigt då det finns risk annars att uppdateringar krockar."

ROFL!!!!
I rest my case

När du redigerar OS relaterade systemfiler så kan det krocka. Inte ett program i sig. Det har med filerna i sig att göra och inte själva trådningen.

Tänk dig en oändligt stor toa. Alla (trådar) kan gå på toa samtidigt, inga problem. När du däremot ska fräscha upp toan så blir det väldigt mycket kaos om vissa byter spolnings system medans andra byter porslinet samtidigt. Då är det säkrare att dem gör det i tur och ordning.

Som jag däremot sa, det är sällan uppdateringen är CPU bunden i vilket fall, alltså är det inte så relevant i en jämförelse. Det skiljer alltså väldigt lite mellan olika processorer. Det intressanta är ju att kolla där det faktiskt finns skillnader och mäta hur stora dessa är.

Helt enkelt, ja, i uppdateringar så spelar troligen det inte så stor roll hur många kärnor man har. (Jag antar att det var detta du ville att jag skulle säga.)

Däremot så påverkar det ju ingenting för dem andra skillnaderna vi har visat. En 4 kärnig kommer inte alltid vara markant mycket bättre än en 2 kärnig, det har ingen påstått, vi säger bara att dem lasterna som det gör skillnad så påverkar det väldigt mycket. Även att dem lasterna är väldigt mycket vanligare än vad du tycks tro.

Enligt mig så skedde förflyttningen till program som kan tråda för några år sedan (5-7). Det spelar ju ingen roll om program som inte är krävande trådas, men dem som är krävande har nästan säkerligen gått över. Det är ju även dem som kräver kraft som man vill ska gå snabbt.

Visa signatur

Citera eller @philipborg om du vill att jag ska läsa dina svar.

Permalänk
Medlem
Skrivet av Laggzor:

en 2 kärnig funkar säkert ok om man bara spelar och inte bryr sig jättemycket och så.

däremot om man kör lite tyngre saker ibland och / eller har flera skärmar vill man ofta ha lite mer igång.

jag har en sjuhelvetes grejer igång, skulle aldrig klara mig på en 2 kärnig

http://i.imgur.com/zRTtGIP.png

nu var det mindre igång änn vanligt också, "idle"

Wow! Ja, har man 12 GB av aktiviteter på i bakgrunden ska man nog skaffa sig en processor med kraft och kärnor därefter Är du säker på att du inte glömde stänga av ett par, tre fyra datospel, som står på i bakgrunden

Permalänk
Medlem
Skrivet av AMD-Hippie:

Wow! Ja, har man 12 GB av aktiviteter på i bakgrunden ska man nog skaffa sig en processor med kraft och kärnor därefter Är du säker på att du inte glömde stänga av ett par, tre fyra datospel, som står på i bakgrunden

de var avstängda nu, var uppe i runt 15+ tidigare med cs och så

Visa signatur

5800x3d | 4080 | 4x8 3600 | Strix X570-F

Permalänk
Medlem

Det är klart det kan verka onödigt med flera kärnor än två om man saknar grundläggande kunskap i ämnet. Så brukar det vara med det mesta. Att det skulle aktiveras fler kärnor vid input är ju väldigt komiskt t.ex.

Permalänk
Medlem
Skrivet av Tino:

japp, korrekt uppfattat.

Har läst på lite mer om programmering för flera kärnor. "Parallelism" är den metod i vilket man kan bryta upp en uppgift till flera subuppgifter och alltså det som du testade. Sedan finns det "Concurrency" som är lite mer invecklat men, tycker jag, roligare. Där handlar det om att flera kärnor arbetar på olika uppgifter samtidigt för att förbereda en handling vid ett senare tillfälle. Vid concurrency får de andra kärnorna inte skriva klart sin uppgift, utan måste vänta på den första uppgiften att bli klar innan de verkställer sin uppgift, som de redan till stor del har skrivit klart.

Du kan läsa mer här http://tutorials.jenkov.com/java-concurrency/

Permalänk
Inaktiv
Skrivet av AMD-Hippie:

Har läst på lite mer om programmering för flera kärnor. "Parallelism" är den metod i vilket man kan bryta upp en uppgift till flera subuppgifter och alltså det som du testade. Sedan finns det "Concurrency" som är lite mer invecklat men, tycker jag, roligare. Där handlar det om att flera kärnor arbetar på olika uppgifter samtidigt för att förbereda en handling vid ett senare tillfälle. Vid concurrency får de andra kärnorna inte skriva klart sin uppgift, utan måste vänta på den första uppgiften att bli klar innan de verkställer sin uppgift, som de redan till stor del har skrivit klart.

Du kan läsa mer här http://tutorials.jenkov.com/java-concurrency/

Jag ger dig ett stort plus för att först skriva ett bra startinlägg, sedan när du kom med lite felaktig information så tog du sedan åt dig och läste på. Denna förmåga att kunna inhämta information är det som gör skillnaden på intelligenta och mindre intelligenta varelser.

Nå mer om Concurrency finns att läsa här och spel är till stor del begränsade av detta:
https://en.wikipedia.org/wiki/Concurrency_(computer_science)

Förutom att det är svårt att dela upp beräkningar på flera kärnor så belastar det ens andra komponenter mer vilket man bör tänka på, så om man har en kärna som belastar ens hårddisk till 100% så är det ingen större vinst att ha en kärna till som gör samma sak.

Vilket innebär att man får köpa hårddisk och ramminne efter sin cpu och kostnaden bara skenar iväg. På konsumentsidan så är t.ex. dubbla samsung 950 m.2 diskar eller liknande, det man bör ha på en snabbare multicores cpu: http://www.inet.se/produkt/4305126/samsung-950-series-pro-512... (Läshastighet 2500 MB/sek) och dessa två går på runt 7000kr.

Permalänk
Medlem

vad hade hänt om t.ex intel hade gjort enkärnig beast core med ht för 4trådar lr 8trådar??

Såklart med större cache och högre frekvenser(vilket är lättare att nå på färre kärnor)

Permalänk

jag sitter nu 24h med min 4570k @4400 efter att jag hade g3258 i ett år @ 4000-4500.
Så jag måste vara den perfekta personen att svara här

Jag köpte processorn för ungefär 1900kr. Min gamla ska farsan få. En perfekt processorn för honom. (e8400 just nu).
Allt är snabbare. Nu kan jag spela alla spel utan att tänka hela tiden "räcker processorn eller inte"
Jag har dessutom 4 skärmar och kör många program samtidigt. Helt klart en stor skillnad nu.

Jobbar man med video, musik och inte har en bättre processor än g3258 är man bara dum i huvud. Jag har gjort video med g3258 och skulle ha sparat mycket tid med en bättre processor.

Jag tänkte så här när jag bytte. Inom 1-2 år så kommer jag säkert att byta processorn. Varför inte köpa nu så jag kommer att ha 1-2 år mera med en snabbare processor. Andra väljer att ha 1500-2000kr mer i banken under den tiden. Deras val.

Permalänk
Medlem
Skrivet av criscros:

vad hade hänt om t.ex intel hade gjort enkärnig beast core med ht för 4trådar lr 8trådar??

Programmerare hade haft det lättare, eftersom parallellism är besvärligt. Det är ingen som "vill ha" flera kärnor. Det är ett nödvändigt ont, eftersom vi inte längre kan göra signifikant snabbare kärnor. Det absolut bästa hade varit en ensam kärna med obegränsad beräkningskapacitet, men när nu det inte är möjligt så jobbar vi oss så sakta mot obegränsad mängd kärnor på strax under 5gHz, och 10-15% bättre beräkningskapacitet/ MHz kontra nuvarande prestanda.

Skrivet av Dual-Tjur:

Jag köpte processorn för ungefär 1900kr. Min gamla ska farsan få. En perfekt processorn för honom. (e8400 just nu).

Det är en ganska substanciell uppgradering, frågan är dock, vad gör han på datorn, kommer han verkligen att ha nytta av den? Är det kanske en smartare investering att sälja grejerna, och investera i en SSD till honom?

Skrivet av Dual-Tjur:

Jobbar man med video, musik och inte har en bättre processor än g3258 är man bara dum i huvud. Jag har gjort video med g3258 och skulle ha sparat mycket tid med en bättre processor.

Dum i huvudet vet jag inte... Men det känns som om i fall man ARBETAR med det, så borde skillnaden i kostnad för de olika systemen inte vara problemet som hindrar en från att ha 6 kärnor med HT, 32GB RAM, och dubbla SSD'er för OS och scratch-disk.
Det man betalar extra för att köpa grejerna har man fått igen med råge innan datorn är avskriven, i form av arbetstid som inte går åt till att sitt och vänta på datorn, eller rent av göra om arbete för att live-inspelningen hickat pga CPU underskott.

Men som hobbyplattform med begränsad ekonomi går det säkert att leva med de begränsningarna som ett sådant val medför. Jag kunde sitta med Octamed 3, och göra musik på Amigan... Dagens system är något mer kraftfulla, och även om sättet att skapa musik på har förändrats, så känner jag att det nog är främst till fördel för den moderna hårdvaran.
B!

Visa signatur

Allting jag skriver är om inget annat uttrycks, min åsikt! Ingenting måste vara dagens sanning enligt din åsikt, och gör du antaganden baserade på mina åsikter hoppas jag att du övervägt mer än bara just min åsikt.

Permalänk
Datavetare
Skrivet av Tino:

Vi gick från

foreach(var item in items) { //DoWork heavy with item }

Till

Parallel.ForEach(items, item => { //DoWork heavy with item });

.Net löser resten själv genom att fördela iterationen (task) över flera kärnor.

Problemet här är att det bara fungerar på problem som i grunden består av många oberoende uppgifter där varje uppgift är beräkningstung. Dagens .NET runtime ihop med TPL/PLIQ är väldigt begränsad i vilka problem som faktisk ger det resultat du beskriver. Dels finns problem/algoritmer som är helt sekventiella till sin natur, dels så om du i stället har fallet

Parallel.ForEach(items, item => { //DoWork "medium" work with item });

så är det sällan utväxlingen blir speciellt stor och i flera fall kommer det gå långsammare att använda flera CPU-kärnor här. Exakt vad brytpunkten går varierar med miljö, parallel streams i Java8 och saker som Cilk+ (och handskrivna motsvarigheter i t.ex. C eller C++) hanterar långt mindre "work items" väl jämfört med dagens .NET (finns ingen hård teknisk anledning varför C# skulle vara sämre än Java här, de borde kunna bli exakt lika bra om underliggande runtime är lika effektiv).

Största problemet med multitrådning är att sådana program är många många gånger svårare att få korrekta än strikt seriella program. Många som skriver multitrådade program som sedan körs på multicore system har aldrig hört talas om saker som minneskonsistensmodell och än färre förstår varför man behöver veta detta, d.v.s. de flesta som skriver sådana program utför "programming by coincidence"...

För att ge ett svar till vad tråden handlar om: väldigt många mätningar och väldigt mycket erfarenhet pekar på att om har en CPU-design för interaktiv användning (d.v.s för skrivbordet) och designar en efterföljare där man kan välja mellan att gå från en CPU-kärna till två CPU-kärnor eller öka enkeltrådprestanda så ska man välja det senare om prestandaökningen är mer än 30%. Ju fler kärnor man startar mer ju mindre behöver ökningen i prestanda per tråd vara för att fokus på enkeltrådprestanda ska ge majoriteten av användarna en bättre upplevelse.

Vi verkar efter ca 10 år med multicore CPUer för hemmamarknaden kommit till den punkt där två kärnor utan SMT (det Intel kallar "Hyperthreading") är i minsta laget, däremot är allt över två kärnor + HT fortfarande en nischmarknad om man ser till den faktiska nyttan. Detta syns t.ex. i att fyrkärninga bärbara är allt ovanligare, för väldigt nära 100% av alla arbeten som kräver en dator räcker helt enkelt två kärnor + HT. Jobbar själv väldigt mycket med multicore programmering, men föredrar ändå att jobba på en tvåkärnig laptop då det inte är någon signifikant begränsning för utveckling, kör endast prestandatester på maskiner med väldigt många kärnor.

Multitaskning är inte ett bra exempel på när många kärnor är bra, en Haswell i3 är i de flesta fall lika snabb som en FX-8350 på sådant. Redan Amiga 500 kunde multitaska väl, trots en väldigt långsam enkelkärning CPU.

Däremot lämpar sig vissa typer av problem som t.ex. rendering och transcoding sig mycket väl till att köras på många kärnor och/eller på GPU eller SIMD-enheter (SSE/AVX på x86). Kör man den typen av program finns det helt klart nytta med både 6, 8 och även än fler CPU-kärnor. Spel har däremot ganska begränsad parallellism, det man skulle kunna (och det t.ex. GTA 5 till viss del gör med vissa typer av inställningar) göra är att köra fysiksimuleringar och liknande som består av flera relativt tunga beräkningar som sinsemellan är oberoende. Frågan är om inte det är typexempel på jobb som kanske kommer avlastas till iGPUn i framtiden medan en dGPU sköter grafiken.

Visa signatur

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

Permalänk
Inaktiv
Skrivet av -=Mr_B=-:

Programmerare hade haft det lättare, eftersom parallellism är besvärligt. Det är ingen som "vill ha" flera kärnor. Det är ett nödvändigt ont, eftersom vi inte längre kan göra signifikant snabbare kärnor. Det absolut bästa hade varit en ensam kärna med obegränsad beräkningskapacitet

Det är dock inte helt sant då schemaläggaren kräver resurser när den ska hoppa mellan olika task. Dessutom går inte alla task att avbrytas när som helst och då kan en annan task få vänta onödigt länge innan den får exekvera sin kod, vilket inte alltid är accepterat i realtidsystem. När man konsternerar realtidsystem så är just detta något att räkna på, ju längre tid man låter en task exekvera, ju mindre resurser går åt till schemaläggaren, men samtidigt tar det ju längre tid innan en viss task får exekveras.

Så en supersnabb kärna är inte nödvändigtvis dubbelt så snabb på att köra all kod som två hälften så snabba kärnor. Det intressanta är dock vad som i praktiken är bäst för vanligt konsumentarbete, de flesta här på forumet kör inte såvida hårda realtidssystem, även om det inte är uppskattat att gubben i ett spel svarar några 100ms sekunder efter man har tryck på musknappen. (att ljudet kommer efter är nog vanligare och mer accepterat)

Jag själv som har igång runt 20 virtuella maskiner som är tungt belastade på min dator skulle inte uppskatta den overheaden som uppstår i schemaläggaren som det skulle ha uppstått om jag hade haft en kärna som klarade detta.

*edit*
Detsamma gäller det mesta med hårddiskar etc, att låta två processer få arbete helt fritt på två hälften så snabba hårddiskar kan vara snabbare än att ha en process som ska arbeta på en dubbelt så snabb. Där hur ofta varje process tillåts vänta på sin tur spelar roll. (d.v.s dens realtidskrav)
Men i vanliga fall är självklart en dubbelt så snabb hårddisk det bästa valet.

Permalänk

En g3258 är helt okej för low till mid end gaming men efter jag bytte till en 4790k så känner man verkligen prestandan :3

Visa signatur

Gaming/Allround Dator: I7 4790k, Gigabyte windforce 3X 2gb GTX 760, CX500, H440, MSI Z97 Gaming 5, Hyper 212 Evo
Laptop 1. Asus k73e: intel core i5 2410m HD3000 bästa laptopen jag haft/använt synd bara att den börjar visa 4 år av släpandes till kompisar :(
Laptop 2. EN TV43CM: A6-4400m Platta: Surface pro 1

Permalänk
Datavetare
Skrivet av anon159643:

Så en supersnabb kärna är inte nödvändigtvis dubbelt så snabb på att köra all kod som två hälften så snabba kärnor. Det intressanta är dock vad som i praktiken är bäst för vanligt konsumentarbete, de flesta här på forumet kör inte såvida hårda realtidssystem, även om det inte är uppskattat att gubben i ett spel svarar några 100ms sekunder efter man har tryck på musknappen. (att ljudet kommer efter är nog vanligare och mer accepterat)

En enkelkärning CPU som har samma aggregerad beräkningskapacitet som en tvåkärnig CPU kommer alltid vara minst lika snabb som den tvåkärniga varianten. D.v.s. absolut best-case för två hälften så snabba kärnor är att det går lika snabbt.

Så även för servers är är det bättre att fördra starka kärnor jämfört mot fler kärnor, skillnaden är att cut-offen inte ligger vid att det räcker med 30% bättre enkeltrådprestanda för att det är ett bättre vad. Man kan i stället ligga så det krävs närmare 100% ökning i enkeltrådprestanda (men aldrig mer än 100%), t.ex. om servern utför väldigt många samtida och oberoende transaktioner.

Visa signatur

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

Permalänk
Inaktiv
Skrivet av Yoshman:

En enkelkärning CPU som har samma aggregerad beräkningskapacitet som en tvåkärnig CPU kommer alltid vara minst lika snabb som den tvåkärniga varianten. D.v.s. absolut best-case för två hälften så snabba kärnor är att det går lika snabbt.

Så även för servers är är det bättre att fördra starka kärnor jämfört mot fler kärnor, skillnaden är att cut-offen inte ligger vid att det räcker med 30% bättre enkeltrådprestanda för att det är ett bättre vad. Man kan i stället ligga så det krävs närmare 100% ökning i enkeltrådprestanda (men aldrig mer än 100%), t.ex. om servern utför väldigt många samtida och oberoende transaktioner.

När schemaläggaren ska hoppa mellan två olika task måste den spara undan en massa värden, i mindre realtidsystem ofta till en stack. Detta med att läsa upp data till stacken och sedan hämta tillbaka den tar resurser, detta ska man när man konfigurerar sin schemaläggare ta med i beräkningarna på hur ofta man vill att varje task ska få exekvera. Det är alltså inte ur prestanda skäll det mest optimala att sätta så låg exekveringstid som bara går i schemaläggaren för alla taskar. Likaså gäller det att analysera vilka konsekvenser en höjd prioritet av en task innebär för hela systemet.

I vanliga persondator som kör windows som inte på något sätt är ett realtidsoperativsystem så har folk inte samma krav, det jag dock funderar på är att om man kör extremt mycket med korta mjuka-realtidskrav så får denna kärna hoppa väldigt mycket mellan alla taskar som ska köras.
*edit*
Jag själv vet inte om detta fenomen har uppstått bland vanliga persondatorer som kör hypervisor och flera operativsystem ännu, på inbyggda system så är dock schemaläggarens arbetstid att växla mellan taskar något att ta med i beräkningen. Och en stor skillnad där är att det som sagt finns realtidskrav och taskar måste få börja exekvera inom en viss bestämd tid, medans windows mer lägger taskar på en kö och säger att jag exekverar dessa när/om jag får lust.

Permalänk
Datavetare
Skrivet av anon159643:

När schemaläggaren ska hoppa mellan två olika task måste den spara undan en massa värden, i mindre realtidsystem ofta till en stack. detta med att läsa upp data till stacken och sedan hämta tillbaka den tar resurser, detta ska man när man konfigurerar sin schemaläggare ta med i beräkningarna på hur ofta man vill att varje task ska få exekvera. Det är alltså inte ur prestanda skäll det mest optimala att sätta så låg exekveringstid som bara går i schemaläggaren för alla taskar.

I vanliga persondator som kör windows som inte på något sätt är ett realtidsoperativsystem så har folk inte samma krav, det jag dock funderar på är att om man kör extremt mycket med korta mjuka-realtidskrav så får denna kärna hoppa väldigt mycket mellan alla taskar som ska köras.
*edit*
Jag själv vet inte om detta fenomen har uppstått bland vanliga persondatorer som kör hypervisor och flera operativsystem ännu, på inbyggda system så är dock schemaläggarens arbetstid att växla mellan taskar något att ta med i beräkningen. Och en stor skillnad där är att det som sagt finns realtidskrav och taskar måste få börja exekvera inom en viss bestämd tid, medans windows mer lägger taskar på en kö och säger att jag exekverar dessa när/om jag får lust.

Att hoppa mellan trådar på samma CPU är relativt billigt, framförallt på x86. Windows verkar ha en time-slice längd på 20 msec, så i absolut värsta fall måste man byta program 50 gånger på en sekund och det handlar om CPU-begränsade fall. Även om vi klämmer i med att det tar 1000 cykler att byta program (spara register+ återställa ny uppsättning register tar 10-20 cykler på x86, så 1000 cykler borde vara mer än tillräckligt) så spenderar den enkelkärniga CPU-modellen med dagens frekvenser ca 0,001% av tiden med "overhead".

En multicore CPU har en långt mer komplicerad cache-design, varje skrivning till en cache-line som skrivits av någon annan kärna kommer vara väsentligt dyrare än spara/återställa alla register och det kan hända långt fler gånger än 50 gånger per sekund i ett verkligt scenario vilket. Vidare så har man "spill" med flera kärnor i lägren där jobben inte är exakt match, ibland kommer den ena kärnan inte ha något att göra medan den andra jobbar, en stark enkel-CPU kommer alltid jobba när det finns jobb så noll "spill".

Så en enkelkärnig CPU kommer alltid vara minst lika snabb som en tvåkärnig med hälften så snabba kärnor.

Realtids OS kör sällan med "time-slices", de schemalägger typiskt i strikt prioritetsordning och varje uppgift körs till att den är klar eller till dess att något med högre prioritet vill köra. Så där blir det än bättre med få starka kärnor.

Däremot har Windows problem med svarstider när OSet är hårt lastat, det är kanske något som är ett mindre problem om man har "kärnor" över i sådana lägen. Det är dock inte ett HW-problem då Linux sedan den välkända "wonder patch" kan lastas helt brutalt (har själv testat med "load-average" på >64 på en laptop i7) utan att GUI-delen segar (Windows är oanvändbart under samma last på en tvåkärnig CPU).

Visa signatur

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

Permalänk
Inaktiv

@Yoshman: Tackar för informationen den var intressant och lärorikt. Angående realtidsystem så vill jag minnas att man i skolan blandade prioritet och tid, men det var så länge sedan jag läste.

Det som jag framförallt i vanlig persondator upplevde en flaskhals var om man från mekanistiska hårddiskar valde att kopiera flera filer samtidigt, där det gick snabbare förr i tiden att först låta det som ska kopieras klart göra sitt jobb klart innan man började kopiera mer. Men då är det en hårddisk läsarm som fysisk ska flyga fram och tillbaka vilket som sagt tar lite tid.

Permalänk
Skrivet av -=Mr_B=-:

Det är en ganska substanciell uppgradering, frågan är dock, vad gör han på datorn, kommer han verkligen att ha nytta av den? Är det kanske en smartare investering att sälja grejerna, och investera i en SSD till honom?

SSD har jag bytt redan för 2 år sedan..både i pappas dator och mammas laptop. Det är det första man borde göra med en dator.
Två skärmar och 2 stream samtidigt.. då märker man det. Och det är verkligen billigt! processorn har jag redan, moderkort 400kr, minne 250kr. Funderar kanske på 8Gb. Och dessutom räknar jag med att sälja gamla grejer för 200-300kr

Permalänk
Medlem
Skrivet av AMD-Hippie:

@snajk Skulle vara givande om du kunde berika mig och de andra på detta forum med lite konkreta exempel på hur ett program kan läsa in data EFTER loopar och switchar (för att påskynda hur snabbt programmet går)?

Du har helt rätt med din slutsats att program läser in kod sekventiellt, men när du börjar arbeta med objektorienterad programering och senare även använder dig av flera trådar så kommer du att lära dig att ett program lätt kan köra flera instanser av sig själv med olika parametrar, eller bearbeta kod vid sidan av. Hur skulle annars tex vlc kunna ta emot input medans den är upptagen med att spela upp videon?

Du lär dig normalt sett objektorienterad programering i stadie B och flertrådad programering i stadie C.

Visa signatur

Futureproofing explained
Temp "sensorers" riktiga utseende!
^Är även anledningen till att inte alla program visar samma temperatur på samma hårdvara.
Ryzen 7800x3D | TUF GAMING B650-PLUS | Asus 4070 || 8700k | Aorus gaming k3 | XFX core 650 Bronze | 1070ti | Fractal Design XL R2 |

Permalänk
Medlem
Skrivet av Friterad:

Det är inte så enkelt som att trycka på en knapp så använder programmet flera kärnor effektivt. Pga hur ett program är gjort så kanske den helt enkelt presterar bättre på färre kärnor också.

Nej, riktigt så enkelt är det inte, ett program komer inte prestera bättre på en två-kärnig processor jämfört med en fyr eller åttakärnig. Du kommer inte se någon prestandaförbättring hos det enskillda programmet om den bara använder sig av en tråd, hos en hundratusen-kärnig processor vs en två-kärnig, men det kommer inte prestera bättre på den sistnämnda om inte koden är specifikt gjord för just den processorn.

Visa signatur

Futureproofing explained
Temp "sensorers" riktiga utseende!
^Är även anledningen till att inte alla program visar samma temperatur på samma hårdvara.
Ryzen 7800x3D | TUF GAMING B650-PLUS | Asus 4070 || 8700k | Aorus gaming k3 | XFX core 650 Bronze | 1070ti | Fractal Design XL R2 |

Permalänk
Medlem
Skrivet av Pan.Pan:

Nej, riktigt så enkelt är det inte, ett program komer inte prestera bättre på en två-kärnig processor jämfört med en fyr eller åttakärnig. Du kommer inte se någon prestandaförbättring hos det enskillda programmet om den bara använder sig av en tråd, hos en hundratusen-kärnig processor vs en två-kärnig, men det kommer inte prestera bättre på den sistnämnda om inte koden är specifikt gjord för just den processorn.

Inte vad jag har läst men men

Permalänk
Medlem

Vad som "räcker" är subjektivt. Visst, jag kan kompilera Libre Office på en Raspberry Pi och vänta 14 dagar till det är klart, eller så gör jag det på sexton Xeon-proppar på jobbet, med alla 96 kärnor/inkl HT.
Då tar det ett par sekunder.
Vill folk köra dual-proppar, det är väl fine, men det handlar om en del annat. Inte minst vilket operativsystem jag kör. Själv sitter jag på en sketen i7 4790K med fjuttiga 4 kärnor och 8 med HT och det är lååånga väntetider på kompilering av lite tyngre program.
Siktar på en egen dual Xeon 12 eller 14core åtminstone i framtiden.

Visa signatur

Mac Mini M2 Pro
5K

Permalänk
Datavetare
Skrivet av Pan.Pan:

Du lär dig normalt sett objektorienterad programering i stadie B och flertrådad programering i stadie C.

Av alla idag vanliga programmeringsparadigmer så måste objektorienterad programmering och design vara det som absolut sämst passa i flertrådade program.

Varför? Inkapsling av data är en av hörnstenarna i OOP, hela poängen med metoder (att skicka meddelanden till objekt) är ju att göra funktionsanrop i kontext av ett implicit tillstånd (objektet).

En av de absolut kritiska egenskaperna för multitrådade program är att all interaktion med data som någon gång under programmets livslängd kan användas från mer än en tråd måste ske med data där representationen är explicit känd, helt tvärs emot idén kring datainkapsling i OOP.

Att vi inte kommit längre med utnyttjande av flera CPU-kärnor är nog mest för att utveckling av sådana program är långt svårare än strikt sekventiella program (som inte heller är superenkla att utveckla när de blir stora). Men en annan väldigt stor anledning är garanterat att OOP är så väldigt populärt.

Se på tekniker som .NET PLINQ, Java parallel streams och liknande tekniker som försöker göra det enklare att använda flera CPU-trådar, de har alla sina rötter i map-reduce som i sin tur kommer från funktionell programmering. Tekniker som TPL, Java fork-join, OpenMP, Cilk+ och liknande har alla sina rötter i fork-join som är ett sätt att attackera uppgiftsparallella problem (finns även dataparallella problem, något som SIMD (SSE/AVX) och GPUer är specialdesignade för).

Även i C#/Java så ser man väldigt lite OO-idéer kring användandet av dessa tekniker.

Så du måste nog ha ett steg till innan stadie C; lära sig någon programmeringsparadigm som faktiskt lämpar sig för multitrådade program.

Visa signatur

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

Permalänk
Hedersmedlem
Skrivet av Dockland:

Vill folk köra dual-proppar, det är väl fine, men det handlar om en del annat. Inte minst vilket operativsystem jag kör. Själv sitter jag på en sketen i7 4790K med fjuttiga 4 kärnor och 8 med HT och det är lååånga väntetider på kompilering av lite tyngre program.
Siktar på en egen dual Xeon 12 eller 14core åtminstone i framtiden.

Nu skall jag väl kanske inte tala för alla, men i praktiken ändrar man väl oftast, oavsett projektets storlek, bara i några enstaka filer varje gång så då behöver man ju ändå inte göra en full omkompilering.

Permalänk
Datavetare
Skrivet av Dockland:

Vad som "räcker" är subjektivt. Visst, jag kan kompilera Libre Office på en Raspberry Pi och vänta 14 dagar till det är klart, eller så gör jag det på sexton Xeon-proppar på jobbet, med alla 96 kärnor/inkl HT.
Då tar det ett par sekunder.
Vill folk köra dual-proppar, det är väl fine, men det handlar om en del annat. Inte minst vilket operativsystem jag kör. Själv sitter jag på en sketen i7 4790K med fjuttiga 4 kärnor och 8 med HT och det är lååånga väntetider på kompilering av lite tyngre program.
Siktar på en egen dual Xeon 12 eller 14core åtminstone i framtiden.

Gissar att du främst jobbar med C++ där "template-tung" kod tar väldigt mycket tid att kompilering (vilket man typiskt har i modern C++). I många andra språk tar det väldigt kort tid att kompilera en enskild fil och då skalar inte kompilering alls lika väl med CPU-kärnor. Använder ibland en 16 kärnor / 32 trådar Xeon maskin för kompilering och den är underbar när man kör C++ då kompileringstiden skalar väldigt linjärt med kärnor (och C++ tar ofta lååång tid att kompilera). Är däremot är det ingen jätteskillnad mellan en modern fyrkärnig i7 och Xeon-arbetsstationen när man jobbar med t.ex. C-kod, där hamnar man i fallet att länksteg, disk I/O och "make" själv blir en serialiseringspunkt vilket (enligt Ahmdals lag) då begränsar effekten av flera CPU-kärnor.

Kompilering av C kontra C++ är faktiskt ett utmärkt exempel på Gustafsons lag: man kan skala till flera kärnor genom att göra varje delproblem "tillräckligt" stort.

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

Nu skall jag väl kanske inte tala för alla, men i praktiken ändrar man väl oftast, oavsett projektets storlek, bara i några enstaka filer varje gång så då behöver man ju ändå inte göra en full omkompilering.

Skrivet av Yoshman:

Gissar att du främst jobbar med C++ där "template-tung" kod tar väldigt mycket tid att kompilering (vilket man typiskt har i modern C++). I många andra språk tar det väldigt kort tid att kompilera en enskild fil och då skalar inte kompilering alls lika väl med CPU-kärnor. Använder ibland en 16 kärnor / 32 trådar Xeon maskin för kompilering och den är underbar när man kör C++ då kompileringstiden skalar väldigt linjärt med kärnor (och C++ tar ofta lååång tid att kompilera). Är däremot är det ingen jätteskillnad mellan en modern fyrkärnig i7 och Xeon-arbetsstationen när man jobbar med t.ex. C-kod, där hamnar man i fallet att länksteg, disk I/O och "make" själv blir en serialiseringspunkt vilket (enligt Ahmdals lag) då begränsar effekten av flera CPU-kärnor.

Kompilering av C kontra C++ är faktiskt ett utmärkt exempel på Gustafsons lag: man kan skala till flera kärnor genom att göra varje delproblem "tillräckligt" stort.

I Gentoo Linux kompilerar jag allt från kernel till alla program jag behöver/vill ha.

Visa signatur

Mac Mini M2 Pro
5K

Permalänk
Medlem
Skrivet av Yoshman:

Av alla idag vanliga programmeringsparadigmer så måste objektorienterad programmering och design vara det som absolut sämst passa i flertrådade program.

Varför? Inkapsling av data är en av hörnstenarna i OOP, hela poängen med metoder (att skicka meddelanden till objekt) är ju att göra funktionsanrop i kontext av ett implicit tillstånd (objektet).

En av de absolut kritiska egenskaperna för multitrådade program är att all interaktion med data som någon gång under programmets livslängd kan användas från mer än en tråd måste ske med data där representationen är explicit känd, helt tvärs emot idén kring datainkapsling i OOP.

Att vi inte kommit längre med utnyttjande av flera CPU-kärnor är nog mest för att utveckling av sådana program är långt svårare än strikt sekventiella program (som inte heller är superenkla att utveckla när de blir stora). Men en annan väldigt stor anledning är garanterat att OOP är så väldigt populärt.

Se på tekniker som .NET PLINQ, Java parallel streams och liknande tekniker som försöker göra det enklare att använda flera CPU-trådar, de har alla sina rötter i map-reduce som i sin tur kommer från funktionell programmering. Tekniker som TPL, Java fork-join, OpenMP, Cilk+ och liknande har alla sina rötter i fork-join som är ett sätt att attackera uppgiftsparallella problem (finns även dataparallella problem, något som SIMD (SSE/AVX) och GPUer är specialdesignade för).

Även i C#/Java så ser man väldigt lite OO-idéer kring användandet av dessa tekniker.

Så du måste nog ha ett steg till innan stadie C; lära sig någon programmeringsparadigm som faktiskt lämpar sig för multitrådade program.

Absolut! Jag håller helt med dig, men jag skrev bara den vanligaste rutten man tar i de olika stadierna. Tror dessutom att oop är en del av läroplanen om jag inte har fått det om bakfoten.

Visa signatur

Futureproofing explained
Temp "sensorers" riktiga utseende!
^Är även anledningen till att inte alla program visar samma temperatur på samma hårdvara.
Ryzen 7800x3D | TUF GAMING B650-PLUS | Asus 4070 || 8700k | Aorus gaming k3 | XFX core 650 Bronze | 1070ti | Fractal Design XL R2 |

Permalänk
Medlem

Grattis till din ursäkt till ditt val av CPU, mycke energi har du lagt ner på att få ursäkta dig själv :/
Sen för det andra så är den primära anledningen varför vi idag sitter på x6 kärnor kontra x1 energiförluster/förlorad kraft så att rakt gå å säga att en dedikerad kärna är bättre än flera är lögn med sanningen i modifikation.
Vi kommer inte i nära tid få se en kärna på 20Ghz utan hellre som dagens 6 kärnor på 5Ghz
Ja en stark kärna är bättre, men flera kärnor på samma CPU ger mer total kraft än vad en kärna/CPU kan ge.

Visa signatur

Det du inte hinner idag hinner du inte imorgon med.

Permalänk
Medlem

@philipborg: Forumet är till för diskussion och konstruktiv kritik.

Nu ser jag att inlägget jag syftade på är borttaget (av moderator antar jag), jag har för mig att hela innehållet var "Och?".

Alltså syftade jag inte på något av dina inlägg, men du får väl fundera över anledingen att du tog åt dig.

Visa signatur

Ny dator: Acer Predator Orion 5000 (RTX 3080)
[ I7 3770K @ 4.6Ghz | Asus 980 Ti 6GB | 16GB | Asus P8Z77-V PRO | Samsung 830 128GB | Corsair H100 | Cooler Master HAF X | Corsair AX 850W | Samsung DVD±RW ] [ Sony AF9 65" | Sony WF-1000XM3 | HTC Vive | Huawei P40 Pro | PS4 Pro | PS3 Slim | PS2 chippad | PS Vita | DS Lite | SNES Mini ]

Permalänk
Medlem
Skrivet av Bloopy:

Sen för det andra så är den primära anledningen varför vi idag sitter på x6 kärnor kontra x1 energiförluster/förlorad kraft så att rakt gå å säga att en dedikerad kärna är bättre än flera är lögn med sanningen i modifikation.

Nä, en kärna med x gHz och given prestanda / klockcykel, är alltid bättre än fler kärnor med samma "totala" gHz, givet samma prestanda / klockcykel. Det är inte på något sätt en lögn. Fler kärnor är en nödlösning påtvingad av att vi helt enkelt inte kan få fram snabbare (Högre frekvens) / effektivare (Mer jobb utfört per klockcykel) CPU'er.

Skrivet av Bloopy:

Vi kommer inte i nära tid få se en kärna på 20Ghz utan hellre som dagens 6 kärnor på 5Ghz

Det spännande i sammanhanget är väl att om man vidhåller att en dubblering av antalet kärnor ger 80% prestandaökning, så motsvarar 6 5GHz kärnor bara "prestanda" från en kärna på 18.9gHz. Vi är helt enkelt inte så långt borta från den punkten då vi inte längre kan göra meningsfulla prestandauppgraderingar genom att lägga till ett par kärnor till. Det kommer behövas betydligt bättre programmeringsspråk för att ta prestanda vidare, så att vi kan få ut mer än de 80%'en ur varje dubblering. Det kommer sakta ned utvecklingen, och, ur ett hårdvaruperspektiv, ge ganska tråkig framtid.
B!

Visa signatur

Allting jag skriver är om inget annat uttrycks, min åsikt! Ingenting måste vara dagens sanning enligt din åsikt, och gör du antaganden baserade på mina åsikter hoppas jag att du övervägt mer än bara just min åsikt.

Permalänk
Medlem
Skrivet av xpanterx:

@philipborg: Forumet är till för diskussion och konstruktiv kritik.

Nu ser jag att inlägget jag syftade på är borttaget (av moderator antar jag), jag har för mig att hela innehållet var "Och?".

Alltså syftade jag inte på något av dina inlägg, men du får väl fundera över anledingen att du tog åt dig.

Verkar som moderatorn som insåg missförståndet han skapade tog bort både din och min kommentar, jag kan iaf inte hitta dem. EDIT: Kollade på fel sida *facepalm*

Blev väldigt förvirrad när jag läst "en-ords kommentarer" för jag hittade inga med ett ord då moderatorn redan tagit bort dem/den. Jag hittade med två men den innehöll exakt samma saker som din gjorde, nämligen "intressant läsning". Undrade då om du menade i samma sätt som man kan säga "en fråges politik". Alltså att det var många som sa emot att två kärniga är fullt dugligt för "verkliga" scenarion. Blev sjukt förvirrad varför man inte skulle hålla sig till ämnet i en tråd och få föra motargument. Du skrev ju även att det fanns "minst 31st utav dem" (om jag inte missminner mig nu), jag trodde du menade motargumenterande kommentarer som förespråkar flera kärnor.

Allting blev väldigt skevt helt enkelt och jag blev väldigt förvirrad. Därför försökte jag vara tydlig med att det var mycket troligt att jag hade missförstått, vilket även var fallet.

Visa signatur

Citera eller @philipborg om du vill att jag ska läsa dina svar.