Obciążenie pamięci - duży problem
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: Obciążenie pamięci - duży problem
A czy ty musisz wczytywać te wszystkie dane na raz? Nie możesz wczytać części, przetworzyć, wczytać kolejną, itd..?
Re: Obciążenie pamięci - duży problem
Niestety nie mogę, wszystkie dane muszą być w pamięci cały czas. Wiem, że to duży problem, ale wykonuję ciągle obliczenia na wszystkich tych danych, więc zrzucanie ich na dysk i odczytywanie jest oczywiście jak najbardziej możliwe, ale znacznie spowolni pracę programu. Z drugiej strony 400MB danych, to nie jest jakiś gigantyczny rozmiar, ale niestety LabView średnio sobie z tym radzi tworząc kopie kopii w każdym możliwym miejscu i to jest problem podstawowy, z którym do końca nie umiem sobie poradzić.
Swoją drogą, może ktoś mi jeszcze powie: w Case Structure tworzone są kopie wszystkich danych wejściowych i do każdej z opcji doprowadzana jest kopia. Czy tak samo jest w przypadku Event Structure?
Swoją drogą, może ktoś mi jeszcze powie: w Case Structure tworzone są kopie wszystkich danych wejściowych i do każdej z opcji doprowadzana jest kopia. Czy tak samo jest w przypadku Event Structure?
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: Obciążenie pamięci - duży problem
Skoro tak, to skorzystaj ze struktury In Place szukaj w palecie Structures, jest ona specjalnie stworzona dla takich programów jak twój. Dzięki niej możesz zapobiec kopiowaniu danych Możesz też przekazywać dane przez referencje, a nie tak jak do tej pory w postaci klastra (obczaj se VI New Data Value Reference znajdziesz w palecie Application -> Memory Control ).
Dodatkowo we właściwościach VI ustawi, żeby był kompilowany z użyciem opcji Inline. To też zapobiegnie tworzeniu kolejnych kopii, które powstają na wejściach VI.
Dodatkowo we właściwościach VI ustawi, żeby był kompilowany z użyciem opcji Inline. To też zapobiegnie tworzeniu kolejnych kopii, które powstają na wejściach VI.
Obciążenie pamięci - duży problem
Zajrzałem do tych struktur i wygląda to tajemniczo, ale może jakoś dam radę. Masz może jakieś przykłady z użyciem tych struktur? Niestety nic nie mogę znaleźć a w manualu tak skromnie to opisali
A czy te opcje kompilacji inline dotyczą tylko skomplikowanego do exe programu czy też odpalanego z kodu źródłowego? W którym miejscu mogę znaleźć tę opcję?

A czy te opcje kompilacji inline dotyczą tylko skomplikowanego do exe programu czy też odpalanego z kodu źródłowego? W którym miejscu mogę znaleźć tę opcję?
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Obciążenie pamięci - duży problem
Posypuję głowę popiołem, faktycznie kropka oznacza tam tylko konwersje z zestawu danych "nietypowych" na "typowe" i nie pociąga żadnych dodatkowych konsekwencji.smiga pisze:Tego nie byłbym taki pewny - kropka najpewniej wynika z faktu zapisu klastra jako Type Def, a niestety Labview ma zwyczaj takiego oznaczania (moim zdaniem wprowadzający troszkę zamieszania), gdy podajemy dane jakiekolwiek inne niż dokładnie taki sam zdefiniowany Type Def.PiDi pisze: - Jeszcze gorsza rzecz w przypadku tego klastra - pojawia się tam czerwona kropka, która zwiastuje nam konwersję danych i przy tym - utworzenie dodatkowego bufora na to działanie.
Na marginesie: kropkę można zlikwidować, doprowadzając stałą tego (wyjściowego) typu do wejścia "cluster" bloczka Bundle
Obciążenie pamięci - duży problem
Przekopałem się przez strukture In Place oraz New Data Value Reference i zużycie pamięci jest dokładnie jak bez tych struktur. Może coś robię źle, może czegoś nie rozumiem, ale u mnie to nie działa niestety. Jeśli ktoś miałby jakiś działający przykład, na którym można zobaczyć istotną różnicę, to byłbym wdzieczny.
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Obciążenie pamięci - duży problem
Najlepiej wrzuć cały ten fragment kodu z przykładowym plikiem do obróbki (czyli VI główny i SubVI) to postaramy się to zoptymalizować.
Re: Obciążenie pamięci - duży problem
Dzięki za pomoc i informacje. Udało mi się troszkę zmienić koncepcję programu tak, że czytam dany fragmentami z dysku. Niestety trwa do zdecydowanie dłużej, ale to była chyba jedyna szansa, żeby cokolwiek zrobić. Oj chyba chłopaków z National'a czeka długa droga i dużo pracy, aby skutecznie poprawić system obsługi pamięci, ale dajmy im szanse;)
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Obciążenie pamięci - duży problem
Byłem na szkoleniu LabVIEW Performance - polecam.
Z tego co zauważyłem na szkoleniu wiem, że raczej większość rzeczy możesz naprawdę mocno zoptymalizować, a ograniczają nas jedynie umiejętności i wiedza. Na pewno da się przesyłać dane przez referencje i nie ma potrzeby robienia wielu kopii w pamięci. Na poziomie projektu (podejścia do architektury programu) i kodowania można też uniknąć wielu błędów. W wolniejszej chwili (może wieczorkiem) podeślę przykładowy kod pokazujący działanie np. In Place - będzie widać różnice.
Z tego co zauważyłem na szkoleniu wiem, że raczej większość rzeczy możesz naprawdę mocno zoptymalizować, a ograniczają nas jedynie umiejętności i wiedza. Na pewno da się przesyłać dane przez referencje i nie ma potrzeby robienia wielu kopii w pamięci. Na poziomie projektu (podejścia do architektury programu) i kodowania można też uniknąć wielu błędów. W wolniejszej chwili (może wieczorkiem) podeślę przykładowy kod pokazujący działanie np. In Place - będzie widać różnice.
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Obciążenie pamięci - duży problem
Załączam przykład ze szkolenia.
Po pierwsze możesz zaobserwować szybkość wykonywania się kodu zmieniając Test Selection.
Włącz sobie Profile Performance and Memory i zobacz użycie pamięci. Następnie kliknij prawym na jakąś strukturę In Place, a następnie Remove In Place Element Structure - odpal raz jeszcze i obserwuj zmiany zużycia pamięci.
LabView 2010 jest dość inteligentne i same sobie optymalizuje kod, więc nie zawsze widać różnicę. Kiedyś testowałem podobne rzeczy na wersji 8.6 - tam to ładnie było widać.
Mam nadzieję, że na 2009 będzie to widać.
Po pierwsze możesz zaobserwować szybkość wykonywania się kodu zmieniając Test Selection.
Włącz sobie Profile Performance and Memory i zobacz użycie pamięci. Następnie kliknij prawym na jakąś strukturę In Place, a następnie Remove In Place Element Structure - odpal raz jeszcze i obserwuj zmiany zużycia pamięci.
LabView 2010 jest dość inteligentne i same sobie optymalizuje kod, więc nie zawsze widać różnicę. Kiedyś testowałem podobne rzeczy na wersji 8.6 - tam to ładnie było widać.
Mam nadzieję, że na 2009 będzie to widać.
- Załączniki
-
- ActionEngine.vi
- v9.0
- (21.13 KiB) Pobrany 408 razy
-
- DataValueReference.vi
- v9.0
- (37.81 KiB) Pobrany 431 razy