博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译且移植FFTW3到Android手机上(1)
阅读量:6613 次
发布时间:2019-06-24

本文共 1416 字,大约阅读时间需要 4 分钟。

hot3.png

本文主要对如何将FFTW3编译且移植到Android App上进行介绍,同时对各FFTW提供的一些快速傅里叶变换的方法在手机进行性能测试,总结出使用FFTW3进行小规模傅里叶变换的最佳方式。

文章重点内容有:FFTW configure;编译so库;ARM NEON优化;float加速;多线程

第1部分为快速入门版,如想查看更详细的使用说明,请查看 :  内容

 

准备工作:

  • FFTW 3:Version 3.3.3 
  • Android App:我编写的示例程序  使用git或直接去github上下载此项目
  • Linux:我使用的是Ubuntu 12.04 64-bit
  • NDK:android-ndk-r9c    点击合适版本下载
  • Eclipse:我使用的版本是3.7,版本不同关系不大,关键是安装好插件,并在Eclipse中配置好SDK目录和NDK目录

快速入门:

1. 下载好和项目后,将目录结构按如下方式放置

—->parent folder

—->fftw-3.3.3

—->fftw_android

2. Eclipse中导入,选择已有项目,将fftw_android项目导入。运行为Android Application,在手机上查看运行效果。

若出现错误,请检查错误输出,主要检查Eclipse中NDK路径是否配置好,以及在项目上尝试右键Android Tool-> Fix Project Properties 和Add Native Support。若还是有报错,选择错误的视图,将所有的错误选中,删除,再运行看是否能正常编译运行通过。

3. 若想要观察各傅里叶变换方法的性能,打开Logcat,增加过滤器,将Application栏填为com.hekai.fftw_android,从而将此程序的所有LOG输出过滤显示出来。

下表为我的测试结果

测试数据:160 x 160 实数二维矩阵

测试手机:Google Nexus 4( Qualcomm APQ8064 1.5GHz x 4)

方法 Avg(ms)(10 times)
ffwt_plan_dft_2d 58.013794
ffwt_plan_dft_r2c_2d 25.4669923
ffwtf_plan__dft_r2c_2d 19.3967774
ffwtf_plan__dft_r2c_2d(neon) 9.5950195
ffwtf_plan__dft_r2c_2d(threads=4) 30.2916016
ffwtf_plan__dft_r2c_2d(threads=4)(neon) 18.9395753

总结:

  • 对于实数二维矩阵在Android手机上做快速傅里叶变换,使用带有r2c的方法,它会对纯实数矩阵的运算有加速效果。
  • 不要开启多线程,小规模数据时,多线程反而会增加额外时间。
  • 编译FFTW时启用neon优化能明显提高在arm芯片上的运行效率,如上表中10次平均每次是9.6ms,实际数据是第一次花费了50多ms,后面每次都是4ms左右
  • 在无高精度要求的前提下,使用float作为输入,不使用double,减少数据量,提高运算效率

 参考文献:

  1. 一个FFTW NDK的例子 
  2. FFTW官方文档 

另外,还有一篇帖子: 编译且移植FFTW3 

转载于:https://my.oschina.net/u/2963604/blog/2963954

你可能感兴趣的文章
詹妮弗安妮斯顿与皮特离婚是说的话
查看>>
instr和substr函数
查看>>
我的移动开发情缘
查看>>
多态学习小记
查看>>
如何解封被 ESET Internet Security 干掉的 https?
查看>>
magento不同店面,分类、产品url不同
查看>>
JavaScript之选择器
查看>>
Ubuntu下启动、停止、重启MySQL,查看错误日志命令大全
查看>>
我的友情链接
查看>>
Linux命令学习笔记
查看>>
centos7 vim/vi的使用方法
查看>>
DIY强大的虚拟化环境-组装于测试部分3.小插曲之别样方法修复系统
查看>>
GNS3接口标签还原
查看>>
业务规则引擎
查看>>
为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用
查看>>
SpringMVC之框架整体结构
查看>>
算法导论第二版习题试解-第二章练习2.2
查看>>
POJ 1838 解题报告
查看>>
Redis进阶实践之七Redis和Lua初步整合使用
查看>>
Cacti监控ESXI主机步骤详解
查看>>