2010-10-25 7 views
1

Salut tous Je rencontre un problème avec ma bibliothèque JNI. La durée d'exécution du même code change d'un téléphone à l'autre. Je pensais que c'était juste parce que nous testions sur un vieux téléphone, mais récemment je cours sur la légende du htc et tout le code JNI était lent ...Android: Performances du code natif/JNI changer d'un téléphone à un autre

je lance le profileur et son vraiment une différence de nuit et jour: sur certains téléphones les fonctions jni prennent 15% à 20% comme sur les autres téléphones il faut 40% et 50% pour les mêmes conditions ...

quelqu'un a une explication?

+1

Si vous donnez plus d'informations - ce que fait votre code JNI, quels sont les périphériques et quels sont les horaires de ces périphériques - je pourrais hasarder une estimation pour vos circonstances spécifiques. – Will

+0

En particulier, si "code JNI" signifie "code qui fait beaucoup d'appels JNI" ou simplement "code natif". – fadden

+0

oki pour être plus précis, j'utilise le moteur physique chipmunk que j'ai enveloppé pour le rendre utilisable avec android. donc toute la partie physique est faite en C et le résultat est renvoyé à Java. –

Répondre

1

Si l'un des téléphones utilise JIT (Just In Time) Compilateur ajouté dans Foryo (2.2) que celui-ci devrait être beaucoup plus rapide que les plus anciens. Testez-vous en utilisant la même version Android?

En dehors de cela Certains périphériques sont meilleurs en mathématiques à virgule flottante que d'autres. Les périphériques qui n'implémentent pas de FPU vont émuler leurs opérations de virgule flottante. Ici vous pouvez trouver un bon blog à ce sujet: http://www.badlogicgames.com/wordpress/?p=71.

Il y a Planty des sources sur la façon de mettre en œuvre un système de points à flotteur en utilisant le point fixe Arithmétique: http://en.wikipedia.org/wiki/Fixed-point_arithmetic

+0

JIT ne s'applique pas à JNI – Will

+0

Vrai, donc ne prenez tout simplement pas en compte la première partie: D – Moss

+0

cela semble effectivement être le problème que j'ai eu. puisque je n'ai pas écrit le code C que j'utilise, je suis assez limité dans ce que je peux faire, mais déjà en passant des doubles aux flotteurs, j'ai réussi à gagner en vitesse. merci –

1

processeurs ne sont certainement pas créés égaux; ils ont différents flux, vitesses, mise en cache et autres. L'explication évidente est que est le processeur.

De plus, tout ce qui touche l'ensemble du système peut avoir un impact sur le traitement - si vous traitez une image prise par la caméra avec JNI, la taille de l'image peut être spécifique à l'appareil.

De plus, vous devez vérifier que vous mesurez le temps de filetage et l'heure de l'horloge murale; si vous regardez les horaires relatifs aux parties du code qui sont Java, vous pourriez voir une accélération relative dans le Java (par exemple JIT dans Android 2.2) et pas un ralentissement dans le JNI.

Questions connexes