Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2015:cm4-math

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

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 ​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]].
2015/cm4-math.1452953940.txt.gz · Poslední úprava: 2016/01/16 15:19 autor: Roman Fiala