Avatar billede zerohero Nybegynder
03. februar 2003 - 16:28 Der 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?

Haaber i forstar hvad jeg mener!

ZeroHero
Avatar billede zerohero Nybegynder
03. februar 2003 - 16:32 #1
Puha, det er da vist meget darligt formuleret!!! ;)
Avatar billede martinlind Nybegynder
03. februar 2003 - 17:30 #2
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 )
Avatar billede zerohero Nybegynder
03. februar 2003 - 17:58 #3
Mener du at det ikke er besvaeret vaerd?
Avatar billede martinlind Nybegynder
03. februar 2003 - 17:59 #4
Ja
Avatar billede zerohero Nybegynder
03. februar 2003 - 18:15 #5
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:

// AddVector (hmg)
//
procedure AddVector(var v1 : TVector; const v2 : TVector); register;
// EAX contains address of V1
// EDX contains address of V2
{$ifndef GEOMETRY_NO_ASM}
asm
      test vSIMD, 1
      jz @@FPU
@@3DNow:
      db $0F,$6F,$00          /// MOVQ  MM0, [EAX]
      db $0F,$0F,$02,$9E      /// PFADD MM0, [EDX]
      db $0F,$7F,$00          /// MOVQ  [EAX], MM0
      db $0F,$6F,$48,$08      /// MOVQ  MM1, [EAX+8]
      db $0F,$0F,$4A,$08,$9E  /// PFADD MM1, [EDX+8]
      db $0F,$7F,$48,$08      /// MOVQ  [EAX+8], MM1
      db $0F,$0E              /// FEMMS
      ret
@@FPU:
      FLD  DWORD PTR [EAX]
      FADD DWORD PTR [EDX]
      FSTP DWORD PTR [EAX]
      FLD  DWORD PTR [EAX+4]
      FADD DWORD PTR [EDX+4]
      FSTP DWORD PTR [EAX+4]
      FLD  DWORD PTR [EAX+8]
      FADD DWORD PTR [EDX+8]
      FSTP DWORD PTR [EAX+8]
      FLD  DWORD PTR [EAX+12]
      FADD DWORD PTR [EDX+12]
      FSTP DWORD PTR [EAX+12]
{$else}
begin
  v1[0]:=v1[0]+v2[0];
  v1[1]:=v1[1]+v2[1];
  v1[2]:=v1[2]+v2[2];
  v1[3]:=v1[3]+v2[3];
{$endif}
end;

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...
Avatar billede zerohero Nybegynder
03. februar 2003 - 18:16 #6
Forseten angaende sporgsmal C) - Har du et hurtigt svar? :-))
Avatar billede zerohero Nybegynder
03. februar 2003 - 18:20 #7
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...
Avatar billede jelzin101 Praktikant
04. februar 2003 - 00:01 #8
martinlind - lige vedr. din kommentar vedr. delphi kode der er hurtigere end c kode... har du noget belaeg for det ?
Avatar billede jelzin101 Praktikant
04. februar 2003 - 00:26 #9
men jeg vil komme med den paastand at det ydelsesmaessigt _altid_ kan betale sig at skrive ting i assembly ,(udviklingstiden ser vi saa bort fra).
Avatar billede jelzin101 Praktikant
04. februar 2003 - 00:30 #10
-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)
Avatar billede doc404 Novice
04. februar 2003 - 10:12 #11
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
Avatar billede martinlind Nybegynder
04. februar 2003 - 14:04 #12
jelzin101 >> En test jeg selv lavede
Avatar billede jelzin101 Praktikant
04. februar 2003 - 14:13 #13
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 :)
Avatar billede martinlind Nybegynder
04. februar 2003 - 14:21 #14
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
Avatar billede zerohero Nybegynder
06. juli 2003 - 01:58 #15
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!
Avatar billede zerohero Nybegynder
06. juli 2003 - 01:59 #16
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!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester