Anda di halaman 1dari 36

Pipelined Computations

Dalam teknik pipeline, problem dibagi menjadi deretan yang harus


dilaksanakan satu setelah lainnya. Setiap tugas nantinya akan dieksekusi
oleh proses atau prosesor yang berbeda

Gambar 1 Proses pipeline

Gambar.2 Pipeline untuk penjumlahan

Contoh Lain
Filter frekuensi - Menghilangkan frekuensi tertentu ( katakan f0,
f1, f2, f3, dst) signal, f(t). Signal dapat dilewati pipeline dari kiri

Gambar 3. Pipeline untuk filter


Pipeline dapat frekuensi
meningkatkan kecepatan untuk

problem yang

sekuensial, dalam tiga tipe komputasi:


1. Jika lebih dari satu instance dari problem yang akan dieksekusi
2. Jika ada deretan item data yang harus diproses, masing-masing
membutuhkan operasi ganda
3. Jika informasi untuk memulai proses berikutnya dpt diberikan
sebelum proses selesai melaksanakan operasi internalnya

Diagram Ruang-Waktu Pipeline Tipe 1

Gambar 4. Diagram ruang waktu pipeline

Gambar 5 Diagram Ruang-Waktu Alternatif

Diagram Ruang-Waktu Pipeline Tipe 2

Gambar 6 Pemrosesan pipeline 10 elemen data

Diagram Ruang-Waktu Pipeline Tipe 3

Gambar 7 Pemrosesan pipeline, informasi di-pass sebelum proses selesai

Jika jumlah tahap lebih besar dari jumlah prosesor dalam pipeline,
kelompok tahap dapat diassign untuk tiap prosesor

Gambar 8 Partitioning processes onto processors.

Platform Komputisai untuk Aplikasi Pipeline

gambar 9 Sistem multiprosesor dengan konfigurasi

Contoh Program Penjumlahan Angka

Gambar 10 Penjumlahan Pipeline

Kode dasar untuk proses Pi :


recv(&accumulation, P i-1 );
accumulation = accumulation + number;
send(&accumulation, P i+1 );
Kecuali untuk proses pertama, P0 , yaitu
send(&number, P 1 );
Dan proses terakhir , Pn-1 , yaitu
recv(&number, P n-2 );
accumulation = accumulation + number;

Program SPMD
if (process > 0) {
recv(&accumulation, P i-1 );
accumulation = accumulation + number;
}
if (process < n-1) send(&accumulation, P i+1 );
Hasil akhir ada di proses terakhir.
Selain penjumlahan, operasi aritmatika lainnya dapat dilakukan juga

Gambar 11 Penjumlahan angka pipeline dengan proses master dan


konfigurasi cincin.

Gambar 12 Penjumlahan angka pipeline denganakses langsung ke proses


slave.

Analisa
Analisa
Contoh pertama adalah Tipe 1. Dengan asumsi bahwa tiap proses
melakukan aksi serupa dalam tiap siklus pipeline. Kemudian akan
dilakukan komputasi dan komunikasi yang dibutuhkan dalam siklus
pipeline
Waktu total eksekusi
t total = (waktu untuk satu siklus pipeline)(jumlah siklus)
t total = (t comp + t comm )(m + p 1)
Dimana ada m instances problem dan p tahap pipeline (proses)
Waktu rata-rata untuk komputasi diberikan oleh:
t a = t total /m

Instance Tunggal Problem


t comp = 1
t comm = 2(t startup + t data )
t total = (2(t startup + t data ) + 1)n
Kompleksitas waktu = O(n).

Instances Ganda Problem


t total = (2(t startup + t data ) + 1)(m + n 1)
t a = t total /m 2(t startup + t data ) + 1
Yaitu, satu siklus pipeline.

Mem-partisi Data dengan Instances Gande Problem


t comp = d
t comm = 2(t startup + t data )
t total = (2(t startup + t data ) + d)(m + n/d 1)
Dengan menaikkan d, partisi data, pengaruh komunikasi dihilangkan.
Akan tetapi naiknya partisi data menurunkan paralelisme dan
terkadang menaikkan waktu eksekusi

Mengurutkan
Angka
Versi
paralel
dari
insertion sort. (
A parallel version of
insertion sort. (versi
sekuensialnya
adalah
menempatka kartu yang
dimainkan berurut dgn
memindahkan
kartu
untuk menyisipkannya
dalam posisi-nya)

Gambar 13 Langkah
dalam insertion sort
dengan lima angka

Algortima dasar untuk proses Pi adalah


recv(&number, P i-1 );
if (number > x) {
send(&x, P i+1 );
x = number;
} else send(&number, P i+1 );
Dengan n angka, berapa banyak proses ke yang akan diterima diketahui,
diberikan oleh n i. Berapa banyak yang di pass kedepan juga diketahui;
diberikan oleh n i 1 karena satu dari jumlah yang diterima tidak di
pass kedepan. Maka loop sederhana dapat digunakan.

Gambar 14 Pipeline untuk sorting menggunakan insertion sort.

Gambar 15 Insertion sort dengan hasil kembali ke proses master


m,enggunakan konfigurasi baris dua arah

Dengan mengembalikan hasilnya, proses i dapat ditulis dalam bentuk


right_procno = n - i - 1; /*no of processes to the right */
recv(&x, P i-1 );
for (j = 0; j < right_procno; j++) {
recv(&number, P i-1 );
if (number > x) {
send(&x, P i+1 );
x = number;
} else send(&number, P i+1 );
}
send(&number, P i-1 ); /* send number held */
for (j = 0; j < right_procno; j++) {/*pass on other nos */
recv(&x, P i+1 );
send(&x, P i-1 );
}

Analisa
Sekuensial
Jelas merupakan algoritma sorting yang buruk dan tidak cocok kecuali
untuk jumlah n yang sangat kecil
ts = (n - 1) + (n - 2) + + 2 + 1 = n (n + 1) / 2
Paralel
Setiap siklus pipeline membutuhkan paling tidak
t comp = 1
t comm = 2(t startup + t data )
Waktu eksekusi total, t total , diberikan oleh
t total = (t comp + t comm )(2n 1) = (1 + 2(t startup + t data ))(2n 1)

Gambar 16 Insertion sort dengan hasil dikembalikan

Pembangkit Bilangan Prima


Deretan integer dibangkitkan dari 2. Bilangan pertama, 2, adalah prima
dan disimpan. Seluruh kelipatan bilangan ini dihilangkan karena bukan
merupakan bilangan prima. Proses dilakukan secara berulang untuk
bilangan berikutnya. Algoritma membuang nonprima, dan menginggalkan
hanya bilangan prima

Kode Sekuensial
Umumnya menggunakan array dengan nilai awal 1 (TRUE) dan diset 0
(FALSE) jika indeks elemen bukan bilangan prima.Dengan menyatakan
angka terakhir adalah n maka dapat ditulis:
for (i = 2; i < n; i++)
prime[i] = 1; /* Initialize array */
for (i = 2; i <= sqrt_n; i++)/* for each number */
if (prime[i] == 1) /* identified as prime */
for (j = i + i; j < n; j = j + i)/*strike multiples */
prime[j] = 0; /* includes already done */
Loop sederhana mengakses array untuk mencari bilangan prima

Kode Sekuensial
Waktu Sekuensial
Jumlah iterasi sangat tergantung dari bilangan prima tersebut. Ada [n/2-1]
kelipatan dua, [n/3-1] kelipatan tiga, dan seterusnya.
Sehingga total waktu sekuensial yang dibutuhkan:

Dengan asumsi komputasi pada tiap iterasi sam dengan satu langkah
komputasional. Kompleksitas waktu sekuensial adalah O(n2 ).

Implementasi Pipeline

Gambar 5.17 Pipeline untuk bilangan prima

Kode untuk proses, Pi , berdasarkan atas


recv(&x, P i-1 );
/* repeat following for each number */
recv(&number, P i-1 );
if ((number % x) != 0) send(&number, P i+1 );
Setiap proses tidak akan menerima jumlah angka yang sama dan tidak
diketahui sebelumnya. Menggunakan message terminator, yang dikirim
pada akhir urutan.
recv(&x, P i-1 );
for (i = 0; i < n; i++) {
recv(&number, P i-1 );
if (number == terminator) break;
if (number % x) != 0) send(&number, P i+1 );
}

Menyelesaikan Sistem Persamaan Linier Kasus


Khusus
Contoh tipe 3 proses dapat melanjutkan pekerjaan lain
setelah mem-passing informasi
Untuk menyelesaikan persamaan linier dalam bentuk upper
triangular:

Dimana a dan b adalah konstanta dan x adalah yang akan dicari

Subtitusi Balik
Pertama, x0 dapat dilihat dari persamaan terakhir

Nilai untuk x0 disubtitusi ke persamaan berikutnya untuk mendapatkan x 1

Nilai x0 dan x1 disubtitusi ke persamaan berikutnya untuk mendapatkan


x2:

Begitu seterusnya sampai seluruhnya diketahui

Solusi Pipeline

Gambar 5.18 Menyelesaikan set persamaan linier upper triangular


menggunakan pipeline.
Pipeline tahap pertama menghitung x0 dan di pass ke tahap kedua, yang
menghitung x1 dari x0 dan mem-pass kedua x0 dan x1 ke tahap berikutnya,
untuk menghitung x2 from x0 and x1 , dan seterusnya

Proses ke i (0 i < n) menerima nilai x0 , x1 , x2 , , x I-1 dan menghitung


xi dari persamaan :

Kode Sekuensial
Konstanta a i,j dan b k disimpan dalam array a[] dan b[], dan nilai untuk
yang dicari disimpan dalam array, x[], kode sekuensialnya:
x[0] = b[0]/a[0][0]; /* x[0] computed separately
*/
for (i = 1; i < n; i++) { /* for remaining unknowns
*/
sum = 0;
for (j = 0; j < i; j++
sum = sum + a[i][j]*x[j];
x[i] = (b[i] - sum)/a[i][i];
}

Kode Paralel
Pseudocode proses P i (1 < i n) dari satu versi pipeline adalah:
for (j = 0; j < i; j++) {
recv(&x[j], P i-1 );
send(&x[j], P i+1 );
}
sum = 0;
for (j = 0; j < i; j++)
sum = sum + a[i][j]*x[j];
x[i] = (b[i] - sum)/a[i][i];
send(&x[i], P i+1 );
Ada komputasi tambahan yang dilakukan setelah menerima dan mengirim
ulang nilai.

Gambar 5.19 Pe,mrosesan Pipeline menggunakan Subtitusi Balik.

Analisa
Tidak dapat diasumsikan usaha komputasional tiap tahap sama
Proses pertama, P0 , melakukan satu pembagian dan satu send().
Proses ke i (0 i < n 1) melakukan i recv()s, i send()s, i
perkalian/penjumlahan, satu pembagian/pengurangan,dan akhirnya
send(), total
2i + 1 waktu komunikasi dan 2i + 2 langkah
komputasional diasumsikan bahwa, perkalian, penjumlahan, pembagian
dan pengurangan tiap satu langkah.
Proses terakhir, Pn-1 , melakukan n 1 recv()s, n 1
perkalian/penjumlahan dan satu pembagian/pengurangan, total n 1
waktu komunikasi dan 2n 1 langkah komputasional

Anda mungkin juga menyukai