用于科学计算的消费类硬件?

计算科学 计算物理学 参考请求 显卡 硬件
2021-12-02 18:54:20

我对概率、统计和统计力学方面的问题感兴趣,而且我经常发现执行模拟以了解潜在现象很有用。示例计算包括 Monte Carlo、查找大型随机矩阵的特征值(重复,以了解各种分布特性)和旋转玻璃模型。

我在数学和理论计算机科学方面有中等水平,但对硬件或数值计算一无所知。如果这个问题有点漫不经心,我​​深表歉意;部分问题是我不知道可以访问哪些资源来了解更多信息。(请参阅下面的最后一点。)

我将使用消费类硬件构建一台新计算机,虽然它主要不会用于进行科学计算,但我也很好奇我可以做出哪些决定来赋予它在该领域的一些能力。对于严肃的工作,我可以租用远程服务器(或者使用我学校的),但对于爱好项目,在本地工作更方便。

以下问题基于我非常非常不完整的知识和研究;如果有任何问题,请纠正我。

  1. 对于我上面讨论的问题,投资于具有多核并支持 AVX 指令(例如 AVX512)的更好的 CPU 还是支持例如 CUDA 的专用离散 GPU 是否更有效(在金钱上)?我见过的 numpy 线性代数基准测试表明,GPU 路线对于最常见的操作来说是优越的(这里有一些例外情况)。但是如果是这样的话,AVX指令有什么用呢?

  2. 有人建议我看一下“工作站”GPU,而不是面向玩视频游戏的人销售的“消费级”GPU,理由是前者即使在相同的价位上也能提供更好的性能。这是正确的,如果是,为什么?如果我想训练和运行神经网络,这个问题的答案会改变吗?

  3. 有什么好的方法来估计足够的 RAM 是多少?有人向我建议,对于大维矩阵,即使是 16 GB 也可能成为良好 CPU/GPU 的瓶颈。

  4. 哪里是了解更多关于科学计算硬件方面的好地方?我曾考虑买一本计算机体系结构教科书,但如果那里有更短、更实用的材料,我很乐意阅读它们。

1个回答

您应该注意的一个问题是,NVIDIA 有一种市场细分策略,它向游戏和图形工作站市场(GeForce 和 Quadro)销售相对便宜的 GPU,向高性能计算销售不同的高价型号(Tesla)市场。

与销售用于高性能计算的型号相比,销售用于游戏和图形的 GPU 的双精度浮点性能有限。在许多模型上,双精度性能被限制为单精度性能的 1/32。

要回答您的具体问题:

  1. AVX 指令在没有能够进行浮点计算的强大 GPU 的系统中当然很有用。即使您确实有 GPU,对于非常小的计算而言,使用 AVX 矢量浮点单元可能比将数据发送到 GPU、计算并将结果复制回主存更快。

  2. NVIDIA 用于高性能计算的 Tesla GPU 比上面解释的双精度性能有限的面向游戏和图形的 GPU 贵得多。对于训练神经网络,双精度性能并不重要,因为单精度浮点通常用于训练神经网络。对于 PDE 的数值求解,通常使用双精度。

  3. 您需要考虑在主系统和 GPU 中需要多少内存。这在很大程度上取决于您的特定问题,但是按照今天的标准,主系统上 16 GB 的 RAM 非常小,您可能会发现它是有限的。GPU 上的 RAM 通常较小,这意味着您经常必须使用块算法并将数据移入/移出 GPU 以解决更大的问题。GPU 上的更多 RAM 非常有用,但通常不是绝对必要的。

  4. 我将推荐Bryant 和 O'Halleron 撰写的Computer Architecture: A Programmer's Perspective以讨论内存层次结构和优化程序性能。另一本书也讨论了这些问题(并涵盖了 OpenMP 和 MPI 编程)是Hager 和 Wellein 的《面向科学家和工程师的高性能计算简介》 。但是,这两本书都没有涉及 GPU 计算。

我对 GPU 编程的建议是从使用处理低级细节的语言和库开始,并让您专注于更高级别的问题。例如,MATLAB 可以利用 GPU,而无需您进行任何低级编程。在另一个层面上,MAGMA 库在 GPU 上处理 LAPACK 线性代数,只需对您的代码进行极少的更改。也可以使用 OpenACC 编写可以跨 CPU 和 GPU 透明运行的程序。所有这些方法使您不必在 CUDA 或 OpenCL 中为 GPU 编写自己的计算内核。