Nachricht Nummer :310 Uebertragungszeit:1 min Originalautor :4-TEA-2@MULI.ZER Originalbetreff :Lattice vs GFA Erstellungsdatum :26.05.90 19:00 High! Herbert, ein Physikstudent, der im Rahmen seiner Diplomarbeit ein sehr rechenintensives Programm schreibt, hat mir letztens demonstriert, daß GFA-Basic-Compiler 3.5 bei scheinbar allen mathematischen Funktionen _viel_ schneller ist als Lattice-C 5.04. Als angehender C-Programmierer, der grade seine letzten Brücken zu Basic abgebrochen hat, glaubte ich natürlich meinen Stolz verletzt und nahm das Mathe-Benchmarking in die eigene Hand. Das Ergebnis war wirklich frustrierend: keine der Lattice-m-Libraries konnte es mit GFA aufnehmen, noch nicht einmal die FFP-Routinen, die laut Herberts Aussage auch noch viel zu genau sind, um etwas vernünftiges damit anzufangen. Selbst nach Ausprobieren aller möglichen und unmöglichen Compiler-Optionen (-O macht einiges noch langsamer!?), waren die Laufzeiten der Lattice-kompilierten Programme immer noch Mehrfache der GFA-Laufzeiten. Sogar der GFA-Interpreter liefert oft bessere Werte! Woran liegts? Haben die GFA-Programmierer einen prozessor-internen Numbercruncher entdeckt, der John Toebes verborgen blieb? Cya, 4-tea-2. Nachricht Nummer :338 Uebertragungszeit:1 min Originalautor :O.BARTHEL@A-LINK-H.ZER Originalbetreff :Warum Lattice-Math so lahm ist Erstellungsdatum :31.05.90 00:15 Wenn Du Dir einmal die Mühe machst, die "Source" Directory des Compilers zu untersuchen, wirst Du auch die Interface-Routinen zwischen den Lattice-Mathematikfunktionen und den Amiga Libraries entdecken. Und da liegt dann auch der Hund begraben. Das erzeugte Programm öffnet die Mathematiklibraries nämlich nicht beim Programmstart, sondern erst, sobald die erste Mathematikfunktion aufgerufen wird (!). Das heißt für den Interfacecode: 1) Testen, ob die Library schon offen ist (TST.L MathTransBase) 2) Im Falle des Falles zur Öffnungsroutine springen (BRA.L OpenLib) 3) Danach die Funktion ausführen. Lustig, nicht? Da werden mit einem Test und einem langen Branch alle Vorteile der Libraries zunichtegemacht. Wir haben das Problem übrigens dadurch gelöst, indem wir den Interface- code umgeschrieben haben. Jetzt werden die Libraries gleich beim Programmstart geöffnet und die überflüssigen Branches aus dem Interface- code sind rausgeflogen, die Variablen werden jetzt nur noch über den Stack geschwungen und die Library-Funktion wird aufgerufen. Manche wollen Edelstein, andere Dynamit ... Olsen.