211service.com
Parallellt universum
När Anwar Ghuloum kom till Intel 2002 var företaget suveränt bland chiptillverkarna, främst för att det levererade processorer som körde i högre och högre hastigheter. Vi var redan på tre gigahertz med Pentium 4, och vägkartan krävde framtida klockhastigheter på 10 gigahertz och mer, minns Ghuloum, som har en doktorsexamen från Carnegie Mellon och nu är en av företagets främsta ingenjörer. Samma år, på Intels utvecklarkonferens, sa tekniska chefen Pat Gelsinger: Vi är på rätt spår, år 2010, för 30-gigahertz-enheter, 10 nanometer eller mindre, som ger en tera-instruktion om prestanda. Det är en biljon datorinstruktioner per sekund.
Men Gelsinger hade fel. Intel och dess konkurrenter tillverkar fortfarande processorer som toppar på mindre än fyra gigahertz, och något runt fem gigahertz har kommit att ses, åtminstone för nu, som den högsta möjliga hastigheten för kiselteknologi.
Den här historien var en del av vårt januarinummer 2009
- Se resten av frågan
- Prenumerera
Det är inte som om Moores lag – idén att antalet transistorer på ett chip fördubblas vartannat år – har upphävts. Snarare har oväntade problem med värmegenerering och strömförbrukning satt en praktisk gräns för processorernas klockhastigheter, eller hastigheten med vilken de kan utföra instruktioner. Ny teknik, som spintronik (som använder spinnriktningen för en enskild elektron för att koda data) och kvanttransistorer (eller tunnlar) kan i slutändan tillåta datorer att köra många gånger snabbare än nu, samtidigt som de använder mycket mindre ström. Men dessa tekniker är åtminstone ett decennium borta från att nå marknaden, och de skulle kräva utbyte av halvledartillverkningslinjer som har kostat många tiotals miljarder dollar att bygga.
Så för att få ut det mesta av den tillgängliga tekniken tar chiptillverkarna ett annat tillvägagångssätt. De extra transistorer som förutspås av Moores lag används inte för att få enskilda processorer att köra snabbare utan för att öka antalet processorer inuti ett chip. Chips med två processorer – eller kärnor – är nu skrivbordsstandarden, och fyra kärnor blir allt vanligare. På lång sikt ser Intel för sig hundratals kärnor per enhet.
Men här är grejen: även om hårdvaruproblemet med överhettade chips lämpar sig väl för hårdvarulösningen för flerkärnig datoranvändning, ger den lösningen upphov till ett knepigt mjukvaruproblem. Hur programmerar man för flera processorer? Det är Anwar Ghuloums jobb att ta reda på det, med hjälp av programmeringsgrupper han leder i USA och Kina.
Mikroprocessorföretag tar en enorm risk när de antar strategin med flera kärnor. Om de inte kan hitta enkla sätt att skriva mjukvara för de nya chipsen kan de förlora stödet från mjukvaruutvecklare. Det är därför Sonys flerkärniga PlayStation 3-spelmaskin kom sent på marknaden och har fortfarande färre speltitlar än sina konkurrenter.
Problemet med kisel
Under de första 30 åren av mikroprocessorutveckling var sättet att öka prestandan att göra chips som hade mindre och mindre funktioner och körde med högre och högre klockhastigheter. Den ursprungliga Apple II-datorn från 1977 använde en åttabitarsprocessor som körde på en megahertz. PC-standarden idag är ett 64-bitars chip som körs på 3,6 gigahertz – effektivt, 28 800 gånger så snabbt. Men det är där denna bana verkar ta slut. Runt 2002 hade de minsta detaljerna som kunde etsas på ett chip med hjälp av fotolitografi krympt till 90 nanometer – en skala där oförutsedda effekter gjorde att mycket av den elektricitet som pumpades in i varje chip helt enkelt läckte ut, vilket gjorde värme men inte fungerade alls. . Samtidigt var transistorer så tätt packade på chips att värmen de genererade inte kunde absorberas och föras bort. När klockhastigheterna nådde fem gigahertz insåg chiptillverkarna att chipsen skulle bli så varma att utan komplicerade kylsystem skulle kiseln som de tillverkades av smälta. Branschen behövde ett annat sätt att förbättra prestandan.
På grund av de komplexa konstruktionerna som höghastighetschips med en kärna nu kräver, kan flera kärnor leverera samma mängd processorkraft samtidigt som de förbrukar mindre elektricitet. Mindre el genererar mindre värme. Dessutom sprider användningen av flera kärnor ut vilken värme det än finns.
De flesta datorprogram var dock inte utformade med flera kärnor i åtanke. Deras instruktioner exekveras i en linjär sekvens, utan att något händer parallellt. Om din dator verkar göra mer än en sak åt gången, beror det på att processorn växlar mellan aktiviteter snabbare än du kan förstå. Det enklaste sättet att använda flera kärnor har alltså varit genom en arbetsfördelning – till exempel att köra operativsystemet på en kärna och en applikation på en annan. Det kräver inte en helt ny programmeringsmodell, och det kan fungera för dagens chips, som har två eller fyra kärnor. Men hur är det med morgondagens, som kan ha 64 kärnor eller fler?
Återbesöker gammalt arbete
Lyckligtvis, säger Leslie Valiant, professor i datavetenskap och tillämpad matematik vid Harvard University, utarbetades grunderna för parallellism för decennier sedan inom området för högpresterande beräkningar – det vill säga med superdatorer. Utmaningen nu, säger Valiant, är att hitta ett sätt att göra det gamla arbetet användbart.
Superdatorerna som inspirerade datoranvändning med flera kärnor var andra generationens enheter på 1980-talet, tillverkade av företag som Thinking Machines och Kendall Square Research. Dessa datorer använde vanliga processorer i hundratals eller till och med tusentals och körde dem parallellt. Vissa beställdes av U.S. Defense Advanced Research Projects Agency som ett billigare alternativ till Cray-superdatorer. Lärdomarna i att programmera dessa datorer är en guide för att få flerkärnig programmering att fungera idag. Så Grand Theft Auto kan snart dra nytta av mjukvaruforskning som gjordes för två decennier sedan för att hjälpa utformningen av vätebomber.
På 1980-talet blev det tydligt att huvudproblemet med parallell beräkning är detta: det är svårt att riva isär programvara, så att den kan bearbetas parallellt av hundratals processorer, och sedan sätta ihop den i rätt ordning utan att tillåta avsett resultat att skadas eller gå förlorat. Datavetare upptäckte att även om vissa problem lätt kunde parallelliseras, kunde andra inte. Även när problem kunde parallelliseras, kan resultaten fortfarande returneras ur funktion, i vad som kallades ett race-tillstånd. Föreställ dig två operationer som körs parallellt, varav den ena måste avslutas före den andra för att det totala resultatet ska bli korrekt. Hur säkerställer du att rätt vinner loppet? Föreställ dig nu två tusen eller två miljoner sådana processer.
Det vi lärde oss från detta tidigare arbete inom högpresterande datoranvändning är att det finns problem som lämpar sig för parallellitet, men att parallella applikationer inte är lätta att skriva, säger Marc Snir, meddirektör för Universal Parallel Computing Research Center (UPCRC) vid University of Illinois i Urbana-Champaign. Normalt använder programmerare specialiserade programmeringsspråk och verktyg för att skriva instruktioner för datorn i termer som är lättare för människor att förstå än 1:orna och 0:orna i binär kod. Men dessa språk var designade för att representera linjära sekvenser av operationer; det är svårt att organisera tusentals parallella processer genom en linjär serie av kommandon. För att skapa parallella program från grunden behövs språk som gör att programmerare kan skriva kod utan att tänka på hur man gör det parallellt – att programmera som vanligt medan programvaran tar reda på hur man distribuerar instruktionerna effektivt mellan processorer. Det finns ännu inga bra verktyg för att dölja parallelliteten eller göra det uppenbart [hur man uppnår det], säger Snir.

Ljusa ljus: 1987 släppte Thinking Machines sin CM-2 superdator (ovan), där 64 000 processorer körde parallellt. Företaget gick i konkurs 1994, men dess inverkan på datoranvändningen var betydande.
För att hjälpa till att lösa sådana problem har företag ringt tillbaka för att serva några gråskägg från 1980-talets superdatorer. David Kuck, till exempel, är professor emeritus vid University of Illinois, välkänd som utvecklare av verktyg för parallell programmering. Nu jobbar han med multicore-programmering för Intel. Det gör också ett helt team som anställts från det tidigare Digital Equipment Corporation; i ett tidigare yrkesliv utvecklade det Digitals implementering av meddelandeövergångsgränssnittet (MPI), den dominerande mjukvarustandarden för multimachine superdatorer idag.
I en mening har dessa gamla spelare det lättare än de gjorde förra gången. Det beror på att många av dagens flerkärniga applikationer skiljer sig mycket från de som föreställts av den legendariske stordatordesignern Gene Amdahl, som teoretiserade att hastighetsvinsten som kan uppnås genom att använda flera processorer begränsades av graden till vilken ett givet program kunde parallelliseras.
Datorer hanterar större mängder data än någonsin tidigare, men deras bearbetningsuppgifter är så idealiska för parallellisering att begränsningarna i Amdahls lag – som beskrevs 1967 – börjar kännas som några begränsningar alls. Det enklaste exemplet på en massivt parallell uppgift är brute-force-bestämningen av ett okänt lösenord genom att prova alla möjliga teckenkombinationer. Att dela upp de potentiella lösningarna på 1 000 processorer kan inte låta bli att vara 1 000 gånger snabbare. Detsamma gäller för dagens processorintensiva applikationer för kodning av video- och ljuddata. Att komprimera filmrutor parallellt är nästan perfekt effektivt. Men om parallell bearbetning är lättare att hitta användningsområden för idag, är det inte nödvändigtvis mycket lättare att göra. Att göra det enklare kommer att kräva en samlad insats från chiptillverkare, mjukvaruutvecklare och akademiska datavetare. Faktum är att Illinois's UPCRC finansieras av Microsoft och Intel – de två företagen som har mest att vinna om flerkärnig datoranvändning lyckas, och mest att förlora om den misslyckas.
Uppfinna nya verktyg
Om programvaran hela tiden blir mer komplex beror det inte bara på att fler funktioner läggs till i den; det beror också på att koden är byggd på fler och fler lager av abstraktion som döljer komplexiteten i vad programmerare verkligen gör. Detta är inte bara uppblåsthet: programmerare behöver abstraktioner för att få grundläggande binär kod att göra det allt mer avancerade arbete vi vill att den ska göra. När det kommer till att skriva för parallella processorer använder programmerare verktyg som är så rudimentära att James Larus, chef för mjukvaruarkitektur för Data Center Futures-projektet på Microsoft Research, liknar dem med det lägsta och svåraste språket en programmerare kan använda .
Vi kunde inte föreställa oss att skriva dagens mjukvara på assemblerspråk, säger han. Men av någon anledning tror vi att vi kan skriva parallell programvara av lika sofistikerad kvalitet som de nya och kritiska bitarna skrivna i vad som motsvarar parallellt assemblerspråk. Vi kan inte.
Det är därför Microsoft släpper verktyg för parallellprogrammering så snabbt som möjligt. F#, till exempel, är Microsofts parallella version av det allmänna programmeringsspråket ML. Inte bara parallelliserar det vissa funktioner, utan det förhindrar dem från att interagera på ett felaktigt sätt, så parallell programvara blir lättare att skriva.
Intel skickar samtidigt Ghuloum utomlands en vecka per månad för att prata med mjukvaruutvecklare om flerkärnig arkitektur och parallellprogrammeringsmodeller. Vi har antagit filosofin att 'problemet' med parallellprogrammering inte kommer att lösas under de kommande åren eller två och kommer att kräva många inkrementella förbättringar - och ett litet antal steg - till befintliga språk, säger Ghuloum. Jag tenderar också att tro att vi inte kan göra detta i ett vakuum; det vill säga utan betydande feedback från programmeraren kommer vi utan tvekan att hamna på fel sak på något sätt.
På både den kommersiella marknaden och den öppna källkodsmarknaden kan andra nya språk och verktyg antingen utnyttja kraften i flerkärnig bearbetning eller maskera dess komplexitet. Bland dessa är Googles MapReduce-ramverk, som gör det lättare att köra parallella beräkningar över kluster av datorer, och Hadoop, en öppen källkodsimplementering av MapReduce som kan distribuera applikationer över tusentals noder. Nya programmeringsspråk som Clojure och Erlang designades från grunden för parallell beräkning. Den populära chattapplikationen på Facebook skrevs delvis i Erlang.
Samtidigt kan MIT spinoff Cilk Arts bryta program skrivna på det etablerade språket C++ i trådar som kan köras parallellt på flera kärnor. Och St. Louis-baserade Appistry hävdar att dess Enterprise Application Fabric automatiskt distribuerar applikationer för Microsofts .Net-programmeringsramverk över tusentals servrar utan att programmerare behöver ändra en enda rad i sin ursprungliga kod.
Gränserna för multicore Computing
Precis som Intels dröm om 10- och 30-gigahertz-chips gav vika för strävan efter flerkärnig datoranvändning, kan dock multikärnig själv finnas kvar i några år snarare än årtionden. Effektiviteten hos parallella system minskar med varje tillagd processor, eftersom kärnor tävlar om samma data; det kommer en punkt då att lägga till en extra kärna till ett chip faktiskt kommer att sakta ner det. Det kan mycket väl sätta en praktisk gräns för multicore-strategin långt innan vi börjar köpa hundrakärniga datorer.
Men spelar det någon roll? Även om det kan finnas applikationer som kräver kraften hos många kärnor, använder de flesta inte dessa applikationer. Förutom hårda spelare är det få som klagar på att deras datorer är för långsamma. Faktum är att Microsoft har betonat att Windows 7, efterföljaren till det oroliga Windows Vista, kommer att använda mindre processorkraft och minne än Vista – ett steg som är nödvändigt på grund av populariteten hos mobila datorplattformar med lägre effekt och den förväntade migreringen av PC-applikationer till Internetbaserade servrar. En cyniker kan säga att strävan efter ständigt ökande processorkraft är strikt kommersiell – att halvledar- och datorföretag, mjukvaruleverantörer och tillverkare av mobiltelefoner behöver oss för att köpa nya prylar.
Så vad är nackdelen om flerkärnig datoranvändning misslyckas? Vilken är den sannolika inverkan på vår kultur om vi tar ett tekniskt sicksack som borde ha varit en zag och plötsligt inte är kapabla att använda alla 64 processorkärnor i våra framtida bärbara datorer?
Jag kan inte vänta! säger Steve Wozniak, uppfinnaren av Apple II. Upphävandet av Moores lag skulle skapa en renässans för mjukvaruutveckling, hävdar han. Först då kommer vi äntligen att kunna skapa mjukvara som kommer att köras på en stabil och hållbar plattform.
I skolor, säger Woz, är livslängden för ett skrivbord 25 år, en lärobok är 10 år och en dator är tre år, toppen. Vilken av dessa enheter kostar mest att köpa och använda? Varför, PC, naturligtvis. Vilket har restvärde när dess livslängd är över? Inte datorn – den kostar pengar att kassera. Åtminstone kan böcker brännas för värme. Tills tekniken saktar ner tillräckligt för att datorplattformar ska hålla tillräckligt länge för att vara ekonomiskt lönsamma, kommer de inte att vara verkligt inneboende för utbildning. Så slutet på Moores lag, även om det kan se dåligt ut, skulle faktiskt vara väldigt bra.
Robert X. Cringely har skrivit om teknik i 30 år. Han är författare till Accidental Empires: How the Boys of Silicon Valley Make their Millions, Battle Foreign Competition, and Still Can't Get a Date .
