gpt4 book ai didi

c - 使用mpi_send发送地址内容

转载 作者:行者123 更新时间:2023-11-30 16:15:03 25 4
gpt4 key购买 nike

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

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

这就是结果

juan@um18:~/Documentos/EjemplosMPI$ mpirun -np 4 ejecutables/ex
[1.000000][0.000000]
[1.000000][0.000000]
[1.000000][0.000000]
[1.000000][0.000000]

最佳答案

抱歉,花了近3个小时我才意识到

*(send + sizeof(float))=2

一定是

*(send + 1) = 2;

recv 函数也是如此。我认为沿着数组移动,您必须增加计算大小的地址内存,但这仅适用于使用 void 指针的情况。如果您声明为浮点指针,程序就知道该大小有多大。

关于c - 使用mpi_send发送地址内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57288376/

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