• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Ausführungszeiten

argus Portal

Freund/in des Forums
Hallo

Gibt es eine Auflistung des jeweiligen Zeitbedarfs verschiedener Operationen ? Ich muss für ein variables
Schleifenkonstrukt, aus dem heraus versch. Funktionen aufgerufen werden, den Zeitbedarf im Vorraus bestimmen. Wenigstens näherunsgweise. Mit "variabel" meine ich, das ich vorher nicht weiss, wie oft die
Schleife und ihre Unterschleifen durchlaufen werden. Das ist situationsabhängig.

Was "dauert" z.b. der Aufruf einer Funktion ? Das ist ja immer mit einem gewissen Overhead verbunden.
(Ich meine nicht die Zeitverzögerungen die einige lsl-Funktionen aufweisen. Zumal man die ja in der wiki nachschlagen kann)

Was dauert eine Multiplikation mit float-werten usw.


Gruss
 
So genau kann man das leider nicht sagen mit der Zeit, da Scripts leider nicht kontinuierlich abgearbeitet werden auf dem Server.

Scripte in SL werden in Bytecode kompiliert, also "ausführbarer Maschinencode für virtuelle Maschinen", mehr oder weniger. Kompiliert man ein Script in Mono wir daraus dann eben CLI-Bytecode.
(Mono ist in der Ausführung ca. 40 bis 50 mal schneller als LSO, ganz nebenebei). Dieser Bytecode wird dann in viele kleine Schnipsel zerlegt, zwischen die dann jeweils eine Stop-Marke eingefügt wird. Wobei diese Schnipsel aber nicht direkt mit den Events und Funktionen zusammenhängen müssen, ein Event oder eine Funktion oder auch ein Loop kann durchaus auch aus sehr vielen dieser Schnipsel bestehen. Das entscheidet der Compiler "willkürlich"(mit Optimierungs-routinen). Scripte werden so nicht "am Stück" abgearbeitet, sondern immer nur in diesen Bytecode-Schnipseln. Also in kleinen Happen. Dazwischen werden dann von der Mono-Engine die Schnipsel anderer Scripts verarbeitet.

Ist viel Lag auf dem Sim bzw. wird im Frame viel Rechenzeit für andere Aufgaben (z.B. Physikberechnungen) verbraucht, und steigt die Frame-Zeit des Servers über 22ms oder so, dann wird die Ausführung der Scripts sogar ganz angehalten, es werden keine weiteren Schnipsel mehr abgearbeitet. Erst im nächsten Frame des Servers wird dann das nächste Script-Schnipsel, das an der Reihe ist, weiter bearbeitet. Und Steht ein TP des Scripts an, dann merkt sich der Server an welcher Stelle der Script-Schnipsel er gerade steht und kopiert das zusammen mit den anderen Daten und den belegten Variablen in ein Archiv, das er an den neuen Server schickt, der das dann wieder entpackt und in die virtuelle Maschine lädt. So dass sich hier einiges an Verzögerung in der Laufzeit ergeben kann.

In SL kann man daher leider nicht wirklich so programmieren, wie du das gern machen würdest (d.h. über konkrete Laufzeiten) da so z.B. ein Loop oder eine Funktion oder auch nur eine simple Float-Multiplikation nicht immer die selbe Zeit braucht um abgearbeitet zu werden. Es kann sein, dass das in 0.01ms passiert - aber es kann auch sein, dass z.B. der identische Loop eben über 0.1ms braucht. Mehr als 10 mal so viel Zeit. Du solltest daher die Scripte also nicht als "einfache Ablaufprogramm" sehen, sondern eher als "Endliche Automaten" (http://de.wikipedia.org/wiki/Endlicher_Automat), d.h. du musst das konkrete Verhalten des Scripts vor allem über die Events und eben über "Zustandsvariablen" steuern. Etwa indem du dich an einer Zeitmarke (über llGetTimestamp, wenn man Zeitpunkte mit Millisekunden braucht oder llGetUnixTime, wenn Sekunden reichen) orientierst.

Was genau willst du denn eigentlich machen?
 
Danke für diese interessanten Erläuterungen. Wieder was dazugelernt :)

Im Moment behelfe ich mir durch eine Zeitmessung beim Script-Start. Das ist aber eine Notlösung, weil nach jeder Änderung der Einstellungen erstmal diese Messung fällig ist.

Ich arbeite an einer "Partikelfläche". Die Zeitmessung läuft ohne Partikel freizusetzen; durchläuft ansonsten aber alle Bereiche, die nötig sind. Danach kann ich entscheiden, welche der Einstellungen korrigiert werden müssen.
 

Users who are viewing this thread

Zurück
Oben Unten