我有一个数字处理C/C++应用程序.它基本上是不同数据集的主循环.我们可以访问具有openmp和mpi的100节点集群.我想加速应用程序,但我是mpi和openmp的绝对新手.我只是想知道即使性能不是最好的,最容易学习和调试的是什么.
我也想知道什么是最适合我的主循环应用程序.
谢谢
如果您的程序只是一个大循环,使用 OpenMP 可以像编写一样简单:
#pragma omp parallel for
Run Code Online (Sandbox Code Playgroud)
OpenMP 仅对共享内存编程有用,除非您的集群正在运行类似kerrighed的东西,否则使用 OpenMP 的并行版本一次最多只能在一个节点上运行。
MPI 基于消息传递,入门稍微复杂一些。优点是您的程序可以同时在多个节点上运行,并在需要时在它们之间传递消息。
鉴于您所说的“针对不同的数据集”,听起来您的问题实际上可能属于“令人尴尬的并行”类别,只要您有超过 100 个数据集,您只需设置调度程序来为每个节点运行一个数据集直到它们全部完成,无需修改代码,并且比仅使用单个节点速度提高了近 100 倍。
例如,如果您的集群使用Condor作为调度程序,那么您可以将每个数据项1个作业提交到“vanilla”宇宙,仅改变作业描述的“Arguments =”行。(对于Condor还有其他方法可以做到这一点,这可能更明智,并且对于扭矩、sge等也有类似的方法。)
| 归档时间: |
|
| 查看次数: |
1413 次 |
| 最近记录: |