Top Banner
ANALISIS PERBANDINGAN KOMPUTASI SEKUENSIAL DAN KOMPUTASI PARALEL GPU MEMANFAATKAN TEKNOLOGI NVIDIA CUDA PADA APLIKASI KOMPRESI CITRA MENGGUNAKAN ALGORITMA DCT 8X8 Oleh : Andika Januarianto Email : [email protected]
27

CUDA with DCT Algorithm

Jun 25, 2015

Download

Technology

CUDA merupakan arsitektur grafik processor (GPU) yang dikembangkan oleh perusahaan NVIDIA dengan tujuan untuk menigkatkan komputasi perhitungan secara paralel agar penerapan aplikasi sperti kompresi citra dapat berjalan lebih cepat bila dibandingkan dengan komputasi paralel pada CPU
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CUDA with DCT Algorithm

ANALISIS PERBANDINGAN KOMPUTASI SEKUENSIAL DAN

KOMPUTASI PARALEL GPU MEMANFAATKAN TEKNOLOGI NVIDIA CUDA PADA APLIKASI

KOMPRESI CITRA MENGGUNAKAN ALGORITMA DCT 8X8

Oleh :Andika Januarianto

Email : [email protected]

Page 2: CUDA with DCT Algorithm

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?

Page 3: CUDA with DCT Algorithm

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 ?

Page 4: CUDA with DCT Algorithm

BATASAN MASALAH1. 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

Page 5: CUDA with DCT Algorithm

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 .

Page 6: CUDA with DCT Algorithm

KOMPRESI CITRAKompresi 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 )

Page 7: CUDA with DCT Algorithm

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.

Page 8: CUDA with DCT Algorithm

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.

Page 9: CUDA with DCT Algorithm

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

Page 10: CUDA with DCT Algorithm

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__

Page 11: CUDA with DCT Algorithm

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.

Page 12: CUDA with DCT Algorithm

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

Page 13: CUDA with DCT Algorithm

GPU ( Graphic Processing Unit )

• Eksekusi Program pada GPU

• Kernel sendiri dijalankan dengan

banyak 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

Page 14: CUDA with DCT Algorithm

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.

Page 15: CUDA with DCT Algorithm

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.

Page 16: CUDA with DCT Algorithm

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).

Page 17: CUDA with DCT Algorithm

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.

Page 18: CUDA with DCT Algorithm

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.

Page 19: CUDA with DCT Algorithm

ALGORITMA DCT 8X8 PADA KOMPUTASI SEKUENSIAL DAN PARALEL

• Model Pengalokasian Memori pada algoritma DCT 8x8setiap 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

Page 20: CUDA with DCT Algorithm

HASIL PENGUJIAN DAN ANALISA

• Grafik Percobaan Komputasi Sekuensial pada setiap citra uji

Page 21: CUDA with DCT Algorithm

HASIL PENGUJIAN DAN ANALISA

• Grafik Percobaan Komputasi Paralel GPU pada setiap citra uji

Page 22: CUDA with DCT Algorithm

HASIL PENGUJIAN DAN ANALISA

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

Page 23: CUDA with DCT Algorithm

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

Page 24: CUDA with DCT Algorithm

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” .

Page 25: CUDA with DCT Algorithm

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.

Page 26: CUDA with DCT Algorithm

Referensi[1] Obhukov, Anton and Kharmalov, Alexander. Discrete Cosine Transform for

8x8 Blocks with CUDA. s.l. : NVIDIA Corporation, 2008.[2] Nvidia Corporation. Nvidia Corp. Nvidia Corp website. [Online]

http://developer.download.nvidia.com/compute/cuda/2_3/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.3.pdf. 2009.

[3] Analisis Kinerja Perkalian Matriks Paralel Menggunakan Metrik Isoefisiensi. Kartawijaya, Maria. 2, Jakarta : TESLA, 2008, Vol. 10.

Page 27: CUDA with DCT Algorithm

Q & A