C++SLMATH库和SSE优化
C++ SLMATH library and SSE optimisation
我的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)
,或者将它们封装在声明自身正确对齐的结构中,那么它可能会起作用。我没有使用过有问题的图书馆,但这可能是你面临的问题。
可以在此处找到对齐选项的参考。
相关文章:
- 空基优化子对象的地址
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何用SSE优化矩阵3乘3乘法与点?
- SSE 内联汇编和可能的 g++ 优化错误
- SSE优化平方差的总和
- 用于在数组中找到零并切换标志 更新另一个数组的循环的SSE优化
- 字节数组置换SSE优化
- SSE本质-逻辑非优化
- 当函数参数是常量引用临时或按值复制的临时时,为什么 MSVC 优化会破坏 SSE 代码
- 高斯模糊的SSE优化
- 如何使用 SSE 或 GLSL 优化"u[0]*v[0] + u[2]*v[2]"代码行
- 灰度双线性补丁提取-SSE优化
- C++SLMATH库和SSE优化
- 具有多种功能的可视化C++SSE优化
- 确定eigen是否为SSE指令优化了代码
- SSE微优化指令顺序
- 您将如何编写可能优化为一条SSE指令的无符号加法代码
- 在同一个可执行文件中使用C/ c++进行不同的优化(plain、SSE、AVX)
- SSE指令在实践中优化了什么,编译器如何启用和使用它们