比较CPU速度可能会改善业务硬件升级的合理性

时间:2009-09-24 16:58:11

标签: multithreading benchmarking cpu-speed

我有c#Console应用程序,蒙特卡罗模拟完全受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 x x5570 CPU的服务器而不是更便宜的x5540(它们在单个主板上支持2个cpu)。这应该可以提供8个内核,16个线程(这就是我相信的Nehalem芯片的工作方式)到操作系统。因此对于我的应用程序来说,这是蒙特卡罗模拟的15个主题。

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

请注意,该公司还指示此应用在未来3个月内的工作量将增加约20倍并需要在24小时内完成。

任何帮助都非常感激。

此处也发布了这个:http://www.passmark.com/forum/showthread.php?t=2308希望他们可以更好地解释他们的基准所以我可以有效地获得每个核心的分数,这将更有帮助

5 个答案:

答案 0 :(得分:2)

您是否考虑在cuda中重新创建算法?它使用当前的GPU来增加10-100倍的计算。这样你只需要购买一个胖视频

答案 1 :(得分:1)

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

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

如果数据集与声音一样大,则内存和CPU缓存带宽可能会成为限制因素。从磁盘获取数据花费了多少时间?大规模增加RAM大小和缓存会有帮助吗?

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

听起来你花了很多时间来优化计算线程,但每次执行的计算对最终结果是否真的很重要?

有没有办法在任何地方快速计算?

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

可以将较低分辨率的模型用于早期迭代,并在渐进式迭代中添加细节吗?

我熟悉的蒙特卡罗算法是非确定性的,运行时间与样本数量有关;有没有办法优化抽样模型来限制检查项目的数量?

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

答案 2 :(得分:0)

我要走出困境,说即使是双插槽X5570也无法扩展到你想象的工作量。您需要在多个系统中分配计算。简单的数学:

当前工作量

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

建议的20X工作量

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 :(得分:0)

tomshardware.com包含一系列CPU基准测试。然而......你不能只是划分它们,你需要找到尽可能接近的苹果与苹果的比较,你不会得到它,因为工作量的指令组合可能会或可能不依赖。

我会猜测请不要将此视为官方,您需要拥有真实的数据,以便您可能在1.5x - 1.75x单如果工作是cpu绑定而不是高度矢量化,则为线程加速。

您还需要考虑到以下情况: 1)使用C#和CLR,除非你采取措施防止它GC可能启动并序列化你。 2)nehalems有超线程,所以你不会看到完美的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台服务器可能已足够,但可能不会。

对于gosh sakes,尝试使用.Net 4.0中的任务并行库或.Net 3.5 CTP它可以帮助解决这类问题。

-Rick

答案 4 :(得分:0)

它正在摆动大锤,但也许看一些重型铁4路服务器是有意义的。它们很昂贵,但至少你可以在一个盒子中获得多达24个物理核心。如果您已经用尽所有其他优化方法(包括SIMD),那么需要考虑这一点。

我也厌倦了其他瓶颈,比如内存带宽。我不知道蒙特卡罗模拟的性能特征,但是增加一个资源可能会揭示其他一些瓶颈。