TUGAS 4
PENGANTAR KOMPUTASI
MODERN
“Parallel Computation”
Disusun oleh :
Kelfin Widya Cahyo 53416848
Otniel Hamonangan Girsang 55416699
Rachmad Maulana Yusuf 54416908
Yudha Mahendra 57416825
Kelas : 4IA23
FAKULTAS TEKNOLOGI INDUSTRI
JURUSAN TEKNIK INFORMATIKA
UNIVERSITAS GUNADARMA
2020
1. Parallelism
Concept
Komputasi
paralel merupakan salah satu teknik komputasi, dimana proses komputasi nya
dilakukan oleh beberapa resources ( komputer ) yang independen, secara
bersamaan. Komputasi paralel biasanya diperlukan pada saat terjadinya
pengolahan data dalam jumlah besar ( di industri keuangan, bio informatika, dll
) atau dalam memenuhi proses komputasi yang sangat banyak. diperlukan perangkat
lunak pendukung yang biasa disebut sebagai middleware yang berperan untuk
mengatur distribusi pekerjaan antar node dalam satu mesin paralel.
Pemakai
harus membuat pemrograman paralel untuk merealisasikan komputasi. Tidak berarti
dengan mesin paralel semua program yang dijalankan di atas nya 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.
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.
Singkatnya
untuk perbedaan antara komputasi tunggal dengan komputasi paralel, bisa
digambarkan pada gambar di bawah ini:
Dari
perbedaan kedua gambar di atas, kita dapat menyimpulkan bahwa kinerja komputasi
paralel lebih efektif dan dapat menghemat waktu untuk pemrosesan data yang
banyak daripada komputasi tunggal.
Dari
penjelasan-penjelasan di atas, kita bisa mendapatkan jawaban mengapa dan kapan
kita perlu menggunakan komputasi paralel. Jawabannya adalah karena komputasi
paralel jauh lebih menghemat waktu dan sangat efektif ketika kita harus
mengolah data dalam jumlah yang besar. Namun keefektifan akan hilang ketika
kita hanya mengolah data dalam jumlah yang kecil, karena data dengan jumlah
kecil atau sedikit lebih efektif jika kita menggunakan komputasi tunggal.
2. Distributed
Processing
Mengerjakan
semua proses pengolahan data secara bersama antara komputer 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 yang lain akan mengambil alih tugasnya.
Contoh
dari Distributed Data Processing System :
ATM, komputer yang dirancang untuk
tugas-tugas melaksanakan proyek, analisis finansial, penjadwalan waktu dan
akuntansi. Contoh lainnya, pengolahan data pada server yahoo yang tersebar
hampir di seluruh dunia secara distribusi, setiap wilayah mempunyai server
masing-masing. Seperti di indonesia mempunyai server tersendiri sehingga
pengolahan data tidak di pusat melainkan di wilayah masing-masing, dll.
3.
Architectural Parallel Computer
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.
Arsitektur
paralel komputer menurut Klasifikasi Flynn’s:
SISD
(Single Instruction – Single Data)
Komputer
ini memiliki hanya satu prosesor dan satu instruksi yang dieksekusi secara
serial. Komputer ini adalah tipe komputer konvensional.
Beberapa
contoh komputer yang menggunakan model SISD adalah UNIVAC1, IBM 360, CDC 7600,
Cray 1 dan PDP 1.
SIMD
(Single Instruction – Multiple Data)
Komputer
ini memiliki lebih dari satu prosesor, tetapi hanya mengeksekusi satu instruksi
secara paralel pada data yang berbeda pada level lock-step. Komputer vektor
adalah salah satu komputer paralel yang menggunakan arsitektur ini.
Beberapa
contoh komputer yang menggunakan model SIMD adalah ILLIAC IV, MasPar, Cray
X-MP, Cray Y-MP, Thingking Machine CM-2 dan Cell Processor (GPU).
MISD
(Multiple Instructions – Single Data)
Komputer
ini memiliki satu prosesor dan mengeksekusi beberapa instruksi secara paralel
tetapi praktiknya tidak ada komputer yang dibangun dengan arsitektur ini karena
sistemnya tidak mudah dipahami. Sampai saat ini belum ada komputer yang
menggunakan model MISD.
MIMD
(Multiple Instructions – Multiple Data)
Komputer
ini memiliki lebih dari satu prosesor dan mengeksekusi lebih dari satu
instruksi secara paralel. Tipe komputer ini yang paling banyak digunakan untuk
membangun komputer paralel.
Beberapa
komputer yang menggunakan model MIMD adalah IBM POWER5, HP/Compaq AlphaServer,
Intel IA32, AMD Opteron, Cray XT3 dan IBM BG/L.
4. Konsep
Dasar Thread Programming
Dalam
ilmu komputer , sebuah thread eksekusi adalah urutan terkecil instruksi
diprogram yang dapat dikelola secara mandiri olehscheduler , yang biasanya
bagian dari sistem operasi . Pelaksanaan benang dan proses berbeda antara
sistem operasi, tetapi dalam kebanyakan kasus benang adalah komponen dari
sebuah proses. Beberapa thread dapat eksis dalam sumber yang sama proses dan
berbagi seperti memori , sedangkan proses yang berbeda tidak berbagi sumber
daya tersebut. Secara khusus, benang dari sebuah proses berbagi instruksi (code
executable) dan konteksnya (nilai-nilai variabel yang pada saat tertentu).
Pada
prosesor tunggal, multithreading umumnya dilaksanakan oleh waktu mengiris
(seperti dalam multitasking ), dan unit pengolahan pusat (CPU) beralih antara
benang perangkat lunak yang berbeda. Ini konteks switching umumnya terjadi
cukup sering bahwa pengguna merasakan benang atau tugas sebagai berjalan pada
waktu yang sama. Pada multiprosesor atau multi-core sistem, benang dapat
dijalankan secara bersamaan benar, dengan setiap prosesor atau inti
mengeksekusi thread terpisah secara bersamaan; pada prosesor atau inti dengan
benang hardware , software benang terpisah juga dapat dijalankan secara
bersamaan oleh benang hardware terpisah.
5. Konsep
Dasar Massage Passing, OpenMP
Massage Passing
merupkan suatu teknik bagaimana mengatur suatu alur komunikasi messaging
terhadap proses pada system.
Message passing
dalam ilmu komputer adalah suatu bentuk komunikasi yang digunakan dalam
komputasi paralel, pemrograman-berorientasi objek, dan komunikasi interprocess.
Dalam model ini, proses atau benda dapat mengirim dan menerima pesan yang
terdiri dari nol atau lebih byte, struktur data yang kompleks, atau bahkan
segmen kode ke proses lainnya dan dapat melakukan sinkronisasi. Paradigma
Message passing yaitu :
Ø Banyak
contoh dari paradigma sekuensial dipertimbangkan bersama-sama.
Ø Programmer
membayangkan beberapa prosesor, masing-masing dengan memori, dan menulis sebuah
program untuk berjalan pada setiap prosesor.
Ø Proses
berkomunikasi dengan mengirimkan pesan satu sama lain.
Terdapat beberapa metode
dalam pengiriman pesan yaitu :
Ø Synchronous
Message Passing
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
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.
OpenMP (Open Multiprocessing)
Application
Programing Interface (API) yang mendukung pemrograman multiprosesing shared
memory dalam bahasa C/C++ dan fortran pada berbagai arsitektur dan sistem
operasi diantaranya: Solaris, AIX, HP-UX,GNU/Linux, Mac OS X, dan Windows.
OpenMP
adalah model portabel dan skalabel yang memberikan interface sederhana dan
fleksibel bagi programer shared memory dalam membangun aplikasi paralel.
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
bekerja berdasarkan model shared memory, maka secara default data dibagi
diantara thread-thread dan dapat terlihat dari setiap thread. Terkadang program
akan membutuhkan variabel dengan nilai thread spesifik. Jika setiap thread
memiliki variabel duplikat akan sangat berpotensi memiliki nilai yang
berbeda-beda pada setiap variabel duplikat tersebut.
Sinkronisasi
(pengkoordinasian) aksi dari thread adalah sesuatu yang sangat penting untuk
menjamin data yang harus dibagi dan untuk mencegah terjadinya data race
condition. Secara default OpenMP telah menyediakan mekanisme untuk menunggu
thread dalam suatu tim thread sehingga semua thread menyelesaikan tugasnya
dalam region, kemudian dapat melanjutkan ke proses selanjutnya. Mekanisme ini
dikenal sebagai barrier.
6. Konsep Dasar
Pemrograman CUDA GPU
CUDA
(Compute Unified Device Architecture) adalah suatu skema yang dibuat oleh
NVIDIA agar NVIDIA selaku GPU(Graphic Processing Unit) mampu melakukan komputasi
tidak hanya untuk pengolahan grafis namun juga untuk tujuan umum. Jadi, dengan
CUDA, kita dapat memanfaatkan cukup banyak processor yang dimiliki oleh NVIDIA
untuk berbagai perhitungan. GPU yang ada
saat ini seperti ATI pun sudah memiliki banyak processor di dalamnya.
Pada ATI, skema yang mereka bangun disebut ATI Stream. Saat ini pemrograman
paralel menjadi sangat penting karena kebutuhan kemampuan komputasi komputer
yang terus meningkat seperti kemampuan multitasking dan pengolahan grafis yang
andal. Metode saat ini dalam peningkatan peforma komputer juga berbeda dengan
masa lampau dimana peningkatan clock dari processor yang diutamakan.
Peningkatanclock juga dibatasi oleh kemampuan fisik dari perangkat digital
yaitu persoalan daya dan panas.
Platform
CUDA dapat diakses oleh pengembang perangkat lunak melalui library
CUDA-accelerated , perintah kompiler (seperti OpenACC ), dan ekstensi untuk
bahasa pemrograman standar industri, termasuk C, C++ dan Fortran . C / C++
programmer menggunakan CUDA C / C + +, yang disusun dengan “nvcc”, NVIDIA LLVM
berbasis C / C++ compiler, dan Fortran programmer dapat menggunakan ‘CUDA
Fortran’, yang disusun dengan PGI CUDA Fortran compiler dari The Portland Grup.
Selain library, arahan compiler, CUDA C / C++ dan CUDA Fortran, platform CUDA
mendukung interface komputasi lainnya, termasuk Khronos Grup ‘s OpenCL ,
Microsoft DirectCompute , dan C++ AMP . Pemrograman pihak ketiga juga tersedia
untuk Python , Perl , Fortran , Java , Ruby , Lua , Haskell, Matlab , IDL , dan
dukungan asli di Mathematica.
Dalam
permainan komputer industri, GPU yang digunakan tidak hanya untuk rendering
grafis tetapi juga dalam perhitungan fisika permainan (efek fisik seperti
puing-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 oleh urutan besarnya atau lebih.
beberapa
kelebihan dari pemrograman CUDA :
Ø Tersebar
membaca – kode dapat membaca dari alamat sewenang-wenang dalam memori.
Ø Memori
bersama – CUDA memperlihatkan cepat memori bersama wilayah (sampai 48KB per
Multi-Processor) yang dapat dibagi di antara benang. Ini dapat digunakan
sebagai cache dikelola pengguna, memungkinkan bandwidth yang lebih tinggi
daripada yang mungkin menggunakan pencarian tekstur.
Ø Download
lebih cepat dan readbacks ke dan dari GPU.
Ø Dukungan
penuh untuk integer dan bitwise operasi, termasuk pencarian tekstur bulat.
Referensi :