假设地说,如果我的科学工作是在开发功能/模块/子程序(在台式机上),我需要知道什么才能将其整合到在超级计算机(可能模拟分子)上运行的大规模模拟中、流体、反应等)?
首先,您需要了解问题所在。并非所有问题都可以并行解决(我使用并行一词的含义尽可能广泛)。那么,看看现在问题是如何解决的。能不能用其他方法更快解决。能不能分割成独立的部分……等等……
Fortran 是专门用于科学计算的语言,近年来,随着新语言功能的发展,针对这个“市场”的功能也有了一些非常有趣的发展。术语“co-arrays”可能是一个有趣的读物。
但就目前而言,我建议先阅读《使用 OpenMP 》之类的书——OpenMP 是一个更简单的模型,但该书(里面的 fortran 示例)很好地解释了基础知识。消息解析接口(给朋友,MPI :) 是一个较大的模型,也是常用的模型之一。OpenMP 的下一步可能应该朝这个方向发展。关于 MPI 编程的书籍并不罕见。
你还提到了图书馆——是的,你提到的一些图书馆被广泛使用。其他的也可以。恕我直言,一个不确切知道性能问题出在哪里的人永远不要尝试承担尝试重写库例程的任务。
还有一些关于并行算法的书籍,你可能想看看。
我认为这个问题与语言无关,但由于许多用于生物分子模拟、气候建模等的数字运算包是用 Fortran 的某个版本编写的,所以这种语言可能是我感兴趣的目标(而且我在 Fortran 中进行了相当广泛的编程77)。
简而言之,它归结为理解问题,了解性能问题在哪里,用不同的方法重新解决整个问题,迭代几次,到那时你已经知道你在做什么,并且你被困在哪里。