Jumat, 29 Juni 2018

Parallel Computing (CUDA)

Judul                : Parallel Computing (CUDA)
Nama               : Muhammad Zaky Fauzi
NPM                 : 57414606
Kelas                : 4IA21
Dosen               : Indra Adi Permana
Mata Kuliah      : Pengantar Komputasi Modern


Komputasi paralel adalah salah satu teknik melakukan komputasi secara bersamaan dengan memanfaatkan beberapa komputer independen secara bersamaan. Ini umumnya diperlukan saat kapasitas yang diperlukan sangat besar, baik karena harus mengolah data dalam jumlah besar (di industri keuangan, bioinformatika, dll) ataupun karena tuntutan proses komputasi yang banyak. Kasus kedua umum ditemui di kalkulasi numerik untuk menyelesaikan persamaan matematis di bidang fisika (fisika komputasi), kimia (kimia komputasi) dll.


CUDA



CUDA adalah platform komputasi paralel dan antarmuka pemrograman aplikasi (API) yang dibuat oleh Nvidia. Hal ini memungkinkan pengembang perangkat lunak dan insinyur perangkat lunak untuk menggunakan unit pemrosesan grafis (GPU) berkemampuan CUDA untuk pemrosesan tujuan umum-sebuah pendekatan yang diistilahkan GPGPU (komputasi General-Purpose pada Unit Pemrosesan Grafik). Platform CUDA adalah lapisan perangkat lunak yang memberikan akses langsung ke set instruksi virtual GPU dan elemen komputasi paralel, untuk eksekusi kernel komputasi.

Platform CUDA dapat diakses oleh pengembang perangkat lunak melalui CUDA-accelerated libraries, compiler directives seperti OpenACC, dan ekstensi untuk bahasa pemrograman standar industri termasuk C, C ++ dan Fortran. Programmer C / C ++ menggunakan 'CUDA C / C ++', dikompilasi dengan nvcc, kompiler C / C ++ berbasis LLVM dari Nvidia. Programmer Fortran dapat menggunakan 'CUDA Fortran', yang dikompilasi dengan compiler Fortran PGI CUDA dari The Portland Group.

Selain libraries, compiler directives, CUDA C / C ++ dan CUDA Fortran, platform CUDA mendukung antarmuka komputasi lainnya, termasuk OpenCL Khronos Group, Microsoft DirectCompute, OpenGL Compute Shaders, dan C ++ AMP. wrappers pihak ketiga juga tersedia untuk Python, Perl, Fortran, Java, Ruby, Lua, Common Lisp, Haskell, R, MATLAB, IDL, dan dukungan native di Mathematica.

Dalam industri permainan komputer, GPU digunakan untuk perenderan grafis, dan untuk perhitungan fisika permainan (efek fisik seperti puing, asap, api, cairan); contoh termasuk PhysX dan Bullet. CUDA juga telah digunakan untuk mempercepat aplikasi non-grafis dalam biologi komputasi, kriptografi dan bidang lainnya dengan urutan besarnya atau lebih. 


Keuntungan


CUDA memiliki beberapa keunggulan dibandingkan dengan general-purpose computation on GPUs (GPGPU) tradisional menggunakan API grafis:
  • Scattered reads - kode dapat membaca dari alamat acak dalam memori
  • Univied virtual memory (CUDA 4.0 dan lebih tinggi)
  • Unified memory (CUDA 6.0 dan di atasnya)
  • Shared memory - CUDA memaparkan bagian fast shared memory yang dapat dibagikan di antara 5. Thread. Ini dapat digunakan sebagai cache yang dikelola pengguna, memungkinkan bandwidth yang lebih tinggi menggunakan pencarian tekstur.
  • Unduhan dan pembacaan yang lebih cepat ke dan dari GPU
  • Dukungan penuh untuk operasi integer dan bitwise, termasuk pencarian tekstur bilangan bulat

Keterbatasan

  • Baik untuk komputer host atau perangkat GPU, semua source code CUDA sekarang diproses sesuai dengan aturan sintaks C ++. Ini tidak selalu terjadi. Versi CUDA sebelumnya didasarkan pada aturan sintaks C. Seperti halnya kasus yang lebih umum dari mengkompilasi kode C dengan kompiler C ++, karena itu mungkin bahwa source code C-style yang lama akan gagal dikompilasi atau tidak akan berperilaku seperti yang dimaksudkan semula.
  • Interoperabilitas dengan bahasa render seperti OpenGL adalah satu arah, dengan OpenGL memiliki akses ke memori CUDA yang terdaftar tetapi CUDA tidak memiliki akses ke memori OpenGL.
  • Menyalin antara host dan memori perangkat dapat menimbulkan performance hit  karena bandwidth dan latensi bus sistem (ini dapat dikurangi sebagian dengan transfer memori asinkron, ditangani oleh mesin DMA GPU).
  • Thread harus berjalan dalam kelompok setidaknya 32 untuk kinerja terbaik, dengan jumlah total penomoran dalam ribuan. Cabang dalam kode program tidak mempengaruhi kinerja secara signifikan, asalkan masing-masing dari 32 utas mengambil jalur eksekusi yang sama; model eksekusi SIMD menjadi batasan yang signifikan untuk setiap tugas yang berbeda secara inheren (misalnya melintasi struktur data partisi ruang selama pelacakan sinar).
  • Tidak seperti OpenCL, CUDA-enabled GPU hanya tersedia dari Nvidia.
  • Tidak ada fungsi emulator atau fallback yang tersedia untuk revisi modern.
  • Valid C ++ kadang-kadang dapat ditandai dan mencegah kompilasi karena cara kompiler mendekati optimalisasi untuk batasan perangkat GPU target. 
  • C ++ run-time type information (RTTI) dan penanganan pengecualian C ++-style hanya didukung dalam kode host, tidak dalam kode perangkat.
  • Dalam presisi tunggal pada generasi pertama CUDA menghitung kemampuan perangkat 1.x, angka denormal tidak didukung dan malah memerah ke nol, dan presisi pembagian dan operasi akar kuadrat sedikit lebih rendah daripada matematika presisi tunggal yang memenuhi standar IEEE 754. Perangkat yang mendukung kemampuan komputasi 2.0 dan di atas mendukung nomor-nomor normal, dan pembagian dan operasi akar kuadrat sesuai standar IEEE 754 secara default. Namun, pengguna dapat memperoleh matematika game-grade sebelumnya yang lebih cepat dari perangkat 1,x komputasi berkomputasi jika diinginkan dengan menetapkan flag compiler untuk menonaktifkan divisi akurat dan akar kuadrat akurat, dan mengaktifkan pembilasan nomor-nomor normal ke nol.



Referensi


Jumat, 01 Juni 2018

Quantum Computation

Judul                : Quantum Computation
Nama               : Muhammad Zaky Fauzi
NPM                 : 57414606
Kelas                : 4IA21
Dosen               : Indra Adi Permana
Mata Kuliah      : Pengantar Komputasi Modern


Quantum Computing merupakan alat hitung yang menggunakan mekanika kuantum seperti superposisi dan keterkaitan, yang digunakan untuk pengoperasian data. Perhitungan jumlah data pada komputasi klasik dihitung dengan bit, sedangkan perhitungan jumlah data pada komputer kuantum 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 Komputer Kuantum


Ide mengenai komputer kuantum pertama kali muncul pada tahun 1970-an oleh para fisikawan dan ilmuwan komputer, seperti 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).

Di antara para ilmuwan tersebut, Feynmanlah yang pertama kali mengajukan model yang menunjukkan bahwa sebuah sistem kuantum dapat digunakan untuk melakukan komputasi. Lebih jauh, Feynman juga menunjukkan bagaimana sistem tersebut dapat menjadi simulator bagi fisika kuantum. Dengan kata lain, fisikawan dapat melakukan eksperimen fisika kuantum melalui komputer kuantum.

Pada tahun 1985, Deutsch menyadari esensi dari komputasi oleh sebuah komputer kuantum dan menunjukkan bahwa semua proses fisika, secara prinsipil, dapat dimodelkan melalui komputer kuantum. Dengan demikian, komputer kuantum memiliki kemampuan yang melebihi komputer klasik.

Setelah Deutsch mengeluarkan tulisannya mengenai komputer kuantum, para ilmuwan mulai melakukan riset di bidang ini. Mereka mulai mencari kemungkinan penggunaan dari sebuah komputer kuantum. Pada tahun 1995, Peter Shor merumuskan sebuah algoritma yang memungkinkan penggunaan komputer kuantum untuk memecahkan masalah faktorisasi dalam teori bilangan.

Hingga saat ini, riset di bidang komputer kuantum terus dijalankan di seluruh dunia. Beberapa kendala terus dicari pernyelesaiannya. Berbagai metode dikembangkan untuk memungkinkan terwujudnya sebuah komputer yang memilki kemampuan yang luar biasa ini. Sejauh ini, sebuah komputer kuantum yang telah dibangun hanya dapat mencapai kemampuan untuk memfaktorkan dua digit bilangan. Komputer kuantum ini dibangun pada tahun 1998 di Los Alamos, Amerika Serikat, menggunakan NMR (Nuclear Magnetic Resonance).


Algoritma pada Quantum Computing

  • 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


Beberapa waktu lalu para ilmuwan di Pusat penelitian di Almaden telah berhasil menjalankan kalkulasi komputer-kuantum yang paling rumit hingga saat ini. Mereka berhasil membuat seribu triliun molekul yang didesain khusus dalam sebuah tabung menjadi sebuah komputer kuantum 7-qubit yang mampu memecahkan sebuah versi sederhana perhitungan matematika yang merupakan inti dari banyak di antara system kriptografis pengamanan data (data security cryptographic system).

Keberhasilan ini memperkuat keyakinan bahwa suatu saat komputer-komputer kuantum akan mampu memecahkan problem yang demikian kompleks yang selama ini tidak mungkin dapat dipecahkan oleh super komputer-super komputer yang paling hebat meski dalam tempo jutaan tahun sekalipun.

Dalam edisi jurnal ilmiah Nature yang terbit beberapa waktu lalu, sebuah tim bersama-sama mahasiswa tingkat graduate dari Unversitas Stanford melaporkan demonstrasi pertama dari "AlgoritmaShor" sebuah metode yang dikembangkantahun 1994 oleh ilmuwan AT&T Peter Shor untuk menggunakan computer kuantum yang futuristis untuk menemukan faktor-faktor dari sebuah bilangan. Bilangan-bilangan yang diperkalikan satu dengan yang lain untuk memperoleh bilangan asli. Saatini, pemfaktoran (factoring) sebuah bilangan besar masih terlalu sulit bagi computer konvensional meskipun begitu mudah untuk diverifikasi. Itulah sebabnya pemfaktoran bilangan besar ini banyak digunakan dalam metode kriptografi untuk melindungi data.