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

时间:2014-08-01 01:27:05

标签: c mpi

我开发了一个给定的简单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;
}

1 个答案:

答案 0 :(得分:0)

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

根据我的理解,您想知道发送的邮件是什么。好吧,对于你提供的代码,内存被分配给消息,但任何真正的&#34;可读&#34;消息已指定。在这一行。

message = (char*)malloc (msg_size);

malloc 保留邮件的内存,因此任何人都可以编写邮件,但是,它不提供任何初始值。有时,内存包含以前存储和释放的其他信息。然后,发送的消息是&#34;垃圾&#34;那是在之前。这可能就是你所说的十六进制(我希望我明白这一点)。

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

我建议使用with my_id和next_id为消息分配值。所以你知道谁向谁发送。