Parallel
Computation
Komputasi paralel (Paralell Computation)
adalah salah satu teknik melakukan komputasi secara bersamaan dengan
memanfaatkan beberapa komputer independen 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 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. Adapun tujuan
utama komputasi paralel adalah meningkatkan kinerja komputer dalam
menyelesaikan berbagai masalah. Dengan membagi sebuah masalah besar ke dalam
beberapa masalah kecil, membuat kinerja menjadi cepat.
Komputasi paralel membutuhkan :
- Algoritma
- Bahasa Pemrogaman
- Compiler
Masalah komputasi harus bisa :
- Dipecah menjadi potongan-potongan diskrit pekerjaan yang bisa dipecahkan secara bersamaan;
- Dijalankan beberapa instruksi program setiap saat;
- Dipecahkan dalam waktu yang lebih singkat dengan beberapa sumber daya komputasi dibandingkan dengan satu sumber komputasi.
Sumber daya perhitungan biasanya :
- Satu komputer dengan beberapa prosesor / core
- Sejumlah komputer seperti itu sewenang - wenang yang dihubungkan oleh sebuah jaringan
Mengapa menggunakan komputasi paralel dibandingkan
dengan komputasi serial ? Komputasi paralel jauh lebih cocok untuk pemodelan,
simulasi dan pemahaman fenomena dunia nyata yang kompleks, diantaranya :
- Save Time
Secara teori, membuang lebih banyak sumber
daya pada suatu tugas akan memperpendek waktu sampai selesai, dengan
penghematan biaya potensial. Komputer paralel bisa dibangun dari komponen
komoditas murah.
- Solve Larger (Lebih Kompleks Masalah)
Banyak masalah begitu besar dan / atau rumit
sehingga tidak praktis atau tidak mungkin untuk menyelesaikannya di satu
komputer, terutama mengingat keterbatasan memori komputer.
- Provide Concurrency (Menyediakan Konflik)
Sumber daya komputasi tunggal hanya bisa melakukan satu hal pada satu waktu.
Beberapa sumber daya komputasi dapat melakukan banyak hal sekaligus.
Distributed
Processing
Yang dimaksud Distributed 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.
Tahun 1970 setelah beban pekerjaan bertambah
banyak dan harga perangkat komputer besar mulai terasa sangat mahal, maka
mulailah digunakan konsep proses distribusi (Distributed Processing). Dalam
proses ini beberapa host komputer mengerjakan sebuah pekerjaan besar secara
paralel untuk melayani beberapa terminal yang tersambung secara seri disetiap
host komputer. Dalam proses distribusi sudah mutlak diperlukan perpaduan yang
mendalam antara teknologi komputer dan telekomunikasi, karena selain proses
yang harus didistribusikan, semua host komputer wajib melayani terminal - terminalnya
dalam satu perintah dari komputer pusat.
Contoh dari Distributed Data Processing System
adalah
- ATM, komputer yang dirancang untuk tugas-tugas melaksanakan proyek, analisis finansial, penjadwalan waktu dan akuntansi.
- 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.
Architectural Parallel Computer
Arsitektur komputer paralel ada beberapa versi
pengertian. Di sini saya akan menjelaskan sedikit tentang arsitektur komputer
menurut Flynn. Sesuai taksonomi Flynn, seorang Designer Processor, Organisasi
Prosesor dibagi menjadi 4 :
- SISD, Single Instruction – Single Data. Komputer ini memiliki hanya satu prosesor dan satu instruksi yang dieksekusi secara serial. Komputer ini adalah tipe komputer konvensional. 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. Sampai saat ini belum ada komputer yang menggunakan model MISD karena sistemnya tidak mudah.
- 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. 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.
Thread Programming
Threading /
Thread adalah sebuah alur kontrol dari sebuah proses layanan informasi yang
diminta oleh user. Konsep threading adalah menjalankan 2 proses yang sama atau
proses yang berbeda dalam satu waktu. Banyak sistem operasi modern telah
memiliki konsep yang memungkinkan sebuah proses untuk memiliki eksekusi
multi-threads. Keuntungan dari multithreaded meliputi peningkatan respon dari
pengguna, pembagian sumber daya proses, ekonomis, dan kemampuan untuk mengambil
keuntungan dari arsitektur multiprosesor.
Multithreaded
Process
Benefits /
manfaat
- Kemampuan reaksi
- Sumber daya berbagi
- Ekonomi
- Scalabilas
Thread
bermanfaat untuk Multi threading yang berguna untuk Multi processor dan Single processor.
Kegunaan untuk system Multi processor, adalah :
- Sebagai unit pararel atau tingkat granularitas pararelisme.
- Peningkatan kinerja disbanding berbasis proses.
Kegunaan
Multithreading pada single processor, adalah :
- Kerja foreground dan background sekaligus di satu aplikasi.
- Penanganan asynchronous processing menjadi lebih baik.
- Mempercepat eksekusi program.
- Pengorganisasian program menjadi lebih baik.
Multicore
Programming
Multicore
systems mendesak/memaksa para programmer untuk melewati tantangan yang meliputi
:
- Pembagian aktivitas
- Saldo/Timbangan
- Data yang telah hancur
- Ketergantungan Data
- Pengujian dan Debugging
Kegunaan
Thread
Multithreading
berguna untuk multiprocessor dan singleprocessor. Kegunaan untuk system
multiprocessor adalah :
- Sebagai unit pararel atau tingkat granularitas pararelisme.
- Peningkatan kinerja disbanding berbasis proses.
Kegunaan
multithreading pada singleprocessor, adalah :
- Kerja foreground dan background sekaligus di satu aplikasi.
- Penanganan asynchronous proseccing menjadi baik.
- Mempercepat eksekusi program.
- Pengorganisasian program menjadi lebih baik.
Manfaat
utama banyak thread di satu proses adalah memaksimumkan derajat kongkurensi
antara operasi-operasi yang terkait erat. Aplikasi jauh lebih efisien
dikerjakan sebagai sekumpulan thread disbanding sekumpulan proses.
Threading
dibagi menjadi 2 diantaranya :
- Static Threading
Teknik ini
biasa digunakan untuk komputer dengan chip multiprocessors. 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 disebut static karena lambat. Teknik ini juga tidak
mudah diterapkan dan beresiko mengalami kesalahan. Alasannya, pembagian
pekerjaan yang dinamis di antara thread-thread menyebabkan load balancing-nya
cukup rumit. 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
Concurrency
platform ini menyediakan scheduler yang melakukan load balacing secara
otomatis. Platformnya masih dalam pengembangan namun sudah mendukung dua fitur,
yaitu nested parallelism dan parallel loops. Nested parallelism memungkinkan
sebuah subroutine dimunculkan dalam jumlah banyak sehingga program utama tetap
berjalan sementara subroutine menghitung hasilnya. Sedangkan parallel loops
seperti halnya fungsi for namun memungkinkan iterasi loop dilakukan secara
bersamaan.
Massage Passing, OpenMP
OpenMP
(Open Multi-Processing) adalah sebuah antarmuka pemrograman aplikasi (API) yang
mendukung multi processing shared 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, 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 merupakan
model portabel dan skalabel yang memberikan interface sederhana dan fleksibel
bagi programer shared memory dalam membangun aplikasi paralel. Program
multithread dapat ditulis dalam berbagai cara. Beberapa diantaranya
memungkinkan untuk melakukan interaksi yang kompleks antar thread. OpenMP
mencoba untuk memberikan kemudahan pemrograman serta membantu dalam menghindari
kesalahan program, melalui pendekatan terstruktur. Pendekatan ini dikenal sebagai
model pemrograman fork-join.
Sejarah
OpenMP dimulai dari diterbitkannya API pertama untuk Fotran 1.0 pada Oktober
1997 oleh OpenMP Architecture Review Board (ARB). Oktober tahun berikutnya
OpenMP Architecture Review Board (ARB) merilis standart C / C++. Pada tahun
2000 mengeluarkan versi 2.0 untuk fotran dan poda tahun 2002 dirilis versi 2.0
untuk C / C++. Pada tahun 2005 dirilis versi 2.5 yang merupakan pengabungan
fotran, C, dan C++/ pada mei 2008 versi 3.0 yang terdapat didalmnya konsept
tasks dan task construct.
Kegunaan
dari Message Passing ialah :
- Menyediakan fungsi-fungsi untuk menukar pesan.
- Menulis kode paralel secara portable.
- Mendapatkan performa yang tinggi dalam pemrograman paralel.
- Menghadapi permasalahan yang melibatkan hubungan data irregular atau dinamis yang tidak begitu cocok dengan model data paralel.
OpenMP
mengimplementasi multithreading. Bagian kode yang akan dijalankan secara
parallel ditandai sesuai dengan Preprocessor directif sehingga akan membuat
thread-thread sebelum dijalnkan. Setiap thread memiliki id yang di buat
menggunakan fungsi (omp_get_thread_num() pada C/C++ dan OMP_GET_THREAD_NUM()
pada Fortran). 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. Fungsi OpenMP berada pada file header yang berlabel “omp.h” di C / C++.
OpenMP
bekerja berdasarkan model shared memory, maka secara default data dibagi
diantara thread-thread dan dapat terlihat dari setiap thread. Terkadang program
akan membutuhkan variabel dengan nilai thread spesifik. Jika setiap thread
memiliki variabel duplikat akan sangat berpotensi memiliki nilai yang
berbeda-beda pada setiap variabel duplikat tersebut.
Sinkronisasi
(pengkoordinasian) aksi dari thread adalah sesuatu yang sangat penting untuk
menjamin data yang harus dibagi dan untuk mencegah terjadinya data race
condition. Secara default OpenMP telah menyediakan mekanisme untuk menunggu
thread dalam suatu tim thread sehingga semua thread menyelesaikan tugasnya
dalam region, kemudian dapat melanjutkan ke proses selanjutnya. Mekanisme ini
dikenal sebagai barrier.
Pemrograman CUDA GPU
CUDA
(Compute Unified Device Architecture) merupakan platform komputasi paralel dan
model pemrograman yang membuat penggunaan GPU untuk komputasi tujuan umum
sederhana dan elegan. Pengembang masih memprogram di C, C ++, Fortran yang
familiar, atau daftar bahasa pendukung yang terus berkembang, dan menggabungkan
ekstensi bahasa ini dalam bentuk beberapa kata kunci dasar.Kata kunci ini
membiarkan pengembang mengekspresikan sejumlah besar paralelisme dan
mengarahkan kompilator ke bagian aplikasi yang memetakan ke GPU.
GPU (
Graphical Processing Unit ) 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, 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.
Teknologi
CUDA 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.
DAFTAR
PUSTAKA
http://rachmatwidyan.blogspot.com/2018/03/parallel-computation.html
https://pandanwulan.wordpress.com/2015/06/28/konsep-distribusi-processing-arsitektur-komputer-paralel-thread-programming-message-passing-atau-openmp-dan-pemrograman-cuda-pada-gpu/
https://id.wikipedia.org/wiki/Jaringan_komputer
https://andri102.wordpress.com/game/soft-skill/konsep-komputasi-parallel-processing/#:~:text=Amdahl%20berpendapat%2C%20%E2%80%9CPeningkatan%20kecepatan%20secara,diperlukan%20untuk%20menyelesaikan%20sebuah%20masalah.%E2%80%9D
https://fikrinm93.wordpress.com/2016/06/17/242/