assembly - 对于对齐的 memcpy 和 memset REP MOVSD 和 REP STOSD 与临时和非临时 ymm / zmm 寄存器
问题描述
我在这里和这里看到了一些非常有用的帖子,讨论了复制/设置内存的差异方法的优点。
所有帖子都详细介绍了 REP MOVSD 在各种环境中的优缺点,尽管我发现在过于笼统的环境中讨论该主题而无法得到任何明确的答案。
所以对于 x86_64 skylake 我很好奇以下场景:
假设所有场景src 和 dst 都是页面对齐的
复制 16384 字节的数据
- 比较
REP MOVSD
,ymm blocks
,zmm blocks
- 比较
复制 2 GB 数据
- 比较
REP MOVSD
,ymm blocks w/ VMOVNTDQ
,zmm blocks w/ VMOVNTDQ
- 比较
设置 16384 字节数据
- 比较
REP STOSD
,ymm blocks
,zmm blocks
- 比较
设置 2 GB 的数据
- 比较
REP STOSD
,ymm blocks w/ VMOVNTDQ
,zmm blocks w/ VMOVNTDQ
- 比较
似乎 SIMD 注册了memcpy
两种REP STOSD
memset 案例。
我很好奇这些场景是否有任何硬性建议(并更好地理解为什么它们是建议)。
谢谢你。
编辑:我发表这篇文章的原因之一是其他帖子似乎没有讨论AVX512
。
解决方案
推荐阅读
- spring - 根据操作系统下载必要的 .properties 文件
- sql-server - SQL Server - 检查内存设置的查询
- powershell - 为什么从函数调用时 PowerShell 代码的行为会有所不同?
- javascript - 如何使用 sendkeys 生成增量版本号
- tensorflow - 使用 TensorFlow 或 PyTorch 的图像相似度
- html - 如何使用 puppetetteer 将抓取的数据添加到 html 中
- kubernetes - Kubernetes 可以在 Pod 之间共享单个 GPU 吗?
- css - 当 textarea 有值时更改标签颜色
- php - 使用时间计算变量
- sql - 如何将 NTILE 函数应用于 SQL 列