Pengertian Komputasi Paralel
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.
Di dalam komputasi parallel ada yang dinamakan dengan
pemrograman parallel. Pemrograman paralel adalah teknik pemrograman komputer
yang memungkinkan eksekusi perintah atau 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
digunakanadalah sistem terdistribusi (distributed computing).
Perlu
diingat adalah komputasi paralel berbeda dengan multitasking. Pengertian
multitasking adalah komputer dengan processor tunggal mengeksekusi beberapa
tugas secara bersamaan. Walaupun beberapa orang yang bergelut di bidang
sistem operasi beranggapan bahwa komputer tunggal tidak bisa melakukan
beberapa pekerjaan sekaligus, melainkan proses penjadwalan yang berlakukan
pada sistem operasi membuat komputer seperti mengerjakan tugas secara
bersamaan. Sedangkan komputasi paralel sudah dijelaskan sebelumnya, bahwa
komputasi paralel menggunakan beberapa processor atau komputer.Selain itu
komputasi paralel tidak menggunakan arsitektur Von Neumann.
Tujuan Komputasi Paralel
Tujuan
utama penggunaan komputasi paralel adalah untuk mempersingkat waktu
eksekusi program yang menggunakan komputasi serial. Beberapa alasan lain
yang menjadikan suatu program menggunakan komputasi paralel antara lain :
1. Untuk
permasalahan yang besar, terkadang sumber daya komputasi yang ada sekarang
belum cukup mampu untuk mendukung penyelesaian terhadap permasalahan tersebut.
2. Adanya
sumber daya non-lokal yang dapat digunakan melalui jaringan atau internet.
3. Penghematan
biaya pengadaan perangkat keras, dengan menggunakan beberapa mesin yang murah
sebagai alternatif penggunaan satu mesin yang bagus tapi mahal, walaupun
menggunakan sebuah prosesor.
4. Adanya
keterbatasan kapasitas memori pada mesin untuk komputasi serial.
Hambatan Komputasi Paralel
Penggunaan
komputasi paralel sebagai solusi untuk mempersingkat waktu yang dibutuhkan
untuk eksekusi program mempunyai beberapa hambatan. Hambatan-hambatan tersebut
antara lain adalah
1. Hukum
Amdahl
percepatan waktu eksekusi program dengan menggunakan komputasi
paralel tidak akan pernah mencapai kesempurnaan karena selalu ada bagian
program yang harus dieksekusi secara serial.
2. Hambatan
yang diakibatkan karena beban jaringan
dalam eksekusi program secara paralel, prosesor yang berada di
mesin yang berbeda memerlukan pengiriman dan penerimaan data (atau
instruksi) melalui jaringan. Untuk program yang dibagi menjadi task-task yang
sering membutuhkan sinkronisasi, network latency menjadi masalah utama.
Permasalahan ini muncul karena ketika suatu task membutuhkan data dari task
yang lain, state ini dikirimkan melalui jaringan di mana kecepatan transfer
data kurang dari kecepatan prosesor yang mengeksekusi instruksi task .
Hal ini menyebabkan task tersebut harus menunggu sampai data sampai terlebih
dahulu, sebelum mengeksekusi instruksi selanjutnya. Jumlah waktu yang
dibutuhkan untuk berkomunikasi melalui jaringan antar dua titik adalah jumlah
dari startup time, per-hop time, dan per-word transfer time.
3. Hambatan
yang terkait dengan beban waktu untuk inisiasi task, terminasi task, dan
sinkronisasi.
Distributed Processing
Konsep
Distribusi Processing atau lebih dikenal dengan Distributed Processing yaitu 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.
Arsitektur Komputasi Paralel
Taksonomi
Flynn membagi arsitektur komputer paralel dengan menggunakan sudut pandang
instruksi dan data, sehingga terdapat empat jenis arsitektur komputer paralel :
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.
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.
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.
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.
Arsitektur
Memori pada Komputasi Paralel
Pada
umumnya, ada dua buah arsitektur memori pada komputer paralel, yaitu shared
memory dan distributed memory.
1. Shared
memory
arsitektur ini menyediakan global addressing sehingga
berbagai prosesor mempunyai cara pengaksesan memori yang seragam. Setiap
perubahan pada suatu lokasi memori oleh suatu prosesor akan selalu terlihat
oleh prosesor lain. Kelebihan dari arsitektur ini antara lain adalah
pengaksesan memori yang user friendly dan performansi yang baik dalam
penggunaan data bersama antar task. Sedangkan kekurangannya antara lain adalah
kurangnya skalabilitas ketika terjadi penambahan prosesor, di mana akan terjadi
peningkatan traffic antara prosesor ke shared memory dan antara cache
coherent system dengan memori sebenarnya.
§ Berdasarkan
frekuensi akses, ada dua jenis shared memory :Uniform Memory Access (UMA) :
setiap prosesor memiliki hak pengaksesan yang seragam dengan prosesor lain
§ Non
Uniform Memory Access (NUMA) : tidak semua prosesor memiliki hak yang sama
dalam mengakses memori
2. Distributed
memory
arsitektur ini mempunyai karakteristik di mana setiap prosesor
memiliki memorinya masing-masing, sehingga eksekusi instruksi dapat berjalan
secara independen antara satu prosesor dengan yang lain. Prosesor akan
menggunakan jaringan ketika membutuhkan akses ke memori non lokal. Akses ini
sepenuhnya menjadi tanggung jawab penulis program. Kelebihan dari
arsitektur ini adalah terjaganya skalabilitas ketika terjadi penambahan
prosesor. Sedangkan kekurangannya adalah penulis program harus berurusan dengan
detail komunikasi data antara prosesor dan memori non lokal.
Pengantar Thread Programming
Dalam pemrograman komputer, sebuah thread adalah informasi
terkait dengan penggunaan sebuah program tunggal yang dapat menangani beberapa
pengguna secara bersamaan. Dari program point-of-view, 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.
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.
Pemrograman Cuda (Graphical
Processing Unit)
Sebagaimana
telah kita ketahui bahwa Cuda adalah platform komputasi paralel dan model
pemrograman yang diciptakan oleh perusahaan perangkat keras dunia yaitu NVIDIA.
hal ini memungkinkan peningkatan dramatis dalam kinerja komputasi dengan
memanfaatkan kekuatan dari Graphics Processing Unit(GPU).
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 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. VGA – VGA dari Nvidia yang sudah
menggunakan teknologi CUDA antara lain : Nvidia GeForce GTX 280, GTX 260,9800
GX2, 9800 GTX+,9800 GTX,9800 GT,9600 GSO, 9600 GT,9500 GT,9400 GT,9400
mGPU,9300 mGPU,8800 Ultra,8800 GTX,8800 GTS,8800 GT,8800 GS,8600 GTS,8600
GT,8500 GT,8400 GS, 8300 mGPU, 8200 mGPU, 8100 mGPU, dan seri sejenis untuk
kelas mobile (VGA notebook).
Singkatnya,
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. Software TMPGenc 4.0 misalnya
membuat aplikasi editing dengan mengambil sebagian proces dari GPU dan CPU. VGA
yang dapat memanfaatkan CUDA hanya versi 8000 atau lebih tinggi.
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. Dan
bagian terpenting adalah aplikasi apa yang memang memanfaatkan penuh kemampuan
GPU dengan teknologi CUDA. Kedepan seperti pengembang software Adobe akan ikut
memanfaatkan fitur CUDA pada aplikasi mereka. Jawaban akhir adalah, untuk
memanfaatkan CUDA kembali melihat aplikasi software yang ada. Apakah software
yang ada memang mampu memanfaatkan CUDA dengan proses melalui GPU secara penuh.
Hal tersebut akan berguna untuk mempercepat selesainya proses pada sebuah
aplikasi. Dengan kecepatan proses GPU, aplikasi akan jauh lebih cepat.
Khususnya teknologi ilmu pengetahuan dengan ramalan cuaca, simulator
pertambangan atau perhitungan yang rumit dibidang keuangan. Sedangkan aplikasi
umum sepertinya masih harus menunggu.
Paralelisme
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 parallel 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 multiprogramming, 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.
Multiprocessing adalah dukungan sebuah sistem untuk mendukung lebih dari satu
prosesor dan mengalokasikan tugas kepada prosesor-prosesor tersebut.
Multiprocessing sering diimplementasikan dalam perangkat keras (dengan
menggunakan beberapa CPU sekaligus), sementara multiprogramming 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 :
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.
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.
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.
Referensi :
#DianPramesti
#4IA19
#ParallelComputation
#PengantarKomputasiModern
Tidak ada komentar:
Posting Komentar