首页 > 解决方案 > 带数组的广播函数

问题描述

为什么 Bcast 函数无法正确使用我的数组?我按照下面的例子做了(只是没有数组,而是数字)。

#include <iostream>
#include <mpi.h>
#include <vector>

void test(int rnk) {
    int n = 5;

    vector<int> array;
    array.reserve(n);

    if (rnk == 0) {
        for (int i = 0; i < n; i++) {
            array[i] = i;
        }
    }

    cout << "Process " << rnk << " before Bcast:" << endl;
    for (auto x: array) {
        cout << x << " ";
    }
    cout << endl;

    MPI_Bcast(&array[0], n, MPI_INT, 0, MPI_COMM_WORLD);

    cout << "Process " << rnk << " after Bcast:" << endl;
    for (auto x: array) {
        cout << x << " ";
    }
    cout << endl;
}


int main(int argc, char **argv) {
    int num, rank;

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &num);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    test(rank);

    MPI_Finalize();
    return 0;
}

结果 - 没有数据的空行:

Process 2 before Bcast:

Process 0 before Bcast:

Process 0 after Bcast:

Process 2 after Bcast:

Process 1 before Bcast:

Process 1 after Bcast:

Process 3 before Bcast:

Process 3 after Bcast:

如果不是一个数组,而是例如 3 个呢?会有尽可能多的 MPI_Bcast 吗?那么需要 MPI_Barrier 吗?

标签: c++mpi

解决方案


推荐阅读