我工作的一个松散耦合的群集的某些数据的处理。该网络代码和代码处理,但我们正在评估不同的方法在我们的方法。现在,我们应该,我们I/O限性问题,我们在努力减少瓶颈。显然,更快的开关状宽将是可怕的,但我们负担不起的奢侈的只是扔掉我们所拥有的,并获得新设备。

我提出的问题是这样的。所有传统和严重HPC应用程序完成关于集群通常是实现消息传递和发送座。什么是性能优点这个吗?我们应该看到一个加速如果我们交换从插座?

有帮助吗?

解决方案

MPI MIGHT使用套接字。但是也有与使用直接分布式共享内存的SAN(系统区域网络)一起使用的MPI实现。那当然,如果你有硬件。所以MPI允许您将来使用这些资源。在这种情况下,您可以获得巨大的性能提升(根据我在大学期间使用群集的经验,您可以达到几个数量级的增益)。因此,如果您正在编写可以移植到更高端集群的代码,那么使用MPI是一个非常好的主意。

即使丢弃性能问题,使用MPI也可以节省大量时间,您可以使用它来提高系统其他部分的性能,或者只是保存您的理智。

其他提示

我会推荐使用MPI,而不是自己的,除非你很擅长这种事情。具有写了一些分布式计算式应用程序使用我自己的协议,我总是发现自己再生(不再生)的特点内发现MPI。

绩效明智的,我不会期望MPI给你任何有形网络的加速-它使用的插座就像你一样。MPI然而将提供更多功能,将需要为管理许多节点,即同步之间的节点。

在这种情况下,即使在高性能群集上,性能也不是唯一的考虑因素。 MPI提供标准API,并且是“便携式的”。在不同版本的MPI之间切换应用程序是相对微不足道的。

大多数MPI实现使用套接字进行基于TCP的通信。与直接使用套接字的本地应用程序相比,任何给定的MPI实现都将更好地优化并提供更快的消息传递的可能性很大。

此外,如果您有机会在具有InfiniBand的群集上运行代码,MPI层将抽象出任何这些代码更改。这不是一个微不足道的优势 - 编写应用程序直接使用OFED(或另一个IB动词)实现是非常困难的。

大多数MPI应用程序都包含小型测试应用程序,可用于独立于应用程序验证网络设置的正确性。在调试应用程序时,这是一个主要优势。 MPI标准包括“pMPI”。接口,用于分析MPI调用。此界面还允许您轻松地将校验和或其他数据验证添加到所有消息传递例程。

MPI的好处是您可以进行集体沟通。做广播/减少O(log p)/ * p是你的处理器数量* /而不是O(p)是一个很大的优势。

我必须同意OldMan和freespace。除非您了解MPI的某些有用指标(性能,可维护性等)的具体和改进,否则为什么要重新发明轮子。 MPI代表了您正在尝试解决的问题的大量共享知识。

除了发送数据之外,还有许多问题需要解决。连接设置和维护都将成为您的责任。如果MPI是您需要的确切抽象(听起来像是),请使用它。

至少,使用MPI并稍后使用您自己的系统重构它是一个很好的方法,可以降低MPI的安装和依赖性。

我特别喜欢OldMan的观点,MPI为您提供了超越简单套接字通信的更多功能。您将获得一系列具有透明抽象的并行和分布式计算实现。

消息传递是一种范式而非技术。在最常见的安装中,MPI将使用套接字进行通信。您可以通过切换到MPI来加快速度,但只有在您没有优化套接字通信的情况下才能看到。

您的应用程序I / O如何绑定?它是将数据块传输到工作节点,还是因为计算过程中的通信而绑定?

如果答案是“因为沟通”,那么问题是你正在编写一个紧密耦合的应用程序,并尝试在为松散耦合的任务设计的集群上运行它。获得性能的唯一方法是获得更好的硬件(更快的交换机,infiniband等)...也许你可以借用别人的HPC?

如果答案是“数据块”,转移然后考虑为工作人员分配多个数据块(因此他们保持更长时间的忙碌)&在传输之前压缩数据块。这是一种可以帮助松散耦合的应用程序的策略。

我没有使用过MPI,但是我使用了很多套接字。高性能套接字有几点需要考虑。你在做很多小包或大包吗?如果您正在执行许多小数据包,请考虑关闭Nagle算法以获得更快的响应:

setsockopt(m_socket,IPPROTO_TCP,TCP_NODELAY,...);

此外,在尝试获取大量数据时,使用信号实际上会慢得多。很久以前我做了一个测试程序,读者会等待一个信号,并读取一个数据包 - 它会得到一个100包/秒的回合。然后我只是阻止读取,并获得10000次读/秒。

重点是看所有这些选项,并实际测试它们。不同的条件会使不同的技术更快/更慢。重要的是不仅要获得意见,而且要对它们进行测试。 Steve Maguire在“编写固体代码”中谈到了这一点。他使用了许多反直觉的例子,并测试它们以找出更好/更快的代码。

MPI使用下面的套接字,所以唯一的区别应该是代码与之接口的API。如果你直接使用套接字,你可以微调协议,但那就是它。你究竟在做什么数据?

MPI使用套接字,如果你知道自己在做什么,你可能会从套接字中获得更多带宽,因为你不需要发送尽可能多的元数据。

但你必须知道自己在做什么,而且可能更容易出错。基本上你用你自己的消息传递协议替换mpi。

对于大量,低开销的业务消息,您可能需要签出 使用多种产品 OAMQ 。据说开源变种 OpenAMQ 在摩根大通进行交易,所以它应该是可靠的,不是吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top