使用mpi_send发送地址内容

时间:2019-07-31 10:12:31

标签: c mpi

我正在编写一个程序,该程序向每个进程发送2个数字的数组。 我对数组表示法不满意。问题是,如果我想对分配了malloc的地址内存使用指针表示法,则无法访问第二个元素。 在此示例中,程序向每个进程发送一个带有指针符号的数组,其中包含数字1和2。然后,根将打印收到的消息。谢谢

$('.date-time').datetimepicker({
  defaultDate: '0000-00-00 00:00:00',
  dateFormat:'yy-mm-dd',
  todayHighlight: 0,
  showSecond: true,
  timeFormat: 'hh:mm:ss',
  stepHour: 1,
  stepMinute: 10,
  stepSecond: 10,
  forceParse: 0
})

这是结果

#include "stdio.h"
#include "stdlib.h"
#include "mpi.h"

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

    float *send = malloc(sizeof(float) * 2);
    float *recv = malloc(sizeof(float) * 2);

/*
    float send2[2], recv2[2];
    send2[0] = 1;
    send2[1] = 2;
*/

    int rank, size;

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    *(send) = 1;
    *(send + sizeof(float)) = 2;
    MPI_Send(send, 2, MPI_FLOAT, 0, 99, MPI_COMM_WORLD);

    if (rank == 0)
    {

        for (int i = 0; i < size; i++)
        {
            MPI_Recv(recv, 2, MPI_FLOAT, i, 99, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
            printf("[%f][%f]\n", *(recv), *(recv + sizeof(float)));
            //printf("[%f][%f]\n", recv2[0], recv2[1]);
        }
    }

    MPI_Finalize();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

对不起,花了将近3个小时后我才意识到

*(send + sizeof(float))=2

必须

*(send + 1) = 2;

与recv函数相同。 我认为沿着数组移动必须增加计算地址的地址,但这仅在您使用空指针的情况下。如果声明为浮点指针,则程序会知道该大小有多大。