MPI: Probe
Appearance
MPI_Probe memungkinkan proses penerima (receiver) untuk memeriksa pesan yang masuk tanpa benar-benar menerimanya (tanpa memanggil MPI_Recv). Dengan begitu, kita bisa tahu ukuran pesan tersebut dan menyiapkan buffer yang ukurannya pas.
#include <mpi.h>
#include <iostream>
#include <vector>
#include <random>
#include <chrono>
int main(int argc, char** argv) {
MPI_Init(&argc, &argv);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
if (world_rank == 0) {
// generate random number dari 1 sampe 100
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::mt19937 engine(seed);
int min = 1;
int max = 100;
std::uniform_int_distribution<int> dist(min, max);
int count = dist(engine);
std::vector<int> numbers(count, 7); // isi pake angka 7
MPI_Send(numbers.data(), count, MPI_INT, 1, 0, MPI_COMM_WORLD);
} else if (world_rank == 1) {
MPI_Status status;
MPI_Probe(0, 0, MPI_COMM_WORLD, &status);
int number_count;
MPI_Get_count(&status, MPI_INT, &number_count);
std::vector<int> buffer(number_count);
std::cout << "rank 1: ada " << number_count << " angka masuk" << std::endl;
MPI_Recv(buffer.data(), number_count, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
std::cout << "rank 1: Berhasil menerima semua data" << std::endl;
}
MPI_Finalize();
return 0;
}