有关于 AVX2 收集指令延迟的任何数据吗?

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

有关于 AVX2 收集延迟的数据吗?

(例如访问单个缓存行的 _mm256_i32gather_ps 指令)

performance x86 latency micro-optimization avx2
3个回答
3
投票

此页面提供所有内在函数的延迟数据:

英特尔内部函数指南

_mm256_i32gather_ps 的延迟为 6。


2
投票

实际上,这确实取决于硬件。如果您查看 Agner Fog 的“指令表”,您会发现 Zen1 和 Zen2 没有列出延迟,但 VGATHERDPS 的吞吐量互为 13-20 和 9-16。对于英特尔处理器,我们有: xmm ymm Processor throughput latency throughput latency ------------------------------------------------------- Haswell 9 12 Broadwell 6 7 Skylake 4 12 5 13 SkylakeX 4 12 5 13 Coffee Lake 4 12 5 13

此外,
Intel 网站

不再列出 AVX2 的收集指令的吞吐量/延迟,但有一些 AVX512 的吞吐量/延迟。


0
投票
例如访问单个缓存行的 _mm256_i32gather_ps 指令)

关于英特尔架构上的收集指令,有一个极其奇怪的细节:它们是可在任何内存类型上工作的非临时负载,但与普通的非临时负载不同,它们不仅避免污染 L2 和 L3 数据缓存 - 它们还不会导致一级 TLB 缓存发生变化。 (不过,他们似乎确实更新了二级 TLB 缓存。)

所以答案是:即使从所有读取访问相同的缓存行,最终每个读取不仅会丢失缓存,而且每个读取都会触发页面遍历以补偿丢失的 TLB 条目。如果数据尚未预取并且使该指令变得极其情境化,那么给您带来的延迟比我所知道的任何其他指令都要糟糕。

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