intel - AVX2 中的收集指令是如何实现的?

标签 intel ram simd avx avx2

假设我正在使用 AVX2 的 VGATHERDPS - 这应该使用 8 个 DWORD 索引加载 8 个单精度浮点数。

当要加载的数据存在于不同的缓存行中时会发生什么?指令是否被实现为一个硬件循环,逐个获取缓存行?或者,它可以一次向多个缓存行发出负载吗?

我阅读了几篇陈述前者的论文(这对我来说更有意义),但我想对此了解更多。

一篇论文的链接:http://arxiv.org/pdf/1401.7494.pdf

最佳答案

我对 AVX 收集指令进行了一些基准测试(在 Haswell CPU 上),它似乎是一个相当简单的蛮力实现——即使要加载的元素是连续的,似乎每个元素仍然有一个读取周期,所以性能真的不比只做标量负载好。

注意:这个答案现在已经过时了,因为自 Haswell 以来情况发生了很大变化。有关完整详细信息,请参阅已接受的答案(除非您碰巧针对的是 Haswell CPU)。

关于intel - AVX2 中的收集指令是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21774454/

相关文章:

cpu - 英特尔 E7 和 E5 至强型号之间的区别?

linux - 重击 :/proc/sys/vm/drop_caches: Permission denied

c - altivec 提取部分 vector ?

c - 使用 _mm256_load_ps() Intel 内在函数时出错

c# - timeBeginPeriod 不适用于 Intel Comet Lake CPU (i5 10400H)

c++ - 英特尔TBB并发队列如何工作?它是否实现了细粒度的并行性?

linux - 在来自 SPECCpu2006 的已编译二进制文件上使用 Intel-PT 事件运行 perf record 会使服务器机器崩溃

c - 如何限制进程中的 RAM 消耗?

linux - 我想知道在哪里可以找到 u-boot 的通用或理想 DDR 设置?

c++ - 为什么我的 SSE 代码比原生 C++ 代码慢?