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]]. | ||