Jump to content

MPI: Reduce: Difference between revisions

From Haidhi Wiki
Created page with "<code>MPI_Reduce</code> mengambil data dari semua proses, melakukan operasi matematika (seperti penjumlahan, perkalian, nilai max, atau min), dan mengirimkan hasilnya ke satu proses tujuan (biasanya Rank 0)."
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
<code>MPI_Reduce</code> mengambil data dari semua proses, melakukan operasi matematika (seperti penjumlahan, perkalian, nilai max, atau min), dan mengirimkan hasilnya ke satu proses tujuan (biasanya Rank 0).
<code>MPI_Reduce</code> mengambil data dari semua proses, melakukan operasi matematika (seperti penjumlahan, perkalian, nilai max, atau min), dan mengirimkan hasilnya ke satu proses tujuan (biasanya Rank 0).
<syntaxhighlight lang=cpp>
#include <mpi.h>
#include <iostream>
int main(int argc, char** argv) {
    MPI_Init(&argc, &argv);
    int world_size, world_rank;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    // Setiap proses punya angka lokal (misal: 10, 20, 30, ...)
    int local_value = (world_rank + 1) * 10;
    std::cout << "Rank " << world_rank << " punya nilai: " << local_value << std::endl;
    int global_sum;
    int global_max;
    // --- OPERASI PENJUMLAHAN (SUM) ---
    MPI_Reduce(&local_value, &global_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
    // --- OPERASI NILAI MAKSIMAL (MAX) ---
    MPI_Reduce(&local_value, &global_max, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
    if (world_rank == 0) {
        std::cout << "------------------------------------" << std::endl;
        std::cout << "HASIL AKHIR DI RANK 0:" << std::endl;
        std::cout << "Total Sum : " << global_sum << std::endl;
        std::cout << "Max Value : " << global_max << std::endl;
        std::cout << "------------------------------------" << std::endl;
    }
    MPI_Finalize();
    return 0;
}
</syntaxhighlight>
Parameters:
*<code>&local_value</code>: Alamat data yang kita punya (input).
*<code>&global_sum</code>: Alamat buat nyimpen hasil akhirnya (output).
*<code>1</code>: Jumlah elemen yang dikirim
*<code>MPI_INT</code>: Tipe datanya
*<code>MPI_SUM</code>: Jenis operasinya (bisa MPI_MAX, MPI_MIN, MPI_PROD, dll)
*<code>0</code>: rank yang nerima hasil akhirnya
*<code>MPI_COMM_WORLD</code>: komunikator

Latest revision as of 01:55, 31 March 2026

MPI_Reduce mengambil data dari semua proses, melakukan operasi matematika (seperti penjumlahan, perkalian, nilai max, atau min), dan mengirimkan hasilnya ke satu proses tujuan (biasanya Rank 0).

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

int main(int argc, char** argv) {
    MPI_Init(&argc, &argv);

    int world_size, world_rank;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);

    // Setiap proses punya angka lokal (misal: 10, 20, 30, ...)
    int local_value = (world_rank + 1) * 10;
    std::cout << "Rank " << world_rank << " punya nilai: " << local_value << std::endl;

    int global_sum;
    int global_max;

    // --- OPERASI PENJUMLAHAN (SUM) ---
    MPI_Reduce(&local_value, &global_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);

    // --- OPERASI NILAI MAKSIMAL (MAX) ---
    MPI_Reduce(&local_value, &global_max, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);

    if (world_rank == 0) {
        std::cout << "------------------------------------" << std::endl;
        std::cout << "HASIL AKHIR DI RANK 0:" << std::endl;
        std::cout << "Total Sum : " << global_sum << std::endl;
        std::cout << "Max Value : " << global_max << std::endl;
        std::cout << "------------------------------------" << std::endl;
    }

    MPI_Finalize();
    return 0;
}

Parameters:

  • &local_value: Alamat data yang kita punya (input).
  • &global_sum: Alamat buat nyimpen hasil akhirnya (output).
  • 1: Jumlah elemen yang dikirim
  • MPI_INT: Tipe datanya
  • MPI_SUM: Jenis operasinya (bisa MPI_MAX, MPI_MIN, MPI_PROD, dll)
  • 0: rank yang nerima hasil akhirnya
  • MPI_COMM_WORLD: komunikator