Optimization 什么';为台式机和超级计算机编写的代码有什么区别?

Optimization 什么';为台式机和超级计算机编写的代码有什么区别?,optimization,memory,performance,hpc,grid-computing,Optimization,Memory,Performance,Hpc,Grid Computing,假设地说,如果我的科学工作是为了开发功能/模块/子例程(在桌面上),那么我需要知道什么才能将其纳入在超级计算机上运行的大规模模拟(可能模拟分子、流体、反应等) 我的印象是,它必须尽可能利用某些库(如BLAS、LAPLACK),修改算法(减少迭代),分析,并行化,考虑内存硬盘处理器的使用/访问。。。我知道一句格言,“想优化你的代码吗?不要这样做”,但如果有人对学习编写高效代码感兴趣,有哪些参考资料可用 我认为这个问题与语言无关,但由于许多用于生物分子模拟、气候建模等的数字运算软件包都是用Fortr

假设地说,如果我的科学工作是为了开发功能/模块/子例程(在桌面上),那么我需要知道什么才能将其纳入在超级计算机上运行的大规模模拟(可能模拟分子、流体、反应等)

我的印象是,它必须尽可能利用某些库(如BLAS、LAPLACK),修改算法(减少迭代),分析,并行化,考虑内存硬盘处理器的使用/访问。。。我知道一句格言,“想优化你的代码吗?不要这样做”,但如果有人对学习编写高效代码感兴趣,有哪些参考资料可用


我认为这个问题与语言无关,但由于许多用于生物分子模拟、气候建模等的数字运算软件包都是用Fortran的某个版本编写的,因此这种语言可能是我感兴趣的目标(我已经用Fortran 77进行了相当广泛的编程)。

并行化将是关键

由于您引用的问题(如CFD、多重物理、传质)通常表示为大规模线性代数问题,因此您需要并行性良好的矩阵例程。MPI是这些类型问题的标准

物理学也会影响我们。例如,使用显式动力学和人工质量和阻尼矩阵可以有效地解决一些椭圆问题

三维多物理是指具有不同时间尺度的耦合微分方程。您将需要一个精细的网格来解析空间和时间上的细节,因此自由度的数量将迅速增加;时间步长将由问题的稳定性要求决定


如果有人知道如何将线性代数作为一个map-reduce问题来运行,他们会被打倒。

在任何级别的机器上,分析都是必须的。在一般情况下,我发现扩展到越来越大的网格需要更好地理解网格软件和网格拓扑。从这个意义上讲,您所学到的关于为一台机器进行优化的所有知识仍然适用,但了解网格软件会让您获得更多的收益。Hadoop是最流行和最广泛的网格系统之一,因此了解调度器选项、接口(API和web接口)以及其他方面的使用将有所帮助。虽然您可能不会在给定的超级计算机上使用Hadoop,但它是学习分布式计算的一种不那么痛苦的方法。对于并行计算,您可以使用MPI和其他系统

此外,学习在一台机器上跨多个核心或处理器并行化代码,这是您可以在桌面机器上开始学习的内容

建议:

  • 学习在一台机器上优化代码:
    • 学习分析
    • 学习使用优化的库(评测后:以便看到加速效果)
    • 确保您非常了解算法和数据结构(*)
  • 学习在多核机器上进行令人尴尬的并行编程。
      以后:考虑多线程编程。这更难,而且可能不会为你的问题带来回报
  • 了解用于分布式处理的基本网格软件
  • 了解网格上用于并行处理的工具
  • 学习为替代硬件编程,例如GPU、各种专用计算系统
  • 这是语言不可知论。我必须在多种语言和多个HPC系统中学习相同的序列。在每一步中,采取更简单的方法学习一些基础设施和工具;e、 在多线程之前学习多核,在并行之前学习分布式,这样你就可以看到什么适合硬件和问题,什么不适合

    一些步骤可能会根据本地计算实践、已建立的代码库和导师重新排序。如果你有一个大型的GPU或MPI库,那么,无论如何,要学会这一点,而不是把Hadoop强加给你的合作者

    (*)非常了解算法的原因是,只要您的代码在网格上运行,其他人就会看到它。当它占用系统时,他们会想知道你在做什么。如果您正在运行一个多项式且应该是常量的进程,您可能会发现自己被嘲笑了。其他具有更多领域专业知识的人可能会帮助你找到NP难问题的良好近似值,但你应该知道这个概念是存在的。

    假设地说,如果我的科学工作是为了开发函数/模块/子程序(在桌面上),我需要知道什么才能将其整合到超级计算机(可能模拟分子、流体、反应等)上运行的大规模模拟中?

    首先,你需要了解这个问题。并不是所有的问题都可以并行解决(我正在尽可能广泛地使用术语并行)。那么,看看问题现在是如何解决的。用其他方法能更快地解决这个问题吗。它能被分成独立的部分吗。。。等等

    Fortran是专门用于科学计算的语言,近年来,随着新语言功能的发展,针对这一“市场”的功能也有了一些非常有趣的发展。术语“co数组”可能是一个有趣的读物

    但是现在,我建议先读一本书,比如OpenMP是一个更简单的模型,但是这本书(里面的fortran示例)很好地解释了基本原理。消息解析接口(对于朋友,MPI:)是一个更大的模型,也是常用的一种。OpenMP的下一步可能会朝这个方向发展。关于MPI编程的书籍并不少见

    你还提到了图书馆——是的,你提到的一些图书馆