Problemet med datorer med flera kärnor

Dagens toppdatorer har processorer med dubbla kärnor: två datorenheter som kan hantera separata uppgifter samtidigt. Och till nästa år kommer de stora chiptillverkarna Intel och AMD att ha rullat ut fyrkärniga system. Även om flera processorer teoretiskt sett är snabbare än en enda kärna, är det extremt svårt att skriva programvara som drar fördel av många processorer – en uppgift som kallas parallell programmering.





Ny forskning från MIT kan dock göra parallell programmering lättare och i slutändan hjälpa till att hålla persondatorprestandan på rätt spår. Forskarna föreslår ett nytt datorramverk som kombinerar specialiserade programvaruinstruktioner och modifieringar av flerkärnig hårdvara som kan göra det möjligt för programmerare att skriva mjukvara utan att behöva ta itu med några tråkiga parallellprogrammeringsdetaljer.

Historiskt sett har det varit experter inom superdatorvärlden att skriva mjukvara för system med flera kärnor. Men med den kommande åldern av personliga superdatorer måste genomsnittliga programmerare också kunna skriva programvara med flera kärnor i åtanke.

Det är en skrämmande sak, säger Krste Asanovic , professor i elektroteknik och datavetenskap vid MIT, eftersom de flesta aldrig har gjort det, och det är ganska svårt att göra. Asanovic och hans kollegor tar itu med en av de största utmaningarna som programmerare möter när de försöker skriva mjukvara som körs effektivt på system med flera kärnor: koordinera flera uppgifter som körs på separata kärnor på ett sätt som inte får systemet att krascha. .



När en applikation som Microsoft Outlook eller en videospelare parallelliseras, delas vissa uppgifter upp mellan processorerna. Men ofta måste dessa separata uppgifter fördjupa sig i en delad minnescache för att komma åt data. När en transaktion får åtkomst till minnet och en annan transaktion behöver åtkomst till samma del av minnet, och lämpliga skyddsåtgärder inte har införts, kan ett system krascha. Detta kan jämföras med att ett par med ett delat checkkonto med begränsade medel skriver checkar samtidigt och oavsiktligt överdrar sig från kontot.

Standard parallell programmering kräver att en programmerare förutser dessa samtidiga aktiviteter och ser till att när en viss aktivitet börjar komma åt minnet låser den andra aktiviteter så att de väntar tills transaktionen är slutförd.

När de är implementerade på rätt sätt snabbar låsen upp parallella system, men att omsätta dem i praktiken är komplicerat, säger Jim Larus, forskningsområdeschef på Microsoft. Till exempel, förklarar han, kan två olika applikationer få lås samtidigt, vilket tvingar dem att vänta på varandra. Utan att någon tredje part kommer in för att bryta dödläget, säger Larus, skulle ansökningarna förbli frysta.




MIT-forskarna kommer runt detta genom att använda ett tillvägagångssätt som kallas transaktionsminne, ett forskningsområde som har exploderat under de senaste fem åren, säger Asanovic. Transaktionsminnet koordinerar programvaruoperationer så att programmerare inte behöver skriva in det i sina program. Det tillåter faktiskt många transaktioner att dela samma minne samtidigt. När en transaktion är klar verifierar systemet att andra transaktioner inte har gjort ändringar i minnet som skulle hindra resultatet av den första transaktionen. Om de har det, genomförs transaktionen på nytt tills den lyckas.

Även om transaktionsminnet fungerar i vissa fall är det fortfarande inte perfekt, förklarar Asanovic. För det mesta är transaktionerna små, och den fasta storleken på minnet i hårdvaran kan hantera dem snabbt. Men, säger han, då och då kräver transaktioner mer minne än det fasta belopp som är tillgängligt, och när det händer kraschar systemet. Asanovic säger att genom att lägga till en liten backup-minnescache till hårdvaran, och genom att lägga till programvara för att känna igen när transaktionerna svämmar över, kan transaktionsminnets kapacitet ökas, vilket lindra tidigare systemfel.

Metoden som MIT-forskarna använder bygger på en kombination av mjukvara och hårdvara för att göra transaktionsminnet bättre, säger Microsofts Larus, och det har funnits många konstruktioner som förlitar sig på mjukvara eller hårdvara i varierande grad. Det är ännu inte klart var gränsen går mellan att använda hårdvara och mjukvara för att lösa problemet, säger han, men forskarna tar itu med viktiga olösta problem vid programmering av flerkärniga system.

Microsoft, AMD, Intel och universitet som MIT och Stanford, bland andra, satsar alla på att göra flerkärniga system lättare att programmera. Förutom att förbättra transaktionsminnet, undersöker forskare bättre sätt att felsöka parallella program och skapar även bibliotek med färdiga parallella operationer så att programmerare kan plugga in bitar av kod i programvara utan att behöva räkna ut vecken varje gång.



För närvarande är dual-core-systemen inte lika påverkade av bristen på riktigt parallella program som de kommande fyrkärniga systemen kommer att bli, säger Asanovic. För det mesta kan operativsystem som Windows och Mac OS X effektivt dela upp applikationer på ett dubbelkärnigt system. Till exempel körs en virusskanner diskret i bakgrunden på en kärna, medan applikationer som Microsoft Word eller Firefox körs på den andra kärnan, utan att deras hastighet hämmas.

Men när det kommer till 4, 8 eller 16 kärnor, måste själva applikationerna modifieras för att få mer prestanda. Asanovic säger att transaktionsminne inte kommer att vara en silverkula som gör det lättare att programmera dessa system, men han förväntar sig att det kommer att vara en komponent i den framtida parallellberäkningsmodellen. Det är en mekanism som verkar vara användbar, säger han.

Dölj