Professional Documents
Culture Documents
Wayan Sriyasa/G651080154
Pendahuluan
Pengurutan/sorting data merupakan operasi yang sangat umum dilakukan oleh
komputer karena data yang terurut lebih mudah diproses daripada data yang masih
acak. Sorting didefinisikan sebagi sebuah task untuk mengatur sekumpulan data yang
tersusun secara acak sehingga dihasilkan susunan yang terurut sesuai dengan elemen-
nya (dari yang kecil ke besar atau sebaliknya). Mem-parallel-kan sebuah algoritma
sequencial sorting melibatkan pendistribusian elemen yang akan diurutkan kepada
prosesor yang tersedia. Ada beberapa hal yang harus diperhatikan, yaitu:
1. dimana tempat penyimpanan input dan output
o pada algoritma sekuensial proses ini dengan cepat dapat dilakukan hanya
dengan menggunakan memori lokalnya
o pada algoritma parallel, jika elemen terletak pada proses lokal maka akan
menjadi cukup mudah sedangkan jika elemen berada pada proses yang
berbeda maka akan menjadi lebih rumit
2. Bagaimana proses pembandingan dilakukan oleh algoritma
o Satu elemen per proses
o Lebih dari satu elemen per proses
Selama iterasi dari loop pada baris 6-15, radix sort menentukan posisi elemen dengan nilai
r bit dari j. Perhitungan ini dilakukan dengan menjumlahkan semua elemen dengan nilai
yang sama dan kemudian mengirimkannya ke prosesor. Variable rank merupakan
1
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
penanda posisi setiap elemen, diakhir loop (baris 16), setiap proses mengirimkan
elemennya ke prosesor Prank. Dalam implementasinya algoritma ini dapat dilakukan
dengan pendekatan counting sort atau bucket sort.
Menghitung frekuensi digit yang ditemukan dalam local array sebanyak base
Prosessor ke 0
Indeks Lokal array Bucket/simpan
0 0 0
1 1 2 2
2 0 2
3 0 2
4 0 2
5 1 2 4
6 1 5
7 0 5
8 0 5
9 0 5
2
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
Prosessor ke 1
Indeks Local array Bucket/simpan
0 1 1
1 0 1
2 0 1
3 0 1
4 0 1
5 2 3
6 0 3
7 1 4
8 0 4
9 1 5
Prosessor ke 1
Indeks Local array Bucket/simpan
0 1 0
1 0 1
2 0 1
3 0 1
4 0 1
5 2 1
6 0 3
7 1 3
8 0 4
9 1 4
3
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
Dari P0 Dari P1
Dari P0 Dari P1
Mengurutkan data yang sudah terurut secara lokal dari tiap prosessor
Local Num Item
Data
4
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
Menghitung frekuensi digit yang ditemukan dalam local Data sebanyak base
Prosessor ke 0 :
Indeks Local array Bucket/simpan
0 1 1
1 2 3
2 0 3
3 0 3
4 1 4
5 0 4
6 0 4
7 0 4
8 1 5
9 0 5
Menghitung frekuensi digit yang ditemukan dalam local Data sebanyak base
Prosessor ke 1 :
Indeks Local array Bucket/simpan
0 2 2
1 1 3
2 1 4
3 0 4
4 0 4
5 1 5
6 0 5
7 0 5
8 0 5
9 0 5
5
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
Prosessor ke 1
Indeks Localn array Bucket/simpan
0 2 210
1 1 32
2 1 43
3 0 4
4 0 4
5 1 54
6 0 5
7 0 5
8 0 5
9 0 5
Dari P0 Dari P1
Dari P0 Dari P1
Mengurutkan data yang sudah terurut secara lokal dari tiap prosessor
6
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
/*****************************************************************/
void BuatData(long int array_utama[] /* out */,
int n /* in */,
int n_par /* in */,
int p /* in */)
{
/* menyimpan elemen kedalam penyiman sementara */
int i, q;
MPI_Status status;
printf("Sebelum sorting:\n");
for (q = 0; q < p; q++) {
printf("\nP%d: ", q);
for (i = 0; i < n_par; i++) {
array_utama[q*n_par+i] = rand() % (2*n/p) + (q*2*n/p);
printf("%7ld %s", array_utama[q*n_par+i], i%8==7 ? "\n " :
" ");
}
printf("\n");
}
printf("\n");
} /* BuatData */
/*****************************************************************/
Data yang digenerate oleh fungsi ini adalah desimal dengan 3 digit bilangan.
7
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
Algoritma sorting yang digunakan pada fungsi ini adalah algoritma sequensial sort,
dengan asumsi bahwa algoritma tersebut memiliki stabilitas yang cukup baik.
/*****************************************************************/
main(int argc, char* argv[]) {
long int * array_utama;
long int * array_lokal;
int n=80;
int n_par; /* = n/p */
long int number;
int p;
int my_rank;
int i;
double start, stop; /* timing */
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
n = atoi(argv[1]);
8
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
n_par = n/p;
Seq_sort(array_lokal, n_par);
stop = MPI_Wtime();
if (my_rank==0) {
printf("\nSetelah sorting:\n");
for(i=0; i<n; i++) printf("%7ld %c", array_utama[i],
i%8==7 ? '\n' : ' ');
printf("\n\nWaktu yang diperlukan untuk sort %d processes = %lf msecs\n",
p, (stop - start)/0.001);
}
free(array_lokal);
if (my_rank==0) free(array_utama);
MPI_Finalize();
} /* main */
/*****************************************************************/
Mula-mula fungsi ini memanggil fungsi BuatData untuk membangkitkan sejumlah data
yang nantinya digunakan sebagai input, kemudian data ini dibagi menjadi n/p dan
dikirimkan (scatter) ke seluruh prosesor untuk dilakukan sorting ditiap bucket yang ada.
Kemudian setelah selesai melakukan pengurutan data, prosesor slave mengirimkan hasil
berupa array yang elemenya telah terurut ke prosesor master (root).
9
Tugas: Komputasi Paralel
Desain & Implementasi Radix Sort Parallel
Wayan Sriyasa/G651080154
Referensi
Grama, A; Gupta, A; Karypis, George; dan Kumar, V. 2003. Introduction to Parallel
Computing, Second Edition. Addison Wesley. USA
Quinn, M.J. 2004. Parallel Programming in C with MPI and OpenMP. McGrawHill. USA.
10