首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平均N个浮点样本的ARM CMSIS DSP吞吐量

平均N个浮点样本的ARM CMSIS DSP吞吐量
EN

Stack Overflow用户
提问于 2017-01-25 17:54:31
回答 1查看 666关注 0票数 1

我编写了一个简单的C代码来计算数组中存在的N个float的平均值。作为大N的吞吐量,我获得了每个浮点数10.5 ClockCyles。

实际上,arm_mean_f32()的性能较差。

这不是太多CCs/浮子了吗?

3项行动

  1. 内存负载
  2. 累积负载值
  3. 指针增量

可以并行发生。

手臂皮质M4F是这样做的吗?

该项目是在自定义板上运行的,飞思卡尔K24处理器拥有ARM Cortex M4F。

EN

回答 1

Stack Overflow用户

发布于 2017-07-19 09:42:39

ARM实现是非常传统的--您可以在Github上检查它,他们只需进行循环展开以减少循环开销,然后累积每个循环的4个样本之和,最后再除以样本数,我用M4F尝试过,每次浮动得到5.3个周期。

这是我使用的代码

代码语言:javascript
复制
#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;
}

我认为这是你能用浮点获得的最好的性能,你的糟糕表现可能是因为你不正确地测量周期数或你的硅。您还可以尝试增加编译器优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41858348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档