Jump to content

MPI: Probe: Difference between revisions

From Haidhi Wiki
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;
}