-1

我有一个应用程序,其中大型矩阵上的减少操作(如求和、最大值)是瓶颈。我需要尽可能快地做到这一点。mkl 中是否有向量指令可以做到这一点?

在至强 cpu、gpu 或 mic 上是否有特殊的硬件单元来处理它?

通常如何在这些硬件中实现 reduce 操作?

4

3 回答 3

1

您可以使用 KNC vpermd 和 vpermf32x4 指令以及 swizzle 修饰符来实现自己的简单归约,以在向量单元内进行交叉车道操作。

这些的 C 内在函数等价物是mm512 {mask}permute* 和mm512 {mask}swizzle* 系列。

但是,我建议您首先查看数组符号 reduce 操作,它已经在 MIC 上实现了高性能。

查看此处可用的缩减操作,并查看来自英特尔的 Taylor Kidd 的视频,视频讨论了 Xeon Phi 从 20 分钟 30 秒开始的阵列符号缩减。

编辑:我注意到您也在寻找基于 CPU 的解决方案。阵列符号减少在 Xeon 上也能很好地工作。

于 2014-07-24T12:46:03.267 回答
0

此操作将受到带宽限制,因此矢量化几乎肯定无关紧要。您需要具有最大内存带宽的硬件。英特尔至强融核处理器比至强处理器具有更多的带宽(但不是每核带宽)。

于 2014-09-01T00:02:13.260 回答
0

原来所有硬件都没有内置reduce运算电路。我想象有一个 16 个 17 位加法器连接到 128 位向量寄存器以进行减和运算。也许这是因为没有人遇到过 reduce 操作的重大瓶颈。好吧,我找到的最好的解决方案是#pragma omp parallel for reduction在 openmp 中。不过,我还没有测试它的性能。

于 2014-07-23T09:54:44.460 回答