Perbandingan Skema Partisi Data Algoritme Pairwise Alignment Paralel pada Sistem Shared Memory.

PERBANDINGAN SKEMA PARTISI DATA ALGORITME
PAIRWISE ALIGNMENT PARALEL PADA
SISTEM SHARED MEMORY

AURIZA RAHMAD AKBAR

SEKOLAH PASCASARJANA
INSTITUT PERTANIAN BOGOR
BOGOR
2015

PERNYATAAN MENGENAI TESIS DAN
SUMBER INFORMASI SERTA PELIMPAHAN HAK CIPTA
Dengan ini saya menyatakan bahwa tesis berjudul Perbandingan Skema
Partisi Data Algoritme Pairwise Alignment Paralel pada Sistem Shared Memory
adalah benar karya saya dengan arahan dari komisi pembimbing dan belum
diajukan dalam bentuk apa pun kepada perguruan tinggi mana pun. Sumber
informasi yang berasal atau dikutip dari karya yang diterbitkan maupun tidak
diterbitkan dari penulis lain telah disebutkan dalam teks dan dicantumkan dalam
Daftar Pustaka di bagian akhir tesis ini.
Dengan ini saya melimpahkan hak cipta dari karya tulis saya kepada Institut

Pertanian Bogor.
Bogor, Maret 2015
Auriza Rahmad Akbar
NIM G651114071

RINGKASAN
AURIZA RAHMAD AKBAR. Perbandingan Skema Partisi Data Algoritme
Pairwise Alignment Paralel pada Sistem Shared Memory. Dibimbing oleh HERU
SUKOCO dan WISNU ANANTA KUSUMA.
Algoritme pairwise alignment (PA) dipakai dalam bioinformatika untuk
menjajarkan sepasang sekuens DNA atau protein. PA merupakan penyusun dasar
algoritme multiple sequence alignment (MSA) yang digunakan untuk menjajarkan
lebih dari dua sekuens sekaligus untuk menemukan homologi antar-sekuens.
Selain itu, PA dipakai dalam perakitan sekuens untuk menggabungkan hasil
pembacaan dari sequencer yang pendek-pendek menjadi satu gen utuh. Di
samping itu, PA juga dipakai untuk pencarian sekuens pada database, untuk
menemukan sekuens-sekuens yang paling mirip dengan sekuens yang dicari.
Teknologi next-generation DNA sequencer terkini mampu menghasilkan
data sekuens yang banyak, hingga ratusan milyar pasang basa (bp) dalam sekali
jalan. Data yang besar memerlukan pemrosesan yang cepat, sehingga algoritme

penjajaran perlu diparalelkan untuk mempercepat proses analisis. Beberapa
penelitian sebelumnya telah memparalelkan algoritme PA dengan berbagai skema
partisi data, akan tetapi belum diketahui skema yang memberikan kinerja terbaik.
Skema partisi data sangat mempengaruhi kinerja PA paralel, karena algoritme ini
memakai teknik pemrograman dinamis yang membutuhkan banyak sinkronisasi.
Tujuan penelitian ini adalah menerapkan algoritme PA paralel dengan
berbagai skema partisi data yang berbeda pada sistem shared-memory dan
menguji serta memperbaiki masing-masing skema untuk mendapatkan skema
yang memberikan kinerja terbaik. Skema tersebut antara lain blocked columnwise,
rowwise, antidiagonal, dan blocked columnwise dengan penjadwalan manual dan
loop unrolling. Pengujian kinerja dilakukan pada prosesor quad-core memakai
data uji sekuens DNA dengan panjang 1000 hingga 16 000 bp.
Skema antidiagonal menghasilkan kinerja terburuk dengan efisiensi 36%
karena waktu sinkronisasinya dua kali lipat lebih tinggi dan pola akses memori
yang non-linier. Skema rowwise menghasilkan efisiensi 80%, sedangkan skema
blocked columnwise menghasilkan efisiensi 75%. Kedua skema ini memiliki
waktu sinkronisasi yang hampir sama. Seharusnya skema blocked columnwise
bisa lebih baik, namun karena keterbatasan pustaka OpenMP kinerja skema ini
lebih buruk dari rowwise.
Skema blocked columnwise diperbaiki dengan menggunakan penjadwalan

manual dan loop unrolling. Penjadwalan manual mengatasi batasan pustaka
OpenMP, sehingga skema ini menjadi lebih efisien. Teknik loop unrolling
mengurangi waktu sinkronisasi menjadi setengahnya. Hasilnya, skema ini
memberikan kinerja terbaik dengan efisiensi 89%. Hasil ini memberikan
algoritme PA berkinerja tinggi dengan fine-grain parallelism yang dapat
digunakan lebih lanjut untuk mengembangkan multiple sequence alignment
(MSA) paralel.
Kata kunci: pairwise alignment, partisi data, pemrosesan paralel, shared memory

SUMMARY
AURIZA RAHMAD AKBAR. Comparison of Data Partitioning Schema of
Pairwise Alignment Algorithm on Shared Memory System. Supervised by HERU
SUKOCO and WISNU ANANTA KUSUMA.
The pairwise alignment (PA) algorithm is widely used in bioinformatics to
analyze biological sequence. It is the foundation of the multiple sequence
alignment (MSA) algorithm to align more than two sequences altogether to find
homology between sequences. It is also used in sequence assembly to construct
from sequencer’s short reads into the whole gene. Other than that, it is also used
for database sequence searching to find the most similar sequence to the one that
is given.

The next-generation DNA sequencer technology nowadays can produce a
lot of sequence data, up to hundreds of billion base pair (bp) in one run. This big
data needs faster processing, so the algorithm needs to be parallelized to speed up
the alignment process. Many previous researches have parallelize PA algorithm
using various data partitioning schema, but it is unclear which one is the best.
In this research, we parallelized PA algorithm on shared memory system
using four different data partitioning schemas: blocked columnwise, rowwise,
antidiagonal, and revised blocked columnwise. We tested and revised each
schema to obtain the highest performance possible of parallel PA algorithm. The
performance was measured on quad-core using DNA sequences with varying
length of 1000–16 000 bp.
The antidiagonal schema yields the worst performance with efficiency of
36%. It is understandable because its synchronization time is doubled and its nonlinear memory access pattern. The rowwise schema yields better performance than
blocked columnwise schema with efficiency of 80% and 75% respectively. These
two schemas have relatively same amount of synchronization time. The blocked
columnwise schema could perform better, but because of OpenMP limitation this
schema yields slightly worse performance than rowwise.
The blocked columnwise schema was then revised using manual loop
scheduling and loop unrolling. The manual loop scheduling overcomes the
OpenMP limitation and makes the synchronization more efficient. The loop

unrolling technique cuts the synchronization time into half. This revised schema
yields the best performance with efficiency of 89% on 4 threads. This result
provided fine-grain parallelism that can be used further to develop parallel
multiple sequence alignment (MSA).
Keywords: data partition, pairwise alignment, parallel processing, shared memory

© Hak Cipta Milik IPB, Tahun 2015
Hak Cipta Dilindungi Undang-Undang
Dilarang mengutip sebagian atau seluruh karya tulis ini tanpa mencantumkan
atau menyebutkan sumbernya. Pengutipan hanya untuk kepentingan pendidikan,
penelitian, penulisan karya ilmiah, penyusunan laporan, penulisan kritik, atau
tinjauan suatu masalah; dan pengutipan tersebut tidak merugikan kepentingan
IPB
Dilarang mengumumkan dan memperbanyak sebagian atau seluruh karya tulis ini
dalam bentuk apa pun tanpa izin IPB

PERBANDINGAN SKEMA PARTISI DATA ALGORITME
PAIRWISE ALIGNMENT PARALEL PADA
SISTEM SHARED MEMORY


AURIZA RAHMAD AKBAR

Tesis
sebagai salah satu syarat untuk memperoleh gelar
Magister Komputer
pada
Program Studi Ilmu Komputer

SEKOLAH PASCASARJANA
INSTITUT PERTANIAN BOGOR
BOGOR
2015

Penguji Luar Komisi pada Sidang Tesis: Dr Ir Sri Wahjuni, MT

Judul Tesis : Perbandingan Skema Partisi Data Algoritme Pairwise Alignment
Paralel pada Sistem Shared Memory.
Nama
: Auriza Rahmad Akbar
NIM

: G651114071

Disetujui oleh
Komisi Pembimbing

Dr Heru Sukoco, SSi MT
Ketua

Dr Wisnu Ananta Kusuma, ST MT
Anggota

Diketahui oleh

Ketua Program Studi
Ilmu Komputer

Dekan Sekolah Pascasarjana

Dr Wisnu Ananta Kusuma, ST MT


Dr Ir Dahrul Syah, MScAgr

Tanggal Ujian: 26 Januari 2015

Tanggal Lulus:

PRAKATA
Puji dan syukur penulis panjatkan kepada Allah ᤗ atas segala karunia-Nya
sehingga karya ilmiah ini berhasil diselesaikan, serta shalawat dan salam selalu
tercurahkan kepada Nabi Muhammad ᤖ. Tema yang dipilih dalam penelitian
yang dilaksanakan sejak bulan Oktober 2013 ini ialah pemrosesan paralel, dengan
judul Perbandingan Skema Partisi Data Algoritme Pairwise Alignment Paralel
pada Sistem Shared Memory.
Terima kasih penulis ucapkan kepada Bapak Dr Heru Sukoco dan Bapak Dr
Wisnu Ananta Kusuma selaku pembimbing, serta Ibu Dr Sri Wahjuni yang telah
banyak memberi saran. Ungkapan terima kasih juga disampaikan kepada ayah,
ibu, serta seluruh keluarga, atas segala doa dan kasih sayangnya.
Penelitian ini dapat terlaksana atas bantuan dana dari program Kerjasama
Kemitraan Penelitian dan Pengembangan Pertanian Nasional (KKP3N) tahun
2013 dari Kementerian Pertanian Indonesia.

Semoga karya ilmiah ini bermanfaat.

Bogor, Maret 2015
Auriza Rahmad Akbar

DAFTAR ISI
DAFTAR TABEL

vi

DAFTAR GAMBAR

vi

DAFTAR LAMPIRAN

vi

1 PENDAHULUAN
Latar Belakang

Perumusan Masalah
Tujuan Penelitian
Manfaat Penelitian
Ruang Lingkup Penelitian

1
1
1
2
2
2

2 TINJAUAN PUSTAKA
Pairwise Alignment (PA)
Program Paralel
Metriks Kinerja Program Paralel

3
3
3

3

3 METODE
Implementasi Pairwise Alignment Sekuensial
Implementasi Pairwise Alignment Paralel
Perbandingan Kinerja
Bahan
Alat
Prosedur Analisis Data

4
4
5
7
7
7
8

4 HASIL DAN PEMBAHASAN
Implementasi Pairwise Alignment Sekuensial
Implementasi Pairwise Alignment Paralel
Perbandingan Kinerja

9
9
11
15

5 SIMPULAN DAN SARAN
Simpulan
Saran

17
17
17

DAFTAR PUSTAKA

18

LAMPIRAN

20

RIWAYAT HIDUP

26

DAFTAR TABEL
1
2
3
4
5

Waktu eksekusi PA sekuensial
Waktu eksekusi PA paralel skema blocked columnwise pada 4 thread
Waktu eksekusi PA paralel skema rowwise pada 4 thread
Waktu eksekusi PA paralel skema antidiagonal pada 4 thread
Waktu eksekusi PA paralel skema blocked columnwise dengan
penjadwalan manual dan loop unrolling pada 4 thread

11
12
12
13
14

DAFTAR GAMBAR
1
2
3
4
5
6
7
8

Metode penelitian
4
Matriks penjajaran sekuens AGTCA dan ATGA
5
Blocked columnwise
6
Rowwise
6
Antidiagonal
6
Diagram alir algoritme PA
10
Perbandingan efisiensi tiap skema pada 4 thread
16
Perbandingan speedup skema antidiagonal (AD), blocked columnwise (BC),
rowwise (R), dan perbaikan blocked columnwise (BC2) pada 4 thread
16

DAFTAR LAMPIRAN
1
2
3
4
5
6

Implementasi algoritme PA sekuensial
Implementasi algoritme PA paralel skema blocked columnwise
Implementasi algoritme PA paralel skema rowwise
Implementasi algoritme PA paralel skema antidiagonal
Implementasi algoritme PA paralel perbaikan skema blocked columnwise
Data DNA untuk verifikasi kebenaran algoritme PA

20
21
22
23
24
25

1 PENDAHULUAN
Latar Belakang
Algoritme pairwise alignment (PA) dipakai dalam bioinformatika untuk
menjajarkan sepasang sekuens DNA atau protein. Hasil penjajaran digunakan
untuk menentukan kemiripan antara keduanya (Cohen 2004). PA menggunakan
teknik pemrograman dinamis untuk memperoleh hasil penjajaran optimal dengan
kompleksitas O(n2), dengan n adalah panjang sekuens (dengan asumsi panjang
kedua sekuens sama).
PA merupakan penyusun dasar algoritme multiple sequence alignment
(MSA) yang digunakan untuk menjajarkan lebih dari dua sekuens sekaligus untuk
menemukan homologi antar-sekuens. Contoh aplikasi yang menggunakan
algoritme ini antara lain ClustalW, T-Coffee, MAFFT, dan Muscle. Selain itu, PA
dipakai dalam perakitan sekuens untuk menggabungkan hasil pembacaan dari
sequencer yang pendek-pendek menjadi satu gen utuh. Di samping itu, PA juga
dipakai untuk pencarian sekuens pada database, untuk menemukan sekuenssekuens yang paling mirip dengan sekuens yang dicari (Rognes dan Seeberg
2000).
Teknologi next-generation DNA sequencer terkini mampu menghasilkan
data sekuens yang banyak, hingga ratusan milyar pasang basa (bp) dalam sekali
jalan (Liu et al. 2012). Data yang besar memerlukan pemrosesan yang cepat,
sehingga algoritme penjajaran perlu diparalelkan untuk mempercepat proses
analisis. Paralelisasi MSA telah banyak dilakukan, seperti pada Praline (Kleinjung
et al. 2002), ClustalW-MPI (Li 2003), MT-ClustalW (Chaichoompu et al. 2006),
MAFFT (Katoh dan Toh 2010), dan pada algoritme star (Satra et al. 2014).
Paralelisasi PA juga telah dilakukan meskipun tidak sebanyak MSA, seperti
ParAlign (Rognes 2001) dan CudaSW (Liu et al. 2013).
Setiap penelitian di atas menggunakan suatu skema partisi data untuk
memparalelkan suatu algoritme. Berbagai macam skema partisi telah digunakan,
namun belum diketahui skema mana yang terbaik. Penelitian ini akan mencari
tahu skema partisi data yang menghasilkan kinerja terbaik pada sistem shared
memory.

Perumusan Masalah
Teknik pemrograman dinamis pada PA menyebabkan adanya dependensi
data, sehingga skema partisi data sangat mempengaruhi kinerja algoritme. Skema
partisi yang telah diterapkan untuk paralelisasi PA antara lain: columnwise
(Hughey 1996), diagonal (Rognes 2001), rowwise (Martins 2001), blocked
columnwise (Liu dan Schmidt 2003), dan blocked anti-diagonal (Li et al. 2012).
Namun demikian, belum diketahui skema partisi mana yang memberikan kinerja
terbaik pada sistem shared memory.

2
Tujuan Penelitian
Tujuan penelitian ini adalah menerapkan algoritme PA paralel dengan
berbagai skema partisi data yang berbeda pada sistem shared-memory dan
menguji serta memperbaiki masing-masing skema untuk mendapatkan skema
yang memberikan kinerja terbaik.

Manfaat Penelitian
Penelitian ini diharapkan dapat menghasilkan algoritme PA paralel dengan
fine-grain parallelism dengan kinerja tinggi yang dapat dimanfaatkan lebih lanjut
untuk mengembangkan algoritme MSA paralel pada sistem hibrida shared–
distributed memory.

Ruang Lingkup Penelitian
Algoritme PA dikembangkan menggunakan pendekatan penjajaran global
untuk menjajarkan sekuens DNA tanpa fitur gap extension. Paralelisasi algoritme
PA dilakukan dengan memakai pustaka OpenMP dan bahasa pemrograman C
pada sistem shared memory menggunakan teknik multithreading. Skema partisi
yang akan diuji yaitu: blocked columnwise, rowwise, antidiagonal, dan blocked
columnwise dengan penjadwalan manual dan loop unrolling. Pengujian kinerja
algoritme paralel dilakukan pada sistem dengan prosesor yang memiliki 4 core
dan memori 4 GB.

3

2 TINJAUAN PUSTAKA
Pairwise Alignment (PA)
PA adalah algoritme untuk menjajarkan sepasang sekuens DNA/protein dan
menentukan tingkat kemiripan antara keduanya. PA sangat banyak dipakai pada
bidang bioinformatika untuk menemukan homologi antar-sekuens, perakitan
sekuens (sequence assembly), dan pencarian database sekuens.
Algoritme ini menggunakan teknik pemrograman dinamis, yaitu dengan
menggunakan bantuan matriks penjajaran berukuran m × n, dengan m dan n
adalah panjang kedua sekuens. Sekuens pertama menjadi baris matriks dan
sekuens kedua menjadi kolomnya. Nilai tiap sel tergantung pada nilai sel sebelah
atas, kiri atas, dan kirinya. Kompleksitas algoritme ini adalah O(n2), dengan
asumsi panjang kedua sekuens sama.

Program Paralel
Program paralel berjalan pada banyak prosesor secara bersamaan.
Sedangkan kebalikannya, program sekuensial hanya dapat berjalan pada satu
prosesor saja. Prosesor modern saat ini memiliki banyak core, sehingga dapat
dimanfaatkan untuk memparalelkan suatu program agar berjalan lebih cepat.
Menurut memorinya, sistem paralel dapat dibedakan menjadi dua. Sistem
paralel yang setiap proses berbagi-pakai memori yang sama disebut dengan sistem
shared memory. Sedangkan sistem paralel yang tiap proses memiliki memori
masing-masing disebut sistem distributed memory.

Metriks Kinerja Program Paralel
Speedup
Speedup adalah ukuran berapa kali lipat program paralel lebih cepat
dibandingkan dengan program sekuensial. Nilai speedup (S) didapatkan dari hasil
bagi antara waktu eksekusi program sekuensial (Ts) dengan waktu eksekusi
program paralel (Tp). Berikut Persamaan 1 untuk menghitung speedup program
paralel.
Ts
(1)
S =
Tp
Efisiensi
Efisiensi adalah ukuran seberapa efisien penggunaan resource yang ada,
dalam hal ini adalah prosesor. Efisiensi ideal ialah 100%, akan tetapi sulit untuk
mencapainya. Nilai efisiensi (E) didapatkan dari hasil bagi antara speedup (S)
dengan jumlah prosesor yang dipakai (p). Berikut Persamaan 2 untuk menghitung
efisiensi program paralel.
S
(2)
E=
p

4

3 METODE
Penelitian ini dibagi menjadi tiga tahapan utama yang dapat dilihat pada
Gambar 1 berikut ini.

Implementasi
PA Sekuensial

Implementasi
PA Paralel

Perbandingan
Kinerja

• Penjajaran
global
• Verifikasi
penjajaran

• Skema partisi
• blocked
columnwise
• rowwise
• antidiagonal

• Data uji 1000 –
16 000 bp
• Waktu eksekusi

Gambar 1 Metode penelitian
Implementasi Pairwise Alignment Sekuensial
Langkah pertama adalah menerapkan algoritme PA secara sekuensial
dengan menggunakan pendekatan penjajaran global. Algoritme longest common
subsequence (LCS) (Cormen et al. 2009) digunakan sebagai dasar untuk
pengembangan algoritme PA sekuensial. LCS merupakan algoritme penjajaran
global yang sering disebut dengan algoritme Needleman–Wunsch (Needleman
dan Wunsch 1970). Skor penjajaran diatur sebagai berikut: jika residu DNA pada
kedua sekuens sama maka skor bertambah satu, jika berbeda maka skor dikurangi
satu. Gap penalty diset dengan menginisialisasi skor pada baris dan kolom ke-0
secara menurun, yaitu nilai gap penalty dikalikan dengan jaraknya dari titik awal
(pojok kiri-atas).
Contoh perhitungan tabel penjajaran dengan nilai gap penalty −3 dapat
dilihat pada Gambar 2. Tabel tersebut menjajarkan sekuens AGTCA dan ATGA yang
menghasilkan skor penjajaran −1 (nilai pada sel pojok kanan-bawah) dengan hasil
penjajaran sebagai berikut.
AGTCA
A-TGA

Kebenaran algoritme ini diverifikasi dengan menjajarkan dua sekuens DNA
SYG_YEAST dan SYG_SCHPO yang didapatkan dari benchmark suite penjajaran

sekuens DNA BAliBASE (Carroll et al. 2007). Hasil penjajaran dibandingkan
dengan hasil dari program ClustalW 2.1 dengan opsi default.

5

Gambar 2 Matriks penjajaran sekuens AGTCA dan ATGA
Implementasi Pairwise Alignment Paralel
Langkah kedua adalah mengembangkan versi paralel dari algoritme ini dan
memverifikasi kebenarannya. Paralelisasi dilakukan menggunakan OpenMP,
karena jauh lebih mudah implementasinya daripada menggunakan instruksi
prosesor langsung (Rognes 2001) maupun menggunakan Pthreads (Chaichoompu
et al. 2006; Katoh dan Toh 2010). OpenMP adalah pustaka untuk memparalelkan
program sekuensial menjadi multithreaded pada sistem shared memory (Dagum
dan Menon 1998). Empat skema partisi yang diuji antara lain: blocked
columnwise, rowwise, antidiagonal, dan blocked columnwise dengan penjadwalan
manual dan loop unrolling. Kebenaran algoritme PA paralel diverifikasi dengan
membandingkan keluarannya dengan keluaran algoritme PA sekuensial untuk
memenuhi konsistensi sekuensial (Lamport 1979). Keluaran yang dibandingkan
hanya skor penjajaran terakhirnya saja, yaitu nilai sel pada pojok kanan-bawah
matriks penjajaran.
Blocked Columnwise
Skema partisi blocked columnwise membagi tabel penjajaran per blok
kolom (Liu dan Schmidt 2003). Thread ke-i (ti) mendapatkan bagian bloknya dari
kolom (i.n/t)+1 hingga (i+1)n/t , dengan n adalah jumlah kolom (panjang
sekuens kedua) dan t adalah jumlah thread. Misalnya jika jumlah kolom 9 dan
jumlah thread 3, maka t0 mendapatkan bagian satu blok kolom 1–3, t1
mendapatkan bagian satu blok kolom 4–6, dan t2 mendapatkan bagian satu blok
kolom 7–9. Ilustrasi skema partisi ini dapat dilihat pada Gambar 3.
Rowwise
Skema partisi rowwise membagi tabel penjajaran per baris (Martins et al.
2001). Thread ke-i (ti) mendapatkan bagian baris ke-(i + x.t + 1), dengan x = 0, 1,
2, …, ( m/t -1), m adalah jumlah baris (panjang sekuens pertama), dan t adalah
jumlah thread. Misalnya jika jumlah baris adalah 6 dan jumlah thread adalah 3,

6
maka t0 akan mendapatkan bagian baris ke-1 dan ke-4. Ilustrasi skema partisi ini
dapat dilihat pada Gambar 4.

Gambar 3 Blocked columnwise

Gambar 4 Rowwise

Gambar 5 Antidiagonal

7
Antidiagonal
Skema partisi antidiagonal membagi tabel penjajaran per antidiagonal,
melintang dari kiri-bawah ke kanan-atas (Li et al. 2012). Thread ke-i (ti)
mendapatkan bagian antidiagonal ke-(i + x.t + 1), dengan x = 0, 1, 2, …, ( (m+n1/t) -1), m adalah jumlah baris (panjang sekuens pertama), n adalah jumlah kolom
(panjang sekuens kedua), dan t adalah jumlah thread. Misalnya jika jumlah baris
adalah 6, jumlah kolom 9, dan jumlah thread adalah 3, maka t0 akan mendapatkan
bagian antidiagonal ke-1, 4, 7, 10, dan 13. Ilustrasi skema partisi ini dapat dilihat
pada Gambar 5.
Blocked Columnwise dengan Penjadwalan Manual dan Loop Unrolling
Skema blocked columnwise di atas belum optimal karena penggunaan
konstruk parallel for pada OpenMP, yang meskipun lebih simpel tetapi kurang
fleksibel. Untuk mengatasi kekurangan ini, mekanisme partisi data perlu
dilakukan secara manual. Perbaikan berikutnya adalah dengan mengaplikasikan
teknik loop unrolling, yaitu menggabungkan beberapa iterasi perulangan menjadi
satu. Teknik ini akan mengurangi instruksi prosesor dan meningkatkan lokalitas
cache (Loveman 1977; Sedgewick 1978).

Perbandingan Kinerja
Langkah terakhir adalah menguji kinerja program paralel untuk setiap
skema partisi data. Beberapa data sekuens DNA uji dibangkitkan secara acak
dengan panjang 1000, 2000, 4000, 8000, dan 16 000 bp sebagai masukan. Batasan
panjang sekuens ini terkait dengan kapasitas memori sistem yang digunakan, yaitu
hanya 4 GB. Perhitungan tabel penjajaran dicatat waktunya menggunakan fungsi
omp_get_wtime. Kinerja yang diukur adalah speedup dan efisiensi program
paralel.
Bahan
Dua sekuens DNA yang digunakan untuk verifikasi kebenaran algoritme PA
adalah GlyRS1 Saccharomyces cereviseae (SYG_YEAST) dan GlyRS
Schizosaccharomyces pombe (SYG_SCHPO). Selain itu, beberapa sekuens DNA
dengan panjang 1000–16 000 bp dibangkitkan secara acak sebagai sekuens uji
untuk menguji kinerja program paralel.

Alat
Pengujian dilakukan pada prosesor Intel Core i5-3470 yang memiliki 4 core,
memori 4 GB, sistem operasi Debian GNU/Linux 64-bit, dan compiler GCC 4.8.1
yang mendukung OpenMP 3.1.

8
Prosedur Analisis Data
Pengambilan waktu eksekusi dilakukan sebanyak 10 ulangan untuk tiap
skema dan panjang sekuens, kemudian diambil rataannya sebagai waktu eksekusi
akhir. Waktu eksekusi tersebut dibandingkan untuk mendapatkan skema partisi
data yang memberikan kinerja terbaik.

9

4 HASIL DAN PEMBAHASAN
Implementasi Pairwise Alignment Sekuensial
Pseudocode algoritme PA ditunjukkan sebagai sebuah prosedur bernama
PAIRWISE-ALIGN, yang mengambil dua sekuens X dan Y sebagai parameter. Skor
untuk tiap sel diperoleh dengan memilih skor tertinggi di antara tiga kemungkinan
arah penjajaran: diagonal, atas, dan kiri. Skor diagonal dihitung dengan bantuan
prosedur SIMILARITY: jika kedua residu DNA sama maka skor ditambahkan
dengan skor MATCH, jika berbeda maka skor dikurangi dengan skor MISMATCH.
Skor atas dan kiri dihitung dengan mengurangkannya dengan skor penalti GAP.
Skor penalti GAP dihitung secara linier, yaitu setiap gap memiliki skor yang
sama tanpa mempedulikan posisinya. Pemilihan nilai skor MATCH dan penalti
GAP mengikuti nilai default pada program ClustalW (DDBJ 2014).
MATCH
= +1
MISMATCH = -1
GAP
= -3
SIMILARITY(a, b)
1 if a == b
2
return MATCH
3 else
4
return MISMATCH
PAIRWISE-ALIGN(X, Y)
1 m = X.length
2 n = Y.length
3 let C[0..m, 0..n] be a new table
4 for i = 0 to m
5
Ci,0 = i.GAP
6 for j = 0 to n
7
C0,j = j.GAP
8
9 for i = 1 to m
10
for j = 1 to n
11
┌ diag = Ci-1,j-1 + SIMILARITY(Xi, Yj)
12
Ci,j = MAX ├
up = Ci-1,j + GAP
13
└ left = Ci,j-1 + GAP
14 return C
Diagram alir untuk prosedur PAIRWISE-ALIGN di atas ditampilkan pada
Gambar 6 berikut ini. Bagian kode yang akan diparalelkan adalah kode yang
terdapat di dalam perulangan bersarang.

10

Gambar 6 Diagram alir algoritme PA
Secara umum, algoritme PA telah berhasil menjajarkan dua sekuens dengan
benar. Sedangkan ClustalW menghasilkan penjajaran dengan gap yang lebih rapat
dan berdekatan. Hal ini disebabkan karena kurangnya fitur gap extension pada

11
algoritme PA ini. Perbandingan hasil penjajaran antara ClustalW dan PA pada
sekuens SYG_YEAST dan SYG_SCHPO ditampilkan sebagai berikut. Berdasarkan
hasil ini, algoritme PA sederhana telah berhasil diimplementasikan dengan benar
dan akan menjadi dasar untuk mengembangkan versi paralel dari algoritme PA.
> ClustalW
SYG_YEAST
SYG_SCHPO

ATGAGTGTAGAAGATATCAAGAAGGCTAGAGCCGCTGTTCCATTTAACAGA..
ATGA---CAGAAGTT-TCA--AAGGC---AGCAGCT------TTTGATCGA..
****
***** * *** *****
*** ***
*** * **
> PairwiseAlign
SYG_YEAST
ATGAGTGTAGAAGATATCAAGAAGGCTAGAGCCGCTGTTCCATTTAACAGA..
SYG_SCHPO
ATGA---CAGAAG-TTTC-A-AAGGC---AGCAGCT-TTTGATCGAACTCA..
****
***** * ** * *****
*** *** ** ** *** *

Hasil penghitungan waktu eksekusi dapat dilihat pada Tabel 1. Selanjutnya,
algoritme ini akan menjadi dasar untuk diparalelkan.
Tabel 1 Waktu eksekusi PA sekuensial
Panjang sekuens (bp) Waktu (s)
1000
0.017
2000
0.052
4000
0.203
8000
0.815
16000
3.250

Implementasi Pairwise Alignment Paralel
Blocked Columnwise
Waktu untuk sinkronisasi yang disebabkan oleh dependensi data antarthread untuk skema blocked columnwise adalah rendah. Hanya sel kolom pertama
pada tiap baris (tanda asterik pada Gambar 3) yang harus mengecek apakah sel di
sebelah kirinya telah terisi oleh thread sebelumnya ataukah belum. Jika satu
thread berjalan lebih lambat, maka thread selanjutnya harus menunggu sampai
thread itu menyelesaikan satu baris bagiannya.
Sinkronisasi seharusnya hanya dilakukan sebanyak m × t, akan tetapi karena
keterbatasan OpenMP, sinkronisasi masih dilakukan sebanyak m × n. Pengunaan
direktif parallel for OpenMP meskipun lebih simpel namun kurang fleksibel,
sehingga pengecekan dependensi data terpaksa masih dilakukan pada tiap sel. Hal
ini menyebabkan kinerja algoritme paralel kurang efisien. Berikut adalah
pseudocode untuk memparalelkan PA dengan skema ini.
1
2
3
4
5

for i = 1 to m
parallel for j = 1 to n
// schedule(static)
while Ci,j-1 == null
wait
┌ diag = Ci-1,j-1 + SIMILARITY(Xi, Yj)

12
6
7

Ci,j = MAX ├
up = Ci-1,j + GAP
└ left = Ci,j-1 + GAP

Skema blocked columnwise menghasilkan waktu eksekusi hingga 3.00 kali
lebih cepat pada 4 thread. Hasil penghitungan waktu selengkapnya dapat dilihat
pada Tabel 2. Efisiensi yang didapat untuk skema ini, yaitu speedup dibagi
dengan jumlah thread, adalah 75%.
Tabel 2 Waktu eksekusi PA paralel skema blocked columnwise pada 4 thread
Panjang sekuens (bp) Waktu sekuensial (s) Waktu paralel (s) Speedup
1000
0.017
0.007
2.31
2000
0.052
0.019
2.75
4000
0.203
0.068
2.99
8000
0.815
0.273
2.98
16000
3.250
1.084
3.00

Rowwise
Sinkronisasi untuk skema rowwise adalah tinggi, yaitu dilakukan sebanyak
m × n. Tiap sel harus mengecek apakah sel sebelah atasnya sudah terisi oleh
thread lain atau belum. Meskipun demikian, kinerja algoritme paralel dengan
skema ini tidak menjadi lebih buruk. Hal ini disebabkan karena tidak ada
perpindahan data antar-thread pada sistem shared memory. Berikut adalah
pseudocode untuk memparalelkan PA dengan skema ini.
1
2
3
4
5
6
7

parallel for i = 1
for j = 1 to n
while Ci-1,j
wait

Ci,j = MAX ├


to m

// schedule(static,1)

== null
diag = Ci-1,j-1 + SIMILARITY(Xi, Yj)
up = Ci-1,j + GAP
left = Ci,j-1 + GAP

Di luar dugaan, hasil dari skema rowwise lebih baik daripada skema blocked
columnwise. Skema ini menghasilkan waktu eksekusi hingga 3.18 kali lebih cepat
pada 4 thread. Dengan demikian, efisiensi skema ini adalah 80%. Hasil
penghitungan waktu selengkapnya dapat dilihat pada Tabel 3.
Tabel 3 Waktu eksekusi PA paralel skema rowwise pada 4 thread
Panjang sekuens (bp) Waktu sekuensial (s) Waktu paralel (s) Speedup
1000
0.017
0.008
2.20
2000
0.052
0.018
2.94
4000
0.203
0.065
3.15
8000
0.815
0.258
3.16
16000
3.250
1.022
3.18

13

Antidiagonal
Sinkronisasi untuk skema antidiagonal sangat tinggi, dua kali lipat dari
skema rowwise, yaitu sebanyak 2 × m × n. Setiap sel harus mengecek apakah sel
sebelah kiri dan atasnya telah diisi oleh thread lain atau belum. Terlebih lagi, pola
akses memori yang non-linier membuat kinerja algoritme paralel dengan skema
ini lebih buruk. Berikut adalah pseudocode untuk memparalelkan PA dengan
skema ini.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

parallel for k = 1 to m+n
// schedule(static,1)
// upper diagonal
if k < m
for i = k downto 1, j = 1 to n
while Ci,j-1 == null or Ci-1,j == null
wait
┌ diag = Ci-1,j-1 + SIMILARITY(Xi, Yj)
Ci,j = MAX ├
up = Ci-1,j + GAP
└ left = Ci,j-1 + GAP
// lower diagonal
elseif k > m
for i = m downto 1, j = k-m to n
while Ci,j-1 == null or Ci-1,j == null
wait
┌ diag = Ci-1,j-1 + SIMILARITY(Xi, Yj)
Ci,j = MAX ├
up = Ci-1,j + GAP
└ left = Ci,j-1 + GAP

Sesuai perkiraan, hasil dari skema antidiagonal adalah yang terburuk di
antara skema lainnya. Skema ini menghasilkan waktu eksekusi hingga 1.44 kali
lebih cepat pada 4 thread. Dengan demikian, efisiensi skema ini hanya 36%. Hasil
penghitungan waktu selengkapnya dapat dilihat pada Tabel 4.
Tabel 4 Waktu eksekusi PA paralel skema antidiagonal pada 4 thread
Panjang sekuens (bp) Waktu sekuensial (s) Waktu paralel (s) Speedup
1000
0.017
0.013
1.28
2000
0.052
0.037
1.43
4000
0.203
0.145
1.40
8000
0.815
0.563
1.45
16000
3.250
2.255
1.44

Blocked Columnwise dengan Penjadwalan Manual dan Loop Unrolling
Penjadwalan manual
Penjadwalan perulangan dilakukan secara manual menggunakan metode
dekomposisi blok (Quinn 2003) sebagai ganti dari konstruk parallel for

14
OpenMP. Dengan demikian, sinkronisasi dapat dilakukan sebanyak m × t, yaitu
hanya sekali pada sel pertama tiap baris untuk setiap thread (tanda asterik pada
Gambar 3). Penjadwalan manual ini membuat skema blocked columnwise lebih
efisien. Berikut adalah potongan awal pseudocode untuk skema blocked
columnwise yang telah diperbaiki dengan penjadwalan manual.
1
2
3
4
5
6

parallel
id = Thread.id
t = Thread.size
jfirst = id*n/t + 1
jlast = (id+1)*n/t

Loop unrolling
Perulangan pada tiap baris akan diuraikan dengan faktor dua, yaitu iterasi
untuk dua baris akan digabungkan menjadi satu. Hal ini dilakukan dengan
membuat dua salinan iterasi untuk Ci,j dan Ci+1,j serta membuat increment sebesar
dua untuk tiap iterasinya. Sebuah mekanisme pengecekan ditambahkan di tengah
perulangan untuk mengecek apakah baris terakhir sudah dicapai atau belum. Hal
ini diperlukan untuk mengantisipasi jika jumlah baris (m) tidak habis dibagi
dengan faktor unroll. Teknik loop unrolling faktor dua mengurangi jumlah
sinkronisasi setengahnya menjadi ½ × m × t. Berikut adalah lanjutan pseudocode
untuk skema blocked columnwise yang telah diperbaiki dengan loop unrolling
faktor dua.
7
8
9
10
11
12
13
14
15
16
17
18

for i = 1 to m by 2
while Ci,jfirst-1 == null
wait
for j = jfirst to jlast
┌ diag = Ci-1,j-1 + SIMILARITY(Xi, Yj)
Ci,j = MAX ├
up = Ci-1,j + GAP
└ left = Ci,j-1 + GAP
if i == m
break
┌ diag = Ci,j-1 + SIMILARITY(Xi+1, Yj)
Ci+1,j = MAX ├
up = Ci,j + GAP
└ left = Ci+1,j-1 + GAP

Tabel 5 Waktu eksekusi PA paralel skema blocked columnwise dengan
penjadwalan manual dan loop unrolling pada 4 thread
Panjang sekuens (bp) Waktu sekuensial (s) Waktu paralel (s) Speedup
1000
0.017
0.006
2.56
2000
0.052
0.017
3.16
4000
0.203
0.058
3.51
8000
0.815
0.231
3.53
16000
3.250
0.918
3.54

15
Skema blocked columnwise dengan penjadwalan manual dan loop unrolling
dengan faktor dua menghasilkan waktu eksekusi 3.54 kali lebih cepat pada 4
thread. Dengan demikian, efisiensi skema ini adalah 89%. Hasil penghitungan
waktu selengkapnya dapat dilihat pada Tabel 5.
Verifikasi Kebenaran Algoritme PA Paralel
Seluruh implementasi algoritme PA paralel di atas telah diuji konsistensi
sekuensialnya dengan membandingkan keluaran PA paralel dengan PA sekuensial.
Keluaran yang dibandingkan adalah skor akhir penjajaran. Semua skema
menghasilkan keluaran yang sama, sehingga implementasi algoritme paralel 100%
sesuai dengan algoritme sekuensial. Verifikasi ini penting karena implementasi
program paralel multithreaded yang kurang cermat akan menyebabkan keluaran
yang tidak konsisten.

Perbandingan Kinerja
Skema antidiagonal menghasilkan kinerja terburuk dengan efisiensi hanya
36%. Hal ini dapat dimengerti karena waktu sinkronisasi dua kali lipat lebih tinggi
(sebanyak 2.m.n) dan pola akses memori yang non-linier yang menyebabkan
banyak terjadi cache miss.
Skema rowwise menghasilkan efisiensi 80%, sedangkan skema blocked
columnwise menghasilkan efisiensi 75%. Kedua skema ini memiliki waktu
sinkronisasi yang hampir sama, yaitu sebanyak m.n. Seharusnya skema blocked
columnwise bisa lebih baik, namun karena keterbatasan pustaka OpenMP kinerja
skema ini lebih buruk dari rowwise.
Skema blocked columnwise kedua diperbaiki dengan menggunakan
penjadwalan manual dan loop unrolling. Penjadwalan manual mengatasi batasan
pustaka OpenMP, sehingga skema ini menjadi lebih efisien karena sinkronisasi
berkurang drastis menjadi sebanyak m.t. Teknik loop unrolling mengurangi waktu
sinkronisasi menjadi setengahnya, yaitu ½.m.t. Hasilnya, skema ini memberikan
kinerja terbaik dengan efisiensi 89%.
Perbandingan kinerja untuk keempat skema tersebut ditunjukkan pada
Gambar 7 dan Gambar 8. Selain keempat skema ini, terdapat skema lain yang
belum dicoba, yaitu blocked rowwise dan blocked antidiagonal. Skema blocked
rowwise tidak dicoba karena bisa diperkirakan dari cara kerjanya bahwa skema ini
sangat tidak efisien. Sedangkan skema blocked antidiagonal membutuhkan
implementasi yang lebih sulit, walaupun mungkin kinerjanya akan lebih baik
daripada skema antidiagonal biasa.

16
100%

89%
75%

80%

36%

0%
Antidiagonal

Blocked
columnwise

Rowwise

Blocked
columnwise 2

Gambar 7 Perbandingan efisiensi tiap skema pada 4 thread

4
BC2
R

3

Speedup

BC
AD

2

1

0
1000

Gambar 8

2000
4000
8000
Panjang sekuens (bp)

16000

Perbandingan speedup skema antidiagonal (AD),
blocked columnwise (BC), rowwise (R), dan perbaikan
blocked columnwise (BC2) pada 4 thread

17

5 SIMPULAN DAN SARAN
Simpulan
Algoritme pairwise alignment (PA) dipakai dalam bioinformatika untuk
menjajarkan sepasang sekuens DNA atau protein. Penelitian ini telah menerapkan
algoritme PA paralel dengan berbagai skema partisi data yang berbeda pada
sistem shared-memory. Skema tersebut antara lain blocked columnwise, rowwise,
antidiagonal, dan blocked columnwise dengan penjadwalan manual dan loop
unrolling.
Skema antidiagonal menghasilkan kinerja terburuk dengan efisiensi 36%
karena waktu sinkronisasi tinggi dan pola akses memori non-linier. Skema
rowwise menghasilkan efisiensi 80%, sedangkan skema blocked columnwise
menghasilkan efisiensi 75%. Kedua skema ini memiliki waktu sinkronisasi yang
hampir sama.
Skema blocked columnwise kedua diperbaiki dengan menggunakan
penjadwalan manual dan loop unrolling. Penjadwalan manual mengatasi batasan
pustaka OpenMP sehingga skema ini menjadi lebih efisien, sedangkan teknik loop
unrolling memotong waktu sinkronisasi menjadi setengahnya. Hasilnya, skema ini
memberikan kinerja terbaik dengan efisiensi 89%.
Dari sini dapat disimpulkan bahwa pada sistem shared memory, waktu
sinkronisasi sangat menentukan baik tidaknya kinerja suatu skema partisi
algoritme paralel. Secara umum, skema partisi berbasis blok kolom lebih efisien
untuk paralelisasi kasus pemrograman dinamis, khususnya pada algoritme PA.

Saran
Algoritme PA ini hanya dapat menjajarkan sekuens DNA. Untuk dapat
menjajarkan sekuens protein, perlu ditambahkan fitur matriks similarity khusus
untuk protein, seperti BLOSUM50. Selain itu, fitur gap extension juga perlu
ditambahkan pada algoritme PA ini untuk mendapatkan hasil penjajaran yang
lebih optimal.
Hasil penelitian ini memberikan algoritme PA berkinerja tinggi dengan finegrain parallelism yang dapat digunakan lebih lanjut untuk mengembangkan
multiple sequence alignment (MSA) paralel.

18

DAFTAR PUSTAKA
Carroll H, Beckstead W, O’Connor T, Ebbert M, Clement M, Snell Q, McClellan
D. 2007. DNA reference alignment benchmarks based on tertiary structure
of encoded proteins. Bioinformatics. 23(19): 2648–2649.
Chaichoompu K, Kittitornkun S, Tongsima S. 2006. MT-ClustalW:
multithreading multiple sequence alignment. Di dalam: Parallel and
Distributed Processing Symposium, IEEE International (IPDPS). hlm 8.
Cohen J. 2004. Bioinformatics—an introduction for computer scientists. ACM
Computing Surveys (CSUR). 36(2):122–158.
Cormen T, Leiserson C, Rivest R, Stein C. 2009. Introduction to Algorithms. 3rd
ed. Cambridge (US): MIT Pr.
Dagum L, Menon R. 1998. OpenMP: an industry standard API for sharedmemory programming. Computational Science & Engineering, IEEE.
5(1):46–55.
[DDBJ] DNA Data Bank of Japan. 2014. ClustalW help [internet]. [diperbaharui
2014 Agu 26]. Tersedia pada: http://www.ddbj.nig.ac.jp/search/help/
clustalwhelp-e.html.
Hughey R. 1996. Parallel hardware for sequence comparison and alignment.
Computer Applications in the Biosciences (CABIOS). 12(6):473–479.
Katoh K, Toh H. 2010. Parallelization of the MAFFT multiple sequence
alignment program. Bioinformatics. 26(15):1899–1900.
Kleinjung J, Douglas N, Heringa J. 2002. Parallelized multiple alignment.
Bioinformatics. 18(9):1270–1271.
Lamport L. 1979. How to make a multiprocessor computer that correctly executes
multiprocess programs. Computers, IEEE Transactions on. 100(9):690–691.
Li KB. 2003. ClustalW-MPI: ClustalW analysis using distributed and parallel
computing. Bioinformatics. 19(12):1585–1586.
Li J, Ranka S, Sahni S. 2012. Pairwise sequence alignment for very long
sequences on GPUs. Di dalam: Computational Advances in Bio and Medical
Sciences, IEEE International Conference on.
Liu L, Li Y, Li S, Hu N, He Y, Pong R, Lin D, Lu L, Law M. 2012. Comparison
of next-generation sequencing systems. BioMed Research International.
2012.
Liu Y, Wirawan A, Schmidt B. 2013. CUDASW++ 3.0: accelerating SmithWaterman protein database search by coupling CPU and GPU SIMD
instructions. BMC Bioinformatics. 14(1):117.
Liu W, Schmidt B. 2003. Parallel design pattern for computational biology and
scientific computing applications. Di dalam: Cluster Computing, IEEE
International Conference on. hlm 456–459.
Loveman DB. 1977. Program improvement by source-to-source transformation.
Journal of the ACM (JACM). 24(1):121–145.
Martins WS, del Cuvillo J, Cui W, Gao GR. 2001. Whole genome alignment
using a multithreaded parallel implementation. Di dalam: Computer
Architecture and High Performance Computing, Symposium on. hlm 1–8.

19
Needleman SB, Wunsch CD. 1970. A general method applicable to the search for
similarities in the amino acid sequence of two proteins. Journal of
Molecular Biology. 48(3):443–453.
Quinn MJ. 2003. Parallel Programming in C with MPI and OpenMP. New York
(US): McGraw-Hill. hlm 118–119.
Rognes T. 2001. ParAlign: a parallel sequence alignment algorithm for rapid and
sensitive database searches. Nucleic Acids Research. 29(7):1647–1652.
Rognes T, Seeberg E. 2000. Six-fold speed-up of Smith–Waterman sequence
database searches using parallel processing on common microprocessors.
Bioinformatics. 16(8):699–706.
Satra R, Kusuma WA, Sukoco H. 2014. Accelerating computation of DNA
multiple sequence alignment in distributed environment. Telkomnika
Indonesian Journal of Electrical Engineering. 12(12): 8278–8285.
Sedgewick R. 1978. Implementing quicksort programs. Communications of the
ACM. 21(10):847–857.

Submitted to:
Akbar AR, Sukoco H, Kusuma WA. 2015 Jun. Comparison of data partitioning
schema of parallel pairwise alignment on shared memory system.
Telkomnika. 13(2), siap terbit.

20
Lampiran 1 Implementasi algoritme PA sekuensial
#define MATCH
#define MISMATCH
#define GAP

+1
-1
-3

double time;
int** pairwise_align(const char *X, const char *Y)
{
int m;
// row
int n;
// column
int **C;
int diag, left, up;
int i, j;
m =
n =
C =
for

strlen(X);
strlen(Y);
malloc((m+1) * sizeof(int *));
(i = 0; i = left) {
C[i][j] = up;
} else {
C[i][j] = left;
}
}
}
time = omp_get_wtime() - time;
return C;
}

23
Lampiran 4 Implementasi algoritme PA paralel skema antidiagonal
int** pairwise_align(const char *X, const char *Y)
{
...
time = omp_get_wtime();
#pragma omp
for (k = 1;
if (k <
for

parallel for schedule(static,1) private(i,j,diag,up,left)
k 0 && j = up && diag >= left) {
C[i][j] = diag;
} else if (up >= left) {
C[i][j] = up;
} else {
C[i][j] = left;
}

}
} else if (k > m) {
for (i = m, j = k-m; i > 0 && j = up && diag >= left) {
C[i][j] = diag;
} else if (up >= left) {
C[i][j] = up;
} else {
C[i][j] = left;
}
}
}
}
time = omp_get_wtime() - time;
return C;
}

24
Lampiran 5 Implementasi algoritme PA paralel perbaikan skema blocked
columnwise
int** pairwise_align(const char *X, const char *Y)
{
...
time = omp_get_wtime();
#pragma
{
int
int
int
int

omp parallel private(i,diag,up,left)
id = omp_get_thread_num();
t = omp_get_num_threads();
jfirst = id*n/t + 1;
jlast = (id+1)*n/t;

for (i = 1; i = left) {
C[i][j] = diag;
} else if (up >= left) {
C[i][j] = up;
} else {
C[i][j] = left;
}
if (i == m) break;
diag = C[i][j-1] + ((X[i-1] == Y[j-1])? MATCH : MISMATCH);
up
= C[i][j] + GAP;
left = C[i+1][j-1] + GAP;
if (diag >= up && diag >= left) {
C[i+1][j] = diag;
} else if (up >= left) {
C[i+1][j] = up;
} else {
C[i+1][j] = left;
}
}
}
}
time = omp_get_wtime() - time;
return C;
}

25
Lampiran 6 Data DNA untuk verifikasi kebenaran algoritme PA
>SYG_YEAST.dna|emb|Z35990.1|SCYBR121C.revcom
ATGAGTGTAGAAGATATCAAGAAGGCTAGAGCCGCTGTTCCATTTAACAGAGAACAGCTAGAAAGTGTTTTGAGAGGAAG
ATTTTTTTATGCCCCAGCTTTTGACTTGTACGGTGGGGTTTCTGGTTTATATGACTATGGTCCACCAGGTTGTGCATTCC
AAAACAACATCATTGACGCCTGGAGAAAGCATTTTATTTTGGAAGAAGATATGTTGGAAGTTGATTGTACTATGTTAACT
CCATATGAGGTTTTGAAGACCTCAGGTCATGTTGACAAATTTTCTGATTGGATGTGTAGAGATTTGAAGACTGGTGAGAT
TTTCAGAGCTGACCATTTAGTCGAAGAAGTTTTGGAAGCTCGCTTAAAGGGTGACCAAGAAGCCAGAGGTTTAGTCGAGG
ATGCTAATGCCGCTGCTAAGGACGATGCCGAAAAGAAGAAGAGAAAGAAAAAAGTTAAACAAATTAAAGCAGTCAAATTG
GATGACGACGTTGTCAAAGAATATGAAGAAATTTTGGCTAAAATAGATGGTTATTCCGGCCCAGAATTAGGTGAATTGAT
GGAAAAATACGATATCGGTAACCCAGTCACCGGAGAAACTTTAGAATCTCCAAGGGCTTTTAACCTGATGTTTGAAACGG
CTATTGGCCCATCTGGTCAATTAAAGGGTTACTTGAGGCCAGAAACTGCCCAAGGTCAATTCTTGAATTTTAACAAGTTG
TTAGAATTTAACAACAGTAAGACCCCTTTTGCCTCAGCCTCTATCGGTAAATCATTTAGAAATGAGATTTCCCCAAGGGC
CGGTTTATTAAGAGTCCGTGAATTTTTGATGGCAGAGATTGAACATTTCGTTGACCCATTGGACAAATCTCATCCAAAAT
TTAATGAAATCAAAGACATCAAGCTTTCCTTTTTGCCTCGTGATGTTCAAGAAGCTGGTTCTACTGAACCAATTGTCAAG
ACAGTTGGTGAAGCAGTTGCTTCAAGAATGGTCGATAATGAAACTTTGGGTTACTTTATTGCCAGAATTTACCAATTTTT
GATGAAAATTGGTGTTGATGAGTCCAAATTGAGATTCCGTCAACATATGGCTAATGAAATGGCACATTATGCTGCTGACT
GTTGGGATGGTGAATTGAAGACATCTTACGGGTGGATTGAATGTGTCGGATGTGCTGATAGATCTGCCTATGATTTGACC
GTTCATTCCAAAAAGACCAAAGAAAAATTGGTTGTTAGACAAAAATTAGATAATCCAATTGAAGTCACCAAGTGGGAAAT
TGATTTGACGAAAAAATTGTTCGGTCCAAAATTCAGAAAAGATGCACCAAAAGTTGAATCTCATCTATTGAATATGTCTC
AAGATGACTTGGCTTCCAAGGCTGAGTTATTGAAGGCAAATGGCAAGTTTACTATAAAGGTTGATGGTGTTGATGGCGAA
GTCGAGTTGGACGATAAATTGGTTAAAATCGAACAAAGAACAAAGGTTGAACACGTTAGAGAATATGTTCCTAGTGTCAT
TGAACCATCTTTCGGTATTGGCCGTATCATCTACTCCGTTTTTGAGCACTCTTTCTGGAACAGACCAGAAGACAATGCCA
GAAGTGTTCTTTCCTTCCCACCTTTGGTTGCTCCAACAAAGGTTCTTTTAGTTCCTTTATCTAACCACAAAGATTTAGTT
CCTGTTCATCATGAAGTCGCCAAAATCTTAAGAAAGTCTCAAATCCCATTTAAGATTGATGATTCTGGAGTTTCCATTGG
TAAAAGATATGCCCGTAATGACGAATTAGGTACTCCATTCGGTGTCACCATTGACTTTGAATCTGCCAAAGACCATTCTG
TCACTTTGAGAGAAAGAGATTCCACCAAGCAAGTTAGAGGTTCCGTCGAAAATGTCATCAAGGCTATCCGCGATATCACT
TACAATGGTGCTTCTTGGGAAGAAGGTACCAAGGATTTGACTCCTTTTATTGCCCAAGCTGAAGCTGAAGCTGAAACTGA
C
>SYG_SCHPO.dna|emb|Z69369.1|SPAC3F10
ATGACAGAAGTTTCAAAGGCAGCAGCTTTTGATCGAACTCAGTTCGAGGAGTTAATGAAGAAGAGATTCTTCTTCTCTCC
TTCTTTTCAAATCTATGGTGGAATTAGTGGATTGTATGATTATGGCCCACCAGGTAGTGCACTTCAATCTAATCTGGTTG
ATATTTGGCGAAAGCACTTTGTTATCGAAGAAAGCATGCTGGAGGTTGATTGCTCCATGCTTACTCCTCATGAAGTTTTG
AAGACTAGTGGGCATGTTGATAAGTTTGCAGATTGGATGTGTAAGGACCCTGCTACCGGTGAAATCTTTCGTGCCGACCA
CTTGGTTGAAGAGGTTTTGGAAGCCCGTTTGAAGGGTGACAAGGAAGCTCGTGGGCAGAATTCCAATGACCAGCCTGAAG
AATCTGATGACAAGAAGAAGCGTAAGAAGAAGGTAAAGGAAATTCGTGCGACTCGTCTGGATGACAAGACTGTTGAGGAA
TACGAGTTTATTCTTGCCCAAATTGACAACTATGATGGAGATCAATTAGGTGAGCTCATGAAGAAGTATGACATTCGTAA
CCCTGCAACCAACGGTGAGCTTGAAACCCCTCGTCAGTTCAACTTAATGTTTGAAACTCAAATTGGTCCCAGTGGTGGTC
TGAAAGGTTACCTCCGACCTGAAACTGCCCAAGGACAATTTTTAAACTTTAGCCGTTTATTGGAGTTTAATAACGGCAAA
GTTCCCTTTGCCAGTGCTATGGTTGGTAAAGCCTTCCGTAATGAGATTTCTCCTCGGAGTGGCCTGCTTCGTGTTCGTGA
GTTTTTGATGGCCGAAGTCGAACACTTTGTCGATCCTAAAAACAAAGAGCATGATAGATTTGACGAGGTTTCTCATATGC
CCCTTCGTTTGTTGCCCCGTGGTGTCCAATTAGAAGGAAAGACTGACATTTTGGAAATGCCCATAGGTGATGCTGTCAAG
AAAGGAATTGTTGATAACACTACATTAGGTTATTTTATGGCCCGTATCAGCTTATTCTTGGAGAAAATTGGTATTGATAT
GAACCGTGTTCGTTTTAGGCAACATATGAGCAATGAAATGGCTCATTATGCTTGCGATTGCTGGGATGCCGAAATTCAAT
GCTCTTACGGCTGGATCGAGTGTGTAGGTTGCGCTGATCGTAGTGCCTATGATCTTAGCGTTCACAGTAAAGCTACCAAG
ACTCCTTTAGTAGTTCAAGAGGCTCTTCCTGAACCTGTTGTTGTTGAACAATTCGAGGTTGAAGTTAATCGCAAAAAATT
TGGTCCACGTTTCAAACGTGATGCCAAGGCTGTTGAGGAAGCTATGATTTCGTGGCCGGAATCGGAAAAAGTTGAAAAAA
GTGCTCAACTTGTTGCTGAAGGTAAAATTATTGTTAATGTTAATGGTGTTGAGCATACAGTAGAATCTGATCTCGTCACA
ATTGAGAAGAGAAAGCATACTGAACACATTCGTACTTATACTCCTAATGTTATCGAGCCATCCTTTGGATTAGGCAGAAT
CTTGTATGTACTCATGGAACATGCTTATTGGACTAGACCAGAAGACGTAAACCGTGGTGTTTTGTCCTTCCCTGCTTCTA
TCGCACCTATTAAGGCCCTCATTGTTCCTTTGAGCCGCAATGCTGAGTTCGCTCCTTTTGTAAAGAAATTGTCTGCCAAA
CTTCGCAATCTTGGCATTTCTAATAAAATAGACGATTCTAATGCCAATATTGGCCGTCGCTATGCTCGTAACGATGAATT
GGGAACTCCCTTCGGGTTGACTGTAGACTTTGAGACTCTTCAAAACGAAACTATTACACTTCGCGAACGTGATTCTACTA
AGCAAGTTCGTGGTAGTCAAGATGAAGTTATTGCTGCTCTTGTTTCTATGGTCGAGGGAAAATCATCTTTTGAAGATGCA
CTAGCTAAGTTTGGAGAGTTTAAGTCTACACAAGAA

26

RIWAYAT HIDUP
Penulis dilahirkan di Demak pada tanggal 5 Maret 1987 sebagai putra
pertama dari pasangan Sukid Raharjo dan Sudarmi. Penulis mendapatkan gelar
Sarjana Komputer dari Institut Pertanian Bogor (IPB) pada tahun 2011. Saat ini,
penulis bekerja sebagai asisten dosen di Departemen Ilmu Komputer IPB sejak
tahun 2012. Penulis aktif mengajar pada praktikum Algoritme dan Pemrograman,
Bahasa Pemrograman, Basis Data, Sistem Operasi, Komunikasi Data dan Jaringan
Komputer, serta Pemrosesan Paralel.