Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RayJunx JLI'ler
Alter: 44 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 26.01.2006, 16:36 Titel: Performance Problem IF Abfragen |
|
|
If schleifen verbrauchen bei mir eine Menge Rechenzeit in der ich unzählbare andere Rechenoperationen stattdessen ausführen könnte.
ich habe nun zwei fragen zu dem thema:
1) Gibt es andere Möglichkeiten eine IF funktion zu ersetzen. durch eine
schnellere variante?
2) warum dauert das eigentlich so lange? im vergleich zu anderen operationen?
grüße an alle
Rayjunx _________________ Just a Freak |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 26.01.2006, 16:43 Titel: |
|
|
Was verstehst du unter "if - Schleifen" ?  _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
RayJunx JLI'ler
Alter: 44 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 26.01.2006, 17:09 Titel: ups |
|
|
sorry für die schwammige ausdrucksweiße
ich meinte keine schleifen ansich,
ich mein jedes durchführen einer if abfrage ansich kostet proportional sehr viel zeit im vergleich zu x = c * y++ ; oder son kram _________________ Just a Freak |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 26.01.2006, 17:13 Titel: |
|
|
Zitat: |
ich mein jedes durchführen einer if abfrage ansich kostet proportional sehr viel zeit im vergleich zu x = c * y++ ; oder son kram
|
Hast du das gemessen bzw. wie?
Ein Vergleich wird in der Regel mit den Maschinenbefehlen cmp und jnz oder irgend nen anderes jump übersetzt, aber warum das langsam sein soll? _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 26.01.2006, 18:01 Titel: |
|
|
Arbeitest du eventuell mit besonderen Datentypen, welche du vergleichst? Ein normaler Int, Float oder Pointervergleich wird in 2 bis 3 kleine Maschinenbefehle übersetzt - das ist definitiv nicht langsam.
Der Vergleich von z.B. 2 Klassen, welche z.B. die == ode != - Operatoren überschreiben ist jedoch sehr viel Kostspieliger... Kommt dann nch (virtuelle) Vererbung dieser Operatoren hinzu ist klar, wo der Speed bleibt. Aber wenn du nicht tausende von vergleichen Pro Sekunde durchführen musst, sollte dies ebenfalls nicht der FLaschenhals sein, an dem du optimieren müsstest.
Ob du die Vergleiche dann aber anders regeln könntest hängt natürlich vom Vergleichsalgorithmus ab. _________________
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 |
|
 |
FH Super JLI'ler
Alter: 37 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 26.01.2006, 21:20 Titel: |
|
|
Also: cmp (der Vergleich) ist an sich nicht gerade der schnellste Befehl... Im Gegensatz zu inc (erhöhen der Variable um 1) add (addieren) ist cmp ziemlich lahm. Aber so wie du das beschreibst, frisst der Rechenzeit. Du müsstest mal sagen, was du unter "lange" verstehst, und um wieviel langsamer er als andere Befehle ist.
Wenn du natürlich spezielle Datentypen nutzt, sieht das schon anders aus (sie AFE-GmdG).
Ansonsten gibt es ein paar Assembler-Tricks für Vergleiche, aber die lassen sich lange nicht überall einsetzen, und der Compiler nutzt die in der Release-Version eigentlich auch konsequent.
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 26.01.2006, 21:29 Titel: |
|
|
Bist du sicher das die If-Abfragen das Bottleleck sind? Hast du dein Programm schonmal profiliert? _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
RayJunx JLI'ler
Alter: 44 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 27.01.2006, 16:05 Titel: irrtum |
|
|
Hi!
offensichtlich warmein erster eindruck falsch.
ich hatte es in einem kompletten Programm gemerkt und durch
verschachteln und aussparen der if anweisungen wesendlich
performance herausgeholt wärend normale rechenoperationen
vergleichsweiße nicht ins gewicht fielen. so kam es mir zumindest
vor. gestern habe ich im detail einige schleifen alleine laufen lassen
und verglichen wie lange verschiedene anweisungen brauchen.
Resultat. IF braucht nicht wesendlich länger oder kürzer wie andere
rechenoperationen. keine ahnung wo nun der hund kam.
vielleicht stoße ich mal wieder darauf
aber danke für eure statements
grüße an alle
rayjunx _________________ Just a Freak |
|
Nach oben |
|
 |
|