使用 MPI.NET 和 Mono 框架在超级计算机的 linux 节点上执行分布式计算
Posted
技术标签:
【中文标题】使用 MPI.NET 和 Mono 框架在超级计算机的 linux 节点上执行分布式计算【英文标题】:Using MPI.NET and Mono framework to execute distributed computing on linux nodes of a supercomputer 【发布时间】:2014-04-04 17:39:21 【问题描述】:我想知道是否可以使用 MPI.NET + Mono 框架在全部基于 Linux 的超级计算机节点上运行分布式计算?
我知道 Mono 运行时在集群上可用,并且带有标准库的单声道编译程序运行良好。但是 MPI.NET 呢?
还有一个问题,我对 MPI.NET 和 MPIch2 等之间的区别有点困惑。如果 MPIch2 可用,MPI.NET 是标准 MPIch2 的包装器,并且可以在 Linux 上工作吗?或者它是 MPIch2 的替代品并且需要安装 MPI.NET 客户端?
如果您对此有任何经验,我非常感谢您的意见。
谢谢。
【问题讨论】:
【参考方案1】:在我开始之前,当您有多个问题时,您应该分别发布它们。我不知道你问题第一部分的答案,但我可以帮助你解决第二部分。这意味着,如果您喜欢我的回答和另一个,则不能同时接受。无论如何,进入你问题的后半部分。
MPI.NET 是一个 MPI 实现,似乎运行在 Boost MPI 之上。这意味着它可能不会自己实现低级通信调用,而是具有 .NET 绑定,允许您从任何这些语言调用 Boost MPI。如果两者都没有安装,它将无法正常工作。
MPICH(该项目不再称为 MPICH2)是 MPI 标准的单独实现,它确实提供了在堆栈的所有级别上运行在大多数系统上所需的一切。它提供了所有标准所需的语言绑定(C、FORTRAN 和已弃用的 C++)。这两个项目是分开的,据我所知,您不能在 MPICH 之上使用 MPI.NET。
【讨论】:
嗯,我实际上并不认为你已经回答了我的任何问题。你只是列出了 MPI.NET 和 MPICH 的非常笼统的定义,我认为你对 MPICH 的看法是值得商榷的,因此看起来对于以前在 Linux 系统上使用 mono 做过此操作的人。话虽如此,经过进一步调查,我在 MPI.NET 网站上发现了这一点,并引用:“支持通过 Mono 使用 Open MPI、LAM/MPI 或 MPICH2 作为本机 MPI 在类 Unix 平台上进行编译。”这就是令人困惑的地方。但是感谢您的尝试。【参考方案2】:我终于从 MPI.NET 网站上找到了关于这个问题的一些问题的答案。我引用:
MPI.NET 是否可以与其他 MPI 实现一起使用? 这取决于平台。尽管 MPI 是一种标准,但在 Windows 上,MPI.NET 对一些有关 MS-MPI 中使用的特定数据类型的信息进行编码,这些信息将 MPI.NET 直接与 Microsoft 的 MPI 联系起来。让 MPI.NET 与其他 MPI 实现一起工作当然是可能的,但我们目前不打算这样做。然而,在 Unix 上,MPI.NET 会自行适应在配置时检测到的本机 MPI,并且可以(至少)与 Open MPI、LAM/MPI 和 MPICH2 一起使用
MPI.NET 可以与 Mono 一起使用吗? 是的!从 0.6.0 版本开始,MPI.NET 在 Mono 下使用各种不同的本地 MPI,包括 Open MPI、LAM/MPI 和 MPICH2。但是请注意,Mono 中的运行时代码生成问题会导致 MPI.NET 在优化方面稍微保守一些。由于这种更保守的方法以及 Mono JIT 没有像 Microsoft JIT 那样得到那么多调整的事实,我们预计 Mono 的性能不会那么好。
更多信息请访问:MPI FAQ
另外,这里有一个关于如何在 Ubuntu 下编译 MPI.NET 的链接:Compiling MPI.NET under Ubuntu Oneiric
【讨论】:
以上是关于使用 MPI.NET 和 Mono 框架在超级计算机的 linux 节点上执行分布式计算的主要内容,如果未能解决你的问题,请参考以下文章
C#编写的winform程序使用mono脱离.net框架,调用open方法访问access使程序界面消失
使用多个主机时 MPI.NET Send/ImmediateProbe 不起作用