260 likes | 409 Views
Pengolahan Paralel/KK021239. 11/ 1 /26. 11. STRATEGI PARTISI DAN DIVIDE & CONQUER. 11.1 Partisi Strategi Divide & Conquer Divide & Conquer M-ary 11.2 Contoh Divide & Conquer Sortir dengan Bucket Sort.
E N D
Pengolahan Paralel/KK021239 11/1/26 11. STRATEGI PARTISI DAN DIVIDE & CONQUER 11.1 Partisi Strategi Divide & Conquer Divide & Conquer M-ary 11.2 Contoh Divide & Conquer Sortir dengan Bucket Sort Referensi : Wilkinson, Barry & Allen, M, “Parallel Programming”, Prentice Hall, New Jersey, 1999; Chapter 4; hal. 107 - 122
Pengolahan Paralel/KK021239 11/2/26 11.1.1 Strategi Partisi Contoh - Menambah Sederetan Angka Deretan dipartisi ke dalam m bagian dan ditambahkan secara bebas untuk membuat penjumlahan parsial Gambar 4.1 Deretan dipartisi menjadi m bagian dan ditambahkan. Pengolahan Paralel/KK021239
Pengolahan Paralel/KK021239 11/3/26 Menggunakan send( ) s dan recv( ) s Master s = n/m; /* number of numbers for slaves*/ for (i = 0, x = 0; i < m; i++, x = x + s) send(&numbers[x], s, Pi); /* send s numbers to slave */ sum = 0; for (i = 0; i < m; i++) { /* wait for results from slaves */ recv(&part_sum, PANY); sum = sum + part_sum; /* accumulate partial sums */ } Slave recv(numbers, s, Pmaster); /* receive s numbers from master */ part_sum = 0; for (i = 0; i < s; i++) /* add numbers */ part_sum = part_sum + numbers[i]; send(&part_sum, Pmaster); /* send sum to master */ Pengolahan Paralel/KK021239
Pengolahan Paralel/KK021239 11/4/26 Menggunakan rutin Broadcast/ Multicast Master s = n/m; /* number of numbers for slaves */ bcast(numbers, s, Pslave_group); /* send all numbers to slaves */ sum = 0; for (i = 0; i < m; i++){ /* wait for results from slaves */ recv(&part_sum, PANY); sum = sum + part_sum; /* accumulate partial sums */ } Slave bcast(numbers, s, Pmaster); /* receive all numbers from master*/ start = slave_number * s; /* slave number obtained earlier */ end = start + s; part_sum = 0; for (i = start; i < end; i++) /* add numbers */ part_sum = part_sum + numbers[i]; send(&part_sum, Pmaster); /* send sum to master */ Pengolahan Paralel/KK021239
Pengolahan Paralel/KK021239 11/5/26 Menggunakan rutin Scatter dan Reduce Master s = n/m; /* number of numbers */ scatter(numbers,&s,Pgroup,root=master); /* send numbers to slaves */ reduce_add(&sum,&s,Pgroup,root=master); /* results from slaves */ Slave scatter(numbers,&s,Pgroup,root=master); /* receive s numbers */ . /* add numbers */ reduce_add(&part_sum,&s,Pgroup,root=master); /* send sum to master */ Pengolahan Paralel/KK021239
Pengolahan Paralel/KK021239 11/6/26 Analisis Komputasi sekuensial membutuhkan n-1 penambahan dengan kompleksitas waktu O(n) Paralel : Dengan rutin send dan receive Fase 1 - Komunikasi tcomm1 = m(tstartup + (n/m)tdata) Fase 2 - Komputasi tcomp1 = n/m - 1 Fase 3 - Komunikasi : mengembalikan hasil parsial dengan rutin send/ recv tcomm2 = m(tstartup + tdata) Fase 4 - Komputasi : Akumulasi akhir tcomp2 = m - 1 Jadi tp = (tcomm1 + tcomm2) + (tcomp1 + tcomp2) = 2mtstartup + (n + m)tdata + m + n/m -2 = O(n + m) Waktu kompleksitas paralel lebih buruk dari sekuensial Pengolahan Paralel/KK021239
Pengolahan Paralel/KK021239 11/7/26 11.1.2 Divide & Conquer Karakteristiknya adalah membagi masalah ke dalam sub-sub masalah yang sama bentuknya dengan masalah yang lebih besar.Pembagian selanjutnya ke dalam sub problem yang lebih kecil biasanya dilakukan melalui rekursi.Definisi rekursi sekuensial untuk menambah sederetan angka : int add(int *s) /* add list of numbers, s */ { if (number(s) =< 2) return (n1 + n2); /* see explanation */ else { Divide (s, s1, s2); /* divide s into two parts, s1 and s2 */ part_sum1 = add(s1); /*recursive calls to add sub lists */ part_sum2 = add(s2); return (part_sum1 + part_sum2); } } Pengolahan Paralel/KK021239
Pengolahan Paralel/KK021239 11/8/26 Masalah Awal Pembagian masalah Hasil akhir Gambar 4.2 Konstruksi Pohon. Pengolahan Paralel/KK021239
Implementasi Paralel Deretan awal Gambar 4.3 Membagi deretan ke dalam beberapa bagian. Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/9/26
Jumlah Akhir Gambar 4.3 Penjumlahan Parsial. Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/10/26
Kode Paralel Misal dibuat ada 8 prosesor untuk menambah sederetan angka.Proses P0 /* division phase */ divide(s1, s1, s2); /* divide s1 into two, s1 and s2 */ send(s2, P4); /* send one part to another process */ divide(s1, s1, s2); send(s2, P2); divide(s1, s1, s2); send(s2, P1}; part_sum = *s1; /* combining phase */ recv(&part_sum1, P1); part_sum = part_sum + part_sum1; recv(&part_sum1, P2); part_sum = part_sum + part_sum1; recv(&part_sum1, P4); part_sum = part_sum + part_sum1; Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/11/26
Kode untuk proses P4 Proses P4 Kode yang serupa digunakan untuk proses-proses lainnya. recv(s1, P0); /* division phase */ divide(s1, s1, s2); send(s2, P6); divide(s1, s1, s2); send(s2, P5); part_sum = *s1; /* combining phase */ recv(&part_sum1, P5); part_sum = part_sum + part_sum1; recv(&part_sum1, P6); part_sum = part_sum + part_sum1; send(&part_sum, P0); Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/12/26
Analisis Diasumsikan n adalah pangkat dari 2. Waktu set up komunikasi, tstartup tidak diperhitungkan. Komunikasi Fase Pembagian Fase Penggabungan Total waktu komunikasi Komputasi Total waktu eksekusi paralel Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/13/26
Gambar 4.5 Bagian dari pohon pencarian Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/14/26
11.1.3 Divide & Conquer M-ary Tugas (task) dibagi ke dalam lebih dari 2 bagian setiap tahapannya. Contoh : Tugas dibagi menjadi 4 bagian. Definisi rekursif sekuensialnya : int add(int *s) /* add list of numbers, s */ { if (number(s) =< 4) return(n1 + n2 + n3 + n4); else { Divide (s,s1,s2,s3,s4); /* divide s into s1,s2,s3,s4*/ part_sum1 = add(s1); /*recursive calls to add sublists */ part_sum2 = add(s2); part_sum3 = add(s3); part_sum4 = add(s4); return (part_sum1 + part_sum2 + part_sum3 + part_sum4); } } Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/15/26
Gambar 4.6 Pohon kuarternair (quadtree) Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/16/26
Gambar 4.7 Membagi sebuah citra Daerah citra Pembagian pertama ke dalam 4 bagian Pembagian kedua Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/17/26
11.2 Contoh Divide & Conquer Sortir dengan Bucket Sort • Sederetan angka dibagi ke dalam m area yang sama, 0 .. a/m - 1, a/m .. 2a/m - 1, 2a/m .. 3a/m - 1, … • Sebuah “bucket” ditugaskan untuk menampung angka dalam setiap area • Angka-angka tersebut dimasukkan ke bucket yang sesuai • Angka-angka tersebut akan disortir dengan menggunakan algoritma sortir sekuensial setiap bucket. Sortir ini akan baik jika angka-angka awalnya didistribusikan ke interval yang sudah diketahui, misalnya 0 .. a - 1. Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/18/26
Angka yang belum disortir Bucket Merge List Angka yang disortir Gambar 4.8 Bucket sort Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/19/26
Waktu Sekuensial Algoritma Paralel Bucket sort dapat diparalelkan dengan menugaskan satu prosesor untuk setiap bucket - mengurangi suku ke dua (second term) dari persamaan sebelumnya menjadi (n/p)log(n/p) untuk p prosesor (dimana p = m). Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/20/26
Angka yang belum disortir Bucket p prosesor Merge List Angka yang disortir Gambar 4.9 Satu versi Paralel dari Bucket sort Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/21/26
Paralelisasi Selanjutnya • Membagi deretan ke dalam m area, satu area untuk setiap prosesor • Setiap prosesor mengatur p “bucket” yang kecil dan memisahkan angka-angka dalam areanya ke dalam bucket-bucket tersebut • Bucket-bucket kecil ini kemudian dikosongkan ke dalam p bucket akhir untuk sortir, yang membutuhkan masing-masing prosesornya untuk mengirimkan satu bucket kecil ke masing-masing prosesor yang lain (bucket i ke prosesor i). Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/22/26
n/m angka Angka yang belum disortir Bucket besar p prosesor Bucket kecil Bucket kecil dikosongkan Merge List Angka yang disortir Gambar 4.10 Versi Paralel dari Bucket sort Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/23/26
Analisis Fase 1 - Komputasi dan komunikasi (membagi angka) tcomp1 = n ; tcomm1 = tstartup + tdatan Fase 2 - Komputasi (sortir ke bucket kecil) tcomp2 = n/p Fase 3 - Komunikasi (kirim ke bucket besar) Jika seluruh komunikasi tumpang tindih : tcomm3 = (p - 1)(tstartup + (n/p2)tdata) Fase 4 - Komputasi (sortir bucket besar) tcomp4 = (n/p)log(n/p) Jadi tp= tstartup + tdatan + n/p + (p - 1)(tstartup + (n/p2)tdata) +(n/p)log(n/p) Diasumsikan angka-angka tersebut didistribusikan untuk mencapai formula ini. Skenario kasus terburuk (worse-case) terjadi ketika semua angka berada dalam satu bucket ! Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/24/26
Rutin “all-to-all” Dapat digunakan untuk fase 3 - mengirimkan data dari setiap proses ke setiap proses yang lain Gambar 4.11 Broadcast “all-to-all” Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/25/26
Rutin “all-to-all” sebenarnya mengubah baris sebuah array menjadi kolom Gambar 4.12 Efek “all-to-all” dari sebuah array Pengolahan Paralel/KK021239 Pengolahan Paralel/KK021239 11/26/26