Qual è il modo giusto di utilizzare ARM SIMD su iPhone per il funzionamento del gioco vettore / matrice?

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

Domanda

sto facendo una libreria vettore / matrice per gioco che utilizza unità SIMD su iPhone (3GS o successivo). Come posso fare questo? Ho cercato su questo, ora so parecchie opzioni:

  • Accelerare quadro (BLAS + LAPACK + ...) da parte di Apple (iPhone OS 4)
  • OpenMAX biblioteca implementazione da ARM
  • GCC funzione di auto-vettorizzazione

Qual è il modo più adatto per la libreria vettore / matrice per gioco?

È stato utile?

Soluzione

Per farlo bene si avrà probabilmente bisogno di scrivere le proprie routine SIMD. Utilizzare i intrinseci al neon C a gcc invece di assemblatore per alleviare il dolore di fare questo.

Altri suggerimenti

Si deve presumere GCC non si auto-vettorizzare il codice, perché suona come che è molto improbabile che accada!

Come Paolo ha detto, per ottenere il massimo delle prestazioni dal vostro iPhone si dovrebbe scrivere il proprio codice Assembly ARM utilizzando le istruzioni NEON SIMD a gran parte di essa, come si può. Ma che assume si capisce la lingua ARM montaggio nonché NEON, ritardi temporali, ecc Quindi, se non si vuole imparare la lingua Assembly ARM, allora Apple di accelerare il quadro e OpenMAX di ARM librerie entrambi hanno numerose funzioni che sono già scritti in ARM assemblaggio lingua con le istruzioni NEON SIMD.

Quindi, o accelerare o OpenMAX dovrebbe essere molto buona se si possono usare. Non ho confrontato il 2 per vedere che uno è effettivamente più veloce, ma suppongo OpenMAX di ARM è leggermente più veloce l'implementazione di Apple in quanto ARM progettato le specifiche NEON! Ma dovrebbero entrambi girano estremamente veloce.

Con il tempo venire nuove risposte:

Il motore fisico proiettile è ora ottimizzato per NEON SIMD da Apple. http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=8490

ho creato un paio di NEON ottimizzato Mat * Mat e Mat * Vec di routine utilizzando ASM in linea. Fanno parte del motore di Oolong, ma sono sotto licenza MIT, in modo da poterli utilizzare come ti piace:

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

Apple ora ha <simd/simd.h> che è una libreria di routine matematiche ottimizzate per i piccoli vettori, matrici e quaternioni come parte del quadro Accelerate si parla. Sembra che questo è probabilmente il modo più semplice di oggi. https://developer.apple.com/documentation/accelerate/simd?language= objc

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top