03. februar 2003 - 16:28Der er
15 kommentarer og 1 løsning
Assembler
Hvornaar bor man bruge ren assembler kode i stedet for delphi kode. Jeg har kigget lidt paa nogle matematiske begreber og taenkte om det overhovedet er besvaeret vaerd at oversaette matematiske formler fra delphi kode til assembler kode!
A) Et eksempel kunne vaere at, hvis jeg nu vil oplofte et tal med 2. Dermed tilfojer jeg Math uniten og skriver Tal := Power(Tal,2). Men jeg faktisk i stedet bare skrive en assembler kode pa kun 4 linjer (saa slipper min applikation nemlig for at gennemlaese de ca. 20 linjer assembler kode der er i min Math unit)! Sporsmalet er bare er det besvaeret vaerd?
B) Et andet eksempel er at, hvis jeg nu vil beregne et ganske almindlig standard regnestykke med plus, minus, division osv. saa er det jo meget let at overfore det til ren assembler sporgsmalet er bare om det vil min applikation blive hurtigere eller maske ligefrem langsommere?
C) Et lille begynder sporgsmal omkring assembler. Nar jeg loader et tal eks. "FLD Tal" bor jeg saa ikke senere "af-loade" den igen? Normalt naar skaber noget i dephi bor man jo normalt ogsa huske at frigive det stykke hukommelse man har laant igen, naar man er faerdig med at bruge det?
Det er det ikke særligt tit, delphi kode er faktisk i mange tilfælde hurtigere en C kode, det er også den samme compiler der ligger under ( delphi og CBuilder )
Hmmm... Jeg vil bruge det vedr. en 3D motor hvor jeg behover absolut det hurtigste kode som muligt. Jeg har derfor researched lidt pa nettet og fandt ud af man i stedet for Delphis Arrays (Statiske og Dynamiske) bruge assembler kode der gemte en array "direkte" ind i enten 3DNow! eller FPU processoren (afhaengig af hvilken Cpu man har Intel/AMD). vSimd inderholder en byte fra en tidligere procedure der fandt ud af om computeren havde 3DNow! eller ej. I tilfaelde af at computeren ikke er en AMD vil den derfor bruge FPU og derfor gaa til labelen: @@FPU i nedenstaaende eksempel:
Ved at gore det paa denne maade paastaar forfatteren at man kan opnaa omkring 680% hurtigere end normalt - se hvis det passer er det jo ret imponerende i sig selv! Jeg taenkte om du kan nikke genkende til en assembler procedure som denne, og i saa fald kunne du maaske lave en mini-eksempel der forklar det lidt naermere...
PS: Er der nogen der ved hvor GEOMETRY_NO_ASM stammer fra? er det fra System uniten eller hvad? Og er der nogen der ved naermere forklaring omkring denne defination.
Points bliver selvfolig foroget hvis I synes at 30 points er for lidt for dette sporgsmaal...
-fandt lige http://bdn.borland.com/article/0,1410,28278,00.html som du måske kan have glæde af(der er længere nede paa siden et tekststykke om assembly iht. optimering)
En god assembler programmør kan ALTID skrive kode, der er hurtigere end Delphi,C eller andet.. Men udviklingstiden er væsentlig længere for ikke, at tale om tiden du bruger på at debugge ;-)
Delphi og langt de fleste programmeringsværktøjer danner kode til en "standard processor". Hvis du så har en processor, der har ekstra faciliterer af den ene eller anden art - eller vil arbejde direkte på grafikkortet, er du nød til at finde interfacet til disse. Og det kræver måske assemblerkode..
Kig ind på Intel/ADM's websites - der kan du finde info om, hvordan du udnytter processorene bedst.
Om det er det værd? Hvis du skal beregne 200 vektore er det pi... ligegyldigt om du spare 20 linier assemblerkode, men skal du beregne 500000 er det måske besværet værd
k... -jeg ville da umiddelbart tro at delphi havde en hel del mere overhead end c (men i bemeldte tilfælde er det jo også compileren der er testet -så det siger sikkert mere om dens evne til at oversætte c end dens evne til at oversætte delphi :)
Det er en skrøne at Delphi er meget langsomere en C, da det er den samme 32 compiler der bliver brugt og det forøvrigt er en del asm. kode i det indbyggede funtioner i delphi kan den sagtens følge med c, og i nogle tilfælde være hurtigere
Det er vist på tide at jeg får lukket her!!! Jeg har ikke rigtigt fået et endeligt svar, så jeg tager pointsene tilbage. Håber ikke at det giver sure miner!
Det er vist på tide at jeg får lukket her!!! Jeg har ikke rigtigt fået et endeligt svar, så jeg tager pointsene tilbage. Håber ikke at det giver sure miner!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.