211service.com
Enklare programmering för flerkärniga datorer
Antalet kärnor – eller nummerknäppande enheter – i mikroprocessorer fördubblas med varje generation, vilket ger en enorm datorpotential för stationära datorer, bärbara datorer och, så småningom, handhållna prylar. Nuvarande quadcore-maskiner, till exempel, är särskilt användbara för sådana beräkningshungriga applikationer som videobehandling och spel. De nya flerkärniga maskinerna är dock i grunden småskaliga superdatorer, och för att dra full nytta av den datorkraft de erbjuder måste programvaran skrivas med flera kärnor i åtanke – en tidskrävande och svår uppgift som kallas parallell programmering. Och många experter tror att om inte parallell programmering kan göras enklare, kommer datorutvecklingen att stanna av.

Programvara förenklad: StreamIt är ett mjukvaruspråk och kompilator som låter programmerare enkelt programmera flerkärniga maskiner – en uppgift som kallas parallell programmering som annars är tidskrävande och svår.
Forskare vid MIT letar efter ett sätt att lindra smärtan av parallell programmering. De har designat ett datorspråk och en kompilator – ett specialiserat verktyg som omvandlar språket till datorinstruktioner – som i huvudsak döljer utmaningarna med parallellprogrammering, men som ändå drar fördel av kraften i flera kärnor. Språket och kompilatorn, kallas StreamIt , utvecklades av Saman Amarasinghe , professor i elektroteknik och datavetenskap vid MIT. StreamIt körs för närvarande på en specialiserad flerkärnig maskin byggd vid MIT, men till sommaren förväntar sig Amarasinghe att ha programvaran redo att köras på kommersiella chips tillverkade av IBM, Sony och Toshiba som finns i Sonys PlayStation 3-maskiner.
Att skapa mjukvara är fortfarande något många kan göra, men om de var tvungna att hantera parallellitet blir det mycket svårare, säger Amarasinghe.
I enkärniga maskiner körs programvarukod, för det mesta, sekventiellt. Detta innebär att uppgifter – som att komma åt vissa minnesbitar för att öppna ett program – sker en efter en på ett förutsägbart sätt. I ett flerkärnigt system delas uppgifter upp mellan kärnor. Och när olika uppgifter behöver komma åt samma minnesbit måste uppgifterna samverka för att noggrant orkestrera – eller synkronisera – åtkomsterna. Om flera uppgifter oavsiktligt kommer åt samma data utan korrekt synkronisering, kommer data att skadas, ge felaktiga resultat eller krascha programmet.
I enkärniga maskiner är det ganska lätt att felsöka programmeringsfel eller oavsiktliga problem eftersom orsaken kan spåras tillbaka till en viss instruktion. Men Amarasinghe säger att vissa buggar i parallella system är svårare att fixa eftersom de är probabilistiska – vilket betyder att de bara uppstår ibland; varje gång programmet körs, utför de flera kärnorna sina uppgifter oberoende, vilket leder till miljarder möjliga exekveringsorder för programmet.
Amarasinghes lösning är baserad på ett välkänt koncept som kallas dataflöde, där data strömmas sekventiellt genom en sorts pipeline av funktioner. När data flödar ser kompilatorn vilka funktioner som är oberoende. Således kan kompilatorn placera separata uppgifter på olika kärnor, utan att oroa sig för att de kommer att störa varandra eller röra samma minnesbit.
En programmerare behöver bara skriva programvara som fungerar på ett sekventiellt sätt. Kompilatorn ser alla interaktioner som behöver inträffa, baserat på koden som skrivits av programmeraren, och allokerar instruktionerna på lämpligt sätt för att förhindra att buggar uppstår.
Det är en sund idé som bygger på välkända koncept, säger Bodik Race , professor i datavetenskap vid University of California, Berkeley. Om man vill att programmerare som inte är experter på parallellism ska vara produktiva, om man vill att de effektivt ska skriva program så vill man ge dem ett språk som StreamIt, säger han. Bodik misstänker dock att mjukvaruingenjörer kommer att behöva förlita sig på en hierarki av verktyg som fungerar på olika nivåer. Till exempel kan transaktionsminne, som gör att många uppgifter kan dela samma minne samtidigt, fungera bakom kulisserna och hjälpa till att maximera StreamIts potential. (Se Problemet med datorer med flera kärnor.)