Skriv ut
Kategori: Nyheter
I Suns serverprocessor Rock har varje programtråd en privat spejare som springer i förväg och fyller cacheminnet med det som tråden kommer att behöva.
Suns kommande serverprocessor Rock är optimerad för att kunna exekvera många programtrådar parallellt, precis som sina företrädare Niagara (Ultrasparc T1 och T2). Men Rock kommer att ta ett halvt steg tillbaka och ägnar kisel åt att trimma prestanda i de trådar som faktiskt exekveras.

Ett symtom på den ambitionen är så kallade spejartrådar vars enda uppgift är att springa i förväg och bana väg för riktiga programtrådar.

När det uppstår en påtvingad paus – för att tråden exempelvis måste vänta på en delad resurs – klonar tråden av en så kallad spejartråd, som fortsätter exekvera de instruktioner som ligger efter tråden.

Spejaren exekverar slarvigt och bryr sig inte om att spara resultaten. Det viktiga är sidoeffekten av att den refererar till samma värden som den verkliga tråden: dessa värden kommer att laddas upp i L2-cacheminnet. När senare den verkliga tråden kommer efter, ligger alla värden på plats i L2-cachen.

Det är spejartråden som får ta smällarna av så kallade cachemissar -- när data inte finns på plats i cacheminnet utan måste skickas upp från primärminnet. Att vänta på primärminnet kan ta hundratals dyrbara klockcykler. Och det är det försprång, några hundra klockcykler, som spejartråden försöker hålla till sin uppdragsgivare. I praktiken kommer ofta spejaren och huvudtråden att turas om att exekvera.

Det är förstås inte självklart att spejartråden kommer att välja rätt väg i programmet, eftersom förgreningar kan vara beroende av data den verkliga tråden fortfarande väntar på. Men det blir rätt tillräckligt ofta för att spejartråden mycket väl kan vara en lönsam investering. I ett test lyckades Marc Tremblay – huvudarkitekten bakom spejartrådarna i Rock – höja prestanda med 70 procent med spejartrådar.

Den konkreta effekten blir att sannolikheten för cachemissar sjunker. Vilket är samma effekt som man skulle få om man ökade cachestorleken. Och tvärtom – att det blir möjligt att minska den fysiska cachestorleken för att skapa plats åt fler kärnor och trådar.

Tekniken liknar det som kallas prefetch. Skillnadeen är att en prefetch endast används för att fylla ut en rörledning. En spejare är en hel liten egen programtråd som kommer att fylla rörledningen alldeles på egen hand efter sina egna behov.

Rock använder också en superversion av spekulativ exekvering – nu är vi tillbaka i huvudtråden och dess ständiga arbete med att fylla sin rörledning till bredden. Om det finns plats i rörledningen stoppar många processorer in instruktioner som bara eventuellt ska exekveras. För att slippa strul när prognosen slår fel lägger processorerna resultaten i temporära register, och väntar med att kopiera till de verkliga registren tills kusten är klar. Utom Rock, som tar chansen och använder de verkliga registren direkt. Det kallas out-of-order retirement och betalas med en krångligare version av ångraknappen.

När Rock är klar ska den tillverkas i 65 nm. Den beräknas finnas i servrar år 2008. Rock har 16 processorkärnor, där Niagara har åtta. Däremot har de två arkitekturerna hårdvarustöd för lika många trådar: 32. Maskinspråket är 64-bitars Sparc v9.

Lyssna på Marc Tremblays föreläsning om bland annat spejartrådar (länk till mp3)