Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Simd/MMX, wie funktioniert das? (https://www.delphipraxis.net/159051-simd-mmx-wie-funktioniert-das.html)

Memnarch 15. Mär 2011 01:14

AW: Simd/MMX, wie funktioniert das?
 
super danke :)
Werde ich mal nen block drauf werfen.

Kannst du grob sagen ob und was für einen performancevorteil dir die MMX variante gegebene hat? würde mich mal interressieren^^

Blup 15. Mär 2011 12:06

AW: Simd/MMX, wie funktioniert das?
 
Mit MMX gings ca. 2-3 mal schneller.

Memnarch 15. Mär 2011 22:28

AW: Simd/MMX, wie funktioniert das?
 
UI, das is natürlich was.
Noch nicht geschafft reinzuarbeiten, aber wenn ich morgen zeit hab mach ich mal nen paar stichproben^^.

PS: Für MMX wird die FPU in nen anderen modus geswitched? Gehen wir mal davon aus mein ASM liegt in einer for schleife(außer dem ASM block ist da nichts drin) switched der bei jedem For durchlauf in den Modus rein/raus?(was dann ja wieder zu ner bremse führen würde)


MFG
Memnarch

Medium 15. Mär 2011 23:17

AW: Simd/MMX, wie funktioniert das?
 
Jain. Die erste MMX Anweisung sollte die FPU umschalten, und erst mit manuellem "EMMS" sollte die FPU wieder "normal" arbeiten. Alles, was sonst nur mit der gewöhnlichen ALU zu tun hat, kann problemlos nebenbei auch gemacht werden. Interessant.

samso 16. Mär 2011 06:55

AW: Simd/MMX, wie funktioniert das?
 
Vielleicht ist es für Dich sinnvoll Dir mal den folgenden Link anzuschaun:

Optimierte Graphik-Bibliothek für Delphi

Memnarch 16. Mär 2011 09:32

AW: Simd/MMX, wie funktioniert das?
 
@Samso: danke für den Link, aber in meinem Beispiel bringt es wenig ;). Obiges farbbeispiel war nur ein Beispiel. Ich schreibe einen Softwarerasterizer und die Mathematik dahinter muss ich optimieren. Da hilft Graphics32 leider wenig.(Außerdem schreib ich in die Bitmaps indem ich direkt die gegebenen positionen im speicher manipuliere, also ohne irgendwelche funktionen. Geht schön schnell^^).

@Medium: Danke, werde ich mir mal durchlesen.

MFG
Memnarch

Memnarch 16. Mär 2011 11:02

AW: Simd/MMX, wie funktioniert das?
 
so, ich schonwieder^^.

Versuche gerade per MMX mehrere integer zu multiplizieren und die einzelnen resultate dann zu addieren. Hier habe ich ein paar kleine probleme^^"

folgendes schema:

per MOVD werden die register wiefolgt bestückt
(Formel wäre x = VARA*FactorA + VarB*FactorB + VarC*FactorC)
mm1, VARA
mm2, FactorA
mm3, VARB
mm4, FactorB
mm5, VARC
mm6, FactorC

und jetzt gehts los, es gibt kein PMULLD, sondern nur PMULLW.
Word hat aber soweit ich weiß 2 Bytes, integer aber 4 Bytes. Die register würden dann in 2Byte blöcken multipliziert(schätze ich könnte später immer 2 Integer in einen 64bit register kloppen, aber ich will es erstmal einfach haben).

danach würde ich mm1,mm3 und mm5 addieren und per MOVD mm1 in meine zielvariable schieben.

Dementsprechend ist der enstehende endwert eher suboptimal^^"

Dazu konnte ich noch nichts genaueres finden >.<.

EDIT: autsch, natürlich sollte ich der ordnung halber bei mm0 anfangen^^"
EDIT2: Bei VAR bzw Faktor handelt es sich um Integer variablen
EDIT3: OHa, oben bei der Formel muss X am ende noch durch einen 4ten Faktor geteilt werden..teilen geht per mmx wohl nicht und teilen ist ja xmal langsamer als alles zusammen o.o

MFG
Memnarch


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz