传输大数据时无法运行MPI

传输大数据时无法运行MPI,mpi,openmpi,Mpi,Openmpi,我使用MPI_Isend将字符数组传输到从属节点。当数组的大小很小时,它就工作了,但是当我放大数组的大小时,它就挂在那里了 在主节点上运行的代码(级别0): 在从属节点(排名1)上运行的代码: 您可以在MPI\u Isend中看到count参数是360358。对于MPI,它似乎太大了。当我设置参数1024时,它运行良好 事实上,这个问题已经困扰了我好几天了,我知道通过MPI传输的数据大小是有限制的。但据我所知,MPI_Send用于发送短消息,MPI_Isend可以发送更大的消息。所以我使用了MP

我使用
MPI_Isend
将字符数组传输到从属节点。当数组的大小很小时,它就工作了,但是当我放大数组的大小时,它就挂在那里了

在主节点上运行的代码(级别0):

在从属节点(排名1)上运行的代码:

您可以在
MPI\u Isend
中看到count参数是
360358
。对于
MPI
,它似乎太大了。当我设置参数
1024
时,它运行良好

事实上,这个问题已经困扰了我好几天了,我知道通过
MPI
传输的数据大小是有限制的。但据我所知,
MPI_Send
用于发送短消息,
MPI_Isend
可以发送更大的消息。所以我使用了
MPI\u Isend

秩0中的网络配置为:

  [12t2007@comp01-mpi.gpu01.cis.k.hosei.ac.jp ~]$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:1B:21:D9:79:A5  
          inet addr:192.168.0.101  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:393267 errors:0 dropped:0 overruns:0 frame:0
          TX packets:396421 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:35556328 (33.9 MiB)  TX bytes:79580008 (75.8 MiB)

eth0.2002 Link encap:Ethernet  HWaddr 00:1B:21:D9:79:A5  
          inet addr:10.111.2.36  Bcast:10.111.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:133577 errors:0 dropped:0 overruns:0 frame:0
          TX packets:127677 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:14182652 (13.5 MiB)  TX bytes:17504189 (16.6 MiB)

eth1      Link encap:Ethernet  HWaddr 00:1B:21:D9:79:A4  
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:206981 errors:0 dropped:0 overruns:0 frame:0
          TX packets:303185 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:168952610 (161.1 MiB)  TX bytes:271792020 (259.2 MiB)

eth2      Link encap:Ethernet  HWaddr 00:25:90:91:6B:56  
          inet addr:10.111.1.36  Bcast:10.111.1.255  Mask:255.255.254.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26459977 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15700862 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:12533940345 (11.6 GiB)  TX bytes:2078001873 (1.9 GiB)
          Memory:fb120000-fb140000 

eth3      Link encap:Ethernet  HWaddr 00:25:90:91:6B:57  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Memory:fb100000-fb120000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1894012 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1894012 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:154962344 (147.7 MiB)  TX bytes:154962344 (147.7 MiB)
排名1的网络配置为:

[12t2007@comp02-mpi.gpu01.cis.k.hosei.ac.jp ~]$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:1B:21:D9:79:5F  
          inet addr:192.168.0.102  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:328449 errors:0 dropped:0 overruns:0 frame:0
          TX packets:278631 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:47679329 (45.4 MiB)  TX bytes:39326294 (37.5 MiB)

eth0.2002 Link encap:Ethernet  HWaddr 00:1B:21:D9:79:5F  
          inet addr:10.111.2.37  Bcast:10.111.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:94126 errors:0 dropped:0 overruns:0 frame:0
          TX packets:53782 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:8313498 (7.9 MiB)  TX bytes:6929260 (6.6 MiB)

eth1      Link encap:Ethernet  HWaddr 00:1B:21:D9:79:5E  
          inet addr:192.168.1.102  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:121527 errors:0 dropped:0 overruns:0 frame:0
          TX packets:41865 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:158117588 (150.7 MiB)  TX bytes:5084830 (4.8 MiB)

eth2      Link encap:Ethernet  HWaddr 00:25:90:91:6B:50  
          inet addr:10.111.1.37  Bcast:10.111.1.255  Mask:255.255.254.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26337628 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15500750 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:12526923258 (11.6 GiB)  TX bytes:2032767897 (1.8 GiB)
          Memory:fb120000-fb140000 

eth3      Link encap:Ethernet  HWaddr 00:25:90:91:6B:51  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Memory:fb100000-fb120000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1895944 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1895944 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:154969511 (147.7 MiB)  TX bytes:154969511 (147.7 MiB)

我认为,在从rank=0发送消息时(在函数
MPI\u Isend
中),必须使用
text\u length
而不是
360358

我相信,您首先发送长度的原因是为了消除硬编码数字的需要,那么为什么在发送到其他节点时要输入元素的数量呢?这可能是接收端不一致的原因

MPI_Isend的签名为:

int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)

其中,
count
是发送缓冲区中的元素数。如果
计数
大于数组长度,则可能会导致分段错误;如果
计数
小于数组长度,则可能会导致发送较少的元素。

在打开MPI的情况下使用TCP/IP的特性如中所述。我将尝试在这里给出一个执行摘要

OpenMPI在使用网络接口进行数据交换时使用贪婪的方法。特别是,TCP/IP BTL(字节传输层)和OOB(带外)组件
TCP
将尝试使用所有配置的具有匹配地址族的网络接口。在您的情况下,每个节点都有许多与IPv4地址系列中的地址相关的接口:

comp01-mpi                     comp02-mpi
----------------------------------------------------------
eth0       192.168.0.101/24    eth0       192.168.0.102/24
eth0.2002  10.111.2.36/24      eth0.2002  10.111.2.37/24
eth1       192.168.1.101/24    eth1       192.168.1.102/24
eth2       10.111.1.36/23      eth2       10.111.1.37/23
lo         127.0.0.1/8         lo         127.0.0.1/8
Open MPI假定
comp02 MPI
上的每个接口都可以从
comp01 MPI
上的任何接口访问,反之亦然。环回接口
lo
从来都不是这种情况,因此默认情况下,Open MPI排除
lo
。然后,当必须传输信息时,网络套接字会延迟打开(如按需打开)

在您的情况下,当传输消息时,Open MPI会将它们切碎成碎片,然后尝试通过不同的连接发送不同的段,以最大化带宽。默认情况下,片段大小为128 KiB,仅包含32768个
int
元素,而且第一个(渴望的)片段大小为64 KiB,包含的元素数量是原来的两倍。假设
comp01 mpi
上的每个接口都可以从
comp02 mpi
上的每个接口访问(反之亦然)可能是错误的,例如,如果其中一些接口连接到单独的隔离网络。在这种情况下,库将被困在尝试建立一个永远不会发生的连接中,程序将挂起。对于超过16384个
int
元素的消息,通常会发生这种情况

为了防止上述情况,可以限制开放MPI用于TCP/IP通信的接口或网络。
btl\u tcp\u if\u include
MCA参数可用于向库提供其应使用的接口列表。
btl\u tcp\u if\u exclude
可用于指示库排除哪些接口。默认情况下,该接口设置为
lo
,如果希望排除特定接口,则应明确将
lo
添加到列表中

以上所有内容也适用于用于传输特殊信息的带外通信。选择或取消选择OOB接口的参数为
OOB\u tcp\u(如果包含)
OOB\u tcp\u(如果排除)
。这些参数通常与BTL参数一起设置。因此,您应该尝试将这些设置为实际工作的组合。首先将选择范围缩小到单个界面:

 mpiexec --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 ...
如果它不适用于
eth0
,请尝试其他接口


虚拟接口eth0.2002的出现将进一步混淆OpenMPI 1.6.2和更新版本。

从您的问题来看,代码实际上在做什么还不清楚。你能给出一个最低限度的工作示例吗?()您没有理由不能对大消息或小消息使用
MPI_Send
MPI_Isend
。通常问题是发送和接收呼叫不正确匹配。尤其是在小消息而不是大消息的情况下,情况更是如此。无论是否发布了匹配的接收,短消息都会通过所谓的急切协议直接飞到目的地。较大的消息需要接收者和发送者之间进行一些交互,并且在双方匹配之前无法通过。也可能是您的网络配置错误(如果秩0和秩1位于物理上不同的计算机上,并且在这两个计算机之间使用TCP/IP)。@WesleyBland我只想将一个字符串从秩0转换为秩1,例如,我想转换“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,如果失败了。谢谢。@HristoIliev是的,实际上秩0和秩1位于物理上不同的机器上,并且似乎使用了TCP/IP。据我所知,当MPI转换大数据时,它将使用Rendezvous协议,但我的群集并不是很大,它包含一个分布式文件系统,只是一个NFS,所以我认为群集不支持大数据传输(Opps,实际上text_length和count的值都是360358
comp01-mpi                     comp02-mpi
----------------------------------------------------------
eth0       192.168.0.101/24    eth0       192.168.0.102/24
eth0.2002  10.111.2.36/24      eth0.2002  10.111.2.37/24
eth1       192.168.1.101/24    eth1       192.168.1.102/24
eth2       10.111.1.36/23      eth2       10.111.1.37/23
lo         127.0.0.1/8         lo         127.0.0.1/8
 mpiexec --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 ...