SoA SIMD векторно-матричное умножение - PullRequest
0 голосов
/ 21 апреля 2019

Существует ли какой-либо стандартный способ умножения векторов в схемах SoA?Как я понимаю, в SoA я могу использовать 3-векторы (где каждый компонент находится в отдельном массиве), а для базовых операций использовать матрицу 3x3 (вращение / масштаб) в сочетании с векторным сложением для перевода.Противоположным будет AoS, использующий матрицу 4x4 и 4-векторное умножение для целого преобразования (но, тратя один компонент на 0 или 1).Реализация последнего выглядит тривиально (сохранить матрицу в 4 SIMD-регистрах, загрузить следующий вектор, выполнить работу (мулс / сложение), сохранить вектор).Однако у меня возникают проблемы с умножением матрицы 3x3 - похоже, мне нужно 9 регистров SIMD только для матрицы - каждый компонент матрицы настроен на 4 вектора с одинаковыми значениями.Но у меня есть только 8 регистров, поэтому мне нужно будет хранить промежуточные продукты (что будет больше инструкций загрузки / хранения).Итак, есть ли какой-нибудь умный способ?

...