我有一个表示向量的结构。该向量由两个单字节整数组成。我使用它们将值保持在 0 到 255 之间。
typedef uint8_T unsigned char;
struct Vector
{
uint8_T x;
uint8_T y;
};
现在,我的程序中的主要用例是将向量的两个元素与 32 位浮点值相乘:
typedef real32_T float;
Vector Vector::operator * ( const real32_T f ) const {
return Vector( (uint8_T)(x * f), (uint8_T)(y * f) );
};
这需要经常执行。有没有办法可以同时执行这两个乘法?也许通过矢量化、SSE 或类似方法?或者 Visual Studio 编译器是否已经同时执行此操作?
另一个用例是在两个向量之间进行插值。
Vector Vector::interpolate(const Vector& rhs, real32_T z) const
{
return Vector(
(uint8_T)(x + z * (rhs.x - x)),
(uint8_T)(y + z * (rhs.y - y))
);
}
这已经使用了优化的插值方法(https://stackoverflow.com/a/4353537/871495)。
但是向量的值再次乘以相同的标量值。是否有可能提高这些操作的性能?
谢谢
(我正在使用带有 64 位编译器的 Visual Studio 2010)