Autor | Thema: Runtime | | Datum:19.09.02 21:00 
(martin_pohl@msn.com) | |
Hallo!
Ich habe mal eine Frage:
Ist die Runtime von Profan² 7.5 schneller als die von Profan² 5.0?
|
| | Datum:19.09.02 23:47 
(joerse@gmx.de) | |
Hallo Martin,
Ich bin mir nicht ganz sicher, aber ich glaube die 6er Versionen waren
ziemlich langsam und mit 7.0 ist profan wieder schneller geworden.
Allerdings weiß ich nicht, ob schneller oder langsamer als 5.0.
Mein Rechner (450 Celeron, Win98, Profan 7.5) benötigt für folgendes Programm zwischen 3,96 und 4,14 Sekunden.
Cls
NumWidth 5
Declare Loop&,Time&
Let Loop&=4000
Let Time&=&gettickcount
While Gt(Loop&,-1)
Locate 1,1
Print @Sqrt(Loop&),Loop&
Let Loop&=Sub(Loop&,1)
Wend
Print Str$(Div(Sub(&gettickcount,Time&),1000)),"Sekunden"
WaitInput
Ist zwar nur ein sehr grober Test, aber vielleicht können ja mehrere Leute
testen, um zumindest eine Tendenz zu erhalten.
Gruß
Jörg
|
| | Datum:19.09.02 23:55 
(joerse@gmx.de) | |
und gleich der Test mit 5.0:
zwischen 2,86 und 2,98 Sekunden.
Gruß
Jörg
|
| | | Datum:20.09.02 08:07 
(apollo@rw-net.de) | |
Nun ist die Frage: schneller bei welchen Befehlen/Funktionen?
In o.g. Testprogramm werden ja nur 2 mathemat. Funktionen getestet. In Profan 7 wurden zum Beispiel die Stringfunktionen verbessert, in Profan 7.5 die Bereichsoperationen. Da sollten also aktuelle Profan-Versionen um einiges schneller sein.
Hängt also imo von Deinem Anwendungsgebiet und den am häufigsten verwendeten Funktionen ab.
mfG, René
|
| | Datum:20.09.02 08:15 
(galaxy@mrk-soft.de) | |
Ob nun schneller oder nicht, ab 7.0 gibt es in Profan die
Messages, und mit denen lässt sich eine ganze menge anfangen,
gerade in Verbindung mit einer DLL.
Vor allem ist es viel System-Komformer, mit WaitInput
(ober GetMessage), ohne verbrauch von Rechenleistung auf
ein Erreigniss zu warten, und über %UMessage diese dann
auszuwerten.
Ständiges "Pollen", (auslesen eines Wertes", in einer
Schleife ist natürlich auch mögich, verbraucht aber doch
viel System-Resourcen.
Das ganze benötigt natürlich in Profan selber auch etwas
an Zeit, die neuen Funktionen macxhen das aber regelrecht
"fit".
Thorsten
ps: Das PacMan ist in Profan 7.5 geschrieben, doch schon sehr
Rechenintensiv, aber im gegensatz zur Version 5.0 ist keine
veränderung vestzustellen.
|
| | Datum: 20.09.02 09:36 
(rgh-soft@t-online.de) | |
Hallo Jörg und die anderen,
zur Geschwindigkeit der verschiedenen PROFAN-Versionen.
(Version 1.x lasse ich mal außen vor, da diese nur Integers kannte und Version 2 wegen eines Crashes mit Quellcode-Verlust völlig neu geschrieben wurde.)
Ab Version 2 wurde PROFAN von Version zu Version bis zur Version 6 immer etwas optimiert und somit auch immer etwas schneller. (Daß es bei tiefer verschachtelten definierten Funktionen immer mal wieder zu seltsamen Ergebnissen kam, fiel erst sehr spät nur ganz Wenigen auf.)
Bis dahin hatte PROFAN keine Operatoren, sondern auch für die Rechenoperationen nur Funktionen. Ab Version 4.x wurde ein Präprozessor eingebaut, der in gewisser - noch eingeschränkter - Weise Operatoren im Quellcode erlaubte und diese VOR dem Compilieren in die entsprechenden Funktionen übersetzte. Im Interpreter mußte die Übersetzung zeilenweise während der Laufzeit erfolgen, daher wurde der schalter $O eingeführt, um den Präprozessor bei Programmen ohne Operatoren abzuschalten. Dadurch konnte der Tempoverlust im Interpreter vermieden werden. Beim compilierten Programm gab es eh keinen Geschwindigkeitsverlust, da ja - wie erwähnt - die Operatoren VOR dem Compilieren umgewandelt wurden.
Der Wunsch nach "richtigen" Operatoren wurde schließlich so stark, daß ich von meiner ursprünglichen Philosophie abwich und den Ausdruck-Parser von PROFAN zur Behandlung von Operatoren "aufbohrte". Leider hatte ich selbst keine ausführlichen Geschwindigkeitstests gemacht, so daß erst nach Auslieferung von Version 6.5 auffiel, daß die Geschwindigkeit von PROFAN durch dieses Aufbohren gewaltig (!) eingebrochen war. Was bei zeitkritischen Programmteilen blieb, war das Abschalten der Operatoren durch $O-, was aber nicht ganz das alte Tempo wiederherstellte.
Für Version 6.6 schrieb ich daher den Ausdruck-Parser komplett neu und konnte damit wieder an die alte Geschwindigkeit anknüpfen, teilweise sogar noch verbessern. $O- hat im Interpreter nun gar keine Auswirkung mehr und in der Runtime nur eine sehr Geringe. Version 6.6 war im Übrigen die erste Version, die es nur noch für 32 Bit gab. (Die schnellste 16-Bit Version ist somit Version 6.0 bzw. 6.1!)
Dann kam Version 7.0 und lange Strings wurden eingeführt. Und nun passierte es: Der oben angesprochene Bug bei verschachtelten definierten Funktionen fiel einigen Testern auf. Einer der Tester lieferte mir Testprogramme und wertvolle Hinweise, so daß ich iohn tatsächlich nach längerer Suche aufspüren und beheben konnte. Und es passierte etwas Negatives: PROFAN verlor wieder an Geschwindigkeit. Zuerst machte ich die langen Strings dafür verantwortlich, aber das erwies sich dann bei weiteren Experimenten als Trugschluß: Der behobene Bug war der Übeltäter. Also mußte man (vorerst) damit leben. Version 7.0 wirde veröffentlicht.
Natürlich habe ich weiter geforscht und experimentiert und konnte dann in der Folge PROFAN wieder deutlich beschleunigen, so daß PROFAN 7.0e bzw. 7.0f nicht nur weniger Bugs hatte, sondern auch - je nach Testprogramm - bis zu 30% schneller war als 7.0. Daß spezielle Funktionen mit Bereichen um ein Vielfaches (teilweise bei großen Bereichen bis zu 100 mal so schnell) beschleunigt wurden, da ich die internen Funktionen zum Kopieren, Löschen und Verschieben von Speicherinhalten neu schrieb, wurde ja schon erwähnt.
Kurz: Die schnellste 16-Bit-Version ist PROFAN 6.1, aber nur unwesentlich schneller wie Version 5.0.
Bei der 32-Bit-Version wäre es meines Wissens Version 6.6. Und das ist auch einer der Gründe, warum diese Version auch bei Version 7.0 und 7.5 immer noch mit auf der CD ist.
Aber nicht vergessen: Bei verschachtelten definierten Funktionen ist vor Version 7.0 etwas Vorsicht angebracht! Lieber auf mehrere Zeilen aufteilen und Zwischenergebnise in Variablen speichern!
Gruß
Roland
|
|
|