MPI_win_锁的性能

MPI_win_锁的性能,mpi,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("

我面临着一个巨大的挑战,即如何证明以下使用“英特尔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_步骤关联的实际数据归秩0所有


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

如果秩0拥有win_global_步骤,并且秩0进入睡眠状态或在计算内核上运行,或者不进行MPI调用,则许多MPI实现将无法服务于其他请求

您可以尝试设置环境变量MPICH\u ASYNC\u PROGRESS。它引入了一些大的性能权衡,但在某些情况下,它可以让RMA操作在不显式调用MPI例程的情况下取得进展


尽管环境变量中有名称MPICH,但它可能适合您,因为Intel MPI基于MPICH实现

请贴一张。。。并正确描述你的设置。你在第一次mpi之前有障碍物吗?它们需要对齐,以确保它们同时启动,否则您可能会看到先前平衡问题的影响?