_mm512_i32scatter_ps 当索引重复时

问题描述 投票:0回答:1

当您调用 _mm512_i32scatter_ps 并且索引重复时会发生什么?它存储总和吗?它只存储一个吗?是UB吗?我似乎找不到任何关于这种边缘情况的文档,如果它是 UB,我也不想依赖它。

我尝试在 intel intrinics 网站上搜索,但毫无结果。

simd intrinsics avx512
1个回答
0
投票

检查 asm 手册以获取更详细的文档以及内在函数指南似乎缺少或错误的时间:https://www.felixcloutier.com/x86/vscatterdps:vscatterdpd:vscatterqps:vscatterqpd

仅保证对重叠向量索引的写入相对于彼此有序(从源寄存器的LSB到MSB)...请注意,这不考虑映射到同一物理地址的非重叠索引地点。

因此最终值将来自最高索引向量元素。

(除非你将同一个页面映射到多个地址,并且通过不同的虚拟地址分散到同一个元素。)

asm 手册文档的其余详细信息是关于编码以及发生错误(例如 #PF 页面错误)时的排序规则(所有较低的元素将在错误元素之前完成;较高的元素可能会也可能不会完成。)


请注意,

vpconflictd
用于检测相同索引向量元素,但它在 Intel 上速度很慢,例如 ZMM 版本的 SKX / Ice Lake / Sapphire Rapids 上的 37 uops / 20 到 19 个周期吞吐量。 (在 AMD Zen 4 上速度很快。)因此,如果您可以避免检查冲突,那就太好了。 (分散本身,就像您所问的
vscatterdps zmm
一样,在 Ice Lake / Alder Lake 上为 11 个周期吞吐量,但在 Zen 4 上速度较慢,如 22 个周期吞吐量。)

© www.soinside.com 2019 - 2024. All rights reserved.