向量的数据如何对齐?

2023-11-23

如果我想处理数据std::vector对于 SSE,我需要 16 字节对齐。我怎样才能做到这一点?我需要编写自己的分配器吗?或者默认分配器是否已与 16 字节边界对齐?


C++ 标准需要分配函数(malloc() and operator new())为任何分配适当对齐的内存standard类型。由于这些函数不接收对齐要求作为参数,因此实际上这意味着所有分配的对齐方式都是相同的,并且是具有最大对齐要求的标准类型,这通常是long double and/or long long (see 增强 max_align 联合).

向量指令(例如 SSE 和 AVX)比标准 C++ 分配函数具有更强的对齐要求(128 位访问需要 16 字节对齐,256 位访问需要 32 字节对齐)。posix_memalign() or memalign()可用于满足具有更强对齐要求的分配。


在 C++17 中分配函数接受类型的附加参数std::align_val_t.

您可以像这样使用它:

#include <immintrin.h>
#include <memory>
#include <new>

int main() {
    std::unique_ptr<__m256i[]> arr{new(std::align_val_t{alignof(__m256i)}) __m256i[32]};
}

此外,在 C++17 中,标准分配器已更新以尊重类型的对齐方式,因此您可以简单地执行以下操作:

#include <immintrin.h>
#include <vector>

int main() {
    std::vector<__m256i> arr2(32);
}

或者(C++11 中不涉及和支持堆分配):

#include <immintrin.h>
#include <array>

int main() {
    std::array<__m256i, 32> arr3;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向量的数据如何对齐? 的相关文章

随机推荐

  • 如何在R的keras包中设置class_weight?

    我在用keras将其封装在 R 中以训练深度学习模型 我的数据集高度不平衡 因此 我想设置class weight论据中的fit功能 这是我用于模型的拟合函数及其参数 history lt model gt fit trainData tr
  • Paperclip-使用 content_type='application/octet-stream' 验证 pdf

    我正在使用paperclip用于文件上传 验证如下 validates attachment content type upload content type gt application pdf if gt Proc new module
  • 为什么 php 在引用不存在的变量时不会抱怨?

    我想知道为什么当我们引用一个不存在的变量 无论是普通变量还是数组 时 php 不会抱怨 这就是它的样子 还是我还缺少其他东西 例如这段代码 不会抛出有关不存在变量的警告 除此之外var dump显示这个 array 1 er gt NULL
  • 我不明白如何使用 SendMessage 或 PostMessage 调用

    我需要在第三方应用程序中模拟按键 假设我有一个 C 应用程序 需要将 8 发送到计算器应用程序 我无法使用 Net 的 SendKeys 或 win32 api 的 keybd event 因为它们都要求窗口成为顶部活动窗口 但在我的情况下
  • 在 https iframe 内注册服务工作人员时出现 DOMException

    我正在尝试在 http 不安全 站点内的 https iframe 中注册服务工作者 直到最近 我的代码运行没有任何问题 从上次 chrome 更新 44 开始 此代码在 iframe 内失败 navigator serviceWorker
  • 映射区域的权限错误[重复]

    这个问题在这里已经有答案了 尝试运行以下函数时出现错误 char reverseInPlace char src no need to alloc or free memory int i 0 int size mystrlen src f
  • 如何在 Type 上使用 switch-case? [复制]

    这个问题在这里已经有答案了 可能的重复 还有比 打开类型 更好的选择吗 我需要遍历类的所有属性 并检查其类型是否为 int 我需要执行某些操作 如果其为 string 则执行某些操作 我需要它使用 switch case 这里我按以下方式使
  • 列出nodejs中的分区

    我想使用nodejs 获取Windows 中的分区列表 fs readdir 对于任何低于或包括 C 的文件夹都可以正常工作 但我不知道要给它什么才能拥有 C D 等分区列表 有人知道我应该用什么吗 Node js 中没有用于列出分区的 a
  • 如何在 .NET 中的大文件中间插入或删除字节

    是否有可能有效率的从大文件的中间插入或删除字节 如果是这样怎么办 或者我是否在插入或删除数据后重写整个文件 A lot of Bytes Unwanted Bytes A lot of Bytes gt A lot of Bytes A l
  • ul 列表不会在按键时滚动,但可以使用鼠标滚轮滚动

    我正在使用 Bootstrap 3 并且有一个 autossugest 输入 问题是我想要 ul 使用键盘按键滚动但不起作用 我认为使用箭头键滚动是默认行为 但 ul 不这样做 这是正在发生的事情 如果我按向下键两次 我正在使用预先输入由巴
  • 使用 json 将图像上传到 djangorestframework 的 imagefield 并使用 CURL 进行测试

    我在djangorest框架中制作了几个api 我可以使用 api 的 html 形式进行测试 就像在命令行中使用curl 一样 现在我有一个模型的 api 其中一个字段是 ImageField 我不知道该使用哪个curl 命令 使用我在
  • 编译为 1.5 编写的 Java 代码以与 1.4 JRE 一起使用?

    我有一个使用泛型和一些 Java 1 5 6 的项目 是否可以编译此代码以在运行 1 4 JRE 的系统上运行 我使用 ANT 构建脚本和 javac 任务来编译该库 当目标属性为 1 5 时 此构建效果良好 如果我将目标更改为 1 4 则
  • 如何在不执行 Spark SQL 表达式的情况下验证它?

    我想验证 Spark sql 查询在语法上是否正确 而无需在集群上实际运行查询 实际用例是我正在尝试开发一个用户界面 它接受用户输入 Spark sql 查询 并且我应该能够验证提供的查询在语法上是否正确 另外 如果在解析查询之后 我可以就
  • 使用默认内容块生成 content_for

    我们的 Rails 项目大量使用content for 然而 如果没有使用定义任何内容 我们经常需要渲染默认内容content for 为了可读性和可维护性 将此默认内容放在一个块中是有意义的 我们在 Rails 2 3 中创建了一个辅助方
  • JavaScript 使用逻辑运算符切换?

    for var count 1 count lt 6 count switch count case 2 document write hi break case count gt 3 document write bye break ca
  • 如何在正在编写的另一个 jQuery 插件中包含外部插件

    我正在为我正在进行的项目构建一个自定义 jQuery 插件 我想返回一个自定义到另一个 jQuery 插件的对象 而不是必须确保使用我的插件的每个页面也有这个其他插件 是否可以将其包含在实际的插件本身中 而不是在使用我的插件的每个页面上键入
  • 自动检测移动浏览器(通过用户代理?)[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何检测用户是否正在通过移动网络浏览器查看我的网站 以便我可以自动检测并显示我的网站的适当版本 上面有开源脚本检测移动浏览器在 Apache ASP ColdFusion Jav
  • Python:排除模块 Pyinstaller

    我开始使用 Pyinstaller 而不是 Py2Exe 然而我很快就遇到了问题 如何排除不需要的模块 以及如何查看包含在单个可执行文件中的模块 我可以删除一些pyd and dll我的 Python 安装中的 DLL 文件夹中的文件 因此
  • 使用 Fluent 验证的 Model T 通用验证器?

    我昨天刚刚了解 Fluent Validation 我认为它非常酷 我已经尝试过并且有效 但我的应用程序目前有多个模型 我必须承认为每个模型编写验证器的压力很大 是否有可能用泛型编写它并找到一种方法来验证每个模型 这就是我的验证器目前的编写
  • 向量的数据如何对齐?

    如果我想处理数据std vector对于 SSE 我需要 16 字节对齐 我怎样才能做到这一点 我需要编写自己的分配器吗 或者默认分配器是否已与 16 字节边界对齐 C 标准需要分配函数 malloc and operator new 为任