我刚刚完成了基于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的Windows 10相比欠佳吗?
是因为英特尔比AMD更适合Python模拟吗?
还有什么?
感谢您的帮助,以了解发生了什么事。
答案 0 :(得分:4)
numpy矩阵运算
与Ryzen(每个时钟128位向量2个或每个时钟256位向量1个)相比,英特尔Skylake具有明显更好的FMA吞吐量(每个时钟256位向量2个)。有关x86微架构的详细信息,请参见https://agner.org/optimize/。而FLOPS per cycle for sandy-bridge and haswell SSE2/AVX/AVX2为摘要,其中包括Ryzen。
对于高速缓存中的数据,采用优化的matmul可以通过缓存阻塞实现,因此,良好的matmul可以成为FMA执行单元吞吐量的瓶颈。
或L1d SIMD加载/存储带宽,其中Skylake> 2x Ryzen,能够支持接近2x 256位负载+ 1x 256位存储,而Ryzen可以支持2x 128位高速缓存访问,最多可支持以下之一可以是商店。
因此,英特尔的单线程或每核吞吐量是Ryzen内核的两倍,对于
您是否使用多线程来利用每台计算机中的所有内核? 2700x is an 8-core CPU,而6820HQ is a 4-core chip。
如果您的工作负载可以/正在利用多个内核,那么假设它们都已正确配置并且实际上以3.6 / 3.7 GHz运行,那么可能是L3高速缓存带宽限制正在发挥作用。也许有些东西造成了每核心性能差异4倍。
答案 1 :(得分:2)
这是一个软件问题:默认情况下,anaconda随附intel的MKL作为BLAS的后端,这将有目的地削弱AMD的速度。您还可以安装非MKL版本,该版本使用openBLAS代替,您将看到巨大的性能提升。您无需重新安装它,只需卸载numpy和mkl,然后安装使用openBLAS构建的numpy。