通过 MPI_Send 发送一个 int 数组
Sending an int array via MPI_Send
我是 MPI 的新手,我想通过 MPI_Send
将 int
数组发送到另一个进程。
// Code example
int main(int argc, char ** argv)
{
int * array;
int tag=1;
int size;
int rank;
MPI_Status status;
MPI_Init (&argc,&argv);
MPI_Comm_size (MPI_COMM_WORLD,&size);
MPI_Comm_rank (MPI_COMM_WORLD,&rank);
if (rank == 0)
{
array = malloc (10 * sizeof(int)); // Array of 10 elements
if (!array) // error checking
{
MPI_Abort (MPI_COMM_WORLD,1);
}
MPI_Send(&array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
}
if (rank == 1)
{
MPI_Recv (&array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
// more code here
}
MPI_Finalize();
// More code here
我想请教三件事
- 这是将数组发送到另一个进程级别的安全方法吗?
- 这是
MPI_Send()
和 MPI_Recv()
的语法正确用法吗?
- 有没有更好的方法来发送和接收数组而不麻烦?
感谢任何帮助。
如果要动态分配数组,发送和接收将是:
MPI_Send(array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
和
MPI_Recv (array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
(注意数组是 array
而不是 &array
)
正如评论中所建议的那样,您对 MPI 的理解似乎不错,但是刷新您对 C 指针的使用可能会有所帮助。
编辑:正如 Gilles 所提到的,所有将数据接收到数组中的进程也需要为它们分配内存。 (也许首先发送数据的大小,以便接收方知道分配多大的数组?还有其他方法可以做到这一点,但这是一个简单的解释)
我是 MPI 的新手,我想通过 MPI_Send
将 int
数组发送到另一个进程。
// Code example
int main(int argc, char ** argv)
{
int * array;
int tag=1;
int size;
int rank;
MPI_Status status;
MPI_Init (&argc,&argv);
MPI_Comm_size (MPI_COMM_WORLD,&size);
MPI_Comm_rank (MPI_COMM_WORLD,&rank);
if (rank == 0)
{
array = malloc (10 * sizeof(int)); // Array of 10 elements
if (!array) // error checking
{
MPI_Abort (MPI_COMM_WORLD,1);
}
MPI_Send(&array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
}
if (rank == 1)
{
MPI_Recv (&array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
// more code here
}
MPI_Finalize();
// More code here
我想请教三件事
- 这是将数组发送到另一个进程级别的安全方法吗?
- 这是
MPI_Send()
和MPI_Recv()
的语法正确用法吗? - 有没有更好的方法来发送和接收数组而不麻烦?
感谢任何帮助。
如果要动态分配数组,发送和接收将是:
MPI_Send(array,10,MPI_INT,1,tag,MPI_COMM_WORLD);
和
MPI_Recv (array,10,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
(注意数组是 array
而不是 &array
)
正如评论中所建议的那样,您对 MPI 的理解似乎不错,但是刷新您对 C 指针的使用可能会有所帮助。
编辑:正如 Gilles 所提到的,所有将数据接收到数组中的进程也需要为它们分配内存。 (也许首先发送数据的大小,以便接收方知道分配多大的数组?还有其他方法可以做到这一点,但这是一个简单的解释)