我需要用 C++ 编写一个科学应用程序来进行大量计算并使用大量内存。我有部分工作,但由于对资源的高要求,我正在考虑开始转向 OpenMPI .
在这样做之前,我有一个简单的好奇心:如果我正确理解了 OpenMPI 的原理,那么开发人员的任务就是根据当时可用的节点将作业拆分到不同的节点上调用 SEND 和 RECEIVE。
你知道它是否确实存在一些库或操作系统或任何具有此功能的东西让我的代码保持原样吗?基本上是连接所有计算机并让它们共享内存和 CPU 的东西?
我有点困惑,因为有关该主题的资料太多了。 我应该看看云计算吗?还是分布式共享内存?
最佳答案
目前没有任何 C++ 库或实用程序可以让您在机器集群中自动并行化您的代码。假设有很多方法可以通过其他方法实现分布式计算,您确实希望优化您的应用程序以使用消息传递或分布式共享内存。
你最好的选择是:
- 将您的实现转化为基于任务的解决方案。有很多方法可以做到这一点,但这绝对是手工完成的。
- 清楚地确定您可以在哪里分解任务,以及这些任务之间的基本沟通方式。
- 使用基于 OpenMPI/Mpich 构建的更高级别的库 -- 想到 Boost.MPI。
实现并行分布式解决方案是一回事,使其高效工作又是另一回事。阅读不同的拓扑结构和不同的并行计算模式,与从头开始相比,实现解决方案的痛苦要小一些。
关于用于集群和 HPC 的 C++ 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548683/