Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Následující verze | Předchozí verze | ||
2015:cm4-math [2016/01/16 15:19] Roman Fiala vytvořeno |
2015:cm4-math [2016/01/16 15:31] (aktuální) Roman Fiala |
||
---|---|---|---|
Řádek 11: | Řádek 11: | ||
V tomto projektu byla použita vývojová deska [[http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419?sc=internet/evalboard/product/252419.jsp|STM32F4 DISCOVERY]], která je osazena mikrokontrolérem STM32F407VGT6. Zmíněný mikrokontrolér obsahuje jádro ARM Cortex-M4 včetně FPU koprocesoru. Kromě vývojové desky není pro tento projekt potřeba žádný další hardware. | V tomto projektu byla použita vývojová deska [[http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419?sc=internet/evalboard/product/252419.jsp|STM32F4 DISCOVERY]], která je osazena mikrokontrolérem STM32F407VGT6. Zmíněný mikrokontrolér obsahuje jádro ARM Cortex-M4 včetně FPU koprocesoru. Kromě vývojové desky není pro tento projekt potřeba žádný další hardware. | ||
- | {{2015:cm4-math:stm32f4_discovery_board.jpg}} | + | {{ 2015:cm4-math:stm32f4_discovery_board.jpg }} |
Řádek 23: | Řádek 23: | ||
==== Zdrojový kód ==== | ==== Zdrojový kód ==== | ||
- | Níže je zobrazen soubor vytvořené knihovny **benchmark.c**. | + | Níže je zobrazen soubor **benchmark.c** vytvořené knihovny. |
<code c> | <code c> | ||
Řádek 334: | Řádek 334: | ||
===== Výsledky ===== | ===== Výsledky ===== | ||
- | V této části se nachází výsledky měření doby výpočtu požadovaných funkcí z knihovny ''<arm_math.h>''. Měření bylo provedeno pouze s hard FPU koprocesorem. Pro soft FPU koprocesor se nepodařilo program rozběhnout. Pro porovnání byly změřeny funkce ''cos'' a ''sin'' z knihovny ''<math.h>''. Frekvence procesoru byla nastavena na 168 MHz. Optimalizace kompilátoru nebyly použité. | + | V této části se nachází výsledky měření doby výpočtu požadovaných funkcí z knihovny ''<arm_math.h>''. Měření bylo provedeno pouze s hard FPU koprocesorem. Pro soft FPU koprocesor se nepodařilo program rozběhnout. Pro porovnání byly změřeny i funkce ''cos'' a ''sin'' z knihovny ''<math.h>''. Frekvence procesoru byla nastavena na 168 MHz. Optimalizace kompilátoru nebyly použité. |
==== Goniometrické funkce ==== | ==== Goniometrické funkce ==== | ||
- | ^ funkce ^ doba výpočtu ^ | + | ^ funkce ^ doba výpočtu ^ |
- | | arm_cos_f32 | 0.45 us | | + | | arm_cos_f32 | 0.45 us | |
- | | arm_sin_f32 | 0.45 us | | + | | arm_sin_f32 | 0.45 us | |
- | | arm_cos_q31 | 0.33 us | | + | | arm_cos_q31 | 0.33 us | |
- | | arm_sin_q31 | 0.33 us | | + | | arm_sin_q31 | 0.33 us | |
- | | arm_cos_q15 | 0.38 us | | + | | arm_cos_q15 | 0.38 us | |
- | | arm_sin_q15 | 0.33 us | | + | | arm_sin_q15 | 0.33 us | |
- | | cos | 10.21 us | | + | | cos | 10.21 us | |
- | | sin | 8.59 us | | + | | sin | 8.59 us | |
Řádek 371: | Řádek 371: | ||
Zadání bylo splněno pouze z části, protože se mi nepodařilo vytvořit program nevyužívající FPU koprocesor a také není zjištěna paměťová náročnost funkcí. Zkoušel jsem přidat do projektu soubor **libarm_cortexM4l_math.a**, vypnout v nastavení kompilátoru FPU a odstranit z #defines __FPU_USED. Program však nešel zkompilovat. Pro zjištění paměťové náročnosti jsem zkoušel alokovat pole o maximální velikosti co šlo (musel jsem postupně v cyklu zkoušet postupně alokovat více a více místa), poté bylo pole naplněno stejnými konstantami, následně byla paměť uvolněna. Po provedení výpočtů bylo pole opět alokováno a zjištěno, kolik se v poli nachází původních konstant. Toto řešení mi ovšem ukazovalo využitou paměť chybně. | Zadání bylo splněno pouze z části, protože se mi nepodařilo vytvořit program nevyužívající FPU koprocesor a také není zjištěna paměťová náročnost funkcí. Zkoušel jsem přidat do projektu soubor **libarm_cortexM4l_math.a**, vypnout v nastavení kompilátoru FPU a odstranit z #defines __FPU_USED. Program však nešel zkompilovat. Pro zjištění paměťové náročnosti jsem zkoušel alokovat pole o maximální velikosti co šlo (musel jsem postupně v cyklu zkoušet postupně alokovat více a více místa), poté bylo pole naplněno stejnými konstantami, následně byla paměť uvolněna. Po provedení výpočtů bylo pole opět alokováno a zjištěno, kolik se v poli nachází původních konstant. Toto řešení mi ovšem ukazovalo využitou paměť chybně. | ||
+ | |||
+ | Zjištěné doby výpočtů u funkce ''arm_conv_q15'' jsou oproti ostatním časům podezřele velké. | ||
+ | |||
+ | Výsledky podobného měření doby výpočtu funkcí z knihovny ''<arm_math.h>'' na jiném procesoru lze vidět například zde: [[https://community.freescale.com/thread/327833|K70 DSP benchmark test]]. |