Professional Documents
Culture Documents
ANGGOTA KELOMPOK V :
1311511042
1411511001
1411511004
1411511005
1411511010
1411511023
1411511024
1411511025
M ARIEF
NAGINA KINASIH KENCANA
RONI WAHYU PUTRA
AGUNG HIDAYAT
NAILATUL FADHILAH
IKHSAN TEGUH HARDIANTO
JUNAIDI PUTRA PRAYOGA
YONA VIDIANA
OpenMP
OpenMP adalah standar yang digunakan untuk pemrograman paralel multithreading pada
arsitektur shared memory. Sudah termasuk pada compiler GCC, sehingga tidak perlu instalasi
tambahan. Programmer cukup menambahkan direktif omp pada #pragma untuk memparalelkan
program. Kompilasi program menggunakan gcc -fopenmp.
#include <omp.h>
#include <stdio.h>
int main()
{
#pragma omp parallel num_threads(4)
printf("Hello!\n");
return 0;
}
OpenMPI
Message passing interface (MPI) adalah standar yang digunakan untuk pemrograman paralel
padadistributed memory (cluster). Program MPI akan berjalan secara multiprocessing, tiap
proses memiliki memori tersendiri. Instalasi OpenMPI pada Debian/Ubuntu Linux dilakukan
dengan menginstal paket mpi-default-bin dan mpi-default-dev. Kompilasi dan eksekusi program
menggunakan mpicc dan mpiexec -n <#> <program>.
#include <mpi.h>
#include <stdio.h>
int main()
{
MPI_Init(NULL, NULL);
printf("Hello!\n");
MPI_Finalize();
return 0;
OPENMP
OpenMP adalah API untuk menulis aplikasi multithreaded (MT), berupa satu set
direktif compilerdan library untuk pemrograman aplikasi paralel yang menyederhanakan
penulisan program MT pada C, C++, dan Fortran. OpenMP dirancang untuk berjalan pada
komputer shared memory(Gambar ) yang menyediakan fitur threading. Secara umum, banyak
dipakai untuk sistem SMP dan CPU multi-core.
Contoh:
#pragma omp parallel num_threads(4)
#include <omp.h>
Sebagian besar construct OpenMP berlaku untuk satu blok terstruktur. Blok terstruktur adalah
blok yang terdiri atas satu atau lebih pernyataan dengan satu titik masuk di atas dan satu titik
keluar di bawah.
MPI
MPI adalah standar untuk menulis aplikasi paralel pada arsitektur distributed memory (Gambar ).
MPI mendukung bahasa pemrograman C, C++, dan Fortran. MPI dirancang untuk berjalan pada
komputer cluster yang terhubung melalui jaringan. Salah satu implementasi MPI adalah
OpenMPI.
Fungsi untuk mendapatkan jumlah prosesor yang terlibat dalam satu komunikator.
MPI_Comm_rank(comm, *rank)
Fungsi untuk mendapatkan rank/ID prosesor yang terlibat dalam satu komunikator.
MPI_COMM_WORLD
Komunikator (grup komunikasi) yang mencakup semua proses.
Contoh inisialisasi MPI
Berikut contoh kode program hello.c.
#include <mpi.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int size, id;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &id);
printf("Hello from process %d-of-%d\n", id, size);
MPI_Finalize();
return 0;
}
Ubah program yang mencetak Hello world!(id) berikut ini supaya menjadi paralel. Jalankan
dengan 4 proses, namun proses ke-0 tidak mencetak apapun.
#include <stdio.h>
int main()
{
int id = 0;
printf("Hello world!(%d)\n", id);
return 0;
}
x = 6;
MPI_Send(&x, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
if (id == 1)
MPI_Recv(&x, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, NULL);
printf("P[%d] x: %d\n", id, x);
MPI_Finalize();
return 0;
}
Ilustrasi proses pengiriman pesan untuk contoh kode di atas dapat dilihat pada Gambar .
Proses
send-recv dari P_0 ke proses lainnya
Dari jawaban di atas, buatlah fungsi bcast() dengan prototipe sebagai berikut!
int bcast(void *buffer, int count, MPI_Datatype datatype,
int root, MPI_Comm comm);
Komunikasi Kolektif
Komunikasi kolektif harus melibatkan semua proses dalam komunikator. Tag pesan tidak
dipakai. Semua komunikasi kolektif adalah blocking. Proses root menjadi sumber pesan ke
semua proses (bcast, scatter) atau tujuan pesan dari semua proses (reduce, gather).
MPI_Bcast(*buffer, count, datatype, root, comm)
Fungsi untuk menyebarkan pesan dari satu proses ke semua proses di dalam satu grup.
B
roadcast
MPI_Reduce(*value, *result, count, datatype, op, root, comm)
Fungsi untuk mereduksi nilai pada semua proses di dalam satu grup dengan operator op.
MPI_MAX, MPI_MIN, MPI_SUM, MPI_PROD, MPI_LAND, MPI_LOR, ...
Konstanta untuk operator reduksi.
Reduce
MPI_Scatter(*sbuf, scount, stype, *rbuf, rcount, rtype, root, comm)
Fungsi untuk membagikan data dari satu proses ke semua proses di dalam satu grup.
MPI_Gather(*sbuf, scount, stype, *rbuf, rcount, rtype, root, comm)
Fungsi untuk mengumpulkan data dari semua proses di dalam satu grup.
Scattergather
MPI_Barrier(comm)
Fungsi untuk memblok eksekusi sampai semua proses sampai pada fungsi ini.
Contoh penggunaan fungsi MPI_Reduce()
#include <mpi.h>
#include <stdio.h>
#define ROOT 0
int main()
{
DAFTAR PUSTAKA
http://cs.ipb.ac.id/~auriza/parallel/pp.html diakses pada tanggal 8 September 2016 pukul 10:02
WIB