Quelle est la bonne façon d'utiliser ARM SIMD sur iPhone pour un fonctionnement vecteur / matrice du jeu?

StackOverflow https://stackoverflow.com/questions/2749417

Question

Je fais une bibliothèque vecteur / matrice pour jeu qui utilise l'unité SIMD sur iPhone (3GS ou version ultérieure). Comment puis-je faire ceci? Je cherchai à ce sujet, je sais maintenant plusieurs options:

  • Accélérer cadre (BLAS + LAPACK + ...) d'Apple (iPhone OS 4)
  • OpenMAX bibliothèque de mise en œuvre d'ARM
  • GCC fonction auto-vectorisation

Quelle est la façon la plus appropriée pour la bibliothèque vecteur / matrice pour le jeu?

Était-ce utile?

La solution

Pour bien vous aurez probablement besoin d'écrire vos propres routines SIMD. Utilisez les Neon C intrinsics dans gcc plutôt que assembleur pour soulager la douleur de le faire.

Autres conseils

Vous devez supposer GCC ne sera pas automatiquement vectoriser votre code, car il semble que cela est très improbable!

Comme Paul a dit, pour tirer le meilleur parti de votre iPhone, vous devez écrire votre propre code ARM Assemblée en utilisant des instructions NEON SIMD pour autant que vous le pouvez. Mais cela suppose que vous comprenez le langage assembleur ARM ainsi que NEON, les retards de synchronisation, etc. Donc, si vous ne voulez pas apprendre la langue ARM Assemblée, puis le cadre d'Apple Accelerate et OpenMAX ARM bibliothèques ont toutes deux de nombreuses fonctions qui sont déjà écrites dans BRAS langue avec des instructions NEON SIMD.

Alors, soit Accélérez ou OpenMAX devrait être très bon si vous pouvez les utiliser. Je ne l'ai pas comparé le 2 pour voir que l'on est plus rapide, mais je suppose OpenMAX ARM est légèrement plus rapide que la mise en œuvre d'Apple depuis ARM conçu les spécifications NEON! Mais ils devraient les deux fonctionnent extrêmement rapide.

Avec le temps venu de nouvelles réponses:

Le moteur physique de balle est maintenant optimisé pour NEON SIMD par Apple. http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=8490

Je créé un couple de NEON optimisé routine Mat * Mat et Mat * Vec en utilisant ASM en ligne. Ils font partie du moteur Oolong, mais ils sont sous licence MIT, de sorte que vous pouvez les utiliser comme vous le souhaitez:

http: // code.google.com/p/oolongengine/source/browse/trunk/Oolong%20Engine2/Math/neonmath/neon_matrix_impl.cpp

Apple a maintenant <simd/simd.h> qui est une bibliothèque de routines mathématiques optimisés pour les petits vecteurs, des matrices, et escouades dans le cadre du cadre Accélérez que vous mentionnez. On dirait que c'est probablement le moyen le plus facile aujourd'hui. https://developer.apple.com/documentation/accelerate/simd?language= objc

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