MPI: Reduce: Difference between revisions
Appearance
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 dikirimMPI_INT: Tipe datanyaMPI_SUM: Jenis operasinya (bisa MPI_MAX, MPI_MIN, MPI_PROD, dll)0: rank yang nerima hasil akhirnyaMPI_COMM_WORLD: komunikator