掩码技术是否可以提高AVX-512内存操作(load/store/gather/scatter和非洗牌load-ops)的性能?
由于被屏蔽的元素不会触发内存故障,因此人们会认为在这些情况下使用掩码有助于性能提升,但是,如果使用了0掩码会怎么样呢:
- 跨越缓存行边界的load/store - 是否可以抑制缓存行交叉惩罚?
- 如果两个或两个以上的缓存行不在L1缓存中,是否可以抑制从L2高速缓存(或更远的位置)中加载数据?
- 被屏蔽的load操作是否会影响内存重排序?
- gather/scatter的吞吐量似乎受到CPU的load-store单元的限制,但是屏蔽元素能减轻这种影响吗?
这是针对当前英特尔处理器的情况,但也很有趣看看启用AVX-512的AMD处理器如何处理。
vmaskmovps
可能使用类似的实现方式,而越过未映射页面的故障抑制会变慢。或者不写入只读页面,这可能是由于操作系统的写时复制技巧导致的,需要微码辅助。(SSE:掩码存储是否影响被屏蔽的字节/MaskStore在幕后做了什么?)。AMD上的掩码存储目前很慢,因此我很好奇Zen4如何实现AVX-512的这一部分。 - Peter Cordesvmaskmovps
(一些有效的和一些无效的)穿越到未映射页面是否会变慢;我记得从我的测试结果中,全零掩码情况在一个不可写页面上会变慢,因此如果没有替换操作完成,则可能对数组的条件更新产生不良影响。 (另外TODO:在一个可写但干净的页面上进行测试,以查看它是否保持干净,因此每次更新页面表位都必须进行协助)。如果我没记错,在英特尔的优化手册中也提到了这方面的一些内容,还有关于存储转发的内容。 - Peter Cordes