【发布时间】:2015-04-17 02:25:58
【问题描述】:
我有一个表示向量的结构。该向量由两个单字节整数组成。我使用它们将值保持在 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)
【问题讨论】:
-
为什么不进行优化编译,然后分析代码。如果这不是问题,那就没有意义了。
-
我确信编译器已经为你做了这个。
-
好的,谢谢。我知道这部分会减慢我的程序,但如果没有优化它的潜力,那么我必须查看我的代码的其他部分。
标签: c++ vectorization sse simultaneous vector-multiplication