我正在构建一个光线跟踪器,在很多情况下我需要在三个浮点数上进行加法和乘法运算.
在这种情况下,我一直在以天真的方式做到这一点:
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中做到这一点(如果它甚至完全不同),我似乎无法找到任何其他方法.
| 归档时间: | 
 | 
| 查看次数: | 898 次 | 
| 最近记录: |