13.12.2010, 09:19
(Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2010 09:21 von Matze.)
Beitrag #1
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Pufferzuweisung bei "Nach Namen aufschlüsseln"
Hallo,
gibt es eine Möglichkeit, die Pufferzuweisung bei "Nach Namen aufschlüsseln" / "Unbundle by Name" zu verhindern? Also so, dass ich direkt mit den Werten arbeite?
Ich habe viele Messwerte in einem Cluster und möchte nicht, dass laufend beim Auslesen die Messwerte im Speicher kopiert werden.
Eine Inplace-Elementstruktur bringt hier nichts, da ich die Werte nur lesen möchte. Und ob das mit Datenreferenzen geht, weiß ich nicht. Wenn ja, wäre ein kleines Beispiel nett.
Grüße
|
|
|
13.12.2010, 09:23
Beitrag #2
|
|
|
13.12.2010, 09:36
(Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2010 09:47 von Matze.)
Beitrag #3
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Pufferzuweisung bei "Nach Namen aufschlüsseln"
Hallo
' schrieb:Ist das eine konkrete Frage weil du an einer Stelle Performance/Speicher Probleme hast?
Ja, ist es. Ich erfasse Messwerte, die ich in einem Cluster ablege (da sind auch noch einige andere Daten enthalten und ohne Cluster sinkt die Übersicht aufgrund vieler Drähte).
Mein Speicher läuft z.T. voll bei vielen Messwerten, da ich in verschiedenen SubVIs "Unbundle By Name" nutze. Über das Pufferzuweisungs-Tool sieht man, dass Speicher zugewiesen wird.
Das tritt bei Klassen-Daten und bei normalen CLustern auf:
Edit: Ich verwende mittlerweile einige Konstrukte wie dieses, in der Hoffnung, beim fortlaufenden Aufruf (Schleife, die das immer zyklisch aufruft) wird kein neuer Speicher zugewiesen:
|
|
|
13.12.2010, 10:10
Beitrag #4
|
|
|
13.12.2010, 14:07
Beitrag #5
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Pufferzuweisung bei "Nach Namen aufschlüsseln"
Hallo Christian,
danke. Dass die Inplace-Struktur auch in der Art etwas bringt, wusste ich noch nicht. Ich dachte, man müsse lesen und Änderungen schreiben.
Was ich nicht verstehe: Wieso soll die Struktur keine CPU-Last benötigen? Du liest die Werte aus und genau dann wird ebenfalls Speicher zugrwiesen, würde ich sagen. Spätestens dort, wo du sie aus der Inplace-Struktur heraus führst.
|
|
|
13.12.2010, 14:17
Beitrag #6
|
|
|
13.12.2010, 17:04
Beitrag #7
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Pufferzuweisung bei "Nach Namen aufschlüsseln"
Und wo genau befindet sich nun das Messwert-Array?
Oder wärst du so nett, mir die Stelle zu zeigen, wo du die Werte zuweist und ausliest, so als ganz kleine Demo?
Diese Daten-Referenzen sind mir noch nicht eingeleuchtet.
|
|
|
13.12.2010, 21:57
Beitrag #8
|
oenk
LVF-Stammgast
Beiträge: 361
Registriert seit: May 2005
>= 7.1
2004
EN
3018
Schweiz
|
Pufferzuweisung bei "Nach Namen aufschlüsseln"
Das Messwert Array schreibe ich zyklisch auf Festplatte, da wirst du um einen direkten Zugriff nicht drumrum kommen. Wie geschrieben, bei mir war es einen Ausschnitt aus meinem generischen Ringpuffer.
Wahrscheinlich reden (schreiben?!) wir aneinander vorbei und/oder ich hab dich falsch verstanden. Da ich deinen Code und den gesamten Aufbau nicht kenne, habe ich mich darauf bezogen, dass du immer wieder auf deine "Statisch.xxxx", "Dynamisch.yyy" Parameter zugreifen möchtest die mehr oder minder skalare Grössen sind (ein Array mit wenigen Einträgen bezeichne ich hier mal als Skalar, so wie HF-Entwickler Signale mit mehrere MHz als nervösen Gleichstrom bezeichen). Liest du bei jedem Aufruf von denen deine Messwerte mit auf, hast du grossen Kopieraufwand.
Du hast geschrieben, dass du in mehreren SubVIs den Cluster zerlegst und da bin ich davon ausgegangen, dass du auch in diesen deine Messwerte auch immer mit "unbundel"st. Rufst du in deinen SubVIs aber die Daten-Referenz auf und kopierst du nur die skalaren Grössen, dann sparst du dir den Aufwand für die Messwerte.
Hast du jedoch ein allgemeines Problem mit deinen Messwerten, dann würde ich dir einen Ringpuffer empfehlen, der dann die Messwerte auf HDD speichert, wenn dein Code gerade Zeit hat....
In theory, there is no difference between theory and practice; In practice, there is.
Chuck Reid
|
|
|
13.12.2010, 22:28
(Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2010 22:30 von Matze.)
Beitrag #9
|
Matze
LVF-Team
Beiträge: 1.027
Registriert seit: Apr 2010
20xx
2010
DE_EN
7xxxx
Deutschland
|
Pufferzuweisung bei "Nach Namen aufschlüsseln"
Hallo,
also es sind ca. 12.000 Messwerte. Das ist nicht sonderlich viel, aber wenn man das öfters "unbundled", summiert sich das schon auch und geht auf die Performance. Auf HDD speichern geht nicht (ist ein Real-Time-System).
Ich lese da die Werte vom FPGA ein (als FXP), und skaliere diese in DBL (soweit zum Hintergrund, aber das tut nichts zur Sache). Dann lege ich sie in einem Cluster ab und möchte in mehreren SubVIs die Messwerte durchlaufen können (nur lesend).
Und beim "Unbundle" wird eben alles kopiert, was ich vermeiden wollte. Daher wäre eine Lösung, direkt mit dem Cluster zu arbeiten, schön. Also dass ich direkt auf die Speicheradressen zugreife (ähnlich einem Pointer in C/C++), nur eben komfortabler/sicherer.
Vielleicht würde ich auch keinen großen Unterschied merken, aber einen Versuch wäre es Wert.
Grüße
|
|
|
| |