Возможна ли инверсия матрицы 3x3 с использованием инструкций SIMD?

Я использую процессор на базе ARM Cortex-A8, и у меня есть несколько мест, где я вычисляю обратные операции 3x3 Matrix.

Поскольку процессор Cortex-a8 имеет процессор NEON SIMD, мне интересно использовать этот сопроцессор для инверсии матрицы 3x3, я видел несколько реализаций 4x4 (Intel SSE и freevec), но я нигде не видел обратную операцию матрицы 3x3, выполняемую с использованием инструкций SIMD. Метод, используемый freevec, заключается в разделении матрицы 4x4 на матрицы 4, 2x2, затем выполнении крошечных операций над каждой и рекомбинации результатов в конце, чтобы получить обратную матрицу 4x4. С матрицами 3х3 такой возможности не вижу.

У кого-нибудь есть идея, как выполнить инверсию матрицы 3x3 с помощью инструкций SIMD, это будет мне очень полезно?

С уважением, Викрам


person HaggarTheHorrible    schedule 26.07.2010    source источник
comment
Может быть интересно: вряд ли когда-либо есть веская причина инвертировать матрицу. johndcook.com/blog/2010/01/19 / dont-invert-that-matrix   -  person AakashM    schedule 26.07.2010
comment
Отнесусь к вашему комментарию серьезно и посмотрю, как я могу избавиться от инверсии матрицы в моем алгоритме.   -  person HaggarTheHorrible    schedule 26.07.2010
comment
@AakashM, эта статья не актуальна. Статья Джона Д. Кука о матрицах посвящена большим матрицам, используемым в научных вычислениях. Этот вопрос касается небольших матриц, которые обычно используются в компьютерной графике и физическом моделировании. Очень полезно (и довольно быстро) инвертировать маленькие матрицы.   -  person exDM69    schedule 25.06.2012
comment
Вот старый документ Intel PDF об использовании XMMS и еще один Сообщение в блоге ARM об умножении матриц. Краткий ответ, вероятно, будет невозможен, поскольку у людей будут разные потребности; скорость, размер кода, пропускная способность памяти, точность и т. д.   -  person artless noise    schedule 24.04.2015


Ответы (3)


Вы можете расширить матрицу 3x3 до матрицы 4x4, добавив 4-ю строку и 4-й столбец, оба из которых (0 0 0 1). После инверсии верхняя левая подматрица 3x3 будет иметь требуемую инверсию.

person zvrba    schedule 26.07.2010

Я инициировал переносную библиотеку на основе SIMD для инверсии матриц 2x2, 3x3 и 4x4:

https://github.com/niswegmann/small-matrix-inverse

К сожалению, 3x3 еще не поддерживается (на момент написания).

person Nis Wegmann    schedule 28.01.2016

Вы можете векторизовать стандартную аналитическую версию для матриц 3x3, описанную в wikipedia. Это не должно быть сложно.

person Staffan    schedule 26.07.2010
comment
Обратите внимание, что в этой версии 3 различия, используемые в определителе, также повторно используются в других 9 частях. - person phkahler; 26.07.2010