/bitonic-sort-openmp

OpenMP implementation for Bitonic Sort

Primary LanguageC

Perbandingan Kinerja Bitonic Sort antara Parallel dengan Non-Parallel

  • Turfa Auliarachman - 13515133

Pembagian tugas: Semua dikerjakan oleh Turfa Auliarachman, 13515133.

Requirements

  1. Compiler C mendukung OpenMP.
  2. Compiler C dapat diakses dengan perintah cc.

Petunjuk Penggunaan

Kompilasi

Untuk melakukan kompilasi, gunakan perintah:

make

Menjalankan Program

Untuk menjalankan program, gunakan perintah:

./bitonic_sort [jumlah_data]

[jumlah_data] harus berupa bilangan bulat positif.

Laporan

Solusi Paralel

Solusi parallel yang saya buat adalah dengan memparallelkan semua perbandingan elemen yang ada di bitonic sort.

Analisis Solusi

Pada dasarnya, bitonic sort hanya terdiri dari perbandingan-perbandingan dan penukaran elemen yang independen pada setiap batch. Solusi yang saya ajukan adalah membuat perbandingan-perbandingan dan penukan elemen yang independen tersebut berjalan secara parallel. Dengan memparallelkan unsur utama dari algoritma ini, menurut saya ini adalah cara yang paling efektif dalam memparallelkan algoritma bitonic sort.

Jumlah Thread dan Analisis

Jumlah thread yang saya gunakan adalah sejumlah core yang ada pada komputer yang menjalankan.

Hal ini dikarenakan pada algoritma bitonic sort, banyaknya iterasi yang akan digunakan setiap batch adalah sebanyak setengah dari banyaknya elemen yang akan diurutkan. Namun, jika dibuat thread terlalu banyak, akan terjadi overhead yang terlalu besar dalam pembangkitan dan manajemen thread pada OS.

Pengukuran Waktu

Banyak Elemen Waktu Percobaan 1 (ms) Waktu Percobaan 2 (ms) Waktu Percobaan 3 (ms) Waktu Rata-Rata
5.000 2.030 (single thread)
1.617 (multithread)
2.048 (single thread)
1.559 (multithread)
1.857 (single thread)
1.405 (multithread)
1.978,33
1.527
50.000 18.314 (single thread)
13.844 (multithread)
23.028 (single thread)
16.206 (multithread)
24.423 (single thread)
17.184 (multithread)
21.921,67
15.744,67
100000 27.561 (single thread)
21.032 (multithread)
43.761 (single thread)
31.047 (multithread)
24.398 (single thread)
19.714 (multithread)
31.906,67
23.931
200.000 106.333 (single thread)
63.754 (multithread)
54.543 (single thread)
44.309 (multithread)
93.858 (single thread)
58.053 (multithread)
84.911,33
55.372
400.000 168.640 (single thread)
101.281 (multithread)
172.122 (single thread)
99.364 (multithread)
170.789 (single thread)
100.086 (multithread)
170.517
100.243,67

Analisis Perbandingan

Pada percobaan dengan banyak elemen 5.000, terjadi peningkatan kecepatan sebanyak 23%. PAda percobaan dengan banyak elemen 50.000, 100.000, 200.000, dan 400.000, berturut-turut peningkatannya adalah sebanyak 28%, 25%, 35%, dan 41%.

Dari sana, kita melihat bahwa semakin banyak jumlah elemen, semakin besar juga peningkatan kecepatannya. Hal itu dikarenakan ketika jumlah elemennya lebih sedikit, waktu overhead akan lebih terasa dibanding ketika jumlah elemennya lebih banyak.