Selasa, 11 Juni 2013

Perkembangan Komputasi Modern

       Sebelum kita masuk pada alat komputasi yang ada pada saat ini, ada lebih baiknya kita melihat contoh komputasi zaman dahulu. Hal ini dapat membantu kita untuk melihat perkembangan komputasi dari generasi ke generasi. Sebagai contoh, dahulu alat komputasi paling kuno adalah kertas, potlot dan karet penghapus. dari ketiga benda tersebut, orang melakukan proses-proses komputasi yang mudah hingga yang rumit dengan tiga benda sederhana ini. Akan tetapi, dengan munculnya alat-alat komputasi yang tersusun dari komponen-komponen elektro; seperti kalkulator dan mesin hitung lainnya, hal-hal komputasi yang rumit akan menjadi lebih sederhana dan memudahkan kita dalam mengerjakan suatu proses perhitungan.

  Ø  Komputasi Modern

Komputasi modern mungkin merupakan kalimat yang jarang terdengar di telinga masyarakat Indonesia pada umumnya. Komputasi modern terdiri dari dua kata yaitu komputasi dan modern untuk Komputasi dapat diartikan sebagai cara untuk menemukan pemecahan masalah dari data input dengan menggunakan suatu algoritma. Dan disebut modern karena menggunakan alat canggih saat menyelesaian masalah. Maka dapat di simpulkan Komputasi modern pengertian nya adalah cara untuk menemukan pemecahan masalah/solusi dari data input dengan menggunakan suatu algoritma tertentu. Komputasi merupakan suatu sub-bidang dari ilmu komputer dan matematika.

Selama ribuan tahun, perhitungan dan komputasi umumnya dilakukan dengan menggunakan pena dan kertas, atau kapur dan batu tulis, atau dikerjakan secara mental, kadang-kadang dengan bantuan suatu tabel. Sebenarnya sudah lama komputasi modern ini di cetuskan dan tokoh di balik semua ini yaitu John Von Neumann, Beliau merupakan ilmuan besar saat ini. Beliaulah yang pertama kali menggagaskan konsep sebuah sistem yang menerima intruksi-intruksi dan menyimpannya dalam sebuah memory dan dikenal sebagai arsitektur komputer modern.


John Von Neumann
Komputasi modern digunakan untuk memecahkan suatu masalah yang ada, perhitungan komputasi modern yaitu seperti :
              ·    Akurasi (big, Floating point)
Akurasi tentu merupakan masalah yang paling penting dalam memecahkan masalah. Karena itu pada komputasi modern dilakukan perhitungan bagaimana bisa menghasilkan suatu jawaban yang akurat dari sebuah masalah. Tentu kita pernah mendengar tipe data floating point yang biasa digunakan untuk menyimpan data numerik dalam bentuk pecahan. Tipe data tersebut memiliki range penyimpanan numerik yang besar, sehingga dapat digunakan oleh komputer untuk melakukan komputasi yang akurat.

              ·   Kecepatan (dalam satuan Hz)
Manusia pasti menginginkan masalah dapat diselesaikan dengan cepta. Karena itu perhitungan masalah kecepeatan adalah suatu hal yang penting. Komputasi harus dapat dilakukan dalam waktu yang cepat ketika mengolah suatu data. Sehingga perlu metode kecepatan untuk mengolah perhitungan dalam waktu singkat.

              ·   Problem Volume Besar (Down Sizzing atau paralel)
Data yang besar tentu membutuhkan suatu cara penyelesaian yang khusus. Karena data yang besar dapat menjadi masalah jika ada yang terlewatkan. Oleh karena itu digunakan metode Down Sizzing atau paralel pada komputasi modern untuk menangani masalah volume yang besar. Dengan metode ini data yang besar diparalelkan dalam pengolahannya sehigga dapat diorganisir dengan baik.

              ·   Modeling (NN & GA)
Modeling merupakan suatu hal yang penting dalam melakukan suatu perhitungan yang rumit. Bayangkan saja jika kita dihadapi dalam suatu masalah perhitungan yang banyak dan kompleks, tetapi tidak ada model matematika yang kita miliki. Perhitungan akan berjalan berantakan dan tidak akan mendapatkan hasil yang akurat. Maka dari itu komputasi modern membutuhkan modeling sebelum melakukan perhitungan.

              ·   Kompleksitas (Menggunakan Teori big O)
Komputasi modern dirancang untuk menangani masalah yang kompleks, sehingga diterapkan pada komputer. Dengan menggunakan teori Big O, maka komputasi modern dapat melakukan perhitungan untuk memecahkan masalah kompleksitas yang kerap dihadapi.

 Ø  Seiring dengan terus berkembangnya komputasi, tentunya akan berpengaruh terhadap penggunaan hardware dan software yang digunakan untuk komputasi tersebut. Sehingga hal ini membuat adanya sebuah evolusi mesin yang digunakan untuk pemrosesan tersebut.

 Ø  Kesimpulan saya dari artikel saya ini adalah sejak dahulu kita menggunakan perhitungan komputasi dimana digunakan untuk memecahkan masalah dalam perhitungan,hanya pemakaian alat untuk men komputasinya baik secara tradisonal atau kuno dan modern. Sebagai contoh, bangsa suku Maya yang hidup sekitar 1000 tahun yang lalu telah memanfaatkan benda langit untuk digunakan sebagai navigasi dan sistem penanggalan dan ketelitiannya pun sangat akurat.


Referensi :

Jumat, 03 Mei 2013

Parallel Reduction di CUDA


=>  Karakteristik Parallel Reduction yaitu pentingnya data umum dalam parallel sederhana(primitive). Parallel Reduction mudah di implementasikan dalam CUDA,namum sulit untuk melakukannya dengan benar. Parallel Reduction melayani optimasi yang besar contohnya kita akan menjalankan langkah demi langkah melalui 7 versi yang berbeda dan menunjukan beberapa strategi optimasi penting.

=) CONTOH
Reduksi secara paralel dapat digambarkan dengan pohon biner. Sekelompok n nilai ditambahkan dalam langkah penambahan paralel.

Parallel reduction
  

• Implementasi algoritma penjumlahan, setiap node dari pohon merupakan elemen dalam array.

+_+  Kelebihannya :

  =) Parallel Reduction mampu untuk menggunakan beberapa blok thread contohnya yaitu mampu memproses array yang sangat besar, untuk menyimpan semua multiprocessor pada GPU yang sibuk dan setiap blok thread akan mengurangi sebagian dari array.

  =) Masalah dalam Prallel Reduction adalah sinkronisasi global (Global Synchronization). Jika kita bisa melakukan sinkronisasi di semua blok thread, maka dengan mudah kita dapat mengurangi array yang sangat besar. Hal tersebut dapat dilakukan dengan cara mensinkronisasi global setelah masing-masing blok menghasilkan hasil atau output, setelah semua blok telah tersinkronisasi maka lanjutkan rekursif.

+-+  Kekurangannya :

  =) Cuda tidak memiliki global sinkronisasi karena mahal untuk membangun sebuah hardware untuk GPU dengan jumlah prosesor yang tinggi, dan akan memaksa programmer untuk menjalankan sedikit blok ( tidak lebih dari # multiprocessors * # resident blocks / multiprocessor) umtuk menghindari kebuntuan yang dapat mengurangi efisiensi keseluruhan.

+-+ Solusi dari masalah tersebut yaitu : mengurai menjadi beberapa kernel.
-  Peluncuran kernel berfungsi sebagai titik sinkronisasi global.
- Peluncuran kernel mengabaikan hardware overhead dan software overhead yang rendah.


Optimasi Solusi untuk Meningkatkan Kinerja Paralel Pengurangan Fungsi algorithmic di CUDA

  =)Menggunakan analisis mendalam tentang buku pemrograman CUDA dan praktek-praktek terbaik digambarkan dalam literatur [2], [3], [4], [5], [6] untuk mengembangkan aplikasi yang sukses di CUDA, kami telah mengidentifikasi dan mengembangkan serangkaian solusi optimasi untuk pengurangan paralel fungsi algoritmik.Solusi utama optimasi yang kami telah dikembangkan dan diterapkan, aspek sasaran mengenai: memanfaatkan GPU, kinerja AOS, penggunaan optimal bandwidth memori bersama, kemungkinan sinkronisasi, kerjasama yang efisien antara GPU dan CPU.

  =)  Berikut ini kita akan menjelaskan solusi dan pengembangan progresif yaitu :

o  Solusi 1 - The interleaved teknik pengalamatan.
        Dengan menggunakan teknik ini, kita telah menginstruksikan pertama setiap thread untuk memuat satu elemen dari memori global ke dalam memori bersama.Kami kemudian dilakukan tahap penurunan memori bersama (itu memiliki keuntungan dari throughput yang tinggi) dan hasil yang diperoleh dimuat kembali ke memori global. Kami telah menemukan bahwa teknik ini memiliki kelemahan menghasilkan warps berbeda di mana benang tidak memproses tugas yang sama. Ini warps tidak efisien dalam tahap reduksi karena mereka memperlambat pengolahan data, karena itu, kami telah memutuskan untuk mengelola divergen percabangan dalam rangka meningkatkan kinerja.

o  Solusi 2 - Menghindari divergen percabangan.
            Kami telah menghilangkan keterbatasan yang disebutkan di atas dan kami telah meningkatkan kinerja dengan mengganti divergen bercabang dengan yang non-divergen menggunakan pengindeksan langsung untuk setiap elemen dari vektor input yang akan berkurang. Teknik ini telah menghilangkan warps berbeda, tetapi dihasilkan bersama bank konflik memori karena beberapa permintaan dari memori bank yang sama, bahwa kita harus mengelola menggunakan teknik pengalamatan berurutan.

o  Solusi 3 - sekuensial teknik pengalamatan.
            Kami telah menggunakan benang, Aos pengindeksan bukannya pengindeksan langsung untuk mengelola shared konflik bank memori. Meskipun kami telah memperoleh perbaikan yang signifikan mengenai waktu eksekusi dan bandwidth, kami telah mengamati bahwa optimasi lebih lanjut masih mungkin sebagai GPU, sumber daya AOS tidak sepenuhnya bekerja. Ketika masing-masing benang beban elemen dari memori global ke dalam memori bersama, setengah dari benang dalam blok tetap siaga. Oleh karena itu, untuk memecahkan situasi ini, kami telah memutuskan untuk melakukan pengurangan memori global sebelum memuat data dalam memori bersama.

o  Solusi 4 - Melakukan pengurangan data yang disimpan dalam memori global sebelum loading ke dalam memori bersama.
            Solusi ini memecahkan kelemahan dari teknik pengalamatan sekuensial dan membawa perbaikan kinerja yang signifikan.Bahkan jika bandwidth meningkat pesat, optimasi lebih lanjut masih dapat dicapai.Fungsi pengurangan tidak melibatkan upaya komputasi meningkat tetapi jumlah besar operasi sinkronisasi yang diperlukan menyebabkan hukuman kinerja.Untuk mengatasi hukuman ini kami telah meminimalkan jumlah instruksi dieksekusi.

o  Solusi 5 - Meminimalkan jumlah instruksi dieksekusi.
            Paralel pengurangan fungsi algoritmik yang kami kembangkan adalah berguna untuk multicore arsitektur seperti SIMD (Instruksi Single, Multiple Data), di mana instruksi kasus yang sinkron dalam setiap warp. Kami telah memperhatikan bahwa, sebagai proses reduksi berlangsung, jumlah thread aktif menurun, dan ketika jumlah thread kurang dari atau sama dengan 32, hanya warp lalu tetap akan dieksekusi. Dalam warp ini kita tidak harus melakukan sinkronisasi atau untuk memvalidasi benang, Ao indeks lagi. Akibatnya, kami telah memutuskan untuk menghapus instruksi ini untuk mendapatkan peningkatan kinerja secara keseluruhan dan untuk meminimalkan sebanyak mungkin jumlah operasi sinkronisasi.

o  Solusi 6 - Pengolahan beberapa elemen per thread.
         Dengan mengurangi beberapa elemen per thread selama sama langkah pengurangan (8 elemen untuk GTX280, GTX480 16 elemen untuk elemen dan 512 untuk GTX680), kita telah mendapatkan peningkatan kinerja yang cukup untuk fungsi algoritmik reduksi.

o  Solusi 7 - Decomposing fungsi pengurangan beberapa yang lebih kecil, dalam rangka mencapai sinkronisasi global.
        Setelah setiap langkah reduksi, blok benang harus antar-mengkomunikasikan hasil parsial mereka, jadi kami harus menyinkronkannya. Tapi dalam CUDA secara teknis tidak mungkin untuk secara langsung global sinkronisasi, jadi kami telah memutuskan untuk menguraikan fungsi pengurangan menjadi beberapa fungsi kernel yang lebih kecil.Setiap panggilan fungsi kernel memberikan titik sinkronisasi dan karena itu kami telah mencapai sinkronisasi dengan biaya komputasi minimal.

o  Solusi 8 - Menggunakan CPU untuk melakukan perhitungan akhir dalam langkah terakhir dari algoritma reduksi.
        Pada langkah terakhir dari algoritma reduksi dimensi dataset berukuran dan dengan demikian, jika kita telah menggunakan GPU untuk melakukan pengurangan dalam hal ini, sumber daya akan sia-sia. Oleh karena itu, kami telah memutuskan untuk mengurangi array, elemen AOS dari memori global dalam langkah terakhir dari pengurangan menggunakan CPU. Keuntungan utama dari pendekatan ini adalah bahwa GPU sudah tersedia untuk memproses perhitungan lain sementara CPU memfinalisasi operasi pengurangan. Dengan menerapkan delapan solusi, kami telah meningkatkan pengurangan paralel fungsi algoritmik, kinerja AOS, baik mengenai waktu eksekusi dan bandwidth.
 
Referensi :
3. Penelitian Ion LUNG, Dana-Mihaela PETROSAN, Alexandru PIRJAN Academy of Economic Studies, Bucharest, RomaniaUniversity Politehnica of Bucharest, RomaniaRomanian-American University, Bucharest