C++SLMATH库和SSE优化

C++ SLMATH library and SSE optimisation

本文关键字:优化 SSE 库和 C++SLMATH      更新时间:2023-10-16

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

现在的问题是,似乎任何包含类似slm::mat4的结构或类在放入集合之前也必须在这样的边界上对齐。例如,我使用了一个对齐的向量来创建一个slm::mat4的数组,但如果我创建了一个名为Mesh的类,而Mesh包含一个slm::mat 4,并且我想将Mesh放入std::向量中,那么,在调试时,我会遇到奇怪的内存错误。

因此,考虑到文档确实非常稀疏,任何使用过这个库的人都能告诉我,准确地说,我必须做什么才能将它用于SSE优化吗?我的意思是,我不喜欢在任何地方都必须使用对齐的向量来代替std::向量,以防slm::组件最终以某种方式被封装到类或结构中。

或者,如果有SLMATH这样的快速矢量/矩阵/图形数学库,那就太好了。

谢谢你的建议。

编辑1:不使用SLMATH的简单repo案例说明了问题:

#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;
}

Robin

如果您在声明变量时在变量声明中使用__declspec(align),或者将它们封装在声明自身正确对齐的结构中,那么它可能会起作用。我没有使用过有问题的图书馆,但这可能是你面临的问题。

可以在此处找到对齐选项的参考。