32 核(每个物理核心)2.2 GhZ 还是 12 核(6 个物理核心)3.0GHZ?

32 核(每个物理核心)2.2 GhZ 还是 12 核(6 个物理核心)3.0GHZ?

我正在开发一个多线程应用程序(基于 C# 构建的外汇交易应用程序),并将客户端从 12 核 3.0GHZ 机器(英特尔)升级到 32 核 2.2 Ghz 机器(AMD)。使用多核进行整数、浮点和其他计算时,PassMark 基准测试结果明显更高,而对于单核计算,它比同类产品(与配置与 12 核产品相似的产品)慢一点。哦,它还配备了 64 GB 内存(是另一款的 4 倍)和更快的 SSD。

因此,在该机器上配置并运行应用程序后,它不仅性能不佳,而且速度明显变慢。我们说的是,对于通常在 5-20 秒内完成处理的应用程序来说,它慢了 30 秒到 1 分钟。该应用程序使用最大并行度 (TPL),我尝试将其设置为内核数,也尝试将其设置为内核数的一半。我还尝试运行单线程,并且不对并行线程设置任何限制。

虽然硬件可能存在一些问题,但我想知道是否是 CPU 处理速度的问题。我可以超频到 3.0 GHZ。但这真的是个好主意吗?

服务器信息 -

AMD http://www.passmark.com/forum/showthread.php?4013-AMD-Dual-6272-performance-is-60-lower-than-benchmarks 看来基准从一开始就是错误的——正式的。

英特尔 i7 3930k

操作系统(两者相同)Windows 7 Professional 64位

相关问题 - https://stackoverflow.com/questions/7747573/net-performance-on-amd-processor

编辑 我看到了很多有用的信息。现在我想稍微修改一下这个问题 - 暂时忘掉英特尔处理器。可以对 AMD 系统做些什么来从中获得更多?我们正在进行分析。我们让 DBA 查看了索引、碎片和其他参数,如 I/O 使用情况。似乎比基于英特尔的 CPU 有更多的读写操作。我看到了一个关于基于 AMD 的优化的答案。除了使用 OpenCL 之外,还有其他方法可以做到这一点吗?超频怎么样?这会让 CPU 崩溃吗?在承认方面 - 我看到人们对我很生气!这台电脑正在出售,老板和我讨论了可用的资源(4 倍的 RAM、几乎 3 倍的 CPU 和更快的驱动器 SSD)是否会帮助我们获得很多性能。我们一直在寻求从软件方面进行调整,但它并没有(我不会说没有)成为我们所寻找/希望的神奇的物有所值。我确实对此感到十分难过 —— 因此写了这篇很长的文章。

更多 编辑 我只希望 AMD 的代表会说这是胡说八道。你做错了!你忽略了这一点,没有使用这个功能。更糟糕的是,我读到 AMD 今年亏损巨大,正在等待救助。:(

答案1

让我说清楚。您是根据直觉和一个基准来升级客户端的吗?

这是错误的。基准测试完全是人为的,并不能反映真实世界中程序的性能。不过,我要说的是,它们确实提供了潜在性能的指示。

首先,要让应用程序在多个核心上表现良好并有效地利用所有可用内存,还有很多工作要做。

许多应用程序在编写时并未考虑大量并发,而且并非所有问题领域都适合并发解决方案。应用程序的瓶颈可能是共享内存周围的锁。

例如,我见过一些并发应用程序的图表,它们似乎可以很好地扩展到 4 个线程,但随后,随着线程数量的增加,性能却毫无原因地线性下降。这表明资源匮乏。锁非常昂贵。考虑使用无锁结构或尽量减少共享资源的数量和线程之间的交互。

另一个减速因素是缓存。一个非常有趣的例子是 lz4 压缩器。早期版本非常快,但另一个更复杂的压缩器 (snappy) 的性能也差不多。原因是缓存的使用方式。不要低估这一点。如果你知道自己在做什么,你可以将某些算法和数据结构的速度提高很多倍,这正是 LZ4 的作者所做的。

出于兴趣请参阅以下链接:http://fastcompression.blogspot.co.nz/2011/06/lz4-improved-performance.html

不过,我要做的第一件事是在 32 核系统上运行您的代码,看看您是否可以对其进行分析,以了解它在哪里花费了时间。它可能与锁有关。此外,尝试减少线程数并再次进行基准测试。您可能会发现性能有所提高 - 事实上,我认为这是可能的。

答案2

一种思考方式是:从 12 核 x 每核 2 线程(启用 HT)x 3.0 ghz = 72.0,转变为 32 x 1 x 2.2 = 70.4 的系统。

编辑:根据您更新的信息,ARK 中描述的 3930k 具有 6x2 拱门 = 12 个线程,而不是我建议的 12x2 拱门。(http://ark.intel.com/products/63697/Intel-Core-i7-3930K-Processor-12M-Cache-up-to-3_80-GHz

抛开过于简单的系统视图 - 英特尔拥有更高效的物理核心,而“虚拟”(HT)核心效率较低,并且还有许多其他变量需要考虑 - 三通道内存控制器等。

但有一件事可能很突出:线程阻塞。如果有些线程阻塞/阻止其他线程执行,更快的时钟速率 + 更高效的架构将胜过仅仅拥有更多线程能力。这更像是一个软件优化问题。

还有一件事需要考虑:您是否在为 C# 应用程序使用针对 AMD 优化的编译器,还是仍在使用针对 Intel 优化的版本?编辑:Visual Studio 和大多数其他编译器都有允许您针对特定 CPU 架构(即 32 位与 64 位、ARM、特定指令集(SSE2/SSE3/SSE4 等))的选项。我很好奇这是否是起作用的一个因素?

答案3

有很多事情需要考虑。

  • SSD 是系统上唯一的“驱动器”吗?如果 SSD 不是系统上唯一的驱动器,SSD 是否仅用于操作系统?您是否为应用程序使用 RAID,如果是,它是否连接到运行 RAID 的其他数据库服务器?已发现 RAID 会破坏数据库数据检索的某些方面。

  • 关于 CPU,您确实需要芯片型号才能知道您正在比较的是苹果与苹果。型号将告诉您芯片缓存、内核数和线程数、处理器速度、芯片上的总线类型以及内核之间的每秒千兆位管道速度。例如,一个英特尔 CPU 可能具有 8.00 GT/s 带宽,而另一个 CPU 可能具有 6.5 GT/s 带宽……内核之间的带宽非常重要。如果数据在完成工作后滞留在 CPU 内核上……这实际上会使整个系统、硬件和软件陷入死锁。

英特尔服务器处理器

AMD 服务器处理器

  • 您是否检查过数据集有多大,以及应用程序在 RAM 中运行时有多大?所比较的两个系统之间的 RAM 速度有多快,您购买的芯片是否支持所购买 RAM 的速度!!!众所周知,主板支持多种不同速度的 RAM,但您订购的系统所用的 CPU 可能不支持。因此,您可能订购了主板支持 1300MHz 的系统,但由于您订购的芯片,您得到的 RAM 低于 1000MHz。如果此系统有这么多内核,为什么新系统只有 64GB 的 RAM。我有一台用于家庭系统的 Dell T-410,我于 2009 年左右购买了它,它的最大容量为 64GB,有 8 个内核(2 个四核)... 而较新的型号有 128GB 的​​ RAM,有 12 个内核(2 x 6)。如果您重新订购系统,请考虑增加 RAM(如果需要)... 哎呀,我为运行 VMware 5.0 的 8 核家庭系统使用了 32GB。

  • 我认为,根据您发帖的方式以及询问的类型,您在订购之前没有仔细研究硬件方面的问题。如果您看一下小字...您可能可以将其退回以换取另一个系统。只需告诉老板,根据它正在运行的应用程序,性能不如预期,不要拖延,因为退货可能在一周到两周内有效,之后您就得自己承担了。

不要感到羞耻,只需承认它并让管理层知道,您从初步测试中获得的数字并不在您认为可以用现金支出获得的数字的范围内……我们需要将其换成另一个系统。

答案4

正如其他人已经指出的那样,基准测试并不总是选择处理器的良好指导。尤其是 PassMark,对于非通用应用程序来说,绝对不是您想要查看的东西。

如果你对软件正在使用的资源以及瓶颈所在有所了解,那么你可能需要查看“原始”性能数据,如内存延迟、内存吞吐量,也许还有 CINT 中 Spec 基准测试套件的不同测试(英特尔 3960AMD 6274) 和 CFP (英特尔 3990AMD 6274) 学科。

请记住,结果(以及感知或测量的应用程序性能)可能会有很大差异取决于所使用的编译选项或编译器版本生成特定的二进制文件。对于 .NET 来说,情况有所不同,因为编译器只生成元代码,然后由 JIT 运行时将其转换为实际的体系结构相关代码。但即使如此,您也可以指定特定架构的优化参数。此外,您的操作系统的特定补丁级别也可能很重要 - 微软已经发布了补丁来修复某些 AMD CPU 的性能不佳问题。

相关内容