Konsep, Arsitektur Paralel, Pemrosesan Terdistribusi, Thread Programming, Message Passing | OpenMP, Pemrograman Cuda pada GPU

A. KONSEP PARALEL
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. ARSITEKTUR PARALEL

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.
C. PEMROSESAN
TERDISTRIBUSI

Pemrosesan paralel adalah 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 :
- Ada : digunakan 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.
D. 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.
E. PENGANTAR MESSAGE PASSING, OpenMP

Massage Passing merupkan 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 merupakan API yang mendukung multi-platform berbagi memori
multiprocessing pemrograman C , C + + , dan Fortran , pada kebanyakan
arsitektur prosesor dan system operasi , termasuk Solaris , AIX , HP-UX ,
GNU / Linux , Mac OS X , dan Windows platform. Ini terdiri dari satu
set perintah kompiler, rutinitas library, dan variable lingkungan yang
mempengaruhi perilaku run-time. OpenMP dikelola oleh nirlaba teknologi
konsorsium OpenMP Arsitektur Review Board (ARB atau OpenMP),
bersama-sama didefinisikan oleh sekelompok perangkat keras komputer
utama dan vendor perangkat lunak, termasuk AMD , IBM , Intel , Cray , HP
, Fujitsu , Nvidia , NEC , Microsoft , Texas Instruments , Oracle
Corporation , dan banyak lagi.

F. PENGANTAR PEMROGRAMAN CUDA PADA GPU

Graphics Processing Unit merupakan prosesor yang didedikasikan untuk
render cepat dalam pemrosesan polygon baik itu texturing dan shading.
Terdiri atas banyak core namun masih menggunakan arsitektur yang
sederhana, sehingga harganya relative murah dan di produksi secara
missal untuk berbagai keperluan misalnya peneilitian/ilmuah.

CUDA, Compute Unified Device Architecture merupakan suatu framework dari
bahasa pemrograman yang mendukung bahas C language, dimana mampu
berkomunikasi langsung dengan GPU dan sangat mudah bekerjasama untuk
segala multi-threading parallel execution hampir diseluruh prosesor
pada GPU. CUDA menggukan konsep nvcc sebagai ORM dalam object
programmingnya. CUDA merupakan produk dari NVIDIA sebagai produsen
graphic komputer ternama.
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.

- GPU can't directly access main memory
- CPU can't directly access GPU memory
- Need to explicitly copy data
- No printf
CUDA memiliki beberapa keunggulan dibandingkan tradisional perhitungan tujuan umum pada GPU (GPGPU) menggunakan API grafis:
- 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.
Referensi:
No comments:
Post a Comment