• Tidak ada hasil yang ditemukan

Parallel Random Access Machine

BAB 4 PENGUJIAN SISTEM

2.7 Parallel Random Access Machine

PRAM (Parallel Random Access Machine) merupakan metode perancangan al-goritma paralel yang digunakan untuk lingkungan multiprocessor atau multithread-ing. Model PRAM menfokuskan pada permasalahan pengaksesan suatu resource secara bersama-sama dengan tidak memperhatikan permasalahan sinkronisasi dan

komunikasi antar proses paralel. Dengan kata lain, jika tidak dapat menghasilkan algoritma paralel yang baik pada model PRAM, maka tidak akan didapatkan algo-ritma paralel yang baik pada dunia nyata. Pemrosesan pada model PRAM dapat menyebabkan akses data yang dilakukan secara simultan oleh beberapa prosessor pada lokasi memori yang sama. Pada model PRAM dilihat dari aturan simultan akses sesuai dengan makalah [CP09] dapat dibedakan sebagai berikut.

1. Exclusive Read Exclusive Write (EREW): Pada model PRAM ini, tidak diperbolehkan untuk menulis atau membaca pada lokasi memori yang sama atau dapat dikatakan bahwa pada model PRAM ini dua atau lebih prosessor yang berbeda tidak akan mengakses, menulis dan membaca, lokasi memori yang sama.

2. Concurrent Read Exclusive Write (CREW): Pada model PRAM ini, dua atau lebih prosessor dapat membaca dari satu lokasi memori yang sama tetapi tidak boleh menulis pada lokasi memori yang sama.

3. Exclusive Read Concurrent Write (ERCW): Pada model PRAM ini, dua atau lebih prosessor tidak boleh membaca pada lokasi memori yang sama tetapi dapat menulis pada lokasi memori yang sama.

4. Concurrent Read Concurrent Write (CRCW): Pada model PRAM ini, dua atau lebih prosessor dapat menulis dan membaca pada lokasi memori yang sama. Terdapat beberapa jenis CRCW diantaranya adalah:

(a) Common CRCW: Pada model ini, dua atau lebih prosessor dapat menulis pada lokasi memori yang sama jika data yang ditulis sama.

(b) Arbitary CRCW: Pada model ini, data yang dituliskan dipilih secara acak dari data yang dituliskan oleh prosessor pada lokasi memori yang sama.

(c) Priority CRCW: Pada model ini, data yang dituliskan adalah data yang dituliskan oleh prosessor dengan prioritas yang paling tinggi.

(d) Combining CRCW: Pada model ini, data yang akan dituliskan meru-pakan kombinasi perhitungan (biasanya menggunakan operator asisiatif dan mutatif, + atau max) dari seluruh data yang dituliskan prosessor pada lokasi memori yang sama.

2.7.1 Dasar Desain Algoritma Pada PRAM

Perancangan suatu algoritma dengan model PRAM, biasanya menggunakan paradigma WT (Work-Time) dimana pada WT, setiap tahapan proses dari algoritma dapat mengandung jumlah instruksi yang arbitari serta dilakukan secara simultan sehingga penjadwalan algoritma pada prosessor menjadi lebih mudah.

Terdapat dua kompleksitas yang diukur pada WT yaitu kompleksitas dari al-goritma dan kompleksitas dari setiap tahapan pada alal-goritma. Kompleksitas dari algoritma, dilambangkan dengan W (n), adalah total operasi yang dilakukan untuk mengeksekusi algoritma sedangkan kompleksitas setiap tahapan algoritma, dilam-bangkan dengan S(n), adalah total tahapan yang dilakukan untuk mengeksekusi algoritma. Jika Wi(n) adalah jumlah operasi yang dilakukan pada setiap proses par-alel maka, W(n) = S(n)

i=1 Wi(n) (2.16)

Beberapa metode perancangan algoritma pada PRAM model adalah dengan menggunakan balanced trees dan pointer jumping. Pada sub bab ini akan dijelaskan kedua teknik perancangan tersebut.

Balanced Trees

Istilah balanced trees yang digunakan pada PRAM hanya berupa konseptual saja dan tidak berhubungan dengan struktur data tetapi lebih kepada aliran datanya. Metode balanced trees digunakan untuk merancang work-efficient algoritma pada kasus-kasus seperti prefix sum, broadcast, dan perhitungan matrik. Gambar 2.25 merupakan salah satu contoh aliran data pada algoritma prefix sum yang bentuk aliran datanya mirip dengan balanced trees.

Pointer Jumping

Pointer jumping atau pointer doubling adalah metode pada PRAM yang digu-nakan untuk melakukan suatu proses komputasi pada struktur data linked list atau tree. Salah satu aplikasi dari pointer jumping adalah mencari jalan dari leaf ter-bawah ke root dari suatu struktur data tree.

2.7.2 Parallel Prefix Sum

Parallel prefix sumadalah suatu algoritma paralel yang digunakan untuk menam-bahkan isi dari seluruh komponen array satu dimensi. Aplikasi pengembangan dari prefix sum sangatlah banyak dan merupakan metode dasar yang biasa digunakan untuk merancang algoritma paralel yang lain. Prefix sum, biasa juga disebut dengan scan, mempunyai dua jenis variasi yaitu metode inclusive scan dan metode exclu-sive scan. Incluexclu-sive scan merupakan prefix sum dimana setiap elemen pada index jakan ditambahkan dengan elemen pada index dibawahnya termasuk elemen pada

Gambar 2.25: Contoh aliran data pada PRAM balanced trees [CP09]

Algoritma 2.4 Algoritma paralel sederhana untuk sum scan [SHG08]

for d := 1 to log2n do forall k in parallel do

if k ≥ 2d then x[k] = x[k − 2d−1] + x[k];

index j, sedangkan exclusive scan mempunyai pengertian yang sama dengan in-clusive scan tetapi elemen pada index j tidak ikut ditambahkan. Persamaan 2.17 merupakan persamaan dari metode inclusive scan.

[a0, a1, . . . , an−1] ⇒ [a0, (a0+ a1), . . . , (a0+ a1+ . . . + an−1)] (2.17)

Algoritma 2.4 merupakan algoritma sederhana dan tidak work-efficient untuk melakukan prefix sum pada array x dengan jumlah elemen n dan jumlah prosessor adalah k. Algoritma tersebut menganggap bahwa jumlah prosessor sama dengan jumlah elemen yang ada pada array. Pada mesin yang mengolah data lebih banyak dari jumlah prosessor, maka akan terjadi kondisi race, yaitu kondisi dimana hasil perhitungan suatu thread ditimpa dengan hasil perhitungan thread yang lain, yang terjadi karena eksekusi paralel yang dilakukan tidak secara simultan. Untuk mengu-rangi jumlah prosessor yang dibutuhkan untuk melakukan perhitungan pada suatu array dengan besar n, buffer tambahan digunakan dalam algoritma. Penggunaan double buffermemang mengurangi jumlah prosessor yang dibutuhkan untuk suatu data array dengan jumlah elemen n, tetapi tidak menyelesaikan permasalahan

ji-Algoritma 2.5 Prefix sum dengan double buffer [SHG08]

for d := 1 to log2n do forall k in parallel do

if k ≥ 2d then

x[out][k] = x[in][k − 2d−1] + x[in][k] else

x[out][k] = x[in][k] swap(in, out)

ka data array masukan sangat besar. Algoritma 2.5 merupakan pseudocode dari algoritma scan dengan menggunakan double buffer.

Algoritma Scan Yang Work-Efficient

Perancangan algoritma scan yang work-efficient diambil dari makalah [Ble90] dan dikembangkan pada makalah [HSO07]. Pada makalah tersebut digunakan bal-anced treesuntuk melakukan penambahan setiap elemen dari array. Balanced trees yang dimaksud dari algoritma ini adalah aliran data untuk setiap proses dan bukan struktur data tree. Binary tree yang digunakan pada algoritma ini adalah binary tree dengan n leaf, mempunyai d = log2n level, dan setiap level mempunyai 2d node. Terdapat dua tahapan dalam algoritma yang dijabarkan pada makalah [HSO07], yaitu tahapan up-sweep (tahapan ini diambil dari makalah [Ble90]) dan tahapan down-sweep.

Tahapan up-sweep merupakan tahapan untuk mencari nilai penambahan dari masing-masing elemen pada array secara parsial. Tahapan up-sweep diilustrasikan pada gambar 2.26 dan implementasinya pada pseudocode 2.6. Hasil dari tahapan ini adalah jumlah masing-masing parsial data (disimpan pada akhir elemen untuk setiap parsial data) dan hasil penambahan total (disimpan pada elemen terakhir pada array) seperti yang terlihat pada gambar 2.26. Tahapan selanjutnya adalah down-sweep, yaitu tahapan untuk mengisi seluruh nilai pada elemen lain yang bukan merupakan elemen terakhir dari parsial data dengan menggunakan hasil yang telah didapatkan pada tahapan sebelumnya. Ilustrasi dari tahapan down-sweep terdapat pada gambar 2.27 dan pseudocode dari tahapan tersebut dapat dilihat pada algorit-ma 2.7. Tahapan down-sweep merupakan tahapan traversal menurun untuk men-empatkan nilai-nilai penjumlahan yang tepat untuk setiap elemen pada array.

Gambar 2.26: Tahapan up-sweep pada algoritma scan [HSO07]

Algoritma 2.6 Up-sweep pseudocode [HSO07]

for d = 0 to log2n− 1 do

forall k = 0 to n − 1 by 2d+1 in parallel do x[k + 2d + 11] = x[k + 2d1] + x[k + 2d + 11]

Gambar 2.27: Tahapan down-sweep pada algoritma scan [HSO07]

Algoritma 2.7 Down-sweep pseudocode [HSO07]

x[n − 1] = 0

for d = log2n− 1 down to 0 do

forall k = 0 to n − 1 by 2d+ 1 in parallel do t= x[k + 2d− 1]

x[k + 2d− 1] = x[k + 2d+ 1 − 1] x[k + 2d+ 1 − 1] = t + x[k + 2d+ 1 − 1]

BAB III

Dokumen terkait