Parallel Computation 2
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 MASSAGE PASSING DAN 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.
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.
Pemrograman CUDA 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.
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.
SUMBER :
http://chachados.blogspot.co.id/2013/07/parallel-computation.html
07.14 | | 0 Comments
Parallel Computation 1
A. Parallelism concept
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 paralel 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.
Jenis-Jenis Pemrosesan
Paralel
Pemrosesan paralel dapat dibagi ke dalam beberapa
klasifikasi, sebagai berikut :
1. Berdasarkan simetri penjadwalannya, pemrosesan parallel
dapat dibagi dalam beberapa jenis:
a) Asymmetric Multiprocessing (ASMP)
b) Symmetric Multiprocessing (SMP)
c) ClusteringPoliteknik Telkom Sistem Komputer
2. Berdasarkan aliran instruksi dan datanya, pemrosesan
parallel dapat dibagi dalam beberapa jenis:
a) SISD (Single Instruction on Single Data Stream)
b) SIMD (Single Instruction on Multiple Data Stream)
c) MISD (Multiple Instruction on Single Data Stream)
d) MIMD (Multiple Instruction on Multiple Data Stream)
3. Berdasarkan kedekatan antar prosesor, pemrosesan parallel
dapat dibagi dalam beberapa jenis:
a) Multikomputer (Loosely Coupled/ local memory) dengan memori
yang terdistribusi
b) Multiprosesor (Tightly Coupled/ global memory) dengan
memori yang dapat digunakan bersama (shared memory)
B. Distributed Processing
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.
C. ARCHITECTURAL PARALLEL COMPUTER
SISD
Yang merupakan singkatan dari Single Instruction, Single Data adalah satu-satunya yang menggunakan arsitektur Von Neumann. Ini dikarenakan pada model ini hanya digunakan 1 processor saja. Oleh karena itu model ini bisa dikatakan sebagai model untuk komputasi tunggal. Sedangkan ketiga model lainnya merupakan komputasi paralel yang menggunakan beberapa processor. Beberapa contoh komputer yang menggunakan model SISD adalah UNIVAC1, IBM 360, CDC 7600, Cray 1 dan PDP 1.
Yang merupakan singkatan dari Single Instruction, Single Data adalah satu-satunya yang menggunakan arsitektur Von Neumann. Ini dikarenakan pada model ini hanya digunakan 1 processor saja. Oleh karena itu model ini bisa dikatakan sebagai model untuk komputasi tunggal. Sedangkan ketiga model lainnya merupakan komputasi paralel yang menggunakan beberapa processor. Beberapa contoh komputer yang menggunakan model SISD adalah UNIVAC1, IBM 360, CDC 7600, Cray 1 dan PDP 1.
SIMD
Yang merupakan singkatan dari Single Instruction, Multiple Data. SIMD menggunakan banyak processor dengan instruksi yang sama, namun setiap processor mengolah data yang berbeda. Sebagai contoh kita ingin mencari angka 27 pada deretan angka yang terdiri dari 100 angka, dan kita menggunakan 5 processor. Pada setiap processor kita menggunakan algoritma atau perintah yang sama, namun data yang diproses berbeda. Misalnya processor 1 mengolah data dari deretan / urutan pertama hingga urutan ke 20, processor 2 mengolah data dari urutan 21 sampai urutan 40, begitu pun untuk processor-processor yang lain. 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).
Yang merupakan singkatan dari Single Instruction, Multiple Data. SIMD menggunakan banyak processor dengan instruksi yang sama, namun setiap processor mengolah data yang berbeda. Sebagai contoh kita ingin mencari angka 27 pada deretan angka yang terdiri dari 100 angka, dan kita menggunakan 5 processor. Pada setiap processor kita menggunakan algoritma atau perintah yang sama, namun data yang diproses berbeda. Misalnya processor 1 mengolah data dari deretan / urutan pertama hingga urutan ke 20, processor 2 mengolah data dari urutan 21 sampai urutan 40, begitu pun untuk processor-processor yang lain. 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
Yang merupakan singkatan dari Multiple Instruction, Single Data. MISD menggunakan banyak processor dengan setiap processor menggunakan instruksi yang berbeda namun mengolah data yang sama. Hal ini merupakan kebalikan dari model SIMD. Untuk contoh, kita bisa menggunakan kasus yang sama pada contoh model SIMD namun cara penyelesaian yang berbeda. Pada MISD jika pada komputer pertama, kedua, ketiga, keempat dan kelima sama-sama mengolah data dari urutan 1-100, namun algoritma yang digunakan untuk teknik pencariannya berbeda di setiap processor. Sampai saat ini belum ada komputer yang menggunakan model MISD.
Yang merupakan singkatan dari Multiple Instruction, Single Data. MISD menggunakan banyak processor dengan setiap processor menggunakan instruksi yang berbeda namun mengolah data yang sama. Hal ini merupakan kebalikan dari model SIMD. Untuk contoh, kita bisa menggunakan kasus yang sama pada contoh model SIMD namun cara penyelesaian yang berbeda. Pada MISD jika pada komputer pertama, kedua, ketiga, keempat dan kelima sama-sama mengolah data dari urutan 1-100, namun algoritma yang digunakan untuk teknik pencariannya berbeda di setiap processor. Sampai saat ini belum ada komputer yang menggunakan model MISD.
MIMD
Yang merupakan singkatan dari Multiple Instruction, Multiple Data. MIMD menggunakan banyak processor dengan setiap processor memiliki instruksi yang berbeda dan mengolah data yang berbeda. Namun banyak komputer yang menggunakan model MIMD juga memasukkan komponen untuk model SIMD. Beberapa komputer yang menggunakan model MIMD adalah IBM POWER5, HP/Compaq AlphaServer, Intel IA32, AMD Opteron, Cray XT3 dan IBM BG/L.
Yang merupakan singkatan dari Multiple Instruction, Multiple Data. MIMD menggunakan banyak processor dengan setiap processor memiliki instruksi yang berbeda dan mengolah data yang berbeda. Namun banyak komputer yang menggunakan model MIMD juga memasukkan komponen untuk model SIMD. Beberapa komputer yang menggunakan model MIMD adalah IBM POWER5, HP/Compaq AlphaServer, Intel IA32, AMD Opteron, Cray XT3 dan IBM BG/L.
Singkatnya untuk perbedaan antara komputasi tunggal dengan komputasi paralel, bisa digambarkan pada gambar di bawah ini:
Gambar 1 Penyelesaian Sebuah Masalah pada Komputasi Tunggal
Gambar 2 Penyelesaian Sebuah Masalah pada Komputasi Paralel
Dari
perbedaan kedua gambar di atas, kita dapat menyimpulkan bahwa kinerja
komputasi paralel lebih efektif dan dapat menghemat waktu untuk
pemrosesan data yang banyak daripada komputasi tunggal.
Dari
penjelasan-penjelasan di atas, kita bisa mendapatkan jawaban mengapa
dan kapan kita perlu menggunakan komputasi paralel. Jawabannya adalah
karena komputasi paralel jauh lebih menghemat waktu dan sangat efektif
ketika kita harus mengolah data dalam jumlah yang besar. Namun
keefektifan akan hilang ketika kita hanya mengolah data dalam jumlah
yang kecil, karena data dengan jumlah kecil atau sedikit lebih efektif
jika kita menggunakan komputasi tunggal.
SUMBER :
http://komputer.yn.lt/adalah/?arti=Distributed%20Processing
07.10 | | 0 Comments
Langganan:
Postingan (Atom)
Mengenai Saya
Diberdayakan oleh Blogger.