(首先,我要感谢Hristo Iliev。他在我目前的MPI项目中为我提供了很多帮助。)
问题是MPI_Irecv有时会卡住(卡住概率接近1/2)。我的节目超过20,000行。所以我不能在这里列出。
它所停留的代码是:
MPI id:0
MPI_Ssend(id=1,tag=1);
MPI_Ssend(id=1,tag=x);
MPI_Recv(id=1,tag=x+1);
MPI id:1
MPI_Recv(id=0,tag=1);
pthread_create(fun_A());
void fun_A()
{
MPI_Recv(id=0,tag=x);
MPI_Ssend(id=0,tag=x+1);
}
为了调试它,我在每个MPI函数后添加了一些标志。有标志包括printf并将一些标志写入文件。
我的计划的几个要点如下。
1.(重要)当我使用2个核心在1台机器上运行我的mpi程序时,没关系。但是当我在2台机器(每台机器使用1个核心)中运行它时,有时,在MPI id:1中,返回MPI_Ssend(id = 0,tag = x + 1)(和MPI_wait())但是MPI id:0卡住了在MPI_Recv(id = 1,tag = x + 1)。
2.(重要)当MPI_Recv(id = 1,tag = x + 1);(MPI id:0)卡住时,MPI_id:1中的前2个MPI_functions应该已经完成。但有时候根本没有MPI_id的标志:1,有时候MPI id的所有3个MPI函数都有标志:1。
3.(重要)当它停留在MPI_Recv(id = 1,tag = x + 1)时没有发送者线程;在MPI id:0。
4.vfork在我的程序中用于分叉其他作业。 MPI功能不用于这些作业。这些作业使用消息队列与MPI_comm_world中的线程进行通信。
5.我在配置时启用了多线程支持。 MPI_Init_thread(mutiple_thread支持)用于Init MPI。检查它的重新值。
我不知道我的计划是怎么回事。我想:
openMPI中存在错误
配置错误。
我的程序中有错误。 (但是,如果我的程序中存在错误,为什么在使用2个内核的1台计算机上运行MPI时可以正常,但在2台使用1个内核的计算机上运行时会失败)。
有人能给我任何提示吗?
ifconfig -a的输出是: 一个节点ip是10.1.1.112。另一个是10.1.1.113。除了ip-addr之外,ifconfig的输出完全相同。
eth0 Link encap:Ethernet HWaddr 00:21:5E:2F:62:8A
inet addr:10.1.1.113 Bcast:10.1.1.255 Mask:255.255.255.0
inet6 addr: 2001:da8:203:eb1:221:5eff:fe2f:628a/64 Scope:Global
inet6 addr: fe80::221:5eff:fe2f:628a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3402577 errors:0 dropped:0 overruns:0 frame:0
TX packets:208064 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:291778729 (278.2 MiB) TX bytes:25343147 (24.1 MiB)
eth1 Link encap:Ethernet HWaddr 00:21:5E:2F:62:8C
UP 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)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1770 errors:0 dropped:0 overruns:0 frame:0
TX packets:1770 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:798595 (779.8 KiB) TX bytes:798595 (779.8 KiB)