Why the Bcast function works with my array incorrectly? I did according to the following example (only there is not an array, but a number).
#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;
}
Result - empty rows without data:
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:
And what if not one array, but for example 3? Will there be as much MPI_Bcast? Need MPI_Barrier then?