Créer des applications NDK Android* avec Intel® Integrated Performance Primitives (Intel® IPP)


Intel® Integrated Performance Primitives (Intel® IPP) fournit des composants hautement optimisés pour le traitement des images, le traitement des signaux, les mathématiques vectorielles et les calculs de petites matrices. Plusieurs domaines Intel IPP contiennent les 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 est une introduction à l’ajout de fonctions Intel IPP à des applications NDK Android. Intel IPP fournit une optimisation spécifique au processeur et ne peut être lié qu’à du code Android C/C++ natif. 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.

Utilisation d’Intel IPP

1. Ajout de fonctions Intel IPP dans les fichiers source

  • Incluez les fichiers d’en-tête Intel IPP (ipp.h) dans les fichiers source.
  • Appelez ippInit() avant d’utiliser toute autre fonction Intel IPP. Intel IPP détecte les caractéristiques du processeur et sélectionne la voie d’optimisation du code en fonction des processeurs cibles. Avant d’appeler toute autre fonction Intel IPP, appelez ippInit() pour initialiser la répartition de l’UC pour Intel IPP.
  • Appelez les fonctions Intel IPP dans votre code source C/C++.

2. Inclusion des bibliothèques Intel IPP dans les fichiers de build NDK Android

  • Copiez les bibliothèques et en-têtes Intel IPP dans votre dossier de projet.
  • Trouvez les bibliothèques Intel nécessaires à l’application : les bibliothèques Intel IPP sont classées en domaines différents. Chaque domaine possède sa propre bibliothèque et certaines bibliothèques de domaine dépendent d’autres bibliothèques. Toutes les bibliothèques de domaine et leurs dépendances doivent être incluses dans la ligne de liaison. Consultez l’article « Intel IPP Library Dependencies » (Dépendances des bibliothèques Intel IPP) pour en savoir plus sur les bibliothèques Intel IPP nécessaires.
  • Ajoutez les bibliothèques Intel IPP au fichier de script de build Android « jni/Android.mk » :
    Déclarez chaque bibliothèque Intel IPP comme module de bibliothèque préconstruit. Par exemple, si l’application utilise deux bibliothèques Intel IPP « libipps.a » et « libippcore.a », ajoutez ce qui suit au 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 de l’en-tête et les bibliothèques 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)

Construire un code d’exemple

Vous trouverez ci-dessous un exemple simple montrant l’utilisation d’Intel IPP dans le code Android natif. Le code utilise la fonction Intel IPP ippsAdd_32f() pour ajouter des données à deux tables.

Pour examiner l’utilisation d’Intel IPP dans le code :

  1. Téléchargez l’exemple de code et décompressez-le dans votre dossier de projet(<projectdir>).
  2. Apprenez l’utilisation d’Intel IPP dans les fichiers source : le fichier « jni/IppAdd.c » montre l’implémentation d’une fonction native NativeIppAdd(). La fonction appelle la fonction Intel IPP ippsAdd_32f(). Le fichier « src/com/example/testippadd/ArrayAddActivity.java » appelle la fonction native « NativeIppAdd() » par JNI.
  3. Examinez le fichier « jni/Android.mk ». Ce fichier ajoute les bibliothèques Intel IPP nécessaires au script de construction. L’exemple utilise la fonction ippsAdd_32f(), qui appartient au domaine de traitement de signaux Intel IPP. La fonction dépend des bibliothèques « libipps.a » et « libippcore.a ». Le fichier « Android.mk » leur crée deux bibliothèques préconstruites.

Vous pouvez construire l’exemple de code en utilisant les outils de commande SDK et NDK ou en utilisant l’IDE Eclipse*

Construire 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 en-têtes et les bibliothèques Intel IPP dans votre dossier de projet (par ex., <projectdir>/ipp).
  2. Exécutez le script « ndk-build » depuis le répertoire de votre projet pour construire le code natif
  3. Construisez le package Android et installez l’application

Construire l’exemple depuis l’IDE Eclipse*

         >cd <projectdir>
         ><ndkdir>/ndk-build 
  1. Copiez les en-têtes et les bibliothèques Intel IPP dans votre dossier de projet (par ex., <projectdir>/ipp).
  2. Dans Eclipse, cliquez sur Fichier >> Nouveau >> Projet... >> Android >> Projet Android depuis un code existant. Dans le « Répertoire racine », sélectionnez le dossier de l’exemple de code, puis cliquez sur Terminer.
  3. Exécutez le script « ndk-build » depuis le répertoire de votre projet pour construire le code natif :
  4. Construisez l’application dans l’IDE Eclipse et déployez le fichier .apk.

Résumé
Cet article fournit une introduction à l’utilisation d’Intel IPP avec des applications Android natives. Vous trouverez davantage d’informations sur les fonctions Intel IPP dans le manuel Intel IPP.