C ++ SLMATH库和SSE优化

时间:2012-03-02 13:29:32

标签: c++ sse

我对SLMATH library有疑问。不确定是否有人使用过它或之前使用过它?无论如何,问题是当我在启用SSE优化的情况下进行编译时(在VS 2010中),我显然必须为SSE类型对象提供一个具有正确字节对齐的容器。这没关系,因为SLMATH中有一个小类,它是一个对齐的向量;它将向量分配与8字节边界对齐(即我不使用std :: vector<>)。

现在的问题是,在将它放入集合之前,任何包含像slm :: mat4这样的东西的结构或类也必须在这样的边界上对齐。所以,例如,我使用一个对齐的向量来创建一个slm :: mat4数组,但如果我创建一个名为Mesh的类,并且Mesh包含一个slm :: mat4,我想将Mesh放入一个std :: vector中,好吧,我在调试时遇到奇怪的内存错误。

因此,鉴于文档确实非常稀疏,任何使用此库的人都可以告诉我,我必须做些什么才能将它与SSE优化一起使用?我的意思是我不喜欢必须使用对齐的向量来代替std :: vector,以防slm :: component最终以某种方式封装到类或结构中。

或者,快速矢量/矩阵/图形数学库与SLMATH一样好,如果有的话就会很好。

感谢您提供任何建议。

编辑1:不使用SLMATH的简单repro-case说明了问题:

#include <vector>

class Item
{

public:

    __declspec(align(8))
    struct {

        float a, b, c, d;

    } Aligned;
};


int main()
{
    // Error - won't compile.

    std::vector<Item> myItems;
}

罗宾

1 个答案:

答案 0 :(得分:1)

如果您声明变量在变量声明中使用__declspec(align),或者将它们包装在声明自身正确对齐的结构中,那么它可能会有效。我没有使用过这个库,但似乎这可能是你面临的问题。

可以找到对齐选项的引用here