Pengantar Komputasi Matrik

Komputasi Matrik telah menjadi dasar dalam berbagai komputasi sains. Salah satu komputasi matrik yang sangat penting adalah perkalian matrik. Beberapa bahasan komputasi matrik dalam kaitan dengan algoritma paralel akan kita bahas cukup banyak disini, diantaranya akan meliputi matrik transpos, perkalian matrik-vektor dan masalah konvolusi.

Algoritma perkalian matrik telah banyak digunakan diberbagai aplikasi sebagai salah satu komponen komputasinya, baik pada masalah numerik maupun non-numerik. Contoh non masalah non-numerik misalnya pada Teori Graph. Pada teori ini banyak menggunakan Perkalian Matrik Boolean.

Produk dari matrik A (p x q) dan matrik B (q x r) adalah matrik C (p x r) yang elemen-elemen nya didefinisikan sebagai berikut :

Untuk \( 0 \leq i \leq p-1 \) dan  \( 0 \leq j \leq r-1 \) dimana \( \vee \) berarti operasi exclusice-OR dan \( \wedge \) adalah operasi AND bitwise.

Jika A dan B adalah matrik Boolean, maka matrik produk C juga akan berupa boolean matrik

Dalam komputasi serial, batas bawah dari kompleksitas perkalian matrik dengan dua matrik n x n diketahui sebesar Ω(n2), karena ada n2 elemen yang terlibat dalam menghasilkan matrik perkalian ini dan diperlukan waktu selama O(n2).

Dalam algoritma perkalian serial baik matrik pada umumnya maupun matrik boolean, akan membutuhkan O(n3) jika semua matrik yang terlibat berukuran n x n

Perkalian Matrik pada model SIMD Mesh 2-D

 

Berikut adalah algoritma perkalian matrik paralel yang disampaikan oleh Quinn

Algoritma MATRIX MULTIPLICATION (2-D MESH SIMD)

 

Global n (dimensi dari matrik), k

Local   a, b, c

begin

{stagger matrices}

for k $latex \leftarrow $ 1 to n – 1 do

for all P(i, j) where 1 \( \leqslant \) i, j \( \leqslant \) n do

if i > k then

a \(\Leftarrow\) east(a)

endif

if j > k then

b \(\Leftarrow\) south(b)

endif

endfor

endfor

{ Compute dot products }

for all P(i, j) where 1 \( \leqslant \) i, j \( \leqslant \) n do

c \(\leftarrow\) a x b

endfor

for k \(\leftarrow\) 1 to n – 1 do

for all P(i, j) where 1 \( \leqslant \) i, j \( \leqslant \) n do

a \(\Leftarrow\) east(a)

b \(\Leftarrow\) south(b)

c \(\leftarrow\) c + a x b

endfor

endfor

end

 

Berikut adalah alogritma Perkalian Matrik Paralel pada Komputer Mesh dengan koneksi memutar (wraparound) menurut Pranay Chaudhury

Komputer Mesh Connected dengan Koneksi Berputar (wraparound connection) di gambaran sebagai berikut :

 

(Gambar 6.2 : (a) Penempatan Data Awal; (b) pengaturan data sebelum proses perkalian matrik dimulai

Algorithm MESH_MATRIX_MULTI1

Input : Elemen A[i,j] dan B[i,j] dari matrik A dan B yang akan diperkalikan tersedia di dalam prosesor-prosesor pij , 1 \( \leqslant \) i, j \( \leqslant \) n-1

Ouput : Elemen C[i,j] yang akan tersimpan di dalam prosesor pij , 0 \( \leqslant \) i, j \( \leqslant \) n-1

for i = 1 to n – 1 dopar

for s = 1 to i do

     for j = 0 to n – 1 dopar

A [i,j] := A[i,(j+1) mod n]

odpar

   od

odpar

for j = 1 to n – 1 dopar

for t = 1 to j do

     for i = 0 to n – 1 dopar

B [i,j] := B[(i+1) mod n, j ]

odpar

   od

odpar

for j = 1 to n – 1 dopar

     for i = 0 to n – 1 dopar

C [i,j] := A[i,j] x B[i,j]

odpar

odpar

for k = 1 to n – 1 do

for i = 0 to n – 1 dopar

     for j = 0 to n – 1 dopar

A [i,j] := A[i,(j+1) mod n];

B [i,j] := B[(i+1) mod n, j ];

C [i,j] := C [i,j] + A[i,j] x B[i,j]

odpar

   odpar

odpar

Perkalian Matrik pada Model PRAM

Berikut adalah algoritma perkalian dua buah matrik yang mempunyai ukuran n x n pada model SIMD shared memory dan kemudian kita akan menganalisa pada batasan-batasan akses memory yang berbeda-beda.

Walaupun untuk penyederhanaan, disini dibahas menggunakan matrik yang berukuran n x n , tetapi kita bisa mengenralisir hal ini dengan mengasumsikan ukuran matrik A, B, dan C sebagai p x n, n x q dan p x q. Hal ini masih akan valid selama \(p \leq n \) dan  \(q \leq n \)

Algorithm PRAM_MATRIX_MULT

Input : dua buah matrik A dan B

Ouput : sebuah matrik C = A x B

for i = 0 to n – 1 dopar

for j = 0 to n – 1 dopar

C[i,j] := 0

for k = 0 to n – 1 do

C[i,j] = C[i,j] + A[i,k] x B[k,j]

od

odpar

odpar

 

Analisa Kompleksitas

Jika kita asumsikan model komputasi yang digunakan adalah EREW PRAM, maka pembacaan matrik A dan matrik B secara bersamaan dapat dilakukan dengan menggunakan buah prosesor dan dalam waktu O(log n) menggunakan algoritma PARALLEL_BCAST (bab 5.3.2 Chaudhuri)

Ada 2 (dua) pernyataan di dalam for-loops bersarang pada algoritma PRAM_MATRIX_MULT. Yang pertama adalah menginisalisasi semua elemen dari Matrik C menjadi 0 (nol) dan yang lainnya menghitung elemen-elemen di C menggunakan produk kumulatif. Sebuah produk kumulatif adalah operasi perkalian-tambah dalam bentuk c + a x b. Inisialisasi (pemberian nilai awal) dari C membutuhkan waktu O(1) dengan menggunakan n2 buah prosessor. Perkalian kumulatif dapat dilakukan secara mudah, dalam paralel, dengan pertama kali menghitung semua produk dalam bentuk A[i,k] x B[k,j] untuk k = 0, 1, . . ., n – 1 dalam waktu O(1) menggunakan n buah prosessor.

 

 

 

 

 

 

 

Analisa Kompleksitas Algoritma Paralel

[Ke Urutan Pembelajaran Paralel]

Pada saat sebuah algoritma digunakan untuk memecahkan sebuah persoalan, maka performance dari algoritma tersebut akan dinilai. Hal ini berlaku untuk algoritma, baik algoritma sekuensial maupun algoritma paralel. Penampilan sebuah algoritma pengolahan peralel dapat dinilai dari beberapa kriteria, seperti running time dan banyaknya prosesor yang digunakan.

Running Time

  • Running time adalah waktu yang digunakan oleh sebuah algoritma untuk menyelesaikan masalah pada sebuah komputer paralel dihitung mulai dari saat algoritma mulai hingga saat algoritma berhenti. Jika prosesor-prosesornya tidak mulai dan selesai pada saat yang bersamaan, maka running time dihitung mulai saat komputasi pada prosesor pertama dimulai hingga pada saat komputasi pada prosesor terakhir selesai.

Counting Steps

  • Untuk menentukan running time, secara teoritis dilakukan analisa untuk menentukan waktu yang dibutuhkan sebuah algoritma dalam mencari solusi dari sebuah masalah. Hal ini dilakukan dengan cara menghitung banyaknya operasi dasar, atau step (langkah), yang dilakukan oleh algoritma untuk keadaan terburuknya (worst case).

Langkah-langkah yang diambil oleh sebuah algoritma dibedakan ke dalam dua jenis yaitu :

  • Computational step

Sebuah computational step adalah sebuah operasi aritmetika atau operasi logika yang dilakukan terhadap sebuah data dalam sebuah prosesor.

  • Routing step.

Pada routing step, sebuah data akan melakukan perjalanan dari satu prosesor ke prosesor lain melalui shared memory atau melalui jaringan komunikasi.

Speedup

  • Pengukuran speedup sebuah algoritma paralel adalah salah satu cara untuk mengevaluasi kinerja algoritma tersebut.
  • Speedup adalah perbandingan antara waktu yang diperlukan algoritma sekuensial yang paling efisien untuk melakukan komputasi dengan waktu yang dibutuhkan untuk melakukan komputasi yang sama pada sebuah mesin pipeline atau paralel.

[Ke Urutan Pembelajaran Paralel]

Paradigma Komputer Paralel

[Ke Urutan Pembelajaran Paralel]

Menurut T.G.Lewis, komputer paralel dikelompokkan menjadi :

TG_Lewis

Synchronous :

  • Pada komputer paralel yang termasuk dalam kategori ini terdapat koordinasi yang mengatur beberapa operasi untuk dapat berjalan bersamaan sedemikian hingga tidak ada ketergantungan antar operasi.
  • Parallelism yang termasuk dalam kategori ini adalah vector/array parallelism, SIMD dan systolic parallelism.
  • Systolic parallel computer adalah multiprocessor dimana data didistribusikan dan dipompa dari memory ke suatu array prosesor sebelum kembali ke memory.

Asynchronous :

  • Pada komputer paralel asynchronous, masing-masing prosesor dapat diberi tugas atau operasi yang berbeda-beda dan masing-masing prosesor melaksanakan operasi tersebut secara sendiri-sendiri tanpa perlu koordinasi.
  • Paradigma yang juga termasuk dalam kategori ini adalah MIMD dan reduksi.
  • Paradigma reduksi adalah paradigma yang berpijak pada konsep graph reduksi. Program dengan model reduksi diekspresikan sebagai graph alur data. Komputasi berlangsung dengan cara mereduksi graph dan program berhenti jika graph akhirnya tinggal mempunyai satu simpul saja.

MICHAEL J. QUINN  membedakan paralelism dalam dua jenis :
Data Parallelism dan Control Parallelism.

  • Data Parallelism : penerapan operasi yang sama secara simultan terhadap elemen-elemen dari kumpulan data.
  • Control Parallelism : penerapan operasi-operasi berbeda terhadap elemen-elemen data yang berbeda secara bersamaan. Pada control parallelism memungkinkan terjadinya aliran data antar proses dan kemungkinan terjadi aliran data yang kompleks/rumit. Pipeline merupakan satu kasus khusus dari control parallelism dimana aliran data membentuk jalur yang sederhana.

Controled_Paralelism

M. J. FLYNN.
Pengklasifikasian oleh Flynn, dikenal sebagai Taksonomi Flynn yang membedakan komputer paralel ke dalam empat kelas berdasarkan konsep aliran data (data stream) dan aliran instruksi (instruction stream), yaitu : SISD, SIMD, MISD, MIMD.

SISD (Single Instruction stream, Single Data stream)

  • Komputer tunggal yang mempunyai satu unit kontrol, satu unit prosesor dan satu unit memori.

BaganSISD

SIMD  (Single Instruction Multiple Data stream)

  • Komputer yang mempunyai beberapa unit prosesor di bawah satu supervisi satu unitcommon control. Setiap prosesor menerima instruksi yang sama dari unit kontrol, tetapi beroperasi pada data yang berbeda.

BaganSIMD

MISD (Multiple Instruction Single Data stream)

  • Sampai saat ini struktur ini masih merupakan struktur teoritis dan belum ada komputer dengan model ini.

BaganMISD

MIMD (Multiple Instruction Multiple Data stream)

  • Organisasi komputer yang memiliki kemampuan untuk memproses beberapa program dalam waktu yang sama. Pada umumnya multiprosesor dan multikomputer termasuk dalam kategori ini.

BaganMIMD

[Ke Urutan Pembelajaran Paralel]

Terminologi Pemrosesan Paralel

[Ke Urutan Pembelajaran Paralel]

Pemrosesan Paralel (Parallel Processing)

  • Pemrosesan Paralel adalah pemrosesan informasi yang menekankan pada manipulasi secara serentak pada elemen-elemen data di satu atau lebih prosesor untuk memecahkan sebuah masalah.
  • Dimaksudkan untuk mempercepat komputasi dari sistem komputer dan menambah jumlah keluaran yang dapat dihasilkan dalam jangka waktu tertentu

Komputer Paralel

  • Komputer yang memiliki kemampuan untuk melakukan pengolahan paralel

Super Komputer

  • Sebuah general-purpose computer yang mampu menyelesaikan problem dengan kecepatan komputasi sangat tinggi.
  • Semua superkomputer kontemporer adalah komputer paralel. Beberapa di antaranya memiliki prosesor yang sangat kuat dalam jumlah yang relatif sedikit, sementara yang lainnya dibangun oleh mikroprosesor tetapi dalam jumlah yang cukup besar.

Throughput

  • Banyaknya keluaran yang dihasilkan per unit waktu
  • Peningkatan Throughput artinya :
    • Meningkatkan kecepatan operasi
    • Meningkatkan jumlah operasi yang dapat dilakukan
      dalam satu waktu tertentu (concurency)

Pipeline

  • Pada komputasi pipelined, komputasi dibagi ke dalam sejumlah langkah yang masing-masing disebut sebagai segmen, atau stage. Output dari sebuah segmen menjadi input segmen yang lain.

Data Parallelism

  • pemakaian unit multifungsi untuk melakukan operasi yang sama secara serentak terhadap sekumpulan data.

Speedup / Percepatan

Rasio/perbandingan antara terhadap waktu yang diperlukan untuk bagi algoritma yang sekuensial yang paling efisien dengan waktu yang diperlukan  untuk menjalankan operasional yang sama pada komputer paralel.

[Ke Urutan Pembelajaran Paralel]

Pengenalan dan Latar Belakang Komputasi dan Algoritma Paralel

[Ke Urutan Pembelajaran Paralel]

Pada terdahulu, teori-teori ilmu klasik dikembangkan berdasarkan obeservasi, teori dan experience/pengalaman.

  • Dari observasi yang dilakukan pada fenomena tertentu akan dihasilkan suatu hipotesa
  • Teori-teori dikembangkan untuk menerangkan fenomena
  • Dan akhirnya menggunakan Design Experimen untuk menguji teori nya. (Biasanya sering dilakukan secara fisik, dan berbiaya mahal, terkadang waktu yang lama dan tidak etis)

Saat ini Experimen lebih banyak dilakukan secara simulasi numerik, sehingga membutuhkan konstruksi komputasi yang sangat kuat. Baik fisik mesin komputer yang digunakan maupun algoritma yang paling efisien . Ukuran komputasi yang semakin meningkat secara significant akhirnya tidak dapat lagi dilakukan dengan hanya menggunakan komputer dengan single processor, tapi sudah memerlukan dukungan mesin komputasi yang memiliki lebih dari satu prosessor.

Contoh kebutuhan akan komputer paralel :

Oceanographer pada Oregon State University akan mensimulasikan secara numerik sirkulasi global dari samudra dengan membagi laut sebagai berikut:

  • 4096: dari timur ke barat
  • 1024 dari utara ke selatan
  • 12 lapisan laut

Hal ini berarti membutuhkan 4096 X 1024 X 12 ? ± 50 juta sel matrik. Jika setiap bagian (iterasi) butuh 10 menit dengan 30 milyar kalkulasi floating point maka tentu memerlukan komputer yang EXTREMELY HIGH SPEED

[Ke Urutan Pembelajaran Paralel]

Perkalian Matrik pada Mesh

Asumsikan bahwa kita akan mengalikan dua matrik A dan B yang berukuran n x n pada komputer SIMD Mesh Connected dengan n2 prosesor.

1. Batas bawah untuk Perkalian Matrik pada Mesh

Asumsi :

(A1) Setiap anggota matrik yang akan diperkalikan hanya diwakilkan hanya satu kali pada model komputasi

(A2) Tidak ada 2 (dua) anggota matrik yang sama disimpan pada prosesor yang sama

Teorema :

Berdasarkan asumsi A1 dan A2 di atas, dan tanpa menggunakan sembarang fasilitas broadcast, perkalian dari dua matrik A dan B yang berukuran n x n yang akan menghasilkan C yang juga berukuran n x n, paling tidak akan membutuhkan langkah pergerakan data, dimana \( \beta (2d) \geq n^2 \)

2. Perkalian Matrik pada Mesh dengan Koneksi Berkeliling (Wraparound)

Komputer Mesh Connected dengan Koneksi Berkeliling bisa digambarkan seperti gambar berikut :

matrix0007

Asumsi bahwa matrik yang akan diperkalikan berukuran n x n dan banyaknya prosesor di Mesh adalah n2 . pij adalah prosesor pada baris ke dan kolom ke j, dan terhubung dengan prosesor p(i-1)j , pi(j+1), p(i+1)j, dan pi(j-1), jika ada. Sebagai tambahan, diasumsikan bahwa pada bagian batas-batas tepian dari Mesh saling terhubung. Keterhubungan keliling ini menjadikan semua proses penjumlahan dan pengurangan menggunakan modulo n.

Algoritma MESH_MATRIX_MULT1

Input : anggota-2  A[i,j] dan B{i,j] dari matrik A dan B tersedia di prosesor pij, \( 0 \leq i, j \leq n – 1 \)

Ouput : Elemen C[i,j] dari produk matrix tersedia di prosesor pij , \( 0 \leq i, j \leq n – 1 \)

for i =1 to n – 1 dopar

for s = 1 to i do

for j = 0 to n -1 dopar

A[i,j] := A[i, {j+1) mod n]

odpar

od

odpar

forj = 1 to n – 1 dopar

for t = 1 to j do

for i = 0 to n -1 dopar

B[i,j] := B[(i+1) mod n, j]

odpar

od

odpar

for i = 0 to n – 1 dopar

for j = 0 to n – 1 dopar

C[i,j] := A[i,j] x B[i,j]

odpar

odpar

for k = 0 to n – 1 do

for i = 0 to n – 1 dopar

for j = 0 to n – 1 dopar

A[i,j] := A[i, (j+1) mod n]

B[i,j] := B[(i+1) mod n, j]

C[i,j] := A[i,j] x B[i,j]

odpar

odpar

od

Analisa Kompleksitas

 

 

 

 

Tampak jelas bahwai perulangan for paralel pertama membutuhkan tidak lebih dari O(n) waktu.

Kita bisa melakukan pergeseran baris (row-shifting) dalam n/2 langkah paralel dengan cara menggeser elemen tersebut ke kanan ketika angka perpindahan lebih besar dari n/2.

Begitupun, paralel kedua statemen for perpindahan kolomnya membutuhkan O(n) waktu. Kita belum memulai operasi aritmatika. Operasi aritmatika ditampilkan pada perulangan for yang ketiga dan keempat. Perulangan for yang ketiga secara nyata membutuhkan O(1) waktu paralel. Terakhir, perulangan for yang keempat membutuhkan O(n) waktu sejak badan dari perulangan for ini terdiri dari dua perulangan for paralel bersarang bisa diimplementasikan pada O(1) waktu. Karena itu, waktu keseluruhan kompleksitas algoritma MESH_MATRIX_MULTI adalah O(n) pada sebuah mesh dengan n2 prosesor. Dengan jelas, algoritma ini optimal untuk melihat ?(n) untuk bound yang lebih rendah pada waktu komputasi untuk perkalian matrik pada mesh dua dimensi. Nilai dari algoritma adalah O(n3 ) yang seperti algoritma straightforward serial matrix multiplication.

 

 

 

 

 

 

3. Perkalian Matrik pada Mesh tanpa Koneksi Berkeliling (Wraparound) 

 

 

 

 

Pada bagian ini, kita membahas algoritma perkalian matrik pada mesh dua dimensi yang terhubung dengan komputer tanpa koneksi wraparound. Pada model ini prosesor dihubungkan denga keempat yang terdekat kecuali prosesor yang ada di perbatasan yang juga terhubung dengan keduanya (Kasus : permasalahan disudut- sudut prosesor), atau ketiganya (perbatasan disetiap empat sudut prosesor).

Kita mengasumsikan bahwa algoritma dari elemen A dan B dikirim ke batas prosesor di dalam baris dan kolom pertama dari permasalahan masing- masing. Elemen- elemen dari matriks dikirimkan melalui baris 1 dari A setelah baris i-1, untuk 1 ? j ? n-1. Begitupun kolom j dari B dilaksanakan setelah kolom j-1, untuk 1 ? j ? n-1. ini menjelaskan dari gambar 6.3a untuk kasus- kasus matriks 2 x 2. tiap prosesor pij diatas menerima A[i,k] dan B[k,j, untuk 0 ? k ? n-1, melipatgandakan dan menambahkan hasil ke bagian hasil C[i,j] (C[i,j] menginisialkan ke 0 dari semula). Akhirnya, pij mengirim A[i,k] ke pi(j+1) jika 1 < n-1 dan B[k,j] ke p(i+1)j jika i < n-1. proses ini terus berulang hingga produk matriks C = A x B terpenuhi sebagai output. Algoritma paralel berdasarkan ide diatas seperti dibawah ini.

Algoritma MESH_MATRIX_MULT2

 

 

 

 

Input: elemen- elemen A[i,j] dan B[i,j,i] = 0,1,…,n-1 dari A dan B dikirimkan ke prosesor dari kolom paling kiri (j=0) dan baris paling atas (i-0), masing- masing.

Ouput: matriks C = A x B disimpan jadi elemen- elemen C[i,j] tersedia diprosesor pij,i,j = 0,1,…,n-1

For i = 0 to n-1 dopar

For j = 0 to n-1 dopar

C[i,j] := 0

Odpar

Odpar

For i = 0 to n-1

For j = 0 to n-1 dopar

While (pij receives A[i,k] and B[k,j], k ? (0,1,…,n-1) do

C[i,j] := C[i,j] + A[i,k] x B[k,j]

If i<n-1

Then send B[k,j] to p(i+1)j

Fi

If j < n-1

Then send A[i,k] to pi(j+1)

Fi

Od

Odpar

Odpar

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Paralel Algorithm Design and Analysis: Sebuah Urutan Pembelajaran

Sebuah usulan urutan pembelajaran Algoritma Dan Pemrosesan Paralel

  1. Pengenalan dan latar belakang
  2. Terminologi Komputer Paralel
  3. Models dan Paradigma Komputer Paralel
  4. Processor Arrays, Multiprocessors, dan Multicomputers
    1. Organisasi Processor
      1. Cube Connected Cycles Networks
      2. Shuffle-Exchange Networks
  5. Analisa Kompleksitas Algoritma Paralel
  6. Algoritma-algoritma PRAM
    1. Parallel Reduction
    2. Prefix Sums
    3. List Ranking
    4. Preorder Tree Traversal
    5. Merging Two Sorted Lists
    6. Graph Coloring
  7. Sorting
    1. Enumeration Sort
    2. Lower Bounds On Parallel Sorting
    3. Ood-even Transposition Sort Algorithm
    4. Bitonic Merge
    5. Bitonic Merge pada Shuffle-Exchange Nework
  8. Selection dan Searching
  9. Komputasi Matriks
    1. Pengantar Komputasi Matrik
    2. Perkalian Matrik secara umum
      1. Perkalian Matrik pada  model PRAM
      2. Perkalian Matrik pada Mesh
      3. Perkalian Matrik pada model SIMD Mesh 2-D
  10. Algoritma untuk Grap Tak Berbobot
  11. Algoritma untuk Grap Berbobot

Penggabungan/Merging pada model CREW PRAM

Sumber : Parallel Algorithms, Design and Analysis by Pranay Chaudhuri

Algoritma ini ditujukan untuk menggabungkan dua buah list yang panjangnya sama, n., dan jumlah prosesor yang digunakan juga n buah.

Algoritma MERGE1_CREW

Input : Dua buah list terurut

p { margin-bottom: 0.21cm; }

Input : Dua buah list terurut yaitu X={ x1, x2, … ,xn} dan Y={ y1, y2, … ,yn}

Ouput : List terurut Z={ z1, z2, … , z2n} yang merupakan hasil penggabungan dari X dan Y

for i = 1 to n dopar

temukan yj yang paling kecil sedemikian sehingga (such that) xi < yj

if yj ditemukan (exists)

then zi+j -1 :=xi

else zn+i :=xi

fi

temukan xj yang paling kecil sedemikian sehingga (such that) yi < xj

if xj ditemukan (exists)

then zi+j -1 :=yi

else zn+i :=yi

fi

odpar

Semua n prosesor mengeksekusi 4 langkah di dalam loop pada algoritma MERGE1_CREW secara paralel.

Untuk menemukan  yyang paling kecil sedemikian sehingga xi < yj  dan  xj yang paling kecil sedemikian sehingga yi < xj   kita bisa menggunakan algoritma serial  binary search. Binary Search ini membutuhkan waktu O(log n)  pada single prosesor untuk setiap i. Sedang untuk proses yang lainnya hanya membutuhkan waktu O(1) saja. Karena itu secara keseluruhan kompleksitas dari algoritma ini adalah O(log n) dengan menggunakan n buah prosesor.

Walaupun algoritma ini cukup sederhana dan mudah dimengerti tapi  :

  • hanya berlaku jika kedua list terurut yang akan digabungkan memiliki panjang yang sama
  • hanya berlaku jika tidak ada elemen yang sama yang muncul antara X dan Y, jika terdapat yang sama maka algoritma ini bisa digunakan dengan asumsi bahwa elemen yang sama di X dianggap lebih kecil dari elemen yang sama di Y
  • secara cost masih sangat mahal, yaitu O(n log n)

Selanjutnya akan dikenalkan algoritma lain yang lebih umum, yang tidak mengharuskan ukuran List Terurut nya sama, jumlah prosesor pun dapat dibatasi sesuai dengan ketersediaan/kebutuhan. Algoritma ini bernama Algorithm MERGE2_CREW.

p { margin-bottom: 0.21cm; }

Input : Dua buah list terurut yaitu X={ x1, x2, … ,xm} dan Y={ y1, y2, … ,yn}, dimana m ?n

Ouput : List terurut Z={ z1, z2, … , zm+n} yang merupakan hasil penggabungan dari X dan Y

for i = 1 to P-1 dopar

/* Setiap prosesor i akan menemukan xis dan yis dari list X dan Y secara berurutan sehingga membentuk list Xs ={ x1s, x2s, … ,x(P-1)s} dan Ys ={ y1s, y2s, … ,y(P-1)s} */

x1s = xi? m/P?;

y1s = yi? n/P?;

odpar

for i = 1 to P-1 dopar

/* Langkah berikut ini akan membentuk list L yang panjangnya 2P-2. L dihasilkan dalam bentuk array (2P-2) x 3, dimana setiap k ( 1 ? k ? 2P-2), L(k,1) memuat nilai dari elemen ke-k dalam gabungan dari Xs dan Ys ; L(k,2) memuat index dari posisi aslinya di dalam Xs atau Ys ; dan L(k,3) mencatat dari mana X atau Y yang menjadi sumber dari nilai tersebut) */

Temukan j yang paling kecil sedemikian sehingga xis < yjs ;

If yjs exists/ada

Then do

L(i+j-1,1) := xis ;

L(i+j-1,2) := i ;

L(i+j-1,3) := X ;

od

else do

L(i+P-1,1) := xis ;

L(i+P-1,2) := i ;

L(i+P-1,3) := X ;

od

fi

Temukan j yang paling kecil sedemikian sehingga yis < xjs ;

If xjs exists/ada

Then do

L(i+j-1,1) := yis ;

L(i+j-1,2) := i ;

L(i+j-1,3) := Y ;

od

else do

L(i+P-1,1) := yis ;

L(i+P-1,2) := i ;

L(i+P-1,3) := Y ;

od

fi

odpar

for i = 1 to P dopar

/* Setiap prosesor i akan menemukan titik awalnya BX(i) dan BY(i) untuk penggabungan dua sublist dari X dan Y, dengan kata lain prosesor i akan bertanggung jawab terhadap penggabungan sublists yang diawali dengan xBX(i) dan yBX(i) di dalam X dan Y, secara berurutan */

if i = 1

then do

BX(1) := 1;

BY(1) := 1

od

else if L(2i – 2,3) = X

then do

Temukan j yang paling kecil sedemikian sehingga L(2i – 2,1) < yj ;

BX(i) := L(2i – 2,1) ? m/P? ;

BY(i) := j

od

else do

Temukan j yang paling kecil sedemikian sehingga L(2i – 2,1) < xj ;

BX(i) := j;

BY(i) := L(2i – 2,2) ? n/P? ;

od

fi

fi

odpar

for i = 1 to P dopar

/* Setiap prosesor menggabungkan dua sublist X dan Y dan memasukkan hasilnya di Z secara serial */

if i < P

then

gabungkan sublist di X yang diawali di xBX(i) dan sublist Y yang diawali di yBY(i) hingga sebuah

elemen yang lebih besar dari atau sama dengan L(2i,1) dicapai dan setiap X dan Y dan

memasukkan hasilnya di Z diawali pada posisi BX(i) + BY(i) -1

else

gabungkan sublist dari X yang diawali di xBX(P) dan sublist Y yang diawali di yBY(P) hingga tidak

ada lagi elemen yang tersisa baik di X maupun di Y dan masukkan hasilnya ke dalam Z yang

diawali pada posisi BX(P) + BY(P) -1

fi

odpar

1 2