10.01.2011, 08:51
|
tinger
LVF-Grünschnabel
Beiträge: 22
Registriert seit: May 2010
2009
2010
de
Deutschland
|
Geschwindigkeitsproblem: großes array an trigger teilen und sortieren
Die Datenerfassung kann ich nicht so beeinflussen, dass das sortieren überflüssig wird... die Samplerate reduzieren wäre meine Notlösung
|
|
|
12.01.2011, 11:52
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Geschwindigkeitsproblem: großes array an trigger teilen und sortieren
Nach 13 Beiträgen ist es langsam Zeit, daß mal einer den ultimativ überzeugenden Tipp gibt, und dieser ist:
Für das Sortieren die Funktion "1D Array rotieren" verwenden.
OK, das Programmierer-Gefühl sagt, daß so eine Rotation im Array eine zeitraubende Angelegenheit ist. Man sollte sich aber von solchen Vorurteilen nicht leiten lassen, sondern einfach mal die Messergebnisse zur Kenntnis nehmen.
Hier im Beispiel dauert die Rotation eines 6000000-Array gerade mal 3µs:
|
|
|
12.01.2011, 13:19
|
tinger
LVF-Grünschnabel
Beiträge: 22
Registriert seit: May 2010
2009
2010
de
Deutschland
|
Geschwindigkeitsproblem: großes array an trigger teilen und sortieren
Also erstmal Danke an unicorn und Lucki fürs Gedanken machen!
Ihr habt auch beide Recht. An das "sortieren" durch rotieren habe ich noch nicht gedacht und eigentlich wollte ich die Werte auch physikalisch richtig sortieren. Trotzdem wäre es vielleicht eine Notlösung, die man ausprobieren könnte. Also Danke für diesen Hinweis!
Der Datenstrom soll kontinuierlich sein.
Das speichern der Daten ist auf jeden Fall eine Engstelle (auch wenn hier noch etwas gerechnet wurde und die Datenmenge dann nicht mehr so groß ist). Gespeichert wird aber nur optional und dann für begrenzte Zeit, so dass die Queues das abfangen. D.h. das ist nicht die Engstelle die jetzt allgemein Probleme macht.
|
|
|
12.01.2011, 18:12
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Geschwindigkeitsproblem: großes array an trigger teilen und sortieren
' schrieb:Bei der Rotation hast Du aber die "falscher" Datenpunkte am Ende des umsortierten Arrays.
Ich habe mich an die Beispiele in #6 von tinger gehalten. Schrotti hat dazu in #7 zu den Beispielen passend die Lösung präsentiert, von der tinger aber aber sagt, so sei das nicht gewollt. Und statt das Ergebnis von Schrotti zu korrigieren, was das Einfachste gewesen wäre und definitiv Klarheit gebracht hätte, wird irgendwas drum herum erklärt, was ich nicht verstehe. Also wenn es so weiter geht, dann wird der Thread noch lang. Ich liebe solche Threads, wo sich der Frager mit Informationen immer so bedeckt wie möglich hält - angefangen beim fehlenden VI.^_^
|
|
|
12.01.2011, 18:12
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Geschwindigkeitsproblem: großes array an trigger teilen und sortieren
' schrieb:Bei der Rotation hast Du aber die "falscher" Datenpunkte am Ende des umsortierten Arrays.
Ich habe mich an die Beispiele in #6 von tinger gehalten. Schrotti hat dazu in #7 zu den Beispielen passend die Lösung präsentiert, von der tinger aber aber sagt, so sei das nicht gewollt. Und statt das Ergebnis von Schrotti zu korrigieren, was das Einfachste gewesen wäre und definitiv Klarheit gebracht hätte, wird irgendwas drum herum erklärt, was ich nicht verstehe. Also wenn es so weiter geht, dann wird der Thread noch lang. Ich liebe solche Threads, wo sich der Frager mit Informationen immer so bedeckt wie möglich hält - angefangen beim fehlenden VI.^_^
|
|
|
12.01.2011, 18:12
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2011 18:12 von schrotti.)
|
|
|
12.01.2011, 19:26
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2011 19:41 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Geschwindigkeitsproblem: großes array an trigger teilen und sortieren
' schrieb:Ja, da habe ich dich wirklich falsch verstanden.
Wieso falsch verstanden? Du hast die Beispieldaten mit Beispiel-Ergebnisse für bare Münze genommen, ewas Anderes konntest Du doch gar nicht tun. Ein ganz andere Frage, die aber damit nichts zu tun hat, ist, ob deine Löung die gewünschte Perfomance bringt.
Es gibt ja bei diesen Daten mit dem Trigger irgendwo in der Mitte nur 2 Möglichkeiten:
Enweder: Die Daten sind so angeordnet wie sie aufgenommen wurden. Dann sind sie bereits zeitlich richtig sortiert und jedes umsortieren zerstört die zeitlich monotone Reihenfolge.
Oder: Das Datenarray ist ein Rinpuffer. Unmittelbar nach dem Trigger (rechts davon, höherer Index) ) ist der älteste Wert, der vor dem Triger befindlicher Wert ist der neueste. Dann kann man das Array durch innere Rotation in die zeitlich monotone Reihenfolge bringen. Davon war ich ausgegangen.
|
|
|
| |