diff --git a/README.md b/README.md index f580555697bf2cb8378daba158a5024536bfb4ad..52b2c6031f9cc6223fe8ad3e4dacf0d1451256ae 100644 --- a/README.md +++ b/README.md @@ -1,85 +1,85 @@ -# Tugas Besar 1 Sister - OpenMPI dan OpenMP - -## Anggota - -K02 - Kelompok 07 -| NIM | Nama | -| --- | ---- | -| 13519063 | Melita | -| 13519090 | Alexander | -| 13519096 | Girvin Junod | - -## Informasi - -Program ini merupakan implementasi perhitungan konvolusi matriks secara paralel agar dapat dibandingkan dengan perhitungan secara serial. Program serial terdapat pada `serial.c`, sedangkan program paralel dibuat menggunakan OpenMP dan OpenMPI pada `openmpi.c`. Model matriks terdapat pada `matrix.c`. Keluaran dari program adalah nilai minimum, nilai maksimum, nilai median, nilai mean, dan waktu eksekusi yang dibutuhkan oleh program. - -## Penggunaan - -1. Kompilasi serial: `gcc -o serial <path>/serial.c` -2. Kompilasi paralel: `mpicc <path>/openmpi.c --openmp -o openmpi` -3. Run paralel: `cat <fileinput> | mpirun -np <jumlah_node> openmpi <jumlah_thread>` -4. Run Serial : `cat <fileinput> | ./serial` - -## Cara Kerja Program - -Mesin (node) utama akan menerima seluruh input matriks target dan matriks kernel, lalu membagikan matriks target ke semua mesin termasuk dirinya secara merata beserta informasi lain yang dibutuhkan untuk proses perhitungan. Jika matriks target tidak habis dibagi dengan jumlah mesin, sisa pembagian jumlah matriks target akan dibagikan kepada mesin-mesin selain mesin utama untuk dikerjakan. Perintah MPI_Send digunakan untuk mengirim data, sedangkan MPI_Recv digunakan untuk menerima data. - -Setelah tugas mengerjakan matriks target terbagi ke semua mesin, masing-masing mesin akan mengerjakan perhitungan konvolusi matriks secara paralel pada setiap _thread_-nya menggunakan `omp parallel for`. Hasil perhitungan yang berupa list angka tersebut akan di-_sort_ agar terurut membesar, lalu list tersebut dikirim kembali ke mesin utama. - -Kemudian, mesin utama akan menggabungkan hasil konvolusi matriks yang dilakukannya dengan semua hasil yang didapat dari mesin-mesin lainnya sambil melakukan _sorting_. Akhirnya, mesin utama akan mencari nilai minimum, nilai maksimum, nilai median, dan nilai mean dari list angka yang dimiliki. - -## Perbedaan Program Serial dan Paralel - -Pada program serial, seluruh eksekusi dari konvolusi matriks beserta perhitungan selisih dan statistiknya dilakukan pada satu mesin secara sekuensial. Sementara itu, pada program paralel matriks-matriks input akan dibagikan ke beberapa mesin dan mesin-mesin ini akan melakukan perhitungan konvolusi masing-masing untuk matriks yang diterimanya secara bersamaan. Ini berarti dapat dilakukan perhitungan pada berbagai matriks pada waktu yang sama. Secara teori, ini seharusnya membuat waktu eksekusi program menjadi lebih cepat karena program dapat melakukan berbagai perhitungan pada waktu yang sama. Selain dari waktu eksekusi, hasil dari program serial dan paralel adalah sama. - -## Analisis Perbedaan Waktu Antara Serial dan Paralel - -| Test Case | Waktu Terbaik Serial | Waktu Terbaik paralel | -| --------- | -------------------- | --------------------- | -| TC1 | 0.011889 | 0.047814 | -| TC2 | 1.423520 | 0.944455 | -| TC3 | 1.766134 | 1.235104 | -| TC4 | 21.699068 | 11.856851 | - -Karena pada program paralel dapat dilakukan berbagai perhitungan sekaligus, secara teori waktu eksekusinya harusnya lebih cepat dari program serial. Namun, perlu diperhatikan juga pada program paralel dibutuhkan waktu untuk komunikasi dan transfer data antar mesin. Ini membuat perbedaan waktu antara program serial dan paralel tidak begitu signifikan sampai jumlah data yang harus diolah itu sangat besar sehingga konkurensi dari program paralel dapat memberikan waktu eksekusi yang lebih cepat secara signifikan. - -Dapat dilihat dari tabel di atas, untuk testcase dengan data yang sedikit yaitu TC1, waktu eksekusi secara serial lebih cepat, sementara pada data dalam jumlah besar yaitu TC4, eksekusi secara paralel jauh lebih cepat. - -## Perbandingan Waktu Eksekusi Serial dan Paralel - -| Test Case | Node | Thread | Serial (detik) | Paralel (detik) | -| --------- | ---- | ------ | -------------- | --------------- | -| TC1 | 2 | 5 | 0.011889 | 0.047814 | -| TC1 | 2 | 16 | 0.011889 | 0.061358 | -| TC1 | 3 | 5 | 0.011889 | 0.515444 | -| TC1 | 3 | 16 | 0.011889 | 0.170013 | -| TC1 | 4 | 5 | 0.011889 | 0.292909 | -| TC1 | 4 | 16 | 0.011889 | 0.375398 | -| TC2 | 2 | 5 | 1.423520 | 1.314803 | -| TC2 | 2 | 16 | 1.423520 | 1.057429 | -| TC2 | 3 | 5 | 1.423520 | 1.036670 | -| TC2 | 3 | 16 | 1.423520 | 0.944455 | -| TC2 | 4 | 5 | 1.423520 | 1.322625 | -| TC2 | 4 | 16 | 1.423520 | 1.603891 | -| TC3 | 2 | 5 | 1.766134 | 1.176427 | -| TC3 | 2 | 16 | 1.766134 | 1.914414 | -| TC3 | 3 | 5 | 1.766134 | 1.531845 | -| TC3 | 3 | 16 | 1.766134 | 1.235104 | -| TC3 | 4 | 5 | 1.766134 | 1.995614 | -| TC3 | 4 | 16 | 1.766134 | 2.190253 | -| TC4 | 2 | 5 | 21.699068 | 17.739986 | -| TC4 | 2 | 16 | 21.699068 | 17.584142 | -| TC4 | 3 | 5 | 21.699068 | 13.281251 | -| TC4 | 3 | 16 | 21.699068 | 13.526074 | -| TC4 | 4 | 5 | 21.699068 | 12.382502 | -| TC4 | 4 | 16 | 21.699068 | 11.856851 | - -## Analisis Pengaruh OpenMPI dan OpenMP pada Waktu Eksekusi - -Dapat dilihat dari tabel perbandingan waktu di atas, terdapat beberapa test case dengan waktu serial yang lebih rendah daripada waktu paralel. Misalnya, penggunaan paralel pada TC1 akan memperlambat proses program karena datanya yang sedikit, sehingga waktunya akan habis untuk melakukan pembagian dan pengiriman data antar _node_. Perbedaan waktu akibat pembagian berlebih dapat dilihat juga pada perbedaan waktu antar program paralel dengan _node_ dan _thread_ sedikit dibanding dengan program paralel dengan _node_ dan _thread_ banyak, yaitu pada data yang sedikit, akan lebih banyak waktu dibuang dalam melakukan transfer data antar node sehingga waktu eksekusinya lebih lama dibanding dengan yang jumlah node dan thread yang lebih sedikit. - -Sementara itu, pada TC2 program paralel lebih cepat dikarenakan data pada TC2 lebih banyak, sehingga dengan beberapa mesin yang mengerjakan, pengerjaan akan menjadi lebih cepat. Namun, menggunakan terlalu banyak _thread_ dan _node_ juga akan memperlambat eksekusi. Hal ini dapat dilihat pada TC2 dengan 4 _node_ dan 16 _thread_ memiliki waktu yang paling tinggi akibat pembagian kerja yang berlebihan. Pekerjaan ini sebenernya dapat dikerjakan dengan _thread_ yang lebih rendah. - -Pada TC3, pengerjaan dengan paralel lebih baik daripada pengerjaan dengan serial, namun untuk _node_ dan _thread_ yang besar memiliki waktu yang lama dikarenakan alasan yang sama dengan TC2. - -Pada TC4 (_test case_ dengan data terbanyak), pengerjaan dengan sistem paralel sudah terlihat lebih unggul. Ketika _node_ ataupun _thread_ bertambah, waktu dari pengerjaan sistem paralel akan menjadi lebih singkat. Ini dikarenakan dengan datanya yang banyak, program yang berjalan paralel akan lebih unggul akibat kemampuannya untuk melakukan banyak perhitungan sekaligus dan keunggulan ini melebihi waktu yang hilang akibat perlunya komunikasi dan transfer data antar mesin. +# Tugas Besar 1 Sister - OpenMPI dan OpenMP + +## Anggota + +K02 - Kelompok 07 +| NIM | Nama | +| --- | ---- | +| 13519063 | Melita | +| 13519090 | Alexander | +| 13519096 | Girvin Junod | + +## Informasi + +Program ini merupakan implementasi perhitungan konvolusi matriks secara paralel agar dapat dibandingkan dengan perhitungan secara serial. Program serial terdapat pada `serial.c`, sedangkan program paralel dibuat menggunakan OpenMP dan OpenMPI pada `openmpi.c`. Model matriks terdapat pada `matrix.c`. Keluaran dari program adalah nilai minimum, nilai maksimum, nilai median, nilai mean, dan waktu eksekusi yang dibutuhkan oleh program. + +## Penggunaan + +1. Kompilasi serial: `gcc -o serial <path>/serial.c` +2. Kompilasi paralel: `mpicc <path>/openmpi.c --openmp -o openmpi` +3. Run paralel: `cat <fileinput> | mpirun -np <jumlah_node> openmpi <jumlah_thread>` +4. Run Serial : `cat <fileinput> | ./serial` + +## Cara Kerja Program + +Mesin (node) utama akan menerima seluruh input matriks target dan matriks kernel, lalu membagikan matriks target ke semua mesin termasuk dirinya secara merata beserta informasi lain yang dibutuhkan untuk proses perhitungan. Jika matriks target tidak habis dibagi dengan jumlah mesin, sisa pembagian jumlah matriks target akan dibagikan kepada mesin-mesin selain mesin utama untuk dikerjakan. Perintah MPI_Send digunakan untuk mengirim data, sedangkan MPI_Recv digunakan untuk menerima data. + +Setelah tugas mengerjakan matriks target terbagi ke semua mesin, masing-masing mesin akan mengerjakan perhitungan konvolusi matriks secara paralel pada setiap _thread_-nya menggunakan `omp parallel for`. Hasil perhitungan yang berupa list angka tersebut akan di-_sort_ agar terurut membesar, lalu list tersebut dikirim kembali ke mesin utama. + +Kemudian, mesin utama akan menggabungkan hasil konvolusi matriks yang dilakukannya dengan semua hasil yang didapat dari mesin-mesin lainnya sambil melakukan _sorting_. Akhirnya, mesin utama akan mencari nilai minimum, nilai maksimum, nilai median, dan nilai mean dari list angka yang dimiliki. + +## Perbedaan Program Serial dan Paralel + +Pada program serial, seluruh eksekusi dari konvolusi matriks beserta perhitungan selisih dan statistiknya dilakukan pada satu mesin secara sekuensial. Sementara itu, pada program paralel matriks-matriks input akan dibagikan ke beberapa mesin dan mesin-mesin ini akan melakukan perhitungan konvolusi masing-masing untuk matriks yang diterimanya secara bersamaan. Ini berarti dapat dilakukan perhitungan pada berbagai matriks pada waktu yang sama. Secara teori, ini seharusnya membuat waktu eksekusi program menjadi lebih cepat karena program dapat melakukan berbagai perhitungan pada waktu yang sama. Namun, karena sifat program paralel yang menggunakan banyak mesin, perlu dilakukan perhitungan lebih untuk komunikasi dan transfer data antar mesin. Selain dari waktu eksekusi, hasil dari program serial dan paralel adalah sama. + +## Analisis Perbedaan Waktu Antara Serial dan Paralel + +| Test Case | Waktu Terbaik Serial (detik) | Waktu Terbaik Paralel (detik) | +| --------- | -------------------- | --------------------- | +| TC1 | 0.011889 | 0.047814 | +| TC2 | 1.423520 | 0.944455 | +| TC3 | 1.766134 | 1.235104 | +| TC4 | 21.699068 | 11.856851 | + +Karena pada program paralel dapat dilakukan berbagai perhitungan sekaligus, secara teori waktu eksekusinya harusnya lebih cepat dari program serial. Namun, perlu diperhatikan juga pada program paralel dibutuhkan waktu untuk komunikasi dan transfer data antar mesin. Ini membuat perbedaan waktu antara program serial dan paralel tidak begitu signifikan sampai jumlah data yang harus diolah itu sangat besar sehingga konkurensi dari program paralel dapat memberikan waktu eksekusi yang lebih cepat secara signifikan. + +Dapat dilihat dari tabel di atas, untuk testcase dengan data yang sedikit yaitu TC1, waktu eksekusi secara serial lebih cepat, sementara pada data dalam jumlah besar yaitu TC4, eksekusi secara paralel jauh lebih cepat. + +## Perbandingan Waktu Eksekusi Serial dan Paralel + +| Test Case | Node | Thread | Serial (detik) | Paralel (detik) | +| --------- | ---- | ------ | -------------- | --------------- | +| TC1 | 2 | 5 | 0.011889 | 0.047814 | +| TC1 | 2 | 16 | 0.011889 | 0.061358 | +| TC1 | 3 | 5 | 0.011889 | 0.515444 | +| TC1 | 3 | 16 | 0.011889 | 0.170013 | +| TC1 | 4 | 5 | 0.011889 | 0.292909 | +| TC1 | 4 | 16 | 0.011889 | 0.375398 | +| TC2 | 2 | 5 | 1.423520 | 1.314803 | +| TC2 | 2 | 16 | 1.423520 | 1.057429 | +| TC2 | 3 | 5 | 1.423520 | 1.036670 | +| TC2 | 3 | 16 | 1.423520 | 0.944455 | +| TC2 | 4 | 5 | 1.423520 | 1.322625 | +| TC2 | 4 | 16 | 1.423520 | 1.603891 | +| TC3 | 2 | 5 | 1.766134 | 1.176427 | +| TC3 | 2 | 16 | 1.766134 | 1.914414 | +| TC3 | 3 | 5 | 1.766134 | 1.531845 | +| TC3 | 3 | 16 | 1.766134 | 1.235104 | +| TC3 | 4 | 5 | 1.766134 | 1.995614 | +| TC3 | 4 | 16 | 1.766134 | 2.190253 | +| TC4 | 2 | 5 | 21.699068 | 17.739986 | +| TC4 | 2 | 16 | 21.699068 | 17.584142 | +| TC4 | 3 | 5 | 21.699068 | 13.281251 | +| TC4 | 3 | 16 | 21.699068 | 13.526074 | +| TC4 | 4 | 5 | 21.699068 | 12.382502 | +| TC4 | 4 | 16 | 21.699068 | 11.856851 | + +## Analisis Pengaruh OpenMPI dan OpenMP pada Waktu Eksekusi + +Dapat dilihat dari tabel perbandingan waktu di atas, terdapat beberapa test case dengan waktu serial yang lebih rendah daripada waktu paralel. Misalnya, penggunaan paralel pada TC1 akan memperlambat proses program karena datanya yang sedikit, sehingga waktunya akan habis untuk melakukan pembagian dan pengiriman data antar _node_. Perbedaan waktu akibat pembagian berlebih dapat dilihat juga pada perbedaan waktu antar program paralel dengan _node_ dan _thread_ sedikit dibanding dengan program paralel dengan _node_ dan _thread_ banyak, yaitu pada data yang sedikit, akan lebih banyak waktu dibuang dalam melakukan transfer data antar node sehingga waktu eksekusinya lebih lama dibanding dengan yang jumlah node dan thread yang lebih sedikit. + +Sementara itu, pada TC2 program paralel lebih cepat dikarenakan data pada TC2 lebih banyak, sehingga dengan beberapa mesin yang mengerjakan, pengerjaan akan menjadi lebih cepat. Namun, menggunakan terlalu banyak _thread_ dan _node_ juga akan memperlambat eksekusi. Hal ini dapat dilihat pada TC2 dengan 4 _node_ dan 16 _thread_ memiliki waktu yang paling tinggi akibat pembagian kerja yang berlebihan. Pekerjaan ini sebenernya dapat dikerjakan dengan _thread_ yang lebih rendah. + +Pada TC3, pengerjaan dengan paralel lebih baik daripada pengerjaan dengan serial, namun untuk _node_ dan _thread_ yang besar memiliki waktu yang lama dikarenakan alasan yang sama dengan TC2. + +Pada TC4 (_test case_ dengan data terbanyak), pengerjaan dengan sistem paralel sudah terlihat lebih unggul. Ketika _node_ ataupun _thread_ bertambah, waktu dari pengerjaan sistem paralel akan menjadi lebih singkat. Ini dikarenakan dengan datanya yang banyak, program yang berjalan paralel akan lebih unggul akibat kemampuannya untuk melakukan banyak perhitungan sekaligus dan keunggulan ini melebihi waktu yang hilang akibat perlunya komunikasi dan transfer data antar mesin.