什么控制MPI_Barrier执行时间

时间:2015-05-04 20:55:49

标签: mpi openmpi mpich

此代码:

#include <mpi.h>

int main(int argc, char* argv[])
{
    MPI_Init(&argc, &argv);

    for (unsigned int iter = 0 ; iter < 1000 ; iter++)
        MPI_Barrier(MPI_COMM_WORLD);

    MPI_Finalize();

    return 0;
}

MPICH 3.1.4一起运行很长。以下是不同MPI实现的挂钟(以秒为单位)。

在具有2个CPU核心的4个处理器的笔记本电脑上:

| MPI size | MPICH 1.4.1p1 | openmpi 1.8.4 | MPICH 3.1.4 |
|----------|---------------|---------------|-------------|
|  2       | 0.01          | 0.39          | 0.01        |
|  4       | 0.02          | 0.39          | 0.01        |
|  8       | 0.14          | 0.45          | 27.28       |
| 16       | 0.34          | 0.53          | 71.56       |

在具有8个4 cpu核心处理器的桌面上:

| MPI size | MPICH 1.4.1p1 | openmpi 1.8.4 | MPICH 3.1.4 |
|----------|---------------|---------------|-------------|
|  2       | 0.00          | 0.41          | 0.00        |
|  4       | 0.01          | 0.41          | 0.01        |
|  8       | 0.07          | 0.45          | 2.57        |
| 16       | 0.36          | 0.54          | 61.76       |

是什么解释了这种差异,以及如何控制它?

1 个答案:

答案 0 :(得分:1)

您正在使用MPI size&gt;可用的处理器数量。由于MPI程序的产生方式使得每个进程都由单个处理器处理,这意味着,例如当您在8核计算机上运行MPI size == 16时,每个处理器将负责两个进程;这不会使程序更快,事实上,如你所见,它将使它变慢。解决这个问题的方法是获得具有更多可用处理器的计算机,或者确保使用MPI size&lt; =可用处理器数运行代码。