Tablica klastrów

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
mchdbk
Posty: 6
Rejestracja: 26 maja 2013 12:37
Wersja środowiska: LabVIEW 2010

Tablica klastrów

Post autor: mchdbk »

Witam,
Mój problem polega na tym, że mam taką strukturę danych,

http://imageshack.us/photo/my-images/405/struktura.jpg/

która jest bezpośrednio podawana na wykres. Chcę jednak przed samym wykresem mieć możliwość mnożenia lub dzielenia (kręcąc knobem, lub wpisując konkretną wartość) "magnitude". Jak mam wyciągnąć ją z tej paczki, skalować i znów włożyć do tej paczki aby podać wszystko na wykres?
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: Tablica klastrów

Post autor: Grzesiek080 »

Sprawdz czy chodziło ci o to co jest w załaczniku.
Nie zapomnij uzyupełnic danych zebyś nie miał pustej tablicy.
Załączniki
Power Spectrum.vi
Mnożenie wartości Magnitutde przez wartośc w knob
(9.9 KiB) Pobrany 397 razy
TMa
Posty: 203
Rejestracja: 07 sty 2010 12:56
Wersja środowiska: LabVIEW 2017

Re: Tablica klastrów

Post autor: TMa »

Tutaj znajdziesz odpowiedź

PS: Grzesiek080 - wewnętrzna pętla for nie jest konieczna
Ostatnio zmieniony 12 cze 2013 13:52 przez TMa, łącznie zmieniany 1 raz.
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: Tablica klastrów

Post autor: Grzesiek080 »

Albo uzypełnie to za Ciebie. Napisz czy o to ci chodziło.

Vi w zalączniku
Załączniki
Power Spectrum.vi
Załącznik z uzupełnionymi danymi.
(10.05 KiB) Pobrany 383 razy
mchdbk
Posty: 6
Rejestracja: 26 maja 2013 12:37
Wersja środowiska: LabVIEW 2010

Re: Tablica klastrów

Post autor: mchdbk »

Grzesiek080 mógłbyś wrzucić screena kodu? Bo mam LV2010 i nie mogę otworzyć Twojego vi :(
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: Tablica klastrów

Post autor: Grzesiek080 »

Hej,

W załączniku vi zapisany w wersji 2010.

pozdrawiam
Załączniki
Power Spectrum.vi
(7.42 KiB) Pobrany 387 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Tablica klastrów

Post autor: PiDi »

Grzesiek080 pisze:Hej,

W załączniku vi zapisany w wersji 2010.

pozdrawiam
1) Jak już napisał TMa: wewnętrzna pętla jest niepotrzebna i jest bez sensu. LabVIEW dobrze sobie radzi z mnożeniem tablicy przez stałą, nie trzeba go wyręczać ;)
2) I można jeszcze użyć In Place Element Struct, to już w ogóle będzie fajnie - załącznik.
Załączniki
Power Spectrum.vi
LV2010
(7.27 KiB) Pobrany 378 razy
ObrazekObrazekObrazekObrazek
mchdbk
Posty: 6
Rejestracja: 26 maja 2013 12:37
Wersja środowiska: LabVIEW 2010

Re: Tablica klastrów

Post autor: mchdbk »

Dzięki wszystkim za pomoc :) Mix, który wyszedł ze wszystkich wskazówek i podpowiedzi, działa idealnie :D
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: Tablica klastrów

Post autor: Grzesiek080 »

Fakt petla nie jest potrzebna, ale nie jest bez sensu :P.
A co do "in place element structure" to bardzo fajna sprawa.

pozdrawiam
Awatar użytkownika
smiga
Administrator
Posty: 801
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Tablica klastrów

Post autor: smiga »

PiDi pisze:
2) I można jeszcze użyć In Place Element Struct, to już w ogóle będzie fajnie - załącznik.
W tym przypadku zastosowanie struktury In Place nic nie da, więc spokojnie można to zrobić bez niej, czyli kliknąć na nią i Remove...
Wrzuć parędziesiąt milionów elementów do tablicy wejściowej i sprawdź czas wykonania.
Podejrzewam, że kompilator przy takim użyciu Bundle/Unbundle By Name sam skorzysta ze wskaźnika do obszaru pamięci, a nie robi dodatkową kopię (po usunięciu In Place, zerknij Tools/Profile/ Show Buffer Allocations... - nie pokazuje żadnej alokacji w tym fragmencie kodu)

Może w starszych wersjach LabVIEW kompilator nie był taki sprytny i ktoś zauważy różnice ...

Podsumowując, to co proponuje Grzesiek080, czyli z dwiema pętlami, z przyczyn podanych powyżej, wykona się w tym samym czasie. Oczywiście z jedną pętlą wygląda ładniej, ale już żółta strukturka w środku nie musi dodawać kwiatków ;)
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Tablica klastrów

Post autor: PiDi »

smiga pisze: Podejrzewam, że kompilator przy takim użyciu Bundle/Unbundle By Name sam skorzysta ze wskaźnika do obszaru pamięci, a nie robi dodatkową kopię (po usunięciu In Place, zerknij Tools/Profile/ Show Buffer Allocations... - nie pokazuje żadnej alokacji w tym fragmencie kodu)
To się zgadza, kompilator zrobi z tego identyczny kod. Ale nie chciałem tutaj narzucać, że In Place zbawi każde spaghetti ;) Po pierwsze, walor poznawczy - mchdbk pewnie o In Place Struct nie słyszał, a może i Grzesiek080 też się dowiedział, a może ktoś jeszcze się dowie. Po drugie - w przypadku prostej tablicy doubli różnicy nie ma. Przy bardziej skomplikowanych strukturach danych i rozbudowanych operacjach różnica może być znacząca. To w sumie też a propos waloru edukacyjnego. No i po trzecie - czysta estetyka i wyrażenie intencji w kodzie. Mi się ta struktura podoba, bo jasno wyraża: "operuję na dokładnie tym kawałku danych, o tym tutaj". To jest bardzo subiektywne odczucie, a więc kwestia indywidualna. Puryści powiedzą, że nie ma kabla = nie widać dataflow... Tylko ja się spierać nie będę, bo z powodzeniem używam i In Place, i zwykłego unbundle/bundle, często jedno obok drugiego ;)
smiga pisze: Podsumowując, to co proponuje Grzesiek080, czyli z dwiema pętlami, z przyczyn podanych powyżej, wykona się w tym samym czasie. Oczywiście z jedną pętlą wygląda ładniej, ale już żółta strukturka w środku nie musi dodawać kwiatków ;)
I tu już mogą przemówić liczby: prosty benchmark, 10 tablic po 200000 elementów, Intel i7 2 GHz. Różnica w czasie wykonania wynosi ok. 8% na korzyść jednej pętli (82 vs 76 ms). Dużo? Mało? Pewnie w tym temacie bez znaczenia, być może w tak prostej operacji w ogóle bez znaczenia. Ale jak kiedyś Grzesiek080 będzie szukał 5 ms w aplikacji real-time, to będzie wiedział, żeby nie nadużywać pętli for :D
ObrazekObrazekObrazekObrazek
Awatar użytkownika
smiga
Administrator
Posty: 801
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: Tablica klastrów

Post autor: smiga »

"Walor poznawczy" - jak najbardziej ... i tu szacun Piotruś za wkład w edukację ;)
PiDi pisze: I tu już mogą przemówić liczby: prosty benchmark, 10 tablic po 200000 elementów, Intel i7 2 GHz. Różnica w czasie wykonania wynosi ok. 8% na korzyść jednej pętli (82 vs 76 ms). Dużo? Mało? Pewnie w tym temacie bez znaczenia, być może w tak prostej operacji w ogóle bez znaczenia. Ale jak kiedyś Grzesiek080 będzie szukał 5 ms w aplikacji real-time, to będzie wiedział, żeby nie nadużywać pętli for :D
Sprawdziłem (100 tablic po 1mln elementów) - średnio ok. 30ms z zastosowaniem In Place Structure vs ok. 28,5ms z dwiema pętlami For (i7 2,3GHz ... ale rozpędza się do ponad 3GHz), czyli ciut mniejsze różnice niż u Ciebie :-)
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
ODPOWIEDZ