Minggu, 30 Juni 2019

Parallel Computation

Parallel Concept

Komputasi paralel merupakan salah satu teknik komputasi, dimana proses komputasinya dilakukan oleh beberapa resources (komputer) yang independen, secara bersamaan. Komputasi paralel biasanya diperlukan pada saat terjadinya pengolahan data dalam jumlah besar (di industri keuangan, bioinformatika, dll) atau dalam memenuhi proses komputasi yang sangat banyak. Selanjutnya, komputasi paralel ini juga dapat ditemui dalam kasus kalkulasi numerik dalam penyelesaian persamaan matematis di bidang fisika (fisika komputasi), kimia (kimia komputasi), dll. Dalam menyelesaikan suatu masalah, komputasi paralel memerlukan infrastruktur mesin paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel.

Untuk itu diperlukan aneka perangkat lunak pendukung yang biasa disebut sebagai middleware yang berperan untuk mengatur distribusi pekerjaan antar node dalam satu mesin paralel. Selanjutnya pemakai harus membuat pemrograman paralel untuk merealisasikan komputasi. Tidak berarti dengan mesin paralel semua program yang dijalankan diatasnya otomatis akan diolah secara paralel. Pemrograman paralel adalah teknik pemrograman komputer yang memungkinkan eksekusi perintah / operasi secara bersamaan (komputasi paralel), baik dalam komputer dengan satu (prosesor tunggal) ataupun banyak (prosesor ganda dengan mesin paralel ) CPU. Bila komputer yang digunakan secara bersamaan tersebut dilakukan oleh komputer-komputer terpisah yang terhubung dalam suatu jaringan komputer lebih sering istilah yang digunakan adalah sistem terdistribusi (distributed computing). Tujuan utama dari pemrograman paralel adalah untuk meningkatkan performa komputasi. Semakin banyak hal yang bisa dilakukan secara bersamaan (dalam waktu yang sama), semakin banyak pekerjaan yang bisa diselesaikan.

Analogi yang paling gampang adalah, bila anda dapat merebus air sambil memotong-motong bawang saat anda akan memasak, waktu yang anda butuhkan akan lebih sedikit dibandingkan bila anda mengerjakan hal tersebut secara berurutan (serial). Atau waktu yang anda butuhkan memotong bawang akan lebih sedikit jika anda kerjakan berdua. Performa dalam pemrograman paralel diukur dari berapa banyak peningkatan kecepatan (speed up) yang diperoleh dalam menggunakan tehnik paralel. Secara informal, bila anda memotong bawang sendirian membutuhkan waktu 1 jam dan dengan bantuan teman, berdua anda bisa melakukannya dalam 1/2 jam maka anda memperoleh peningkatan kecepatan sebanyak 2 kali.


Distributed Processing

            Distributed Processing adalah kemampuan menjalankan semua proses pengolahan data secara bersama antara komputer yang berfungsi sebagai pusat dengan beberapa komputer yang lebih kecil dan saling dihubungkan melalui jalur komunikasi. Setiap komputer tersebut memiliki prosesor mandiri sehingga mampu mengolah sebagian data secara terpisah, kemudian hasil pengolahan tadi digabungkan menjadi satu penyelesaian total. Jika salah satu prosesor mengalami kegagalan atau masalah maka prosesor yang lain akan mengambil alih tugasnya. Dalam proses distribusi sudah mutlak diperlukan perpaduan yang mendalam antara teknologi komputer dan telekomunikasi, karena selain proses yang harus didistribusikan, semua host komputer wajib melayani terminal-terminalnya dalam satu perintah dari komputer pusat.

Architectural Parallel Computer

Architectural Parallel Computer adalah pemrograman paralel yang digunakan pada masalah-masalah yang bisa diparalelkan tanpa membutuhkan komunikasi satu sama lain. Sebenarnya pemrograman ini bisa dibilang sebagai pemrograman paralel yang ideal, karena tanpa biaya komunikasi, lebih banyak peningkatan kecepatan yang bisa dicapai.Michael J. Flynn menciptakan satu diantara sistem klasifikasi untuk komputer dan program paralel, yang dikenal dengan sebutan Taksonomi Flynn. Flynn mengelompokkan komputer dan program berdasarkan banyaknya set instruksi yang dieksekusi dan banyaknya set data yang digunakan oleh instruksi tersebut. 

Berikut adalah taksonomi dari model pemrosesan paralel dibuat berdasarkan alur instruksi dan alur data yang digunakan:

1.        SISD (Single Instruction stream, Single Data stream)
Komputer tunggal yang mempunyai satu unit kontrol, satu unit prosesor dan satuunit memori Instruksi dilaksanakan secara berurut tetapi boleh juga overlap dalamtahapan eksekusi (overlap) Satu alur instruksi didecode untuk alur data tunggal.

2.        SIMD (Single Instruction stream, Multiple Data stream)
Komputer yang mempunyai beberapa unit prosesor di bawah satu supervisi satu unit common control. Setiap prosesor menerima instruksi yang sama dari unit kontrol, tetapi beroperasi pada data yang berbeda.

3.        MISD (Multiple Instruction stream, Single Data stream)
Sampai saat ini struktur ini masih merupakan struktur teoritis dan belum ada komputer dengan model ini.

4.        MIMD (Multiple Instruction stream, Multiple Data stream)
Organisasi komputer yang memiliki kemampuan untuk memproses beberapa program dalam waktu yang sama. Pada umumnya multiprosesor dan multikomputer termasuk dalam  kategori ini.


Pengantar Thread Programming

            Dalam pemrograman komputer, sebuah thread adalah informasi terkait dengan penggunaan sebuah program tunggal yang dapat menangani beberapa pengguna secara bersamaan. Dari program point-of-view, sebuah thread adalah informasi yang dibutuhkan untuk melayani satu pengguna individu atau permintaan layanan tertentu. Jika beberapa pengguna menggunakan program atau permintaan bersamaan dari program lain yang sedang terjadi, thread yang dibuat dan dipelihara untuk masing-masing proses. Thread memungkinkan program untuk mengetahui user sedang masuk didalam program secara bergantian dan akan kembali masuk atas nama pengguna yang berbeda. Salah satu informasi thread disimpan dengan cara menyimpannya di daerah data khusus dan menempatkan alamat dari daerah data dalam register. Sistem operasi selalu menyimpan isi register saat program interrupted dan restores ketika memberikan program kontrol lagi.


            Sebagian besar komputer hanya dapat mengeksekusi satu instruksi program pada satu waktu, tetapi karena mereka beroperasi begitu cepat, mereka muncul untuk menjalankan berbagai program dan melayani banyak pengguna secara bersamaan. Sistem operasi komputer memberikan setiap program “giliran” pada prosesnya, maka itu memerlukan untuk menunggu sementara program lain mendapat giliran. Masing-masing program dipandang oleh sistem operasi sebagai suatu tugas dimana sumber daya tertentu diidentifikasi dan terus berlangsung. Sistem operasi mengelola setiap program aplikasi dalam sistem PC (spreadsheet, pengolah kata, browser Web) sebagai tugas terpisah dan memungkinkan melihat dan mengontrol item pada daftar tugas. Jika program memulai permintaan I / O, seperti membaca file atau menulis ke printer, itu menciptakan thread. Data disimpan sebagai bagian dari thread yang memungkinkan program yang akan masuk kembali di tempat yang tepat pada saat operasi I / O selesai. Sementara itu, penggunaan bersamaan dari program diselenggarakan pada thread lainnya. Sebagian besar sistem operasi saat ini menyediakan dukungan untuk kedua multitasking dan multithreading. Mereka juga memungkinkan multithreading dalam proses program agar sistem tersebut disimpan dan  menciptakan proses baru untuk setiap thread.

Static Threading

            Teknik ini biasa digunakan untuk komputer dengan chip multiprocessors dan jenis komputer shared-memory lainnya. Teknik ini memungkinkan thread berbagi memori yang tersedia, menggunakan program counter dan mengeksekusi program secara independen. Sistem operasi menempatkan satu thread pada prosesor dan menukarnya dengan thread lain yang hendak menggunakan prosesor itu.

            Mekanisme ini terhitung lambat, karenanya disebut dengan static. Selain itu teknik ini tidak mudah diterapkan dan rentan kesalahan. Alasannya, pembagian pekerjaan yang dinamis di antara thread-thread menyebabkan load balancing-nya cukup rumit. Untuk memudahkannya programmer harus menggunakan protocol komunikasi yang kompleks untuk menerapkan scheduler load balancing. Kondisi ini mendorong pemunculan concurrency platforms yang menyediakan layer untuk mengkoordinasi, menjadwalkan, dan mengelola sumberdaya komputasi paralel. Sebagian platform dibangun sebagai runtime libraries atau sebuah bahasa pemrograman paralel lengkap dengan compiler dan pendukung runtime-nya.

Dynamic Multithreading

            Teknik ini merupakan pengembangan dari teknik sebelumnya yang bertujuan untuk kemudahan karena dengannya programmer tidak harus pusing dengan protokol komunikasi, load balancing, dan kerumitan lain yang ada pada static threading. Concurrency platform ini menyediakan scheduler yang melakukan load balacing secara otomatis. Walaupun platformnya masih dalam pengembangan namun secara umum mendukung dua fitur : nested parallelism dan parallel loops. Nested parallelism memungkinkan sebuah subroutine di-spawned (ditelurkan dalam jumlah banyak seperti telur katak) sehingga program utama tetap berjalan sementara subroutine menghitung hasilnya. Sedangkan parallel loops seperti halnya fungsi for namun memungkinkan iterasi loop dilakukan secara bersamaan.

Referensi :

Sabtu, 18 Mei 2019

Quantum Computation


Apa Itu Quantum Computation :

             
        Quantum Computation atau Komputer kuantum adalah alat hitung yang menggunakan sebuah fenomena mekanika kuantum, misalnya superposisi dan keterkaitan, untuk melakukan operasi data. Dalam komputasi klasik, jumlah data dihitung dengan bit; dalam komputer kuantum, hal ini dilakukan dengan qubit. Prinsip dasar komputer kuantum adalah bahwa sifat kuantum dari partikel dapat digunakan untuk mewakili data dan struktur data, dan bahwa mekanika kuantum dapat digunakan untuk melakukan operasi dengan data ini. Dalam hal ini untuk mengembangkan komputer dengan sistem kuantum diperlukan suatu logika baru yang sesuai dengan prinsip kuantum.

Sejarah singkat Quantum Computation :

               
         Ide mengenai komputer kuantum ini berasal dari beberapa fisikawan antara lain Charles H. Bennett dari IBM, Paul A. Benioff dari Argonne National Laboratory, Illinois, David Deutsch dari University of Oxford, dan Richard P. Feynman dari California Institute of Technology (Caltech).
        Pada awalnya Feynman mengemukakan idenya mengenai sistem kuantum yang juga dapat melakukan proses penghitungan. Fenyman juga mengemukakan bahwa sistem ini bisa menjadi simulator bagi percobaan fisika kuantum.  
       Selanjutnya para ilmuwan mulai melakukan riset mengenai sistem kuantum tersebut, mereka juga berusaha untuk menemukan logika yang sesuai dengan sistem tersebut. Sampai saat ini telah dikemukaan dua algoritma baru yang bisa digunakan dalam sistem kuantum yaitu algoritma shor dan algoritma grover
      Walaupun komputer kuantum masih dalam pengembangan, telah dilakukan eksperimen dimana operasi komputasi kuantum dilakukan atas sejumlah kecil qubit. Riset baik secara teoretis maupun praktik terus berlanjut dalam laju yang cepat, dan banyak pemerintah nasional dan agensi pendanaan militer mendukung riset komputer kuantum untuk pengembangannya baik untuk keperluan rakyat maupun masalah keamanan nasional seperti kriptoanalisis.
         Telah dipercaya dengan sangat luas, bahwa apabila komputer kuantum dalam skala besar dapat dibuat, maka komputer tersebut dapat menyelesaikan sejumlah masalah lebih cepat daripada komputer biasa. Komputer kuantum berbeda dengan komputer DNA dan komputer klasik berbasis transistor, walaupun mungkin komputer jenis tersebut menggunakan prinsip kuantum mekanik. Sejumlah arsitektur komputasi seperti Komputer optik walaupun menggunakan superposisi klasik dari gelombang elektromagnetik, namun tanpa sejumlah sumber kuantum mekanik yang spesifik sepertiketerkaitan, maka tak dapat berpotensi memiliki kecepatan komputasi sebagaimana yang dimiliki oleh komputer kuantum.

Algoritma yang ada pada Quantum Computing :
    
            Para ilmuwan mulai melakukan riset mengenai sistem kuantum tersebut, mereka juga berusaha untuk menemukan logika yang sesuai dengan sistem tersebut. Sampai saat ini telah dikemukaan dua algoritma baru yang bisa digunakan dalam sistem kuantum yaitu algoritma shor dan algoritma grover.

         Algoritma Shor
             Algoritma yang ditemukan oleh Peter Shor pada tahun 1995. Dengan menggunakan algoritma ini, sebuah komputer kuantum dapat memecahkan sebuah kode rahasia yang saat ini secara umum digunakan untuk mengamankan pengiriman data. Kode yang disebut kode RSA ini, jika disandikan melalui kode RSA, data yang dikirimkan akan aman karena kode RSA tidak dapat dipecahkan dalam waktu yang singkat. Selain itu, pemecahan kode RSA membutuhkan kerja ribuan komputer secara paralel sehingga kerja pemecahan ini tidaklah efektif.
     
      Algoritma Grover
                Algoritma Grover adalah sebuah algoritma kuantum yang menawarkan percepatan kuadrat dibandingkan pencarian linear klasik untuk list tak terurut. Algoritma Grover menggambarkan bahwa dengan menggunakan pencarian model kuantum, pencarian dapat dilakukan lebih cepat dari model komputasi klasik. Dari banyaknya algoritma kuantum, algoritma grover akan memberikan jawaban yang benar dengan probabilitas yang tinggi. Kemungkinan kegagalan dapat dikurangi dengan mengulangi algoritma. Algoritma Grover juga dapat digunakan untuk memperkirakan rata-rata dan mencari median dari serangkaian angka, dan untuk memecahkan masalah Collision.
 

Implementasi Quantum Computing :

           
          Pada 19 Nov 2013 Lockheed Martin , NASA dan Google semua memiliki satu misi yang sama yaitu mereka semua membuat komputer kuantum sendiri . Komputer kuantum ini adalah superkonduktor chip yang dirancang oleh sistem D - gelombang dan yang dibuat di NASA Jet Propulsion Laboratories.
         NASA dan Google berbagi sebuah komputer kuantum untuk digunakan di Quantum Artificial Intelligence Lab menggunakan 512 qubit D -Wave Two yang akan digunakan untuk penelitian pembelajaran mesin yang membantu dalam menggunakan jaringan syaraf tiruan untuk mencari set data astronomi planet ekstrasurya dan untuk meningkatkan efisiensi searchs internet dengan menggunakan AI metaheuristik di search engine heuristical.
          A.I. seperti metaheuristik dapat menyerupai masalah optimisasi global mirip dengan masalah klasik seperti pedagang keliling, koloni semut atau optimasi swarm, yang dapat menavigasi melalui database seperti labirin . Menggunakan partikel terjerat sebagai qubit , algoritma ini bisa dinavigasi jauh lebih cepat daripada komputer konvensional dan dengan lebih banyak variabel.
          Dengan menggunakan desentralisasi, segerombolan kuantum AI, dimungkinkan untuk mensimulasikan perilaku muncul juga, seperti Langton itu semut, yang bisa melihat munculnya kecerdasan simulasi berbasis kuantum yang bisa pergi sejauh untuk menciptakan robot selular realistis pada komputer.
            Penggunaan metaheuristik canggih pada fungsi heuristical lebih rendah dapat melihat simulasi komputer yang dapat memilih sub rutinitas tertentu pada komputer sendiri untuk memecahkan masalah dengan cara yang benar-benar cerdas. Dengan cara ini mesin akan jauh lebih mudah beradaptasi terhadap perubahan data indrawi dan akan mampu berfungsi dengan jauh lebih otomatisasi daripada yang mungkin dengan komputer normal.
          Selain itu, dimungkinkan untuk menggunakan metaheuristik untuk melakukan koreksi kesalahan pada perangkat lunak menggunakan jaringan syaraf tiruan dengan membandingkan pemecahan sebuah komputer kuantum dengan perangkat lunak program reguler dari komputer biasa masalah dioptimalkan. Karena komputer biasa tidak kuantum mekanik, mereka harus diprogram klasik. Namun, dengan menggunakan metaheuristik kuantum dimungkinkan untuk melakukan optimasi masalah menggunakan kecerdasan buatan pada sebuah komputer kuantum dan kemudian dibandingkan dengan arsitektur baris perintah dalam software konvensional pada komputer klasik , yang mungkin terlalu rumit untuk memodifikasi atau untuk memeriksa untuk kesalahan menggunakan perangkat lunak insinyur manusia.

Referensi :
·                                                 https://id.wikipedia.org/wiki/Komputer_kuantum



Jumat, 12 April 2019

Tutorial Streaming Menggunakan VLC


Apa Itu VLC?

VLC Media Player merupakan perangkat lunak (software) pemutar beragam berkas (file) multimedia, baik video maupun audio dalam berbagai format, seperti MPEG, DivX, Ogg, dan lain-lain. VLC Media Player juga dapat digunakan untuk memutar DVD,VCD, maupun CD. VLC Media Player bersifat sumber terbuka (open source) dan tersedia untuk berbagai sistem operasi. Mulai dari Microsoft Windows, beragam distro Linux, Mac OS, dan beberapa sistem operasi lainnya. 

Salah satu kelebihan yang paling menonjol dari VLC Media Player adalah kelengkapan codec yang dimiliki. Dengan kata lain, VLC dapat memutar hampir seluruh jenis berkas audio maupun video yang ada. 

VLC Media Player adalah program multimedia player yang sangat portabel. Singkatnya, program ini bisa dipakai untuk memutar berkas multimedia, baik yang ada di komputer, keping CD atau DVD, hingga untuk streaming di internet. 

Di balik tampilan programnya yang sederhana, pemutar berkas multimedia ini dilengkapi dengan beragam fitur tambahan, seperti kemampuan subtitle, tag format, konversi, filter, skin, dapat dioperasikan melalui berbagai interface, tersedia dalam bahasa Indonesia, dan masih banyak lagi. Bahkan, program ini juga bisa dijadikan sebagai server untuk kebutuhan streaming di jaringan lokal dan internet. 

Cara Instal VLC

Pertama pilih bahasa yang akan digunakan



Lalu klik next

Setelah itu ada perjanjian lisensi, klik next

Lalu pilih komponen apa saja yang anda ingin instal, jika sudah selesai klik Next

Lalu pilih dimana perangkat akan disimpan, setelah selesai klik Install..

Tunggu beberapa saat hingga software selesai di instal

Setelah selesai klik Finish, software VLC pun bisa digunakan

Selanjutnya adalah cara melakukan Stream menggunakan VLC, caranya adalah sebagai berikut :

Step Ke-1
pertama kita harus mempunyai software VLC media playernya anda dapat mendownload nya secara gratis di Play Store atau anda dapat mencari di Google.

StepKe-2
Lalu kita instal seperti software biasanya. lalu kita buka Aplikasi VLC media player nya, dan akan muncul tampilan seperti ini.

Step Ke-3
setelah kita buka klik/pilih tombol "media" yang ada di pojok kiri atas. seperti gambar dibawah

Setelah kita klik tombol "media" akan muncul pilihan seperti ini.

Dan setelah muncul pilihan seperti itu kita harus memilih "Stream..." seperti gambar dibawah.

Kemudian akan keluar tampilan seperti dibawah

Step ke-4
Klik Tambah untuk mengambil video dari file yang tersedia dalam Laptop seperti gambar dibawah

Setelah selesai akan muncul film yang akan kita putar, selanjutnya klik tombol stream

Step Ke-5
Klik tombol maju


Dan kemudian file diganti dengan HTTP agar bisa melakukan Streaming kemudian klik tambah



Maka akan muncul tampilan seperti dibawah ini, kemudian tentukan port yang akan digunakan atau dipakai. Setelah itu klik Maju















Kemudian pilih ekstensi yang ingin digunakan untuk video Stream seperti tampilan dibawah ini. Lalu klik maju
































Lalu centang Strim Semua Strim Elementer dan kemudian klik Steam, maka anda dapat melakukan streaming pada web browser dengan menggunakan jaringan internet untuk menghubungkan VLC yang berisikan video dengan Browser untuk melakukan Streaming. Untuk melakukan streaming tersebut masukan IP Laptop kalian kedalam Browser seperti Http://192.168.20.45/8080/

Step Ke-6
Buka CMD untuk melihat IP Laptop atau PC kalian dengan memasukkan ipconfig pada CMD













Step ke-7
Masukkan IP addres kalian pada browser, maka anda dapat melihat video streaming atau menyimpan video tersebut














Step ke-8
Download VLC untuk Android pada Smartphone anda















Step ke-9
Pilih Stream pada pilihan menu yang terdapat di VLC Android





















Step ke-10
Masukan IP address kalian untuk melihat atau menyimpan video yang telah anda masukan pada Stream di Browser, selanjutnya anda tinggal menikmati Video tersebut.