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:
1. Prosesor (CPU). Bagian paling
penting dalam sistem, untuk multicore terdapat lebih dari satu core yang
mengakses sebuah memori (shared memory).
2. Memori. Bagian ini dapat
diperinci lagi menjadi beberapa bagian penyusunnya seperti RAM, cache memory
dan memori eksternal.
3. Sistem Operasi. Software dasar
untuk menjalankan sistem komputer.
4. Cluster Middleware. Antarmuka
antara hardware dan software.
5. Programming Environment dan
Software Tools. Software yang digunakan untuk pemrograman paralel termasuk
software pendukungnya.
6. User Interface. Software yang
menjadi perantara hardware dengan user.
7. Aplikasi. Software berisi
program permasalahan yang akan diselesaikan.
8. 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:
1. Banyak contoh dari paradigma
sekuensial dipertimbangkan bersama-sama.
2. Programmer membayangkan
beberapa prosesor, masing-masing dengan memori, dan menulis sebuah program
untuk berjalan pada setiap prosesor.
3. 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.
Sumber:
Tidak ada komentar:
Posting Komentar