AVX2 和 AVX-512 有什么区别?

dig*_*doo 2 simd opencl avx avx2 avx512

在SIMD和并行化方面,AVX2和AVX-512有什么区别?它们是相同的还是不同的?我刚刚看到在 AVX-512 中使用了 double8,而在 AVX2 中使用了 double4?

我正在使用 PyOpenCL 用 C 编写内核代码,但不确定有什么区别。

FA-*_*8_1 6

AVX2 是一个 256 位向量指令集。您有 256 位寄存器,可以通过多种方式进行解释(8 个浮点数、4 个双精度数、32 个字节等)。AVX1 只支持浮点运算,AVX2 增加了 256 位整数运算。AVX-512 是一组 512 位向量指令。只有 2 种口味的 AVX,普通老式 AVX 和 AVX2。AVX-512 有多种不同的风格。您可能会发现Intel 的 Intrinsics Guide很有趣。

最大的区别是每条指令处理的操作数量是原来的两倍。尽管如此,AVX-512 中有某些指令可能会使某些特定的东西更加优化(例如指数近似)。

  • AVX512 引入了遮罩,因此您可以更便宜地混合作为另一操作的一部分。或者甚至可以通过故障抑制进行有效的屏蔽加载/存储,以防您需要跳过的数据位于未映射的页面中。还分散存储,而 AVX2 仅具有聚集负载。另外,您可能想提一下 FMA,它与 AVX 是分开的。AVX512 始终包含 FMA。 (2认同)