我尝试在Xeon E5和Xeon Phi上运行1,000,000,000次for循环,测量时间来比较它们的功效,我很惊讶我得到了以下结果:
有人可以告诉我为什么我的效果不好吗?关于建筑或任何其他?
为什么我在Xeon Phi上遇到了不好的效果?我在for循环中什么都不做。如果我的Xeon Phi协处理器没有任何问题,Xeon Phi有什么用?必须是矢量化?如果不是矢量化,我可以在Xeon Phi上做任何事情使用它的线程来帮助我吗?
答案 0 :(得分:2)
关键是你说,“我在for循环中什么都不做。” (如果我弄错了,请纠正我。)
由于Xeon Phi创建时的实际限制,其核心基于具有各种增强功能的Pentium生成机器,例如双重问题,每个核心4个线程和512位矢量引擎。因此,如果您只运行标量代码,它就像奔腾一样运行。
您需要运行高度并行且高度可矢量化的代码。如果在每个核心上运行的线程能够在没有太多争用的情况下共享核心的管道,则更好。 DGEMM,以及利用缓存结构。
通过运行一个简单的基准测试,您基本上可以比较架构(Xeon和Xeon Phi)上的代码开销执行情况。代码开销通常是标量。
这是一个夸张的插图,让我们更具视觉倾向。
|< - OVR - > |< - 工作---------------> |重复10 ^ 6次// Xeon Server
|< ----- ----- OVR> |< -Work-> |重复10 ^ 6次// Xeon Phi
“Ovr”是开销,“工作”是高度线程化和矢量化的工作负载。
如果你有“工作”,那么Xeon Phi会做得更好。如果删除“工作”,只留下开销,Xeon会更好。
答案 1 :(得分:1)
Xeon Phi很糟糕。在适度并行的应用程序中,传统的xeon在大规模并行应用程序GPGPU中排除了xeon Phi。 Xeon Phi只有在你完全并行化和矢量化你的应用程序时才会有一点竞争力,如果其中任何一个不完美忘记Xeon Phi。
编辑: 一些例子中,xeon phi的工作要么比传统的xeons差,要么比GPGP更差:
blog.xcelerit.com/intel-xeon-phi-vs-nvidia-tesla-gpu /
答案 2 :(得分:1)
首先,您必须使用整个芯片,即也使用SIMD单元。其次,为了利用Xeon Phi处理器,管道必须不能保持空闲,即管道内必须始终有足够的指令。在您的基准测试中没有发出指令,因此您基本上测量了空循环的启动(可能由编译器优化)并且由于CPU的更高时钟,在CPU上运行得更快。
此外,在我的基准测试中,我发现Xeon Phi的性能对最内层循环(在SIMD单元上运行)的长度非常敏感。