【发布时间】:2019-06-27 01:43:47
【问题描述】:
当我执行 writemasked AVX-512 存储时,如下所示:
vmovdqu8 [rsi] {k1}, zmm0
如果在[rsi, rsi + 63] 访问的内存的某些部分没有被映射但是所有这些位置的写掩码为零(即,由于掩码,数据实际上没有被修改,那么指令会出错吗? )。
另一种询问方式是,这些 AVX-512 掩码存储是否具有与 AVX 中引入的vmaskmov 类似的故障抑制能力。
【问题讨论】:
-
是的,现在查找第 2 卷手册参考。 2.7 EVEX 编码指令的异常分类。它没有特别区分存储和负载,但我认为他们会说如果存储没有像
vmaskmovps那样抑制故障。他们确实使用术语“内存故障抑制”。 (还有 FPU 故障抑制)。他们确实将 NT 存储列为 not 抑制故障(我猜即使所有掩码位都已清除)。 -
我 95% 确信被屏蔽的元素不会出错。我已经看到英特尔编译器以这种方式剥离循环,我自己也做过很多次,从未遇到任何问题。但诚然,我自己从未用 mmap 等进行过实际测试。 OTOH,我确实从某个地方(我忘了在哪里)读到,对被屏蔽元素的无效访问仍然会带来缓存未命中 + TLB 未命中的性能损失。
-
这样的幻灯片让我只相信而不是实际测试它:images.anandtech.com/doci/11550/basin_falls_june_6-page-011.jpg
-
@Mysticial - 是的,我在搜索中遇到了类似的幻灯片(尽管可能是相同的事实)。有点奇怪,我们在手册中找不到任何完全确定的东西,尽管彼得发现的东西非常接近。