我正在构建一个光线跟踪器,在很多情况下我需要在三个浮点上进行加法和乘法。
在这种情况下,我一直以天真的方式做这件事:
class Color{
float mR, mG, mB;
...
Color operator+(const Color &color) const
{
return Color(mR + color.mR,
mG + color.mG,
mB + color.mB);
}
Color operator*(const Color &color) const
{
return Color(mR * color.mR / COLOR_MAX,
mG * color.mG / COLOR_MAX,
mB * color.mB / COLOR_MAX);
}
}
这也会发生在等同的类中,例如Point
或Vect3
。
然后我听说了SIMD指令,它们看起来非常适合我正在做的事情。所以,当然,我用Google搜索并发现了这段代码:
typedef int v4sf __attribute__((mode(V4SF))); // Vector of three single floats
union f4vector
{
v4sf v;
float f[4];
};
首先使用额外的四个我现在不需要。但是gcc警告我:
指定使用
__attribute__ ((mode))
的矢量类型已弃用
我想知道如何在C ++ 14中做到这一点(如果它甚至完全不同),我似乎无法找到任何其他方法。