INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Extreme Laufzeitkosten durch Dynamic Dispatching?



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

05.12.2012, 15:30
Beitrag #1

Kiesch Offline
LVF-Stammgast
***


Beiträge: 401
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
Extreme Laufzeitkosten durch Dynamic Dispatching?
Hallo ihr wenigen LVOOP Nutzer *BNT zuwink*,

ich habe ein kleines Problem. Wollte mir ein Interpolationstool erstellen und um Rundungsfehlern / Fehlern bei prüfen auf Gleichheit etc. vorzubeugen habe ich mal eine einheitliche Number Klasse erstellt (dachte mir das wäre auch für andere Dinge ganz praktisch), die zweistufig erst über den allgemeinen Kindtyp Float, Signed und Unsigned auf die tatsächlichen Datentypen (U8,U16 etc. pp) als (Enkel) projiziert.

Initialisiert werden kann die Elternklasse "Number" über einen Variant alternativ jede Kindklasse mit dem korrekten Datentyp (U8 mit nem U8 etc. pp; typischerweise dürfte Initialisieren über Variant praktischer sein).

Soweit zur Architektur.

Jetzt habe ich darauf mal einen simplen Entwurf für Addition nachgebildet (es wird festgestellt ob die Datentypen identisch sind, wenn ja, wird einfach auf niederster Ebene die normale Addition durchgeführt. Aktuell ist das noch rudimentär implementiert, so dass ich die Laufzeit für die Kernfunktion addieren überprüfen kann (aktuell werden beliebige Datentypen für identisch gehalten; aber das stört ja nicht so lange die wirklich identisch sind).

Beim Testen (in der Number Klasse das VI "RuntimeTester") der Laufzeit kam dann der Schock. Mit Performanceeinbußen durch den Overhead (mehr Funktionen drumherum, mehr Speicherbedarf) hatte ich ja gerechnet, aber nach dem Tester zu urteilen liegen die Einbußen bei einem Faktor 1000 langsamer (etwa).

   

Und das kann ich mir überhaupt nicht erklären (intern macht der: Arrays mit Zahlen und "Number" Objekten Auswürfeln und dann einmal "normal" addieren und einmal mit der Klassenfunktion und gibt dafür die benötigte Zeit aus).
Hab auch schon rumgespielt mit Ablaufinvarianter Ausführung und höherer Priorität, aber von dem Faktor 1000 kommt man nicht wirklich deutlich weg.

Deswegen meine Frage: Produziert das immer so einen drastischen Overhead? Bin eigentlich beim LVOOP programmieren immer davon ausgegangen, dass ich im Zweifel lieber viele VIs mache als weniger, um die Wartbarkeit einzelner Komponenten besser zu gewährleisten. Muss man davon doch Abstand nehmen und nur Komplexe Dinge in Objekte packen? Und sich doch gedanken um den Zeitverbrauch machen... ?

Gruß Kiesch


Angehängte Datei(en)
0.0 .zip  Intp Tools 2011.zip (Größe: 699,82 KB / Downloads: 369)

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30
Antwort schreiben 


Nachrichten in diesem Thema
Extreme Laufzeitkosten durch Dynamic Dispatching? - Kiesch - 05.12.2012 15:30

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Dynamic Dispatch VI vor Zugriff schützen Kiesch 5 12.257 26.06.2012 08:31
Letzter Beitrag: BNT
  State Machine vs. Dynamic Dispatching Kiesch 4 11.240 12.03.2012 13:34
Letzter Beitrag: Kiesch

Gehe zu: