Question

J'ai commencé à jouer avec l'androïde NDK. L'une des choses que je viens d'apprendre est de créer un fichier application.mk pour spécifier le abi ARMv7.

Je construis l'exemple san-angeles avec les paramètres suivants.

APP_MODULES      := sanangeles
APP_PROJECT_PATH := $(call my-dir)/../
APP_OPTIM        := release
APP_ABI          := armeabi-v7a

Cependant, cela semble fonctionner exactement la même vitesse comme avant (c.-à-mal). Est-ce que je viens de GL limité et non limité par le CPU ou est quelque chose qui cloche?

Je l'ai remarqué quand je compile que je reçois les options de la ligne de commande suivante émise:

-march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb 

La chose qui me préoccupe, il y a le « softfp ». Il est fait mention de la v7 abi, les choses FPU VFP et je devine que le « pouce » fait référence aux instructions « pouce-2 » (Bien que je ne sais pas exactement ce que ceux-ci sont). Cependant que « softfp » me préoccupe. Ça ne devrait pas être "hardfp"?

Tout le monde a des idées sur ces questions? Je pense que je suis probablement sur le point de commencer la mise en œuvre du code GL ES 2.0 pour mon HTC Desire, mais je voudrais vous assurer que j'obtenir la meilleure vitesse possible en sortir:)

Vive à l'avance!

Était-ce utile?

La solution

Les options que vous fournissez à la NDK n'affectera la façon dont votre code est compilé. Il ne changera pas les libs GL ou toute autre chose qui fait partie de la plate-forme, qui sont toujours générés de façon appropriée. Si vous êtes juste jeter la géométrie au matériel GL, vous n'allez voir une différence.

Si vous voulez voir si vos options ont un effet, le téléchargement (ou créer) une référence simple qui fait un tas d'opérations avec des valeurs à virgule flottante double précision, et le temps qu'il faut pour exécuter avant et après.

L'argument des -mfloat-abi = détermine comment les valeurs à virgule flottante sont passés entre les fonctions. softfp signifie qu'ils sont toujours passés dans des registres entiers ou sur la pile. Si Android n'a pas précisé softfp, la ARMv7-A version de la bibliothèque s'attend à flotteurs à apparaître dans les registres de matériel, et tout code construit pour ARMv5TE briserait.

« softfp » ajoute un peu de frais généraux à certaines fonctions, mais les instructions pour les valeurs entrant et sortant des registres fp ne coûtent pas cher sur ARM, et la compatibilité avec l'ABI fourni rend utile.

Le "-mthumb" permet la génération de code Thumb / Thumb2. Code de pouce a tendance à être un peu plus lente, mais un peu plus petite que l'équivalent ARM; parfois plus petit signifie que vous correspondez mieux dans la CPU i-cache et courrez en fait plus rapide. La taille est toujours une préoccupation sur ces appareils, si le pouce est activé par défaut.

En cas de doute, "bras-eabi-objdump -d whatever.o" vous montrera un démontage de votre code.

Mise à jour: NDK R9b ajouté soutien à -mhard flottant. Cela vous permet de construire des bibliothèques NDK avec les conventions de l'API dur float pour cibles armeabi-V7A.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top