http://www.hardwaresecrets.com/article/434/4
Penryn+ 4 bits/cycle en ouder 2bits per cycle. Denk eraan dat doubles in 80 bit worden uitgerekend. Dus dat is nog altijd 20 cycli (ter vergelijking een mul is deels pipelinable en in de orde grootte van 1 cyclusvoor simpele getallen. Een add ook, maar kan meerdere in paralel doen), al zijn er een paar early outs .
Verder heeft een Core2 IIRC 4 integer en maar 2 copro units. (waarvan er een alleen maar simpleops kan doen).
Daarnaast komt er nog de ellende overheen die een hogere taal als Delphi toevoegd, een fwait om coprocessor excepties correct af te handelen, en veel Pascal FPU commando's komen niet direct overeen met hun assembler equivalenten (ook al geloven veel mensen dat), hetzij vanwege speciale rounding modes of vanwege het feit dat de assembler varianten maar een beperkt domein gebruiken.
Als je je geheugen linear processed, moet je redelijk veel ops doen voor je een cache stal krijgt. En dan heb ik nog niet eens over prefetch (al doet delphi dat niet)
Maar (dynamisch) memory management is veel duurder dan FPU ja. calloc en malloc hebben verder geen vaste inhoud, dus zo'n observatie waardeloos. Heapmanagement hangt heel sterk af van de eisen, de snelste is gewoon nooit geheugen vrijgeven. En nogal wiedes dat dat dan sneller is, dan is een malloc equivalent aan:
pascal Code:
function malloc(size:ptuint):pointer; inline; begin result:=baseptr; inc(baseptr,size); // evt ((size and not 16 )+ 16) voor alignment. end;
Wat bij elkaar ook twee integer instructies of zo is (zonder stal, want aliasbaar). Maar ja, dan kan je het niet vrijgeven. Maar goed, als je alleen een kort lopend programma hebt, zoals b.v. een database export transformeren, waarom niet?
Bookmarks