LabVIEWForum.de
3.LVF-Rätsel - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: Sonstiges (/Forum-Sonstiges)
+--- Forum: Smalltalk (/Forum-Smalltalk)
+---- Forum: Funstuff (/Forum-Funstuff)
+---- Thema: 3.LVF-Rätsel (/Thread-3-LVF-Raetsel)

Seiten: 1 2


3.LVF-Rätsel - jg - 03.04.2007 18:14

Hallo, Leute,

hier die Ergebnisse (Tests mit verschieden langen Strings, verschiedenen Ausschnittslängen) haben ein Unentschieden ergeben. Der Unterschied zwischen ABCCAS4.vi, ABCCAS5.vi und Rätsel3.vi lag selbst nur im Millisekundenbereich und war auch nicht immer gleich. Um Unterschiede aufzuspüren, habe ich den Sourcecode jeweils in eine For-Schleife mit 50000 Wiederholungen gelegt und blind mal einen langen (80 Zeichen) String eingegeben. Ausführungszeit lag auf meinem Rechner bei allen VI's ungefähr bei 500 ms.

Speichermäßig braucht Raetsel3.vi aber etwas mehr.

Jetzt aber die erste kleine Verbesserung von Eugens Vorschlag:

[attachment=5979]

Interessanterweise bringt die Build-Array Funktion nach ersten Versuchen einen Geschwindigkeitsgewinn von ca. 10%, Ausführungszeit lag hier bei ca. 450 ms.

Hiermit genug fürs Erste.

MfG, Jens

So, doch noch ein Nachtrag:
Habe gerade noch mal als Extremfall einen Suchstring der Art "AAA...AAA", also viele A's getestet. Bei so einem String fällt Eugens Version doch deutlich ab. Hier kann offensichtlich die "Search and Replace String"-Funktion durch die Option ReplaceAll einen Vorteil ausspielen.


3.LVF-Rätsel - eg - 03.04.2007 20:00

@Jens, vielen Dank für deine Bemühungen.

Eugen


3.LVF-Rätsel - Mr.T - 03.04.2007 20:27

Ja, echt Jens Danke!

Vielleicht hast Du noch Lust, mit ein paar gezippten Bildern zu zeigen, wie Du diesen Montor in Verbindung mit Forschleife verwendet hast - für mich und alle interessierten! THX.

Hmmm, mich wundert, dass das "heraussetzen" der Konstanten aus der Schleife nichts bringt... Man hat mir mal gesagt - und ich finde es immernoch einleuchtend - wenn die Konstanten "draussen" sind, müssen sie nicht bei jedem Schleiendurchlauf neu erstellt werden, also muss es performance bringen.
Ich habe mir das dan in C so vorgestellt:

for(int i=0;i<300;i++)
{
Rueckgabe=myfunc();
}

myfunc()
{
int k=30;
int j=21;
...
//tu was
...
}

als "schlecht" Variante und:

int k=30;
int j=21;
for(int i=0;i<300;i++)
{
Rueckgabe=myfunc(k,j);
}

myfunc(int k, int j)
{
...
//tu was
...
}

als "gute" ...hmmmmm....mir fällt gerade nicht ein, wie man nochmal die Variablen im Funktionsaufruf speichert, ich klaube das gingmit static...oder war´s const...egal, Ihr wisst, was ich meine..gelle?

Warum bringt´s nichts???
Gruß!


3.LVF-Rätsel - eg - 03.04.2007 20:43

@Mr.T. habe ich am Anfang auch gedacht, aber dann habe ich mehrere Beispiele von NI angescahut, da sind die Konstanten oder Controls, die sich nicht ändern nicht ausserhalb der Schlefe platziert. Also habe ich gedacht, es hat evtl. seine Gründe(sieht auch übersichtlich aus). Also mache ich es nicht mehr, ich mache meine in die Schleife.

Eugen

P.S. es ist kein C, sondern C++. In C müssen Funktionen vor dem Aufruf definiert werden.


3.LVF-Rätsel - Mr.T - 03.04.2007 20:50

' schrieb:P.S. es ist kein C, sondern C++. In C müssen Funktionen vor dem Aufruf definiert werden.

Hehe, ja hast recht - aber nicht, weil ich die nicht vorher deklariert habe, sondern weil ich in der for(hier;Wink eine Variable definiert habe.
Soweit ich weiss, muß der Funktionsprototyp auch in C++ voer dem Aufruf bekanntgegeben werden - wenn ich drüber nachdenke bin ich mir sogar 100%-ig sicher.

Gruß


3.LVF-Rätsel - jg - 03.04.2007 21:07

Danke für das LobRolleyes

@Mr.T: Nur zum Verständnis (auch wenn ich glaube, dass du schon verstanden hast), ich habe bei allen Test noch im BD eine FOR-Schleife eingefügt:
[attachment=5984]

Sonst könnte man in Windows gar keinen Zeitverlauf messen. Viele Schleifendurchläufe, um ein passablen Durchschnitt zu erhalten. Bin übrigens zuletzt auch auf deinen ersten Vorschlag mit Sequenz und Tick-Count-Befehlen zurückgekommen, ist ja auch die Standard-Möglichkeit, um Zeitdauern in LV abzuschätzen.

Zum "Profile Performance and Performance" Manager gibt's aus meiner Sicht nicht viel zu erzählen. Einfach über das Pulldown-Menü öffnen, gewünschte Häckchen setzen, dann Start-Button drücken. Dann habe ich die zu untersuchenden VI's einfach mehrfach ausgeführt, teilweise auch über den Button "Run continously". Am Schluss Stop Button drücken.

Ach ja, zu den Konstanten ausserhalb der Schleife, vielleicht ist der LV-Compiler besser geworden. Aber dein Vorschlag müßte auf jeden Fall Vorteile bringen, wenn statt einer Konstanten ein Frontpanel-Element wäre, also im Prinzip hast du schon recht. (Edit: Jetzt war Eugen mal wieder schneller mit der Antwort).
Ich konnte aber einfach keine signifikanten Unterschiede feststellen.

Ach ja, durch aufwendige Abbruchbedingungen kann die Performance der hier vorgestellten Lösungen in Spezialfällen noch verbessert werden. Eugens Version lässt sich besonders bei der Suche nach nur wenigen Buchstaben deutlich beschleunigen. Die For-Schleife muss dann natürlich durch eine While-Schleife ersetzt werden. Auch mein Vorschlag kann durch komplizierte Abbruchbedingungen in Sonderfällen noch etwas beschleunigt werden, aber der Source-Code wird dann schon sehr unübersichtlich. Also deshalb mal keine Screenshots.

MfG, Jens