Minggu, 16 April 2017

CUDA (Compute Unified Device Architecture)


Nama    : Arief Nugraha
NPM     : 51413300
KELAS : 4IA12

            ABSTRAK
GPU (Graphic Processing Unit) merupakan prosesor khusus untuk bagian grafis 3D dari microprocessor . GPU dipopulerkan oleh NVIDIA, NVIDIA juga mengembangkan sebuah teknologi yang bernama CUDA (Compute Unified Device Architecture). CUDA (Compute Unified Device Architecture) adalah sebuah arsitektur perangkat keras dan perangkat lunak untuk mengelola komputasi secara paralel pada perangkat keras GPU. Setiap perangkat GPU berkemampuan CUDA dapat bertindak sebagai sebuah perangkat komputasi data paralel secara massal dengan jumlah memori yang besar.

Pada Tugas akhir ini dilakukan analisis konfigurasi fungsi kernel secara eksplisit pada GPU CUDA, dengan studi kasus: perkalian matriks, yaitu dengan pembagian proses kedalam block, thread, dan kombinasi antara block dan thread. Dari hasil analisis, didapatkan hasil bahwa tidak ada perbedaan yang signifikan antara waktu pengujian dan variabel block dan thread pada pengujian block saja dan thread saja. Sedangkan pada pengujian yang menggunakan kombinasi antara block dan thread, didapatkan hasil adanya perbedaan yang signifikan antara kedua variabel block dan thread terhadap waktu percobaan dan adanya interaksi antara variabel block dengan variabel thread pada tiap masing-masing waktu pengujian percobaan

Kata kunci: GPU, CUDA, perkalian matriks, kernel.


         PENDAHULUAN

Perkembangan  media  teknologi  semakin  pesat,  salah  satunya  adalah Augmented Reality (AR). Augmented Reality mulai digunakan sebagai media iklan, informasi dan edukasi. Augmented Reality merupakan teknologi yang dapat menambahkan object dalam suatu tampilan atau gambar secara langsung menggunakan konsep komputer visual. Pada dasarnya Augmented Reality lebih banyak digunakan dalam bentuk yang sederhana menggunakan marker atau markerless, tetapi komputasinya membutuhkan resource yang cukup besar karena didalam proses Augmented Reality terdapat proses tracking dan juga 3D object rendering. Untuk itu, dalam pembuatannya dalam kasus ini digunakan sistem paralel GPU menggunakan Nvidia CUDA.

Penelitian dalam bidang Augmented Reality sudah banyak dilakukan, penelitian bertujuan untuk mendapatkan Augmented Reality yang memiliki performansi yang baik. Permasalahan yang menjadi pokok utama dalam penelitian tersebut bukanlah mengenai rendering object 3D tapi mengenai object tracking[15]. Object tracking adalah salah satu kunci utama dalam Interactive Augmented Reality, pendeteksian gesture dan object membutuhkan algoritma yang dapat memodelkan object dengan baik salah satunya adalah dengan menggunakan Haar Classifier dengan algoritma Viola-Jones.

Algoritma Viola-Jones merupakan algoritma yang digunakan untuk melakukan pendeteksian wajah. Namun pada perkembangannya metode tersebut dapat digunakan pada pendeteksian object lain seperti tangan, mata, jari dan seluruh tubuh. Metode tersebut membutuhkan resources komputasi yang sangat besar. Algoritma yang digunakan pada object tracking sangat mempengaruhi performansi dari sistem AR. Jika menggunakan algoritma dengan kompleksitas yang tinggi maka konsep real-time akan menjadi sulit diimplementasikan. Oleh karena itu digunakan suatu arsitektrur paralel yang dapat mengurangi kompleksitas waktu yang tinggi yaitu dengan menggunakan CUDA.

Nvidia CUDA merupakan extensi untuk beberapa bahasa pemprograman seperti C dan C++. Dengan menggunakan CUDA dimungkinkan untuk melakukan proses komputasi menggunakan GPU. Dengan menggunakan CUDA, programmer dapat membuat suatu algoritma paralel dan membagi proses tersebut kedalam block-block dan thread yang terdapat di dalam GPU. Pemprograman CUDA sering kali menggunakan representasi vektor, data yang digunakan kemudian dimasukkan kedalam array dimana array tersebut diproses didalam block atau thread tergantung kebutuhan.

Dengan memanfaatkan kemampuan dari CUDA tersebut, diharapkan kualitas dari Augmented Reality menjadi sangat baik dilihat dari kecepatan frame per second (fps) atau jumlah frame yang diolah perdetik. Bukan hanya untuk Augmented Reality sederhana menggunakan marker yang diharapkan memiliki performansi yang baik, tetapi juga Markerless Augmented Reality yang dapat berinteraksi dengan object nyata. Produk Augmented Reality tersebut dapat dimanfaatkan untuk berbagai bidang seperti pendidikan, periklanan, atau mungkin juga untuk membuat game jenis baru yang sangat interaktif hanya menggunakan komputer dan kamera. Dengan menggunakan Augmented Reality, diharapkan dapat membantu menyelesaikan masalah dan menjawab tantangan dunia dalam bidang komputasi dan komputer visual. Sebagai contoh, jika Augmented Reality digunakan dalam proses belajar, maka proses pembelajaran tersebut akan lebih menarik dan mudah dimengerti.

            PEMBAHASAN

CUDA adalah sebuah teknologi yang dikembangkan oleh NVIDIA untuk mempermudah utilitasi GPU untuk keperluan umum (non-grafis). Arsitektur CUDA ini memungkinkan pengembang perangkat lunak untuk membuat program yang berjalan pada GPU buatan NVIDIA dengan syntax yang mirip dengan syntax C yang sudah banyak dikenal. Akibatnya, sekarang para developer dapat memanfaatkan kemampuan prosesing GPU untuk mengakselerasi komputasi program mereka dengan jaaauuuuh lebih mudah.
Lalu apa manfaatnya susah-susah menggunakan GPU untuk menjalankan program? Begini, berbeda dengan CPU yang harus siap untuk menjalankan berbagai instruksi program, GPU didesain khusus untuk menghitung dan menyajikan pixel-pixel gambar yang akan ditampilkan. Karena satu pixel tidak berhubungan dengan pixel yang lain, GPU dirancang untuk melakukan banyak operasi secara paralel. Nah, kemampuan eksekusi paralel secara masif inilah yang kemudian dapat dimanfaatkan dengan CUDA.
Pemorgraman CUDA sama seperti membuat program C biasa. Saat kompilasi, syntax2 C biasa akan diproses oleh compiler C, sedangkan syntax dengan keyword CUDA akan diproses oleh compiler CUDA (nvcc)
Bagaimana bagi pengguna biasa, apakah ada manfaat yang bisa didapat dari membeli hardware berteknologi CUDA. Hmm, saat ini sudah mulai banyak software yang mendukung akselerasi dengan CUDA. Misalnya MATLAB dan beberapa plugin dari Adobe Photoshop CS5. Bila perangkat lunak ini mendeteksi adanya hardware yang kompatibel dengan CUDA, maka beberapa proses komputasinya akan dilaksanakan oleh GPU. Walhasil, program akan dapat dieksekusi dengan lebih cepat. Review di tomshardware ini contohnya, menampilkan pengurangan waktu eksekusi yang mengesankan dari plugin Photoshop untuk manipulasi gambar.
Seperti telah disebutkan, CUDA memungkinkan programmer untuk mengeksekusi program pada GPU. Tentu saja, program – program yang akan mendapat akselerasi adalah program-program yang dapat dipecah menjadi banyak eksekusi paralel. Untungnya, buanyak komputasi saintifik masuk pada kategori tersebut. Beberapa aplikasinya antara lain Computational Fluid Dynamics (CFD), Molecular Dynamics, Seismic Simulation, Simulasi Finansial dan Saham, Image Processing dan Video Processing
Secara bisnis ini adalah ide yang luar biasa. Pengembangan hardware GPU telah mendapat “subsidi” dari industri gaming dan hasilnya sekarang dapat digunakan untuk aplikasi yang lebih, ahem, “berguna”. Tidak heran saat ini teknologi CUDA telah merevolusi dunia High Performance Computing.
CUDA adalah sebuah arsitektur pemrograman untuk General Purpose Graphics Processing Unit (GPGPU). Secara umum, komponen-komponen pendukung CUDA adalah:
  • ·         Aplikasi, adalah perangkat lunak yang dibuat oleh penguna, memakai bahasa pemrograman khusus (kembangan C).
  • ·         Pustaka perangkat lunak, yang menyediakan layanan dasar untuk program aplikasi mengakses CPU maupun GPU.
  • ·         Perangkat keras khusus, yaitu GPU yang menyediakan mesin paralel.
  • ·         Perangkat keras CPU, sebagai mesin sekuensial.

Dengan demikian, seorang pengguna CUDA haruslah membuat program dulu dalam bahasa pemrograman kembangan C (dengan ditambahi beberapa sintak yang sangat memudahkan pemrograman paralel tingkat tinggi). Kode sumber program itu dikompilasi, kemudian dijalankan. Program CUDA induk akan berjalan di CPU, sedangkat bagian paralelnya akan berjalan di GPU.

Model pemrograman CUDA adalah membagi pekerjaan yang akan di lakukan ke banyak unit pemroses paling kecil, yakni thread. Setiap thread memiliki memori tersendiri dan mengerjakan inti pekerjaan yang kecil dan akan berjalan bersamaan dengan thread lain sehingga waktu yang di butuhkan untuk mengerjakan pekerjaan seluruhnya menjadi lebih singkat. Kumpulan dari thread tersebut disebut sebagai blok dalam blok memiliki satu memori tersendiri yang bisa di gunakan thread dalam blok tersebut. Media untuk saling berkomunikasi antar thread dinamakan dengan Share memori. Setiap blok akan di kelompokkan lagi menjadi sebuah grid yang menjadi sekumpulan block yang digunakan dalam komputasi.

                                               


CPU dalam CUDA disebut dengan istilah Host, dan GPU disebut dengan istilah Device. Ada 2 bagian pada pemrograman CUDA yaitu fungsi yang di jalankan pada CPU dan fungsi yang di jalankan pada GPU, karnel adalah sebutan untuk program CUDA yang berjalan pada GPU. Pada saat fungsi ini berjalan, pemogram harus memberikan informasi pada GPU untuk memesan berapa banyak block, thread yang akan digunakan dalam masing-masing block.

Perangkat CUDA menggunakan spasi memori yang memiliki karakteristik yang berbeda yang menunjukkan yang berbeda dalam aplikasi Cuda. Ruang ruang memory pada CUDA seperti terlihat pada Gambar.

        


                                         

PENUTUP

GPU terdiri dari ribuan core yang bisa mengeksekusi perintah secara paralel. Dengan kartu grafis yang memiliki kemampuan GPU Acceleration, para programmer ini bisa mengaplikasikan pemrograman dengan teknik paralel computing ke dalam core-core GPU (bersama-sama CPU). Dengan begitu, proses-proses di dalam software (rendering contohnya) menjadi lebih cepat.


                         Daftar Pustaka