C++ 缓冲区大小大于Mpi_发送中的计数
这可能是一件小事,但: 在MPI_send(…)调用中,基础数组的大小可能会大于count参数send和缓冲区指针 至于MPI_Recv(…),我已经找到了明确声明这是合法的(即缓冲区大于消息)的源代码 另外,当我编译并运行下面的程序时,它似乎还可以C++ 缓冲区大小大于Mpi_发送中的计数,c++,mpi,C++,Mpi,这可能是一件小事,但: 在MPI_send(…)调用中,基础数组的大小可能会大于count参数send和缓冲区指针 至于MPI_Recv(…),我已经找到了明确声明这是合法的(即缓冲区大于消息)的源代码 另外,当我编译并运行下面的程序时,它似乎还可以 #include <stdlib.h> #include <stdio.h> #include <string.h> #include <mpi.h> int main(int argc, char
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <mpi.h>
int main(int argc, char **argv){
int i;
MPI_Init(&argc, &argv);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
if( world_size != 2 ) {
printf("You're supposed to use exactly 2 processes, dude!\n");
MPI_Abort( MPI_COMM_WORLD, 0 );
}
int *ids = (int*)( malloc( 10*sizeof(int) ) );
if( world_rank == 0 ) {
for( i=0; i<10; i++)
ids[i]=i+1;
MPI_Send( ids, 5, MPI_INT, 1, 0, MPI_COMM_WORLD);
}else{
for( i=0; i<10; i++)
ids[i]=20-i;
MPI_Recv( ids, 5, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
for( i=0; i<10; i++)
printf("me %d %d %d\n",world_rank,i,ids[i]);
free(ids);
MPI_Finalize();
return 0;
}
但是我想让你放心,因为我还是个新手…因为你正在将缓冲区传递给MPI\u Send并告诉它缓冲区有多大,缓冲区大小与你说的大小无关。如果你想把一个大的缓冲区切成更小的缓冲区,那是你的事
MPI\u Send
无法告诉您是如何分配或创建要传递给它的缓冲区的,它也不在乎。因为您要将缓冲区传递给MPI\u Send
并告诉它缓冲区有多大,所以缓冲区是您所说的大小。如果你想把一个大的缓冲区切成更小的缓冲区,那是你的事MPI\u Send
无法告诉您是如何分配或创建要传递给它的缓冲区的,它也不在乎。因为您要将缓冲区传递给MPI\u Send
并告诉它缓冲区有多大,所以缓冲区是您所说的大小。如果你想把一个大的缓冲区切成更小的缓冲区,那是你的事MPI\u Send
无法告诉您是如何分配或创建要传递给它的缓冲区的,它也不在乎。因为您要将缓冲区传递给MPI\u Send
并告诉它缓冲区有多大,所以缓冲区是您所说的大小。如果你想把一个大的缓冲区切成更小的缓冲区,那是你的事MPI_Send
无法告诉您是如何分配或创建要传递给它的缓冲区的,它也不在乎。它不仅安全:这是经常做的事情。例如,当您必须在阵列的边界上发送/接收重影数据时。或者发送一行二维数组。此外,MPI还支持使用MPI数据类型发送/接收稀疏缓冲区—例如,发送2D数组的列。所以别担心,你的代码还可以。它不仅安全,而且是经常做的事情。例如,当您必须在阵列的边界上发送/接收重影数据时。或者发送一行二维数组。此外,MPI还支持使用MPI数据类型发送/接收稀疏缓冲区—例如,发送2D数组的列。所以别担心,你的代码还可以。它不仅安全,而且是经常做的事情。例如,当您必须在阵列的边界上发送/接收重影数据时。或者发送一行二维数组。此外,MPI还支持使用MPI数据类型发送/接收稀疏缓冲区—例如,发送2D数组的列。所以别担心,你的代码还可以。它不仅安全,而且是经常做的事情。例如,当您必须在阵列的边界上发送/接收重影数据时。或者发送一行二维数组。此外,MPI还支持使用MPI数据类型发送/接收稀疏缓冲区—例如,发送2D数组的列。所以,别担心,你的代码还可以。
me 0 0 1
me 0 1 2
me 0 2 3
me 0 3 4
me 0 4 5
me 0 5 6
me 0 6 7
me 0 7 8
me 0 8 9
me 0 9 10
me 1 0 1
me 1 1 2
me 1 2 3
me 1 3 4
me 1 4 5
me 1 5 15
me 1 6 14
me 1 7 13
me 1 8 12
me 1 9 11