spekulation: performance
Verfasst: 11. April 2007, 21:21
das "programieren" in reaktor und "echter" sprachen untescheidet sich ja (neben der grafischen komponente) hauptsächlich darin, das reaktor ne virtulle maschine (VM) bereiststellt, die aufwendiges "externes" (=non-echtzeit) kompilieren "überflüssig" macht.
das bietet natürlich jede menge vorteile, insbesondere für leutz die ihre sachen "heuristisch" zusammenschustern. die jederzeitigige überprüfbarkeit eines gedankens, bzw. das "on-the-fly-debuggen" sind ein echter segen.
auch die relative großbausteinigkeit (prim-ebene) oder besser: universialität der module dürfte in der praxis fast ausshclisslich eher begrüßt als als nachteilig empfunden werden.
demgegenüber steht zwnagsläufig ne schlechtere performace als bei "massgeschneiderten" dingen: ungenutzte ein/ausgänge (oder optionen - die intern ja auch nur "switches" /resp. derzeit ungenutzte alternativ-"module" sind) bleiben defacto erhalten, auch wenn sie temporär blind sind. mit andern worten: sie verbrauchen mindestens speicher. denn alles was "da" ist, nimmt raum, egal ob es was sagt oder schweigt.
in ner "richtigen" sprache wird "extern" kompiliert und nach diesem vorgang sind bestimmte sachen, für die maschine nicht nur nicht sichtbar sondern defacto auch tatsäschlich nicht mehr vorhanden. bspw. könntest du in C hinter jeder zeile "nutz-code" nen romanlangen kommentar schreiben (jedes zeichen benötigt mindestens ein bit! - das kann sich also summieren) und nach dem compilen wäre dieser tatsächlich nicht mehr (in der "maschinen-version", sprich: deiner .exe) vorhanden.
ne VM ist natürlich grundsätzlich anders konzipiert: hier gehts nicht um optimale ergebnisse, sondern um gröstmögliche kompatibilitäten. es wird also im vorraus jede menge offener speilraum gelassen um für größtmögliche enventualitäten gerüstet zu sein. bei nichtnutzung des speilraums tritt mindestens der seiteneffekt unoptimierten, d.h. das heisst nichtbenutzen aber trotzalledem vorhanden sein müssenden, speichers ein. um diesen unerwünschten effekte so weit wie möglich herr zu werden, glaube ich schon, das NI dahingehend größtmögliche soragfalt hat walten lassen - bspw. verwalten viele module ihren bedarf dynamisch (das SVA klagt erst bei neuen arrays/snaps mehr speicher ein, jegliche form von "weichen" - router, selector... werden per default in ihrer "spar-version" aufgerufen, acuh die beshränkung auf 40(?) in/outs dürfte dahingehend begründet sein, und dutzend weitere sachen.
trotzdem bleibt ne VM wie das reisegepäck der meisten frauen: obwohl fest steht, das man nen natur-urlaub machen will, wird trotzdem vorsichtshalber der halbe "party"-kliederschrank eingetütet. nun, im auto frisst das nur "speicher", beim echten rucksackschleppen is das schon unangehnemer.
das beispeil hinkt. die meisten module dürften schon "eventualitäten-durchdachter" als die meisten rücksäcke sein. trotzdem verbleibt n "lieber mehr als weniger" kerngedanke. und das ist auch gut so (bspw. brauchte ich neulich n order-modul mit 4 ausgängen, hier war also der gegensätzliche fall zu beobachten).
was ich sagen will ist:
echtzeit-kompilieren ist ein wahrer segen. hochperformance wird aber nur durch "extern" kompilierung erreicht. warum alos nicht beide sachen verbinden?
in der "arbeitsversion" wird nach wie vor in echtzeit kompiliert, diese benötigt die VM. Ist diese zufriedenstellend und bugfrei kann ich sie in echte machienensprache übersetzen lassen - natürlich non-echtzeit, aber heirbei wird gründlich ausgemistet: alles was die die "maschine" nicht braucht, wie kommentare, unbenutze ports, "optionen"-module, vergessene test-routinen (bspw. endziel numeric ohne echte weiterverdrahtung), ja, die ganze struktur-gui (die der maschine ebenfalls völlig egal ist)... wird konseqeunt rausgescmissen. in die exe gehört ausshliesslich "nutz"-code.
solltrest du nach dem "echten" kompilieren unstimmigkeiten festtellen - hast du deine arbeitsversion und sofern der compiler nich spinnt, findets du den fehler dort, fixt ihn dort und kompilierst erneut.
das bietet natürlich jede menge vorteile, insbesondere für leutz die ihre sachen "heuristisch" zusammenschustern. die jederzeitigige überprüfbarkeit eines gedankens, bzw. das "on-the-fly-debuggen" sind ein echter segen.
auch die relative großbausteinigkeit (prim-ebene) oder besser: universialität der module dürfte in der praxis fast ausshclisslich eher begrüßt als als nachteilig empfunden werden.
demgegenüber steht zwnagsläufig ne schlechtere performace als bei "massgeschneiderten" dingen: ungenutzte ein/ausgänge (oder optionen - die intern ja auch nur "switches" /resp. derzeit ungenutzte alternativ-"module" sind) bleiben defacto erhalten, auch wenn sie temporär blind sind. mit andern worten: sie verbrauchen mindestens speicher. denn alles was "da" ist, nimmt raum, egal ob es was sagt oder schweigt.
in ner "richtigen" sprache wird "extern" kompiliert und nach diesem vorgang sind bestimmte sachen, für die maschine nicht nur nicht sichtbar sondern defacto auch tatsäschlich nicht mehr vorhanden. bspw. könntest du in C hinter jeder zeile "nutz-code" nen romanlangen kommentar schreiben (jedes zeichen benötigt mindestens ein bit! - das kann sich also summieren) und nach dem compilen wäre dieser tatsächlich nicht mehr (in der "maschinen-version", sprich: deiner .exe) vorhanden.
ne VM ist natürlich grundsätzlich anders konzipiert: hier gehts nicht um optimale ergebnisse, sondern um gröstmögliche kompatibilitäten. es wird also im vorraus jede menge offener speilraum gelassen um für größtmögliche enventualitäten gerüstet zu sein. bei nichtnutzung des speilraums tritt mindestens der seiteneffekt unoptimierten, d.h. das heisst nichtbenutzen aber trotzalledem vorhanden sein müssenden, speichers ein. um diesen unerwünschten effekte so weit wie möglich herr zu werden, glaube ich schon, das NI dahingehend größtmögliche soragfalt hat walten lassen - bspw. verwalten viele module ihren bedarf dynamisch (das SVA klagt erst bei neuen arrays/snaps mehr speicher ein, jegliche form von "weichen" - router, selector... werden per default in ihrer "spar-version" aufgerufen, acuh die beshränkung auf 40(?) in/outs dürfte dahingehend begründet sein, und dutzend weitere sachen.
trotzdem bleibt ne VM wie das reisegepäck der meisten frauen: obwohl fest steht, das man nen natur-urlaub machen will, wird trotzdem vorsichtshalber der halbe "party"-kliederschrank eingetütet. nun, im auto frisst das nur "speicher", beim echten rucksackschleppen is das schon unangehnemer.
das beispeil hinkt. die meisten module dürften schon "eventualitäten-durchdachter" als die meisten rücksäcke sein. trotzdem verbleibt n "lieber mehr als weniger" kerngedanke. und das ist auch gut so (bspw. brauchte ich neulich n order-modul mit 4 ausgängen, hier war also der gegensätzliche fall zu beobachten).
was ich sagen will ist:
echtzeit-kompilieren ist ein wahrer segen. hochperformance wird aber nur durch "extern" kompilierung erreicht. warum alos nicht beide sachen verbinden?
in der "arbeitsversion" wird nach wie vor in echtzeit kompiliert, diese benötigt die VM. Ist diese zufriedenstellend und bugfrei kann ich sie in echte machienensprache übersetzen lassen - natürlich non-echtzeit, aber heirbei wird gründlich ausgemistet: alles was die die "maschine" nicht braucht, wie kommentare, unbenutze ports, "optionen"-module, vergessene test-routinen (bspw. endziel numeric ohne echte weiterverdrahtung), ja, die ganze struktur-gui (die der maschine ebenfalls völlig egal ist)... wird konseqeunt rausgescmissen. in die exe gehört ausshliesslich "nutz"-code.
solltrest du nach dem "echten" kompilieren unstimmigkeiten festtellen - hast du deine arbeitsversion und sofern der compiler nich spinnt, findets du den fehler dort, fixt ihn dort und kompilierst erneut.