Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么AMD Ryzen 2700x 2x的速度比使用Python的3年笔记本电脑Intel i7-6820HQ慢?_Python_Linux_Intel_Amd Processor - Fatal编程技术网

为什么AMD Ryzen 2700x 2x的速度比使用Python的3年笔记本电脑Intel i7-6820HQ慢?

为什么AMD Ryzen 2700x 2x的速度比使用Python的3年笔记本电脑Intel i7-6820HQ慢?,python,linux,intel,amd-processor,Python,Linux,Intel,Amd Processor,我刚刚安装完一台基于AMD Ryzen 2700x和32GB RAM(运行Ubuntu 18.04)的台式计算机。 在工作中,我有一台3年的笔记本电脑工作站,带有Intel i7-6820HQ和16GB RAM(运行Windows 10) 我在两个平台上都安装了Anaconda,并运行了一个自定义Python代码,该代码严重依赖于基本的numpy矩阵操作。 代码不涉及任何特定于GPU的计算(我的工作笔记本电脑没有)。 Ryzen的运行频率为3.7GHz,笔记本电脑i7的运行频率为3.6GHz。两

我刚刚安装完一台基于AMD Ryzen 2700x和32GB RAM(运行Ubuntu 18.04)的台式计算机。 在工作中,我有一台3年的笔记本电脑工作站,带有Intel i7-6820HQ和16GB RAM(运行Windows 10)

我在两个平台上都安装了Anaconda,并运行了一个自定义Python代码,该代码严重依赖于基本的numpy矩阵操作。 代码不涉及任何特定于GPU的计算(我的工作笔记本电脑没有)。 Ryzen的运行频率为3.7GHz,笔记本电脑i7的运行频率为3.6GHz。两个系统都已全面更新

令我惊讶的是,代码在我的工作笔记本电脑上运行只需5分钟,而在Ryzen桌面上则需要10分钟

最新的Ryzen 2700x应该比使用了3年的高端笔记本电脑Intel处理器快很多,那么为什么它会慢2倍呢

  • 这是因为Ubuntu在某种程度上是次优的,而不是Ryzen的Windows10吗

  • 这是因为英特尔比AMD更适合Python模拟吗

  • 还有别的吗

谢谢你帮助我了解正在发生的事情

numpy矩阵运算

Intel Skylake的FMA吞吐量(每时钟256位向量2个)明显优于Ryzen(每时钟128位向量2个或每时钟256位向量1个)。有关x86微通道的详细信息,请参阅。包括Ryzen在内的总结

对于缓存中的数据热(一个经过良好优化的matmul可以通过缓存阻塞实现),一个好的matmul可能会成为FMA执行单元吞吐量的瓶颈

或L1d SIMD加载/存储带宽,其中Skylake>2x Ryzen,能够支持接近2x 256位加载+1x 256位存储,而Ryzen可以支持2x 128位缓存访问,其中一个可以是存储

因此,Intel的单线程或单核吞吐量是Ryzen core的两倍,matmul/FMA吞吐量是完全合理的


您是否使用多线程来利用每台机器中的所有内核,一会儿


如果您的工作负载可以/正在利用多个内核,那么可能是L3缓存带宽限制造成了差异,假设它们都配置正确并且实际运行在3.6/3.7 GHz。或者可能有什么东西造成了每核4倍的性能差异。

这是一个软件问题:默认情况下,anaconda附带intel的MKL作为BLAS的后端,这将故意削弱AMD的速度。您还可以安装非MKL版本,该版本使用openBLAS,您将看到巨大的性能提升。您不需要重新安装它,只需卸载numpy和mkl,然后安装用openBLAS构建的numpy。

这可能不属于stackoverflow。请尝试超级用户(另一个stackexchange站点)。在任何情况下,如果没有代码进行基准测试,基准测试都是不可能的。如果您需要帮助,您需要提供一个可复制的示例。谢谢您的回复。我将尝试向超级用户发布:一旦完成,stackoverflow上的发布将被抑制,以避免创建重复。我无法共享代码,因为我在工作中使用了它,但我会尽量找时间创建一个更简单的测试脚本来共享。@Scott如果答案取决于您编写的代码,我认为它属于这里。不幸的是,代码是不可共享的,一个简单的基准测试将非常有帮助。缺少代码是我对这个问题唯一的抨击,而我写这篇文章时的唯一答案很有启发性。@markransem它是否依赖于代码?上面的答案表明这实际上是一个硬件问题@Scott Ryzen和i7非常匹配,它需要非常具体的代码来产生2倍的差异。非常感谢您明确的回答。我的代码不涉及多线程,因此这显然是由于FMA吞吐量。我真的没有意识到这一点(在购买之前,我检查过的比较英特尔和AMD的网站也没有),可惜我错了choice@PythonistL:numpy可以单独使用多个线程。您应该使用
top
或Windows等效工具检查代码运行时使用了多少内核。如果只有1,那么从配置numpy到多线程,如果矩阵足够大,可能会有很大的加速。另一个提示:当将MKL与Ryzen CPU一起使用时,您还可以设置一个环境变量
export MKL_DEBUG_CPU_TYPE=5
,然后MKL将运行得更快,因为它将使用在Ryzen中运行良好的优化代码路径,并且最终比OpenBLAS运行得更快(从0.3.8开始)。我不记得我在哪里读过它,但我在我的
.profile
中读了一段时间,效果很好。