SSE 向量乘矩阵

 

复制代码
struct Vector4
{    
    float x, y, z, w;        
};
struct Matrix
{
    float _M[4][4];
};


void SSE_VectorMultiplyMatrix(const Vector4& v,const Matrix& m1,Vector4& ret)
{
    Vector4 va,vb,vc,vd;
    Vector4 *pva,*pvb,*pvc,*pvd;
    const Vector4 *pv;
    //取出矩阵每一列
    va.x = m1._M[0][0];
    va.y = m1._M[1][0];
    va.z = m1._M[2][0];
    va.w = m1._M[3][0];
    
    vb.x = m1._M[0][1];
    vb.y = m1._M[1][1];
    vb.z = m1._M[2][1];
    vb.w = m1._M[3][1];

    vc.x = m1._M[0][2];
    vc.y = m1._M[1][2];
    vc.z = m1._M[2][2];
    vc.w = m1._M[3][2];

    vd.x = m1._M[0][3];
    vd.y = m1._M[1][3];
    vd.z = m1._M[2][3];
    vd.w = m1._M[3][3];
    
    pva = &va;
    pvb = &vb;
    pvc = &vc;
    pvd = &vd;
    pv = &v;
    __asm 
    {   
        //矩阵四列放入mmx0-mmx3
        MOV EAX, pva                           // Load pointer into CPU reg
        MOVUPS XMM0, [EAX]
        MOV EAX, pvb                           // Load pointer into CPU reg
        MOVUPS XMM1, [EAX]
        MOV EAX, pvc                           // Load pointer into CPU reg
        MOVUPS XMM2, [EAX]
        MOV EAX, pvd                           // Load pointer into CPU reg
        MOVUPS XMM3, [EAX]
        
        //向量放入 mmx4
        MOV EAX, pv 
        MOVUPS XMM4, [EAX]

        //向量点乘矩阵每列
        MULPS XMM0,XMM4
        MULPS XMM1,XMM4  
        MULPS XMM2,XMM4  
        MULPS XMM3,XMM4 
        
        //输出四个分量
        MOVUPS [va], XMM0
        MOVUPS [vb], XMM1
        MOVUPS [vc], XMM2
        MOVUPS [vd], XMM3
    }

    //四个分量求和得变换后向量
    ret.x = va.w + va.x + va.y + va.z;
    ret.y = vb.w + vb.x + vb.y + vb.z;
    ret.z = vc.w + vc.x + vc.y + vc.z;
    ret.w = vd.w + vd.x + vd.y + vd.z;

}
复制代码

 

 

 

 

posted on   草丛有头猪  阅读(391)  评论(1编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示