Makalah Komputasi Paralel
- Komputasi Modern

Kelas : 4IA20
Kelompok 2
|
Efraim Salomo |
51417880 |
|
Futra Andriyansyah |
52417452 |
|
Gilang Ramadhan |
52417550 |
|
Herlangga Maulana
Malik |
52417743 |
|
Nadia Parisya Arundati |
54417371 |
|
Wildan Fathurrahman |
56417201 |
FAKULTAS TEKNOLOGI INDUSTRI JURUSAN TEKNIK INFORMATIKA UNIVERSITAS GUNADARMA
2021
A. Parallelism Concept

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.
Paralelisme (parallelism) lahir dari
pendekatan yang biasa dipergunakan oleh para
perancang sistem untuk menerapkan konsep pemrosesan konkuren. Teknik ini
meningkatkan kecepatan proses dengan
cara memperbanyak jumlah modul perangkat keras yang dapat beroperasi
secara simultan disertai dengan membentuk beberapa proses yang bekerja secara simultan pada modul - modul perangkat
keras tersebut. Secara formal, pemrosesan paralel adalah sebuah bentuk efisien pemrosesan informasi yang
menekankan pada eksploitasi dari konkurensi
kejadian - kejadian dalam proses komputasi. Pemrosesan
paralel dapat terjadi pada beberapa tingkatan (level) proses.
Tingkatan tertinggi pemrosesan paralel terjadi pada proses di antara banyak job (pekerjaan) atau pada program
yang menggunakan multi programming,
time sharing, dan multiprocessing. Multiprogramming kemampuan eksekusi terhadap
beberapa proses perangkat
lunak dalam sebuah system secara serentak, jika dibandingkan
dengan sebuah proses dalam satu waktu, dan timesharing berarti menyediakan pembagian
selang waktu yang tetap atau berubah - ubah untuk banyak program.
Multi processing adalah
dukungan sebuah sistem untuk mendukung lebih dari satu prosesor dan mengalokasikan tugas kepada prosesor
- prosesor tersebut.
Multiprocessing sering di implementasikan dalam
perangkat keras (dengan
menggunakan beberapa CPU sekaligus),
sementara multi programming sering digunakan dalam perangkat lunak. Sebuah sistem mungkin
dapat memiliki dua kemampuan tersebut, salah satu di antaranya, atau tidak sama sekali. Pemrosesan paralel dapat juga
terjadi pada proses di antara prosedurprosedur atau perintah perintah (segmen program) pada sebuah program. Untuk
meningkatkan kecepatan proses komputasi, dapat ditempuh dua cara :
1.
Peningkatan kecepatan perangkat keras
Komponen utama perangkat keras komputer adalah processor.
Meskipun kecepatan processor dapat ditingkatkan terus, namun karena keterbatasan materi pembuatnya, tentu ada suatu batas kecepatan yang tak mungkin lagi dapat dilewati. Karena itu
timbul ide pembuatan komputer
multiprocessor. Dengan adanya banyak processor dalam satu komputer, pekerjaan bisa dibagi - bagi kepada masing-masing
processor. Dengan demikian lebih banyak proses
dapat dikerjakan dalam satu saat. Peningkatan kecepatan setiap proses
bisa dicapai melalui peningkatan
kecepatan perangkat lunak. Kecepatan perangkat lunak sangat ditentukan oleh algoritmanya.
2.
Peningkatan kecepatan perangkat lunak
Program komputer untuk komputer sekuensial harus
menyediakan sederetan operasi untuk dikerjakan oleh prosesor tunggal.
Program komputer untuk komputer paralel
harus menyediakan sederetan operasi
untuk beberapa prosesor untuk
dikerjakan secara paralel, termasuk
operasi untuk mengatur dan mengitegrasikan prosesor - prosesor yang terpisah tersebut mengerjakan suatu komputasi yang koheren. Kebutuhan
akan pembuatan dan pengaturan berbagai
aktivitas komputasi paralel
menambah dimensi baru proses dari pemrograman komputer.
Algoritma untuk problem
yang spesifik harus diformulasikan sedemikian rupa, agar menghasilkan aliran
operasi paralel yang kemudian akan dieksekusi di prosesor yang berbeda. Karena itu, meskipun arsitektur
multiprosesor dan multikomputer mempunyai
pontensi yang tinggi untuk meningkatkan kemampuan komputasi, potensi ini akan tercapai melalui
pengertian yang baik mengenai bahasa pemrograman paralel
dan perancangan algoritma
paralel.
3.
Tingkat Paralelisme
Berdasarkan tingkat paralelismenya prosesor paralel dapat
dibagi menjadi beberapa tingkat sebagai berikut
:
1) Komputer Array :
a)
Prosesor array : beberapa prosesor
yang bekerja sama untuk mengolah set instruksi
yang sama dan data yang berbeda - beda atau biasa disebut
SIMD (Single Instruction-stream Multiple Data).
b) Prosesor vektor :
beberapa prosesor yang disusun seperti
pipeline.
2)
Multiprosesor
Yaitu sebuah
sistem yang memiliki
2 prosesor atau lebih yang saling berbagi
memori.
3)
Multikomputer
Yaitu sebuah
sistem yang memiliki
2 prosesor atau lebih yang masing - masing prosesor
memiliki memori sendiri.
a.
Jenis - Jenis Pemrosesan Paralel
Pemrosesan paralel
dapat dibagi ke dalam beberapa
klasifikasi, sebagai berikut :
1)
Berdasarkan simetri penjadwalannya, pemrosesan parallel dapat dibagi dalam beberapa
jenis :
a)
Asymmetric Multiprocessing (ASMP).
b) Symmetric Multiprocessing (SMP).
c) ClusteringPoliteknik
Telkom Sistem Komputer.
2)
Berdasarkan aliran instruksi dan datanya, pemrosesan parallel dapat dibagi
dalam beberapa jenis :
a) SISD (Single
Instruction on Single
Data Stream).
b) SIMD (Single
Instruction on Multiple
Data Stream).
c) MISD (Multiple Instruction on Single
Data Stream).
d) MIMD (Multiple Instruction on Multiple
Data Stream).
3)
Berdasarkan kedekatan antar prosesor,
pemrosesan parallel dapat dibagi dalam beberapa jenis
:
a)
Multikomputer (Loosely Coupled
/ local memory) dengan memori
yang terdistribusi.
b)
Multiprosesor (Tightly
Coupled / global memory) dengan memori yang dapat di gunakan bersama
(shared memory).
b.
Kinerja Komputasi dengan Parallel
Processing
Pemrosesan Paralel adalah komputasi dua
atau lebih tugas pada waktu bersamaan dengan
tujuan untuk mempersingkat waktu penyelesaian tugas - tugas tersebut dengan
cara meng optimalkan resource pada
sistem komputer yang ada untuk mencapai tujuan yang sama. Pemrosesan paralel dapat mempersingkat waktu ekseskusi suatu program dengan cara membagi suatu program menjadi
bagian-bagian yang lebih kecil yang dapat dikerjakan pada masing - masing prosesor secara bersamaan.
Tujuan
utama dari pemrosesan 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 yg anda butuhkan memotong bawang akan lebih sedikit jika anda
kerjakan berdua.
Performa dalam pemrosesan paralel diukur
dari berapa banyak peningkatan kecepatan (speed
up) yang diperoleh dalam menggunakan teknik 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
Model Pemrosesan Paralel
dibuat berdasarkan alur instruksi dan alur data yang digunakan
:
1)
SISD Single Instruction Single Datapath, ini prosesor
tunggal, yang bukan
paralel.
2) SIMD Single
Instruction Multiple Datapath, alur instruksi yang sama dijalankan terhadap banyak alur data yang berbeda.
3)
MIMD Multiple Instruction Multiple
Datapath, alur instruksinya banyak, alur datanya juga banyak, tapi masing - masing bisa berinteraksi.
4) MISD Multiple
Instruction Single Datapath, alur instruksinya banyak tapi beroperasi pada data yang sama.
c.
Proses Kerja
Pemrosesan paralel membagi
beban kerja dan mendistribusikannya pada komputer - komputer
lain yang terdapat dalam sistem untuk menyelesaikan suatu masalah. Sistem yang akan dibangun akan tidak akan menggunakan
komputer yang didesikasikan secara khusus untuk keperluan
pemrosesan paralel melainkan
menggunakan komputer yang telah ada. Artinya,
sistem ini nantinya akan terdiri dari sejumlah komputer dengan spesifikasi
berbeda yang akan bekerjasama untuk
menyelesaikan suatu masalah. Adapun tipe-tipe Paralelisme adalah sebagai berikut
:
1.
Result Paralelisme
Result Paralelisme yang sering disebut sebagai
Embarrassingly Parallel atau Perfect Paralel
adalah tipe paralelisme dimana komputasinya dapat dibagi menjadi
beberapa tugas independen yang mempunyai struktur
sama. Data struktur
suatu tugas dibagi menjadi beberapa bagian yang berstruktur sama.
Contoh tugas yang bisa diselesaikan dengan Result Parallelism adalah Simulasi
Montecarlo.
2.
Specialist Paralelisme
Cara kerja Specialist Parallelisme adalah dengan mengerjakan beberapa
tugas secara bersamaan
pada prosesor yang berbeda. Setiap komputer mengerjakan tugas tertentu. Contohnya penggunaanya adalah pada
simulasi pabrik kimia, satu prosesor mensimulasikan proses sebelum reaksi kimia, satu
prosesor mensimulasikan reaksi pada tahap awal, dan prosesor lainnya mensimulasikan proses penyulingan hasil, dan seterusnya.
3.
Agenda Paralelisme
Tipe paralelisme ini mempunyai daftar yang harus dikerjakan
oleh sistem komputer . Semua komputer yang terdapat pada sistem
dapat mengakses daftar tersebut.
Pada Model MW (Manager
Worker) terdapat pengelompokan komputer menjadi dua yaitu :
a)
Manager : bertugas memulai
perhitungan, memonitor kemajuan
tugas, melayani permintaan worker. User berkomunikasi
dengan sistem komputer melalui komputer yang berfungsi sebagai
manager ini.
b)
Worker : mengerjakan tugas - tugas
yang diberikan oleh manager. Kerja komputer ini dimulai setelah ada perintah dari manager dan diakhiri oleh manager.
c)
Pesan Terdistribusi dan Lingkungan Pemrograman (Distributed Messaging
and Programming Enviroment)
hubungannya dengan pemrosesan paralel ialah pesan sebagai sesuatu (objek) pada pemrosesan itu
sendiri sehingga kita harus mendeskripsikan pesan (message) itu.
d.
Messages
Adalah urutan bytes yang dikirimkan antar proses. Pengirim
dan penerima harus mempunyai kesepakatan
mengenai struktur pesan sehingga isi pesan dapat diterjemahkan dengan benar. Pada prinsipnya cara pengiriman pesan
adalah sederhana. Proses A mengirim data buffer sebagai sebuah pesan ke proses B. Pada saat bersamaan proses B
menunggu datangnya pesan dari proses
A. Ketika pesan tersebut maka proses B akan mengcopy pesan tersebut di memori lokalnya. Adapun Metode Pengiriman pesan
(message passing) terdapat beberapa metode dalam pengiriman pesan yaitu :
1) Synchronous Message Passing
Cara pengiriman menggunakan metode ini ialah 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.
2) 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.
Selain berdasarkan metode pengiriman pesan diatas, pengiriman pesan (message passing)
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.
PVM dan MPI Mesin virtual parallel atau Parallel Virtual
Machine (PVM) dan Antarmuka
Pengiriman Pesan (MPI) adalah kumpulan library yang memungkinkan kita untuk menulis
program pengiriman pesan paralel menggunakan bahasa pemrograman C dan FORTRAN agar bisa berjalan pada sistem paralel.
Kemampuan sistem paralel tergantung dari
kemampuan pemrogram untuk membuat aplikasi terdistribusi ketika dijalankan pada sistem paralel.
Jika node slave mempunyai prosessor lebih dari satu maka pemrogram
harus memperhitungkan kemungkinan paralelisme
2 level: Paralelisme di dalam slave node (intra-node parallelism) dan
paralelisme antar slave node
(inter-node parallelism). Inter-node parallelism menggunakan shared memory
dalam node sehingga tidak melakukan
pertukaran data secara explicit. Sedangkan
Inter-node parallelism
melakukan pertukaran data lewat media yang menghubungkan antara node slave yang ada.
Terdapat tiga metode untuk mengimplementasikan Inter-node parallelism yaitu :
1) Dengan cara membuat protokol
komunikasi ad hoc level rendah.
Contohnya dengan menggunakan socket interface.
2) Dengan menggunakan distributed communication library. Contohnya dengan meng gunakan
Message Passing Interface (MPI) library
3) Dengan memanfaatkan layer software dengan maksud untuk menyembunyikan interconnect dari programmer.
Setelah kita mengenal, komponen - komponen dan tujuan dari
pemrosesan paralel tersebut, kita beralih
ke sistem pemrosesan paralel dimana, sistem pemrosesan paralel
adalah sekumpulan komputer
terhubung dan bekerjasama sebagai satu resource
komputer yang terintegrasi untuk menyelesaikan suatu
tujuan. Sebuah sistem paralel setidaknya terdiri dari Message Passing Interface (MPI) dan sebuah pengatur beban kerja
(job scheduler) . Message Passing Interface
bertugas untuk mengirim data antar komputer di dalam sistem paralel (biasanya disebut sebagai node atau host).
Job scheduler seperti yang tersirat dari namanya bertugas menerima tugas dari user dan menjadwalkan tugas
tersebut pada beberapa node didalam sistem
parallel sesuai kebutuhan.
e.
MPI (Message Passing Interface)
Adalah
sebuah mekanisme mengiriman instruksi dan data antara dua proses komputasi yang berbeda yang berada pada
komputer berbeda pada sistem sistem paralel.
Paket - paket yang mempunyai spesifikasi kebutuhan MPI telah banyak
beredar di Internet dan telah
dilengkapi dengan LAM / MPI dan MPICH. Paket - paket ini telah dilengkapi dengan fungsi - fungsi yang menggunakan library C
dan Fortran. Kemampuan
MPI di gunakan untuk menginterpretasikan bahasa pemrograman matrik kemampuan dynamic
linking dari bahasa tersebut. Fungsi library dari paket MPI dapat digabungkan dengan dynamic extension
dengan cara menghubungkan bahasa pemrograman tersebut
dengan bahasa C, C++, atau
FORTRAN. Hal ini telah dilakukan untuk menciptakan toolbox MPI (MPITB)
untuk kebutuhan MATLAB,
dan bahasa pemrograman GNU Octave oleh Fernandez
Baldomero. Pada makalah ini digunakan MPITB dengan pertimbangan fungsi onalitas dan kelengkapannya disamping
fakta bahwa MPITB dan GNU Octave adalah bebas
digunakan bahkan untuk keperluan komersial. Hal ini juga berarti bahwa
source codenya banyak beredar
dan dapat dimodifikasi sesuai kebutuhan.
B. Distributed Processing

Distributed data processing (DDP) system
merupakan bentuk yang sering digunakan sekarang
sebagai perkembangan dari time sharing system. Bila beberapa sistem komputer yang bebas tersebar yang masing - masing
dapat memproses data sendiri dan dihubungkan
dengan jaringan
telekomunikasi, maka istilah time sharing sudah tidak tepat lagi. DDP system
dapat didefinisikan sebagai suatu sistem komputer interaktif yang terpencar
secara geografis dan dihubungkan dengan jalur telekomunikasi dan seitap komputer
mampu memproses data secara
mandiri dan mempunyai kemampuan berhubungan dengan komputer lain dalam suatu sistem.
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.
Contoh Sistem
Pengolahan Data terdistribusi :
1) Internet
a.
Jaringan komputer
dan aplikasi yang heterogen.
b.
Mengimplementasikan
protokol internet.
2) Intranet
a.
Jaringan yang teradminitrasi secara lokal.
b.
Terhubung ke internet
melalui firewall.
c.
Menyediakan layanan internet dan eksternal.
3)
Mobile Computing ( Sistem Komunikasi telepon
seluler)
a.
Menggunakan frekuensi radio sebagai media transmisi
b.
Perangkat dapat bergerak
kemanapun asal masih
terjangkau dengan frekuensinya
c.
Dapat menghandle / dihububngkan dengan
perangkat lain
4) Sistem Telepon
a.
ISDN atau yang biasa disebut
jaringan telpon tetap (dengan kabel).
b.
PSTN jaringan telepon
/ telekomunikasi yang semuanya digital.
5) Network File System (NTFS)
a.
WWW
C. Architectural Parallel Computer
Arsitektur Komputer Paralel adalah sekumpulan elemen pemroses (Processing Elements) yang bekerjasama dalam menyelesaikan sebuah masalah
besar. Komputasi paralel adalah salah satu teknik melakukan komputasi
secara bersamaan dengan memanfaatkan beberapa komputer secara bersamaan.
Biasanya diperlukan saat kapasitas yang diperlukan sangat besar, baik karena harus mengolah data dalam jumlah besar
ataupun karena tuntutan proses komputasi yang banyak.
Untuk melakukan aneka jenis komputasi
paralel ini diperlukan infrastruktur mesin paralel
yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja
secara paralel untuk menyelesaikan satu masalah. 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. Untuk melakukan berbagai
jenis komputasi paralel
diperlukan infrastruktur mesin paralel yang terdiri
dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel untuk menyelesaikan satu masalah. Untuk
digunakan perangkat lunak pendukung yang biasa
disebut middleware yang berperan mengatur distribusi antar titik dalam
satu mesin paralel. Selanjutnya pemakai
harus membuat pemrograman paralel untuk merealisasikan komputasi.
Berdasarkan jumlah dan prinsip kerja prosesor pada komputer
parallel, A.J. Van der Steen dan J.Donggara menyebutkan terdapat empat
arsitektur utama komputer parallel menurut Flynn (1972) yaitu :
1) SISD (Single Instruction, Single Data)

Arsitektur ini adalah
arsitektur yang mewakili
komputer serial, di mana hanya
ada satu prosesor dan satu aliran
masukan data (memori) sehingga hanya ada satu task yang dapat dieksekusi pada suatu waktu. Arsitektur
von Neumann termasuk dalam jenis ini. SISD adalah satu - satunya yang menggunakan arsitektur Von Neumann, Ini
dikarenakan pada model ini hanya
digunakan 1 processor saja. Oleh karena itu model ini bisa dikatakan sebagai
model untuk komputasi tunggal. Sedangkan ketiga model lainnya merupakan
komputasi paralel yang menggunakan beberapa processor. Beberapa
contoh komputer yang menggunakan model SISD adalah UNIVAC1, IBM 360,
CDC 7600, Cray 1 dan PDP 1.
2) SIMD (Single Instruction, Multiple Data)

Pada arsitektur ini, eksekusi sebuah instruksi akan
dilakukan secara bersamaan oleh beberapa prosesor, di mana
suatu prosesor dapat menggunakan data yang berbeda dengan prosesor lain. Karakteristik lain dari arsitektur ini adalah alur
eksekusi instruksi yang deterministik (state
dari instruksi dan data pada suatu waktu dapat dengan mudah diketahui).
Arsitektur ini cocok untuk program yang dapat dibagi menjadi task - task yang mempunyai
derajat keteraturan yang tinggi, misalnya
sistem pengolah grafik.
SIMD menggunakan banyak processor
dengan instruksi yang sama, namun setiap processor mengolah data yang berbeda. Sebagai contoh kita ingin mencari angka 27
pada deretan angka yang terdiri dari 100 angka, dan kita menggunakan 5 processor. Pada setiap processor kita
menggunakan algoritma atau perintah
yang sama, namun data yang diproses berbeda. Misalnya processor 1 mengolah data dari deretan / urutan pertama hingga
urutan ke 20, processor 2 mengolah data dari urutan 21 sampai urutan 40, begitu pun untuk processor-processor yang lain. 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).
3) MISD (Multiple Instruction, Single Data)

Pada arsitektur ini, berbagai instruksi
akan dieksekusi secara bersamaan oleh beberapa prosesor dengan menggunakan data yang
sama. Arsitektur ini kurang populer karena hanya sedikit permasalahan yang membutuhkan solusi dengan menggunakan
karakteristik arsitektur ini. Contoh permasalahan yang mungkin membutuhkan arsitektur ini antara lain adalah multiple
frequency filter dan program pemecah sandi yang menggunakan beberapa algoritma kriptografi sekaligus. MISD menggunakan banyak processor dengan setiap processor
menggunakan instruksi yang berbeda namun mengolah data yang sama. Hal
ini merupakan kebalikan dari model
SIMD. Untuk contoh, kita bisa menggunakan kasus yang sama pada contoh model SIMD namun cara penyelesaian
yang berbeda. Pada MISD jika pada komputer pertama,
kedua, ketiga, keempat dan kelima sama-sama mengolah data dari urutan 1 - 100, namun algoritma yang digunakan untuk
teknik pencariannya berbeda di setiap processor. Sampai saat ini belum ada komputer yang menggunakan model MISD.
4) MIMD (Multiple Instruction, Multiple Data)

Pada arsitektur ini, berbagai instruksi dapat dieksekusi oleh beberapa
prosesor di mana masing
- masing prosesor dapat menggunakan data yang berbeda. Eksekusi instruksi pada arsitektur ini dapat dilakukan secara sinkron (pada suatu
rentang waktu, jumlah instruksi yang
dieksekusi oleh semua prosesor adalah sama) maupun asinkron, deterministik
maupun non-deterministik. Selain itu, arsitektur ini dapat melakukan
pekerjaan sesuai dengan karakteristik dari ketiga asitektur
sebelumnya. MIMD menggunakan banyak processor dengan setiap processor memiliki instruksi yang berbeda dan mengolah data yang berbeda.
Namun banyak komputer yang menggunakan model MIMD juga
memasukkan komponen untuk model SIMD. Beberapa komputer yang menggunakan model MIMD adalah IBM POWER5, HP/Compaq AlphaServer, Intel IA32,
AMD Opteron, Cray XT3 dan IBM BG/L.
Sistem komputer paralel dibedakan dari cara kerja memorinya
menjadi shared memory dan distributed
memory. Shared memory berarti memori tunggal diakses oleh satu atau lebih prosesor untuk menjalankan instruksi
sedangkan distributed memory berarti setiap prosesor memiliki memori sendiri untuk menjalankan instruksi. Komponen -
komponen utama dari arsitektur komputer
paralel cluster PC antara lain :
1)
Prosesor (CPU)
Bagian paling penting dalam sistem, untuk multicore terdapat lebih dari satu core yang mengakses sebuah memori (shared memory).
2)
Memori
Bagian ini dapat diperinci
lagi menjadi beberapa
bagian penyusunnya seperti
RAM, cache memory dan memori eksternal.
3) Sistem Operasi
Software dasar untuk menjalankan sistem komputer.
4)
Cluster Middleware
Antarmuka antara
hardware dan software.
5)
Programming Environment dan Software Tools
Software yang digunakan untuk pemrograman paralel
termasuk software pendukungnya.
6)
User Interface
Software yang menjadi perantara
hardware dengan user.
7)
Aplikasi
Software berisi
program permasalahan yang akan diselesaikan.
8)
Jaringan
Penghubung satu PC (prosesor) dengan PC yang lain sehingga
memungkinkan pemanfaatan sumberdaya secara simultan.
D. Konsep Dasar Thread
Programming
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 :
1) 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.
2) 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.
E. Konsep Dasar Message
Passing dan OpenMP
a. Message Passing
Message passing itu adalah teknik untuk mengatur suatu alu
komunikasi messaging terhadap proses
pada sebuah sistem. Suatu proses mengirimkan message yang mewakili suatu
request, Message di sampaikan ke penerima yang kemudian memproses
request tersebut dan mengirim
pesan balasan. Kemudian, balasan tersebut memicu request lainnya, yang
berlanjut pada balasan berikutnya dan
seterusnya. Operasi dasar yang dibutuhkan untuk mendukung paradigma
message passing adalah send dan receive. Jadi Message Passing
ini bentuk komunikasi yang digunakan oleh komputasi
parallel yang udah kita bahas sebelumnya. Objek dalam message passing di distribusikan menggunakan metode
sistem remote doa seperti : ONC RPC , CORBA , Java RMI , DCOM , SOAP , . NET Remoting , CTO , QNX Neutrino
RTOS , OpenBinder , D-Bus , Unison
RTOS.
b. OpenMP(Open Multi Processing)
OpenMP adalah sebuah antarmuka pemrograman aplikasi (API) yang mendukung
multi processingshared memory
pemrograman di C, C++ dan Fortran pada berbagai arsitektur, termasuk Unix dan Microsoft Windows
platform. OpenMP Terdiri dari satu set perintah kompiler, perpustakaan rutinitas, danvariabel lingkungan yang mempengaruhi run-time.
Banyak Aplikasi dibangun dengan model hibrida pemrograman paralel dapat
dijalankan pada komputer cluster
dengan menggunakan OpenMP dan Message Passing Interface (MPI), atau lebih transparan dengan menggunakan ekstensi
OpenMP non-shared memory systems. 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.
Terdapat
dua metode dalam pengiriman pesan yaitu :
1) 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.
2) 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.
F. 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.
Peningkatan clock juga dibatasi oleh
kemampuan fisik dari perangkat digital yaitu
persoalan daya dan panas. Pada 2005 berbagai industri komputer mulai
menawakan komputer dengan beberapa
core mulai dari 2, 3, 4, 6, dst. Pada awal perkembangan GPU dengan banyak
core, pemanfaatan GPU hanya dapat dilakukan dengan antarmuka seperti OpenGL dan DirectX dimana
antarmuka tersebut dikhususkan hanya untuk pengolahan grafis.
Seri - seri terbaru dari NVIDIA saat ini
telah mendukung CUDA tepatnya keluaran setelah tahun 2006. Untuk daftar dari seri yang mendukung CUDA dapat dilihat
pada http://nvidia.com/cuda. Sebagai tahap awal dalam belajar pemrograman paralel dengan memanfaatkan CUDA sebaiknya menggunakan
bahasa pemrograman C atau C++. CUDA C telah menjadi
bahasa pemrograman khusus pertama yang dikembangkan oleh suatu perusahaan GPU untuk memfasilitasi general - purpose computing pada GPU. Beberapa
hal
yang perlu
dipersiapkan dalam penggunaan
CUDA C untuk membuat suatu aplikasi adalah
sebagai berikut :
a. CUDA-enabled graphics
processor
b. NVIDIA device
driver
c. CUDA development toolkit
d. Standard C compiler
Kebutuhan seperti toolkit dan driver dapat diunduh di http://developer.nvidia.com/cuda-downloads CUDA C menyediakan kebutuhan tersebut untuk Windows, Linux, dan Mac. Jika telah
memasang CUD toolkit pada komputer
Anda maka akan ada aplikasi compiler
yang dapat Anda gunakan yaitu nvcc. Selain itu, jika Anda menggunakan Windows sebaiknya Anda juga
memasang Visual Studio untuk kemudahan pembuatan
aplikasi dan ada program bernama cl.exe dari Visual Studio yang diperlukan dalam kompilasi. Hal
khusus dalam kode program yang menggunakan CUDA C adalah adanya kernel call. Sebagai contoh
adalah cuplikan kode berikut :
#include
global void
kernel( void ) {
}
int main( void ) { kernel<<<1>>>();
printf( “Hello, World!\n” ); return 0;
}
Penambahan variabel global pada fungsi kernel()berfungsi untuk
menunjukkan pada compiler bahwa
program tersebut dikompilasi untuk berjalan pada device dan bukan pada host. Selanjutnya kita akan melihat
contoh program lagi dimana terdapat
bagian pengiriman nilai.
#include
#include “book.h”
global void
add( int a, int b, int *c ) {
*c = a + b;
}
int main( void ) { int c;
int *dev_c;
HANDLE_ERROR( cudaMalloc( (void**)&dev_c, sizeof(int) ) ); add<<<1>>>( 2, 7, dev_c );
HANDLE_ERROR( cudaMemcpy( &c, dev_c, sizeof(int), cudaMemcpyDeviceToHost )
);
printf(
“2 + 7 = %d\n”, c ); cudaFree( dev_c );
return 0;
}
Variabel dev_c adalah variabel yang akan
digunakan untuk menampung nilai yang akan
dilewatkan dari host ke device dan
setelah itu nilai tersebut akan diambil dari device dan dikirim ke host. Metode pengalokasian memori memanfaatkan
fungsi cudaMalloc() yang fungsinya
mirip malloc() pada C. Untuk mengambil nilai dari device memanfaakan fungsi cudaMemcpy(). Sekarang bagaimanakah paralel pada GPU ? Lihat program
penjumlahan vektor berikut
ini :
#include “../common/book.h” #define N 10
global void add( int *a, int *b, int *c ) { int tid = blockIdx.x;
// handle the data at this index if (tid < N) {
c[tid] = a[tid] + b[tid];
}
}
int main( void ) { int a[N], b[N], c[N];
int *dev_a,
*dev_b, *dev_c;
// allocate the memory on the
GPU
HANDLE_ERROR( cudaMalloc( (void**)&dev_a, N *
sizeof(int) ) ); HANDLE_ERROR(
cudaMalloc( (void**)&dev_b, N * sizeof(int) ) ); HANDLE_ERROR( cudaMalloc( (void**)&dev_c, N * sizeof(int) ) );
// fill the arrays ‘a’ and ‘b’ on the CPU
for (int i = 0; i < N; i++) { a[i] = -i; b[i] = i * i; }
// copy the arrays ‘a’ and ‘b’ to the GPU
HANDLE_ERROR( cudaMemcpy( dev_a, a, N * sizeof(int),
cudaMemcpyHostToDevice ) ); HANDLE_ERROR( cudaMemcpy( dev_b, b, N * sizeof(int), cudaMemcpyHostToDevice ) ); add<<<
N,1 >>>( dev_a, dev_b, dev_c );
// copy the
array ‘c’ back from the GPU to the
CPU
HANDLE_ERROR( cudaMemcpy( c, dev_c, N * sizeof(int), cudaMemcpyDeviceToHost ) );
// display
the results
for (int i = 0; i < N;
i++) { printf( “%d + %d = %d\n”, a[i], b[i], c[i] );
}
// free the memory allocated on the GPU
cudaFree( dev_a );
cudaFree( dev_b ); cudaFree( dev_c ); return 0;
Program
yang dapat dijadikan
paralel adalah program
yang digunakan untuk menghasilkan
satu nilai dimana nilai keluarannya tersebut tidak dipengaruhi oleh nilai lain dari komputasi dengan fungsi yang sama.
Contohnya adalah dalam program penjumlahan vektor
ini. Dalam penjumlahan vektor nilai c(0)adalah penjumlahan antara a(0) dan b(0)
dan tidak dipengaruhi oleh nilai
c(1), c(2), dan seterusnya. Pada program ini juga terdapat bagian yang bertuliskan
add<<<N,1>>>. Bagian ini menunjukkan bahwa program
memanfaatkan N buah thread. Nilai N buah ini diperoleh dari :
N buah block x 1 threadper block
Untuk
menentukan jumlah thread yang akan digunakan dapat diatur dengan mengubah kedua nilai tersebut.
Fungsi add<<<1,N>>> akan menghasilkan penggunaan jumlah thread yang sama dengan fungsi ini
add<<<N,1>>>. Jumlah block dan thread per block tentu saja terbatas dan untuk setiap device akan berbeda jumlahnya. Anda dapat melihatnya menggunakan fungsi properti dari CUDA. Program di atas juga hanya meng gunakan 1 thread pada setiap block. Oleh karena itu identifikasi posisi cukup dengan mengambil posisi block yang menjalankan komputasi
dengan memanggil variabel
blockIdx.x.
Hal lain yang akan menjadi penting dalam pemanfaatan CUDA ada kemampuan untuk merepresentasikan
array 2D atau 3D dalam array 1D. Kemampuan
ini akan mem permudah kita dalam pembuatan program untuk pengalokasian memori serta pengaturan jumlah thread. Untuk belajar lebih jauh
lagi tentang pemrograman paralel dengan CUDA
dapat mempelajari berbagai bahan untuk belajar yang disediakan oleh
NVIDIA seperti pada http://developer.nvidia.com//suggested-reading dan http://developer.nvidia.com/cuda-training
.
Sumber :
1)
https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi-
modern-sem-8/
2) http://ikhsanturion.blogspot.co.id/2016/06/teori-komputasi-paralel-computing.html
3)
https://www.techopedia.com/definition/3351/distributed-processing
4)
https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi-
modern-sem-8/
5)
https://djuneardy.blogspot.co.id/2015/05/konsep-arsitektur-paralel-pemrosesan.html
6)
http://organkomputer.blogspot.co.id/2013/04/prosesor-paralel.html
7)
https://en.wikipedia.org/wiki/Thread_(computing)
8)
https://en.wikipedia.org/wiki/Parallel_computing
9)
https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi-
modern-sem-8/
10) http://seto.citravision.com/berita-50-parallel-computation–pengantar-message-passing-
openmp.html
11)
http://ginaalfiana.blogspot.co.id/2015/11/pengantar-message-passing-openmp.html
12)
https://developer.nvidia.com/cuda-zone
13)
https://devblogs.nvidia.com/even-easier-introduction-cuda/
14)
https://en.wikipedia.org/wiki/CUDA