Ursprungligen inskrivet av pa1983
Japp men det beror ju på att dom är baserade på helt olika architecturer. och då menar jag inte bara chipen utan helheten. Cray kör vitt jag vet uteslutet på quadcore opteron chip medans IBM kör en mix av optreron och cell processorer.
Opteron är ju en generell chip som klarar många olika instruktioner och tillämpnigar medans cell är mer likt en vectorbaserad processor villket gör den snabb på att beräkna stora tal i parralel men överlag sämre på just generella tillämpningar.
Mycket av det vi har i våra CPU:er i en PC i dag kommer från dåtidens superdatorer.
Cray vill jag minnas var först med att introducera en piplinad CPU i en av deras superdatorer.
Piplinen tillät processorn att börja decoda och efterfråga data innan datan behövdes för beräknigen. En enkel CPU utan pipline får vänta på minnet om det är för lågsamt. Var iget problem i början men när chipen blev snabbare så blev latencer och även att minnet operaerade på lägre frekvenser ett problem.
Tidiga superdatorer var Scalar eller Super Scalar (mer än en opration pär clockcykel) och vanliga processorer i en PC är till stora delar Scalar eller Super Scalare.
Problemet med en Skalär (scalar) eller Super skalär processor är att den är lågsam på att många beräknigar.
Antalet instrucktioner en CPU av något slag kan utföra är i sig inte heller ett mått på ren prestanda.
Säg att vi har gjort ett program där vi har en kub som ska röra sig från ena delen av skärmen till en annan.
Denna kub har 8st hörnen som har sina angivna värden på X,Y och Z. Hörnena är numrerade från 1-8.
Så varge hörne har 3st variablar i form av X, Y och Z medans nummrena 1-8 är hörnenas ID så att säga.
värdena på X,Y och Z på varge hörne är i sig irelevant utan det vi vill göra är att flytta alla hörnen på X axlen ett steg. Ett steg kan motsvara 1 pixel på skärmen. Varge gång vi läger på +1 på X på varge hören flyttar sig kuben en pixel åt höger på skärmen i detta exempel.
För en enkel scalär processor som kan göra en opration pär cykel skulle det se ut ungifär så här.
LOAD = instrucktion för att ladda data
ADD = adderar värdet med den laddade datan
STORE = instrucktion för att lagara data
beräkna nya positonen på x i hörne 1
LOAD X1
ADD 1 to X1
STOR X1
beräkna nya positonen på x i hörne 2
LOAD X2
ADD 1 to X2
STOR X2
beräkna nya positonen på x i hörne 3
LOAD X3
ADD 1 to X3
STOR X3
beräkna nya positonen på x i hörne 4
LOAD X4
ADD 1 to X4
STOR X4
beräkna nya positonen på x i hörne 5
LOAD X5
ADD 1 to X5
STOR X5
beräkna nya positonen på x i hörne 6
LOAD X6
ADD 1 to X6
STOR X6
beräkna nya positonen på x i hörne 7
LOAD X7
ADD 1 to X7
STOR X7
beräkna nya positonen på x i hörne 8
LOAD X8
ADD 1 to X8
STOR X8
I detta exemplet tog det alltså 3 instrucktioner för att beräkna nya placerigen av varge hörne på kuben så totalt tog det 24 cyklar för alla 8 hörnen.
En vector basserad processor som cell eller en GPU eller GPGPU kan efterliknas vid arbetar på ett annat vis.
Skulle man skriva samma program för en vector baserad processor så skulle det se helt anorlunda ut. Här är ett exempelt på hru det skulle kunna se ut på en vector baserad processor som kan utföra en instrucktion pär cykel.
LOAD = instrucktion för att ladda data
STORE = instrucktion för att lagara data
ADD = adderar värdet med den laddade datan.
beräkna nya positonen på hörne X1 till X8
LOAD X1, X2, X3, X4, X5, X6, X7, X8
ADD 1 to X1, X2, X3, X4, X5, X6, X7, X8
STOR X1, X2, X3, X4, X5, X6, X7, X8
I detta fallet tog det 3st instrucktioner att addera alla hörnenas X axel med 1 villket flyttade kuben 1 pixel åt höger.
Problemet med Vector baserade processorer är att dom i regel är väldigt usla på generella oprationer eller helt enkelt skalar dåligt om dom inte får tillräklig att göra. Oftast arbetar dom optimalt inom en vis längd på datan tex 64bit eller 128bit och dom behöver data som går att vectorisera. En Generle CPU är bättre när det är mycket varierande kod att exeviera medan en Vector baserad processor kräver kod som är lätt att vectorisera och därför är tillämpnigarna för dessa maskiner ochkså mer begränsade. Därför superdatorer tex används för vetenskapliba uppgifter som att simulera vätskor eller airodynamik eller virituel verklighet. Superadtorer på 80 talet renderade sådant som vi kan rendera på grafikkorten i dag fast sanbbareå bättre men principen är den samma. Crays maskiner var baserade på vectorbaserade processorer och dom användes tex för at rendera några av dom första pixar filmerna på 80 talet. Det är på samma princip en GPU eller cell renderar animationerna i ett spel i dag.
Men tyvär är dom inte så bra på generella beräknigar. Det har vart ett problem med superdatorer. Tex på 80 talet då vector baerade processorer var vanligt i superdatorer så märkte man att tex 60% av programet kick att vectorisera men resterande 40% var mycket svårare och dom här sissta 40% är det som avgör om man ka nfå ut potensialen ur manskinen eller inte. Klarar man inte av att optimera koden tillräkligt så segar detta helt enkelt ner programet då maskinen inte är specielt snabb på dessa 40% av koden som är svår att optiemra för vectorisering.
Dagens processorer i våra PC maskiner är Super scalar eller super Skalära men är också delivs vectoriserade. Instrucktioner för att göra vector baserade oprationer kallas ofta för simd instrucktioner. Några exempel på simd oprationer är SSE, SSE2, MMX, 3DNOW!
Mend andra ord så har våra vanliga hem PC delar i sig som kan göra just beräknigarna jag vissade åvan.
En modärn CPU i en PC är delvis Super Scalar men också vector baserad om programet är skrivet för att nytja dessa delar.
Ett grafikkort i dag är med sina stream processorer i stort sett en programerbar vector processor som kan ta måna olika variablar och lägga på en å samma konstant på dom på ett eller annat vis istället för att beräkna en å en åt gången. Men också därför en GPU inte är specielt bra på generela beräknigar. En CPU i en PC uttför faramföralt LOAD och STOR oprationer. CA 70-80% av tiden gör den detta och iget annat. LOAD då laddar den data från en addres och STOR så skriver den till en addres. Allt i datorn har addreser. varge byt i ramminnet har egen addres, varge PCI enhet på en buss har en egen addres osv.
Val av architectur är kritiskt för att uppnå det man vill göra. Våra hem PC har lite av varge då dom gör lite av varge. En superdator kan vara extremt optimerad åt ett håll för att göra en viss sak.
Superdatorer byggs oftast med detta i åtanke. Alltså vad ska den användas till coh vad kräver detta för oprationer. Vectorisering eller mer generella oprationer.
Så att snacka om villken som är snabbast så är det som å gämföra äpplen och päron. Beror helt på vad superdatorn ska köra och hurbra man kan optimera uppgiften för superdatorn.