新云软件园:请安心下载,绿色无病毒!
软件提交最近更新热门排行5、 利用NDK生成.so文件:选中工程-->Properties-->Builders-->New-->选中Program-->OK,Name:Hello_Neon_Builder,Location: D:\ProgramFiles\Android\android-sdk\android-ndk-r9\ndk-build.cmd,Working Directory: E:\NEON\Eclipse\Hello-Neon -->Apply,选中Refresh,勾选Refreshresources upon completion, 勾选Specific resources,点击Specify Resources…,勾选Hello-Neon工程下的libs文件夹,Finish-->Apply,选中BuildOptions,勾选Allocate Console(necessary for input), After a “Clean”, During manualbuilds, During auto builds, Specify working set of relevant resources,点击SpecifyResoures…,勾选Hello-Neon工程下的jni文件夹,Finish-->Apply-->OK-->OK,会在libs文件夹下生成libhelloneon.so文件;
6、 选中Hello-Neon,-->Run As-->AndroidApplication,运行结果为:
FIRFilter benchmark:
C version :282.84 ms
Neon version :135985 ms(x2.07994 faster)
以上是.c文件的操作步骤,若将.c文件该为.cpp文件,则需改动两个文件:
1、将Android.mk改为:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := helloneon #填写要编译的源文件路径 LOCAL_SRC_FILES := helloneon.cpp helloneon-intrinsics.cpp #默认包含的头文件路径 LOCAL_C_INCLUDES := \ $(LOCAL_PATH) \ $(LOCAL_PATH)/.. #-g 后面的一系列项目添加了才能使用arm_neon-h头文件, -mfloat-abi=softfp -mfpu=neon 使用arm_neon.h必须 LOCAL_CFLAGS := -g -mfloat-abi=softfp -mfpu=neon -march=armv7-a -mtune=cortex-a8 LOCAL_LDLIBS := -lz -llog TARGET_ARCH_ABI := armeabi-v7a LOCAL_ARM_MODE := arm ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) #采用NEON优化技术 LOCAL_ARM_NEON := true #LOCAL_CFLAGS := -DHAVE_NEON=1 endif LOCAL_STATIC_LIBRARIES := cpufeatures #生成动态调用库 include $(BUILD_SHARED_LIBRARY) $(call import-module,cpufeatures)
2、helloneon.c改为:
#include #include #include #include #include #include "helloneon-intrinsics.h" #define DEBUG 0 #define HAVE_NEON #ifdef __cplusplus extern "C" { #endif #if DEBUG #include # define D(x...) __android_log_print(ANDROID_LOG_INFO,"helloneon",x) #else # define D(...) do {} while (0) #endif /* return current time in milliseconds */ static double now_ms(void) { struct timespec res; clock_gettime(CLOCK_REALTIME, &res); return 1000.0*res.tv_sec + (double)res.tv_nsec/1e6; } /* this is a FIR filter implemented in C */ static void fir_filter_c(short *output, const short* input, const short* kernel, int width, int kernelSize) { int offset = -kernelSize/2; int nn; for (nn = 0; nn < width; nn++) { int sum = 0; int mm; for (mm = 0; mm > 16); } } #define FIR_KERNEL_SIZE 32 #define FIR_OUTPUT_SIZE 2560 #define FIR_INPUT_SIZE (FIR_OUTPUT_SIZE + FIR_KERNEL_SIZE) #define FIR_ITERATIONS 600 static const short fir_kernel[FIR_KERNEL_SIZE] = { 0x10, 0x20, 0x40, 0x70, 0x8c, 0xa2, 0xce, 0xf0, 0xe9, 0xce, 0xa2, 0x8c, 070, 0x40, 0x20, 0x10, 0x10, 0x20, 0x40, 0x70, 0x8c, 0xa2, 0xce, 0xf0, 0xe9, 0xce, 0xa2, 0x8c, 070, 0x40, 0x20, 0x10 }; static short fir_output[FIR_OUTPUT_SIZE]; static short fir_input_0[FIR_INPUT_SIZE]; static const short* fir_input = fir_input_0 + (FIR_KERNEL_SIZE/2); static short fir_output_expected[FIR_OUTPUT_SIZE]; /* This is a trivial JNI example where we use a native method * to return a new VM String. See the corresponding Java source * file located at: * * apps/samples/hello-neon/project/src/com/example/neon/HelloNeon.java */ JNIEXPORT jstring JNICALL Java_com_hello_1neon_android_Hello_1NeonProjectActivity_stringFromJNI(JNIEnv *env, jobject thiz) { char str[512] = {0}; uint64_t features; char buffer[512]; char tryNeon = 0; double t0, t1, time_c, time_neon; /* setup FIR input - whatever */ { int nn; for (nn = 0; nn 0; count--) { fir_filter_c(fir_output, fir_input, fir_kernel, FIR_OUTPUT_SIZE, FIR_KERNEL_SIZE); } } t1 = now_ms(); time_c = t1 - t0; sprintf(str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); strlcpy(buffer, str, sizeof buffer); strlcat(buffer, "Neon version : ", sizeof buffer); if (android_getCpuFamily() != ANDROID_CPU_FAMILY_ARM) { strlcat(buffer, "Not an ARM CPU !\n", sizeof buffer); goto EXIT; } features = android_getCpuFeatures(); if ((features & ANDROID_CPU_ARM_FEATURE_ARMv7) == 0) { strlcat(buffer, "Not an ARMv7 CPU !\n", sizeof buffer); goto EXIT; } /* HAVE_NEON is defined in Android.mk ! */ #ifdef HAVE_NEON if ((features & ANDROID_CPU_ARM_FEATURE_NEON) == 0) { strlcat(buffer, "CPU doesn't support NEON !\n", sizeof buffer); goto EXIT; } /* Benchmark small FIR filter loop - Neon version */ t0 = now_ms(); { int count = FIR_ITERATIONS; for (; count > 0; count--) { fir_filter_neon_intrinsics(fir_output, fir_input, fir_kernel, FIR_OUTPUT_SIZE, FIR_KERNEL_SIZE); } } t1 = now_ms(); time_neon = t1 - t0; sprintf(str, "%g ms (x%g faster)\n", time_neon, time_c / (time_neon < 1e-6 ? 1. : time_neon)); strlcat(buffer, str, sizeof buffer); /* check the result, just in case */ { int nn, fails = 0; for (nn = 0; nn < FIR_OUTPUT_SIZE; nn++) { if (fir_output[nn] != fir_output_expected[nn]) { if (++fails NewStringUTF(buffer); } #ifdef __cplusplus } #endif
Adobe Photoshop,简称“PS”,是一个由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以更有效的进行图片编辑工作。Photoshop的应用领域很...
新云软件园FCPX插件合集专题,为大家分享Final Cut Pro X 经典实用插件包下载,包含FCPX转场插件、FCPX调色插件、FCPX字幕插件、FCPX视觉特效插件等,全部都免费下载,欢迎需要的朋友下载收藏。...
85.66 MB | 12-03
进入205 MB | 07-10
进入166.91 MB | 07-10
进入209 MB | 08-23
进入4.37 MB | 09-23
进入Copyright © 2004-2024 Newasp.Com. All Rights Reserved .
新云下载是一个免费软件下载站,提供绿色免费PC软件,手机软件,单机游戏下载,是国内最安全的下载网站!
文章评论
网友评论