1

我尝试在 Xeon E5 和 Xeon Phi 上运行 1,000,000,000 次 for 循环,并测量时间来比较它们的功效,我很惊讶我得到了以下结果:

  • 在 E5(1 线程)上:41.563 秒
  • 在 E5(24 线程)上:22.788 秒
  • Xeon Phi(240 线程)卸载:45.649 秒

谁能告诉我为什么我的疗效不好?关于建筑或任何其他?

为什么我在 Xeon Phi 上的效果不好?我对 for 循环什么都不做。如果我的 Xeon Phi 协处理器没有任何问题,那么 Xeon Phi 的哪些工作很棒?一定要矢量化?如果不是矢量化,我可以在 Xeon Phi 上做任何事情,使用它的线程来帮助我吗?

4

3 回答 3

2

关键是你说“我在 for 循环中什么都不做”。(如果我错了,请纠正我。)

由于 Xeon Phi 创建时的实际限制,其内核基于具有各种增强功能的 Pentium 代机器,例如双问题、每个内核 4 个线程和 512 位矢量引擎。因此,如果您只运行标量代码,它就像奔腾一样运行。

您需要运行高度并行且高度可向量化的代码。如果每个内核上运行的线程能够共享内核的管道而没有太多争用,例如 DGEMM,并利用缓存结构,那就更好了。

通过运行一个简单的基准测试,您基本上是在比较两种架构(至强和至强融核)上的代码执行开销。代码开销通常是标量的。

这是一个夸张的插图,让我们更倾向于视觉化。

|<--Ovr-->|<--工作--------------->| 重复 10^6 次 //至强服务器

|<-----Ovr----->|<-工作->| 重复 10^6 次 //Xeon Phi

其中“Ovr”是开销,“Work”是您的高度线程化和矢量化的工作负载。

如果您有“工作”要做,那么至强融核会做得更好。如果你去掉“工作”,只留下开销,至强会做得更好。

于 2014-11-21T23:34:22.463 回答
1

Xeon Phi 很烂。在适度并行的应用程序中,传统的 xeon 胜过 xeon Phi,而在大规模并行的应用程序中,GPGPU 占据主导地位。当您可以完美地并行化和矢量化您的应用程序时,至强融核只有微不足道的竞争力,如果其中任何一个都不完美,忘记至强融核。

编辑:xeon phi 比传统 xeon 更差或比 GPGPU 更差的一些示例:

blog.xcelerit.com/intel-xeon-phi-vs-nvidia-tesla-gpu/

http://www.delaat.net/awards/2014-03-26-paper.pdf

https://verc.enes.org/ISENES2/documents/Talks/WS3HH/session-4-hpc-software-challenges-solutions-for-the-climate-community/markus-rampp-mic-experiences-at-mpg

于 2014-12-18T17:08:03.937 回答
1

首先,您必须利用整个芯片,即也利用 SIMD 单元。其次,为了利用 Xeon Phi 处理器,流水线不能保持空闲状态,即流水线内必须始终有足够的指令。在您的基准测试中,没有发出任何指令,因此您基本上测量了一个空循环的启动(可能已由您的编译器优化),并且由于 CPU 的时钟更高,因此在 CPU 上运行得更快。

此外,在我的基准测试中,我发现 Xeon Phi 的性能对最内层循环(在 SIMD 单元上运行)的长度非常敏感。

于 2015-04-10T01:16:34.480 回答