Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 26.07.2004, 19:48 Titel: Ein paar Fragen zur Geschwindigkeit |
|
|
Also: Wie viel Zeit beansprucht es, eine Variable anzulegen? Also ist es schneller eine Variable einer Klasse direkt in der Klasse zu erstellen, oder erst in einer Methode der Klasse? Gibt es da einen Unterschied?
Und stimmt es, das Teilen langsamer als multiplizieren ist?
also 10*0,5 schneller als 10/2 ?
Ist zwar bestimmt nicht viel, aber wenn mans überall macht, könnte das schon ein bischen die Geschwindigkeit steigern. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 26.07.2004, 19:58 Titel: |
|
|
Du brauchst dir in den meisten Fällen um solche Dinge keine Gedanken machen weil dass der Compiler für dich optimiert. Erst programmieren, dann profilen und DANN optimieren, sonst machst du dir nur unnötig Arbeit. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 26.07.2004, 20:09 Titel: |
|
|
ok thx
ich denke mal bei den heutigen Geschwindigkeiten macht das eh nicht soo den großen Unterschied. Es ist wohl wichtiger effiziente Algorithemn zu entwickeln, als diese bis ins letzte Detail zu optimiern. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 26.07.2004, 20:11 Titel: |
|
|
Das mit dem Multiplizieren dürfte stimmen! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 26.07.2004, 20:13 Titel: |
|
|
Hazel hat unbedingt recht. Eine Ergänzng noch. Wenn du irgendwo x = 10 / 2; oder t = 10 * 0.5; im Code hast, wir der Compiler das sowieso vorher berechnen. Das gilt für alle Codeteile, bei denen die Wert von sofort berechner werden können.
C. |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 26.07.2004, 20:15 Titel: |
|
|
Variablen die auf dem Stack angelegt werden benötigen soweit ich weiß fast garkeine Zeit (der Stack pointer muss doch nur erhöht werden, richtig?).
Es kann natürlich noch zeit für konstruktoren benötigt werden, aber das dürfte auch nicht soviel sein. Anders ist es, wenn du per new Speicher vom Heap anforderst. Das kann unter umständen schon etwas "länger" dauern. Zudem lohnt sich der Heap nur für große Objekte (es sei denn du verwaltest die kleinen objekte effizient mit einem eigenen memory manager), ansonsten wird er zu stark fragmentiert.
Aber wie Hazel bereits sagte:
Die meisten mini-optimierungen lohnen sich überhaupt nicht bzw optimiert der compiler. Du solltest eher darauf achten, dass der Code übersichtlich und Bugfrei ist. Optimieren sollte man nur an bestimmten schlüsselstellen. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 26.07.2004, 23:43 Titel: |
|
|
Ja, also um solche Sachen sollte man sich in der Regel keine Gedanken machen. Manchmal(eher selten) hilft es einem noch wenn man mal ein wenig shiftet statt einfache Punktrechnung zu verwenden(wobei ich mir fast vorstellen könnte, das der compiler das in entsprechenden Fällen auch automatisch macht.
Wirklich den Code zu optimieren bringt auch nur etwas wenn du zB eine starke 3D-Engine hast und aus ihr das maximum heraus holen willst, da kann man denn zB die Matrizen Rechungen etc. mit inline asm und SSE/3DNow! optimieren, oder alles was sehr oft gebraucht wird und durch irgendwelche trigonometrischen Funktion etwas langsamer ist. Aber: DEN Leistungsschub bringt das auch nicht, eher sollte man darauf achten dass man mit den texturen gut umgeht, also dass sie nicht zu groß sind, oder dass man unnötige Daten über den Bus schickt(zB durch dauerndes hin-und her switchen der Textur). Oder das man zB die Vertices einer Heightmap für die Kollisionserkennung nicht aus dem VRAM(also aus den Vertexbuffer) liest, sondern man sich ne Kopie im SysRam macht usw.
Wenn du dann alles oben genanntes getan hast und vieles mehr, dann kannst du vielleicht mal daran denken irgendwas in der Art, wie du oben beschreibst, im Code zu verändern. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 27.07.2004, 05:28 Titel: |
|
|
Stimmt! Selber sollte man wirklich nicht soviel optimieren. Hab von nem Informatiker erfahren das z.B. Die Professional Version von VC viel besser optimiert als die Standard Version! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 27.07.2004, 07:38 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: | Stimmt! Selber sollte man wirklich nicht soviel optimieren. Hab von nem Informatiker erfahren das z.B. Die Professional Version von VC viel besser optimiert als die Standard Version! :D |
Das steht sogar in der MSDN und man kann einstellen wie er optimiert. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Kaiserludi Mini JLI'ler
Anmeldedatum: 22.07.2004 Beiträge: 27
Medaillen: Keine
|
Verfasst am: 27.07.2004, 08:53 Titel: |
|
|
Gut, dass ich mich in Punkto Optimierung auf meiner Enterprise-Version ausruhen kann
Zitat: |
eher sollte man darauf achten, ... dass man unnötige Daten über den Bus schickt
|
Daran werde ich mich dann natürlich auch in Zukunft halten, danke MiracleBy für den wertvollen Tip, wie ich aus nem Doom-1-Clon die Hardwareanforderungen von Doom 3 rauskitzeln kann |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 27.07.2004, 10:41 Titel: |
|
|
Argh, der Context gibt aber eigentlich was anderes her, oder irre ich? |
|
Nach oben |
|
|
Nahar Senior JLI'ler
Alter: 36 Anmeldedatum: 16.07.2003 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 31.07.2004, 17:10 Titel: |
|
|
Gibt es eigentlich in Sachen Geschwindigkeit einen Unterschied ob man negative Zahlen multiplitziert oder positive? |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 31.07.2004, 17:39 Titel: |
|
|
sollte eigentlich nicht, sofern das Betriebssystem das 2k-Format benutzt. Da ist es egeal, ob Zahlen ein positives oder negatives Vorzeichen haben. _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 02.08.2004, 08:00 Titel: |
|
|
Also statische Variablen anzulegen benötigt gar keine Zeit, da in der exe selbst der Platz für diese Variable reserviert wird. Alle anderen Speicheranforderungen sind halt etws langsamer. Es gibt sogar optimeirungsfreaks, denen die Speicheranforderung vom Betriebsystem zu langsam ist. Die Fordern den Speicher in großen Blöcken an und verwalten den bereich dann selbst.. Kann ich aber keinem empfehlen *g* |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 02.08.2004, 11:29 Titel: |
|
|
Wenn ich noch was zu dem Beitrag sagen darf:
Integerrechnung ist schneller als Fließpunktrechnung (also Float oder Double). Double ist langsamer als float, weil ein einzelnes Double nicht mehr in ein 32-Bit-Register passt.
Wenn es dann noch extrem auf Geschwindigkeit getrimmt werden soll, sollte man kein Short oder gar Byte verwenden - sondern ein Int und Structs sollten auf 32-Bit ausgerichtet sein.
Inwieweit dies alles aber praktisch durchführbar ist, kann ich nicht genau sagen - und so viel schneller wird das ganze auch dadurch nicht mehr.
Das verkürzen der Codepfade hilft ebenfalls ein wenig, also nicht für jede kleinigkeit eine eigene Fuinktion schreiben oder eben wenn möglich vieles inline programmieren
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|