![]() |
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^^ |
AW: Simd/MMX, wie funktioniert das?
Mit MMX gings ca. 2-3 mal schneller.
|
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 |
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.
![]() |
AW: Simd/MMX, wie funktioniert das?
Vielleicht ist es für Dich sinnvoll Dir mal den folgenden Link anzuschaun:
![]() |
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 |
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. |
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