【问题标题】:Mpi Scatter dynamical allocated 2d array(pgm file image)Mpi Scatter 动态分配二维数组(pgm 文件图像)
【发布时间】:2012-11-03 14:31:37
【问题描述】:

我已经实现了一个运行良好的二维数组 Mpi scatter。我的意思是主处理器可以分散初始大阵列的二维部分。问题是当我使用动态分配的 2d 图像文件作为输入时,它不起作用。我想肯定是内存有问题。有什么方法可以动态获取大二维数组的二维部分。

【问题讨论】:

  • 答案几乎可以肯定与here 的答案相同 - 分配多维数组的常用 C 方法不会分配连续的内存块,而是使用 MPI(或大多数其他通信库,或将其写入磁盘)需要大量连续数据。解决方案几乎可以肯定是改变分配数组的方式,如上面的答案。

标签: image image-processing 2d mpi scatter


【解决方案1】:

我有一个类似的问题,但它是动态分配的一维向量。 解决了我的问题如下:

#include <stdio.h>
#include "mpi.h"

main(int argc, char** argv) {

    /* .......Variables Initialisation ......*/
    int Numprocs, MyRank, Root = 0;
    int index;
    int *InputBuffer, *RecvBuffer;
    int Scatter_DataSize;
    int DataSize;
    MPI_Status status;

    /* ........MPI Initialisation .......*/
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &MyRank);
    MPI_Comm_size(MPI_COMM_WORLD, &Numprocs);

    if (MyRank == Root) {
        DataSize = 80000;

        /* ...Allocate memory.....*/

        InputBuffer = (int*) malloc(DataSize * sizeof(int));

        for (index = 0; index < DataSize; index++)
            InputBuffer[index] = index;
    }

    MPI_Bcast(&DataSize, 1, MPI_INT, Root, MPI_COMM_WORLD);
    if (DataSize % Numprocs != 0) {
        if (MyRank == Root)
            printf("Input is not evenly divisible by Number of Processes\n");
        MPI_Finalize();
        exit(-1);
    }

    Scatter_DataSize = DataSize / Numprocs;
    RecvBuffer = (int *) malloc(Scatter_DataSize * sizeof(int));

    MPI_Scatter(InputBuffer, Scatter_DataSize, MPI_INT, RecvBuffer,
            Scatter_DataSize, MPI_INT, Root, MPI_COMM_WORLD);

    for (index = 0; index < Scatter_DataSize; ++index)
        printf("MyRank = %d, RecvBuffer[%d] = %d \n", MyRank, index,
                RecvBuffer[index]);

    MPI_Finalize();

}

此链接包含对我有帮助的示例: http://www.cse.iitd.ernet.in/~dheerajb/MPI/Document/hos_cont.html

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2015-03-09
    • 2021-02-03
    相关资源
    最近更新 更多