Rabu, 17 Juni 2015

Implementation on Graphics Hardware

Nama Kelompok:
·         Desty Putri A              51411913
·         Dian Ayu K                 52411021
·         Fitri Cynthia D           52411917
·         Priskyla Vivi E           55411585
·         Syara Safrila              57411900


Dalam rangka untuk menunjukkan bahwa hardware grafis mendukung Streaming model pemrograman, kami telah mengimplementasikan Brook di atas OpenGL dan Cg. Implementasi kami benar-benar menyembunyikan semua referensi ke API grafis dan hanya memperlihatkan antarmuka diuraikan dalam bagian sebelumnya . Sistem ini terdiri dari dua komponen: compiler kernel, yang mengkompilasi fungsi kernel ke dalam kode Cg hukum, dan sistem runtime dibangun di atas OpenGL yang mengimplementasikan Brook API.
·         Streaming
Data aliran berada di 2D floating point tekstur. ketika program aplikasi mengeluarkan panggilan LoadStream, runtime sistem membuat objek tekstur 2D dan salinan data ke tekstur. Output stream dari kernel ditulis ke floating point Buffer dan disalin kembali menjadi objek tekstur. Ketika aplikasi host mengeluarkan panggilan StoreStream, yang sistem runtime menjemput data tekstur dari grafis kartu memori ke dalam inang.

·         Program Kernel
Kernel dikompilasi menggunakan compiler Brook menghasilkan Cg hukum kode untuk prosesor FX fragmen NVidia GeForce. Compiler dibangun menggunakan utilitas parser Bison dan penganalisis leksikal Flex. Alat-alat ini mengurai Brook kernel code dan ekstrak argumen dan kode tubuh. Hasil dilewatkan ke script yang output fungsi Cg.
Pada Implementasi Graphics Hardware, disini jugta dari GPU tersebut dapatdi impementasi dengan menggunakan GPU di NVIDIA CUDA. Dengan analisa implementasi hasil review jurnal Data Parallel Computation on Graphics Hardware yaitusalah satumasalah terbesar dalam program GPU saat ini adalah bahwa kernel tertentu tidak dapat dijalankan pada perangkat keras karena kendala pada sumber dayanya. Termasuk kendala pada jumlah instruksi, jumlah register, jumlah Vertex Interpolant, dan jumlah Outputnya. Dalam [Chan et al. 2002], algoritma dikembangkan untuk membagi kernel besar secara otomatis ke kernel yang lebih kecil. Algoritma yang menangani banyak kendala pada sumber daya, tetapi tidak bekerja untuk beberapa output. Pemecahan masalah ini menjadi prioritas tinggi untuk pekerjaan di masa depan.

GPU (Graphic Processing Unit)  merupakan sebuah alat/hardware, yang berfungsi sebagai render grafis terdedikasi dalam kesatuan sistem hardware PC atau Notebook. GPU bisa berada pada Video Card khusus (VGA Card) atau terintegrasi dalam Motherboard berupa Integrated GPU. GPU berfungsi untuk mengolah dan memanipulasi grafis pada CPU (Central Processing Unit), untuk nantinya ditampilkan dalam bentuk Visual Grafis pada Monitor (output).

CUDA(Compute-Unified-DeviceArchitecture)adalaharsitekturkomputasi paralelyang dikembangkan oleh NVIDIA. CUDA adalah mesin komputasi dalam pemrosesan grafis NVIDIA unit (GPU) yang dapat diakses oleh pengembang perangkat lunak melalui varian dari bahasa pemrograman standar industri. CUDA merupakan kumpulan program-program yang menerjemahkan teks dalam bentuk bahasa komputer (computer language) berupa source language/source code, ke dalam bentuk bahasa komputer yang lain (target language/object code). Arsitektur CUDA memungkinkan GPU (yang telah support CUDA) menjadi arsitektur terbuka seperti layaknya CPU (Central Processing Unit a.k.a Processor). Hanya, tidak seperti CPU, GPU memiliki arsitektur banyak-inti yang pararel.
Komputasi Parallel pada GPU
§  GPU computing (General Purpose GPU – GPGPU) merupakan konsep pemrograman parallel yang menggunakan GPU sebagai media komputasi untuk memproses komputasi yang umumnya dikerjakan CPU.
§  Model untuk komputasi GPU adalah dengan menggunakan CPU dan GPU bersama-sama dalam suatu model komputasi heterogen co-processing.
§  Dari sudut pandang pengguna, aplikasi akan berjalan lebih cepat karena menggunakan kinerja-tinggi dari GPU untuk meningkatkan kinerja.
§  CPU lebih spesifik menangani permasalahan logika, sedangkan permasalahan komputasi diserahkan kepada GPU.
Berikut ini adalah gambar diagram Operasi floating-point CPU dan GPU pada beberapa produk Nvidia




Gambar diagram operasi floating-point CPU – GPU dan memory bandwith untuk CPU – GPU



Perbedaanfloating-point operationdanmemory bandwithada karena GPU dispesialisasikan untuk menangani komputasi secara paralel. Pada GPU dirancang lebih banyak transistor yang didedikasikan untuk mengolah data daripadadata cachingdanflow control.
Untuk penggunaan / implementasi cuda kita bisa menggunakan beberapa software yang bisa digunakan untuk membuat program dengan dukungan teknologi CUDA seperti :
§  CUDA x86 Compiler, hasil kerja sama NVIDIA dan Portland Group untuk membuat aplikasi dengan menggunakan CUDA.
§  ANSYS, spesialisasi di bidang desain dan simulasi yang memanfaatkan CUDA untuk melakukan simulasi. Satu proses simulasi, misalnya simulasi kemungkinan masalah yang terjadi pada roda pesawat terbang, membutuhkan kemampuan proses yang tinggi.
§  Autodesk,menambahkan dukungan terhadap CUDA pada aplikasi populer mereka, 3ds Max, melalui plugin iray. iray memungkinkan rendering objek 3D dilakukan dengan menggunakan GPU yang mendukung CUDA.
§  Autodesk juga menunjukkan sebuah proyek masa depan dimana pengguna 3ds Max bisa melakukan editing dari jarak jauh pada aplikasi 3ds Max yang terpasang di server yang didukung tenaga 32 GPU Fermi, hanya melalui sebuah browser.
§  MATLAB

Analisis:
Jurnal tersebut menindak dengan Brook[1] bahwah graphic hardware lebih cepat dari CPU karena memanfaatkan komputer paralel. Lebih cepatnya dalam paralelisme data dan aritmatika intensitas (rasio perhitungan bandwidth). Sistemnya menggunakan dua komponen: compiler kernel (yang mengkompilasi fungsi kernel ke dalam kode Cg) dan sistem runtime dibangun di atas OpenGL (yang mengimplementasikan Brook API).
Setelah di implementasikan pada graphic hardware, ternyata GPU berada pada posisi yang kurang menguntungkan daripada CPU. dikarenakan terdapat masalah terbesar dalam program GPU, yaitu kernel tidak dapat dijalankan pada perangkat keras karena sumber daya kendala. Ini termasuk jumlah instruksi, yang jumlah register, jumlah interpolants vertex, dan jumlah outputnya.
Catatan:
[1] Brook adalah sebuah model pemrograman yang ideal untuk komputasi tujuan umum pada perangkat keras grafis mendorong programmer untuk menulis kode paralel data dengan intensitas aritmatika tinggi. Brook untuk streaming hardware.







Referensi


http://diahpermatasari19.blogspot.com/2014/05/komputasi-paralel-pada-graphics-hardware.html

Kamis, 16 April 2015




TUGAS SOFSKILL PENGANTAR KOMPUTASI MODERN

Review Jurnal
“Data Parallel Computation on Graphics Hardware"











Nama Kelompok:
·         Desty Putri A              51411913
·         Dian Ayu K                 52411021
·         Fitri Cynthia D           52411917
·         Priskyla Vivi E           55411585
·         Syara Safrila              57411900


TEKNIK INFORMATIKA
UNIVERSITAS GUNADARMA
           2015



















Abstraksi

Seiring dengan terus meningkatnya programabilitas dan kinerja GPU ( Graphics Proccessing Unit ) , banyak peneliti yang melirik ke Graphics Hardware untuk mengatasi masalah yang biasanya terjadi pada CPU. Dalam banyak kasus, melakukan perhitungan dengan menggunakan Graphic Hardware dapat memberikan keuntungan yang signifikan dibandingkan dengan implementasi pada CPU tradisional. Namun, jika GPU adalah sumber pemrosesan yang kuat, penting untuk membangun sebuah abstraksi yang benar terhadap hardware tersebut, yang nantinya akan mendorong sebuah desain aplikasi yang lebih efisien dengan peningkatan antarmuka untuk para desainer hardware.
BAB I
Pendahuluan

Data komputasi parallel memberikan hasil yang lebih baik pada desktop PC, ketika hardware grafis deprogram lebih modern. Sejak beberapa tahun terakhir, komoditas hardware grafis telah berkembang pesat dari fungsi pipeline yang tetap menjadi simpul yang dapat diprogram ( Programmable Vertex ) dan Fragment Processor. Sementara ini programabilitas baru dirancang terutama untuk Real-Time Shading, banyak peneliti telah mengamati bahwa perancangan tersebut dapat melampaui proses rendering. Aplikasi seperti Matrix Multiply [Larsen and McAllister 2001], Cellular Automata [Harris et al. 2002], dan Complete Ray Tracer [Purcell et al. 2002], dimana aplikasi tersebut sudah terhubung dengan GPU. Penelitian ini memperlihatkan potensi dari Hardware Grafis dalam menyelesaikan tugas-tugas komputasi secara umum. Bahkan, arsitektur Hardware Grafis yang akan datang memungkinkan dapat digunakan untuk simulasi fenomena alam, Physicsbased Model, dan AI.
Tujuan penulisan dari juranal ini adalah untuk menunjukkan model pemograman Streamuntuk perhitungan secara umum pada Hardware Grafis. Kontribusi dari jurnal ini meliputi :
  1. Menjelaskan dua alasan utama bahwa hardware grafis lebih cepat daripada CPU melaui Data Paralelisme dan Intensitas Aritmatika (rasio perhitungan bandwidth).
  2. Menggunakan pengamatan sebagai panduan, dengan menyajikan lingkungan pemograman yang disebut Brook.
  3. Menunjukkan bagaimana berbagai macam algoritma data parallel dapat diimplementasikan ke dalam Brook, dan menjalankannya pada Hardware Grafis.
  4. Menganalisa implementasi pemograman Hardware Grafis saat ini, dan memberikan arahan untuk desain hardware masa depan.
BAB II
Pembahasan Hasil Review
  
    1. Dua alasan utama Hardware Grafis lebih cepat dari CPU
Disini ditunjukkan mengapa Hardware Grafis bisa lebih cepat dari CPU dengan menggunakan metode Data Paralleisme dan Intensitas Aritmatika, karena Data Paralelisme dapat memungkinkan sistem untuk menggunakan sejumlah besar ALUdan menyembunyikan latency memori, jadi sistem dapat menempati semua ALU dengan mengeksekusi beberapa salinan paralel dari program lalu latency dari proses pembacaan memori dapat disembunyikan, Teknik menyembunyikan latency memori pertama kali diterapkan dalam arsitektur grafis untuk menyembunyikan latency pengambilan tekstur pada gambar [Torborg dan Kajiya 1996; Anderson et al. 1997; Igehy et al. 1998]. Sedangkan Intensitas Aritmatika adalah rasio operasi aritmatika dilakukan per operasi memori, atau mentransfer per kata. Sebagai contoh, pemograman fragment processor saat ini sistem memori memungkinkan satu miliar 128 bit kata per detik dapat dibaca ketika tingkat penghitungan empat kali lebih cepat, jadi dari operasi aritmatika tersebut menunjukkan rasio mencapai hingga 4 miliar 128-bit operasi per detik.
  2.   Model Pemograman Brook Stream.
Merupakan sebuah model pemograman yang ideal yang ditunjukkan untuk komputasi hardware grafis, dimana mengharuskan programer untuk menuliskan kode untuk pemrosesan parallel dengan intensitas aritmatika yang tinggi.
Berikut ini adalah gambaran dari antarmuka brook untuk streaming hardware :
  •          Streaming
Merupakan kumpulan records/data yang memerlukan penghitungan yang sama. Sebuah record bisa jadi dari beberapa tipe pendukung dari sebuah hardware, mulai dari nilai float tunggal sampai struktur yang kompleks.
Streaming pada Brook dibentuk melalui API LoadStream, cara pemanggilannya :
stream s = LoadStream (float, n, data);
Dimana float adalah tipe elemen, dan n adalah banyaknya tpe elemen float pada data array.
  •          Kernel Functions
Kernel Functions merupakan suatu fungsi yang membedakan antara pemogramanStream dengan pemograman Vektor yang tradisional. Kernel Functions memungkinkan evaluasi fungsi arbitrary dimana operator vector terdiri dari operasi matematika sederhana. Kernel Functions dikompilasi secara terpisah dari aplikasi menggunakan Brook Compiler. Fungsi LoadKernel adalah memuat Kernel yang sudah dikompilasi dari sebuah file dan memberikan pengidentifikasianKernel.KernelMap menjadi sebagai masukan kernel, stream, dan konstanta pengidentifikasi dan mengeksekusi kernel pada setiap elemen dari input stream.
  •         Reduction
Sementara Kernel Functions menyediakan mekanisme untuk menerapkan fungsi untuk satu set data, Reduction menyediakan data dari metode paralel untuk menghitung nilai tunggal dari satu set record. Contoh dari operai Reduction termasuk juga dari penjumlahan aritmatika sederhana, komputasi maksimum, atau operasi yang lebih kompleks seperti Matrix Multiplication.
  •         Scatter and Gather
Operasi Scatter and Gather menyediakan peningkatan secara tidak langsung dalam membaca atau menulis data. Brook memisahkan operasi Scatter dari Ghather untuk mempertahankan Data Paralel. Jika kita diijinkan menulis dan membaca pada elemen arbitrary didalam Kernel, maka kita akan diperkenalkan dengan depedensi antara elemen Stream.
  •       Implementasi pada Hardware Grafis
Dalam rangka untuk menunjukkan bahwa hardware grafis mendukung pemrograman modelStreaming. Maka dibangunlah sebuah sistem yang dapat mengimplementasikan Brook di atas OpenGL dan Cg. Implementasi ini benar-benar menyembunyikan semua referensi ke API grafis dan hanya memperlihatkan antarmuka pada bagian sebelumnya. Sistem ini terdiri dari dua komponen: compiler kernel, yang mengkompilasi fungsi kernel ke dalam kode Cg, dan sistem runtime dibangun di atas OpenGL yang mengimplementasikan Brook API.

Ø  Streaming
Data Stream berada di tekstur 2D floating point. ketika program aplikasi mengeluarkan panggilan LoadStream, runtime sistem membuat objek tekstur 2D dan salinan data ke tekstur. Output stream dari kernel ditulis ke floating point Buffer dan disalin kembali menjadi objek tekstur. Ketika aplikasi host mengeluarkan panggilan StoreStream, sistem runtime mengambil data tekstur dari kartu grafis ke dalam host memori.
Ø  Kernel Programs
Kernel dikompilasi menggunakan Brook Compiler yang menghasilkan kode Cg yang legal untuk hardware grafis seperti NVidia GeForce FX fragment processor. Compiler dibangun menggunakan Utility Parser Bison dan Lexical Analyzer Flex. Alat-alat ini menguraikan kode Kernel dan mengekstrak argument-argumen danBody Code. Nantinya hasil akan berupa scripts yang outputnya adalah fungsi Cg.
Ø  Kernel Execution
Ketika aplikasi mengeluarkan panggilan KernelMap, runtime sistem mengeksekusi kernel lalu dimuat menggunakan Fragment Processor. Sistem runtime mengikat tekstur input, dan meng-set semua variabel konstan, dan mengikat shader fragmen yang sesuai untuk kernel. Untuk menjalankan kernel, sistem mengeluarkan quad besar berisi jumlah fragmen yang sama sebagai elemen dalam input stream.
Ø  Reduce
Hardware grafis tidak memiliki metode asli untuk reduksi. Brook runtime mengimplementasikan reduksi melalui sebuah metode Multipass, sama seperti jaringan reduksi pada arsitektur data parallel.
Ø  Scatter and Gather
Operasi Scatter dan Gather tidak didukung oleh hardware fragmen. Brook menerapkan Scatter dengan rendering point ke dalam stream tujuan sebagai berikut. Pertama stream tujuan diberikan ke offscreen pBuffer. Selanjutnya, sistem mengambil index stream dari tekstur 2D. Menggunakan data indeks, sistem membuat Poin OpenGL diposisikan sesuai dengan indeks nilai. Dengan pengguna tertentu, ScatterOp kernel terikat, dimana titik fragmen melakukan pengurangan dengan mengambil dua nilai-nilai untuk mengurangi dari tekstur dan menulis hasilnya ke dalam pBuffer. Setelah semua poin telah diberikan, maka data akan tersebar ke stream tujuan pada pBuffer.

   3.  Analisa Implementasi Hardware Grafis Saat Ini, dan Arahan untuk Desain Masa Depan.
Salah satu masalah terbesar dalam program GPU saat ini adalah bahwa kernel tertentu tidak dapat dijalankan pada perangkat keras karena kendala pada sumber dayanya. Termasuk kendala pada jumlah instruksi, jumlah register, jumlahVertex Interpolant, dan jumlah Outputnya. Dalam [Chan et al. 2002], algoritma dikembangkan untuk membagi kernel besar secara otomatis ke kernel yang lebih kecil. Algoritma yang menangani banyak kendala pada sumber daya, tetapi tidak bekerja untuk beberapa output. Pemecahan masalah ini menjadi prioritas tinggi untuk pekerjaan di masa depan.
Perubahan besar dalam hardware saat ini yang diperlukan untuk mendukung model hardware masa depan adalah:
§              $  Notasi pada input dan output streaming untuk ukuran record yang lebih besar.
§                        $ Peningkatan dukungan untuk Reductions.
§                 $ Menerapkan penyelesaian Scatter and Gather secara effisien dengan menggunakan metode chace texturing.
                                            BAB III

Kesimpulan

Jurnal ini menindak tentang Brook yang merupakan sebuah model pemograman dimana mengharuskan programer untuk menuliskan kode untukpemrosesan parallel dengan intensitas aritmatika yang tinggi dan memungkinkan graphic hardware lebih cepat dari CPU karena memanfaatkan metode komputasi parallel, yaitu dengan data paralelisme dan aritmatika intensitas (rasio perhitungan bandwidth).
Sistem pada metode ini menggunakan dua komponen, yaitu : compiler kernel (yang mengkompilasi fungsi kernel ke dalam kode Cg) dan sistem runtime dibangun di atas OpenGL (yang mengimplementasikan Brook API).
BAB IV
Daftar Pustaka



http://articloud.blogspot.com/2014/08/review-jurnal-data-parallel-computation.html