gpt4 book ai didi

c - MPI 发送-接收程序中消息的值应该是多少?

转载 作者:行者123 更新时间:2023-11-30 17:30:35 26 4
gpt4 key购买 nike

我开发了一个给定的简单 MPI 程序,进程 0 向进程 1 发送消息并从进程 p-1 接收消息。以下是代码:在给我的骨架中,

char *message;    
message= (char*)malloc(msg_size);

让我很困惑。为了检查程序的正确性,我试图查看已发送或接收的消息的值。那么它应该是十六进制值吗?

int main(int argc, char **argv)
{

double startwtime, endwtime;
float elapsed_time, bandwidth;

int my_id, next_id; /* process id-s */
int p; /* number of processes */
char* message; /* storage for the message */
int i, k, max_msgs, msg_size, v;
MPI_Status status; /* return status for receive */


MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &my_id );
MPI_Comm_size( MPI_COMM_WORLD, &p );

if (argc < 3)
{
fprintf (stderr, "need msg count and msg size as params\n");
goto EXIT;
}

if ((sscanf (argv[1], "%d", &max_msgs) < 1) ||
(sscanf (argv[2], "%d", &msg_size) < 1))
{
fprintf (stderr, "need msg count and msg size as params\n");
goto EXIT;
}

**message = (char*)malloc (msg_size);**
if (argc > 3) v=1; else v=0; /*are we in verbose mode*/

/* don't start timer until everybody is ok */
MPI_Barrier(MPI_COMM_WORLD);
int t=0;
if( my_id == 0 ) {
startwtime = MPI_Wtime();

// do max_msgs times:
// send message of size msg_size chars to process 1
// receive message of size msg_size chars from process p-1
while(t<max_msgs) {
MPI_Send((char *) message, msg_size, MPI_CHAR, 1 , 0, MPI_COMM_WORLD);
MPI_Recv((char *) message, msg_size, MPI_CHAR, p-1, 0, MPI_COMM_WORLD, &status);
t++;
}
MPI_Barrier(MPI_COMM_WORLD);
endwtime = MPI_Wtime();
elapsed_time = endwtime-startwtime;
bandwidth = 2.0 * max_msgs * msg_size / (elapsed_time);
printf("Number, size of messages: %3d , %3d \n", max_msgs, msg_size);
fflush(stdout);
printf("Wallclock time = %f seconds\n", elapsed_time );
fflush(stdout);
printf("Bandwidth = %f bytes per second\n", bandwidth);
fflush(stdout);
} else if( my_id == p-1 ) {

// do max_msgs times:
// receive message of size msg_size from process to the left
// send message of size msg_size to process to the right (p-1 sends to 0)
while(t<max_msgs) {
MPI_Send((char *) message, msg_size, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
MPI_Recv((char *) message, msg_size, MPI_CHAR, my_id-1, 0, MPI_COMM_WORLD, &status);
t++;
}
} else {
while(t<max_msgs) {
MPI_Send((char *) message, msg_size, MPI_CHAR, my_id+1, 0, MPI_COMM_WORLD);
MPI_Recv((char *) message, msg_size, MPI_CHAR, my_id-1, 0, MPI_COMM_WORLD, &status);
t++;
}
}

MPI_Barrier(MPI_COMM_WORLD);

EXIT:
MPI_Finalize();
return 0;
}

最佳答案

我不完全确定这是否是你的意思,但我会尝试。

据我了解,您想知道正在发送的消息是什么。好吧,对于您提供的代码,内存已分配给消息,但指定了任何真正的“可读”消息。在这一行中。

message = (char*)malloc (msg_size);

malloc 为消息保留内存,因此任何人都可以写入它,但是,它不提供任何初始值。有时,内存包含先前存储和释放的其他信息。那么,发送的消息就是之前的“垃圾”。这可能就是你所说的十六进制(我希望我理解正确)。

本例中的值类型为 char(在 MPI_Send 和 MPI_Recv 函数中定义为 MPI_CHAR)。 Here您可以找到更多 MPI 数据类型。

我建议使用 my_id 和 next_id 为消息分配一个值。这样您就知道谁发送给谁。

关于c - MPI 发送-接收程序中消息的值应该是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071495/

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