Как правильный способ использовать ARM SIMD на iPhone для игры в вектор/матрицы?

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

Вопрос

Я делаю библиотеку Vector/Matrix для игры, которая использует SIMD -блок на iPhone (3GS или более поздней версии). Как я могу это сделать? Я искал об этом, теперь я знаю несколько вариантов:

  • Accelerate Framework (BLAS+LAPACK+...) из Apple (iPhone OS 4)
  • Библиотека реализации OpenMax от ARM
  • Функция автоматической перемещения GCC

Какой самый подходящий способ для библиотеки Vector/Matrix для игры?

Это было полезно?

Решение

Чтобы сделать это хорошо, вам, вероятно, нужно будет написать свои собственные процедуры SIMD. Используйте неоновую внутреннюю внутреннюю часть в GCC, а не сборку, чтобы облегчить боль от этого.

Другие советы

Вы должны предположить, что GCC не будет автоматически векторизовать ваш код, потому что, похоже, это вряд ли произойдет!

Как сказал Пол, чтобы получить максимальную производительность от вашего iPhone, вы должны написать свой собственный код сборки Arm, используя Neon SIMD, чтобы получить как можно больше его. Но это предполагает, что вы понимаете язык сборки ARM, а также неоновые, задержки с времени и т. Д. Поэтому, если вы не хотите изучать язык сборки ARM, то рамки ускорения Apple и библиотеки Arm OpenMax имеют многочисленные функции, которые уже написаны в сборке ARM Язык с неоновыми инструкциями.

Таким образом, либо ускорить, либо OpenMax должен быть очень хорошим, если вы можете их использовать. Я не сравнил 2, чтобы увидеть, какой из них на самом деле быстрее, но я предполагаю, что Arm OpenMax немного быстрее, чем реализация Apple, так как ARM разработала неоновые характеристики! Но они оба должны работать очень быстро.

Со временем приходите новые ответы:

Апплект Pullet Physics теперь оптимизирован для Neon Simd Apple. http://bulletphysics.org/bullet/phpbb3/viewtopic.php?t=8490

Я создал пару неоновых оптимизированных матовых мат и матовой рутины VEC с использованием встроенного ASM. Они являются частью двигателя Олун, но они находятся под лицензией MIT, поэтому вы можете использовать их так, как вам нравится:

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

Apple теперь есть <simd/simd.h> которая представляет собой библиотеку оптимизированных математических процедур для небольших векторов, матриц и кватернионов в рамках упомянутой вами структуры ускорения. Похоже, это, наверное, самый простой путь сегодня.https://developer.apple.com/documentation/accelerate/simd?language=objc

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top