A. Parallelism Concept
Banyak
perkembangan-perkembangan baru dalam arsitektur komputer yang didasarkan pada
konsep pemrosesan paralel. Pemrosesan paralel dalam sebuah komputer dapat
didefinisikan sebagai pelaksanaan instruksi-instruksi secara bersamaan
waktunya. Hal ini dapat menyebabkan pelaksanaan kejadian-kejadian (1) dalam
interval waktu yang sama, (2) dalam waktu yang bersamaan atau (3) dalam rentang
waktu yang saling tumpang tindih.
Sekalipun
didukung oleh teknologi prosesor yang berkembang sangat pesat, komputer
sekuensial tetap akan mengalami keterbatasan dalam hal kecepatan pemrosesannya.
Hal ini menyebabkan lahirnya konsep keparalelan (parallelism) untuk menangani
masalah dan aplikasi yang membutuhkan kecepatan pemrosesan yang sangat tinggi,
seperti misalnya prakiraan cuaca, simulasi pada reaksi kimia, perhitungan
aerodinamika dan lain-lain.
Konsep
keparalelan itu sendiri dapat ditinjau dari aspek design mesin paralel,
perkembangan bahasa pemrograman paralel atau dari aspek pembangunan dan
analisis algoritma paralel. Algoritma paralel itu sendiri lebih banyak
difokuskan kepada algoritma untuk menyelesaikan masalah numerik, karena masalah
numerik merupakan salah satu masalah yang memerlukan kecepatan komputasi yang
sangat tinggi.
B. Distributed Processing
Yang
dimaksud Distribusi Processing adalah 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 adalah: 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.
C. Architectural Parallel Computer
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.
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. Menurut mereka tipe komputer ini tidak ada dalam praktik komputer
paralel karena bahkan mainframe pun tidak lagi menggunakan satu prosesor.
Klasifikasi ini sekedar untuk melengkapi definisi komputer paralel. 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. Teorinya 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, bahkan banyak
supercomputer yang menerapkan arsitektur ini. 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. Adapun
komponen-komponen utama dari arsitektur komputer paralel cluster PC antara
lain:
- Prosesor (CPU). Bagian paling penting dalam sistem, untuk multicore terdapat lebih dari satu core yang mengakses sebuah memori (shared memory).
- Memori. Bagian ini dapat diperinci lagi menjadi beberapa bagian penyusunnya seperti RAM, cache memory dan memori eksternal.
- Sistem Operasi. Software dasar untuk menjalankan sistem komputer.
- Cluster Middleware. Antarmuka antara hardware dan software.
- Programming Environment dan Software Tools. Software yang digunakan untuk pemrograman paralel termasuk software pendukungnya.
- User Interface. Software yang menjadi perantara hardware dengan user.
- Aplikasi. Software berisi program permasalahan yang akan diselesaikan.
- Jaringan. Penghubung satu PC (prosesor) dengan PC yang lain sehingga memungkinkan pemanfaatan sumberdaya secara simultan.
D. Pengantar Thread Programming
Thread
adalah informasi terkait dengan penggunaan sebuah program tunggal yang dapat
menangani beberapa pengguna secara bersamaan. 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.
E. Pengantar Massage Passing, Open MP
Massage
Passing adalah 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. Objek didistribusikan dan metode
sistem remote doa seperti ONC RPC , CORBA , Java RMI , DCOM , SOAP , . NET
Remoting , CTO , QNX Neutrino RTOS , OpenBinder , D-Bus , Unison RTOS dan
serupa pesan lewat sistem.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
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.
F. Pengantar 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.
Sumber :
http://fidiastrida.blogspot.com/2012/09/multiprogramming-multiprocessing.html
http://xditx32.blogspot.com/2012/09/pengertian-multiprocessingmultitasking.html
http://djuneardy.blogspot.com/2015/05/konsep-arsitektur-paralel-pemrosesan.html
http://organkomputer.blogspot.com/2013/04/prosesor-paralel.html
http://djuneardy.blogspot.com/2015/05/konsep-arsitektur-paralel-pemrosesan.html
http://ahmadqusyairi.blogspot.com/2010/03/openmp-open-multi-processing.html
http://www.lukinotes.com/2012/06/pemrograman-paralel-dengan-cuda.html