确定硬件瓶颈

计算科学 分析
2021-12-16 12:21:23

我知道这个问题对我之前在此处找到的问题有点熟悉,但是我现在从一个稍微不同且更笼统的角度来解决这个问题。

假设我有一个运行时间在几天到几周范围内的代码。由于某种原因,无法更改代码以提高性能。我的目标是购买一台计算机以尽可能快地运行此特定代码。它目前在某些方面是并行的,但必须是共享内存。

目前我有两台计算机可以运行它。它们都运行相同的 Linux 发行版,并且都运行在 Intel-Xeon 处理器上,但是 CPU 型号不同,内存速度和其他硬件值也不同(计算机之间的年龄差异约为 5 年)。在两台计算机上,我都可以轻松更改用于运行代码的内核数量,并且两者中较新的一个支持超线程。

我的问题是,有没有一种方法可以分析代码在一台或两台计算机上的运行情况,这可以让我找到硬件瓶颈所在,从而调整购买的新计算机,以获得使用此代码的最佳性能。

1个回答

我假设您在这里谈论的是服务器级部分。客户端部分可能有点不同,但大部分逻辑都成立。

  1. 找到一个在大约 10 分钟内使用一个线程运行的测试用例,它代表了您的较长问题,因为它以相似的比率练习了您的代码的重要部分。您可能必须缩小问题规模以缩小初始化时间等。

  2. 由于您只有英特尔至强,请尝试打开和关闭超线程,并比较两种情况下使用最大线程数的代码版本的运行时间。如果您的代码在启用超线程的情况下稍微快一些,那么您应该在基于 AMD Bulldozer 的机器上借用时间来测试它的共享 FPU 是否对您的代码有利。这并不完全相同,但如果两个超线程可以成功共享 Xeon FPU,那么您可能有机会在 AMD 机器上从共享 FPU 中获得一些不错的性能。

  3. 使用 Linux 或 BIOS 的能力来设置一系列固定但降低的 CPU 时钟频率以运行您的代码(例如 2.7GHz、2.6GHz、...)。如果性能随时钟频率变化很大,并且在高端没有停滞不前,请购买您能负担得起的最快时钟频率 CPU。如果在某些时钟速度后性能停滞不前,则考虑不购买顶级 bin CPU,而是退后并购买更多或更快的内存。如果可以,请在您要购买的实际硬件上对您的代码进行基准测试。如果您只想购买一个节点,这可能很难,但请四处询问,您认识的人可能有一个您可以借用的节点。

  4. 考虑你的计算计划。如果您需要运行的案例是有限且枚举的,请计算从 Amazon 租用一些 EC2 实例而不是购买机器的成本。如果您只打算购买一个节点,您可能会发现即使保持它满载,您计划的运行所花费的时间也将超过您可以等待的时间,并且从亚马逊购买 10 倍的实例并在那里运行它们可能会更有效. 另外,实际上很难让单个工作站或服务器节点一直保持忙碌。它需要勤奋。您可以在需要时租用亚马逊节点,不需要时丢弃。您不必为不使用的时间付费。

  5. 强烈考虑向美国的 XSEDE 或欧盟的 PRACE(或您所在国家/地区的当地同等机构)等组织申请超级计算机时间。我们(我在参与 XSEDE 的 TACC 工作)实际上是在浪费时间,通过启动分配,可以在几天或几周内免费获得约 100k 核心小时。我认为互补的组织有类似的政策。