首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mvapich2和openmpi比较MPI线程死锁期间的CPU利用率

使用mvapich2和openmpi比较MPI线程死锁期间的CPU利用率
EN

Stack Overflow用户
提问于 2016-02-04 17:54:48
回答 1查看 154关注 0票数 2

我注意到当我有一个陷入僵局的MPI程序时,例如wait.c

代码语言:javascript
复制
#include <stdio.h>
#include <mpi.h>


int main(int argc, char * argv[])
{
    int taskID = -1; 
    int NTasks = -1; 
    int a = 11; 
    int b = 22; 
    MPI_Status Stat;

    /* MPI Initializations */
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &taskID);
    MPI_Comm_size(MPI_COMM_WORLD, &NTasks);

    if(taskID == 0)
        MPI_Send(&a, 1, MPI_INT, 1, 66, MPI_COMM_WORLD);
    else //if(taskID == 1)
        MPI_Recv(&b, 1, MPI_INT, 0, 66, MPI_COMM_WORLD, &Stat);

    printf("Task %i :    a: %i    b: %i\n", taskID, a, b); 

    MPI_Finalize();
    return 0;
}

当我用mspevich2-2.1库编译wait.c (它本身是使用gcc-4.9.2编译的)并运行它(例如,mpirun -np 4 ./a.out)时,我注意到(通过top),所有4个处理器都在以100%的速度运行。

当我用openmpi-1.6库编译wait.c (它本身是使用gcc-4.9.2编译的)并运行它(例如,mpirun -np 4 ./a.out)时,我注意到(通过top),两个处理器正在以100%的速度运行,2个处理器在0%的情况下运行。

据推测,0%的2人是完成沟通的人。

问:为什么openmpi和mvapich2在CPU使用上有差异?这是预期的行为吗?当CPU使用率为100%时,是否不断检查是否正在发送消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-04 19:19:33

这两种方法都在MPI_Recv()上实现了MPI_Recv(),以尽量减少延迟。这就解释了为什么排名2和3的MPI实现都是100%的。

现在,显然将0和1的进度排列为MPI_Finalize()调用,这是两个实现的不同之处: mvapich2繁忙--等待,而openmpi没有。

要回答你的问题:是的,他们是100%,同时检查是否收到了信息,这是预期的行为。

如果您不在InfiniBand上,您可以通过将一个strace附加到其中一个进程来观察这一点:您应该会在那里看到一些轮询()调用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35208163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档