调用 MPI_Win_create 时如何匹配 windows
How are windows matched when calling MPI_Win_create
说,这段代码:
int n;
double pi;
if (myid == 0) {
MPI_Win_create(&n, sizeof(int), 1, MPI_INFO_NULL,
MPI_COMM_WORLD, &nwin);
MPI_Win_create(&pi, sizeof(double), 1, MPI_INFO_NULL,
MPI_COMM_WORLD, &piwin);
}
else {
MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL,
MPI_COMM_WORLD, &nwin);
MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL,
MPI_COMM_WORLD, &piwin);
}
来自 http://www.mcs.anl.gov/research/projects/mpi/usingmpi2/examples/starting/cpi-rma_c.htm
我的问题是 windows 是如何匹配的?
虽然我认为重要的是调用顺序,但我的老师建议它可以是变量名(使用一些编译器智能技巧)。
我可以在 OpenMPI 上试用这段代码,但它是规范行为吗?
那么,规格如何?
不幸的是你的老师错了。 MPI_Win_create
是指定通讯器中的集体,因此顺序很重要。如果您切换 else
块中的调用顺序,那么创建的第一个 window 的句柄将存储在 nwin
的第 0 级和 piwin
中其他职级。这同样适用于第二个 window.
几乎所有 MPI 实现都是常规目标代码库,除了发出函数调用之外不需要任何编译器帮助。此外,MPI 允许作业包含多个不同可执行文件的实例(MPMD 模式)。编译器如何知道其他可执行文件中变量的名称,甚至可以用完全不同的编译器编译或用不同的编程语言编写?
说,这段代码:
int n;
double pi;
if (myid == 0) {
MPI_Win_create(&n, sizeof(int), 1, MPI_INFO_NULL,
MPI_COMM_WORLD, &nwin);
MPI_Win_create(&pi, sizeof(double), 1, MPI_INFO_NULL,
MPI_COMM_WORLD, &piwin);
}
else {
MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL,
MPI_COMM_WORLD, &nwin);
MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL,
MPI_COMM_WORLD, &piwin);
}
来自 http://www.mcs.anl.gov/research/projects/mpi/usingmpi2/examples/starting/cpi-rma_c.htm
我的问题是 windows 是如何匹配的?
虽然我认为重要的是调用顺序,但我的老师建议它可以是变量名(使用一些编译器智能技巧)。
我可以在 OpenMPI 上试用这段代码,但它是规范行为吗?
那么,规格如何?
不幸的是你的老师错了。 MPI_Win_create
是指定通讯器中的集体,因此顺序很重要。如果您切换 else
块中的调用顺序,那么创建的第一个 window 的句柄将存储在 nwin
的第 0 级和 piwin
中其他职级。这同样适用于第二个 window.
几乎所有 MPI 实现都是常规目标代码库,除了发出函数调用之外不需要任何编译器帮助。此外,MPI 允许作业包含多个不同可执行文件的实例(MPMD 模式)。编译器如何知道其他可执行文件中变量的名称,甚至可以用完全不同的编译器编译或用不同的编程语言编写?