Creación de aplicaciones para Android* NDK con los Fundamentos integrados del rendimiento Intel®
Nota: Este tutorial ha sido donado a la comunidad de javaHispano por Intel. Intel espera que en el futuro sus procesadores incrementen considerablemente su presencia en los terminales móviles Android, por ello ha creído que este artículo sería interesante para nuestra comunidad. El artículo puede encontrarse en la web de Intel aquí. Podéis encontrar el primer artículo de la serie aquí.
Resumen
Los Fundamentos integrados del rendimiento Intel® proporcionan funciones de módulos altamente optimizados para procesamiento de imágenes, procesamiento de señales, matemática de vectores y computaciones en matriz pequeña. Varios dominios de los Fundamentos integrados del rendimiento Intel® contienen las funciones afinadas manualmente para el procesador Intel® Atom™ al aprovechar las instrucciones de Intel® Streaming SIMD Extensions (Intel® SSE). Las bibliotecas Linux* no subprocesadas y estáticas de los Fundamentos integrados del rendimiento Intel® ahora son compatibles con el sistema operativo Android*, y se pueden utilizar con las aplicaciones para Android.
Este artículo ofrece una introducción a la manera de agregar funciones de los Fundamentos integrados del rendimiento Intel® dentro las aplicaciones del NDK para Android. Los Fundamentos integrados del rendimiento Intel® proporcionan optimizaciones específicas para el procesador y solo se pueden vincular con código C/C++ para Android nativo. Para utilizar los Fundamentos integrados del rendimiento Intel® con su aplicación, necesita incluir las funciones de éstos en su código fuente y también necesita agregar las bibliotecas de éstos en la línea de comandos de creación.
Uso de los Fundamentos integrados del rendimiento Intel®
1. Adición de las funciones de los Fundamentos integrados del rendimiento Intel® en el código fuente
-
Incluya los archivos de encabezado de los Fundamentos integrados del rendimiento Intel® (ipp.h) en los archivos de código fuente.
-
Llame a
ippInit() antes de utilizar cualquier otra función de los Fundamentos integrados del rendimiento Intel®. Los Fundamentos integrados del rendimiento Intel® detectan las características del procesador y selecciona la ruta del código de optimización para los procesadores de destino. Antes de llamar a cualquier otra función de los Fundamentos integrados del rendimiento Intel®, llame a
ippInit() para
inicializar la CPU que despacha a los Fundamentos integrados del rendimiento Intel®.
-
Llame a las funciones de los Fundamentos integrados del rendimiento Intel® en su código fuente C/C++.
2. Inclusión de las bibliotecas de los Fundamentos integrados del rendimiento Intel® en los archivos de creación del NDK para Android
-
Copie las bibliotecas y los encabezados de los Fundamentos integrados del rendimiento Intel® en la carpeta de su proyecto.
-
Busque las bibliotecas Intel obligatorias para la aplicación: las bibliotecas de los Fundamentos integrados del rendimiento Intel® se categorizan en distintos dominios. Cada dominio tiene su propia biblioteca y algunas bibliotecas de dominios dependen de otras. Cada dominio necesita incluir todas las bibliotecas del dominio y sus dependencias en la línea de vinculación. Consulte el artículo “
Intel IPP Library Dependencies” (Dependencias de bibliotecas de los Fundamentos integrados del rendimiento Intel®) para familiarizarse con las bibliotecas requeridas por los Fundamentos integrados del rendimiento Intel®.
-
Agregue las bibliotecas de los Fundamentos integrados del rendimiento Intel® en el archivo de la secuencia de comandos de creación para Android “jni/Android.mk”:
Declare cada biblioteca de los Fundamentos integrados del rendimiento Intel® como el módulo de la biblioteca pregenerada. Por ejemplo, si la aplicación utiliza las dos bibliotecas de los Fundamentos integrados del rendimiento Intel® "libipps.a" y "libippcore.a", agregue lo siguiente en el archivo:
include $(CLEAR_VARS)
LOCAL_MODULE := ipps
LOCAL_SRC_FILES := ../ipp/lib/ia32/libipps.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ippcore
LOCAL_SRC_FILES := ../ipp/lib/ia32/libippcore.a
include $(PREBUILT_STATIC_LIBRARY)
Añada la ruta al encabezado y las bibliotecas de los Fundamentos integrados del rendimiento Intel® en los módulos que llaman a las funciones de los Fundamentos integrados del rendimiento Intel®:
include $(CLEAR_VARS)
LOCAL_MODULE := IppAdd
LOCAL_SRC_FILES := IppAdd.c
LOCAL_STATIC_LIBRARIES := ipps ippcore
LOCAL_C_INCLUDES := ./ipp/include
include $(BUILT_SHARED_LIBRARY)
Creación de un ejemplo de código
A continuación se incluye un ejemplo simple que muestra el uso de los Fundamentos integrados del rendimiento Intel® en el código nativo para Android. El código utiliza la función ippsAdd_32f() de los Fundamentos integrados del rendimiento Intel® para agregar datos en dos matrices.
Para revisar el uso de los Fundamentos integrados del rendimiento Intel® en el código:
-
-
Aprenda el uso de los Fundamentos integrados del rendimiento Intel® en los archivos de código fuente: El archivo "jni/IppAdd.c" proporciona la implementación de una función nativa NativeIppAdd(). La función llama a la función ippsAdd_32f() de los Fundamentos integrados del rendimiento Intel®. El archivo "src/com/example/testippadd/ArrayAddActivity.java" llama a la función nativa "NativeIppAdd()" mediante JNI.
-
Revise el archivo "jni/Android.mk". Este archivo agrega las bibliotecas requeridas de los Fundamentos integrados del rendimiento Intel® a la secuencia de comandos de compilación. El ejemplo utiliza la función ippsAdd_32f(), la cual pertenece al dominio de procesamiento de señales de los Fundamentos integrados del rendimiento Intel®. La función depende de las bibliotecas "libipps.a" y "libippcore.a". El archivo "Android.mk" crea dos bibliotecas pregeneradas para ellas.
Puede crear el ejemplo de código ya sea con las herramientas de comandos SDK y NDK o con la ayuda de Eclipse* IDE
Creación del ejemplo desde una línea de comandos
>cd <projectdir>
><ndkdir>/ndk-build
>cd <projectdir>
>android update project -p . -s
>ant debug
>adb install bin/ArrayAddActivity-debug.apk
- Copie los encabezados y bibliotecas de los Fundamentos integrados del rendimiento Intel® en la carpeta de su proyecto (por ejemplo: <projectdir>/ipp).
- Ejecute la secuencia de comandos "ndk-build" desde el directorio de su proyecto para crear el código nativo
- Cree el paquete para Android e instale la aplicación
Creación del ejemplo por Eclipse* IDE
>cd <projectdir>
><ndkdir>/ndk-build
- Copie los encabezados y bibliotecas de los Fundamentos integrados del rendimiento Intel® en la carpeta de su proyecto (por ejemplo: <projectdir>/ipp).
- En Eclipse, haga clic en File (Archivo) >> New (Nuevo) >> Project... (Proyecto) >> Android>> Android Project from Existing Code (Proyecto para Android desde código existente). En "Root Directory" (Directorio raíz), seleccione la carpeta de ejemplo de código y, a continuación, haga clic en Finish (Finalizar).
- Ejecute la secuencia de comandos 'ndk-build' desde el directorio del proyecto para crear el código nativo:
- Cree la aplicación en Eclipse IDE y despliegue el archivo .apk.
Resumen
Este artículo ofrece una introducción al uso de los Fundamentos integrados del rendimiento Intel® con las aplicaciones nativas para Android. Consulte información adicional sobre las funciones de los Fundamentos integrados del rendimiento Intel® en el manual de los Fundamentos integrados del rendimiento Intel®.