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

hat*_*rix 4 memory optimization performance hpc grid-computing

假设,如果我的科学工作导致功能/模块/子程序(在桌面上)的开发,我需要知道将其纳入大型模拟中以在超级计算机上运行(可能模拟分子) ,液体,反应等)?

我的印象是,它可能与利用某些库(例如,BLAS,LAPLACK)尽可能,修改算法(减少迭代),分析,并行化,考虑内存 - 硬盘处理器使用/访问...我是意识到这句格言,"想要优化你的代码?不要这样做",但如果有人想学习编写有效的代码,那么可以提供哪些参考?

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

duf*_*ymo 5

并行化将是关键.

由于您引用的问题(例如CFD,多物理场,质量传递)通常表示为大规模线性代数问题,因此您需要能够很好地并行化的矩阵例程.MPI是这些类型问题的标准.

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

3D多物理场是指具有不同时间尺度的耦合微分方程.你需要一个精细的网格来解决空间和时间的细节,所以自由度的数量会迅速增加; 时间步长将受问题的稳定性要求的约束.

如果有人想出如何运行线性代数作为地图减少问题,那么它们就会被敲掉.


Ite*_*tor 5

分析是任何机械级别的必需品.在通常的使用中,我发现扩展到越来越大的网格需要更好地理解网格软件和网格的拓扑结构.从这个意义上讲,您所了解的有关优化一台机器的所有内容仍然适用,但了解网格软件可以获得额外的里程数.Hadoop是最受欢迎和最广泛使用的网格系统之一,因此了解调度程序选项,接口(API和Web界面)以及其他使用方面将有所帮助.虽然您可能不会将Hadoop用于给定的超级计算机,但它是了解分布式计算的一种不那么痛苦的方法.对于并行计算,您可以使用MPI和其他系统.

此外,学习在单个计算机上跨多个核心或处理器并行化代码,您可以开始在台式机上学习.

建议:

  1. 学习在一台机器上优化代码:
    • 学习剖析
    • 学习使用优化的库(在分析之后:这样你就可以看到加速)
    • 确保您非常了解算法和数据结构(*)
  2. 学习在多个核心机器上进行令人尴尬的并行编程.
    • 后来:考虑多线程编程.它更难,可能无法为您的问题付出代价.
  3. 了解用于分布式处理的基本网格软件
  4. 了解在网格上并行处理的工具
  5. 学习编程替代硬件,例如GPU,各种专业计算系统.

这与语言无关.我不得不在多种语言和多个HPC系统中学习相同的序列.在每个步骤中,采用更简单的方法来学习一些基础设施和工具; 例如,在多线程之前学习多核,在并行之前分发,这样你就可以看到什么适合硬件和问题,什么不适合.

根据本地计算实践,已建立的代码库和指导,可以对某些步骤进行重新排序.如果您有一个大型GPU或MPI库,那么,无论如何,要了解这一点,而不是将Hadoop强加给您的协作者.

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


Roo*_*ook 5

假设,如果我的科学工作导致功能/模块/子程序(在桌面上)的开发,我需要知道将其纳入大型模拟中以在超级计算机上运行(可能模拟分子) ,液体,反应等)?

首先,您需要了解问题.并非所有问题都可以并行解决(我正在使用" 并行"这个术语,因为它可以获得广泛的意义).那么,看看问题现在如何解决.可以通过其他方法更快地解决.它可以分为独立部分......依此类推......

Fortran是专门用于科学计算的语言,近年来,随着新语言功能的发展,在针对这个"市场"的功能方面也有一些非常有趣的发展.术语"共阵"可能是一个有趣的读物.

但现在,我建议先读成书像使用OpenMP的 - OpenMP是一个简单的模型,但书(内FORTRAN例子)很好地解释了基本面.消息解析接口(适用于朋友,MPI :)是一个较大的模型,也是经常使用的模型之一.您从OpenMP的下一步应该是朝这个方向发展.关于MPI编程的书籍并不罕见.

你也提到了库 - 是的,你提到的一些被广泛使用.其他人也可以.如果一个人不确切地知道性能问题在哪里,那么恕我直言,恕我直言的人就不会尝试重写库例程.

还有关于并行算法的书籍,您可能想要查看.

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

简而言之,它归结为理解问题,了解性能问题在哪里,用不同的方法再次解决整个问题,迭代几次,到那时你已经知道你正在做什么和你被困的地方.