Contoh Lain
Filter frekuensi - Menghilangkan frekuensi tertentu ( katakan f0,
f1, f2, f3, dst) signal, f(t). Signal dapat dilewati pipeline dari kiri
problem yang
Jika jumlah tahap lebih besar dari jumlah prosesor dalam pipeline,
kelompok tahap dapat diassign untuk tiap prosesor
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
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
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
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)
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
Subtitusi Balik
Pertama, x0 dapat dilihat dari persamaan terakhir
Solusi Pipeline
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.
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