C++ - 将所有分配的 double 组对齐到 32 字节

标签 c++ arrays alignment new-operator avx

我有一个相当大的代码,我想通过 AVX 指令优化一些操作。根据我的测试,改进应该高达 4 倍。

但是,代码使用带有 new 运算符的普通旧数组(无 std::vector)。

double * tmp = new double[size];

问题是,对于 AVX,我需要所有 double 组与 32 字节边界对齐。解决办法就是全部替换newaligned_alloc (或 MSVC 中的 _aligned_malloc),并用适当的函数替换发布函数。问题是我必须遍历所有代码并找到所有 new ,希望不要忘记一个,以后大家一定不要忘记使用对齐分配器。

还有别的办法吗?我想到了过载new运算符仅适用于 double但我不确定这是否是正确的方法,如果是,如何正确/安全地执行此操作。

我无法切换到std::vector使用自己的对齐分配器,因为一些外部纯 C 库将数组作为输入参数。

最佳答案

还有别的办法吗?是的,_mm_loadu_*_mm_storeu_*,其中 u 代表未对齐。

关于C++ - 将所有分配的 double 组对齐到 32 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56807870/

相关文章:

c++ - 是否可以在类的构造期间将静态函数分配给公共(public)成员函数?

c++ - 如何使用 Makefile (g++) 仅将某些文件链接到对象?

php - 如何比较两个包含用户详细信息的数组作为数组并从一个数组中删除匹配的元素?

c++ - 结构的交互式二进制解码器

在不使用堆栈的情况下检查带有 3 个差异括号的字符串是否平衡

python - 索引的 Cython 内存 View 应该是 Py_ssize_t 类型还是 int 类型?

asp.net - 对齐一个asp :Button to to the right of asp:Wizard's Next Button

css - 如何将 Bootstrap 列内的内容向右或向左移动?

html - 将 html 表单居中对齐

C++如何将unique_ptr的队列添加到 vector