Anda di halaman 1dari 25

ANALISIS PERBANDINGAN KOMPUTASI

SEKUENSIAL DAN KOMPUTASI PARALEL GPU


MEMANFAATKAN TEKNOLOGI NVIDIA CUDA
PADA APLIKASI KOMPRESI CITRA
MENGGUNAKAN ALGORITMA DCT 8X8

LATAR BELAKANG
Ingin membuktikan kebenaran, apakah proses kompresi citra
dengan metode DCT 8x8 memang dapat di implementasikan
pada komputasi paralel GPU?
Ingin membuktikan kebenaran dari analisa pada percobaan
sebelumnya,apakah komputasi paralel GPU juga dapat
mempercepat proses kompresi citra dengan menggunkan
metode DCT 8x8?

RUMUSAN MASALAH

1. Bagaimana cara kerja algoritma DCT 8x8 pada komputasi sekuensial dan
komputasi paralel ?

2. Berapa lama waktu yang dibutuhkan untuk menghasilkan citra yang telah
dikompresi dengan komputasi sekuensial maupun komputasi paralel GPU ?

3. Bagaimana hasil perbandingan komputasi waktu yang diperoleh, apakah proses


kompresi citra dengan metode DCT 8x8 di arsitektur paralel GPU meghasilkan
waktu yang lebih cepat dibandingkan dengan proses kompresi di arsitektur
sekuensial ?. Data kemudian di olah dalam bentuk tabel dan grafik perbandingan

4. Berapa nilai speedup yang diperoleh dari hasil kompresi setiap citra uji ?

BATASAN MASALAH
1. Algoritma kompresi citra yang digunakan adalah algoritma DCT yang beroperasi pada blok 8x8 dengan pendekatan 1 kernel.

2. Untuk proses yang bekerja secara sekuensial menggunakan bahasa pemrograman C++ sedangkan untuk proses yang bekerja secara
paralel GPU menggunakan teknologi dari Nvidia yang dapat membaca kartu grafis yaitu teknologi Compute Unified Device
Architecture ( CUDA ).
3. Parameter yang digunakan untuk menghitung komputasinya menggunakan cuda timer function.
4. Waktu yang didapat dari dua penelitian diatas dinyatakan dengan satuan waktu berupa millisecond.
5. Citra uji yang dikompresi sebanyak empat buah dengan masing-masing piksel berukuran dari 256 x 256 px , 512 x 512 px, 1024 x
1024 px dan 2048 x 2048 px dengan depth sebesar 24 bit dan bitmap sebagai format setiap citra uji.
6. Penelitian tentang kompresi citra dengan algoritma DCT 8x8 hanya di lakukan pada CPU Intel Core I3-2310M dan GPU Nvidia Cuda
Geforce GT540M menggunakan sistem operasi Windows7 Ultimate 32bit , Compiler NVCC untuk CUDA dan Visual Studio 2008
sebagai IDEnya serta menggunakan pustaka cuda yaitu cudart.lib dan cutil32.lib
7. Penelitian ini dibuat hanya untuk membuktikan apakah komputasi paralel GPU memang lebih cepat daripada kinerja komputasi
secara sekuensial?. Dan mendapatkan nilai speedup pada proses kompresi citra

TUJUAN PENELITIAN

Tujuan dari penelitian ini adalah membandingkan nilai speedup dari


beberapa sample citra uji yang di olah dari data percobaan pada
komputasi sekuensial dan pada komputasi paralel dengan memanfaatkan
cuda timer function sebagai uji parameter untuk mendapatkan waktu
proses kompresi citra pada setiap sampel uji .

KOMPRESI CITRA
Kompresi citra adalah aplikasi kompresi data yang dilakukan terhadap citra digital dengan tujuan untuk
mengurangi redudansi dari data-data yang terdapat dalam citra sehingga dapat disimpan atau
ditransmisikan secara efisien. Teknik pada kompresi terbagi menjadi 2 jenis yaitu :
1. Loseless Compression
Teknik kompresi citra dimana tidak ada satupun informasi citra yang dihilangkan, biasanya digunakan
pada citra medik. Metode yang dipakai pada teknik kompresi ini antara lain : Run Length Encoding, Entropy
Encoding ( Huffman, Aritmatik ) dan Adaptive Dictionary Based ( LZW ).
2. Lossy Compression
Teknik kompresi citra yang menghilangkan beberapa informasi dalam citra asli dan merubah ukuran
file citra menjadi lebih kecil dari citra aslinya. Teknik ini mengubah detail dan warna pada file citra menjadi
lebih sederhana tanpa terlihat perbedaan yang mencolok dalam pandangan manusia, sehingga ukurannya
menjadi lebih kecil, biasanya digunakan pada citra foto atau image lain yang tidak memerlukan detail citra ,
diman kehilangan bitrate foto tidak berpengaruh pada citra. Metode yang dipakai pada teknik kompresi ini
antara lain : Color Reduction, Chroma Subsampling, Transform Coding ( termasuk DCT di dalamnya )

ALGORITMA DCT

Metode DCT pertama kali diperkenalkan oleh Ahmed, Natarajan dan Rao pada tahun 1974

DCT adalah sebuah teknik untuk mengubah sinyal ke dalam komponen frekeunsi dasar. DCT merupakan
sebuah skema lossy compression dimana NxN blok ditransformasikan dari domain spasial ke domain DCT.

Skema Metode Kompresi DCT 8x8 :

Algoritma DCT memiliki kompleksitas waktu Total sebesar O ( N log N), dengan kompleksitas waktu yang
diterapkan pada formula perkalian dua matriks sebesar O ( N^{\text{3}}). Oleh karena itu, jika Algoritma
DCT menggunakan blok 8x8 maka inputan n = 8, membutuhkan ( 8^{\text{3}}) langkah untuk
menyelesaikan proses perkalian matriksnya.

ALGORITMA DCT

Kelebihan kompresi citra menggunakan DCT adalah :

1. DCT menghitung kuantitas bit-bit data citra dimana pesan tersebut disembunyikan di dalamnya.
Walaupun gambar yang dikompresi dengan lossy compression akan menimbulkan kecurigaan karena
perubahan gambar terlihat jelas, pada metode ini hal ini tidak akan terjadi karena metode ini terjadi
di domain frekeunsi di dalam citra, bukan domain spasial, sehingga tidak akan ada perubahan yang
terlihat pada cover gambar.
2. Kokoh terhadap manipulasi pada stego-object.

Kekurangan kompresi citra menggunakan algoritma DCT adalah :

1. Tidak tahan terhadap perubahan suatu objek dikarenakan pesan mudah dihapus karena lokasi
penyisipan data dan pembuatan data dengan metode DCT diketahui.
2.

Implementasi algoritma yang panjang dan membutuhkan banyak perhitungan.

ARSITEKTUR CUDA

CUDA merupakan akronim dari Compute Unified Device Architecture yaitu sebuah teknologi yang dikembangkan
oleh NVIDIA untuk mempermudah utilita.si GPU untuk keperluan umum (non-grafis).

Arsitektur CUDA memiliki beberapa keunggulan, diantaranya adalah :

1.

CUDA menggunakan bahasa C standar, dengan beberapa ekstensi yang simpel.

2.

Shared memory CUDA menyingkapkan wilayah memory yang cepat (berukuran 16 KB) yang dapat di bagi
diantara thread-thread yang ada. Hal ini dapat digunakan sebagai user-managed-cache, sehingga mengaktifkan
bandwitdth yang lebih besar (dari besaran bandwidth yang dimungkinkan), menggunakan texture loops.

Kekurangan dari arsitektur CUDA adalah :

1.

CUDA tidak support texture rendering.

2.

Bus Bandwidth dan latensi antara CPU dengan GPU bisa jadi tidak imbang.

3.

CUDA hanya terdapat pada GPU Nvidia

ARSITEKTUR CUDA

Untuk dapat bekerja dengan teknologi CUDA ada 3 komponen yang harus tersedia pada perangkat PC
atau notebook. Komponen tersebut antara lain :

1.

CUDA driver, merupakan driver yang harus sudah terinstal pada device yang akan digunakan untuk
menjalankan program CUDA. Device tersebut harus menggunakan kartu grafis dari Nvidia.

2.

CUDA toolkit, merupakan ruang lingkup pengembangan CUDA dari bahasa C sehingga akan menghasilkan
CUDA-enabled GPU.

3.

CUDA SDK, berisi sample-sample program CUDA dan header yang dapat dijalankan oleh program CUDA

CUDA Constant Memory


Adalah memori konstan pada GPU, Konstan, artinya tidak dapat diubah selama eksekusi kernel. Beberapa
karakteristik Cuda Constan Memory, antara lain :

1.

Didefinisikan dengan keyword _constant_

2.

Tidak perlu alokasi memori dengan _cudaMalloc_

3.

Diisi dengan __cudaMemcpyToSymbol__

ARSITEKTUR CUDA
4. Langsung tersedia untuk kernel, tidak perlu di pass sebagai parameter
5. Tidak perlu di frre memory setelah eksekusi
Keuntungan menggunakan constant memory adalah dia diakses secara half-warp, sehingga 16
threads yang mengakses alamat yang sama cukup melakukan satu kali pembacaan memori.
Karena sifatnya yang konstan, constant memory juga dicache secara agresif oleh GPU.

CUDA Shared Memory


CUDA Shared Memory dibagi menjadi modul memori berukuran sama yang disebut bank
memori. Setiap bank memori memegang nilai 32-bit yang berurutan (seperti int atau float)
sehingga array yang berurutan dengan mengakses thread berturut-turut sangat cepat.

GPU ( Graphic Processing Unit )


GPU adalah sirkuit khusus yang dirancang untuk cepat memanipulasi dan
mengubah memori yang sedemikian rupa sehingga mempercepat
pembangunan gambar dalam frame buffer yang dimaksudkan untuk
output untuk tampilan.
Istilah GPU ini didefinisikan dan dipopulerkan oleh Nvidia pada tahun
1999, yang memasarkan kartu video GeForce 256 sebagai GPU pertama
di dunia , yang merupakan sebuah chip prosesor tunggal yang terintegrasi
dengan transformasi, pencahayaan, segitiga setup / kliping, dan mesin
render yang mampu memproses minimal 10 juta poligon per detik .
Sistem Kerja GPU
Driver VGA - > data digital -> Kartu Grafis -> memori Kartu Grafis -> GPU
( diubah menjadi piksel ) -> VRAM-> DAC ->Data Analog -> Monitor

GPU ( Graphic Processing Unit )


Kernel sendiri dijalankan dengan banyak

Eksekusi Program pada GPU

thread secara bersamaan pada GPU.


thread adalah satuan eksekuis terkecil
dalam CUDA. Thread ini dikelompokkan
pada block.
Jumlah thread yang dapat dijalankan
pada satu block terbatasi oleh kemampuan
hardware, tapi satu kernel dapat dijalankan
oleh banyak block sekaligus.
Banyaknya block dan thread per block
didefinisikan saat memanggil kernel dalam
program.
Thread yang berada dalam satu block
dapat saling berbagi memori, tapi tidak
dengan thread yang berada di lain block

ALGORITMA DCT 8X8 PADA KOMPUTASI SEKUENSIAL DAN PARALEL

Pada Komputasi sekuensial, penerapan algoritma DCT 8x8 tidak


menggunakan perkalian matriks persegi . Karena perhitungsn function
cosine pada bahasa c memerlukan kompleksitas yang cukup rumit. Jadi
perhitungan koefisien matriksnya terdiri dari 2*N elemen yang disebar ke
dalam 8x8 blok. Berikut sintaks perhitungan function cosine menggunakan
bahasa C.

ALGORITMA DCT 8X8 PADA KOMPUTASI SEKUENSIAL DAN PARALEL

Pada Komputasi Paralel


Implementasi algoritma DCT8x8 menurut teori dasar dilakukan dengan
menggunakan dasar perkalian mariks. Untuk mengkonversi 8x8 masukan
sampel ke dalam domain transform, dan perkalian dua matriks mutlak
diperlukan. Pada CUDA, peta pendekatan dijelaskan baik untuk model
pemrograman CUDA dan arsitektur parallel khususnya.
Gambar dibagi menjadi satu set blok seperti yang ditunjukkan pada
gambar di bawah ini.

ALGORITMA DCT 8X8 PADA KOMPUTASI SEKUENSIAL DAN PARALEL

Setiap satu set blok-CUDA menjalankan 64 thread untuk melakukan


penghitungan DCT. Masing-masing thread di blok-CUDA menghitung
koefisien DCT tunggal. Semua bentuk persinyalan sebelum di hitung akan
disimpan dalam bentuk array yang terletak pada memori. Fungsi Dua
dimensi DCT ukuran NxN didefinisikan sebagai berikut :
Array pada memori konstan tersebut ditampilkan sebagai array dua
dimensi yang berisi nilai-nilai fungsi dasar yaitu A (x,u).

ALGORITMA DCT 8X8 PADA KOMPUTASI SEKUENSIAL DAN PARALEL

Dua dimensi DCT dilakukan dalam empat jumlah thread):


1. Thread dengan koordinat (ThreadIdx.x, ThreadIdx.y) memuat satu pixel dari tekstur
untuk memori bersama. Untuk memastikan seluruh blok dimuat untuk saat ini, semua
thread yang melewati titik sinkronisasi.

2. Thread menghitung dot product antara dua vektor: Kolom ThreadIdx.y dari kosinus
koefisien (yang sebenarnya deretan A^T dengan nomor yang sama) dan ThreadIdx.x
kolom dari blok masukan. Untuk memastikan semua koefisien dari (A^T)X adalah
dihitung, dan harus di sinkronisasikan.
3. Thread dihitung dengan formula ( A^TX ) A , dengan cara yang sama seperti langkah 2
4. Seluruh blok akan disalin dari shared memory untuk hasil output dalam global
memorydan setiap thread bekerja dengan single pixel.

ALGORITMA DCT 8X8 PADA KOMPUTASI SEKUENSIAL DAN PARALEL

Jika dilihat model komputasi algoritma DCT 8x8 pada thread yaitu sebagai
berikut :

Model komputasi DCT pada GPU ditunjukkan pada gambar di atas. Setiap blok
thread menghitung satu sub persegi untuk mendapatkan hasil perhitungan matriks
( Kotak persegi hijau ). Setiap thread dalam blok menghitung satu elemen matriks.
Blok biru menunjukkan bagaimana perhitungan dilakukan . Elemen pada matriks
asli dan transfer matriks koefisien disorot dengan warna yang berbeda. Untuk
mentransfer kolom kedua, matriks akan bertukar posisi.

ALGORITMA DCT 8X8 PADA KOMPUTASI SEKUENSIAL DAN PARALEL

Model Pengalokasian Memori pada algoritma DCT 8x8


setiap elemen me-load dari memori global untuk berbagi memori . Karena
ukuran blok di atur menjadi 8x8, maka indeks thread akan menjadi jumlah
indeks pada bank memori. Setelah menyelesaiakan perhitungan, data
memori akan di-load kembali ke memori global. Untuk menyesuaikan
model perhitungan dengan ukuran piksel matriks . Maka dibuatlah
padding lokasi yang di set sebagai warna biru terang agar akses memori
menjadi selaras ketika mengeksekusi program

HASIL PENGUJIAN DAN ANALISA


Grafik Percobaan Komputasi Sekuensial pada setiap citra uji

HASIL PENGUJIAN DAN ANALISA


Grafik Percobaan Komputasi Paralel GPU pada setiap citra uji

HASIL PENGUJIAN DAN ANALISA


Grafik Perbandingan Waktu proses kompresi Citra pada Komputasi
Sekuensial dan Komputasi Paralel GPU pada setiap citra uji

KESIMPULAN
Proses kompresi citra dengan metode DCT 8x8 dapat diimplementasikan
pada arsitektur parallel GPU sehingga dapat menjadi pilihan alternatif untuk
memproses kompresi suatu citra dengan tidak hanya memanfaatkan
arsitektur sekuensial saja.
Nilai Speedup dari beberapa citra uji

KESIMPULAN
Hasil akhir yang didapat dapat disimpulkan bahwa speed up bersifat terus
meningkat terhadap data citra uji serta speedup bersifat non-linear
terhadap data citra uji. Karena pengaruh jumlah piksel yang semakin besar
menyebabkan penghitungan bit-bit citra menjadi lebih kompleks.
Dari percobaan yang telah dilakukan pada beberapa citra uji tentang
komputasi sekuensial dan komputasi parallel pada proses kompresi maka
speedup akan terus meningkat jika jumlah piksel semakin besar. Hal ini
sesuai dengan Hukum Gustafson yang berbunyi Speedup akan meningkat
jika ukuran data juga ditingkatkan .

SARAN
Mengingat masih banyaknya perbaikan yang perlu dilakukan pada skripsi ini,
maka penulis mempertimbangkan beberapa saran yang diperlukan dalam
proses untuk mengembangkan materi skripsi penulis di kemudian hari,
diantaranya adalah :
1. Melakukan ujicoba jika metode DCT8x8 pada CUDA di implementasikan
untuk transmisi citra menggunakan kanal multipath.
2. Melakukan perbandingan komputasi waktu setiap citra uji antara metode
DCT 8x8 pada CUDA dengan metode Fraktal pada CUDA.

Anda mungkin juga menyukai