Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image Mpi动态分配2d阵列(pgm文件图像)_Image_Image Processing_2d_Mpi_Scatter - Fatal编程技术网

Image Mpi动态分配2d阵列(pgm文件图像)

Image Mpi动态分配2d阵列(pgm文件图像),image,image-processing,2d,mpi,scatter,Image,Image Processing,2d,Mpi,Scatter,我已经实现了一个2d数组Mpi散点,效果很好。我的意思是主处理器可以分散初始大阵列的2d部分。问题是,当我使用动态分配的2d图像文件作为输入时,它不起作用。我想一定是记性有问题。是否有任何方法可以动态获取大型2d数组的2d部分。我也有类似的问题,但它是动态分配的一维向量。 解决我的问题如下: #include <stdio.h> #include "mpi.h" main(int argc, char** argv) { /* .......Variables Initi

我已经实现了一个2d数组Mpi散点,效果很好。我的意思是主处理器可以分散初始大阵列的2d部分。问题是,当我使用动态分配的2d图像文件作为输入时,它不起作用。我想一定是记性有问题。是否有任何方法可以动态获取大型2d数组的2d部分。

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

#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();

}
#包括
#包括“mpi.h”
主(内部argc,字符**argv){
/*……变量初始化*/
int Numprocs,MyRank,Root=0;
整数指数;
int*InputBuffer,*RecvBuffer;
int-Scatter_数据大小;
int-DataSize;
MPI_状态;
/*……MPI初始化*/
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_Comm_WORLD和MyRank);
MPI通信大小(MPI通信世界和Numprocs);
if(MyRank==根){
数据量=80000;
/*…分配内存*/
InputBuffer=(int*)malloc(DataSize*sizeof(int));
对于(索引=0;索引
此链接提供了一些帮助我的示例:


希望这能有所帮助。

答案几乎肯定与C语言中分配多维数组的常用方法是不分配连续的内存块的,而使用MPI(或大多数其他通信库,或将其写入磁盘)发送数据需要连续的数据块。解决方案几乎肯定是改变分配数组的方式,如上面的答案所示。