"We are back" « oc.at

vb = langsam

FMFlash 07.05.2002 - 17:18 2552 39
Posts

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
zeig wieder mal den code her

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
leider is das punkteergebnis der benchmarkfunktion sehr undifferenziert und die leistung is um ein drittel auf ~8 mkeys gesunken
burninsource2_7784.zip (downloaded 63x)

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Du kennst anscheinend nicht den Effekt von

Dim x, y as Long

Durch dieses Statement werden nicht etwa zwei Long-Variablen deklariert, nämlich x und y, sondern es wird x als Variant und y als Long deklariert. Wenn du in deinem Programm das x typisierst, wird's auch wieder ein Stück schneller.

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
nein, ich kenn die meisten effekte nicht :)
ist schon einige zeit her seit ich was gecodet hab

JC

Vereinsmitglied
Disruptor
Avatar
Registered: Feb 2001
Location: Katratzi
Posts: 9066
Zitat von FMFlash
nein, ich kenn die meisten effekte nicht :)
ist schon einige zeit her seit ich was gecodet hab
Mhm, da gibt's noch einige Sachen, die du beschleunigen bzw. verbessern könntest.

Code:
    While Not quit '= False
      x = x + 1
      z = z + 1
      If z = 100000 Then
        DoEvents
        z = 0
      End If
    Wend
Du kannst dir mit folgendem Code zB die Variable z sparen:
Code:
    While Not quit
      x = x + 1
      z = z + 1
      If x Mod 100000 = 0 Then
        DoEvents
      End If
    Wend
Allerdings, wenn du eh im Timer das DoEvents aufrufst, wär's hier nicht mehr notwendig.

"While Not quit" ist im Gegensatz zu "While quit = False" doch ein bisserl schneller. :)

In der Hilfe findest einiges über Optimierungen.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Das mim mod ist um einiges langsamer als die Variante, die er gewählt hat. Divisionen brauchen nun mal ihre Zeit.

Das DoEvents ist auf jeden Fall notwendig, sonst wird das Timer Event nie bearbeitet.

JC

Vereinsmitglied
Disruptor
Avatar
Registered: Feb 2001
Location: Katratzi
Posts: 9066
Hmm, stimmt.

Vielleicht sollt' ich doch länger schlafen... :o

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von JC
In der Hilfe findest einiges über Optimierungen.

hab die hilfe (msdn-cd) leider noch nicht ...

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
also ich hab diese einfache counter-funktion jetzt mal in c++ mit diesem kleinen prog nachgestellt

#include <iostream.h>
#include <wait.h>

void main(){
unsigned long counter;
char input[100];

cout << "Press Return to start";
cin.getline (input,100,'\n');

counter = 0;

while(counter < 200000000)
counter++;

returnquit();
}

und statt den schlappen 5 millionen rechungen / sek die vb da produziert hat, dauerts hier grad mal 1 sek um von 0 bis 200 000 000 zu zählen! also um den faktor 20 schneller! :eek:
Bearbeitet von FMFlash am 15.05.2002, 19:56

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11346
Zitat von FMFlash
also ich hab diese einfache counter-funktion jetzt mal in c++ mit diesem kleinen prog nachgestellt

#include <iostream.h>
#include <wait.h>

void main(){
unsigned long counter;
char input[100];

cout << "Press Return to start";
cin.getline (input,100,'\n');

counter = 0;

while(counter < 200000000)
counter++;

returnquit();
}

und statt den schlappen 5 millionen rechungen / sek die vb da produziert hat, dauerts hier grad mal 1 sek um von 0 bis 200 000 000 zu zählen! also um den faktor 20 schneller! :eek:

Wenn mans mit Optimierung compiliert, isses sogar noch schneller... ;)

(der Optimizer entfernt die Schleife und die Variable "counter" komplett...)

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
wie meinst, "mit optimierung compiliert" ? ansich sind die einstellungen schon auf geschwindigkeitsoptimiert ...

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Dann optimiert der Compiler wohl nicht besonders toll. Ein richtiger Compiler entfernt die Schleife komplett, wie that gesagt hat. Sogar wenn du das counter nachher noch verwenden solltest.

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
sind 200 mio additionen / sek für einen xp1600+ @1900+ denn schlecht? wenn ja, was wäre mit guter optimierung zu erreichen?

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Erstens ist es schlecht, denn so eine Schleife kann man mit 1 oder hoechstens 2 Takten / Durchlauf machen, also kannst dir eh ausrechnen, was das dann heisst. Andererseits ist das so ein unsinniges Beispiel, das nicht wirklich was ueber den Compiler aussagt. Denn niemand braucht eine Schleife, die nix tut. Erstaunlich ist allerdings, dass die Schleife ueberhaupt ausgefuehrt wird, denn jeder halbwegs vernuenftige Compiler wuerde sie einfach weglassen, womit du unendlich viele Durchlaeufe in einer Zeiteinheit haettest.
Bearbeitet von Ringding am 16.05.2002, 19:27

LTD

frecher fratz
Avatar
Registered: Feb 2001
Location: is where it is
Posts: 6334
ein 3d game in vb - http://www.revolution3d.de - da hast ne geile 3d engine und geht sehr flott
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz