完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在ESP32上运行下列代码(大概逻辑吧,实际上比下列结构再复杂一些,我会循环调用inner_product,一些机器学习的代码)
samples[128] =i2s_read(); for(,,,) std::inner_product(samples); i2s_write(samples); 结果就是,inner_product占用了大量的时间,导致音频没有办法及时的处理,在esp32 Lyra-T 4.3上面的表现就是音频变得非常的奇怪,断断续续。(看门狗也会提示出错,我把看门狗关闭了,否则esp32会无限重启) 我注意到esp-nnesp-dsp等项目好像优化了一部分算法,但是我好像是没有找到类似std::inner_product的实现,可以介绍一下有没有优化过的API吗? |
|
相关推荐
1个回答
|
|
std::inner_product函数在某些情况下可能会运行得较慢,原因可能有以下几点:
1. **算法复杂度**:std::inner_product函数的实现通常是基于O(n)的时间复杂度,但具体的性能还取决于输入数据的大小和类型。如果输入数据较大,计算时间可能会增加。 2. **编译器优化**:不同的编译器和编译选项可能会对性能产生影响。如果你使用的编译器没有对std::inner_product进行足够的优化,那么性能可能会受到影响。 3. **硬件限制**:ESP32是一款低功耗、低成本的微控制器,其处理能力有限。在处理复杂的算法时,可能会遇到性能瓶颈。 4. **代码实现**:你的代码实现可能存在一些问题,导致std::inner_product函数运行缓慢。例如,循环调用inner_product可能导致不必要的重复计算。 为了提高性能,你可以尝试以下方法: 1. **优化算法**:检查你的代码,看看是否有优化空间。例如,减少不必要的循环调用,或者使用更高效的算法。 2. **使用专用库**:你提到了esp-dsp等项目,这些项目可能已经对一些算法进行了优化。尝试使用这些库中的函数替代std::inner_product,看看是否能提高性能。 3. **调整编译器选项**:尝试使用不同的编译器或调整编译选项,以获得更好的性能。例如,使用更高级别的优化选项(如-O3)。 4. **并行处理**:如果可能的话,尝试将计算任务分配到多个核心或线程上,以提高处理速度。 5. **硬件升级**:如果ESP32的性能确实无法满足你的需求,你可以考虑使用更强大的硬件平台。 最后,如果你能提供更详细的代码实现,我可能会给出更具体的建议。 |
|
|
|
只有小组成员才能发言,加入小组>>
1106 浏览 1 评论
574浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
460浏览 5评论
461浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 09:46 , Processed in 0.674366 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号