如何使用MPI_Isend发送多维,动态和增长的数组

如何使用MPI_Isend发送多维,动态和增长的数组,第1张

概述我创建了一个数组,我想用MPI发送它.第一部分运作良好(我认为?)但我的第二部分有问题.我想这是接收部分以及我如何malloc数组? 请看一下: if (myrank > 1){ //first part int rows = 5; int cols = 4; int realcount = 0; int (*sendarray)[cols] = mall 我创建了一个数组,我想用MPI发送它.第一部分运作良好(我认为?)但我的第二部分有问题.我想这是接收部分以及我如何malloc数组?
请看一下:

if (myrank > 1){    //first part    int rows = 5;    int cols = 4;    int realcount = 0;    int (*sendarray)[cols] = malloc(sizeof *sendarray * rows);    for (int j = 0; j < 100; ++j)    {        for (int k = 0; k < 100; ++k)        {            for (int l = 0; l < 100; ++l)            {                if(realcount==rows){                    int newnum = (rows + 2) * 2;                    int (*newptr)[cols] = realloc(sendarray,sizeof *newptr * newnum);                    rows = newnum;                    sendarray = newptr;                }                /*                    other stuff and checks                */                if(checks)                {                    sendarray[realcount][0] = j;                    sendarray[realcount][1] = k;                    sendarray[realcount][2] = l;                    sendarray[realcount][3] = max;                    ++realcount;                }            }        }    }    //Send array    MPI_Request req;    MPI_Isend(sendarray,realcount,MPI_INT,1,MPI_COMM_WORLD,&req);    MPI_Wait(&req,MPI_STATUS_IGnorE);}else if(myrank == 1){    //second part    //for-loop: check incomming data for each task > 1    for () {        i = task thats going to send data        int amount = 0;        int cols = 4;        MPI_Status status;        MPI_Probe(i,&status);        MPI_Get_count(&status,&amount);        int (*recv_buf)[cols] = malloc(sizeof *recv_buf * amount);        MPI_Recv(recv_buf,amount,i,MPI_STATUS_IGnorE);        for (int var = 0; var < amount; ++var) {            //wrong data here            fprintf(fp,"{ \"x\": %d,\"y\": %d,\"z\": %d,\"value\": %d },",recv_buf[var][0],recv_buf[var][1],recv_buf[var][2],recv_buf[var][3]);        }        free(recv_buf);    }}

非常感谢您的帮助.
我看了一下https://stackoverflow.com/a/13535563/2521647和https://stackoverflow.com/a/14051503/2521647

解决方法 你告诉MPI发送和接收realcount许多MPI_INT,但你的数据实际上是4 MPI_INT.

我不知道这是否是唯一的问题,但这可以解释为什么你得到的阵列不同于你预期的填充.

编辑:在您的情况下,您需要执行以下 *** 作:

MPI_Isend(sendarray,realcount*cols,&req);

int (*recv_buf)[cols] = malloc(sizeof *recv_buf * amount/4);     ...     for (int var = 0; var < amount/4; ++var) {

或使用derived datatype来描述您要发送的4个整数.

总结

以上是内存溢出为你收集整理的如何使用MPI_Isend发送多维,动态和增长的数组全部内容,希望文章能够帮你解决如何使用MPI_Isend发送多维,动态和增长的数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1227831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存