Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Tematy związane z LabVIEW FPGA oraz programowaniem układów.
sebaER5
Posty: 19
Rejestracja: 09 cze 2011 17:16
Wersja środowiska: LabVIEW 2010

Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: sebaER5 » 31 paź 2012 05:39

Witam,
Kilka pytań z mojej strony, zanim po batalii w końcu położe się spać.:
1)Program mam już napisany. Jeszcze nie wgrywałem go na FPGA, ale po paru godzinnej kompilacji wolałbym nie natknąć na błąd.
Program testuje w trybie symulacji. Uruchomiam go z poziomu HOST. Program ma pewne parametry którymi chciałbym sterować. Ogólna zasada polega na tym by wprowadzić ustawiania i następnie uruchomić pomiar. Ustawiania zadaję poprzez Hosta i funkcję read/write. Używam FIFO do analizy przebiegu. Fifo korzysta z funkcji case oraz licznika, dzięki czemu wysyłana jest co n-ta próbka. Potrzebuje sterować z poziomu hosta 3 wartościami. W przypadku uruchomienia symulacji z defaultowo ustawionymi w VI-fpga wartościami bez korzystania z Read/Write w hoscie wszystko działa prawidłowo. W przypadku wykorzystania read/write host nie przekazuje wszystkich wartości na VI-fpga

2) Czy czas kompilacji proramu na FPGA zależy od wielkości macierzy jakie zostały zastosowane w strukturze programu. Program się kompilował 3 dni i utknął na kilku procentach. Przy czym kompilowany był na staruszku uczelnianym p4 3.0GHz 2GB ram win xp i kartą FPGA. Do celów kompilacji chcę użyć Compile farmy i komputera zewnętrznego (osobistego). Wykonałem już testy na uczelni. Komputery komunikowały się między sobą poprzez internet. Komputer wykazywał nieznaczne obciążenie procesora i RAMU około 50%procesora i 1GB ramu przez aplikacje Compile Farm. Wolałbym by wykorzystany była pełna moc procesora. Testy na laptopie T7200 core2duo 2.2Ghz 4G ram na win7.
W programie jako pamięci zastosowałem 2/3 macierze o stałej wielkości około 10.000 pozycji. Do tego występowała macierz z sygnałem testowym 190.000. Program był wykonany tak by mógł być uruchomiony na zwykłym labview. Korzystałem z ze zmiennych typu fxp i integer. Zastanawiam się czy wielkość macierzy ma wpływ na czas kompilacji.

3) Czy można skompilować program bez karty fpga w komputerze i następnie dokonać downloadu na fpga? Chodzi mi o kompilacje bez udziału compile farmy i komputera z zamontowaną kartą. Pamiętam, że jak przyniosłem projekt ze skompilowanym programem to kompilacja rozpoczynała się od początku.

4) Mam hostcie Funkcje read/write i FIFO. FIFo zbiera co n próbkę- ustawione przez licznik i funkcje case. Jak podłączyć 3 fifo w hoscie by mi wszystko ładnie wyświetliło? Na jednym mi działa ok a na 3 ze tak powiem losowo. Wszystkie 3 FIFO które przesyłają danee są w jednym casie i przesyłają co n-tą próbkę.

Mam nadzieje ze ktoś coś z tego zrozumie.

Byłbym wdzięczny za pomoc mam około 1miesiąca na złożenie pracy mgr.

Awatar użytkownika
broonet
Posty: 8
Rejestracja: 29 paź 2012 18:56
Wersja środowiska: LabVIEW 2012

Re: Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: broonet » 01 lis 2012 09:39

sebaER5 pisze:Witam,
Kilka pytań z mojej strony, zanim po batalii w końcu położe się spać.:
1)Program mam już napisany. Jeszcze nie wgrywałem go na FPGA, ale po paru godzinnej kompilacji wolałbym nie natknąć na błąd.
Program testuje w trybie symulacji. Uruchomiam go z poziomu HOST. Program ma pewne parametry którymi chciałbym sterować. Ogólna zasada polega na tym by wprowadzić ustawiania i następnie uruchomić pomiar. Ustawiania zadaję poprzez Hosta i funkcję read/write. Używam FIFO do analizy przebiegu. Fifo korzysta z funkcji case oraz licznika, dzięki czemu wysyłana jest co n-ta próbka. Potrzebuje sterować z poziomu hosta 3 wartościami. W przypadku uruchomienia symulacji z defaultowo ustawionymi w VI-fpga wartościami bez korzystania z Read/Write w hoscie wszystko działa prawidłowo. W przypadku wykorzystania read/write host nie przekazuje wszystkich wartości na VI-fpga
Czy możesz pokazać ten kawałek kodu? Interesuje mnie kiedy i jak czytane są zadawane parametry z hosta.
sebaER5 pisze:2) Czy czas kompilacji proramu na FPGA zależy od wielkości macierzy jakie zostały zastosowane w strukturze programu. Program się kompilował 3 dni i utknął na kilku procentach. Przy czym kompilowany był na staruszku uczelnianym p4 3.0GHz 2GB ram win xp i kartą FPGA. Do celów kompilacji chcę użyć Compile farmy i komputera zewnętrznego (osobistego). Wykonałem już testy na uczelni. Komputery komunikowały się między sobą poprzez internet. Komputer wykazywał nieznaczne obciążenie procesora i RAMU około 50%procesora i 1GB ramu przez aplikacje Compile Farm. Wolałbym by wykorzystany była pełna moc procesora. Testy na laptopie T7200 core2duo 2.2Ghz 4G ram na win7.
W programie jako pamięci zastosowałem 2/3 macierze o stałej wielkości około 10.000 pozycji. Do tego występowała macierz z sygnałem testowym 190.000. Program był wykonany tak by mógł być uruchomiony na zwykłym labview. Korzystałem z ze zmiennych typu fxp i integer. Zastanawiam się czy wielkość macierzy ma wpływ na czas kompilacji.
Zależy, wpływ ma tez sposób robienia diagramu, raport z kompiplacji pokazuje ile czego jest wykorzystane, można z tego próbować wyciągać wnioski.
Proponuję tak:
wyłącz najbardziej podejrzaną przez ciebie cześć programu z kompilacji (struktura Disable) i zrób kompilację.
Zrób kompilację niezależnie części programu, to da ci pogląd na to ile kodu zjadają które jego części.
Jeśli kod kompiluje się dłużej niż pół dnia to jest to podejrzane, pewnie trzeba go poprawiać.
sebaER5 pisze:3) Czy można skompilować program bez karty fpga w komputerze i następnie dokonać downloadu na fpga? Chodzi mi o kompilacje bez udziału compile farmy i komputera z zamontowaną kartą. Pamiętam, że jak przyniosłem projekt ze skompilowanym programem to kompilacja rozpoczynała się od początku.
Tak, w ustawieniach kompilacji jest informacja gdzie docelowo umieszczane są wyniki. Można to potem przenieść na komputer docelowy i podać w referencji link do bitstreamu.
sebaER5 pisze:4) Mam hostcie Funkcje read/write i FIFO. FIFo zbiera co n próbkę- ustawione przez licznik i funkcje case. Jak podłączyć 3 fifo w hoscie by mi wszystko ładnie wyświetliło? Na jednym mi działa ok a na 3 ze tak powiem losowo. Wszystkie 3 FIFO które przesyłają danee są w jednym casie i przesyłają co n-tą próbkę.
Wszystko idzie przez DMA, a ten kanał jest jeden. FIFO ma deklarowane rozmiary, komputer pewnie stara się znaleźć czas żeby wysłać wszystko zarządzając jednocześnie pozostałymi zadaniami.
NI zaleca korzystanie z jednego FIFO http://zone.ni.com/reference/en-XX/help ... nterleave/
Dlaczego nie takie rozwiązanie, skoro i tak wszystkie FIFO działają w jednej strukturze CASE?
Obrazek
Extensa - certyfikowani programiści LabView z Krakowa.

sebaER5
Posty: 19
Rejestracja: 09 cze 2011 17:16
Wersja środowiska: LabVIEW 2010

Re: Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: sebaER5 » 01 lis 2012 13:31

Witam,
z pierwszy problemem już sobie poradziłem. Problem tkwił w jednym z kontrolek. Wszystko teraz działa przez read/write.
Pozostała kwestia kompilacji i wyświetlania sygnału na hoście. Na chwile obecną wyświetlam tylko sygnał wejściowy. Chciałbym wyświetlić wszystkie trzy naraz na wykresie, a build array średnio działa.
Program został napisany tak, by po usunięciu FIFO działał w Labview.

Załączam link do projektu.
http://www.sendspace.pl/file/488342e1198acd02e575a00

Prosiłbym o szybką analizę, chociażby samego FIFO.

FPGA tego uczyłem się sam także mam nadzieję, że zadziała na karcie. Do 17 grudnia muszę złożyć prace mgr.

Pozdrawiam Sebastian

EDIT:
1) Usunę macierz z 190.000 pozycji zostawię dwie na pamięć 10.000 pozycji. Jak będzie wciąż długo trwało spróbuje użyć wbudowanej pamięć.

2) Zrobiłem jeszcze jedną wersje i skorzystałem z pamięci zaraz włączę kompilacje, by sprawdzić

Zacznę sprawdzanie czasu kompilacji od drugiej wersji. Do końca nie jestem pewien czegoś nie pomieszałem kombinując z pamięciami.

EDIT:
Czas sie znacznie skrócił o_O do 7min. Chyba lepiej nie korzystać z fixed arrays.



Wszystko idzie przez DMA, a ten kanał jest jeden. FIFO ma deklarowane rozmiary, komputer pewnie stara się znaleźć czas żeby wysłać wszystko zarządzając jednocześnie pozostałymi zadaniami.
NI zaleca korzystanie z jednego FIFO http://zone.ni.com/reference/en-XX/help ... nterleave/
Dlaczego nie takie rozwiązanie, skoro i tak wszystkie FIFO działają w jednej strukturze CASE?
Nie mogę używać build array ,gdyż mogę korzystać tylko z fixed array. Poza tym potem nie mogę tego podłączyć do FIFO ze względu na konflikt rodzaju zmiennych? Pomoglo użycie petli FOR z 1 iteracją.

Zaznaczenie "Autopreallocate arrays and strings" w File->Vi Properties->Category:Execution. Zalatwilo sprawe ale nei moge podpiąć pod fifio. Tera musze sie dowiedziec co wlasciwie robi to "Autopreallocate arrays and strings".



NA KONIEC SZYBKIE PYTANIE BO TEN PROGRAM POWOLI MNIE ROZBRAJA. CZY PROGRAM POWINIEN TO SAMO LICZYĆ W WERSJI LABVIEW JAK I W WERSJI FPGA. POPROSTU POTRAFI JAKIES CUDA NIEWIDY WYPRAWIAC. ODCHYLENIE STANDARDOWE WYSWIETLAM W PROGRAMIE LABVIEW I POD FPGA PRZEZ FIFO I LEKKIE ZDZIWKO LOL?? POPROSTU DZIWI MNIE TO.

Pytanie czy NI wyprodukowalo karte FPGA ktora by dziala na formacie byte?

sebaER5
Posty: 19
Rejestracja: 09 cze 2011 17:16
Wersja środowiska: LabVIEW 2010

Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: sebaER5 » 02 lis 2012 18:48

Dobra bo poziome zdenerwowania siega zeniu. Libcza podniesiona do kwadratu jest ujemna. 2+2 w formacie fxp rowna sie 0.
Czy ktos spotkal sie z takim problememem?

EDIT:
No to chyba wina lezala po tej stronie ze liczba zaczynala przekraczac 16bit...

Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2014
Lokalizacja: United Kingdom

Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: Mikrobi » 02 lis 2012 21:09

Innaczej.

Posprzątaj. Koniecznie. Kod w LabVIEW nie może wyglądać w ten sposób. Jak możesz oczekiwać pomocy jesli sam nie chcesz sobie jej udzielić?
Kod powinien mieścić się na jednym ekranie.
To nie względy estetyczne - to możliwość analizowania i debagowania kodu: na początku przez ciebie, potem przez innych.
Skoro nie szanujesz swojego czasu i programu dlaczego oczekujesz tego od nas?

Zamiast irytować się na program/LabVIEW,na to, że nikt nie chce pomóc a kod jest 'głupi' uporządkuj kod.

Sprawdź kolejne moduły, pozamykaj w subVIje.

Na chwile obecną kod FPGA wygląda tak:
Obrazek
Jasny prostokąt to ekran 1920x1080, całe okno to pełny kod.

Zamiast irytować się na świat i na środowisko pomóż sam sobie.
Ostatnio zmieniony 02 lis 2012 21:34 przez Mikrobi, łącznie zmieniany 4 razy.
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI

sebaER5
Posty: 19
Rejestracja: 09 cze 2011 17:16
Wersja środowiska: LabVIEW 2010

Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: sebaER5 » 03 lis 2012 00:00

Z kodem sobie poradziłem.


Odnośnie moich wniosków.
FPGA nie toleruje dużych tablic - czas kompilacji idzie w kosmos. Lepiej korzystać z pamięci.
Uważać na typy zmiennych, gdyż "adapt to source" może być zgubne.

Ponawiam pytanie. Czy NI oferuje karty FPGA działające ze zmiennymi typy byte? - Jak ktoś zna odpowiedź, będę wdzięczny.

Zamiast irytować się na świat i na środowisko pomóż sam sobie.
Frustracja dopadła mnie w momencie, gdy podniosłem liczbę ujemna do kwadratu i dostałem również ujemną, podobnie jak dodałem 2 liczby fxp i wyszło mi 0, a wykonywałem operacje 2+2. Nie miała nic wspólnego ze sposobem rozmieszczenia elementów kodu. Na świat się nie obrażam.
Skoro nie szanujesz swojego czasu i programu dlaczego oczekujesz tego od nas?


Nie byłbym sobą jakbym nie dodał nutki ironii: Rozumiem, że jest pan przedstawicielem związków zawodowych skoro pan pisze w trzeciej osobie w imieniu ludu? Oprócz kodu programu zadałem konkretne pytania. Kod był na etapie zmian i nie wszystko zdążyłem uporządkować. Sam nie miałem problemu w poruszaniu się po nim. Problem nie leżał w algorytmie lecz typach zmiennych. W chwili obecnej jest już uporządkowany, na tyle na ile moja skromna wiedza na to pozwoliła.

Byłbym wdzięczny za wskazówkę jak zrobił Pan zrzut ekranu z całego programu. Możliwe, że w między czasie uda mi się znaleźć odpowiedź w necie. Zakładam jednak, że jest to dla Pana chwilka moment.

Powracając do przedmówcy. Postaram się jeszcze raz sprawdzić rozwiązanie z wykorzystaniem macierzy i jednego FIFO. Słuszna była uwaga odnośnie DMA. Chciałem jednak zaznaczyć ,że przesłane dane służą tylko do podglądu i nie mają wielkiego znaczenia dla programu.


Pozdrawiam i dziękuje za pomoc. W razie postępów postaram się dopisać swoje uwagi. Ewentualnie będzie można się do nich ustosunkować. Może jeszcze komuś się przyda.

Awatar użytkownika
broonet
Posty: 8
Rejestracja: 29 paź 2012 18:56
Wersja środowiska: LabVIEW 2012

Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: broonet » 03 lis 2012 09:04

Nie byłbym sobą jakbym nie dodał nutki ironii...itd

A ile osób ma napisac to samo na forum?
Jeśli kod jest tak duży to trudno sie go analizuje, chyba że wlasnie sie go pisze.
Mikrobi napisał: uruchom czesc sprawdź, ja bym dopisał "zakmnij w podprogram czyli subVI"
Nie bierz uwag Mikrobiego osobiście, faktycznienie nie masz w fpga podprogramów, a to by pomogło.
Nie pokazałeś kawałka kodu który dał wartość ujemną, nie napisałeś z jakich wartości.

Kod jest typu spagetti jak opisuje często taki kod bogdani. Nie chce się go analizowac, wiec jak widzisz nikt na forum sie nie odzywał. Używasz Caps Locka, co też jest naruszeniem etykiety forum.

"Zrzut" to okno nawigacji, Ctrl+Shift+N

"Wcinam się" Mikrobiemu, może mnie pogryzie ;)
Obrazek
Extensa - certyfikowani programiści LabView z Krakowa.

Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2014
Lokalizacja: United Kingdom

Re: Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: Mikrobi » 03 lis 2012 10:30

sebaER5 pisze:Z kodem sobie poradziłem.
Odnośnie moich wniosków.
FPGA nie toleruje dużych tablic - czas kompilacji idzie w kosmos. Lepiej korzystać z pamięci.
Uważać na typy zmiennych, gdyż "adapt to source" może być zgubne.
FPGA to Field Programmable Gate Arrays. Każda operacja jest zajmowaniem zasobów. Wprowadzenie dużej tablicy to przeznaczenie części zasobów na trzymanie danych zamiast operowanie programem. Jeśli kompilator ma znaleźć miejsce na tablicę a kod jest złożony to stara się optymalizować rozmieszczenie elementów kodu u sprawdza obszary na FPGA gdzie można rozłożyć tablicę. Potem części kodu musi ze sobą komunikować czyli znaleźć sposoby połączenia omijając obszar/obszary zajęte przez tablice.

Adapt to source powinno być zrobione na etapie wysyłania danych do FPGA, wewnątrz kodu FPGA operuje się na jednym typie danych.
Ponawiam pytanie. Czy NI oferuje karty FPGA działające ze zmiennymi typy byte? - Jak ktoś zna odpowiedź, będę wdzięczny.
Zna. http://poland.ni.com
"Zapraszamy do kontaktu telefonicznego z inżynierem pod numerem 00 800 361 1235 lub do zgłoszenia prośby o kontakt."
I to nie jest ironia, zapytaj, przedstaw problem, porozmawiaj. Nie tylko podadzą odpowiedz czy, ale też konkretny model i jego ograniczenia.
Zamiast irytować się na świat i na środowisko pomóż sam sobie.
Frustracja dopadła mnie w momencie, gdy podniosłem liczbę ujemna do kwadratu i dostałem również ujemną, podobnie jak dodałem 2 liczby fxp i wyszło mi 0, a wykonywałem operacje 2+2. Nie miała nic wspólnego ze sposobem rozmieszczenia elementów kodu. Na świat się nie obrażam.
To po co Caps Lock? Jeśli komputer zwraca bzdury to znaczy że dostał do wykonania bzdury. Trash In Trash Out.
Sprawdź jak się wykonuje podstawową arytmetykę na FPGA biorąc pod uwagę ograniczenia formatów z jakich korzystasz, na stronach NI jest dużo informacji na temat operacji na formacie FXP, w samym środowisku jest sporo przykładów.
Skoro nie szanujesz swojego czasu i programu dlaczego oczekujesz tego od nas?
Nie byłbym sobą jakbym nie dodał nutki ironii:

Louis Armstrong powiedział kiedyś o jazzie "Jeśli nie wiesz o czym mówię, nie potrafię ci tego wytłumaczyć "
Pasuje i tutaj. Tyle tytułem komentarza.

Oprócz kodu programu zadałem konkretne pytania. Kod był na etapie zmian i nie wszystko zdążyłem uporządkować.


"Dlaczego 2=2=0 a liczba podniesiona do kwadratu jest ujemna" B-) Blask Fantastyczny Proponuję na początek samemu zastanowić się nad odpowiedzią. Nie uporządkowałeś kodu w FPGA, o ten kod pytasz. Uwaga praktyczna: najpierw porządkuj kod, potem zadawaj pytania. Jesteś inżynierem a nie artystą który pokazuje szkice, podejdź do problemu jak inżynier.

Byłbym wdzięczny za wskazówkę jak zrobił Pan zrzut ekranu z całego programu. Możliwe, że w między czasie uda mi się znaleźć odpowiedź w necie. Zakładam jednak, że jest to dla Pana chwilka moment.


Odpowiedź już padła. Jest jeszcze jeden przydatny skrót Ctrl+U, polecam. ;)

Powracając do przedmówcy. Postaram się jeszcze raz sprawdzić rozwiązanie z wykorzystaniem macierzy i jednego FIFO. Słuszna była uwaga odnośnie DMA. Chciałem jednak zaznaczyć ,że przesłane dane służą tylko do podglądu i nie mają wielkiego znaczenia dla programu.


Więc warto się zastanowić czy je przesyłać i w jakiej ilości, zwłaszcza że coraz lepiej widoczne są teraz, jak rozumiem, ograniczenia komunikacji między kartą FPGA a hostem. Przeglądnij raz jeszcze przykłady rozwiązań programów korzystających z platformy FPGA na stronach NI. Zobacz jak wprowadza się dane przed uruchomieniem programu na FPGA, jak inicjalizować kontrolki tak by z hosta wysłać dane takie jak tablica wejściowa. Poćwicz z boku te rozwiązania, sprawdż jakie zajmują zasoby, potem wprowadż je do właściwego kodu.

Pozdrawiam i dziękuje za pomoc. W razie postępów postaram się dopisać swoje uwagi. Ewentualnie będzie można się do nich ustosunkować. Może jeszcze komuś się przyda.


Taka postawa wymaga pochwały, takie są założenia naszego forum. Zakładam że moje i nasze - kolegów z forum - uwagi również odbierzesz jako wskazówki warte rozważenia :)
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI

sebaER5
Posty: 19
Rejestracja: 09 cze 2011 17:16
Wersja środowiska: LabVIEW 2010

Komunikacja HOST FPGA/ czas kompilacji/ wykorzystanie CPU

Post autor: sebaER5 » 03 lis 2012 15:14

"Dlaczego 2=2=0 a liczba podniesiona do kwadratu jest ujemna" B-) Blask Fantastyczny Proponuję na początek samemu zastanowić się nad odpowiedzią. Nie uporządkowałeś kodu w FPGA, o ten kod pytasz. Uwaga praktyczna: najpierw porządkuj kod, potem zadawaj pytania. Jesteś inżynierem a nie artystą który pokazuje szkice, podejdź do problemu jak inżynier.
To z ciekawości testowałem akurat w oddzielnym VI by wyeliminować kwestie sporne. 2+2=0 dodawałem mnożenie *1 po operacji dodawania i pokazywał się dobry wynik.


Ok dzięki za ten link do przesyłania kilku sygnałów jako jedną macierz przez jedno FIFO. Wszystko już działa. Od poniedziałku testy na karcie pomiarowej. Do NI pewnie zadzwonie lub wyśle zapytanie.

Zrzut ekranu przeslane za pomocą jednego FIFO, według wskazówek:
Obrazek

ODPOWIEDZ