Strona 2 z 2
Re: Obciążenie pamięci - duży problem
: 02 lut 2011 15:03
autor: wino
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
: 03 lut 2011 15:21
autor: mippii
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?
Re: Obciążenie pamięci - duży problem
: 03 lut 2011 16:16
autor: wino
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.
Obciążenie pamięci - duży problem
: 03 lut 2011 16:48
autor: mippii
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ę?
Re: Obciążenie pamięci - duży problem
: 03 lut 2011 16:51
autor: PiDi
smiga pisze:
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.
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.
Posypuję głowę popiołem, faktycznie kropka oznacza tam tylko konwersje z zestawu danych "nietypowych" na "typowe" i nie pociąga żadnych dodatkowych konsekwencji.
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
: 03 lut 2011 20:32
autor: mippii
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.
Re: Obciążenie pamięci - duży problem
: 03 lut 2011 21:15
autor: PiDi
A mógłbyś dać jakiś przykładowy plik który wczytujesz?
Re: Obciążenie pamięci - duży problem
: 04 lut 2011 09:18
autor: smiga
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
: 08 lut 2011 09:11
autor: mippii
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;)
Re: Obciążenie pamięci - duży problem
: 08 lut 2011 10:00
autor: smiga
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.
Re: Obciążenie pamięci - duży problem
: 08 lut 2011 19:36
autor: smiga
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ć.