Benchmark : iVar vs. LOCAL

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Benchmark : iVar vs. LOCAL

Beitrag von AUGE_OHR »

Roger hat das Beispiel hier veröffentlicht http://bb.donnay-software.com/donnay/vi ... f=7&t=1806
ich hab nicht gedacht das es so viel ausmachen würde :shock:
gruss by OHR
Jimmy
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Benchmark : iVar vs. LOCAL

Beitrag von Herbert »

Notice that the loops that only access locals run 4 times faster.
Lokale Variablen anstelle von Klassenvariablen sind in Jimmiy Beispiel 4 mal schneller!

Tatsache ist, dass eine Referenz nach aussen immer langsamer ist, bei dir ist es nun x2:=aPoints[j].x anstelle von x2=::points[j].x Vorgängig wurde die lokale Variable aPoints defniert mit der Zuweisung aPoints:=::points. Genial.

Ich hatte einmal die Ehre beim Raumfahrtzentrum eine Stage zu machen mit Vektorprogrammierung als Thema (mit Fortran). Da war genau dies die Mission. Alles, was in Loops gerechnet wird, muss nur mit Locals gehen. Vorher zuweisen. Ebenso Funktionsaufrufe auslagern, so weit möglich.
Was früher beim Aufbau von Browse entscheidend war, heute macht man hoffentlich Queries, ist weiterhin bei Berechnungen sehr wichtig.

Schaut mal eure Codes an und ihr werdet Wunder erleben.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Benchmark : iVar vs. LOCAL

Beitrag von AUGE_OHR »

Herbert hat geschrieben:
Notice that the loops that only access locals run 4 times faster.
Lokale Variablen anstelle von Klassenvariablen sind in Jimmiy Beispiel 4 mal schneller!

Tatsache ist, dass eine Referenz nach aussen immer langsamer ist, bei dir ist es nun x2:=aPoints[j].x anstelle von x2=::points[j].x Vorgängig wurde die lokale Variable aPoints defniert mit der Zuweisung aPoints:=::points. Genial.
ich hatte so was auch noch nicht gesehen und war skeptisch was es tatsächlich im Gesamten ändern würde.

Code: Alles auswählen

alt :
METHOD DemoDlg:FindPoint(r1,r2)

      FOR i := 1 TO ::PointsCount
            ...
               cr := ::SolveCircle(::Points[r1].x,::Points[r1].y,;
                                   ::Points[r2].x,::Points[r2].y,;
                                   ::Points[ i].x,::Points[ i].y )

neu :
LOCAL aPoints      := ::points
LOCAL nPointsCount := ::PointsCount

      FOR i := 1 TO nPointsCount
            ...
               cr := ::SolveCircle(aPoints[r1].x,aPoints[r1].y,;
                                   aPoints[r2].x,aPoints[r2].y,;
                                   aPoints[ i].x,aPoints[ i].y )
es wurde also in jeder Method eine LOCAL für die (überall sichtbare) iVar verwendet was zwar mehr Codezeilen sind aber der Effekt ist enorm =D>

hier noch die Demo von Roger
LOCALOOP.ZIP
Xbase++ Source
(450 Bytes) 186-mal heruntergeladen
gruss by OHR
Jimmy
Antworten