我有一个应用程序,其中大型矩阵上的减少操作(如sum,max)是瓶颈。我需要尽快做到这一点。 mkl中有向量指令吗?
是否有特殊的硬件单元在xeon cpu,gpu或mic上处理它?
一般来说,如何在这些硬件中实施减少操作?
答案 0 :(得分:1)
您可以使用KNC vpermd和vpermf32x4指令以及swizzle修饰符来实现您自己的简单缩减,以在向量单元内执行跨道操作。
这些C的内在函数等价物是 mm512 {mask} permute *和 mm512 {mask} swizzle * family。
但是,我建议您首先查看数组符号减少操作,它已经在MIC上实现了高性能。
查看可用的缩减操作here,并查看来自英特尔的泰勒基德的this视频,讨论从20分30秒开始对Xeon Phi的数组符号缩减。
编辑:我注意到你也在寻找基于CPU的解决方案。数组符号减少在Xeon上也能很好地工作。答案 1 :(得分:0)
原来没有任何硬件内置减少运算电路。
我想象一个16位17位加法器连接到128位向量寄存器以进行降低和运算。也许这是因为没有人遇到减少操作的重大瓶颈。好吧,我发现的最佳解决方案是openmp中的#pragma omp parallel for reduction
。我还没有测试它的性能。
答案 2 :(得分:0)
此操作将受带宽限制,因此矢量化几乎肯定无关紧要。您希望硬件具有最大的内存带宽。英特尔至强融核处理器具有比Xeon处理器更多的聚合带宽(但不是每核心带宽)。