Gå til innhold

Addisjoner per sekund


asyrst

Anbefalte innlegg

Videoannonse
Annonse

I utgangspunktet måles ikke hastighet i antall addisjoner pr. sekund, men i antall flyttalssoperasjoner pr. sekund; FLOPS. Men de nyeste prosessorene som støtter hyperthreading vil vel kunne beregne 2 addisjoner pr. Hz. Dvs. en P4 2,0 GHz vil kunne beregne 4.000.000.000 addisjoner pr. sekund

Lenke til kommentar

Hvis du mener addisjoner i et selvskrevet dataprogram, blir antallet et helt annet. Det avhenger av mange faktorer, hvilket språk du bruker, om det samtidig skal sjekkes f.eks om uthopp av loop osv. En stor fordel er om du kan gjøre addisjonen i en snutt maskinkode, i så fall nærmer du deg de hastighetene som nevnes, en tiendepart kanskje.

Lenke til kommentar
I utgangspunktet måles ikke hastighet i antall addisjoner pr. sekund, men i antall flyttalssoperasjoner pr. sekund; FLOPS. Men de nyeste prosessorene som støtter hyperthreading vil vel kunne beregne 2 addisjoner pr. Hz. Dvs. en P4 2,0 GHz vil kunne beregne 4.000.000.000 addisjoner pr. sekund

 

Det kommer veldig ann på hvordan progammet skrives og hva trådstarter mener med "adderinger".

 

NB: Jeg går utifra at det benyttes en P4 2Ghz.

 

Case1 :

Tallene skal legges til hverandre slik at tall1=tall1+tall2 -> tall1=tall1+tall3 osv osv. Neste tall legges alltid til summen av alle foregående. DA kan ikke HT hjelpe noe som helst. For det første hjelper HT kun når det er to tråder som kjører... Det gjør det ikke i dette tilfellet. Videre så kan ikke instruksjon nummer 2 starte før resultatet av instruksjon 1 er klart. Så alt P4'n kan gjøre er å decode neste instruksjon, men må vente med selve utførselen. P4 har 20 stegs pipeline, hvorav de 10 første stegene kan gjøres uten å vite resultatet av forrige instruksjon. Men andre ord så kan P4'n bare starte en ADD hver 10. hz. Hver ADD tar kun 1hz per steg, men pga. 10 steg i pipeline'n så tar det 10 hz å gjøre en ADD. Hadde vi kjørt inn en ADD på forskjellige tall hver hz, ville vi etter 10 hz sett at det kom et resultat fra en ADD hver hz, akkurat som om det tok kun 1 hz å utføre ADD(men dette kan vi ikke gjøre her, siden ADD-intruksjonene ikke er uavhengige)

 

Og for å gjøre dette enda verre, så kommer latency i cachen inn i bildet. P4 har 2 cycle-latency fra L1 cachen og 18 cycle "load-to-use" latency fra L2. (CPU prøver først L1, men når ikke dataene er i L1, så prøves L2. Dette medfører at L2's totale latency blir L1+L2 = 20 cycler). Videre oppgir Intel at L1 har en treffrate på 90% og L2 etter det er 9%. MEN, jeg er litt usikker på hvor lang tid i forveien kjerna kan begynne å laste inn data til en ADD før resultatet av den forrige intruksjonen er klart. (dvs, selv om resultatet av intruksjon1 ikke er ferdig, så kan kanskje neste tall som skal legges til lastes inn, slik at neste ADD kan starte umiddelbart etter at instruksjon1 er ferdig.)

 

I "Best-case" så kan ADD-instruksjonene komme umiddelbart etter at forrige ADD er ferdig. Teoretisk gir dette:

2.000.000.000hz * 1 ADD/10 hz = 200 millioner addisjoner per sekund.

 

I Worst case, så må data hentes fra cachen ETTER at instruksjon1 er ferdig(går utifra at tallene som skal legges sammen, ligger sekvensielt i minnet, slik at prefetch-rutinene i cachen ikke skal ha noe problem med å alltid ha neste tall i enten L1 eller L2):

L1: 2.000.000.000 * 1 ADD/12 hz(10 cycler latency pga. pipeline + 2 fra L1 cachen) = 166,7 millioner addisjoner.

L2: 2.000.000.000 * 1 ADD/30hz (10 cycler latency pga. pipeline + 2 fra L1 cachen + 18 fra L2) = 66,7 millioner addisjoner.

 

Case2

Man tillater at man kan addere tallene i to tråder og evt. slår sammen resultatene til slutt. Da kjører man to tråder som hver for seg gjør slik som i Case1 : Da bør HT i teorien gi nøyaktig dobbelt så mange addisjoner som i Case1, siden CPUen kan kjøre to ADD samtidig. Men latency som gjelder cachen ol. vil ikke bli påvirket av HT.

 

Case3

Man er bare interessert i hvor mange addisjoner systemet klarer. Det er ingen sammeneheng mellom tallene som adderes. Da kan P4 legge sammen 2 tall hver hz (siden P4 har to ALU'er som kan legge sammen to tall samtidig) og man får da teoretisk 2x frekvensen antall addisjoner per sekund: 2x2.000.000.000 = 4 milliarder addisjoner.

 

Resultat

Som du ser, så er det utrolig vanskelig å faktisk finne ut hvor fort detta egentlig går. Det er så mange variabler som man må bestemme seg for først og muligheter ting kan skje i av det grenser mot bare tøys... Og uansett hvordan man velger ting, så er slike mål på CPU-ytelse totalt irrelevante. Jeg går utifra at ingen sitter hele formiddagen og legger sammen små heltall billionvis av ganger ... vedkommende burde i så fall fått trekk i lønna :lol: . Eneste benchmarkinga som betyr noe, er å måle ytelse i real-world programmer. Hvor mange FPS får jeg i Q3 ?... Hvor mange sekunder tar det å rendre en scene i Lightwave? Hvor fort ripper jeg en DVD? osv osv ...

 

 

NB: det er brukt litt forenklinger her. Jeg har blant annet gått utifra at en LOAD-instruksjon på neste tall kjøres samtidig som forrige instuksjon utføres. Jeg mener og tror at resomenentene over holder vann, men om noen har "oppdateringer" så fyr laus. Jeg må ærlig indrømme at dette er vanskelig-shit ;)

Lenke til kommentar
Hva med å bare lage et ADD program, og ta tida på et visst antall addisjoner?

 

Joda, men da kommer du borti en del av de probleme jeg tok opp ... skal det gjøres sånn og sånn? Hva er det jeg egentlig får vite ved å skrive programmet slik?

 

I tillegg må det være nok ADD's for at LOAD-kommandoer, tidtagninskommandoer og annet jall skal bli ubetydelig. Det er vel ikke dem man skal teste ? Man kan heller ikke bruke BRANCH/JUMP-kommandoer, siden disse både tar tid OG kan få prefetch-rutiner til å feile. Noe som igjen vil ødelegge for antallet ADD's.

 

Men uansett; ytelsen til ADD-funksjonen er vel ganske uvesentlig? En proessor må takle mer enn å legge sammen to heltall.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...