Skriv ut
Elektroniktidningen lyfter på förlåten till det hittills hemlighetsfulla Uppsalaföretaget Acumem. Bakom företaget finns processorprofessorn Erik Hagersten. Han vill höja prestanda på programvara genom att hjälpa programmerarna att utnyttja cacheminnet bättre.
Professor Hagersten har länge predikat svårigheterna programmerarna står inför när de ska ge sig i kast med nya parallella multikärnor – de kräver helt nya programmeringsmodeller. Men när han nu själv presenterar en lösning, är det med ett programmeringsverktyg som fungerar lika bra på gamla singelkärnor.
Processorn ska slippa vänta
Om du behöver äpplen, fiskpinnar, apelsiner och glass räcker det med ett besök vardera i frukt- och frysdisk. För en programmerare är det ofta inte lika uppenbart hur varorna är organiserade i minnet och det är lätt hänt att processorn får ta fyra vändor mellan diskarna.

Cacheminnet är det lilla minne som processorkärnan fysiskt har tillgång till. Det fylls automatiskt med data från primärminnet allteftersom dessa data efterfrågas. Fyllningsvändorna kan ta hundratals klockcykler, så det gäller att utnyttja data maximalt innan de spolas ut ur den lilla cachen. Mardrömmen är att samma delar av primärminnet hela tiden hoppar ut och in ur cacheminnet för att de inte får plats samtidigt.

– Folk gläder sig åt sin nya Ghz-processor, men vet inte att 50–75 procent av tiden står processorn stilla och väntar på cacheminne, säger Erik Hagersten.

Ett exempel på ett enkelt tips från Acumems verktyg är "ändra loopordningen". Det vill säga plocka värden från en matris radvis i stället för kolumnvis – om det är radvis som elementen ligger lagrade i minnet, som i programspråket C, och inte kolumnvis, som i programspråket Fortran.
– Redan i dagens program finns massor av bortslösad kapacitet som vi kan hitta. Många har nog ingen aning om att de skulle kunna få upp till fördubblingar i prestanda på sina applikationer, säger Erik Hagersten.

– Vi tar tag i ett av de rikigt akuta, självblödande problemen.

Acumem bygger en verktygslåda som optimerar cacheanvändning.

Målet för en programmerare, är att de data som efterfrågas av processorn så ofta som möjligt redan ska finns i cacheminnet. Då behäver inte processorn  stanna upp och vänta dyra klockcykler på att de hämtas upp från primärminnet.

De flesta programmerare kan helt enkelt inte cacheknepen. Och även för experten är analysen komplex.  Så den goda nyheten för Acumem är att hjälp behövs.

Den dåliga nyheten är att det redan finns en massa verktyg därute som analyserar cacheutnyttjande, eftersom problemet är gammalt. Olika tekniker för att optimera cahceutnyttjandet är också de kända.

Alltså behövs något mer. Och det har Acumem, två teknikförsprång, nämligen en ny typ av cacheanalys och användarvänlighet.

Cacheanalysen härstammar ur Erik Hagerstens forskargrupp på Uppsala universitet. Detaljerna finns i doktor Erik Bergs forskningsartiklar . Han är idag en av Acumens cacheexperter.

Cacheanalysen utgår från en körning av programmet. Den bygger på stickprov och stjäl därför försumbart med beräkningskraft från programkörningen.

I nästa steg får du tips. Verktyget  pekar ut de rader du kan ändra. Och det talar om hur mycket  prestanda du kommer att vinna på det.

– Istället för att ägna resurer åt att göra andra ändringar som bara eventuellt ger förbättrade prestanda, så får du en lista på kanske tio saker som ska ändras – och du vet säkert hur mycket bättre prestanda du kommer att få, säger Erik Hagersten.

Verktyget vet förstås inte vad programmet är till för, eller ens hur det fungerar. Och det behöver du själv heller inte göra – det går alltså att cacheoptimera källkod som ingen längre vet hur den fungerar.

Programvaran som används för ett av SPEC:s prestandatester, blev tre gånger snabbare efter 7–8 ändringsförslag från verktyget. En molekylsimulator blev dubbelt så snabb efter en radändring.

– Det har också hänt att programmet ödmjukt lyft på hatten och sagt att ett program inte kan förbättras. Men också det är ju värdefull information, säger Erik Hagersten

Verktyget har flera gånger överlistat sina egna skapare.

– Det är nästan mystiskt. Vi blir förvånade. Vi är prestandaexperter. Men det visar sig ha rätt och vi fel, säger Erik Hagersten.

Möjliga kunder är inte bara de som själva skriver program. Utan kanske också chefen för ett superdatorcentrum som vill försäkra sig om att de som använder dyrbar cpu-tid verkligen har optimala program.

Inbyggda system är ett viktigt tillämpningsområde. Cacheoptimeringen optimerar prestanda, energisnålhet och till och med materialkostnad – ju bättre prestanda du kan få ur din algoritm, desto billigare komponent kan du välja.

En unik finess är att att du kan köra programmet en enda gång och därefter få svar på vilka olika prestanda ditt program skulle ha på alla möjliga andra  arkitekturer med olika cachehierarkier och  storlekar.

Det betyder att verktyget kan användas också av den som konstruerar en processor eller en systemkrets – hur mycket cacheminne gör skillnad för just mina algoritmer?

Professor Hagersten har länge varnat för de problem programmerarna står inför, i och med övergången till multikärnor. I september 2005 skrev han och två kollegor en artikel om problemet i Elektroniktidningen

– Acumem började med den artikeln, berättar Erik Hagersten.

Den gav kontakt med Christer Bengtsson och en diskussion startade kring möjligheten av att tillämpa forskningsresultaten i attraktiva verktyg – var hade Uppsalagruppen sina teknikförsprång?

Resultatet blev till slut inte ett dedicerat multikärneverktyg. Det blev mer än så – lika bra för singelkärnor.

Och när multikärnorna väl kommer, kommer verktyget kanske att göra ännu mer nytta där.

Cacheminnet brukade växa med varje ny processgeneration. Men i multikärnorna förvandlas transistorer som förr var cacheminne till kärnor. Som dessutom måste slåss om det lilla cache som blir kvar. I en fyrkärna får varje kärna kanske 1/8 av cachestorleken hos en enkelkärna på samma kiselyta.

Redan för singelkärnor är det svårt att organisera programkoden så att cacheminnet utnyttjas optimalt. Multikärnorna kommer att drabbas av rena cachechocken.

Som extra grus i maskineriet skruvas klockfrekvensen ner – multikärneprestandan ska ju komma ur parallellismen.

Det här betyder att de nya multikärnorna i praktiken till och med kan få sämre prestanda på många uppgifter än de gamla enkelkärnorna.

Acumem har sju, snart nio, anställda.

Företaget vill inte ange datum på när verktygen är mogna för en bred lansering eller sätta ner foten på hur den lanseringen ska se ut.

Det man gör idag är att man åtar sig att själv optimera kunders kod med hjälp av de egna verktygen.