Pengantar Komputer Parallel
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. 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. Tidak berarti dengan mesin paralel semua program yang dijalankan diatasnya otomatis akan diolah secara parallel.Di dalam komputasi parallel ada yang dinamakan dengan pemrograman parallel. 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. Bila 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.
Parallel processing berbeda dengan multitasking, yaitu satu CPU
mengeksekusi beberapa program sekaligus. Parallel processing disebut juga
parallel computing. Pada system komputasi parallel terdiri dari beberapa unit
prosesor dan beberapa unit memori. Ada dua teknik yang berbeda untuk mengakses
data di unit memori, yaitu shared memory address dan message passing.
Berdasarkan cara mengorganisasikan memori ini computer parallel dibedakan
menjadi shared memory parallel machine dan distributed memory parallel
machine.Prosesor dan memori ini didalam mesin paralel dapat dihubungkan
(interkoneksi) secara statis maupun dinamis. Interkoneksi statis umumnya digunakan
oleh distributed memory system (sistem memori terdistribusi). Sambungan
langsung peer to peer digunakan untuk menghubungkan semua prosesor.
Interkoneksi dinamis umumnya menggunakan switch untuk menghubungkan antar
prosesor dan memori.
A. Konsep parallelisme
Komputasi paralel komputasinya dilakukan oleh beberapa resources yang independen, secara bersamaan. Komputasi paralel biasanya diperlukan pada saat terjadinya pengolahan data dalam jumlah besar ( di industri keuangan, bioinformatika, dll ) atau dalam memenuhi proses komputasi yang sangat banyak. Dalam menyelesaikan suatu masalah, komputasi paralel memerlukan infrastruktur mesin paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel.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. Tidak berarti dengan mesin paralel semua program yang dijalankan diatasnya 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) CPU. Tujuan utama dari pemrograman paralel adalah untuk meningkatkan performa komputasi. Semakin banyak hal yang bisa dilakukan secara bersamaan, semakin banyak pekerjaan yang bisa diselesaikan.
Komputasi paralel komputasinya dilakukan oleh beberapa resources yang independen, secara bersamaan. Komputasi paralel biasanya diperlukan pada saat terjadinya pengolahan data dalam jumlah besar ( di industri keuangan, bioinformatika, dll ) atau dalam memenuhi proses komputasi yang sangat banyak. Dalam menyelesaikan suatu masalah, komputasi paralel memerlukan infrastruktur mesin paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel.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. Tidak berarti dengan mesin paralel semua program yang dijalankan diatasnya 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) CPU. Tujuan utama dari pemrograman paralel adalah untuk meningkatkan performa komputasi. Semakin banyak hal yang bisa dilakukan secara bersamaan, semakin banyak pekerjaan yang bisa diselesaikan.
B. Proses Terdistribusi
Teknik pemrosesan paralel adalah suatu pendekatan komputasi untuk
meningkatkan tingkat di mana satu set data diolah dengan pengolahan bagian yang
berbeda dari data pada waktu yang sama secara simultan atau bersamaan pada
sebuah komputer dan berfungsi memecah beban besar menjadi beberapa beban kecil
untuk mempercepat proses penyelesaian masalah.
Didistribusikan pengolahan paralel menggunakan pemrosesan paralel pada
beberapa mesin. Salah satu contoh dari hal ini adalah bagaimana beberapa
komunitas memungkinkan pengguna untuk mendaftar dan mendedikasikan komputer
mereka sendiri untuk memproses beberapa data set yang diberikan kepada mereka
oleh server. Ketika ribuan pengguna mendaftar untuk ini, banyak data dapat
diproses dalam jumlah yang sangat singkat.
Tipe lain dari
komputasi paralel yang kadang-kadang disebut “didistribusikan” adalah gagasan
dari sebuah komputer paralel cluster. Sebuah cluster akan banyak CPU terhubung melalui
kecepatan tinggi koneksi ethernet ke hub sentral (Server) yang memberi
masing-masing beberapa pekerjaan yang harus dilakukan. Metode cluster mirip
dengan metode yang dijelaskan dalam paragraf di atas, kecuali bahwa semua CPU
secara langsung terhubung ke server, dan satu-satunya tujuan mereka adalah
untuk melakukan perhitungan yang diberikan kepada mereka.
Parallel distributed computing dapat dibentuk dari :
· Menggunakan konsep pertemuan yang
menggabungkan fitur RPC dan monitor.
· PVM (Parallel Virtual Machine) untuk
mendukung workstation clusters
· MPI (Message-Passing Interface)
programming GUI untuk parallel computers.
· SISD Yang merupakan singkatan dari Single
Instruction, Single Data 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.
· SIMD Yang merupakan singkatan dari Single
Instruction, Multiple Data. SIMD menggunakan banyak processor dengan instruksi
yang sama, namun setiap processor mengolah data yang berbeda.
· MISD Yang merupakan singkatan dari Multiple Instruction,
Single Data. MISD menggunakan banyak processor dengan setiap processor
menggunakan instruksi yang berbeda namun mengolah data yang sama. Hal ini
merupakan kebalikan dari model SIMD.
· MIMD Yang merupakan singkatan dari Multiple
Instruction, Multiple Data. 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.
D. Pengantar Thread Programming
Thread adalah informasi terkait dengan penggunaan sebuah program tunggal
yang dapat menangani beberapa pengguna secara bersamaan. Dari sudut pandang
program, sebuah thread adalah informasi yang dibutuhkan untuk melayani satu
pengguna individu atau permintaan layanan tertentu. Jika beberapa pengguna
menggunakan program atau permintaan bersamaan dari program lain yang sedang
terjadi, thread yang dibuat dan dipelihara untuk masing-masing proses. 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.
E. 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.
F. 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.
OpenMP (Open Multi-Processing) adalah sebuah antarmuka pemrograman
aplikasi (API) yang mendukung multi processing shared memory pemrograman
di C, C++ dan Fortran berbagai arsitektur, termasuk UNix dan Microsoft
Windows platform. OpenMP Terdiri dari satu set perintah kompiler,
perpustakaan rutinitas, dan variabel 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 mengimplementasi multithreading. Bagian kode yang akan dijalankan
secara parallel ditandai sesuai dengan Preprocessor directif sehingga akan
membuat thread-thread sebelum dijalnkan. Secara default, setiap thread
mengeksekusi kode secara parallel dan independent. “Work-sharing constructs”
dapat dapat digunakan untuk membagi tugas antar thread sehingga setiap thread
menjalankan sesuai bagian alokasi kodenya.
H. Pengantar Pemograman CUDA GPU
Sebuah GPU (Graphical Processing Unit) pada awalnya adalah sebuah prosesor yang berfungsi khusus untuk melakukan rendering pada kartu grafik saja, tetapi seiring dengan semakin meningkatnya kebutuhan rendering, terutama untuk mendekati waktu proses yang realtime /sebagaimana kenyataan sesungguhnya, maka meningkat pula kemampuan prosesor grafik tersebut. akselerasi peningkatan teknologi GPU ini lebih cepat daripada peningkatan teknologi prosesor sesungguhnya (CPU), dan pada akhirnya GPU menjadi General Purpose, yang artinya tidak lagi hanya untuk melakukan rendering saja melainkan bisa untuk proses komputasi secara umum.penggunaan Multi GPU dapat mempercepat waktu proses dalam mengeksekusi program karena arsitekturnya yang natively parallel. Selain itu Peningkatan performa yang terjadi tidak hanya berdasarkan kecepatan hardware GPU saja, tetapi faktor yang lebih penting adalah cara membuat kode program yang benarbenar bisa efektif berjalan pada Multi GPU.
Sebuah GPU (Graphical Processing Unit) pada awalnya adalah sebuah prosesor yang berfungsi khusus untuk melakukan rendering pada kartu grafik saja, tetapi seiring dengan semakin meningkatnya kebutuhan rendering, terutama untuk mendekati waktu proses yang realtime /sebagaimana kenyataan sesungguhnya, maka meningkat pula kemampuan prosesor grafik tersebut. akselerasi peningkatan teknologi GPU ini lebih cepat daripada peningkatan teknologi prosesor sesungguhnya (CPU), dan pada akhirnya GPU menjadi General Purpose, yang artinya tidak lagi hanya untuk melakukan rendering saja melainkan bisa untuk proses komputasi secara umum.penggunaan Multi GPU dapat mempercepat waktu proses dalam mengeksekusi program karena arsitekturnya yang natively parallel. Selain itu Peningkatan performa yang terjadi tidak hanya berdasarkan kecepatan hardware GPU saja, tetapi faktor yang lebih penting adalah cara membuat kode program yang benarbenar bisa efektif berjalan pada Multi GPU.
CUDA merupakan teknologi anyar dari produsen kartu grafis Nvidia, dan
mungkin belum banyak digunakan orang secara umum. Kartu grafis lebih banyak
digunakan untuk menjalankan aplikasi game, namun dengan teknologi CUDA ini
kartu grafis dapat digunakan lebih optimal ketika menjalankan sebuah software
aplikasi. Fungsi kartu grafis Nvidia digunakan untuk membantu Processor (CPU)
dalam melakukan kalkulasi dalam proses data. CUDA merupakan singkatan dari
Compute Unified Device Architecture,didefinisikan sebagai sebuah arsitektur
komputer parallel, dikembangkan oleh Nvidia. Teknologi ini dapat digunakan
untuk menjalankan proses pengolahan gambar, video, rendering 3D, dan lain
sebagainya. CUDA dapat memberikan proses dengan pendekatan bahasa C, sehingga
programmer atau pengembang software dapat lebih cepat menyelesaikan perhitungan
yang komplek. Bukan hanya aplikasi seperti teknologi ilmu pengetahuan yang
spesifik. CUDA sekarang bisa dimanfaatkan untuk aplikasi multimedia.
Misalnya meng-edit film dan melakukan filter gambar. Sebagai contoh dengan
aplikasi multimedia, sudah mengunakan teknologi CUDA.
Keuntungan dengan CUDA sebenarnya tidak luput dari teknologi aplikasi
yang ada. CUDA akan mempercepat proses aplikasi tertentu, tetapi tidak semua
aplikasi yang ada akan lebih cepat walaupun sudah mengunakan fitur CUDA. Hal
ini tergantung seberapa cepat procesor yang digunakan, dan seberapa kuat sebuah
GPU yang dipakai.
Comments