使用 neon/simd 优化 Vector3 类

问题描述

我想知道是否值得像我对 Vector2 类所做的那样使用 neon/simd 优化我的 Vector3 类的操作。

据我所知,simd 只能同时处理两个或四个浮点数,所以对于我的 Vector3,我们需要这样的东西:

Vector3 Vector3::operator * (const Vector3& v) const
{
    #if defined(__ARM_NEON__)
        // extra step: allocate a fourth float
        const float v4A[4] = {x,y,z,0};
        const float v4B[4] = {v.x,v.y,v.z,0};

        float32x4_t r = vmul_f32(*(float32x4_t*)v4A,*(float32x4_t*)v4B);
        return *(Vector3*)&r;
    #else
        return Vector3(x * v.x,y * v.y,z * v.z);
    #endif
}

这样安全吗?在大多数情况下(例如 arm64),这个额外的步骤是否仍然比非 simd 代码更快?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)