在我们公司,我们使用自己用.NET开发的软件来运行复杂的模拟。这些模拟非常适合并行计算,我们目前大量使用.NET原生的各种多线程功能。即便如此,模拟通常需要几个小时或几天的时间。
我们想要探索在我们的高性能(24核)工作站的本地网络上分布计算的潜力,以获得更多的CPU能力。然而,我们在这方面没有经验。
在谷歌上搜索会显示一些基于MPI的选项,如Pure MPI,MPI.NET,以及一些商业软件,如Frontier。
对于非常适合.NET环境并且相对容易设置的解决方案,我们应该考虑哪种解决方案?
谢谢!
发布于 2014-08-29 00:39:36
多线程!=网格计算,所以无论最终选择什么,您都需要重写应用程序的某些部分。
我不知道你的网络基础设施,但在我看来,就像你想使用普通的桌面工作站来运行分发代码一样。我不会用MPI来解决这个问题。MPI是为网络支持高带宽和低延迟的集群和超级计算机而开发的。这些都不是传统办公网络的特性(除非我理解错了)。
您必须处理的下一件事是,如果在计算机上执行计算,则用户不应该关闭计算机。没有网格计算平台(包括MPI)处理这类问题,因为它通常运行在故障很少的服务器硬件上,并且全天候运行。
我不认为有一个简单而廉价的解决方案。您可以在每台计算机上运行一个服务,该服务可以使用预定义的参数执行DLL中的代码并发送响应。这些程序集可以从某些windowsshare下载。但你想要像这样分布的真正巨大的工作空间。如果应用程序只运行一分钟或更短时间,您几乎不会得到任何改进。
最后,您还需要一个服务来查找那些在线或不在线的服务,某种内存数据库中的服务,其中每个服务都可以写入IP地址,并且它是在线的,这样客户端就可以知道他们可以将工作分发给谁。这可以使用RavenDB (正如你所说的你正在使用.Net),Redis或一个实际上是为解决这类问题而编写的应用程序,Zookeeper。
https://stackoverflow.com/questions/25551937
复制相似问题