Optimization 什么';为台式机和超级计算机编写的代码有什么区别?
假设地说,如果我的科学工作是为了开发功能/模块/子例程(在桌面上),那么我需要知道什么才能将其纳入在超级计算机上运行的大规模模拟(可能模拟分子、流体、反应等) 我的印象是,它必须尽可能利用某些库(如BLAS、LAPLACK),修改算法(减少迭代),分析,并行化,考虑内存硬盘处理器的使用/访问。。。我知道一句格言,“想优化你的代码吗?不要这样做”,但如果有人对学习编写高效代码感兴趣,有哪些参考资料可用Optimization 什么';为台式机和超级计算机编写的代码有什么区别?,optimization,memory,performance,hpc,grid-computing,Optimization,Memory,Performance,Hpc,Grid Computing,假设地说,如果我的科学工作是为了开发功能/模块/子例程(在桌面上),那么我需要知道什么才能将其纳入在超级计算机上运行的大规模模拟(可能模拟分子、流体、反应等) 我的印象是,它必须尽可能利用某些库(如BLAS、LAPLACK),修改算法(减少迭代),分析,并行化,考虑内存硬盘处理器的使用/访问。。。我知道一句格言,“想优化你的代码吗?不要这样做”,但如果有人对学习编写高效代码感兴趣,有哪些参考资料可用 我认为这个问题与语言无关,但由于许多用于生物分子模拟、气候建模等的数字运算软件包都是用Fortr
我认为这个问题与语言无关,但由于许多用于生物分子模拟、气候建模等的数字运算软件包都是用Fortran的某个版本编写的,因此这种语言可能是我感兴趣的目标(我已经用Fortran 77进行了相当广泛的编程)。并行化将是关键 由于您引用的问题(如CFD、多重物理、传质)通常表示为大规模线性代数问题,因此您需要并行性良好的矩阵例程。MPI是这些类型问题的标准 物理学也会影响我们。例如,使用显式动力学和人工质量和阻尼矩阵可以有效地解决一些椭圆问题 三维多物理是指具有不同时间尺度的耦合微分方程。您将需要一个精细的网格来解析空间和时间上的细节,因此自由度的数量将迅速增加;时间步长将由问题的稳定性要求决定
如果有人知道如何将线性代数作为一个map-reduce问题来运行,他们会被打倒。在任何级别的机器上,分析都是必须的。在一般情况下,我发现扩展到越来越大的网格需要更好地理解网格软件和网格拓扑。从这个意义上讲,您所学到的关于为一台机器进行优化的所有知识仍然适用,但了解网格软件会让您获得更多的收益。Hadoop是最流行和最广泛的网格系统之一,因此了解调度器选项、接口(API和web接口)以及其他方面的使用将有所帮助。虽然您可能不会在给定的超级计算机上使用Hadoop,但它是学习分布式计算的一种不那么痛苦的方法。对于并行计算,您可以使用MPI和其他系统 此外,学习在一台机器上跨多个核心或处理器并行化代码,这是您可以在桌面机器上开始学习的内容 建议:
- 学习分析
- 学习使用优化的库(评测后:以便看到加速效果)
- 确保您非常了解算法和数据结构(*)