Enklere programmering for multicore-computere

Antallet af kerner – eller tal-knasende enheder – i mikroprocessorer fordobles med hver generation, hvilket giver et enormt computerpotentiale for desktops, bærbare computere og i sidste ende håndholdte gadgets. Nuværende quadcore-maskiner er for eksempel særligt nyttige til sådanne beregningshungrende applikationer som videobehandling og spil. Men de nye multicore-maskiner er i bund og grund små supercomputere, og for at få fuld fordel af den computerkraft, de tilbyder, skal softwaren skrives med flere kerner i tankerne – en tidskrævende og vanskelig opgave kendt som parallel programmering. Og mange eksperter mener, at medmindre parallel programmering kan gøres lettere, vil computerfremskridtene gå i stå.





Software forenklet: StreamIt er et softwaresprog og compiler, der gør det muligt for programmører nemt at programmere multicore-maskiner - en opgave kaldet parallel programmering, der ellers er tidskrævende og vanskelig.

Forskere ved MIT leder efter en måde at lette smerten ved parallel programmering. De har designet et computersprog og en compiler – et specialiseret værktøj, der konverterer sproget til computerinstruktioner – som i det væsentlige skjuler parallelprogrammeringsudfordringerne, men alligevel udnytter kraften i flere kerner. Sproget og oversætteren, kaldet StreamIt , blev udviklet af Saman Amarasinghe , professor i elektroteknik og datalogi ved MIT. StreamIt kører i øjeblikket på en specialiseret multicore-maskine bygget på MIT, men til sommer forventer Amarasinghe at have softwaren klar til at køre på kommercielle chips lavet af IBM, Sony og Toshiba fundet i Sonys PlayStation 3-maskiner.

At skabe software er stadig noget, mange mennesker kan gøre, men hvis de skulle forholde sig til parallelitet, bliver det meget sværere, siger Amarasinghe.

I single-core maskiner kører softwarekode for det meste sekventielt. Det betyder, at opgaver – såsom at få adgang til bestemte bidder af hukommelsen for at åbne et program – opstår efter hinanden på en forudsigelig måde. I et multicore-system bliver opgaver delt op mellem kerner. Og når forskellige opgaver skal have adgang til den samme del af hukommelsen, skal opgaverne arbejde sammen for omhyggeligt at orkestrere - eller synkronisere - adgangene. Hvis flere opgaver utilsigtet får adgang til de samme data uden ordentlig synkronisering, vil dataene blive ødelagt, hvilket giver forkerte resultater eller går ned i programmet.

I single-core maskiner er det ret nemt at debugge programmeringsfejl eller utilsigtede problemer, fordi årsagen kan spores tilbage til en bestemt instruktion. Men Amarasinghe siger, at nogle fejl i parallelle systemer er sværere at rette, fordi de er sandsynlige – hvilket betyder, at de kun opstår lejlighedsvis; hver gang programmet kører, udfører de flere kerner deres opgaver uafhængigt, hvilket fører til milliarder af mulige udførelsesordrer for programmet.

Amarasinghes løsning er baseret på et velkendt koncept kaldet dataflow, hvor data streames sekventielt gennem en slags pipeline af funktioner. Efterhånden som dataene flyder, ser compileren, hvilke funktioner der er uafhængige. Således kan compileren placere separate opgaver på forskellige kerner, uden at bekymre sig om, at de vil forstyrre hinanden eller berøre det samme stykke hukommelse.

En programmør behøver kun at skrive software, der fungerer på en sekventiel måde. Compileren ser alle de interaktioner, der skal ske, baseret på koden skrevet af programmøren, og allokerer instruktionerne korrekt for at forhindre, at fejl opstår.

Det er en god idé baseret på velkendte koncepter, siger Bodik Race , professor i datalogi ved University of California, Berkeley. Hvis man ønsker, at programmører, der ikke er eksperter i parallelisme, skal være produktive, hvis man vil have dem til at skrive programmer effektivt, vil man give dem et sprog som StreamIt, siger han. Bodik har dog mistanke om, at softwareingeniører bliver nødt til at stole på et hierarki af værktøjer, der fungerer på forskellige niveauer. For eksempel kunne transaktionshukommelse, som gør det muligt for adskillige opgaver at dele den samme hukommelse på samme tid, fungere bag kulisserne og hjælpe med at maksimere StreamIts potentiale. (Se Problemet med Multi-Core-computere.)

skjule