这段代码:
#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 |
在具有4个cpu核心的8个处理器的台式机上:
| 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 |
如何解释这种差异,以及如何控制它?
发布于 2015-05-04 22:15:08
您正在使用MPI size
> number of processors。由于MPI程序的产生方式使得每个进程都由一个处理器处理,这意味着,例如,当您在8核计算机上运行MPI size == 16
时,每个处理器将负责两个进程;这不会使程序更快,实际上,正如您所看到的那样,会使程序变慢。解决方法是使用具有更多可用处理器的计算机,或者确保使用MPI size
<=数量的可用处理器来运行代码。
https://stackoverflow.com/questions/30039802
复制相似问题