Was ist der richtige Weg, um ARM SIMD auf dem iPhone für Spielvektor-/Matrixbetrieb zu verwenden?

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

Frage

Ich erstelle eine Vektor/Matrix -Bibliothek für Spiel, die die SIMD -Einheit auf dem iPhone (3GS oder später) verwendet. Wie kann ich das machen? Ich habe darüber gesucht, jetzt kenne ich mehrere Optionen:

  • Beschleunigen Sie Framework (BLAS+LAPACK+...) von Apple (iPhone OS 4)
  • OpenMAX -Implementierungsbibliothek vom Arm
  • GCC Auto-Vectorization-Funktion

Was ist die am besten geeignete Möglichkeit für die Vector/Matrix -Bibliothek für das Spiel?

War es hilfreich?

Lösung

Um es gut zu machen, müssen Sie wahrscheinlich Ihre eigenen SIMD -Routinen schreiben. Verwenden Sie die Neon -C -Intrinsics in GCC anstelle des Assemblers, um den Schmerz zu erleichtern, dies zu tun.

Andere Tipps

Sie sollten davon ausgehen, dass GCC Ihren Code nicht automatisch aktiviert, da es so klingt, dass dies sehr unwahrscheinlich ist!

Wie Paul sagte, sollten Sie Ihren eigenen ARM -Montage -Code mit Neon Simd -Anweisungen für so viel wie möglich mit Neon Simd -Anweisungen schreiben. Dies setzt jedoch davon aus Sprache mit Neon -Simd -Anweisungen.

Entweder beschleunigen oder OpenMax sollten sehr gut sein, wenn Sie sie verwenden können. Ich habe die 2 nicht verglichen, um zu sehen, welches tatsächlich schneller ist, aber ich gehe davon aus, dass die OpenMax von Arms etwas schneller ist als die Implementierung von Apple, da Arm die Neonspezifikationen entworfen hat! Aber beide sollten beide extrem schnell laufen.

Mit der Zeit kommen neue Antworten:

Die Bullet Physics Engine ist jetzt von Apple für Neon Simd optimiert. http://bulletphysics.org/bullet/phpbb3/viewtopic.php?t=8490

Ich habe ein paar neon -optimierte Mat*MAT und MAT*VEC -Routine unter Verwendung von Inline ASM erstellt. Sie sind Teil des Oolong -Motors, aber sie stehen unter der MIT -Lizenz, sodass Sie sie so verwenden können, wie Sie möchten:

http://code.google.com/p/oolongengine/source/browse/trunk/oolong%20engine2/math/neonmath/neon_matrix_impl.cpp

Apple hat jetzt <simd/simd.h> Dies ist eine Bibliothek optimierter mathematischer Routinen für kleine Vektoren, Matrizen und Quaternionen als Teil des von Ihnen erwähnten Beschleunigungsrahmens. Es scheint, als wäre das heute wahrscheinlich der einfachste Weg.https://developer.apple.com/documentation/accelerate/simd?language=objc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top