2

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

它目前每天在以下时间运行:

AMD 皓龙 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 希望他们能更好地解释他们的基准测试,这样我就可以有效地获得每个核心的分数,这将更有帮助

4

5 回答 5

2

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

于 2009-09-24T18:38:58.793 回答
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 大小和缓存会有所帮助吗?

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

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

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

有没有办法识别对最终结果影响可以忽略不计的项目,并跳过这些计算?

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

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

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

于 2009-12-24T06:59:17.600 回答
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

于 2009-09-24T17:16:19.163 回答
0

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

请不要将其视为官方数据,如果工作受 CPU 限制且未高度矢量化,则您可能处于 1.5x - 1.75x 单线程加速中的真实数据。

您还需要考虑到您是: 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 中的任务并行库,它应该有助于解决这类问题。

-瑞克

于 2009-09-25T03:17:02.567 回答
0

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

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

于 2009-12-24T08:11:16.173 回答