首页 > 解决方案 > 使用不同大小的 fo 跳转并在 MPI_Scatter 上发送数据

问题描述

我想按列发送我在 1d 数组(行)中的矩阵,我试过这个:(TAM 是矩阵的大小,C 是要发送到每个进程的列数)

PI_Datatype MPI_COLUMNA;
        MPI_Type_vector(TAM, 1, TAM, MPI_DOUBLE, &MPI_COLUMNA);
        MPI_Type_create_resized( MPI_COLUMNA, 0,sizeof(double), &MPI_COLUMNA );
        MPI_Type_commit(&MPI_COLUMNA);  

        int ACTUAL=1;
        double * buffer = malloc(sizeof(double) * C * TAM);
        for (int i = 0; i < TAM; i+=C*PROCESOS){
            MPI_Scatter(&A[i], 1, MPI_COLUMNA, buffer, 
                sizeof(double) * TAM * C,                       // Tamaño del envío a cada proceso
                MPI_FLOAT, 0, MPI_COMM_WORLD);
        }

但是当我尝试这个时,我只得到第一个项目,因为 MPI_COLUMNA 的大小是两倍,但是如果我将它更改为 4,程序会失败,因为 Scatter 跳跃太多(对于项目,转到下一行而不是下一列,从下一项开始)。

我如何将分散的跳跃定义为一个以及发送到另一个的数据的大小。

标签: cmpi

解决方案


推荐阅读