确定计算要求

计算科学 并行计算 显卡 高性能计算
2021-12-16 06:35:23

我正在考虑为自己建造/购买一个用于科学计算的工作站。我将进行内存密集型的分子动力学模拟(大量粒子和一百万或更多时间步长的数据),并且需要运行相同代码的多个实例(以生成集合)。我是计算新手,但我的猜测是我将使用 C++ 并学习利用最佳内存处理实践。就整体平均而言,在我看来,我既可以只运行代码 N 次,也可以在 N 个处理器上同时运行 N 个代码实例。此时我无法访问 HPC 资源,我只是想获得一个简单的桌面(可能是 2 或 4 个内核),但我想学习使这段代码并行。

在这一点上,我对代码本身知之甚少,无法对我的需求进行更具体的评估。但是,我的问题是在购买工作站时我应该牢记哪些非常重要的功能。例如,如果我最终要过渡到 HPC 时要记住的事情,如果需要完成一定数量的并行处理(或者只有 2 个或更多内核足够)等要记住的事情。

3个回答

你的问题有很多未知数,所以我会尽量让这个答案尽可能广泛。

听上去,您正在考虑编写自己的 MD 代码。写一个MD 代码很容易,但是写一个好的,即高效和正确的,MD 代码是非常非常困难的,更不用说费时了。除非您正在研究一些现有 MD 代码/库无法处理的物理或几何特殊情况,或者您是一名计算机科学家,正在寻找一些新的算法挑战,否则我建议您首先尝试使用现有的软件包。

如果您的 MD 要求相对标准,即没有特殊的潜在功能或交互,那么我强烈建议使用最流行的开源软件包之一,例如NAMDGROMACS

如果您有任何特殊要求,可以查看 MD 库,例如MMTK(Python 中)、OpenMM(C 中)或mdcore(C 中,注意这是我自己的代码)。这些允许您完成 MD 模拟的大部分具体细节,还允许您直接访问和操作粒子数据。

除了 MMTK,所有这些代码/库都可以使用 GPU。如果您希望高效地运行长时间的模拟,那么 GPU 绝对是您的理想之选,尤其是就其 bang/buck 比而言。GPU 也可用于运行相对较大的模拟,因为目前大多数模型都具有数 GB 的板载内存。我们经常使用 NAMD 的STMV 设置作为基准,它包含超过一百万个粒子。此外,如果您有一台具有多个 GPU 的机器,您可以并行运行多个模拟,每个 GPU 上一个。

总之,我不建议您编写自己的代码,除非那是您研究的最终目标。根据您的需要,坚持使用现有的包和/或库,并记住 GPU 目前是 MD 模拟最有效的主力。

以下是您可以根据自己的需求评估的三种架构。考虑它们可能会帮助您更具体地制定您的需求。如果您像 Pedro 建议的那样,将您的工作基于现有软件包(我认为您应该)与该软件包的兼容性将有助于缩小替代方案的范围。

  1. 您可以考虑英特尔至强融核系列的产品,您可以将其插入 PC 机柜,价格约为 2700 美元。
  2. 使用基于 GPU 的程序
  3. 最初在云中的虚拟机上运行。易于扩展并了解您实际需要多少并行度。(某些软件包的许可不会顺利进行)

在最简单的情况下,您可以使用具有 2 个或更多内核的计算机来模拟 HPC 环境。您可以在这样的环境中运行 OpenMP 和/或 MPI。

通常,如果您在 HPC 上进行大型计算,您可能会使用多个计算节点。这意味着有两台“计算机”通过网络进行通信。与单个多线程计算节点相比,这施加了一些限制:

  • OpenMP 不再足以进行并行化,至少就其本身而言是这样。MPI 成为事实上的标准
  • 网络速度成为计算的巨大瓶颈

现在这并不意味着如果您只有一台 2 核 PC,就不能运行 HPC 代码。你可以。最简单的方法是使用 MPI 来并行化您的代码,而不是 OpenMP 或 pthread 等。但是,如果您可以访问两台或多台多核 PC,并且它们之间具有快速网络(至少千兆位),那么这将使您更好地了解可能发生的事情。

使用 MPI 进行多核处理就这么多。另一件要考虑的事情是 GPGPU。现在的集群通常为您提供 GPU,您可以将其用于线性代数,使用诸如 python 中的 gnumpy 之类的库或类似的库。如果您希望能够使用 GPGPU 进行试验,您可能想要:

  • 获得一台带有可以运行 CUDA 代码的 GPU 的计算机,即 nVidia GPU
  • 获得一台可以运行 OpenCL 的计算机。事实上,自去年以来,英特尔处理器(从 Ivy 桥开始)就包含了一个兼容 OpenCL 的 GPU。AMD 处理器还包含兼容 OpenCL 的 GPU。

所以,总结一下:

  • 最简单的 MPI 实验系统是双核 CPU
  • 要进行更实际的实验,您需要两台联网的多核 PC
  • 您也可以考虑获取符合 CUDA 或 OpenCL 的 GPU,或者确保您的 CPU 包含符合 OpenCL 的 GPU。