Tänk nytt. ?Programmerarna måste tänka nytt?, säger Ulf Wiger från Erlang Solutions om programmering för flera kärnor.
Tänk nytt. ”Programmerarna måste tänka nytt”, säger Ulf Wiger från Erlang Solutions om programmering för flera kärnor.
Har sex kärnor. En processor? Nej, sex. Intel Core i7 har sex kärnor. Tyvärr innebär det inte att den är sex gånger så effektiv som en ensam processor. Få program kan utnyttja hela kapaciteten.
Har sex kärnor. En processor? Nej, sex. Intel Core i7 har sex kärnor. Tyvärr innebär det inte att den är sex gånger så effektiv som en ensam processor. Få program kan utnyttja hela kapaciteten.
Tar lite plats. Flerkärniga processor tar lite plats på moderkortet, men beter sig som flera processorer. Tyvärr är det få program som kan dra nytta av kapaciteten.
Tar lite plats. Flerkärniga processor tar lite plats på moderkortet, men beter sig som flera processorer. Tyvärr är det få program som kan dra nytta av kapaciteten.
Att skrämma upp en processor till mer än ungefär tre gigahertz – tre miljarder tick per sekund – lönar sig inte. Strömförbrukningen ökar då mycket snabbare än arbetstakten.

Därför är dagens snabbaste processorer inte snabbare än föregångarna för fyra fem år sedan. I stället har de flera kärnor.

En flerkärnig processor är flera separata processorer, kärnor, sammanbyggda i samma skal. Fyra kärnor i en processor är inte ovanligt, men Intel arbetar på en 48-kärnig processor.

Fyrakärniga processorer är inte fyra gånger så snabba som en processor – ofta tyvärr inte ett dugg snabbare.

Det är som att hyra en åttarummare men ändå sova, äta och titta på tv i samma rum.

Det är en konst att skriva program som grenar upp sig i två eller flera förlopp som kan köras jämsides med varandra i var sin kärna.

Programutvecklingsindustrin är bara i början av en gigantisk inlärningsprocess.

– Det är relativt få utvecklare som egentligen kan och förstår concurrency, säger Stefan Månsby på driftsföretaget Basefarm.

Concurrency innebär att köra ett program som två eller flera samtidiga förlopp. Problemet är att förloppen aldrig är helt åtskilda – i så fall är det två separata program – utan ibland bearbetar samma data, vilket kan ställa till oreda.

Stefan Månsby säger att språk som C och C++ ger ”relativt lite hjälp” för programmering för flera kärnor, medan Java och Apples favoritspråk Objective-C gör det enklare – men ”du måste fortfarande förstå concurrency som begrepp”.

I grunden krävs det att programmerarna slutar att tänka i invanda banor.

– De flesta programmerare är villiga att acceptera att det blir lite krångligare om de bara kan få behålla sina invanda programspråk och verktyg, men det här går djupare än så. De måste lära sig att tänka på ett annat sätt. Ett riktigt paradigmskifte alltså, säger Ulf Wiger, teknisk chef på Erlang Solutions.

En lösning är att skriva program som vanligt och låta kompilatorn ta hand om anpassningen till flerkärniga processorer. Det går, men vinsterna har hittills varit begränsade.

– Man har i flera år forskat på att utveckla tekniker för att få existerande program att automatiskt, eller med minimal arbetsinsats, utnyttja multicore. Det ger väldigt lite, och även de mest optimistiska prognoserna hamnar kring 15 procents uppsnabbning, säger Ulf Wiger.

Men hoppet är inte ute för kompilatorerna.

– Det finns plats för nya programspråk, nya abstraktioner och sätt att strukturera programmen. Det i sin tur öppnar för att kompilatorerna kan göra mer.

Ulf Wiger jämför med skräpinsamling i traditionell programmering. Förr var det något känsligt som programmerarna ville sköta för hand.

Nyare programspråk hanterar det här automatiskt och utan problem.

Kompilering för flerkärniga processorer kan gå samma väg.