我正在开发一个多线程应用程序(建立在C#上的外汇交易应用程序),客户端从12核心3.0GHZ机器(英特尔)升级到32核心2.2GHz机器(AMD)。当使用多核进行整数计算、浮动计算和其他计算时,PassMark基准测试结果要高得多,而对于单个核心计算,则要比软件包慢一些(其他的计算结果与12核心计算的配置相似)。哦,它还有64 GB内存(是另一个内存的4倍)和更快的SSD。
因此,在该机器上配置和运行应用程序之后,它不仅不能执行,而且速度也要慢得多。我们谈论的是30秒-1分钟的应用程序,通常在5-20秒内完成处理。应用程序使用最大并行度(TPL),我尝试将其设置为核数,也是其中的一半。我还尝试运行单线程,没有设置任何限制并行线程。
虽然硬件可能有一些问题,但我想知道CPU处理速度是否是问题所在。我可以超频到3.0千兆赫。但这是个好主意吗?
服务器信息-
AMD http://www.passmark.com/forum/showthread.php?4013-AMD-Dual-6272-performance-is-60-lower-than-benchmarks似乎一开始就认为基准是错误的--正式的。
英特尔i7 3930k
操作系统(两种操作系统相同) Windows 7专业64位
相关问题- https://stackoverflow.com/questions/7747573/net-performance-on-amd-processor
编辑我看到了很多有用的信息。我现在想稍微修改一下这个问题--暂时忘掉英特尔处理器吧。用AMD系统可以做些什么来获得更多呢?我们在做侧写。我们已经对索引、碎片和其他参数(如I/O用法)进行了DBA检查。似乎有更多的读写比在英特尔的CPU。我看到了一个基于AMD优化的答案。除了使用OpenCL之外,还有其他方法可以这样做吗?超频怎么样?那会烧掉CPU吗?说到认输-我看到人们对我很生气!PC正在出售,老板和我讨论了是否可用的资源(4倍的RAM,几乎3倍的CPU和更快的驱动程序SSD)将帮助我们获得很多的性能。我们总是希望从软件端来调整它,只不过它还没有(我不会说没有)是我们所期待/希望的那种神奇的效果。我对此感到非常痛苦
更多的编辑,我只是希望一些AMD的代表会说这是牛*你是错误的方式!你忽略了这一点而没有使用这个特性。更糟糕的是,我读到AMD今年亏损巨大,正在等待救援。:(
发布于 2012-12-19 04:18:55
让我把这事说清楚。您基于预感和单一基准对客户进行了升级?
这是个错误。基准完全是人为的,并不能反映真实世界程序的表现。不过,我要说的是,它们确实表明了潜在的表现。
首先,要让应用程序在多个内核上表现良好,并有效地使用所有可用内存,还有很多事情要做。
许多应用程序的编写没有考虑到大量并发性,并不是所有的问题域都适合并发解决方案。应用程序的瓶颈可能是共享内存周围的锁。
例如,我已经看到了一些并发应用程序的图表,这些应用程序似乎可以扩展到4个线程,但是没有明显的原因,性能随着线程数量的增加而线性下降。这是一种资源饥饿的迹象。锁真的很贵。考虑使用无锁结构或最小化共享资源的数量和线程之间的交互。
另一个放缓可能就在缓存中。一个非常有趣的例子是lz4压缩器。早期版本非常快,但另一个更复杂的压缩机(snappy)提供了类似的性能。原因在于缓存的使用方式。别低估这点。如果你知道你在做什么,你可以用很多倍数来加速一些算法和数据结构,这正是LZ4的作者所做的。
为了兴趣起见,请参阅以下链接:http://fastcompression.blogspot.co.nz/2011/06/lz4-improved-performance.html
不过,我要做的第一件事是在32核心系统上运行您的代码,看看您是否可以对它进行分析,以了解它在哪里花费时间。可能是带锁的。另外,尝试减少线程的数量并再次进行基准测试。你可能会发现性能的提高--事实上,我认为这是可能的。
发布于 2012-12-19 03:40:08
考虑这个问题的一种方法是:从12个内核x2个内核线程(启用HT)x3.0GHz= 72.0,过渡到一个32 x1x2.2= 70.4的系统。
编辑:根据你更新的信息,在方舟中描述的3930 K有一个6x2拱形=12个线程,而不是我建议的12x2拱形。(http://ark.intel.com/products/63697/Intel-Core-i7-3930K-Processor-12M-Cache-up-to-3_80千兆赫)
过于简化的系统视图-英特尔有更有效的物理核心,而“虚拟”(HT)核心的效率较低,还有许多其他的变量-三通道内存控制器等。
但有一件事可能很突出:线程阻塞。如果存在阻止/阻止其他线程执行的线程,则更快的时钟速率+更高效的架构将赢得更多线程能力。这更像是一个软件优化问题。
另一件事是:你是在为C#应用程序使用AMD优化的编译器,还是还在使用英特尔优化的版本?编辑: Visual和大多数其他编译器都有允许您针对特定CPU体系结构的选项,例如32位对64位、ARM、特定指令集(SSE3 2/SSE3/SSE4等)。我很想知道这是否是起作用的一个因素?
发布于 2012-12-19 06:38:24
有很多事情要考虑。
AMD服务器处理器
不要感到羞愧,只要承认这一点,并让管理层知道,你从最初测试中得到的数字并不在你认为你会得到的cash...and支出的大致范围内--我们需要把它换成另一个系统。
https://serverfault.com/questions/459218
复制相似问题