ARM 구현은 매우 전통적입니다. Github에서 확인할 수 있습니다. 루프 오버 헤드를 줄이기 위해 루프를 풀고 루프 당 4 개의 샘플을 합산하여 최종적으로 샘플 수를 나눕니다. M4F를 사용해 보았습니다. 플로트 당 5.3 사이클. 여기
내가이, 당신의 성능 저하가 귀하의 잘못이나 실리콘 사이클의 수를 측정하는 원인 일 수 있습니다 당신은 부동 소수점으로 얻을 수있는 최상의 성능을 생각 나는
#include "arm_math.h"
#define MAX_BLOCKSIZE 32
float32_t src_buf_f32[MAX_BLOCKSIZE] =
{
-0.4325648115282207, -1.6655843782380970, 0.1253323064748307,
0.2876764203585489, -1.1464713506814637, 1.1909154656429988,
1.1891642016521031, -0.0376332765933176, 0.3272923614086541,
0.1746391428209245, -0.1867085776814394, 0.7257905482933027,
-0.5883165430141887, 2.1831858181971011, -0.1363958830865957,
0.1139313135208096, 1.0667682113591888, 0.0592814605236053,
-0.0956484054836690, -0.8323494636500225, 0.2944108163926404,
-1.3361818579378040, 0.7143245518189522, 1.6235620644462707,
-0.6917757017022868, 0.8579966728282626, 1.2540014216025324,
-1.5937295764474768, -1.4409644319010200, 0.5711476236581780,
-0.3998855777153632, 0.6899973754643451
};
float32_t result_f32;
int main(void)
{
arm_mean_f32(src_buf_f32, MAX_BLOCKSIZE, &result_f32);
return 0;
}
를 사용하는 코드입니다 . 당신은 또한 컴파일러 최적화를 증가 시키려고 시도 할 수있다.
부동 소수점 나누기에 많은 시간이 걸릴 것 같습니다. 상호 계산을 시도하고 합계를 곱하면 시간을 절약해야합니다. – user3528438