MPI_win_lock的性能

时间:2017-09-28 06:14:11

标签: mpi

我面临一个巨大的挑战,无法证明使用英特尔MPI库的代码的以下快照的性能

double time=0
time = time - MPI_Wtime();
MPI_Win_lock(MPI_LOCK_EXCLUSIVE,0,0,win_global_scheduling_step); 
MPI_Win_unlock(0,win_global_scheduling_step);
time= time + MPI_Wtime();
if(id==0)
   sleep(10);
printf("%d sync time %f\n", id, time); 

输出取决于0睡眠的等级。

如下所示

0同步时间0.000305

1个同步时间10.00045

2同步时间10.00015

如果我将等级0的睡眠时间改为5秒而不是10秒,那么其他等级的同步时间将与5秒相同

与窗口“win_global_step”相关联的实际数据归等级0

所有

关于代码的任何讨论或想法都会非常有用

1 个答案:

答案 0 :(得分:1)

如果排名0拥有win_global_step,并且排名0在计算内核上进入休眠或曲目,或者不进行MPI调用,则许多MPI实现将无法为其他请求提供服务。

您可以尝试设置环境变量(MPICH_ASYNC_PROGRESS)。它引入了一些重要的性能权衡,但在某些情况下,它可以让RMA操作在没有显式调用MPI例程的情况下取得进展。

尽管有名字" MPICH"在环境变量中,它可能适用于您,因为英特尔MPI基于MPICH实现。