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
Contoh Lain
Filter frekuensi - Menghilangkan frekuensi tertentu ( katakan
f
0,
f
1,
f
2,
f
3, dst) signal,
f
(
t
). Signal dapat dilewati pipeline dari kiri
Gambar 3. Pipeline untuk filter frekuensi
Pipeline dapat 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
Diagram Ruang-Waktu Pipeline “Tipe 1”
Diagram Ruang-Waktu Pipeline “Tipe 2”
Diagram Ruang-Waktu Pipeline “Tipe 3”
Jika jumlah tahap lebih besar dari jumlah prosesor dalam pipeline, kelompok tahap dapat diassign untuk tiap prosesor
Platform Komputisai untuk Aplikasi Pipeline
Contoh Program Penjumlahan Angka
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 );
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.
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:
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)
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
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)
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 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 );
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
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
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 */
Kode Sekuensial
Waktu SekuensialDengan asumsi komputasi pada tiap iterasi sam dengan satu langkah komputasional. Kompleksitas waktu sekuensial adalah O(n2 ).
Jumlah iterasi sangat tergantung dari bilangan prima tersebut. Ada [n/2-1] kelipatan dua, [n/3-1] kelipatan tiga, dan seterusnya.
Implementasi Pipeline
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;
Menyelesaikan Sistem Persamaan Linier — Kasus
Khusus
Dimana a dan b adalah konstanta dan x adalah yang akan dicari
Contoh tipe 3 – proses dapat melanjutkan pekerjaan lain
setelah mem-passing informasi
Subtitusi Balik
Pertama, x0 dapat dilihat dari persamaan terakhir
Nilai untuk x0 disubtitusi ke persamaan berikutnya untuk mendapatkan x1
Nilai x0 dan x1 disubtitusi ke persamaan berikutnya untuk mendapatkan
x2:
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,
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:
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 );
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