MPI_Isend卡住了一段时间。(openmpi mutiple-thread)

时间:2014-04-05 04:26:30

标签: mpi openmpi

(首先,我要感谢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。检查它的重新值。

我不知道我的计划是怎么回事。我想:

  1. openMPI中存在错误

  2. 配置错误。

  3. 我的程序中有错误。 (但是,如果我的程序中存在错误,为什么在使用2个内核的1台计算机上运行MPI时可以正常,但在2台使用1个内核的计算机上运行时会失败)。

  4. 有人能给我任何提示吗?

    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)
    

0 个答案:

没有答案