Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Wszystko co dotyczy płytek z rodziny Discovery firmy STM
ODPOWIEDZ
michaeleagle
Nowy
Posty: 1
Rejestracja: 02 lis 2017, 9:52

Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Post autor: michaeleagle » 02 lis 2017, 10:48

Cześć

Ostatnio zaszła u mnie potrzeba wykonania obliczeń na liczbach typu float z użyciem STM32F3DISCOVERY.
Po przejrzeniu kilku pdf-ów udało mi się poprawnie skonfigurować tą jednostkę do pracy.
Może komuś przyda się taki poradnik w pigułce, a zatem:

Jeżeli nasz mikrokontroler wyposażony jest w jednostkę FPU to:
1.W opcjach zarówno kompilatora jak i linkera GCC(lub w ustawieniach projektu) należy wstawić 2 flagi:
-mfloat-abi=hard ->Wybór Floating-Point ABI
-mfpu=fpv4-sp-d16 ->Wybór Floating Point Hardware

2.Jeżeli w pliku urządzenia np.(stm32f303xc.h), który znajduje się w podkatalogu "device" katalogu "CMSIS", makro __FPU_PRESENT jest ustawione na 1U(co oznacza, że nasze urzadzenie posiada FPU), to pozostaje nam ustawienie makra __FPU_USED na 1U.Znajduje się ono w pliku rdzenia naszego urządzenia(np. core_cm4.h w podkatalogu "core" katalogu "CMSIS").

Powyższe ustawianie makr możemy pominąć, jeżeli w funkcji inicjalizującej, zamieścimy poniższą instrukcję:

Kod: Zaznacz cały

SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
TO WSZYSTKO->FPU JEST GOTOWE DO PRACY

Aby potwierdzić działanie FPU, napisałem program, który w pętli wykonuje cykliczne dodawanie wartości do zmiennej typu float.Za pomocą licznika określam czas wykonania tej operacji.

Kod: Zaznacz cały

	number=0;	//zmienna typu float
	__HAL_TIM_SET_COUNTER(&tim2_handle_struct,0);	//ustawienie licznika timera na 0
	for(uint32_t i=0;i<1000000ul;i++)
	{
		number+=0.05f;	//operacja dodawania do zmiennej typu float
	}
	time=__HAL_TIM_GET_COUNTER(&tim2_handle_struct);	//określenie czasu wykonania powyższej pętli

MOJE WYNIKI:(FCPU=72Mhz)
->FP-ABI ustawione na soft(brak sprzętowego FPU)->Czas wykonania=319.5ms
->FP-ABI ustawione na hard(użycie tylko sprzętowego FPU)->Czas wykonania=125ms

WNIOSKI:
Jak widać, użycie sprzętowej jednostki zmiennoprzecinkowej pozwala zaoszczędzić nam czas.

Pozdrawiam!

Awatar użytkownika
SunRiver
Administrator
Posty: 513
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Konfiguracja FPU do pracy z STM32-krótki poradnik

Post autor: SunRiver » 02 lis 2017, 13:28

czas na pewno się oszczędza i zasoby też bowiem math libsy lubią je pożerać :)
tak czy siak poradnik się przyda dla młodych :)
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
Zealota
Użytkownik
Posty: 6
Rejestracja: 18 lis 2017, 17:45
Lokalizacja: Gliwice
Kontakt:

Re: Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Post autor: Zealota » 18 lis 2017, 18:17

Hej
To mój pierwszy post na tym forum :)
Z ogłoszeń ogólnych - bardzo przyjemny "layout", miło się patrzy...

Wracam do meritum. Interesujący wpis, dzięki.
Zastanawia mnie jedna rzecz, jakoś niespecjalnie z tego testu wynika, że zastosowanie sprzętowego FPU daje jakieś specjalne korzyści.
Piszę to z punktu widzenia lajkonika w dziedzinie STM32, a chodzi mi o ten "mizerny" zysk 125 vs 320 ms.
Dlatego piszę mizerny, bo spodziewałem się czegoś bardziej spektakularnego :) Takie 10 razy szybciej już by zrobiło wrażenie.
Sprzętowy Quake działał zdecydowanie szybciej niż ten softwarowy :)

Czy możesz to jakoś skomentować? A może coś poszło nie tak z testem czy konfiguracją, z może po prostu to FPU takie jest...

Awatar użytkownika
SunRiver
Administrator
Posty: 513
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Post autor: SunRiver » 18 lis 2017, 20:14

SunRiver pisze:
02 lis 2017, 13:28
a chodzi mi o ten "mizerny" zysk 125 vs 320 ms.

Dlaczego mizerny twoim zdaniem ... ??? to jest mniej o 195ms ponad 50%
Po za tym rozmawiamy o mikrokontrolerze a nie o jakimś tam I7 :)

To mało ?? No cóż .....
może warto wrócić do atmegi gdzie czas wykonania tej samej funkcji będzie mierzony w sekundach ??
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
Zealota
Użytkownik
Posty: 6
Rejestracja: 18 lis 2017, 17:45
Lokalizacja: Gliwice
Kontakt:

Re: Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Post autor: Zealota » 18 lis 2017, 21:01

Około 50%. Z tej perspektywy to faktycznie wygląda inaczej.
W końcu np w grach, niektórzy uważają że jak mają 5% więcej klatek to super wynik, a jak 10% to już jest wypas :)

Tutaj mamy ponad ponad dwa razy szybciej więc faktycznie dużo lepiej.

Tak jak spróbowałem napisać mało się znam na architekturach mikropocesorowych, więc miałem wyobrażenie, że taka jednostka sprzętowego fpu, nawet w takich prockach jak stm32, to taka czarna, magiczna skrzynka co robi właściwie cuda. Stąd moje oczekiwania na co najmniej 10 razy szybciej.

Trochę się rozczarowałem, aczkolwiek przyjmuję Twoją argumentację i przeprogramowuję swoje oczekiwania :)

Awatar użytkownika
SunRiver
Administrator
Posty: 513
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Post autor: SunRiver » 18 lis 2017, 21:37

nie około a ponad 50% , no chyba że połowa u ciebie to inna wartość ....
owszem FPU czyni cuda ... dlatego że zamiast męczyć CPU wielkimi bibliotekami math by zliczać wartości zmniennoprzecinkowe
odbywa się to sprzętowo , jednakże ....

Twoje myślenie nie wiem na czym się opiera, ale nie staraj się porównać mikrokontrolera do procesora , bo choć część bloku działa podobnie
jednak tym samym nie są i nie będą ... głównie wszystko się opiera o dostepne zasoby ... które w mikrokontrolerach są bardzo ograniczone
ale należy brać pod uwagę iż rózna architektura została stworzona do różnych celów ...

porównywanie osiągów grafiki np jest niedorzeczne gdyż karta graficzna często ma kilkarazy wydajniejszy i szybszy podsystem od reszty
komputera , a tym samym jest 1000% bardziej zaawansowana od takiego małego mikrokontrolerka ... jak na niego to wyczyn bardzo duży
i osiągi rewelacyjne...

No ale ... to rozumieją ci którzy pracowali na C=64 / Amigach itd ... bo tam podobnie jak w mikrokontrolerach liczy się każdy bajt pamięci
i każda ms oszczedności , a nie liczba megaherców i gibabajty ramu ... nie wspominając o nieograniczonej wręcz przestrzeni na kod :)
w uC wszystko jest ograniczone :)
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
Zealota
Użytkownik
Posty: 6
Rejestracja: 18 lis 2017, 17:45
Lokalizacja: Gliwice
Kontakt:

Re: Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Post autor: Zealota » 19 gru 2017, 9:40

Jako rozwinięcie naszej dyskusji warto spojrzeć na testy, które można znaleźć pod adresem:
https://stm32.eu/2016/11/14/wplyw-konfi ... m3m4-i-m7/

Mały cycacik :)
"Wykorzystanie FPU przyspieszyło obliczenia na liczbach zmiennopozycyjnych pojedynczej precyzji ok. 3,5-20 razy dla biblioteki standardowej i ok. 4,5-25 razy dla biblioteki Microlib.
Użycie wsparcia sprzętowego dla obliczeń zmiennopozycyjnych było najbardziej korzystne w przypadku FOC i FFT, gdzie przyspieszenie wynosiło 15-20 razy dla biblioteki standardowej i 20-25 dla biblioteki Microlib. Trochę mniejsze różnice występowały w przypadku obliczeń na macierzach (6-8 razy dla biblioteki standardowej i 10-13 dla biblioteki Microlib) i prostych obliczeń (3,5-6 razy dla biblioteki standardowej i 4,5-8 dla biblioteki Microlib)."

Jak widać moje wymagania co do wzrostu wydajności przy zastosowaniu FPU w F4 nie były takie mocno wyssane z palca :) są bowiem zastosowania, gdzie użycie FPU przyśpiesza nawet ponad 20 razy. Szczególnie właśnie wcześniej liczyłem na to, że przy FTT będzie konkretny zysk - i faktycznie jest, przynajmniej dla tych układów, które wzięły udział w teście.
Wnioski opieram oczywiście na tyle na ile mój rozumek ogarnia te testy :)

Awatar użytkownika
SunRiver
Administrator
Posty: 513
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Post autor: SunRiver » 19 gru 2017, 16:12

I oczywiście się zgadzam jednakże w tym temacie 0pieraliśmy się wyłacznie o przypadek w jakim testował to autor tematu:)
stąd takie a nie inne podejście do tematu :)

już pisałem że FPU czyni cuda ...a w połaczeniu z DMA i do tego w odpowiedniej aplikacji widać to bardzo wyraźnie
jednak że w omawianym przykładzie obliczania floatów osiągnięty wynik jest całkowicie akceptowalny i wcale nie dziwny
gdyż w oparciu o standardowe biblioteki...

a gdyby tak fukcje machnąć z pominięciem biblioteki , ze wstawkami w asm ,
pogonić na DMA --- mozna by się spodziewać wyższych wartości :)

Jesli kolega widział w dziale demoscena Intro które machnąłem na 429i to właśnie tam ładnie widać że FPU i ChromeART pędzone
po części asmem przez DMA .. robią swoją robotę. A najwięcej kłopotu było z wykonaniem synchronizacji Obrazu VGA z odtwarzanym
również przez 429i wavem i tu i w przypadku GFX jak i SFX widać że bez FPU i ChromeARTA wraz z DMA nic by z tego nie wyszło :(
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

Awatar użytkownika
Zealota
Użytkownik
Posty: 6
Rejestracja: 18 lis 2017, 17:45
Lokalizacja: Gliwice
Kontakt:

Re: Konfiguracja FPU do pracy z STM32F3DISCOVERY-krótki poradnik

Post autor: Zealota » 26 sie 2018, 23:38

Ponieważ nadal interesuję się STM32 oraz DSP wpadłem na ciekawy artykuł o FPU całkiem mocno rozszerzający nasze dywagacje:
https://ucgosu.pl/2018/04/fpu-w-stm32f4 ... oint-unit/

W ogóle polecam bloga Kolegi GAndaLF,a. Jest tam sporo ciekawych informacji dot. STM32 i ogólnie programowania.
Przeglądając bloga natrafiłem na informacje, które pozwoliły mi odpowiedzieć na niektóre, nurtujące mnie, pytania.
Z artykułów szczególnie polecam:
https://ucgosu.pl/2018/05/przydatne-biblioteki-c-stm32/
https://ucgosu.pl/2017/02/uruchomienie- ... 2-eclipse/
https://ucgosu.pl/2017/02/szablon-projektu-stm32/

W archiwum bloga można podejrzeć jeszcze więcej ciekawych tematów:
https://ucgosu.pl/archiwum/

ODPOWIEDZ