【问题标题】:Comparing CPU speed likely improvements for business hardware upgrade justification比较 CPU 速度可能提高业务硬件升级的理由
【发布时间】:2009-09-24 16:58:11
【问题描述】:

我有 c# Console 应用程序,Monte Carlo 模拟完全受 CPU 限制,执行时间与可用的专用线程/内核数量成反比(我保持内核/线程之间的 1:1 比率)。

它目前每天运行:

AMD Opteron 275 @ 2.21 GHz(4 核)

该应用是使用 3 个线程的多线程,第 4 个线程用于另一个 Process Controller 应用。

每天运行需要 15 小时。

我需要尽可能估计在配置有以下 CPU 的系统上运行相同的工作需要多长时间:

http://en.wikipedia.org/wiki/Intel_Nehalem_(microarchitecture)
2 x X5570
2 x X5540 

并比较案例,我将使用可用线程对其进行重新编码。我想证明我们需要一个具有 2 个 x5570 CPU 的服务器而不是更便宜的 x5540(它们在单个主板上支持 2 个 CPU)。这应该使操作系统可以使用 8 个内核、16 个线程(我相信 Nehalem 芯片就是这样工作的)。所以对于我的应用来说,蒙特卡洛模拟有 15 个线程。

任何想法如何做到这一点?有没有一个网站可以让我查看单线程基准测试所涉及的所有 3 个 CPU 的基准测试数据?然后我可以推断我的情况和线程数。如果需要,我可以访问当前系统来安装和运行基准测试。

请注意,企业还规定该应用在未来 3 个月内的工作量将增加约 20 倍,并且需要在 24 小时内完成。

非常感谢任何帮助。

还在这里发布了这个:http://www.passmark.com/forum/showthread.php?t=2308希望他们能更好地解释他们的基准测试这样我就可以有效地获得每个核心的分数,这将更有帮助

【问题讨论】:

  • 鉴于您可以跨多个线程扩展您的工作负载,您可能希望考虑获得更多更便宜的系统。您是否有理由需要将其打包到一台机器中?
  • 我明白你的意思并同意。但这就是它在银行的运作方式。我不能跨服务器分发我的应用程序,它必须是单个服务器。另一种批准过程是为像 Datasynapse 这样的网格系统重写 - 非常漫长的批准过程。没有时间或预算。我目前的选择是升级到最好的单服务器机器,以满足最后期限、预算和银行审批流程、文档。这很痛苦,但我必须玩游戏,因此需要写这个理由文件。
  • 看我的回答 - 我认为即使是 X5570 也不够快。
  • 您可以使用更高端的机器进行测试和测量吗?单个进程的线性 CPU 可扩展性只是理想的,现实往往要残酷得多。请注意,供应商通常愿意租用硬件来测试潜在客户。

标签: multithreading benchmarking cpu-speed


【解决方案1】:

您是否考虑过在cuda 中重新创建算法?它使用当今的 GPU 将计算量增加 10-100 倍。这样你只需要买一个胖显卡

【讨论】:

  • 为 CUDA 重新编码在这个阶段不是一个选项,除非我可以在 CUDA 下轻松运行 c# 代码?
  • cuda 基于 c.我不知道你的算法有多大,但移植它可能是值得的。在我看来,加速 10-50 倍是一个巨大的激励
【解决方案2】:

要找到一个可以根据您所描述的需求进行扩展的单机服务器将会很困难。我建议您查看 Sun CoolThreads 或其他高线程数服务器,即使它们各自的时钟速度较低。 http://www.sun.com/servers/coolthreads/overview/performance.jsp

T5240支持128线程:http://www.sun.com/servers/coolthreads/t5240/index.xml

如果数据集和听起来一样大,内存和 CPU 缓存带宽可能是您的限制因素。从磁盘获取数据花费了多少时间?大幅增加 RAM 大小和缓存会有帮助吗?

您可能想退后一步,看看是否有不同的算法可以提供相同或相似的解决方案,但计算量更少。

听起来您已经花了很多时间优化计算线程,但是执行的每个计算实际上对最终结果很重要吗?

有没有办法在任何地方进行快捷计算?

有没有办法识别对最终结果影响微乎其微的项目,并跳过这些计算?

在渐进式迭代中添加细节的早期迭代能否使用较低分辨率的模型?

我熟悉的蒙特卡洛算法是非确定性的,运行时间与样本数量有关;有什么方法可以优化抽样模型以限制检查的项目数量?

显然我不知道您正在处理什么问题域或数据集,但可能有另一种方法可以产生相同的结果。

【讨论】:

    【解决方案3】:

    tomshardware.com 包含 CPU 基准测试的完整列表。但是......您不能只是将它们分开,您需要找到尽可能接近苹果与苹果的比较,并且您不会完全理解它,因为您的工作负载的指令组合可能会或可能不会取决于。

    我会请不要把这当成官方的,你需要有真实数据,你可能在 1.5x - 1.75x 单如果工作受 CPU 限制且未高度矢量化,则线程加速。

    您还需要考虑到您是: 1) 使用 C# 和 CLR,除非您已采取措施阻止它,否则 GC 可能会启动并序列化您。 2) nehalem 具有超线程,因此您不会看到完美的 16 倍加速,更有可能看到 8 倍到 12 倍的加速,具体取决于您的代码的优化程度。不过在这里保持乐观(只是不要指望 16 倍)。 3) 我不知道你有多少争用,在 3 个线程上获得良好的缩放!= 在 16 个线程上获得良好的缩放,这里可能有龙(通常是)。

    我将信封计算为:

    15 小时 * 3 线程 / 1.5 x = 30 小时在 nehalem 上的单线程工作时间。

    30 / 12 = 2.5 小时(最佳情况)

    30 / 8 = 3.75 小时(最坏情况)

    如果确实增加了 20 倍,则表示并行运行时间: 2.5 小时 * 20 = 50 小时(最佳情况)

    3.74 小时 * 20 = 75 小时(最坏情况)

    你分析了多少,你能从应用程序中挤出 2 倍吗? 1 台服务器可能就足够了,但可能还不够。

    天哪,试试 .Net 4.0 或 .Net 3.5 CTP 中的任务并行库,它应该有助于解决这类问题。

    -瑞克

    【讨论】:

    • 谢谢 rick 我已经试用了 Parallels 库,是的,它很好并且可以工作,但不允许我将线程限制到我需要的最大线程数,因为这上面还有其他应用程序必须运行的盒子变得太慢了,这就是为什么我会为这个应用程序提供 n-1 个线程,很可能是 15 个线程(如你所说的最好的情况)。
    • 我已经使用了一个很好的应用程序,redgate profiling,dottrace,ibm purify/quantify 等,并优化了所有软件,优化了我的 mersenne twister。在这方面能做的都已经做到了。现在归结为硬件。
    • 我使用了 x5570,我见过的最佳加速比是非 SSE 代码的 12 倍。请记住,如果您优化它更多,因为它是超线程的,如果指令流水线是全速的,加速将下降到 8 倍。通常有机会通过 SSE 对 monte carlos 进行矢量化,这有可能再次获得巨大的性能胜利(每个内核 4 倍),但这意味着至少对于内核而言要移出 C#。
    • 嗨@Rick,您所说的通过 SSE 进行矢量化是什么意思?我可以在 C# 中执行此操作,您能否提供文章、教程的链接?谢谢
    【解决方案4】:

    我会说,即使是双插槽 X5570 也无法扩展到您设想的工作负载。您需要将计算分布在多个系统中。简单的数学:

    当前工作量

    3 cores * 15 real-world-hours = 45 cpu-time-hours
    

    建议的 20 倍工作量

    45 cpu-time-hours * 20 = 900 cpu-time-hours
    900 cpu-time-hours / (20 hours-per-day-per-core) = 45 cores
    

    因此,假设性能完全线性扩展,您将需要相当于 45 个 2.2GHz Opteron 内核来实现您的目标(尽管将处理时间从每天 15 小时增加到 20 小时)。即使 Nehalem CPU 每线程快 3 倍,您仍将处于性能范围的外部边缘 - 没有增长空间。这也假设超线程甚至适用于您的应用程序。

    我见过的最佳情况估计将使 X5570 的性能可能是现有 Opteron 的 2 倍。

    来源:http://www.dailytech.com/Server+roundup+Intel+Nehalem+Xeon+versus+AMD+Shanghai+Opteron/article15036.htm

    【讨论】:

    • 没有当前工作负载是总共 3 个核心 = 15 小时。如果有 1 个核心,则需要 45 小时
    • 这就是我的意思 - 您的总工作量目前是 45 小时的 1 个核心。
    • 是的,对不起,我误解了你。我同意大约需要完成 900 小时的单线程工作。如果我可以让 15 个线程运行这个应用程序 = 900/15 = 60 小时在当前硬件上工作。如果 Nehalem 每个线程的速度提高了 3 倍,即每天工作 20 小时,这变得非常高,我真的需要知道那个乘数是多少,是 3 倍还是如何找出?
    【解决方案5】:

    这将是挥舞大锤,但也许看看一些重铁 4 路服务器是有意义的。它们很昂贵,但至少您可以在一个盒子中获得多达 24 个物理内核。如果您已经用尽了所有其他优化手段(包括 SIMD),那么就需要考虑一下。

    我也会厌倦其他瓶颈,例如内存带宽。我不知道 Monte Carlo Simulations 的性能特征,但增加一种资源可能会揭示其他瓶颈。

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 2011-09-20
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2012-11-05
      相关资源
      最近更新 更多