注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

Android系列十一对JNI库的编译优化  

2015-04-14 16:08:22|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android系列十一对JNI库的编译优化

Android程序中对性能要求比较严格的地方一般会对优化选项进行一下优化的处理。在NDK中的优化其实还是离不开GCCG++)的优化。

AndroidJNI库中,一般要求有Android.mk这个makefile文件,但是对Application.mk是可选的。所以要手动创建两个Makefile文件。名字如上。先把最终的两个文件发上来:

Application.mk

APP_PROJECT_PATH := $(call my-dir)/..
APP_PLATFORM := android-10
APP_STL := stlport_static
APP_CFLAGS := -ffast-math
APP_OPTIM := release
APP_ABI := armeabi-v7a 

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
NDK_TOOLCHAIN_VERSION=4.8
LOCAL_CPPFLAGS := -std=c++11 -O3 -fopenmp -ffast-math -D__cpusplus -g -mfloat-abi=softfp -mfpu=neon -march=armv7-a -mtune=cortex-a8
LOCAL_LDFLAGS += -fopenmp
LOCAL_LDLIBS := -lz -llog
#LOCAL_ARM_MODE := arm
LOCAL_ARM_NEON := true
LOCAL_OPTIM := release
LOCAL_MODULE    := TestNDKOption
LOCAL_SRC_FILES := TestNDKOption.cpp

include $(BUILD_SHARED_LIBRARY)

 

程序的环境是一个原始图像转灰度图的函数,for循环一百次。先说最简单的优化有用的:

1-O3:可以从5秒多降到4秒钟多,大约缩小百分之二十左右。

2arm:可以从5秒多降到2.2秒多。此时加不加O3无太大效果。

3armeabi-v7:5秒多降到2.02.1左右。O3同上。

4、源码中无浮点,所以-ffast-math无效果

5neon选项:这个需要在使用的文件中增加“<arm_neon.h>”这个头文件,并且程序中必须使用NEON的编程方式,网上有很多例程。也就是说如果想使用neon就必须得按neon的规矩来编程。红色的-g部分是打开neon的选项。NDK8支持,同时必须指定3中的V7

6openMP:这个需要在链接和编译标记中增加-fopenmp,同时还得在使用的文件前增加”<omp.h>”,同时也和neon一样,优化的地方使用MP的方式,比如优化for循环需要在每个循环前加:#pragma omp parallel for

需要注意的是:如果循环嵌套,两个循环间又互相使用对方的数据,那么这个效果非但不有提高,反而会大大降低性能。一定要慎之又慎。

这个如果合适可提高到0.8秒左右。效果还是比较明显的。

还有一点:NDK8不支持,必须升级到NDK9

7-vectorize:不支持。这个是支持向量化并行编程的。但NDK不支持。

8ReleaseAndroid默认是Release,所以无效。

9、其它的选项也有一些细小的提高但不明显。

10Eclipse的并行编程本版本软件不支持。

还有更多的细节需要去补充完善。

  评论这张
 
阅读(348)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017