Parallel Computation - Kelompok 5 - Tugas Softskill

A. Paralelism Concept 

Ditulis oleh : (Dessy Nathalia 52414767)

Sebelum mempelajari lebih jauh komputasi paralel, maka kita perlu mengetahui dahulu makna dari komputasi paralel. Komputasi paralel adalah suatu teknik untuk komputasi yang mana proses komputasinya dilakukan secara bersamaan oleh beberapa komputer (resources) yang independen.

Komputasi ini biasa dipakai untuk suatu keperluan pengolahan data dalam jumlah yang cukup besar seperti misalnya di industri keuangan, bioinformastika, dan lain sebagainya. Tidak hanya untuk kasus pengolahan data, komputasi paralel juga digunakan untuk menyelesaikan kasus kalkulasi numeric dalam penyelesaian persamaan matematis di bidang fisika, kimia, dan beberapa bidang ilmu lainnya.

Dalam menyelesaikan suatu permasalahan, komputasi paralel memerlukan infrastruktur mesin paralel yang terdiri dari banyak komputer yang akan dihubungkan satu dengan yang lainnya menggunakan jaringan sehingga mampu bekerja secara paralel. Dan ada perangkat lunak pendukung untuk menjalankan konsep paralel ini, dan perangkat lunak pendukung itu sering disebut dengan middleware. Middleware ini berfungsi untuk mengatur distribusi pekerejaan antar node dalam satu mesin paralel.

Lalu langkah selanjutnya, pemakai juga harus membuat pemrograman paralel untuk merealisasikan komputasi yang baik. Dimana pemrograman paralel merupakan teknik pemrogramam komputer yang dibuat untuk mengeksekusi perintah secara bersamaan yang dilakukan oleh komputer dengan satu atau bahkan ganda dengan mesin paralel.



Pemakaian komputer secara bersamaan ini jika dilakukan dengan komputer-komputer secara terpisah yang terhubung dalam suatu jaringan komputer, maka istilah ini disebut dengan sistem terdistribusi (distributed computing). Jadi tujuan utama dari pemrograman paralel yaitu untuk membuat performa komputasi semakin meningkat sehingga semakin banyak hal yang bisa dilakukan secara bersamaan dalam waktu yang bersamaan sehingga banyak pekerjaan yang dapat terselesaikan.

Pada saat prakteknya, komputasi paralel ini akan memanfaatkan beberapa CPU untuk memproses operasi pada perangkat lunak yang telah ditentikan. Perangkat lunak bisa bekerja sangat lambat ketika ditangani oleh satu CPU karena operasi yang harus diselesaikan sangat banyak, rumit dan memiliki proses yang banyak. Prosesor dengan satu CPU tersebut biasa disebut dengan single-core.

Kini dengan perkembangan teknologi, telah muncul penerapan paralel, maka prosesor modern mulai menerapkan multi-core¬ yang berarti dalam sebuah CPU terdapat lebih dari satu inti, hasilnya pemrosesan operasi akan semakin lebih cepat. Kecepatan dalam pemrograman paralel dapat diukur dari seberapa banyak peningkatan kecepatan (speed up) yang didapat pada saat penggunaan teknik paralel.

Sumber:

https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi-modern-sem-8/

http://ikhsanturion.blogspot.co.id/2016/06/teori-komputasi-paralel-computing.html



B. Distributed Processing

Ditulis oleh : (Miftah Huda 56414643)

Distributed Processing merupakan sistem komputer yang menggunakan lebih dari satu komputer (atau prosesor) untuk menjalankan aplikasi. Distributed Processing ini termasuk pemrosesan paralel dimana satu komputer menggunakan lebih dari satu CPU untuk menjalankan program.Perkembangan distributed processing terjadi karena kebutuhan untuk dapat memecahkan masalah yang besar dan kompleks. Selain itu dengan adanya distributed processing telah menambahkan kecepatan perangkat komputer dalam melakukan tugas fungsional.

Suatu contoh permasalahan seperti transaksi dalam mesin ATM pada sebuah bank. Ketika ribuan atau bahkan ratusan nasabah menggunakan mesin ATM secara bersamaan, maka bayangkan berapa banyak proses yang harus dikerjakan jika hanya menggunakan 1 komputer servers saja. Untuk itu, penggunaan distributed processing ini membuat beban pemrosesan yang banyak akan dikerjakan oleh beberapa komputer yang sudah terhubung oleh jaringan dalam waktu yang bersamaan. Beban yang besar akan dipecah menjadi beberapa beban kecil yang akan diselesaikan oleh komputer lainnya sehingga proses lebih cepat terselesaikan.

Sumber :

https://www.techopedia.com/definition/3351/distributed-processing 

https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi-modern-sem-8/


C. Architectural Computer Parallel

Ditulis oleh : (Syafiq Mansawi 5A414559)

Architectural Computer Parallel (Arsitektur Komputer Paralel) merupakan sekumpulan elemen pemroses (Processing Elements) yang saling bekerjasama dalam menyelesaikan sebuah masalah besar.

Klasifikasi Arsitektur komputer menurut Michael Flynn, berdasarkan karakteristiknya adalah sebagai berikut :

  • Single Intruction Stream, Single Data Stream (SISD) 
Model SISD

Karakteristik SISD : 

  1. 1 processor
  2. 1 intruksi
  3. 1 data yang sama
  4. komputasi tunggal
  5. serial. Konvensional
  6. UNIVAC1, IBM 360, CDC 7600, Cray 1 dan PDP 1


  • Single Instruction Stream Multiple Data Stream (SIMD)
Model SIMD


Karakteristik SIMD : 
  1. Multi processor
  2. 1 intruksi
  3. Berbeda data
  4. ILLIAC IV, MasPar, Cray X-MP, Cray Y-MP, Thingking Machine CM-2 dan Cell Processor (GPU).

  • Multiple Instruction Stream, Single Data Stream (MISD)
Model MISD
Karakteristik MISD : 
  1. Mutli processor
  2. Multi intruksi
  3. 1 data yang sama
  4. Masih belum ada yang menggunakan


  • Multiple Instruction Stream, Multiple Data Stream (MIMD)
Model MIMD

Karakteristik MIMD : 
  1. Mutli processor
  2. Multi intruksi
  3. Berbeda data
  4. IBM POWER5, HP/Compaq AlphaServer, Intel IA32, AMD Opteron, Cray XT3 dan IBM BG/L.

Sumber : 

https://djuneardy.blogspot.co.id/2015/05/konsep-arsitektur-paralel-pemrosesan.html 

http://organkomputer.blogspot.co.id/2013/04/prosesor-paralel.html



D. Pengantar Thread Programming

Ditulis oleh : (Hafizh Asy’ari 54414683)

Thread adalah urutan instruksi terprogram terkecil yang dapat dikelola secara independen oleh scheduler yang biasanya merupakan bagian dari sistem operasi. Thread hampir sama dengan proses, namun dalam kebanyakan kasus, sebuah thread adalah komponen dari suatu proses.

Threading dibagi menjadi 2, yaitu :
  • Static Threading
Static Threading merupakan teknik yang memungkinkan thread berbagi memori di komputer shared memory dan mengeksekusi program secara independen. Dalam sistem operasi, jika terdapat banyak thread yang akan dijalankan, thread tersebut akan di tempatkan pada processor dan dijalankan secara bergantian.

  • Dynamic Multithreading
Dynamic Multithreading merupakan pengembangan dari teknik Static Threading yang bertujuan untuk mengoptimasi dan memberikan kemudahan serta memperbaiki kekurangan dari teknik sebelumnya. Teknik ini menyediakan scheduler yang bertugas melakukan load balancing secara otomatis. 



Dari gambar diatas menunjukkan ilustrasi dari sebuah proses yang berjalan, di dalamnya terdapat dua eksekusi thread yang berjalan pada satu processor.

Dalam thread programming, antarmuka standar untuk implementasi thread adalah POSIX Threads (Pthreads) yang merupakan kumpulan panggilan library C-Function. Dalam model pemrograman seperti CUDA yang dirancang untuk parallel computation, sebuah array dari thread menjalankan kode yang sama secara paralel hanya dengan menggunakan ID-nya untuk menemukan datanya di memori. Intinya, aplikasi harus dirancang agar setiap thread melakukan operasi yang sama pada segmen memori yang berbeda sehingga bisa beroperasi secara paralel dan menggunakan arsitektur GPU.

Sumber: 

https://en.wikipedia.org/wiki/Thread_(computing)
 
https://en.wikipedia.org/wiki/Parallel_computing
 
https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi-modern-sem-8/


E. Pengantar Massage Passing, OpenMP

Ditulis oleh : (Putu Safnalita 58414639)
  • Message Passing
Message passing adalah proses pengiriman data, dimana data dari suatu memori disalin ke memori pada prosesor lain. Karena proses pengiriman datanya antar memori lokal maka teknik message passing biasanya  digunakan untuk model komputasi paralel dengan memori terdistribusi. Dalam model ini, proses atau objek dapat mengirim dan menerima pesan (sinyal, fungsi, struktur data kompleks, atau paket data) ke proses atau objek lain.

Operasi dasar yang dibutuhkan untuk mendukung paradigma message passing adalah send dan receive. Operasi pengirim membutuhkan proses pengiriman untuk menspesifikasikan  lokasi data, ukuran, tipe dan tujuan. Operasi penerima harus melakukan penyesuaian dengan operasi pengirim. Konsep message passing membuat lebih mudah untuk membangun sistem yang memodelkan atau mensimulasikan masalah dunia nyata.

Terdapat dua metode dalam pengiriman pesan yaitu :

Synchronous Message Passing
Sistem pengiriman pesan secara sinkron mengharuskan pengirim dan penerima untuk menunggu satu sama lain saat mentransfer pesan. Pengirim menunggu untuk mengirim pesan sampai penerima siap untuk menerima pesan. Oleh karena itu tidak ada buffering. Selain itu pengirim tidak bisa mengirim pesan untuk dirinya sendiri.

Ansynchronous Message Passing
Sedangkan dalam komunikasi asinkron pengirim dan penerima tidak saling menunggu dan dapat melakukan perhitungan sendiri saat pengiriman pesan sedang dilakukan. Pengirim akan mengirim pesan kapanpun dia mau. Pengirim tidak peduli ketika penerima belum siap untuk menerima pesan. Oleh karena itu diperlukan buffering untuk menampung pesan sementara sampai penerima siap menerima pesan. Selain itu pengirim dapat pesan untuk dirinya sendiri.

Selain berdasarkan metode pengiriman pesan diatas, pengiriman pesan (message passing) dapat dibedakan berdasarkan jumlah penerima pesan yaitu: Point to Point dan Broadcast. Perbedaan mendasar keduanya adalah jumlah penerima yang menerima pesan. Pada Point to Point penerimanya tunggal sedangkan pada broadcast jumlah penerimanya banyak.

  • OpenMP (Open Multiprocessing)
OpenMP merupakan standar yang digunakan untuk pemrograman paralel multithreading pada arsitektur shared memory. OpenMP adalah sebuah antarmuka pemrograman aplikasi (API) untuk menulis aplikasi multithread, berupa satu set direktif compiler dan library untuk pemrograman aplikasi paralel yang menyederhanakan penulisan program multithread pada C, C++, dan Fortran pada berbagai arsitektur, termasuk Unix dan Microsoft Windows platform. Program multithread dapat ditulis dalam berbagai cara. Beberapa diantaranya memungkinkan untuk melakukan interaksi yang kompleks antar thread. OpenMP mencoba untuk memberikan kemudahan pemrograman serta membantu dalam menghindari kesalahan program, melalui pendekatan terstruktur. Pendekatan ini dikenal sebagai model pemrograman fork-join. OpenMP dikelola oleh nirlaba teknologi konsorsium OpenMP Arsitektur Review Board (ARB atau OpenMP), bersama-sama didefinisikan oleh sekelompok perangkat keras komputer utama dan vendor perangkat lunak, termasuk AMD, IBM, Intel, Cray, HP, Fujitsu, Nvidia, NEC, Microsoft, Texas Instruments, Oracle Corporation, dan banyak lagi.


Sumber : 

http://seto.citravision.com/berita-50-parallel-computation–pengantar-message-passing-openmp.html 

http://ginaalfiana.blogspot.co.id/2015/11/pengantar-message-passing-openmp.html


F. Pengantar Pemrograman CUDA - GPU

Ditulis oleh : (Andreas Rinanto 51414134)


CUDA (Compute Unified Device Architecture) merupakan platform model pemrograman dan komputasi paralel pada GPU (Graphical Processing Unit) yang dikembangkan oleh NVIDIA. CUDA mampu berkomunikasi langsung dengan GPU sehingga pengembang dapat mempercepat aplikasi komputasi untuk segala multi-threading parallel execution dengan mengoptimalkan bagian sekuensial dari beban kerja yang berjalan pada CPU. Hal ini tentunya dapat membantu pengembang dalam menyelesaikan perhitungan dan algoritma pemrograman yang kompleks.

CUDA didesain untuk program pengembang dalam bahasa pemrograman seperti C, C++, Python, Fortran, dan MATLAB dengan memanggil library yang sudah tersedia pada Bahasa pemrograman tersebut. Selain itu, aksesibilitas yang dimiliki CUDA memudahkan pengembang dalam pemrograman parallel untuk menggunakan GPU Source. CUDA juga mendukung beberapa framework pemrograman seperti OpenACC dan OpenCL.

Selain itu, CUDA juga dapat digunakan untuk beberapa aplikasi non-graphical programming seperti Kriptografi ataupun Biologi Komputasi untuk pengembangan aplikasi analitis, model matematika, dan simulasi komputasi teknik.

Sumber : 

https://developer.nvidia.com/cuda-zone 

https://devblogs.nvidia.com/even-easier-introduction-cuda/ 

https://en.wikipedia.org/wiki/CUDA