首页 > 解决方案 > SoA SIMD 向量矩阵乘法

问题描述

在 SoA 安排中是否有任何标准的向量矩阵乘法方法?正如我所理解的,在 SoA 中我可以使用 3 个向量(其中每个组件都在单独的数组中),并且对于基本操作,使用 3x3 矩阵(旋转/缩放)结合向量加法进行平移。相反的是 AoS 使用 4x4 矩阵和 4 向量乘法进行整个变换(但是,为 0 或 1 浪费了一个分量)。实现后者看起来很简单(将矩阵存储在 4 个 SIMD 寄存器中,加载下一个向量,执行工作(muls/adds),存储向量)。但是,我很难用 3x3 矩阵进行乘法运算——看起来我只需要 9 个 SIMD 寄存器用于矩阵——每个矩阵分量都调整为具有相同值的 4 个向量。但是,我只有 8 个寄存器,所以我需要存储中间体(这将是更多的加载/存储指令)。所以,

标签: matrix-multiplicationsimd

解决方案


推荐阅读