Algoritma dan Pemrograman Parallel VI. O

Algoritma dan Pemrograman Parallel
by Dr. Asep Juarna

VI. OPERASI MATRIKS (Part 1)
Oleh Dr. Asep Juarna

1. Transposisi Matriks (Matrix Transpose)
Diberikan matriks A berukuran m × n (yaitu m baris dan n kolom) berikut:
 a1,1
a
 2,1
A=  M

a m −1,1
 a m,1


a1, 2

L


a1,n −1

a 2, 2

L

a 2,n −1

M

O

M

a m −1, 2 L a m −1,n −1
am,2

L

a m ,n −1


a1,n 
a 2,n 
M 

a m −1,n 
a m ,n 

Transposisi matriks A, dinotasikan dengan AT, adalah pertukaran posisi elemen-elemen
matriks sedemikian rupa sehingga setiap elemen yang menempati baris ke-i kolom ke-j
di A (yaitu ai,j) menjadi menempati baris ke-j kolom ke-i di AT (yaitu a Tj ,i = ai,j).
Dengan kata lain, setiap baris di A menjadi kolom di AT. Jelaslah elemen-elemen
matriks ai,i tidak bertransposisi sehingga susunan elemen-elemen matriks AT adalah:
a 2,1 L a m −1,1
a m ,1 
 a1,1
a
a 2, 2 L a m −1, 2
a m , 2 
 1, 2

M
O
M
M 
AT =  M


a1,n −1 a 2,n −1 L a m −1,n −1 a m ,n −1 
 a1,n
a 2,n L a m −1,n
a m ,n 

Contoh: Berikut ini adalah
transposisinya.
1
1 2 3 
B = 2
A= 
,
4

5
6


3

dua buah matriks A dan B dengan masing-masing
4 7
5 8  ,
6 9 

1 4 
A = 2 5 ,
3 6
T

1 2 3 
B = 4 5 6
7 8 9
T


Algoritma transposisi matriks berikut dirancang untuk matriks bujur sangkar (square
matrix) n × n, yaitu matriks dengan jumlah baris sama dengan jumlah kolom.

1.1.

Algoritma Sekuensial

Algoritma sekuensial transposisi matriks adalah sangat sederhana, yaitu:
procedure seq_transpose (A)
(1) for i = 1 to n do
(2) for j = 1 to i - 1 do
(3)
ai,j ↔ aj,i
(4) end for
(5) end for
Dalam algoritma di atas, ai,j ↔ aj,i adalah procedure swap berikut:
vi-1

Algoritma dan Pemrograman Parallel

by Dr. Asep Juarna

procedure swap (x, y)
(1) temp ← x
(2) x ← y
(3) y ← temp
Pada procedure seq_transpose, banyaknya iterasi pada loop (2) bergantung pada nilai i
yang diberikan pada loop (1); banyaknya iterasi akibat kedua loop tersebut adalah:
0 + 1 + 2 + 3 + ... + (n - 1) = (n - 1) × n/2 = (n2 - n)/2
Sementara itu running time procedure swap adalah konstan. Dengan demikian running
time procedure seq_transpose adalah O(n2); nilai running time ini optimal.

1.2.

Algoritma Paralel

1.2.1. IN (Interconnection Network) Perfect Shuffle
Dalam algoritma ini, n = 2q dengan q ∈ {1, 2, 3, ...}. IN Perfect Shuffle yang akan
digunakan terdiri dari n2 prosesor, yaitu: P0, P1, P2, ..., P22 q −1 (ingat, karena ada n2
prosesor, n = 2q, indeks prosesor pertama adalah 0, yaitu P0, maka indeks prosesor

terakhir, atau ke-n2, adalah n2 -1 atau 22q - 1, yaitu P22 q −1 ), yaitu sebanyak elemen
matriks yang akan dicari transpose-nya, dengan n = 2q, q ∈ {1, 2, 3, ...}. Elemen ai,j
dari matriks A dipegang oleh prosesor Pk, dengan k = 2q(i - 1) + (j - 1).

Contoh: Untuk q = 2, maka n = 22 = 4, dengan demikian matriks A berukuran 4 × 4,
dan prosesor IN Perfect Shuffle adalah P0, P1, P2, ..., P15. Elemen matriks a23 dipegang
oleh prosesor Pk dengan k = 22(2 - 1) + (3 - 1) = 6 yaitu P6, elemen matriks a32
dipegang oleh prosesor Pk dengan k = 22(3 - 1) + (2 - 1) = 9 yaitu P9, elemen a44
dipegang oleh prosesor Pk dengan k = 22(4 - 1) + (4 - 1) = 15 yaitu P15.
Untuk melihat koneksi antar prosesor, indeks-indeks prosesor dinyatakan dalam biner.
Untuk q = 2 kita mempunya prosesor-prosesor beserta indeknya sebagai berikut: P0000,
P0001, P0010, P0011, ..., P1111. Prosesor Pk terhubung ke prosesor Pm, dengan k dan m
adalah representasi biner, jika m diperoleh dengan menggeser satu posisi ke kiri secara
siklus (cyclic left shifting). Dengan aturan ini P0000 = P0 terhubung ke dirinya sendiri,
P0001 = P1 terhubung ke P0010 = P2, P0010 = P2 terhubung ke P0100 = P4, P0100 = P4
terhubung ke P1000 = P8, dan P1000 = P4 terhubung ke P0001 = P8. Lihat Gambar 6.1.

a11
P0


a12
P1

a32
P9

a13
P2

a14
P3

a21
P4

a22
P5

a23
P6


a24
P7

a33
P10

a34
P11

a41
P12

a41
P13

a43
P14

a44

P15

Gambar 6.1. Perfect Shuffle 16 prosesor

vi-2

a31
P8

Algoritma dan Pemrograman Parallel
by Dr. Asep Juarna

Dengan n = 2q, setelah q pergeseran siklus bit-bit indeks prosesor, elemen aij dari
matriks A yang semula dipegang prosesor Pk, dengan k = 2q(i - 1) + (j - 1), sekarang
dipegang oleh Pr, dengan r = 2q(j - 1) + (i - 1), yaitu prosesor yang semula memegang
elemen aji dari matriks A.
Contoh: Kembali, misalkan q = 2; IN Perfect Shuffle terkait seperti gambar di atas.
Pada gambar tersebut mula-mula P1 = P0001 memegang elemen a12. Pada pergeseran
pertama elemen a12 ini berpindah ke P2 = P0010. Pada pergeseran kedua elemen a12 ini
akhirnya berpindah ke P4 = P0100, yaitu prosesor yang semula memegang a21. Di lain

pihak, pada pergeseran pertama elemen a21 yang mula-mula dipegang oleh prosesor P4
= P0100 berpindah ke P8 = P1000, dan pada pergeseran kedua elemen a21 ini akhirnya
berpindah ke P1 = P0001 yang mula-mula memegang a12. Perhatikan bahwa setelah 2
pergeseran ini P0 dan P15 sama sekali tidak memindahkan elemen matriks yang
dipegangnya sedangkan elemen yang dipegang P5 dan P10 kembali kepada keadaan
semula setelah dua pergeseran ini, seperti terlihat pada Gambar 6.1.
Dengan demikian, procedure transpose matriks A menggunakan IN Perfect Shuffle
adalah sebagai berikut:
procedure par_shuffle_transpose (A)
(1) for i = 1 to q do
(2) for k = 1 to 22q - 2 do in parallel {'-2' karena P0 dan P2 2 q tidak diikutsertakan}
(3.1)
r ← 2 k mod( 2 −1)
(3.2)
Pk mengirimkan elemen yang dipegangnya ke Pr
(4) end for
(5) end for
2q

Langkah (3.1) dan (3.2) memerlukan waktu konstan, sedangkan iterasi (1) terdiri dari q
langkah atau log n langkah mengingat n = 2q. Dengan demikian running time
procedure par_shuffle_transpose di atas adalah t(n) = O(log n). Jumlah prosesor yang
digunakan adalah p(n) = n2 sehingga cost procedure ini adalah c(n) = O(n2 log n) yang
tidak optimal karena running time procedure sekuensial adalah lebih kecil, yaitu
O(n2).
Latihan:
(Kerjakan dan kirim hasilnya ke ajuarna@staff.gunadarma.ac.id)
1. Periksa Gambar 6.1 dan tunjukkan dalam tabel bahwa memang benar prosesor Pk
terhubung ke prosesor Pm, dengan k dan m adalah representasi biner, jika m
diperoleh dengan menggeser satu posisi ke kiri secara siklus (cyclic left shifting).
2.

Tabel di samping menyatakan elemen
matriks A yang dipegang oleh masingmasing dari 16 prosesor IN perfect shuffle
pada kondisi, q = 1, dan q = 2. Lengkapi
tabel tersebut berdasarkan Gambar 6.1.
Periksa, apakah kondisi akhir (q = 2), jika
dibandingkan
dengan
kondisi
awal,
memperlihatkan
peristiwa
transpose
matriks?

vi-3

P0
P1
P2
M
P15

Elemen yang dipegang
Awal q = 1 q = 2
a11
a11
a11
a12
a31
a21
a13

a44

Algoritma dan Pemrograman Parallel
by Dr. Asep Juarna

1.2.2. SIMD-EREW
Pada awalnya seluruh elemen matriks A berukuran n × n tersimpan di dalam shared
memory bersama dengan informasi posisi baris dan kolomnya (indeks) (i, j). Tugas
setiap prosesor SIMD-EREW adalah menukarkan elemen matriks berindeks (i, j)
dengan elemen matriks berindeks (j, i). Selanjutnya adalah fakta bahwa dalam
transposisi matriks A semua elemen matriks A berindeks (i, i) tidak mengalami
transposisi. Dengan tugas dan fakta ini maka jumlah prosesor SIMD-EREW yang
diperlukan adalah p(n) = (n2 - n)/2. Untuk n = 3, proses transposisi ini diperlihatkan
pada Gambar 6.2. Dalam gambar tersebut prosesor-prosesor P21, P32, dan P31 berturutturut bertugas menukarkan elemen-elemen matriks a21 dengan a12, a32 dengan a23, dan
a31 dengan a13.

P21
a11 a12 a13
a21 a22 a23
a31 a32 a33
P32
P31
Gambar 6.2. Transposisi matriks A berukuran 3 × 3 dengan 3 prosesor.

Dengan demikian, procedure transpose matriks A menggunakan SIMD-EREW adalah
sebagai berikut:
procedure par_SIMD-EREW_transpose (A)
(1) for i = 2 to n do in parralel
(2) for j = 1 to i - 1 do in parallel
(3)
ai,j ↔ aj,i
(4) end for
(5) end for

Running time procedure swap (yaitu ai,j ↔ aj,i) adalah konstan sehingga running time
procedure par_SIMD-EREW transpose adalah konstan, atau t(n) = O(1), sehingga
cost procedure ini adalah c(n) = p(n) × t(n) = O(n2) yang berarti procedure par_SIMDEREW transpose adalah cost optimal.

vi-4