- ez0r4y
- Medlem ●
- Göteborg
Okey, nu på senare tid snackas det till höger och vänster om dubbla kärnor i processorerna p.g.a ghz'en faktiskt har så gott som stannat i utvecklingen. Men vad ger detta för ökning i praktiken? Vi vet ju hur det är med dubbla processorer, ger kort o gott ingen prestanda ökning i enskilda program om programen inte stödjer det. Men varför inte köra med dubbla processorer då istället för dubbla kärnor? Varför inte se till att alla program som har stöd för dubbla kärnor även stödjer dubbla processorer? På sätt o vis skulle ju faktiskt burkar med dubbla processorer kunna prestera betydligt mkt mer än dom faktiskt gör idag p.g.a det verkar vara relativt få program som stödjer det fullt ut. Tänk dig spel där ena processorn jobbar med en sak (fysik tx.e) och andra med en annan sak (A.I) också har vi grafikkortet som hanterar grafiken.
Vilka program är det idag som stödjer dubbla processorer fullt ut förutom PhotoShop och Maya också i tx.e Reason och Cubase där man tydligen ska ha stor nytta utav dubbla processorer?
Quake 3 motorn stödjer tydligen dubbla processorer föresten....;)
Men åter till ämnet, vad kommer dubbla kärnor göra för skillnad gentemot dubbla processorer? Varför inte sattsa fullt ut på dubbla processorer istället för dubbla kärnor?
Alltså. Du kör inte bara ett program åt gången.
Dra igång en ps auxwww i terminalen om du inte tror mig... Kom ihåg att denna bara visar processer, inte trådar.
Inom ett program kan nyttjande av flera CPUer/kärnor bara ske om
1. Problemet som programmet löser är parallelliserbart
2. Programmeraren orkar parallellisera sin lösning av problemet
Men som sagt, vinner går man iallafall -- det är mycket som kör...
Varför dubbla kärnor istället för dubbla CPUer överallt?
Tja, för att dubbla CPUer (bland annat!)
1. Tar mer plats än en med dubbla kärnor
2. Kräver mer buss (vilket _också_ tar mer plats)
3. Allmänt gör moderkortskonstruktionen krångligare
4. Drar mer ström
5. Genererar mer värme
6. Är dyrare
samt slutligen
7. Kan man krångla så att dubbla CPUer är ett gångbart alternativ - Varför då inte BÅDE dubbla kärnor OCH dubbla CPUer -- Wheeee! Fyra beräkningsenheter...
Inom ett program kan nyttjande av flera CPUer/kärnor bara ske om
1. Problemet som programmet löser är parallelliserbart
2. Programmeraren orkar parallellisera sin lösning av problemet
Och eftersom >98% (?) av alla desktop-datorer (Windows inräknat, de som gör programmen gör ofta till båda plattformarna) bara har en processor, varför ska då programmeraren lägga ner tid för att optimera programmet för flera CPUer?
I och med att dual-core snart blir vanligt så kommer de flesta datorer att ha flera cores utan nämnvärt högre kostnad. Då ändrar sig siffran ovan, och det kan vara en poäng och ett försäljningsargument för programutvecklarna att säga att programmet är utvecklat för MP (Multiple Processor)-system.
Så jag förväntar mig en ändring här inom några år.
Och eftersom >98% (?) av alla desktop-datorer (Windows inräknat, de som gör programmen gör ofta till båda plattformarna) bara har en processor, varför ska då programmeraren lägga ner tid för att optimera programmet för flera CPUer?
På macsidan har dubbla processorer varit vanligt rätt länge i de stationära, så jag tror nog macprogrammare bryr sig om det om de utvecklar program som är processorkrävande.
På macsidan har dubbla processorer varit vanligt rätt länge i de stationära, så jag tror nog macprogrammare bryr sig om det om de utvecklar program som är processorkrävande.
Jag tänkte mer på de program som utvecklas för Windows och kanske får en Mac-port. Som spel. Där har det tidigare inte varit motiverat med anpassning för MP-system och det är detta jag tror kommer att ändras nu.
Om man tänker på tunga proffsprogram (photoshop, video/ljudredigering) så håller jag med. Där är det nog vanligare med MP-stöd.
Jag har tipsat om det innan. Jag gör det igen. "Operating System Concepts" av A. Silberschatz är en bra introduktion till teorin bakom hur ett modernt operativsystem fungerar.
Läs den eller någon annan bra introduktionsbok så kommer du få en fantastiskt mycket bättre förståelse över vad som händer, hur det funkar osv än vad du kommer få genom svaren på detta forum (hur bra de nu än må vara).
Och eftersom >98% (?) av alla desktop-datorer (Windows inräknat, de som gör programmen gör ofta till båda plattformarna) bara har en processor, varför ska då programmeraren lägga ner tid för att optimera programmet för flera CPUer?
Jo, men en massa intelproppar har hyperthreading...
Vilket förvisso inte är varken dualcore eller MP, men för att nyttja det gör programmeraren samma handgrepp, så...
Och eftersom >98% (?) av alla desktop-datorer (Windows inräknat, de som gör programmen gör ofta till båda plattformarna) bara har en processor, varför ska då programmeraren lägga ner tid för att optimera programmet för flera CPUer?
Därför att framtiden är dualcore/multicore och om utvecklaren vill att dennes produkter ska ha en framtid, så är det bra att anpassa koden för symmetrisk multiprocessors (SMP). Det är inget som produkten förlorar på.
Sen att det idag råkar finnas ett gäng med burkar med bara en CPU, spelar ingen roll. En multitrådad applikation fungerar bra med en processor också, men dock inte lika snabbt.
Alltså. Du kör inte bara ett program åt gången.
Dra igång en ps auxwww i terminalen om du inte tror mig... Kom ihåg att denna bara visar processer, inte trådar.
Men en prosessor hanterar endast en prosess i taget, med dual core eller 2 cpuer kan man prosseserar up till två prosesser samtidigt.
Ett program kan dessutom starta upp flera prosesser om det så vill men dessa körs aldrig samtidigt. Det att flera prossesser visas betyder inte att prossessorn hanterar alla samtidigt utan den växlar mellan dessa och tar en i taget.
I gammla Mac OS fanns nåt som heter cooperative multi tasking vilket betyder kort att prosessen som körs säger när någon anna prosess ska få prosessor tid. MacOS X använder preemptive multitasking vilket kort betyder att kärnan bestämmer hur lång tid varje prosess skall köras. Mera info kan hittas tex här: http://www.webopedia.com/TERM/m/multitasking.html
Men en prosessor hanterar endast en prosess i taget, med dual core eller 2 cpuer kan man prosseserar up till två prosesser samtidigt.
Naturligtvis, eller mja, nästan så (se nedan). Trots detta är oftast en hel mängd processer 'running' sammtidigt i ett modernt OS. Dvs processerna kör även om de för ögonblicket inte är tilldelade en CPU av operativet. Hårklyverier, kanske, men faktm är att 'running' != 'har en CPU just nu'.
Ett program kan dessutom starta upp flera prosesser om det så vill men dessa körs aldrig samtidigt.
Detta påstående är direkt fel.
Det att flera prossesser visas betyder inte att prossessorn hanterar alla samtidigt utan den växlar mellan dessa och tar en i taget.
Med mindre än att den nyttjar någon parallelliseringsmetod, t.ex. då just hyperthreading. Med de pipelines som moderna CPUer är utrstade med så är 'en insturktion i taget' ett i bästa fall mycket approximativt sätt att beskriva hur de arbetar.
I gammla Mac OS fanns nåt som heter cooperative multi tasking vilket betyder kort att prosessen som körs säger när någon anna prosess ska få prosessor tid. MacOS X använder preemptive multitasking vilket kort betyder att kärnan bestämmer hur lång tid varje prosess skall köras. Mera info kan hittas tex här: http://www.webopedia.com/TERM/m/multitasking.html
Nej, jag tänker inte slå upp det där. Jag har skrivit multitrådade och multiprocessapplikationer i drygt femton år (tyvärr även för den vidriga cooperativa avarten under otäcka gamla MacOS ), det senaste årtiondet har jag dessutom fått betalt för att göra det... :rolleyes:
EDIT: Jag vill ha ett tangentbord där 'u' fngerar utan våld, jag vill...
Naturligtvis, eller mja, nästan så (se nedan). Trots detta är oftast en hel mängd processer 'running' sammtidigt i ett modernt OS. Dvs processerna kör även om de för ögonblicket inte är tilldelade en CPU av operativet. Hårklyverier, kanske, men faktm är att 'running' != 'har en CPU just nu'.
Så oxå under cooperativt multi taskande. OK jag har inte samma erhfarenhet som du men jag är utbildad innom området.
Med mindre än att den nyttjar någon parallelliseringsmetod, t.ex. då just hyperthreading. Med de pipelines som moderna CPUer är utrstade med så är 'en instrktion i taget' ett i bästa fall mycket approximativt sätt att beskriva hur de arbetar.
Här är ja inte hundra eftersom hyperthreading har kommit till efter den tid då jag pluggade sånt här. Men av vad jag har förstått så är hyperthreding ingen äkta parallellisering. Utan även här så prosesserar prosessorn en tråd åt gången men kan växla mellan vilken som används beroende av omständigheterna. Men att trådarna skulle prosesseras sammtidigt köper jag inte. Inte heller kallar jag ett pipeline system som något som skulle kunna ersätta dubbla prossessorer. En prosessor kör just prosesser och tar dem en i taget även så i en pipeline.
En prosess kan visst starta upp en ny prosess. Vi laborerade med detta i linux miljö när jag studerade men jag har glömt en hel del detaljer. Men där gick det till så att "Parent" prosessen kopierad sig själv till en "child prosess" och sen ersattes den kopierade prosessens kod med det den prosessen skulle utföra. Hur som helst. En prosess per prosessor åt gången. Sen kan man sätta in hur många tekniker som helst men dessa ändrar inte på detta faktum. Snabbar upp hanteringen ja men ökar inte antalet prosesser som prosessorn prosesserar.
EDIT: " jag är utbildad" Fy vad taskit det här lät men eftersom andra refererar till annat så referarar jag till utbildning. Hatar att göra så det är bara översittar stil.
Här är ja inte hundra eftersom hyperthreading har kommit till efter den tid då jag pluggade sånt här. Men av vad jag har förstått så är hyperthreding ingen äkta parallellisering. Utan även här så prosesserar prosessorn en tråd åt gången men kan växla mellan vilken som används beroende av omständigheterna. Men att trådarna skulle prosesseras sammtidigt köper jag inte. Inte heller kallar jag ett pipeline system som något som skulle kunna ersätta dubbla prossessorer. En prosessor kör just prosesser och tar dem en i taget även så i en pipeline.
...här har jag klippt ut en sak att svara på sist...
Hur som helst. En prosess per prosessor åt gången. Sen kan man sätta in hur många tekniker som helst men dessa ändrar inte på detta faktum. Snabbar upp hanteringen ja men ökar inte antalet prosesser som prosessorn prosesserar.
Njä, det är inte så enkelt längre. Eller, det beror på hur man ser på saken. Hyperthreading är ett sätt att nyttja CPUns pipeline effektivare eftersom det tillåter att instruktioner från flera trådar (två olika för att vara exakt) blandas i pipelinen. För en visserligen gammal men bra artikel se arstechnica. Det finns andra tekniker än Hyperthreading som gör ungefär samma sak, men hyperthreading är nog utan tvivel den som är i drift på flest CPUer just nu.
En prosess kan visst starta upp en ny prosess.
Naturligtvis. Vad jag invände mot var "men dessa körs aldrig samtidigt."
Njä, det är inte så enkelt längre. Eller, det beror på hur man ser på saken. Hyperthreading är ett sätt att nyttja CPUns pipeline effektivare eftersom det tillåter att instruktioner från flera trådar (två olika för att vara exakt) blandas i pipelinen. För en visserligen gammal men bra artikel se arstechnica. Det finns andra tekniker än Hyperthreading som gör ungefär samma sak, men hyperthreading är nog utan tvivel den som är i drift på flest CPUer just nu.
Naturligtvis. Vad jag invände mot var "men dessa körs aldrig samtidigt."
Ok jag ger mig, jag är tydligen av old school. Artickeln gav goda upplysningar angående hyperthreading så i dagens läge har man en hyper trådad CPU kan man köra in 2 prosesser på en CPU. Det jag trodde hypertrådad stod för var egentligen vad en multitrådad står för.
Så oxå under cooperativt multi taskande.
Min (hvudsakliga) invändning mot cooperativ multitasking är att det bara fungerar så bra som de individuella applikationerna låter det göra, och kan låta det göra. Dvs, det krävs för det första kunskap och goda intentioner av alla applikationsprogrammerare och för det andra mer komplicerad kod (det finns inte alltid logiska punkter i en algoritm där det är lämpligt att släppa ifrån sig sin allokerade CPU).
Enda fördelen är att man får något snabbare exekvering av tunga beräkningar om man accepterar att det inte går att använda maskinen till något annat medan dessa kör. Vilket kanske photoshopgurus kan acceptera, men att det inte fungerar i ett multianvändarsystem är det nog inte många som invänder emot. Men nu både raljerar jag (plus att jag beivrar åsikter som inte har uttryckts av någon i tråden) och har avvikit ganska drastiskt från trådens ämne. Sorry...
I OS X vinner man otroligt mycket på dubbla CPU:er. Varje enskilt program kanske inte blir så mycket snabbare jämt, men det är bara att öppna processorkontrollen för att se att fördelningen mellan processorerna för det mesta är jämnt fördelad. Den ena jobbar med program, och den andra med systemet.
I Windows har det hittils knappt gett något alls med dubbla processorer, förutom i specialfall, men det kommer nog ändra på sig i longhorn, då det blir vanligare.
Dual core kommer naturligtvis bli billigare. Det är nog den stora grejen. Möjligen också snabbare, men det är bara en gissning.
Men nu när dubbla kärnor kommer, kommer det innebära att program som drar nytta utav dubbla kärnor samtidigt kommer dra nytta utav dubbla processorer?
Pallemell: Ska kolla upp den boken när jag åker tillblioteket ikväll.
Intressant att processor tillverkarna innom PC branchen har börjat skrika om dubbla kärnor o dubbla processorer för lite över ett år sedan när macen kunde ha det på den senare G4'an (QuickSilver?).
En annan intressant grej tycker jag är snackat om SLI tekniken...två graikkort som jobbar tillsammans i en o samma dator...fastän denna möjligheten fanns på voodoo 2 kort. XD
Men där råkade jag gå lite OT..x_x
Blir det igenkligen någon direkt praktisk skillnad med dubbla kärnor o dubbla processorer sålänge som programmen inte är speciellt skapta så dom kan utnyttja det?
Låter onekligen som om dubbla kärnor bara är ett tufft utryck som i stor del används för att sälja o låta nyare o bättre än vad det igenkligen faktiskt är...
Men nu när dubbla kärnor kommer, kommer det innebära att program som drar nytta utav dubbla kärnor samtidigt kommer dra nytta utav dubbla processorer?
För ett program upplevs dubbla kärnor precis som om det var dubbla CPUer.
Det kan till och med bli lite bättre med dubbla kärnor om en tråd vill läsa data som finns i den andra processorns cache. Med dubbla kärnor kan det gå mycket fortare än om man måste ut på bussen och härja som man måste om man har två separata chip.
Blir det igenkligen någon direkt praktisk skillnad med dubbla kärnor o dubbla processorer sålänge som programmen inte är speciellt skapta så dom kan utnyttja det?
Nej, för det enskilda programmet är det ingen skillnad.
Låter onekligen som om dubbla kärnor bara är ett tufft utryck som i stor del används för att sälja o låta nyare o bättre än vad det igenkligen faktiskt är...
Om du verkligen kör CPU-tunga program är det mer än ett tufft uttryck; det gör faktiskt skillnad. Om programmet är anpassat för MP-system får du skillnad direkt. Och kör du många program samtidigt får du en positiv effekt även om de enskilda programmen inte är MP-anpassade.
Men för de flesta desktopsystem som surfar, ordbehandlar och mailar så ger det lika lite som att skryta med att man har en 4GHz PentiumExtreme. Superdatorn ligger ändå mest och sover hela tiden.
Personligen tycker jag att MP-system är ett bättre sätt att använda alla transistorer man kan göra i nya kretsar än att ha extremt långa/många pipelines och ha extremt hör klock-frekvens. Man kan får mer sann prestanda enklare. Förutsatt att programmen är MP-anpassade eller att man kör flera tunga program samtidigt.
Pallemell: Ska kolla upp den boken när jag åker tillblioteket ikväll.
Blir det igenkligen någon direkt praktisk skillnad med dubbla kärnor o dubbla processorer sålänge som programmen inte är speciellt skapta så dom kan utnyttja det?
Är det någon som vill slå upp "igenkligen"
Dubbla kärnor alt. cpu'er ger en hel del i "upplevd respons" om man har ett cpu tungt program igång, operativsystemet svarar mycket snabbare t.ex.
Mycket på windows sidan är flertrådat sen ca. 2 år tillbaka, Intels "hyperthreading" system låtsas vara 2 kärnor så att den kunde växla över om ena tråden stannade (händer ganska ofta om datorn används till standard sysslor: internet, ordbehandling, etc).
För programvaru utvecklare så ligger fördelen i att om man t.ex. skulle göra en 3d modellerare & renderare så kan man lägga renderingen i en bakgrundstråd medans man fortsätter modellera, som exempel. Man kan komma undan med att inte optimera för en viss processor-typ utan att tappa responsivitet i programmet.
Mycket på windows sidan är flertrådat sen ca. 2 år tillbaka, Intels "hyperthreading" system låtsas vara 2 kärnor så att den kunde växla över om ena tråden stannade (händer ganska ofta om datorn används till standard sysslor: internet, ordbehandling, etc).
Om man skrapar lite på ytan, så funkar det inte särskilt bra. Windows har alltid haft problem att förstå vilket program som ska få prioritet. Något som jag tycker gör att en PC på 3,4 Ghz känns långsammare än en Powerbook ibland.
Om man skrapar lite på ytan, så funkar det inte särskilt bra. Windows har alltid haft problem att förstå vilket program som ska få prioritet. Något som jag tycker gör att en PC på 3,4 Ghz känns långsammare än en Powerbook ibland.
Det har nog mer med dom i många fall väldigt tveksamma prioriteringen av vad som får stanna i ram och vad som åker till swappen.
NSThreads finns i Cocoa samt Mac OS X har stöd för SMP från början. Så det är ganska trivialt att parallellisera en Cocoa-applikation, om man är en hyggligt duktig programmerare. Samt Tiger i sig har stöd för dualcore och MP, så quad är mycket troligt.
Fördelarna med dualcore/multicore? thorman sammanfatter det väldigt bra i det andra inlägget i denna diskussion.