JavaScript is currently disabled.Please enable it for a better experience of Jumi. Kompilatorn som räddar din multikärna
Desperationen växer – alla vill ha multikärnor, men ingen kan programmera dem. Elektroniktidningen har pratat med brittiska Codeplay, som säger sig ha lösningen. En enkel programmeringsmodell där kompilatorn och programmeraren hjälps åt att parallellisera programkoden.
Codeplay bygger C-kompilatorer för multikärnor. Men företaget använder en modell för parallellprogrammeringen som är mycket enklare än de trådade modeller som används idag. Man använder programspråken C och C++ med ett tillägg som bland annat innebär att exakt samma programkod kan användas på processorer med olika antal kärnor.

Företaget har anpassat sin kompilator till flera olika multikärnor. Den man man får skylta utåt med är Ageia , som bygger en fysikaccelerator för datorspel.

Codeplay har tidigare gjort verktyg för bland annat Playstation 2. Och minst en av de anonyma kunderna arbetar också den med en speltillämpning.

Processorn Cell, som används i Sony Playstation 3, är inte kund.

– Nej, det kan jag förneka, säger Andrew Richards, företagets vd.

– Men det är många andra processorer på gång i samma härad. Cell blir säkert en storsäljare, men jag tror att den kommer att slås snart i prestanda.

Multikärnorna sprider sig till allt fler tillämpningsområden. Men alla tillverkare gör enligt Andrew Richards samma fel.

– Det är mycket märkligt faktiskt: alla tror att programmeringen är någon annans problem.

– Du kan idag lägga massor av kärnor på ett ett chips. Men den verkliga utmaningen ligger i att distribuera belastningen, säger Andrew Richards.

Varken processorutvecklare eller verktygsmakare ser problemet. Först när hårdvaran finns på plats märker man att det tar mycket tid att konstruera programvara som verkligen utnyttjar kärnorna.

– Multicore kommer stort. Men det saknas verktyg. Det var därför det tog ett år innan Playstation 2 hade bra spel, säger Andrew Richards.

FAKTA Parallella program utan krångliga trådar

Tanken med Codeplays programmeringsmodell, är att programmeraren ska kunna utgå från vanlig seriell C-kod. Därefter märker hon upp block av programkod med nyckelordet ”sieve”. Dessa sieveblock fördelas sedan av kompilatorn på de olika kärnorna.

Om exemeplvis en lista av tal ska summeras, så kan fyra sieveblock dela upp talen mellan sig. Därefter adderas de fyra summorna i vanlig C-kod utan sieveblock, det vill säga seriellt.

Ett sieveblocket börjar exekveras redan innan hela datablocket som ska behandlas kopierats över till den lokala kärnan. Detta för att minimera bandbredden mot det gemensamma minnet.

Återkopieringenav bearbetade data skjuts däremot upp tills hela sieveblocket exekverats klart.

– I praktiken innebär detta att man automatiserar manuell hantering av lokalt minne, kommenterar processorexperten Jakob Engblom på verktygsföretaget Virtutech.

Modellen med uppskjuten återkopiering betyder att den kompilerade programvaran är deterministisk - att den fungerar exakt likadant oavsett antalet kärnor.

– Determinism är ett av de stora problemen när man ska avlusa en multiprocessor. De flesta program blir nästan slumpmässiga i sitt beteende. Att Codeplay kan anta lokala data i varje block hjälper upp determinismen rejält, säger Jakob Engblom.

Ju fler kärnor i processorn, desto fler sieveblock kan exekveras parallellt. Multikärneprogrammerarens uppgift blir att hitta en bra uppdelning i sieveblock. Den gamla seriella koden är bara en utgångspunkt som visserligen fungerar korrekt, men kan behöva omformuleras innan den blir effektiv.

För det arbetet kan programmeraren ta hjälp av Codeplays optimeringsverktyg som bland annat kan profilera programkoden (mäta resursanvändningen detaljerat) i termer av sieveblock.

Den stora fördelen med sievemodellen är att den är begreppsmässigt enkel, enligt Lars Albertsson, parallellprogramforskare på Sics.

– De trådbaserade programmeringsmodeller vi använder idag är komplicerade att använda. Vi kommer nog att få se en uppsjö med nya parallella programmeringsmodeller dyka upp de närmaste åren. Inte bara Sieve utan också X10, varianter av transaktioner, och annat.

En potentiell nackdel med Sieve mot trådade modeller, är att det finns en risk att prestandan inte blir hög eftersom man arbetar på en högre nivå med mindre kontroll.
Codeplay är – förstås – räddaren i nöden. Företaget har en kompilator som kan skräddarsys för olika multikärnor.

– Med hjälp av den kan utvecklingstiden bli mycket, mycket mindre, säger Andrew Richards.

En Codeplaykompilering kan enligt Andrew Richards spara in månader av assemblerkodsutveckling. När Codeplay utvecklade verktyg för Playstation 2 bjöd företaget på två veckors gratis användning. Vilket visade sig vara ett misstag när en av de potentiella kunderna bara behövde kompilera sitt program en enda gång.

– Och sedan var de klara! utbrister Andrew Richards.

Kompilatorn är optimerad för processorer där varje kärna har ett eget lokalt arbetsminne, snarare än för kärnor som använder gemensamt minne och lokalt cache.

Codeplays teknik kallas sieve (se faktaruta). Den lägger ganska mycket ansvar på programmeraren. Varför kan inte kompilatorn göra mer automatiskt?

– Det finns massor av forskning på autoparallelliserande kompilatorer för C och C++. Men resultaten är inget vidare, säger Andrew Richards.

– Forskarnas kompilatorer gör omständliga analyser och delar upp koden på massor av processorer. Men prestandaförbättringen blir ändå bara runt tio procent.

– En inbyggnadsingenjör vill ha dubbla eller fyrdubbla prestadandan ur sin multikärna och är beredd att lägga ner en det arbete som krävs, säger Andrew Richards.

Lars Albertsson, parallellprogramforskare på Sics, skriver under på den analysen.

– Ett fundamentalt problem med automatiskt paralleliserande kompilatorer är att de är tvungna att vara konservativa - de får aldrig får riskera att ändra programmets beteende.

– När man istället involverar programmeraren i arbetet kan han godkänna att vissa oviktiga programhändelser, till exempel felhantering eller loggning, sker i en annan ordning. Då finns det mycket större möjligheter att hitta parallellism i program, säger Lars Albertsson.

– Så jag tycker att Codeplays koncept är bra. Verktyg som hjälper programmeraren parallelisera sin kod är i dagsläget helt rätt att satsa på. Det ger rätt balans mellan automatisk och manuell parallellisering.

Funktionella språk – en paradgren inom europesisk datalogiforskning – kan vara betydligt enklare att parallellisera automatiskt än maskinnära språk som C. Men de har, enligt Andrew Richards, ett högt overhead. Och dessutom vill inbyggnadsprogrammeraren ha lågnivåkontrollen hos C, exempelvis över vilken kod som ska parallelliseras och vilken typ av minnen som ska användas för olika data.
MER LÄSNING:
 
KOMMENTARER
Kommentarer via Disqus

Anne-Charlotte Lantz

Anne-Charlotte
Lantz

+46(0)734-171099 ac@etn.se
(sälj och marknads­föring)
Per Henricsson

Per
Henricsson
+46(0)734-171303 per@etn.se
(redaktion)

Jan Tångring

Jan
Tångring
+46(0)734-171309 jan@etn.se
(redaktion)