我正在研究MPI的界面(我认为是MPI-2)并且有一个我无法做到的功能,即MPI_Win_allocate
。
界面为https://www.mpich.org/static/docs/v3.2/www3/MPI_Win_allocate.html
int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr, MPI_Win *win)
该函数返回(创建)一个新窗口win
并返回指向已分配内存baseptr
的指针。但是,据我所知,baseptr
对于win
中已包含的信息而言是多余的。
这真的是多余的吗?有什么用呢?
换句话说,在所有情况下总是如此,
MPI_Win win;
void* baseptr;
MPI_Win_allocate(
size, 1, MPI_INFO_NULL, impl_,
&baseptr,
&win
);
void* baseptr2;
MPI_Win_get_attr(impl_, MPI_WIN_BASE, &baseptr2, &flag);
assert(baseptr2 == baseptr); // <---
这是正确的用法吗?这个设计是否适合性能? (例如get_attr
需要时间/沟通。)