.net 4.0任务并行库是否替换MPI.NET以进行高性能计算?
这里发现的MPI.NET http://www.osl.iu.edu/research/mpi.net/svn/是一个高性能,易于使用的Microsoft .NET环境的消息传递接口(MPI)实现。 MPI是编写在分布式内存系统(如计算集群)上运行的并行程序的事实标准。
.NET 4 TPL说:“任务并行库(TPL)是.NET Framework版本4中System.Threading和System.Threading.Tasks名称空间中的一组公共类型和API .TPL的目的通过简化向应用程序添加并行性和并发性的过程,使开发人员更高效.TPL动态地扩展并发度,以最有效地使用所有可用的处理器。此外,TPL处理工作的分区,调度ThreadPool上的线程,取消支持,状态管理和其他低级细节。通过使用TPL,您可以最大限度地提高代码的性能,同时专注于您的程序旨在完成的工作。“
我的目标是构建一个可以在Windows HPC 2008上运行的应用程序 ......哪条路可以去?
答案 0 :(得分:7)
据我所知,TPL不支持分布式计算,而MPI.NET则支持分布式计算。
答案 1 :(得分:2)
消息传递是解决并行编程思想的另一种方式。 Axum和Erlang都使用消息传递。它们并不是直接可比的,因为它们都是针对两个特定的实现。
我在消息传递中看到的好处是,任何网络/进程边界都可以透明,并且传递消息本身不依赖于底层线程(所有消息和actor都可以在一个线程上)。
从我有限的理解来看,TPL是建立在/替换/大大改进.NET中当前的线程模型,即你有你控制的实际线程,你通过传递参数或使用共享状态进行通信。
如果从头开始,并且设计适合分成很小的代码段,那么我建议使用MPI.NET。如果工作类型是CPU密集型(如数学工作),我会建议TPL路由。
编辑:长时间编辑,这个答案已经过时了! MPI.NET直接适用于HPC,因为它使HPC节点的通信边界透明且可配置。 MPI.NET向端点发送消息 - 这些点被定义为配置文件中的IP /端口地址。代码不知道端点穿过网络边界。
如果您选择在HPC上使用TPL(不确定是否支持),我认为您的代码必须知道节点以及如何将处理从一个节点传输到另一个节点,因此您无法获益。