移植FFTW到ARM(android)平台

6 篇文章 0 订阅
2 篇文章 0 订阅

移植FFTW到ARM平台

 

1.下载FFTW代码:http://fftw.org

2.下载NDK环境:http://developer.android.com/tools/sdk/ndk/index.html

如果上外网连接不好,建议使用百度浏览器或者翻墙软解搞定。

 

本人开发环境如下

Build平台:ubuntu linux 64位

Host平台:规格是arm cortex-A7 单核 1.2GHz

Host系统:android

FFTW版本为:fftw3.3.4

NDK版本为: android-ndk-r10d-linux-x86_64.bin

 

开发流程:

Step 1:先在NDK环境下编译FFTW库,编译出静态链接库。

Step 2:再调用该库编译成可执行文件或者动态链接库。

Step 3:测试结果

Step1: 

1> 文件目录:

——android-ndk-r10d

——fftw3.3.4

——fftw_install

 

2> 配置系统变量:

NDK_DIR="/home/zhouxiaoyong/android-ndk-r9c"

INSTALL_DIR="`pwd`/fftw3"

SRC_DIR="`pwd`/../fftw-3.3.4"

cd $SRC_DIR 

export PATH="$NDK_DIR/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/:$PATH"

export SYS_ROOT="$NDK_DIR/platforms/android-8/arch-arm/"

export CC="arm-linux-androideabi-gcc--sysroot=$SYS_ROOT -march=armv7-a -mfloat-abi=softfp"

export LD="arm-linux-androideabi-ld"

export AR="arm-linux-androideabi-ar"

export RANLIB="arm-linux-androideabi-ranlib"

export STRIP="arm-linux-androideabi-strip"

export CFLAGS="-mfpu=neon-mfloat-abi=softfp -O3 -fPIC -ldl" 

mkdir -p $INSTALL_DIR

 

3> 配置编译配置

./configure --host=arm-eabi         \

       --prefix=$INSTALL_DIR  \

       LIBS="-lc -lgcc"        \

       --enable-single           \

       --enable-float            \

       --enable-shared=yes       \     尽管配置了,还是没有产生动态库

       --enable-neon            \

       --enable-maintainer-mode  \

       --disable-fortran          \

 

4> make -j16 && make install

 

Step 2: 

 1> 编写 android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_C_INCLUDES:= $(LOCAL_PATH)/fftw3/include

LOCAL_SRC_FILES:= test.c

LOCAL_LDFLAGS +=-Wl,--no-warn-shared-textrel

LOCAL_MODULE := test_android

LOCAL_SHARED_LIBRARIES:= libcutils \

                         libutils  \

                         Liblog

 

# LOCAL_STATIC_LIBRARIES:=fftw3f/lib/libfftw3f

 

LOCAL_LDFLAGS += $(LOCAL_PATH)/fftw3/lib/libfftw3f.a

LOCAL_MODULE_TAGS := optional

include $(BUILD_EXECUTABLE)

 

2> 测试代码:

       此文件中包含FFTW编译出来的库,可下载直接在Android开发工程下编译运行。

http://download.csdn.net/detail/opentld/8510837

 

Step 3:测试结果 

1> 正确性测试:

使用MATLAB生成一个矩阵magic(8), 使用 fft2() 和ifft2()先后进行前向傅里叶变换和后向傅里叶变换。结果与ARM端的结果相对比。

结论:正向变换结果完全一致。反向结果相差一个常量系数。Matlab的ifft2()可以得到原矩阵。而测试代码中需要对每个元素除以矩阵size大小之后才可以得到原矩阵。

 

2> 性能测试:

测试结果案例:

root@android:/test # ./test_android160                                

./test_android 160                                                     

width = 160 height = 160                                               

timeEnd = 317963971   timeStart =317958426   time consumption = 5    

timeEnd = 317977398   timeStart = 317971659   time consumption = 5    

timeEnd = 317987181   timeStart =317981557   time consumption = 5    

timeEnd = 318000068   timeStart =317991381   time consumption = 8    

timeEnd = 318010155   timeStart =318004281   time consumption = 5    

timeEnd = 318019852   timeStart =318014198   time consumption = 5    

timeEnd = 318029777   timeStart =318024043   time consumption = 5    

timeEnd = 318042624   timeStart =318036796   time consumption = 5    

timeEnd = 318052469   timeStart = 318046719   time consumption = 5    

timeEnd = 318062412   timeStart =318056525   time consumption = 5    

Destroy is OK *****                                                    

root@android:/test #    

注意时间单位是微妙,最后取舍时间单位为毫秒

本人测试的时间要比参考资料中(2)时间要小30%~ 40%(而单核CPU计算能力应该是不如对方的),不知道对方是否开启 –O3优化。

 

 192        

 timeconsumption= 14

 timeconsumption= 10 

 timeconsumption= 10 

 timeconsumption= 10 

 timeconsumption= 10 

 timeconsumption= 10 

 timeconsumption= 10 

 timeconsumption= 13 

 timeconsumption= 10 

 timeconsumption= 13

 

128

 timeconsumption= 7   

 timeconsumption= 3  

 timeconsumption= 3  

 timeconsumption= 4  

 timeconsumption= 3  

 timeconsumption= 4  

 timeconsumption= 4  

 timeconsumption= 3  

 timeconsumption= 4  

 timeconsumption= 4    

            

 64             

 imeStart = 0 

 timeconsumption= 0  

 timeconsumption= 0  

 timeconsumption= 0  

 timeconsumption= 0  

 timeconsumption= 0  

 timeconsumption= 0  

 timeconsumption= 0  

 timeconsumption= 0  

 timeconsumption= 0  

               

0.6到0.8毫秒之间

                

资料参考:

(1).http://fftw.org/

(2).http://he-kai.com/2014/01/16/编译且移植fftw3到android手机上1/

(3).http://he-kai.com/2014/01/16/编译且移植fftw3到android手机上2/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值