gpt4 book ai didi

c++ - 缓冲区大小大于 Mpi_send 中的计数

转载 作者:行者123 更新时间:2023-11-28 02:55:56 26 4
gpt4 key购买 nike

这可能是一件微不足道的事情,但是:

底层数组的大小是否可以长于在 MPI_Send( ... ) 调用中与缓冲区指针一起发送的计数参数?

至于 MPI_Recv( ... ),我发现消息来源清楚地表明这是合法的(即缓冲区大于消息)。

另外,当我编译并运行下面的程序时似乎没问题

#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;
}

因为我得到以下没有错误消息的输出:

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

但我还是个新手,所以我想得到保证...

最佳答案

由于您将缓冲区传递给 MPI_Send 并告诉它缓冲区有多大,缓冲区就是您所说的任何大小。如果您想将大缓冲区切割成较小的缓冲区,那是您的事。 MPI_Send 无法告诉您如何设法分配或创建您传递给它的缓冲区,它也不关心。

关于c++ - 缓冲区大小大于 Mpi_send 中的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22000949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com