zin*_*nga 10 performance x86 cpu-architecture avx512
屏蔽能否提高 AVX-512 内存操作(加载/存储/聚集/分散和非洗牌加载操作)的性能?
鉴于屏蔽元素不会触发内存错误,人们会认为屏蔽在这些情况下有助于提高性能,但是,如果使用 0 屏蔽,则以下情况会怎样:
目前,这将是在当前英特尔处理器的背景下,但了解支持 AVX-512 的 AMD 处理器如何处理此问题将会很有趣。
我尝试在支持 AVX-512 的 Intel 12700K 上运行一些测试。我以前没有这样做过,所以如果我搞砸了一些事情,我也不会感到惊讶。
我不确定如何测试 L2 行为或可靠地重新排序,但对于其余的,我使用nanoBench并运行此脚本,产生这些结果(CSV 形式)。
已测试指令:
根据负载的掩码值(测试为 0 或 -1),我看不到任何差异,但是商店可能会略有不同。不完全确定这CORE_CYCLES意味着什么,但与 -1 掩码相比,0 掩码少了一个周期。
这种行为在测试的存储指令中似乎是一致的,加载+存储测试是VMOVDQU64奇怪的异常(大约 5 个周期的差异)。我不知道为什么,但结果是可重复的。高速缓存线交叉似乎也不是差异背后的原因 - 测试掩码(例如 1、2 和 128)似乎表明CORE_CYCLES只有使用 0 掩码才能实现更低的性能。
无论指令将命中的掩码或缓存行数量如何,聚集/分散都会给我相同的结果。
我认为可以公平地假设掩码值通常不会影响掩码内存访问(除了可能抑制错误之外)。也许它对商店有轻微的影响,但我对此并不清楚,并且可能依赖于 uArch。