Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.05.2009, 14:59

schnellere Berechnungen

Hallo

ich hab rausgefunden das die Punktproduktberechnung von DirectX:
"D3DXVec3Dot(vector1,vector2)"
ca 4 mal schneller geht wie wenn man die Funktion von der TriBase Engine nimmt
"tbVector3Dot(vector1,vector2)".

Was macht den DirectX da anders bzw wie bekomm ich in einer selbstgeschriebenen Funktion die Geschwindigkeit von DirectX.

Gruß Jan

PS:
Punktprodukt = vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z

WhiteMike

Alter Hase

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

2

03.05.2009, 15:07

Sind solche Berechnungen nicht allgemein ein guter Ansatzpunkt, um mit diversen Optimierungen (→ Assembler) den Programmablauf zu beschleunigen?

Und die Formel für das Punktprodukt sieht ganz anders aus, falls ich mich nicht irre. Wo hast du es denn her?

Mit freundlichen Grüßen,
WhiteMike

3

03.05.2009, 15:17

aus dem buch 3d Spiele Programmierung

und wenn dir mal Wikipedia durchliest:
"Es gibt eine weitere einfache Methode das Skalarprodukt zu berechnen, und zwar durch komponentenweises Multiplizieren der Koordinaten der Vektoren und anschließendes Aufsummieren."

die Formel stimmt schon

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

4

03.05.2009, 15:31

Es gibt da bestimmte Optimierungsmöglichkeiten, z.B. mit der Streaming SIMD Extension. Dürfte auf jedem nicht zu alten x86 Prozessor verfügbar sein.

5

03.05.2009, 17:54

Zitat

Was macht den DirectX da anders bzw wie bekomm ich in einer selbstgeschriebenen Funktion die Geschwindigkeit von DirectX.


Die Prozessoren werden ständig verbessert. So kann es sein, dass ein Chip-Hersteller einen neuen Prozessor herausbringt, mit dem man mehr Berechnungen parallel durchführen kann als früher. Sowas selber zu implementieren ist aber sehr aufwendig und sollte als allerletztes gemacht werden, da du dann jeden möglichen Prozessortyp berücksichtigen müsstest.

Tipps:
1) Schreibe dein Programm.
2) Teste, wo Geschwindigkeitsprobleme auftreten.
3) Überlege, ob du dein Programm anpassen musst.
4) Suche im DirectX-Hilfe-Index zuallererst nach Performance Optimizations
5) Suchbegriff (ein Beispiel): 3DNow

WhiteMike

Alter Hase

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

6

03.05.2009, 18:10

Zitat von »"jan91"«

aus dem buch 3d Spiele Programmierung

und wenn dir mal Wikipedia durchliest:
"Es gibt eine weitere einfache Methode das Skalarprodukt zu berechnen, und zwar durch komponentenweises Multiplizieren der Koordinaten der Vektoren und anschließendes Aufsummieren."

die Formel stimmt schon



Dann kann es sehr gut möglich sein, dass mir in Mathe grundlos Punkte abgezogen wurden. :(

Mit freundlichen Grüßen,
WhiteMike

7

03.05.2009, 20:39

ich hab des mit SSE mal probiert aber des wird eher noch langsamer
da der ja bei jedem Funtionsaufruf den Vektor in des komische __m128 format umwandeln muss und dann wieder zurück.

spricht eigentlich irgendwas dagegen in seiner eigenen engine des vektorformat von directX zu nehmen?

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

8

03.05.2009, 20:44

Nein natürlich nicht. Ich selbst hab ein eigenes, das das allerdings an das DX Format gekoppelt ist.

Wenn man Optimierungen mit Assembler schreibt muss man immer sehr sehr sehr vorsichtig sein. Wenn man sich nicht auskennt macht man meist langsamer und es ist nie sicher, ob es wirklich auf jedem CPU schneller wird

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

04.05.2009, 00:49

Gegenfrage: vergleichst du vielleicht im debugmodus und warum brauchst du mehr Geschwindigkeit?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

10

04.05.2009, 22:13

ne ich vergleich im releasemodus
und die zweite frage:
ahmmmmmm damits schneller läuft!!!!!^^

Werbeanzeige