Hab mal den Vorschlag ausprobiert in der For Schleife erst zufallszahlen zu erzeugen die ich addiere. Wie bereits vermutet wird dann die Laufzeit im wesentlichen durch die Erzeugung der Zufallszahlen bestimmt und nicht mehr durch die Addition (bei der Elementaren Addition). Für die "Number" Klasse wäre das natürlich noch Laufzeitintensiver (da die auch beim Initialisieren einer Nummer länger braucht als für das reine Zahlenauswürfeln).
P.S: Bin schon wieder auf ne Praktische Anwendung dafür gestoßen, neben der Tatsache, dass man da nette Sicherheitseinstellungen implementieren könnte (Überlaufcheck, Konservierung von Integers sofern möglich) - man könnte damit vernünftig und zu großen Aufwand die Rechenoperationen auf Vektoren und Matrizen erweitern.
Wie auch immer, das Hauptproblem steht also immer noch: Wie kriege ich den Rechner dazu mit sowas performant umzugehen? Ich komm aktuell an dem Rechner hier etwa auf ne Laufzeit von einer Sekunde für 100.000 Number Additionen. Das sind immerhin 10Mikrosekunden pro Addition. Der Rechner dürfte 3GHz haben - macht also ganz grob übern Daumen immerhin 30k Rechenzyklen pro Rechenoperation.
Das ist nicht wirklich befriedigend. Gerade da ich die Operationen nunmal so Elementar wie möglich definieren muss um das auch wirklich nützlich zu machen...
Frage daher auch: Kann das überhaupt schneller gehen?
Für mich stellt sich der Fall so dar:
Der reine Aufruf des VIs scheint enorm Zeit zu brauchen (und macht vermutlich letztlich die Laufzeit aus die ich sehe). Das wäre soweit nicht weiter schlimm, wenn ich beliebige viele davon erzeugen könnte und dann parralel arbeite (der Aufruf an sich dürfte ja nicht wirklich Rechenintensiv sein denke ich).
Simpel gesagt: Ne Laufzeit von 10Mikrosekunden wäre okay, wenn ich dafür 1000 Instanzen davon gleichzeit parrallel aufrufen kann (und somit Effektiv im Mittel alle 10ns eine Rechenoperation abschließe).
Nur wie kriege ich das dahin? Wie schon gesagt haben meine bisherigen Versuche der Parrallelisierung nichts signifikantes gebracht (mit gutem Willen vielleicht um nen Faktor 2 schneller).
Ich teste mal weiter.
*edit*
Anmerkung: Theoretisch würde ich vermuten, dass Ablaufinvariante Ausführung mit vorbelegter Kopie am schnellsten ist; allerdings steht mir das wegen dynamic dispatching nicht zur Verfügung.
Achja und laut NI:
Zitat:SubVI-Overhead
Wenn Sie ein SubVI aufrufen, ist damit ein bestimmter Overhead verbunden. Dieser Overhead ist ziemlich gering (im zweistelligen Mikrosekundenbereich), besonders im Vergleich zum I/O- und Anzeige-Overhead, der im zweistelligen Millisekundenbereich liegen kann. Trotzdem kann sich dieser Overhead in manchen Fällen summieren. Wenn Sie beispielsweise ein SubVI 10.000 Mal in einer Schleife aufrufen, kann der Overhead die Ausführungsgeschwindigkeit bedeutend beeinträchtigen. In diesem Fall ist es ratsam, die Schleife im SubVI einzubetten.
Das passt also grundsätzlich zu den Zeiten die ich messe. Heist für mich auch, dass die Lösung wirklich nur in parrallelisierung liegen kann.