0

AVX512 有几个/大多数浮点指令以屏蔽形式提供,您可以在其中选择哪些结果将被更改/归零。CPU 是否真的使用这个表示应该执行乘法的信息调度,或者这是否只是设置了哪些结果被覆盖并且非屏蔽的结果无论如何都会被计算然后丢弃?

在实践中,这对于处理例如有用:

for (int i=0; i<27; i++) a[i] *= b[i];

27 不能被 8 整除,所以会有一些剩余项。可以一一创建单独的循环处理。或者如果至少有 4 个,则使用 AVX,然后将剩余的一个一个处理。很多可能性。

这个特定的循环将一个好的编译器自动向量化,但这只是更复杂情况的一个例子,我想手动向量化,但仍然有未使用的项目,或者例如我知道一些乘法结果没有用。

编辑:经过实验检查,似乎屏蔽操作实际上更慢。

4

0 回答 0