我有一个用F#编写的科学程序,我想将其并行化,并在一台具有多处理器(64位)的服务器上运行,将来还可以在云(Windows Azure?)上运行。该程序将在节点之间进行简单的一对一通信(无广播等)。
如果我使用WCF,它会和MPI一样快吗?有什么MPI是WCF没有的?有纯MPI写的.NET,这让我更困惑。我不知道是否使用WCF或MPI.NET或纯Mpi运行在WCF上。
PS:我猜TPL已经不再支持64位或更多的处理器了,对吧?
发布于 2011-09-07 19:23:00
很难给出一个具体的答案,因为这完全取决于你的应用程序的特定方面,它的当前架构(我想你已经有了一些应用程序)等等。
Task
。但是,您可以在将要分发的单个组件(例如代理)中使用它。关于MPI和WCF --我没有足够的经验来回答这个问题。但是,如果您使用基于代理的体系结构,那么尝试各种选项应该很容易。您还可以查看fracture和相关项目,这些项目旨在为F# (以及将来可能的分布式代理)实现高性能的套接字。
发布于 2011-09-07 19:24:01
如果你在一台服务器上做这件事,你可以只执行一个进程,然后并行执行代码。这样,您可以更容易和更快地共享内存,而不是通过MPI和WCF等消息。尽管通信的开销可能不会那么大,这取决于您的问题+解决方案。
而且,通过这种方式,对代码的更改会少得多,F#通常可以很轻松地转换为并行代码。转到MPI/WCF需要重写很大一部分代码。
谷歌搜索F# + parallel会给出很多有用的信息,你应该先读一读,就像这样一个好的开始:http://blogs.msdn.com/b/dsyme/archive/2010/01/09/async-and-parallel-design-patterns-in-f-parallelizing-cpu-and-i-o-computations.aspx
所以在一台服务器上,我将使用F#的并行特性,它的设计很容易并行。
稍后,当您想要使用cloud时,会将其转换为cleint-server。这是一个不同的问题,而不是PARALY化。我会分别对待和解决它们。
在MPI和WCF上。WCF被设计为一种RPC技术,即调用远程过程并获得应答。如果您想使用它进行具有独立进程的并行编程,则必须为此创建样板代码。(跟踪订阅的客户端等)
MPI就是为运行这种架构而设计的,并且更容易处理。(第一个进程的编号为0,是主进程,其他进程是从进程,编号递增,依此类推)
然而,我不认为MPI将是非常好的云,因为它涉及http,协议,安全等。不确定MPI在这些事情上工作得有多好,WCF确实会处理得很好。
WCF之所以存在,是因为MPI.NET是一种很多人都熟悉的并行化代码风格。因此,您可以使用编程概念,并在利用.NET进行通信的WCF平台上使用它们。
如果您需要通过网络交换大量数据,您可能还需要查看协议缓冲区(例如,请参阅protobuf-net )。这可以很容易地与WCF结合起来进行通信,并且非常易于序列化结构化数据,因此您可以高效地通过网络进行发送。
Gert-Jan
发布于 2011-09-07 20:12:07
WCF和MPI是不同的概念。WCF就像一个人A要求一个人B做一些事情,其中作为MPI的一个人A创建了他自己的克隆(所有克隆都有相同的能力/逻辑),然后这些克隆在要解决的问题的特定部分上工作,一旦完成,它们就结合了他们的结果。
因此,选择哪一个适合您的特定应用程序取决于您的应用程序试图解决的问题。它甚至可能是WCF和MPI的组合。您的客户端应用程序要求WCF执行某些任务,而WCF使用MPI创建“问题解决程序”的克隆,当克隆完成解决问题(并行)时,它们将聚合结果返回给WCF,然后将结果发送到客户端应用程序。
https://stackoverflow.com/questions/7331408
复制相似问题