我有一个数字处理 C/C++ 应用程序。它基本上是不同数据集的主循环。我们可以访问具有 openmp 和 mpi 的 100 个节点集群。我想加快应用程序的速度,但我对 mpi 和 openmp 来说都是绝对的新手。我只是想知道即使性能不是最好的,最容易学习和调试的是什么。
我还想知道什么最适合我的主循环应用程序。
Thanks
如果您的程序只是一个大循环,使用 OpenMP 可以像编写一样简单:
#pragma omp parallel for
OpenMP 仅对共享内存编程有用,除非您的集群正在运行类似的东西克里希德 http://www.kerrighed.org/意味着使用 OpenMP 的并行版本一次最多只能在一个节点上运行。
MPI 基于消息传递,入门稍微复杂一些。优点是您的程序可以同时在多个节点上运行,并在需要时在它们之间传递消息。
鉴于您所说的“针对不同的数据集”,听起来您的问题实际上可能属于“令人尴尬的并行”类别,只要您有超过 100 个数据集,您就可以设置调度程序来为每个节点运行一个数据集直到它们全部完成,无需修改代码,并且比仅使用单个节点速度提高了近 100 倍。
例如,如果您的集群使用Condor作为调度程序,那么您可以将每个数据项1个作业提交到“vanilla”宇宙,仅改变作业描述的“Arguments =”行。 (对于Condor还有其他方法可以做到这一点,这可能更明智,并且对于扭矩、sge等也有类似的方法。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)