Compiler des applications NDK Android avec les Primitives de Performances d'Intel

Chao Y

Traducteur

Francis Walter

Intel IPP (Integrated Performance Primitive) fournit des composants hautement optimisés pour le traitement d'images, le traitement de signaux, les mathématiques vectorielles et les calculs de petites matrices. Plusieurs domaines d'Intel IPP contiennent des fonctions réglées manuellement pour processeur  Intel® Atom™ en tirant parti des instructions Intel® Streaming SIMD Extensions (Intel® SSE). Les bibliothèques Intel IPP statiques sans threads Linux* prennent maintenant en charge le SE Android* et peuvent être utilisées avec les applications Android.

Cet article introduit la manière dont on peut ajouter des fonctions d'Intel IPP à des applications NDK Android. Notez qu'Intel IPP fournit une optimisation spécifique au processeur et ne peut être utilisé qu'avec du code natif C/C++ Android.

Pour utiliser Intel IPP avec votre application, vous devez inclure des fonctions Intel IPP dans votre code source et vous devez également ajouter des bibliothèques Intel IPP dans la ligne de commande de construction.

N'hésitez pas à donner vos avis par rapport à ce tutoriel. Commentez ♪

- Titre : Compiler des applications NDK Android avec les Primitives de Performances d'Intel

- Auteur : Chao Y

- Traducteur : Francis Walter

- Parution : 8 décembre 2014

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2014 Jennifer J.. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Obtenir Intel IPP

- II. Utiliser Intel IPP

- II-A. Ajouter des fonctions d'Intel IPP dans la source

- II-B. Inclure des bibliothèques d'Intel IPP dans les fichiers de compilations du NDK Android

- III. Compiler un exemple de code

- IV. Compiler l'exemple depuis une ligne de commande

- V. Compiler l'exemple depuis Eclipse

- VI. Résumé

- VII. Ressources

I - Obtenir Intel IPP

Intel IPP est inclus dans la suite Intel® System StudioIntel® System Studio pour Android, qui fournit un ensemble d'outils complets et intégrés aux développeurs embarqués et mobiles. Les bibliothèques statiques non filetées d'Intel IPP supportent l'OS Android et peuvent être utilisées avec des applications Android. Si vous installez Intel IPP avec , les bibliothèques se trouvent par défaut dans le dossier « /system_studio_2015.x.xxx/ipp/lib/ia32_android ».

II - Utiliser Intel IPP

II-A - Ajouter des fonctions d'Intel IPP dans la source

- Incluez les fichiers header « ipp.h » d'Intel IPP dans les fichiers sources.

- Appelez la fonction ippInit() avant d'utiliser des fonctions d'Intel IPP. Intel IPP détecte les fonctionnalités du processeur et sélectionne le chemin optimisé du code en fonction des processeurs cibles. Avant d'appeler toute autre fonction d'Intel IPP, vous devrez appeler ippInit() pour initialiser la répartition de l'UC pour Intel IPP.

- Appelez les fonctions d'Intel IPP dans votre source C/C++.

II-B - Inclure des bibliothèques d'Intel IPP dans les fichiers de compilations du NDK Android

- Trouvez les bibliothèques Intel nécessaires à l'application : les bibliothèques d'Intel IPP sont catégorisées en différents domaines. Chaque domaine possède sa propre bibliothèque et certaines bibliothèques de domaines dépendent d'autres. Il est nécessaire d'inclure toutes les bibliothèques des domaines et leurs dépendances dans la ligne de liaison. Consultez l'article « Les dépendances de bibliothèques Intel IPP » pour en savoir plus sur les bibliothèques Intel IPP requises.

- Copiez les bibliothèques et headers d'Intel IPP nécessaires dans le dossier de votre projet.

Vous avez juste besoin de copier les bibliothèques statiques non filetées (/ipp/lib/ia32/*.a).

- Ajoutez les bibliothèques Intel IPP dans le fichier de compilation Android « jni/Android.mk ».

- Déclarez chaque bibliothèque Intel IPP comme étant un module de bibliothèque précompilé. Par exemple, si l'application utilise deux bibliothèques Intel IPP « libipps.a » et « libippcore.a », ajoutez les lignes ci-dessous dans le fichier :

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)

Ajoutez le chemin du header et les bibliothèques d'Intel IPP aux modules appelant les fonctions Intel IPP :

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)

III - Compiler un exemple de code

Un exemple simple a été donné ci-dessous afin de montrer l'utilisation d'Intel IPP dans du code natif Android. Le code utilise la fonction Intel IPP ippsAdd_32f() pour ajouter des données dans les deux tableaux.

Pour revoir l'utilisation d'Intel IPP dans le code :

1. Téléchargez l'exemple de code et décompressez-le dans le dossier de votre projet (<projectdir>) ;

2. Retrouvez des informations sur l'utilisation d'Intel IPP dans les fichiers sources : le fichier « jni/IppAdd.c » fournit l'implémentation d'une fonction native NativeIppAdd(). Cette dernière appelle la fonction Intel IPP ippsAdd_32f(). Le fichier « src/com/example/testippadd/ArrayAddActivity.java » appelle la fonction native NativeIppAdd() par le biais de JNI ;

3. Examinez le fichier « jni/Android.mk ». Il ajoute les bibliothèques Intel IPP nécessaires dans le script de compilation. L'exemple utilise la fonction ippsAdd_32f() appartenant au domaine de traitement du signal d'Intel IPP. Elle dépend des bibliothèques « libipps.a » et « libippcore.a ». Le fichier « Android.mk » leur crée deux bibliothèques précompilées.

Vous pouvez compiler l'exemple en utilisant les outils de commande SDK et NDK ou en utilisant l'EDI Eclipse.

IV - Compiler l'exemple depuis une ligne de commande

>cd <projectdir>
><ndkdir>/ndk-build

>cd <projectdir>
>android update project -p . -s
>ant debug
>adb install bin/ArrayAddActivity-debug.apk

1. Copiez les headers et les bibliothèques dans le dossier de votre projet (ex. <projectdir>/ipp).

2. Exécutez le script « ndk-build » depuis le répertoire de votre projet pour compiler le code natif.

3. Compilez le package Android et installez l'application.

V - Compiler l'exemple depuis Eclipse

1. Copiez les headers et bibliothèques dans le dossier de votre projet (ex. <projectdir>/ipp).

2. Dans Eclipse, cliquez sur File >> New >> Project… >> Android >> Android Project from Existing Code. Dans le répertoire « Root Directory », sélectionnez le dossier du code de l'exemple et cliquez sur « Finish ».

3. Exécutez le script « ndk-build » depuis le répertoire de votre projet pour compiler le code natif.

4. Compilez l'application dans l'EDI Eclipse et déployez le fichier .apk

VI - Résumé

Cet article fournit une introduction sur l'utilisation d'Intel IPP avec des applications natives Android. Consultez le Manuel Intel IPP pour plus d'informations sur les fonctions d'Intel IPP.

Pour plus d'informations sur les outils d'Intel pour les développeurs Android, veuillez visiter la Zone des Développeurs Intel Android.

VII - Ressources

- Article Original

- Intel Developer Zone Android

- Outils de développement Intel pour Android

- Forum Intel Android

- Intel System Studio

- Intel IPP

- Intel NDK