Konsep Paralel
Paralel Processing adalah
kemampuan menjalankan tugas atau aplikasi lebih dari satu aplikasi dan
dijalankan secara simultan atau bersamaan pada sebuah komputer. Secara
umum, Paralel Processing adalah sebuah teknik dimana sebuah masalah dibagi dalam beberapa masalah kecil untuk mempercepat proses penyelesaian masalah.
Hukum Paralel Processing
Hukum Amdahl
“Peningkatan kecepatan secara paralel akan menjadi linear, melipatgandakan kemampuan proses sebuah komputer dan mengurangi separuh dari waktu proses yang diperlukan untuk menyelesaikan sebuah masalah.”Hukum Gustafson
“Sebuah komputasi paralel berjalan dengan menggunakan dua atau lebih mesin untuk mempercepat penyelesaian masalah dengan memperhatikan faktor eksternal, seperti kemampuan mesin dan kecepatan proses tiap-tiap mesin yang digunakan
Komputasi Parallel
Komputasi Parallel adalah salah satu teknik melakukan komputasi secara bersamaan dengan memanfaatkan beberapa komputer secara bersamaan.
Komputasi Paralel membutuhkan :
- Algoritma
- Bahasa Pemograman
- Compiler
Contoh Komputasi Paralel:
Pada gambar diatas terdapat sebuah masalah, dimana masalah tersebut
dibagi menjadi beberapa bagian lalu bagian dari masalah tersebut
dibagikan ke-tiga CPU untuk diselesaikan secara bersamaan.
Distributed Processing
Distributed Processing atau Distributed Computing System adalah
sekumpulan peralatan pemrosesan yang saling terhubung melalui jaringan
komputer dan saling bekerjasama untuk mengerjakan tugas-tugas tertentu.
Yang dimaksud dengan peralatan pemrosesan dataadalah peralatan komputasi yang dapat mengeksekusi sendiri sebuah program.
Sekumpulan peralatan yang saling terhubung akan mendistribusikan berbagai macam hal, dianataranya adalah:
- Processing Logic / Pemrosesan secara logis
- Fungsi. Beberapa fungsi sistem komputer dapat didelegasikan ke beberapa hardware atau software
- Data
- Kontrol
Kriteria Distributed Processing
Pemrosesan terdistribusi (Distributed Processing) dapat dikelompokkan berdasarkan beberapa kriteria, yaitu:
- Degree of Computing / tingkat hubungan : Tinggi atau rendah ? Jumlah data yang saling digunakan dibandingkan dengan jumlah pemrosesan lokal
- Struktur antar hubungan : kuat atau lemah ? Jika komponen di Share dikatakan kuat ?
- Kesalingtergantungan komponen-komponen : Kuat atau lemah dalam mengekseskusi proses.
- Keselarasan antar komponen : selaras atau tidak selaras ?
Architectural Paralel Computer
Dalam taksonomi arsitektur paralel ada dua keluarga arsitektur paralel yang banyak diterapkan adalah
Single Instruction Single Data (SISD)
Single Instruction Single Data (SISD) ini
memiliki hanya satu instruksi yang dieksekusi secara serial. Komputer
ini adalah tipe komputer konvensional. Menururut mereka tipe komputer
ini tidak ada dalam praktik komputer paralel karena bahkan mainframe pun
tidak lagi menggunakan satu processor. Klasifikasi ini sekedar untuk
melengkapi definisi komputer paralel. Beberapa contoh komputer yang
menggunakan model SISD adalah UNIVACI, IBM 360, CDC 7600, Cray 1 dan PDP
1.
Single Instruction Multiple Data (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).
Multiple Instruction Multiple Data (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.
Thread Programming
Threading / Thread adalah sebuah alur kontrol dari sebuah proses. Konsep threading adalah menjalankan 2 proses ( proses yang sama atau proses yang berbeda ) dalam satu waktu.
Contoh:
Sebuah web browser mempunyai thread untuk menampilkan gambar atau
tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari
network.
Threading dibagi menjadi 2, yaitu :
- Static Threading
Teknik ini biasa digunakan untuk komputer dengan chip multi processors
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.
- Dynamic Multithreading
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).
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).
Pengantar Programming GPU-CUDA
Graphic Processing Unit (GPU)
GPU (Graphic Processing Unit) sendiri
merupakan sebuah alat/hardware, yang berfungsi sebagai render grafis
terdedikasi dalam kesatuan sistem hardware PC atau Notebook. GPU bisa
berada pada Video Card khusus (VGA Card) atau terintegrasi dalam
Motherboard berupa Integrated GPU. GPU berfungsi untuk mengolah dan
memanipulasi grafis pada CPU (Central Processing Unit), untuk nantinya
ditampilkan dalam bentuk Visual Grafis pada Monitor (output).
CUDA (Compute Unified Device Architecture)
CUDA (Compute Unified Device Architecture) adalah arsitektur
komputasi paralel yang dikembangkan oleh NVIDIA. CUDA adalah mesin
komputasi dalam pemrosesan grafis NVIDIA unit (GPU) yang dapat diakses
oleh pengembang perangkat lunak melalui varian dari bahasa pemrograman
standar industri. CUDA merupakan kumpulan program-program yang
menerjemahkan teks dalam bentuk bahasa komputer (computer language)
berupa source language/source code, ke dalam bentuk bahasa komputer yang
lain (target language/object code). Arsitektur CUDA memungkinkan GPU
(yang telah support CUDA) menjadi arsitektur terbuka seperti layaknya
CPU (Central Processing Unit atau Processor). Hanya, tidak seperti CPU,
GPU memiliki arsitektur banyak-inti yang pararel. Setiap inti memiliki
kemampuan untuk menjalankan ribuan “thread” secara simultan. Jika
aplikasi yang dijalankan sesuai dengan arsitektur ini, GPU dapat
menyediakan keuntungan yang lebih besar dari segi performa proses
aplikasi tersebut.
Komponen Pendukung CUDA
Secara umum, komponen-komponen pendukung CUDA adalah:
- Aplikasi, adalah perangkat lunak yang dibuat oleh penguna, memakai bahasa pemrograman khusus (kembangan C).
- Pustaka perangkat lunak, yang menyediakan layanan dasar untuk program aplikasi mengakses CPU maupun GPU.
- Perangkat keras khusus, yaitu GPU yang menyediakan mesin paralel.
- Perangkat keras CPU, sebagai mesin sekuensial.
Kelebihan CUDA:
- CUDA menggunakan bahasa “C” standar, dengan beberapa ekstensi yang simpel.
- Shared memory – CUDA menyingkapkan wilayah memory yang cepat (berukuran 16 KB) yang dapat di bagi diantara thread-thread yang ada. Hal ini dapat digunakan sebagai user-managed-cache, sehingga mengaktifkan bandwitdth yang lebih besar (dari besaran bandwidth yang dimungkinkan), menggunakan texture loops.
- Proses download dan readbacks yang lebih cepat, dari dan ke GPU.
- Support penuh terhadap operasi integer dan bitwise.
Kelemahan CUDA:
- CUDA tidak support texture rendering,
- Bus Bandwidth dan latensi antara CPU dengan GPU bisa jadi bottleneck (tidak imbang),
- CUDA hanya terdapat pada GPU Nvidi
#Agung Budoyo
#Komputasi Paralel
#4IA19