NUC505浮点型运算太慢

2019-07-15 07:52发布

我的程序里面用到cos函数进行计算,如果单纯的用math.c计算一次大概将近2ms,用ARM_math.c可以提升到0.5ms,同时我用STM32f1测试,用math.c大概就0.115ms,请问一下差别真有这么大吗,或者是我自己那块搞错了...
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
小句句63
1楼-- · 2019-07-15 20:29
一个就是系统初始化  再就是配置,计算结果是正确的     所以..........
DH9527
2楼-- · 2019-07-15 21:07
 精彩回答 2  元偷偷看……
DH9527
3楼-- · 2019-07-15 23:28
#include <math.h>     
#include "arm_math.h"

/* ----------------------------------------------------------------------
* Defines each of the tests performed
* ------------------------------------------------------------------- */
#define MAX_BLOCKSIZE        32
#define DELTA           (0.000001f)


/* ----------------------------------------------------------------------
* Test input data for Floating point sin_cos example for 32-blockSize
* Generated by the MATLAB randn() function
* ------------------------------------------------------------------- */

const float32_t testInput_f32[MAX_BLOCKSIZE] =  
{   
        -1.244916875853235400,        -4.793533929171324800,        0.360705030233248850,        0.827929644170887320,        -3.299532218312426900,        3.427441903227623800,        3.422401784294607700,        -0.108308165334010680,         
        0.941943896490312180,        0.502609575000365850,        -0.537345278736373500,        2.088817392965764500,        -1.693168684143455700,        6.283185307179590700,        -0.392545884746175080,        0.327893095115825040,         
        3.070147440456292300,        0.170611405884662230,        -0.275275082396073010,        -2.395492805446796300,        0.847311163536506600,        -3.845517018083148800,        2.055818378415868300,        4.672594161978930800,         
        -1.990923030266425800,        2.469305197656249500,        3.609002606064021000,        -4.586736582331667500,        -4.147080139136136300,        1.643756718868359500,        -1.150866392366494800,        1.985805026477433800


};  

const float32_t testRefOutput_f32 = 1.000000000;

/* ----------------------------------------------------------------------
* Declare Global variables  
* ------------------------------------------------------------------- */
uint32_t blockSize = 32;
float32_t  testOutput;  
float32_t  cosOutput;  
float32_t  sinOutput;  
float32_t  cosSquareOutput;  
float32_t  sinSquareOutput;

/* ----------------------------------------------------------------------
* Max magnitude FFT Bin test
* ------------------------------------------------------------------- */

arm_status status;

int32_t main(void)
{
        float32_t diff;
        uint32_t i;

        for(i=0; i< blockSize; i++)
    {
        cosOutput = arm_cos_f32(testInput_f32[i]);
                sinOutput = arm_sin_f32(testInput_f32[i]);

                arm_mult_f32(&cosOutput, &cosOutput, &cosSquareOutput, 1);
                arm_mult_f32(&sinOutput, &sinOutput, &sinSquareOutput, 1);

                arm_add_f32(&cosSquareOutput, &sinSquareOutput, &testOutput, 1);

                /* absolute value of difference between ref and test */
            diff = fabsf(testRefOutput_f32 - testOutput);
         
            /* Comparison of sin_cos value with reference */
            if(diff > DELTA)
            {
                   status = ARM_MATH_TEST_FAILURE;
            }
                 
            if( status == ARM_MATH_TEST_FAILURE)
            {
               while(1);
            }

    }

    while(1);                             /* main function does not return */
}

/** endlink */

wuli北
4楼-- · 2019-07-16 03:37
有把代碼放在RAM跑嗎?
NUC505如果把SPI FLASH放在ram中,至少加速到4倍

一周热门 更多>