相关疑难解决方法(0)

MPI分区矩阵成块

我想将矩阵分区为块(而不是条带),然后使用MPI_Scatter分配这些块.

我提出了有效的解决方案,但我认为它远非"最佳实践".我有8x8矩阵,填充0到63之间的数字.然后我将它分成4个4x4块,使用MPI_Type_vector并通过MPI_Send分配它,但这需要一些额外的计算,因为我必须计算大矩阵中每个块的偏移量.

如果我使用散点图,则第一个(左上角)块传输正常,但其他块不传输(块的开始错误偏移).

那么可以使用MPI_Scatter传输矩阵块,或者进行所需分解的最佳方法是什么?

这是我的代码:

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

#define SIZE 8


int main(void) {

        MPI_Init(NULL, NULL);
        int p, rank;
        MPI_Comm_size(MPI_COMM_WORLD, &p);
        MPI_Comm_rank(MPI_COMM_WORLD, &rank);
        char i;

        char a[SIZE*SIZE];
        char b[(SIZE/2)*(SIZE/2)];

        MPI_Datatype columntype;
        MPI_Datatype columntype2;

        MPI_Type_vector(4, 4, SIZE, MPI_CHAR, &columntype2);
        MPI_Type_create_resized( columntype2, 0, sizeof(MPI_CHAR), &columntype );
        MPI_Type_commit(&columntype);

        if(rank == 0) {
                for( i = 0; i < SIZE*SIZE; i++) {
                        a[i] = i;
                }

                for(int rec=0; rec < p; rec++) {
                        int offset = (rec%2)*4 + (rec/2)*32;
                      MPI_Send (a+offset, …
Run Code Online (Sandbox Code Playgroud)

c scatter matrix mpi

13
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×1

matrix ×1

mpi ×1

scatter ×1