MPI: Probe: Difference between revisions
Appearance
Created page with "<code>MPI_Probe</code> 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." |
No edit summary |
||
| Line 1: | Line 1: | ||
<code>MPI_Probe</code> 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. | <code>MPI_Probe</code> 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. | ||
<syntaxhighlight lang=cpp> | |||
#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; | |||
} | |||
</syntaxhighlight> | |||
Latest revision as of 09:39, 30 March 2026
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;
}