Возможна ли обратная матрица 3x3 с использованием инструкций SIMD? - PullRequest
5 голосов
/ 26 июля 2010

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 26 июля 2010

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

3 голосов
/ 28 января 2016

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

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

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

1 голос
/ 26 июля 2010

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

...